aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--contrib/gcc/cccp.1674
-rw-r--r--contrib/gcc/config/alpha/crtbegin.asm192
-rw-r--r--contrib/gcc/config/alpha/crtend.asm108
-rw-r--r--contrib/gcc/config/alpha/gdb-osf12.h26
-rw-r--r--contrib/gcc/config/alpha/gdb-osf2.h26
-rw-r--r--contrib/gcc/config/alpha/gdb.h26
-rw-r--r--contrib/gcc/config/alpha/osf2.h32
-rw-r--r--contrib/gcc/config/i386/freebsd-elf.h257
-rw-r--r--contrib/gcc/config/i386/freebsd.h.fixed257
-rw-r--r--contrib/gcc/config/i386/x-freebsd3
-rw-r--r--contrib/gcc/cp/cfns.h472
-rw-r--r--contrib/gcc/cp/g++.c582
-rw-r--r--contrib/gcc/cp/reno.texi752
-rw-r--r--contrib/gcc/cpp.11
-rw-r--r--contrib/gcc/doc/install-old.texi725
-rw-r--r--contrib/gcc/doc/install.texi3902
-rwxr-xr-xcontrib/gcc/doc/install.texi2html31
-rw-r--r--contrib/gcc/f/g77.1365
-rw-r--r--contrib/gcc/gcc.14191
-rw-r--r--contrib/gcc/objc/sendmsg.c651
-rw-r--r--contrib/libf2c/ChangeLog.egcs200
-rw-r--r--contrib/libf2c/libI77/rawio.h45
-rw-r--r--contrib/libg++/COPYING339
-rw-r--r--contrib/libg++/COPYING.LIB481
-rw-r--r--contrib/libg++/include/ChangeLog990
-rw-r--r--contrib/libg++/include/ansidecl.h141
-rw-r--r--contrib/libg++/include/demangle.h89
-rw-r--r--contrib/libg++/include/floatformat.h88
-rw-r--r--contrib/libg++/include/getopt.h129
-rw-r--r--contrib/libg++/include/libiberty.h137
-rw-r--r--contrib/libg++/include/obstack.h518
-rw-r--r--contrib/libg++/libg++/ChangeLog2271
-rw-r--r--contrib/libg++/libg++/Makefile.in263
-rw-r--r--contrib/libg++/libg++/NEWS573
-rw-r--r--contrib/libg++/libg++/README247
-rw-r--r--contrib/libg++/libg++/README.SHLIB38
-rw-r--r--contrib/libg++/libg++/TODO13
-rw-r--r--contrib/libg++/libg++/g++FAQ.texi1986
-rw-r--r--contrib/libg++/libg++/genclass/ChangeLog27
-rw-r--r--contrib/libg++/libg++/genclass/Makefile.in23
-rw-r--r--contrib/libg++/libg++/genclass/configure.in26
-rw-r--r--contrib/libg++/libg++/genclass/expected.out1027
-rwxr-xr-xcontrib/libg++/libg++/genclass/genclass.sh452
-rwxr-xr-xcontrib/libg++/libg++/genclass/gentest.sh174
-rw-r--r--contrib/libg++/libg++/libg++.texi4803
-rw-r--r--contrib/libg++/libg++/src/ACG.cc292
-rw-r--r--contrib/libg++/libg++/src/ACG.h68
-rw-r--r--contrib/libg++/libg++/src/AllocRing.cc110
-rw-r--r--contrib/libg++/libg++/src/AllocRing.h62
-rw-r--r--contrib/libg++/libg++/src/Binomial.cc34
-rw-r--r--contrib/libg++/libg++/src/Binomial.h55
-rw-r--r--contrib/libg++/libg++/src/BitSet.cc1104
-rw-r--r--contrib/libg++/libg++/src/BitSet.h360
-rw-r--r--contrib/libg++/libg++/src/BitString.cc1608
-rw-r--r--contrib/libg++/libg++/src/BitString.h763
-rw-r--r--contrib/libg++/libg++/src/ChangeLog1213
-rw-r--r--contrib/libg++/libg++/src/Complex.h10
-rw-r--r--contrib/libg++/libg++/src/CursesW.cc257
-rw-r--r--contrib/libg++/libg++/src/CursesW.h603
-rw-r--r--contrib/libg++/libg++/src/DLList.cc327
-rw-r--r--contrib/libg++/libg++/src/DLList.h139
-rw-r--r--contrib/libg++/libg++/src/DiscUnif.cc29
-rw-r--r--contrib/libg++/libg++/src/DiscUnif.h72
-rw-r--r--contrib/libg++/libg++/src/Erlang.cc32
-rw-r--r--contrib/libg++/libg++/src/Erlang.h68
-rw-r--r--contrib/libg++/libg++/src/Fix.cc670
-rw-r--r--contrib/libg++/libg++/src/Fix.h523
-rw-r--r--contrib/libg++/libg++/src/Fix16.cc238
-rw-r--r--contrib/libg++/libg++/src/Fix16.h648
-rw-r--r--contrib/libg++/libg++/src/Fix24.cc329
-rw-r--r--contrib/libg++/libg++/src/Fix24.h597
-rw-r--r--contrib/libg++/libg++/src/Geom.cc30
-rw-r--r--contrib/libg++/libg++/src/Geom.h52
-rw-r--r--contrib/libg++/libg++/src/GetOpt.cc253
-rw-r--r--contrib/libg++/libg++/src/GetOpt.h129
-rw-r--r--contrib/libg++/libg++/src/HypGeom.cc30
-rw-r--r--contrib/libg++/libg++/src/HypGeom.h70
-rw-r--r--contrib/libg++/libg++/src/Incremental.h12
-rw-r--r--contrib/libg++/libg++/src/Intdouble.cc142
-rw-r--r--contrib/libg++/libg++/src/Integer.cc2282
-rw-r--r--contrib/libg++/libg++/src/Integer.h1134
-rw-r--r--contrib/libg++/libg++/src/Integer.hP30
-rw-r--r--contrib/libg++/libg++/src/LogNorm.cc36
-rw-r--r--contrib/libg++/libg++/src/LogNorm.h78
-rw-r--r--contrib/libg++/libg++/src/MLCG.cc103
-rw-r--r--contrib/libg++/libg++/src/MLCG.h87
-rw-r--r--contrib/libg++/libg++/src/Makefile.in75
-rw-r--r--contrib/libg++/libg++/src/NegExp.cc28
-rw-r--r--contrib/libg++/libg++/src/NegExp.h55
-rw-r--r--contrib/libg++/libg++/src/Normal.cc60
-rw-r--r--contrib/libg++/libg++/src/Normal.h66
-rw-r--r--contrib/libg++/libg++/src/Obstack.cc127
-rw-r--r--contrib/libg++/libg++/src/Obstack.h218
-rw-r--r--contrib/libg++/libg++/src/Pix.h5
-rw-r--r--contrib/libg++/libg++/src/Poisson.cc36
-rw-r--r--contrib/libg++/libg++/src/Poisson.h51
-rw-r--r--contrib/libg++/libg++/src/RNG.cc131
-rw-r--r--contrib/libg++/libg++/src/RNG.h58
-rw-r--r--contrib/libg++/libg++/src/Random.cc4
-rw-r--r--contrib/libg++/libg++/src/Random.h54
-rw-r--r--contrib/libg++/libg++/src/Rational.cc416
-rw-r--r--contrib/libg++/libg++/src/Rational.h290
-rw-r--r--contrib/libg++/libg++/src/Regex.cc149
-rw-r--r--contrib/libg++/libg++/src/Regex.h78
-rw-r--r--contrib/libg++/libg++/src/RndInt.cc4
-rw-r--r--contrib/libg++/libg++/src/RndInt.h176
-rw-r--r--contrib/libg++/libg++/src/SLList.cc247
-rw-r--r--contrib/libg++/libg++/src/SLList.h129
-rw-r--r--contrib/libg++/libg++/src/Sample.cc241
-rw-r--r--contrib/libg++/libg++/src/SmplHist.cc112
-rw-r--r--contrib/libg++/libg++/src/SmplHist.h72
-rw-r--r--contrib/libg++/libg++/src/SmplStat.cc160
-rw-r--r--contrib/libg++/libg++/src/SmplStat.h69
-rw-r--r--contrib/libg++/libg++/src/String.cc1307
-rw-r--r--contrib/libg++/libg++/src/String.h1284
-rw-r--r--contrib/libg++/libg++/src/Uniform.cc27
-rw-r--r--contrib/libg++/libg++/src/Uniform.h71
-rw-r--r--contrib/libg++/libg++/src/Weibull.cc33
-rw-r--r--contrib/libg++/libg++/src/Weibull.h74
-rw-r--r--contrib/libg++/libg++/src/bitand.c41
-rw-r--r--contrib/libg++/libg++/src/bitany.c38
-rw-r--r--contrib/libg++/libg++/src/bitblt.c97
-rw-r--r--contrib/libg++/libg++/src/bitclear.c37
-rw-r--r--contrib/libg++/libg++/src/bitcopy.c41
-rw-r--r--contrib/libg++/libg++/src/bitcount.c64
-rw-r--r--contrib/libg++/libg++/src/bitdo1.h32
-rw-r--r--contrib/libg++/libg++/src/bitdo2.h184
-rw-r--r--contrib/libg++/libg++/src/bitinvert.c37
-rw-r--r--contrib/libg++/libg++/src/bitlcomp.c81
-rw-r--r--contrib/libg++/libg++/src/bitprims.h125
-rw-r--r--contrib/libg++/libg++/src/bitset1.c37
-rw-r--r--contrib/libg++/libg++/src/bitxor.c41
-rw-r--r--contrib/libg++/libg++/src/bool.h24
-rw-r--r--contrib/libg++/libg++/src/builtin.cc4
-rw-r--r--contrib/libg++/libg++/src/builtin.h125
-rw-r--r--contrib/libg++/libg++/src/compare.cc4
-rw-r--r--contrib/libg++/libg++/src/compare.h91
-rw-r--r--contrib/libg++/libg++/src/configure.in45
-rw-r--r--contrib/libg++/libg++/src/depend849
-rw-r--r--contrib/libg++/libg++/src/dtoa.cc335
-rw-r--r--contrib/libg++/libg++/src/error.cc49
-rw-r--r--contrib/libg++/libg++/src/fmtq.cc29
-rw-r--r--contrib/libg++/libg++/src/gcd.cc52
-rw-r--r--contrib/libg++/libg++/src/gen/AVLMap.ccP614
-rw-r--r--contrib/libg++/libg++/src/gen/AVLMap.hP141
-rw-r--r--contrib/libg++/libg++/src/gen/AVLSet.ccP892
-rw-r--r--contrib/libg++/libg++/src/gen/AVLSet.hP152
-rw-r--r--contrib/libg++/libg++/src/gen/AVec.ccP397
-rw-r--r--contrib/libg++/libg++/src/gen/AVec.hP118
-rw-r--r--contrib/libg++/libg++/src/gen/BSTSet.ccP377
-rw-r--r--contrib/libg++/libg++/src/gen/BSTSet.hP152
-rw-r--r--contrib/libg++/libg++/src/gen/Bag.ccP74
-rw-r--r--contrib/libg++/libg++/src/gen/Bag.hP79
-rw-r--r--contrib/libg++/libg++/src/gen/CHBag.ccP210
-rw-r--r--contrib/libg++/libg++/src/gen/CHBag.hP76
-rw-r--r--contrib/libg++/libg++/src/gen/CHMap.ccP168
-rw-r--r--contrib/libg++/libg++/src/gen/CHMap.hP104
-rw-r--r--contrib/libg++/libg++/src/gen/CHNode.ccP21
-rw-r--r--contrib/libg++/libg++/src/gen/CHNode.hP43
-rw-r--r--contrib/libg++/libg++/src/gen/CHSet.ccP273
-rw-r--r--contrib/libg++/libg++/src/gen/CHSet.hP84
-rw-r--r--contrib/libg++/libg++/src/gen/DLDeque.ccP4
-rw-r--r--contrib/libg++/libg++/src/gen/DLDeque.hP130
-rw-r--r--contrib/libg++/libg++/src/gen/DLList.ccP339
-rw-r--r--contrib/libg++/libg++/src/gen/DLList.hP157
-rw-r--r--contrib/libg++/libg++/src/gen/Deque.ccP11
-rw-r--r--contrib/libg++/libg++/src/gen/Deque.hP57
-rw-r--r--contrib/libg++/libg++/src/gen/FPQueue.ccP4
-rw-r--r--contrib/libg++/libg++/src/gen/FPQueue.hP112
-rw-r--r--contrib/libg++/libg++/src/gen/FPStack.ccP4
-rw-r--r--contrib/libg++/libg++/src/gen/FPStack.hP114
-rw-r--r--contrib/libg++/libg++/src/gen/FPlex.ccP167
-rw-r--r--contrib/libg++/libg++/src/gen/FPlex.hP253
-rw-r--r--contrib/libg++/libg++/src/gen/List.ccP972
-rw-r--r--contrib/libg++/libg++/src/gen/List.hP279
-rw-r--r--contrib/libg++/libg++/src/gen/MPlex.ccP848
-rw-r--r--contrib/libg++/libg++/src/gen/MPlex.hP414
-rw-r--r--contrib/libg++/libg++/src/gen/Map.ccP59
-rw-r--r--contrib/libg++/libg++/src/gen/Map.hP87
-rw-r--r--contrib/libg++/libg++/src/gen/OSLBag.ccP196
-rw-r--r--contrib/libg++/libg++/src/gen/OSLBag.hP91
-rw-r--r--contrib/libg++/libg++/src/gen/OSLSet.ccP321
-rw-r--r--contrib/libg++/libg++/src/gen/OSLSet.hP101
-rw-r--r--contrib/libg++/libg++/src/gen/OXPBag.ccP221
-rw-r--r--contrib/libg++/libg++/src/gen/OXPBag.hP73
-rw-r--r--contrib/libg++/libg++/src/gen/OXPSet.ccP280
-rw-r--r--contrib/libg++/libg++/src/gen/OXPSet.hP102
-rw-r--r--contrib/libg++/libg++/src/gen/PHPQ.ccP339
-rw-r--r--contrib/libg++/libg++/src/gen/PHPQ.hP108
-rw-r--r--contrib/libg++/libg++/src/gen/PQ.ccP63
-rw-r--r--contrib/libg++/libg++/src/gen/PQ.hP78
-rw-r--r--contrib/libg++/libg++/src/gen/PSList.hP32
-rw-r--r--contrib/libg++/libg++/src/gen/PVec.hP79
-rw-r--r--contrib/libg++/libg++/src/gen/Plex.ccP222
-rw-r--r--contrib/libg++/libg++/src/gen/Plex.hP494
-rw-r--r--contrib/libg++/libg++/src/gen/Queue.ccP14
-rw-r--r--contrib/libg++/libg++/src/gen/Queue.hP51
-rw-r--r--contrib/libg++/libg++/src/gen/RAVLMap.ccP690
-rw-r--r--contrib/libg++/libg++/src/gen/RAVLMap.hP147
-rw-r--r--contrib/libg++/libg++/src/gen/RPlex.ccP477
-rw-r--r--contrib/libg++/libg++/src/gen/RPlex.hP257
-rw-r--r--contrib/libg++/libg++/src/gen/SLBag.ccP105
-rw-r--r--contrib/libg++/libg++/src/gen/SLBag.hP96
-rw-r--r--contrib/libg++/libg++/src/gen/SLList.ccP292
-rw-r--r--contrib/libg++/libg++/src/gen/SLList.hP137
-rw-r--r--contrib/libg++/libg++/src/gen/SLQueue.ccP4
-rw-r--r--contrib/libg++/libg++/src/gen/SLQueue.hP108
-rw-r--r--contrib/libg++/libg++/src/gen/SLSet.ccP77
-rw-r--r--contrib/libg++/libg++/src/gen/SLSet.hP87
-rw-r--r--contrib/libg++/libg++/src/gen/SLStack.ccP4
-rw-r--r--contrib/libg++/libg++/src/gen/SLStack.hP109
-rw-r--r--contrib/libg++/libg++/src/gen/Set.ccP117
-rw-r--r--contrib/libg++/libg++/src/gen/Set.hP78
-rw-r--r--contrib/libg++/libg++/src/gen/SkipBag.ccP322
-rw-r--r--contrib/libg++/libg++/src/gen/SkipBag.hP171
-rw-r--r--contrib/libg++/libg++/src/gen/SkipMap.ccP307
-rw-r--r--contrib/libg++/libg++/src/gen/SkipMap.hP176
-rw-r--r--contrib/libg++/libg++/src/gen/SkipSet.ccP395
-rw-r--r--contrib/libg++/libg++/src/gen/SkipSet.hP187
-rw-r--r--contrib/libg++/libg++/src/gen/SplayBag.ccP445
-rw-r--r--contrib/libg++/libg++/src/gen/SplayBag.hP126
-rw-r--r--contrib/libg++/libg++/src/gen/SplayMap.ccP401
-rw-r--r--contrib/libg++/libg++/src/gen/SplayMap.hP154
-rw-r--r--contrib/libg++/libg++/src/gen/SplayNode.ccP21
-rw-r--r--contrib/libg++/libg++/src/gen/SplayNode.hP44
-rw-r--r--contrib/libg++/libg++/src/gen/SplayPQ.ccP523
-rw-r--r--contrib/libg++/libg++/src/gen/SplayPQ.hP123
-rw-r--r--contrib/libg++/libg++/src/gen/SplaySet.ccP499
-rw-r--r--contrib/libg++/libg++/src/gen/SplaySet.hP145
-rw-r--r--contrib/libg++/libg++/src/gen/Stack.ccP11
-rw-r--r--contrib/libg++/libg++/src/gen/Stack.hP51
-rw-r--r--contrib/libg++/libg++/src/gen/VHBag.ccP264
-rw-r--r--contrib/libg++/libg++/src/gen/VHBag.hP84
-rw-r--r--contrib/libg++/libg++/src/gen/VHMap.ccP210
-rw-r--r--contrib/libg++/libg++/src/gen/VHMap.hP84
-rw-r--r--contrib/libg++/libg++/src/gen/VHSet.ccP263
-rw-r--r--contrib/libg++/libg++/src/gen/VHSet.hP96
-rw-r--r--contrib/libg++/libg++/src/gen/VOHSet.ccP305
-rw-r--r--contrib/libg++/libg++/src/gen/VOHSet.hP88
-rw-r--r--contrib/libg++/libg++/src/gen/VQueue.ccP83
-rw-r--r--contrib/libg++/libg++/src/gen/VQueue.hP130
-rw-r--r--contrib/libg++/libg++/src/gen/VStack.ccP66
-rw-r--r--contrib/libg++/libg++/src/gen/VStack.hP120
-rw-r--r--contrib/libg++/libg++/src/gen/Vec.ccP478
-rw-r--r--contrib/libg++/libg++/src/gen/Vec.hP135
-rw-r--r--contrib/libg++/libg++/src/gen/XPBag.ccP72
-rw-r--r--contrib/libg++/libg++/src/gen/XPBag.hP98
-rw-r--r--contrib/libg++/libg++/src/gen/XPDeque.ccP4
-rw-r--r--contrib/libg++/libg++/src/gen/XPDeque.hP133
-rw-r--r--contrib/libg++/libg++/src/gen/XPPQ.ccP143
-rw-r--r--contrib/libg++/libg++/src/gen/XPPQ.hP105
-rw-r--r--contrib/libg++/libg++/src/gen/XPQueue.ccP4
-rw-r--r--contrib/libg++/libg++/src/gen/XPQueue.hP114
-rw-r--r--contrib/libg++/libg++/src/gen/XPSet.ccP63
-rw-r--r--contrib/libg++/libg++/src/gen/XPSet.hP89
-rw-r--r--contrib/libg++/libg++/src/gen/XPStack.ccP4
-rw-r--r--contrib/libg++/libg++/src/gen/XPStack.hP115
-rw-r--r--contrib/libg++/libg++/src/gen/XPlex.ccP397
-rw-r--r--contrib/libg++/libg++/src/gen/XPlex.hP238
-rw-r--r--contrib/libg++/libg++/src/gen/defs.hP57
-rw-r--r--contrib/libg++/libg++/src/gen/intSList.hP33
-rw-r--r--contrib/libg++/libg++/src/gen/intVec.hP80
-rw-r--r--contrib/libg++/libg++/src/generic.h54
-rw-r--r--contrib/libg++/libg++/src/getpagesize.h27
-rw-r--r--contrib/libg++/libg++/src/hash.cc56
-rw-r--r--contrib/libg++/libg++/src/ioob.cc32
-rw-r--r--contrib/libg++/libg++/src/lg.cc32
-rw-r--r--contrib/libg++/libg++/src/libc.h1
-rw-r--r--contrib/libg++/libg++/src/malloc.c2690
-rw-r--r--contrib/libg++/libg++/src/minmax.cc5
-rw-r--r--contrib/libg++/libg++/src/minmax.h65
-rw-r--r--contrib/libg++/libg++/src/osfcn.h17
-rw-r--r--contrib/libg++/libg++/src/pow.cc70
-rw-r--r--contrib/libg++/libg++/src/sqrt.cc43
-rw-r--r--contrib/libg++/libg++/src/std.h35
-rw-r--r--contrib/libg++/libg++/src/strclass.h5
-rw-r--r--contrib/libg++/libg++/src/swap.h3
-rw-r--r--contrib/libg++/libg++/src/sysent.h2
-rw-r--r--contrib/libg++/libg++/src/timer.c165
-rw-r--r--contrib/libg++/libg++/src/typemacros.h8
-rw-r--r--contrib/libg++/libg++/test-install/ChangeLog74
-rw-r--r--contrib/libg++/libg++/test-install/Foo.cc89
-rw-r--r--contrib/libg++/libg++/test-install/Foo.h24
-rw-r--r--contrib/libg++/libg++/test-install/Makefile.in170
-rw-r--r--contrib/libg++/libg++/test-install/a.cc10
-rw-r--r--contrib/libg++/libg++/test-install/bf.cc18
-rw-r--r--contrib/libg++/libg++/test-install/bm.cc14
-rw-r--r--contrib/libg++/libg++/test-install/configure.in25
-rw-r--r--contrib/libg++/libg++/test-install/ex_bar.cc123
-rw-r--r--contrib/libg++/libg++/test-install/expected.out15
-rw-r--r--contrib/libg++/libg++/test-install/foo_func.cc17
-rw-r--r--contrib/libg++/libg++/test-install/foo_main.cc40
-rw-r--r--contrib/libg++/libg++/tests/ChangeLog346
-rw-r--r--contrib/libg++/libg++/tests/Makefile.in22
-rwxr-xr-xcontrib/libg++/libg++/tests/Makefile.sh174
-rw-r--r--contrib/libg++/libg++/tests/configure.in27
-rw-r--r--contrib/libg++/libg++/tests/depend161
-rw-r--r--contrib/libg++/libg++/tests/tBag.cc540
-rw-r--r--contrib/libg++/libg++/tests/tBag.exp35
-rw-r--r--contrib/libg++/libg++/tests/tBag.inp0
-rw-r--r--contrib/libg++/libg++/tests/tBitSet.cc220
-rw-r--r--contrib/libg++/libg++/tests/tBitSet.exp49
-rw-r--r--contrib/libg++/libg++/tests/tBitSet.inp0
-rw-r--r--contrib/libg++/libg++/tests/tBitString.cc327
-rw-r--r--contrib/libg++/libg++/tests/tBitString.exp79
-rw-r--r--contrib/libg++/libg++/tests/tBitString.inp0
-rw-r--r--contrib/libg++/libg++/tests/tCurses.cc80
-rw-r--r--contrib/libg++/libg++/tests/tCurses.inp2
-rw-r--r--contrib/libg++/libg++/tests/tDeque.cc168
-rw-r--r--contrib/libg++/libg++/tests/tDeque.exp6
-rw-r--r--contrib/libg++/libg++/tests/tDeque.inp0
-rw-r--r--contrib/libg++/libg++/tests/tFile.cc371
-rw-r--r--contrib/libg++/libg++/tests/tFile.exp49
-rw-r--r--contrib/libg++/libg++/tests/tFile.inp4
-rw-r--r--contrib/libg++/libg++/tests/tFix.cc101
-rw-r--r--contrib/libg++/libg++/tests/tFix.exp70
-rw-r--r--contrib/libg++/libg++/tests/tFix.inp0
-rw-r--r--contrib/libg++/libg++/tests/tFix16.cc110
-rw-r--r--contrib/libg++/libg++/tests/tFix16.exp64
-rw-r--r--contrib/libg++/libg++/tests/tFix16.inp0
-rw-r--r--contrib/libg++/libg++/tests/tFix24.cc113
-rw-r--r--contrib/libg++/libg++/tests/tFix24.exp61
-rw-r--r--contrib/libg++/libg++/tests/tFix24.inp0
-rw-r--r--contrib/libg++/libg++/tests/tGetOpt.cc65
-rw-r--r--contrib/libg++/libg++/tests/tGetOpt.exp11
-rw-r--r--contrib/libg++/libg++/tests/tGetOpt.inp0
-rw-r--r--contrib/libg++/libg++/tests/tInteger.cc437
-rw-r--r--contrib/libg++/libg++/tests/tInteger.exp48
-rw-r--r--contrib/libg++/libg++/tests/tInteger.inp3
-rw-r--r--contrib/libg++/libg++/tests/tLList.cc236
-rw-r--r--contrib/libg++/libg++/tests/tLList.exp49
-rw-r--r--contrib/libg++/libg++/tests/tLList.inp0
-rw-r--r--contrib/libg++/libg++/tests/tList.cc129
-rw-r--r--contrib/libg++/libg++/tests/tList.exp39
-rw-r--r--contrib/libg++/libg++/tests/tList.inp0
-rw-r--r--contrib/libg++/libg++/tests/tMap.cc339
-rw-r--r--contrib/libg++/libg++/tests/tMap.exp25
-rw-r--r--contrib/libg++/libg++/tests/tMap.inp0
-rw-r--r--contrib/libg++/libg++/tests/tObstack.cc80
-rw-r--r--contrib/libg++/libg++/tests/tObstack.exp32
-rw-r--r--contrib/libg++/libg++/tests/tObstack.inp5
-rw-r--r--contrib/libg++/libg++/tests/tPQ.cc275
-rw-r--r--contrib/libg++/libg++/tests/tPQ.exp15
-rw-r--r--contrib/libg++/libg++/tests/tPQ.inp0
-rw-r--r--contrib/libg++/libg++/tests/tPlex.cc719
-rw-r--r--contrib/libg++/libg++/tests/tPlex.exp10
-rw-r--r--contrib/libg++/libg++/tests/tPlex.inp0
-rw-r--r--contrib/libg++/libg++/tests/tQueue.cc209
-rw-r--r--contrib/libg++/libg++/tests/tQueue.exp15
-rw-r--r--contrib/libg++/libg++/tests/tQueue.inp0
-rw-r--r--contrib/libg++/libg++/tests/tRandom.cc103
-rw-r--r--contrib/libg++/libg++/tests/tRandom.exp85
-rw-r--r--contrib/libg++/libg++/tests/tRandom.inp0
-rw-r--r--contrib/libg++/libg++/tests/tRational.cc194
-rw-r--r--contrib/libg++/libg++/tests/tRational.exp41
-rw-r--r--contrib/libg++/libg++/tests/tRational.inp1
-rw-r--r--contrib/libg++/libg++/tests/tSet.cc744
-rw-r--r--contrib/libg++/libg++/tests/tSet.exp50
-rw-r--r--contrib/libg++/libg++/tests/tSet.inp0
-rw-r--r--contrib/libg++/libg++/tests/tStack.cc188
-rw-r--r--contrib/libg++/libg++/tests/tStack.exp8
-rw-r--r--contrib/libg++/libg++/tests/tStack.inp0
-rw-r--r--contrib/libg++/libg++/tests/tString.cc416
-rw-r--r--contrib/libg++/libg++/tests/tString.exp50
-rw-r--r--contrib/libg++/libg++/tests/tString.inp1
-rw-r--r--contrib/libg++/libg++/tests/tVec.cc96
-rw-r--r--contrib/libg++/libg++/tests/tVec.exp33
-rw-r--r--contrib/libg++/libg++/tests/tVec.inp0
-rw-r--r--contrib/libg++/libg++/tests/test_h.cc102
-rw-r--r--contrib/libg++/libg++/tests/tiLList.cc271
-rw-r--r--contrib/libg++/libg++/tests/tiLList.exp54
-rw-r--r--contrib/libg++/libiberty/ChangeLog1872
-rw-r--r--contrib/libg++/libiberty/insque.c50
-rw-r--r--contrib/libg++/libiberty/strerror.c829
-rw-r--r--contrib/libg++/libio/ChangeLog1799
-rw-r--r--contrib/libg++/libio/Makefile.in124
-rw-r--r--contrib/libg++/libio/NEWS51
-rw-r--r--contrib/libg++/libio/PlotFile.cc157
-rw-r--r--contrib/libg++/libio/PlotFile.h89
-rw-r--r--contrib/libg++/libio/README30
-rw-r--r--contrib/libg++/libio/SFile.cc82
-rw-r--r--contrib/libg++/libio/SFile.h55
-rw-r--r--contrib/libg++/libio/builtinbuf.cc78
-rw-r--r--contrib/libg++/libio/builtinbuf.h68
-rw-r--r--contrib/libg++/libio/cleanup.c17
-rw-r--r--contrib/libg++/libio/depend327
-rw-r--r--contrib/libg++/libio/editbuf.cc717
-rw-r--r--contrib/libg++/libio/editbuf.h185
-rw-r--r--contrib/libg++/libio/filebuf.cc206
-rw-r--r--contrib/libg++/libio/filedoalloc.c102
-rw-r--r--contrib/libg++/libio/fileops.c755
-rw-r--r--contrib/libg++/libio/floatconv.c2350
-rw-r--r--contrib/libg++/libio/floatio.h51
-rw-r--r--contrib/libg++/libio/fstream.cc110
-rw-r--r--contrib/libg++/libio/fstream.h92
-rwxr-xr-xcontrib/libg++/libio/gen-params692
-rw-r--r--contrib/libg++/libio/genops.c852
-rw-r--r--contrib/libg++/libio/indstream.cc121
-rw-r--r--contrib/libg++/libio/indstream.h77
-rw-r--r--contrib/libg++/libio/ioassign.cc49
-rw-r--r--contrib/libg++/libio/ioextend.cc132
-rw-r--r--contrib/libg++/libio/iofclose.c47
-rw-r--r--contrib/libg++/libio/iofdopen.c121
-rw-r--r--contrib/libg++/libio/iofflush.c38
-rw-r--r--contrib/libg++/libio/iofgetpos.c46
-rw-r--r--contrib/libg++/libio/iofgets.c40
-rw-r--r--contrib/libg++/libio/iofopen.c49
-rw-r--r--contrib/libg++/libio/iofprintf.c48
-rw-r--r--contrib/libg++/libio/iofputs.c37
-rw-r--r--contrib/libg++/libio/iofread.c38
-rw-r--r--contrib/libg++/libio/iofscanf.c48
-rw-r--r--contrib/libg++/libio/iofsetpos.c43
-rw-r--r--contrib/libg++/libio/ioftell.c45
-rw-r--r--contrib/libg++/libio/iofwrite.c44
-rw-r--r--contrib/libg++/libio/iogetdelim.c99
-rw-r--r--contrib/libg++/libio/iogetline.c74
-rw-r--r--contrib/libg++/libio/iogets.c47
-rw-r--r--contrib/libg++/libio/ioignore.c46
-rw-r--r--contrib/libg++/libio/iolibio.h53
-rw-r--r--contrib/libg++/libio/iomanip.cc90
-rw-r--r--contrib/libg++/libio/iomanip.h165
-rw-r--r--contrib/libg++/libio/iopadn.c65
-rw-r--r--contrib/libg++/libio/ioperror.c22
-rw-r--r--contrib/libg++/libio/iopopen.c222
-rw-r--r--contrib/libg++/libio/ioprims.c72
-rw-r--r--contrib/libg++/libio/ioprintf.c47
-rw-r--r--contrib/libg++/libio/ioputs.c38
-rw-r--r--contrib/libg++/libio/ioscanf.c47
-rw-r--r--contrib/libg++/libio/ioseekoff.c43
-rw-r--r--contrib/libg++/libio/ioseekpos.c39
-rw-r--r--contrib/libg++/libio/iosetbuffer.c36
-rw-r--r--contrib/libg++/libio/iosetvbuf.c78
-rw-r--r--contrib/libg++/libio/iosprintf.c47
-rw-r--r--contrib/libg++/libio/iosscanf.c47
-rw-r--r--contrib/libg++/libio/iostdio.h114
-rw-r--r--contrib/libg++/libio/iostream.cc821
-rw-r--r--contrib/libg++/libio/iostream.h254
-rw-r--r--contrib/libg++/libio/iostream.texi1971
-rw-r--r--contrib/libg++/libio/iostreamP.h26
-rw-r--r--contrib/libg++/libio/iostrerror.c12
-rw-r--r--contrib/libg++/libio/ioungetc.c35
-rw-r--r--contrib/libg++/libio/iovfprintf.c881
-rw-r--r--contrib/libg++/libio/iovfscanf.c787
-rw-r--r--contrib/libg++/libio/iovsprintf.c40
-rw-r--r--contrib/libg++/libio/iovsscanf.c37
-rw-r--r--contrib/libg++/libio/isgetline.cc139
-rw-r--r--contrib/libg++/libio/isgetsb.cc59
-rw-r--r--contrib/libg++/libio/isscan.cc45
-rw-r--r--contrib/libg++/libio/istream.h25
-rw-r--r--contrib/libg++/libio/libio.h255
-rw-r--r--contrib/libg++/libio/libioP.h494
-rw-r--r--contrib/libg++/libio/osform.cc54
-rw-r--r--contrib/libg++/libio/ostream.h25
-rw-r--r--contrib/libg++/libio/outfloat.c204
-rw-r--r--contrib/libg++/libio/parsestream.cc317
-rw-r--r--contrib/libg++/libio/parsestream.h156
-rw-r--r--contrib/libg++/libio/pfstream.cc92
-rw-r--r--contrib/libg++/libio/pfstream.h59
-rw-r--r--contrib/libg++/libio/procbuf.cc55
-rw-r--r--contrib/libg++/libio/procbuf.h50
-rw-r--r--contrib/libg++/libio/sbform.cc40
-rw-r--r--contrib/libg++/libio/sbgetline.cc31
-rw-r--r--contrib/libg++/libio/sbscan.cc45
-rw-r--r--contrib/libg++/libio/stdfiles.c44
-rw-r--r--contrib/libg++/libio/stdiostream.cc159
-rw-r--r--contrib/libg++/libio/stdiostream.h79
-rw-r--r--contrib/libg++/libio/stdstrbufs.cc115
-rw-r--r--contrib/libg++/libio/stdstreams.cc153
-rw-r--r--contrib/libg++/libio/stream.cc170
-rw-r--r--contrib/libg++/libio/stream.h59
-rw-r--r--contrib/libg++/libio/streambuf.cc343
-rw-r--r--contrib/libg++/libio/streambuf.h475
-rw-r--r--contrib/libg++/libio/strfile.h52
-rw-r--r--contrib/libg++/libio/strops.c290
-rw-r--r--contrib/libg++/libio/strstream.cc116
-rw-r--r--contrib/libg++/libio/strstream.h113
-rw-r--r--contrib/libg++/libio/tests/ChangeLog111
-rw-r--r--contrib/libg++/libio/tests/Makefile.in195
-rw-r--r--contrib/libg++/libio/tests/configure.in21
-rw-r--r--contrib/libg++/libio/tests/hounddog.cc85
-rw-r--r--contrib/libg++/libio/tests/hounddog.exp7
-rw-r--r--contrib/libg++/libio/tests/hounddog.inp7
-rw-r--r--contrib/libg++/libio/tests/putbackdog.cc97
-rw-r--r--contrib/libg++/libio/tests/tFile.cc550
-rw-r--r--contrib/libg++/libio/tests/tFile.exp75
-rw-r--r--contrib/libg++/libio/tests/tFile.inp5
-rw-r--r--contrib/libg++/libio/tests/tfformat.c4145
-rw-r--r--contrib/libg++/libio/tests/tiformat.c5093
-rw-r--r--contrib/libg++/libio/tests/tiomanip.cc35
-rw-r--r--contrib/libg++/libio/tests/tiomanip.exp4
-rw-r--r--contrib/libg++/libio/tests/tiomisc.cc236
-rw-r--r--contrib/libg++/libio/tests/tiomisc.exp11
-rw-r--r--contrib/libg++/libio/tests/tstdiomisc.c43
-rw-r--r--contrib/libg++/libio/tests/tstdiomisc.exp8
-rw-r--r--contrib/libg++/librx/ChangeLog302
-rw-r--r--contrib/libg++/librx/DOC179
-rw-r--r--contrib/libg++/librx/rx.c7193
-rw-r--r--contrib/libg++/librx/rx.h3732
-rw-r--r--contrib/libg++/libstdc++/ChangeLog620
-rw-r--r--contrib/libg++/libstdc++/Makefile.in310
-rw-r--r--contrib/libg++/libstdc++/algorithm7
-rw-r--r--contrib/libg++/libstdc++/cassert6
-rw-r--r--contrib/libg++/libstdc++/cctype6
-rw-r--r--contrib/libg++/libstdc++/cerrno6
-rw-r--r--contrib/libg++/libstdc++/cfloat6
-rw-r--r--contrib/libg++/libstdc++/cinst.cc151
-rw-r--r--contrib/libg++/libstdc++/ciso6466
-rw-r--r--contrib/libg++/libstdc++/climits6
-rw-r--r--contrib/libg++/libstdc++/clocale6
-rw-r--r--contrib/libg++/libstdc++/cmath6
-rw-r--r--contrib/libg++/libstdc++/cmathi.cc7
-rw-r--r--contrib/libg++/libstdc++/complex6
-rw-r--r--contrib/libg++/libstdc++/complex.h6
-rw-r--r--contrib/libg++/libstdc++/csetjmp6
-rw-r--r--contrib/libg++/libstdc++/csignal6
-rw-r--r--contrib/libg++/libstdc++/cstdarg6
-rw-r--r--contrib/libg++/libstdc++/cstddef6
-rw-r--r--contrib/libg++/libstdc++/cstdio6
-rw-r--r--contrib/libg++/libstdc++/cstdlib6
-rw-r--r--contrib/libg++/libstdc++/cstdlibi.cc7
-rw-r--r--contrib/libg++/libstdc++/cstring6
-rw-r--r--contrib/libg++/libstdc++/cstringi.cc7
-rw-r--r--contrib/libg++/libstdc++/ctime6
-rw-r--r--contrib/libg++/libstdc++/cwchar6
-rw-r--r--contrib/libg++/libstdc++/cwctype6
-rw-r--r--contrib/libg++/libstdc++/deque7
-rw-r--r--contrib/libg++/libstdc++/exception6
-rw-r--r--contrib/libg++/libstdc++/exceptioni.cc78
-rw-r--r--contrib/libg++/libstdc++/functional7
-rw-r--r--contrib/libg++/libstdc++/iterator7
-rw-r--r--contrib/libg++/libstdc++/list7
-rw-r--r--contrib/libg++/libstdc++/map7
-rw-r--r--contrib/libg++/libstdc++/memory7
-rw-r--r--contrib/libg++/libstdc++/new6
-rw-r--r--contrib/libg++/libstdc++/new.h7
-rw-r--r--contrib/libg++/libstdc++/newi.cc7
-rw-r--r--contrib/libg++/libstdc++/numeric7
-rw-r--r--contrib/libg++/libstdc++/queue7
-rw-r--r--contrib/libg++/libstdc++/set7
-rw-r--r--contrib/libg++/libstdc++/sinst.cc147
-rw-r--r--contrib/libg++/libstdc++/stack7
-rw-r--r--contrib/libg++/libstdc++/std/bastring.cc489
-rw-r--r--contrib/libg++/libstdc++/std/bastring.h574
-rw-r--r--contrib/libg++/libstdc++/std/cassert.h7
-rw-r--r--contrib/libg++/libstdc++/std/cctype.h7
-rw-r--r--contrib/libg++/libstdc++/std/cerrno.h7
-rw-r--r--contrib/libg++/libstdc++/std/cfloat.h7
-rw-r--r--contrib/libg++/libstdc++/std/cinst.h112
-rw-r--r--contrib/libg++/libstdc++/std/ciso646.h7
-rw-r--r--contrib/libg++/libstdc++/std/climits.h7
-rw-r--r--contrib/libg++/libstdc++/std/clocale.h7
-rw-r--r--contrib/libg++/libstdc++/std/cmath.h76
-rw-r--r--contrib/libg++/libstdc++/std/complex.h18
-rw-r--r--contrib/libg++/libstdc++/std/complext.cc273
-rw-r--r--contrib/libg++/libstdc++/std/complext.h317
-rw-r--r--contrib/libg++/libstdc++/std/csetjmp.h8
-rw-r--r--contrib/libg++/libstdc++/std/csignal.h7
-rw-r--r--contrib/libg++/libstdc++/std/cstdarg.h7
-rw-r--r--contrib/libg++/libstdc++/std/cstddef.h7
-rw-r--r--contrib/libg++/libstdc++/std/cstdio.h7
-rw-r--r--contrib/libg++/libstdc++/std/cstdlib.h23
-rw-r--r--contrib/libg++/libstdc++/std/cstring.h71
-rw-r--r--contrib/libg++/libstdc++/std/ctime.h7
-rw-r--r--contrib/libg++/libstdc++/std/cwchar.h7
-rw-r--r--contrib/libg++/libstdc++/std/cwctype.h7
-rw-r--r--contrib/libg++/libstdc++/std/dcomplex.h89
-rw-r--r--contrib/libg++/libstdc++/std/exception.h39
-rw-r--r--contrib/libg++/libstdc++/std/fcomplex.h85
-rw-r--r--contrib/libg++/libstdc++/std/ldcomplex.h93
-rw-r--r--contrib/libg++/libstdc++/std/new.h34
-rw-r--r--contrib/libg++/libstdc++/std/sinst.h73
-rw-r--r--contrib/libg++/libstdc++/std/stddef.h25
-rw-r--r--contrib/libg++/libstdc++/std/stdexcept.h126
-rw-r--r--contrib/libg++/libstdc++/std/straits.h161
-rw-r--r--contrib/libg++/libstdc++/std/string.h13
-rw-r--r--contrib/libg++/libstdc++/std/typeinfo.h245
-rw-r--r--contrib/libg++/libstdc++/stddef6
-rw-r--r--contrib/libg++/libstdc++/stddefi.cc7
-rw-r--r--contrib/libg++/libstdc++/stdexcept6
-rw-r--r--contrib/libg++/libstdc++/stdexcepti.cc8
-rw-r--r--contrib/libg++/libstdc++/stl.h15
-rw-r--r--contrib/libg++/libstdc++/stl/ChangeLog86
-rw-r--r--contrib/libg++/libstdc++/stl/Makefile.in12
-rw-r--r--contrib/libg++/libstdc++/stl/README86
-rw-r--r--contrib/libg++/libstdc++/stl/algo.h2386
-rw-r--r--contrib/libg++/libstdc++/stl/algobase.h232
-rw-r--r--contrib/libg++/libstdc++/stl/bool.h20
-rw-r--r--contrib/libg++/libstdc++/stl/bvector.h421
-rw-r--r--contrib/libg++/libstdc++/stl/configure.in37
-rw-r--r--contrib/libg++/libstdc++/stl/defalloc.h176
-rw-r--r--contrib/libg++/libstdc++/stl/deque.h684
-rw-r--r--contrib/libg++/libstdc++/stl/faralloc.h120
-rw-r--r--contrib/libg++/libstdc++/stl/fdeque.h39
-rw-r--r--contrib/libg++/libstdc++/stl/flist.h39
-rw-r--r--contrib/libg++/libstdc++/stl/fmap.h44
-rw-r--r--contrib/libg++/libstdc++/stl/fmultmap.h44
-rw-r--r--contrib/libg++/libstdc++/stl/fmultset.h44
-rw-r--r--contrib/libg++/libstdc++/stl/fset.h44
-rw-r--r--contrib/libg++/libstdc++/stl/function.h282
-rw-r--r--contrib/libg++/libstdc++/stl/hdeque.h39
-rw-r--r--contrib/libg++/libstdc++/stl/heap.h193
-rw-r--r--contrib/libg++/libstdc++/stl/hlist.h39
-rw-r--r--contrib/libg++/libstdc++/stl/hmap.h44
-rw-r--r--contrib/libg++/libstdc++/stl/hmultmap.h44
-rw-r--r--contrib/libg++/libstdc++/stl/hmultset.h44
-rw-r--r--contrib/libg++/libstdc++/stl/hset.h44
-rw-r--r--contrib/libg++/libstdc++/stl/hugalloc.h38
-rw-r--r--contrib/libg++/libstdc++/stl/hvector.h39
-rw-r--r--contrib/libg++/libstdc++/stl/iterator.h395
-rw-r--r--contrib/libg++/libstdc++/stl/lbvector.h39
-rw-r--r--contrib/libg++/libstdc++/stl/ldeque.h39
-rw-r--r--contrib/libg++/libstdc++/stl/list.h531
-rw-r--r--contrib/libg++/libstdc++/stl/llist.h39
-rw-r--r--contrib/libg++/libstdc++/stl/lmap.h44
-rw-r--r--contrib/libg++/libstdc++/stl/lmultmap.h44
-rw-r--r--contrib/libg++/libstdc++/stl/lmultset.h44
-rw-r--r--contrib/libg++/libstdc++/stl/lngalloc.h54
-rw-r--r--contrib/libg++/libstdc++/stl/lset.h44
-rw-r--r--contrib/libg++/libstdc++/stl/map.h150
-rw-r--r--contrib/libg++/libstdc++/stl/multimap.h142
-rw-r--r--contrib/libg++/libstdc++/stl/multiset.h129
-rw-r--r--contrib/libg++/libstdc++/stl/neralloc.h38
-rw-r--r--contrib/libg++/libstdc++/stl/nmap.h44
-rw-r--r--contrib/libg++/libstdc++/stl/nmultmap.h44
-rw-r--r--contrib/libg++/libstdc++/stl/nmultset.h44
-rw-r--r--contrib/libg++/libstdc++/stl/nset.h44
-rw-r--r--contrib/libg++/libstdc++/stl/pair.h46
-rw-r--r--contrib/libg++/libstdc++/stl/projectn.h33
-rw-r--r--contrib/libg++/libstdc++/stl/random.cc60
-rw-r--r--contrib/libg++/libstdc++/stl/set.h132
-rw-r--r--contrib/libg++/libstdc++/stl/stack.h120
-rw-r--r--contrib/libg++/libstdc++/stl/tempbuf.cc18
-rw-r--r--contrib/libg++/libstdc++/stl/tempbuf.h55
-rw-r--r--contrib/libg++/libstdc++/stl/tree.cc3
-rw-r--r--contrib/libg++/libstdc++/stl/tree.h1246
-rw-r--r--contrib/libg++/libstdc++/stl/vector.h355
-rw-r--r--contrib/libg++/libstdc++/string6
-rw-r--r--contrib/libg++/libstdc++/tests/ChangeLog52
-rw-r--r--contrib/libg++/libstdc++/tests/Makefile.in35
-rw-r--r--contrib/libg++/libstdc++/tests/configure.in49
-rw-r--r--contrib/libg++/libstdc++/tests/tcomplex.cc143
-rw-r--r--contrib/libg++/libstdc++/tests/tcomplex.exp37
-rw-r--r--contrib/libg++/libstdc++/tests/tcomplex.inp1
-rw-r--r--contrib/libg++/libstdc++/tests/tlist.cc162
-rw-r--r--contrib/libg++/libstdc++/tests/tlist.exp44
-rw-r--r--contrib/libg++/libstdc++/tests/tmap.cc66
-rw-r--r--contrib/libg++/libstdc++/tests/tmap.exp7
-rw-r--r--contrib/libg++/libstdc++/tests/tstring.cc189
-rw-r--r--contrib/libg++/libstdc++/tests/tstring.exp20
-rw-r--r--contrib/libg++/libstdc++/tests/tstring.inp1
-rw-r--r--contrib/libg++/libstdc++/tests/tvector.cc20
-rw-r--r--contrib/libg++/libstdc++/tests/tvector.exp4
-rw-r--r--contrib/libg++/libstdc++/typeinfo6
-rw-r--r--contrib/libg++/libstdc++/typeinfoi.cc131
-rw-r--r--contrib/libg++/libstdc++/utility8
-rw-r--r--contrib/libg++/libstdc++/vector7
-rw-r--r--contrib/libio/ChangeLog2807
-rw-r--r--contrib/libio/Makefile.in137
-rw-r--r--contrib/libio/NEWS57
-rw-r--r--contrib/libio/PlotFile.cc157
-rw-r--r--contrib/libio/PlotFile.h89
-rw-r--r--contrib/libio/README30
-rw-r--r--contrib/libio/SFile.cc82
-rw-r--r--contrib/libio/SFile.h55
-rw-r--r--contrib/libio/builtinbuf.cc78
-rw-r--r--contrib/libio/builtinbuf.h68
-rw-r--r--contrib/libio/cleanup.c17
-rw-r--r--contrib/libio/config.shared499
-rw-r--r--contrib/libio/config/hpux.mt3
-rw-r--r--contrib/libio/config/isc.mt4
-rw-r--r--contrib/libio/config/linux.mt25
-rw-r--r--contrib/libio/config/linuxaxp1-libc-lock.h112
-rw-r--r--contrib/libio/config/linuxaxp1-stdio-lock.h36
-rw-r--r--contrib/libio/config/linuxaxp1.mt10
-rw-r--r--contrib/libio/config/linuxlibc1.mt26
-rw-r--r--contrib/libio/config/mn10200.mt3
-rw-r--r--contrib/libio/config/mtsafe.mt2
-rw-r--r--contrib/libio/config/netware.mt16
-rw-r--r--contrib/libio/configure.in199
-rw-r--r--contrib/libio/dbz/Makefile.in218
-rw-r--r--contrib/libio/dbz/README25
-rw-r--r--contrib/libio/dbz/altbytes7
-rw-r--r--contrib/libio/dbz/byteflip.c38
-rw-r--r--contrib/libio/dbz/case.c129
-rw-r--r--contrib/libio/dbz/case.h12
-rw-r--r--contrib/libio/dbz/configure.in17
-rw-r--r--contrib/libio/dbz/dbz.1221
-rw-r--r--contrib/libio/dbz/dbz.3z547
-rw-r--r--contrib/libio/dbz/dbz.c1768
-rw-r--r--contrib/libio/dbz/dbz.h32
-rw-r--r--contrib/libio/dbz/dbzmain.c519
-rw-r--r--contrib/libio/dbz/fake.c144
-rw-r--r--contrib/libio/dbz/firstlast2550
-rwxr-xr-xcontrib/libio/dbz/getmap6
-rw-r--r--contrib/libio/dbz/random.c31
-rw-r--r--contrib/libio/dbz/revbytes7
-rw-r--r--contrib/libio/dbz/stdio.h1
-rw-r--r--contrib/libio/depend379
-rw-r--r--contrib/libio/editbuf.cc717
-rw-r--r--contrib/libio/editbuf.h185
-rw-r--r--contrib/libio/filebuf.cc223
-rw-r--r--contrib/libio/filedoalloc.c107
-rw-r--r--contrib/libio/fileops.c811
-rw-r--r--contrib/libio/floatconv.c2375
-rw-r--r--contrib/libio/floatio.h51
-rw-r--r--contrib/libio/fstream.cc110
-rw-r--r--contrib/libio/fstream.h92
-rwxr-xr-xcontrib/libio/gen-params739
-rw-r--r--contrib/libio/genops.c946
-rw-r--r--contrib/libio/include/empty.h37
-rw-r--r--contrib/libio/indstream.cc121
-rw-r--r--contrib/libio/indstream.h77
-rw-r--r--contrib/libio/ioassign.cc49
-rw-r--r--contrib/libio/ioextend.cc132
-rw-r--r--contrib/libio/iofclose.c60
-rw-r--r--contrib/libio/iofdopen.c134
-rw-r--r--contrib/libio/iofeof.c45
-rw-r--r--contrib/libio/ioferror.c45
-rw-r--r--contrib/libio/iofflush.c49
-rw-r--r--contrib/libio/iofflush_u.c40
-rw-r--r--contrib/libio/iofgetpos.c55
-rw-r--r--contrib/libio/iofgets.c56
-rw-r--r--contrib/libio/iofopen.c64
-rw-r--r--contrib/libio/iofprintf.c51
-rw-r--r--contrib/libio/iofputs.c49
-rw-r--r--contrib/libio/iofread.c49
-rw-r--r--contrib/libio/iofscanf.c48
-rw-r--r--contrib/libio/iofsetpos.c56
-rw-r--r--contrib/libio/ioftell.c53
-rw-r--r--contrib/libio/iofwrite.c54
-rw-r--r--contrib/libio/iogetc.c50
-rw-r--r--contrib/libio/iogetdelim.c125
-rw-r--r--contrib/libio/iogetline.c112
-rw-r--r--contrib/libio/iogets.c71
-rw-r--r--contrib/libio/ioignore.c47
-rw-r--r--contrib/libio/iolibio.h67
-rw-r--r--contrib/libio/iomanip.cc90
-rw-r--r--contrib/libio/iomanip.h180
-rw-r--r--contrib/libio/iopadn.c70
-rw-r--r--contrib/libio/ioperror.c22
-rw-r--r--contrib/libio/iopopen.c248
-rw-r--r--contrib/libio/ioprims.c80
-rw-r--r--contrib/libio/ioprintf.c47
-rw-r--r--contrib/libio/ioputc.c44
-rw-r--r--contrib/libio/ioputs.c49
-rw-r--r--contrib/libio/ioscanf.c47
-rw-r--r--contrib/libio/ioseekoff.c54
-rw-r--r--contrib/libio/ioseekpos.c48
-rw-r--r--contrib/libio/iosetbuffer.c46
-rw-r--r--contrib/libio/iosetvbuf.c100
-rw-r--r--contrib/libio/iosprintf.c50
-rw-r--r--contrib/libio/iosscanf.c47
-rw-r--r--contrib/libio/iostdio.h114
-rw-r--r--contrib/libio/iostream.cc1049
-rw-r--r--contrib/libio/iostream.h273
-rw-r--r--contrib/libio/iostream.texi1971
-rw-r--r--contrib/libio/iostreamP.h26
-rw-r--r--contrib/libio/iostrerror.c12
-rw-r--r--contrib/libio/ioungetc.c46
-rw-r--r--contrib/libio/iovfprintf.c890
-rw-r--r--contrib/libio/iovfscanf.c790
-rw-r--r--contrib/libio/iovsprintf.c60
-rw-r--r--contrib/libio/iovsscanf.c59
-rw-r--r--contrib/libio/isgetline.cc153
-rw-r--r--contrib/libio/isgetsb.cc63
-rw-r--r--contrib/libio/isscan.cc55
-rw-r--r--contrib/libio/istream.h25
-rw-r--r--contrib/libio/libio.h365
-rw-r--r--contrib/libio/libioP.h648
-rw-r--r--contrib/libio/osform.cc66
-rw-r--r--contrib/libio/ostream.h25
-rw-r--r--contrib/libio/outfloat.c211
-rw-r--r--contrib/libio/parsestream.cc317
-rw-r--r--contrib/libio/parsestream.h156
-rw-r--r--contrib/libio/peekc.c42
-rw-r--r--contrib/libio/pfstream.cc92
-rw-r--r--contrib/libio/pfstream.h59
-rw-r--r--contrib/libio/procbuf.cc54
-rw-r--r--contrib/libio/procbuf.h50
-rw-r--r--contrib/libio/sbform.cc40
-rw-r--r--contrib/libio/sbgetline.cc31
-rw-r--r--contrib/libio/sbscan.cc45
-rw-r--r--contrib/libio/stdfiles.c51
-rw-r--r--contrib/libio/stdio/ChangeLog153
-rw-r--r--contrib/libio/stdio/Makefile.in35
-rw-r--r--contrib/libio/stdio/clearerr.c30
-rw-r--r--contrib/libio/stdio/clearerr_u.c28
-rw-r--r--contrib/libio/stdio/configure.in49
-rw-r--r--contrib/libio/stdio/fdopen.c9
-rw-r--r--contrib/libio/stdio/feof.c43
-rw-r--r--contrib/libio/stdio/feof_u.c37
-rw-r--r--contrib/libio/stdio/ferror.c43
-rw-r--r--contrib/libio/stdio/ferror_u.c37
-rw-r--r--contrib/libio/stdio/fgetc.c40
-rw-r--r--contrib/libio/stdio/fileno.c49
-rw-r--r--contrib/libio/stdio/fputc.c41
-rw-r--r--contrib/libio/stdio/fputc_u.c38
-rw-r--r--contrib/libio/stdio/freopen.c44
-rw-r--r--contrib/libio/stdio/fseek.c42
-rw-r--r--contrib/libio/stdio/getc.c48
-rw-r--r--contrib/libio/stdio/getc_u.c37
-rw-r--r--contrib/libio/stdio/getchar.c40
-rw-r--r--contrib/libio/stdio/getchar_u.c35
-rw-r--r--contrib/libio/stdio/getline.c13
-rw-r--r--contrib/libio/stdio/getw.c13
-rw-r--r--contrib/libio/stdio/obprintf.c168
-rw-r--r--contrib/libio/stdio/popen.c23
-rw-r--r--contrib/libio/stdio/putc.c42
-rw-r--r--contrib/libio/stdio/putc_u.c31
-rw-r--r--contrib/libio/stdio/putchar.c35
-rw-r--r--contrib/libio/stdio/putchar_u.c30
-rw-r--r--contrib/libio/stdio/putw.c15
-rw-r--r--contrib/libio/stdio/rewind.c38
-rw-r--r--contrib/libio/stdio/setbuf.c35
-rw-r--r--contrib/libio/stdio/setfileno.c17
-rw-r--r--contrib/libio/stdio/setlinebuf.c36
-rw-r--r--contrib/libio/stdio/snprintf.c51
-rw-r--r--contrib/libio/stdio/stdio.h219
-rw-r--r--contrib/libio/stdio/vasprintf.c72
-rw-r--r--contrib/libio/stdio/vfprintf.c35
-rw-r--r--contrib/libio/stdio/vfscanf.c36
-rw-r--r--contrib/libio/stdio/vprintf.c33
-rw-r--r--contrib/libio/stdio/vscanf.c41
-rw-r--r--contrib/libio/stdio/vsnprintf.c136
-rw-r--r--contrib/libio/stdiostream.cc159
-rw-r--r--contrib/libio/stdiostream.h79
-rw-r--r--contrib/libio/stdstrbufs.cc126
-rw-r--r--contrib/libio/stdstreams.cc153
-rw-r--r--contrib/libio/stream.cc170
-rw-r--r--contrib/libio/stream.h59
-rw-r--r--contrib/libio/streambuf.cc364
-rw-r--r--contrib/libio/streambuf.h490
-rw-r--r--contrib/libio/strfile.h71
-rw-r--r--contrib/libio/strops.c303
-rw-r--r--contrib/libio/strstream.cc116
-rw-r--r--contrib/libio/strstream.h113
-rw-r--r--contrib/libio/tests/ChangeLog166
-rw-r--r--contrib/libio/tests/Makefile.in196
-rw-r--r--contrib/libio/tests/configure.in36
-rw-r--r--contrib/libio/tests/hounddog.cc85
-rw-r--r--contrib/libio/tests/hounddog.exp7
-rw-r--r--contrib/libio/tests/hounddog.inp7
-rw-r--r--contrib/libio/tests/putbackdog.cc97
-rw-r--r--contrib/libio/tests/tFile.cc558
-rw-r--r--contrib/libio/tests/tFile.exp75
-rw-r--r--contrib/libio/tests/tFile.inp5
-rw-r--r--contrib/libio/tests/tfformat.c4181
-rw-r--r--contrib/libio/tests/tiformat.c5112
-rw-r--r--contrib/libio/tests/tiomanip.cc35
-rw-r--r--contrib/libio/tests/tiomanip.exp4
-rw-r--r--contrib/libio/tests/tiomisc.cc236
-rw-r--r--contrib/libio/tests/tiomisc.exp11
-rw-r--r--contrib/libio/tests/tstdiomisc.c43
-rw-r--r--contrib/libio/tests/tstdiomisc.exp8
-rw-r--r--contrib/libio/testsuite/ChangeLog99
-rw-r--r--contrib/libio/testsuite/Makefile.in90
-rw-r--r--contrib/libio/testsuite/config/default.exp1
-rw-r--r--contrib/libio/testsuite/configure.in22
-rw-r--r--contrib/libio/testsuite/lib/libio.exp167
-rw-r--r--contrib/libio/testsuite/libio.tests/hounddog.exp3
-rw-r--r--contrib/libio/testsuite/libio.tests/putbackdog.exp3
-rw-r--r--contrib/libio/testsuite/libio.tests/tFile.exp3
-rw-r--r--contrib/libio/testsuite/libio.tests/tfformat.exp1
-rw-r--r--contrib/libio/testsuite/libio.tests/tiformat.exp1
-rw-r--r--contrib/libio/testsuite/libio.tests/tiomanip.exp1
-rw-r--r--contrib/libio/testsuite/libio.tests/tiomisc.exp1
-rw-r--r--contrib/libio/testsuite/libio.tests/tstdiomisc.exp1
-rw-r--r--contrib/libobjc/objc-features.texi392
-rw-r--r--contrib/libstdc++/FREEBSD-upgrade18
-rw-r--r--contrib/libstdc++/NEWS9
-rw-r--r--contrib/libstdc++/cassert7
-rw-r--r--contrib/libstdc++/cctype7
-rw-r--r--contrib/libstdc++/cerrno7
-rw-r--r--contrib/libstdc++/cfloat7
-rw-r--r--contrib/libstdc++/cinst.cc154
-rw-r--r--contrib/libstdc++/ciso6467
-rw-r--r--contrib/libstdc++/climits7
-rw-r--r--contrib/libstdc++/clocale7
-rw-r--r--contrib/libstdc++/cmath76
-rw-r--r--contrib/libstdc++/cmathi.cc7
-rw-r--r--contrib/libstdc++/complex18
-rw-r--r--contrib/libstdc++/complex.h6
-rw-r--r--contrib/libstdc++/config/aix.ml9
-rw-r--r--contrib/libstdc++/config/cpu/sparc/sparc32/bits/atomicity.h88
-rw-r--r--contrib/libstdc++/config/cpu/sparc/sparc64/bits/atomicity.h70
-rw-r--r--contrib/libstdc++/config/dec-osf.ml6
-rw-r--r--contrib/libstdc++/config/delta.mt2
-rw-r--r--contrib/libstdc++/config/elf.ml8
-rw-r--r--contrib/libstdc++/config/elfshlibm.ml6
-rw-r--r--contrib/libstdc++/config/freebsd.ml6
-rw-r--r--contrib/libstdc++/config/gnu.ml6
-rw-r--r--contrib/libstdc++/config/hpux.ml6
-rw-r--r--contrib/libstdc++/config/irix5.ml6
-rw-r--r--contrib/libstdc++/config/linux.ml11
-rw-r--r--contrib/libstdc++/config/linux.mt2
-rw-r--r--contrib/libstdc++/config/openbsd.ml7
-rw-r--r--contrib/libstdc++/config/openbsd.mt3
-rw-r--r--contrib/libstdc++/config/posix.mt1
-rw-r--r--contrib/libstdc++/config/sol2pth.mt1
-rw-r--r--contrib/libstdc++/config/sol2shm.ml6
-rw-r--r--contrib/libstdc++/config/sol2solth.mt1
-rw-r--r--contrib/libstdc++/config/sunos4.ml9
-rw-r--r--contrib/libstdc++/config/x86-interix.ml9
-rw-r--r--contrib/libstdc++/csetjmp8
-rw-r--r--contrib/libstdc++/csignal7
-rw-r--r--contrib/libstdc++/cstdarg7
-rw-r--r--contrib/libstdc++/cstddef7
-rw-r--r--contrib/libstdc++/cstdio7
-rw-r--r--contrib/libstdc++/cstdlib23
-rw-r--r--contrib/libstdc++/cstdlibi.cc7
-rw-r--r--contrib/libstdc++/cstring96
-rw-r--r--contrib/libstdc++/cstringi.cc7
-rw-r--r--contrib/libstdc++/ctime7
-rw-r--r--contrib/libstdc++/cwchar7
-rw-r--r--contrib/libstdc++/cwctype7
-rw-r--r--contrib/libstdc++/fstream7
-rw-r--r--contrib/libstdc++/iomanip7
-rw-r--r--contrib/libstdc++/iosfwd15
-rw-r--r--contrib/libstdc++/iostream7
-rw-r--r--contrib/libstdc++/libio/ChangeLog2774
-rw-r--r--contrib/libstdc++/libio/Makefile.am67
-rw-r--r--contrib/libstdc++/libio/Makefile.in426
-rw-r--r--contrib/libstdc++/libio/_G_config.h136
-rw-r--r--contrib/libstdc++/libio/filedoalloc.c101
-rw-r--r--contrib/libstdc++/libio/fileops.c1049
-rw-r--r--contrib/libstdc++/libio/genops.c1123
-rw-r--r--contrib/libstdc++/libio/iofclose.c97
-rw-r--r--contrib/libstdc++/libio/iofopen.c78
-rw-r--r--contrib/libstdc++/libio/iofwide.c476
-rw-r--r--contrib/libstdc++/libio/iolibio.h82
-rw-r--r--contrib/libstdc++/libio/libio.h511
-rw-r--r--contrib/libstdc++/libio/libioP.h821
-rw-r--r--contrib/libstdc++/libio/stdfiles.c71
-rw-r--r--contrib/libstdc++/libio/stdio.c43
-rw-r--r--contrib/libstdc++/libio/wfiledoalloc.c108
-rw-r--r--contrib/libstdc++/libio/wfileops.c754
-rw-r--r--contrib/libstdc++/libio/wgenops.c756
-rw-r--r--contrib/libstdc++/sinst.cc135
-rw-r--r--contrib/libstdc++/src/cmath.cc47
-rw-r--r--contrib/libstdc++/sstream343
-rw-r--r--contrib/libstdc++/std/bastring.cc524
-rw-r--r--contrib/libstdc++/std/bastring.h657
-rw-r--r--contrib/libstdc++/std/complext.cc273
-rw-r--r--contrib/libstdc++/std/complext.h400
-rw-r--r--contrib/libstdc++/std/dcomplex.h91
-rw-r--r--contrib/libstdc++/std/fcomplex.h87
-rw-r--r--contrib/libstdc++/std/gslice.h111
-rw-r--r--contrib/libstdc++/std/gslice_array.h170
-rw-r--r--contrib/libstdc++/std/indirect_array.h157
-rw-r--r--contrib/libstdc++/std/ldcomplex.h95
-rw-r--r--contrib/libstdc++/std/mask_array.h154
-rw-r--r--contrib/libstdc++/std/slice.h76
-rw-r--r--contrib/libstdc++/std/slice_array.h156
-rw-r--r--contrib/libstdc++/std/std_valarray.h728
-rw-r--r--contrib/libstdc++/std/straits.h161
-rw-r--r--contrib/libstdc++/std/valarray_array.h346
-rw-r--r--contrib/libstdc++/std/valarray_array.tcc130
-rw-r--r--contrib/libstdc++/std/valarray_meta.h1046
-rw-r--r--contrib/libstdc++/stdexcept97
-rw-r--r--contrib/libstdc++/stdexcepti.cc21
-rw-r--r--contrib/libstdc++/stl.h15
-rw-r--r--contrib/libstdc++/stl/ChangeLog381
-rw-r--r--contrib/libstdc++/stl/README13
-rw-r--r--contrib/libstdc++/stl/algo.h114
-rw-r--r--contrib/libstdc++/stl/algobase.h71
-rw-r--r--contrib/libstdc++/stl/algorithm40
-rw-r--r--contrib/libstdc++/stl/alloc.h46
-rw-r--r--contrib/libstdc++/stl/bitset1066
-rw-r--r--contrib/libstdc++/stl/bvector.h51
-rw-r--r--contrib/libstdc++/stl/defalloc.h87
-rw-r--r--contrib/libstdc++/stl/deque40
-rw-r--r--contrib/libstdc++/stl/deque.h42
-rw-r--r--contrib/libstdc++/stl/function.h118
-rw-r--r--contrib/libstdc++/stl/functional26
-rw-r--r--contrib/libstdc++/stl/hash_map40
-rw-r--r--contrib/libstdc++/stl/hash_map.h49
-rw-r--r--contrib/libstdc++/stl/hash_set40
-rw-r--r--contrib/libstdc++/stl/hash_set.h44
-rw-r--r--contrib/libstdc++/stl/hashtable.h48
-rw-r--r--contrib/libstdc++/stl/heap.h46
-rw-r--r--contrib/libstdc++/stl/iterator44
-rw-r--r--contrib/libstdc++/stl/iterator.h104
-rw-r--r--contrib/libstdc++/stl/list40
-rw-r--r--contrib/libstdc++/stl/list.h42
-rw-r--r--contrib/libstdc++/stl/map40
-rw-r--r--contrib/libstdc++/stl/map.h41
-rw-r--r--contrib/libstdc++/stl/memory108
-rw-r--r--contrib/libstdc++/stl/multimap.h41
-rw-r--r--contrib/libstdc++/stl/multiset.h41
-rw-r--r--contrib/libstdc++/stl/numeric42
-rw-r--r--contrib/libstdc++/stl/pair.h51
-rw-r--r--contrib/libstdc++/stl/pthread_alloc479
-rw-r--r--contrib/libstdc++/stl/pthread_alloc.h31
-rw-r--r--contrib/libstdc++/stl/queue45
-rw-r--r--contrib/libstdc++/stl/rope32
-rw-r--r--contrib/libstdc++/stl/rope.h34
-rw-r--r--contrib/libstdc++/stl/ropeimpl.h1550
-rw-r--r--contrib/libstdc++/stl/set40
-rw-r--r--contrib/libstdc++/stl/set.h41
-rw-r--r--contrib/libstdc++/stl/slist28
-rw-r--r--contrib/libstdc++/stl/slist.h30
-rw-r--r--contrib/libstdc++/stl/stack41
-rw-r--r--contrib/libstdc++/stl/stack.h46
-rw-r--r--contrib/libstdc++/stl/stl_algo.h2894
-rw-r--r--contrib/libstdc++/stl/stl_algobase.h526
-rw-r--r--contrib/libstdc++/stl/stl_alloc.h1057
-rw-r--r--contrib/libstdc++/stl/stl_bvector.h838
-rw-r--r--contrib/libstdc++/stl/stl_config.h356
-rw-r--r--contrib/libstdc++/stl/stl_construct.h90
-rw-r--r--contrib/libstdc++/stl/stl_deque.h1698
-rw-r--r--contrib/libstdc++/stl/stl_function.h700
-rw-r--r--contrib/libstdc++/stl/stl_hash_fun.h93
-rw-r--r--contrib/libstdc++/stl/stl_hash_map.h416
-rw-r--r--contrib/libstdc++/stl/stl_hash_set.h401
-rw-r--r--contrib/libstdc++/stl/stl_hashtable.h1039
-rw-r--r--contrib/libstdc++/stl/stl_heap.h281
-rw-r--r--contrib/libstdc++/stl/stl_iterator.h915
-rw-r--r--contrib/libstdc++/stl/stl_list.h840
-rw-r--r--contrib/libstdc++/stl/stl_map.h242
-rw-r--r--contrib/libstdc++/stl/stl_multimap.h232
-rw-r--r--contrib/libstdc++/stl/stl_multiset.h224
-rw-r--r--contrib/libstdc++/stl/stl_numeric.h239
-rw-r--r--contrib/libstdc++/stl/stl_pair.h77
-rw-r--r--contrib/libstdc++/stl/stl_queue.h202
-rw-r--r--contrib/libstdc++/stl/stl_raw_storage_iter.h81
-rw-r--r--contrib/libstdc++/stl/stl_relops.h62
-rw-r--r--contrib/libstdc++/stl/stl_rope.h2541
-rw-r--r--contrib/libstdc++/stl/stl_set.h216
-rw-r--r--contrib/libstdc++/stl/stl_slist.h945
-rw-r--r--contrib/libstdc++/stl/stl_stack.h111
-rw-r--r--contrib/libstdc++/stl/stl_tempbuf.h156
-rw-r--r--contrib/libstdc++/stl/stl_tree.h1333
-rw-r--r--contrib/libstdc++/stl/stl_uninitialized.h279
-rw-r--r--contrib/libstdc++/stl/stl_vector.h823
-rw-r--r--contrib/libstdc++/stl/tempbuf.h61
-rw-r--r--contrib/libstdc++/stl/tree.h46
-rw-r--r--contrib/libstdc++/stl/type_traits.h373
-rw-r--r--contrib/libstdc++/stl/utility38
-rw-r--r--contrib/libstdc++/stl/vector41
-rw-r--r--contrib/libstdc++/stl/vector.h42
-rw-r--r--contrib/libstdc++/stlinst.cc10
-rw-r--r--contrib/libstdc++/string13
-rw-r--r--contrib/libstdc++/strstream7
-rw-r--r--contrib/libstdc++/tests/ChangeLog132
-rw-r--r--contrib/libstdc++/tests/Makefile.in35
-rw-r--r--contrib/libstdc++/tests/configure.in65
-rw-r--r--contrib/libstdc++/tests/tcomplex.cc151
-rw-r--r--contrib/libstdc++/tests/tcomplex.exp37
-rw-r--r--contrib/libstdc++/tests/tcomplex.inp1
-rw-r--r--contrib/libstdc++/tests/tlist.cc151
-rw-r--r--contrib/libstdc++/tests/tlist.exp44
-rw-r--r--contrib/libstdc++/tests/tmap.cc59
-rw-r--r--contrib/libstdc++/tests/tmap.exp7
-rw-r--r--contrib/libstdc++/tests/tstring.cc249
-rw-r--r--contrib/libstdc++/tests/tstring.exp22
-rw-r--r--contrib/libstdc++/tests/tstring.inp1
-rw-r--r--contrib/libstdc++/tests/tvector.cc20
-rw-r--r--contrib/libstdc++/tests/tvector.exp4
-rw-r--r--contrib/libstdc++/testsuite/ChangeLog94
-rw-r--r--contrib/libstdc++/testsuite/Makefile.in67
-rw-r--r--contrib/libstdc++/testsuite/config/default.exp1
-rw-r--r--contrib/libstdc++/testsuite/configure.in24
-rw-r--r--contrib/libstdc++/testsuite/lib/libstdc++.exp179
-rw-r--r--contrib/libstdc++/testsuite/libstdc++.tests/test.exp34
-rwxr-xr-xcontrib/libstdc++/testsuite_flags.in61
-rw-r--r--contrib/libstdc++/valarray8
-rw-r--r--contrib/libstdc++/valarray.cc50
1067 files changed, 0 insertions, 231490 deletions
diff --git a/contrib/gcc/cccp.1 b/contrib/gcc/cccp.1
deleted file mode 100644
index 84eb19ede54e..000000000000
--- a/contrib/gcc/cccp.1
+++ /dev/null
@@ -1,674 +0,0 @@
-.\" Copyright (c) 1991, 1992, 1993 Free Software Foundation \-*-Text-*-
-.\" See section COPYING for conditions for redistribution
-.TH cpp 1 "30apr1993" "GNU Tools" "GNU Tools"
-.SH NAME
-cccp, cpp \- The GNU C-Compatible Compiler Preprocessor.
-.SH SYNOPSIS
-.hy 0
-.na
-.TP
-.B cccp
-.RB "[\|" \-$ "\|]"
-.RB "[\|" \-A \c
-.I predicate\c
-.RB [ (\c
-.I value\c
-.BR ) ]\|]
-.RB "[\|" \-C "\|]"
-.RB "[\|" \-D \c
-.I name\c
-.RB [ =\c
-.I definition\c
-\&]\|]
-.RB "[\|" \-dD "\|]"
-.RB "[\|" \-dM "\|]"
-.RB "[\|" "\-I\ "\c
-.I directory\c
-\&\|]
-.RB "[\|" \-H "\|]"
-.RB "[\|" \-I\- "\|]"
-.RB "[\|" "\-imacros\ "\c
-.I file\c
-\&\|]
-.RB "[\|" "\-include\ "\c
-.I file\c
-\&\|]
-.RB "[\|" "\-idirafter\ "\c
-.I dir\c
-\&\|]
-.RB "[\|" "\-iprefix\ "\c
-.I prefix\c
-\&\|]
-.RB "[\|" "\-iwithprefix\ "\c
-.I dir\c
-\&\|]
-.RB "[\|" \-lang\-c "\|]"
-.RB "[\|" \-lang\-c++ "\|]"
-.RB "[\|" \-lang\-objc "\|]"
-.RB "[\|" \-lang\-objc++ "\|]"
-.RB "[\|" \-lint "\|]"
-.RB "[\|" \-M\ [ \-MG "\|]]"
-.RB "[\|" \-MM\ [ \-MG "\|]]"
-.RB "[\|" \-MD\ \c
-.I file\ \c
-\&\|]
-.RB "[\|" \-MMD\ \c
-.I file\ \c
-\&\|]
-.RB "[\|" \-nostdinc "\|]"
-.RB "[\|" \-nostdinc++ "\|]"
-.RB "[\|" \-P "\|]"
-.RB "[\|" \-pedantic "\|]"
-.RB "[\|" \-pedantic\-errors "\|]"
-.RB "[\|" \-traditional "\|]"
-.RB "[\|" \-trigraphs "\|]"
-.RB "[\|" \-U \c
-.I name\c
-\&\|]
-.RB "[\|" \-undef "\|]"
-.RB "[\|" \-Wtrigraphs "\|]"
-.RB "[\|" \-Wcomment "\|]"
-.RB "[\|" \-Wall "\|]"
-.RB "[\|" \-Wtraditional "\|]"
-.br
-.RB "[\|" \c
-.I infile\c
-.RB | \- "\|]"
-.RB "[\|" \c
-.I outfile\c
-.RB | \- "\|]"
-.ad b
-.hy 1
-.SH DESCRIPTION
-The C preprocessor is a \c
-.I macro processor\c
-\& that is used automatically by
-the C compiler to transform your program before actual compilation. It is
-called a macro processor because it allows you to define \c
-.I macros\c
-\&,
-which are brief abbreviations for longer constructs.
-
-The C preprocessor provides four separate facilities that you can use as
-you see fit:
-.TP
-\(bu
-Inclusion of header files. These are files of declarations that can be
-substituted into your program.
-.TP
-\(bu
-Macro expansion. You can define \c
-.I macros\c
-\&, which are abbreviations
-for arbitrary fragments of C code, and then the C preprocessor will
-replace the macros with their definitions throughout the program.
-.TP
-\(bu
-Conditional compilation. Using special preprocessing directives, you
-can include or exclude parts of the program according to various
-conditions.
-.TP
-\(bu
-Line control. If you use a program to combine or rearrange source files into
-an intermediate file which is then compiled, you can use line control
-to inform the compiler of where each source line originally came from.
-.PP
-C preprocessors vary in some details. For a full explanation of the
-GNU C preprocessor, see the
-.B info
-file `\|\c
-.B cpp.info\c
-\&\|', or the manual
-.I The C Preprocessor\c
-\&. Both of these are built from the same documentation source file, `\|\c
-.B cpp.texinfo\c
-\&\|'. The GNU C
-preprocessor provides a superset of the features of ANSI Standard C.
-
-ANSI Standard C requires the rejection of many harmless constructs commonly
-used by today's C programs. Such incompatibility would be inconvenient for
-users, so the GNU C preprocessor is configured to accept these constructs
-by default. Strictly speaking, to get ANSI Standard C, you must use the
-options `\|\c
-.B \-trigraphs\c
-\&\|', `\|\c
-.B \-undef\c
-\&\|' and `\|\c
-.B \-pedantic\c
-\&\|', but in
-practice the consequences of having strict ANSI Standard C make it
-undesirable to do this.
-
-Most often when you use the C preprocessor you will not have to invoke it
-explicitly: the C compiler will do so automatically. However, the
-preprocessor is sometimes useful individually.
-
-When you call the preprocessor individually, either name
-(\c
-.B cpp\c
-\& or \c
-.B cccp\c
-\&) will do\(em\&they are completely synonymous.
-
-The C preprocessor expects two file names as arguments, \c
-.I infile\c
-\& and
-\c
-.I outfile\c
-\&. The preprocessor reads \c
-.I infile\c
-\& together with any other
-files it specifies with `\|\c
-.B #include\c
-\&\|'. All the output generated by the
-combined input files is written in \c
-.I outfile\c
-\&.
-
-Either \c
-.I infile\c
-\& or \c
-.I outfile\c
-\& may be `\|\c
-.B \-\c
-\&\|', which as \c
-.I infile\c
-\&
-means to read from standard input and as \c
-.I outfile\c
-\& means to write to
-standard output. Also, if \c
-.I outfile\c
-\& or both file names are omitted,
-the standard output and standard input are used for the omitted file names.
-.SH OPTIONS
-Here is a table of command options accepted by the C preprocessor.
-These options can also be given when compiling a C program; they are
-passed along automatically to the preprocessor when it is invoked by
-the compiler.
-.TP
-.B \-P
-Inhibit generation of `\|\c
-.B #\c
-\&\|'-lines with line-number information in
-the output from the preprocessor. This might be
-useful when running the preprocessor on something that is not C code
-and will be sent to a program which might be confused by the
-`\|\c
-.B #\c
-\&\|'-lines.
-.TP
-.B \-C
-Do not discard comments: pass them through to the output file.
-Comments appearing in arguments of a macro call will be copied to the
-output before the expansion of the macro call.
-.TP
-.B \-traditional
-Try to imitate the behavior of old-fashioned C, as opposed to ANSI C.
-.TP
-.B \-trigraphs
-Process ANSI standard trigraph sequences. These are three-character
-sequences, all starting with `\|\c
-.B ??\c
-\&\|', that are defined by ANSI C to
-stand for single characters. For example, `\|\c
-.B ??/\c
-\&\|' stands for
-`\|\c
-.BR "\e" "\|',"
-so `\|\c
-.B '??/n'\c
-\&\|' is a character constant for a newline.
-Strictly speaking, the GNU C preprocessor does not support all
-programs in ANSI Standard C unless `\|\c
-.B \-trigraphs\c
-\&\|' is used, but if
-you ever notice the difference it will be with relief.
-
-You don't want to know any more about trigraphs.
-.TP
-.B \-pedantic
-Issue warnings required by the ANSI C standard in certain cases such
-as when text other than a comment follows `\|\c
-.B #else\c
-\&\|' or `\|\c
-.B #endif\c
-\&\|'.
-.TP
-.B \-pedantic\-errors
-Like `\|\c
-.B \-pedantic\c
-\&\|', except that errors are produced rather than
-warnings.
-.TP
-.B \-Wtrigraphs
-Warn if any trigraphs are encountered (assuming they are enabled).
-.TP
-.B \-Wcomment
-.TP
-.B \-Wcomments
-Warn whenever a comment-start sequence `\|\c
-.B /*\c
-\&\|' appears in a comment.
-(Both forms have the same effect).
-.TP
-.B \-Wall
-Requests both `\|\c
-.B \-Wtrigraphs\c
-\&\|' and `\|\c
-.B \-Wcomment\c
-\&\|' (but not
-`\|\c
-.B \-Wtraditional\c
-\&\|').
-.TP
-.B \-Wtraditional
-Warn about certain constructs that behave differently in traditional and
-ANSI C.
-.TP
-.BI "\-I " directory\c
-\&
-Add the directory \c
-.I directory\c
-\& to the end of the list of
-directories to be searched for header files.
-This can be used to override a system header file, substituting your
-own version, since these directories are searched before the system
-header file directories. If you use more than one `\|\c
-.B \-I\c
-\&\|' option,
-the directories are scanned in left-to-right order; the standard
-system directories come after.
-.TP
-.B \-I\-
-Any directories specified with `\|\c
-.B \-I\c
-\&\|' options before the `\|\c
-.B \-I\-\c
-\&\|'
-option are searched only for the case of `\|\c
-.B #include "\c
-.I file\c
-\&"\c
-\&\|';
-they are not searched for `\|\c
-.B #include <\c
-.I file\c
-\&>\c
-\&\|'.
-
-If additional directories are specified with `\|\c
-.B \-I\c
-\&\|' options after
-the `\|\c
-.B \-I\-\c
-\&\|', these directories are searched for all `\|\c
-.B #include\c
-\&\|'
-directives.
-
-In addition, the `\|\c
-.B \-I\-\c
-\&\|' option inhibits the use of the current
-directory as the first search directory for `\|\c
-.B #include "\c
-.I file\c
-\&"\c
-\&\|'.
-Therefore, the current directory is searched only if it is requested
-explicitly with `\|\c
-.B \-I.\c
-\&\|'. Specifying both `\|\c
-.B \-I\-\c
-\&\|' and `\|\c
-.B \-I.\c
-\&\|'
-allows you to control precisely which directories are searched before
-the current one and which are searched after.
-.TP
-.B \-nostdinc
-Do not search the standard system directories for header files.
-Only the directories you have specified with `\|\c
-.B \-I\c
-\&\|' options
-(and the current directory, if appropriate) are searched.
-.TP
-.B \-nostdinc++
-Do not search for header files in the C++ specific standard
-directories, but do still search the other standard directories.
-(This option is used when building libg++.)
-.TP
-.BI "\-D " "name"\c
-\&
-Predefine \c
-.I name\c
-\& as a macro, with definition `\|\c
-.B 1\c
-\&\|'.
-.TP
-.BI "\-D " "name" = definition
-\&
-Predefine \c
-.I name\c
-\& as a macro, with definition \c
-.I definition\c
-\&.
-There are no restrictions on the contents of \c
-.I definition\c
-\&, but if
-you are invoking the preprocessor from a shell or shell-like program
-you may need to use the shell's quoting syntax to protect characters
-such as spaces that have a meaning in the shell syntax. If you use more than
-one `\|\c
-.B \-D\c
-\&\|' for the same
-.I name\c
-\&, the rightmost definition takes effect.
-.TP
-.BI "\-U " "name"\c
-\&
-Do not predefine \c
-.I name\c
-\&. If both `\|\c
-.B \-U\c
-\&\|' and `\|\c
-.B \-D\c
-\&\|' are
-specified for one name, the `\|\c
-.B \-U\c
-\&\|' beats the `\|\c
-.B \-D\c
-\&\|' and the name
-is not predefined.
-.TP
-.B \-undef
-Do not predefine any nonstandard macros.
-.TP
-.BI "\-A " "name(" value )
-Assert (in the same way as the \c
-.B #assert\c
-\& directive)
-the predicate \c
-.I name\c
-\& with tokenlist \c
-.I value\c
-\&. Remember to escape or quote the parentheses on
-shell command lines.
-
-You can use `\|\c
-.B \-A-\c
-\&\|' to disable all predefined assertions; it also
-undefines all predefined macros.
-.TP
-.B \-dM
-Instead of outputting the result of preprocessing, output a list of
-`\|\c
-.B #define\c
-\&\|' directives for all the macros defined during the
-execution of the preprocessor, including predefined macros. This gives
-you a way of finding out what is predefined in your version of the
-preprocessor; assuming you have no file `\|\c
-.B foo.h\c
-\&\|', the command
-.sp
-.br
-touch\ foo.h;\ cpp\ \-dM\ foo.h
-.br
-.sp
-will show the values of any predefined macros.
-.TP
-.B \-dD
-Like `\|\c
-.B \-dM\c
-\&\|' except in two respects: it does \c
-.I not\c
-\& include the
-predefined macros, and it outputs \c
-.I both\c
-\& the `\|\c
-.B #define\c
-\&\|'
-directives and the result of preprocessing. Both kinds of output go to
-the standard output file.
-.PP
-.TP
-.BR \-M\ [ \-MG ]
-Instead of outputting the result of preprocessing, output a rule
-suitable for \c
-.B make\c
-\& describing the dependencies of the main
-source file. The preprocessor outputs one \c
-.B make\c
-\& rule containing
-the object file name for that source file, a colon, and the names of
-all the included files. If there are many included files then the
-rule is split into several lines using `\|\c
-.B \\\\\c
-\&\|'-newline.
-
-`\|\c
-.B \-MG\c
-\&\|' says to treat missing header files as generated files and assume \c
-they live in the same directory as the source file. It must be specified \c
-in addition to `\|\c
-.B \-M\c
-\&\|'.
-
-This feature is used in automatic updating of makefiles.
-.TP
-.BR \-MM\ [ \-MG ]
-Like `\|\c
-.B \-M\c
-\&\|' but mention only the files included with `\|\c
-.B #include
-"\c
-.I file\c
-\&"\c
-\&\|'. System header files included with `\|\c
-.B #include
-<\c
-.I file\c
-\&>\c
-\&\|' are omitted.
-.TP
-.BI \-MD\ file
-Like `\|\c
-.B \-M\c
-\&\|' but the dependency information is written to `\|\c
-.I file\c
-\&\|'. This is in addition to compiling the file as
-specified\(em\&`\|\c
-.B \-MD\c
-\&\|' does not inhibit ordinary compilation the way
-`\|\c
-.B \-M\c
-\&\|' does.
-
-When invoking gcc, do not specify the `\|\c
-.I file\c
-\&\|' argument. Gcc will create file names made by replacing `\|\c
-.B .c\c
-\&\|' with `\|\c
-.B .d\c
-\&\|' at the end of the input file names.
-
-In Mach, you can use the utility \c
-.B md\c
-\& to merge multiple files
-into a single dependency file suitable for using with the `\|\c
-.B make\c
-\&\|'
-command.
-.TP
-.BI \-MMD\ file
-Like `\|\c
-.B \-MD\c
-\&\|' except mention only user header files, not system
-header files.
-.TP
-.B \-H
-Print the name of each header file used, in addition to other normal
-activities.
-.TP
-.BI "\-imacros " "file"\c
-\&
-Process \c
-.I file\c
-\& as input, discarding the resulting output, before
-processing the regular input file. Because the output generated from
-\c
-.I file\c
-\& is discarded, the only effect of `\|\c
-.B \-imacros \c
-.I file\c
-\&\c
-\&\|' is to
-make the macros defined in \c
-.I file\c
-\& available for use in the main
-input. The preprocessor evaluates any `\|\c
-.B \-D\c
-\&\|' and `\|\c
-.B \-U\c
-\&\|' options
-on the command line before processing `\|\c
-.B \-imacros \c
-.I file\c
-\&\|' \c
-\&.
-.TP
-.BI "\-include " "file"
-Process
-.I file
-as input, and include all the resulting output,
-before processing the regular input file.
-.TP
-.BI "-idirafter " "dir"\c
-\&
-Add the directory \c
-.I dir\c
-\& to the second include path. The directories
-on the second include path are searched when a header file is not found
-in any of the directories in the main include path (the one that
-`\|\c
-.B \-I\c
-\&\|' adds to).
-.TP
-.BI "-iprefix " "prefix"\c
-\&
-Specify \c
-.I prefix\c
-\& as the prefix for subsequent `\|\c
-.B \-iwithprefix\c
-\&\|'
-options.
-.TP
-.BI "-iwithprefix " "dir"\c
-\&
-Add a directory to the second include path. The directory's name is
-made by concatenating \c
-.I prefix\c
-\& and \c
-.I dir\c
-\&, where \c
-.I prefix\c
-\&
-was specified previously with `\|\c
-.B \-iprefix\c
-\&\|'.
-.TP
-.B \-lang-c
-.TP
-.B \-lang-c++
-.TP
-.B \-lang-objc
-.TP
-.B \-lang-objc++
-Specify the source language. `\|\c
-.B \-lang-c++\c
-\&\|' makes the preprocessor
-handle C++ comment syntax, and includes extra default include
-directories for C++, and `\|\c
-.B \-lang-objc\c
-\&\|' enables the Objective C
-`\|\c
-.B #import\c
-\&\|' directive. `\|\c
-.B \-lang-c\c
-\&\|' explicitly turns off both of
-these extensions, and `\|\c
-.B \-lang-objc++\c
-\&\|' enables both.
-
-These options are generated by the compiler driver \c
-.B gcc\c
-\&, but not
-passed from the `\|\c
-.B gcc\c
-\&\|' command line.
-.TP
-.B \-lint
-Look for commands to the program checker \c
-.B lint\c
-\& embedded in
-comments, and emit them preceded by `\|\c
-.B #pragma lint\c
-\&\|'. For example,
-the comment `\|\c
-.B /* NOTREACHED */\c
-\&\|' becomes `\|\c
-.B #pragma lint
-NOTREACHED\c
-\&\|'.
-
-This option is available only when you call \c
-.B cpp\c
-\& directly;
-\c
-.B gcc\c
-\& will not pass it from its command line.
-.TP
-.B \-$
-Forbid the use of `\|\c
-.B $\c
-\&\|' in identifiers. This was formerly required for strict conformance
-to the C Standard before the standard was corrected. \c
-
-This option is available only when you call \c
-.B cpp\c
-\& directly;
-.B gcc\c
-\& will not pass it from its command line.
-.SH "SEE ALSO"
-.RB "`\|" Cpp "\|'"
-entry in
-.B info\c
-\&;
-.I The C Preprocessor\c
-, Richard M. Stallman.
-.br
-.BR gcc "(" 1 ");"
-.RB "`\|" Gcc "\|'"
-entry in
-.B info\c
-\&;
-.I
-Using and Porting GNU CC (for version 2.0)\c
-, Richard M. Stallman.
-.SH COPYING
-Copyright (c) 1991, 1992, 1993 Free Software Foundation, Inc.
-.PP
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-.PP
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-.PP
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
diff --git a/contrib/gcc/config/alpha/crtbegin.asm b/contrib/gcc/config/alpha/crtbegin.asm
deleted file mode 100644
index f954f1ab0d3e..000000000000
--- a/contrib/gcc/config/alpha/crtbegin.asm
+++ /dev/null
@@ -1,192 +0,0 @@
- # Copyright (C) 1996, 1998 Free Software Foundation, Inc.
- # Contributed by Richard Henderson (rth@tamu.edu)
- #
- # This file is free software; you can redistribute it and/or modify it
- # under the terms of the GNU General Public License as published by the
- # Free Software Foundation; either version 2, or (at your option) any
- # later version.
- #
- # In addition to the permissions in the GNU General Public License, the
- # Free Software Foundation gives you unlimited permission to link the
- # compiled version of this file with other programs, and to distribute
- # those programs without any restriction coming from the use of this
- # file. (The General Public License restrictions do apply in other
- # respects; for example, they cover modification of the file, and
- # distribution when not linked into another program.)
- #
- # This file is distributed in the hope that it will be useful, but
- # WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- # General Public License for more details.
- #
- # You should have received a copy of the GNU General Public License
- # along with this program; see the file COPYING. If not, write to
- # the Free Software Foundation, 59 Temple Place - Suite 330,
- # Boston, MA 02111-1307, USA.
- #
- # As a special exception, if you link this library with files
- # compiled with GCC to produce an executable, this does not cause
- # the resulting executable to be covered by the GNU General Public License.
- # This exception does not however invalidate any other reasons why
- # the executable file might be covered by the GNU General Public License.
-
- #
- # Heads of the constructor/destructor lists.
- #
-
- # The __*TOR_LIST__ symbols are not global because when this file is used
- # in a shared library, we do not want the symbol to fall over to the
- # application's lists.
-
-.section .ctors,"aw"
-
- .align 3
-__CTOR_LIST__:
- .quad -1
-
-.section .dtors,"aw"
-
- .align 3
-__DTOR_LIST__:
- .quad -1
-
-.section .eh_frame,"aw"
-__EH_FRAME_BEGIN__:
-
- #
- # Fragment of the ELF _fini routine that invokes our dtor cleanup.
- #
-
-.section .fini,"ax"
-
- # Since the bits of the _fini function are spread across many
- # object files, each potentially with its own GP, we must
- # assume we need to load ours. Further, our .fini section
- # can easily be more than 4MB away from our .text bits so we
- # can't use bsr.
-
- br $29,1f
-1: ldgp $29,0($29)
- jsr $26,__do_global_dtors_aux
-
- # Ideally this call would go in crtend.o, except that we can't
- # get hold of __EH_FRAME_BEGIN__ there.
-
- jsr $26,__do_frame_takedown
-
- # Must match the alignment we got from crti.o else we get
- # zero-filled holes in our _fini function and then SIGILL.
- .align 3
-
- #
- # Fragment of the ELF _init routine that sets up the frame info.
- #
-
-.section .init,"ax"
- br $29,1f
-1: ldgp $29,0($29)
- jsr $26,__do_frame_setup
- .align 3
-
- #
- # Invoke our destructors in order.
- #
-
-.data
-
- # Support recursive calls to exit.
-$ptr: .quad __DTOR_LIST__
-
-.text
-
- .align 3
- .ent __do_global_dtors_aux
-
-__do_global_dtors_aux:
- lda $30,-16($30)
- .frame $30,16,$26,0
- stq $9,8($30)
- stq $26,0($30)
- .mask 0x4000200,-16
- .prologue 0
-
- lda $9,$ptr
- br 1f
-0: stq $1,0($9)
- jsr $26,($27)
-1: ldq $1,0($9)
- ldq $27,8($1)
- addq $1,8,$1
- bne $27,0b
-
- ldq $26,0($30)
- ldq $9,8($30)
- lda $30,16($30)
- ret
-
- .end __do_global_dtors_aux
-
- #
- # Install our frame info.
- #
-
- # ??? How can we rationally keep this size correct?
-
-.section .bss
- .type $object,@object
- .align 3
-$object:
- .zero 48
- .size $object, 48
-
-.text
-
- .align 3
- .ent __do_frame_setup
-
-__do_frame_setup:
- ldgp $29,0($27)
- lda $30,-16($30)
- .frame $30,16,$26,0
- stq $26,0($30)
- .mask 0x4000000,-16
- .prologue 1
-
- lda $1,__register_frame_info
- beq $1,0f
- lda $16,__EH_FRAME_BEGIN__
- lda $17,$object
- jsr $26,__register_frame_info
- ldq $26,0($30)
-0: lda $30,16($30)
- ret
-
- .end __do_frame_setup
-
- #
- # Remove our frame info.
- #
-
- .align 3
- .ent __do_frame_takedown
-
-__do_frame_takedown:
- ldgp $29,0($27)
- lda $30,-16($30)
- .frame $30,16,$26,0
- stq $26,0($30)
- .mask 0x4000000,-16
- .prologue 1
-
- lda $1,__deregister_frame_info
- beq $1,0f
- lda $16,__EH_FRAME_BEGIN__
- jsr $26,__deregister_frame_info
- ldq $26,0($30)
-0: lda $30,16($30)
- ret
-
- .end __do_frame_takedown
-
-.weak __register_frame_info
-.weak __deregister_frame_info
diff --git a/contrib/gcc/config/alpha/crtend.asm b/contrib/gcc/config/alpha/crtend.asm
deleted file mode 100644
index 4a0cc5e9f612..000000000000
--- a/contrib/gcc/config/alpha/crtend.asm
+++ /dev/null
@@ -1,108 +0,0 @@
- # Copyright (C) 1996 Free Software Foundation, Inc.
- # Contributed by Richard Henderson (rth@tamu.edu)
- #
- # This file is free software; you can redistribute it and/or modify it
- # under the terms of the GNU General Public License as published by the
- # Free Software Foundation; either version 2, or (at your option) any
- # later version.
- #
- # In addition to the permissions in the GNU General Public License, the
- # Free Software Foundation gives you unlimited permission to link the
- # compiled version of this file with other programs, and to distribute
- # those programs without any restriction coming from the use of this
- # file. (The General Public License restrictions do apply in other
- # respects; for example, they cover modification of the file, and
- # distribution when not linked into another program.)
- #
- # This file is distributed in the hope that it will be useful, but
- # WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- # General Public License for more details.
- #
- # You should have received a copy of the GNU General Public License
- # along with this program; see the file COPYING. If not, write to
- # the Free Software Foundation, 59 Temple Place - Suite 330,
- # Boston, MA 02111-1307, USA.
- #
- # As a special exception, if you link this library with files
- # compiled with GCC to produce an executable, this does not cause
- # the resulting executable to be covered by the GNU General Public License.
- # This exception does not however invalidate any other reasons why
- # the executable file might be covered by the GNU General Public License.
-
- #
- # Tails of the constructor/destructor lists.
- #
-
- # The __*TOR_END__ symbols are not global because when this file is used
- # in a shared library, we do not want the symbol to fall over to the
- # application's lists.
-
-.section .ctors,"aw"
-
- .align 3
-__CTOR_END__:
- .quad 0
-
-.section .dtors,"aw"
-
- .align 3
-__DTOR_END__:
- .quad 0
-
-.section .eh_frame,"aw"
-__FRAME_END__:
- .quad 0
-
- #
- # Fragment of the ELF _init routine that invokes our ctor startup
- #
-
-.section .init,"ax"
-
- # Since the bits of the _init function are spread across many
- # object files, each potentially with its own GP, we must
- # assume we need to load ours. Further, our .init section
- # can easily be more than 4MB away from our .text bits so we
- # can't use bsr.
-
- br $29,1f
-1: ldgp $29,0($29)
- jsr $26,__do_global_ctors_aux
-
- # Must match the alignment we got from crti.o else we get
- # zero-filled holes in our _init function and thense SIGILL.
- .align 3
-
- #
- # Invoke our destructors in order.
- #
-
-.text
-
- .align 3
- .ent __do_global_ctors_aux
-
-__do_global_ctors_aux:
- ldgp $29,0($27)
- lda $30,-16($30)
- .frame $30,16,$26,0
- stq $9,8($30)
- stq $26,0($30)
- .mask 0x4000200,-16
- .prologue 1
-
- lda $9,__CTOR_END__
- br 1f
-0: jsr $26,($27)
-1: ldq $27,-8($9)
- subq $9,8,$9
- not $27,$0
- bne $0,0b
-
- ldq $26,0($30)
- ldq $9,8($30)
- lda $30,16($30)
- ret
-
- .end __do_global_ctors_aux
diff --git a/contrib/gcc/config/alpha/gdb-osf12.h b/contrib/gcc/config/alpha/gdb-osf12.h
deleted file mode 100644
index 98c289714017..000000000000
--- a/contrib/gcc/config/alpha/gdb-osf12.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/* Definitions of target machine for GNU compiler, for DEC Alpha, using
- encapsulated stabs and OSF V1.2.
- Copyright (C) 1994 Free Software Foundation, Inc.
- Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
-
-This file is part of GNU CC.
-
-GNU CC is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU CC is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-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. */
-
-#include "alpha/osf12.h"
-
-#undef PREFERRED_DEBUGGING_TYPE
-#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
diff --git a/contrib/gcc/config/alpha/gdb-osf2.h b/contrib/gcc/config/alpha/gdb-osf2.h
deleted file mode 100644
index 5ddb7981b34d..000000000000
--- a/contrib/gcc/config/alpha/gdb-osf2.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/* Definitions of target machine for GNU compiler, for DEC Alpha, using
- encapsulated stabs.
- Copyright (C) 1992, 1993 Free Software Foundation, Inc.
- Contributed by Peter Schauer (pes@regent.e-technik.tu-muenchen.de).
-
-This file is part of GNU CC.
-
-GNU CC is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU CC is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-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. */
-
-#include "alpha/osf2.h"
-
-#undef PREFERRED_DEBUGGING_TYPE
-#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
diff --git a/contrib/gcc/config/alpha/gdb.h b/contrib/gcc/config/alpha/gdb.h
deleted file mode 100644
index ecdbe40a9a45..000000000000
--- a/contrib/gcc/config/alpha/gdb.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/* Definitions of target machine for GNU compiler, for DEC Alpha, using
- encapsulated stabs.
- Copyright (C) 1992, 1993 Free Software Foundation, Inc.
- Contributed by Peter Schauer (pes@regent.e-technik.tu-muenchen.de).
-
-This file is part of GNU CC.
-
-GNU CC is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU CC is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-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. */
-
-#include "alpha/alpha.h"
-
-#undef PREFERRED_DEBUGGING_TYPE
-#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
diff --git a/contrib/gcc/config/alpha/osf2.h b/contrib/gcc/config/alpha/osf2.h
deleted file mode 100644
index 169af5a01c97..000000000000
--- a/contrib/gcc/config/alpha/osf2.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Definitions of target machine for GNU compiler, for DEC Alpha.
- Copyright (C) 1992, 1993, 1994 Free Software Foundation, Inc.
- Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
-
-This file is part of GNU CC.
-
-GNU CC is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU CC is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-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. */
-
-
-#include "alpha/alpha.h"
-
-/* In OSF 2.0, the size of wchar_t was changed from short unsigned
- to unsigned int. */
-
-#undef WCHAR_TYPE
-#define WCHAR_TYPE "unsigned int"
-
-#undef WCHAR_TYPE_SIZE
-#define WCHAR_TYPE_SIZE 32
diff --git a/contrib/gcc/config/i386/freebsd-elf.h b/contrib/gcc/config/i386/freebsd-elf.h
deleted file mode 100644
index e97d4ca07bb2..000000000000
--- a/contrib/gcc/config/i386/freebsd-elf.h
+++ /dev/null
@@ -1,257 +0,0 @@
-/* Definitions for Intel 386 running FreeBSD with ELF format
- Copyright (C) 1996 Free Software Foundation, Inc.
- Contributed by Eric Youngdale.
- Modified for stabs-in-ELF by H.J. Lu.
- Adapted from GNU/Linux version by John Polstra.
- Continued development by David O'Brien <obrien@freebsd.org>
-
-This file is part of GNU CC.
-
-GNU CC is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU CC is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-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. */
-
-#undef TARGET_VERSION
-#define TARGET_VERSION fprintf (stderr, " (i386 FreeBSD/ELF)");
-
-/* The svr4 ABI for the i386 says that records and unions are returned
- in memory. */
-/* On FreeBSD, we do not. */
-#undef DEFAULT_PCC_STRUCT_RETURN
-#define DEFAULT_PCC_STRUCT_RETURN 0
-
-/* This gets defined in tm.h->linux.h->svr4.h, and keeps us from using
- libraries compiled with the native cc, so undef it. */
-#undef NO_DOLLAR_IN_LABEL
-
-/* Use more efficient ``thunks'' to implement C++ vtables. */
-#undef DEFAULT_VTABLE_THUNKS
-#define DEFAULT_VTABLE_THUNKS 1
-
-/* Override the default comment-starter of "/". */
-#undef ASM_COMMENT_START
-#define ASM_COMMENT_START "#"
-
-#undef ASM_APP_ON
-#define ASM_APP_ON "#APP\n"
-
-#undef ASM_APP_OFF
-#define ASM_APP_OFF "#NO_APP\n"
-
-#undef SET_ASM_OP
-#define SET_ASM_OP ".set"
-
-/* This is how to output an element of a case-vector that is relative.
- This is only used for PIC code. See comments by the `casesi' insn in
- i386.md for an explanation of the expression this outputs. */
-#undef ASM_OUTPUT_ADDR_DIFF_ELT
-#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \
- fprintf (FILE, "\t.long _GLOBAL_OFFSET_TABLE_+[.-%s%d]\n", LPREFIX, VALUE)
-
-/* Indicate that jump tables go in the text section. This is
- necessary when compiling PIC code. */
-#define JUMP_TABLES_IN_TEXT_SECTION (flag_pic)
-
-/* Use stabs instead of DWARF debug format. */
-#undef PREFERRED_DEBUGGING_TYPE
-#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
-
-/* Copy this from the svr4 specifications... */
-/* Define the register numbers to be used in Dwarf debugging information.
- The SVR4 reference port C compiler uses the following register numbers
- in its Dwarf output code:
- 0 for %eax (gnu regno = 0)
- 1 for %ecx (gnu regno = 2)
- 2 for %edx (gnu regno = 1)
- 3 for %ebx (gnu regno = 3)
- 4 for %esp (gnu regno = 7)
- 5 for %ebp (gnu regno = 6)
- 6 for %esi (gnu regno = 4)
- 7 for %edi (gnu regno = 5)
- The following three DWARF register numbers are never generated by
- the SVR4 C compiler or by the GNU compilers, but SDB on x86/svr4
- believes these numbers have these meanings.
- 8 for %eip (no gnu equivalent)
- 9 for %eflags (no gnu equivalent)
- 10 for %trapno (no gnu equivalent)
- It is not at all clear how we should number the FP stack registers
- for the x86 architecture. If the version of SDB on x86/svr4 were
- a bit less brain dead with respect to floating-point then we would
- have a precedent to follow with respect to DWARF register numbers
- for x86 FP registers, but the SDB on x86/svr4 is so completely
- broken with respect to FP registers that it is hardly worth thinking
- of it as something to strive for compatibility with.
- The version of x86/svr4 SDB I have at the moment does (partially)
- seem to believe that DWARF register number 11 is associated with
- the x86 register %st(0), but that's about all. Higher DWARF
- register numbers don't seem to be associated with anything in
- particular, and even for DWARF regno 11, SDB only seems to under-
- stand that it should say that a variable lives in %st(0) (when
- asked via an `=' command) if we said it was in DWARF regno 11,
- but SDB still prints garbage when asked for the value of the
- variable in question (via a `/' command).
- (Also note that the labels SDB prints for various FP stack regs
- when doing an `x' command are all wrong.)
- Note that these problems generally don't affect the native SVR4
- C compiler because it doesn't allow the use of -O with -g and
- because when it is *not* optimizing, it allocates a memory
- location for each floating-point variable, and the memory
- location is what gets described in the DWARF AT_location
- attribute for the variable in question.
- Regardless of the severe mental illness of the x86/svr4 SDB, we
- do something sensible here and we use the following DWARF
- register numbers. Note that these are all stack-top-relative
- numbers.
- 11 for %st(0) (gnu regno = 8)
- 12 for %st(1) (gnu regno = 9)
- 13 for %st(2) (gnu regno = 10)
- 14 for %st(3) (gnu regno = 11)
- 15 for %st(4) (gnu regno = 12)
- 16 for %st(5) (gnu regno = 13)
- 17 for %st(6) (gnu regno = 14)
- 18 for %st(7) (gnu regno = 15)
-*/
-#undef DBX_REGISTER_NUMBER
-#define DBX_REGISTER_NUMBER(n) \
-((n) == 0 ? 0 \
- : (n) == 1 ? 2 \
- : (n) == 2 ? 1 \
- : (n) == 3 ? 3 \
- : (n) == 4 ? 6 \
- : (n) == 5 ? 7 \
- : (n) == 6 ? 5 \
- : (n) == 7 ? 4 \
- : ((n) >= FIRST_STACK_REG && (n) <= LAST_STACK_REG) ? (n)+3 \
- : (-1))
-
-/* Tell final.c that we don't need a label passed to mcount. */
-
-#undef FUNCTION_PROFILER
-#define FUNCTION_PROFILER(FILE, LABELNO) \
-{ \
- if (flag_pic) \
- fprintf (FILE, "\tcall *.mcount@GOT(%%ebx)\n"); \
- else \
- fprintf (FILE, "\tcall .mcount\n"); \
-}
-
-#undef SIZE_TYPE
-#define SIZE_TYPE "unsigned int"
-
-#undef PTRDIFF_TYPE
-#define PTRDIFF_TYPE "int"
-
-#undef WCHAR_TYPE
-#define WCHAR_TYPE "int"
-
-#undef WCHAR_UNSIGNED
-#define WCHAR_UNSIGNED 0
-
-#undef WCHAR_TYPE_SIZE
-#define WCHAR_TYPE_SIZE BITS_PER_WORD
-
-#undef CPP_PREDEFINES
-#define CPP_PREDEFINES "-Di386 -Dunix -D__ELF__ -D__FreeBSD__ -Asystem(unix) -Asystem(FreeBSD) -Acpu(i386) -Amachine(i386)"
-
-#undef CPP_SPEC
-#define CPP_SPEC "%(cpp_cpu) %{fPIC:-D__PIC__ -D__pic__} %{fpic:-D__PIC__ -D__pic__} %{posix:-D_POSIX_SOURCE}"
-
-/* This defines which switch letters take arguments. On FreeBSD, most of
- the normal cases (defined in gcc.c) apply, and we also have -h* and
- -z* options (for the linker) (comming from svr4).
- We also have -R (alias --rpath), no -z, --soname (-h), --assert etc. */
-
-#undef SWITCH_TAKES_ARG
-#define SWITCH_TAKES_ARG(CHAR) \
- (DEFAULT_SWITCH_TAKES_ARG (CHAR) \
- || (CHAR) == 'h' \
- || (CHAR) == 'z' \
- || (CHAR) == 'R')
-
-/* Provide a STARTFILE_SPEC appropriate for FreeBSD. Here we add
- the magical crtbegin.o file (see crtstuff.c) which provides part
- of the support for getting C++ file-scope static object constructed
- before entering `main'. */
-
-#undef STARTFILE_SPEC
-#define STARTFILE_SPEC \
- "%{!shared: \
- %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} \
- %{!p:%{profile:gcrt1.o%s} \
- %{!profile:crt1.o%s}}}} \
- crti.o%s %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}"
-
-/* Provide a ENDFILE_SPEC appropriate for FreeBSD. Here we tack on
- the magical crtend.o file (see crtstuff.c) which provides part of
- the support for getting C++ file-scope static object constructed
- before entering `main', followed by a normal "finalizer" file,
- `crtn.o'. */
-
-#undef ENDFILE_SPEC
-#define ENDFILE_SPEC \
- "%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s"
-
-/* Provide a LIB_SPEC appropriate for FreeBSD. Just select the appropriate
- libc, depending on whether we're doing profiling or need threads support.
- (simular to the default, except no -lg, and no -p. */
-
-#undef LIB_SPEC
-#define LIB_SPEC "%{!shared: \
- %{!pg:%{!pthread:%{!kthread:-lc} \
- %{kthread:-lpthread -lc}} \
- %{pthread:-lc_r}} \
- %{pg:%{!pthread:%{!kthread:-lc_p} \
- %{kthread:-lpthread_p -lc_p}} \
- %{pthread:-lc_r_p}}}"
-
-/* Provide a LINK_SPEC appropriate for FreeBSD. Here we provide support
- for the special GCC options -static and -shared, which allow us to
- link things in one of these three modes by applying the appropriate
- combinations of options at link-time. We like to support here for
- as many of the other GNU linker options as possible. But I don't
- have the time to search for those flags. I am sure how to add
- support for -soname shared_object_name. H.J.
-
- I took out %{v:%{!V:-V}}. It is too much :-(. They can use
- -Wl,-V.
-
- When the -shared link option is used a final link is not being
- done. */
-
-#undef LINK_SPEC
-#define LINK_SPEC "-m elf_i386 \
- %{Wl,*:%*} \
- %{v:-V} \
- %{assert*} %{R*} %{rpath*} %{defsym*} \
- %{shared:-Bshareable %{h*} %{soname*}} \
- %{!shared: \
- %{!static: \
- %{rdynamic:-export-dynamic} \
- %{!dynamic-linker:-dynamic-linker /usr/libexec/ld-elf.so.1}} \
- %{static:-Bstatic}} \
- %{symbolic:-Bsymbolic}"
-
-/* A C statement to output to the stdio stream FILE an assembler
- command to advance the location counter to a multiple of 1<<LOG
- bytes if it is within MAX_SKIP bytes.
-
- This is used to align code labels according to Intel recommendations. */
-
-#ifdef HAVE_GAS_MAX_SKIP_P2ALIGN
-#define ASM_OUTPUT_MAX_SKIP_ALIGN(FILE,LOG,MAX_SKIP) \
- if ((LOG) != 0) {\
- if ((MAX_SKIP) == 0) fprintf ((FILE), "\t.p2align %d\n", (LOG)); \
- else fprintf ((FILE), "\t.p2align %d,,%d\n", (LOG), (MAX_SKIP)); \
- }
-#endif
diff --git a/contrib/gcc/config/i386/freebsd.h.fixed b/contrib/gcc/config/i386/freebsd.h.fixed
deleted file mode 100644
index e97d4ca07bb2..000000000000
--- a/contrib/gcc/config/i386/freebsd.h.fixed
+++ /dev/null
@@ -1,257 +0,0 @@
-/* Definitions for Intel 386 running FreeBSD with ELF format
- Copyright (C) 1996 Free Software Foundation, Inc.
- Contributed by Eric Youngdale.
- Modified for stabs-in-ELF by H.J. Lu.
- Adapted from GNU/Linux version by John Polstra.
- Continued development by David O'Brien <obrien@freebsd.org>
-
-This file is part of GNU CC.
-
-GNU CC is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU CC is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-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. */
-
-#undef TARGET_VERSION
-#define TARGET_VERSION fprintf (stderr, " (i386 FreeBSD/ELF)");
-
-/* The svr4 ABI for the i386 says that records and unions are returned
- in memory. */
-/* On FreeBSD, we do not. */
-#undef DEFAULT_PCC_STRUCT_RETURN
-#define DEFAULT_PCC_STRUCT_RETURN 0
-
-/* This gets defined in tm.h->linux.h->svr4.h, and keeps us from using
- libraries compiled with the native cc, so undef it. */
-#undef NO_DOLLAR_IN_LABEL
-
-/* Use more efficient ``thunks'' to implement C++ vtables. */
-#undef DEFAULT_VTABLE_THUNKS
-#define DEFAULT_VTABLE_THUNKS 1
-
-/* Override the default comment-starter of "/". */
-#undef ASM_COMMENT_START
-#define ASM_COMMENT_START "#"
-
-#undef ASM_APP_ON
-#define ASM_APP_ON "#APP\n"
-
-#undef ASM_APP_OFF
-#define ASM_APP_OFF "#NO_APP\n"
-
-#undef SET_ASM_OP
-#define SET_ASM_OP ".set"
-
-/* This is how to output an element of a case-vector that is relative.
- This is only used for PIC code. See comments by the `casesi' insn in
- i386.md for an explanation of the expression this outputs. */
-#undef ASM_OUTPUT_ADDR_DIFF_ELT
-#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \
- fprintf (FILE, "\t.long _GLOBAL_OFFSET_TABLE_+[.-%s%d]\n", LPREFIX, VALUE)
-
-/* Indicate that jump tables go in the text section. This is
- necessary when compiling PIC code. */
-#define JUMP_TABLES_IN_TEXT_SECTION (flag_pic)
-
-/* Use stabs instead of DWARF debug format. */
-#undef PREFERRED_DEBUGGING_TYPE
-#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
-
-/* Copy this from the svr4 specifications... */
-/* Define the register numbers to be used in Dwarf debugging information.
- The SVR4 reference port C compiler uses the following register numbers
- in its Dwarf output code:
- 0 for %eax (gnu regno = 0)
- 1 for %ecx (gnu regno = 2)
- 2 for %edx (gnu regno = 1)
- 3 for %ebx (gnu regno = 3)
- 4 for %esp (gnu regno = 7)
- 5 for %ebp (gnu regno = 6)
- 6 for %esi (gnu regno = 4)
- 7 for %edi (gnu regno = 5)
- The following three DWARF register numbers are never generated by
- the SVR4 C compiler or by the GNU compilers, but SDB on x86/svr4
- believes these numbers have these meanings.
- 8 for %eip (no gnu equivalent)
- 9 for %eflags (no gnu equivalent)
- 10 for %trapno (no gnu equivalent)
- It is not at all clear how we should number the FP stack registers
- for the x86 architecture. If the version of SDB on x86/svr4 were
- a bit less brain dead with respect to floating-point then we would
- have a precedent to follow with respect to DWARF register numbers
- for x86 FP registers, but the SDB on x86/svr4 is so completely
- broken with respect to FP registers that it is hardly worth thinking
- of it as something to strive for compatibility with.
- The version of x86/svr4 SDB I have at the moment does (partially)
- seem to believe that DWARF register number 11 is associated with
- the x86 register %st(0), but that's about all. Higher DWARF
- register numbers don't seem to be associated with anything in
- particular, and even for DWARF regno 11, SDB only seems to under-
- stand that it should say that a variable lives in %st(0) (when
- asked via an `=' command) if we said it was in DWARF regno 11,
- but SDB still prints garbage when asked for the value of the
- variable in question (via a `/' command).
- (Also note that the labels SDB prints for various FP stack regs
- when doing an `x' command are all wrong.)
- Note that these problems generally don't affect the native SVR4
- C compiler because it doesn't allow the use of -O with -g and
- because when it is *not* optimizing, it allocates a memory
- location for each floating-point variable, and the memory
- location is what gets described in the DWARF AT_location
- attribute for the variable in question.
- Regardless of the severe mental illness of the x86/svr4 SDB, we
- do something sensible here and we use the following DWARF
- register numbers. Note that these are all stack-top-relative
- numbers.
- 11 for %st(0) (gnu regno = 8)
- 12 for %st(1) (gnu regno = 9)
- 13 for %st(2) (gnu regno = 10)
- 14 for %st(3) (gnu regno = 11)
- 15 for %st(4) (gnu regno = 12)
- 16 for %st(5) (gnu regno = 13)
- 17 for %st(6) (gnu regno = 14)
- 18 for %st(7) (gnu regno = 15)
-*/
-#undef DBX_REGISTER_NUMBER
-#define DBX_REGISTER_NUMBER(n) \
-((n) == 0 ? 0 \
- : (n) == 1 ? 2 \
- : (n) == 2 ? 1 \
- : (n) == 3 ? 3 \
- : (n) == 4 ? 6 \
- : (n) == 5 ? 7 \
- : (n) == 6 ? 5 \
- : (n) == 7 ? 4 \
- : ((n) >= FIRST_STACK_REG && (n) <= LAST_STACK_REG) ? (n)+3 \
- : (-1))
-
-/* Tell final.c that we don't need a label passed to mcount. */
-
-#undef FUNCTION_PROFILER
-#define FUNCTION_PROFILER(FILE, LABELNO) \
-{ \
- if (flag_pic) \
- fprintf (FILE, "\tcall *.mcount@GOT(%%ebx)\n"); \
- else \
- fprintf (FILE, "\tcall .mcount\n"); \
-}
-
-#undef SIZE_TYPE
-#define SIZE_TYPE "unsigned int"
-
-#undef PTRDIFF_TYPE
-#define PTRDIFF_TYPE "int"
-
-#undef WCHAR_TYPE
-#define WCHAR_TYPE "int"
-
-#undef WCHAR_UNSIGNED
-#define WCHAR_UNSIGNED 0
-
-#undef WCHAR_TYPE_SIZE
-#define WCHAR_TYPE_SIZE BITS_PER_WORD
-
-#undef CPP_PREDEFINES
-#define CPP_PREDEFINES "-Di386 -Dunix -D__ELF__ -D__FreeBSD__ -Asystem(unix) -Asystem(FreeBSD) -Acpu(i386) -Amachine(i386)"
-
-#undef CPP_SPEC
-#define CPP_SPEC "%(cpp_cpu) %{fPIC:-D__PIC__ -D__pic__} %{fpic:-D__PIC__ -D__pic__} %{posix:-D_POSIX_SOURCE}"
-
-/* This defines which switch letters take arguments. On FreeBSD, most of
- the normal cases (defined in gcc.c) apply, and we also have -h* and
- -z* options (for the linker) (comming from svr4).
- We also have -R (alias --rpath), no -z, --soname (-h), --assert etc. */
-
-#undef SWITCH_TAKES_ARG
-#define SWITCH_TAKES_ARG(CHAR) \
- (DEFAULT_SWITCH_TAKES_ARG (CHAR) \
- || (CHAR) == 'h' \
- || (CHAR) == 'z' \
- || (CHAR) == 'R')
-
-/* Provide a STARTFILE_SPEC appropriate for FreeBSD. Here we add
- the magical crtbegin.o file (see crtstuff.c) which provides part
- of the support for getting C++ file-scope static object constructed
- before entering `main'. */
-
-#undef STARTFILE_SPEC
-#define STARTFILE_SPEC \
- "%{!shared: \
- %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} \
- %{!p:%{profile:gcrt1.o%s} \
- %{!profile:crt1.o%s}}}} \
- crti.o%s %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}"
-
-/* Provide a ENDFILE_SPEC appropriate for FreeBSD. Here we tack on
- the magical crtend.o file (see crtstuff.c) which provides part of
- the support for getting C++ file-scope static object constructed
- before entering `main', followed by a normal "finalizer" file,
- `crtn.o'. */
-
-#undef ENDFILE_SPEC
-#define ENDFILE_SPEC \
- "%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s"
-
-/* Provide a LIB_SPEC appropriate for FreeBSD. Just select the appropriate
- libc, depending on whether we're doing profiling or need threads support.
- (simular to the default, except no -lg, and no -p. */
-
-#undef LIB_SPEC
-#define LIB_SPEC "%{!shared: \
- %{!pg:%{!pthread:%{!kthread:-lc} \
- %{kthread:-lpthread -lc}} \
- %{pthread:-lc_r}} \
- %{pg:%{!pthread:%{!kthread:-lc_p} \
- %{kthread:-lpthread_p -lc_p}} \
- %{pthread:-lc_r_p}}}"
-
-/* Provide a LINK_SPEC appropriate for FreeBSD. Here we provide support
- for the special GCC options -static and -shared, which allow us to
- link things in one of these three modes by applying the appropriate
- combinations of options at link-time. We like to support here for
- as many of the other GNU linker options as possible. But I don't
- have the time to search for those flags. I am sure how to add
- support for -soname shared_object_name. H.J.
-
- I took out %{v:%{!V:-V}}. It is too much :-(. They can use
- -Wl,-V.
-
- When the -shared link option is used a final link is not being
- done. */
-
-#undef LINK_SPEC
-#define LINK_SPEC "-m elf_i386 \
- %{Wl,*:%*} \
- %{v:-V} \
- %{assert*} %{R*} %{rpath*} %{defsym*} \
- %{shared:-Bshareable %{h*} %{soname*}} \
- %{!shared: \
- %{!static: \
- %{rdynamic:-export-dynamic} \
- %{!dynamic-linker:-dynamic-linker /usr/libexec/ld-elf.so.1}} \
- %{static:-Bstatic}} \
- %{symbolic:-Bsymbolic}"
-
-/* A C statement to output to the stdio stream FILE an assembler
- command to advance the location counter to a multiple of 1<<LOG
- bytes if it is within MAX_SKIP bytes.
-
- This is used to align code labels according to Intel recommendations. */
-
-#ifdef HAVE_GAS_MAX_SKIP_P2ALIGN
-#define ASM_OUTPUT_MAX_SKIP_ALIGN(FILE,LOG,MAX_SKIP) \
- if ((LOG) != 0) {\
- if ((MAX_SKIP) == 0) fprintf ((FILE), "\t.p2align %d\n", (LOG)); \
- else fprintf ((FILE), "\t.p2align %d,,%d\n", (LOG), (MAX_SKIP)); \
- }
-#endif
diff --git a/contrib/gcc/config/i386/x-freebsd b/contrib/gcc/config/i386/x-freebsd
deleted file mode 100644
index a9b13ba5c819..000000000000
--- a/contrib/gcc/config/i386/x-freebsd
+++ /dev/null
@@ -1,3 +0,0 @@
-# Don't run fixproto
-STMP_FIXPROTO =
-CLIB=-lgnumalloc
diff --git a/contrib/gcc/cp/cfns.h b/contrib/gcc/cp/cfns.h
deleted file mode 100644
index a13916073bd5..000000000000
--- a/contrib/gcc/cp/cfns.h
+++ /dev/null
@@ -1,472 +0,0 @@
-/* C code produced by gperf version 2.7.2 */
-/* Command-line: gperf -o -C -E -k '1-6,$' -j1 -D -N libc_name_p /FBSD/src/gnu/usr.bin/cc/cc1plus/../../../../contrib/gcc/cp/cfns.gperf */
-/* $FreeBSD$ */
-#ifdef __GNUC__
-__inline
-#endif
-static unsigned int hash PARAMS ((const char *, unsigned int));
-#ifdef __GNUC__
-__inline
-#endif
-const char * libc_name_p PARAMS ((const char *, unsigned int));
-/* maximum key range = 1020, duplicates = 1 */
-
-#ifdef __GNUC__
-__inline
-#else
-#ifdef __cplusplus
-inline
-#endif
-#endif
-static unsigned int
-hash (str, len)
- register const char *str;
- register unsigned int len;
-{
- static const unsigned short asso_values[] =
- {
- 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
- 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
- 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
- 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
- 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 0, 1,
- 0, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
- 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
- 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
- 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
- 1038, 1038, 1038, 1038, 1038, 1038, 1038, 247, 218, 144,
- 0, 0, 40, 7, 126, 184, 2, 15, 146, 67,
- 9, 60, 0, 0, 3, 0, 7, 8, 197, 1,
- 40, 8, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
- 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
- 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
- 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
- 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
- 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
- 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
- 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
- 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
- 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
- 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
- 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
- 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
- 1038, 1038, 1038, 1038, 1038, 1038
- };
- register int hval = len;
-
- switch (hval)
- {
- default:
- case 6:
- hval += asso_values[(unsigned char)str[5]];
- case 5:
- hval += asso_values[(unsigned char)str[4]];
- case 4:
- hval += asso_values[(unsigned char)str[3]];
- case 3:
- hval += asso_values[(unsigned char)str[2]];
- case 2:
- hval += asso_values[(unsigned char)str[1]];
- case 1:
- hval += asso_values[(unsigned char)str[0]];
- break;
- }
- return hval + asso_values[(unsigned char)str[len - 1]];
-}
-
-#ifdef __GNUC__
-__inline
-#endif
-const char *
-libc_name_p (str, len)
- register const char *str;
- register unsigned int len;
-{
- enum
- {
- TOTAL_KEYWORDS = 207,
- MIN_WORD_LENGTH = 3,
- MAX_WORD_LENGTH = 10,
- MIN_HASH_VALUE = 18,
- MAX_HASH_VALUE = 1037
- };
-
- static const char * const wordlist[] =
- {
- "gets",
- "puts",
- "sqrt",
- "strerror",
- "strstr",
- "strspn",
- "exp",
- "free",
- "fgets",
- "fputs",
- "fgetws",
- "fputws",
- "pow",
- "fseek",
- "perror",
- "strtod",
- "toupper",
- "towupper",
- "frexp",
- "strtok",
- "fsetpos",
- "ferror",
- "freopen",
- "fgetpos",
- "fopen",
- "wmemset",
- "memset",
- "system",
- "wcsstr",
- "wctype",
- "strxfrm",
- "wcsspn",
- "strcspn",
- "fmod",
- "strcpy",
- "strncpy",
- "strlen",
- "ungetwc",
- "feof",
- "ldexp",
- "isupper",
- "rewind",
- "iswupper",
- "sin",
- "cos",
- "modf",
- "iswpunct",
- "wcstod",
- "log10",
- "log",
- "wcsrtombs",
- "strcmp",
- "fwide",
- "towctrans",
- "strncmp",
- "strtoul",
- "fwrite",
- "exit",
- "swprintf",
- "wcstok",
- "strftime",
- "sprintf",
- "wprintf",
- "strpbrk",
- "time",
- "rand",
- "srand",
- "wmemmove",
- "tan",
- "tolower",
- "fwprintf",
- "towlower",
- "wcstombs",
- "printf",
- "fprintf",
- "strchr",
- "strrchr",
- "wmemcpy",
- "fread",
- "getwchar",
- "putwchar",
- "longjmp",
- "memcpy",
- "wcsxfrm",
- "wcscspn",
- "getc",
- "putc",
- "getwc",
- "putwc",
- "wcscpy",
- "wcsncpy",
- "wcslen",
- "floor",
- "setbuf",
- "ungetc",
- "rename",
- "remove",
- "gmtime",
- "mktime",
- "fgetc",
- "fputc",
- "fgetwc",
- "fputwc",
- "memcmp",
- "iswctype",
- "wmemcmp",
- "ispunct",
- "mbstowcs",
- "wcscmp",
- "mbsrtowcs",
- "setlocale",
- "wcsncmp",
- "wcstoul",
- "strtol",
- "wcsftime",
- "iswprint",
- "wcspbrk",
- "iswdigit",
- "isprint",
- "fclose",
- "atof",
- "islower",
- "iswlower",
- "ctime",
- "wmemchr",
- "memchr",
- "wctrans",
- "strcat",
- "getenv",
- "strncat",
- "iswxdigit",
- "wcschr",
- "wcsrchr",
- "isxdigit",
- "vswprintf",
- "raise",
- "iswspace",
- "vsprintf",
- "vwprintf",
- "vprintf",
- "swscanf",
- "sinh",
- "tmpfile",
- "asin",
- "mblen",
- "acos",
- "mbrlen",
- "cosh",
- "difftime",
- "memmove",
- "abs",
- "tmpnam",
- "vfwprintf",
- "setvbuf",
- "vfprintf",
- "scanf",
- "sscanf",
- "wscanf",
- "fwscanf",
- "ftell",
- "fflush",
- "atexit",
- "iswcntrl",
- "iscntrl",
- "mbrtowc",
- "wcrtomb",
- "fabs",
- "wcstol",
- "strcoll",
- "atan2",
- "tanh",
- "atan",
- "fscanf",
- "clock",
- "getchar",
- "putchar",
- "abort",
- "clearerr",
- "wcscat",
- "wcsncat",
- "isdigit",
- "isgraph",
- "iswgraph",
- "btowc",
- "div",
- "isspace",
- "atol",
- "labs",
- "ceil",
- "mbtowc",
- "wcscoll",
- "wctob",
- "asctime",
- "iswalnum",
- "isalnum",
- "mbsinit",
- "atoi",
- "wctomb",
- "ldiv",
- "signal",
- "realloc",
- "localtime",
- "iswalpha",
- "localeconv",
- "isalpha",
- "malloc",
- "calloc"
- };
-
- static const short lookup[] =
- {
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 0, 1, -1, 2, -1, -1,
- -1, -1, -1, 3, -1, 4, -1, -1,
- -1, -1, 5, -1, -1, -1, -1, -1,
- -1, -1, -1, 6, -1, -1, -1, 7,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 8, 9, 10, 11, -1,
- -1, 12, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 13, -1, -1, 14, -1,
- -1, -1, -1, 15, -1, 16, -1, 17,
- 18, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 19, 20, -1, -1, -1, 21, 22,
- -1, 23, -1, 24, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 25, -1, -1,
- -1, -1, 26, 27, -1, -1, -1, -1,
- -1, -1, -1, -1, 28, -1, 29, 30,
- -1, 31, 32, 33, -1, -1, -1, -1,
- 34, -1, 35, -1, 36, -1, -1, 37,
- 38, -1, -1, -1, -1, -1, -1, 39,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 40, 41, 42, 43, -1, 44,
- -1, -1, -1, 45, -1, -1, -1, -1,
- -1, 46, 47, 48, -1, -1, -1, 49,
- 50, -1, -1, 51, -1, -1, 52, 53,
- -1, -1, -1, -1, -1, 54, 55, -1,
- -1, 56, 57, -1, -1, 58, -1, -1,
- 59, 60, 61, 62, -1, 63, -1, -1,
- -1, -1, -1, -1, -1, -1, 64, 65,
- 66, -1, -1, -1, -1, -1, 67, -1,
- -1, -1, -1, 68, -1, -1, -1, -1,
- -1, -1, -1, -1, 69, 70, 71, 72,
- -1, 73, 74, -1, 75, 76, 77, 78,
- 79, 80, 81, -1, 82, -1, 83, -1,
- -1, 84, 85, 86, 87, 88, -1, 89,
- -1, 90, -1, 91, -1, 92, -1, 93,
- -1, -1, -1, -1, -1, 94, -1, -1,
- -1, -1, -1, -1, 95, 96, -1, -1,
- -1, -1, 97, -1, -1, -1, -1, -1,
- -1, -1, 98, 99, 100, 101, 102, 103,
- 104, 105, -1, -1, -1, -1, -1, 106,
- -1, 107, 108, -1, 109, -1, 110, -1,
- -1, -1, -1, -1, 111, 112, -1, 113,
- -1, -1, -1, -1, -1, -1, -1, -1,
- 114, -1, -1, 115, 116, -1, -1, 117,
- -1, -1, 118, -1, 119, -1, 120, -1,
- -1, 121, -1, 122, -1, -1, -1, 123,
- -1, -1, -1, -1, -1, -1, -1, 124,
- 125, -1, 126, -1, -1, 127, -1, 128,
- 129, 130, -1, 131, 132, -1, 133, -1,
- -1, -1, 134, -1, -1, -1, -1, 135,
- 136, 137, 138, -1, -1, -1, -1, 139,
- 140, 141, -1, 142, -1, 143, 144, 145,
- -1, -1, 146, -1, 147, -1, -1, 148,
- -1, 149, -1, -1, 150, -1, 151, -1,
- -1, -1, 152, -1, -1, 153, -1, -1,
- -1, 154, -1, -1, -1, 155, 156, 157,
- 158, -1, 159, -1, 160, -1, -1, -1,
- -1, -1, 161, 162, 163, -1, -1, -1,
- -1, -1, -1, -719, -1, 166, 167, -43,
- -2, 168, -1, 169, -1, -1, -1, 170,
- -1, -1, -1, 171, -1, -1, 172, -1,
- -1, 173, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 174, 175, -1,
- -1, -1, -1, 176, -1, -1, -1, 177,
- -1, -1, -1, -1, 178, -1, -1, 179,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 180, 181, -1,
- 182, -1, -1, 183, -1, 184, 185, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 186, -1, -1, -1, -1, 187,
- -1, -1, -1, -1, -1, -1, -1, -1,
- 188, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 189,
- 190, -1, -1, -1, -1, 191, -1, -1,
- 192, -1, -1, -1, -1, -1, 193, -1,
- -1, -1, -1, -1, 194, -1, -1, -1,
- -1, -1, -1, -1, 195, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 196, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 197, -1, -1, -1, -1, -1, -1,
- 198, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 199, -1, -1, -1, -1, -1, -1,
- -1, 200, -1, -1, -1, -1, -1, 201,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 202, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 203, -1,
- -1, -1, -1, -1, -1, 204, -1, -1,
- 205, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 206
- };
-
- if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
- {
- register int key = hash (str, len);
-
- if (key <= MAX_HASH_VALUE && key >= 0)
- {
- register int index = lookup[key];
-
- if (index >= 0)
- {
- register const char *s = wordlist[index];
-
- if (*str == *s && !strcmp (str + 1, s + 1))
- return s;
- }
- else if (index < -TOTAL_KEYWORDS)
- {
- register int offset = - 1 - TOTAL_KEYWORDS - index;
- register const char * const *wordptr = &wordlist[TOTAL_KEYWORDS + lookup[offset]];
- register const char * const *wordendptr = wordptr + -lookup[offset + 1];
-
- while (wordptr < wordendptr)
- {
- register const char *s = *wordptr;
-
- if (*str == *s && !strcmp (str + 1, s + 1))
- return s;
- wordptr++;
- }
- }
- }
- }
- return 0;
-}
diff --git a/contrib/gcc/cp/g++.c b/contrib/gcc/cp/g++.c
deleted file mode 100644
index f694898fa966..000000000000
--- a/contrib/gcc/cp/g++.c
+++ /dev/null
@@ -1,582 +0,0 @@
-/* G++ preliminary semantic processing for the compiler driver.
- Copyright (C) 1993, 1994, 1995 Free Software Foundation, Inc.
- Contributed by Brendan Kehoe (brendan@cygnus.com).
-
-This file is part of GNU CC.
-
-GNU CC is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU CC is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-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. */
-
-/* This program is a wrapper to the main `gcc' driver. For GNU C++,
- we need to do two special things: a) append `-lg++' in situations
- where it's appropriate, to link in libg++, and b) add `-xc++'..`-xnone'
- around file arguments named `foo.c' or `foo.i'. So, we do all of
- this semantic processing then just exec gcc with the new argument
- list.
-
- We used to do all of this in a small shell script, but many users
- found the performance of this as a shell script to be unacceptable.
- In situations where your PATH has a lot of NFS-mounted directories,
- using a script that runs sed and other things would be a nasty
- performance hit. With this program, we never search the PATH at all. */
-
-#include "config.h"
-#ifdef __STDC__
-#include <stdarg.h>
-#else
-#include <varargs.h>
-#endif
-#include <stdio.h>
-#include <sys/types.h>
-#if !defined(_WIN32)
-#include <sys/file.h> /* May get R_OK, etc. on some systems. */
-#else
-#include <process.h>
-#endif
-#include <errno.h>
-
-/* Defined to the name of the compiler; if using a cross compiler, the
- Makefile should compile this file with the proper name
- (e.g., "i386-aout-gcc"). */
-#ifndef GCC_NAME
-#define GCC_NAME "gcc"
-#endif
-
-/* This bit is set if we saw a `-xfoo' language specification. */
-#define LANGSPEC (1<<1)
-/* This bit is set if they did `-lm' or `-lmath'. */
-#define MATHLIB (1<<2)
-
-#ifndef MATH_LIBRARY
-#define MATH_LIBRARY "-lm"
-#endif
-
-/* On MSDOS, write temp files in current dir
- because there's no place else we can expect to use. */
-#ifdef __MSDOS__
-#ifndef P_tmpdir
-#define P_tmpdir "."
-#endif
-#ifndef R_OK
-#define R_OK 4
-#define W_OK 2
-#define X_OK 1
-#endif
-#endif
-
-#ifndef VPROTO
-#ifdef __STDC__
-#define PVPROTO(ARGS) ARGS
-#define VPROTO(ARGS) ARGS
-#define VA_START(va_list,var) va_start(va_list,var)
-#else
-#define PVPROTO(ARGS) ()
-#define VPROTO(ARGS) (va_alist) va_dcl
-#define VA_START(va_list,var) va_start(va_list)
-#endif
-#endif
-
-#ifndef errno
-extern int errno;
-#endif
-
-extern int sys_nerr;
-#ifndef HAVE_STRERROR
-#if defined(bsd4_4)
-extern const char *const sys_errlist[];
-#else
-extern char *sys_errlist[];
-#endif
-#else
-extern char *strerror();
-#endif
-
-/* Name with which this program was invoked. */
-static char *programname;
-
-char *
-my_strerror(e)
- int e;
-{
-
-#ifdef HAVE_STRERROR
- return strerror(e);
-
-#else
-
- static char buffer[30];
- if (!e)
- return "";
-
- if (e > 0 && e < sys_nerr)
- return sys_errlist[e];
-
- sprintf (buffer, "Unknown error %d", e);
- return buffer;
-#endif
-}
-
-#ifdef HAVE_VPRINTF
-/* Output an error message and exit */
-
-static void
-fatal VPROTO((char *format, ...))
-{
-#ifndef __STDC__
- char *format;
-#endif
- va_list ap;
-
- VA_START (ap, format);
-
-#ifndef __STDC__
- format = va_arg (ap, char*);
-#endif
-
- fprintf (stderr, "%s: ", programname);
- vfprintf (stderr, format, ap);
- va_end (ap);
- fprintf (stderr, "\n");
-#if 0
- /* XXX Not needed for g++ driver. */
- delete_temp_files ();
-#endif
- exit (1);
-}
-
-static void
-error VPROTO((char *format, ...))
-{
-#ifndef __STDC__
- char *format;
-#endif
- va_list ap;
-
- VA_START (ap, format);
-
-#ifndef __STDC__
- format = va_arg (ap, char*);
-#endif
-
- fprintf (stderr, "%s: ", programname);
- vfprintf (stderr, format, ap);
- va_end (ap);
-
- fprintf (stderr, "\n");
-}
-
-#else /* not HAVE_VPRINTF */
-
-static void
-error (msg, arg1, arg2)
- char *msg, *arg1, *arg2;
-{
- fprintf (stderr, "%s: ", programname);
- fprintf (stderr, msg, arg1, arg2);
- fprintf (stderr, "\n");
-}
-
-static void
-fatal (msg, arg1, arg2)
- char *msg, *arg1, *arg2;
-{
- error (msg, arg1, arg2);
-#if 0
- /* XXX Not needed for g++ driver. */
- delete_temp_files ();
-#endif
- exit (1);
-}
-
-#endif /* not HAVE_VPRINTF */
-
-/* More 'friendly' abort that prints the line and file.
- config.h can #define abort fancy_abort if you like that sort of thing. */
-
-void
-fancy_abort ()
-{
- fatal ("Internal g++ abort.");
-}
-
-char *
-xmalloc (size)
- unsigned size;
-{
- register char *value = (char *) malloc (size);
- if (value == 0)
- fatal ("virtual memory exhausted");
- return value;
-}
-
-/* Return a newly-allocated string whose contents concatenate those
- of s1, s2, s3. */
-static char *
-concat (s1, s2, s3)
- char *s1, *s2, *s3;
-{
- int len1 = strlen (s1), len2 = strlen (s2), len3 = strlen (s3);
- char *result = xmalloc (len1 + len2 + len3 + 1);
-
- strcpy (result, s1);
- strcpy (result + len1, s2);
- strcpy (result + len1 + len2, s3);
- *(result + len1 + len2 + len3) = 0;
-
- return result;
-}
-
-static void
-pfatal_with_name (name)
- char *name;
-{
- fatal (concat ("%s: ", my_strerror (errno), ""), name);
-}
-
-#ifdef __MSDOS__
-/* This is the common prefix we use to make temp file names. */
-char *temp_filename;
-
-/* Length of the prefix. */
-int temp_filename_length;
-
-/* Compute a string to use as the base of all temporary file names. */
-static char *
-choose_temp_base_try (try, base)
-char *try;
-char *base;
-{
- char *rv;
- if (base)
- rv = base;
- else if (try == (char *)0)
- rv = 0;
- else if (access (try, R_OK | W_OK) != 0)
- rv = 0;
- else
- rv = try;
- return rv;
-}
-
-static void
-choose_temp_base ()
-{
- char *base = 0;
- int len;
-
- base = choose_temp_base_try (getenv ("TMPDIR"), base);
- base = choose_temp_base_try (getenv ("TMP"), base);
- base = choose_temp_base_try (getenv ("TEMP"), base);
-
-#ifdef P_tmpdir
- base = choose_temp_base_try (P_tmpdir, base);
-#endif
-
- base = choose_temp_base_try ("/usr/tmp", base);
- base = choose_temp_base_try ("/tmp", base);
-
- /* If all else fails, use the current directory! */
- if (base == (char *)0)
- base = "./";
-
- len = strlen (base);
- temp_filename = xmalloc (len + sizeof("/ccXXXXXX"));
- strcpy (temp_filename, base);
- if (len > 0 && temp_filename[len-1] != '/')
- temp_filename[len++] = '/';
- strcpy (temp_filename + len, "ccXXXXXX");
-
- mktemp (temp_filename);
- temp_filename_length = strlen (temp_filename);
- if (temp_filename_length == 0)
- abort ();
-}
-
-static void
-perror_exec (name)
- char *name;
-{
- char *s;
-
- if (errno < sys_nerr)
- s = concat ("installation problem, cannot exec %s: ",
- my_strerror( errno ), "");
- else
- s = "installation problem, cannot exec %s";
- error (s, name);
-}
-
-/* This is almost exactly what's in gcc.c:pexecute for MSDOS. */
-void
-run_dos (program, argv)
- char *program;
- char *argv[];
-{
- char *scmd, *rf;
- FILE *argfile;
- int i;
-
- choose_temp_base (); /* not in gcc.c */
-
- scmd = (char *) malloc (strlen (program) + strlen (temp_filename) + 10);
- rf = scmd + strlen (program) + 6;
- sprintf (scmd, "%s.exe @%s.gp", program, temp_filename);
-
- argfile = fopen (rf, "w");
- if (argfile == 0)
- pfatal_with_name (rf);
-
- for (i=1; argv[i]; i++)
- {
- char *cp;
- for (cp = argv[i]; *cp; cp++)
- {
- if (*cp == '"' || *cp == '\'' || *cp == '\\' || isspace (*cp))
- fputc ('\\', argfile);
- fputc (*cp, argfile);
- }
- fputc ('\n', argfile);
- }
- fclose (argfile);
-
- i = system (scmd);
-
- remove (rf);
-
- if (i == -1)
- perror_exec (program);
-}
-#endif /* __MSDOS__ */
-
-int
-main (argc, argv)
- int argc;
- char **argv;
-{
- register int i, j = 0;
- register char *p;
- int verbose = 0;
-
- /* This will be 0 if we encounter a situation where we should not
- link in libstdc++, or 2 if we should link in libg++ as well. */
- int library = 1;
-
- /* Used to track options that take arguments, so we don't go wrapping
- those with -xc++/-xnone. */
- char *quote = NULL;
-
- /* The new argument list will be contained in this. */
- char **arglist;
-
- /* The name of the compiler we will want to run---by default, it
- will be the definition of `GCC_NAME', e.g., `gcc'. */
- char *gcc = GCC_NAME;
-
- /* Non-zero if we saw a `-xfoo' language specification on the
- command line. Used to avoid adding our own -xc++ if the user
- already gave a language for the file. */
- int saw_speclang = 0;
-
- /* Non-zero if we saw `-lm' or `-lmath' on the command line. */
- char *saw_math = 0;
-
- /* The number of arguments being added to what's in argv, other than
- libraries. We use this to track the number of times we've inserted
- -xc++/-xnone. */
- int added = 0;
-
- /* An array used to flag each argument that needs a bit set for
- LANGSPEC or MATHLIB. */
- int *args;
-
- p = argv[0] + strlen (argv[0]);
-
- /* If we're called as g++ (or i386-aout-g++), link in libg++ as well. */
-
- if (strcmp (p - 3, "g++") == 0)
- {
- library = 2;
- }
-
- while (p != argv[0] && p[-1] != '/')
- --p;
- programname = p;
-
- if (argc == 1)
- fatal ("No input files specified.\n");
-
-#ifndef __MSDOS__
- /* We do a little magic to find out where the main gcc executable
- is. If they ran us as /usr/local/bin/g++, then we will look
- for /usr/local/bin/gcc; similarly, if they just ran us as `g++',
- we'll just look for `gcc'. */
- if (p != argv[0])
- {
- *--p = '\0';
- gcc = (char *) malloc ((strlen (argv[0]) + 1 + strlen (GCC_NAME) + 1)
- * sizeof (char));
- sprintf (gcc, "%s/%s", argv[0], GCC_NAME);
- }
-#endif
-
- args = (int *) malloc (argc * sizeof (int));
- bzero ((char *) args, argc * sizeof (int));
-
- for (i = 1; i < argc; i++)
- {
- /* If the previous option took an argument, we swallow it here. */
- if (quote)
- {
- quote = NULL;
- continue;
- }
-
- if (argv[i][0] == '\0' || argv[i][1] == '\0')
- continue;
-
- if (argv[i][0] == '-')
- {
- if (library != 0 && strcmp (argv[i], "-nostdlib") == 0)
- {
- library = 0;
- }
- else if (strcmp (argv[i], "-lm") == 0
- || strcmp (argv[i], "-lmath") == 0)
- args[i] |= MATHLIB;
- else if (strcmp (argv[i], "-v") == 0)
- {
- verbose = 1;
- if (argc == 2)
- {
- /* If they only gave us `-v', don't try to link
- in libg++. */
- library = 0;
- }
- }
- else if (strncmp (argv[i], "-x", 2) == 0)
- saw_speclang = 1;
- else if (((argv[i][2] == '\0'
- && (char *)strchr ("bBVDUoeTuIYmLiA", argv[i][1]) != NULL)
- || strcmp (argv[i], "-Tdata") == 0))
- quote = argv[i];
- else if (library != 0 && ((argv[i][2] == '\0'
- && (char *) strchr ("cSEM", argv[i][1]) != NULL)
- || strcmp (argv[i], "-MM") == 0))
- {
- /* Don't specify libraries if we won't link, since that would
- cause a warning. */
- library = 0;
- }
- else
- /* Pass other options through. */
- continue;
- }
- else
- {
- int len;
-
- if (saw_speclang)
- {
- saw_speclang = 0;
- continue;
- }
-
- /* If the filename ends in .c or .i, put options around it.
- But not if a specified -x option is currently active. */
- len = strlen (argv[i]);
- if (len > 2
- && (argv[i][len - 1] == 'c' || argv[i][len - 1] == 'i')
- && argv[i][len - 2] == '.')
- {
- args[i] |= LANGSPEC;
- added += 2;
- }
- }
- }
-
- if (quote)
- fatal ("argument to `%s' missing\n", quote);
-
- if (added || library)
- {
- arglist = (char **) malloc ((argc + added + 4) * sizeof (char *));
-
- for (i = 1, j = 1; i < argc; i++, j++)
- {
- arglist[j] = argv[i];
-
- /* Make sure -lg++ is before the math library, since libg++
- itself uses those math routines. */
- if (!saw_math && (args[i] & MATHLIB) && library)
- {
- --j;
- saw_math = argv[i];
- }
-
- /* Wrap foo.c and foo.i files in a language specification to
- force the gcc compiler driver to run cc1plus on them. */
- if (args[i] & LANGSPEC)
- {
- int len = strlen (argv[i]);
- if (argv[i][len - 1] == 'i')
- arglist[j++] = "-xc++-cpp-output";
- else
- arglist[j++] = "-xc++";
- arglist[j++] = argv[i];
- arglist[j] = "-xnone";
- }
- }
-
- /* Add `-lg++' if we haven't already done so. */
- if (library == 2)
- arglist[j++] = "-lg++";
- if (library)
- arglist[j++] = "-lstdc++";
- if (saw_math)
- arglist[j++] = saw_math;
- else if (library)
- arglist[j++] = MATH_LIBRARY;
-
- arglist[j] = NULL;
- }
- else
- /* No need to copy 'em all. */
- arglist = argv;
-
- arglist[0] = gcc;
-
- if (verbose)
- {
- if (j == 0)
- j = argc;
-
- for (i = 0; i < j; i++)
- fprintf (stderr, " %s", arglist[i]);
- fprintf (stderr, "\n");
- }
-#if !defined(OS2) && !defined (_WIN32)
-#ifdef __MSDOS__
- run_dos (gcc, arglist);
-#else /* !__MSDOS__ */
- if (execvp (gcc, arglist) < 0)
- pfatal_with_name (gcc);
-#endif /* __MSDOS__ */
-#else /* OS2 or _WIN32 */
- if (spawnvp (1, gcc, arglist) < 0)
- pfatal_with_name (gcc);
-#endif
-
- return 0;
-}
diff --git a/contrib/gcc/cp/reno.texi b/contrib/gcc/cp/reno.texi
deleted file mode 100644
index 59c3448a0399..000000000000
--- a/contrib/gcc/cp/reno.texi
+++ /dev/null
@@ -1,752 +0,0 @@
-\input texinfo @c -*- Texinfo -*-
-@setfilename reno-1.info
-
-@ifinfo
-@format
-START-INFO-DIR-ENTRY
-* Reno 1: (reno-1). The GNU C++ Renovation Project, Phase 1.
-END-INFO-DIR-ENTRY
-@end format
-@end ifinfo
-
-@ifinfo
-Copyright @copyright{} 1992, 1993, 1994 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-@ignore
-Permission is granted to process this file through TeX and print the
-results, provided the printed document carries a copying permission
-notice identical to this one except for the removal of this paragraph
-(this paragraph not being relevant to the printed manual).
-
-@end ignore
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided also that
-the entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions.
-@end ifinfo
-
-@setchapternewpage odd
-@settitle GNU C++ Renovation Project
-@c @smallbook
-
-@titlepage
-@finalout
-@title GNU C++ Renovation Project
-@subtitle Phase 1.3
-@author Brendan Kehoe, Jason Merrill,
-@author Mike Stump, Michael Tiemann
-@page
-
-Edited March, 1994 by Roland Pesch (@code{pesch@@cygnus.com})
-@vskip 0pt plus 1filll
-Copyright @copyright{} 1992, 1993, 1994 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-@ignore
-Permission is granted to process this file through Tex and print the
-results, provided the printed document carries copying permission
-notice identical to this one except for the removal of this paragraph
-(this paragraph not being relevant to the printed manual).
-@end ignore
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided also that
-the entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions.
-@end titlepage
-
-@ifinfo
-@node Top
-@top @sc{gnu} C++ Renovation Project
-
-This file describes the goals of the @sc{gnu} C++ Renovation Project,
-and its accomplishments to date (as of Phase 1.3).
-
-It also discusses the remaining divergences from @sc{gnu} C++, and how the
-name encoding in @sc{gnu} C++ differs from the sample encoding in
-@cite{The Annotated C++ Reference Manual}.
-@c This is not a good place to introduce the acronym ARM because it's
-@c info-only.
-
-@menu
-* Introduction:: What is the GNU C++ Renovation Project?
-* Changes:: Summary of changes since previous GNU C++ releases.
-* Plans:: Plans for Reno-2.
-* Templates:: The template implementation.
-* ANSI:: GNU C++ conformance to ANSI C++.
-* Encoding:: Name encoding in GNU C++.
-@end menu
-
-@end ifinfo
-
-@node Introduction
-@chapter Introduction
-
-As you may remember, @sc{gnu} C++ was the first native-code C++
-compiler available under Unix (December 1987). In November 1988, it was
-judged superior to the AT&T compiler in a Unix World review. In 1990 it
-won a Sun Observer ``Best-Of'' award. But now, with new requirements
-coming out of the @sc{ansi} C++ committee and a growing backlog of bugs, it's
-clear that @sc{gnu} C++ needs an overhaul.
-
-The C++ language has been under development since 1982. It has
-evolved significantly since its original incarnation (C with Classes),
-addressing many commercial needs and incorporating many lessons
-learned as more and more people started using ``object-oriented''
-programming techniques. In 1989, the first X3J16 committee meeting
-was held in Washington DC; in the interest of users, C++ was going to
-be standardized.
-
-As C++ has become more popular, more demands have been placed on its
-compilers. Some compilers are up to the demands, others are not.
-@sc{gnu} C++ was used to prototype several features which have since
-been incorporated into the standard, most notably exception handling.
-While @sc{gnu} C++ has been an excellent experimental vehicle, it did
-not have the resources that AT&T, Borland, or Microsoft have at their
-disposal.
-
-We believe that @sc{gnu} C++ is an important compiler, providing users with
-many of the features that have made @sc{gnu} C so popular: fast compilation,
-good error messages, innovative features, and full sources that may be
-freely redistributed. The purpose of this overhaul, dubbed the @var{@sc{gnu}
-C++ Renovation Project}, is to take advantage of the functionality that
-@sc{gnu} C++ offers today, to strengthen its base technology, and put it in a
-position to remain---as other @sc{gnu} software currently is---the technical
-leader in the field.
-
-This release represents the latest phase of work in strengthening the
-compiler on a variety of points. It includes many months of
-work concentrated on fixing many of the more egregious bugs that
-presented themselves in the compiler recently.
-@ignore
-@c FIXME-- update?
-Nearly 85% of all bugs reported in the period of February to September
-of 1992 were fixed as part of the work in the first phase.
-@end ignore
-In the coming months, we hope to continue expanding and enhancing the
-quality and dependability of the industry's only freely redistributable
-C++ compiler.
-
-@node Changes
-@chapter Changes in Behavior in @sc{gnu} C++
-
-The @sc{gnu} C++ compiler continues to improve and change. A major goal
-of our work has been to continue to bring the compiler into compliance
-with the draft @sc{ansi} C++ standard, and with @cite{The Annotated C++
-Reference Manual} (the @sc{arm}). This section outlines most of the
-user-noticeable changes that might be encountered during the normal
-course of use.
-
-@menu
-* Summary of Phase 1.3::
-* Major changes::
-* New features::
-* Enhancements and bug fixes::
-* Problems with debugging::
-@end menu
-
-@node Summary of Phase 1.3
-@section Summary of Changes in Phase 1.3
-
-The bulk of this note discusses the cumulative effects of the @sc{gnu} C++
-Renovation Project to date. The work during its most recent phase (1.3)
-had these major effects:
-
-@itemize @bullet
-@item The standard compiler driver @code{g++} is now the faster compiled
-version, rather than a shell script.
-
-@item Nested types work much better; notably, nesting is no longer
-restricted to nine levels.
-
-@item Better @sc{arm} conformance on member access control.
-
-@item The compiler now always generates default assignment operators
-(@samp{operator =}), copy constructors (@samp{X::X(X&)}), and default
-constructors (@samp{X::X()}) whenever they are required.
-
-@item The new draft @sc{ansi} standard keyword @code{mutable} is supported.
-
-@item @samp{-fansi-overloading} is the default, to comply better with
-the @sc{arm} (at some cost in compatibility to earlier versions of @sc{gnu} C++).
-
-@item More informative error messages.
-
-@item System include files are automatically treated as if they were
-wrapped in @samp{extern "C" @{ @}}.
-
-@item The new option @samp{-falt-external-templates} provides alternate
-template instantiation semantics.
-
-@item Operator declarations are now checked more strictly.
-
-@item You can now use template type arguments in the template parameter list.
-
-@item You can call the destructor for any type.
-
-@item The compiler source code is better organized.
-
-@item You can specify where to instantiate template definitions explicitly.
-@end itemize
-
-Much of the work in Phase 1.3 went to elimination of known bugs, as well
-as the major items above.
-
-During the span of Phase 1.3, there were also two changes associated
-with the compiler that, while not specifically part of the C++
-Renovation project, may be of interest:
-
-@itemize @bullet
-@item @code{gcov}, a code coverage tool for @sc{gnu cc}, is now available
-from Cygnus Support. (@code{gcov} is free software, but the @sc{fsf} has not
-yet accepted it.) @xref{Gcov,, @code{gcov}: a Test Coverage Program,
-gcc.info, Using GNU CC}, for more information (in Cygnus releases of
-that manual).
-
-@item @sc{gnu} C++ now supports @dfn{signatures}, a language extension to
-provide more flexibility in abstract type definitions. @xref{C++
-Signatures,, Type Abstraction using Signatures, gcc.info, Using GNU CC}.
-@end itemize
-
-@node Major changes
-@section Major Changes
-
-This release includes four wholesale rewrites of certain areas of
-compiler functionality:
-
-@enumerate 1
-@item Argument matching. @sc{gnu} C++ is more compliant with the rules
-described in Chapter 13, ``Overloading'', of the @sc{arm}. This behavior is
-the default, though you can specify it explicitly with
-@samp{-fansi-overloading}. For compatibility with earlier releases of
-@sc{gnu} C++, specify @samp{-fno-ansi-overloading}; this makes the compiler
-behave as it used to with respect to argument matching and name overloading.
-
-@item Default constructors/destructors. Section 12.8 of the @sc{arm}, ``Copying
-Class Objects'', and Section 12.1, ``Constructors'', state that a
-compiler must declare such default functions if the user does not
-specify them. @sc{gnu} C++ now declares, and generates when necessary,
-the defaults for constructors and destructors you might omit. In
-particular, assignment operators (@samp{operator =}) behave the same way
-whether you define them, or whether the compiler generates them by
-default; taking the address of the default @samp{operator =} is now
-guaranteed to work. Default copy constructors (@samp{X::X(X&)}) now
-function correctly, rather than calling the copy assignment operator for
-the base class. Finally, constructors (@samp{X::X()}), as well as
-assignment operators and copy constructors, are now available whenever
-they are required.
-
-@c XXX This may be taken out eventually...
-@item Binary incompatibility. There are no new binary incompatibilities
-in Phase 1.3, but Phase 1.2 introduced two binary incompatibilities with
-earlier releases. First, the functionality of @samp{operator
-new} and @samp{operator delete} changed. Name encoding
-(``mangling'') of virtual table names changed as well. Libraries
-built with versions of the compiler earlier than Phase 1.2 must be
-compiled with the new compiler. (This includes the Cygnus Q2
-progressive release and the FSF 2.4.5 release.)
-
-@item New @code{g++} driver.
-A new binary @code{g++} compiler driver replaces the shell script.
-The new driver executes faster.
-@end enumerate
-
-@node New features
-@section New features
-
-@itemize @bullet
-@item
-The compiler warns when a class contains only private constructors
-or destructors, and has no friends. At the request of some of our
-customers, we have added a new option, @samp{-Wctor-dtor-privacy} (on by
-default), and its negation, @samp{-Wno-ctor-dtor-privacy}, to control
-the emission of this warning. If, for example, you are working towards
-making your code compile warning-free, you can use @w{@samp{-Wall
--Wno-ctor-dtor-privacy}} to find the most common warnings.
-
-@item
-There is now a mechanism which controls exactly when templates are
-expanded, so that you can reduce memory usage and program size and also
-instantiate them exactly once. You can control this mechanism with the
-option @samp{-fexternal-templates} and its corresponding negation
-@samp{-fno-external-templates}. Without this feature, space consumed by
-template instantiations can grow unacceptably in large-scale projects
-with many different source files. The default is
-@samp{-fno-external-templates}.
-
-You do not need to use the @samp{-fexternal-templates} option when
-compiling a file that does not define and instantiate templates used in
-other files, even if those files @emph{are} compiled with
-@samp{-fexternal-templates}. The only side effect is an increase in
-object size for each file that was compiled without
-@samp{-fexternal-templates}.
-
-When your code is compiled with @samp{-fexternal-templates}, all
-template instantiations are external; this requires that the templates
-be under the control of @samp{#pragma interface} and @samp{#pragma
-implementation}. All instantiations that will be needed should be in
-the implementation file; you can do this with a @code{typedef} that
-references the instantiation needed. Conversely, when you compile using
-the option @samp{-fno-external-templates}, all template instantiations are
-explicitly internal.
-
-@samp{-fexternal-templates} also allows you to finally separate class
-template function definitions from their declarations, thus speeding up
-compilation times for every file that includes the template declaration.
-Now you can have tens or even hundreds of lines in template
-declarations, and thousands or tens of thousands of lines in template
-definitions, with the definitions only going through the compiler once
-instead of once for each source file. It is important to note that you
-must remember to externally instantiate @emph{all} templates that are
-used from template declarations in interface files. If you forget to do
-this, unresolved externals will occur.
-
-In the example below, the object file generated (@file{example.o}) will
-contain the global instantiation for @samp{Stack<int>}. If other types
-of @samp{Stack} are needed, they can be added to @file{example.cc} or
-placed in a new file, in the same spirit as @file{example.cc}.
-
-@code{foo.h}:
-@smallexample
-@group
-#pragma interface "foo.h"
-template<class T>
-class Stack @{
- static int statc;
- static T statc2;
- Stack() @{ @}
- virtual ~Stack() @{ @}
- int bar();
-@};
-@end group
-@end smallexample
-
-@code{example.cc}:
-@smallexample
-@group
-#pragma implementation "foo.h"
-#include "foo.h"
-
-typedef Stack<int> t;
-int Stack<int>::statc;
-int Stack<int>::statc2;
-int Stack<int>::bar() @{ @}
-@end group
-@end smallexample
-
-Note that using @samp{-fexternal-templates} does not reduce memory usage
-from completely different instantiations (@samp{Stack<Name>} vs.
-@samp{Stack<Net_Connection>}), but only collapses different occurrences
-of @samp{Stack<Name>} so that only one @samp{Stack<Name>} is generated.
-
-@samp{-falt-external-templates} selects a slight variation in the
-semantics described above (incidentally, you need not specify both
-options; @samp{-falt-external-templates} implies
-@samp{-fexternal-templates}).
-
-With @samp{-fexternal-templates}, the compiler emits a definition in the
-implementation file that includes the header definition, @emph{even if}
-instantiation is triggered from a @emph{different} implementation file
-(e.g. with a template that uses another template).
-
-With @samp{-falt-external-templates}, the definition always goes in the
-implementation file that triggers instantiation.
-
-For instance, with these two header files---
-
-@example
-@exdent @file{a.h}:
-#pragma interface
-template <class T> class A @{ @dots{} @};
-
-@exdent @file{b.h}:
-#pragma interface
-class B @{ @dots{} @};
-void f (A<B>);
-@end example
-
-Under @samp{-fexternal-templates}, the definition of @samp{A<B>} ends up
-in the implementation file that includes @file{a.h}. Under
-@samp{-falt-external-templates}, the same definition ends up in the
-implementation file that includes @file{b.h}.
-
-@item
-You can control explicitly where a template is instantiated, without
-having to @emph{use} the template to get an instantiation.
-
-To instantiate a class template explicitly, write @samp{template
-class @var{name}<paramvals>}, where @var{paramvals} is a list of values
-for the template parameters. For example, you might write
-
-@example
-template class A<int>
-@end example
-
-Similarly, to instantiate a function template explicitly, write
-@samp{template @var{fnsign}} where @var{fnsign} is the particular
-function signature you need. For example, you might write
-
-@example
-template void foo (int, int)
-@end example
-
-This syntax for explicit template instantiation agrees with recent
-extensions to the draft @sc{ansi} standard.
-
-@item
-The compiler's actions on @sc{ansi}-related warnings and errors have
-been further enhanced. The @samp{-pedantic-errors} option produces
-error messages in a number of new situations: using @code{return} in a
-non-@code{void} function (one returning a value); declaring a local
-variable that shadows a parameter (e.g., the function takes an argument
-@samp{a}, and has a local variable @samp{a}); and use of the @samp{asm}
-keyword. Finally, the compiler by default now issues a warning when
-converting from an @code{int} to an enumerated type. This is likely to
-cause many new warnings in code that hadn't triggered them before. For
-example, when you compile this code,
-
-@smallexample
-@group
-enum boolean @{ false, true @};
-void
-f ()
-@{
- boolean x;
-
- x = 1; //@i{assigning an @code{int} to an @code{enum} now triggers a warning}
-@}
-@end group
-@end smallexample
-
-@noindent
-you should see the warning ``@code{anachronistic conversion from integer
-type to enumeral type `boolean'}''. Instead of assigning the value 1,
-assign the original enumerated value @samp{true}.
-@end itemize
-
-@node Enhancements and bug fixes
-@section Enhancements and bug fixes
-
-@itemize @bullet
-@cindex nested types in template parameters
-@item
-You can now use nested types in a template parameter list, even if the nested
-type is defined within the same class that attempts to use the template.
-For example, given a template @code{list}, the following now works:
-
-@smallexample
-struct glyph @{
- @dots{}
- struct stroke @{ @dots{} @};
- list<stroke> l;
- @dots{}
-@}
-@end smallexample
-
-@cindex function pointers vs template parameters
-@item
-Function pointers now work in template parameter lists. For
-example, you might want to instantiate a parameterized @code{list} class
-in terms of a pointer to a function like this:
-
-@smallexample
-list<int (*)(int, void *)> fnlist;
-@end smallexample
-
-@item
-@c FIXME! Really no limit? Jason said "deeper than 9" now OK...
-Nested types are now handled correctly. In particular, there is no
-longer a limit to how deeply you can nest type definitions.
-
-@item
-@sc{gnu} C++ now conforms to the specifications in Chapter 11 of the
-@sc{arm}, ``Member Access Control''.
-
-@item
-The @sc{ansi} C++ committee has introduced a new keyword @code{mutable}.
-@sc{gnu} C++ supports it. Use @code{mutable} to specify that some
-particular members of a @code{const} class are @emph{not} constant. For
-example, you can use this to include a cache in a data structure that
-otherwise represents a read-only database.
-
-@item
-Error messages now explicitly specify the declaration, type, or
-expression that contains an error.
-
-@item
-To avoid copying and editing all system include files during @sc{gnu}
-C++ installation, the compiler now automatically recognizes system
-include files as C language definitions, as if they were wrapped in
-@samp{extern "C" @{ @dots{} @}}.
-
-@item
-The compiler checks operator declarations more strictly. For example,
-you may no longer declare an @samp{operator +} with three arguments.
-
-@item
-You can now use template type arguments in the same template
-parameter list where the type argument is specified (as well as in the
-template body). For example, you may write
-
-@example
-template <class T, T t> class A @{ @dots{} @};
-@end example
-
-@item
-Destructors are now available for all types, even built-in ones; for
-example, you can call @samp{int::~int}. (Destructors for types like
-@code{int} do not actually do anything, but their existence provides a
-level of generality that permits smooth template expansion in more
-cases.)
-
-@item
-Enumerated types declared inside a class are now handled correctly.
-
-@item
-An argument list for a function may not use an initializer list for its default
-value. For example, @w{@samp{void foo ( T x = @{ 1, 2 @} )}} is not permitted.
-
-@item
-A significant amount of work went into improving the ability of the
-compiler to act accurately on multiple inheritance and virtual
-functions. Virtual function dispatch has been enhanced as well.
-
-@item
-The warning concerning a virtual inheritance environment with a
-non-virtual destructor has been disabled, since it is not clear that
-such a warning is warranted.
-
-@item
-Until exception handling is fully implemented in the Reno-2 release, use
-of the identifiers @samp{catch}, @samp{throw}, or @samp{try} results
-in the warning:
-
-@smallexample
-t.C:1: warning: `catch', `throw', and `try'
- are all C++ reserved words
-@end smallexample
-
-@item
-When giving a warning or error concerning initialization of a member in a
-class, the compiler gives the name of the member if it has one.
-
-@item
-Detecting friendship between classes is more accurately checked.
-
-@item
-The syntaxes of @w{@samp{#pragma implementation "file.h"}} and
-@samp{#pragma interface} are now more strictly controlled. The compiler
-notices (and warns) when any text follows @file{file.h} in the
-implementation pragma, or follows the word @samp{interface}. Any such
-text is otherwise ignored.
-
-@item
-Trying to declare a template on a variable or type is now considered an
-error, not an unimplemented feature.
-
-@item
-When an error occurs involving a template, the compiler attempts to
-tell you at which point of instantiation the error occurred, in
-addition to noting the line in the template declaration which had the
-actual error.
-
-@item
-The symbol names for function templates in the resulting assembly file
-are now encoded according to the arguments, rather than just being
-emitted as, for example, two definitions of a function @samp{foo}.
-
-@item
-Template member functions that are declared @code{static} no longer
-receive a @code{this} pointer.
-
-@item
-Case labels are no longer allowed to have commas to make up their
-expressions.
-
-@item
-Warnings concerning the shift count of a left or right shift now tell
-you if it was a @samp{left} or @samp{right} shift.
-
-@item
-The compiler now warns when a decimal constant is so large that it
-becomes @code{unsigned}.
-
-@item
-Union initializers which are raw constructors are now handled properly.
-
-@item
-The compiler no longer gives incorrect errors when initializing a
-union with an empty initializer list.
-
-@item
-Anonymous unions are now correctly used when nested inside a class.
-
-@item
-Anonymous unions declared as static class members are now handled
-properly.
-
-@item
-The compiler now notices when a field in a class is declared both as
-a type and a non-type.
-
-@item
-The compiler now warns when a user-defined function shadows a
-built-in function, rather than emitting an error.
-
-@item
-A conflict between two function declarations now produces an error
-regardless of their language context.
-
-@item
-Duplicate definitions of variables with @samp{extern "C"} linkage are no
-longer considered in error. (Note in C++ linkage---the default---you may
-not have more than one definition of a variable.)
-
-@item
-Referencing a label that is not defined in any function is now an error.
-
-@item
-The syntax for pointers to methods has been improved; there are still
-some minor bugs, but a number of cases should now be accepted by the
-compiler.
-
-@item
-In error messages, arguments are now numbered starting at 1, instead of
-0. Therefore, in the function @samp{void foo (int a, int b)}, the
-argument @samp{a} is argument 1, and @samp{b} is argument 2. There is
-no longer an argument 0.
-
-@item
-The tag for an enumerator, rather than its value, used as a default
-argument is now shown in all error messages. For example, @w{@samp{void
-foo (enum x (= true))}} is shown instead of @w{@samp{void foo (enum x (=
-1))}}.
-
-@item
-The @samp{__asm__} keyword is now accepted by the C++ front-end.
-
-@item
-Expressions of the form @samp{foo->~Class()} are now handled properly.
-
-@item
-The compiler now gives better warnings for situations which result in
-integer overflows (e.g., in storage sizes, enumerators, unary
-expressions, etc).
-
-@item
-@code{unsigned} bitfields are now promoted to @code{signed int} if the
-field isn't as wide as an @code{int}.
-
-@item
-Declaration and usage of prefix and postfix @samp{operator ++} and
-@samp{operator --} are now handled correctly. For example,
-
-@smallexample
-@group
-class foo
-@{
-public:
- operator ++ ();
- operator ++ (int);
- operator -- ();
- operator -- (int);
-@};
-
-void
-f (foo *f)
-@{
- f++; // @i{call @code{f->operator++(int)}}
- ++f; // @i{call @code{f->operator++()}}
- f--; // @i{call @code{f->operator++(int)}}
- --f; // @i{call @code{f->operator++()}}
-@}
-@end group
-@end smallexample
-
-@item
-In accordance with @sc{arm} section 10.1.1, ambiguities and dominance are now
-handled properly. The rules described in section 10.1.1 are now fully
-implemented.
-
-@end itemize
-
-@node Problems with debugging
-@section Problems with debugging
-
-Two problems remain with regard to debugging:
-
-@itemize @bullet
-@item
-Debugging of anonymous structures on the IBM RS/6000 host is incorrect.
-
-@item
-Symbol table size is overly large due to redundant symbol information;
-this can make @code{gdb} coredump under certain circumstances. This
-problem is not host-specific.
-@end itemize
-
-@node Plans
-@chapter Plans for Reno-2
-
-The overall goal for the second phase of the @sc{gnu} C++ Renovation
-Project is to bring @sc{gnu} C++ to a new level of reliability, quality,
-and competitiveness. As particular elements of this strategy, we intend
-to:
-
-@enumerate 0
-@item
-Fully implement @sc{ansi} exception handling.
-
-@item
-With the exception handling, add Runtime Type Identification
-(@sc{rtti}), if the @sc{ansi} committee adopts it into the standard.
-
-@item
-Bring the compiler into closer compliance with the @sc{arm} and the draft
-@sc{ansi} standard, and document what points in the @sc{arm} we do not yet comply,
-or agree, with.
-
-@item
-Add further support for the @sc{dwarf} debugging format.
-
-@item
-Finish the work to make the compiler compliant with @sc{arm} Section 12.6.2,
-initializing base classes in declaration order, rather than in the order
-that you specify them in a @var{mem-initializer} list.
-
-@item
-Perform a full coverage analysis on the compiler, and weed out unused
-code, for a gain in performance and a reduction in the size of the compiler.
-
-@item
-Further improve the multiple inheritance implementation in the
-compiler to make it cleaner and more complete.
-@end enumerate
-
-@noindent
-As always, we encourage you to make suggestions and ask questions about
-@sc{gnu} C++ as a whole, so we can be sure that the end of this project
-will bring a compiler that everyone will find essential for C++ and will
-meet the needs of the world's C++ community.
-
-@include templates.texi
-
-@include gpcompare.texi
-
-@contents
-
-@bye
diff --git a/contrib/gcc/cpp.1 b/contrib/gcc/cpp.1
deleted file mode 100644
index 54c4dfb19832..000000000000
--- a/contrib/gcc/cpp.1
+++ /dev/null
@@ -1 +0,0 @@
-.so man1/cccp.1
diff --git a/contrib/gcc/doc/install-old.texi b/contrib/gcc/doc/install-old.texi
deleted file mode 100644
index 9ce98968f91a..000000000000
--- a/contrib/gcc/doc/install-old.texi
+++ /dev/null
@@ -1,725 +0,0 @@
-@c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
-@c This is part of the GCC manual.
-@c For copying conditions, see the file install.texi.
-
-@ifnothtml
-@comment node-name, next, previous, up
-@node Old, GNU Free Documentation License, Specific, Top
-@end ifnothtml
-@html
-<h1 align="center">Old installation documentation</h1>
-@end html
-@ifnothtml
-@chapter Old installation documentation
-@end ifnothtml
-
-Note most of this information is out of date and superseded by the
-previous chapters of this manual. It is provided for historical
-reference only, because of a lack of volunteers to merge it into the
-main manual.
-
-@ifnothtml
-@menu
-* Configurations:: Configurations Supported by GNU CC.
-* Cross-Compiler:: Building and installing a cross-compiler.
-* VMS Install:: See below for installation on VMS.
-@end menu
-@end ifnothtml
-
-Here is the procedure for installing GNU CC on a GNU or Unix system.
-See @ref{VMS Install}, for VMS systems.
-
-@enumerate
-@item
-If you have chosen a configuration for GNU CC which requires other GNU
-tools (such as GAS or the GNU linker) instead of the standard system
-tools, install the required tools in the build directory under the names
-@file{as}, @file{ld} or whatever is appropriate. This will enable the
-compiler to find the proper tools for compilation of the program
-@file{enquire}.
-
-Alternatively, you can do subsequent compilation using a value of the
-@code{PATH} environment variable such that the necessary GNU tools come
-before the standard system tools.
-
-@item
-Specify the host, build and target machine configurations. You do this
-when you run the @file{configure} script.
-
-The @dfn{build} machine is the system which you are using, the
-@dfn{host} machine is the system where you want to run the resulting
-compiler (normally the build machine), and the @dfn{target} machine is
-the system for which you want the compiler to generate code.
-
-If you are building a compiler to produce code for the machine it runs
-on (a native compiler), you normally do not need to specify any operands
-to @file{configure}; it will try to guess the type of machine you are on
-and use that as the build, host and target machines. So you don't need
-to specify a configuration when building a native compiler unless
-@file{configure} cannot figure out what your configuration is or guesses
-wrong.
-
-In those cases, specify the build machine's @dfn{configuration name}
-with the @option{--host} option; the host and target will default to be
-the same as the host machine. (If you are building a cross-compiler,
-see @ref{Cross-Compiler}.)
-
-Here is an example:
-
-@smallexample
-./configure --host=sparc-sun-sunos4.1
-@end smallexample
-
-A configuration name may be canonical or it may be more or less
-abbreviated.
-
-A canonical configuration name has three parts, separated by dashes.
-It looks like this: @samp{@var{cpu}-@var{company}-@var{system}}.
-(The three parts may themselves contain dashes; @file{configure}
-can figure out which dashes serve which purpose.) For example,
-@samp{m68k-sun-sunos4.1} specifies a Sun 3.
-
-You can also replace parts of the configuration by nicknames or aliases.
-For example, @samp{sun3} stands for @samp{m68k-sun}, so
-@samp{sun3-sunos4.1} is another way to specify a Sun 3.
-
-You can specify a version number after any of the system types, and some
-of the CPU types. In most cases, the version is irrelevant, and will be
-ignored. So you might as well specify the version if you know it.
-
-See @ref{Configurations}, for a list of supported configuration names and
-notes on many of the configurations. You should check the notes in that
-section before proceeding any further with the installation of GNU CC@.
-
-@end enumerate
-
-@ifnothtml
-@node Configurations, Cross-Compiler, , Old
-@section Configurations Supported by GNU CC
-@end ifnothtml
-@html
-<h2>@anchor{Configurations}Configurations Supported by GNU CC</h2>
-@end html
-@cindex configurations supported by GNU CC
-
-Here are the possible CPU types:
-
-@quotation
-@c gmicro, fx80, spur and tahoe omitted since they don't work.
-1750a, a29k, alpha, arm, avr, c@var{n}, clipper, dsp16xx, elxsi, fr30, h8300,
-hppa1.0, hppa1.1, i370, i386, i486, i586, i686, i786, i860, i960, m32r,
-m68000, m68k, m6811, m6812, m88k, mcore, mips, mipsel, mips64, mips64el,
-mn10200, mn10300, ns32k, pdp11, powerpc, powerpcle, romp, rs6000, sh, sparc,
-sparclite, sparc64, v850, vax, we32k.
-@end quotation
-
-Here are the recognized company names. As you can see, customary
-abbreviations are used rather than the longer official names.
-
-@c What should be done about merlin, tek*, dolphin?
-@quotation
-acorn, alliant, altos, apollo, apple, att, bull,
-cbm, convergent, convex, crds, dec, dg, dolphin,
-elxsi, encore, harris, hitachi, hp, ibm, intergraph, isi,
-mips, motorola, ncr, next, ns, omron, plexus,
-sequent, sgi, sony, sun, tti, unicom, wrs.
-@end quotation
-
-The company name is meaningful only to disambiguate when the rest of
-the information supplied is insufficient. You can omit it, writing
-just @samp{@var{cpu}-@var{system}}, if it is not needed. For example,
-@samp{vax-ultrix4.2} is equivalent to @samp{vax-dec-ultrix4.2}.
-
-Here is a list of system types:
-
-@quotation
-386bsd, aix, acis, amigaos, aos, aout, aux, bosx, bsd, clix, coff, ctix, cxux,
-dgux, dynix, ebmon, ecoff, elf, esix, freebsd, hms, genix, gnu, linux,
-linux-gnu, hiux, hpux, iris, irix, isc, luna, lynxos, mach, minix, msdos, mvs,
-netbsd, newsos, nindy, ns, osf, osfrose, ptx, riscix, riscos, rtu, sco, sim,
-solaris, sunos, sym, sysv, udi, ultrix, unicos, uniplus, unos, vms, vsta,
-vxworks, winnt, xenix.
-@end quotation
-
-@noindent
-You can omit the system type; then @file{configure} guesses the
-operating system from the CPU and company.
-
-You can add a version number to the system type; this may or may not
-make a difference. For example, you can write @samp{bsd4.3} or
-@samp{bsd4.4} to distinguish versions of BSD@. In practice, the version
-number is most needed for @samp{sysv3} and @samp{sysv4}, which are often
-treated differently.
-
-@samp{linux-gnu} is the canonical name for the GNU/Linux target; however
-GNU CC will also accept @samp{linux}. The version of the kernel in use is
-not relevant on these systems. A suffix such as @samp{libc1} or @samp{aout}
-distinguishes major versions of the C library; all of the suffixed versions
-are obsolete.
-
-If you specify an impossible combination such as @samp{i860-dg-vms},
-then you may get an error message from @file{configure}, or it may
-ignore part of the information and do the best it can with the rest.
-@file{configure} always prints the canonical name for the alternative
-that it used. GNU CC does not support all possible alternatives.
-
-Often a particular model of machine has a name. Many machine names are
-recognized as aliases for CPU/company combinations. Thus, the machine
-name @samp{sun3}, mentioned above, is an alias for @samp{m68k-sun}.
-Sometimes we accept a company name as a machine name, when the name is
-popularly used for a particular machine. Here is a table of the known
-machine names:
-
-@quotation
-3300, 3b1, 3b@var{n}, 7300, altos3068, altos,
-apollo68, att-7300, balance,
-convex-c@var{n}, crds, decstation-3100,
-decstation, delta, encore,
-fx2800, gmicro, hp7@var{nn}, hp8@var{nn},
-hp9k2@var{nn}, hp9k3@var{nn}, hp9k7@var{nn},
-hp9k8@var{nn}, iris4d, iris, isi68,
-m3230, magnum, merlin, miniframe,
-mmax, news-3600, news800, news, next,
-pbd, pc532, pmax, powerpc, powerpcle, ps2, risc-news,
-rtpc, sun2, sun386i, sun386, sun3,
-sun4, symmetry, tower-32, tower.
-@end quotation
-
-@noindent
-Remember that a machine name specifies both the cpu type and the company
-name.
-If you want to install your own homemade configuration files, you can
-use @samp{local} as the company name to access them. If you use
-configuration @samp{@var{cpu}-local}, the configuration name
-without the cpu prefix
-is used to form the configuration file names.
-
-Thus, if you specify @samp{m68k-local}, configuration uses
-files @file{m68k.md}, @file{local.h}, @file{m68k.c},
-@file{xm-local.h}, @file{t-local}, and @file{x-local}, all in the
-directory @file{config/m68k}.
-
-Here is a list of configurations that have special treatment or special
-things you must know:
-
-@table @samp
-@item vax-dec-vms
-See @ref{VMS Install}, for details on how to install GNU CC on VMS@.
-@end table
-
-@ifnothtml
-@node Cross-Compiler, VMS Install, Configurations, Old
-@section Building and Installing a Cross-Compiler
-@end ifnothtml
-@html
-<h2>@anchor{Cross-Compiler}Building and Installing a Cross-Compiler</h2>
-@end html
-@cindex cross-compiler, installation
-
-GNU CC can function as a cross-compiler for many machines, but not all.
-
-@itemize @bullet
-@item
-Cross-compilers for the Mips as target using the Mips assembler
-currently do not work, because the auxiliary programs
-@file{mips-tdump.c} and @file{mips-tfile.c} can't be compiled on
-anything but a Mips. It does work to cross compile for a Mips
-if you use the GNU assembler and linker.
-
-@item
-Cross-compilers between machines with different floating point formats
-have not all been made to work. GNU CC now has a floating point
-emulator with which these can work, but each target machine description
-needs to be updated to take advantage of it.
-
-@item
-Cross-compilation between machines of different word sizes is
-somewhat problematic and sometimes does not work.
-@end itemize
-
-Since GNU CC generates assembler code, you probably need a
-cross-assembler that GNU CC can run, in order to produce object files.
-If you want to link on other than the target machine, you need a
-cross-linker as well. You also need header files and libraries suitable
-for the target machine that you can install on the host machine.
-
-@ifnothtml
-@menu
-* Steps of Cross:: Using a cross-compiler involves several steps
- that may be carried out on different machines.
-* Configure Cross:: Configuring a cross-compiler.
-* Tools and Libraries:: Where to put the linker and assembler, and the C library.
-* Cross Headers:: Finding and installing header files
- for a cross-compiler.
-* Build Cross:: Actually compiling the cross-compiler.
-@end menu
-@end ifnothtml
-
-@ifnothtml
-@node Steps of Cross, Configure Cross, , Cross-Compiler
-@subsection Steps of Cross-Compilation
-@end ifnothtml
-@html
-<h2>Steps of Cross-Compilation</h2>
-@end html
-
-To compile and run a program using a cross-compiler involves several
-steps:
-
-@itemize @bullet
-@item
-Run the cross-compiler on the host machine to produce assembler files
-for the target machine. This requires header files for the target
-machine.
-
-@item
-Assemble the files produced by the cross-compiler. You can do this
-either with an assembler on the target machine, or with a
-cross-assembler on the host machine.
-
-@item
-Link those files to make an executable. You can do this either with a
-linker on the target machine, or with a cross-linker on the host
-machine. Whichever machine you use, you need libraries and certain
-startup files (typically @file{crt@dots{}.o}) for the target machine.
-@end itemize
-
-It is most convenient to do all of these steps on the same host machine,
-since then you can do it all with a single invocation of GNU CC@. This
-requires a suitable cross-assembler and cross-linker. For some targets,
-the GNU assembler and linker are available.
-
-@ifnothtml
-@node Configure Cross, Tools and Libraries, Steps of Cross, Cross-Compiler
-@subsection Configuring a Cross-Compiler
-@end ifnothtml
-@html
-<h2>Configuring a Cross-Compiler</h2>
-@end html
-
-To build GNU CC as a cross-compiler, you start out by running
-@file{configure}. Use the @option{--target=@var{target}} to specify the
-target type. If @file{configure} was unable to correctly identify the
-system you are running on, also specify the @option{--build=@var{build}}
-option. For example, here is how to configure for a cross-compiler that
-produces code for an HP 68030 system running BSD on a system that
-@file{configure} can correctly identify:
-
-@smallexample
-./configure --target=m68k-hp-bsd4.3
-@end smallexample
-
-@ifnothtml
-@node Tools and Libraries, Cross Headers, Configure Cross, Cross-Compiler
-@subsection Tools and Libraries for a Cross-Compiler
-@end ifnothtml
-@html
-<h2>Tools and Libraries for a Cross-Compiler</h2>
-@end html
-
-If you have a cross-assembler and cross-linker available, you should
-install them now. Put them in the directory
-@file{/usr/local/@var{target}/bin}. Here is a table of the tools
-you should put in this directory:
-
-@table @file
-@item as
-This should be the cross-assembler.
-
-@item ld
-This should be the cross-linker.
-
-@item ar
-This should be the cross-archiver: a program which can manipulate
-archive files (linker libraries) in the target machine's format.
-
-@item ranlib
-This should be a program to construct a symbol table in an archive file.
-@end table
-
-The installation of GNU CC will find these programs in that directory,
-and copy or link them to the proper place to for the cross-compiler to
-find them when run later.
-
-The easiest way to provide these files is to build the Binutils package
-and GAS@. Configure them with the same @option{--host} and @option{--target}
-options that you use for configuring GNU CC, then build and install
-them. They install their executables automatically into the proper
-directory. Alas, they do not support all the targets that GNU CC
-supports.
-
-If you want to install libraries to use with the cross-compiler, such as
-a standard C library, put them in the directory
-@file{/usr/local/@var{target}/lib}; installation of GNU CC copies
-all the files in that subdirectory into the proper place for GNU CC to
-find them and link with them. Here's an example of copying some
-libraries from a target machine:
-
-@example
-ftp @var{target-machine}
-lcd /usr/local/@var{target}/lib
-cd /lib
-get libc.a
-cd /usr/lib
-get libg.a
-get libm.a
-quit
-@end example
-
-@noindent
-The precise set of libraries you'll need, and their locations on
-the target machine, vary depending on its operating system.
-
-@cindex start files
-Many targets require ``start files'' such as @file{crt0.o} and
-@file{crtn.o} which are linked into each executable; these too should be
-placed in @file{/usr/local/@var{target}/lib}. There may be several
-alternatives for @file{crt0.o}, for use with profiling or other
-compilation options. Check your target's definition of
-@code{STARTFILE_SPEC} to find out what start files it uses.
-Here's an example of copying these files from a target machine:
-
-@example
-ftp @var{target-machine}
-lcd /usr/local/@var{target}/lib
-prompt
-cd /lib
-mget *crt*.o
-cd /usr/lib
-mget *crt*.o
-quit
-@end example
-
-@ifnothtml
-@node Cross Headers, Build Cross, Tools and Libraries, Cross-Compiler
-@subsection Cross-Compilers and Header Files
-@end ifnothtml
-@html
-<h2>Cross-Compilers and Header Files</h2>
-@end html
-
-If you are cross-compiling a standalone program or a program for an
-embedded system, then you may not need any header files except the few
-that are part of GNU CC (and those of your program). However, if you
-intend to link your program with a standard C library such as
-@file{libc.a}, then you probably need to compile with the header files
-that go with the library you use.
-
-The GNU C compiler does not come with these files, because (1) they are
-system-specific, and (2) they belong in a C library, not in a compiler.
-
-If the GNU C library supports your target machine, then you can get the
-header files from there (assuming you actually use the GNU library when
-you link your program).
-
-If your target machine comes with a C compiler, it probably comes with
-suitable header files also. If you make these files accessible from the host
-machine, the cross-compiler can use them also.
-
-Otherwise, you're on your own in finding header files to use when
-cross-compiling.
-
-When you have found suitable header files, you should put them in the
-directory @file{/usr/local/@var{target}/include}, before building the
-cross compiler. Then installation will run fixincludes properly and
-install the corrected versions of the header files where the compiler
-will use them.
-
-Provide the header files before you build the cross-compiler, because
-the build stage actually runs the cross-compiler to produce parts of
-@file{libgcc.a}. (These are the parts that @emph{can} be compiled with
-GNU CC@.) Some of them need suitable header files.
-
-Here's an example showing how to copy the header files from a target
-machine. On the target machine, do this:
-
-@example
-(cd /usr/include; tar cf - .) > tarfile
-@end example
-
-Then, on the host machine, do this:
-
-@example
-ftp @var{target-machine}
-lcd /usr/local/@var{target}/include
-get tarfile
-quit
-tar xf tarfile
-@end example
-
-@ifnothtml
-@node Build Cross, , Cross Headers, Cross-Compiler
-@subsection Actually Building the Cross-Compiler
-@end ifnothtml
-@html
-<h2>Actually Building the Cross-Compiler</h2>
-@end html
-
-Now you can proceed just as for compiling a single-machine compiler
-through the step of building stage 1.
-
-If your target is exotic, you may need to provide the header file
-@file{float.h}.One way to do this is to compile @file{enquire} and run
-it on your target machine. The job of @file{enquire} is to run on the
-target machine and figure out by experiment the nature of its floating
-point representation. @file{enquire} records its findings in the header
-file @file{float.h}. If you can't produce this file by running
-@file{enquire} on the target machine, then you will need to come up with
-a suitable @file{float.h} in some other way (or else, avoid using it in
-your programs).
-
-Do not try to build stage 2 for a cross-compiler. It doesn't work to
-rebuild GNU CC as a cross-compiler using the cross-compiler, because
-that would produce a program that runs on the target machine, not on the
-host. For example, if you compile a 386-to-68030 cross-compiler with
-itself, the result will not be right either for the 386 (because it was
-compiled into 68030 code) or for the 68030 (because it was configured
-for a 386 as the host). If you want to compile GNU CC into 68030 code,
-whether you compile it on a 68030 or with a cross-compiler on a 386, you
-must specify a 68030 as the host when you configure it.
-
-To install the cross-compiler, use @samp{make install}, as usual.
-
-@ifnothtml
-@node VMS Install, , Cross-Compiler, Old
-@section Installing GNU CC on VMS
-@end ifnothtml
-@html
-<h2>@anchor{VMS Install}Installing GNU CC on VMS</h2>
-@end html
-@cindex VMS installation
-@cindex installing GNU CC on VMS
-
-The VMS version of GNU CC is distributed in a backup saveset containing
-both source code and precompiled binaries.
-
-To install the @file{gcc} command so you can use the compiler easily, in
-the same manner as you use the VMS C compiler, you must install the VMS CLD
-file for GNU CC as follows:
-
-@enumerate
-@item
-Define the VMS logical names @samp{GNU_CC} and @samp{GNU_CC_INCLUDE}
-to point to the directories where the GNU CC executables
-(@file{gcc-cpp.exe}, @file{gcc-cc1.exe}, etc.) and the C include files are
-kept respectively. This should be done with the commands:
-
-@smallexample
-$ assign /system /translation=concealed -
- disk:[gcc.] gnu_cc
-$ assign /system /translation=concealed -
- disk:[gcc.include.] gnu_cc_include
-@end smallexample
-
-@noindent
-with the appropriate disk and directory names. These commands can be
-placed in your system startup file so they will be executed whenever
-the machine is rebooted. You may, if you choose, do this via the
-@file{GCC_INSTALL.COM} script in the @file{[GCC]} directory.
-
-@item
-Install the @file{GCC} command with the command line:
-
-@smallexample
-$ set command /table=sys$common:[syslib]dcltables -
- /output=sys$common:[syslib]dcltables gnu_cc:[000000]gcc
-$ install replace sys$common:[syslib]dcltables
-@end smallexample
-
-@item
-To install the help file, do the following:
-
-@smallexample
-$ library/help sys$library:helplib.hlb gcc.hlp
-@end smallexample
-
-@noindent
-Now you can invoke the compiler with a command like @samp{gcc /verbose
-file.c}, which is equivalent to the command @samp{gcc -v -c file.c} in
-Unix.
-@end enumerate
-
-If you wish to use GNU C++ you must first install GNU CC, and then
-perform the following steps:
-
-@enumerate
-@item
-Define the VMS logical name @samp{GNU_GXX_INCLUDE} to point to the
-directory where the preprocessor will search for the C++ header files.
-This can be done with the command:
-
-@smallexample
-$ assign /system /translation=concealed -
- disk:[gcc.gxx_include.] gnu_gxx_include
-@end smallexample
-
-@noindent
-with the appropriate disk and directory name. If you are going to be
-using a C++ runtime library, this is where its install procedure will install
-its header files.
-
-@item
-Obtain the file @file{gcc-cc1plus.exe}, and place this in the same
-directory that @file{gcc-cc1.exe} is kept.
-
-The GNU C++ compiler can be invoked with a command like @samp{gcc /plus
-/verbose file.cc}, which is equivalent to the command @samp{g++ -v -c
-file.cc} in Unix.
-@end enumerate
-
-We try to put corresponding binaries and sources on the VMS distribution
-tape. But sometimes the binaries will be from an older version than the
-sources, because we don't always have time to update them. (Use the
-@samp{/version} option to determine the version number of the binaries and
-compare it with the source file @file{version.c} to tell whether this is
-so.) In this case, you should use the binaries you get to recompile the
-sources. If you must recompile, here is how:
-
-@enumerate
-@item
-Execute the command procedure @file{vmsconfig.com} to set up the files
-@file{tm.h}, @file{config.h}, @file{aux-output.c}, and @file{md.}, and
-to create files @file{tconfig.h} and @file{hconfig.h}. This procedure
-also creates several linker option files used by @file{make-cc1.com} and
-a data file used by @file{make-l2.com}.
-
-@smallexample
-$ @@vmsconfig.com
-@end smallexample
-
-@item
-Setup the logical names and command tables as defined above. In
-addition, define the VMS logical name @samp{GNU_BISON} to point at the
-to the directories where the Bison executable is kept. This should be
-done with the command:
-
-@smallexample
-$ assign /system /translation=concealed -
- disk:[bison.] gnu_bison
-@end smallexample
-
-You may, if you choose, use the @file{INSTALL_BISON.COM} script in the
-@file{[BISON]} directory.
-
-@item
-Install the @samp{BISON} command with the command line:
-
-@smallexample
-$ set command /table=sys$common:[syslib]dcltables -
- /output=sys$common:[syslib]dcltables -
- gnu_bison:[000000]bison
-$ install replace sys$common:[syslib]dcltables
-@end smallexample
-
-@item
-Type @samp{@@make-gcc} to recompile everything, or submit the file
-@file{make-gcc.com} to a batch queue. If you wish to build the GNU C++
-compiler as well as the GNU CC compiler, you must first edit
-@file{make-gcc.com} and follow the instructions that appear in the
-comments.
-
-@item
-In order to use GCC, you need a library of functions which GCC compiled code
-will call to perform certain tasks, and these functions are defined in the
-file @file{libgcc2.c}. To compile this you should use the command procedure
-@file{make-l2.com}, which will generate the library @file{libgcc2.olb}.
-@file{libgcc2.olb} should be built using the compiler built from
-the same distribution that @file{libgcc2.c} came from, and
-@file{make-gcc.com} will automatically do all of this for you.
-
-To install the library, use the following commands:
-
-@smallexample
-$ library gnu_cc:[000000]gcclib/delete=(new,eprintf)
-$ library gnu_cc:[000000]gcclib/delete=L_*
-$ library libgcc2/extract=*/output=libgcc2.obj
-$ library gnu_cc:[000000]gcclib libgcc2.obj
-@end smallexample
-
-The first command simply removes old modules that will be replaced with
-modules from @file{libgcc2} under different module names. The modules
-@code{new} and @code{eprintf} may not actually be present in your
-@file{gcclib.olb}---if the VMS librarian complains about those modules
-not being present, simply ignore the message and continue on with the
-next command. The second command removes the modules that came from the
-previous version of the library @file{libgcc2.c}.
-
-Whenever you update the compiler on your system, you should also update the
-library with the above procedure.
-
-@item
-You may wish to build GCC in such a way that no files are written to the
-directory where the source files reside. An example would be the when
-the source files are on a read-only disk. In these cases, execute the
-following DCL commands (substituting your actual path names):
-
-@smallexample
-$ assign dua0:[gcc.build_dir.]/translation=concealed, -
- dua1:[gcc.source_dir.]/translation=concealed gcc_build
-$ set default gcc_build:[000000]
-@end smallexample
-
-@noindent
-where the directory @file{dua1:[gcc.source_dir]} contains the source
-code, and the directory @file{dua0:[gcc.build_dir]} is meant to contain
-all of the generated object files and executables. Once you have done
-this, you can proceed building GCC as described above. (Keep in mind
-that @file{gcc_build} is a rooted logical name, and thus the device
-names in each element of the search list must be an actual physical
-device name rather than another rooted logical name).
-
-@item
-@strong{If you are building GNU CC with a previous version of GNU CC,
-you also should check to see that you have the newest version of the
-assembler}. In particular, GNU CC version 2 treats global constant
-variables slightly differently from GNU CC version 1, and GAS version
-1.38.1 does not have the patches required to work with GCC version 2.
-If you use GAS 1.38.1, then @code{extern const} variables will not have
-the read-only bit set, and the linker will generate warning messages
-about mismatched psect attributes for these variables. These warning
-messages are merely a nuisance, and can safely be ignored.
-
-@item
-If you want to build GNU CC with the VAX C compiler, you will need to
-make minor changes in @file{make-cccp.com} and @file{make-cc1.com}
-to choose alternate definitions of @code{CC}, @code{CFLAGS}, and
-@code{LIBS}. See comments in those files. However, you must
-also have a working version of the GNU assembler (GNU as, aka GAS) as
-it is used as the back end for GNU CC to produce binary object modules
-and is not included in the GNU CC sources. GAS is also needed to
-compile @file{libgcc2} in order to build @file{gcclib} (see above);
-@file{make-l2.com} expects to be able to find it operational in
-@file{gnu_cc:[000000]gnu-as.exe}.
-
-To use GNU CC on VMS, you need the VMS driver programs
-@file{gcc.exe}, @file{gcc.com}, and @file{gcc.cld}. They are
-distributed with the VMS binaries (@file{gcc-vms}) rather than the
-GNU CC sources. GAS is also included in @file{gcc-vms}, as is Bison.
-
-Once you have successfully built GNU CC with VAX C, you should use the
-resulting compiler to rebuild itself. Before doing this, be sure to
-restore the @code{CC}, @code{CFLAGS}, and @code{LIBS} definitions in
-@file{make-cccp.com} and @file{make-cc1.com}. The second generation
-compiler will be able to take advantage of many optimizations that must
-be suppressed when building with other compilers.
-@end enumerate
-
-Under previous versions of GNU CC, the generated code would occasionally
-give strange results when linked with the sharable @file{VAXCRTL} library.
-Now this should work.
-
-Even with this version, however, GNU CC itself should not be linked with
-the sharable @file{VAXCRTL}. The version of @code{qsort} in
-@file{VAXCRTL} has a bug (known to be present in VMS versions V4.6
-through V5.5) which causes the compiler to fail.
-
-The executables are generated by @file{make-cc1.com} and
-@file{make-cccp.com} use the object library version of @file{VAXCRTL} in
-order to make use of the @code{qsort} routine in @file{gcclib.olb}. If
-you wish to link the compiler executables with the shareable image
-version of @file{VAXCRTL}, you should edit the file @file{tm.h} (created
-by @file{vmsconfig.com}) to define the macro @code{QSORT_WORKAROUND}.
-
-@code{QSORT_WORKAROUND} is always defined when GNU CC is compiled with
-VAX C, to avoid a problem in case @file{gcclib.olb} is not yet
-available.
diff --git a/contrib/gcc/doc/install.texi b/contrib/gcc/doc/install.texi
deleted file mode 100644
index e9f8bee895a0..000000000000
--- a/contrib/gcc/doc/install.texi
+++ /dev/null
@@ -1,3902 +0,0 @@
-\input texinfo.tex @c -*-texinfo-*-
-@c @ifnothtml
-@c %**start of header
-@setfilename install.info
-@settitle Installing GCC
-@setchapternewpage odd
-@c %**end of header
-@c @end ifnothtml
-
-@c Specify title for specific html page
-@ifset indexhtml
-@settitle Installing GCC
-@end ifset
-@ifset specifichtml
-@settitle Host/Target specific installation notes for GCC
-@end ifset
-@ifset downloadhtml
-@settitle Downloading GCC
-@end ifset
-@ifset configurehtml
-@settitle Installing GCC: Configuration
-@end ifset
-@ifset buildhtml
-@settitle Installing GCC: Building
-@end ifset
-@ifset testhtml
-@settitle Installing GCC: Testing
-@end ifset
-@ifset finalinstallhtml
-@settitle Installing GCC: Final installation
-@end ifset
-@ifset binarieshtml
-@settitle Installing GCC: Binaries
-@end ifset
-@ifset oldhtml
-@settitle Installing GCC: Old documentation
-@end ifset
-@ifset gfdlhtml
-@settitle Installing GCC: GNU Free Documentation License
-@end ifset
-
-@c Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
-@c 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
-@c *** Converted to texinfo by Dean Wakerley, dean@wakerley.com
-
-@c Include everything if we're not making html
-@ifnothtml
-@set indexhtml
-@set specifichtml
-@set downloadhtml
-@set configurehtml
-@set buildhtml
-@set testhtml
-@set finalinstallhtml
-@set binarieshtml
-@set oldhtml
-@set gfdlhtml
-@end ifnothtml
-
-@c Part 2 Summary Description and Copyright
-@macro copyrightnotice
-Copyright @copyright{} 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
-1999, 2000, 2001, 2002 Free Software Foundation, Inc.
-@sp 1
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.1 or
-any later version published by the Free Software Foundation; with no
-Invariant Sections, the Front-Cover texts being (a) (see below), and
-with the Back-Cover Texts being (b) (see below). A copy of the
-license is included in the section entitled ``@uref{./gfdl.html,,GNU
-Free Documentation License}''.
-
-(a) The FSF's Front-Cover Text is:
-
- A GNU Manual
-
-(b) The FSF's Back-Cover Text is:
-
- You have freedom to copy and modify this GNU Manual, like GNU
- software. Copies published by the Free Software Foundation raise
- funds for GNU development.
-@end macro
-@ifinfo
-@copyrightnotice{}
-@end ifinfo
-
-@c Part 3 Titlepage and Copyright
-@titlepage
-@sp 10
-@comment The title is printed in a large font.
-@center @titlefont{Installing GCC}
-
-@c The following two commands start the copyright page.
-@page
-@vskip 0pt plus 1filll
-@copyrightnotice{}
-@end titlepage
-
-@c Part 4 Top node and Master Menu
-@ifinfo
-@node Top, , , (dir)
-@comment node-name, next, Previous, up
-
-@menu
-* Installing GCC:: This document describes the generic installation
- procedure for GCC as well as detailing some target
- specific installation instructions.
-
-* Specific:: Host/target specific installation notes for GCC.
-* Binaries:: Where to get pre-compiled binaries.
-
-* Old:: Old installation documentation.
-
-* GNU Free Documentation License:: How you can copy and share this manual.
-* Concept Index:: This index has two entries.
-@end menu
-@end ifinfo
-
-@c Part 5 The Body of the Document
-@c ***Installing GCC**********************************************************
-@ifnothtml
-@comment node-name, next, previous, up
-@node Installing GCC, Binaries, , Top
-@end ifnothtml
-@ifset indexhtml
-@html
-<h1 align="center">Installing GCC</h1>
-@end html
-@ifnothtml
-@chapter Installing GCC
-@end ifnothtml
-
-The latest version of this document is always available at
-@uref{http://gcc.gnu.org/install/,,http://gcc.gnu.org/install/}.
-
-This document describes the generic installation procedure for GCC as well
-as detailing some target specific installation instructions.
-
-GCC includes several components that previously were separate distributions
-with their own installation instructions. This document supersedes all
-package specific installation instructions.
-
-@emph{Before} starting the build/install procedure please check the
-@ifnothtml
-@ref{Specific, host/target specific installation notes}.
-@end ifnothtml
-@ifhtml
-@uref{specific.html,,host/target specific installation notes}.
-@end ifhtml
-We recommend you browse the entire generic installation instructions before
-you proceed.
-
-Lists of successful builds for released versions of GCC are
-available at our web pages for
-@uref{http://gcc.gnu.org/gcc-3.1/buildstat.html,,3.1},
-@uref{http://gcc.gnu.org/gcc-3.0/buildstat.html,,3.0}
-and
-@uref{http://gcc.gnu.org/gcc-2.95/buildstat.html,,2.95}.
-These lists are updated as new information becomes available.
-
-The installation procedure itself is broken into five steps.
-
-@ifinfo
-@menu
-* Downloading the source::
-* Configuration::
-* Building::
-* Testing:: (optional)
-* Final install::
-@end menu
-@end ifinfo
-@ifhtml
-@enumerate
-@item
-@uref{download.html,,Downloading the source}
-@item
-@uref{configure.html,,Configuration}
-@item
-@uref{build.html,,Building}
-@item
-@uref{test.html,,Testing} (optional)
-@item
-@uref{finalinstall.html,,Final install}
-@end enumerate
-@end ifhtml
-
-Please note that GCC does not support @samp{make uninstall} and probably
-won't do so in the near future as this would open a can of worms. Instead,
-we suggest that you install GCC into a directory of its own and simply
-remove that directory when you do not need that specific version of GCC
-any longer, and, if shared libraries are installed there as well, no
-more binaries exist that use them.
-
-@ifhtml
-There are also some @uref{old.html,,old installation instructions},
-which are mostly obsolete but still contain some information which has
-not yet been merged into the main part of this manual.
-@end ifhtml
-
-@html
-<hr>
-<p>
-@end html
-@ifhtml
-@uref{./index.html,,Return to the GCC Installation page}
-
-@copyrightnotice{}
-@end ifhtml
-@end ifset
-
-@c ***Downloading the source**************************************************
-@ifnothtml
-@comment node-name, next, previous, up
-@node Downloading the source, Configuration, , Installing GCC
-@end ifnothtml
-@ifset downloadhtml
-@html
-<h1 align="center">Downloading GCC</h1>
-@end html
-@ifnothtml
-@chapter Downloading GCC
-@end ifnothtml
-@cindex Downloading GCC
-@cindex Downloading the Source
-
-GCC is distributed via @uref{http://gcc.gnu.org/cvs.html,,CVS} and FTP
-tarballs compressed with @command{gzip} or
-@command{bzip2}. It is possible to download a full distribution or specific
-components.
-
-Please refer to our @uref{http://gcc.gnu.org/releases.html,,releases web page}
-for information on how to obtain GCC@.
-
-The full distribution includes the C, C++, Objective-C, Fortran, Java,
-and Ada (in case of GCC 3.1 and later) compilers. The full distribution
-also includes runtime libraries for C++, Objective-C, Fortran, and Java.
-In GCC 3.0 and later versions, GNU compiler testsuites are also included
-in the full distribution.
-
-If you choose to download specific components, you must download the core
-GCC distribution plus any language specific distributions you wish to
-use. The core distribution includes the C language front end as well as the
-shared components. Each language has a tarball which includes the language
-front end as well as the language runtime (when appropriate).
-
-Unpack the core distribution as well as any language specific
-distributions in the same directory.
-
-If you also intend to build binutils (either to upgrade an existing
-installation or for use in place of the corresponding tools of your
-OS), unpack the binutils distribution either in the same directory or
-a separate one. In the latter case, add symbolic links to any
-components of the binutils you intend to build alongside the compiler
-(@file{bfd}, @file{binutils}, @file{gas}, @file{gprof}, @file{ld},
-@file{opcodes}, @dots{}) to the directory containing the GCC sources.
-
-@html
-<hr>
-<p>
-@end html
-@ifhtml
-@uref{./index.html,,Return to the GCC Installation page}
-@end ifhtml
-@end ifset
-
-@c ***Configuration***********************************************************
-@ifnothtml
-@comment node-name, next, previous, up
-@node Configuration, Building, Downloading the source, Installing GCC
-@end ifnothtml
-@ifset configurehtml
-@html
-<h1 align="center">Installing GCC: Configuration</h1>
-@end html
-@ifnothtml
-@chapter Installing GCC: Configuration
-@end ifnothtml
-@cindex Configuration
-@cindex Installing GCC: Configuration
-
-Like most GNU software, GCC must be configured before it can be built.
-This document describes the recommended configuration procedure
-for both native and cross targets.
-
-We use @var{srcdir} to refer to the toplevel source directory for
-GCC; we use @var{objdir} to refer to the toplevel build/object directory.
-
-If you obtained the sources via CVS, @var{srcdir} must refer to the top
-@file{gcc} directory, the one where the @file{MAINTAINERS} can be found,
-and not its @file{gcc} subdirectory, otherwise the build will fail.
-
-First, we @strong{highly} recommend that GCC be built into a
-separate directory than the sources which does @strong{not} reside
-within the source tree. This is how we generally build GCC; building
-where @var{srcdir} == @var{objdir} should still work, but doesn't
-get extensive testing; building where @var{objdir} is a subdirectory
-of @var{srcdir} is unsupported.
-
-If you have previously built GCC in the same directory for a
-different target machine, do @samp{make distclean} to delete all files
-that might be invalid. One of the files this deletes is
-@file{Makefile}; if @samp{make distclean} complains that @file{Makefile}
-does not exist, it probably means that the directory is already suitably
-clean. However, with the recommended method of building in a separate
-@var{objdir}, you should simply use a different @var{objdir} for each
-target.
-
-Second, when configuring a native system, either @command{cc} or
-@command{gcc} must be in your path or you must set @env{CC} in
-your environment before running configure. Otherwise the configuration
-scripts may fail.
-
-Note that the bootstrap compiler and the resulting GCC must be link
-compatible, else the bootstrap will fail with linker errors about
-incompatible object file formats. Several multilibed targets are
-affected by this requirement, see
-@ifnothtml
-@ref{Specific, host/target specific installation notes}.
-@end ifnothtml
-@ifhtml
-@uref{specific.html,,host/target specific installation notes}.
-@end ifhtml
-
-To configure GCC:
-
-@example
- % mkdir @var{objdir}
- % cd @var{objdir}
- % @var{srcdir}/configure [@var{options}] [@var{target}]
-@end example
-
-
-@heading Target specification
-@itemize @bullet
-@item
-GCC has code to correctly determine the correct value for @var{target}
-for nearly all native systems. Therefore, we highly recommend you not
-provide a configure target when configuring a native compiler.
-
-@item
-@var{target} must be specified as @option{--target=@var{target}}
-when configuring a cross compiler; examples of valid targets would be
-i960-rtems, m68k-coff, sh-elf, etc.
-
-@item
-Specifying just @var{target} instead of @option{--target=@var{target}}
-implies that the host defaults to @var{target}.
-@end itemize
-
-
-@heading Options specification
-
-Use @var{options} to override several configure time options for
-GCC@. A list of supported @var{options} follows; @command{configure
---help} may list other options, but those not listed below may not
-work and should not normally be used.
-
-@table @code
-@item --prefix=@var{dirname}
-Specify the toplevel installation
-directory. This is the recommended way to install the tools into a directory
-other than the default. The toplevel installation directory defaults to
-@file{/usr/local}.
-
-We @strong{highly} recommend against @var{dirname} being the same or a
-subdirectory of @var{objdir} or vice versa.
-
-These additional options control where certain parts of the distribution
-are installed. Normally you should not need to use these options.
-@table @code
-
-@item --exec-prefix=@var{dirname}
-Specify the toplevel installation directory for architecture-dependent
-files. The default is @file{@var{prefix}}.
-
-@item --bindir=@var{dirname}
-Specify the installation directory for the executables called by users
-(such as @command{gcc} and @command{g++}). The default is
-@file{@var{exec-prefix}/bin}.
-
-@item --libdir=@var{dirname}
-Specify the installation directory for object code libraries and
-internal parts of GCC@. The default is @file{@var{exec-prefix}/lib}.
-
-@item --with-slibdir=@var{dirname}
-Specify the installation directory for the shared libgcc library. The
-default is @file{@var{libdir}}.
-
-@item --infodir=@var{dirname}
-Specify the installation directory for documentation in info format.
-The default is @file{@var{prefix}/info}.
-
-@item --mandir=@var{dirname}
-Specify the installation directory for manual pages. The default is
-@file{@var{prefix}/man}. (Note that the manual pages are only extracts from
-the full GCC manuals, which are provided in Texinfo format. The
-@command{g77} manpage is unmaintained and may be out of date; the others
-are derived by an automatic conversion process from parts of the full
-manual.)
-
-@item --with-gxx-include-dir=@var{dirname}
-Specify
-the installation directory for G++ header files. The default is
-@file{@var{prefix}/include/g++-v3}.
-
-@end table
-
-@item --program-prefix=@var{prefix}
-GCC supports some transformations of the names of its programs when
-installing them. This option prepends @var{prefix} to the names of
-programs to install in @var{bindir} (see above). For example, specifying
-@option{--program-prefix=foo-} would result in @samp{gcc}
-being installed as @file{/usr/local/bin/foo-gcc}.
-
-@item --program-suffix=@var{suffix}
-Appends @var{suffix} to the names of programs to install in @var{bindir}
-(see above). For example, specifying @option{--program-suffix=-3.1}
-would result in @samp{gcc} being installed as
-@file{/usr/local/bin/gcc-3.1}.
-
-@item --program-transform-name=@var{pattern}
-Applies the @samp{sed} script @var{pattern} to be applied to the names
-of programs to install in @var{bindir} (see above). @var{pattern} has to
-consist of one or more basic @samp{sed} editing commands, separated by
-semicolons. For example, if you want the @samp{gcc} program name to be
-transformed to the installed program @file{/usr/local/bin/myowngcc} and
-the @samp{g++} program name to be transformed to
-@file{/usr/local/bin/gspecial++} without changing other program names,
-you could use the pattern
-@option{--program-transform-name='s/^gcc$/myowngcc/; s/^g++$/gspecial++/'}
-to achieve this effect.
-
-All three options can be combined and used together, resulting in more
-complex conversion patterns. As a basic rule, @var{prefix} (and
-@var{suffix}) are prepended (appended) before further transformations
-can happen with a special transformation script @var{pattern}.
-
-As currently implemented, this options only take effect for native
-builds; cross compiler binaries' names are not transformed even when a
-transformation is explicitly asked for by one of this options.
-
-For native builds, some of the installed programs are also installed
-with the target alias in front of their name, as in
-@samp{i686-pc-linux-gnu-gcc}. All of the above transformations happen
-before the target alias is prepended to the name - so, specifying
-@option{--program-prefix=foo-} and @option{program-suffix=-3.1}, the
-resulting binary would be installed as
-@file{/usr/local/bin/i686-pc-linux-gnu-foo-gcc-3.1}.
-
-As a last shortcoming, none of the installed Ada programs are
-transformed yet, which will be fixed in some time.
-
-@item --with-local-prefix=@var{dirname}
-Specify the
-installation directory for local include files. The default is
-@file{/usr/local}. Specify this option if you want the compiler to
-search directory @file{@var{dirname}/include} for locally installed
-header files @emph{instead} of @file{/usr/local/include}.
-
-You should specify @option{--with-local-prefix} @strong{only} if your
-site has a different convention (not @file{/usr/local}) for where to put
-site-specific files.
-
-The default value for @option{--with-local-prefix} is @file{/usr/local}
-regardless of the value of @option{--prefix}. Specifying
-@option{--prefix} has no effect on which directory GCC searches for
-local header files. This may seem counterintuitive, but actually it is
-logical.
-
-The purpose of @option{--prefix} is to specify where to @emph{install
-GCC}. The local header files in @file{/usr/local/include}---if you put
-any in that directory---are not part of GCC@. They are part of other
-programs---perhaps many others. (GCC installs its own header files in
-another directory which is based on the @option{--prefix} value.)
-
-@strong{Do not} specify @file{/usr} as the @option{--with-local-prefix}!
-The directory you use for @option{--with-local-prefix} @strong{must not}
-contain any of the system's standard header files. If it did contain
-them, certain programs would be miscompiled (including GNU Emacs, on
-certain targets), because this would override and nullify the header
-file corrections made by the @code{fixincludes} script.
-
-Indications are that people who use this option use it based on mistaken
-ideas of what it is for. People use it as if it specified where to
-install part of GCC@. Perhaps they make this assumption because
-installing GCC creates the directory.
-
-@item --enable-shared[=@var{package}[,@dots{}]]
-Build shared versions of libraries, if shared libraries are supported on
-the target platform. Unlike GCC 2.95.x and earlier, shared libraries
-are enabled by default on all platforms that support shared libraries,
-except for @samp{libobjc} which is built as a static library only by
-default.
-
-If a list of packages is given as an argument, build shared libraries
-only for the listed packages. For other packages, only static libraries
-will be built. Package names currently recognized in the GCC tree are
-@samp{libgcc} (also known as @samp{gcc}), @samp{libstdc++} (not
-@samp{libstdc++-v3}), @samp{libffi}, @samp{zlib}, @samp{boehm-gc} and
-@samp{libjava}. Note that @samp{libobjc} does not recognize itself by
-any name, so, if you list package names in @option{--enable-shared},
-you will only get static Objective-C libraries. @samp{libf2c} and
-@samp{libiberty} do not support shared libraries at all.
-
-Use @option{--disable-shared} to build only static libraries. Note that
-@option{--disable-shared} does not accept a list of package names as
-argument, only @option{--enable-shared} does.
-
-@item @anchor{with-gnu-as}--with-gnu-as
-Specify that the compiler should assume that the
-assembler it finds is the GNU assembler. However, this does not modify
-the rules to find an assembler and will result in confusion if found
-assembler is not actually the GNU assembler. (Confusion will also
-result if the compiler finds the GNU assembler but has not been
-configured with @option{--with-gnu-as}.) If you have more than one
-assembler installed on your system, you may want to use this option in
-connection with @option{--with-as=@var{pathname}}.
-
-The systems where it makes a difference whether you use the GNU assembler are
-@samp{hppa1.0-@var{any}-@var{any}}, @samp{hppa1.1-@var{any}-@var{any}},
-@samp{i386-@var{any}-sysv}, @samp{i386-@var{any}-isc},
-@samp{i860-@var{any}-bsd}, @samp{m68k-bull-sysv},
-@samp{m68k-hp-hpux}, @samp{m68k-sony-bsd},
-@samp{m68k-altos-sysv}, @samp{m68000-hp-hpux},
-@samp{m68000-att-sysv}, @samp{@var{any}-lynx-lynxos},
-and @samp{mips-@var{any}}.
-On any other system, @option{--with-gnu-as} has no effect.
-
-On the systems listed above (except for the HP-PA, for ISC on the
-386, and for @samp{mips-sgi-irix5.*}), if you use the GNU assembler,
-you should also use the GNU linker (and specify @option{--with-gnu-ld}).
-
-@item --with-as=@var{pathname}
-Specify that the
-compiler should use the assembler pointed to by @var{pathname}, rather
-than the one found by the standard rules to find an assembler, which
-are:
-@itemize @bullet
-@item
-Check the
-@file{@var{exec_prefix}/lib/gcc-lib/@var{target}/@var{version}}
-directory, where @var{exec_prefix} defaults to @var{prefix} which
-defaults to @file{/usr/local} unless overridden by the
-@option{--prefix=@var{pathname}} switch described above. @var{target} is the
-target system triple, such as @samp{sparc-sun-solaris2.7}, and
-@var{version} denotes the GCC version, such as 3.0.
-@item
-Check operating system specific directories (e.g.@: @file{/usr/ccs/bin} on
-Sun Solaris 2).
-@end itemize
-Note that these rules do not check for the value of @env{PATH}. You may
-want to use @option{--with-as} if no assembler is installed in the
-directories listed above, or if you have multiple assemblers installed
-and want to choose one that is not found by the above rules.
-
-@item @anchor{with-gnu-ld}--with-gnu-ld
-Same as @uref{#with-gnu-as,,@option{--with-gnu-as}}
-but for linker.
-
-
-@item --with-ld=@var{pathname}
-Same as
-@option{--with-as}, but for the linker.
-
-@item --with-stabs
-Specify that stabs debugging
-information should be used instead of whatever format the host normally
-uses. Normally GCC uses the same debug format as the host system.
-
-On MIPS based systems and on Alphas, you must specify whether you want
-GCC to create the normal ECOFF debugging format, or to use BSD-style
-stabs passed through the ECOFF symbol table. The normal ECOFF debug
-format cannot fully handle languages other than C@. BSD stabs format can
-handle other languages, but it only works with the GNU debugger GDB@.
-
-Normally, GCC uses the ECOFF debugging format by default; if you
-prefer BSD stabs, specify @option{--with-stabs} when you configure GCC@.
-
-No matter which default you choose when you configure GCC, the user
-can use the @option{-gcoff} and @option{-gstabs+} options to specify explicitly
-the debug format for a particular compilation.
-
-@option{--with-stabs} is meaningful on the ISC system on the 386, also, if
-@option{--with-gas} is used. It selects use of stabs debugging
-information embedded in COFF output. This kind of debugging information
-supports C++ well; ordinary COFF debugging information does not.
-
-@option{--with-stabs} is also meaningful on 386 systems running SVR4. It
-selects use of stabs debugging information embedded in ELF output. The
-C++ compiler currently (2.6.0) does not support the DWARF debugging
-information normally used on 386 SVR4 platforms; stabs provide a
-workable alternative. This requires gas and gdb, as the normal SVR4
-tools can not generate or interpret stabs.
-
-@item --disable-multilib
-Specify that multiple target
-libraries to support different target variants, calling
-conventions, etc should not be built. The default is to build a
-predefined set of them.
-
-Some targets provide finer-grained control over which multilibs are built
-(e.g., @option{--disable-softfloat}):
-@table @code
-
-@item arc-*-elf*
-biendian.
-
-@item arm-*-*
-fpu, 26bit, underscore, interwork, biendian, nofmult.
-
-@item m68*-*-*
-softfloat, m68881, m68000, m68020.
-
-@item mips*-*-*
-single-float, biendian, softfloat.
-
-@item powerpc*-*-*, rs6000*-*-*
-aix64, pthread, softfloat, powercpu, powerpccpu, powerpcos, biendian,
-sysv, aix.
-
-@end table
-
-@item --enable-threads
-Specify that the target
-supports threads. This affects the Objective-C compiler and runtime
-library, and exception handling for other languages like C++ and Java.
-On some systems, this is the default.
-
-In general, the best (and, in many cases, the only known) threading
-model available will be configured for use. Beware that on some
-systems, gcc has not been taught what threading models are generally
-available for the system. In this case, @option{--enable-threads} is an
-alias for @option{--enable-threads=single}.
-
-@item --disable-threads
-Specify that threading support should be disabled for the system.
-This is an alias for @option{--enable-threads=single}.
-
-@item --enable-threads=@var{lib}
-Specify that
-@var{lib} is the thread support library. This affects the Objective-C
-compiler and runtime library, and exception handling for other languages
-like C++ and Java. The possibilities for @var{lib} are:
-
-@table @code
-@item aix
-AIX thread support.
-@item dce
-DCE thread support.
-@item mach
-Generic MACH thread support, known to work on NeXTSTEP@. (Please note
-that the file needed to support this configuration, @file{gthr-mach.h}, is
-missing and thus this setting will cause a known bootstrap failure.)
-@item no
-This is an alias for @samp{single}.
-@item posix
-Generic POSIX thread support.
-@item pthreads
-Same as @samp{posix} on arm*-*-linux*, *-*-chorusos* and *-*-freebsd*
-only. A future release of gcc might remove this alias or extend it
-to all platforms.
-@item rtems
-RTEMS thread support.
-@item single
-Disable thread support, should work for all platforms.
-@item solaris
-Sun Solaris 2 thread support.
-@item vxworks
-VxWorks thread support.
-@item win32
-Microsoft Win32 API thread support.
-@end table
-
-@item --with-cpu=@var{cpu}
-Specify which cpu variant the
-compiler should generate code for by default. This is currently
-only supported on the some ports, specifically arm, powerpc, and
-SPARC@. If configure does not recognize the model name (e.g.@: arm700,
-603e, or ultrasparc) you provide, please check the configure script
-for a complete list of supported models.
-
-@item --enable-altivec
-Specify that the target supports AltiVec vector enhancements. This
-option will adjust the ABI for AltiVec enhancements, as well as generate
-AltiVec code when appropriate. This option is only available for
-PowerPC systems.
-
-@item --enable-target-optspace
-Specify that target
-libraries should be optimized for code space instead of code speed.
-This is the default for the m32r platform.
-
-@item --disable-cpp
-Specify that a user visible @command{cpp} program should not be installed.
-
-@item --with-cpp-install-dir=@var{dirname}
-Specify that the user visible @command{cpp} program should be installed
-in @file{@var{prefix}/@var{dirname}/cpp}, in addition to @var{bindir}.
-
-@item --enable-maintainer-mode
-The build rules that
-regenerate the GCC master message catalog @file{gcc.pot} are normally
-disabled. This is because it can only be rebuilt if the complete source
-tree is present. If you have changed the sources and want to rebuild the
-catalog, configuring with @option{--enable-maintainer-mode} will enable
-this. Note that you need a recent version of the @code{gettext} tools
-to do so.
-
-@item --enable-version-specific-runtime-libs
-Specify
-that runtime libraries should be installed in the compiler specific
-subdirectory (@file{@var{libsubdir}}) rather than the usual places. In
-addition, @samp{libstdc++}'s include files will be installed in
-@file{@var{libsubdir}/include/g++} unless you overruled it by using
-@option{--with-gxx-include-dir=@var{dirname}}. Using this option is
-particularly useful if you intend to use several versions of GCC in
-parallel. This is currently supported by @samp{libf2c} and
-@samp{libstdc++}, and is the default for @samp{libobjc} which cannot be
-changed in this case.
-
-@item --enable-languages=@var{lang1},@var{lang2},@dots{}
-Specify that only a particular subset of compilers and
-their runtime libraries should be built. For a list of valid values for
-@var{langN} you can issue the following command in the
-@file{gcc} directory of your GCC source tree:@*
-@example
-grep language= */config-lang.in
-@end example
-Currently, you can use any of the following:
-@code{ada}, @code{c}, @code{c++}, @code{f77}, @code{java}, @code{objc}.
-Building the Ada compiler has special requirements, see below.@*
-If you do not pass this flag, all languages available in the @file{gcc}
-sub-tree will be configured. Re-defining @code{LANGUAGES} when calling
-@samp{make bootstrap} @strong{does not} work anymore, as those
-language sub-directories might not have been configured!
-
-@item --disable-libgcj
-Specify that the run-time libraries
-used by GCJ should not be built. This is useful in case you intend
-to use GCJ with some other run-time, or you're going to install it
-separately, or it just happens not to build on your particular
-machine. In general, if the Java front end is enabled, the GCJ
-libraries will be enabled too, unless they're known to not work on
-the target platform. If GCJ is enabled but @samp{libgcj} isn't built, you
-may need to port it; in this case, before modifying the top-level
-@file{configure.in} so that @samp{libgcj} is enabled by default on this platform,
-you may use @option{--enable-libgcj} to override the default.
-
-@item --with-dwarf2
-Specify that the compiler should
-use DWARF 2 debugging information as the default.
-
-@item --enable-win32-registry
-@itemx --enable-win32-registry=@var{key}
-@itemx --disable-win32-registry
-The @option{--enable-win32-registry} option enables Windows-hosted GCC
-to look up installations paths in the registry using the following key:
-
-@smallexample
-@code{HKEY_LOCAL_MACHINE\SOFTWARE\Free Software Foundation\@var{key}}
-@end smallexample
-
-@var{key} defaults to GCC version number, and can be overridden by the
-@option{--enable-win32-registry=@var{key}} option. Vendors and distributors
-who use custom installers are encouraged to provide a different key,
-perhaps one comprised of vendor name and GCC version number, to
-avoid conflict with existing installations. This feature is enabled
-by default, and can be disabled by @option{--disable-win32-registry}
-option. This option has no effect on the other hosts.
-
-@item --nfp
-Specify that the machine does not have a floating point unit. This
-option only applies to @samp{m68k-sun-sunos@var{n}} and
-@samp{m68k-isi-bsd}. On any other system, @option{--nfp} has no effect.
-
-@item --enable-checking
-@itemx --enable-checking=@var{list}
-When you specify this option, the compiler is built to perform checking
-of tree node types when referencing fields of that node, and some other
-internal consistency checks. This does not change the generated code,
-but adds error checking within the compiler. This will slow down the
-compiler and may only work properly if you are building the compiler
-with GCC@. This is on by default when building from CVS or snapshots,
-but off for releases. More control over the checks may be had by
-specifying @var{list}; the categories of checks available are
-@samp{misc}, @samp{tree}, @samp{gc}, @samp{rtl} and @samp{gcac}. The
-default when @var{list} is not specified is @samp{misc,tree,gc}; the
-checks @samp{rtl} and @samp{gcac} are very expensive.
-
-@item --enable-nls
-@itemx --disable-nls
-The @option{--enable-nls} option enables Native Language Support (NLS),
-which lets GCC output diagnostics in languages other than American
-English. Native Language Support is enabled by default if not doing a
-canadian cross build. The @option{--disable-nls} option disables NLS@.
-
-@item --with-included-gettext
-If NLS is enabled, the @option{--with-included-gettext} option causes the build
-procedure to prefer its copy of GNU @command{gettext}.
-
-@item --with-catgets
-If NLS is enabled, and if the host lacks @code{gettext} but has the
-inferior @code{catgets} interface, the GCC build procedure normally
-ignores @code{catgets} and instead uses GCC's copy of the GNU
-@code{gettext} library. The @option{--with-catgets} option causes the
-build procedure to use the host's @code{catgets} in this situation.
-
-@item --with-libiconv-prefix=@var{dir}
-Search for libiconv header files in @file{@var{dir}/include} and
-libiconv library files in @file{@var{dir}/lib}.
-
-@item --with-system-zlib
-Use installed zlib rather than that included with GCC@. This option
-only applies if the Java front end is being built.
-
-@item --enable-obsolete
-Enable configuration for an obsoleted system. If you attempt to
-configure GCC for a system (build, host, or target) which has been
-obsoleted, and you do not specify this flag, configure will halt with an
-error message.
-
-All support for systems which have been obsoleted in one release of GCC
-is removed entirely in the next major release, unless someone steps
-forward to maintain the port.
-@end table
-
-Some options which only apply to building cross compilers:
-@table @code
-@item --with-headers=@var{dir}
-Specifies a directory
-which has target include files.
-@emph{This options is required} when building a cross
-compiler, if @file{@var{prefix}/@var{target}/sys-include} doesn't pre-exist.
-These include files will be copied into the @file{gcc} install directory.
-Fixincludes will be run on these files to make them compatible with
-GCC.
-@item --with-libs=``@var{dir1} @var{dir2} @dots{} @var{dirN}''
-Specifies a list of directories which contain the target runtime
-libraries. These libraries will be copied into the @file{gcc} install
-directory.
-@item --with-newlib
-Specifies that @samp{newlib} is
-being used as the target C library. This causes @code{__eprintf} to be
-omitted from @file{libgcc.a} on the assumption that it will be provided by
-@samp{newlib}.
-@end table
-
-Note that each @option{--enable} option has a corresponding
-@option{--disable} option and that each @option{--with} option has a
-corresponding @option{--without} option.
-
-@html
-<hr>
-<p>
-@end html
-@ifhtml
-@uref{./index.html,,Return to the GCC Installation page}
-@end ifhtml
-@end ifset
-
-@c ***Building****************************************************************
-@ifnothtml
-@comment node-name, next, previous, up
-@node Building, Testing, Configuration, Installing GCC
-@end ifnothtml
-@ifset buildhtml
-@html
-<h1 align="center">Installing GCC: Building</h1>
-@end html
-@ifnothtml
-@chapter Building
-@end ifnothtml
-@cindex Installing GCC: Building
-
-Now that GCC is configured, you are ready to build the compiler and
-runtime libraries.
-
-We @strong{highly} recommend that GCC be built using GNU make;
-other versions may work, then again they might not.
-GNU make is required for compiling GNAT (the Ada compiler) and the Java
-runtime library.
-
-(For example, many broken versions of make will fail if you use the
-recommended setup where @var{objdir} is different from @var{srcdir}.
-Other broken versions may recompile parts of the compiler when
-installing the compiler.)
-
-Some commands executed when making the compiler may fail (return a
-nonzero status) and be ignored by @code{make}. These failures, which
-are often due to files that were not found, are expected, and can safely
-be ignored.
-
-It is normal to have compiler warnings when compiling certain files.
-Unless you are a GCC developer, you can generally ignore these warnings
-unless they cause compilation to fail.
-
-On certain old systems, defining certain environment variables such as
-@env{CC} can interfere with the functioning of @command{make}.
-
-If you encounter seemingly strange errors when trying to build the
-compiler in a directory other than the source directory, it could be
-because you have previously configured the compiler in the source
-directory. Make sure you have done all the necessary preparations.
-
-If you build GCC on a BSD system using a directory stored in an old System
-V file system, problems may occur in running @code{fixincludes} if the
-System V file system doesn't support symbolic links. These problems
-result in a failure to fix the declaration of @code{size_t} in
-@file{sys/types.h}. If you find that @code{size_t} is a signed type and
-that type mismatches occur, this could be the cause.
-
-The solution is not to use such a directory for building GCC@.
-
-When building from CVS or snapshots, or if you modify parser sources,
-you need the Bison parser generator installed. Any version 1.25 or
-later should work; older versions may also work. If you do not modify
-parser sources, releases contain the Bison-generated files and you do
-not need Bison installed to build them.
-
-When building from CVS or snapshots, or if you modify Texinfo
-documentation, you need version 4.1 or later of Texinfo installed if you
-want Info documentation to be regenerated. Releases contain Info
-documentation pre-built for the unmodified documentation in the release.
-
-@section Building a native compiler
-
-For a native build issue the command @samp{make bootstrap}. This
-will build the entire GCC system, which includes the following steps:
-
-@itemize @bullet
-@item
-Build host tools necessary to build the compiler such as texinfo, bison,
-gperf.
-
-@item
-Build target tools for use by the compiler such as binutils (bfd,
-binutils, gas, gprof, ld, and opcodes)
-if they have been individually linked
-or moved into the top level GCC source tree before configuring.
-
-@item
-Perform a 3-stage bootstrap of the compiler.
-
-@item
-Perform a comparison test of the stage2 and stage3 compilers.
-
-@item
-Build runtime libraries using the stage3 compiler from the previous step.
-
-@end itemize
-
-If you are short on disk space you might consider @samp{make
-bootstrap-lean} instead. This is identical to @samp{make
-bootstrap} except that object files from the stage1 and
-stage2 of the 3-stage bootstrap of the compiler are deleted as
-soon as they are no longer needed.
-
-
-If you want to save additional space during the bootstrap and in
-the final installation as well, you can build the compiler binaries
-without debugging information with @samp{make CFLAGS='-O' LIBCFLAGS='-g
--O2' LIBCXXFLAGS='-g -O2 -fno-implicit-templates' bootstrap}. This will save
-roughly 40% of disk space both for the bootstrap and the final installation.
-(Libraries will still contain debugging information.)
-
-If you wish to use non-default GCC flags when compiling the stage2 and
-stage3 compilers, set @code{BOOT_CFLAGS} on the command line when doing
-@samp{make bootstrap}. Non-default optimization flags are less well
-tested here than the default of @samp{-g -O2}, but should still work.
-In a few cases, you may find that you need to specify special flags such
-as @option{-msoft-float} here to complete the bootstrap; or, if the
-native compiler miscompiles the stage1 compiler, you may need to work
-around this, by choosing @code{BOOT_CFLAGS} to avoid the parts of the
-stage1 compiler that were miscompiled, or by using @samp{make
-bootstrap4} to increase the number of stages of bootstrap.
-
-If you used the flag @option{--enable-languages=@dots{}} to restrict
-the compilers to be built, only those you've actually enabled will be
-built. This will of course only build those runtime libraries, for
-which the particular compiler has been built. Please note,
-that re-defining @env{LANGUAGES} when calling @samp{make bootstrap}
-@strong{does not} work anymore!
-
-If the comparison of stage2 and stage3 fails, this normally indicates
-that the stage2 compiler has compiled GCC incorrectly, and is therefore
-a potentially serious bug which you should investigate and report. (On
-a few systems, meaningful comparison of object files is impossible; they
-always appear ``different''. If you encounter this problem, you will
-need to disable comparison in the @file{Makefile}.)
-
-@section Building a cross compiler
-
-We recommend reading the
-@uref{http://www.objsw.com/CrossGCC/,,crossgcc FAQ}
-for information about building cross compilers.
-
-When building a cross compiler, it is not generally possible to do a
-3-stage bootstrap of the compiler. This makes for an interesting problem
-as parts of GCC can only be built with GCC@.
-
-To build a cross compiler, we first recommend building and installing a
-native compiler. You can then use the native GCC compiler to build the
-cross compiler. The installed native compiler needs to be GCC version
-2.95 or later.
-
-Assuming you have already installed a native copy of GCC and configured
-your cross compiler, issue the command @command{make}, which performs the
-following steps:
-
-@itemize @bullet
-@item
-Build host tools necessary to build the compiler such as texinfo, bison,
-gperf.
-
-@item
-Build target tools for use by the compiler such as binutils (bfd,
-binutils, gas, gprof, ld, and opcodes)
-if they have been individually linked or moved into the top level GCC source
-tree before configuring.
-
-@item
-Build the compiler (single stage only).
-
-@item
-Build runtime libraries using the compiler from the previous step.
-@end itemize
-
-Note that if an error occurs in any step the make process will exit.
-
-@section Building in parallel
-
-If you have a multiprocessor system you can use @samp{make bootstrap
-MAKE="make -j 2" -j 2} or just @samp{make -j 2 bootstrap}
-for GNU Make 3.79 and above instead of just @samp{make bootstrap}
-when building GCC@. You can use a bigger number instead of two if
-you like. In most cases, it won't help to use a number bigger than
-the number of processors in your machine.
-
-@section Building the Ada compiler
-
-In order to build GNAT, the Ada compiler, you need a working GNAT
-compiler (GNAT version 3.13 or later, or GCC version 3.1 or later),
-since the Ada front end is written in Ada (with some
-GNAT-specific extensions), and GNU make.
-
-However, you do not need a full installation of GNAT, just the GNAT
-binary @file{gnat1}, a copy of @file{gnatbind}, and a compiler driver
-which can deal with Ada input (by invoking the @file{gnat1} binary).
-You can specify this compiler driver by setting the @env{ADAC}
-environment variable at the configure step. @command{configure} can
-detect the driver automatically if it has got a common name such as
-@command{gcc} or @command{gnatgcc}. Of course, you still need a working
-C compiler (the compiler driver can be different or not).
-@command{configure} does not test whether the GNAT installation works
-and has a sufficiently recent version; if too old a GNAT version is
-installed, the build will fail unless @option{--enable-languages} is
-used to disable building the Ada front end.
-
-Additional build tools (such as @command{gnatmake}) or a working GNAT
-run-time library installation are usually @emph{not} required. However,
-if you want to boostrap the compiler using a minimal version of GNAT,
-you have to issue the following commands before invoking @samp{make
-boostrap} (this assumes that you start with an unmodified and consistent
-source distribution):
-
-@example
- cd @var{srcdir}/gcc/ada
- touch treeprs.ads [es]info.h nmake.ad[bs]
-@end example
-
-At the moment, the GNAT library and several tools for GNAT are not built
-by @samp{make bootstrap}. You have to invoke
-@samp{make gnatlib_and_tools} in the @file{@var{objdir}/gcc}
-subdirectory before proceeding with the next steps.
-
-For example, you can build a native Ada compiler by issuing the
-following commands (assuming @command{make} is GNU make):
-
-@example
- cd @var{objdir}
- @var{srcdir}/configure --enable-languages=c,ada
- cd @var{srcdir}/gcc/ada
- touch treeprs.ads [es]info.h nmake.ad[bs]
- cd @var{objdir}
- make bootstrap
- cd gcc
- make gnatlib_and_tools
- cd ..
-@end example
-
-Currently, when compiling the Ada front end, you cannot use the parallel
-build feature described in the previous section.
-
-@html
-<hr>
-<p>
-@end html
-@ifhtml
-@uref{./index.html,,Return to the GCC Installation page}
-@end ifhtml
-@end ifset
-
-@c ***Testing*****************************************************************
-@ifnothtml
-@comment node-name, next, previous, up
-@node Testing, Final install, Building, Installing GCC
-@end ifnothtml
-@ifset testhtml
-@html
-<h1 align="center">Installing GCC: Testing</h1>
-@end html
-@ifnothtml
-@chapter Installing GCC: Testing
-@end ifnothtml
-@cindex Testing
-@cindex Installing GCC: Testing
-@cindex Testsuite
-
-Before you install GCC, we encourage you to run the testsuites and to
-compare your results with results from a similar configuration that have
-been submitted to the
-@uref{http://gcc.gnu.org/ml/gcc-testresults/,,gcc-testresults mailing list}.
-This step is optional and may require you to download additional software,
-but it can give you confidence in your new GCC installation or point out
-problems before you install and start using your new GCC.
-
-First, you must have @uref{download.html,,downloaded the testsuites}.
-These are part of the full distribution, but if you downloaded the
-``core'' compiler plus any front ends, you must download the testsuites
-separately.
-
-Second, you must have the testing tools installed. This includes
-a @uref{http://www.gnu.org/software/dejagnu/,,current version of DejaGnu};
-dejagnu 1.3 is not sufficient.
-It also includes Tcl and Expect; the DejaGnu site has links to these.
-
-Now you may need specific preparations:
-
-@itemize @bullet
-
-@item
-The following environment variables may need to be set appropriately, as in
-the following example (which assumes that DejaGnu has been installed
-under @file{/usr/local}):
-
-@example
- TCL_LIBRARY = /usr/local/share/tcl8.0
- DEJAGNULIBS = /usr/local/share/dejagnu
-@end example
-
-On systems such as Cygwin, these paths are required to be actual
-paths, not mounts or links; presumably this is due to some lack of
-portability in the DejaGnu code.
-
-If the directories where @command{runtest} and @command{expect} were
-installed are in the @env{PATH}, it should not be necessary to set these
-environment variables.
-
-@end itemize
-
-Finally, you can run the testsuite (which may take a long time):
-@example
- cd @var{objdir}; make -k check
-@end example
-
-The testing process will try to test as many components in the GCC
-distribution as possible, including the C, C++, Objective-C and Fortran
-compilers as well as the C++ and Java runtime libraries.
-
-@section How can I run the test suite on selected tests?
-
-As a first possibility to cut down the number of tests that are run it is
-possible to use @samp{make check-gcc} or @samp{make check-g++}
-in the @file{gcc} subdirectory of the object directory. To further cut down the
-tests the following is possible:
-
-@example
- make check-gcc RUNTESTFLAGS="execute.exp @var{other-options}"
-@end example
-
-This will run all @command{gcc} execute tests in the testsuite.
-
-@example
- make check-g++ RUNTESTFLAGS="old-deja.exp=9805* @var{other-options}"
-@end example
-
-This will run the @command{g++} ``old-deja'' tests in the testsuite where the filename
-matches @samp{9805*}.
-
-The @file{*.exp} files are located in the testsuite directories of the GCC
-source, the most important ones being @file{compile.exp},
-@file{execute.exp}, @file{dg.exp} and @file{old-deja.exp}.
-To get a list of the possible @file{*.exp} files, pipe the
-output of @samp{make check} into a file and look at the
-@samp{Running @dots{} .exp} lines.
-
-@section How to interpret test results
-
-After the testsuite has run you'll find various @file{*.sum} and @file{*.log}
-files in the testsuite subdirectories. The @file{*.log} files contain a
-detailed log of the compiler invocations and the corresponding
-results, the @file{*.sum} files summarize the results. These summaries list
-all the tests that have been run with a corresponding status code:
-
-@itemize @bullet
-@item
-PASS: the test passed as expected
-@item
-XPASS: the test unexpectedly passed
-@item
-FAIL: the test unexpectedly failed
-@item
-XFAIL: the test failed as expected
-@item
-UNSUPPORTED: the test is not supported on this platform
-@item
-ERROR: the testsuite detected an error
-@item
-WARNING: the testsuite detected a possible problem
-@end itemize
-
-It is normal for some tests to report unexpected failures. At the
-current time our testing harness does not allow fine grained control
-over whether or not a test is expected to fail. We expect to fix this
-problem in future releases.
-
-
-@section Submitting test results
-
-If you want to report the results to the GCC project, use the
-@file{contrib/test_summary} shell script. Start it in the @var{objdir} with
-
-@example
- @var{srcdir}/contrib/test_summary -p your_commentary.txt \
- -m gcc-testresults@@gcc.gnu.org |sh
-@end example
-
-This script uses the @command{Mail} program to send the results, so
-make sure it is in your @env{PATH}. The file @file{your_commentary.txt} is
-prepended to the testsuite summary and should contain any special
-remarks you have on your results or your build environment. Please
-do not edit the testsuite result block or the subject line, as these
-messages are automatically parsed and presented at the
-@uref{http://gcc.gnu.org/testresults/,,GCC testresults} web
-page. Here you can also gather information on how specific tests
-behave on different platforms and compare them with your results. A
-few failing testcases are possible even on released versions and you
-should look here first if you think your results are unreasonable.
-
-@html
-<hr>
-<p>
-@end html
-@ifhtml
-@uref{./index.html,,Return to the GCC Installation page}
-@end ifhtml
-@end ifset
-
-@c ***Final install***********************************************************
-@ifnothtml
-@comment node-name, next, previous, up
-@node Final install, , Testing, Installing GCC
-@end ifnothtml
-@ifset finalinstallhtml
-@html
-<h1 align="center">Installing GCC: Final installation</h1>
-@end html
-@ifnothtml
-@chapter Installing GCC: Final installation
-@end ifnothtml
-
-Now that GCC has been built (and optionally tested), you can install it with
-@example
-cd @var{objdir}; make install
-@end example
-
-That step completes the installation of GCC; user level binaries can
-be found in @file{@var{prefix}/bin} where @var{prefix} is the value you
-specified with the @option{--prefix} to configure (or @file{/usr/local}
-by default). (If you specified @option{--bindir}, that directory will
-be used instead; otherwise, if you specified @option{--exec-prefix},
-@file{@var{exec-prefix}/bin} will be used.) Headers for the C++ and
-Java libraries are installed in @file{@var{prefix}/include}; libraries
-in @file{@var{libdir}} (normally @file{@var{prefix}/lib}); internal
-parts of the compiler in @file{@var{libdir}/gcc-lib}; documentation in
-info format in @file{@var{infodir}} (normally @file{@var{prefix}/info}).
-
-If you built a released version of GCC using @samp{make bootstrap} then please
-quickly review the build status page for
-@uref{http://gcc.gnu.org/gcc-3.1/buildstat.html,,3.1},
-@uref{http://gcc.gnu.org/gcc-3.0/buildstat.html,,3.0}, or
-@uref{http://gcc.gnu.org/gcc-2.95/buildstat.html,,2.95}.
-If your system is not listed for the version of GCC that you built,
-send a note to
-@email{gcc@@gcc.gnu.org} indicating
-that you successfully built and installed GCC.
-Include the following information:
-
-@itemize @bullet
-@item
-Output from running @file{@var{srcdir}/config.guess}. Do not send us
-that file itself, just the one-line output from running it.
-
-@item
-The output of @samp{gcc -v} for your newly installed gcc.
-This tells us which version of GCC you built and the options you passed to
-configure.
-
-@item
-Whether you enabled all languages or a subset of them. If you used a
-full distribution then this information is part of the configure
-options in the output of @samp{gcc -v}, but if you downloaded the
-``core'' compiler plus additional front ends then it isn't apparent
-which ones you built unless you tell us about it.
-
-@item
-If the build was for GNU/Linux, also include:
-@itemize @bullet
-@item
-The distribution name and version (e.g., Red Hat 7.1 or Debian 2.2.3);
-this information should be available from @file{/etc/issue}.
-
-@item
-The version of the Linux kernel, available from @samp{uname --version}
-or @samp{uname -a}.
-
-@item
-The version of glibc you used; for RPM-based systems like Red Hat,
-Mandrake, and SuSE type @samp{rpm -q glibc} to get the glibc version,
-and on systems like Debian and Progeny use @samp{dpkg -l libc6}.
-@end itemize
-For other systems, you can include similar information if you think it is
-relevant.
-
-@item
-Any other information that you think would be useful to people building
-GCC on the same configuration. The new entry in the build status list
-will include a link to the archived copy of your message.
-@end itemize
-
-We'd also like to know if the
-@ifnothtml
-@ref{Specific, host/target specific installation notes}
-@end ifnothtml
-@ifhtml
-@uref{specific.html,,host/target specific installation notes}
-@end ifhtml
-didn't include your host/target information or if that information is
-incomplete or out of date. Send a note to
-@email{gcc@@gcc.gnu.org} telling us how the information should be changed.
-
-If you find a bug, please report it following our
-@uref{../bugs.html,,bug reporting guidelines}.
-
-If you want to print the GCC manuals, do @samp{cd @var{objdir}; make
-dvi}. You will need to have @command{texi2dvi} (version at least 4.1)
-and @TeX{} installed. This creates a number of @file{.dvi} files in
-subdirectories of @file{@var{objdir}}; these may be converted for
-printing with programs such as @command{dvips}. You can also
-@uref{http://www.gnu.org/order/order.html,,buy printed manuals from the
-Free Software Foundation}, though such manuals may not be for the most
-recent version of GCC@.
-
-@html
-<hr>
-<p>
-@end html
-@ifhtml
-@uref{./index.html,,Return to the GCC Installation page}
-@end ifhtml
-@end ifset
-
-@c ***Binaries****************************************************************
-@ifnothtml
-@comment node-name, next, previous, up
-@node Binaries, Specific, Installing GCC, Top
-@end ifnothtml
-@ifset binarieshtml
-@html
-<h1 align="center">Installing GCC: Binaries</h1>
-@end html
-@ifnothtml
-@chapter Installing GCC: Binaries
-@end ifnothtml
-@cindex Binaries
-@cindex Installing GCC: Binaries
-
-We are often asked about pre-compiled versions of GCC@. While we cannot
-provide these for all platforms, below you'll find links to binaries for
-various platforms where creating them by yourself is not easy due to various
-reasons.
-
-Please note that we did not create these binaries, nor do we
-support them. If you have any problems installing them, please
-contact their makers.
-
-@itemize
-@item
-AIX:
-@itemize
-@item
-@uref{http://freeware.bull.net,,Bull's Freeware and Shareware Archive for AIX};
-
-@item
-@uref{http://aixpdslib.seas.ucla.edu,,UCLA Software Library for AIX};
-@end itemize
-
-@item
-DOS---@uref{http://www.delorie.com/djgpp/,,DJGPP};
-
-@item
-HP-UX:
-@itemize
-@item
-@uref{http://hpux.cae.wisc.edu/,,HP-UX Porting Center};
-
-@item
-@uref{ftp://sunsite.informatik.rwth-aachen.de/pub/packages/gcc_hpux/,,Binaries for HP-UX 11.00 at Aachen University of Technology}.
-@end itemize
-
-@item
-@uref{http://www.sco.com/skunkware/devtools/index.html#gcc,,SCO
-OpenServer/Unixware};
-
-@item
-Solaris 2 (SPARC, Intel)---@uref{http://www.sunfreeware.com/,,Sunfreeware};
-
-@item
-SGI---@uref{http://freeware.sgi.com/,,SGI Freeware};
-
-@item
-Windows 95, 98, and NT:
-@itemize
-@item
-The @uref{http://sources.redhat.com/cygwin/,,Cygwin} project;
-@item
-@uref{http://www.xraylith.wisc.edu/~khan/software/gnu-win32/,,GNU Win32}
-related projects by Mumit Khan.
-@end itemize
-
-@item
-@uref{ftp://ftp.thewrittenword.com/packages/free/by-name/,,The
-Written Word} offers binaries for Solaris 2.5.1, 2.6, 2.7/SPARC, 2.7/Intel,
-IRIX 6.2, 6.5, Digital UNIX 4.0D, HP-UX 10.20, and HP-UX 11.00.
-
-@item
-Hitachi H8/300[HS]---@uref{http://h8300-hms.sourceforge.net/,,GNU
-Development Tools for the Hitachi H8/300[HS] Series}
-
-@end itemize
-
-In addition to those specific offerings, you can get a binary
-distribution CD-ROM from the
-@uref{http://www.fsf.org/order/order.html,,Free Software Foundation}.
-It contains binaries for a number of platforms, and
-includes not only GCC, but other stuff as well. The current CD does
-not contain the latest version of GCC, but it should allow
-bootstrapping the compiler. An updated version of that disk is in the
-works.
-
-@html
-<hr>
-<p>
-@end html
-@ifhtml
-@uref{./index.html,,Return to the GCC Installation page}
-@end ifhtml
-@end ifset
-
-@c ***Specific****************************************************************
-@ifnothtml
-@comment node-name, next, previous, up
-@node Specific, Old, Binaries, Top
-@end ifnothtml
-@ifset specifichtml
-@html
-<h1 align="center">Host/target specific installation notes for GCC</h1>
-@end html
-@ifnothtml
-@chapter Host/target specific installation notes for GCC
-@end ifnothtml
-@cindex Specific
-@cindex Specific installation notes
-@cindex Target specific installation
-@cindex Host specific installation
-@cindex Target specific installation notes
-
-Please read this document carefully @emph{before} installing the
-GNU Compiler Collection on your machine.
-
-@ifhtml
-@itemize
-@item
-@uref{#1750a-*-*,,1750a-*-*}
-@item
-@uref{#a29k,,a29k}
-@item
-@uref{#a29k-*-bsd,,a29k-*-bsd}
-@item
-@uref{#alpha*-*-*,,alpha*-*-*}
-@item
-@uref{#alpha*-dec-osf*,,alpha*-dec-osf*}
-@item
-@uref{#alphaev5-cray-unicosmk*,,alphaev5-cray-unicosmk*}
-@item
-@uref{#arc-*-elf,,arc-*-elf}
-@item
-@uref{#arm-*-aout,,arm-*-aout}
-@item
-@uref{#arm-*-elf,,arm-*-elf}
-@item
-@uref{#arm*-*-linux-gnu,,arm*-*-linux-gnu}
-@item
-@uref{#arm-*-riscix,,arm-*-riscix}
-@item
-@uref{#avr,,avr}
-@item
-@uref{#c4x,,c4x}
-@item
-@uref{#dos,,DOS}
-@item
-@uref{#dsp16xx,,dsp16xx}
-@item
-@uref{#elxsi-elxsi-bsd,,elxsi-elxsi-bsd}
-@item
-@uref{#*-*-freebsd*,,*-*-freebsd*}
-@item
-@uref{#h8300-hms,,h8300-hms}
-@item
-@uref{#hppa*-hp-hpux*,,hppa*-hp-hpux*}
-@item
-@uref{#hppa*-hp-hpux9,,hppa*-hp-hpux9}
-@item
-@uref{#hppa*-hp-hpux10,,hppa*-hp-hpux10}
-@item
-@uref{#hppa*-hp-hpux11,,hppa*-hp-hpux11}
-@item
-@uref{#i370-*-*,,i370-*-*}
-@item
-@uref{#*-*-linux-gnu,,*-*-linux-gnu}
-@item
-@uref{#ix86-*-linux*oldld,,i?86-*-linux*oldld}
-@item
-@uref{#ix86-*-linux*aout,,i?86-*-linux*aout}
-@item
-@uref{#ix86-*-linux*,,i?86-*-linux*}
-@item
-@uref{#ix86-*-sco,,i?86-*-sco}
-@item
-@uref{#ix86-*-sco3.2v4,,i?86-*-sco3.2v4}
-@item
-@uref{#ix86-*-sco3.2v5*,,i?86-*-sco3.2v5*}
-@item
-@uref{#ix86-*-udk,,i?86-*-udk}
-@item
-@uref{#ix86-*-isc,,i?86-*-isc}
-@item
-@uref{#ix86-*-esix,,i?86-*-esix}
-@item
-@uref{#ix86-ibm-aix,,i?86-ibm-aix}
-@item
-@uref{#ix86-sequent-bsd,,i?86-sequent-bsd}
-@item
-@uref{#ix86-sequent-ptx1*,,i?86-sequent-ptx1*, i?86-sequent-ptx2*, i?86-sequent-sysv3*}
-@item
-@uref{#i860-intel-osf*,,i860-intel-osf*}
-@item
-@uref{#ia64-*-linux,,ia64-*-linux}
-@item
-@uref{#*-lynx-lynxos,,*-lynx-lynxos}
-@item
-@uref{#*-ibm-aix*,,*-ibm-aix*}
-@item
-@uref{#m32r-*-elf,,m32r-*-elf}
-@item
-@uref{#m68000-hp-bsd,,m68000-hp-bsd}
-@item
-@uref{#m6811-elf,,m6811-elf}
-@item
-@uref{#m6812-elf,,m6812-elf}
-@item
-@uref{#m68k-altos,,m68k-altos}
-@item
-@uref{#m68k-apple-aux,,m68k-apple-aux}
-@item
-@uref{#m68k-att-sysv,,m68k-att-sysv}
-@item
-@uref{#m68k-bull-sysv,,m68k-bull-sysv}
-@item
-@uref{#m68k-crds-unos,,m68k-crds-unos}
-@item
-@uref{#m68k-hp-hpux,,m68k-hp-hpux}
-@item
-@uref{#m68k-*-nextstep*,,m68k-*-nextstep*}
-@item
-@uref{#m68k-ncr-*,,m68k-ncr-*}
-@item
-@uref{#m68k-sun,,m68k-sun}
-@item
-@uref{#m68k-sun-sunos4.1.1,,m68k-sun-sunos4.1.1}
-@item
-@uref{#m88k-*-svr3,,m88k-*-svr3}
-@item
-@uref{#m88k-*-dgux,,m88k-*-dgux}
-@item
-@uref{#m88k-tektronix-sysv3,,m88k-tektronix-sysv3}
-@item
-@uref{#mips-*-*,,mips-*-*}
-@item
-@uref{#mips-dec-*,,mips-dec-*}
-@item
-@uref{#mips-mips-bsd,,mips-mips-bsd}
-@item
-@uref{#mips-mips-riscos*,,mips-mips-riscos*}
-@item
-@uref{#mips-sgi-irix4,,mips-sgi-irix4}
-@item
-@uref{#mips-sgi-irix5,,mips-sgi-irix5}
-@item
-@uref{#mips-sgi-irix6,,mips-sgi-irix6}
-@item
-@uref{#mips-sony-sysv,,mips-sony-sysv}
-@item
-@uref{#ns32k-encore,,ns32k-encore}
-@item
-@uref{#ns32k-*-genix,,ns32k-*-genix}
-@item
-@uref{#ns32k-sequent,,ns32k-sequent}
-@item
-@uref{#ns32k-utek,,ns32k-utek}
-@item
-@uref{#powerpc*-*-*,,powerpc*-*-*, powerpc-*-sysv4}
-@item
-@uref{#powerpc-*-darwin*,,powerpc-*-darwin*}
-@item
-@uref{#powerpc-*-elf,,powerpc-*-elf, powerpc-*-sysv4}
-@item
-@uref{#powerpc-*-linux-gnu*,,powerpc-*-linux-gnu*}
-@item
-@uref{#powerpc-*-netbsd*,,powerpc-*-netbsd*}
-@item
-@uref{#powerpc-*-eabiaix,,powerpc-*-eabiaix}
-@item
-@uref{#powerpc-*-eabisim,,powerpc-*-eabisim}
-@item
-@uref{#powerpc-*-eabi,,powerpc-*-eabi}
-@item
-@uref{#powerpcle-*-elf,,powerpcle-*-elf, powerpcle-*-sysv4}
-@item
-@uref{#powerpcle-*-eabisim,,powerpcle-*-eabisim}
-@item
-@uref{#powerpcle-*-eabi,,powerpcle-*-eabi}
-@item
-@uref{#powerpcle-*-winnt,,powerpcle-*-winnt, powerpcle-*-pe}
-@item
-@uref{#romp-*-aos,,romp-*-aos, romp-*-mach}
-@item
-@uref{#s390-*-linux*}
-@item
-@uref{#s390x-*-linux*}
-@item
-@uref{#*-*-solaris2*,,*-*-solaris2*}
-@item
-@uref{#sparc-sun-solaris2*,,sparc-sun-solaris2*}
-@item
-@uref{#sparc-sun-solaris2.7,,sparc-sun-solaris2.7}
-@item
-@uref{#sparc-sun-sunos4*,,sparc-sun-sunos4*}
-@item
-@uref{#sparc-unknown-linux-gnulibc1,,sparc-unknown-linux-gnulibc1}
-@item
-@uref{#sparc-*-linux*,,sparc-*-linux*}
-@item
-@uref{#sparc64-*-*,,sparc64-*-*}
-@item
-@uref{#sparcv9-*-solaris2*,,sparcv9-*-solaris2*}
-@item
-@uref{#*-*-sysv*,,*-*-sysv*}
-@item
-@uref{#vax-dec-ultrix,,vax-dec-ultrix}
-@item
-@uref{#we32k-*-*,,we32k-*-*}
-@item
-@uref{#xtensa-*-elf,,xtensa-*-elf}
-@item
-@uref{#xtensa-*-linux*,,xtensa-*-linux*}
-@item
-@uref{#windows,,Microsoft Windows}
-@item
-@uref{#os2,,OS/2}
-@item
-@uref{#older,,Older systems}
-@end itemize
-
-@itemize
-@item
-@uref{#elf_targets,,all ELF targets} (SVR4, Solaris 2, etc.)
-@end itemize
-@end ifhtml
-
-
-@html
-<!-- -------- host/target specific issues start here ---------------- -->
-<hr>
-@end html
-@heading @anchor{1750a-*-*}1750a-*-*
-MIL-STD-1750A processors. This target is obsoleted in GCC 3.1.
-
-The MIL-STD-1750A cross configuration produces output for
-@code{as1750}, an assembler/linker available under the GNU General Public
-License for the 1750A@. @code{as1750} can be obtained at
-@uref{ftp://ftp.fta-berlin.de/pub/crossgcc/1750gals/}.
-A similarly licensed simulator for
-the 1750A is available from same address.
-
-You should ignore a fatal error during the building of @samp{libgcc}
-(@samp{libgcc} is not yet implemented for the 1750A@.)
-
-The @code{as1750} assembler requires the file @file{ms1750.inc}, which is
-found in the directory @file{gcc/config/1750a}.
-
-GCC produced the same sections as the Fairchild F9450 C Compiler,
-namely:
-
-@table @code
-@item Normal
-The program code section.
-
-@item Static
-The read/write (RAM) data section.
-
-@item Konst
-The read-only (ROM) constants section.
-
-@item Init
-Initialization section (code to copy KREL to SREL)@.
-@end table
-
-The smallest addressable unit is 16 bits (@code{BITS_PER_UNIT} is 16). This
-means that type @code{char} is represented with a 16-bit word per character.
-The 1750A's ``Load/Store Upper/Lower Byte'' instructions are not used by
-GCC@.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{a29k}a29k
-AMD Am29k-family processors. These are normally used in embedded
-applications. This configuration corresponds to AMD's standard calling
-sequence and binary interface and is compatible with other 29k tools.
-
-AMD has abandoned this processor. All existing a29k targets are obsoleted
-in GCC 3.1.
-
-You may need to make a variant of the file @file{a29k.h} for your
-particular configuration.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{a29k-*-bsd}a29k-*-bsd
-AMD Am29050 used in a system running a variant of BSD Unix.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{alpha*-*-*}alpha*-*-*
-
-This section contains general configuration information for all
-alpha-based platforms using ELF (in particular, ignore this section for
-DEC OSF/1, Digital UNIX and Tru64 UNIX)@. In addition to reading this
-section, please read all other sections that match your target.
-
-We require binutils 2.11.2 or newer.
-Previous binutils releases had a number of problems with DWARF 2
-debugging information, not the least of which is incorrect linking of
-shared libraries.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{alpha*-dec-osf*}alpha*-dec-osf*
-Systems using processors that implement the DEC Alpha architecture and
-are running the DEC/Compaq Unix (DEC OSF/1, Digital UNIX, or Compaq
-Tru64 UNIX) operating system, for example the DEC Alpha AXP systems.
-
-Support for versions before @code{alpha*-dec-osf4} is obsoleted in GCC
-3.1. (These are the versions which identify themselves as DEC OSF/1.)
-
-In Tru64 UNIX V5.1, Compaq introduced a new assembler that does not
-currently (2001-06-13) work with @command{mips-tfile}. As a workaround,
-we need to use the old assembler, invoked via the barely documented
-@option{-oldas} option. To bootstrap GCC, you either need to use the
-Compaq C Compiler:
-
-@example
- % CC=cc @var{srcdir}/configure [@var{options}] [@var{target}]
-@end example
-
-or you can use a copy of GCC 2.95.3 or higher built on Tru64 UNIX V4.0:
-
-@example
- % CC=gcc -Wa,-oldas @var{srcdir}/configure [@var{options}] [@var{target}]
-@end example
-
-As of GNU binutils 2.11.2, neither GNU @command{as} nor GNU @command{ld}
-are supported on Tru64 UNIX, so you must not configure GCC with
-@option{--with-gnu-as} or @option{--with-gnu-ld}.
-
-The @option{--enable-threads} options isn't supported yet. A patch is
-in preparation for a future release.
-
-GCC writes a @samp{.verstamp} directive to the assembler output file
-unless it is built as a cross-compiler. It gets the version to use from
-the system header file @file{/usr/include/stamp.h}. If you install a
-new version of DEC Unix, you should rebuild GCC to pick up the new version
-stamp.
-
-Note that since the Alpha is a 64-bit architecture, cross-compilers from
-32-bit machines will not generate code as efficient as that generated
-when the compiler is running on a 64-bit machine because many
-optimizations that depend on being able to represent a word on the
-target in an integral value on the host cannot be performed. Building
-cross-compilers on the Alpha for 32-bit machines has only been tested in
-a few cases and may not work properly.
-
-@code{make compare} may fail on old versions of DEC Unix unless you add
-@option{-save-temps} to @code{CFLAGS}. On these systems, the name of the
-assembler input file is stored in the object file, and that makes
-comparison fail if it differs between the @code{stage1} and
-@code{stage2} compilations. The option @option{-save-temps} forces a
-fixed name to be used for the assembler input file, instead of a
-randomly chosen name in @file{/tmp}. Do not add @option{-save-temps}
-unless the comparisons fail without that option. If you add
-@option{-save-temps}, you will have to manually delete the @samp{.i} and
-@samp{.s} files after each series of compilations.
-
-GCC now supports both the native (ECOFF) debugging format used by DBX
-and GDB and an encapsulated STABS format for use only with GDB@. See the
-discussion of the @option{--with-stabs} option of @file{configure} above
-for more information on these formats and how to select them.
-
-There is a bug in DEC's assembler that produces incorrect line numbers
-for ECOFF format when the @samp{.align} directive is used. To work
-around this problem, GCC will not emit such alignment directives
-while writing ECOFF format debugging information even if optimization is
-being performed. Unfortunately, this has the very undesirable
-side-effect that code addresses when @option{-O} is specified are
-different depending on whether or not @option{-g} is also specified.
-
-To avoid this behavior, specify @option{-gstabs+} and use GDB instead of
-DBX@. DEC is now aware of this problem with the assembler and hopes to
-provide a fix shortly.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{alphaev5-cray-unicosmk*}alphaev5-cray-unicosmk*
-Cray T3E systems running Unicos/Mk.
-
-This port is incomplete and has many known bugs. We hope to improve the
-support for this target soon. Currently, only the C front end is supported,
-and it is not possible to build parallel applications. Cray modules are not
-supported; in particular, Craylibs are assumed to be in
-@file{/opt/ctl/craylibs/craylibs}.
-
-You absolutely @strong{must} use GNU make on this platform. Also, you
-need to tell GCC where to find the assembler and the linker. The
-simplest way to do so is by providing @option{--with-as} and
-@option{--with-ld} to @file{configure}, e.g.@:
-
-@samp{configure --with-as=/opt/ctl/bin/cam --with-ld=/opt/ctl/bin/cld
---enable-languages=c}
-
-The comparison test during @samp{make bootstrap} fails on Unicos/Mk
-because the assembler inserts timestamps into object files. You should
-be able to work around this by doing @samp{make all} after getting this
-failure.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{arc-*-elf}arc-*-elf
-Argonaut ARC processor.
-This configuration is intended for embedded systems.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{arm-*-aout}arm-*-aout
-Advanced RISC Machines ARM-family processors. These are often used in
-embedded applications. There are no standard Unix configurations.
-This configuration corresponds to the basic instruction sequences and will
-produce @file{a.out} format object modules.
-
-You may need to make a variant of the file @file{arm.h} for your particular
-configuration.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{arm-*-elf}arm-*-elf
-This configuration is intended for embedded systems.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{arm*-*-linux-gnu}arm*-*-linux-gnu
-
-We require GNU binutils 2.10 or newer.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{arm-*-riscix}arm-*-riscix
-The ARM2 or ARM3 processor running RISC iX, Acorn's port of BSD Unix.
-This configuration is obsoleted in GCC 3.1.
-
-If you are running a version of RISC iX prior to 1.2 then you must
-specify the version number during configuration. Note that the
-assembler shipped with RISC iX does not support stabs debugging
-information; a new version of the assembler, with stabs support
-included, is now available from Acorn and via ftp
-@uref{ftp://ftp.acorn.com/pub/riscix/as+xterm.tar.Z}. To enable stabs
-debugging, pass @option{--with-gnu-as} to configure.
-
-You will need to install GNU @command{sed} before you can run configure.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{avr}avr
-
-ATMEL AVR-family micro controllers. These are used in embedded
-applications. There are no standard Unix configurations.
-@ifnothtml
-@xref{AVR Options,, AVR Options, gcc, Using and Porting the GNU Compiler
-Collection (GCC)},
-@end ifnothtml
-@ifhtml
-See ``AVR Options'' in the main manual
-@end ifhtml
-for the list of supported MCU types.
-
-Use @samp{configure --target=avr --enable-languages="c"} to configure GCC@.
-
-Further installation notes and other useful information about AVR tools
-can also be obtained from:
-
-@itemize @bullet
-@item
-@uref{http://home.overta.ru/users/denisc,,http://home.overta.ru/users/denisc}
-@item
-@uref{http://www.amelek.gda.pl/avr,,http://www.amelek.gda.pl/avr}
-@end itemize
-
-We @emph{strongly} recommend using binutils 2.11 or newer.
-
-The following error:
-@example
- Error: register required
-@end example
-
-indicates that you should upgrade to a newer version of the binutils.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{c4x}c4x
-
-Texas Instruments TMS320C3x and TMS320C4x Floating Point Digital Signal
-Processors. These are used in embedded applications. There are no
-standard Unix configurations.
-@ifnothtml
-@xref{TMS320C3x/C4x Options,, TMS320C3x/C4x Options, gcc, Using and
-Porting the GNU Compiler Collection (GCC)},
-@end ifnothtml
-@ifhtml
-See ``TMS320C3x/C4x Options'' in the main manual
-@end ifhtml
-for the list of supported MCU types.
-
-GCC can be configured as a cross compiler for both the C3x and C4x
-architectures on the same system. Use @samp{configure --target=c4x
---enable-languages="c,c++"} to configure.
-
-
-Further installation notes and other useful information about C4x tools
-can also be obtained from:
-
-@itemize @bullet
-@item
-@uref{http://www.elec.canterbury.ac.nz/c4x/,,http://www.elec.canterbury.ac.nz/c4x/}
-@end itemize
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{cris}CRIS
-
-CRIS is the CPU architecture in Axis Communications ETRAX system-on-a-chip
-series. These are used in embedded applications.
-
-@ifnothtml
-@xref{CRIS Options,, CRIS Options, gcc, Using and Porting the GNU Compiler
-Collection (GCC)},
-@end ifnothtml
-@ifhtml
-See ``CRIS Options'' in the main manual
-@end ifhtml
-for a list of CRIS-specific options.
-
-There are a few different CRIS targets:
-@table @code
-@item cris-axis-aout
-Old target. Includes a multilib for the @samp{elinux} a.out-based
-target. No multilibs for newer architecture variants.
-@item cris-axis-elf
-Mainly for monolithic embedded systems. Includes a multilib for the
-@samp{v10} core used in @samp{ETRAX 100 LX}.
-@item cris-axis-linux-gnu
-A GNU/Linux port for the CRIS architecture, currently targeting
-@samp{ETRAX 100 LX} by default.
-@end table
-
-For @code{cris-axis-aout} and @code{cris-axis-elf} you need binutils 2.11
-or newer. For @code{cris-axis-linux-gnu} you need binutils 2.12 or newer.
-
-Pre-packaged tools can be obtained from
-@uref{ftp://ftp.axis.com/pub/axis/tools/cris/compiler-kit/}. More
-information about this platform is available at
-@uref{http://developer.axis.com/}.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{dos}DOS
-
-Please have a look at our @uref{binaries.html,,binaries page}.
-
-You cannot install GCC by itself on MSDOS; it will not compile under
-any MSDOS compiler except itself. You need to get the complete
-compilation package DJGPP, which includes binaries as well as sources,
-and includes all the necessary compilation tools and libraries.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{dsp16xx}dsp16xx
-A port to the AT&T DSP1610 family of processors.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{*-*-freebsd*}*-*-freebsd*
-
-The version of binutils installed in @file{/usr/bin} is known to work unless
-otherwise specified in any per-architecture notes. However, binutils
-2.12.1 or greater is known to improve overall testsuite results.
-
-For FreeBSD 1, FreeBSD 2 or any mutant a.out versions of FreeBSD 3: All
-configuration support and files as shipped with GCC 2.95 are still in
-place. FreeBSD 2.2.7 has been known to bootstrap completely; however,
-it is unknown which version of binutils was used (it is assumed that it
-was the system copy in @file{/usr/bin}) and C++ EH failures were noted.
-
-Support for FreeBSD 1 is obsoleted in GCC 3.1.
-
-For FreeBSD using the ELF file format: DWARF 2 debugging is now the
-default for all CPU architectures. It had been the default on
-FreeBSD/alpha since its inception. You may use @option{-gstabs} instead
-of @option{-g}, if you really want the old debugging format. There are
-no known issues with mixing object files and libraries with different
-debugging formats. Otherwise, this release of GCC should now match more
-of the configuration used in the stock FreeBSD configuration of GCC. In
-particular, @option{--enable-threads} is now configured by default.
-However, as a general user, do not attempt to replace the system
-compiler with this release. Known to bootstrap and check with good
-results on FreeBSD 3.0, 3.4, 4.0, 4.2, 4.3, 4.4, 4.5-STABLE and 5-CURRENT@.
-
-In principle, @option{--enable-threads} is now compatible with
-@option{--enable-libgcj} on FreeBSD@. However, it has only been built
-and tested on i386-*-freebsd4.5 and alpha-*-freebsd5.0. The static
-library may be incorrectly built (symbols are missing at link time).
-There is a rare timing-based startup hang (probably involves an
-assupmtion about the thread library). Multi-threaded boehm-gc (required for
-libjava) exposes severe threaded signal-handling bugs on FreeBSD before
-4.5-RELEASE. The alpha port may not fully bootstrap without some manual
-intervention: gcjh will crash with a floating-point exception while
-generating @file{java/lang/Double.h} (just copy the version built on
-i386-*-freebsd* and rerun the top-level gmake with no arguments and it
-should properly complete the bootstrap). Other CPU architectures
-supported by FreeBSD will require additional configuration tuning in, at
-the very least, both boehm-gc and libffi.
-
-Shared @file{libgcc_s.so} is now built and installed by default.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{elxsi-elxsi-bsd}elxsi-elxsi-bsd
-The Elxsi's C compiler has known limitations that prevent it from
-compiling GCC@. Please contact @email{mrs@@wrs.com} for more details.
-
-Support for this processor is obsoleted in GCC 3.1.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{h8300-hms}h8300-hms
-Hitachi H8/300 series of processors.
-
-Please have a look at our @uref{binaries.html,,binaries page}.
-
-The calling convention and structure layout has changed in release 2.6.
-All code must be recompiled. The calling convention now passes the
-first three arguments in function calls in registers. Structures are no
-longer a multiple of 2 bytes.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{hppa*-hp-hpux*}hppa*-hp-hpux*
-
-We @emph{highly} recommend using gas/binutils 2.8 or newer on all hppa
-platforms; you may encounter a variety of problems when using the HP
-assembler.
-
-Specifically, @option{-g} does not work on HP-UX (since that system
-uses a peculiar debugging format which GCC does not know about), unless you
-use GAS and GDB and configure GCC with the
-@uref{./configure.html#with-gnu-as,,@option{--with-gnu-as}} and
-@option{--with-as=@dots{}} options.
-
-If you wish to use pa-risc 2.0 architecture support, you must use either
-the HP assembler, gas/binutils 2.11 or a recent
-@uref{ftp://sources.redhat.com/pub/binutils/snapshots,,snapshot of gas}.
-
-More specific information to @samp{hppa*-hp-hpux*} targets follows.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{hppa*-hp-hpux9}hppa*-hp-hpux9
-
-The HP assembler has major problems on this platform. We've tried to work
-around the worst of the problems. However, those workarounds may be causing
-linker crashes in some circumstances; the workarounds also probably prevent
-shared libraries from working. Use the GNU assembler to avoid these problems.
-
-
-The configuration scripts for GCC will also trigger a bug in the hpux9
-shell. To avoid this problem set @env{CONFIG_SHELL} to @file{/bin/ksh}
-and @env{SHELL} to @file{/bin/ksh} in your environment.
-
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{hppa*-hp-hpux10}hppa*-hp-hpux10
-
-For hpux10.20, we @emph{highly} recommend you pick up the latest sed patch
-@code{PHCO_19798} from HP@. HP has two sites which provide patches free of
-charge:
-
-@itemize @bullet
-@item
-@html
-<a href="http://us-support.external.hp.com">US, Canada, Asia-Pacific, and
-Latin-America</a>
-@end html
-@ifnothtml
-@uref{http://us-support.external.hp.com,,}US, Canada, Asia-Pacific, and
-Latin-America
-@end ifnothtml
-@item
-@uref{http://europe-support.external.hp.com,,Europe}
-@end itemize
-
-The HP assembler on these systems is much better than the hpux9 assembler,
-but still has some problems. Most notably the assembler inserts timestamps
-into each object file it creates, causing the 3-stage comparison test to fail
-during a @samp{make bootstrap}. You should be able to continue by
-saying @samp{make all} after getting the failure from @samp{make
-bootstrap}.
-
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{hppa*-hp-hpux11}hppa*-hp-hpux11
-
-GCC 3.0 and up support HP-UX 11. You must use GNU binutils 2.11 or above on
-this platform. Thread support is not currently implemented for this
-platform, so @option{--enable-threads} does not work.
-See @uref{http://gcc.gnu.org/ml/gcc-prs/2002-01/msg00551.html}
-and @uref{http://gcc.gnu.org/ml/gcc-bugs/2002-01/msg00663.html}.
-GCC 2.95.x is not supported under HP-UX 11 and cannot be used to
-compile GCC 3.0 and up. Refer to @uref{binaries.html,,binaries} for
-information about obtaining precompiled GCC binaries for HP-UX.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{i370-*-*}i370-*-*
-This port is very preliminary and has many known bugs. We hope to
-have a higher-quality port for this machine soon.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{*-*-linux-gnu}*-*-linux-gnu
-
-If you use glibc 2.2 (or 2.1.9x), GCC 2.95.2 won't install
-out-of-the-box. You'll get compile errors while building @samp{libstdc++}.
-The patch @uref{glibc-2.2.patch,,glibc-2.2.patch}, that is to be
-applied in the GCC source tree, fixes the compatibility problems.
-
-@html
-</p>
-@end html
-
-@html
-<p>
-@end html
-
-Currently Glibc 2.2.3 (and older releases) and GCC 3.0 are out of sync
-since the latest exception handling changes for GCC@. Compiling glibc
-with GCC 3.0 will give a binary incompatible glibc and therefore cause
-lots of problems and might make your system completly unusable. This
-will definitly need fixes in glibc but might also need fixes in GCC@. We
-strongly advise to wait for glibc 2.2.4 and to read the release notes of
-glibc 2.2.4 whether patches for GCC 3.0 are needed. You can use glibc
-2.2.3 with GCC 3.0, just do not try to recompile it.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{ix86-*-linux*oldld}i?86-*-linux*oldld
-Use this configuration to generate @file{a.out} binaries on Linux-based
-GNU systems if you do not have gas/binutils version 2.5.2 or later
-installed.
-
-This configuration is obsoleted in GCC 3.1.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{ix86-*-linux*aout}i?86-*-linux*aout
-Use this configuration to generate @file{a.out} binaries on Linux-based
-GNU systems. This configuration is being superseded. You must use
-gas/binutils version 2.5.2 or later.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{ix86-*-linux*}i?86-*-linux*
-
-You will need binutils 2.9.1.0.15 or newer for exception handling to work.
-
-If you receive Signal 11 errors when building on GNU/Linux, then it is
-possible you have a hardware problem. Further information on this can be
-found on @uref{http://www.bitwizard.nl/sig11/,,www.bitwizard.nl}.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{ix86-*-sco}i?86-*-sco
-Compilation with RCC is recommended. Also, it may be a good idea to
-link with GNU malloc instead of the malloc that comes with the system.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{ix86-*-sco3.2v4}i?86-*-sco3.2v4
-Use this configuration for SCO release 3.2 version 4.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{ix86-*-sco3.2v5*}i?86-*-sco3.2v5*
-Use this for the SCO OpenServer Release 5 family of operating systems.
-
-Unlike earlier versions of GCC, the ability to generate COFF with this
-target is no longer provided.
-
-Earlier versions of GCC emitted DWARF 1 when generating ELF to allow
-the system debugger to be used. That support was too burdensome to
-maintain. GCC now emits only DWARF 2 for this target. This means you
-may use either the UDK debugger or GDB to debug programs built by this
-version of GCC@.
-
-Use of the @option{-march=pentiumpro} flag can result in
-unrecognized opcodes when using the native assembler on OS versions before
-5.0.6. (Support for P6 opcodes was added to the native ELF assembler in
-that version.) While it's rather rare to see these emitted by GCC yet,
-errors of the basic form:
-
-@example
- /usr/tmp/ccaNlqBc.s:22:unknown instruction: fcomip
- /usr/tmp/ccaNlqBc.s:50:unknown instruction: fucomip
-@end example
-
-are symptoms of this problem. You may work around this by not
-building affected files with that flag, by using the GNU assembler, or
-by using the assembler provided with the current version of the OS@.
-Users of GNU assembler should see the note below for hazards on doing
-so.
-
-The native SCO assembler that is provided with the OS at no
-charge is normally required. If, however, you must be able to use
-the GNU assembler (perhaps you're compiling code with asms that
-require GAS syntax) you may configure this package using the flags
-@uref{./configure.html#with-gnu-as,,@option{--with-gnu-as}}. You must
-use a recent version of GNU binutils; versions past 2.9.1 seem to work
-well.
-
-In general, the @option{--with-gnu-as} option isn't as well tested
-as the native assembler.
-
-Look in @file{gcc/config/i386/sco5.h} (search for ``messy'') for
-additional OpenServer-specific flags.
-
-Systems based on OpenServer before 5.0.4 (@samp{uname -X}
-will tell you what you're running) require TLS597 from
-@uref{ftp://ftp.sco.com/TLS/,,ftp://ftp.sco.com/TLS/}
-for C++ constructors and destructors to work right.
-
-The system linker in (at least) 5.0.4 and 5.0.5 will sometimes
-do the wrong thing for a construct that GCC will emit for PIC
-code. This can be seen as execution testsuite failures when using
-@option{-fPIC} on @file{921215-1.c}, @file{931002-1.c}, @file{nestfunc-1.c}, and @file{gcov-1.c}.
-For 5.0.5, an updated linker that will cure this problem is
-available. You must install both
-@uref{ftp://ftp.sco.com/Supplements/rs505a/,,ftp://ftp.sco.com/Supplements/rs505a/}
-and @uref{ftp://ftp.sco.com/SLS/,,OSS499A}.
-
-The dynamic linker in OpenServer 5.0.5 (earlier versions may show
-the same problem) aborts on certain G77-compiled programs. It's particularly
-likely to be triggered by building Fortran code with the @option{-fPIC} flag.
-Although it's conceivable that the error could be triggered by other
-code, only G77-compiled code has been observed to cause this abort.
-If you are getting core dumps immediately upon execution of your
-G77 program---and especially if it's compiled with @option{-fPIC}---try applying
-@uref{sco_osr5_g77.patch,,@file{sco_osr5_g77.patch}} to your @samp{libf2c} and
-rebuilding GCC@.
-Affected faults, when analyzed in a debugger, will show a stack
-backtrace with a fault occurring in @code{rtld()} and the program
-running as @file{/usr/lib/ld.so.1}. This problem has been reported to SCO
-engineering and will hopefully be addressed in later releases.
-
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{ix86-*-udk}i?86-*-udk
-
-This target emulates the SCO Universal Development Kit and requires that
-package be installed. (If it is installed, you will have a
-@file{/udk/usr/ccs/bin/cc} file present.) It's very much like the
-@samp{i?86-*-unixware7*} target
-but is meant to be used when hosting on a system where UDK isn't the
-default compiler such as OpenServer 5 or Unixware 2. This target will
-generate binaries that will run on OpenServer, Unixware 2, or Unixware 7,
-with the same warnings and caveats as the SCO UDK@.
-
-This target is a little tricky to build because we have to distinguish
-it from the native tools (so it gets headers, startups, and libraries
-from the right place) while making the tools not think we're actually
-building a cross compiler. The easiest way to do this is with a configure
-command like this:
-
-@samp{CC=/udk/usr/ccs/bin/cc @var{/your/path/to}/gcc/configure
---host=i686-pc-udk --target=i686-pc-udk --program-prefix=udk-}
-
-@emph{You should substitute @samp{i686} in the above command with the appropriate
-processor for your host.}
-
-After the usual @samp{make bootstrap} and
-@samp{make install}, you can then access the UDK-targeted GCC
-tools by adding @command{udk-} before the commonly known name. For
-example, to invoke the C compiler, you would use @command{udk-gcc}.
-They will coexist peacefully with any native-target GCC tools you may
-have installed.
-
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{ix86-*-isc}i?86-*-isc
-This configuration is obsoleted in GCC 3.1.
-
-It may be a good idea to link with GNU malloc instead of the malloc that
-comes with the system.
-
-In ISC version 4.1, @command{sed} core dumps when building
-@file{deduced.h}. Use the version of @command{sed} from version 4.0.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{ix86-ibm-aix}i?86-ibm-aix
-This configuration is obsoleted in GCC 3.1.
-
-You need to use GAS version 2.1 or later, and LD from
-GNU binutils version 2.2 or later.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{ix86-sequent-bsd}i?86-sequent-bsd
-This configuration is obsoleted in GCC 3.1.
-
-Go to the Berkeley universe before compiling.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{ix86-sequent-ptx1*}i?86-sequent-ptx1*, i?86-sequent-ptx2*, i?86-sequent-sysv3*
-This configuration is obsoleted in GCC 3.1.
-
-You must install GNU @command{sed} before running @command{configure}.
-
-The @code{fixproto} shell script may trigger a bug in the system shell.
-If you encounter this problem, upgrade your operating system or
-use @command{bash} (the GNU shell) to run @code{fixproto}.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{i860-intel-osf*}i860-intel-osf*
-All support for the i860 processor is obsoleted in GCC 3.1.
-
-On the Intel Paragon (an i860 machine), if you are using operating
-system version 1.0, you will get warnings or errors about redefinition
-of @code{va_arg} when you build GCC@.
-
-If this happens, then you need to link most programs with the library
-@file{iclib.a}. You must also modify @file{stdio.h} as follows: before
-the lines
-
-@example
-#if defined(__i860__) && !defined(_VA_LIST)
-#include <va_list.h>
-@end example
-
-@noindent
-insert the line
-
-@example
-#if __PGC__
-@end example
-
-@noindent
-and after the lines
-
-@example
-extern int vprintf(const char *, va_list );
-extern int vsprintf(char *, const char *, va_list );
-#endif
-@end example
-
-@noindent
-insert the line
-
-@example
-#endif /* __PGC__ */
-@end example
-
-These problems don't exist in operating system version 1.1.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{ia64-*-linux}ia64-*-linux
-IA-64 processor (also known as IPF, or Itanium Processor Family)
-running GNU/Linux.
-
-The toolchain is not completely finished, so requirements will continue
-to change.
-GCC 3.0.1 and later require glibc 2.2.4.
-GCC 3.0.2 requires binutils from 2001-09-05 or later.
-GCC 3.0.1 requires binutils 2.11.1 or later.
-
-None of the following versions of GCC has an ABI that is compatible
-with any of the other versions in this list, with the exception that
-Red Hat 2.96 and Trillian 000171 are compatible with each other:
-3.0.2, 3.0.1, 3.0, Red Hat 2.96, and Trillian 000717.
-This primarily affects C++ programs and programs that create shared libraries.
-Because of these ABI incompatibilities, GCC 3.0.2 is not recommended for
-user programs on GNU/Linux systems built using earlier compiler releases.
-GCC 3.0.2 is recommended for compiling linux, the kernel.
-GCC 3.0.2 is believed to be fully ABI compliant, and hence no more major
-ABI changes are expected.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{*-lynx-lynxos}*-lynx-lynxos
-LynxOS 2.2 and earlier comes with GCC 1.x already installed as
-@file{/bin/gcc}. You should compile with this instead of @file{/bin/cc}.
-You can tell GCC to use the GNU assembler and linker, by specifying
-@samp{--with-gnu-as --with-gnu-ld} when configuring. These will produce
-COFF format object files and executables; otherwise GCC will use the
-installed tools, which produce @file{a.out} format executables.
-
-@html
-</p>
-<hr>
-<!-- rs6000-ibm-aix*, powerpc-ibm-aix* -->
-@end html
-@heading @anchor{*-ibm-aix*}*-ibm-aix*
-
-AIX Make frequently has problems with GCC makefiles. GNU Make 3.76 or
-newer is recommended to build on this platform.
-
-Errors involving @code{alloca} when building GCC generally are due
-to an incorrect definition of @code{CC} in the Makefile or mixing files
-compiled with the native C compiler and GCC@. During the stage1 phase of
-the build, the native AIX compiler @strong{must} be invoked as @command{cc}
-(not @command{xlc}). Once @command{configure} has been informed of
-@command{xlc}, one needs to use @samp{make distclean} to remove the
-configure cache files and ensure that @env{CC} environment variable
-does not provide a definition that will confuse @command{configure}.
-If this error occurs during stage2 or later, then the problem most likely
-is the version of Make (see above).
-
-The GNU Assembler incorrectly reports that it supports WEAK symbols on
-AIX which causes GCC to try to utilize weak symbol functionality which
-is not really supported on the platform. The native @command{as} and
-@command{ld} still are recommended. The native AIX tools do
-interoperate with GCC@.
-
-Building @file{libstdc++.a} requires a fix for a AIX Assembler bug
-APAR IY26685 (AIX 4.3) or APAR IY25528 (AIX 5.1).
-
-Linking executables and shared libraries may produce warnings of
-duplicate symbols. The assembly files generated by GCC for AIX always
-have included multiple symbol definitions for certain global variable
-and function declarations in the original program. The warnings should
-not prevent the linker from producing a correct library or runnable
-executable.
-
-AIX 4.3 utilizes a ``large format'' archive to support both 32-bit and
-64-bit object modules. The routines provided in AIX 4.3.0 and AIX 4.3.1
-to parse archive libraries did not handle the new format correctly.
-These routines are used by GCC and result in error messages during
-linking such as ``not a COFF file''. The version of the routines shipped
-with AIX 4.3.1 should work for a 32-bit environment. The @option{-g}
-option of the archive command may be used to create archives of 32-bit
-objects using the original ``small format''. A correct version of the
-routines is shipped with AIX 4.3.2 and above.
-
-Some versions of the AIX binder (linker) can fail with a relocation
-overflow severe error when the @option{-bbigtoc} option is used to link
-GCC-produced object files into an executable that overflows the TOC@. A fix
-for APAR IX75823 (OVERFLOW DURING LINK WHEN USING GCC AND -BBIGTOC) is
-available from IBM Customer Support and from its
-@uref{http://techsupport.services.ibm.com/,,techsupport.services.ibm.com}
-website as PTF U455193.
-
-The AIX 4.3.2.1 linker (bos.rte.bind_cmds Level 4.3.2.1) will dump core
-with a segmentation fault when invoked by any version of GCC@. A fix for
-APAR IX87327 is available from IBM Customer Support and from its
-@uref{http://techsupport.services.ibm.com/,,techsupport.services.ibm.com}
-website as PTF U461879. This fix is incorporated in AIX 4.3.3 and above.
-
-The initial assembler shipped with AIX 4.3.0 generates incorrect object
-files. A fix for APAR IX74254 (64BIT DISASSEMBLED OUTPUT FROM COMPILER FAILS
-TO ASSEMBLE/BIND) is available from IBM Customer Support and from its
-@uref{http://techsupport.services.ibm.com/,,techsupport.services.ibm.com}
-website as PTF U453956. This fix is incorporated in AIX 4.3.1 and above.
-
-AIX provides National Language Support (NLS)@. Compilers and assemblers
-use NLS to support locale-specific representations of various data
-formats including floating-point numbers (e.g., @samp{.} vs @samp{,} for
-separating decimal fractions). There have been problems reported where
-GCC does not produce the same floating-point formats that the assembler
-expects. If one encounters this problem, set the @env{LANG}
-environment variable to @samp{C} or @samp{En_US}.
-
-By default, GCC for AIX 4.1 and above produces code that can be used on
-both Power or PowerPC processors.
-
-A default can be specified with the @option{-mcpu=@var{cpu_type}}
-switch and using the configure option @option{--with-cpu-@var{cpu_type}}.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{m32r-*-elf}m32r-*-elf
-Mitsubishi M32R processor.
-This configuration is intended for embedded systems.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{m68000-hp-bsd}m68000-hp-bsd
-HP 9000 series 200 running BSD@. Note that the C compiler that comes
-with this system cannot compile GCC; contact @email{law@@cygnus.com}
-to get binaries of GCC for bootstrapping.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{m6811-elf}m6811-elf
-Motorola 68HC11 family micro controllers. These are used in embedded
-applications. There are no standard Unix configurations.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{m6812-elf}m6812-elf
-Motorola 68HC12 family micro controllers. These are used in embedded
-applications. There are no standard Unix configurations.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{m68k-altos}m68k-altos
-Altos 3068. This configuration is obsoleted in GCC 3.1.
-
-You must use the GNU assembler, linker and debugger.
-Also, you must fix a kernel bug.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{m68k-apple-aux}m68k-apple-aux
-Apple Macintosh running A/UX@.
-This configuration is obsoleted in GCC 3.1.
-
-You may configure GCC to use either the system assembler and
-linker or the GNU assembler and linker. You should use the GNU configuration
-if you can, especially if you also want to use G++. You enable
-that configuration with the @option{--with-gnu-as} and @option{--with-gnu-ld}
-options to @code{configure}.
-
-Note the C compiler that comes
-with this system cannot compile GCC@. You can find binaries of GCC
-for bootstrapping on @code{jagubox.gsfc.nasa.gov}.
-You will also a patched version of @file{/bin/ld} there that
-raises some of the arbitrary limits found in the original.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{m68k-att-sysv}m68k-att-sysv
-AT&T 3b1, a.k.a.@: 7300 PC@. This version of GCC cannot
-be compiled with the system C compiler, which is too buggy.
-You will need to get a previous version of GCC and use it to
-bootstrap. Binaries are available from the OSU-CIS archive, at
-@uref{ftp://archive.cis.ohio-state.edu/pub/att7300/}.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{m68k-bull-sysv}m68k-bull-sysv
-Bull DPX/2 series 200 and 300 with BOS-2.00.45 up to BOS-2.01.
-This configuration is obsoleted in GCC 3.1.
-
-GCC works
-either with native assembler or GNU assembler. You can use
-GNU assembler with native COFF generation by providing @option{--with-gnu-as} to
-the configure script or use GNU assembler with stabs-in-COFF encapsulation
-by providing @samp{--with-gnu-as --stabs}. For any problem with the native
-assembler or for availability of the DPX/2 port of GAS, contact
-@email{F.Pierresteguy@@frcl.bull.fr}.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{m68k-crds-unos}m68k-crds-unos
-Use @samp{configure unos} for building on Unos.
-
-The Unos assembler is named @code{casm} instead of @code{as}. For some
-strange reason linking @file{/bin/as} to @file{/bin/casm} changes the
-behavior, and does not work. So, when installing GCC, you should
-install the following script as @file{as} in the subdirectory where
-the passes of GCC are installed:
-
-@example
-#!/bin/sh
-casm $*
-@end example
-
-The default Unos library is named @file{libunos.a} instead of
-@file{libc.a}. To allow GCC to function, either change all
-references to @option{-lc} in @file{gcc.c} to @option{-lunos} or link
-@file{/lib/libc.a} to @file{/lib/libunos.a}.
-
-@cindex @code{alloca}, for Unos
-When compiling GCC with the standard compiler, to overcome bugs in
-the support of @code{alloca}, do not use @option{-O} when making stage 2.
-Then use the stage 2 compiler with @option{-O} to make the stage 3
-compiler. This compiler will have the same characteristics as the usual
-stage 2 compiler on other systems. Use it to make a stage 4 compiler
-and compare that with stage 3 to verify proper compilation.
-
-(Perhaps simply defining @code{ALLOCA} in @file{x-crds} as described in
-the comments there will make the above paragraph superfluous. Please
-inform us of whether this works.)
-
-Unos uses memory segmentation instead of demand paging, so you will need
-a lot of memory. 5 Mb is barely enough if no other tasks are running.
-If linking @file{cc1} fails, try putting the object files into a library
-and linking from that library.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{m68k-hp-hpux}m68k-hp-hpux
-HP 9000 series 300 or 400 running HP-UX@. HP-UX version 8.0 has a bug in
-the assembler that prevents compilation of GCC@. This
-bug manifests itself during the first stage of compilation, while
-building @file{libgcc2.a}:
-
-@smallexample
-_floatdisf
-cc1: warning: `-g' option not supported on this version of GCC
-cc1: warning: `-g1' option not supported on this version of GCC
-./xgcc: Internal compiler error: program as got fatal signal 11
-@end smallexample
-
-A patched version of the assembler is available as the file
-@uref{ftp://altdorf.ai.mit.edu/archive/cph/hpux-8.0-assembler}. If you
-have HP software support, the patch can also be obtained directly from
-HP, as described in the following note:
-
-@quotation
-This is the patched assembler, to patch SR#1653-010439, where the
-assembler aborts on floating point constants.
-
-The bug is not really in the assembler, but in the shared library
-version of the function ``cvtnum(3c)''. The bug on ``cvtnum(3c)'' is
-SR#4701-078451. Anyway, the attached assembler uses the archive
-library version of ``cvtnum(3c)'' and thus does not exhibit the bug.
-@end quotation
-
-This patch is also known as PHCO_4484.
-
-In addition, if you wish to use gas, you must use
-gas version 2.1 or later, and you must use the GNU linker version 2.1 or
-later. Earlier versions of gas relied upon a program which converted the
-gas output into the native HP-UX format, but that program has not been
-kept up to date. gdb does not understand that native HP-UX format, so
-you must use gas if you wish to use gdb.
-
-On HP-UX version 8.05, but not on 8.07 or more recent versions, the
-@code{fixproto} shell script triggers a bug in the system shell. If you
-encounter this problem, upgrade your operating system or use BASH (the
-GNU shell) to run @code{fixproto}. This bug will cause the fixproto
-program to report an error of the form:
-
-@example
-./fixproto: sh internal 1K buffer overflow
-@end example
-
-To fix this, you can also change the first line of the fixproto script
-to look like:
-
-@example
-#!/bin/ksh
-@end example
-
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{m68k-*-nextstep*}m68k-*-nextstep*
-These configurations are obsoleted in GCC 3.1.
-
-Current GCC versions probably do not work on version 2 of the NeXT
-operating system.
-
-On NeXTStep 3.0, the Objective-C compiler does not work, due,
-apparently, to a kernel bug that it happens to trigger. This problem
-does not happen on 3.1.
-
-You absolutely @strong{must} use GNU sed and GNU make on this platform.
-
-
-On NeXTSTEP 3.x where x < 3 the build of GCC will abort during
-stage1 with an error message like this:
-
-@example
- _eh
- /usr/tmp/ccbbsZ0U.s:987:Unknown pseudo-op: .section
- /usr/tmp/ccbbsZ0U.s:987:Rest of line ignored. 1st junk character
- valued 95 (_).
-@end example
-
-The reason for this is the fact that NeXT's assembler for these
-versions of the operating system does not support the @samp{.section}
-pseudo op that's needed for full C++ exception functionality.
-
-As NeXT's assembler is a derived work from GNU as, a free
-replacement that does can be obtained at
-@uref{ftp://ftp.next.peak.org:/next-ftp/next/apps/devtools/as.3.3.NIHS.s.tar.gz,,ftp://ftp.next.peak.org:/next-ftp/next/apps/devtools/as.3.3.NIHS.s.tar.gz}.
-
-If you try to build the integrated C++ & C++ runtime libraries on this system
-you will run into trouble with include files. The way to get around this is
-to use the following sequence. Note you must have write permission to
-the directory @var{prefix} you specified in the configuration process of GCC
-for this sequence to work.
-
-@example
- cd bld-gcc
- make all-texinfo all-bison all-byacc all-binutils all-gas all-ld
- cd gcc
- make bootstrap
- make install-headers-tar
- cd ..
- make bootstrap3
-@end example
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{m68k-ncr-*}m68k-ncr-*
-On the Tower models 4@var{n}0 and 6@var{n}0, by default a process is not
-allowed to have more than one megabyte of memory. GCC cannot compile
-itself (or many other programs) with @option{-O} in that much memory.
-
-To solve this problem, reconfigure the kernel adding the following line
-to the configuration file:
-
-@smallexample
-MAXUMEM = 4096
-@end smallexample
-
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{m68k-sun}m68k-sun
-Sun 3. We do not provide a configuration file to use the Sun FPA by
-default, because programs that establish signal handlers for floating
-point traps inherently cannot work with the FPA@.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{m68k-sun-sunos4.1.1}m68k-sun-sunos4.1.1
-
-It is reported that you may need the GNU assembler on this platform.
-
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{m88k-*-svr3}m88k-*-svr3
-Motorola m88k running the AT&T/Unisoft/Motorola V.3 reference port.
-These configurations are obsoleted in GCC 3.1.
-
-These systems tend to use the Green Hills C, revision 1.8.5, as the
-standard C compiler. There are apparently bugs in this compiler that
-result in object files differences between stage 2 and stage 3. If this
-happens, make the stage 4 compiler and compare it to the stage 3
-compiler. If the stage 3 and stage 4 object files are identical, this
-suggests you encountered a problem with the standard C compiler; the
-stage 3 and 4 compilers may be usable.
-
-It is best, however, to use an older version of GCC for bootstrapping
-if you have one.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{m88k-*-dgux}m88k-*-dgux
-Motorola m88k running DG/UX@.
-These configurations are obsoleted in GCC 3.1.
-
-To build 88open BCS native or cross
-compilers on DG/UX, specify the configuration name as
-@samp{m88k-*-dguxbcs} and build in the 88open BCS software development
-environment. To build ELF native or cross compilers on DG/UX, specify
-@samp{m88k-*-dgux} and build in the DG/UX ELF development environment.
-You set the software development environment by issuing
-@samp{sde-target} command and specifying either @samp{m88kbcs} or
-@samp{m88kdguxelf} as the operand.
-
-If you do not specify a configuration name, @file{configure} guesses the
-configuration based on the current software development environment.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{m88k-tektronix-sysv3}m88k-tektronix-sysv3
-Tektronix XD88 running UTekV 3.2e.
-These configurations are obsoleted in GCC 3.1.
-
-Do not turn on
-optimization while building stage1 if you bootstrap with
-the buggy Green Hills compiler. Also, the bundled LAI
-System V NFS is buggy so if you build in an NFS mounted
-directory, start from a fresh reboot, or avoid NFS all together.
-Otherwise you may have trouble getting clean comparisons
-between stages.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{mips-*-*}mips-*-*
-If you use the 1.31 version of the MIPS assembler (such as was shipped
-with Ultrix 3.1), you will need to use the @option{-fno-delayed-branch} switch
-when optimizing floating point code. Otherwise, the assembler will
-complain when the GCC compiler fills a branch delay slot with a
-floating point instruction, such as @code{add.d}.
-
-If on a MIPS system you get an error message saying ``does not have gp
-sections for all it's [sic] sectons [sic]'', don't worry about it. This
-happens whenever you use GAS with the MIPS linker, but there is not
-really anything wrong, and it is okay to use the output file. You can
-stop such warnings by installing the GNU linker.
-
-It would be nice to extend GAS to produce the gp tables, but they are
-optional, and there should not be a warning about their absence.
-
-Users have reported some problems with version 2.0 of the MIPS
-compiler tools that were shipped with Ultrix 4.1. Version 2.10
-which came with Ultrix 4.2 seems to work fine.
-
-Users have also reported some problems with version 2.20 of the
-MIPS compiler tools that were shipped with RISC/os 4.x. The earlier
-version 2.11 seems to work fine.
-
-Some versions of the MIPS linker will issue an assertion failure
-when linking code that uses @code{alloca} against shared
-libraries on RISC-OS 5.0, and DEC's OSF/1 systems. This is a bug
-in the linker, that is supposed to be fixed in future revisions.
-To protect against this, GCC passes @option{-non_shared} to the
-linker unless you pass an explicit @option{-shared} or
-@option{-call_shared} switch.
-
-@heading @anchor{mips-mips-bsd}mips-mips-bsd
-MIPS machines running the MIPS operating system in BSD mode.
-These configurations are obsoleted in GCC 3.1.
-
-It's possible that some old versions of the system lack the functions
-@code{memcpy}, @code{memmove}, @code{memcmp}, and @code{memset}. If your
-system lacks these, you must remove or undo the definition of
-@code{TARGET_MEM_FUNCTIONS} in @file{mips-bsd.h}.
-
-If you use the MIPS C compiler to bootstrap, it may be necessary
-to increase its table size for switch statements with the
-@option{-Wf,-XNg1500} option. If you use the @option{-O2}
-optimization option, you also need to use @option{-Olimit 3000}.
-Both of these options are automatically generated in the
-@file{Makefile} that the shell script @file{configure} builds.
-If you override the @code{CC} make variable and use the MIPS
-compilers, you may need to add @option{-Wf,-XNg1500 -Olimit 3000}.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{mips-dec-*}mips-dec-*
-These configurations are obsoleted in GCC 3.1.
-
-MIPS-based DECstations can support three different personalities:
-Ultrix, DEC OSF/1, and OSF/rose. (Alpha-based DECstation products have
-a configuration name beginning with @samp{alpha*-dec}.) To configure GCC
-for these platforms use the following configurations:
-
-@table @samp
-@item mips-dec-ultrix
-Ultrix configuration.
-
-@item mips-dec-osf1
-DEC's version of OSF/1.
-
-@item mips-dec-osfrose
-Open Software Foundation reference port of OSF/1 which uses the
-OSF/rose object file format instead of ECOFF@. Normally, you
-would not select this configuration.
-@end table
-
-If you use the MIPS C compiler to bootstrap, it may be necessary
-to increase its table size for switch statements with the
-@option{-Wf,-XNg1500} option. If you use the @option{-O2}
-optimization option, you also need to use @option{-Olimit 3000}.
-Both of these options are automatically generated in the
-@file{Makefile} that the shell script @file{configure} builds.
-If you override the @code{CC} make variable and use the MIPS
-compilers, you may need to add @option{-Wf,-XNg1500 -Olimit 3000}.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{mips-mips-riscos*}mips-mips-riscos*
-These configurations are obsoleted in GCC 3.1.
-
-If you use the MIPS C compiler to bootstrap, it may be necessary
-to increase its table size for switch statements with the
-@option{-Wf,-XNg1500} option. If you use the @option{-O2}
-optimization option, you also need to use @option{-Olimit 3000}.
-Both of these options are automatically generated in the
-@file{Makefile} that the shell script @file{configure} builds.
-If you override the @code{CC} make variable and use the MIPS
-compilers, you may need to add @samp{-Wf,-XNg1500 -Olimit 3000}.
-
-MIPS computers running RISC-OS can support four different
-personalities: default, BSD 4.3, System V.3, and System V.4
-(older versions of RISC-OS don't support V.4). To configure GCC
-for these platforms use the following configurations:
-
-@table @samp
-@item mips-mips-riscos@var{rev}
-Default configuration for RISC-OS, revision @var{rev}.
-
-@item mips-mips-riscos@var{rev}bsd
-BSD 4.3 configuration for RISC-OS, revision @var{rev}.
-
-@item mips-mips-riscos@var{rev}sysv4
-System V.4 configuration for RISC-OS, revision @var{rev}.
-
-@html
-</p>
-<hr>
-@end html
-@item mips-mips-riscos@var{rev}sysv
-System V.3 configuration for RISC-OS, revision @var{rev}.
-@end table
-
-The revision @code{rev} mentioned above is the revision of
-RISC-OS to use. You must reconfigure GCC when going from a
-RISC-OS revision 4 to RISC-OS revision 5. This has the effect of
-avoiding a linker bug.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{mips-sgi-irix4}mips-sgi-irix4
-This configuration is obsoleted in GCC 3.1.
-
-In order to compile GCC on an SGI running IRIX 4, the ``c.hdr.lib''
-option must be installed from the CD-ROM supplied from Silicon Graphics.
-This is found on the 2nd CD in release 4.0.1.
-
-On IRIX version 4.0.5F, and perhaps on some other versions as well,
-there is an assembler bug that reorders instructions incorrectly. To
-work around it, specify the target configuration
-@samp{mips-sgi-irix4loser}. This configuration inhibits assembler
-optimization.
-
-In a compiler configured with target @samp{mips-sgi-irix4}, you can turn
-off assembler optimization by using the @option{-noasmopt} option. This
-compiler option passes the option @option{-O0} to the assembler, to
-inhibit reordering.
-
-The @option{-noasmopt} option can be useful for testing whether a problem
-is due to erroneous assembler reordering. Even if a problem does not go
-away with @option{-noasmopt}, it may still be due to assembler
-reordering---perhaps GCC itself was miscompiled as a result.
-
-You may get the following warning on IRIX 4 platforms, it can be safely
-ignored.
-@example
- warning: foo.o does not have gp tables for all its sections.
-@end example
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{mips-sgi-irix5}mips-sgi-irix5
-
-This configuration has considerable problems, which will be fixed in a
-future release.
-
-In order to compile GCC on an SGI running IRIX 5, the ``compiler_dev.hdr''
-subsystem must be installed from the IDO CD-ROM supplied by Silicon
-Graphics. It is also available for download from
-@uref{http://www.sgi.com/developers/devtools/apis/ido.html,,http://www.sgi.com/developers/devtools/apis/ido.html}.
-
-@code{make compare} may fail on version 5 of IRIX unless you add
-@option{-save-temps} to @code{CFLAGS}. On these systems, the name of the
-assembler input file is stored in the object file, and that makes
-comparison fail if it differs between the @code{stage1} and
-@code{stage2} compilations. The option @option{-save-temps} forces a
-fixed name to be used for the assembler input file, instead of a
-randomly chosen name in @file{/tmp}. Do not add @option{-save-temps}
-unless the comparisons fail without that option. If you do you
-@option{-save-temps}, you will have to manually delete the @samp{.i} and
-@samp{.s} files after each series of compilations.
-
-If you use the MIPS C compiler to bootstrap, it may be necessary
-to increase its table size for switch statements with the
-@option{-Wf,-XNg1500} option. If you use the @option{-O2}
-optimization option, you also need to use @option{-Olimit 3000}.
-
-To enable debugging under IRIX 5, you must use GNU @command{as} 2.11.2
-or later,
-and use the @option{--with-gnu-as} configure option when configuring GCC.
-GNU @command{as} is distributed as part of the binutils package.
-When using release 2.11.2, you need to apply a patch
-@uref{http://sources.redhat.com/ml/binutils/2001-07/msg00352.html,,http://sources.redhat.com/ml/binutils/2001-07/msg00352.html}
-which will be included in the next release of binutils.
-
-When building GCC, the build process loops rebuilding @command{cc1} over
-and over again. This happens on @samp{mips-sgi-irix5.2}, and possibly
-other platforms. It has been reported that this is a known bug in the
-@command{make} shipped with IRIX 5.2. We recommend you use GNU
-@command{make} instead of the vendor supplied @command{make} program;
-however, you may have success with @command{smake} on IRIX 5.2 if you do
-not have GNU @command{make} available.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{mips-sgi-irix6}mips-sgi-irix6
-
-If you are using IRIX @command{cc} as your bootstrap compiler, you must
-ensure that the N32 ABI is in use. To test this, compile a simple C
-file with @command{cc} and then run @command{file} on the
-resulting object file. The output should look like:
-
-@example
-test.o: ELF N32 MSB @dots{}
-@end example
-
-If you see:
-
-@example
-test.o: ELF 32-bit MSB @dots{}
-@end example
-
-or
-
-@example
-test.o: ELF 64-bit MSB @dots{}
-@end example
-
-then your version of @command{cc} uses the O32 or N64 ABI by default. You
-should set the environment variable @env{CC} to @samp{cc -n32}
-before configuring GCC@.
-
-GCC on IRIX 6 is usually built to support both the N32 and N64 ABIs. If
-you build GCC on a system that doesn't have the N64 libraries installed,
-you need to configure with @option{--disable-multilib} so GCC doesn't
-try to use them. Look for @file{/usr/lib64/libc.so.1} to see if you
-have the 64-bit libraries installed.
-
-You must @emph{not} use GNU @command{as} (which isn't built anyway as of
-binutils 2.11.2) on IRIX 6 platforms; doing so will only cause problems.
-
-GCC does not currently support generating O32 ABI binaries in the
-@samp{mips-sgi-irix6} configurations. It is possible to create a GCC
-with O32 ABI only support by configuring it for the @samp{mips-sgi-irix5}
-target and using a patched GNU @command{as} 2.11.2 as documented in the
-@uref{#mips-sgi-irix5,,@samp{mips-sgi-irix5}} section above. Using the
-native assembler requires patches to GCC which will be included in a
-future release. It is
-expected that O32 ABI support will be available again in a future release.
-
-The @option{--enable-threads} option doesn't currently work, a patch is
-in preparation for a future release. The @option{--enable-libgcj}
-option is disabled by default: IRIX 6 uses a very low default limit
-(20480) for the command line length. Although libtool contains a
-workaround for this problem, at least the N64 @samp{libgcj} is known not
-to build despite this, running into an internal error of the native
-@command{ld}. A sure fix is to increase this limit (@samp{ncargs}) to
-its maximum of 262144 bytes. If you have root access, you can use the
-@command{systune} command to do this.
-
-GCC does not correctly pass/return structures which are
-smaller than 16 bytes and which are not 8 bytes. The problem is very
-involved and difficult to fix. It affects a number of other targets also,
-but IRIX 6 is affected the most, because it is a 64 bit target, and 4 byte
-structures are common. The exact problem is that structures are being padded
-at the wrong end, e.g.@: a 4 byte structure is loaded into the lower 4 bytes
-of the register when it should be loaded into the upper 4 bytes of the
-register.
-
-GCC is consistent with itself, but not consistent with the SGI C compiler
-(and the SGI supplied runtime libraries), so the only failures that can
-happen are when there are library functions that take/return such
-structures. There are very few such library functions. Currently this
-is known to affect @code{inet_ntoa}, @code{inet_lnaof},
-@code{inet_netof}, @code{inet_makeaddr}, and @code{semctl}. Until the
-bug is fixed, GCC contains workarounds for the known affected functions.
-
-See @uref{http://freeware.sgi.com/,,http://freeware.sgi.com/} for more
-information about using GCC on IRIX platforms.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{mips-sony-sysv}mips-sony-sysv
-Sony MIPS NEWS@. This configuration is obsoleted in GCC 3.1.
-
-This works in NEWSOS 5.0.1, but not in 5.0.2 (which uses ELF instead of
-COFF)@. In particular, the linker does not like the code generated by
-GCC when shared libraries are linked in.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{ns32k-encore}ns32k-encore
-This configuration is obsoleted in GCC 3.1.
-
-Encore ns32000 system. Encore systems are supported only under BSD@.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{ns32k-*-genix}ns32k-*-genix
-National Semiconductor ns32000 system. This configuration is obsoleted
-in GCC 3.1.
-
-Genix has bugs in @code{alloca} and @code{malloc}; you must get the
-compiled versions of these from GNU Emacs.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{ns32k-sequent}ns32k-sequent
-This configuration is obsoleted in GCC 3.1.
-
-Go to the Berkeley universe before compiling.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{ns32k-utek}ns32k-utek
-UTEK ns32000 system (``merlin''). This configuration is obsoleted in
-GCC 3.1.
-
-The C compiler that comes with this system cannot compile GCC; contact
-@samp{tektronix!reed!mason} to get binaries of GCC for bootstrapping.
-
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{powerpc*-*-*}powerpc-*-*
-
-You can specify a default version for the @option{-mcpu=@var{cpu_type}}
-switch by using the configure option @option{--with-cpu-@var{cpu_type}}.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{powerpc-*-darwin*}powerpc-*-darwin*
-PowerPC running Darwin (Mac OS X kernel).
-
-GCC 3.0 does not support Darwin, but 3.1 and later releases will work.
-
-Pre-installed versions of Mac OS X may not include any developer tools,
-meaning that you will not be able to build GCC from source. Tool
-binaries are available at
-@uref{http://www.opensource.apple.com/projects/darwin} (free
-registration required).
-
-Versions of the assembler prior to ``cctools-364'' cannot handle the
-4-argument form of rlwinm and related mask-using instructions. Darwin
-1.3 (Mac OS X 10.0) uses cctools-353 for instance. To get cctools-364,
-check out @file{cctools} with tag @samp{Apple-364}, build it, and
-install the assembler as @file{usr/bin/as}. See
-@uref{http://www.opensource.apple.com/tools/cvs/docs.html} for details.
-
-Also, the default stack limit of 512K is too small, and a bootstrap will
-typically fail when self-compiling @file{expr.c}. Set the stack to 800K
-or more, for instance by doing @samp{limit stack 800}. It's also
-convenient to use the GNU preprocessor instead of Apple's during the
-first stage of bootstrapping; this is automatic when doing @samp{make
-bootstrap}, but to do it from the toplevel objdir you will need to say
-@samp{make CC='cc -no-cpp-precomp' bootstrap}.
-
-Note that the version of GCC shipped by Apple typically includes a
-number of extensions not available in a standard GCC release. These
-extensions are generally specific to Mac programming.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{powerpc-*-elf}powerpc-*-elf, powerpc-*-sysv4
-PowerPC system in big endian mode, running System V.4.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{powerpc-*-linux-gnu*}powerpc-*-linux-gnu*
-
-You will need
-@uref{ftp://ftp.kernel.org/pub/linux/devel/binutils,,binutils 2.12.90.0.7}
-or newer for a working GCC@.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{powerpc-*-netbsd*}powerpc-*-netbsd*
-PowerPC system in big endian mode running NetBSD@. To build the
-documentation you will need Texinfo version 4.1 (NetBSD 1.5.1 included
-Texinfo version 3.12).
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{powerpc-*-eabiaix}powerpc-*-eabiaix
-Embedded PowerPC system in big endian mode with @option{-mcall-aix} selected as
-the default.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{powerpc-*-eabisim}powerpc-*-eabisim
-Embedded PowerPC system in big endian mode for use in running under the
-PSIM simulator.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{powerpc-*-eabi}powerpc-*-eabi
-Embedded PowerPC system in big endian mode.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{powerpcle-*-elf}powerpcle-*-elf, powerpcle-*-sysv4
-PowerPC system in little endian mode, running System V.4.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{powerpcle-*-eabisim}powerpcle-*-eabisim
-Embedded PowerPC system in little endian mode for use in running under
-the PSIM simulator.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{powerpcle-*-eabi}powerpcle-*-eabi
-Embedded PowerPC system in little endian mode.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{powerpcle-*-winnt}powerpcle-*-winnt, powerpcle-*-pe
-PowerPC system in little endian mode running Windows NT@.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{romp-*-aos}romp-*-aos, romp-*-mach
-These configurations are obsoleted in GCC 3.1.
-
-We recommend you compile GCC with an earlier version of itself; if you
-compile GCC with @command{hc}, the Metaware compiler, it will work, but
-you will get mismatches between the stage 2 and stage 3 compilers in
-various files. These errors are minor differences in some
-floating-point constants and can be safely ignored; the stage 3 compiler
-is correct.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{s390-*-linux*}s390-*-linux*
-S/390 system running Linux for S/390@.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{s390x-*-linux*}s390x-*-linux*
-zSeries system (64 Bit) running Linux for zSeries@.
-
-@html
-</p>
-<hr>
-@end html
-@c Please use Solaris 2 to refer to all release of Solaris, starting
-@c with 2.0 until 2.6, 7, and 8. Solaris 1 was a marketing name for
-@c SunOS 4 releases which we don't use to avoid confusion. Solaris
-@c alone is too unspecific and must be avoided.
-@heading @anchor{*-*-solaris2*}*-*-solaris2*
-
-Sun does not ship a C compiler with Solaris 2. To bootstrap and install
-GCC you first have to install a pre-built compiler, see our
-@uref{binaries.html,,binaries page} for details.
-
-The Solaris 2 @command{/bin/sh} will often fail to configure
-@file{libstdc++-v3}, @file{boehm-gc} or
-@file{libjava}. If you encounter this problem, set @env{CONFIG_SHELL} to
-@command{/bin/ksh} in your environment and run @command{make bootstrap} again.
-Another possibility that sometimes helps is to remove
-@file{*-*-solaris2*/config.cache}.
-
-Solaris 2 comes with a number of optional OS packages. Some of these
-packages are needed to use GCC fully, namely @code{SUNWarc},
-@code{SUNWbtool}, @code{SUNWesu}, @code{SUNWhea}, @code{SUNWlibm},
-@code{SUNWsprot}, and @code{SUNWtoo}. If you did not install all
-optional packages when installing Solaris 2, you will need to verify that
-the packages that GCC needs are installed.
-
-To check whether an optional package is installed, use
-the @command{pkginfo} command. To add an optional package, use the
-@command{pkgadd} command. For further details, see the Solaris 2
-documentation.
-
-Trying to use the linker and other tools in
-@file{/usr/ucb} to install GCC has been observed to cause trouble.
-For example, the linker may hang indefinitely. The fix is to remove
-@file{/usr/ucb} from your @env{PATH}.
-
-All releases of GNU binutils prior to 2.11.2 have known bugs on this
-platform. We recommend the use of GNU binutils 2.11.2 or the vendor
-tools (Sun @command{as}, Sun @command{ld}).
-
-Sun bug 4296832 turns up when compiling X11 headers with GCC 2.95 or
-newer: @command{g++} will complain that types are missing. These headers assume
-that omitting the type means @code{int}; this assumption worked for C89 but
-is wrong for C++, and is now wrong for C99 also.
-
-@command{g++} accepts such (invalid) constructs with the option
-@option{-fpermissive}; it
-will assume that any missing type is @code{int} (as defined by C89).
-
-There are patches for Solaris 2.6 (105633-56 or newer for SPARC,
-106248-42 or newer for Intel), Solaris 7 (108376-21 or newer for SPARC,
-108377-20 for Intel), and Solaris 8 (108652-24 or newer for SPARC,
-108653-22 for Intel) that fix this bug.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{sparc-sun-solaris2*}sparc-sun-solaris2*
-
-When GCC is configured to use binutils 2.11.2 or later the binaries
-produced are smaller than the ones produced using Sun's native tools;
-this difference is quite significant for binaries containing debugging
-information.
-
-Sun @command{as} 4.x is broken in that it cannot cope with long symbol names.
-A typical error message might look similar to the following:
-
-@samp{/usr/ccs/bin/as: "/var/tmp/ccMsw135.s", line 11041:
-error: can't compute value of an expression involving an external symbol.}
-
-This is Sun bug 4237974. This is fixed with patch 108908-02 for Solaris
-2.6 and has been fixed in later (5.x) versions of the assembler,
-starting with Solaris 7.
-
-Starting with Solaris 7, the operating system is capable of executing
-64-bit SPARC V9 binaries. GCC 3.1 and later properly supports
-this; the @option{-m64} option enables 64-bit code generation.
-However, if all you want is code tuned for the UltraSPARC CPU, you
-should try the @option{-mtune=ultrasparc} option instead, which produces
-code that, unlike full 64-bit code, can still run on non-UltraSPARC
-machines.
-
-When configuring on a Solaris 7 or later system that is running a kernel
-that supports only 32-bit binaries, one must configure with
-@option{--disable-multilib}, since we will not be able to build the
-64-bit target libraries.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{sparc-sun-solaris2.7}sparc-sun-solaris2.7
-
-Sun patch 107058-01 (1999-01-13) for Solaris 7/SPARC triggers a bug in
-the dynamic linker. This problem (Sun bug 4210064) affects GCC 2.8
-and later, including all EGCS releases. Sun formerly recommended
-107058-01 for all Solaris 7 users, but around 1999-09-01 it started to
-recommend it only for people who use Sun's compilers.
-
-Here are some workarounds to this problem:
-@itemize @bullet
-@item
-Do not install Sun patch 107058-01 until after Sun releases a
-complete patch for bug 4210064. This is the simplest course to take,
-unless you must also use Sun's C compiler. Unfortunately 107058-01
-is preinstalled on some new Solaris 7-based hosts, so you may have to
-back it out.
-
-@item
-Copy the original, unpatched Solaris 7
-@command{/usr/ccs/bin/as} into
-@command{/usr/local/lib/gcc-lib/sparc-sun-solaris2.7/3.1/as},
-adjusting the latter name to fit your local conventions and software
-version numbers.
-
-@item
-Install Sun patch 106950-03 (1999-05-25) or later. Nobody with
-both 107058-01 and 106950-03 installed has reported the bug with GCC
-and Sun's dynamic linker. This last course of action is riskiest,
-for two reasons. First, you must install 106950 on all hosts that
-run code generated by GCC; it doesn't suffice to install it only on
-the hosts that run GCC itself. Second, Sun says that 106950-03 is
-only a partial fix for bug 4210064, but Sun doesn't know whether the
-partial fix is adequate for GCC@. Revision -08 or later should fix
-the bug. The current (as of 2001-09-24) revision is -14, and is included in
-the Solaris 7 Recommended Patch Cluster.
-@end itemize
-
-
-@html
-<p>
-<hr>
-@end html
-@heading @anchor{sparc-sun-sunos4*}sparc-sun-sunos4*
-
-A bug in the SunOS 4 linker will cause it to crash when linking
-@option{-fPIC} compiled objects (and will therefore not allow you to build
-shared libraries).
-
-To fix this problem you can either use the most recent version of
-binutils or get the latest SunOS 4 linker patch (patch ID 100170-10)
-from Sun's patch site.
-
-Sometimes on a Sun 4 you may observe a crash in the program
-@command{genflags} or @command{genoutput} while building GCC. This is said to
-be due to a bug in @command{sh}. You can probably get around it by running
-@command{genflags} or @command{genoutput} manually and then retrying the
-@command{make}.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{sparc-unknown-linux-gnulibc1}sparc-unknown-linux-gnulibc1
-
-It has been reported that you might need
-@uref{ftp://ftp.yggdrasil.com/private/hjl,,binutils 2.8.1.0.23}
-for this platform, too.
-
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{sparc-*-linux*}sparc-*-linux*
-
-GCC versions 3.0 and higher require binutils 2.11.2 and glibc 2.2.4
-or newer on this platform. All earlier binutils and glibc
-releases mishandled unaligned relocations on @code{sparc-*-*} targets.
-
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{sparc64-*-*}sparc64-*-*
-
-GCC version 2.95 is not able to compile code correctly for
-@code{sparc64} targets. Users of the Linux kernel, at least,
-can use the @code{sparc32} program to start up a new shell
-invocation with an environment that causes @command{configure} to
-recognize (via @samp{uname -a}) the system as @samp{sparc-*-*} instead.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{sparcv9-*-solaris2*}sparcv9-*-solaris2*
-
-The following compiler flags must be specified in the configure
-step in order to bootstrap this target with the Sun compiler:
-
-@example
- % CC="cc -xildoff -xarch=v9" @var{srcdir}/configure [@var{options}] [@var{target}]
-@end example
-
-@option{-xildoff} turns off the incremental linker, and @option{-xarch=v9}
-specifies the v9 architecture to the Sun linker and assembler.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{#*-*-sysv*}*-*-sysv*
-On System V release 3, you may get this error message
-while linking:
-
-@smallexample
-ld fatal: failed to write symbol name @var{something}
- in strings table for file @var{whatever}
-@end smallexample
-
-This probably indicates that the disk is full or your ulimit won't allow
-the file to be as large as it needs to be.
-
-This problem can also result because the kernel parameter @code{MAXUMEM}
-is too small. If so, you must regenerate the kernel and make the value
-much larger. The default value is reported to be 1024; a value of 32768
-is said to work. Smaller values may also work.
-
-On System V, if you get an error like this,
-
-@example
-/usr/local/lib/bison.simple: In function `yyparse':
-/usr/local/lib/bison.simple:625: virtual memory exhausted
-@end example
-
-@noindent
-that too indicates a problem with disk space, ulimit, or @code{MAXUMEM}.
-
-On a System V release 4 system, make sure @file{/usr/bin} precedes
-@file{/usr/ucb} in @code{PATH}. The @code{cc} command in
-@file{/usr/ucb} uses libraries which have bugs.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{vax-dec-ultrix}vax-dec-ultrix
-Don't try compiling with VAX C (@code{vcc}). It produces incorrect code
-in some cases (for example, when @code{alloca} is used).
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{we32k-*-*}we32k-*-*
-These computers are also known as the 3b2, 3b5, 3b20 and other similar
-names. (However, the 3b1 is actually a 68000.)
-These configurations are obsoleted in GCC 3.1.
-
-Don't use @option{-g} when compiling with the system's compiler. The
-system's linker seems to be unable to handle such a large program with
-debugging information.
-
-The system's compiler runs out of capacity when compiling @file{stmt.c}
-in GCC@. You can work around this by building @file{cpp} in GCC
-first, then use that instead of the system's preprocessor with the
-system's C compiler to compile @file{stmt.c}. Here is how:
-
-@smallexample
-mv /lib/cpp /lib/cpp.att
-cp cpp /lib/cpp.gnu
-echo '/lib/cpp.gnu -traditional $@{1+"$@@"@}' > /lib/cpp
-chmod +x /lib/cpp
-@end smallexample
-
-The system's compiler produces bad code for some of the GCC
-optimization files. So you must build the stage 2 compiler without
-optimization. Then build a stage 3 compiler with optimization.
-That executable should work. Here are the necessary commands:
-
-@smallexample
-make LANGUAGES=c CC=stage1/xgcc CFLAGS="-Bstage1/ -g"
-make stage2
-make CC=stage2/xgcc CFLAGS="-Bstage2/ -g -O"
-@end smallexample
-
-You may need to raise the ULIMIT setting to build a C++ compiler,
-as the file @file{cc1plus} is larger than one megabyte.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{xtensa-*-elf}xtensa-*-elf
-
-This target is intended for embedded Xtensa systems using the
-@samp{newlib} C library. It uses ELF but does not support shared
-objects. Designed-defined instructions specified via the
-Tensilica Instruction Extension (TIE) language are only supported
-through inline assembly.
-
-The Xtensa configuration information must be specified prior to
-building GCC@. The @file{gcc/config/xtensa/xtensa-config.h} header
-file contains the configuration information. If you created your
-own Xtensa configuration with the Xtensa Processor Generator, the
-downloaded files include a customized copy of this header file,
-which you can use to replace the default header file.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{xtensa-*-linux*}xtensa-*-linux*
-
-This target is for Xtensa systems running GNU/Linux. It supports ELF
-shared objects and the GNU C library (glibc). It also generates
-position-independent code (PIC) regardless of whether the
-@option{-fpic} or @option{-fPIC} options are used. In other
-respects, this target is the same as the
-@uref{#xtensa-*-elf,,@samp{xtensa-*-elf}} target.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{windows}Microsoft Windows (32 bit)
-
-A port of GCC 2.95.x is included with the
-@uref{http://www.cygwin.com/,,Cygwin environment}.
-
-Current (as of early 2001) snapshots of GCC will build under Cygwin
-without modification.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{os2}OS/2
-
-GCC does not currently support OS/2. However, Andrew Zabolotny has been
-working on a generic OS/2 port with pgcc. The current code can be found
-at @uref{http://www.goof.com/pcg/os2/,,http://www.goof.com/pcg/os2/}.
-
-An older copy of GCC 2.8.1 is included with the EMX tools available at
-@uref{ftp://ftp.leo.org/pub/comp/os/os2/leo/devtools/emx+gcc/,,
-ftp://ftp.leo.org/pub/comp/os/os2/leo/devtools/emx+gcc/}.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{older}Older systems
-
-GCC contains support files for many older (1980s and early
-1990s) Unix variants. For the most part, support for these systems
-has not been deliberately removed, but it has not been maintained for
-several years and may suffer from bitrot. Support from some systems
-has been removed from GCC 3: fx80, ns32-ns-genix, pyramid, tahoe,
-gmicro, spur; most of these targets had not been updated since GCC
-version 1.
-
-We are planning to remove support for more older systems, starting in
-GCC 3.1. Each release will have a list of ``obsoleted'' systems.
-Support for these systems is still present in that release, but
-@command{configure} will fail unless the @option{--enable-obsolete}
-option is given. Unless a maintainer steps forward, support for
-these systems will be removed from the next release of GCC@.
-
-Support for older systems as targets for cross-compilation is less
-problematic than support for them as hosts for GCC; if an enthusiast
-wishes to make such a target work again (including resurrecting any
-of the targets that never worked with GCC 2, starting from the last
-CVS version before they were removed), patches
-@uref{../contribute.html,,following the usual requirements}
-would be likely to be accepted, since they should not affect the
-support for more modern targets.
-
-Support for old systems as hosts for GCC can cause problems if the
-workarounds for compiler, library and operating system bugs affect the
-cleanliness or maintainability of the rest of GCC@. In some cases, to
-bring GCC up on such a system, if still possible with current GCC, may
-require first installing an old version of GCC which did work on that
-system, and using it to compile a more recent GCC, to avoid bugs in
-the vendor compiler. Old releases of GCC 1 and GCC 2 are available in
-the @file{old-releases} directory on the
-@uref{../mirrors.html,,GCC mirror sites}. Header bugs may generally
-be avoided using @command{fixincludes}, but bugs or deficiencies in
-libraries and the operating system may still cause problems.
-
-For some systems, old versions of GNU binutils may also be useful,
-and are available from @file{pub/binutils/old-releases} on
-@uref{http://sources.redhat.com/mirrors.html,,sources.redhat.com mirror sites}.
-
-Some of the information on specific systems above relates to
-such older systems, but much of the information
-about GCC on such systems (which may no longer be applicable to
-current GCC) is to be found in the GCC texinfo manual.
-
-@html
-</p>
-<hr>
-@end html
-@heading @anchor{elf_targets}all ELF targets (SVR4, Solaris 2, etc.)
-
-C++ support is significantly better on ELF targets if you use the
-@uref{./configure.html#with-gnu-ld,,GNU linker}; duplicate copies of
-inlines, vtables and template instantiations will be discarded
-automatically.
-
-
-@html
-</p>
-<hr>
-<p>
-@end html
-@ifhtml
-@uref{./index.html,,Return to the GCC Installation page}
-@end ifhtml
-@end ifset
-
-@c ***Old documentation******************************************************
-@ifset oldhtml
-@include install-old.texi
-@html
-</p>
-<hr>
-<p>
-@end html
-@ifhtml
-@uref{./index.html,,Return to the GCC Installation page}
-@end ifhtml
-@end ifset
-
-@c ***GFDL********************************************************************
-@ifset gfdlhtml
-@include fdl.texi
-@html
-</p>
-<hr>
-<p>
-@end html
-@ifhtml
-@uref{./index.html,,Return to the GCC Installation page}
-@end ifhtml
-@end ifset
-
-@c ***************************************************************************
-@c Part 6 The End of the Document
-@ifinfo
-@comment node-name, next, previous, up
-@node Concept Index, , GNU Free Documentation License, Top
-@end ifinfo
-
-@ifinfo
-@unnumbered Concept Index
-
-@printindex cp
-
-@contents
-@end ifinfo
-@bye
diff --git a/contrib/gcc/doc/install.texi2html b/contrib/gcc/doc/install.texi2html
deleted file mode 100755
index 3917e2af33e8..000000000000
--- a/contrib/gcc/doc/install.texi2html
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/bin/sh
-#
-# Convert the GCC install documentation from texinfo format to HTML.
-#
-# $SOURCEDIR and $DESTDIR, resp., refer to the directory containing
-# the texinfo source and the directory to put the HTML version in.
-#
-# (C) 2001 Free Software Foundation
-# Originally by Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>, June 2001.
-#
-# This script is Free Software, and it can be copied, distributed and
-# modified as defined in the GNU General Public License. A copy of
-# its license can be downloaded from http://www.gnu.org/copyleft/gpl.html
-
-SOURCEDIR=${SOURCEDIR-.}
-DESTDIR=${DESTDIR-HTML}
-
-MAKEINFO=${MAKEINFO-makeinfo}
-
-if [ ! -d $DESTDIR ]; then
- mkdir -p $DESTDIR
-fi
-
-for x in index.html specific.html download.html configure.html \
- build.html test.html finalinstall.html binaries.html old.html \
- gfdl.html
-do
- define=`echo $x | sed -e 's/\.//g'`
- echo "define = $define"
- $MAKEINFO -I $SOURCEDIR -I $SOURCEDIR/include $SOURCEDIR/install.texi --html --no-split -D$define -o$DESTDIR/$x
-done
diff --git a/contrib/gcc/f/g77.1 b/contrib/gcc/f/g77.1
deleted file mode 100644
index 3f20af9fffd4..000000000000
--- a/contrib/gcc/f/g77.1
+++ /dev/null
@@ -1,365 +0,0 @@
-.\" Copyright (c) 1995-1997 Free Software Foundation -*-Text-*-
-.\" See section COPYING for conditions for redistribution
-.\" FIXME: no info here on predefines. Should there be? extra for F77...
-.TH G77 1 "1999-02-14" "GNU Tools" "GNU Tools"
-.de BP
-.sp
-.ti \-.2i
-\(**
-..
-.SH NAME
-g77 \- GNU project Fortran Compiler (v0.5.24)
-.SH SYNOPSIS
-.RB g77 " [" \c
-.IR option " | " "filename " ].\|.\|.
-.SH WARNING
-The information in this man page is an extract from the full
-documentation of the GNU Fortran compiler (version 0.5.24),
-and is limited to the meaning of some of the options.
-.PP
-This man page is not up to date, since no volunteers want to
-maintain it. If you find a discrepancy between the man page and the
-software, please check the Info file, which is the authoritative
-documentation.
-.\" .PP
-.\" The version of GNU Fortran documented by the Info file is 0.5.24,
-.\" which includes substantial improvements and changes since 0.5.24,
-.\" the version documented in this man page.
-.PP
-If we find that the things in this man page that are out of date cause
-significant confusion or complaints, we will stop distributing the man
-page. The alternative, updating the man page when we update the Info
-file, is impractical because the rest of the work of maintaining GNU Fortran
-leaves us no time for that. The GNU project regards man pages as
-obsolete and should not let them take time away from other things.
-.PP
-For complete and current documentation, refer to the Info file `\|\c
-.B g77\c
-\&\|' or the manual
-.I
-Using and Porting GNU Fortran (for version 0.5.24)\c
-\&. Both are made from the Texinfo source file
-.BR g77.texi .
-.PP
-If your system has the `\|\c
-.B info\c
-\&\|' command installed, the command `\|\c
-.B info g77\c
-\&\|' should work, unless
-.B g77
-has not been properly installed.
-If your system lacks `\|\c
-.B info\c
-\&\|', or you wish to avoid using it for now,
-the command `\|\c
-.B more /usr/info/g77.info*\c
-\&\|' should work, unless
-.B g77
-has not been properly installed.
-.PP
-If
-.B g77
-has not been properly installed, so that you
-cannot easily access the Info file for it,
-ask your system administrator, or the installer
-of
-.B g77
-(if you know who that is) to fix the problem.
-.SH DESCRIPTION
-The C and F77 compilers are integrated;
-.B g77
-is a program to call
-.B gcc
-with options to recognize programs written in Fortran (ANSI FORTRAN 77,
-also called F77).
-.B gcc
-processes input files
-through one or more of four stages: preprocessing, compilation,
-assembly, and linking. This man page contains full descriptions for
-.I only
-F77-specific aspects of the compiler, though it also contains
-summaries of some general-purpose options. For a fuller explanation
-of the compiler, see
-.BR gcc ( 1 ).
-
-For complete documentation on GNU Fortran, type `\|\c
-.B info g77\c
-\&\|'.
-
-F77 source files use the suffix `\|\c
-.B .f\c
-\&\|', `\|\c
-.B .for\c
-\&\|', or `\|\c
-.B .FOR\c
-\&\|'; F77 files to be preprocessed by
-.BR cpp ( 1 )
-use the suffix `\|\c
-.B .F\c
-\&\|', `\|\c
-.B .fpp\c
-\&\|', or `\|\c
-.B .FPP\c
-\&\|'; Ratfor source files use the suffix `\|\c
-.B .r\c
-\&\|' (though
-.B ratfor
-itself is not supplied as part of
-.B g77\c
-\&).
-.SH OPTIONS
-There are many command-line options, including options to control
-details of optimization, warnings, and code generation, which are
-common to both
-.B gcc
-and
-.B g77\c
-\&. For full information on all options, see
-.BR gcc ( 1 ).
-
-Options must be separate: `\|\c
-.B \-dr\c
-\&\|' is quite different from `\|\c
-.B \-d \-r
-\&\|'.
-
-Most `\|\c
-.B \-f\c
-\&\|' and `\|\c
-.B \-W\c
-\&\|' options have two contrary forms:
-.BI \-f name
-and
-.BI \-fno\- name\c
-\& (or
-.BI \-W name
-and
-.BI \-Wno\- name\c
-\&). Only the non-default forms are shown here.
-
-.TP
-.B \-c
-Compile or assemble the source files, but do not link. The compiler
-output is an object file corresponding to each source file.
-.TP
-.BI \-D macro
-Define macro \c
-.I macro\c
-\& with the string `\|\c
-.B 1\c
-\&\|' as its definition.
-.TP
-.BI \-D macro = defn
-Define macro \c
-.I macro\c
-\& as \c
-.I defn\c
-\&.
-.TP
-.B \-E
-Stop after the preprocessing stage; do not run the compiler proper. The
-output is preprocessed source code, which is sent to the
-standard output.
-.TP
-.B \-g
-Produce debugging information in the operating system's native format
-(for DBX or SDB or DWARF). GDB also can work with this debugging
-information. On most systems that use DBX format, `\|\c
-.B \-g\c
-\&\|' enables use
-of extra debugging information that only GDB can use.
-
-Unlike most other Fortran compilers, GNU Fortran allows you to use `\|\c
-.B \-g\c
-\&\|' with
-`\|\c
-.B \-O\c
-\&\|'. The shortcuts taken by optimized code may occasionally
-produce surprising results: some variables you declared may not exist
-at all; flow of control may briefly move where you did not expect it;
-some statements may not be executed because they compute constant
-results or their values were already at hand; some statements may
-execute in different places because they were moved out of loops.
-
-Nevertheless it proves possible to debug optimized output. This makes
-it reasonable to use the optimizer for programs that might have bugs.
-.TP
-.BI "\-I" "dir"\c
-\&
-Append directory \c
-.I dir\c
-\& to the list of directories searched for include files.
-.TP
-.BI "\-L" "dir"\c
-\&
-Add directory \c
-.I dir\c
-\& to the list of directories to be searched
-for `\|\c
-.B \-l\c
-\&\|'.
-.TP
-.BI \-l library\c
-\&
-Use the library named \c
-.I library\c
-\& when linking.
-.TP
-.B \-nostdinc
-Do not search the standard system directories for header files. Only
-the directories you have specified with
-.B \-I
-options (and the current directory, if appropriate) are searched.
-.TP
-.B \-O
-Optimize. Optimizing compilation takes somewhat more time, and a lot
-more memory for a large function. See the GCC documentation for
-further optimisation options. Loop unrolling, in particular, may be
-worth investigating for typical numerical Fortran programs.
-.TP
-.BI "\-o " file\c
-\&
-Place output in file \c
-.I file\c
-\&.
-.TP
-.B \-S
-Stop after the stage of compilation proper; do not assemble. The output
-is an assembler code file for each non-assembler input
-file specified.
-.TP
-.BI \-U macro
-Undefine macro \c
-.I macro\c
-\&.
-.TP
-.B \-v
-Print (on standard error output) the commands executed to run the
-stages of compilation. Also print the version number of the compiler
-driver program and of the preprocessor and the compiler proper. The
-version numbers of g77 itself and the GCC distribution on which it is
-based are distinct.
-.TP
-.B \-Wall
-Issue warnings for conditions which pertain to usage that we recommend
-avoiding and that we believe is easy to avoid, even in conjunction
-with macros.
-.PP
-
-.SH FILES
-.ta \w'LIBDIR/g77\-include 'u
-file.h C header (preprocessor) file
-.br
-file.f Fortran source file
-.br
-file.for Fortran source file
-.br
-file.FOR Fortran source file
-.br
-file.F preprocessed Fortran source file
-.br
-file.fpp preprocessed Fortran source file
-.br
-file.FPP preprocessed Fortran source file
-.br
-file.r Ratfor source file (ratfor not included)
-.br
-file.s assembly language file
-.br
-file.o object file
-.br
-a.out link edited output
-.br
-\fITMPDIR\fR/cc\(** temporary files
-.br
-\fILIBDIR\fR/cpp preprocessor
-.br
-\fILIBDIR\fR/f771 compiler
-.br
-\fILIBDIR\fR/libg2c.a Fortran run-time library
-.br
-\fILIBDIR\fR/libgcc.a GCC subroutine library
-.br
-/lib/crt[01n].o start-up routine
-.br
-/lib/libc.a standard C library, see
-.IR intro (3)
-.br
-/usr/include standard directory for
-.B #include
-files
-.br
-\fILIBDIR\fR/include standard gcc directory for
-.B #include
-.br
- files.
-.sp
-.I LIBDIR
-is usually
-.B /usr/local/lib/\c
-.IR machine / version .
-.sp
-.I TMPDIR
-comes from the environment variable
-.B TMPDIR
-(default
-.B /usr/tmp
-if available, else
-.B /tmp\c
-\&).
-.SH "SEE ALSO"
-gcc(1), cpp(1), as(1), ld(1), gdb(1), adb(1), dbx(1), sdb(1).
-.br
-.RB "`\|" g77 "\|', `\|" gcc "\|', `\|" cpp "\|',"
-.RB "`\|" as "\|', `\|" ld "\|',"
-and
-.RB "`\|" gdb "\|'"
-entries in
-.B info\c
-\&.
-.br
-.I
-Using and Porting GNU Fortran (for version 0.5.24)\c
-, James Craig Burley;
-.I
-Using and Porting GNU CC (for version 2.0)\c
-, Richard M. Stallman;
-.I
-The C Preprocessor\c
-, Richard M. Stallman;
-.I
-Debugging with GDB: the GNU Source-Level Debugger\c
-, Richard M. Stallman and Roland H. Pesch;
-.I
-Using as: the GNU Assembler\c
-, Dean Elsner, Jay Fenlason & friends;
-.I
-gld: the GNU linker\c
-, Steve Chamberlain and Roland Pesch.
-
-.SH BUGS
-For instructions on how to report bugs, type `\|\c
-.B info g77 -n Bugs\c
-\&\|'.
-
-.SH COPYING
-Copyright (c) 1991-1998 Free Software Foundation, Inc.
-.PP
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-.PP
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-.PP
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-.SH AUTHORS
-See the GNU CC Manual for the contributors to GNU CC.
-See the GNU Fortran Manual for the contributors to
-GNU Fortran.
diff --git a/contrib/gcc/gcc.1 b/contrib/gcc/gcc.1
deleted file mode 100644
index 74200a1a169e..000000000000
--- a/contrib/gcc/gcc.1
+++ /dev/null
@@ -1,4191 +0,0 @@
-.\" Copyright (c) 1991, 1992, 1993, 1994 Free Software Foundation -*-Text-*-
-.\" See section COPYING for conditions for redistribution
-.\"
-.\" Set up \*(lq, \*(rq if -man hasn't already set it up.
-.if @@\*(lq@ \{\
-. ds lq "
-. if t .ds lq ``
-. if !@@\(lq@ .ds lq "\(lq
-.\}
-.if @@\*(rq@ \{\
-. ds rq "
-. if t .ds rq ''
-. if !@@\(rq@ .ds rq "\(rq
-.\}
-.de Id
-.ds Rv \\$3
-.ds Dt \\$4
-..
-.de Sp
-.if n .sp
-.if t .sp 0.4
-..
-.Id $Id: gcc.1,v 1.9 1998/12/16 20:55:57 law Exp $
-.TH GCC 1 "\*(Dt" "GNU Tools" "GNU Tools"
-.SH NAME
-gcc, g++ \- GNU project C and C++ Compiler (gcc-2.95)
-.SH SYNOPSIS
-.B gcc
-.RI "[ " option " | " filename " ].\|.\|."
-.br
-.B g++
-.RI "[ " option " | " filename " ].\|.\|."
-.SH WARNING
-The information in this man page is an extract from the full
-documentation of the GNU C compiler, and is limited to the meaning of
-the options.
-.PP
-This man page is not kept up to date except when volunteers want to
-maintain it. If you find a discrepancy between the man page and the
-software, please check the Info file, which is the authoritative
-documentation.
-.PP
-If we find that the things in this man page that are out of date cause
-significant confusion or complaints, we will stop distributing the man
-page. The alternative, updating the man page when we update the Info
-file, is impossible because the rest of the work of maintaining GNU CC
-leaves us no time for that. The GNU project regards man pages as
-obsolete and should not let them take time away from other things.
-.PP
-For complete and current documentation, refer to the Info file `\|\c
-.B gcc\c
-\&\|' or the manual
-.I
-Using and Porting GNU CC (for version 2.0)\c
-\&. Both are made from the Texinfo source file
-.BR gcc.texinfo .
-.SH DESCRIPTION
-The C and C++ compilers are integrated. Both process input files
-through one or more of four stages: preprocessing, compilation,
-assembly, and linking. Source filename suffixes identify the source
-language, but which name you use for the compiler governs default
-assumptions:
-.TP
-.B gcc
-assumes preprocessed (\c
-.B .i\c
-\&) files are C and assumes C style linking.
-.TP
-.B g++
-assumes preprocessed (\c
-.B .i\c
-\&) files are C++ and assumes C++ style linking.
-.PP
-Suffixes of source file names indicate the language and kind of
-processing to be done:
-.Sp
-.nf
-.ta \w'\fB.cxx\fP 'u
-\&\fB.c\fP C source; preprocess, compile, assemble
-\&\fB.C\fP C++ source; preprocess, compile, assemble
-\&\fB.cc\fP C++ source; preprocess, compile, assemble
-\&\fB.cxx\fP C++ source; preprocess, compile, assemble
-\&\fB.m\fP Objective-C source; preprocess, compile, assemble
-\&\fB.i\fP preprocessed C; compile, assemble
-\&\fB.ii\fP preprocessed C++; compile, assemble
-\&\fB.s\fP Assembler source; assemble
-\&\fB.S\fP Assembler source; preprocess, assemble
-\&\fB.h\fP Preprocessor file; not usually named on command line
-.Sp
-.fi
-Files with other suffixes are passed to the linker. Common cases include:
-.Sp
-.nf
-\&\fB.o\fP Object file
-\&\fB.a\fP Archive file
-.br
-.fi
-.Sp
-Linking is always the last stage unless you use one of the
-.BR \-c ,
-.BR \-S ,
-or
-.B \-E
-options to avoid it (or unless compilation errors stop the whole
-process). For the link stage, all
-.B .o
-files corresponding to source files,
-.B \-l
-libraries, unrecognized filenames (including named
-.B .o
-object files and
-.B .a
-archives)
-are passed to the linker in command-line order.
-.SH OPTIONS
-Options must be separate: `\|\c
-.B \-dr\c
-\&\|' is quite different from `\|\c
-.B \-d \-r
-\&\|'.
-.PP
-Most `\|\c
-.B \-f\c
-\&\|' and `\|\c
-.B \-W\c
-\&\|' options have two contrary forms:
-.BI \-f name
-and
-.BI \-fno\- name\c
-\& (or
-.BI \-W name
-and
-.BI \-Wno\- name\c
-\&). Only the non-default forms are shown here.
-.PP
-Here is a summary of all the options, grouped by type. Explanations are
-in the following sections.
-.hy 0
-.na
-.TP
-.B Overall Options
-.br
-\-c
-\-S
-\-E
-.RI "\-o " file
-\-pipe
-\-v
-.RI "\-x " language
-.TP
-.B Language Options
-\-ansi
-\-fall\-virtual
-\-fcond\-mismatch
-\-fdollars\-in\-identifiers
-\-fenum\-int\-equiv
-\-fexternal\-templates
-\-fno\-asm
-\-fno\-builtin
-\-fhosted
-\-fno\-hosted
-\-ffreestanding
-\-fno\-freestanding
-\-fno\-strict\-prototype
-\-fsigned\-bitfields
-\-fsigned\-char
-\-fthis\-is\-variable
-\-funsigned\-bitfields
-\-funsigned\-char
-\-fwritable\-strings
-\-traditional
-\-traditional\-cpp
-\-trigraphs
-.TP
-.B Warning Options
-\-fsyntax\-only
-\-pedantic
-\-pedantic\-errors
-\-w
-\-W
-\-Wall
-\-Waggregate\-return
-\-Wcast\-align
-\-Wcast\-qual
-\-Wchar\-subscript
-\-Wcomment
-\-Wconversion
-\-Wenum\-clash
-\-Werror
-\-Wformat
-.RI \-Wid\-clash\- len
-\-Wimplicit
-\-Wimplicit\-int
-\-Wimplicit\-function\-declaration
-\-Winline
-\-Wlong\-long
-\-Wmain
-\-Wmissing\-prototypes
-\-Wmissing\-declarations
-\-Wnested\-externs
-\-Wno\-import
-\-Wparentheses
-\-Wpointer\-arith
-\-Wredundant\-decls
-\-Wreturn\-type
-\-Wshadow
-\-Wstrict\-prototypes
-\-Wswitch
-\-Wtemplate\-debugging
-\-Wtraditional
-\-Wtrigraphs
-\-Wuninitialized
-\-Wunused
-\-Wwrite\-strings
-.TP
-.B Debugging Options
-\-a
-.RI \-d letters
-\-fpretend\-float
-\-g
-.RI \-g level
-\-gcoff
-\-gxcoff
-\-gxcoff+
-\-gdwarf
-\-gdwarf+
-\-gstabs
-\-gstabs+
-\-ggdb
-\-p
-\-pg
-\-save\-temps
-.RI \-print\-file\-name= library
-\-print\-libgcc\-file\-name
-.RI \-print\-prog\-name= program
-.TP
-.B Optimization Options
-\-fcaller\-saves
-\-fcse\-follow\-jumps
-\-fcse\-skip\-blocks
-\-fdelayed\-branch
-\-felide\-constructors
-\-fexpensive\-optimizations
-\-ffast\-math
-\-ffloat\-store
-\-fforce\-addr
-\-fforce\-mem
-\-finline\-functions
-\-fkeep\-inline\-functions
-\-fmemoize\-lookups
-\-fno\-default\-inline
-\-fno\-defer\-pop
-\-fno\-function\-cse
-\-fno\-inline
-\-fno\-peephole
-\-fomit\-frame\-pointer
-\-frerun\-cse\-after\-loop
-\-fschedule\-insns
-\-fschedule\-insns2
-\-fstrength\-reduce
-\-fthread\-jumps
-\-funroll\-all\-loops
-\-funroll\-loops
-\-O
-\-O2
-\-O3
-.TP
-.B Preprocessor Options
-.RI \-A assertion
-\-C
-\-dD
-\-dM
-\-dN
-.RI \-D macro [\|= defn \|]
-\-E
-\-H
-.RI "\-idirafter " dir
-.RI "\-include " file
-.RI "\-imacros " file
-.RI "\-iprefix " file
-.RI "\-iwithprefix " dir
-\-M
-\-MD
-\-MM
-\-MMD
-\-nostdinc
-\-P
-.RI \-U macro
-\-undef
-.TP
-.B Assembler Option
-.RI \-Wa, option
-.TP
-.B Linker Options
-.RI \-l library
-\-nostartfiles
-\-nostdlib
-\-static
-\-shared
-\-symbolic
-.RI "\-Xlinker\ " option
-.RI \-Wl, option
-.RI "\-u " symbol
-.TP
-.B Directory Options
-.RI \-B prefix
-.RI \-I dir
-\-I\-
-.RI \-L dir
-.TP
-.B Target Options
-.RI "\-b " machine
-.RI "\-V " version
-.TP
-.B Configuration Dependent Options
-.I M680x0\ Options
-.br
-\-m68000
-\-m68020
-\-m68020\-40
-\-m68030
-\-m68040
-\-m68881
-\-mbitfield
-\-mc68000
-\-mc68020
-\-mfpa
-\-mnobitfield
-\-mrtd
-\-mshort
-\-msoft\-float
-.Sp
-.I VAX Options
-.br
-\-mg
-\-mgnu
-\-munix
-.Sp
-.I SPARC Options
-.br
-\-mepilogue
-\-mfpu
-\-mhard\-float
-\-mno\-fpu
-\-mno\-epilogue
-\-msoft\-float
-\-msparclite
-\-mv8
-\-msupersparc
-\-mcypress
-.Sp
-.I Convex Options
-.br
-\-margcount
-\-mc1
-\-mc2
-\-mnoargcount
-.Sp
-.I AMD29K Options
-.br
-\-m29000
-\-m29050
-\-mbw
-\-mdw
-\-mkernel\-registers
-\-mlarge
-\-mnbw
-\-mnodw
-\-msmall
-\-mstack\-check
-\-muser\-registers
-.Sp
-.I M88K Options
-.br
-\-m88000
-\-m88100
-\-m88110
-\-mbig\-pic
-\-mcheck\-zero\-division
-\-mhandle\-large\-shift
-\-midentify\-revision
-\-mno\-check\-zero\-division
-\-mno\-ocs\-debug\-info
-\-mno\-ocs\-frame\-position
-\-mno\-optimize\-arg\-area
-\-mno\-serialize\-volatile
-\-mno\-underscores
-\-mocs\-debug\-info
-\-mocs\-frame\-position
-\-moptimize\-arg\-area
-\-mserialize\-volatile
-.RI \-mshort\-data\- num
-\-msvr3
-\-msvr4
-\-mtrap\-large\-shift
-\-muse\-div\-instruction
-\-mversion\-03.00
-\-mwarn\-passed\-structs
-.Sp
-.I RS6000 Options
-.br
-\-mfp\-in\-toc
-\-mno\-fop\-in\-toc
-.Sp
-.I RT Options
-.br
-\-mcall\-lib\-mul
-\-mfp\-arg\-in\-fpregs
-\-mfp\-arg\-in\-gregs
-\-mfull\-fp\-blocks
-\-mhc\-struct\-return
-\-min\-line\-mul
-\-mminimum\-fp\-blocks
-\-mnohc\-struct\-return
-.Sp
-.I MIPS Options
-.br
-\-mcpu=\fIcpu type\fP
-\-mips2
-\-mips3
-\-mint64
-\-mlong64
-\-mlonglong128
-\-mmips\-as
-\-mgas
-\-mrnames
-\-mno\-rnames
-\-mgpopt
-\-mno\-gpopt
-\-mstats
-\-mno\-stats
-\-mmemcpy
-\-mno\-memcpy
-\-mno\-mips\-tfile
-\-mmips\-tfile
-\-msoft\-float
-\-mhard\-float
-\-mabicalls
-\-mno\-abicalls
-\-mhalf\-pic
-\-mno\-half\-pic
-\-G \fInum\fP
-\-nocpp
-.Sp
-.I i386 Options
-.br
-\-m486
-\-mno\-486
-\-msoft\-float
-\-mno\-fp\-ret\-in\-387
-.Sp
-.I HPPA Options
-.br
-\-mpa\-risc\-1\-0
-\-mpa\-risc\-1\-1
-\-mkernel
-\-mshared\-libs
-\-mno\-shared\-libs
-\-mlong\-calls
-\-mdisable\-fpregs
-\-mdisable\-indexing
-\-mtrailing\-colon
-.Sp
-.I i960 Options
-.br
-\-m\fIcpu-type\fP
-\-mnumerics
-\-msoft\-float
-\-mleaf\-procedures
-\-mno\-leaf\-procedures
-\-mtail\-call
-\-mno\-tail\-call
-\-mcomplex\-addr
-\-mno\-complex\-addr
-\-mcode\-align
-\-mno\-code\-align
-\-mic\-compat
-\-mic2.0\-compat
-\-mic3.0\-compat
-\-masm\-compat
-\-mintel\-asm
-\-mstrict\-align
-\-mno\-strict\-align
-\-mold\-align
-\-mno\-old\-align
-.Sp
-.I DEC Alpha Options
-.br
-\-mfp\-regs
-\-mno\-fp\-regs
-\-mno\-soft\-float
-\-msoft\-float
-.Sp
-.I System V Options
-.br
-\-G
-\-Qy
-\-Qn
-.RI \-YP, paths
-.RI \-Ym, dir
-.TP
-.B Code Generation Options
-.RI \-fcall\-saved\- reg
-.RI \-fcall\-used\- reg
-.RI \-ffixed\- reg
-\-finhibit\-size\-directive
-\-fnonnull\-objects
-\-fno\-common
-\-fno\-ident
-\-fno\-gnu\-linker
-\-fpcc\-struct\-return
-\-fpic
-\-fPIC
-\-freg\-struct\-return
-\-fshared\-data
-\-fshort\-enums
-\-fshort\-double
-\-fvolatile
-\-fvolatile\-global
-\-fverbose\-asm
-.ad b
-.hy 1
-.SH OVERALL OPTIONS
-.TP
-.BI "\-x " "language"
-Specify explicitly the
-.I language\c
-\& for the following input files (rather than choosing a default based
-on the file name suffix) . This option applies to all following input
-files until the next `\|\c
-.B \-x\c
-\&\|' option. Possible values of \c
-.I language\c
-\& are
-`\|\c
-.B c\c
-\&\|', `\|\c
-.B objective\-c\c
-\&\|', `\|\c
-.B c\-header\c
-\&\|', `\|\c
-.B c++\c
-\&\|',
-`\|\c
-.B cpp\-output\c
-\&\|', `\|\c
-.B assembler\c
-\&\|', and `\|\c
-.B assembler\-with\-cpp\c
-\&\|'.
-.TP
-.B \-x none
-Turn off any specification of a language, so that subsequent files are
-handled according to their file name suffixes (as they are if `\|\c
-.B \-x\c
-\&\|'
-has not been used at all).
-.PP
-If you want only some of the four stages (preprocess, compile,
-assemble, link), you can use
-`\|\c
-.B \-x\c
-\&\|' (or filename suffixes) to tell \c
-.B gcc\c
-\& where to start, and
-one of the options `\|\c
-.B \-c\c
-\&\|', `\|\c
-.B \-S\c
-\&\|', or `\|\c
-.B \-E\c
-\&\|' to say where
-.B gcc\c
-\& is to stop. Note that some combinations (for example,
-`\|\c
-.B \-x cpp\-output \-E\c
-\&\|') instruct \c
-.B gcc\c
-\& to do nothing at all.
-.TP
-.B \-c
-Compile or assemble the source files, but do not link. The compiler
-output is an object file corresponding to each source file.
-.Sp
-By default, GCC makes the object file name for a source file by replacing
-the suffix `\|\c
-.B .c\c
-\&\|', `\|\c
-.B .i\c
-\&\|', `\|\c
-.B .s\c
-\&\|', etc., with `\|\c
-.B .o\c
-\&\|'. Use
-.B \-o\c
-\& to select another name.
-.Sp
-GCC ignores any unrecognized input files (those that do not require
-compilation or assembly) with the
-.B \-c
-option.
-.TP
-.B \-S
-Stop after the stage of compilation proper; do not assemble. The output
-is an assembler code file for each non-assembler input
-file specified.
-.Sp
-By default, GCC makes the assembler file name for a source file by
-replacing the suffix `\|\c
-.B .c\c
-\&\|', `\|\c
-.B .i\c
-\&\|', etc., with `\|\c
-.B .s\c
-\&\|'. Use
-.B \-o\c
-\& to select another name.
-.Sp
-GCC ignores any input files that don't require compilation.
-.TP
-.B \-E
-Stop after the preprocessing stage; do not run the compiler proper. The
-output is preprocessed source code, which is sent to the
-standard output.
-.Sp
-GCC ignores input files which don't require preprocessing.
-.TP
-.BI "\-o " file
-Place output in file \c
-.I file\c
-\&. This applies regardless to whatever
-sort of output GCC is producing, whether it be an executable file,
-an object file, an assembler file or preprocessed C code.
-.Sp
-Since only one output file can be specified, it does not make sense to
-use `\|\c
-.B \-o\c
-\&\|' when compiling more than one input file, unless you are
-producing an executable file as output.
-.Sp
-If you do not specify `\|\c
-.B \-o\c
-\&\|', the default is to put an executable file
-in `\|\c
-.B a.out\c
-\&\|', the object file for `\|\c
-.I source\c
-.B \&.\c
-.I suffix\c
-\&\c
-\&\|' in
-`\|\c
-.I source\c
-.B \&.o\c
-\&\|', its assembler file in `\|\c
-.I source\c
-.B \&.s\c
-\&\|', and
-all preprocessed C source on standard output.
-.TP
-.B \-v
-Print (on standard error output) the commands executed to run the stages
-of compilation. Also print the version number of the compiler driver
-program and of the preprocessor and the compiler proper.
-.TP
-.B \-pipe
-Use pipes rather than temporary files for communication between the
-various stages of compilation. This fails to work on some systems where
-the assembler cannot read from a pipe; but the GNU assembler has
-no trouble.
-.PP
-.SH LANGUAGE OPTIONS
-The following options control the dialect of C that the compiler
-accepts:
-.TP
-.B \-ansi
-Support all ANSI standard C programs.
-.Sp
-This turns off certain features of GNU C that are incompatible with
-ANSI C, such as the \c
-.B asm\c
-\&, \c
-.B inline\c
-\& and \c
-.B typeof
-keywords, and predefined macros such as \c
-.B unix\c
-\& and \c
-.B vax
-that identify the type of system you are using. It also enables the
-undesirable and rarely used ANSI trigraph feature, and disallows `\|\c
-.B $\c
-\&\|' as part of identifiers.
-.Sp
-The alternate keywords \c
-.B _\|_asm_\|_\c
-\&, \c
-.B _\|_extension_\|_\c
-\&,
-.B _\|_inline_\|_\c
-\& and \c
-.B _\|_typeof_\|_\c
-\& continue to work despite
-`\|\c
-.B \-ansi\c
-\&\|'. You would not want to use them in an ANSI C program, of
-course, but it is useful to put them in header files that might be included
-in compilations done with `\|\c
-.B \-ansi\c
-\&\|'. Alternate predefined macros
-such as \c
-.B _\|_unix_\|_\c
-\& and \c
-.B _\|_vax_\|_\c
-\& are also available, with or
-without `\|\c
-.B \-ansi\c
-\&\|'.
-.Sp
-The `\|\c
-.B \-ansi\c
-\&\|' option does not cause non-ANSI programs to be
-rejected gratuitously. For that, `\|\c
-.B \-pedantic\c
-\&\|' is required in
-addition to `\|\c
-.B \-ansi\c
-\&\|'.
-.Sp
-The preprocessor predefines a macro \c
-.B _\|_STRICT_ANSI_\|_\c
-\& when you use the `\|\c
-.B \-ansi\c
-\&\|'
-option. Some header files may notice this macro and refrain
-from declaring certain functions or defining certain macros that the
-ANSI standard doesn't call for; this is to avoid interfering with any
-programs that might use these names for other things.
-.TP
-.B \-fno\-asm
-Do not recognize \c
-.B asm\c
-\&, \c
-.B inline\c
-\& or \c
-.B typeof\c
-\& as a
-keyword. These words may then be used as identifiers. You can
-use \c
-.B _\|_asm_\|_\c
-\&, \c
-.B _\|_inline_\|_\c
-\& and \c
-.B _\|_typeof_\|_\c
-\& instead.
-`\|\c
-.B \-ansi\c
-\&\|' implies `\|\c
-.B \-fno\-asm\c
-\&\|'.
-.TP
-.B \-fno\-builtin
-Don't recognize built-in functions that do not begin with two leading
-underscores. Currently, the functions affected include \c
-.B _exit\c
-\&,
-.B abort\c
-\&, \c
-.B abs\c
-\&, \c
-.B alloca\c
-\&, \c
-.B cos\c
-\&, \c
-.B exit\c
-\&,
-.B fabs\c
-\&, \c
-.B labs\c
-\&, \c
-.B memcmp\c
-\&, \c
-.B memcpy\c
-\&, \c
-.B sin\c
-\&,
-.B sqrt\c
-\&, \c
-.B strcmp\c
-\&, \c
-.B strcpy\c
-\&, and \c
-.B strlen\c
-\&.
-.Sp
-The `\|\c
-.B \-ansi\c
-\&\|' option prevents \c
-.B alloca\c
-\& and \c
-.B _exit\c
-\& from
-being builtin functions.
-.TP
-.B \-fhosted
-Compile for a hosted environment; this implies the `\|\c
-.B \-fbuiltin\c
-\&\|' option, and implies that suspicious declarations of
-.B main\c
-\& should be warned about.
-.TP
-.B \-ffreestanding
-Compile for a freestanding environment; this implies the `\|\c
-.B \-fno-builtin\c
-\&\|' option, and implies that
-.B main\c
-\& has no special requirements.
-.TP
-.B \-fno\-strict\-prototype
-Treat a function declaration with no arguments, such as `\|\c
-.B int foo
-();\c
-\&\|', as C would treat it\(em\&as saying nothing about the number of
-arguments or their types (C++ only). Normally, such a declaration in
-C++ means that the function \c
-.B foo\c
-\& takes no arguments.
-.TP
-.B \-trigraphs
-Support ANSI C trigraphs. The `\|\c
-.B \-ansi\c
-\&\|' option implies `\|\c
-.B \-trigraphs\c
-\&\|'.
-.TP
-.B \-traditional
-Attempt to support some aspects of traditional C compilers.
-For details, see the GNU C Manual; the duplicate list here
-has been deleted so that we won't get complaints when it
-is out of date.
-.Sp
-But one note about C++ programs only (not C). `\|\c
-.B \-traditional\c
-\&\|' has one additional effect for C++: assignment to
-.B this
-is permitted. This is the same as the effect of `\|\c
-.B \-fthis\-is\-variable\c
-\&\|'.
-.TP
-.B \-traditional\-cpp
-Attempt to support some aspects of traditional C preprocessors.
-This includes the items that specifically mention the preprocessor above,
-but none of the other effects of `\|\c
-.B \-traditional\c
-\&\|'.
-.TP
-.B \-fdollars\-in\-identifiers
-Permit the use of `\|\c
-.B $\c
-\&\|' in identifiers (C++ only). You can also use
-`\|\c
-.B \-fno\-dollars\-in\-identifiers\c
-\&\|' to explicitly prohibit use of
-`\|\c
-.B $\c
-\&\|'. (GNU C++ allows `\|\c
-.B $\c
-\&\|' by default on some target systems
-but not others.)
-.TP
-.B \-fenum\-int\-equiv
-Permit implicit conversion of \c
-.B int\c
-\& to enumeration types (C++
-only). Normally GNU C++ allows conversion of \c
-.B enum\c
-\& to \c
-.B int\c
-\&,
-but not the other way around.
-.TP
-.B \-fexternal\-templates
-Produce smaller code for template declarations, by generating only a
-single copy of each template function where it is defined (C++ only).
-To use this option successfully, you must also mark all files that
-use templates with either `\|\c
-.B #pragma implementation\c
-\&\|' (the definition) or
-`\|\c
-.B #pragma interface\c
-\&\|' (declarations).
-
-When your code is compiled with `\|\c
-.B \-fexternal\-templates\c
-\&\|', all
-template instantiations are external. You must arrange for all
-necessary instantiations to appear in the implementation file; you can
-do this with a \c
-.B typedef\c
-\& that references each instantiation needed.
-Conversely, when you compile using the default option
-`\|\c
-.B \-fno\-external\-templates\c
-\&\|', all template instantiations are
-explicitly internal.
-.TP
-.B \-fall\-virtual
-Treat all possible member functions as virtual, implicitly. All
-member functions (except for constructor functions and
-.B new
-or
-.B delete
-member operators) are treated as virtual functions of the class where
-they appear.
-.Sp
-This does not mean that all calls to these member functions will be
-made through the internal table of virtual functions. Under some
-circumstances, the compiler can determine that a call to a given
-virtual function can be made directly; in these cases the calls are
-direct in any case.
-.TP
-.B \-fcond\-mismatch
-Allow conditional expressions with mismatched types in the second and
-third arguments. The value of such an expression is void.
-.TP
-.B \-fthis\-is\-variable
-Permit assignment to \c
-.B this\c
-\& (C++ only). The incorporation of
-user-defined free store management into C++ has made assignment to
-`\|\c
-.B this\c
-\&\|' an anachronism. Therefore, by default it is invalid to
-assign to \c
-.B this\c
-\& within a class member function. However, for
-backwards compatibility, you can make it valid with
-`\|\c
-.B \-fthis-is-variable\c
-\&\|'.
-.TP
-.B \-funsigned\-char
-Let the type \c
-.B char\c
-\& be unsigned, like \c
-.B unsigned char\c
-\&.
-.Sp
-Each kind of machine has a default for what \c
-.B char\c
-\& should
-be. It is either like \c
-.B unsigned char\c
-\& by default or like
-.B signed char\c
-\& by default.
-.Sp
-Ideally, a portable program should always use \c
-.B signed char\c
-\& or
-.B unsigned char\c
-\& when it depends on the signedness of an object.
-But many programs have been written to use plain \c
-.B char\c
-\& and
-expect it to be signed, or expect it to be unsigned, depending on the
-machines they were written for. This option, and its inverse, let you
-make such a program work with the opposite default.
-.Sp
-The type \c
-.B char\c
-\& is always a distinct type from each of
-.B signed char\c
-\& and \c
-.B unsigned char\c
-\&, even though its behavior
-is always just like one of those two.
-.TP
-.B \-fsigned\-char
-Let the type \c
-.B char\c
-\& be signed, like \c
-.B signed char\c
-\&.
-.Sp
-Note that this is equivalent to `\|\c
-.B \-fno\-unsigned\-char\c
-\&\|', which is
-the negative form of `\|\c
-.B \-funsigned\-char\c
-\&\|'. Likewise,
-`\|\c
-.B \-fno\-signed\-char\c
-\&\|' is equivalent to `\|\c
-.B \-funsigned\-char\c
-\&\|'.
-.TP
-.B \-fsigned\-bitfields
-.TP
-.B \-funsigned\-bitfields
-.TP
-.B \-fno\-signed\-bitfields
-.TP
-.B \-fno\-unsigned\-bitfields
-These options control whether a bitfield is
-signed or unsigned, when declared with no explicit `\|\c
-.B signed\c
-\&\|' or `\|\c
-.B unsigned\c
-\&\|' qualifier. By default, such a bitfield is
-signed, because this is consistent: the basic integer types such as
-.B int\c
-\& are signed types.
-.Sp
-However, when you specify `\|\c
-.B \-traditional\c
-\&\|', bitfields are all unsigned
-no matter what.
-.TP
-.B \-fwritable\-strings
-Store string constants in the writable data segment and don't uniquize
-them. This is for compatibility with old programs which assume they
-can write into string constants. `\|\c
-.B \-traditional\c
-\&\|' also has this
-effect.
-.Sp
-Writing into string constants is a very bad idea; \*(lqconstants\*(rq should
-be constant.
-.SH PREPROCESSOR OPTIONS
-These options control the C preprocessor, which is run on each C source
-file before actual compilation.
-.PP
-If you use the `\|\c
-.B \-E\c
-\&\|' option, GCC does nothing except preprocessing.
-Some of these options make sense only together with `\|\c
-.B \-E\c
-\&\|' because
-they cause the preprocessor output to be unsuitable for actual
-compilation.
-.TP
-.BI "\-include " "file"
-Process \c
-.I file\c
-\& as input before processing the regular input file.
-In effect, the contents of \c
-.I file\c
-\& are compiled first. Any `\|\c
-.B \-D\c
-\&\|'
-and `\|\c
-.B \-U\c
-\&\|' options on the command line are always processed before
-`\|\c
-.B \-include \c
-.I file\c
-\&\c
-\&\|', regardless of the order in which they are
-written. All the `\|\c
-.B \-include\c
-\&\|' and `\|\c
-.B \-imacros\c
-\&\|' options are
-processed in the order in which they are written.
-.TP
-.BI "\-imacros " file
-Process \c
-.I file\c
-\& as input, discarding the resulting output, before
-processing the regular input file. Because the output generated from
-.I file\c
-\& is discarded, the only effect of `\|\c
-.B \-imacros \c
-.I file\c
-\&\c
-\&\|' is to
-make the macros defined in \c
-.I file\c
-\& available for use in the main
-input. The preprocessor evaluates any `\|\c
-.B \-D\c
-\&\|' and `\|\c
-.B \-U\c
-\&\|' options
-on the command line before processing `\|\c
-.B \-imacros\c
-.I file\c
-\&\|', regardless of the order in
-which they are written. All the `\|\c
-.B \-include\c
-\&\|' and `\|\c
-.B \-imacros\c
-\&\|'
-options are processed in the order in which they are written.
-.TP
-.BI "\-idirafter " "dir"
-Add the directory \c
-.I dir\c
-\& to the second include path. The directories
-on the second include path are searched when a header file is not found
-in any of the directories in the main include path (the one that
-`\|\c
-.B \-I\c
-\&\|' adds to).
-.TP
-.BI "\-iprefix " "prefix"
-Specify \c
-.I prefix\c
-\& as the prefix for subsequent `\|\c
-.B \-iwithprefix\c
-\&\|'
-options.
-.TP
-.BI "\-iwithprefix " "dir"
-Add a directory to the second include path. The directory's name is
-made by concatenating \c
-.I prefix\c
-\& and \c
-.I dir\c
-\&, where \c
-.I prefix
-was specified previously with `\|\c
-.B \-iprefix\c
-\&\|'.
-.TP
-.B \-nostdinc
-Do not search the standard system directories for header files. Only
-the directories you have specified with `\|\c
-.B \-I\c
-\&\|' options (and the
-current directory, if appropriate) are searched.
-.Sp
-By using both `\|\c
-.B \-nostdinc\c
-\&\|' and `\|\c
-.B \-I\-\c
-\&\|', you can limit the include-file search file to only those
-directories you specify explicitly.
-.TP
-.B \-nostdinc++
-Do not search for header files in the C++\-specific standard directories,
-but do still search the other standard directories.
-(This option is used when building `\|\c
-.B libg++\c
-\&\|'.)
-.TP
-.B \-undef
-Do not predefine any nonstandard macros. (Including architecture flags).
-.TP
-.B \-E
-Run only the C preprocessor. Preprocess all the C source files
-specified and output the results to standard output or to the
-specified output file.
-.TP
-.B \-C
-Tell the preprocessor not to discard comments. Used with the
-`\|\c
-.B \-E\c
-\&\|' option.
-.TP
-.B \-P
-Tell the preprocessor not to generate `\|\c
-.B #line\c
-\&\|' commands.
-Used with the `\|\c
-.B \-E\c
-\&\|' option.
-.TP
-.B \-M\ [ \-MG ]
-Tell the preprocessor to output a rule suitable for \c
-.B make
-describing the dependencies of each object file. For each source file,
-the preprocessor outputs one \c
-.B make\c
-\&-rule whose target is the object
-file name for that source file and whose dependencies are all the files
-`\|\c
-.B #include\c
-\&\|'d in it. This rule may be a single line or may be
-continued with `\|\c
-.B \e\c
-\&\|'-newline if it is long. The list of rules is
-printed on standard output instead of the preprocessed C program.
-.Sp
-`\|\c
-.B \-M\c
-\&\|' implies `\|\c
-.B \-E\c
-\&\|'.
-.Sp
-`\|\c
-.B \-MG\c
-\&\|' says to treat missing header files as generated files and assume \c
-they live in the same directory as the source file. It must be specified \c
-in addition to `\|\c
-.B \-M\c
-\&\|'.
-.TP
-.B \-MM\ [ \-MG ]
-Like `\|\c
-.B \-M\c
-\&\|' but the output mentions only the user header files
-included with `\|\c
-.B #include "\c
-.I file\c
-\&"\c
-\&\|'. System header files
-included with `\|\c
-.B #include <\c
-.I file\c
-\&>\c
-\&\|' are omitted.
-.TP
-.B \-MD
-Like `\|\c
-.B \-M\c
-\&\|' but the dependency information is written to files with
-names made by replacing `\|\c
-.B .o\c
-\&\|' with `\|\c
-.B .d\c
-\&\|' at the end of the
-output file names. This is in addition to compiling the file as
-specified\(em\&`\|\c
-.B \-MD\c
-\&\|' does not inhibit ordinary compilation the way
-`\|\c
-.B \-M\c
-\&\|' does.
-.Sp
-The Mach utility `\|\c
-.B md\c
-\&\|' can be used to merge the `\|\c
-.B .d\c
-\&\|' files
-into a single dependency file suitable for using with the `\|\c
-.B make\c
-\&\|'
-command.
-.TP
-.B \-MMD
-Like `\|\c
-.B \-MD\c
-\&\|' except mention only user header files, not system
-header files.
-.TP
-.B \-H
-Print the name of each header file used, in addition to other normal
-activities.
-.TP
-.BI "\-A" "question" ( answer )
-Assert the answer
-.I answer
-for
-.I question\c
-\&, in case it is tested
-with a preprocessor conditional such as `\|\c
-.BI "#if #" question ( answer )\c
-\&\|'. `\|\c
-.B \-A\-\c
-\&\|' disables the standard
-assertions that normally describe the target machine.
-.TP
-.BI "\-A" "question"\c
-\&(\c
-.I answer\c
-\&)
-Assert the answer \c
-.I answer\c
-\& for \c
-.I question\c
-\&, in case it is tested
-with a preprocessor conditional such as `\|\c
-.B #if
-#\c
-.I question\c
-\&(\c
-.I answer\c
-\&)\c
-\&\|'. `\|\c
-.B \-A-\c
-\&\|' disables the standard
-assertions that normally describe the target machine.
-.TP
-.BI \-D macro
-Define macro \c
-.I macro\c
-\& with the string `\|\c
-.B 1\c
-\&\|' as its definition.
-.TP
-.BI \-D macro = defn
-Define macro \c
-.I macro\c
-\& as \c
-.I defn\c
-\&. All instances of `\|\c
-.B \-D\c
-\&\|' on
-the command line are processed before any `\|\c
-.B \-U\c
-\&\|' options.
-.TP
-.BI \-U macro
-Undefine macro \c
-.I macro\c
-\&. `\|\c
-.B \-U\c
-\&\|' options are evaluated after all `\|\c
-.B \-D\c
-\&\|' options, but before any `\|\c
-.B \-include\c
-\&\|' and `\|\c
-.B \-imacros\c
-\&\|' options.
-.TP
-.B \-dM
-Tell the preprocessor to output only a list of the macro definitions
-that are in effect at the end of preprocessing. Used with the `\|\c
-.B \-E\c
-\&\|'
-option.
-.TP
-.B \-dD
-Tell the preprocessor to pass all macro definitions into the output, in
-their proper sequence in the rest of the output.
-.TP
-.B \-dN
-Like `\|\c
-.B \-dD\c
-\&\|' except that the macro arguments and contents are omitted.
-Only `\|\c
-.B #define \c
-.I name\c
-\&\c
-\&\|' is included in the output.
-.SH ASSEMBLER OPTION
-.TP
-.BI "\-Wa," "option"
-Pass \c
-.I option\c
-\& as an option to the assembler. If \c
-.I option
-contains commas, it is split into multiple options at the commas.
-.SH LINKER OPTIONS
-These options come into play when the compiler links object files into
-an executable output file. They are meaningless if the compiler is
-not doing a link step.
-.TP
-.I object-file-name
-A file name that does not end in a special recognized suffix is
-considered to name an object file or library. (Object files are
-distinguished from libraries by the linker according to the file
-contents.) If GCC does a link step, these object files are used as input
-to the linker.
-.TP
-.BI \-l library
-Use the library named \c
-.I library\c
-\& when linking.
-.Sp
-The linker searches a standard list of directories for the library,
-which is actually a file named `\|\c
-.B lib\c
-.I library\c
-\&.a\c
-\&\|'. The linker
-then uses this file as if it had been specified precisely by name.
-.Sp
-The directories searched include several standard system directories
-plus any that you specify with `\|\c
-.B \-L\c
-\&\|'.
-.Sp
-Normally the files found this way are library files\(em\&archive files
-whose members are object files. The linker handles an archive file by
-scanning through it for members which define symbols that have so far
-been referenced but not defined. However, if the linker finds an
-ordinary object file rather than a library, the object file is linked
-in the usual fashion. The only difference between using an `\|\c
-.B \-l\c
-\&\|' option and specifying a file
-name is that `\|\c
-.B \-l\c
-\&\|' surrounds
-.I library
-with `\|\c
-.B lib\c
-\&\|' and `\|\c
-.B .a\c
-\&\|' and searches several directories.
-.TP
-.B \-lobjc
-You need this special case of the
-.B \-l
-option in order to link an Objective C program.
-.TP
-.B \-nostartfiles
-Do not use the standard system startup files when linking.
-The standard libraries are used normally.
-.TP
-.B \-nostdlib
-Don't use the standard system libraries and startup files when linking.
-Only the files you specify will be passed to the linker.
-.TP
-.B \-static
-On systems that support dynamic linking, this prevents linking with the shared
-libraries. On other systems, this option has no effect.
-.TP
-.B \-shared
-Produce a shared object which can then be linked with other objects to
-form an executable. Only a few systems support this option.
-.TP
-.B \-symbolic
-Bind references to global symbols when building a shared object. Warn
-about any unresolved references (unless overridden by the link editor
-option `\|\c
-.B
-\-Xlinker \-z \-Xlinker defs\c
-\&\|'). Only a few systems support
-this option.
-.TP
-.BI "\-Xlinker " "option"
-Pass \c
-.I option
-as an option to the linker. You can use this to
-supply system-specific linker options which GNU CC does not know how to
-recognize.
-.Sp
-If you want to pass an option that takes an argument, you must use
-`\|\c
-.B \-Xlinker\c
-\&\|' twice, once for the option and once for the argument.
-For example, to pass `\|\c
-.B
-\-assert definitions\c
-\&\|', you must write
-`\|\c
-.B
-\-Xlinker \-assert \-Xlinker definitions\c
-\&\|'. It does not work to write
-`\|\c
-.B
-\-Xlinker "\-assert definitions"\c
-\&\|', because this passes the entire
-string as a single argument, which is not what the linker expects.
-.TP
-.BI "\-Wl," "option"
-Pass \c
-.I option\c
-\& as an option to the linker. If \c
-.I option\c
-\& contains
-commas, it is split into multiple options at the commas.
-.TP
-.BI "\-u " "symbol"
-Pretend the symbol
-.I symbol
-is undefined, to force linking of
-library modules to define it. You can use `\|\c
-.B \-u\c
-\&\|' multiple times with
-different symbols to force loading of additional library modules.
-.SH DIRECTORY OPTIONS
-These options specify directories to search for header files, for
-libraries and for parts of the compiler:
-.TP
-.BI "\-I" "dir"
-Append directory \c
-.I dir\c
-\& to the list of directories searched for include files.
-.TP
-.B \-I\-
-Any directories you specify with `\|\c
-.B \-I\c
-\&\|' options before the `\|\c
-.B \-I\-\c
-\&\|'
-option are searched only for the case of `\|\c
-.B
-#include "\c
-.I file\c
-.B
-\&"\c
-\&\|';
-they are not searched for `\|\c
-.B #include <\c
-.I file\c
-\&>\c
-\&\|'.
-.Sp
-If additional directories are specified with `\|\c
-.B \-I\c
-\&\|' options after
-the `\|\c
-.B \-I\-\c
-\&\|', these directories are searched for all `\|\c
-.B #include\c
-\&\|'
-directives. (Ordinarily \c
-.I all\c
-\& `\|\c
-.B \-I\c
-\&\|' directories are used
-this way.)
-.Sp
-In addition, the `\|\c
-.B \-I\-\c
-\&\|' option inhibits the use of the current
-directory (where the current input file came from) as the first search
-directory for `\|\c
-.B
-#include "\c
-.I file\c
-.B
-\&"\c
-\&\|'. There is no way to
-override this effect of `\|\c
-.B \-I\-\c
-\&\|'. With `\|\c
-.B \-I.\c
-\&\|' you can specify
-searching the directory which was current when the compiler was
-invoked. That is not exactly the same as what the preprocessor does
-by default, but it is often satisfactory.
-.Sp
-`\|\c
-.B \-I\-\c
-\&\|' does not inhibit the use of the standard system directories
-for header files. Thus, `\|\c
-.B \-I\-\c
-\&\|' and `\|\c
-.B \-nostdinc\c
-\&\|' are
-independent.
-.TP
-.BI "\-L" "dir"
-Add directory \c
-.I dir\c
-\& to the list of directories to be searched
-for `\|\c
-.B \-l\c
-\&\|'.
-.TP
-.BI "\-B" "prefix"
-This option specifies where to find the executables, libraries and
-data files of the compiler itself.
-.Sp
-The compiler driver program runs one or more of the subprograms
-`\|\c
-.B cpp\c
-\&\|', `\|\c
-.B cc1\c
-\&\|' (or, for C++, `\|\c
-.B cc1plus\c
-\&\|'), `\|\c
-.B as\c
-\&\|' and `\|\c
-.B ld\c
-\&\|'. It tries
-.I prefix\c
-\& as a prefix for each program it tries to run, both with and
-without `\|\c
-.I machine\c
-.B /\c
-.I version\c
-.B /\c
-\&\|'.
-.Sp
-For each subprogram to be run, the compiler driver first tries the
-`\|\c
-.B \-B\c
-\&\|' prefix, if any. If that name is not found, or if `\|\c
-.B \-B\c
-\&\|'
-was not specified, the driver tries two standard prefixes, which are
-`\|\c
-.B /usr/lib/gcc/\c
-\&\|' and `\|\c
-.B /usr/local/lib/gcc-lib/\c
-\&\|'. If neither of
-those results in a file name that is found, the compiler driver
-searches for the unmodified program
-name, using the directories specified in your
-`\|\c
-.B PATH\c
-\&\|' environment variable.
-.Sp
-The run-time support file `\|\c
-.B libgcc.a\c
-\&\|' is also searched for using the
-`\|\c
-.B \-B\c
-\&\|' prefix, if needed. If it is not found there, the two
-standard prefixes above are tried, and that is all. The file is left
-out of the link if it is not found by those means. Most of the time,
-on most machines, `\|\c
-.B libgcc.a\c
-\&\|' is not actually necessary.
-.Sp
-You can get a similar result from the environment variable
-.B GCC_EXEC_PREFIX\c
-\&; if it is defined, its value is used as a prefix
-in the same way. If both the `\|\c
-.B \-B\c
-\&\|' option and the
-.B GCC_EXEC_PREFIX\c
-\& variable are present, the `\|\c
-.B \-B\c
-\&\|' option is
-used first and the environment variable value second.
-.SH WARNING OPTIONS
-Warnings are diagnostic messages that report constructions which
-are not inherently erroneous but which are risky or suggest there
-may have been an error.
-.Sp
-These options control the amount and kinds of warnings produced by GNU
-CC:
-.TP
-.B \-fsyntax\-only
-Check the code for syntax errors, but don't emit any output.
-.TP
-.B \-w
-Inhibit all warning messages.
-.TP
-.B \-Wno\-import
-Inhibit warning messages about the use of
-.BR #import .
-.TP
-.B \-pedantic
-Issue all the warnings demanded by strict ANSI standard C; reject
-all programs that use forbidden extensions.
-.Sp
-Valid ANSI standard C programs should compile properly with or without
-this option (though a rare few will require `\|\c
-.B \-ansi\c
-\&\|'). However,
-without this option, certain GNU extensions and traditional C features
-are supported as well. With this option, they are rejected. There is
-no reason to \c
-.I use\c
-\& this option; it exists only to satisfy pedants.
-.Sp
-`\|\c
-.B \-pedantic\c
-\&\|' does not cause warning messages for use of the
-alternate keywords whose names begin and end with `\|\c
-.B _\|_\c
-\&\|'. Pedantic
-warnings are also disabled in the expression that follows
-.B _\|_extension_\|_\c
-\&. However, only system header files should use
-these escape routes; application programs should avoid them.
-.TP
-.B \-pedantic\-errors
-Like `\|\c
-.B \-pedantic\c
-\&\|', except that errors are produced rather than
-warnings.
-.TP
-.B \-W
-Print extra warning messages for these events:
-.TP
-\ \ \ \(bu
-A nonvolatile automatic variable might be changed by a call to
-.B longjmp\c
-\&. These warnings are possible only in
-optimizing compilation.
-.Sp
-The compiler sees only the calls to \c
-.B setjmp\c
-\&. It cannot know
-where \c
-.B longjmp\c
-\& will be called; in fact, a signal handler could
-call it at any point in the code. As a result, you may get a warning
-even when there is in fact no problem because \c
-.B longjmp\c
-\& cannot
-in fact be called at the place which would cause a problem.
-.TP
-\ \ \ \(bu
-A function can return either with or without a value. (Falling
-off the end of the function body is considered returning without
-a value.) For example, this function would evoke such a
-warning:
-.Sp
-.nf
-foo (a)
-{
- if (a > 0)
- return a;
-}
-.Sp
-.fi
-Spurious warnings can occur because GNU CC does not realize that
-certain functions (including \c
-.B abort\c
-\& and \c
-.B longjmp\c
-\&)
-will never return.
-.TP
-\ \ \ \(bu
-An expression-statement or the left-hand side of a comma expression
-contains no side effects.
-To suppress the warning, cast the unused expression to void.
-For example, an expression such as `\|\c
-.B x[i,j]\c
-\&\|' will cause a warning,
-but `\|\c
-.B x[(void)i,j]\c
-\&\|' will not.
-.TP
-\ \ \ \(bu
-An unsigned value is compared against zero with `\|\c
-.B >\c
-\&\|' or `\|\c
-.B <=\c
-\&\|'.
-.PP
-.TP
-.B \-Wimplicit-int
-Warn whenever a declaration does not specify a type.
-.TP
-.B \-Wimplicit-function-declaration
-Warn whenever a function is used before being declared.
-.TP
-.B \-Wimplicit
-Same as -Wimplicit-int and -Wimplicit-function-declaration.
-.TP
-.B \-Wmain
-Warn if the
-.B main
-function is declared or defined with a suspicious type.
-Typically, it is a function with external linkage, returning
-.B int\c
-\&, and
-taking zero or two arguments.
-
-.TP
-.B \-Wreturn\-type
-Warn whenever a function is defined with a return-type that defaults
-to \c
-.B int\c
-\&. Also warn about any \c
-.B return\c
-\& statement with no
-return-value in a function whose return-type is not \c
-.B void\c
-\&.
-.TP
-.B \-Wunused
-Warn whenever a local variable is unused aside from its declaration,
-whenever a function is declared static but never defined, and whenever
-a statement computes a result that is explicitly not used.
-.TP
-.B \-Wswitch
-Warn whenever a \c
-.B switch\c
-\& statement has an index of enumeral type
-and lacks a \c
-.B case\c
-\& for one or more of the named codes of that
-enumeration. (The presence of a \c
-.B default\c
-\& label prevents this
-warning.) \c
-.B case\c
-\& labels outside the enumeration range also
-provoke warnings when this option is used.
-.TP
-.B \-Wcomment
-Warn whenever a comment-start sequence `\|\c
-.B /\(**\c
-\&\|' appears in a comment.
-.TP
-.B \-Wtrigraphs
-Warn if any trigraphs are encountered (assuming they are enabled).
-.TP
-.B \-Wformat
-Check calls to \c
-.B printf\c
-\& and \c
-.B scanf\c
-\&, etc., to make sure that
-the arguments supplied have types appropriate to the format string
-specified.
-.TP
-.B \-Wchar\-subscripts
-Warn if an array subscript has type
-.BR char .
-This is a common cause of error, as programmers often forget that this
-type is signed on some machines.
-.TP
-.B \-Wuninitialized
-An automatic variable is used without first being initialized.
-.Sp
-These warnings are possible only in optimizing compilation,
-because they require data flow information that is computed only
-when optimizing. If you don't specify `\|\c
-.B \-O\c
-\&\|', you simply won't
-get these warnings.
-.Sp
-These warnings occur only for variables that are candidates for
-register allocation. Therefore, they do not occur for a variable that
-is declared \c
-.B volatile\c
-\&, or whose address is taken, or whose size
-is other than 1, 2, 4 or 8 bytes. Also, they do not occur for
-structures, unions or arrays, even when they are in registers.
-.Sp
-Note that there may be no warning about a variable that is used only
-to compute a value that itself is never used, because such
-computations may be deleted by data flow analysis before the warnings
-are printed.
-.Sp
-These warnings are made optional because GNU CC is not smart
-enough to see all the reasons why the code might be correct
-despite appearing to have an error. Here is one example of how
-this can happen:
-.Sp
-.nf
-{
- int x;
- switch (y)
- {
- case 1: x = 1;
- break;
- case 2: x = 4;
- break;
- case 3: x = 5;
- }
- foo (x);
-}
-.Sp
-.fi
-If the value of \c
-.B y\c
-\& is always 1, 2 or 3, then \c
-.B x\c
-\& is
-always initialized, but GNU CC doesn't know this. Here is
-another common case:
-.Sp
-.nf
-{
- int save_y;
- if (change_y) save_y = y, y = new_y;
- .\|.\|.
- if (change_y) y = save_y;
-}
-.Sp
-.fi
-This has no bug because \c
-.B save_y\c
-\& is used only if it is set.
-.Sp
-Some spurious warnings can be avoided if you declare as
-.B volatile\c
-\& all the functions you use that never return.
-.TP
-.B \-Wparentheses
-Warn if parentheses are omitted in certain contexts.
-.TP
-.B \-Wtemplate\-debugging
-When using templates in a C++ program, warn if debugging is not yet
-fully available (C++ only).
-.TP
-.B \-Wall
-All of the above `\|\c
-.B \-W\c
-\&\|' options combined. These are all the
-options which pertain to usage that we recommend avoiding and that we
-believe is easy to avoid, even in conjunction with macros.
-.PP
-The remaining `\|\c
-.B \-W.\|.\|.\c
-\&\|' options are not implied by `\|\c
-.B \-Wall\c
-\&\|'
-because they warn about constructions that we consider reasonable to
-use, on occasion, in clean programs.
-.TP
-.B \-Wtraditional
-Warn about certain constructs that behave differently in traditional and
-ANSI C.
-.TP
-\ \ \ \(bu
-Macro arguments occurring within string constants in the macro body.
-These would substitute the argument in traditional C, but are part of
-the constant in ANSI C.
-.TP
-\ \ \ \(bu
-A function declared external in one block and then used after the end of
-the block.
-.TP
-\ \ \ \(bu
-A \c
-.B switch\c
-\& statement has an operand of type \c
-.B long\c
-\&.
-.PP
-.TP
-.B \-Wshadow
-Warn whenever a local variable shadows another local variable.
-.TP
-.BI "\-Wid\-clash\-" "len"
-Warn whenever two distinct identifiers match in the first \c
-.I len
-characters. This may help you prepare a program that will compile
-with certain obsolete, brain-damaged compilers.
-.TP
-.B \-Wpointer\-arith
-Warn about anything that depends on the \*(lqsize of\*(rq a function type or
-of \c
-.B void\c
-\&. GNU C assigns these types a size of 1, for
-convenience in calculations with \c
-.B void \(**\c
-\& pointers and pointers
-to functions.
-.TP
-.B \-Wcast\-qual
-Warn whenever a pointer is cast so as to remove a type qualifier from
-the target type. For example, warn if a \c
-.B const char \(**\c
-\& is cast
-to an ordinary \c
-.B char \(**\c
-\&.
-.TP
-.B \-Wcast\-align
-Warn whenever a pointer is cast such that the required alignment of the
-target is increased. For example, warn if a \c
-.B char \(**\c
-\& is cast to
-an \c
-.B int \(**\c
-\& on machines where integers can only be accessed at
-two- or four-byte boundaries.
-.TP
-.B \-Wwrite\-strings
-Give string constants the type \c
-.B const char[\c
-.I length\c
-.B ]\c
-\& so that
-copying the address of one into a non-\c
-.B const\c
-\& \c
-.B char \(**
-pointer will get a warning. These warnings will help you find at
-compile time code that can try to write into a string constant, but
-only if you have been very careful about using \c
-.B const\c
-\& in
-declarations and prototypes. Otherwise, it will just be a nuisance;
-this is why we did not make `\|\c
-.B \-Wall\c
-\&\|' request these warnings.
-.TP
-.B \-Wconversion
-Warn if a prototype causes a type conversion that is different from what
-would happen to the same argument in the absence of a prototype. This
-includes conversions of fixed point to floating and vice versa, and
-conversions changing the width or signedness of a fixed point argument
-except when the same as the default promotion.
-.TP
-.B \-Waggregate\-return
-Warn if any functions that return structures or unions are defined or
-called. (In languages where you can return an array, this also elicits
-a warning.)
-.TP
-.B \-Wstrict\-prototypes
-Warn if a function is declared or defined without specifying the
-argument types. (An old-style function definition is permitted without
-a warning if preceded by a declaration which specifies the argument
-types.)
-.TP
-.B \-Wmissing\-prototypes
-Warn if a global function is defined without a previous prototype
-declaration. This warning is issued even if the definition itself
-provides a prototype. The aim is to detect global functions that fail
-to be declared in header files.
-.TP
-.B \-Wmissing\-declarations
-Warn if a global function is defined without a previous declaration.
-Do so even if the definition itself provides a prototype.
-Use this option to detect global functions that are not declared in
-header files.
-.TP
-.B \-Wredundant-decls
-Warn if anything is declared more than once in the same scope, even in
-cases where multiple declaration is valid and changes nothing.
-.TP
-.B \-Wnested-externs
-Warn if an \c
-.B extern\c
-\& declaration is encountered within an function.
-.TP
-.B \-Wenum\-clash
-Warn about conversion between different enumeration types (C++ only).
-.TP
-.B \-Wlong-long
-Warn if
-.B long long \c
-type is used. This is default. To inhibit
-the warning messages, use flag `\|\c
-.B \-Wno\-long\-long\c
-\&\|'. Flags `\|\c
-.B \-W\-long\-long\c
-\&\|' and `\|\c
-.B \-Wno\-long\-long\c
-\&\|' are taken into account only when flag `\|\c
-.B \-pedantic\c
-\&\|' is used.
-.TP
-.B \-Woverloaded\-virtual
-(C++ only.)
-In a derived class, the definitions of virtual functions must match
-the type signature of a virtual function declared in the base class.
-Use this option to request warnings when a derived class declares a
-function that may be an erroneous attempt to define a virtual
-function: that is, warn when a function with the same name as a
-virtual function in the base class, but with a type signature that
-doesn't match any virtual functions from the base class.
-.TP
-.B \-Winline
-Warn if a function can not be inlined, and either it was declared as inline,
-or else the
-.B \-finline\-functions
-option was given.
-.TP
-.B \-Werror
-Treat warnings as errors; abort compilation after any warning.
-.SH DEBUGGING OPTIONS
-GNU CC has various special options that are used for debugging
-either your program or GCC:
-.TP
-.B \-g
-Produce debugging information in the operating system's native format
-(stabs, COFF, XCOFF, or DWARF). GDB can work with this debugging
-information.
-.Sp
-On most systems that use stabs format, `\|\c
-.B \-g\c
-\&\|' enables use of extra
-debugging information that only GDB can use; this extra information
-makes debugging work better in GDB but will probably make other debuggers
-crash or
-refuse to read the program. If you want to control for certain whether
-to generate the extra information, use `\|\c
-.B \-gstabs+\c
-\&\|', `\|\c
-.B \-gstabs\c
-\&\|',
-`\|\c
-.B \-gxcoff+\c
-\&\|', `\|\c
-.B \-gxcoff\c
-\&\|', `\|\c
-.B \-gdwarf+\c
-\&\|', or `\|\c
-.B \-gdwarf\c
-\&\|'
-(see below).
-.Sp
-Unlike most other C compilers, GNU CC allows you to use `\|\c
-.B \-g\c
-\&\|' with
-`\|\c
-.B \-O\c
-\&\|'. The shortcuts taken by optimized code may occasionally
-produce surprising results: some variables you declared may not exist
-at all; flow of control may briefly move where you did not expect it;
-some statements may not be executed because they compute constant
-results or their values were already at hand; some statements may
-execute in different places because they were moved out of loops.
-.Sp
-Nevertheless it proves possible to debug optimized output. This makes
-it reasonable to use the optimizer for programs that might have bugs.
-.PP
-The following options are useful when GNU CC is generated with the
-capability for more than one debugging format.
-.TP
-.B \-ggdb
-Produce debugging information in the native format (if that is supported),
-including GDB extensions if at all possible.
-.TP
-.B \-gstabs
-Produce debugging information in stabs format (if that is supported),
-without GDB extensions. This is the format used by DBX on most BSD
-systems.
-.TP
-.B \-gstabs+
-Produce debugging information in stabs format (if that is supported),
-using GNU extensions understood only by the GNU debugger (GDB). The
-use of these extensions is likely to make other debuggers crash or
-refuse to read the program.
-.TP
-.B \-gcoff
-Produce debugging information in COFF format (if that is supported).
-This is the format used by SDB on most System V systems prior to
-System V Release 4.
-.TP
-.B \-gxcoff
-Produce debugging information in XCOFF format (if that is supported).
-This is the format used by the DBX debugger on IBM RS/6000 systems.
-.TP
-.B \-gxcoff+
-Produce debugging information in XCOFF format (if that is supported),
-using GNU extensions understood only by the GNU debugger (GDB). The
-use of these extensions is likely to make other debuggers crash or
-refuse to read the program.
-.TP
-.B \-gdwarf
-Produce debugging information in DWARF format (if that is supported).
-This is the format used by SDB on most System V Release 4 systems.
-.TP
-.B \-gdwarf+
-Produce debugging information in DWARF format (if that is supported),
-using GNU extensions understood only by the GNU debugger (GDB). The
-use of these extensions is likely to make other debuggers crash or
-refuse to read the program.
-.PP
-.BI "\-g" "level"
-.br
-.BI "\-ggdb" "level"
-.br
-.BI "\-gstabs" "level"
-.br
-.BI "\-gcoff" "level"
-.BI "\-gxcoff" "level"
-.TP
-.BI "\-gdwarf" "level"
-Request debugging information and also use \c
-.I level\c
-\& to specify how
-much information. The default level is 2.
-.Sp
-Level 1 produces minimal information, enough for making backtraces in
-parts of the program that you don't plan to debug. This includes
-descriptions of functions and external variables, but no information
-about local variables and no line numbers.
-.Sp
-Level 3 includes extra information, such as all the macro definitions
-present in the program. Some debuggers support macro expansion when
-you use `\|\c
-.B \-g3\c
-\&\|'.
-.TP
-.B \-p
-Generate extra code to write profile information suitable for the
-analysis program \c
-.B prof\c
-\&.
-.TP
-.B \-pg
-Generate extra code to write profile information suitable for the
-analysis program \c
-.B gprof\c
-\&.
-.TP
-.B \-a
-Generate extra code to write profile information for basic blocks,
-which will record the number of times each basic block is executed.
-This data could be analyzed by a program like \c
-.B tcov\c
-\&. Note,
-however, that the format of the data is not what \c
-.B tcov\c
-\& expects.
-Eventually GNU \c
-.B gprof\c
-\& should be extended to process this data.
-.TP
-.B \-ax
-Generate extra code to read basic block profiling parameters from
-file `bb.in' and write profiling results to file `bb.out'.
-`bb.in' contains a list of functions. Whenever a function on the list
-is entered, profiling is turned on. When the outmost function is left,
-profiling is turned off. If a function name is prefixed with `-'
-the function is excluded from profiling. If a function name is not
-unique it can be disambiguated by writing
-`/path/filename.d:functionname'. `bb.out' will list some available
-filenames.
-Four function names have a special meaning:
-`__bb_jumps__' will cause jump frequencies to be written to `bb.out'.
-`__bb_trace__' will cause the sequence of basic blocks to be piped
-into `gzip' and written to file `bbtrace.gz'.
-`__bb_hidecall__' will cause call instructions to be excluded from
-the trace.
-`__bb_showret__' will cause return instructions to be included in
-the trace.
-.TP
-.BI "\-d" "letters"
-Says to make debugging dumps during compilation at times specified by
-.I letters\c
-\&. This is used for debugging the compiler. The file names
-for most of the dumps are made by appending a word to the source file
-name (e.g. `\|\c
-.B foo.c.rtl\c
-\&\|' or `\|\c
-.B foo.c.jump\c
-\&\|').
-.TP
-.B \-dM
-Dump all macro definitions, at the end of preprocessing, and write no
-output.
-.TP
-.B \-dN
-Dump all macro names, at the end of preprocessing.
-.TP
-.B \-dD
-Dump all macro definitions, at the end of preprocessing, in addition to
-normal output.
-.TP
-.B \-dy
-Dump debugging information during parsing, to standard error.
-.TP
-.B \-dr
-Dump after RTL generation, to `\|\c
-.I file\c
-.B \&.rtl\c
-\&\|'.
-.TP
-.B \-dx
-Just generate RTL for a function instead of compiling it. Usually used
-with `\|\c
-.B r\c
-\&\|'.
-.TP
-.B \-dj
-Dump after first jump optimization, to `\|\c
-.I file\c
-.B \&.jump\c
-\&\|'.
-.TP
-.B \-ds
-Dump after CSE (including the jump optimization that sometimes
-follows CSE), to `\|\c
-.I file\c
-.B \&.cse\c
-\&\|'.
-.TP
-.B \-dL
-Dump after loop optimization, to `\|\c
-.I file\c
-.B \&.loop\c
-\&\|'.
-.TP
-.B \-dt
-Dump after the second CSE pass (including the jump optimization that
-sometimes follows CSE), to `\|\c
-.I file\c
-.B \&.cse2\c
-\&\|'.
-.TP
-.B \-df
-Dump after flow analysis, to `\|\c
-.I file\c
-.B \&.flow\c
-\&\|'.
-.TP
-.B \-dc
-Dump after instruction combination, to `\|\c
-.I file\c
-.B \&.combine\c
-\&\|'.
-.TP
-.B \-dS
-Dump after the first instruction scheduling pass, to
-`\|\c
-.I file\c
-.B \&.sched\c
-\&\|'.
-.TP
-.B \-dl
-Dump after local register allocation, to `\|\c
-.I file\c
-.B \&.lreg\c
-\&\|'.
-.TP
-.B \-dg
-Dump after global register allocation, to `\|\c
-.I file\c
-.B \&.greg\c
-\&\|'.
-.TP
-.B \-dR
-Dump after the second instruction scheduling pass, to
-`\|\c
-.I file\c
-.B \&.sched2\c
-\&\|'.
-.TP
-.B \-dJ
-Dump after last jump optimization, to `\|\c
-.I file\c
-.B \&.jump2\c
-\&\|'.
-.TP
-.B \-dd
-Dump after delayed branch scheduling, to `\|\c
-.I file\c
-.B \&.dbr\c
-\&\|'.
-.TP
-.B \-dk
-Dump after conversion from registers to stack, to `\|\c
-.I file\c
-.B \&.stack\c
-\&\|'.
-.TP
-.B \-da
-Produce all the dumps listed above.
-.TP
-.B \-dm
-Print statistics on memory usage, at the end of the run, to
-standard error.
-.TP
-.B \-dp
-Annotate the assembler output with a comment indicating which
-pattern and alternative was used.
-.TP
-.B \-fpretend\-float
-When running a cross-compiler, pretend that the target machine uses the
-same floating point format as the host machine. This causes incorrect
-output of the actual floating constants, but the actual instruction
-sequence will probably be the same as GNU CC would make when running on
-the target machine.
-.TP
-.B \-save\-temps
-Store the usual \*(lqtemporary\*(rq intermediate files permanently; place them
-in the current directory and name them based on the source file. Thus,
-compiling `\|\c
-.B foo.c\c
-\&\|' with `\|\c
-.B \-c \-save\-temps\c
-\&\|' would produce files
-`\|\c
-.B foo.cpp\c
-\&\|' and `\|\c
-.B foo.s\c
-\&\|', as well as `\|\c
-.B foo.o\c
-\&\|'.
-.TP
-.BI "\-print\-file\-name=" "library"
-Print the full absolute name of the library file \|\c
-.nh
-.I library
-.hy
-\&\| that
-would be used when linking\(em\&and do not do anything else. With this
-option, GNU CC does not compile or link anything; it just prints the
-file name.
-.TP
-.B \-print\-libgcc\-file\-name
-Same as `\|\c
-.B \-print\-file\-name=libgcc.a\c
-\&\|'.
-.TP
-.BI "\-print\-prog\-name=" "program"
-Like `\|\c
-.B \-print\-file\-name\c
-\&\|', but searches for a program such as `\|\c
-cpp\c
-\&\|'.
-.SH OPTIMIZATION OPTIONS
-These options control various sorts of optimizations:
-.TP
-.B \-O
-.TP
-.B \-O1
-Optimize. Optimizing compilation takes somewhat more time, and a lot
-more memory for a large function.
-.Sp
-Without `\|\c
-.B \-O\c
-\&\|', the compiler's goal is to reduce the cost of
-compilation and to make debugging produce the expected results.
-Statements are independent: if you stop the program with a breakpoint
-between statements, you can then assign a new value to any variable or
-change the program counter to any other statement in the function and
-get exactly the results you would expect from the source code.
-.Sp
-Without `\|\c
-.B \-O\c
-\&\|', only variables declared \c
-.B register\c
-\& are
-allocated in registers. The resulting compiled code is a little worse
-than produced by PCC without `\|\c
-.B \-O\c
-\&\|'.
-.Sp
-With `\|\c
-.B \-O\c
-\&\|', the compiler tries to reduce code size and execution
-time.
-.Sp
-When you specify `\|\c
-.B \-O\c
-\&\|', the two options `\|\c
-.B \-fthread\-jumps\c
-\&\|' and `\|\c
-.B \-fdefer\-pop\c
-\&\|' are turned on. On machines that have delay slots, the `\|\c
-.B \-fdelayed\-branch\c
-\&\|' option is turned on. For those machines that can support debugging even
-without a frame pointer, the `\|\c
-.B \-fomit\-frame\-pointer\c
-\&\|' option is turned on. On some machines other flags may also be turned on.
-.TP
-.B \-O2
-Optimize even more. Nearly all supported optimizations that do not
-involve a space-speed tradeoff are performed. Loop unrolling and function
-inlining are not done, for example. As compared to
-.B \-O\c
-\&,
-this option increases both compilation time and the performance of the
-generated code.
-.TP
-.B \-O3
-Optimize yet more. This turns on everything
-.B \-O2
-does, along with also turning on
-.B \-finline\-functions.
-.TP
-.B \-O0
-Do not optimize.
-.Sp
-If you use multiple
-.B \-O
-options, with or without level numbers, the last such option is the
-one that is effective.
-.PP
-Options of the form `\|\c
-.B \-f\c
-.I flag\c
-\&\c
-\&\|' specify machine-independent
-flags. Most flags have both positive and negative forms; the negative
-form of `\|\c
-.B \-ffoo\c
-\&\|' would be `\|\c
-.B \-fno\-foo\c
-\&\|'. The following list shows
-only one form\(em\&the one which is not the default.
-You can figure out the other form by either removing `\|\c
-.B no\-\c
-\&\|' or
-adding it.
-.TP
-.B \-ffloat\-store
-Do not store floating point variables in registers. This
-prevents undesirable excess precision on machines such as the
-68000 where the floating registers (of the 68881) keep more
-precision than a \c
-.B double\c
-\& is supposed to have.
-.Sp
-For most programs, the excess precision does only good, but a few
-programs rely on the precise definition of IEEE floating point.
-Use `\|\c
-.B \-ffloat\-store\c
-\&\|' for such programs.
-.TP
-.B \-fmemoize\-lookups
-.TP
-.B \-fsave\-memoized
-Use heuristics to compile faster (C++ only). These heuristics are not
-enabled by default, since they are only effective for certain input
-files. Other input files compile more slowly.
-.Sp
-The first time the compiler must build a call to a member function (or
-reference to a data member), it must (1) determine whether the class
-implements member functions of that name; (2) resolve which member
-function to call (which involves figuring out what sorts of type
-conversions need to be made); and (3) check the visibility of the member
-function to the caller. All of this adds up to slower compilation.
-Normally, the second time a call is made to that member function (or
-reference to that data member), it must go through the same lengthy
-process again. This means that code like this
-.Sp
-\& cout << "This " << p << " has " << n << " legs.\en";
-.Sp
-makes six passes through all three steps. By using a software cache,
-a \*(lqhit\*(rq significantly reduces this cost. Unfortunately, using the
-cache introduces another layer of mechanisms which must be implemented,
-and so incurs its own overhead. `\|\c
-.B \-fmemoize\-lookups\c
-\&\|' enables
-the software cache.
-.Sp
-Because access privileges (visibility) to members and member functions
-may differ from one function context to the next,
-.B g++
-may need to flush the cache. With the `\|\c
-.B \-fmemoize\-lookups\c
-\&\|' flag, the cache is flushed after every
-function that is compiled. The `\|\c
-\-fsave\-memoized\c
-\&\|' flag enables the same software cache, but when the compiler
-determines that the context of the last function compiled would yield
-the same access privileges of the next function to compile, it
-preserves the cache.
-This is most helpful when defining many member functions for the same
-class: with the exception of member functions which are friends of
-other classes, each member function has exactly the same access
-privileges as every other, and the cache need not be flushed.
-.TP
-.B \-fno\-default\-inline
-Don't make member functions inline by default merely because they are
-defined inside the class scope (C++ only).
-.TP
-.B \-fno\-defer\-pop
-Always pop the arguments to each function call as soon as that
-function returns. For machines which must pop arguments after a
-function call, the compiler normally lets arguments accumulate on the
-stack for several function calls and pops them all at once.
-.TP
-.B \-fforce\-mem
-Force memory operands to be copied into registers before doing
-arithmetic on them. This may produce better code by making all
-memory references potential common subexpressions. When they are
-not common subexpressions, instruction combination should
-eliminate the separate register-load. I am interested in hearing
-about the difference this makes.
-.TP
-.B \-fforce\-addr
-Force memory address constants to be copied into registers before
-doing arithmetic on them. This may produce better code just as
-`\|\c
-.B \-fforce\-mem\c
-\&\|' may. I am interested in hearing about the
-difference this makes.
-.TP
-.B \-fomit\-frame\-pointer
-Don't keep the frame pointer in a register for functions that
-don't need one. This avoids the instructions to save, set up and
-restore frame pointers; it also makes an extra register available
-in many functions. \c
-.I It also makes debugging impossible on most machines\c
-\&.
-.Sp
-On some machines, such as the Vax, this flag has no effect, because
-the standard calling sequence automatically handles the frame pointer
-and nothing is saved by pretending it doesn't exist. The
-machine-description macro \c
-.B FRAME_POINTER_REQUIRED\c
-\& controls
-whether a target machine supports this flag.
-.TP
-.B \-finline\-functions
-Integrate all simple functions into their callers. The compiler
-heuristically decides which functions are simple enough to be worth
-integrating in this way.
-.Sp
-If all calls to a given function are integrated, and the function is
-declared \c
-.B static\c
-\&, then GCC normally does not output the function as
-assembler code in its own right.
-.TP
-.B \-fcaller\-saves
-Enable values to be allocated in registers that will be clobbered by
-function calls, by emitting extra instructions to save and restore the
-registers around such calls. Such allocation is done only when it
-seems to result in better code than would otherwise be produced.
-.Sp
-This option is enabled by default on certain machines, usually those
-which have no call-preserved registers to use instead.
-.TP
-.B \-fkeep\-inline\-functions
-Even if all calls to a given function are integrated, and the function
-is declared \c
-.B static\c
-\&, nevertheless output a separate run-time
-callable version of the function.
-.TP
-.B \-fno\-function\-cse
-Do not put function addresses in registers; make each instruction that
-calls a constant function contain the function's address explicitly.
-.Sp
-This option results in less efficient code, but some strange hacks
-that alter the assembler output may be confused by the optimizations
-performed when this option is not used.
-.TP
-.B \-fno\-peephole
-Disable any machine-specific peephole optimizations.
-.TP
-.B \-ffast-math
-This option allows GCC to violate some ANSI or IEEE rules/specifications
-in the interest of optimizing code for speed. For example, it allows
-the compiler to assume arguments to the \c
-.B sqrt\c
-\& function are
-non-negative numbers.
-.Sp
-This option should never be turned on by any `\|\c
-.B \-O\c
-\&\|' option since
-it can result in incorrect output for programs which depend on
-an exact implementation of IEEE or ANSI rules/specifications for
-math functions.
-.PP
-The following options control specific optimizations. The `\|\c
-.B \-O2\c
-\&\|'
-option turns on all of these optimizations except `\|\c
-.B \-funroll\-loops\c
-\&\|'
-and `\|\c
-.B \-funroll\-all\-loops\c
-\&\|'.
-.PP
-The `\|\c
-.B \-O\c
-\&\|' option usually turns on
-the `\|\c
-.B \-fthread\-jumps\c
-\&\|' and `\|\c
-.B \-fdelayed\-branch\c
-\&\|' options, but
-specific machines may change the default optimizations.
-.PP
-You can use the following flags in the rare cases when \*(lqfine-tuning\*(rq
-of optimizations to be performed is desired.
-.TP
-.B \-fstrength\-reduce
-Perform the optimizations of loop strength reduction and
-elimination of iteration variables.
-.TP
-.B \-fthread\-jumps
-Perform optimizations where we check to see if a jump branches to a
-location where another comparison subsumed by the first is found. If
-so, the first branch is redirected to either the destination of the
-second branch or a point immediately following it, depending on whether
-the condition is known to be true or false.
-.TP
-.B \-funroll\-loops
-Perform the optimization of loop unrolling. This is only done for loops
-whose number of iterations can be determined at compile time or run time.
-.TP
-.B \-funroll\-all\-loops
-Perform the optimization of loop unrolling. This is done for all loops.
-This usually makes programs run more slowly.
-.TP
-.B \-fcse\-follow\-jumps
-In common subexpression elimination, scan through jump instructions
-when the target of the jump is not reached by any other path. For
-example, when CSE encounters an \c
-.B if\c
-\& statement with an
-.B else\c
-\& clause, CSE will follow the jump when the condition
-tested is false.
-.TP
-.B \-fcse\-skip\-blocks
-This is similar to `\|\c
-.B \-fcse\-follow\-jumps\c
-\&\|', but causes CSE to
-follow jumps which conditionally skip over blocks. When CSE
-encounters a simple \c
-.B if\c
-\& statement with no else clause,
-`\|\c
-.B \-fcse\-skip\-blocks\c
-\&\|' causes CSE to follow the jump around the
-body of the \c
-.B if\c
-\&.
-.TP
-.B \-frerun\-cse\-after\-loop
-Re-run common subexpression elimination after loop optimizations has been
-performed.
-.TP
-.B \-felide\-constructors
-Elide constructors when this seems plausible (C++ only). With this
-flag, GNU C++ initializes \c
-.B y\c
-\& directly from the call to \c
-.B foo
-without going through a temporary in the following code:
-.Sp
-A foo ();
-A y = foo ();
-.Sp
-Without this option, GNU C++ first initializes \c
-.B y\c
-\& by calling the
-appropriate constructor for type \c
-.B A\c
-\&; then assigns the result of
-.B foo\c
-\& to a temporary; and, finally, replaces the initial value of
-`\|\c
-.B y\c
-\&\|' with the temporary.
-.Sp
-The default behavior (`\|\c
-.B \-fno\-elide\-constructors\c
-\&\|') is specified by
-the draft ANSI C++ standard. If your program's constructors have side
-effects, using `\|\c
-.B \-felide-constructors\c
-\&\|' can make your program act
-differently, since some constructor calls may be omitted.
-.TP
-.B \-fexpensive\-optimizations
-Perform a number of minor optimizations that are relatively expensive.
-.TP
-.B \-fdelayed\-branch
-If supported for the target machine, attempt to reorder instructions
-to exploit instruction slots available after delayed branch
-instructions.
-.TP
-.B \-fschedule\-insns
-If supported for the target machine, attempt to reorder instructions to
-eliminate execution stalls due to required data being unavailable. This
-helps machines that have slow floating point or memory load instructions
-by allowing other instructions to be issued until the result of the load
-or floating point instruction is required.
-.TP
-.B \-fschedule\-insns2
-Similar to `\|\c
-.B \-fschedule\-insns\c
-\&\|', but requests an additional pass of
-instruction scheduling after register allocation has been done. This is
-especially useful on machines with a relatively small number of
-registers and where memory load instructions take more than one cycle.
-.SH TARGET OPTIONS
-By default, GNU CC compiles code for the same type of machine that you
-are using. However, it can also be installed as a cross-compiler, to
-compile for some other type of machine. In fact, several different
-configurations of GNU CC, for different target machines, can be
-installed side by side. Then you specify which one to use with the
-`\|\c
-.B \-b\c
-\&\|' option.
-.PP
-In addition, older and newer versions of GNU CC can be installed side
-by side. One of them (probably the newest) will be the default, but
-you may sometimes wish to use another.
-.TP
-.BI "\-b " "machine"
-The argument \c
-.I machine\c
-\& specifies the target machine for compilation.
-This is useful when you have installed GNU CC as a cross-compiler.
-.Sp
-The value to use for \c
-.I machine\c
-\& is the same as was specified as the
-machine type when configuring GNU CC as a cross-compiler. For
-example, if a cross-compiler was configured with `\|\c
-.B configure
-i386v\c
-\&\|', meaning to compile for an 80386 running System V, then you
-would specify `\|\c
-.B \-b i386v\c
-\&\|' to run that cross compiler.
-.Sp
-When you do not specify `\|\c
-.B \-b\c
-\&\|', it normally means to compile for
-the same type of machine that you are using.
-.TP
-.BI "\-V " "version"
-The argument \c
-.I version\c
-\& specifies which version of GNU CC to run.
-This is useful when multiple versions are installed. For example,
-.I version\c
-\& might be `\|\c
-.B 2.0\c
-\&\|', meaning to run GNU CC version 2.0.
-.Sp
-The default version, when you do not specify `\|\c
-.B \-V\c
-\&\|', is controlled
-by the way GNU CC is installed. Normally, it will be a version that
-is recommended for general use.
-.SH MACHINE DEPENDENT OPTIONS
-Each of the target machine types can have its own special options,
-starting with `\|\c
-.B \-m\c
-\&\|', to choose among various hardware models or
-configurations\(em\&for example, 68010 vs 68020, floating coprocessor or
-none. A single installed version of the compiler can compile for any
-model or configuration, according to the options specified.
-.PP
-Some configurations of the compiler also support additional special
-options, usually for command-line compatibility with other compilers on
-the same platform.
-.PP
-These are the `\|\c
-.B \-m\c
-\&\|' options defined for the 68000 series:
-.TP
-.B \-m68000
-.TP
-.B \-mc68000
-Generate output for a 68000. This is the default when the compiler is
-configured for 68000-based systems.
-.TP
-.B \-m68020
-.TP
-.B \-mc68020
-Generate output for a 68020 (rather than a 68000). This is the
-default when the compiler is configured for 68020-based systems.
-.TP
-.B \-m68881
-Generate output containing 68881 instructions for floating point.
-This is the default for most 68020-based systems unless
-.B \-nfp
-was specified when the compiler was configured.
-.TP
-.B \-m68030
-Generate output for a 68030. This is the default when the compiler is
-configured for 68030-based systems.
-.TP
-.B \-m68040
-Generate output for a 68040. This is the default when the compiler is
-configured for 68040-based systems.
-.TP
-.B \-m68020\-40
-Generate output for a 68040, without using any of the new instructions.
-This results in code which can run relatively efficiently on either a
-68020/68881 or a 68030 or a 68040.
-.TP
-.B \-mfpa
-Generate output containing Sun FPA instructions for floating point.
-.TP
-.B \-msoft\-float
-Generate output containing library calls for floating point.
-.I
-WARNING:
-the requisite libraries are not part of GNU CC. Normally the
-facilities of the machine's usual C compiler are used, but this can't
-be done directly in cross-compilation. You must make your own
-arrangements to provide suitable library functions for cross-compilation.
-.TP
-.B \-mshort
-Consider type \c
-.B int\c
-\& to be 16 bits wide, like \c
-.B short int\c
-\&.
-.TP
-.B \-mnobitfield
-Do not use the bit-field instructions. `\|\c
-.B \-m68000\c
-\&\|' implies
-`\|\c
-.B \-mnobitfield\c
-\&\|'.
-.TP
-.B \-mbitfield
-Do use the bit-field instructions. `\|\c
-.B \-m68020\c
-\&\|' implies
-`\|\c
-.B \-mbitfield\c
-\&\|'. This is the default if you use the unmodified
-sources.
-.TP
-.B \-mrtd
-Use a different function-calling convention, in which functions
-that take a fixed number of arguments return with the \c
-.B rtd
-instruction, which pops their arguments while returning. This
-saves one instruction in the caller since there is no need to pop
-the arguments there.
-.Sp
-This calling convention is incompatible with the one normally
-used on Unix, so you cannot use it if you need to call libraries
-compiled with the Unix compiler.
-.Sp
-Also, you must provide function prototypes for all functions that
-take variable numbers of arguments (including \c
-.B printf\c
-\&);
-otherwise incorrect code will be generated for calls to those
-functions.
-.Sp
-In addition, seriously incorrect code will result if you call a
-function with too many arguments. (Normally, extra arguments are
-harmlessly ignored.)
-.Sp
-The \c
-.B rtd\c
-\& instruction is supported by the 68010 and 68020
-processors, but not by the 68000.
-.PP
-These `\|\c
-.B \-m\c
-\&\|' options are defined for the Vax:
-.TP
-.B \-munix
-Do not output certain jump instructions (\c
-.B aobleq\c
-\& and so on)
-that the Unix assembler for the Vax cannot handle across long
-ranges.
-.TP
-.B \-mgnu
-Do output those jump instructions, on the assumption that you
-will assemble with the GNU assembler.
-.TP
-.B \-mg
-Output code for g-format floating point numbers instead of d-format.
-.PP
-These `\|\c
-.B \-m\c
-\&\|' switches are supported on the SPARC:
-.PP
-.B \-mfpu
-.TP
-.B \-mhard\-float
-Generate output containing floating point instructions. This is the
-default.
-.PP
-.B \-mno\-fpu
-.TP
-.B \-msoft\-float
-Generate output containing library calls for floating point.
-.I Warning:
-there is no GNU floating-point library for SPARC.
-Normally the facilities of the machine's usual C compiler are used, but
-this cannot be done directly in cross-compilation. You must make your
-own arrangements to provide suitable library functions for
-cross-compilation.
-.Sp
-.B \-msoft\-float
-changes the calling convention in the output file;
-therefore, it is only useful if you compile
-.I all
-of a program with this option.
-.PP
-.B \-mno\-epilogue
-.TP
-.B \-mepilogue
-With
-.B \-mepilogue
-(the default), the compiler always emits code for
-function exit at the end of each function. Any function exit in
-the middle of the function (such as a return statement in C) will
-generate a jump to the exit code at the end of the function.
-.Sp
-With
-.BR \-mno\-epilogue ,
-the compiler tries to emit exit code inline at every function exit.
-.PP
-.B \-mno\-v8
-.TP
-.B \-mv8
-.TP
-.B \-msparclite
-These three options select variations on the SPARC architecture.
-.Sp
-By default (unless specifically configured for the Fujitsu SPARClite),
-GCC generates code for the v7 variant of the SPARC architecture.
-.Sp
-.B \-mv8
-will give you SPARC v8 code. The only difference from v7
-code is that the compiler emits the integer multiply and integer
-divide instructions which exist in SPARC v8 but not in SPARC v7.
-.Sp
-.B \-msparclite
-will give you SPARClite code. This adds the integer
-multiply, integer divide step and scan (ffs) instructions which
-exist in SPARClite but not in SPARC v7.
-.PP
-.B \-mcypress
-.TP
-.B \-msupersparc
-These two options select the processor for which the code is optimised.
-.Sp
-With
-.B \-mcypress
-(the default), the compiler optimises code for the Cypress CY7C602 chip, as
-used in the SparcStation/SparcServer 3xx series. This is also appropriate for
-the older SparcStation 1, 2, IPX etc.
-.Sp
-With
-.B \-msupersparc
-the compiler optimises code for the SuperSparc cpu, as used in the SparcStation
-10, 1000 and 2000 series. This flag also enables use of the full SPARC v8
-instruction set.
-.PP
-These `\|\c
-.B \-m\c
-\&\|' options are defined for the Convex:
-.TP
-.B \-mc1
-Generate output for a C1. This is the default when the compiler is
-configured for a C1.
-.TP
-.B \-mc2
-Generate output for a C2. This is the default when the compiler is
-configured for a C2.
-.TP
-.B \-margcount
-Generate code which puts an argument count in the word preceding each
-argument list. Some nonportable Convex and Vax programs need this word.
-(Debuggers don't, except for functions with variable-length argument
-lists; this info is in the symbol table.)
-.TP
-.B \-mnoargcount
-Omit the argument count word. This is the default if you use the
-unmodified sources.
-.PP
-These `\|\c
-.B \-m\c
-\&\|' options are defined for the AMD Am29000:
-.TP
-.B \-mdw
-Generate code that assumes the DW bit is set, i.e., that byte and
-halfword operations are directly supported by the hardware. This is the
-default.
-.TP
-.B \-mnodw
-Generate code that assumes the DW bit is not set.
-.TP
-.B \-mbw
-Generate code that assumes the system supports byte and halfword write
-operations. This is the default.
-.TP
-.B \-mnbw
-Generate code that assumes the systems does not support byte and
-halfword write operations. This implies `\|\c
-.B \-mnodw\c
-\&\|'.
-.TP
-.B \-msmall
-Use a small memory model that assumes that all function addresses are
-either within a single 256 KB segment or at an absolute address of less
-than 256K. This allows the \c
-.B call\c
-\& instruction to be used instead
-of a \c
-.B const\c
-\&, \c
-.B consth\c
-\&, \c
-.B calli\c
-\& sequence.
-.TP
-.B \-mlarge
-Do not assume that the \c
-.B call\c
-\& instruction can be used; this is the
-default.
-.TP
-.B \-m29050
-Generate code for the Am29050.
-.TP
-.B \-m29000
-Generate code for the Am29000. This is the default.
-.TP
-.B \-mkernel\-registers
-Generate references to registers \c
-.B gr64-gr95\c
-\& instead of
-.B gr96-gr127\c
-\&. This option can be used when compiling kernel code
-that wants a set of global registers disjoint from that used by
-user-mode code.
-.Sp
-Note that when this option is used, register names in `\|\c
-.B \-f\c
-\&\|' flags
-must use the normal, user-mode, names.
-.TP
-.B \-muser\-registers
-Use the normal set of global registers, \c
-.B gr96-gr127\c
-\&. This is the
-default.
-.TP
-.B \-mstack\-check
-Insert a call to \c
-.B _\|_msp_check\c
-\& after each stack adjustment. This
-is often used for kernel code.
-.PP
-These `\|\c
-.B \-m\c
-\&\|' options are defined for Motorola 88K architectures:
-.TP
-.B \-m88000
-Generate code that works well on both the m88100 and the
-m88110.
-.TP
-.B \-m88100
-Generate code that works best for the m88100, but that also
-runs on the m88110.
-.TP
-.B \-m88110
-Generate code that works best for the m88110, and may not run
-on the m88100.
-.TP
-.B \-midentify\-revision
-Include an \c
-.B ident\c
-\& directive in the assembler output recording the
-source file name, compiler name and version, timestamp, and compilation
-flags used.
-.TP
-.B \-mno\-underscores
-In assembler output, emit symbol names without adding an underscore
-character at the beginning of each name. The default is to use an
-underscore as prefix on each name.
-.TP
-.B \-mno\-check\-zero\-division
-.TP
-.B \-mcheck\-zero\-division
-Early models of the 88K architecture had problems with division by zero;
-in particular, many of them didn't trap. Use these options to avoid
-including (or to include explicitly) additional code to detect division
-by zero and signal an exception. All GCC configurations for the 88K use
-`\|\c
-.B \-mcheck\-zero\-division\c
-\&\|' by default.
-.TP
-.B \-mocs\-debug\-info
-.TP
-.B \-mno\-ocs\-debug\-info
-Include (or omit) additional debugging information (about
-registers used in each stack frame) as specified in the 88Open Object
-Compatibility Standard, \*(lqOCS\*(rq. This extra information is not needed
-by GDB. The default for DG/UX, SVr4, and Delta 88 SVr3.2 is to
-include this information; other 88k configurations omit this information
-by default.
-.TP
-.B \-mocs\-frame\-position
-.TP
-.B \-mno\-ocs\-frame\-position
-Force (or do not require) register values to be stored in a particular
-place in stack frames, as specified in OCS. The DG/UX, Delta88 SVr3.2,
-and BCS configurations use `\|\c
-.B \-mocs\-frame\-position\c
-\&\|'; other 88k
-configurations have the default `\|\c
-.B \-mno\-ocs\-frame\-position\c
-\&\|'.
-.TP
-.B \-moptimize\-arg\-area
-.TP
-.B \-mno\-optimize\-arg\-area
-Control how to store function arguments in stack frames.
-`\|\c
-.B \-moptimize\-arg\-area\c
-\&\|' saves space, but may break some
-debuggers (not GDB). `\|\c
-.B \-mno\-optimize\-arg\-area\c
-\&\|' conforms better to
-standards. By default GCC does not optimize the argument area.
-.TP
-.BI "\-mshort\-data\-" "num"
-.I num
-Generate smaller data references by making them relative to \c
-.B r0\c
-\&,
-which allows loading a value using a single instruction (rather than the
-usual two). You control which data references are affected by
-specifying \c
-.I num\c
-\& with this option. For example, if you specify
-`\|\c
-.B \-mshort\-data\-512\c
-\&\|', then the data references affected are those
-involving displacements of less than 512 bytes.
-`\|\c
-.B \-mshort\-data\-\c
-.I num\c
-\&\c
-\&\|' is not effective for \c
-.I num\c
-\& greater
-than 64K.
-.PP
-.B \-mserialize-volatile
-.TP
-.B \-mno-serialize-volatile
-Do, or do not, generate code to guarantee sequential consistency of
-volatile memory references.
-.Sp
-GNU CC always guarantees consistency by default, for the preferred
-processor submodel. How this is done depends on the submodel.
-.Sp
-The m88100 processor does not reorder memory references and so always
-provides sequential consistency. If you use `\|\c
-.B \-m88100\c
-\&\|', GNU CC does
-not generate any special instructions for sequential consistency.
-.Sp
-The order of memory references made by the m88110 processor does not
-always match the order of the instructions requesting those references.
-In particular, a load instruction may execute before a preceding store
-instruction. Such reordering violates sequential consistency of
-volatile memory references, when there are multiple processors. When
-you use `\|\c
-.B \-m88000\c
-\&\|' or `\|\c
-.B \-m88110\c
-\&\|', GNU CC generates special
-instructions when appropriate, to force execution in the proper order.
-.Sp
-The extra code generated to guarantee consistency may affect the
-performance of your application. If you know that you can safely forgo
-this guarantee, you may use the option `\|\c
-.B \-mno-serialize-volatile\c
-\&\|'.
-.Sp
-If you use the `\|\c
-.B \-m88100\c
-\&\|' option but require sequential consistency
-when running on the m88110 processor, you should use
-`\|\c
-.B \-mserialize-volatile\c
-\&\|'.
-.PP
-.B \-msvr4
-.TP
-.B \-msvr3
-Turn on (`\|\c
-.B \-msvr4\c
-\&\|') or off (`\|\c
-.B \-msvr3\c
-\&\|') compiler extensions
-related to System V release 4 (SVr4). This controls the following:
-.TP
-\ \ \ \(bu
-Which variant of the assembler syntax to emit (which you can select
-independently using `\|\c
-.B \-mversion\-03.00\c
-\&\|').
-.TP
-\ \ \ \(bu
-`\|\c
-.B \-msvr4\c
-\&\|' makes the C preprocessor recognize `\|\c
-.B #pragma weak\c
-\&\|'
-.TP
-\ \ \ \(bu
-`\|\c
-.B \-msvr4\c
-\&\|' makes GCC issue additional declaration directives used in
-SVr4.
-.PP
-`\|\c
-.B \-msvr3\c
-\&\|' is the default for all m88K configurations except
-the SVr4 configuration.
-.TP
-.B \-mtrap\-large\-shift
-.TP
-.B \-mhandle\-large\-shift
-Include code to detect bit-shifts of more than 31 bits; respectively,
-trap such shifts or emit code to handle them properly. By default GCC
-makes no special provision for large bit shifts.
-.TP
-.B \-muse\-div\-instruction
-Very early models of the 88K architecture didn't have a divide
-instruction, so GCC avoids that instruction by default. Use this option
-to specify that it's safe to use the divide instruction.
-.TP
-.B \-mversion\-03.00
-In the DG/UX configuration, there are two flavors of SVr4. This option
-modifies
-.B \-msvr4
-to select whether the hybrid-COFF or real-ELF
-flavor is used. All other configurations ignore this option.
-.TP
-.B \-mwarn\-passed\-structs
-Warn when a function passes a struct as an argument or result.
-Structure-passing conventions have changed during the evolution of the C
-language, and are often the source of portability problems. By default,
-GCC issues no such warning.
-.PP
-These options are defined for the IBM RS6000:
-.PP
-.B \-mfp\-in\-toc
-.TP
-.B \-mno\-fp\-in\-toc
-Control whether or not floating-point constants go in the Table of
-Contents (TOC), a table of all global variable and function addresses. By
-default GCC puts floating-point constants there; if the TOC overflows,
-`\|\c
-.B \-mno\-fp\-in\-toc\c
-\&\|' will reduce the size of the TOC, which may avoid
-the overflow.
-.PP
-These `\|\c
-.B \-m\c
-\&\|' options are defined for the IBM RT PC:
-.TP
-.B \-min\-line\-mul
-Use an in-line code sequence for integer multiplies. This is the
-default.
-.TP
-.B \-mcall\-lib\-mul
-Call \c
-.B lmul$$\c
-\& for integer multiples.
-.TP
-.B \-mfull\-fp\-blocks
-Generate full-size floating point data blocks, including the minimum
-amount of scratch space recommended by IBM. This is the default.
-.TP
-.B \-mminimum\-fp\-blocks
-Do not include extra scratch space in floating point data blocks. This
-results in smaller code, but slower execution, since scratch space must
-be allocated dynamically.
-.TP
-.B \-mfp\-arg\-in\-fpregs
-Use a calling sequence incompatible with the IBM calling convention in
-which floating point arguments are passed in floating point registers.
-Note that \c
-.B varargs.h\c
-\& and \c
-.B stdargs.h\c
-\& will not work with
-floating point operands if this option is specified.
-.TP
-.B \-mfp\-arg\-in\-gregs
-Use the normal calling convention for floating point arguments. This is
-the default.
-.TP
-.B \-mhc\-struct\-return
-Return structures of more than one word in memory, rather than in a
-register. This provides compatibility with the MetaWare HighC (hc)
-compiler. Use `\|\c
-.B \-fpcc\-struct\-return\c
-\&\|' for compatibility with the
-Portable C Compiler (pcc).
-.TP
-.B \-mnohc\-struct\-return
-Return some structures of more than one word in registers, when
-convenient. This is the default. For compatibility with the
-IBM-supplied compilers, use either `\|\c
-.B \-fpcc\-struct\-return\c
-\&\|' or
-`\|\c
-.B \-mhc\-struct\-return\c
-\&\|'.
-.PP
-These `\|\c
-.B \-m\c
-\&\|' options are defined for the MIPS family of computers:
-.TP
-.BI "\-mcpu=" "cpu-type"
-Assume the defaults for the machine type
-.I cpu-type
-when
-scheduling instructions. The default
-.I cpu-type
-is
-.BR default ,
-which picks the longest cycles times for any of the machines, in order
-that the code run at reasonable rates on all MIPS cpu's. Other
-choices for
-.I cpu-type
-are
-.BR r2000 ,
-.BR r3000 ,
-.BR r4000 ,
-and
-.BR r6000 .
-While picking a specific
-.I cpu-type
-will schedule things appropriately for that particular chip, the
-compiler will not generate any code that does not meet level 1 of the
-MIPS ISA (instruction set architecture) without the
-.B \-mips2
-or
-.B \-mips3
-switches being used.
-.TP
-.B \-mips2
-Issue instructions from level 2 of the MIPS ISA (branch likely, square
-root instructions). The
-.B \-mcpu=r4000
-or
-.B \-mcpu=r6000
-switch must be used in conjunction with
-.BR \-mips2 .
-.TP
-.B \-mips3
-Issue instructions from level 3 of the MIPS ISA (64 bit instructions).
-The
-.B \-mcpu=r4000
-switch must be used in conjunction with
-.BR \-mips2 .
-.TP
-.B \-mint64
-.TP
-.B \-mlong64
-.TP
-.B \-mlonglong128
-These options don't work at present.
-.TP
-.B \-mmips\-as
-Generate code for the MIPS assembler, and invoke
-.B mips\-tfile
-to add normal debug information. This is the default for all
-platforms except for the OSF/1 reference platform, using the OSF/rose
-object format. If any of the
-.BR \-ggdb ,
-.BR \-gstabs ,
-or
-.B \-gstabs+
-switches are used, the
-.B mips\-tfile
-program will encapsulate the stabs within MIPS ECOFF.
-.TP
-.B \-mgas
-Generate code for the GNU assembler. This is the default on the OSF/1
-reference platform, using the OSF/rose object format.
-.TP
-.B \-mrnames
-.TP
-.B \-mno\-rnames
-The
-.B \-mrnames
-switch says to output code using the MIPS software names for the
-registers, instead of the hardware names (ie,
-.B a0
-instead of
-.BR $4 ).
-The GNU assembler does not support the
-.B \-mrnames
-switch, and the MIPS assembler will be instructed to run the MIPS C
-preprocessor over the source file. The
-.B \-mno\-rnames
-switch is default.
-.TP
-.B \-mgpopt
-.TP
-.B \-mno\-gpopt
-The
-.B \-mgpopt
-switch says to write all of the data declarations before the
-instructions in the text section, to all the MIPS assembler to
-generate one word memory references instead of using two words for
-short global or static data items. This is on by default if
-optimization is selected.
-.TP
-.B \-mstats
-.TP
-.B \-mno\-stats
-For each non-inline function processed, the
-.B \-mstats
-switch causes the compiler to emit one line to the standard error file
-to print statistics about the program (number of registers saved,
-stack size, etc.).
-.TP
-.B \-mmemcpy
-.TP
-.B \-mno\-memcpy
-The
-.B \-mmemcpy
-switch makes all block moves call the appropriate string function
-.RB ( memcpy
-or
-.BR bcopy )
-instead of possibly generating inline code.
-.TP
-.B \-mmips\-tfile
-.TP
-.B \-mno\-mips\-tfile
-The
-.B \-mno\-mips\-tfile
-switch causes the compiler not postprocess the object file with the
-.B mips\-tfile
-program, after the MIPS assembler has generated it to add debug
-support. If
-.B mips\-tfile
-is not run, then no local variables will be available to the debugger.
-In addition,
-.B stage2
-and
-.B stage3
-objects will have the temporary file names passed to the assembler
-embedded in the object file, which means the objects will not compare
-the same.
-.TP
-.B \-msoft\-float
-Generate output containing library calls for floating point.
-.I
-WARNING:
-the requisite libraries are not part of GNU CC. Normally the
-facilities of the machine's usual C compiler are used, but this can't
-be done directly in cross-compilation. You must make your own
-arrangements to provide suitable library functions for cross-compilation.
-.TP
-.B \-mhard\-float
-Generate output containing floating point instructions. This is the
-default if you use the unmodified sources.
-.TP
-.B \-mfp64
-Assume that the
-.B FR
-bit in the status word is on, and that there are 32 64-bit floating
-point registers, instead of 32 32-bit floating point registers. You
-must also specify the
-.B \-mcpu=r4000
-and
-.B \-mips3
-switches.
-.TP
-.B \-mfp32
-Assume that there are 32 32-bit floating point registers. This is the
-default.
-.PP
-.B \-mabicalls
-.TP
-.B \-mno\-abicalls
-Emit (or do not emit) the
-.BR \&.abicalls ,
-.BR \&.cpload ,
-and
-.B \&.cprestore
-pseudo operations that some System V.4 ports use for position
-independent code.
-.TP
-.B \-mhalf\-pic
-.TP
-.B \-mno\-half\-pic
-The
-.B \-mhalf\-pic
-switch says to put pointers to extern references into the data section
-and load them up, rather than put the references in the text section.
-This option does not work at present.
-.B
-.BI \-G num
-Put global and static items less than or equal to
-.I num
-bytes into the small data or bss sections instead of the normal data
-or bss section. This allows the assembler to emit one word memory
-reference instructions based on the global pointer
-.RB ( gp
-or
-.BR $28 ),
-instead of the normal two words used. By default,
-.I num
-is 8 when the MIPS assembler is used, and 0 when the GNU
-assembler is used. The
-.BI \-G num
-switch is also passed to the assembler and linker. All modules should
-be compiled with the same
-.BI \-G num
-value.
-.TP
-.B \-nocpp
-Tell the MIPS assembler to not run its preprocessor over user
-assembler files (with a `\|\c
-.B .s\c
-\&\|' suffix) when assembling them.
-.PP
-These `\|\c
-.B \-m\c
-\&\|' options are defined for the Intel 80386 family of computers:
-.B \-m486
-.TP
-.B \-mno\-486
-Control whether or not code is optimized for a 486 instead of an
-386. Code generated for a 486 will run on a 386 and vice versa.
-.TP
-.B \-msoft\-float
-Generate output containing library calls for floating point.
-.I Warning:
-the requisite libraries are not part of GNU CC.
-Normally the facilities of the machine's usual C compiler are used, but
-this can't be done directly in cross-compilation. You must make your
-own arrangements to provide suitable library functions for
-cross-compilation.
-.Sp
-On machines where a function returns floating point results in the 80387
-register stack, some floating point opcodes may be emitted even if
-`\|\c
-.B \-msoft-float\c
-\&\|' is used.
-.TP
-.B \-mno-fp-ret-in-387
-Do not use the FPU registers for return values of functions.
-.Sp
-The usual calling convention has functions return values of types
-.B float\c
-\& and \c
-.B double\c
-\& in an FPU register, even if there
-is no FPU. The idea is that the operating system should emulate
-an FPU.
-.Sp
-The option `\|\c
-.B \-mno-fp-ret-in-387\c
-\&\|' causes such values to be returned
-in ordinary CPU registers instead.
-.PP
-These `\|\c
-.B \-m\c
-\&\|' options are defined for the HPPA family of computers:
-.TP
-.B \-mpa-risc-1-0
-Generate code for a PA 1.0 processor.
-.TP
-.B \-mpa-risc-1-1
-Generate code for a PA 1.1 processor.
-.TP
-.B \-mkernel
-Generate code which is suitable for use in kernels. Specifically, avoid
-.B add\c
-\& instructions in which one of the arguments is the DP register;
-generate \c
-.B addil\c
-\& instructions instead. This avoids a rather serious
-bug in the HP-UX linker.
-.TP
-.B \-mshared-libs
-Generate code that can be linked against HP-UX shared libraries. This option
-is not fully function yet, and is not on by default for any PA target. Using
-this option can cause incorrect code to be generated by the compiler.
-.TP
-.B \-mno-shared-libs
-Don't generate code that will be linked against shared libraries. This is
-the default for all PA targets.
-.TP
-.B \-mlong-calls
-Generate code which allows calls to functions greater than 256K away from
-the caller when the caller and callee are in the same source file. Do
-not turn this option on unless code refuses to link with \*(lqbranch out of
-range errors\*('' from the linker.
-.TP
-.B \-mdisable-fpregs
-Prevent floating point registers from being used in any manner. This is
-necessary for compiling kernels which perform lazy context switching of
-floating point registers. If you use this option and attempt to perform
-floating point operations, the compiler will abort.
-.TP
-.B \-mdisable-indexing
-Prevent the compiler from using indexing address modes. This avoids some
-rather obscure problems when compiling MIG generated code under MACH.
-.TP
-.B \-mtrailing-colon
-Add a colon to the end of label definitions (for ELF assemblers).
-.PP
-These `\|\c
-.B \-m\c
-\&\|' options are defined for the Intel 80960 family of computers:
-.TP
-.BI "\-m" "cpu-type"
-Assume the defaults for the machine type
-.I cpu-type
-for instruction and addressing-mode availability and alignment.
-The default
-.I cpu-type
-is
-.BR kb ;
-other choices are
-.BR ka ,
-.BR mc ,
-.BR ca ,
-.BR cf ,
-.BR sa ,
-and
-.BR sb .
-.TP
-.B \-mnumerics
-.TP
-.B \-msoft\-float
-The
-.B \-mnumerics
-option indicates that the processor does support
-floating-point instructions. The
-.B \-msoft\-float
-option indicates
-that floating-point support should not be assumed.
-.TP
-.B \-mleaf\-procedures
-.TP
-.B \-mno\-leaf\-procedures
-Do (or do not) attempt to alter leaf procedures to be callable with the
-.I bal
-instruction as well as
-.IR call .
-This will result in more
-efficient code for explicit calls when the
-.I bal
-instruction can be
-substituted by the assembler or linker, but less efficient code in other
-cases, such as calls via function pointers, or using a linker that doesn't
-support this optimization.
-.TP
-.B \-mtail\-call
-.TP
-.B \-mno\-tail\-call
-Do (or do not) make additional attempts (beyond those of the
-machine-independent portions of the compiler) to optimize tail-recursive
-calls into branches. You may not want to do this because the detection of
-cases where this is not valid is not totally complete. The default is
-.BR \-mno\-tail\-call .
-.TP
-.B \-mcomplex\-addr
-.TP
-.B \-mno\-complex\-addr
-Assume (or do not assume) that the use of a complex addressing mode is a
-win on this implementation of the i960. Complex addressing modes may not
-be worthwhile on the K-series, but they definitely are on the C-series.
-The default is currently
-.B \-mcomplex\-addr
-for all processors except
-the CB and CC.
-.TP
-.B \-mcode\-align
-.TP
-.B \-mno\-code\-align
-Align code to 8-byte boundaries for faster fetching (or don't bother).
-Currently turned on by default for C-series implementations only.
-.TP
-.B \-mic\-compat
-.TP
-.B \-mic2.0\-compat
-.TP
-.B \-mic3.0\-compat
-Enable compatibility with iC960 v2.0 or v3.0.
-.TP
-.B \-masm\-compat
-.TP
-.B \-mintel\-asm
-Enable compatibility with the iC960 assembler.
-.TP
-.B \-mstrict\-align
-.TP
-.B \-mno\-strict\-align
-Do not permit (do permit) unaligned accesses.
-.TP
-.B \-mold\-align
-Enable structure-alignment compatibility with Intel's gcc release version
-1.3 (based on gcc 1.37). Currently this is buggy in that
-.B #pragma align 1
-is always assumed as well, and cannot be turned off.
-.PP
-These `\|\c
-.B \-m\c
-\&\|' options are defined for the DEC Alpha implementations:
-.TP
-.B \-mno-soft-float
-.TP
-.B \-msoft-float
-Use (do not use) the hardware floating-point instructions for
-floating-point operations. When \c
-.B \-msoft-float\c
-\& is specified,
-functions in `\|\c
-.B libgcc1.c\c
-\&\|' will be used to perform floating-point
-operations. Unless they are replaced by routines that emulate the
-floating-point operations, or compiled in such a way as to call such
-emulations routines, these routines will issue floating-point
-operations. If you are compiling for an Alpha without floating-point
-operations, you must ensure that the library is built so as not to call
-them.
-.Sp
-Note that Alpha implementations without floating-point operations are
-required to have floating-point registers.
-.TP
-.B \-mfp-reg
-.TP
-.B \-mno-fp-regs
-Generate code that uses (does not use) the floating-point register set.
-.B \-mno-fp-regs\c
-\& implies \c
-.B \-msoft-float\c
-\&. If the floating-point
-register set is not used, floating point operands are passed in integer
-registers as if they were integers and floating-point results are passed
-in $0 instead of $f0. This is a non-standard calling sequence, so any
-function with a floating-point argument or return value called by code
-compiled with \c
-.B \-mno-fp-regs\c
-\& must also be compiled with that
-option.
-.Sp
-A typical use of this option is building a kernel that does not use,
-and hence need not save and restore, any floating-point registers.
-.PP
-These additional options are available on System V Release 4 for
-compatibility with other compilers on those systems:
-.TP
-.B \-G
-On SVr4 systems, \c
-.B gcc\c
-\& accepts the option `\|\c
-.B \-G\c
-\&\|' (and passes
-it to the system linker), for compatibility with other compilers.
-However, we suggest you use `\|\c
-.B \-symbolic\c
-\&\|' or `\|\c
-.B \-shared\c
-\&\|' as
-appropriate, instead of supplying linker options on the \c
-.B gcc
-command line.
-.TP
-.B \-Qy
-Identify the versions of each tool used by the compiler, in a
-.B .ident\c
-\& assembler directive in the output.
-.TP
-.B \-Qn
-Refrain from adding \c
-.B .ident\c
-\& directives to the output file (this is
-the default).
-.TP
-.BI "\-YP," "dirs"
-Search the directories \c
-.I dirs\c
-\&, and no others, for libraries
-specified with `\|\c
-.B \-l\c
-\&\|'. You can separate directory entries in
-.I dirs\c
-\& from one another with colons.
-.TP
-.BI "\-Ym," "dir"
-Look in the directory \c
-.I dir\c
-\& to find the M4 preprocessor.
-The assembler uses this option.
-.SH CODE GENERATION OPTIONS
-These machine-independent options control the interface conventions
-used in code generation.
-.PP
-Most of them begin with `\|\c
-\-f\c
-\&\|'. These options have both positive and negative forms; the negative form
-of `\|\c
-.B \-ffoo\c
-\&\|' would be `\|\c
-.B \-fno\-foo\c
-\&\|'. In the table below, only
-one of the forms is listed\(em\&the one which is not the default. You
-can figure out the other form by either removing `\|\c
-.B no\-\c
-\&\|' or adding
-it.
-.TP
-.B \-fnonnull\-objects
-Assume that objects reached through references are not null
-(C++ only).
-.Sp
-Normally, GNU C++ makes conservative assumptions about objects reached
-through references. For example, the compiler must check that \c
-.B a
-is not null in code like the following:
-.Sp
-obj &a = g ();
-a.f (2);
-.Sp
-Checking that references of this sort have non-null values requires
-extra code, however, and it is unnecessary for many programs. You can
-use `\|\c
-.B \-fnonnull-objects\c
-\&\|' to omit the checks for null, if your
-program doesn't require checking.
-.TP
-.B \-fpcc\-struct\-return
-Use the same convention for returning \c
-.B struct\c
-\& and \c
-.B union
-values that is used by the usual C compiler on your system. This
-convention is less efficient for small structures, and on many
-machines it fails to be reentrant; but it has the advantage of
-allowing intercallability between GCC-compiled code and PCC-compiled
-code.
-.TP
-.B \-freg\-struct\-return
-Use the convention that
-.B struct
-and
-.B union
-values are returned in registers when possible. This is more
-efficient for small structures than
-.BR \-fpcc\-struct\-return .
-.Sp
-If you specify neither
-.B \-fpcc\-struct\-return
-nor
-.BR \-freg\-struct\-return ,
-GNU CC defaults to whichever convention is standard for the target.
-If there is no standard convention, GNU CC defaults to
-.BR \-fpcc\-struct\-return .
-.TP
-.B \-fshort\-enums
-Allocate to an \c
-.B enum\c
-\& type only as many bytes as it needs for the
-declared range of possible values. Specifically, the \c
-.B enum\c
-\& type
-will be equivalent to the smallest integer type which has enough room.
-.TP
-.B \-fshort\-double
-Use the same size for
-.B double
-as for
-.B float
-\&.
-.TP
-.B \-fshared\-data
-Requests that the data and non-\c
-.B const\c
-\& variables of this
-compilation be shared data rather than private data. The distinction
-makes sense only on certain operating systems, where shared data is
-shared between processes running the same program, while private data
-exists in one copy per process.
-.TP
-.B \-fno\-common
-Allocate even uninitialized global variables in the bss section of the
-object file, rather than generating them as common blocks. This has the
-effect that if the same variable is declared (without \c
-.B extern\c
-\&) in
-two different compilations, you will get an error when you link them.
-The only reason this might be useful is if you wish to verify that the
-program will work on other systems which always work this way.
-.TP
-.B \-fno\-ident
-Ignore the `\|\c
-.B #ident\c
-\&\|' directive.
-.TP
-.B \-fno\-gnu\-linker
-Do not output global initializations (such as C++ constructors and
-destructors) in the form used by the GNU linker (on systems where the GNU
-linker is the standard method of handling them). Use this option when
-you want to use a non-GNU linker, which also requires using the
-.B collect2\c
-\& program to make sure the system linker includes
-constructors and destructors. (\c
-.B collect2\c
-\& is included in the GNU CC
-distribution.) For systems which \c
-.I must\c
-\& use \c
-.B collect2\c
-\&, the
-compiler driver \c
-.B gcc\c
-\& is configured to do this automatically.
-.TP
-.B \-finhibit-size-directive
-Don't output a \c
-.B .size\c
-\& assembler directive, or anything else that
-would cause trouble if the function is split in the middle, and the
-two halves are placed at locations far apart in memory. This option is
-used when compiling `\|\c
-.B crtstuff.c\c
-\&\|'; you should not need to use it
-for anything else.
-.TP
-.B \-fverbose-asm
-Put extra commentary information in the generated assembly code to
-make it more readable. This option is generally only of use to those
-who actually need to read the generated assembly code (perhaps while
-debugging the compiler itself).
-.TP
-.B \-fvolatile
-Consider all memory references through pointers to be volatile.
-.TP
-.B \-fvolatile\-global
-Consider all memory references to extern and global data items to
-be volatile.
-.TP
-.B \-fpic
-If supported for the target machines, generate position-independent code,
-suitable for use in a shared library.
-.TP
-.B \-fPIC
-If supported for the target machine, emit position-independent code,
-suitable for dynamic linking, even if branches need large displacements.
-.TP
-.BI "\-ffixed\-" "reg"
-Treat the register named \c
-.I reg\c
-\& as a fixed register; generated code
-should never refer to it (except perhaps as a stack pointer, frame
-pointer or in some other fixed role).
-.Sp
-.I reg\c
-\& must be the name of a register. The register names accepted
-are machine-specific and are defined in the \c
-.B REGISTER_NAMES
-macro in the machine description macro file.
-.Sp
-This flag does not have a negative form, because it specifies a
-three-way choice.
-.TP
-.BI "\-fcall\-used\-" "reg"
-Treat the register named \c
-.I reg\c
-\& as an allocable register that is
-clobbered by function calls. It may be allocated for temporaries or
-variables that do not live across a call. Functions compiled this way
-will not save and restore the register \c
-.I reg\c
-\&.
-.Sp
-Use of this flag for a register that has a fixed pervasive role in the
-machine's execution model, such as the stack pointer or frame pointer,
-will produce disastrous results.
-.Sp
-This flag does not have a negative form, because it specifies a
-three-way choice.
-.TP
-.BI "\-fcall\-saved\-" "reg"
-Treat the register named \c
-.I reg\c
-\& as an allocable register saved by
-functions. It may be allocated even for temporaries or variables that
-live across a call. Functions compiled this way will save and restore
-the register \c
-.I reg\c
-\& if they use it.
-.Sp
-Use of this flag for a register that has a fixed pervasive role in the
-machine's execution model, such as the stack pointer or frame pointer,
-will produce disastrous results.
-.Sp
-A different sort of disaster will result from the use of this flag for
-a register in which function values may be returned.
-.Sp
-This flag does not have a negative form, because it specifies a
-three-way choice.
-.SH PRAGMAS
-Two `\|\c
-.B #pragma\c
-\&\|' directives are supported for GNU C++, to permit using the same
-header file for two purposes: as a definition of interfaces to a given
-object class, and as the full definition of the contents of that object class.
-.TP
-.B #pragma interface
-(C++ only.)
-Use this directive in header files that define object classes, to save
-space in most of the object files that use those classes. Normally,
-local copies of certain information (backup copies of inline member
-functions, debugging information, and the internal tables that
-implement virtual functions) must be kept in each object file that
-includes class definitions. You can use this pragma to avoid such
-duplication. When a header file containing `\|\c
-.B #pragma interface\c
-\&\|' is included in a compilation, this auxiliary information
-will not be generated (unless the main input source file itself uses
-`\|\c
-.B #pragma implementation\c
-\&\|'). Instead, the object files will contain references to be
-resolved at link time.
-.TP
-.B #pragma implementation
-.TP
-\fB#pragma implementation "\fP\fIobjects\fP\fB.h"\fP
-(C++ only.)
-Use this pragma in a main input file, when you want full output from
-included header files to be generated (and made globally visible).
-The included header file, in turn, should use `\|\c
-.B #pragma interface\c
-\&\|'.
-Backup copies of inline member functions, debugging information, and
-the internal tables used to implement virtual functions are all
-generated in implementation files.
-.Sp
-If you use `\|\c
-.B #pragma implementation\c
-\&\|' with no argument, it applies to an include file with the same
-basename as your source file; for example, in `\|\c
-.B allclass.cc\c
-\&\|', `\|\c
-.B #pragma implementation\c
-\&\|' by itself is equivalent to `\|\c
-.B
-#pragma implementation "allclass.h"\c
-\&\|'. Use the string argument if you want a single implementation
-file to include code from multiple header files.
-.Sp
-There is no way to split up the contents of a single header file into
-multiple implementation files.
-.SH FILES
-.nf
-.ta \w'LIBDIR/g++\-include 'u
-file.c C source file
-file.h C header (preprocessor) file
-file.i preprocessed C source file
-file.C C++ source file
-file.cc C++ source file
-file.cxx C++ source file
-file.m Objective-C source file
-file.s assembly language file
-file.o object file
-a.out link edited output
-\fITMPDIR\fR/cc\(** temporary files
-\fILIBDIR\fR/cpp preprocessor
-\fILIBDIR\fR/cc1 compiler for C
-\fILIBDIR\fR/cc1plus compiler for C++
-\fILIBDIR\fR/collect linker front end needed on some machines
-\fILIBDIR\fR/libgcc.a GCC subroutine library
-/lib/crt[01n].o start-up routine
-\fILIBDIR\fR/ccrt0 additional start-up routine for C++
-/lib/libc.a standard C library, see
-.IR intro (3)
-/usr/include standard directory for \fB#include\fP files
-\fILIBDIR\fR/include standard gcc directory for \fB#include\fP files
-\fILIBDIR\fR/g++\-include additional g++ directory for \fB#include\fP
-.Sp
-.fi
-.I LIBDIR
-is usually
-.B /usr/local/lib/\c
-.IR machine / version .
-.br
-.I TMPDIR
-comes from the environment variable
-.B TMPDIR
-(default
-.B /usr/tmp
-if available, else
-.B /tmp\c
-\&).
-.SH "SEE ALSO"
-cpp(1), as(1), ld(1), gdb(1), adb(1), dbx(1), sdb(1).
-.br
-.RB "`\|" gcc "\|', `\|" cpp \|',
-.RB "`\|" as "\|', `\|" ld \|',
-and
-.RB `\| gdb \|'
-entries in
-.B info\c
-\&.
-.br
-.I
-Using and Porting GNU CC (for version 2.0)\c
-, Richard M. Stallman;
-.I
-The C Preprocessor\c
-, Richard M. Stallman;
-.I
-Debugging with GDB: the GNU Source-Level Debugger\c
-, Richard M. Stallman and Roland H. Pesch;
-.I
-Using as: the GNU Assembler\c
-, Dean Elsner, Jay Fenlason & friends;
-.I
-ld: the GNU linker\c
-, Steve Chamberlain and Roland Pesch.
-.SH BUGS
-For instructions on reporting bugs, see the GCC manual.
-.SH COPYING
-Copyright
-.if t \(co
-1991, 1992, 1993 Free Software Foundation, Inc.
-.PP
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-.PP
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-.PP
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-.SH AUTHORS
-See the GNU CC Manual for the contributors to GNU CC.
diff --git a/contrib/gcc/objc/sendmsg.c b/contrib/gcc/objc/sendmsg.c
deleted file mode 100644
index 245b8b9eaf79..000000000000
--- a/contrib/gcc/objc/sendmsg.c
+++ /dev/null
@@ -1,651 +0,0 @@
-/* GNU Objective C Runtime message lookup
- Copyright (C) 1993, 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
- Contributed by Kresten Krab Thorup
-
-This file is part of GNU CC.
-
-GNU CC is free software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the Free Software
-Foundation; either version 2, or (at your option) any later version.
-
-GNU CC is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
-details.
-
-You should have received a copy of the GNU General Public License 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. */
-
-/* As a special exception, if you link this library with files compiled with
- GCC to produce an executable, this does not cause the resulting executable
- to be covered by the GNU General Public License. This exception does not
- however invalidate any other reasons why the executable file might be
- covered by the GNU General Public License. */
-
-#include "../tconfig.h"
-#include "runtime.h"
-#include "sarray.h"
-#include "encoding.h"
-#include "runtime-info.h"
-
-/* this is how we hack STRUCT_VALUE to be 1 or 0 */
-#define gen_rtx(args...) 1
-#define gen_rtx_MEM(args...) 1
-#define rtx int
-
-#if !defined(STRUCT_VALUE) || STRUCT_VALUE == 0
-#define INVISIBLE_STRUCT_RETURN 1
-#else
-#define INVISIBLE_STRUCT_RETURN 0
-#endif
-
-/* The uninstalled dispatch table */
-struct sarray* __objc_uninstalled_dtable = 0; /* !T:MUTEX */
-
-/* Send +initialize to class */
-static void __objc_send_initialize(Class);
-
-static void __objc_install_dispatch_table_for_class (Class);
-
-/* Forward declare some functions */
-static void __objc_init_install_dtable(id, SEL);
-
-/* Various forwarding functions that are used based upon the
- return type for the selector.
- __objc_block_forward for structures.
- __objc_double_forward for floats/doubles.
- __objc_word_forward for pointers or types that fit in registers.
- */
-static double __objc_double_forward(id, SEL, ...);
-static id __objc_word_forward(id, SEL, ...);
-typedef struct { id many[8]; } __big;
-#if INVISIBLE_STRUCT_RETURN
-static __big
-#else
-static id
-#endif
-__objc_block_forward(id, SEL, ...);
-static Method_t search_for_method_in_hierarchy (Class class, SEL sel);
-Method_t search_for_method_in_list(MethodList_t list, SEL op);
-id nil_method(id, SEL, ...);
-
-/* Given a selector, return the proper forwarding implementation. */
-__inline__
-IMP
-__objc_get_forward_imp (SEL sel)
-{
- const char *t = sel->sel_types;
-
- if (t && (*t == '[' || *t == '(' || *t == '{')
-#ifdef OBJC_MAX_STRUCT_BY_VALUE
- && objc_sizeof_type(t) > OBJC_MAX_STRUCT_BY_VALUE
-#endif
- )
- return (IMP)__objc_block_forward;
- else if (t && (*t == 'f' || *t == 'd'))
- return (IMP)__objc_double_forward;
- else
- return (IMP)__objc_word_forward;
-}
-
-/* Given a class and selector, return the selector's implementation. */
-__inline__
-IMP
-get_imp (Class class, SEL sel)
-{
- void* res = sarray_get_safe (class->dtable, (size_t) sel->sel_id);
- if (res == 0)
- {
- /* Not a valid method */
- if(class->dtable == __objc_uninstalled_dtable)
- {
- /* The dispatch table needs to be installed. */
- objc_mutex_lock(__objc_runtime_mutex);
- __objc_install_dispatch_table_for_class (class);
- objc_mutex_unlock(__objc_runtime_mutex);
- /* Call ourselves with the installed dispatch table
- and get the real method */
- res = get_imp(class, sel);
- }
- else
- {
- /* The dispatch table has been installed so the
- method just doesn't exist for the class.
- Return the forwarding implementation. */
- res = __objc_get_forward_imp(sel);
- }
- }
- return res;
-}
-
-/* Query if an object can respond to a selector, returns YES if the
-object implements the selector otherwise NO. Does not check if the
-method can be forwarded. */
-__inline__
-BOOL
-__objc_responds_to (id object, SEL sel)
-{
- void* res;
-
- /* Install dispatch table if need be */
- if (object->class_pointer->dtable == __objc_uninstalled_dtable)
- {
- objc_mutex_lock(__objc_runtime_mutex);
- __objc_install_dispatch_table_for_class (object->class_pointer);
- objc_mutex_unlock(__objc_runtime_mutex);
- }
-
- /* Get the method from the dispatch table */
- res = sarray_get_safe (object->class_pointer->dtable, (size_t) sel->sel_id);
- return (res != 0);
-}
-
-/* This is the lookup function. All entries in the table are either a
- valid method *or* zero. If zero then either the dispatch table
- needs to be installed or it doesn't exist and forwarding is attempted. */
-__inline__
-IMP
-objc_msg_lookup(id receiver, SEL op)
-{
- IMP result;
- if(receiver)
- {
- result = sarray_get_safe (receiver->class_pointer->dtable,
- (sidx)op->sel_id);
- if (result == 0)
- {
- /* Not a valid method */
- if(receiver->class_pointer->dtable == __objc_uninstalled_dtable)
- {
- /* The dispatch table needs to be installed.
- This happens on the very first method call to the class. */
- __objc_init_install_dtable(receiver, op);
-
- /* Get real method for this in newly installed dtable */
- result = get_imp(receiver->class_pointer, op);
- }
- else
- {
- /* The dispatch table has been installed so the
- method just doesn't exist for the class.
- Attempt to forward the method. */
- result = __objc_get_forward_imp(op);
- }
- }
- return result;
- }
- else
- return nil_method;
-}
-
-IMP
-objc_msg_lookup_super (Super_t super, SEL sel)
-{
- if (super->self)
- return get_imp (super->class, sel);
- else
- return nil_method;
-}
-
-int method_get_sizeof_arguments (Method*);
-
-retval_t
-objc_msg_sendv(id object, SEL op, arglist_t arg_frame)
-{
- Method* m = class_get_instance_method(object->class_pointer, op);
- const char *type;
- *((id*)method_get_first_argument (m, arg_frame, &type)) = object;
- *((SEL*)method_get_next_argument (arg_frame, &type)) = op;
- return __builtin_apply((apply_t)m->method_imp,
- arg_frame,
- method_get_sizeof_arguments (m));
-}
-
-void
-__objc_init_dispatch_tables()
-{
- __objc_uninstalled_dtable
- = sarray_new(200, 0);
-}
-
-/* This function is called by objc_msg_lookup when the
- dispatch table needs to be installed; thus it is called once
- for each class, namely when the very first message is sent to it. */
-static void
-__objc_init_install_dtable(id receiver, SEL op)
-{
- /* This may happen, if the programmer has taken the address of a
- method before the dtable was initialized... too bad for him! */
- if(receiver->class_pointer->dtable != __objc_uninstalled_dtable)
- return;
-
- objc_mutex_lock(__objc_runtime_mutex);
-
- if(CLS_ISCLASS(receiver->class_pointer))
- {
- /* receiver is an ordinary object */
- assert(CLS_ISCLASS(receiver->class_pointer));
-
- /* install instance methods table */
- __objc_install_dispatch_table_for_class (receiver->class_pointer);
-
- /* call +initialize -- this will in turn install the factory
- dispatch table if not already done :-) */
- __objc_send_initialize(receiver->class_pointer);
- }
- else
- {
- /* receiver is a class object */
- assert(CLS_ISCLASS((Class)receiver));
- assert(CLS_ISMETA(receiver->class_pointer));
-
- /* Install real dtable for factory methods */
- __objc_install_dispatch_table_for_class (receiver->class_pointer);
-
- if (strcmp (sel_get_name (op), "initialize"))
- __objc_send_initialize((Class)receiver);
- else
- CLS_SETINITIALIZED((Class)receiver);
- }
- objc_mutex_unlock(__objc_runtime_mutex);
-}
-
-/* Install dummy table for class which causes the first message to
- that class (or instances hereof) to be initialized properly */
-void
-__objc_install_premature_dtable(Class class)
-{
- assert(__objc_uninstalled_dtable);
- class->dtable = __objc_uninstalled_dtable;
-}
-
-/* Send +initialize to class if not already done */
-static void
-__objc_send_initialize(Class class)
-{
- /* This *must* be a class object */
- assert(CLS_ISCLASS(class));
- assert(!CLS_ISMETA(class));
-
- if (!CLS_ISINITIALIZED(class))
- {
- CLS_SETINITIALIZED(class);
- CLS_SETINITIALIZED(class->class_pointer);
-
- if(class->super_class)
- __objc_send_initialize(class->super_class);
-
- {
- SEL op = sel_register_name ("initialize");
- Class tmpclass = class;
- IMP imp = 0;
-
- while (!imp && tmpclass) {
- MethodList_t method_list = tmpclass->class_pointer->methods;
-
- while(!imp && method_list) {
- int i;
- Method_t method;
-
- for (i=0;i<method_list->method_count;i++) {
- method = &(method_list->method_list[i]);
- if (method->method_name
- && method->method_name->sel_id == op->sel_id) {
- imp = method->method_imp;
- break;
- }
- }
-
- method_list = method_list->method_next;
-
- }
-
- tmpclass = tmpclass->super_class;
- }
- if (imp)
- (*imp)((id)class, op);
-
- }
- }
-}
-
-/* Walk on the methods list of class and install the methods in the reverse
- order of the lists. Since methods added by categories are before the methods
- of class in the methods list, this allows categories to substitute methods
- declared in class. However if more than one category replaces the same
- method nothing is guaranteed about what method will be used.
- Assumes that __objc_runtime_mutex is locked down. */
-static void
-__objc_install_methods_in_dtable (Class class, MethodList_t method_list)
-{
- int i;
-
- if (!method_list)
- return;
-
- if (method_list->method_next)
- __objc_install_methods_in_dtable (class, method_list->method_next);
-
- for (i = 0; i < method_list->method_count; i++)
- {
- Method_t method = &(method_list->method_list[i]);
- sarray_at_put_safe (class->dtable,
- (sidx) method->method_name->sel_id,
- method->method_imp);
- }
-}
-
-/* Assumes that __objc_runtime_mutex is locked down. */
-static void
-__objc_install_dispatch_table_for_class (Class class)
-{
- Class super;
-
- /* If the class has not yet had its class links resolved, we must
- re-compute all class links */
- if(!CLS_ISRESOLV(class))
- __objc_resolve_class_links();
-
- super = class->super_class;
-
- if (super != 0 && (super->dtable == __objc_uninstalled_dtable))
- __objc_install_dispatch_table_for_class (super);
-
- /* Allocate dtable if necessary */
- if (super == 0)
- {
- objc_mutex_lock(__objc_runtime_mutex);
- class->dtable = sarray_new (__objc_selector_max_index, 0);
- objc_mutex_unlock(__objc_runtime_mutex);
- }
- else
- class->dtable = sarray_lazy_copy (super->dtable);
-
- __objc_install_methods_in_dtable (class, class->methods);
-}
-
-void
-__objc_update_dispatch_table_for_class (Class class)
-{
- Class next;
- struct sarray *arr;
-
- /* not yet installed -- skip it */
- if (class->dtable == __objc_uninstalled_dtable)
- return;
-
- objc_mutex_lock(__objc_runtime_mutex);
-
- arr = class->dtable;
- __objc_install_premature_dtable (class); /* someone might require it... */
- sarray_free (arr); /* release memory */
-
- /* could have been lazy... */
- __objc_install_dispatch_table_for_class (class);
-
- if (class->subclass_list) /* Traverse subclasses */
- for (next = class->subclass_list; next; next = next->sibling_class)
- __objc_update_dispatch_table_for_class (next);
-
- objc_mutex_unlock(__objc_runtime_mutex);
-}
-
-
-/* This function adds a method list to a class. This function is
- typically called by another function specific to the run-time. As
- such this function does not worry about thread safe issues.
-
- This one is only called for categories. Class objects have their
- methods installed right away, and their selectors are made into
- SEL's by the function __objc_register_selectors_from_class. */
-void
-class_add_method_list (Class class, MethodList_t list)
-{
- int i;
-
- /* Passing of a linked list is not allowed. Do multiple calls. */
- assert (!list->method_next);
-
- /* Check for duplicates. */
- for (i = 0; i < list->method_count; ++i)
- {
- Method_t method = &list->method_list[i];
-
- if (method->method_name) /* Sometimes these are NULL */
- {
- /* This is where selector names are transmogrified to SEL's */
- method->method_name =
- sel_register_typed_name ((const char*)method->method_name,
- method->method_types);
- }
- }
-
- /* Add the methods to the class's method list. */
- list->method_next = class->methods;
- class->methods = list;
-
- /* Update the dispatch table of class */
- __objc_update_dispatch_table_for_class (class);
-}
-
-Method_t
-class_get_instance_method(Class class, SEL op)
-{
- return search_for_method_in_hierarchy(class, op);
-}
-
-Method_t
-class_get_class_method(MetaClass class, SEL op)
-{
- return search_for_method_in_hierarchy(class, op);
-}
-
-
-/* Search for a method starting from the current class up its hierarchy.
- Return a pointer to the method's method structure if found. NULL
- otherwise. */
-
-static Method_t
-search_for_method_in_hierarchy (Class cls, SEL sel)
-{
- Method_t method = NULL;
- Class class;
-
- if (! sel_is_mapped (sel))
- return NULL;
-
- /* Scan the method list of the class. If the method isn't found in the
- list then step to its super class. */
- for (class = cls; ((! method) && class); class = class->super_class)
- method = search_for_method_in_list (class->methods, sel);
-
- return method;
-}
-
-
-
-/* Given a linked list of method and a method's name. Search for the named
- method's method structure. Return a pointer to the method's method
- structure if found. NULL otherwise. */
-Method_t
-search_for_method_in_list (MethodList_t list, SEL op)
-{
- MethodList_t method_list = list;
-
- if (! sel_is_mapped (op))
- return NULL;
-
- /* If not found then we'll search the list. */
- while (method_list)
- {
- int i;
-
- /* Search the method list. */
- for (i = 0; i < method_list->method_count; ++i)
- {
- Method_t method = &method_list->method_list[i];
-
- if (method->method_name)
- if (method->method_name->sel_id == op->sel_id)
- return method;
- }
-
- /* The method wasn't found. Follow the link to the next list of
- methods. */
- method_list = method_list->method_next;
- }
-
- return NULL;
-}
-
-static retval_t __objc_forward (id object, SEL sel, arglist_t args);
-
-/* Forwarding pointers/integers through the normal registers */
-static id
-__objc_word_forward (id rcv, SEL op, ...)
-{
- void *args, *res;
-
- args = __builtin_apply_args ();
- res = __objc_forward (rcv, op, args);
- if (res)
- __builtin_return (res);
- else
- return res;
-}
-
-/* Specific routine for forwarding floats/double because of
- architectural differences on some processors. i386s for
- example which uses a floating point stack versus general
- registers for floating point numbers. This forward routine
- makes sure that GCC restores the proper return values */
-static double
-__objc_double_forward (id rcv, SEL op, ...)
-{
- void *args, *res;
-
- args = __builtin_apply_args ();
- res = __objc_forward (rcv, op, args);
- __builtin_return (res);
-}
-
-#if INVISIBLE_STRUCT_RETURN
-static __big
-#else
-static id
-#endif
-__objc_block_forward (id rcv, SEL op, ...)
-{
- void *args, *res;
-
- args = __builtin_apply_args ();
- res = __objc_forward (rcv, op, args);
- if (res)
- __builtin_return (res);
- else
-#if INVISIBLE_STRUCT_RETURN
- return (__big) {{0, 0, 0, 0, 0, 0, 0, 0}};
-#else
- return nil;
-#endif
-}
-
-
-/* This function is installed in the dispatch table for all methods which are
- not implemented. Thus, it is called when a selector is not recognized. */
-static retval_t
-__objc_forward (id object, SEL sel, arglist_t args)
-{
- IMP imp;
- static SEL frwd_sel = 0; /* !T:SAFE2 */
- SEL err_sel;
-
- /* first try if the object understands forward:: */
- if (!frwd_sel)
- frwd_sel = sel_get_any_uid("forward::");
-
- if (__objc_responds_to (object, frwd_sel))
- {
- imp = get_imp(object->class_pointer, frwd_sel);
- return (*imp)(object, frwd_sel, sel, args);
- }
-
- /* If the object recognizes the doesNotRecognize: method then we're going
- to send it. */
- err_sel = sel_get_any_uid ("doesNotRecognize:");
- if (__objc_responds_to (object, err_sel))
- {
- imp = get_imp (object->class_pointer, err_sel);
- return (*imp) (object, err_sel, sel);
- }
-
- /* The object doesn't recognize the method. Check for responding to
- error:. If it does then sent it. */
- {
- size_t strlen (const char*);
- char msg[256 + strlen ((const char*)sel_get_name (sel))
- + strlen ((const char*)object->class_pointer->name)];
-
- sprintf (msg, "(%s) %s does not recognize %s",
- (CLS_ISMETA(object->class_pointer)
- ? "class"
- : "instance" ),
- object->class_pointer->name, sel_get_name (sel));
-
- err_sel = sel_get_any_uid ("error:");
- if (__objc_responds_to (object, err_sel))
- {
- imp = get_imp (object->class_pointer, err_sel);
- return (*imp) (object, sel_get_any_uid ("error:"), msg);
- }
-
- /* The object doesn't respond to doesNotRecognize: or error:; Therefore,
- a default action is taken. */
- objc_error (object, OBJC_ERR_UNIMPLEMENTED, "%s\n", msg);
-
- return 0;
- }
-}
-
-void
-__objc_print_dtable_stats()
-{
- int total = 0;
-
- objc_mutex_lock(__objc_runtime_mutex);
-
- printf("memory usage: (%s)\n",
-#ifdef OBJC_SPARSE2
- "2-level sparse arrays"
-#else
- "3-level sparse arrays"
-#endif
- );
-
- printf("arrays: %d = %ld bytes\n", narrays,
- (long)narrays*sizeof(struct sarray));
- total += narrays*sizeof(struct sarray);
- printf("buckets: %d = %ld bytes\n", nbuckets,
- (long)nbuckets*sizeof(struct sbucket));
- total += nbuckets*sizeof(struct sbucket);
-
- printf("idxtables: %d = %ld bytes\n", idxsize, (long)idxsize*sizeof(void*));
- total += idxsize*sizeof(void*);
- printf("-----------------------------------\n");
- printf("total: %d bytes\n", total);
- printf("===================================\n");
-
- objc_mutex_unlock(__objc_runtime_mutex);
-}
-
-/* Returns the uninstalled dispatch table indicator.
- If a class' dispatch table points to __objc_uninstalled_dtable
- then that means it needs its dispatch table to be installed. */
-__inline__
-struct sarray*
-objc_get_uninstalled_dtable()
-{
- return __objc_uninstalled_dtable;
-}
diff --git a/contrib/libf2c/ChangeLog.egcs b/contrib/libf2c/ChangeLog.egcs
deleted file mode 100644
index e0802612e68b..000000000000
--- a/contrib/libf2c/ChangeLog.egcs
+++ /dev/null
@@ -1,200 +0,0 @@
-Thu Jul 16 00:58:52 1998 Jeffrey A Law (law@cygnus.com)
-
- * libU77/Makefile.in: Missed one config.h.in -> config.hin change.
-
- * g2c.hin: Renamed from g2c.h.in.
- * Makefile.in, configure.in: Changed as needed.
- * configure: Rebuilt.
-
- * libU77/config.hin: Renamed from libU77/config.h.in.
- * Makefile.in, configure.in: Changed as needed.
- * configure: Rebuilt.
-
-Tue Jul 14 21:35:30 1998 Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
-
- * Makefile.in (all): Invoke $(MAKE) instead of just make.
-
-Tue Jul 14 02:16:34 1998 Jeffrey A Law (law@cygnus.com)
-
- * Makefile.in: stamp-lib* -> s-lib*.
- * libU77/Makefile.in: Likewise.
- * libF77/Makefile.in: Likewise.
- * libI77/Makefile.in: Likewise.
-
- * libU77/Makefile.in (ALL_CFLAGS): Add -I$(F2C_H_DIR).
-
-1998-07-06 Mike Stump <mrs@wrs.com>
-
- * Makefile.in (clean): Don't remove Makefiles, that is done in
- distclean.
-
-Sat Jun 27 23:04:49 1998 Jeffrey A Law (law@cygnus.com)
-
- * Makefile.in (FLAGS_TO_PASS, case G2C_H_DIR): Use $(TARGET_SUBDIR)
- instead of hardcoding "libraries".
-
-1998-06-26 Manfred Hollstein <manfred@s-direktnet.de>
-
- * Makefile.in (gcc_version_trigger): Add new macro.
- (config.status): Add dependency upon $(gcc_version_trigger).
-
- * configure.in (gcc_version_trigger): New variable; initialize
- using value from toplevel configure; add AC_SUBST for it.
- (gcc_version): Change initialization to use this new variable.
- * configure: Regenerate.
-
-1998-06-24 Manfred Hollstein <manfred@s-direktnet.de>
-
- * Makefile.in (version): Rename to gcc_version.
- * configure.in (version): Likewise.
- (gcc_version): Add code to use an option passed from parent configure.
- * configure: Regenerate.
-
-1998-06-21 Dave Love <d.love@dl.ac.uk>
-
- * configure.in (version, target_alias): Define.
-
- * Makefile.in (version, target_alias, libsubdir): Define.
- (install): Remove check for libsubdir.
-
-Mon Apr 27 22:52:31 1998 Richard Henderson <rth@cygnus.com>
-
- * libU77/ltime_.c: Bounce the ftnint argument through a local time_t.
- * libU77/gmtime_.c: Likewise.
-
-Sun Apr 26 18:07:56 1998 Richard Henderson <rth@cygnus.com>
-
- * configure.in: Adjust include paths in F2C_INTEGER and F2C_LONGINT
- tests to work out of the build directory.
-
-1998-02-17 Dave Love <d.love@dl.ac.uk>
-
- * libU77/u77-test.f: Tweak some o/p.
-
- * libU77/Makefile.in (check): Use -L for new directory structure.
-
- * Makefile.in (check): Run the u77 check.
- (config.status, Makefile): New targets.
-
-Wed Feb 11 01:46:20 1998 Manfred Hollstein <manfred@s-direktnet.de>
-
- * Makefile.in ($(lib)): Call $(AR) repeatedly to avoid overflowing
- argument size limit on ancious System V.
-
-Sun Feb 8 00:32:17 1998 Manfred Hollstein <manfred@s-direktnet.de>
-
- * Makefile.in: Add `info install-info clean-info check dvi' targets.
-
-Mon Feb 2 11:08:49 1998 Richard Henderson <rth@cygnus.com>
-
- * configure.in: Update F2C_INTEGER and F2C_LONGINT tests
- for the new placement in the hierarchy.
-
-Sun Feb 1 02:36:33 1998 Richard Henderson <rth@cygnus.com>
-
- * Previous contents of gcc/f/runtime moved into toplevel
- "libf2c" directory.
-
-Sun Feb 1 01:42:47 1998 Mumit Khan <khan@xraylith.wisc.edu>
-
- * libU77/configure.in (getlogin,getgid,getuid, kill,link,ttyname):
- Check.
- * libU77/config.h.in (HAVE_GETLOGIN, HAVE_GETGID, HAVE_GETUID,
- HAVE_KILL, HAVE_LINK, HAVE_TTYNAME): New defs.
- * libU77/getlog_.c: Conditionalize for target platform. Set errno
- to ENOSYS if target libc doesn't have the function.
- * libU77/getgid_.c: Likewise.
- * libU77/getuid_.c: Likewise.
- * libU77/kill_.c: Likewise.
- * libU77/link_.c: Likewise.
- * libU77/ttynam_.c: Likewise.
-
-Sun Jan 18 20:01:37 1998 Toon Moene <toon@moene.indiv.nluug.nl>
-
- * libI77/backspace.c: (f_back): Use type `uiolen' to determine size
- of record length specifier.
-
-Sat Jan 17 22:40:31 1998 Mumit Khan <khan@xraylith.wisc.edu>
-
- * libU77/configure.in (sys/param.h,sys/times.h): Check.
- (times,alarm): Likewise.
- * libU77/config.h.in (HAVE_SYS_PARAM_H, HAVE_SYS_TIMES_H,
- HAVE_ALARM, HAVE_TIMES): New defs.
- * libU77/alarm_.c: Conditionalize for target platform. Set errno
- to ENOSYS if target libc doesn't have the function.
- * libU77/dtime_.c: Likewise.
- * libU77/etime_.c: Likewise.
- * libU77/sys_clock_.c: Likewise.
-
- * configure.in (NON_UNIX_STDIO): Define if MINGW32.
- (NON_ANSI_RW_MODE): Do not define for CYGWIN32 or MINGW32.
-
- * libI77/rawio.h: Don't providing conflicting declarations for
- read() and write(). MINGW32 header files use "const" quals.
-
- * libF77/s_paus.c: _WIN32 does not have pause().
-
-Tue Nov 18 09:49:04 1997 Mumit Khan (khan@xraylith.wisc.edu)
-
- * libI77/close.c (f_exit): Reset f__init so that f_clos does not
- (incorrectly) think there is an I/O recursion when program is
- interrupted.
-
-Sat Nov 1 18:03:42 1997 Jeffrey A Law (law@cygnus.com)
-
- * libF77/signal_.c: Undo last change until we can fix it right.
-
-Wed Oct 15 10:06:29 1997 Richard Henderson <rth@cygnus.com>
-
- * libF77/signal_.c (G77_signal_0): Make return type sig_pf as well.
- * libI77/fio.h: Include <string.h> if STDC_HEADERS.
- * libU77/chmod_.c: Likewise.
-
-Tue Oct 7 18:22:10 1997 Richard Henderson <rth@cygnus.com>
-
- * Makefile.in (CGFLAGS): Don't force -g0.
- * libF77/Makefile.in, libI77/Makefile.in, libU77/Makefile.in: Likewise.
-
-Mon Oct 6 14:16:46 1997 Jeffrey A Law (law@cygnus.com)
-
- * Makefile.in (distclean): Do a better job at cleaning up.
-
-Wed Oct 1 01:46:16 1997 Philippe De Muyter <phdm@info.ucl.ac.be>
-
- * libU77/sys_clock_.c: File renamed from system_clock_.c.
- * libU77/Makefile.in, Makefile.in : Reference sys_clock_.*, not
- system_clock_.*.
- * libU77/dtime_.c (clk_tck): Try also HZ macro.
- * libU77/access.c (G77_access_0): Check malloc return value against 0,
- not NULL.
- * libU77/getlog_.c, libU77/ttynam_.c, libU77/chdir_.c: Ditto.
- * libU77/chmod_.c, libU77/rename_.c: Ditto.
-
-1997-09-19 Dave Love <d.love@dl.ac.uk>
-
- * libU77/dtime_.c (G77_dtime_0): Fix types in HAVE_GETRUSAGE case
- so as not to truncate results to integer values.
- * libU77/Version.c: Bump.
-
-Thu Sep 18 16:58:46 1997 Jeffrey A Law (law@cygnus.com)
-
- * Makefile.in (stamp-lib): Don't use '$?', explicitly
- list the variables containing the object files to include
- in libf2c.a
-
-Fri Sep 5 00:18:17 1997 Jeffrey A Law (law@cygnus.com)
-
- * Makefile.in (clean): Don't remove config.cache.
- (distclean): Do it here instead.
-
-Tue Aug 26 20:14:08 1997 Robert Lipe (robertl@dgii.com)
-
- * hostnm_.c: Include errno.h
-
-Mon Aug 25 23:26:05 1997 H.J. Lu (hjl@gnu.ai.mit.edu)
-
- * Makefile.in (mostlyclean, clean): Check if Makefile exists
- before using it. Remove stamp-*.
- (stamp-libi77, stamp-libf77, stamp-libu77): New.
- (stamp-lib): Only depend on stamp-libi77 stamp-libf77
- stamp-libu77
diff --git a/contrib/libf2c/libI77/rawio.h b/contrib/libf2c/libI77/rawio.h
deleted file mode 100644
index f3a59fdab4dc..000000000000
--- a/contrib/libf2c/libI77/rawio.h
+++ /dev/null
@@ -1,45 +0,0 @@
-#ifndef KR_headers
-#if defined (MSDOS) && !defined (GO32)
-#include "io.h"
-#ifndef WATCOM
-#define close _close
-#define creat _creat
-#define open _open
-#define read _read
-#define write _write
-#endif /*WATCOM*/
-#endif /*MSDOS*/
-#ifdef __cplusplus
-extern "C" {
-#endif
-#if !(defined (MSDOS) && !defined (GO32))
-#ifdef OPEN_DECL
-extern int creat(const char*,int), open(const char*,int);
-#endif
-extern int close(int);
-#if !(defined(_WIN32) && !defined(__CYGWIN32__))
-extern int read(int,void*,size_t), write(int,void*,size_t);
-#endif
-extern int unlink(const char*);
-#ifndef _POSIX_SOURCE
-#ifndef NON_UNIX_STDIO
-extern FILE *fdopen(int, const char*);
-#endif
-#endif
-#endif /*KR_HEADERS*/
-
-extern char *mktemp(char*);
-
-#ifdef __cplusplus
- }
-#endif
-#endif
-
-#ifndef NO_FCNTL
-#include <fcntl.h>
-#endif
-
-#ifndef O_WRONLY
-#define O_RDONLY 0
-#define O_WRONLY 1
-#endif
diff --git a/contrib/libg++/COPYING b/contrib/libg++/COPYING
deleted file mode 100644
index a43ea2126fb6..000000000000
--- a/contrib/libg++/COPYING
+++ /dev/null
@@ -1,339 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 675 Mass Ave, Cambridge, MA 02139, USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- c) If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
- a) Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
-
- b) Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- c) Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- 9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
- Appendix: How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) 19yy <name of author>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
- Gnomovision version 69, Copyright (C) 19yy name of author
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- <signature of Ty Coon>, 1 April 1989
- Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs. If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Library General
-Public License instead of this License.
diff --git a/contrib/libg++/COPYING.LIB b/contrib/libg++/COPYING.LIB
deleted file mode 100644
index eb685a5ec981..000000000000
--- a/contrib/libg++/COPYING.LIB
+++ /dev/null
@@ -1,481 +0,0 @@
- GNU LIBRARY GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1991 Free Software Foundation, Inc.
- 675 Mass Ave, Cambridge, MA 02139, USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the library GPL. It is
- numbered 2 because it goes with version 2 of the ordinary GPL.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Library General Public License, applies to some
-specially designated Free Software Foundation software, and to any
-other libraries whose authors decide to use it. You can use it for
-your libraries, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if
-you distribute copies of the library, or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link a program with the library, you must provide
-complete object files to the recipients so that they can relink them
-with the library, after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- Our method of protecting your rights has two steps: (1) copyright
-the library, and (2) offer you this license which gives you legal
-permission to copy, distribute and/or modify the library.
-
- Also, for each distributor's protection, we want to make certain
-that everyone understands that there is no warranty for this free
-library. If the library is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original
-version, so that any problems introduced by others will not reflect on
-the original authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that companies distributing free
-software will individually obtain patent licenses, thus in effect
-transforming the program into proprietary software. To prevent this,
-we have made it clear that any patent must be licensed for everyone's
-free use or not licensed at all.
-
- Most GNU software, including some libraries, is covered by the ordinary
-GNU General Public License, which was designed for utility programs. This
-license, the GNU Library General Public License, applies to certain
-designated libraries. This license is quite different from the ordinary
-one; be sure to read it in full, and don't assume that anything in it is
-the same as in the ordinary license.
-
- The reason we have a separate public license for some libraries is that
-they blur the distinction we usually make between modifying or adding to a
-program and simply using it. Linking a program with a library, without
-changing the library, is in some sense simply using the library, and is
-analogous to running a utility program or application program. However, in
-a textual and legal sense, the linked executable is a combined work, a
-derivative of the original library, and the ordinary General Public License
-treats it as such.
-
- Because of this blurred distinction, using the ordinary General
-Public License for libraries did not effectively promote software
-sharing, because most developers did not use the libraries. We
-concluded that weaker conditions might promote sharing better.
-
- However, unrestricted linking of non-free programs would deprive the
-users of those programs of all benefit from the free status of the
-libraries themselves. This Library General Public License is intended to
-permit developers of non-free programs to use free libraries, while
-preserving your freedom as a user of such programs to change the free
-libraries that are incorporated in them. (We have not seen how to achieve
-this as regards changes in header files, but we have achieved it as regards
-changes in the actual functions of the Library.) The hope is that this
-will lead to faster development of free libraries.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, while the latter only
-works together with the library.
-
- Note that it is possible for a library to be covered by the ordinary
-General Public License rather than by this special one.
-
- GNU LIBRARY GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library which
-contains a notice placed by the copyright holder or other authorized
-party saying it may be distributed under the terms of this Library
-General Public License (also called "this License"). Each licensee is
-addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also compile or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- c) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- d) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the source code distributed need not include anything that is normally
-distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Library General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
- Appendix: How to Apply These Terms to Your New Libraries
-
- If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change. You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
- To apply these terms, attach the following notices to the library. It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
- <one line to give the library's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License as published by the Free Software Foundation; either
- version 2 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with this library; if not, write to the Free
- Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the
- library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
- <signature of Ty Coon>, 1 April 1990
- Ty Coon, President of Vice
-
-That's all there is to it!
diff --git a/contrib/libg++/include/ChangeLog b/contrib/libg++/include/ChangeLog
deleted file mode 100644
index 228edd5a9be4..000000000000
--- a/contrib/libg++/include/ChangeLog
+++ /dev/null
@@ -1,990 +0,0 @@
-Tue Jun 4 18:58:16 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * bfdlink.h (struct bfd_link_info): Add notice_all field.
-
-Fri Apr 26 10:33:12 1996 Doug Evans <dje@canuck.cygnus.com>
-
- * demangle.h (#ifdef IN_GCC): #include "gansidecl.h".
- (PROTO,PTR,const): Delete.
-
-Mon Apr 22 17:27:42 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * bfdlink.h (struct bfd_link_info): Add traditional_format field.
-
-Mon Apr 15 15:16:56 1996 Doug Evans <dje@canuck.cygnus.com>
-
- * libiberty.h (choose_temp_base): Add prototype.
-
-Tue Mar 12 17:29:46 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * bfdlink.h (bfd_wrapped_link_hash_lookup): Declare.
- (struct bfd_link_info): Add wrap_hash field.
-
-Wed Feb 14 16:49:17 1996 Martin Anantharaman <martin@mail.imech.uni-duisburg.de>
-
- * ieee.h (ieee_record_enum_type): Define
- ieee_external_reference_info_enum.
-
-Fri Feb 2 17:09:25 1996 Doug Evans <dje@charmed.cygnus.com>
-
- * dis-asm.h (DISASM_RAW_INSN): Delete.
-
-Tue Jan 23 09:21:47 1996 Doug Evans <dje@charmed.cygnus.com>
-
- * dis-asm.h (INIT_DISASSEMBLE_INFO): Set endian to BFD_ENDIAN_UNKNOWN.
- New argument FPRINTF_FUNC.
-
-Mon Jan 22 16:37:59 1996 Doug Evans <dje@charmed.cygnus.com>
-
- * dis-asm.h (disassemble_info): New members arch, mach, endian.
- (INIT_DISASSEMBLE_INFO): Initialize them.
- (DISASM_RAW_INSN{,FLAG}): Define.
-
-Thu Jan 18 11:32:38 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * demangle.h (cplus_demangle_opname): Change opname parameter to
- const char *.
- (cplus_mangle_opname): Change return type and opname parameter to
- const char *.
-
-Fri Jan 5 00:01:22 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * ieee.h (enum ieee_record): Add ieee_asn_record_enum,
- ieee_at_record_enum, ieee_ty_record_enum, ieee_atn_record_enum,
- ieee_bb_record_enum, and ieee_be_record_enum.
-
-Wed Jan 3 13:12:09 1996 Fred Fish <fnf@cygnus.com>
-
- * obstack.h: Update copyright to 1996.
- (_obstack_memory_used): Declare.
- (obstack_memory_used): Define macro.
-
-Thu Dec 28 11:42:12 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * libiberty.h (xstrdup): Declare.
-
-Thu Dec 21 14:47:17 1995 Michael Meissner <meissner@tiktok.cygnus.com>
-
- * wait.h: Protect all macros with #ifndef.
-
-Tue Oct 24 21:45:40 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * bfdlink.h (struct bfd_link_info): Add static_link field.
-
-Tue Sep 12 16:28:04 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * bfdlink.h (struct bfd_link_callbacks): Add symbol parameter to
- warning callback.
-
-Fri Sep 1 13:11:51 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * bfdlink.h (struct bfd_link_callbacks): Change warning callback
- to take BFD, section, and address arguments.
-
-Thu Aug 31 16:45:12 1995 steve chamberlain <sac@slash.cygnus.com>
-
- * bfdlink.h (struct bfd_link_info): Remove PE stuff.
-
-Tue Aug 22 03:18:23 1995 Ken Raeburn <raeburn@kr-laptop.cygnus.com>
-
- * libiberty.h: Declare xstrerror. From Pat Rankin.
-
-Mon Aug 21 18:11:36 1995 steve chamberlain <sac@slash.cygnus.com>
-
- * bfdlink.h (struct bfd_link_info): Remove PE stuff.
-
-Wed Aug 2 08:14:12 1995 Doug Evans <dje@canuck.cygnus.com>
-
- * dis-asm.h (print_insn_sparc64): Declare.
-
-Mon Jul 10 13:26:49 1995 Eric Youngdale <eric@aib.com>
-
- * bfdlink.h (struct bfd_link_info): Add new field symbolic.
-
-Sun Jul 2 17:48:40 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * bfdlink.h (struct bfd_link_info): Change type of base_file to
- PTR.
-
-Thu Jun 29 00:02:45 1995 Steve Chamberlain <sac@slash.cygnus.com>
-
- * bfdlink.h (struct bfd_link_info): Added base_file member.
-
-Tue Jun 20 16:40:04 1995 Steve Chamberlain <sac@slash.cygnus.com>
-
- * ansidecl.h: win32s is ANSI enough.
-
-Thu May 18 04:25:50 1995 Ken Raeburn <raeburn@kr-laptop.cygnus.com>
-
- Wed May 10 14:28:16 1995 Richard Earnshaw (rearnsha@armltd.co.uk)
-
- * dis-asm.h (print_insn_arm): Delete declaration.
- (print_insn_{little,big}_arm): New declarations.
-
- * floatformat.h (floatformat_arm_ext): Declare.
-
-Sat May 13 10:14:08 1995 Steve Chamberlain <sac@slash.cygnus.com>
-
- * coff/pe.h: New file.
- * bfdlink.h (subsytem, stack_heap_parameters): New.
- * coff/i386.h (NT_SECTION_ALIGNMENT, NT_FILE_ALIGNMENT,
- NT_DEF_RESERVE, NT_DEF_COMMIT): New.
- * coff/internal.h (internal_filehdr): New fields for PE.
- (IMAGE_DATA_DIRECTORY): New.
- (internal_aouthdr): New fields for PE.
-
-Thu May 4 14:36:42 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * demangle.h: Don't include ansidecl.h if IN_GCC.
-
-
-Tue Feb 21 00:37:28 1995 Jeff Law (law@snake.cs.utah.edu)
-
- * hp-symtab.h: Don't use bitfield enumerations, the HP C compiler
- does not handle them correctly.
-
-
-Thu Feb 9 14:20:27 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * libiberty.h (basename): Don't declare parameter type; some
- systems have this in their header files.
-
-Wed Feb 8 17:35:38 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * bfdlink.h (struct bfd_link_hash_entry): Change format of common
- symbol information, to remove restrictions on maximum size and
- alignment power, by using a pointer to a structure instead.
-
-Mon Feb 6 14:55:32 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * bfdlink.h (enum bfd_link_hash_type): Rename bfd_link_hash_weak
- to bfd_link_hash_undefweak. Add bfd_link_hash_defweak.
-
-Mon Jan 16 21:00:23 1995 Stan Shebs <shebs@andros.cygnus.com>
-
- * dis-asm.h (GDB_INIT_DISASSEMBLE_INFO, etc): Remove all
- GDB-specific definitions.
-
-Sun Jan 15 18:39:35 1995 Steve Chamberlain <sac@splat>
-
- * dis-asm.h (print_insn_w65): Declare.
-
-Thu Jan 12 17:51:17 1995 Ken Raeburn <raeburn@cujo.cygnus.com>
-
- * libiberty.h (hex_p): Fix sense of test.
-
-Wed Jan 11 22:36:40 1995 Ken Raeburn <raeburn@cujo.cygnus.com>
-
- * libiberty.h (_hex_array_size, _hex_bad, _hex_value, hex_init,
- hex_p, hex_value): New macros and declarations, for hex.c.
-
-Fri Jan 6 17:44:14 1995 Ian Lance Taylor <ian@sanguine.cygnus.com>
-
- * dis-asm.h: Make idempotent.
-
-Wed Dec 14 13:08:43 1994 Stan Shebs <shebs@andros.cygnus.com>
-
- * progress.h: New file, empty definitions for progress macros.
-
-
-Fri Nov 25 00:14:05 1994 Jeff Law (law@snake.cs.utah.edu)
-
- * hp-symtab.h: New file describing the debug symbols emitted
- by the HP C compilers.
-
-Fri Nov 11 15:48:37 1994 Ian Lance Taylor <ian@sanguine.cygnus.com>
-
- * bfdlink.h (struct bfd_link_hash_entry): Change u.c.size from 24
- to 26 bits, and change u.c.alignment_power from 8 to 6 bits. 6
- bit in the alignment power is enough for a 64 bit address space.
-
-Mon Oct 31 13:02:51 1994 Stan Shebs (shebs@andros.cygnus.com)
-
- * demangle.h (cplus_mangle_opname): Declare.
-
-Tue Oct 25 11:38:02 1994 Ian Lance Taylor <ian@sanguine.cygnus.com>
-
- * bfdlink.h (struct bfd_link_callbacks): Fix comments for
- multiple_common field.
-
-Sun Sep 04 17:58:10 1994 Richard Earnshaw (rwe@pegasus.esprit.ec.org)
-
- * aout/aout64.h: Only define QMAGIC if it isn't already defined.
-
- * dis-asm.h: Add support for the ARM.
-
-Wed Aug 10 12:51:41 1994 Doug Evans (dje@canuck.cygnus.com)
-
- * libiberty.h (strsignal): Document its existence even if we
- can't declare it.
-
-Tue Aug 2 14:40:03 1994 Jim Kingdon (kingdon@lioth.cygnus.com)
-
- * os9k.h: Remove u_int16, u_int32, and owner_id typedefs and
- expand their uses. Those names conflict with Mach headers.
-
-Fri Jul 22 14:17:12 1994 Ian Lance Taylor (ian@sanguine.cygnus.com)
-
- * bfdlink.h (struct bfd_link_hash_entry): Change u.c.size into a
- bitfield. Add field u.c.alignment_power.
-
-Sun Jul 10 00:26:39 1994 Ian Dall (dall@hfrd.dsto.gov.au)
-
- * dis-asm.h: Add print_insn_ns32k declaration.
-
-Mon Jun 20 17:13:29 1994 Ian Lance Taylor (ian@sanguine.cygnus.com)
-
- * bfdlink.h (bfd_link_hash_table): Make creator a const pointer.
-
-Sat Jun 18 16:09:32 1994 Stan Shebs (shebs@andros.cygnus.com)
-
- * demangle.h (cplus_demangle_opname): Declare.
-
-Thu Jun 16 15:19:03 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * bfdlink.h (struct bfd_link_info): Add new field shared.
-
-Mon Jun 6 14:39:44 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * bfdlink.h (struct bfd_link_hash_entry): Remove written field:
- not needed for all backends.
-
-Thu Apr 28 19:06:50 1994 Ken Raeburn (raeburn@cujo.cygnus.com)
-
- * dis-asm.h (disassembler): Declare.
-
-Fri Apr 1 00:38:17 1994 Jim Wilson (wilson@mole.gnu.ai.mit.edu)
-
- * obstack.h: Delete use of IN_GCC to control whether
- stddef.h or gstddef.h is included.
-
-Tue Mar 22 13:06:02 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * bfdlink.h (enum bfd_link_order_type): Add bfd_data_link_order.
- (struct bfd_link_order): Add data field to union.
-
-Mon Mar 21 18:45:26 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * bfdlink.h (struct bfd_link_callbacks): Change bitsize argument
- to add_to_set to reloc. Remove bitsize argument from constructor.
- Comment that reloc_overflow, reloc_dangerous and unattached_reloc
- must handle NULL pointers for reloc location.
- (enum bfd_link_order_type): Add bfd_section_reloc_link_order and
- bfd_symbol_reloc_link_order.
- (struct bfd_link_order): Add reloc field to union.
- (struct bfd_link_order_reloc): Define.
-
-Mon Mar 14 12:27:50 1994 Ian Lance Taylor (ian@cygnus.com)
-
- * ieee-float.h: Removed; no longer used.
-
-Tue Mar 1 18:10:49 1994 Kung Hsu (kung@mexican.cygnus.com)
-
- * os9k.h: os9000 target specific header file, the header of the
- object file is used now.
-
-Sun Feb 27 21:52:26 1994 Jim Kingdon (kingdon@deneb.cygnus.com)
-
- * floatformat.h: New file, intended to replace ieee-float.h.
-
-Sun Feb 20 17:15:42 1994 Ian Lance Taylor (ian@lisa.cygnus.com)
-
- * ansidecl.h (ANSI_PROTOTYPES): Define if using ANSI prototypes.
-
-Wed Feb 16 01:07:12 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * libiberty.h: Don't declare strsignal, to avoid conflicts with
- Solaris system header files.
-
-Sat Feb 12 22:11:32 1994 Jeffrey A. Law (law@snake.cs.utah.edu)
-
- * libiberty.h (xexit): Use __volatile__ to avoid losing if
- compiling with gcc -traditional.
-
-Thu Feb 10 14:05:41 1994 Ian Lance Taylor (ian@cygnus.com)
-
- * libiberty.h: New file. Declares functions provided by
- libiberty.
-
-Tue Feb 8 05:19:52 1994 David J. Mackenzie (djm@thepub.cygnus.com)
-
- Handle obstack_chunk_alloc returning NULL. This allows
- obstacks to be used by libraries, without forcing them
- to call exit or longjmp.
- * obstack.h (struct obstack): Add alloc_failed flag.
- _obstack_begin, _obstack_begin_1): Declare to return int, not void.
- (obstack_finish): If alloc_failed, return NULL.
- (obstack_base, obstack_next_free, objstack_object_size):
- If alloc_failed, return 0.
- (obstack_grow, obstack_grow0, obstack_1grow, obstack_ptr_grow,
- obstack_int_grow, obstack_blank): If alloc_failed, do nothing that
- could corrupt the obstack.
-
-Mon Jan 24 15:06:05 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * bfdlink.h (struct bfd_link_callbacks): Add name, reloc_name and
- addend argments to reloc_overflow callback.
-
-Fri Jan 21 19:13:12 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * dis-asm.h (print_insn_big_powerpc, print_insn_little_powerpc,
- print_insn_rs6000): Declare.
-
-Thu Jan 6 14:15:55 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * bfdlink.h (struct bfd_link_callbacks): Add bitsize argument to
- add_to_set field. Add new callback named constructor.
-
-Thu Dec 30 10:44:06 1993 Ian Lance Taylor (ian@rtl.cygnus.com)
-
- * bfdlink.h: New file for new BFD linker backend routines.
-
-Mon Nov 29 10:43:57 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * dis-asm.h (enum dis_insn_tyupe): Remove non-ANSI trailing comma.
-
-Sat Oct 2 20:42:26 1993 Jim Kingdon (kingdon@lioth.cygnus.com)
-
- * dis-asm.h: Move comment to right place.
-
-Mon Aug 9 19:03:35 1993 David J. Mackenzie (djm@thepub.cygnus.com)
-
- * obstack.h (obstack_chunkfun, obstack_freefun): Add defns from
- previous version. Are these Cygnus local changes?
-
-Fri Aug 6 17:05:47 1993 David J. Mackenzie (djm@thepub.cygnus.com)
-
- * getopt.h, obstack.h: Update to latest FSF version.
-
-Mon Aug 2 16:37:14 1993 Stu Grossman (grossman at cygnus.com)
-
- * coff/i386.h: Add Lynx magic number.
-
-Mon Aug 2 14:45:29 1993 John Gilmore (gnu@cygnus.com)
-
- * dis-asm.h: Move enum outside of struct defn to avoid warnings.
-
-Mon Aug 2 08:49:30 1993 Stu Grossman (grossman at cygnus.com)
-
- * wait.h (WEXITSTATUS, WSTOPSIG): Mask down to 8 bits. This is
- for systems that store stuff into the high 16 bits of a wait
- status.
-
-Fri Jul 30 18:38:02 1993 John Gilmore (gnu@cygnus.com)
-
- * dis-asm.h: Add new fields insn_info_valid, branch_delay_insns,
- data_size, insn_type, target, target2. These are used to return
- information from the instruction decoders back to the calling
- program. Add comments, make more readable.
-
-Mon Jul 19 22:14:14 1993 Fred Fish (fnf@deneb.cygnus.com)
-
- * nlm: New directory containing NLM/NetWare includes.
-
-Thu Jul 15 12:10:04 1993 Ken Raeburn (raeburn@cambridge.cygnus.com)
-
- * dis-asm.h (struct disassemble_info): New field application_data.
-
-Thu Jul 15 12:41:15 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * dis-asm.h: Added declaration of print_insn_m88k.
-
-Thu Jul 8 09:05:26 1993 Doug Evans (dje@canuck.cygnus.com)
-
- * opcode/h8300.h: Lots of little fixes for the h8/300h.
-
-Fri Jul 2 10:31:59 1993 Ian Lance Taylor (ian@cygnus.com)
-
- * ansidecl.h: Use ANSI macros if __mips and _SYSTYPE_SVR4 are
- defined, since RISC/OS cc handles ANSI declarations in SVR4 mode
- but does not define __STDC__.
-
-Sun Jun 20 18:27:52 1993 Ken Raeburn (raeburn@poseidon.cygnus.com)
-
- * dis-asm.h: Don't need to include ansidecl.h any more.
-
-Fri Jun 18 03:22:10 1993 John Gilmore (gnu@cygnus.com)
-
- * oasys.h: Eliminate "int8_type", "int16_type", "int32_type", and
- their variants. These changes are coordinated with corresponding
- changes in ../bfd/oasys.c.
-
-Wed Jun 16 10:43:08 1993 Fred Fish (fnf@cygnus.com)
-
- * bfd.h: Note that it has been removed.
-
-Tue Jun 8 12:16:03 1993 Steve Chamberlain (sac@phydeaux.cygnus.com)
-
- Support for H8/300-H
- * dis-asm.h (print_insn_h8300, print_insn_h8300h): Declare it.
- * coff/h8300.h: New magic number.
- * coff/internal.h: New relocations.
- * opcode/h8300.h: Lots of new opcodes.
-
-Tue Jun 1 07:35:03 1993 Ken Raeburn (raeburn@kr-pc.cygnus.com)
-
- * ansidecl.h (const): Don't define it if it's already defined.
-
-Thu May 27 18:19:51 1993 Ken Raeburn (raeburn@cambridge.cygnus.com)
-
- * dis-asm.h (print_insn_hppa): Declare it.
-
- * bfd.h: Moved to bfd directory. Small stub here includes it
- without requiring "-I../bfd".
-
-Thu Apr 29 12:06:13 1993 Ken Raeburn (raeburn@deneb.cygnus.com)
-
- * bfd.h: Updated with BSF_FUNCTION.
-
-Mon Apr 26 18:15:50 1993 Steve Chamberlain (sac@thepub.cygnus.com)
-
- * bfd.h, dis-asm.h: Updated with Hitachi SH.
-
-Fri Apr 23 18:41:38 1993 Steve Chamberlain (sac@thepub.cygnus.com)
-
- * bfd.h: Updated with alpha changes.
- * dis-asm.h: Added alpha.
-
-Fri Apr 16 17:35:30 1993 Jim Kingdon (kingdon@cygnus.com)
-
- * bfd.h: Update for signed bfd_*get_*.
-
-Thu Apr 15 09:24:21 1993 Jim Kingdon (kingdon@cygnus.com)
-
- * bfd.h: Updated for file_truncated error.
-
-Thu Apr 8 10:53:47 1993 Ian Lance Taylor (ian@cygnus.com)
-
- * ansidecl.h: If no ANSI, define const to be empty.
-
-Thu Apr 1 09:00:10 1993 Jim Kingdon (kingdon@cygnus.com)
-
- * dis-asm.h: Declare a29k and i960 print_insn_*.
-
- * dis-asm.h: Add print_address_func and related stuff.
-
- * dis-asm.h (dis_asm_read_memory): Fix prototype.
-
-Wed Mar 31 17:40:16 1993 Jim Kingdon (kingdon@lioth.cygnus.com)
-
- * dis-asm.h: Add print_insn_sparc.
-
-Wed Mar 31 17:51:42 1993 Ian Lance Taylor (ian@cygnus.com)
-
- * bfd.h: Updated for BFD_RELOC_MIPS_GPREL and bfd_[gs]et_gp_size
- prototypes.
-
-Wed Mar 31 16:35:12 1993 Stu Grossman (grossman@cygnus.com)
-
- * dis-asm.h: (disassemble_info): Fix typo in prototype of
- dis_asm_memory_error().
-
-Tue Mar 30 19:09:23 1993 Jim Kingdon (kingdon@lioth.cygnus.com)
-
- * dis-asm.h (disassembler_info): Add read_memory_func,
- memory_error_func, buffer, and length.
- ({GDB_,}INIT_DISASSEMBLE_INFO): Set them.
- print_insn_*: Remove second argument.
-
-Tue Mar 30 14:48:55 1993 Steve Chamberlain (sac@thepub.cygnus.com)
-
- * bfd.h: Update for lma field of section.
-
-Tue Mar 30 12:22:55 1993 Jim Kingdon (kingdon@cygnus.com)
-
- * ansidecl.h: Use ANSI versions on AIX regardless of __STDC__.
-
-Fri Mar 19 14:49:49 1993 Steve Chamberlain (sac@thepub.cygnus.com)
-
- * dis-asm.h: Add h8500.
-
-Thu Mar 18 13:49:09 1993 Per Bothner (bothner@rtl.cygnus.com)
-
- * ieee-float.h: Moved from ../gdb.
- * dis-asm.h: New file. Interface to dis-assembler.
-
-Thu Mar 11 10:52:57 1993 Fred Fish (fnf@cygnus.com)
-
- * demangle.h (DMGL_NO_OPTS): Add define (set to 0) to use
- in place of bare 0, for readability reasons.
-
-Tue Mar 2 17:50:11 1993 Fred Fish (fnf@cygnus.com)
-
- * demangle.h: Replace all references to cfront with ARM.
-
-Tue Feb 23 12:21:14 1993 Ian Lance Taylor (ian@cygnus.com)
-
- * bfd.h: Update for new elements in JUMP_TABLE.
-
-Tue Feb 16 00:51:30 1993 John Gilmore (gnu@cygnus.com)
-
- * bfd.h: Update for BFD_VERSION 2.1.
-
-Tue Jan 26 11:49:20 1993 Ian Lance Taylor (ian@cygnus.com)
-
- * bfd.h: Update for SEC_IS_COMMON flag.
-
-Tue Jan 19 12:25:12 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * bfd.h: Update for bfd_asymbol_value bug fix.
-
-Fri Jan 8 16:37:18 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * bfd.h: Update to include ECOFF tdata and target_flavour.
-
-Sun Dec 27 17:52:30 1992 Fred Fish (fnf@cygnus.com)
-
- * bfd.h: Add declaration for bfd_get_size().
-
-Tue Dec 22 22:42:46 1992 Fred Fish (fnf@cygnus.com)
-
- * demangle.h: Protect file from multiple inclusions with
- #if !defined(DEMANGLE_H)...#define DEMANGLE_H...#endif.
-
-Mon Dec 21 21:25:50 1992 Stu Grossman (grossman at cygnus.com)
-
- * bfd.h: Update to get hppa_core_struct from bfd.c.
-
-Thu Dec 17 00:42:35 1992 John Gilmore (gnu@cygnus.com)
-
- * bfd.h: Update to get tekhex tdata name change from bfd.
-
-Mon Nov 9 23:55:42 1992 John Gilmore (gnu@cygnus.com)
-
- * ansidecl.h: Update comments to discourage use of EXFUN.
-
-Thu Nov 5 16:35:44 1992 Ian Lance Taylor (ian@cygnus.com)
-
- * bfd.h: Update to bring in SEC_SHARED_LIBRARY.
-
-Thu Nov 5 03:21:32 1992 John Gilmore (gnu@cygnus.com)
-
- * bfd.h: Update to match EXFUN, bfd_seclet_struct, and SDEF
- cleanups in bfd.
-
-Wed Nov 4 07:28:05 1992 Ken Raeburn (raeburn@cygnus.com)
-
- * bout.h (N_CALLNAME, N_BALNAME): Define as char-type values, so
- widening works consistently.
-
-Fri Oct 16 03:17:08 1992 John Gilmore (gnu@cygnus.com)
-
- * getopt.h: Update to Revised Standard FSF Version.
-
-Thu Oct 15 21:43:22 1992 K. Richard Pixley (rich@sendai.cygnus.com)
-
- * getopt.h (struct option): use the provided enum for has_arg.
-
- * demangle.h (AUTO_DEMANGLING, GNU_DEMANGLING,
- LUCID_DEMANGLING): ultrix compilers require enums to be
- enums and ints to be ints and casts where they meet. cast some
- enums into ints.
-
-Thu Oct 15 04:35:51 1992 John Gilmore (gnu@cygnus.com)
-
- * bfd.h: Update after comment changes.
-
-Thu Oct 8 09:03:02 1992 Steve Chamberlain (sac@thepub.cygnus.com)
-
- * bfd.h (bfd_get_symbol_leading_char): new macro for getting in xvec
-
-Thu Sep 3 09:10:50 1992 Stu Grossman (grossman at cygnus.com)
-
- * bfd.h (struct reloc_howto_struct): size needs to be signed if
- it's going to hold negative values.
-
-Sun Aug 30 17:50:27 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * demangle.h: New file, moved from ../gdb. Made independent
- of gdb. Allow demangling style option to be passed as a
- parameter to cplus_demangle(), but using the
- current_demangling_style global as the default.
-
-Sat Aug 29 10:07:55 1992 Fred Fish (fnf@cygnus.com)
-
- * obstack.h: Merge comment change from current FSF version.
-
-Thu Aug 27 12:59:29 1992 Brendan Kehoe (brendan@cygnus.com)
-
- * bfd.h: add we32k
-
-Tue Aug 25 15:07:47 1992 Steve Chamberlain (sac@thepub.cygnus.com)
-
- * bfd.h: new after Z8000 stuff
-
-Mon Aug 17 09:01:23 1992 Ken Raeburn (raeburn@cygnus.com)
-
- * bfd.h: Regenerated after page/segment size changes.
-
-Sat Aug 1 13:46:31 1992 Fred Fish (fnf@cygnus.com)
-
- * obstack.h: Merge changes from current FSF version.
-
-Mon Jul 20 21:06:23 1992 Fred Fish (fnf@cygnus.com)
-
- * obstack.h (area_id, flags): Remove, replace with extra_arg,
- use_extra_arg, and maybe_empty_object.
- * obstack.h (OBSTACK_MAYBE_EMPTY_OBJECT, OBSTACK_MMALLOC_LIKE):
- Remove, replaced by maybe_empty_object and use_extra_arg bitfields.
- * obstack.h (obstack_full_begin, _obstack_begin): Remove area_id
- and flags arguments.
- * obstack.h (obstack_alloc_arg): New macro to set extra_arg.
-
-Thu Jul 16 08:12:44 1992 Steve Chamberlain (sac@thepub.cygnus.com)
-
- * bfd.h: new after adding BFD_IS_RELAXABLE
-
-Sat Jul 4 03:22:23 1992 John Gilmore (gnu at cygnus.com)
-
- * bfd.h: Regen after adding BSF_FILE.
-
-Mon Jun 29 14:18:36 1992 Fred Fish (fnf at sunfish)
-
- * obstack.h: Convert bcopy() use to memcpy(), which is more
- portable, more standard, and can take advantage of gcc's builtin
- functions for increased performance.
-
-Thu Jun 25 04:46:08 1992 John Gilmore (gnu at cygnus.com)
-
- * ansidecl.h (PARAMS): Incorporate this macro from gdb's defs.h.
- It's a cleaner way to forward-declare function prototypes.
-
-Fri Jun 19 15:46:32 1992 Stu Grossman (grossman at cygnus.com)
-
- * bfd.h: HPPA merge.
-
-Tue Jun 16 21:30:56 1992 K. Richard Pixley (rich@cygnus.com)
-
- * getopt.h: gratuitous white space changes merged from other prep
- releases.
-
-Thu Jun 11 01:10:55 1992 John Gilmore (gnu at cygnus.com)
-
- * bfd.h: Regen'd from bfd.c after removing elf_core_tdata_struct.
-
-Mon May 18 17:29:03 1992 K. Richard Pixley (rich@cygnus.com)
-
- * getopt.h: merged changes from make-3.62.11.
-
- * getopt.h: merged changes from grep-1.6 (alpha).
-
-Fri May 8 14:53:32 1992 K. Richard Pixley (rich@cygnus.com)
-
- * getopt.h: merged changes from bison-1.18.
-
-Sat Mar 14 17:25:20 1992 Fred Fish (fnf@cygnus.com)
-
- * obstack.h: Add "area_id" and "flags" members to obstack
- structure. Add obstack_chunkfun() and obstack_freefun() to
- set functions explicitly. Convert maybe_empty_object to
- a bit in "flags".
-
-Thu Feb 27 22:01:02 1992 Per Bothner (bothner@cygnus.com)
-
- * wait.h (WIFSTOPPED): Add IBM rs6000-specific version.
-
-Fri Feb 21 20:49:20 1992 John Gilmore (gnu at cygnus.com)
-
- * obstack.h: Add obstack_full_begin.
- * bfd.h, obstack.h: Protolint.
-
-Thu Jan 30 01:18:42 1992 John Gilmore (gnu at cygnus.com)
-
- * bfd.h: Remove comma from enum declaration.
-
-Mon Jan 27 22:01:13 1992 Steve Chamberlain (sac at cygnus.com)
-
- * bfd.h : new target entr, bfd_relax_section
-
-Wed Dec 18 17:19:44 1991 Stu Grossman (grossman at cygnus.com)
-
- * bfd.h, ieee.h, opcode/m68k.h, opcode/sparc.h: ANSIfy enums.
-
-Thu Dec 12 20:59:56 1991 John Gilmore (gnu at cygnus.com)
-
- * fopen-same.h, fopen-bin.h: New files for configuring
- whether fopen distinguishes binary files or not. For use
- by host-dependent config files.
-
-Sat Nov 30 20:46:43 1991 Steve Chamberlain (sac at rtl.cygnus.com)
-
- * bfd.h: change the documentation format.
-
- * created coff, elf and opcode and aout directories. Moved:
-
- aout64.h ==> aout/aout64.h
- ar.h ==> aout/ar.h
- a.out.encap.h ==> aout/encap.h
- a.out.host.h ==> aout/host.h
- a.out.hp.h ==> aout/hp.h
- a.out.sun4.h ==> aout/sun4.h
- ranlib.h ==> aout/ranlib.h
- reloc.h ==> aout/reloc.h
- stab.def ==> aout/stab.def
- stab.gnu.h ==> aout/stab_gnu.h
-
- coff-a29k.h ==> coff/a29k.h
- coff-h8300.h ==> coff/h8300.h
- coff-i386.h ==> coff/i386.h
- coff-i960.h ==> coff/i960.h
- internalcoff.h ==> coff/internal.h
- coff-m68k.h ==> coff/m68k.h
- coff-m88k.h ==> coff/m88k.h
- coff-mips.h ==> coff/mips.h
- coff-rs6000.h ==> coff/rs6000.h
-
- elf-common.h ==> elf/common.h
- dwarf.h ==> elf/dwarf.h
- elf-external.h ==> elf/external.h
- elf-internal.h ==> elf/internal.h
-
- a29k-opcode.h ==> opcode/a29k.h
- arm-opcode.h ==> opcode/arm.h
- h8300-opcode.h ==> opcode/h8300.h
- i386-opcode.h ==> opcode/i386.h
- i860-opcode.h ==> opcode/i860.h
- i960-opcode.h ==> opcode/i960.h
- m68k-opcode.h ==> opcode/m68k.h
- m88k-opcode.h ==> opcode/m88k.h
- mips-opcode.h ==> opcode/mips.h
- np1-opcode.h ==> opcode/np1.h
- ns32k-opcode.h ==> opcode/ns32k.h
- pn-opcode.h ==> opcode/pn.h
- pyr-opcode.h ==> opcode/pyr.h
- sparc-opcode.h ==> opcode/sparc.h
- tahoe-opcode.h ==> opcode/tahoe.h
- vax-opcode.h ==> opcode/vax.h
-
-
-
-Wed Nov 27 10:38:31 1991 Steve Chamberlain (sac at rtl.cygnus.com)
-
- * internalcoff.h: (internal_scnhdr) took out #def dependency, now
- s_nreloc and s_nlnno are always long. (internal_reloc): allways
- has an offset field now.
-
-Fri Nov 22 08:12:58 1991 John Gilmore (gnu at cygnus.com)
-
- * coff-rs6000.h: Lint; use unsigned chars for external fields.
- * internalcoff.h: Lint; cast storage classes to signed char.
-
-Thu Nov 21 21:01:05 1991 Per Bothner (bothner at cygnus.com)
-
- * stab.def: Remove the GNU extended type codes (e.g. N_SETT).
- * aout64.h: The heuristic for distinguishing between
- sunos-style and bsd-style ZMAGIC files (wrt. where the
- text segment starts) is moved into (the default definition of)
- the macro N_HEADER_IN_TEXT. This definition is only used
- if no other definition is used - e.g. bfd/newsos3.c defines
- N_HEADER_IN_TEXT(x) to be always 0 (as before).
-
-Thu Nov 21 11:53:03 1991 John Gilmore (gnu at cygnus.com)
-
- * aout64.h (N_TXTADDR, N_TXTOFF, N_TXTSIZE): New definitions
- that should handle all uses. LOGICAL_ versions deleted.
- Eliminate N_HEADER_IN_TEXT, using a_entry to determine which
- kind of zmagic a.out file we are looking at.
- * coff-rs6000.h: Typo.
-
-Tue Nov 19 18:43:37 1991 Per Bothner (bothner at cygnus.com)
-
- (Note: This is a revised entry, as was aout64.h.)
- * aout64.h: Some cleanups of N_TXTADDR and N_TXTOFF:
- Will now work for both old- and new-style ZMAGIC files,
- depending on N_HEADER_IN_TEXT macro.
- Add LOGICAL_TXTADDR, LOICAL_TXTOFF and LOGICAL_TXTSIZE
- that don't count the exec header as part
- of the text segment, to be consistent with bfd.
- * a.out.sun4.h: Simplified/fixed for previous change.
-
-Mon Nov 18 00:02:06 1991 Fred Fish (fnf at cygnus.com)
-
- * dwarf.h: Update to DWARF draft 5 version from gcc2.
-
-Thu Nov 14 19:44:59 1991 Per Bothner (bothner at cygnus.com)
-
- * stab.def: Added defs for extended GNU symbol types,
- such as N_SETT. These are normally ifdef'd out (because
- of conflicts with a.out.gnu.h), but are used by bfb_stab_name().
-
-Thu Nov 14 19:17:03 1991 Fred Fish (fnf at cygnus.com)
-
- * elf-common.h: Add defines to support ELF symbol table code.
-
-Mon Nov 11 19:01:06 1991 Fred Fish (fnf at cygnus.com)
-
- * elf-internal.h, elf-external.h, elf-common.h: Add support for
- note sections, which are used in ELF core files to hold copies
- of various /proc structures.
-
-Thu Nov 7 08:58:26 1991 Steve Chamberlain (sac at cygnus.com)
-
- * internalcoff.h: took out the M88 dependency in the lineno
- struct.
- * coff-m88k.h: defines GET_LINENO_LNNO and PUT_LINENO_LNNO to use
- 32bit linno entries.
- * a29k-opcode.h: fixed encoding of mtacc
-
-Sun Nov 3 11:54:22 1991 Per Bothner (bothner at cygnus.com)
-
- * bfd.h: Updated from ../bfd/bfd-in.h (q.v).
-
-Fri Nov 1 11:13:53 1991 John Gilmore (gnu at cygnus.com)
-
- * internalcoff.h: Add x_csect defines.
-
-Fri Oct 25 03:18:20 1991 John Gilmore (gnu at cygnus.com)
-
- * Rename COFF-related files in `coff-ARCH.h' form.
- coff-a29k.h, coff-i386.h, coff-i960.h, coff-m68k.h, coff-m88k.h,
- coff-mips.h, coff-rs6000.h to be exact.
-
-Thu Oct 24 22:11:11 1991 John Gilmore (gnu at cygnus.com)
-
- RS/6000 support, by Metin G. Ozisik, Mimi Phûông-Thåo Võ, and
- John Gilmore.
-
- * a.out.gnu.h: Update slightly.
- * bfd.h: Add new error code, fix doc, add bfd_arch_rs6000.
- * internalcoff.h: Add more F_ codes for filehdr. Add
- rs/6000-dependent fields to aouthdr. Add storage classes
- to syments. Add 6000-specific auxent. Add r_size in reloc.
- * rs6000coff.c: New file.
-
-Thu Oct 24 04:13:20 1991 Fred Fish (fnf at cygnus.com)
-
- * dwarf.h: New file for dwarf support. Copied from gcc2
- distribution.
-
-Wed Oct 16 13:31:45 1991 John Gilmore (gnu at cygnus.com)
-
- * aout64.h: Remove PAGE_SIZE defines; they are target-dependent.
- Add N_FN_SEQ for N_FN symbol type used on Sequent machines.
- * stab.def: Include N_FN_SEQ in table.
- * bout.h: External formats of structures use unsigned chars.
-
-Fri Oct 11 12:40:43 1991 Steve Chamberlain (steve at cygnus.com)
-
- * bfd.h:upgrade from bfd.c
- * internalcoff.h: add n_name, n_zeroes and n_offset macros
- * amdcoff.h: Define OMAGIC and AOUTHDRSZ.
-
-Fri Oct 11 10:58:06 1991 Per Bothner (bothner at cygnus.com)
-
- * a.out.host.h: Change SEGMENT_SIZE to 0x1000 for Sony.
- * bfd.h (align_power): Add (actually move) comment.
-
-Tue Oct 8 15:29:32 1991 Per Bothner (bothner at cygnus.com)
-
- * sys/h-rtbsd.h: Define MISSING_VFPRINT (for binutils/bucomm.c).
-
-Sun Oct 6 19:24:39 1991 John Gilmore (gnu at cygnus.com)
-
- * aout64.h: Move struct internal_exec to ../bfd/libaout.h so
- it can be shared by all `a.out-family' code. Rename
- EXTERNAL_LIST_SIZE to EXTERNAL_NLIST_SIZE. Use basic types
- for nlist members, and make strx integral rather than pointer.
- More commentary on n_type values.
- * bout.h: Provide a struct external_exec rather than an
- internal_exec.
- * m68kcoff.h: Remove `tagentries' which snuck in from the i960
- COFF port.
-
-Fri Oct 4 01:25:59 1991 John Gilmore (gnu at cygnus.com)
-
- * h8300-opcode.h: Remove `_enum' from the typedef for an enum.
- * bfd.h: Update to match bfd changes.
-
- * sys/h-i386mach.h, sysdep.h: Add 386 Mach host support.
-
-Tue Oct 1 04:58:42 1991 John Gilmore (gnu at cygnus.com)
-
- * bfd.h, elf-common.h, elf-external.h, elf-internal.h:
- Add preliminary ELF support, sufficient for GDB, from Fred Fish.
- * sysdep.h, sys/h-amix.h: Support Amiga SVR4.
-
- * sys/h-vaxult.h: Make it work. (David Taylor <taylor@think.com>)
- * a.out.vax.h: Remove unused and confusing file.
-
-Mon Sep 30 12:52:35 1991 Per Bothner (bothner at cygnus.com)
-
- * sysdep.h: Define NEWSOS3_SYS, and use it.
-
-Fri Sep 20 13:38:21 1991 John Gilmore (gnu at cygnus.com)
-
- * a.out.gnu.h (N_FN): Its value *really is* 0x1F.
- Fix it, and add comments warning about or-ing N_EXT with it
- and/or N_WARNING.
- * aout64.h (N_FN): Fix value, add comments about N_EXT.
- * stab.def (table at end): Update to show all the type
- values <0x20, including low order bits. Move N_FN to
- its rightful place.
-
-Tue Sep 17 17:41:37 1991 Stu Grossman (grossman at cygnus.com)
-
- * sys/h-irix3.h: sgi/irix support.
-
-Tue Sep 17 07:52:59 1991 John Gilmore (gnu at cygint.cygnus.com)
-
- * stab.def (N_DEFD): Add GNU Modula-2 debug stab, from Andrew
- Beers.
-
-Thu Sep 12 14:12:59 1991 John Gilmore (gnu at cygint.cygnus.com)
-
- * internalcoff.h (SYMNMLEN, FILNMLEN, DIMNUM): Define these
- for internalcoff, separately from the various external coff's.
- * amdcoff.h, bcs88kcoff.h, i386coff.h, intel-coff.h, m68kcoff.h,
- m88k-bcs.h: Prefix SYMNMLEN, FILNMLEN, and DIMNUM with E_'s for
- the external struct definitions.
- * ecoff.h: Remove these #define's, kludge no longer needed.
-
- * sys/h-ultra3.h: Add new Ultracomputer host.
- * sysdep.h: Add ULTRA3_SYM1_SYS and use it.
-
-Tue Sep 10 10:11:46 1991 John Gilmore (gnu at cygint.cygnus.com)
-
- * i386coff.h (LINESZ): Always 6, not based on sizeof().
- (Fix from Peter Schauer <pes@regent.e-technik.tu-muenchen.de>.)
-
-Wed Sep 4 08:58:37 1991 John Gilmore (gnu at cygint.cygnus.com)
-
- * a.out.gnu.h, aout64.h: Add N_WARNING. Change N_FN to 0x0E,
- to match SunOS and BSD. Add N_COMM as 0x12 for SunOS shared lib
- support.
- * stab.def: Add N_COMM to table, fix overlap comment.
-
-Tue Sep 3 06:29:20 1991 John Gilmore (gnu at cygint.cygnus.com)
-
- Merge with latest FSF versions of these files.
-
- * stab.gnu.h: Add LAST_UNUSED_STAB_CODE.
- * stab.def: Update to GPL2. Move N_WARNING out, since not a
- debug symbol. Change comments, and reorder table to numeric
- order. Update final table comment.
- (N_DSLINE, N_BSLINE): Renumber from 0x66 and 0x68, to 0x46 and 0x48.
-
- * obstack.h: GPL2. Merge.
-
-Fri Aug 23 01:54:23 1991 John Gilmore (gnu at cygint.cygnus.com)
-
- * a.out.gnu.h, a.out.sun4.h: Make SEGMENT_SIZE able to depend
- on the particular a.out being examined.
- * a.out.sun4.h: Define segment sizes for Sun-3's and Sun-4's.
- * FIXME: a.out.gnu.h is almost obsolete.
- * FIXME: a.out.sun4.h should be renamed a.out.sun.h now.
-
-Wed Aug 21 20:32:13 1991 John Gilmore (gnu at cygint.cygnus.com)
-
- * Start a ChangeLog for the includes directory.
-
- * a.out.gnu.h (N_FN): Fix value -- was 15, should be 0x1E.
- * stab.def: Update allocation table in comments at end,
- to reflect reality as I know it.
-
-
-Local Variables:
-mode: indented-text
-left-margin: 8
-fill-column: 74
-version-control: never
-End:
diff --git a/contrib/libg++/include/ansidecl.h b/contrib/libg++/include/ansidecl.h
deleted file mode 100644
index be04e42d56a3..000000000000
--- a/contrib/libg++/include/ansidecl.h
+++ /dev/null
@@ -1,141 +0,0 @@
-/* ANSI and traditional C compatability macros
- Copyright 1991, 1992 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-/* ANSI and traditional C compatibility macros
-
- ANSI C is assumed if __STDC__ is #defined.
-
- Macro ANSI C definition Traditional C definition
- ----- ---- - ---------- ----------- - ----------
- PTR `void *' `char *'
- LONG_DOUBLE `long double' `double'
- VOLATILE `volatile' `'
- SIGNED `signed' `'
- PTRCONST `void *const' `char *'
- ANSI_PROTOTYPES 1 not defined
-
- CONST is also defined, but is obsolete. Just use const.
-
- DEFUN (name, arglist, args)
-
- Defines function NAME.
-
- ARGLIST lists the arguments, separated by commas and enclosed in
- parentheses. ARGLIST becomes the argument list in traditional C.
-
- ARGS list the arguments with their types. It becomes a prototype in
- ANSI C, and the type declarations in traditional C. Arguments should
- be separated with `AND'. For functions with a variable number of
- arguments, the last thing listed should be `DOTS'.
-
- DEFUN_VOID (name)
-
- Defines a function NAME, which takes no arguments.
-
- obsolete -- EXFUN (name, (prototype)) -- obsolete.
-
- Replaced by PARAMS. Do not use; will disappear someday soon.
- Was used in external function declarations.
- In ANSI C it is `NAME PROTOTYPE' (so PROTOTYPE should be enclosed in
- parentheses). In traditional C it is `NAME()'.
- For a function that takes no arguments, PROTOTYPE should be `(void)'.
-
- PARAMS ((args))
-
- We could use the EXFUN macro to handle prototype declarations, but
- the name is misleading and the result is ugly. So we just define a
- simple macro to handle the parameter lists, as in:
-
- static int foo PARAMS ((int, char));
-
- This produces: `static int foo();' or `static int foo (int, char);'
-
- EXFUN would have done it like this:
-
- static int EXFUN (foo, (int, char));
-
- but the function is not external...and it's hard to visually parse
- the function name out of the mess. EXFUN should be considered
- obsolete; new code should be written to use PARAMS.
-
- For example:
- extern int printf PARAMS ((CONST char *format DOTS));
- int DEFUN(fprintf, (stream, format),
- FILE *stream AND CONST char *format DOTS) { ... }
- void DEFUN_VOID(abort) { ... }
-*/
-
-#ifndef _ANSIDECL_H
-
-#define _ANSIDECL_H 1
-
-
-/* Every source file includes this file,
- so they will all get the switch for lint. */
-/* LINTLIBRARY */
-
-
-#if defined (__STDC__) || defined (_AIX) || (defined (__mips) && defined (_SYSTYPE_SVR4)) || defined(WIN32)
-/* All known AIX compilers implement these things (but don't always
- define __STDC__). The RISC/OS MIPS compiler defines these things
- in SVR4 mode, but does not define __STDC__. */
-
-#define PTR void *
-#define PTRCONST void *CONST
-#define LONG_DOUBLE long double
-
-#define AND ,
-#define NOARGS void
-#define CONST const
-#define VOLATILE volatile
-#define SIGNED signed
-#define DOTS , ...
-
-#define EXFUN(name, proto) name proto
-#define DEFUN(name, arglist, args) name(args)
-#define DEFUN_VOID(name) name(void)
-
-#define PROTO(type, name, arglist) type name arglist
-#define PARAMS(paramlist) paramlist
-#define ANSI_PROTOTYPES 1
-
-#else /* Not ANSI C. */
-
-#define PTR char *
-#define PTRCONST PTR
-#define LONG_DOUBLE double
-
-#define AND ;
-#define NOARGS
-#define CONST
-#ifndef const /* some systems define it in header files for non-ansi mode */
-#define const
-#endif
-#define VOLATILE
-#define SIGNED
-#define DOTS
-
-#define EXFUN(name, proto) name()
-#define DEFUN(name, arglist, args) name arglist args;
-#define DEFUN_VOID(name) name()
-#define PROTO(type, name, arglist) type name ()
-#define PARAMS(paramlist) ()
-
-#endif /* ANSI C. */
-
-#endif /* ansidecl.h */
diff --git a/contrib/libg++/include/demangle.h b/contrib/libg++/include/demangle.h
deleted file mode 100644
index b0254af05f76..000000000000
--- a/contrib/libg++/include/demangle.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/* Defs for interface to demanglers.
- Copyright 1992, 1995, 1996 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-
-#if !defined (DEMANGLE_H)
-#define DEMANGLE_H
-
-#ifdef IN_GCC
-#include "gansidecl.h"
-#define PARAMS(ARGS) PROTO(ARGS)
-#else /* ! IN_GCC */
-#include <ansidecl.h>
-#endif /* IN_GCC */
-
-/* Options passed to cplus_demangle (in 2nd parameter). */
-
-#define DMGL_NO_OPTS 0 /* For readability... */
-#define DMGL_PARAMS (1 << 0) /* Include function args */
-#define DMGL_ANSI (1 << 1) /* Include const, volatile, etc */
-
-#define DMGL_AUTO (1 << 8)
-#define DMGL_GNU (1 << 9)
-#define DMGL_LUCID (1 << 10)
-#define DMGL_ARM (1 << 11)
-/* If none of these are set, use 'current_demangling_style' as the default. */
-#define DMGL_STYLE_MASK (DMGL_AUTO|DMGL_GNU|DMGL_LUCID|DMGL_ARM)
-
-/* Enumeration of possible demangling styles.
-
- Lucid and ARM styles are still kept logically distinct, even though
- they now both behave identically. The resulting style is actual the
- union of both. I.E. either style recognizes both "__pt__" and "__rf__"
- for operator "->", even though the first is lucid style and the second
- is ARM style. (FIXME?) */
-
-extern enum demangling_styles
-{
- unknown_demangling = 0,
- auto_demangling = DMGL_AUTO,
- gnu_demangling = DMGL_GNU,
- lucid_demangling = DMGL_LUCID,
- arm_demangling = DMGL_ARM
-} current_demangling_style;
-
-/* Define string names for the various demangling styles. */
-
-#define AUTO_DEMANGLING_STYLE_STRING "auto"
-#define GNU_DEMANGLING_STYLE_STRING "gnu"
-#define LUCID_DEMANGLING_STYLE_STRING "lucid"
-#define ARM_DEMANGLING_STYLE_STRING "arm"
-
-/* Some macros to test what demangling style is active. */
-
-#define CURRENT_DEMANGLING_STYLE current_demangling_style
-#define AUTO_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_AUTO)
-#define GNU_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_GNU)
-#define LUCID_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_LUCID)
-#define ARM_DEMANGLING (CURRENT_DEMANGLING_STYLE & DMGL_ARM)
-
-extern char *
-cplus_demangle PARAMS ((const char *mangled, int options));
-
-extern int
-cplus_demangle_opname PARAMS ((const char *opname, char *result, int options));
-
-extern const char *
-cplus_mangle_opname PARAMS ((const char *opname, int options));
-
-/* Note: This sets global state. FIXME if you care about multi-threading. */
-
-extern void
-set_cplus_marker_for_demangling PARAMS ((int ch));
-
-#endif /* DEMANGLE_H */
diff --git a/contrib/libg++/include/floatformat.h b/contrib/libg++/include/floatformat.h
deleted file mode 100644
index 01e3dcb2944d..000000000000
--- a/contrib/libg++/include/floatformat.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/* IEEE floating point support declarations, for GDB, the GNU Debugger.
- Copyright (C) 1991 Free Software Foundation, Inc.
-
-This file is part of GDB.
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#if !defined (FLOATFORMAT_H)
-#define FLOATFORMAT_H 1
-
-#include "ansidecl.h"
-
-/* A floatformat consists of a sign bit, an exponent and a mantissa. Once the
- bytes are concatenated according to the byteorder flag, then each of those
- fields is contiguous. We number the bits with 0 being the most significant
- (i.e. BITS_BIG_ENDIAN type numbering), and specify which bits each field
- contains with the *_start and *_len fields. */
-
-enum floatformat_byteorders { floatformat_little, floatformat_big };
-
-enum floatformat_intbit { floatformat_intbit_yes, floatformat_intbit_no };
-
-struct floatformat
-{
- enum floatformat_byteorders byteorder;
- unsigned int totalsize; /* Total size of number in bits */
-
- /* Sign bit is always one bit long. 1 means negative, 0 means positive. */
- unsigned int sign_start;
-
- unsigned int exp_start;
- unsigned int exp_len;
- /* Amount added to "true" exponent. 0x3fff for many IEEE extendeds. */
- unsigned int exp_bias;
- /* Exponent value which indicates NaN. This is the actual value stored in
- the float, not adjusted by the exp_bias. This usually consists of all
- one bits. */
- unsigned int exp_nan;
-
- unsigned int man_start;
- unsigned int man_len;
-
- /* Is the integer bit explicit or implicit? */
- enum floatformat_intbit intbit;
-};
-
-/* floatformats for IEEE single and double, big and little endian. */
-
-extern const struct floatformat floatformat_ieee_single_big;
-extern const struct floatformat floatformat_ieee_single_little;
-extern const struct floatformat floatformat_ieee_double_big;
-extern const struct floatformat floatformat_ieee_double_little;
-
-/* floatformats for various extendeds. */
-
-extern const struct floatformat floatformat_i387_ext;
-extern const struct floatformat floatformat_m68881_ext;
-extern const struct floatformat floatformat_i960_ext;
-extern const struct floatformat floatformat_m88110_ext;
-extern const struct floatformat floatformat_arm_ext;
-
-/* Convert from FMT to a double.
- FROM is the address of the extended float.
- Store the double in *TO. */
-
-extern void
-floatformat_to_double PARAMS ((const struct floatformat *, char *, double *));
-
-/* The converse: convert the double *FROM to FMT
- and store where TO points. */
-
-extern void
-floatformat_from_double PARAMS ((const struct floatformat *,
- double *, char *));
-
-#endif /* defined (FLOATFORMAT_H) */
diff --git a/contrib/libg++/include/getopt.h b/contrib/libg++/include/getopt.h
deleted file mode 100644
index abf915383200..000000000000
--- a/contrib/libg++/include/getopt.h
+++ /dev/null
@@ -1,129 +0,0 @@
-/* Declarations for getopt.
- Copyright (C) 1989, 1990, 1991, 1992, 1993 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License
- as published by the Free Software Foundation; either version 2, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this program; if not, write to the Free Software
- Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#ifndef _GETOPT_H
-#define _GETOPT_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* For communication from `getopt' to the caller.
- When `getopt' finds an option that takes an argument,
- the argument value is returned here.
- Also, when `ordering' is RETURN_IN_ORDER,
- each non-option ARGV-element is returned here. */
-
-extern char *optarg;
-
-/* Index in ARGV of the next element to be scanned.
- This is used for communication to and from the caller
- and for communication between successive calls to `getopt'.
-
- On entry to `getopt', zero means this is the first call; initialize.
-
- When `getopt' returns EOF, this is the index of the first of the
- non-option elements that the caller should itself scan.
-
- Otherwise, `optind' communicates from one call to the next
- how much of ARGV has been scanned so far. */
-
-extern int optind;
-
-/* Callers store zero here to inhibit the error message `getopt' prints
- for unrecognized options. */
-
-extern int opterr;
-
-/* Set to an option character which was unrecognized. */
-
-extern int optopt;
-
-/* Describe the long-named options requested by the application.
- The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector
- of `struct option' terminated by an element containing a name which is
- zero.
-
- The field `has_arg' is:
- no_argument (or 0) if the option does not take an argument,
- required_argument (or 1) if the option requires an argument,
- optional_argument (or 2) if the option takes an optional argument.
-
- If the field `flag' is not NULL, it points to a variable that is set
- to the value given in the field `val' when the option is found, but
- left unchanged if the option is not found.
-
- To have a long-named option do something other than set an `int' to
- a compiled-in constant, such as set a value from `optarg', set the
- option's `flag' field to zero and its `val' field to a nonzero
- value (the equivalent single-letter option character, if there is
- one). For long options that have a zero `flag' field, `getopt'
- returns the contents of the `val' field. */
-
-struct option
-{
-#if __STDC__
- const char *name;
-#else
- char *name;
-#endif
- /* has_arg can't be an enum because some compilers complain about
- type mismatches in all the code that assumes it is an int. */
- int has_arg;
- int *flag;
- int val;
-};
-
-/* Names for the values of the `has_arg' field of `struct option'. */
-
-#define no_argument 0
-#define required_argument 1
-#define optional_argument 2
-
-#if __STDC__
-#if defined(__GNU_LIBRARY__)
-/* Many other libraries have conflicting prototypes for getopt, with
- differences in the consts, in stdlib.h. To avoid compilation
- errors, only prototype getopt for the GNU C library. */
-extern int getopt (int argc, char *const *argv, const char *shortopts);
-#else /* not __GNU_LIBRARY__ */
-extern int getopt ();
-#endif /* not __GNU_LIBRARY__ */
-extern int getopt_long (int argc, char *const *argv, const char *shortopts,
- const struct option *longopts, int *longind);
-extern int getopt_long_only (int argc, char *const *argv,
- const char *shortopts,
- const struct option *longopts, int *longind);
-
-/* Internal only. Users should not call this directly. */
-extern int _getopt_internal (int argc, char *const *argv,
- const char *shortopts,
- const struct option *longopts, int *longind,
- int long_only);
-#else /* not __STDC__ */
-extern int getopt ();
-extern int getopt_long ();
-extern int getopt_long_only ();
-
-extern int _getopt_internal ();
-#endif /* not __STDC__ */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _GETOPT_H */
diff --git a/contrib/libg++/include/libiberty.h b/contrib/libg++/include/libiberty.h
deleted file mode 100644
index 9e290125eed0..000000000000
--- a/contrib/libg++/include/libiberty.h
+++ /dev/null
@@ -1,137 +0,0 @@
-/* Function declarations for libiberty.
- Written by Cygnus Support, 1994.
-
- The libiberty library provides a number of functions which are
- missing on some operating systems. We do not declare those here,
- to avoid conflicts with the system header files on operating
- systems that do support those functions. In this file we only
- declare those functions which are specific to libiberty. */
-
-#ifndef LIBIBERTY_H
-#define LIBIBERTY_H
-
-#include "ansidecl.h"
-
-/* Build an argument vector from a string. Allocates memory using
- malloc. Use freeargv to free the vector. */
-
-extern char **buildargv PARAMS ((char *));
-
-/* Free a vector returned by buildargv. */
-
-extern void freeargv PARAMS ((char **));
-
-/* Return the last component of a path name. */
-
-extern char *basename ();
-
-/* Concatenate an arbitrary number of strings, up to (char *) NULL.
- Allocates memory using xmalloc. */
-
-extern char *concat PARAMS ((const char *, ...));
-
-/* Check whether two file descriptors refer to the same file. */
-
-extern int fdmatch PARAMS ((int fd1, int fd2));
-
-/* Get the amount of time the process has run, in microseconds. */
-
-extern long get_run_time PARAMS ((void));
-
-/* Choose a temporary directory to use for scratch files. */
-
-extern char *choose_temp_base PARAMS ((void));
-
-/* Allocate memory filled with spaces. Allocates using malloc. */
-
-extern const char *spaces PARAMS ((int count));
-
-/* Return the maximum error number for which strerror will return a
- string. */
-
-extern int errno_max PARAMS ((void));
-
-/* Return the name of an errno value (e.g., strerrno (EINVAL) returns
- "EINVAL"). */
-
-extern const char *strerrno PARAMS ((int));
-
-/* Given the name of an errno value, return the value. */
-
-extern int strtoerrno PARAMS ((const char *));
-
-/* ANSI's strerror(), but more robust. */
-
-extern char *xstrerror PARAMS ((int));
-
-/* Return the maximum signal number for which strsignal will return a
- string. */
-
-extern int signo_max PARAMS ((void));
-
-/* Return a signal message string for a signal number
- (e.g., strsignal (SIGHUP) returns something like "Hangup"). */
-/* This is commented out as it can conflict with one in system headers.
- We still document its existence though. */
-
-/*extern const char *strsignal PARAMS ((int));*/
-
-/* Return the name of a signal number (e.g., strsigno (SIGHUP) returns
- "SIGHUP"). */
-
-extern const char *strsigno PARAMS ((int));
-
-/* Given the name of a signal, return its number. */
-
-extern int strtosigno PARAMS ((const char *));
-
-/* Register a function to be run by xexit. Returns 0 on success. */
-
-extern int xatexit PARAMS ((void (*fn) (void)));
-
-/* Exit, calling all the functions registered with xatexit. */
-
-#ifndef __GNUC__
-extern void xexit PARAMS ((int status));
-#else
-typedef void libiberty_voidfn PARAMS ((int status));
-__volatile__ libiberty_voidfn xexit;
-#endif
-
-/* Set the program name used by xmalloc. */
-
-extern void xmalloc_set_program_name PARAMS ((const char *));
-
-/* Allocate memory without fail. If malloc fails, this will print a
- message to stderr (using the name set by xmalloc_set_program_name,
- if any) and then call xexit.
-
- FIXME: We do not declare the parameter type (size_t) in order to
- avoid conflicts with other declarations of xmalloc that exist in
- programs which use libiberty. */
-
-extern PTR xmalloc ();
-
-/* Reallocate memory without fail. This works like xmalloc.
-
- FIXME: We do not declare the parameter types for the same reason as
- xmalloc. */
-
-extern PTR xrealloc ();
-
-/* Copy a string into a memory buffer without fail. */
-
-extern char *xstrdup PARAMS ((const char *));
-
-/* hex character manipulation routines */
-
-#define _hex_array_size 256
-#define _hex_bad 99
-extern char _hex_value[_hex_array_size];
-extern void hex_init PARAMS ((void));
-#define hex_p(c) (hex_value (c) != _hex_bad)
-/* If you change this, note well: Some code relies on side effects in
- the argument being performed exactly once. */
-#define hex_value(c) (_hex_value[(unsigned char) (c)])
-
-#endif /* ! defined (LIBIBERTY_H) */
diff --git a/contrib/libg++/include/obstack.h b/contrib/libg++/include/obstack.h
deleted file mode 100644
index 416b8bf53151..000000000000
--- a/contrib/libg++/include/obstack.h
+++ /dev/null
@@ -1,518 +0,0 @@
-/* obstack.h - object stack macros
- Copyright (C) 1988, 89, 90, 91, 92, 93, 94, 95, 96 Free Software Foundation, Inc.
-
-This program is free software; you can redistribute it and/or modify it
-under the terms of the GNU Library General Public License as published by the
-Free Software Foundation; either version 2, or (at your option) any
-later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public License
-along with this program; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-/* Summary:
-
-All the apparent functions defined here are macros. The idea
-is that you would use these pre-tested macros to solve a
-very specific set of problems, and they would run fast.
-Caution: no side-effects in arguments please!! They may be
-evaluated MANY times!!
-
-These macros operate a stack of objects. Each object starts life
-small, and may grow to maturity. (Consider building a word syllable
-by syllable.) An object can move while it is growing. Once it has
-been "finished" it never changes address again. So the "top of the
-stack" is typically an immature growing object, while the rest of the
-stack is of mature, fixed size and fixed address objects.
-
-These routines grab large chunks of memory, using a function you
-supply, called `obstack_chunk_alloc'. On occasion, they free chunks,
-by calling `obstack_chunk_free'. You must define them and declare
-them before using any obstack macros.
-
-Each independent stack is represented by a `struct obstack'.
-Each of the obstack macros expects a pointer to such a structure
-as the first argument.
-
-One motivation for this package is the problem of growing char strings
-in symbol tables. Unless you are "fascist pig with a read-only mind"
---Gosper's immortal quote from HAKMEM item 154, out of context--you
-would not like to put any arbitrary upper limit on the length of your
-symbols.
-
-In practice this often means you will build many short symbols and a
-few long symbols. At the time you are reading a symbol you don't know
-how long it is. One traditional method is to read a symbol into a
-buffer, realloc()ating the buffer every time you try to read a symbol
-that is longer than the buffer. This is beaut, but you still will
-want to copy the symbol from the buffer to a more permanent
-symbol-table entry say about half the time.
-
-With obstacks, you can work differently. Use one obstack for all symbol
-names. As you read a symbol, grow the name in the obstack gradually.
-When the name is complete, finalize it. Then, if the symbol exists already,
-free the newly read name.
-
-The way we do this is to take a large chunk, allocating memory from
-low addresses. When you want to build a symbol in the chunk you just
-add chars above the current "high water mark" in the chunk. When you
-have finished adding chars, because you got to the end of the symbol,
-you know how long the chars are, and you can create a new object.
-Mostly the chars will not burst over the highest address of the chunk,
-because you would typically expect a chunk to be (say) 100 times as
-long as an average object.
-
-In case that isn't clear, when we have enough chars to make up
-the object, THEY ARE ALREADY CONTIGUOUS IN THE CHUNK (guaranteed)
-so we just point to it where it lies. No moving of chars is
-needed and this is the second win: potentially long strings need
-never be explicitly shuffled. Once an object is formed, it does not
-change its address during its lifetime.
-
-When the chars burst over a chunk boundary, we allocate a larger
-chunk, and then copy the partly formed object from the end of the old
-chunk to the beginning of the new larger chunk. We then carry on
-accreting characters to the end of the object as we normally would.
-
-A special macro is provided to add a single char at a time to a
-growing object. This allows the use of register variables, which
-break the ordinary 'growth' macro.
-
-Summary:
- We allocate large chunks.
- We carve out one object at a time from the current chunk.
- Once carved, an object never moves.
- We are free to append data of any size to the currently
- growing object.
- Exactly one object is growing in an obstack at any one time.
- You can run one obstack per control block.
- You may have as many control blocks as you dare.
- Because of the way we do it, you can `unwind' an obstack
- back to a previous state. (You may remove objects much
- as you would with a stack.)
-*/
-
-
-/* Don't do the contents of this file more than once. */
-
-#ifndef __OBSTACK_H__
-#define __OBSTACK_H__
-
-/* We use subtraction of (char *)0 instead of casting to int
- because on word-addressable machines a simple cast to int
- may ignore the byte-within-word field of the pointer. */
-
-#ifndef __PTR_TO_INT
-#define __PTR_TO_INT(P) ((P) - (char *)0)
-#endif
-
-#ifndef __INT_TO_PTR
-#define __INT_TO_PTR(P) ((P) + (char *)0)
-#endif
-
-/* We need the type of the resulting object. In ANSI C it is ptrdiff_t
- but in traditional C it is usually long. If we are in ANSI C and
- don't already have ptrdiff_t get it. */
-
-#if defined (__STDC__) && ! defined (offsetof)
-#if defined (__GNUC__) && defined (IN_GCC)
-/* On Next machine, the system's stddef.h screws up if included
- after we have defined just ptrdiff_t, so include all of stddef.h.
- Otherwise, define just ptrdiff_t, which is all we need. */
-#ifndef __NeXT__
-#define __need_ptrdiff_t
-#endif
-#endif
-
-#include <stddef.h>
-#endif
-
-#ifdef __STDC__
-#define PTR_INT_TYPE ptrdiff_t
-#else
-#define PTR_INT_TYPE long
-#endif
-
-struct _obstack_chunk /* Lives at front of each chunk. */
-{
- char *limit; /* 1 past end of this chunk */
- struct _obstack_chunk *prev; /* address of prior chunk or NULL */
- char contents[4]; /* objects begin here */
-};
-
-struct obstack /* control current object in current chunk */
-{
- long chunk_size; /* preferred size to allocate chunks in */
- struct _obstack_chunk* chunk; /* address of current struct obstack_chunk */
- char *object_base; /* address of object we are building */
- char *next_free; /* where to add next char to current object */
- char *chunk_limit; /* address of char after current chunk */
- PTR_INT_TYPE temp; /* Temporary for some macros. */
- int alignment_mask; /* Mask of alignment for each object. */
- struct _obstack_chunk *(*chunkfun) (); /* User's fcn to allocate a chunk. */
- void (*freefun) (); /* User's function to free a chunk. */
- char *extra_arg; /* first arg for chunk alloc/dealloc funcs */
- unsigned use_extra_arg:1; /* chunk alloc/dealloc funcs take extra arg */
- unsigned maybe_empty_object:1;/* There is a possibility that the current
- chunk contains a zero-length object. This
- prevents freeing the chunk if we allocate
- a bigger chunk to replace it. */
- unsigned alloc_failed:1; /* chunk alloc func returned 0 */
-};
-
-/* Declare the external functions we use; they are in obstack.c. */
-
-#ifdef __STDC__
-extern void _obstack_newchunk (struct obstack *, int);
-extern void _obstack_free (struct obstack *, void *);
-extern int _obstack_begin (struct obstack *, int, int,
- void *(*) (), void (*) ());
-extern int _obstack_begin_1 (struct obstack *, int, int,
- void *(*) (), void (*) (), void *);
-extern int _obstack_memory_used (struct obstack *);
-#else
-extern void _obstack_newchunk ();
-extern void _obstack_free ();
-extern int _obstack_begin ();
-extern int _obstack_begin_1 ();
-extern int _obstack_memory_used ();
-#endif
-
-#ifdef __STDC__
-
-/* Do the function-declarations after the structs
- but before defining the macros. */
-
-void obstack_init (struct obstack *obstack);
-
-void * obstack_alloc (struct obstack *obstack, int size);
-
-void * obstack_copy (struct obstack *obstack, void *address, int size);
-void * obstack_copy0 (struct obstack *obstack, void *address, int size);
-
-void obstack_free (struct obstack *obstack, void *block);
-
-void obstack_blank (struct obstack *obstack, int size);
-
-void obstack_grow (struct obstack *obstack, void *data, int size);
-void obstack_grow0 (struct obstack *obstack, void *data, int size);
-
-void obstack_1grow (struct obstack *obstack, int data_char);
-void obstack_ptr_grow (struct obstack *obstack, void *data);
-void obstack_int_grow (struct obstack *obstack, int data);
-
-void * obstack_finish (struct obstack *obstack);
-
-int obstack_object_size (struct obstack *obstack);
-
-int obstack_room (struct obstack *obstack);
-void obstack_1grow_fast (struct obstack *obstack, int data_char);
-void obstack_ptr_grow_fast (struct obstack *obstack, void *data);
-void obstack_int_grow_fast (struct obstack *obstack, int data);
-void obstack_blank_fast (struct obstack *obstack, int size);
-
-void * obstack_base (struct obstack *obstack);
-void * obstack_next_free (struct obstack *obstack);
-int obstack_alignment_mask (struct obstack *obstack);
-int obstack_chunk_size (struct obstack *obstack);
-int obstack_memory_used (struct obstack *obstack);
-
-#endif /* __STDC__ */
-
-/* Non-ANSI C cannot really support alternative functions for these macros,
- so we do not declare them. */
-
-/* Pointer to beginning of object being allocated or to be allocated next.
- Note that this might not be the final address of the object
- because a new chunk might be needed to hold the final size. */
-
-#define obstack_base(h) ((h)->alloc_failed ? 0 : (h)->object_base)
-
-/* Size for allocating ordinary chunks. */
-
-#define obstack_chunk_size(h) ((h)->chunk_size)
-
-/* Pointer to next byte not yet allocated in current chunk. */
-
-#define obstack_next_free(h) ((h)->alloc_failed ? 0 : (h)->next_free)
-
-/* Mask specifying low bits that should be clear in address of an object. */
-
-#define obstack_alignment_mask(h) ((h)->alignment_mask)
-
-#define obstack_init(h) \
- _obstack_begin ((h), 0, 0, \
- (void *(*) ()) obstack_chunk_alloc, (void (*) ()) obstack_chunk_free)
-
-#define obstack_begin(h, size) \
- _obstack_begin ((h), (size), 0, \
- (void *(*) ()) obstack_chunk_alloc, (void (*) ()) obstack_chunk_free)
-
-#define obstack_specify_allocation(h, size, alignment, chunkfun, freefun) \
- _obstack_begin ((h), (size), (alignment), \
- (void *(*) ()) (chunkfun), (void (*) ()) (freefun))
-
-#define obstack_specify_allocation_with_arg(h, size, alignment, chunkfun, freefun, arg) \
- _obstack_begin_1 ((h), (size), (alignment), \
- (void *(*) ()) (chunkfun), (void (*) ()) (freefun), (arg))
-
-#define obstack_chunkfun(h, newchunkfun) \
- ((h) -> chunkfun = (struct _obstack_chunk *(*)()) (newchunkfun))
-
-#define obstack_freefun(h, newfreefun) \
- ((h) -> freefun = (void (*)()) (newfreefun))
-
-#define obstack_1grow_fast(h,achar) (*((h)->next_free)++ = achar)
-
-#define obstack_blank_fast(h,n) ((h)->next_free += (n))
-
-#define obstack_memory_used(h) _obstack_memory_used (h)
-
-#if defined (__GNUC__) && defined (__STDC__)
-#if __GNUC__ < 2
-#define __extension__
-#endif
-
-/* For GNU C, if not -traditional,
- we can define these macros to compute all args only once
- without using a global variable.
- Also, we can avoid using the `temp' slot, to make faster code. */
-
-#define obstack_object_size(OBSTACK) \
- __extension__ \
- ({ struct obstack *__o = (OBSTACK); \
- __o->alloc_failed ? 0 : \
- (unsigned) (__o->next_free - __o->object_base); })
-
-#define obstack_room(OBSTACK) \
- __extension__ \
- ({ struct obstack *__o = (OBSTACK); \
- (unsigned) (__o->chunk_limit - __o->next_free); })
-
-#define obstack_grow(OBSTACK,where,length) \
-__extension__ \
-({ struct obstack *__o = (OBSTACK); \
- int __len = (length); \
- if (__o->next_free + __len > __o->chunk_limit) \
- _obstack_newchunk (__o, __len); \
- if (!__o->alloc_failed) \
- { \
- bcopy (where, __o->next_free, __len); \
- __o->next_free += __len; \
- } \
- (void) 0; })
-
-#define obstack_grow0(OBSTACK,where,length) \
-__extension__ \
-({ struct obstack *__o = (OBSTACK); \
- int __len = (length); \
- if (__o->next_free + __len + 1 > __o->chunk_limit) \
- _obstack_newchunk (__o, __len + 1); \
- if (!__o->alloc_failed) \
- { \
- bcopy (where, __o->next_free, __len); \
- __o->next_free += __len; \
- *(__o->next_free)++ = 0; \
- } \
- (void) 0; })
-
-#define obstack_1grow(OBSTACK,datum) \
-__extension__ \
-({ struct obstack *__o = (OBSTACK); \
- if (__o->next_free + 1 > __o->chunk_limit) \
- _obstack_newchunk (__o, 1); \
- if (!__o->alloc_failed) \
- *(__o->next_free)++ = (datum); \
- (void) 0; })
-
-/* These assume that the obstack alignment is good enough for pointers or ints,
- and that the data added so far to the current object
- shares that much alignment. */
-
-#define obstack_ptr_grow(OBSTACK,datum) \
-__extension__ \
-({ struct obstack *__o = (OBSTACK); \
- if (__o->next_free + sizeof (void *) > __o->chunk_limit) \
- _obstack_newchunk (__o, sizeof (void *)); \
- if (!__o->alloc_failed) \
- *((void **)__o->next_free)++ = ((void *)datum); \
- (void) 0; })
-
-#define obstack_int_grow(OBSTACK,datum) \
-__extension__ \
-({ struct obstack *__o = (OBSTACK); \
- if (__o->next_free + sizeof (int) > __o->chunk_limit) \
- _obstack_newchunk (__o, sizeof (int)); \
- if (!__o->alloc_failed) \
- *((int *)__o->next_free)++ = ((int)datum); \
- (void) 0; })
-
-#define obstack_ptr_grow_fast(h,aptr) (*((void **)(h)->next_free)++ = (void *)aptr)
-#define obstack_int_grow_fast(h,aint) (*((int *)(h)->next_free)++ = (int)aint)
-
-#define obstack_blank(OBSTACK,length) \
-__extension__ \
-({ struct obstack *__o = (OBSTACK); \
- int __len = (length); \
- if (__o->chunk_limit - __o->next_free < __len) \
- _obstack_newchunk (__o, __len); \
- if (!__o->alloc_failed) \
- __o->next_free += __len; \
- (void) 0; })
-
-#define obstack_alloc(OBSTACK,length) \
-__extension__ \
-({ struct obstack *__h = (OBSTACK); \
- obstack_blank (__h, (length)); \
- obstack_finish (__h); })
-
-#define obstack_copy(OBSTACK,where,length) \
-__extension__ \
-({ struct obstack *__h = (OBSTACK); \
- obstack_grow (__h, (where), (length)); \
- obstack_finish (__h); })
-
-#define obstack_copy0(OBSTACK,where,length) \
-__extension__ \
-({ struct obstack *__h = (OBSTACK); \
- obstack_grow0 (__h, (where), (length)); \
- obstack_finish (__h); })
-
-/* The local variable is named __o1 to avoid a name conflict
- when obstack_blank is called. */
-#define obstack_finish(OBSTACK) \
-__extension__ \
-({ struct obstack *__o1 = (OBSTACK); \
- void *value; \
- if (__o1->alloc_failed) \
- value = 0; \
- else \
- { \
- value = (void *) __o1->object_base; \
- if (__o1->next_free == value) \
- __o1->maybe_empty_object = 1; \
- __o1->next_free \
- = __INT_TO_PTR ((__PTR_TO_INT (__o1->next_free)+__o1->alignment_mask)\
- & ~ (__o1->alignment_mask)); \
- if (__o1->next_free - (char *)__o1->chunk \
- > __o1->chunk_limit - (char *)__o1->chunk) \
- __o1->next_free = __o1->chunk_limit; \
- __o1->object_base = __o1->next_free; \
- } \
- value; })
-
-#define obstack_free(OBSTACK, OBJ) \
-__extension__ \
-({ struct obstack *__o = (OBSTACK); \
- void *__obj = (OBJ); \
- if (__obj > (void *)__o->chunk && __obj < (void *)__o->chunk_limit) \
- __o->next_free = __o->object_base = __obj; \
- else (obstack_free) (__o, __obj); })
-
-#else /* not __GNUC__ or not __STDC__ */
-
-#define obstack_object_size(h) \
- (unsigned) ((h)->alloc_failed ? 0 : (h)->next_free - (h)->object_base)
-
-#define obstack_room(h) \
- (unsigned) ((h)->chunk_limit - (h)->next_free)
-
-/* Note that the call to _obstack_newchunk is enclosed in (..., 0)
- so that we can avoid having void expressions
- in the arms of the conditional expression.
- Casting the third operand to void was tried before,
- but some compilers won't accept it. */
-
-#define obstack_grow(h,where,length) \
-( (h)->temp = (length), \
- (((h)->next_free + (h)->temp > (h)->chunk_limit) \
- ? (_obstack_newchunk ((h), (h)->temp), 0) : 0), \
- ((h)->alloc_failed ? 0 : \
- (bcopy (where, (h)->next_free, (h)->temp), \
- (h)->next_free += (h)->temp)))
-
-#define obstack_grow0(h,where,length) \
-( (h)->temp = (length), \
- (((h)->next_free + (h)->temp + 1 > (h)->chunk_limit) \
- ? (_obstack_newchunk ((h), (h)->temp + 1), 0) : 0), \
- ((h)->alloc_failed ? 0 : \
- (bcopy (where, (h)->next_free, (h)->temp), \
- (h)->next_free += (h)->temp, \
- *((h)->next_free)++ = 0)))
-
-#define obstack_1grow(h,datum) \
-( (((h)->next_free + 1 > (h)->chunk_limit) \
- ? (_obstack_newchunk ((h), 1), 0) : 0), \
- ((h)->alloc_failed ? 0 : \
- (*((h)->next_free)++ = (datum))))
-
-#define obstack_ptr_grow(h,datum) \
-( (((h)->next_free + sizeof (char *) > (h)->chunk_limit) \
- ? (_obstack_newchunk ((h), sizeof (char *)), 0) : 0), \
- ((h)->alloc_failed ? 0 : \
- (*((char **)(((h)->next_free+=sizeof(char *))-sizeof(char *))) = ((char *)datum))))
-
-#define obstack_int_grow(h,datum) \
-( (((h)->next_free + sizeof (int) > (h)->chunk_limit) \
- ? (_obstack_newchunk ((h), sizeof (int)), 0) : 0), \
- ((h)->alloc_failed ? 0 : \
- (*((int *)(((h)->next_free+=sizeof(int))-sizeof(int))) = ((int)datum))))
-
-#define obstack_ptr_grow_fast(h,aptr) (*((char **)(h)->next_free)++ = (char *)aptr)
-#define obstack_int_grow_fast(h,aint) (*((int *)(h)->next_free)++ = (int)aint)
-
-#define obstack_blank(h,length) \
-( (h)->temp = (length), \
- (((h)->chunk_limit - (h)->next_free < (h)->temp) \
- ? (_obstack_newchunk ((h), (h)->temp), 0) : 0), \
- ((h)->alloc_failed ? 0 : \
- ((h)->next_free += (h)->temp)))
-
-#define obstack_alloc(h,length) \
- (obstack_blank ((h), (length)), obstack_finish ((h)))
-
-#define obstack_copy(h,where,length) \
- (obstack_grow ((h), (where), (length)), obstack_finish ((h)))
-
-#define obstack_copy0(h,where,length) \
- (obstack_grow0 ((h), (where), (length)), obstack_finish ((h)))
-
-#define obstack_finish(h) \
-( (h)->alloc_failed ? 0 : \
- (((h)->next_free == (h)->object_base \
- ? (((h)->maybe_empty_object = 1), 0) \
- : 0), \
- (h)->temp = __PTR_TO_INT ((h)->object_base), \
- (h)->next_free \
- = __INT_TO_PTR ((__PTR_TO_INT ((h)->next_free)+(h)->alignment_mask) \
- & ~ ((h)->alignment_mask)), \
- (((h)->next_free - (char *)(h)->chunk \
- > (h)->chunk_limit - (char *)(h)->chunk) \
- ? ((h)->next_free = (h)->chunk_limit) : 0), \
- (h)->object_base = (h)->next_free, \
- __INT_TO_PTR ((h)->temp)))
-
-#ifdef __STDC__
-#define obstack_free(h,obj) \
-( (h)->temp = (char *)(obj) - (char *) (h)->chunk, \
- (((h)->temp > 0 && (h)->temp < (h)->chunk_limit - (char *) (h)->chunk)\
- ? (int) ((h)->next_free = (h)->object_base \
- = (h)->temp + (char *) (h)->chunk) \
- : (((obstack_free) ((h), (h)->temp + (char *) (h)->chunk), 0), 0)))
-#else
-#define obstack_free(h,obj) \
-( (h)->temp = (char *)(obj) - (char *) (h)->chunk, \
- (((h)->temp > 0 && (h)->temp < (h)->chunk_limit - (char *) (h)->chunk)\
- ? (int) ((h)->next_free = (h)->object_base \
- = (h)->temp + (char *) (h)->chunk) \
- : (_obstack_free ((h), (h)->temp + (char *) (h)->chunk), 0)))
-#endif
-
-#endif /* not __GNUC__ or not __STDC__ */
-
-#endif /* not __OBSTACK_H__ */
diff --git a/contrib/libg++/libg++/ChangeLog b/contrib/libg++/libg++/ChangeLog
deleted file mode 100644
index 506a841abbdd..000000000000
--- a/contrib/libg++/libg++/ChangeLog
+++ /dev/null
@@ -1,2271 +0,0 @@
-Tue Jun 18 18:36:58 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * Version 2.7.2.
-
-Fri Dec 1 15:35:03 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * libg++.texi: Don't document 'and' function etc, since they
- are no longer available if __STRICT__ANSI__.
-
- * Makefile.in: Generate g++FAQ.txt and g++FAQ.html from g++FAQ.texi.
- (diststuff): Also build g++FAQ.txt.
- * configure.in (REAL_CLEAN): Remove g++FAQ.{txt,html}.
- * g++FAQ.txt: Removed - now generated automatically.
-
- * configure.in (configdirs): Remove old-stream.
-
-Fri Apr 19 17:24:51 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * Version 2.8.0b3.
-
-Wed Apr 10 02:30:52 1996 Jason Molenda (crash@phydeaux.cygnus.com)
-
- * g++FAQ.texi, g++FAQ.txt: Update to April 5 version.
-
-Mon Apr 8 15:04:37 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * configure.in: Permit --enable-shared to specify a list of
- directories.
-
-Wed Mar 27 11:54:08 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * Version 2.8.0b2.
-
-Wed Feb 28 10:00:24 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * Version 2.8.0b1.
-
- * *, config/*: Remove references to curses stuff.
-
- * g++FAQ.txt (Subject): Update to February 15 version.
-
-Tue Dec 19 15:13:08 1995 Jason Merrill <jason@yorick.cygnus.com>
-
- * config/aix.ml (SHFLAGS): Add -Wl,-unix.
-
-Sun Dec 17 00:26:54 1995 Jeffrey A Law (law@cygnus.com)
-
- * Makefile.in (install): Make sure shared libraries
- are installed with mode 555.
-
-Mon Dec 4 14:07:02 1995 Jason Merrill <jason@yorick.cygnus.com>
-
- * config/hpux.ml: HPUX has shared libcurses.
-
- * Makefile.in (install): Make symbolic links relative.
-
-Tue Nov 28 14:26:49 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * Makefile.in (piclist): Use test instead of the left bracket, to
- avoid problems with some versions of make.
-
-Sat Nov 25 11:47:26 1995 Doug Evans <dje@canuck.cygnus.com>
-
- * configure.in: Delete changing LIBIBERTY to xiberty if cross.
-
- * Makefile.in (install): Fix setting of rootme.
-
-Tue Nov 21 14:16:35 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * configure.in: Check ${with_cross_host} rather than comparing
- ${host} and ${target}.
-
-Tue Nov 14 01:34:06 1995 Doug Evans <dje@canuck.cygnus.com>
-
- * Makefile.in (RX_OBJ): Delete MULTITOP reference.
- (SHLIB, ../librx/rx.o): Likewise.
- * configure.in: Delete call to cfg-ml-com.in. Call config-ml.in
- instead of cfg-ml-pos.in.
- * src/configure.in (XCINCLUDES): Delete MULTITOP reference.
- (config-ml.in): Call instead of cfg-ml-pos.in.
- * src/depend: Regenerated.
-
-Sun Nov 12 16:28:06 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * g++FAQ.texi, g++FAQ.txt: Update to September 15 version.
-
- * Makefile.in (VERSION), README: Update to 2.7.1.
-
-Thu Nov 9 17:45:00 1995 Jason Merrill <jason@yorick.cygnus.com>
-
- * config/*.ml: Don't include -lcurses in LIBS. Tweak.
-
- * configure.in (MOSTLYCLEAN): Add piclist.
-
-Wed Nov 8 17:02:42 1995 Jason Merrill <jason@yorick.cygnus.com>
-
- * Makefile.in (piclist): Don't include CursesW.o for targets that
- lack a shared libcurses.
-
-Mon Nov 6 14:18:16 1995 Jason Merrill <jason@yorick.cygnus.com>
-
- * config/linux.ml: Be sure to get the right libstdc++.
-
-Thu Oct 26 22:51:44 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * Makefile.in (VERSION): Increase to 2.7.0.90.
-
-Tue Oct 24 15:53:59 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * config/sol2shm.ml: New file, to pass -R to links.
- * configure.in: For solaris2*, use sol2shm.ml instead of elfshlibm.ml.
-
-Tue Sep 26 15:22:31 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * config/irix5.ml: Pass -rpath to links.
-
-Fri Sep 15 00:24:52 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * config/linux.ml: Conform to Linux shared library numbering scheme.
- * Makefile.in: Ditto.
-
-Mon Aug 21 11:46:03 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * Makefile.in (install): Make shared library executable and
- non-writable. Tidy.
-
-Sat Jul 22 14:00:26 1995 Doug Evans <dje@canuck.cygnus.com>
-
- * Makefile.in (list): Add multilib support.
- ($(SHLIB), rx.o, install): Likewise.
- * configure.in: Likewise.
- * src/Makefile.in (install): Likewise.
- * src/configure.in (XCINCLUDES): Likewise.
- * src/depend: Regenerated.
-
-Wed Jun 28 13:45:24 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * g++FAQ.texi, g++FAQ.txt: New versions from Joe Buck.
-
-Tue Jun 27 01:56:34 1995 Jeffrey A. Law <law@rtl.cygnus.com>
-
- * config/hpux.ml (SHFLAGS): Use $(PICFLAG), not $(LIBCFLAGS).
-
-Fri Jun 23 16:54:17 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * Makefile.in (SHLINK): Force link.
- (install): Ditto.
-
- * Makefile.in (SHARLIB): Provide a default value.
-
-Fri Jun 16 15:35:33 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * g++FAQ.texi, g++FAQ.txt: New files: Joe Buck's FAQ for G++.
-
-Thu Jun 15 21:01:10 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * Makefile.in (VERSION): Set to 2.7.0
-
-Fri Jun 16 13:57:22 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * config/aix.ml: Build both shared and archive libraries.
-
-Wed Jun 14 21:44:21 1995 Jason Merrill <jason@python.cygnus.com>
-
- * configure.in (frags): Use linux.ml for Linux/ELF.
- * config/linux.ml: New file.
-
-Wed Jun 7 11:13:32 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * configure.in (MOSTLYCLEAN): Remove stamp-picdir.
-
-Mon Jun 5 18:41:03 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * Makefile.in (piclist): New rule.
- (SHLIB): Use it.
-
- * configure.in (MOSTLYCLEAN): Remove pic.
- (frags): Use toplevel pic frags.
-
- * config/*.ml: Build both shared and archive libraries.
-
-Mon May 22 23:36:42 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * Makefile.in (VERSION): Bump to 2.6.90.
- (install): Re-format; add missing semi-colon.
-
-Wed May 10 05:07:45 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * config/aix.ml: New file.
-
- * configure.in (enable_shared): Support enable_shared under AIX.
-
- * Makefile.in (SHARLIB): New variable and rule for building an
- archive library containing a single shared object (for AIX).
-
-Wed Apr 19 23:22:36 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * config/dec-osf.ml (SHDEPS): Link with -lstdc++.
-
- * Makefile.in (SHLIB): Don't link with -lstdc++.
-
-Sun Apr 16 17:54:28 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * README: Minor updates.
- * libg++.texi: Fix two typos.
-
-Wed Mar 8 16:34:44 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * config/elf.ml (LIBS): Also link with libstdc++.
- * config/sunos4.ml: Ditto.
-
- * config/dec-osf.ml (LIBS): Pass -rpath to linker.
-
-Thu Feb 16 00:13:44 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * Makefile.in, config/*.ml: Generate shared library on most hosts
- as libg++.so.$(VERSION), with a symlink to libg++.so, so that
- multiple versions can coexist.
-
-Fri Jan 20 01:34:04 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * Makefile.in (list): Don't include files from libio and libiberty.
- (SHLIB): Link with libstdc++.
-
- * README.SHLIB: Add note about setting LD_LIBRARY_PATH.
-
-Mon Dec 5 19:45:21 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * README: Add note about AIX.
- * NEWS: Mention STL and shared library support.
-
-Wed Nov 9 01:24:09 1994 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * README.SHLIB: Update for new shared library support.
-
-Mon Nov 7 16:22:44 1994 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * configure.in, config/*.ml: Handle --enable-shared.
- (ALL): Reference 'libs' now.
- (MOSTLYCLEAN): Handle 'list'.
- (CLEAN): $(BUILD_LIBS) replaces $(TARGETLIB).
-
- * Makefile.in (ALL, CHECK, TARGET_LIB): Remove.
- (ARLIB): libg++.a.
- (SHLIB): libg++.so.
- (SHFLAGS): flags used when building $(SHLIB).
- (SHDEPS) : libraries linked when building $(SHLIB).
- (LIBIBERTY_OBJECTS_TO_GET): Reference file in other directory.
- (list): Build master list of objects.
- (libg++.a): Use it.
- (libg++.so): Ditto.
- (install): Only ranlib $(ARLIB).
-
-Sat Nov 5 16:09:24 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * Makefile.in (VERSION): Update to 2.6.2.
- * Makefile.in: Support for adding in ../libio/rx.o into libg++.a
- moved here from src/Makefile.in.
- * NEWS, README: Update. Libstdc++ is now enabled by default.
-
-Fri Nov 4 17:14:09 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * NEWS, TODO: Fix typos.
-
-Mon Oct 24 15:43:09 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * configure.in: Remove no-longer-used NOSTDINC setting.
- * utils/etags.c: Removed. The one in emacs-19 is better maintained.
- * utils/Makefile.in, utils/configure.in, README: Removed etags stuff.
-
-Thu Oct 20 17:07:53 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * README, NEWS: Note libstdc++. Other updates.
-
- * README.SHLIB: Update from Joseph E. Sacco <jsacco@ssl.com>.
-
-Tue Oct 18 17:52:42 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * README: Minor improvements.
- * README.SHLIB: New file. (Notes on building shared libraries.)
- * utils/c++-mode.el: Removed.
-
-Thu Oct 13 18:29:02 1994 Jason Merrill (jason@phydeaux.cygnus.com)
-
- * Makefile.in (install): Warn if we detect headers from a pre-2.5
- installation.
-
- * README: Add more information about problems from old
- installations.
-
-Wed Aug 24 12:54:04 1994 Ian Lance Taylor (ian@sanguine.cygnus.com)
-
- * configure.in: Change i[34]86-*-linux to i[345]86-*-linux.
-
-Sat Aug 20 12:12:01 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * Makefile.in (VERSION): Increase to 2.6.1.
- * NEWS: Note use of librx.
-
-Fri Jul 22 00:09:06 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * utils/etags.c: Replace index -> strchr and rindex -> strrchr.
- Protect extern definitions of strchr, strrchr, strcpy, strncpy,
- and strcmp by #ifndef's in case they are macros.
- (This is a problem under AIX-3.2.5, as reported by
- Tom McConnell <tmcconne@sedona.intel.com>.)
- Remove commented-out definitions of index and rindex.
-
-Wed Jul 13 12:56:43 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * Makefile.in (VERSION): Increase to 2.6.
- * README, NEWS, TODO: Some updating.
-
-Mon Jul 11 18:56:59 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * README: Update libg+.texinfo -> libg++.texi,
- Take out Doug Lea's prominent address.
-
-Tue May 31 09:25:41 1994 Mike Stump (mrs@cygnus.com)
-
- * utils/etags.c: Add #include <string.h>, to avoid warning on alpha.
-
-Mon May 30 17:34:39 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * Makefile.in (install): Various cleaning up.
- Move commands to install include files to src/Makefile.in.
-
-Wed May 25 16:00:55 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * Makefile.in (VERSION): Set to 2.5.4.
-
-Thu Mar 17 22:35:05 1994 Per Bothner (bothner@deneb.cygnus.com)
-
- * configure.in: Always set NOSTDINC in Makefiles. (Don't try
- to determine if C++ compiler can handle it. We can't really
- do that with the current configure setup.)
- * README: Recommend build using 'make all "CC=gcc -O"'.
- Note "make NOSTDIC=" is needed if using non-g++.
-
-Mon Mar 7 13:51:57 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * Makefile.in (.stmp-tests): Don't recurse into tests directory if
- it does not exist.
-
-Sun Dec 19 19:04:12 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * Makefile.in (VERSION): Set to 2.5.3.
- * README.386bsd: Removed.
-
-Fri Nov 26 19:07:36 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * Makefile.in (VERSION): Set to 2.5.2.
-
-Thu Nov 4 16:58:40 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * Makefile.in (VERSION): Update to version 2.5.1.
- * Makefile.in (install): Remove code to install g++-include.
- * configure.in: Restore code to set NOSTDINC.
-
-Wed Nov 3 11:50:21 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
-
-Mon Nov 1 17:56:05 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * g++-include directory: Removed. (We assume fixproto now.)
-
-Mon Oct 25 21:08:33 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * libg++.texi: Fix typo Slater -> [Daliel] Sleator.
- Reported by Nathan Loofbourrow <loofbour@cis.ohio-state.edu>.
-
-Sat Oct 23 22:06:00 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * Makefile.in (VERSION): Update to version 2.5.
- * README, NEWS: Various updates.
-
-Thu Oct 14 16:04:10 1993 Karen Christiansen (karen@deneb.cygnus.com)
-
- * configure.in: changed mv to mv -f
-
-Mon Oct 11 12:43:51 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * Makefile.in: Bump version number to 2.4.90.
- * README, NEWS: Update.
- * Makefile.in: Remove iostream references.
-
-Mon Oct 4 17:47:51 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * libg++.texi: Note NIHCL availability and status.
- * Makefile.in: Bump version number to 2.4.8.
-
-Wed Aug 25 13:00:55 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * config/{aix3-1.mt, hpux.mt, isc.mt, sco4.mt}:
- Moved to ../libio/config (since they affect _G_config.h).
- * configure.in: Don't set my_target for sco/hpux/isc/aix.
-
-Wed Aug 18 12:23:19 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * Makefile.in: Use FOO.list files instead of SUBDIR/stamp.
-
-Tue Aug 17 18:36:08 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- Set up for using ../libio instead of ./iostream.
- * Makefile.in (SUBDIRS): Don't include IO_DIR.
- * utils/gen-params: Moved to ../libio.
- * Makefile.in: Don't build or use _G_config.h; use ../libio.
- * Makefile.in (stamp-libg++.a, libg++.a): Re-do to use
- $(IO_DIR)/iostream-files, where IO_DIR defaults to ../libio.
- * config.shared: Now just a stub that invokes ../libio/config.shared.
- * utils/configure.in (srctrigger): gen-params -> g++dep.sh.
-
-Wed Aug 4 17:29:14 1993 david d `zoo' zuhn (zoo@rtl.cygnus.com)
-
- * Makefile.in (install): add some 'else true' clauses for the
- dain-bramaged DECstation Bourne shell
-
-Tue Aug 3 11:41:27 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * config.shared: Change INSTALL to use ../install.sh -c.
- * configure.in: Removed setting of INSTALL*.
- * configure.in: Removed reference to aix.mt.
- * config/aix.mt: Removed; no longer needed.
- * config/{aix3-1.mt, hpux.mt, linux.mt, sco4.mt, solaris2.mt}:
- Removed no-longer-needed setting of INSTALL*, NOSTDINC,
- HAVE_CPLUS_EXTERN, and WRAP_C_INCLUDES.
-
-Sun Jul 25 19:21:45 1993 Per Bothner (bothner@kalessin)
-
- * config.shared: Set WRAP_C_INCLUDES to no longer search
- g++-include, now that gcc has the fixproto script.
- * configure.in: Don't need -nostdinc++ flag any more,
- now that we're not using g++-include (with its #include_nexts).
- * config.shared: Restructure *clean rules, partly to
- avoid some duplication.
- * README: Various clarifications.
-
-Wed Jul 7 15:33:39 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
-
- * utils/gen-params (DOLLAR_IN_LABEL): Look for `7filebuf' instead
- of just `filebuf' on the vtable name.
-
-Tue Jun 29 13:02:39 1993 Per Bothner (bothner@rtl.cygnus.com)
-
- * Makefile.in (VERSION): Set to 2.4 (yeah!).
- * Makefile (install): Don't depend on all.
- * config.shared: Undo change of Jun 25.
- * configure.in: Handle *-*-solaris like *-*-solaris2.
-
-Fri Jun 25 12:23:22 1993 Per Bothner (bothner@rtl.cygnus.com)
-
- * config.shared: Make install-info depend on info.
-
-Wed Jun 23 12:56:23 1993 Per Bothner (bothner@rtl.cygnus.com)
-
- * Makefile.in: Define VERSION (for cd ..; make taz).
- * Makefile.in: Set to version 2.3.91.
- * Makefile.in (diststuff): Needed for distributions.
- * Makefile (dts): Rip out. Subsumed by stuff in ../Makefile.in.
-
-Tue Jun 22 13:16:30 1993 Per Bothner (bothner@deneb.cygnus.com)
-
- * README.386bsd: Patches for 386bsd.
- * utils/etags.c: Add AIX alloca support.
- * config.shared (CXXINCLUDES): Fix quoting bug.
- * libg++.texi: Document Integer methods fits_in_long(),
- as_long(), fits_in_double(), as_long().
-
-Tue Jun 15 11:54:42 1993 Per Bothner (bothner@deneb.cygnus.com)
-
- * config.shared (CLEAN): Default to ${TARGETPROG} ${TARGETLIB}.
- * configure.in (DISTCLEAN): Add target-mkfrag.
-
-Mon Jun 7 13:13:27 1993 Per Bothner (bothner@rtl.cygnus.com)
-
- * Makefile.in: Increase version number to 2.3.90.
- * configure.in: Always automatically generate a target Makefile
- fragment, and then posibly append the one in config/*.mt.
- This means the config/*.mt only needs to contain what is
- different from the normal case, which should ease updates.
- * config/rs6000.mt: Replace by aix3-1.mt (for buggy AIX 3.1),
- and aix.mt (for more recent versions).
- * config/isc.mt: New file.
- * configure.in: Update for above config/*.mt changes.
-
-Tue Jun 1 16:53:14 1993 Per Bothner (bothner@rtl.cygnus.com)
-
- * Makefile.in (stamp-$(TARGETLIB)): Delegate adding the
- files from $(IODIR) to the sub-Makefile, invoking latter
- with target add-to-targetlib.
- * Makefile.in (_G_config.h): Set CC=$(CXX) when invoking
- utils/gen-params, to "force" use of C++ compiler.
-
- * no-stream/Makefile.in (add-to-targetlib): New rule.
- * utils/gen-params: Remove OLD_PLACEMENT support.
-
-Fri Jun 4 14:14:39 1993 Ian Lance Taylor (ian@cygnus.com)
-
- * Makefile.in (installcheck): Pass CXXFLAGS to test-install.
- * config.shared: It's .SUFFIXES, not SUFFIXES.
-
-Thu Jun 3 00:53:03 1993 david d `zoo' zuhn (zoo at cirdan.cygnus.com)
-
- * Makefile.in (install): split off the running of the installation
- tests into a new target, installcheck
-
-Wed May 12 13:39:46 1993 Ian Lance Taylor (ian@cygnus.com)
-
- * utils/Makefile.in (etags.o, etags): Build etags via etags.o,
- rather than directly from etags.c.
-
-Tue May 11 16:32:31 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
-
- * utils/gen-params: Look for new types `int32_t' and `uint32_t'.
-
-Mon May 10 09:57:25 1993 Ian Lance Taylor (ian@cygnus.com)
-
- * configure.in: Create target-mkfrag using move-if-change.
-
-Thu May 6 09:24:21 1993 Ian Lance Taylor (ian@cygnus.com)
-
- * Makefile.in (install): If TEST_INSTALL was overridden by
- configure.in, don't try to install the test-install directory.
- * configure.in: If cross, take gperf, test-install and utils out
- of configdirs. Otherwise they wind up in subdirs and get built.
- Override TEST_INSTALL to be empty rather than Makefile.
-
-Mon May 3 18:55:19 1993 Per Bothner (bothner@cygnus.com)
-
- * configure.in: If cross, use sed to hack Makefile, rather
- than appending to target_makefile_frag, since that doesn't
- work if there is a pre-existing fragment.
- * Makefile.in: Re-order INSTALLDIR.
-
-Mon May 3 11:45:41 1993 Ian Lance Taylor (ian@cygnus.com)
-
- * config.shared: Added missing quotes around TOUCH_ON_COMPILE.
-
-Fri Apr 30 15:12:36 1993 Per Bothner (bothner@cygnus.com)
-
- * Makefile.in (tooldir): New definition.
- * Makefile.in (install): Install _G_config in $(tooldir)/include,
- since it is the only include file that is target-dependent.
- * Makefile.in (dist-fix-Makefile): Remove no-longer-needed kludge.
- * config.shared: If TOUCH_ON_COMPILE is defined (at configure
- time), make sure to 'touch stamp' on every compile.
- This prevents unneeded re-builing of libg++.a.
-
-Wed Apr 28 11:44:05 1993 Ian Lance Taylor (ian@rtl.cygnus.com)
-
- * config.shared (MAKEOVERRIDES): Define to be empty.
-
-Tue Apr 27 15:52:19 1993 Per Bothner (bothner@cygnus.com)
-
- * config.shared (FLAGS_TO_PASS): Also pass INSTALL, INSTALL_DATA,
- and INSTALL_PROGRAM.
- * Makefile.in: Remove duplicate definition of FLAGS_TO_PASS.
- Replace uses of BASE_FLAGS_TO_PASS by FLAGS_TO_PASS.
-
-Tue Apr 27 11:09:04 1993 Ian Lance Taylor (ian@cygnus.com)
-
- * config.shared: info depends on .info files, not .texi files.
-
-Fri Apr 23 11:31:01 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
-
- * configure.in (target_makefile_frag): If there was one in srcdir,
- then reset it to include ${srcdir} so we'll copy it properly.
-
-Sun Apr 18 23:54:45 1993 Per Bothner (bothner@cygnus.com)
-
- * Makefile.in and configure.in all directories, config.shared:
- Revamped configure scheme. See libg++/NEWS.
- * README: Some extra information, including a note
- about what it means when test-install fails.
- * libg++.texinfo: Renamed to libg++.texi.
- * gen-params: Minor improvements (we hope) here and there.
-
-Tue Mar 23 00:14:33 1993 david d `zoo' zuhn (zoo at cirdan.cygnus.com)
-
- * Makefile.in: minimal support for installcheck (FIXME), some
- support for dvi target
-
-Fri Mar 19 10:35:32 1993 Ian Lance Taylor (ian@cygnus.com)
-
- * david d `zoo' zuhn's patches for ARG_MAX:
- Makefile.in (BASE_FLAGS_TO_PASS): New variable.
- (FLAGS_TO_PASS): Use BASE_FLAGS_TO_PASS.
- (info, install-info, install): Use BASE_FLAGS_TO_PASS.
- (subdir_do): Don't echo FLAGS_TO_PASS.
-
-Fri Mar 12 18:35:02 1993 david d `zoo' zuhn (zoo at cirdan.cygnus.com)
-
- * configure.in: recognize *-*-solaris2* instead of *-*-solaris2
-
-Fri Mar 5 11:41:15 1993 Ian Lance Taylor (ian@cygnus.com)
-
- * Makefile.in (MAKEOVERRIDES): Override GNU make 3.63 default
- definition in order to reduce length of command line.
-
-Wed Feb 17 05:28:51 1993 david d `zoo' zuhn (zoo at cirdan.cygnus.com)
-
- * Makefile.in: when making include files non-executable, make them
- world readable as well
-
-Mon Jan 25 14:40:28 1993 Brendan Kehoe (brendan@cygnus.com)
-
- * config/alpha.mh: New file, for DEC's Alpha family.
-
-Wed Jan 13 21:17:26 1993 Mike Stump (mrs@cygnus.com)
-
- * .../Makefile.in, utils/gen-params, configure.in: Change .../gcc
- to .../xgcc.
-
-Tue Jan 5 02:38:37 1993 david d `zoo' zuhn (zoo at cirdan.cygnus.com)
-
- * configure.in: get the xiberty kludge "working"
-
-Wed Dec 30 14:15:31 1992 david d `zoo' zuhn (zoo at cirdan.cygnus.com)
-
- * Makefile.in (info): added -I to command line, for @include
-
-Tue Dec 29 08:54:13 1992 Ian Lance Taylor (ian@cygnus.com)
-
- * utils/gen-params: Define _G_MATH_H_INLINES. Based only on
- arguments to gen-params; no test yet.
- * config/sco4.mt, config/hpux.mt (G_CONFIG_ARGS): pass
- MATH_H_INLINES as 1.
-
- * Makefile.in: pass $(FLAGS_TO_PASS) to all calls to make.
-
-Mon Dec 28 12:07:11 1992 Ian Lance Taylor (ian@cygnus.com)
-
- * utils/gen-params: added check for CURSES_FORMAT_ARG, which
- differs from system to system.
-
- * configure.in: for SCO 3.2v4 use sco4.
- * config/sco4.mh: new file: SCO header files are C++ ready, and
- SCO curses doesn't work with libg++ curses.
-
-Tue Dec 22 14:58:04 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * utils/gen-params: At end, delete all temporary files.
- * configure.in: Don't bother linking lgpl.texinfo.
- Clean up temp.o when done.
- * Makefile.in: Set version number to 2.3.1.
- * Makefile.in (*clean rules): Use ALL_SUBDIRS, which includes
- old-stream and no-stream.
- * Makefile.in: Add dependencies for libg++.a, to support
- parallel makes.
-
-Tue Dec 15 14:45:05 1992 david d `zoo' zuhn (zoo at cirdan.cygnus.com)
-
- * configure.in: configure based on target, instead of host. This
- was a simple text substitution, which also involved renaming:
-
- * config/{hpux.mt,linux.mt,rs6000.mt,solaris2.mt}: renamed from .mh
-
-Sat Dec 12 00:05:42 1992 Per Bothner (bothner@cygnus.com)
-
- * Makefile.in: No longer use HAVE_CPLUS_EXTERN; we can use
- WRAP_C_INCLUDES instead. This should be somewhat more robust,
- since we only depend on WRAP_C_INCLUDES being over-ridden.
- * configure.in: Don't generate HAVE_CPLUS_EXTERN.
-
-Wed Dec 9 15:08:34 1992 Per Bothner (bothner@cygnus.com)
-
- * Makefile.in: Set version to 2.3.
- * README, NEWS, TODO: Various updates.
-
-Fri Dec 4 17:44:40 1992 Per Bothner (bothner@cygnus.com)
-
- * Makefile.in (install): Pass CXX to test-install, not CC.
- * Makefile.in (dist): Use new ../etc directory for config stuff.
-
-Thu Dec 3 20:03:05 1992 Per Bothner (bothner@cygnus.com)
-
- * Makefile.in: Bump to version 2.2.95.
- * Makefile.in (distclean, realclean): Don't delete
- Makefile until *after* recursive makes.
- * Makefile.in: Add a kludge to reconcile FSF/Cygnus conflict.
-
-Fri Nov 20 15:34:27 1992 david d `zoo' zuhn (zoo at cirdan.cygnus.com)
-
- * Makefile.in (install): don't change permissions on all info files,
- just the ones that get installed by this Makefile
-
-Fri Nov 20 14:34:52 1992 Per Bothner (bothner@cygnus.com)
-
- * configure.in: Add etc/fib to subdirs.
- * configure.in, config/{linux,solaris2}.mh: Fix typo
- INSTALLDATA -> INSTALL_DATA.
-
-Tue Nov 17 21:48:10 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * Makefile.in: Bump to 2.2.92.
- * Makefile.in (install): Use $(FLAGS_TO_PASS).
-
- * utils/gen-params: More "robust" sed patterns for extracting
- type definitions.
-
-Sat Nov 7 19:45:42 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * config/solaris2.mh: New file, for Sun's Solaris2 OS.
- * configure.in: Use it.
-
-Thu Nov 5 18:45:53 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * Makefile.in: Bump to version 2.1.91.
- * Makefile.in, */Makefile.in, etc: Replace ${C++} and
- ${C++FLAGS} by ${CXX} and ${CXXFLAGS}. (Some versions of
- 'make' do not like '+' in variable names.)
- * Makefile.in (install): Fix typo (chmod directory).
-
-Mon Nov 2 13:20:54 1992 Per Bothner (bothner@cygnus.com)
-
- * Makefile.in: Don't pass $(NOSTDINC) as part of $(CC).
- * Makefile.in (dist): include/demangle.h is also needed.
-
-Sun Nov 1 16:25:00 1992 Per Bothner (bothner@cygnus.com)
-
- * Makefile.in, */Makefile.in, etc: Use ${C++} (and ${C++FLAGS})
- to compile C++ programs, not ${CC}.
- * Makefile.in: Bump to version 2.2.90.
- * Makefile.in: Use FLAGS_TO_PASS more consistently.
-
-Sat Oct 31 19:24:05 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * libg++.texinfo: Fix a number of typos (from
- meyering@cs.utexas.edu (Jim Meyering)).
-
-Fri Oct 9 16:44:30 1992 Per Bothner (bothner at PersSony)
-
- * Makefile.in: Fixed rule for building libg++.a to not do
- anything if everyting is up-to-date, using a stamp-libg++.a
- indicator file.
-
-Tue Sep 29 15:47:05 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * COPYING, COPYING-LIB: Removed (- use versions in ..).
- * README: Update accordingly.
-
-Fri Sep 25 11:28:24 1992 Per Bothner (bothner@cygnus.com)
-
- * utils/gen-params: Define the type names (such as _G_size_t)
- using typedefs, not macros.
- * utils/gen-params: Add commented-out hook for turning
- off use of templates (for old compilers).
-
-Thu Oct 1 23:53:29 1992 david d `zoo' zuhn (zoo at cirdan.cygnus.com)
-
- * configure.in: use cpu-vendor-os triple instead of nested cases
-
-Tue Sep 29 12:07:35 1992 Ian Lance Taylor (ian@cygnus.com)
-
- * utils/gen-params: do the stdarg test with C++, not C, since
- otherwise a type incompatibility is only a warning.
-
-Tue Sep 15 15:43:35 1992 Ian Lance Taylor (ian@cygnus.com)
-
- * Makefile.in (install): install libg++.a in $(INSTALLDIR), which
- defaults to $(libdir), not $(tooldir). Default $(gxx_includedir)
- to $(tooldir/g++-include; the g++-include directory is currently
- target dependent because of the _G_config.h file. Also, gcc now
- looks in $(tooldir) by default.
- configure.in: if cross-compiling, override $(INSTALLDIR) to
- $(tooldir)/lib.
-
-Fri Sep 11 16:05:08 1992 Ian Lance Taylor (ian@cygnus.com)
-
- * configure.in, Makefile.in: When cross-compiling, don't build
- gperf, or the utils directory, or test-install.
-
-Thu Sep 10 22:49:34 1992 Ian Lance Taylor (ian@cygnus.com)
-
- * utils/gen-params: test for existence of curses.h. It's not in
- newlib. Also corrected a couple of typos.
-
-Wed Sep 9 12:34:00 1992 Ian Lance Taylor (ian@cygnus.com)
-
- * Makefile.in: try to get correct version of nm for target for
- gen-params.
-
-Mon Aug 31 16:14:34 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * Makefile.in: Bump to version 2.2.3.
- * Makefile.in: Convert ${readme} to be `pwd`/ (with a
- trailing slash) (as done in iostream).
-
-Mon Aug 17 17:15:06 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * utils/gen-params: Allow command-line (e.g. HAVE_UNISTD=0)
- to override feature testing for various include files.
- * Makefile.in: Pass $(NOSTDINC) to gen-params.
- Turn off execute permission after installing data.
-
-Wed Aug 12 00:33:09 1992 Per Bothner (bothner@cygnus.com)
-
- * utils/c++-mode.el: New version.
-
- * Makefile.in: Change to version 2.2.1.
- * Makefile.in: Remove some old junk.
- Let 'install' depend on 'all'.
- Let 'install' also install gperf.
- * utils/gen-params: Test for Posix-compatible (or rather
- iostream/procbuf.C-compatible) sys/wait.h by compiling
- C++ test program, not C. Fixes NeXT problem, I hope.
- Also, fix typo when predefined DOLLAR_IN_LABEL (fixes hpux).
-
-Mon Aug 10 11:38:14 1992 Ian Lance Taylor (ian@dumbest.cygnus.com)
-
- * Makefile.in: always create installation directories.
-
-Fri Jun 26 12:26:35 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * Makefile.in: Change to version 2.2.
- * Makefile.in: Don't `cd ../libiberty; make'; since this
- may cause some confusion (with old versions of GNU make
- passing the wrong environment); instead assume that
- ../Makefile takes care of it.
- * configure.in, config/hpux.mh: hpux support.
- * utils/etags.c: stat fixes for Posix and SVR3.
- * utils/gen-params: Minor fixes.
-
-Mon Jun 22 23:54:31 1992 Per Bothner (bothner@cygnus.com)
-
- * Makefile.in: Increase to version 2.1.92.
- * utils/gen-params. Add some paranoia when trying to
- figure out a type for _G_ssize_t - make sure it doesn't
- conflict with read().
-
-Fri Jun 19 23:15:13 1992 Per Bothner (bothner@cygnus.com)
-
- * Makefile.in: Increase to version 2.1.91.
- * utils/etags.c: New version, from emacs-19.
- * utils/Makefile.in: New etags needs GNU getopt.
- * utils/gen-params: Take out _G_HAVE_UNION_WAIT testing.
- Instead, check that wait() will accept an (int*) - as
- Posix and tradition (but not NeXT) says it should -
- if it doesn't, say that we don't HAVE_SYS_WAIT.
-
-Wed Jun 17 18:48:16 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * Makefile.in: Increase version number to 2.1.90.
- * no-stream/Makefile.in: New directory and file.
- Useful for building libg++ *without* iostreams.
- * Makefile.in, */Makefile.in: Cleanup *clean rules,
- following standards.texi.
- * utils/gendepend: Remove tempoary file depend.tmp.
- * utils/gen-params: Check if <sys/wait.h> defines union wait.
- * WHATS.NEW: Merge old stuff from (deleted) etc/release.log.
- * configure.in: Check that we find an install that works;
- for SYSV, also try /usr/ucb/install.
- * TODO, README, libg++.texinfo: Minor changes.
-
-Wed Jun 3 23:10:20 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * Makefile.in: Set version number to 2.1.
- * utils/gen-params: If ${NAMES_HAVE_UNDERSCORE} is non-null,
- use that value; don't bother trying to deduce it.
- Ditto for ${DOLLAR_IN_LABEL}.
- Replace sed-idiom -n -e 1,1p by -e '2,$d', because the
- former doesn't work in GNU sed.
- Add sigset_t to the list of types searched for.
- Look for <sys/wait.h> and defined _G_HAVE_SYS_WAIT appropriately.
- * vms/{_G_config.h,AAAREADME.TXT}: New versions from Youngdale.
- * libg++.texinfo: Note failure behavior for String::before().
- * Makefile.in: Use FLAGS_TO_PASS variable to be more
- consistent about flags to pass to sub-makes.
- Add some hooks for people with unusual environments:
- Unually powerful C-libraries, or they don't want iostreams
- to be part of libg++.a.
- * configure.in: Test for Linux configuration.
- Avoid confusing error message when looking for ranlib.
-
-Fri May 29 13:08:12 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * utils/gen-params: Remove TMP before running a sed which
- writes to it (GNU sed supposedly has a bug where in that it
- doesn't truncate a file before writing to it).
- * Makefile.in: Include strerror.o strsignal.o (from libiberty).
-
- * Makefile.in: Bump to version 2.0.91.
- * etags.c: #undef TRUE and FALSE before defining, to
- avoid collisions. (These inevitable collisions make it
- a mistake to define TRUE and FALSE in the first place.)
- * gen-params: Test for <dirent.h>.
- Use ${SED} instead of sed, since GNU sed may be broken.
- Check if the type we found for va_list works, and have
- a fall-back plan for when it doesn't.
- * gen-params: Check for sprintf return type.
- Don't emit unneeded _G_const.
- * config/mt-*: Remove unused and obsolete files.
- * vms directory: Updates from Eric Youngdale.
- * README: Minor fixes.
-
-Thu May 14 12:29:29 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * Makefile.in: Set version to 2.0.90.
- * Makefile.in: Pass new flags to test-install, now that
- test-install has been changed to to use ../libg++.a etc;
- override that to use -lg++ etc to get inststalled versions.
- * COPYING: Replace by version 2 GPL.
- * README: Explain what copyrights apply to what.
- * libg++.texinfo: Remove comments about gperf, since it
- is not part of libg++ proper (and is GPL, not LGPL).
-
- * util/gen-params: Re-order in a logical order.
- Change _G_NO_UNISTD_H to _G_HAVE_UNISTD for consistency.
- Add test for _G_FRIEND_BUG (if the compiler barfs on
- extern "C" functions as friends).
-
-Wed May 13 12:06:57 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * configure.in: Make sure to append 'depend' (if it exists)
- to each Makefile.
-
-Sat May 9 12:43:38 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * Makefile.in: Bump version to 2.0.9.
-
- * WHATS.NEW: Be more expansive.
- * configure.in: Fix some typos.
- * Various Makefile.in's: Pass $(NOSTDINC) when compiling.
- Also, fix some other CFLAGS problems.
-
-Wed May 6 11:48:32 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * utils/gen-params: Also #include <time.h> in dummy.c,
- so we can get clock_t.
-
- * utils/gen-params: Moved argument evaluation to start.
- Pass -I${gccdir}/include if using ${gccdir}/gcc.
- * Makefile.in: Pass $(XTRAFLAGS) to gen-params.
- * vms directory: Renamed _G_CONFIG.H to _G_config.h.
-
-Sat May 2 16:48:07 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * vms directory: New files from Eric Youngdale.
-
-Thu Apr 30 13:42:59 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * Makefile.in: Bump to version 2.0.8 for "progressive" release.
- * every Makefile.in: Replace gcc -O by just gcc, for constiency.
- * utils/gen-params: Rename every temp.c -> dummy.c.
- Add test for sys/resource.h, and use that instead of the
- no-longer-meaning test for sysv.
- * Makefile.in: Install sys/*.h from g++-include, not src.
- Fix so that 'make libg++.a' does the right thing.
-
-Mon Apr 20 14:59:59 1992 Per Bothner (bothner@cygnus.com)
-
- * utils/gen-params: Add introductory commentary.
- Replace tabs by space in dummy.out, so following
- sed scripts don't have to worry about tabs.
-
-Thu Apr 30 09:06:32 1992 K. Richard Pixley (rich@cygnus.com)
-
- * Makefile.in: add .NOEXPORT so that subdirs don't inherit
- bad definitions. Notably, so that libiberty doesn't inherit
- host_makefile_frag.
-
-Fri Apr 17 13:50:41 1992 Per Bothner (bothner@cygnus.com)
-
- * configure.in: Use new 'subdirs' feature of configure,
- to configure all sub-directories in one invocation of
- 'configure'. This means we can get rid of all subdir
- configure.in files, and we can share configuration files.
- * configure.in: If there is no host makefile fragment.
- generate one.
- * Makefile.in, */Makefile.in, etc: Use new configure scheme.
- Also, define CC using a test for ../gcc/gcc, not just
- a ../gcc directory. Similar for AR etc.
- * utils/gen-params: New shell script to generate a .h
- file with various system-specific parameters.
- * Makefile.in: New rule to generate _G_config.h using
- utils/gen-params. All Makefiles include the top-level
- directory in the include search path, to make sure they
- get _G_config.h (which is the the libg++ build directory,
- not the srcdir).
-
-Mon Mar 23 16:46:01 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * libg++.texinfo: Remove references to itoa and similar
- deprecated functions that return a pseudo-static buffer
- (allocated by AllocRings). Replace by reference
- to (new) printon() methods.
-
-Tue Mar 10 18:06:49 1992 Per Bothner (bothner@cygnus.com)
-
- * Makefile.in: Bump to version 2.0.
- * Makefile.in (dist): Fix to avoid symlink cycles.
-
-Sat Mar 7 19:36:35 1992 Per Bothner (bothner@cygnus.com)
-
- * Makefile.in (dist): Handle '.' as a srcdir.
-
-Sat Mar 7 00:03:05 1992 K. Richard Pixley (rich@rtl.cygnus.com)
-
- * Make.defs: removed.
-
- * libg++.texinfo: added menu item hook.
-
-Fri Mar 6 16:51:58 1992 K. Richard Pixley (rich@cygnus.com)
-
- * Makefile.in: bump version to 1.99.
-
-Fri Mar 6 15:53:13 1992 Per Bothner (bothner@cygnus.com)
-
- * Makefile.in: Remove some obsolete stuff.
- * README, WHATS.NEW: Update.
- * PROBLEMS renamed to TODO.
-
-Thu Mar 5 00:18:15 1992 Heinrich G. Seidl (hgs@cygnus.com)
-
- * configure.in, Makefile.in: use `g++' as compiler for the library
- as does the user.
-
- * Make.defs: use again awk for depend rules, since sed
- has too many bugs (sun's and GNU).
- utils/g++dep.sh: print each dependency on one line
-
-Wed Mar 4 12:04:45 1992 Per Bothner (bothner@cygnus.com)
-
- * Makefile.in: Don't pass $(MAKE_ENVIRON) to test-install,
- since we're trying to test the *installed* compiler.
- Also, install-progs before the test-install.
-
-Tue Mar 3 23:01:05 1992 Per Bothner (bothner@cygnus.com)
-
- * PROBLEMS: Added to list of things to do.
-
-Tue Mar 3 21:06:38 1992 Heinrich G. Seidl (hgs@rtl.cygnus.com)
-
- * Created `utils' directory and moved "progs" from
- `etc' into `utils'.
- Makefile.in: `all' builds only programs and the libary,
- `check' builds all in `tests' and `etc' and
- runs the tests.
- Some minor bug fixes to Makefiles.
-
-Tue Mar 3 16:58:38 1992 Per Bothner (bothner@cygnus.com)
-
- * vms directory: New files from
- Eric Youngdale <youngdale@v6550c.nrl.navy.mil>.
-
-Sun Mar 1 17:17:54 1992 Per Bothner (bothner@cygnus.com)
-
- * Makefile.in: Added 'check' and 'etc-tests' rules.
-
-Thu Feb 27 17:05:49 1992 Per Bothner (bothner@cygnus.com)
-
- * Make.defs: Change GXX from g++ to gcc, since g++
- passes -lg++ to ld, which may not be installed yet.
-
-Wed Feb 26 18:04:40 1992 K. Richard Pixley (rich@cygnus.com)
-
- * Makefile.in, configure.in: removed traces of namesubdir,
- -subdirs, $(subdir), $(unsubdir), some rcs triggers. Forced
- copyrights to '92, changed some from Cygnus to FSF.
-
-Wed Feb 26 12:46:49 1992 Per Bothner (bothner at cygnus.com)
-
- * Make.defs: Change IDIR to use libdir instead of
- datadir, to be compatible with FSF's gcc-2.0.
- * Makefile.in: Removed bogus '@' prefix in rule.
-
-Wed Feb 26 01:24:34 1992 Michael Tiemann (tiemann at cygnus.com)
-
- * Make.defs: Propagate XTRAFLAGS into MAKE_ENVIRON.
-
-Wed Feb 19 23:23:02 1992 Per Bothner (bothner at cygnus.com)
-
- * Make.defs: Add IO_SRCDIR macro to name source
- of either isotream or old-stream. This allows
- an independent iostream distribution.
- * Make.defs (depend rule): Create empty file if no sources.
- * README: Move change summary to WHATS.NEW.
- * WHATS.NEWS: Minor updates (and merge).
- * COPYING-LIB: New file defining Library Licence.
-
-Sat Feb 15 13:06:50 1992 Per Bothner (bothner at cygnus.com)
-
- * Makefile.in (dist): Add some more top-level (above
- libg++) files to the distribution.
-
- * Makefile.in: Bumped LIBG++_DIST_VERSION to 1.91.
- * README: Made some very inadequate updates.
-
-Mon Feb 10 11:28:19 1992 Per Bothner (bothner at rtl.cygnus.com)
-
- * libg++.texinfo: Discourage use of AllocRings,
- and encourage care using String::operator const char *.
- (The latter has just now been changed to not copy
- using an AllocRing.)
-
-Fri Feb 7 11:46:18 1992 Per Bothner (bothner at cygnus.com)
-
- * Makefile.in: Added LIBG++_DIST_VERSION; set it to 1.90.
- Added 'dist' rule to make distribution tar file.
- * libg++.texinfo: Preliminary changes to document
- new iostream facilities.
-
-Fri Jan 31 17:13:11 1992 Per Bothner (bothner at cygnus.com)
-
- * WHATS.NEW: New file, to document recent changes.
-
-Wed Jan 29 12:54:10 1992 Per Bothner (bothner at cygnus.com)
-
- * Make.defs: Change LIBDIR and IDIR so that libg++.a and
- g++-include/* go info $(libdir) and $(datadir)/g++-include.
- Thus we don't have to worry about gcc's $(libsubdir)
- depending on gcc's version number.
- Also, add compilation rules for *.C.
-
-Sat Jan 25 15:59:01 1992 Per Bothner (bothner at PersSony)
-
- * Make.defs, all Makefile.in files: Centralize rules for
- depend, FORCE, and Makefile in MAke.defs. Remove such
- rules from every Makeifle.in.
- * Makefile.in: Don't pass GXXFLAGS or EH_FILES to sub-makes.
-
-Fri Jan 17 15:32:01 1992 Per Bothner (bothner at cygnus.com)
-
- * Make.defs: Make iostream be the default value of IO_DIR.
- Removed duplicate -I$(SRCIDIR) from COMPILE.cc macro.
-
-Sun Jan 5 00:23:20 1992 Per Bothner (bothner at cygnus.com)
-
- * Makefile.in, Make.defs, old-stream/Makefile.in:
- Fix install-include-files rule.
- * Makefile.in, Make.defs: Move installation directory
- names and INSTALL defines from former to latter.
- * configure.in: Add test-install directory.
-
- * Makefile.in, Make.defs: Move stuff from former to latter.
- * Make.defs: Allow switching between old stream and new
- iostream library. Allow use from any sub-directory.
- * configure.in: Add old-stream and gperf sub-directories.
-
-Fri Jan 3 16:36:31 1992 Per Bothner (bothner at cygnus.com)
-
- * Complex.h, Fix.h, String.h, gen/DLList.ccP, gen/SLList.ccP,
- gen/Plex.ccP, gen/Vec.hP: Add #include <builtin.h> as needed.
- It was included by the old stream.h, but not by the new iostream.h.
- * String.h: Fix some portabilty problems that depended
- on the old stream code.
-
-Thu Jan 2 21:07:04 1992 John Gilmore (gnu at cygnus.com)
-
- * Makefile.in (info, install-info, clean-info): Handle info files.
- (assorted): Clean up unused macros, etc.
-
- * libg++.texinfo: Minor lint found by makeinfo and tex.
-
-Tue Dec 31 18:16:12 1991 Per Bothner (bothner at cygnus.com)
-
- Changes that allow makes to take be made either from here,
- or directly in a sub-directory.
- * Make.defs: New file to contain defiitions shared between
- libg++ sub-directories.
- * Makefile.in: Removed stuff now in Make.defs.
- * configure.in: Add iostream to configdirs.
- Define host_makefile_frag to pull in Make.defs.
-
-Tue Feb 19 06:41:00 1991 Doug Lea (dl at g.oswego.edu)
-
- * malloc.c: Don't override use of libg++ version of bcopy
- for SYSV users
-
- * timer.cc: Removed ifdefs for tek4300, since they are reported
- not to be necessary or useful
-
- * CursesW.h, curses.h: removed touchline and touchoverlap,
- since they are apparently nonstandard, and aren't supported
- in most C curses libraries.
-
- * Removed test0 and twrapper from tests, since
- they are not fully supported in g++-1.39.0
-
-Sat Jan 26 05:24:22 1991 Doug Lea (dl at g.oswego.edu)
-
- * signal.h: Reinstate full path name of C version of signal.h
-
-Fri Jan 25 08:45:09 1991 Doug Lea (dl at g.oswego.edu)
-
- * BitSet.h, BitString.h: pos and index fns inlined regardless
- of __OPTIMIZE__, since needed elsewhere.
-
- * RNG.h killed redundant #ifdef __GNU__
-
-Fri Dec 28 06:31:03 1990 Doug Lea (dl at g.oswego.edu)
-
- * FPQueue.hP, FPStack.hP: removed defaults from defs (kept in decls)
-
-Sat Dec 22 14:51:40 1990 Doug Lea (dl at g.oswego.edu)
-
- * Integer.cc; atoIntRep: pulled sgn assignment out of loop
-
-Fri Dec 14 16:43:04 1990 Doug Lea (dl at g.oswego.edu)
-
- * Complex.cc: Fixed pow(Complex, Complex), and added
- pow(Complex, double), from thc@cs.brown.edu
-
-Wed Dec 12 11:47:51 1990 Doug Lea (dl at g.oswego.edu)
-
- * malloc.c: Killed prototype decls of fputs, fprintf;
- just use whatever stdio.h gives.
-
-Thu Nov 29 13:02:32 1990 Doug Lea (dl at g.oswego.edu)
-
- * dtoa.cc: better bounds for workspace arrays
-
-Wed Nov 7 05:53:36 1990 Doug Lea (dl at g.oswego.edu)
-
- * ACG.cc: function LCG marked as static
-
-Sun Oct 28 05:32:30 1990 Doug Lea (dl at g.oswego.edu)
-
- * std.h: ioctl decl now has void*, not char* as last param, since
- sometimes need to pass in structs.
-
-Sat Oct 20 05:51:21 1990 Doug Lea (dl at g.oswego.edu)
-
- * sys/socket.h: added getpeername decl
-
-Tue Oct 16 08:00:14 1990 Doug Lea (dl at g.oswego.edu)
-
- * Integer.cc (div) Overallocate `r' if necessary to ensure
- trailing 0.
-
-Mon Oct 15 05:11:09 1990 Doug Lea (dl at g.oswego.edu)
-
- * EH2.c: Added __raise_exception from tiemann
-
-Thu Oct 11 05:50:34 1990 Doug Lea (dl at g.oswego.edu)
-
- * VHMap.ccP, CHMap.ccP. Base initializers explicitly name base
- classes in constructors
-
-Sat Oct 6 08:56:56 1990 Doug Lea (dl at g.oswego.edu)
-
- * RNG.cc: `volatile' added for vars that might have
- greater precision in FP hardware than in memory, to
- force comparisons to be done with memory versions,
- thus avoiding rounding error.
-
- * Incorporated patches for graph from rich@rice.edu
-
- * CHMap.hP: Fixed ifdef name to match class name for <T><C>CHNode
-
-Sun Sep 30 06:50:45 1990 Doug Lea (dl at g.oswego.edu)
-
- * pow.cc: removed redundant tests
-
-Tue Sep 4 15:07:35 1990 Doug Lea (dl at g.oswego.edu)
-
- * Regex.cc: Don't die when someone declares Regex(0).
-
-Mon Aug 27 06:06:08 1990 Doug Lea (dl at g.oswego.edu)
-
- * curses.h, CursesW: added vax to list of implementations not
- supporting touchline & touchoverlap
-
-Thu Aug 23 05:46:16 1990 Doug Lea (dl at g.oswego.edu)
-
- * std.h, resource.h text.hello.cc: more changes for i386
-
- * sys/wait.h: Include <sys/resource.h>, not <resource.h>
-
- * MPlex.hP: low() now returns lowest valid index. Similar
- changes elsewhere.
-
- * (stdio.h, math.h...) Installed patches for HPUX 7.0
-
-Mon Aug 13 08:17:29 1990 Doug Lea (dl at g.oswego.edu)
-
- * istream.h: ctor istream(int filedesc, char* buf, int buflen,
- int sk, ostream* t = 0) -- made sk non-default to
- prevent ambiguous matches.
-
- * Makefiles: rearrangements, patches from Ron Guillmette
- to enable compiles of etc and gperf files without install
-
- * Added swap.h, from Ron Guilmette. Apparently needed for
- Hansen's C++ answer book code.
-
- * String.h: String operator() made a synonym for at(int, int),
- for compatibilty with Hansen's classes.
-
- * ostream.h: added ostream << (const void * p) to print p in hex.
-
- * std.h: qsort should return void; srand takes unsigned arg
- (required under USG, doesn't matter for others).
-
- * Added complex.h, to include Complex.h & typedef Complex complex;
- similarly with strclass.h
-
- * builtin.h: Added min & max inlines; added min.h, max.h,
- minmax.h, and abs.h to just include builtin.h
-
- * values.h: defined HIBITS, HIBITL
-
- * CursesW.h, curses.h: sequent patches from jw@sics.se
-
- * streambuf.h: sputback renamed sputbackc for AT&T 1.2 compatibility
-
-Sat Aug 11 08:01:00 1990 Doug Lea (dl at g.oswego.edu)
-
- * MPlex.ccP: fixed off by one errors reported by bashford@scripps.edu
-
- * stdio.h: more patches from will@nirvana.westford.ccur.com
-
- * made #pragma implementation files for ctype, MIN, MAX, std,
- curses, compare, math. Changed .h files accordingly
-
-Thu Aug 9 06:19:17 1990 Doug Lea (dl at g.oswego.edu)
-
- * SmplHist.h: fixed bad #include
-
-Wed Aug 8 09:49:56 1990 Doug Lea (dl at g.oswego.edu)
-
- * Shortened all .h and .cc file names to work for SYSV,
- even ones preoviously OK because they were in own subdir.
- Necessary for #pragma interface. Yuck.
-
-Mon Aug 6 09:54:23 1990 Doug Lea (dl at g.oswego.edu)
-
- * stdio.h, math.h, etc., added masscomp support from
- will@nirvana.westford.ccur.com
-
- * twrapper, tgwrapper: killed now-unnecessary deletes
-
-Wed Jul 25 10:05:13 1990 Doug Lea (dl at g.oswego.edu)
-
- * stdio.h: new #defines for i386
-
- * DLList.ccP (ins_after). Prepend if null pix, as stated in doc.
-
- * installed malloc.c revisions
-
-Fri Jul 20 12:00:05 1990 Doug Lea (dl at g.oswego.edu)
-
- * ostream.h (put) prevent sign extension comparing against EOF
-
-Tue Jul 17 10:06:12 1990 Doug Lea (dl at g.oswego.edu)
-
- * libg++.texinfo updated
-
-Thu Jul 12 08:10:07 1990 Doug Lea (dl at g.oswego.edu)
-
- * added Maxima.h from Igor Metz <metz@iam.unibe.ch>
-
-Fri Jul 6 06:19:32 1990 Doug Lea (dl at g.oswego.edu)
-
- * etc/PlotFile3D: updates from ngo
-
- * time.h don't include /usr/include/time.h on NeXT
-
-Mon Jul 2 07:48:51 1990 Doug Lea (dl at g.oswego.edu)
-
- * installed VMS patches from Eric Youngdale
- <YOUNGDALE@v6550c.nrl.navy.mil>
-
- * filebuf.cc (underflow) only reset iobuf ptrs if successful
-
- * filebuf.cc (overflow) loop ::write's in case whole
- request can't be satisfied in one
-
-Sat Jun 23 12:18:54 1990 Doug Lea (dl at g.oswego.edu)
-
- * added bcopy.c, compiled ifdef USG, to guarantee compatibility,
- from Eric Newton. Changed corresponding std.h declarations.
-
- * std.h: added declarations for re_comp, re_exec
-
- * (.h's, .hP's) added conditional compilation of
- inlines under optimization only for all files
- with #pragma interface
-
-Thu Jun 7 08:23:10 1990 Doug Lea (dl at g.oswego.edu)
-
- * killed all g++ prefix const member functions, since they
- are no longer supported in g++.
-
- * (everywhere) added support for #pragma interface
- and #pragma implementation; undid .il files since these
- will be done via same mecahnism in g++.
-
-Fri May 25 10:39:18 1990 Doug Lea (dl at g.oswego.edu)
-
- * filebuf.cc (open) O_WRONLY added to append mode flags
-
-Sun May 6 09:27:06 1990 Doug Lea (dl at g.oswego.edu)
-
- * Complex.cc operator /(Complex&) replaced with that from
- romine, that avoids potential under & overflow.
-
- * std.h; Commented out declaration for umask, pending a better
- fix, since it is wrong for SunOS4.1
-
- * File.cc, Curses.cc: patches to work with vsscanf from bothner
-
-Tue May 1 07:45:29 1990 Doug Lea (dl at g.oswego.edu)
-
- * math.h #include <math-68881.h> belongs inside extern "C"
-
-Fri Apr 27 06:15:32 1990 Doug Lea (dl at g.oswego.edu)
-
- * String.cc (ncopy0): null terminate even if same source
-
-Thu Apr 19 07:29:24 1990 Doug Lea (dl at g.oswego.edu)
-
- * Map.ccP (Map::error): error message reads "Map", not "Set"
-
-Tue Apr 17 10:32:25 1990 Doug Lea (dl at g.oswego.edu)
-
- * Stack, Queue, Set, Bag, Map .hP : added virtual destructors
-
-Fri Apr 6 07:05:31 1990 Doug Lea (dl at g.oswego.edu)
-
- * List.hP (pop) patch from dsouza
-
-Wed Apr 4 12:21:29 1990 Doug Lea (dl at g.oswego.edu)
-
- * Makefiles: use make var AR, not just ar
-
- * streambuf.cc (setbuf) delete old base if one was allocated
-
-Tue Apr 3 08:07:45 1990 Doug Lea (dl at g.oswego.edu)
-
- * time.h, std.h: changes for convex from schmidt
-
- * installed new malloc.c, with valloc & memalign added.
-
-Thu Mar 29 08:28:16 1990 Doug Lea (dl at g.oswego.edu)
-
- * stddef.h : added offsetof macro.
-
-Tue Mar 20 11:24:41 1990 Doug Lea (dl at g.oswego.edu)
-
- * Sample.cc: Confidence intervals now call t with degrees of freedom,
- (n-1), not n.
-
-Sat Mar 17 10:17:02 1990 Doug Lea (dl at g.oswego.edu)
-
- * All genclass-able files moved to g++-include/gen.
- genclass.sh script file changed accordingly.
-
- * (Everywhere) All X.h file inlines moved to il/X.il,
- and only inlcuded when optimizing. Backup libg++.a
- versions now generated via src/Xi.cc files.
- Exceptions: ctype.h, and std.h (for SysV->Bsd conv (like bcopy))
-
- * Regex.h now a separate file from String.h
-
-Mon Mar 12 06:53:57 1990 Doug Lea (dl at g.oswego.edu)
-
- * RPlex.cc:<T>RPlex:: <T>RPlex(int l, int chunksize). Fixed
- incorrect biasing of initial chunk indices.
-
-Sun Mar 11 05:40:29 1990 Doug Lea (dl at g.oswego.edu)
-
- * timer.cc: ifdef USG -> if defined(USG) || defined(tek4300)
-
-Wed Feb 28 05:27:15 1990 Doug Lea (dl at g.oswego.edu)
-
- * gperf: patches from schmidt
-
- * Makefiles: removed dependencies on /usr/include files
-
-Tue Feb 27 05:21:22 1990 Doug Lea (dl at g.oswego.edu)
-
- * Installed c++-mode.el update from detlefs
-
-Mon Feb 26 08:03:32 1990 Doug Lea (dl at g.oswego.edu)
-
- * Incremental.h now includes a default destructor to avoid linking
- problems. Thanks to eirik@elf.TN.Cornell.EDU.
-
- * all `error' routines now have const char*, not char* args.
-
- * Plex classes revamped to support const Plexes. Also,
- removed `changes', `changed', since they aren't necessary anymore
-
-Sat Feb 24 05:56:13 1990 Doug Lea (dl at g.oswego.edu)
-
- * File.h verbose_error_handler, et al now have const char*, not
- char* args
-
- * Installed EH2.cc in src
-
-Mon Feb 19 08:34:51 1990 Doug Lea (dl at g.oswego.edu)
-
- * installed Ngo's PlotFile3D in libg++/etc
-
-Sat Feb 17 05:28:25 1990 Doug Lea (dl at g.oswego.edu)
-
- * installed Schmidt's gperf, trie-gen, and Patricia revisions
-
- * String.cc pos <= 0 should be pos < 0
-
-Tue Feb 13 08:21:11 1990 Doug Lea (dl at g.oswego.edu)
-
- * Itolong (Integer.cc) patch from salzman@rand.org
-
-Mon Feb 12 08:21:07 1990 Doug Lea (dl at g.oswego.edu)
-
- * allowed separate inclusion of ostream.h, istream.h and/or stream.h
-
-Thu Feb 8 07:02:49 1990 Doug Lea (dl at g.oswego.edu)
-
- * PlotFile: patches from ngo for Convex byte-ordering.
-
-Tue Feb 6 06:29:11 1990 Doug Lea (dl at g.oswego.edu)
-
- * Vec.ccP: sort() killed goto, replaced with nested if's,
- since g++ complains about binding contours.
-
-Sat Feb 3 08:30:06 1990 Doug Lea (dl at g.oswego.edu)
-
- * Getopt.h: opterr is public, not private
-
- * builtin.cc, Random.cc, streambuf.cc broken into little pieces
-
- * std.h getpgrp, setpgrp now have (...) signatures, since
- some versions on some systems have arguments.
-
- * put in malloc revision
-
- * prepend-header: globbing changes via ngo's patches
-
- * Plex: fixed declaration mismatches for fill
-
-Tue Jan 30 10:22:35 1990 Doug Lea (dl at g.oswego.edu)
-
- * kmp.cc: modified to use libg++ GetOpt, not libc getopt
-
-Wed Jan 24 05:47:53 1990 Doug Lea (dl at g.oswego.edu)
-
- * broke out struct xyzzy from builtin.cc into its own file in /src
-
-Sun Jan 21 09:44:10 1990 Doug Lea (dl at g.oswego.edu)
-
- * sys/types.h: protect wchar_t and ptrdiff_t from /usr/include version
-
- * stddef.h: wchar_t now defaults as unsigned short
-
-Sat Jan 20 08:51:01 1990 Doug Lea (dl at g.oswego.edu)
-
- * sys/file.h KERNEL now defined only if ultrix.
- Also a typo: file_f should be file_h
-
-Fri Jan 19 05:18:03 1990 Doug Lea (dl at g.oswego.edu)
-
- * malloc.c: added #ifndef NO_NEW_HANDLER, so malloc.c
- compilable in C environments with no new handlers, and
- other #ifdefs to make it C++-compilable as well.
-
-Tue Jan 16 04:54:27 1990 Doug Lea (dl at g.oswego.edu)
-
- * libg++-1.36.3 released.
-
- * etc/benchmarks: enabled various options, now that
- g++ works with them.
-
- * values.h vax MAX/MINFLOAT changed to be same as expected by gcc.
-
- * streambuf.cc: Filebuf::overflow(): Fp->eof() is not an
- error condition.
-
- * std.h, stdio.h: more extern C fns declared as
- returning int, not void when not specified as void by ANSI
- or C man pages.
-
-Sat Jan 13 13:41:29 1990 Doug Lea (dl at g.oswego.edu)
-
- * stdio.h: puts returns int
-
-Fri Jan 12 05:49:09 1990 Doug Lea (dl at g.oswego.edu)
-
- * etc/lf/Dirent.h closedir returns void on some system, so
- Dirent versions do too.
-
-Wed Jan 10 10:01:15 1990 Doug Lea (dl at g.oswego.edu)
-
- * Rational.h: 175 typo
-
-Mon Jan 8 09:43:14 1990 Doug Lea (dl at g.oswego.edu)
-
- * file.h: more protection against getting bad fn declarations
- from /usr/include
-
- * builtin.cc: removed dependency on float.h
-
- * String.h Join, replicate need to be friends
-
-Sat Jan 6 08:48:18 1990 Doug Lea (dl at g.oswego.edu)
-
- * from rfg: minor DGUX accomodations in std.h, stdio.h,
- math.h
-
-Fri Jan 5 06:41:02 1990 Doug Lea (dl at g.oswego.edu)
-
- * from Widen: added warning about tCurses needing linefeeds
- on broken libcurses, fixed misc typos, added cfree() to malloc.c
-
- * math.h -- added inline defs of isnan and isinf for sequents
-
-Wed Jan 3 08:29:43 1990 Doug Lea (dl at g.oswego.edu)
-
- * builtin.cc: Deleted global _libgxx_io_oblast: no longer needed
- killed extern decls of it elsewhere.
-
- * Strings, Integers: finished/cleaned up previous changes
-
-Tue Jan 2 10:43:29 1990 Doug Lea (dl at g.oswego.edu)
-
- * Integer.cc: isolated copy and clear calls to allocation fns
-
- * Strings: Removed StrTmp class, added double concatenation
-
-Mon Dec 11 08:31:48 1989 Doug Lea (dl at g.oswego.edu)
-
- * AVLSet.cc op &= plugged little memory leak: when u is exhausted,
- but t isn't, delete rest of t.
-
- * AVLMap: _delete: cont field wasn't copied in a case it should
- have been
-
- * merged tSet2 back into tSet and tBag2 back into tBag
-
- * BitSet.cc (BitSetCompl) ensure all 1's in s[0] when
- complementing empty set
-
- * builtin.cc (return_elapsd_time, set_timer) No longer #ifdef'ed
- for machines -- new .h organization should work for all.
-
- * builtin.cc (lg) redeclared as unsigned->long
-
- * DGUX patches from rfg installed
-
-Tue Dec 5 11:58:51 1989 Doug Lea (dl at g.oswego.edu)
-
- * BitSet, Integer, Rational: added constness, removed Tmp
- classes, and used named return values
-
-Sat Dec 2 06:21:12 1989 Doug Lea (dl at g.oswego.edu)
-
- * builtin.cc (dtoa) #if _IEEE != 0 handle isnan, isinf
-
- * builtin.cc (itoa) force unsigned division in case
- num == MININT
-
-Fri Dec 1 10:08:21 1989 Doug Lea (dl at g.oswego.edu)
-
- * istream::operator>> clear eof if at eof but got something valid
-
- * String::match and Regex::match return -1 on failure, since
- 0 could be a legal value
-
- * gnulib3.c: Commented out ON_EXIT stuff. On Suns, for some
- reason, on_exit routines don't link into libraries right.
-
- * std.h: fixed getopt proto
-
- * stat.h : added fn protos
-
- * installed Schmidt's reorganization of etc
-
- * math-68881.h fix paren error noted on bug-gcc list
-
- * CursesWindow(WINDOW*) initialize sib
-
- * Renamed AllocQueue to AllocRing
-
- * test.hello.cc #ifdefs for MIPSEL
-
- * Plex::del_chunk() delete the chunk, not just the chunk's data
-
-Sat Nov 25 12:50:06 1989 Doug Lea (dl at g.oswego.edu)
-
- * VStack, VQueue: add operator =()
-
- * Obstack::Obstack don't allocate on constructor, just on
- first use
-
- * String::_gsub: don't build new rep if no matches
-
- * builtin.h: added more versions of abs
-
- * installed new malloc, and new.{h, cc}
-
-
-Thu Nov 23 06:20:17 1989 Doug Lea (dl at g.oswego.edu)
-
- * added Schmidt's g++dep to etc
-
- * math.h: additions for anint(), etc., HP HAVE_FPU
-
-Wed Nov 22 14:48:24 1989 Doug Lea (dl at g.oswego.edu)
-
- * Added Schmidt's trie-gen to libg++/etc
-
-Tue Nov 21 08:50:47 1989 Doug Lea (dl at g.oswego.edu)
-
- * streambuf: eptr is now the pointer to the last valid
- char in buffer, not the fence pointer, for AT&T compatibilty
-
- * stream, streambuf : Added line buffered put's as default
- must #define NO_LINE_BUFFER_STREAMBUF to override
-
-Mon Nov 20 09:52:47 1989 Doug Lea (dl at g.oswego.edu)
-
- * Plex: finish previous change: add_low, add_high don't introduce
- straggling chunks
-
- * new.h: typo, plus add default placement version of new()
-
- * PlotFile, BitString, Fix16 .h's: more cfrontisms
-
-Sun Nov 19 07:38:36 1989 Doug Lea (dl at g.oswego.edu)
-
- * removed File::operator FILE*() because it can lead
- to ambiguities.
-
- * incorporated cfront-dependent #ifdefs, etc. from Schmidt
-
- * Fix24: integrated patches from wang
-
-Sat Nov 18 07:17:04 1989 Doug Lea (dl at g.oswego.edu)
-
- * XPlex, RPlex, MPlex (del_low, del_high) old straggling
- empty chunks weren't being deleted. fixed.
-
-Thu Nov 16 05:56:43 1989 Doug Lea (dl at g.oswego.edu)
-
- * resource.h: added getrlimit, setrlimit
-
-Wed Nov 15 05:54:46 1989 Doug Lea (dl at g.oswego.edu)
-
- * String.h: typo const& Regex => const Regex&
-
-Fri Nov 10 06:45:55 1989 Doug Lea (dl at g.oswego.edu)
-
- * Makefile: force submakes in non-gnumake fashion
-
-Thu Nov 9 09:32:21 1989 Doug Lea (dl at g.oswego.edu)
-
- * Curses.cc, curses.h, ctype.h: patches based on darrlyo's stuff.
-
- * Fix.cc : *Correctly* installed ++i patch!
-
-Wed Nov 8 06:19:39 1989 Doug Lea (dl at g.oswego.edu)
-
- * stdio.h now is now sub-included in other .h's needing USG-based
- info.
-
- * new etc/c++-mode.el from detlefs
-
- * etc/Makefile: -DETAGS for etags.c
-
- * more HPUX patches from darrylo and mike fion
-
-Tue Nov 7 07:23:25 1989 Doug Lea (dl at g.oswego.edu)
-
- * Fix.{h, cc}: cleanup in search of memory leaks
-
- * Added -DNO_GNULIB3 option in top-level Makefile
-
-Mon Nov 6 05:53:42 1989 Doug Lea (dl at g.oswego.edu)
-
- * std.h, stdio.h, ctype.h.... HPUX and DGUX patches from
- cole & darrylo
-
- * tests/Makefile tCurses taken out of checktests
-
- * Bitset.cc: fixed underallocation in BitSettoa according to
- patch from darrylo@hpsrdmo.hp.com
-
-Sun Nov 5 06:45:26 1989 Doug Lea (dl at g.oswego.edu)
-
- * gnulib3, Incremental.h, test.hello.cc: patched
- via Eirik Fuller's incremental loading fixes
-
-Fri Nov 3 11:22:39 1989 Doug Lea (dl at g.oswego.edu)
-
- * 1.36.0 released, after misc cleanup
-
-Tue Oct 31 09:44:32 1989 Doug Lea (dl at g.oswego.edu)
-
- * added Rich Murphey's graph program to libg++/etc
-
-Mon Oct 30 10:13:07 1989 Doug Lea (dl at g.oswego.edu)
-
- * sys/file.h: include types.h & maybe fcntl.h Some folks need them
-
- * std.h: index, bcopy, etc. now inline, not macro if USG
-
- * streambuf.h: sputback returns success;
- stream.h istream::putback/unget: set(_fail) if bad
-
-Tue Oct 24 16:53:05 1989 Doug Lea (dl at g.oswego.edu)
-
- * stddef.h -- now really defines size_t. OK via new sys/types.h
- fake-out.
-
- * time.h -- now includes //usr/include/time.h too
-
-Sun Oct 22 07:58:36 1989 Doug Lea (dl at g.oswego.edu)
-
- * String.h, cc: reworked to allow proper operation for consts
- (some new stuff #ifdef'ed out because of g++ problems)
-
-Sat Oct 21 15:29:55 1989 Doug Lea (dl at g.oswego.edu)
-
- * Fix.cc: (new_Fix) cure for d < 0 problem from eirik fuller
-
- * builtin.cc: added dtoa
-
- * AllocQueue.h,cc: added it & use elsewhere for building
- formatting & ascii conversions
-
-Wed Oct 18 05:37:11 1989 Doug Lea (dl at g.oswego.edu)
-
- * Fix16.cc, Fix24.cc: Fixed operator / per wang's suggestions
-
-Tue Oct 17 06:47:25 1989 Doug Lea (dl at g.oswego.edu)
-
- * stream.cc, Integer.cc: istream op >>, fixed to not read
- after EOF when decoding numbers
-
-Mon Oct 16 15:33:11 1989 Doug Lea (dl at g.oswego.edu)
-
- * added ostream << long long, and itoa's to handle
-
- * values.h, stdio.h, Fix.cc, File.cc: things for convex from
- convex!csmith@uxc.cso.uiuc.edu
-
-Sat Oct 14 07:19:30 1989 Doug Lea (dl at g.oswego.edu)
-
- * time.h: typedef'ed timezone to c_proto_timezone if not USG
-
-Wed Oct 11 09:42:39 1989 Doug Lea (dl at g.oswego.edu)
-
- * Makefiles: fixed various typos
-
- * misc: cleaned up enum clashes reported with -Wenum-clash
-
- * stream.cc Added #ifdefs to use filebufs for standard streams
- if Filebufs give people trouble.
-
-Tue Oct 3 07:02:56 1989 Doug Lea (dl at g.oswego.edu)
-
- * setjmp.h: now #includes host /usr/include/setjmp.h
-
-Mon Oct 2 16:00:59 1989 Doug Lea (dl at g.oswego.edu)
-
- * commented out gcc constness in revised Complex.h since
- it's still officially illegal to declare fns with refs(ptrs)
- as const
-
- * incorporated new gperf from schmidt
-
- * added dhrystone benchmark to etc
-
-Sat Sep 30 09:02:07 1989 Doug Lea (dl at g.oswego.edu)
-
- * Complex.h: revamped to use const, etc.
-
-Fri Sep 29 06:58:56 1989 Doug Lea (dl at g.oswego.edu)
-
- * added src/EH.cc from tiemann
-
- * SLList.hP now #include's the <T>.defs file
-
- * CHSet, CHBag, CHMap, VHSet, VHBag, VHMap -- changed ints
- to unsigned ints to ensure unsigned operations throughout.
-
-Mon Sep 25 07:32:11 1989 Doug Lea (dl at g.oswego.edu)
-
- * added new.h
-
-Sun Sep 24 05:31:50 1989 Doug Lea (dl at g.oswego.edu)
-
- * tgwrapper.cc: added init_nil to avoid crashes on exit.
-
- * other miscellaneous cleanup (fixed enum/int clashes, etc.) to
- adapt to latest g++-1.36.0-
-
- * bool enum now in bool.h
-
-Thu Sep 14 06:18:46 1989 Doug Lea (dl at g.oswego.edu)
-
- * sys/socket.h: select must have void* args, since different
- systems use int* or fd_set*
-
-Wed Sep 13 11:38:19 1989 Doug Lea (dl at g.oswego.edu)
-
- * builtin.cc: added unsigned versions of itoa, hex, dec, oct
-
-Tue Sep 12 09:28:01 1989 Doug Lea (dl at g.oswego.edu)
-
- * more misc. cleanup to avoid warnings: removed redundant
- type information from declarations of all coercion operators.
-
-Sat Sep 9 06:25:03 1989 Doug Lea (dl at g.oswego.edu)
-
- * (everywhere) miscellaneous aesthetic cleanup to minimize g++
- warning messages.
-
- * (lots of files) used 'virtual fn() = 0' for pure virtual
- functions, removing old `error(unimplemented...)' constructs.
- allowed deletion of Stack.ccP, Queue.ccP, Deque.ccP files
- which did only this.
-
- * took all defines out of libconfig.h, and killed it
- HAVE_VPRINTF, etc -> stdio.h
- CHAR_PER_LONG, etc -> Integer.cc
- SHOULD_FREE_TO_REALLOC -> (no longer needed, killed)
- USG -> people should run g++ with -DUSG now
-
-Fri Sep 8 06:48:58 1989 Doug Lea (dl at g.oswego.edu)
-
- * added Clark's version of etags that handles c++, to etc/
-
- * moved special sparc alloca decl from libconfig.h to std.h
-
- * std.h, math.h, ... killed `overload' declarations
-
- * etc/getopt* => src/GetOpt.cc, g++-include/GetOpt.h, with
- various corresponding changes
-
-Wed Sep 6 09:15:50 1989 Doug Lea (dl at g.oswego.edu)
-
- * math.h renamed `struct exception' to `libm_exception'
-
- * regex.c converted to use prototypes, etc. from schmidt
-
-Tue Sep 5 06:43:37 1989 Doug Lea (dl at g.oswego.edu)
-
- * new c++-mode.el from detlefs
-
- * added sys/param.h, which #undefs common macros, but keeps
- needed constants
-
- * Integer.h: rearranged ordering of some inlines to please g++
-
- * Fix.h: need new constructor Fix(int, _Frep*) to please g++
-
- * added __xyzzy hack from tiemann to builtin.cc
-
- * added gnulib3 from tiemann
-
-Thu Aug 31 07:36:42 1989 Doug Lea (dl at g.oswego.edu)
-
- * more USG stuff from Klossner (stdio.h, libconfig.h,
- values.h, ctype.h)
-
-Sun Aug 27 08:30:15 1989 Doug Lea (dl at g.oswego.edu)
-
- * genclass: changed to take output filename prefix argument
- to avoid long file names on SYSV; tests files change accordingly
-
- * installed gperf update from schmidt
-
- * tests: added runtests, checktests to Makefile. Some tests
- modified to suit.
-
-Sat Aug 26 09:00:14 1989 Doug Lea (dl at g.oswego.edu)
-
- * Plex, PHPQ files: deleted const qualifiers for some params
- as temporary measure until all containers revised to use
- const qualifiers as needed.
-
- * curses.h macros converted into inlines
-
- * added RankedAVLMap, based on code from paul%lfcs.ed.ac.uk
-
- * moved non-ANSI stuff (TRUE, etc., ) from stddef.h to builtin.h
-
- * added more USG stuff sent from rfg, grandi, cole, to standard headers
-
- * std.h: added #ifdef USG section for USG->BSD conversions
-
- * Makefiles: made more things adjustable, better USG support
-
- * PHPQ.ccP: (preallocate) added missing size argument to vector delete
-
-Fri Aug 25 12:25:12 1989 Doug Lea (dl at g.oswego.edu)
-
- * streambuf.cc: dumb error in filebuf::overflow
-
-Thu Aug 24 11:46:16 1989 Doug Lea (dl at g.oswego.edu)
-
- * libconfig.h, values.h: #defines for sony from jkp
-
-Wed Aug 23 06:54:43 1989 Doug Lea (dl at g.oswego.edu)
-
- * Fix16.h, Fix32.h: declared op* as friends correctly
-
- * String.h: declared StrTmp op + as friends of String
-
-Mon Aug 21 07:02:53 1989 Doug Lea (dl at g.oswego.edu)
-
- * Poisson.h, Lognormal.h: add missing `public'
-
- * assert.h: abort() declared volatile
-
- * Vec.ccP: made gsort static
-
- * std.h: added rewind & bsearch
-
- * Makefiles: deleted -fchar-charconst
-
-Thu Aug 10 07:31:37 1989 Doug Lea (dl at g.oswego.edu)
-
- * builtin.{h, cc}: added str(const char*, int width = 0)
-
- * streambuf.cc: init_streambuf_ptrs: postpone action if fp->_cnt 0
- (apparently needed for some USG systems)
-
- * stream.cc: get, getline: match AT&T 1.2 _fail conditions
-
-Sun Aug 6 07:16:19 1989 Doug Lea (dl at g.oswego.edu)
-
- * stream.cc, File.cc get(char[], int, char) read too many chars
-
-Thu Jul 20 09:42:44 1989 Doug Lea (dl at g.oswego.edu)
-
- * adapted more C-compatibility .h files from Interviews
-
-Wed Jul 19 09:23:27 1989 Doug Lea (dl at g.oswego.edu)
-
- * installed more C-compatibilty files: pwd.h, grp.h time.h
-
-Mon Jul 17 07:37:35 1989 Doug Lea (dl at g.oswego.edu)
-
- * installed Interviews/et++ compatible (I hope) signal.h
-
- * installed new version of gperf from schmidt
-
- * std.h: declared abort() and exit() as volatile
-
- * builtin.cc: typo in gcd
-
- * math.h: added overload decl for atan, etc
-
- * VHMap.cc: removed assumption that operator = returns value.
-
- * Makefiles: default dir is /usr/gnu/... not /usr/local
-
- * setjmp.h: fixed constants for sun to match those in
- sun /usr/include files, added ns32000
-
- * BSTSet.ccP added new linear-time rebalancing algorithm
-
- * builtin.cc: SYSV versions of timing stuff from ron cole
-
- * File.{h,cc} fixed File::tell, added O_CREAT to exclusive
- access open, added fill(), flush(char).
-
- * incorporated new streams: stream.{h,cc}, streambuf.{h, cc},
- libg++.texinfo
-
-
-Sat May 20 07:42:11 1989 Doug Lea (dl at rocky.oswego.edu)
-
- * math.h,math-68881.h: incorporated Fyfe's fixes to extern "C" problems
-
-Tue May 16 05:52:33 1989 Doug Lea (dl at rocky.oswego.edu)
-
- * RNG.cc ifdef _IEEE_ fixed to if _IEEE == 1
-
- * Installed Staelin's prototype Makefile updates
-
-Mon May 15 06:25:12 1989 Doug Lea (dl at rocky.oswego.edu)
-
- * BitString.h: g++ optimizer bug workaround in left_trim
-
- * math-68881.h - fgetman (not fgetmant) fix from widen
-
-Sat May 13 11:00:35 1989 Doug Lea (dl at rocky.oswego.edu)
-
- * changes from tiemann for constructs of form X::f()
- changed to this->X::f(), necessary now that static members
- are implemented. [postscript: no, it wasn't necessary]
-
- * libg++.texinfo: misc documentation updates
-
-Fri May 12 05:06:06 1989 Doug Lea (dl at rocky.oswego.edu)
-
- * (lots of places) added friends and other minor changes
- to adapt to new ``correct'' (but losing) g++ interpretation
- of `protected:'
-
- * re-inserted `overload' in .h files -- tiemann
- says that gdb needs these for now
-
- * stream.cc: eatwhite was inline by mistake. fixed.
-
-Thu May 11 07:31:06 1989 Doug Lea (dl at rocky.oswego.edu)
-
- * List.ccP: initializer class for Nil, since can't always use
- { ... } initializer. Also made `head' a synonym for `get',
- per request.
-
- * installed changes to etc files from schmidt
-
- * String.cc Scopy: return &NilSrep, not 0 for null
-
- * added math-68881.h to g++-include (from grunwald)
-
-Sun May 7 08:38:10 1989 Doug Lea (dl at rocky.oswego.edu)
-
- * catch-up day!:
- converted header files to use extern "C" and #pragma once
- killed `overload' declarations everywhere
- renamed test files
- added the beginnings of SYSV (USG) support
- included some useful stuff for Suns in top Makefile (from Guilmette)
- cleaned up other Makefiles
- added File::gets (from Schmidt)
- moved gperf from etc to a top level subdir
- added the useless char* chr(ch) to builtin.h
- genclass puts dots in file names to use Staelins GNU Makefile stuff
- (also added his `prepend-header' utility)
- added Schmidt's getopt stuff into etc.
- New versions of fixpoint classes from Baudendistel
- (needed to change set_overflow_handler to
- set_{FixXX}_overflow_handler
- for each FixXX, since overloads clash on typedef'ed fn types)
- Adapted Schmidt's new quicksort for Vec class
-
-Fri Apr 28 16:26:17 1989 Doug Lea (dl at rocky.oswego.edu)
-
- * ACG.cc: fixed ~ACG per grunwald
-
-Thu Apr 20 05:22:46 1989 Doug Lea (dl at rocky.oswego.edu)
-
- * List.hP: first for nil list now returns null Pix
-
- * Integer.cc: rshift fixed problem with 0 shifts
-
-Mon Apr 10 05:17:04 1989 Doug Lea (dl at rocky.oswego.edu)
-
- * stream.h, PlotFile.h added explicit `private' for subclasses
-
-Sat Mar 18 06:08:30 1989 Doug Lea (dl at rocky.oswego.edu)
-
- * String.[h,cc]: added Regex::match_info
-
-Fri Mar 17 14:37:12 1989 Doug Lea (dl at rocky.oswego.edu)
-
- * stream.h: istream >> char now eats whitespace.
-
- * builtin.h: overloaded `even', `odd'
-
-Thu Mar 9 06:43:43 1989 Doug Lea (dl at rocky.oswego.edu)
-
- * Map.ccP: typo in Map::contents <T> => <C>
-
- * stdio.h : inserted coercion in putc macro to avoid incorrect
- sign extension.
-
-Tue Mar 7 05:35:52 1989 Doug Lea (dl at rocky.oswego.edu)
-
- * List.hP: List::push no longer incorrectly calls dereference
-
- * Inserted patches to etc stuff from Doug Schmidt
-
-Sun Mar 5 07:57:01 1989 Doug Lea (dl at rocky.oswego.edu)
-
- * stream.h: added File::check_state to public functions
-
- * BitSet.cc: longtoBitSet: Fixed typo
-
-Sat Mar 4 10:06:24 1989 Doug Lea (dl at rocky.oswego.edu)
-
- * installed CursesWindow files
-
- * miscellaneous corrections to test files in light of
- g++-1.34 changes
-
-Fri Mar 3 06:07:37 1989 Doug Lea (dl at rocky.oswego.edu)
-
- * incorporated new version of Doug Schmidt's gperf
-
- * BitString.cc: fixed reverse searching
-
-Sun Feb 26 05:44:28 1989 Doug Lea (dl at rocky.oswego.edu)
-
- * assert : killed old assert.cc, adapted gcc assert.h
-
-Sat Feb 25 09:23:35 1989 Doug Lea (dl at rocky.oswego.edu)
-
- * tests, libg++.texinfo: miscellaneous updates
-
- * stddef.h NULL is now just `0', not (void*)0
-
- * Makefile: added `prefix' as in g++ Makefile
-
- * put a new c++-mode.el from david detlefs in etc
-
- * BitString.[h,cc] BitSet[h,cc] now use unsigned short arrays instead
- of unsigned longs to avoid long i; i >> 32, which does not
- work on Sun4s and probably other machines. Simplified
- a few shift & mask constructs accordingly.
-
- * values.h, libconfig.h: support for sequent from
- Johan Widen <mcvax!sics.se!jw@uunet.UU.NET>
-
- * Fix.h: repaired type mismatches
-
- * String.[cc,h] gsub now returns number of matches
-
- * String.cc gsub(Regex...): repaired using patches
- from kadmon!jason@mtxinu.com
-
- * stream.h scan didn't return *this if fail -- fixed.
-
- * File.cc get(char*...): get of an empty line not a _fail condition
-
- * RNG.[h,cc] installed new code from grunwald
-
-
-Tue Feb 7 05:53:23 1989 Doug Lea (dl at rocky.oswego.edu)
-
- * Integer.h,cc Added optional base to atoI via code from per bothner
-
- * String.h,cc Added `freq' method in String to count occurrences
- using code from john willis
-
-Mon Feb 6 07:25:06 1989 Doug Lea (dl at rocky.oswego.edu)
-
- * BitSet.cc:op <=, < now work if first arg shorter than second;
- clear() fixed.
- * stream.h, stream.cc: made ostream<<(char*) non-inline
-
-Sun Feb 5 05:31:36 1989 Doug Lea (dl at rocky.oswego.edu)
-
- * test19.cc: typo c.empty fixed to c.empty()
-
-Tue Jan 31 05:51:36 1989 Doug Lea (dl at rocky.oswego.edu)
-
- * String.h: contains(Regex) return fact that search returns >= 0,
- not just raw result.
-
- * Fix.h: correct protection problem in op*
-
- * replace regex.c with emacs 18.52 version
-
-Fri Jan 27 06:29:20 1989 Doug Lea (dl at rocky.oswego.edu)
-
- * AVLSet.ccP, AVLMap.ccP - check to see if root
- is null before trying to delete elements
-
- * libg++/Makefile - change install of libg++ to cd to src
-
-Sat Jan 14 06:03:33 1989 Doug Lea (dl at rocky.oswego.edu)
-
- * fixed info node pointers in libg++.texinfo
-
-Wed Jan 11 06:20:37 1989 Doug Lea (dl at rocky.oswego.edu)
-
- * libg++-1.32.0 released
- * Starting to use ChangeLog as of today
-
-
-Local Variables:
-version-control: never
-End:
diff --git a/contrib/libg++/libg++/Makefile.in b/contrib/libg++/libg++/Makefile.in
deleted file mode 100644
index 4f6d7e0cefd9..000000000000
--- a/contrib/libg++/libg++/Makefile.in
+++ /dev/null
@@ -1,263 +0,0 @@
-# Makefile for GNU C++ class library (libg++)
-# Copyright (C) 1989, 1992, 1993 Free Software Foundation, Inc.
-# written by Doug Lea (dl@rocky.oswego.edu)
-
-#This file is part of GNU libg++.
-
-#GNU libg++ is free software; you can redistribute it and/or modify
-#it under the terms of the GNU General Public License as published by
-#the Free Software Foundation; either version 1, or (at your option)
-#any later version.
-
-#GNU libg++ is distributed in the hope that it will be useful,
-#but WITHOUT ANY WARRANTY; without even the implied warranty of
-#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-#GNU General Public License for more details.
-
-#You should have received a copy of the GNU General Public License
-#along with GNU libg++; see the file COPYING. If not, write to the Free
-#Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-srcdir = .
-
-# We specify exactly what we want to pass down; don't let GNU make
-# 3.63 overload the command line.
-MAKEOVERRIDES=
-
-###**######################################################################
-#
-# Directories, paths, compilation flags and program names.
-#
-# If a macro needs to have a different value, then change it in the
-# site/architecture specific makefile in the directory config !
-#
-# This file contains the documentation for the macros and possible values.
-# Don't remove them even, if they are only comments !
-
-VERSION = 2.7.2
-LIBG++_DIST_VERSION = $(VERSION)
-
-# ------- System-dependent defines
-
-# g++ so specific flags
-OSFLAG=
-
-# ld or ld++ os specific libraries
-#OSLIBS =
-
-# Comment out the next line to disable incremental linking test
-# (this test NOT included in 1.39.0, so don't re-enable) ??? H.S.
-#TEST0=test0
-#TEST0=
-
-# targets for test-install
-TEST_INSTALL = test-90S-then-clean # test-90D-then-clean
-VERIFY_GXX_INSTALLATION = foo_main # dfoo_main
-
-
-# You can override gperf to not build it at all
-GPERF = gperf
-NON_IO_SUBDIRS = genclass src $(GPERF) utils tests etc test-install
-SUBDIRS = $(NON_IO_SUBDIRS)
-ALL_SUBDIRS = $(NON_IO_SUBDIRS) old-stream no-stream
-
-UTILS = # utils
-
-# C++ compiler to use when testing that installation has succeeded.
-INSTALLED_CXX=$(bindir)/gcc
-
-ARLIB = libg++.a
-SHLIB = libg++.so.$(VERSION)
-SHARLIB = libg++-sh.a
-SHLINK = libg++.so
-MSHLINK = foo
-SHFLAGS =
-SHDEPS = -L../libstdc++ -lstdc++ -lm
-
-BUILD_LIBS = $(ARLIB)
-
-RX_OBJ = ../librx/rx.o
-
-#### package, host, target, and site dependent Makefile fragments come in here.
-##
-
-tooldir = $(exec_prefix)/$(target)
-INSTALLDIR = $(libdir)
-
-###**######################################################################
-#
-# compilation actions
-
-.PHONY: rest-in-parallel
-rest-in-parallel: .stmp-genclass .stmp-tests .stmp-etc .stmp-gperf .stmp-utils
-
-libs: $(BUILD_LIBS)
-
-# FIXME: Need to multilib librx.
-list: src/libgxx.list $(RX_OBJ)
- -rm -f tlist
- touch tlist
- for f in `cat src/libgxx.list`; do \
- echo "src/$$f" >> tlist ; \
- done
- echo "$(RX_OBJ)" >> tlist
- mv tlist list
-
-piclist: list
- -rm -f piclist
- if [ -z "$(PICFLAG)" ]; then \
- cp list piclist; \
- else \
- sed 's,\([0-9A-Za-z_]*\.o\),pic/\1,g' list > piclist ; \
- fi
-
-$(ARLIB): list
- -rm -f t$(ARLIB)
- $(AR) $(AR_FLAGS) t$(ARLIB) `cat list`
- mv t$(ARLIB) $(ARLIB)
- $(RANLIB) $(ARLIB)
-
-$(SHLIB): piclist ../libstdc++/piclist
- $(CXX) $(SHFLAGS) -shared -o $(SHLIB) `cat piclist` $(SHDEPS)
-
-$(SHARLIB): $(SHLIB)
- -rm -f t$(SHARLIB)
- $(AR) $(AR_FLAGS) t$(SHARLIB) $(SHLIB)
- mv t$(SHARLIB) $(SHARLIB)
- $(RANLIB) $(SHARLIB)
-
-$(SHLINK):
- ln -s -f $(SHLIB) $(SHLINK)
-
-$(MSHLINK):
- ln -s -f $(SHLIB) $(MSHLINK)
-
-src/libgxx.list: force
- @rootme=`pwd`/ ; export rootme ; cd src ; \
- $(MAKE) $(FLAGS_TO_PASS) libgxx.list
-
-../librx/rx.o: $(srcdir)/../librx/rx.c
- rootme=`pwd`/ ; export rootme ; cd ../librx; \
- $(MAKE) $(FLAGS_TO_PASS) rx.o
-
-.PHONY: installcheck
-installcheck: check
-
-.stmp-genclass: $(BUILD_LIBS)
- @rootme=`pwd`/ ; export rootme ; cd genclass ; \
- $(MAKE) $(FLAGS_TO_PASS) "gxx_includedir=$(gxx_includedir)"
- touch $@
-
-.stmp-tests: $(BUILD_LIBS)
- @if [ -f tests/Makefile ]; then \
- rootme=`pwd`/ ; export rootme ; cd tests ; \
- $(MAKE) $(FLAGS_TO_PASS); \
- else true; fi
- touch $@
-
-.stmp-etc: $(BUILD_LIBS)
- @rootme=`pwd`/ ; export rootme ; cd etc ; \
- $(MAKE) $(FLAGS_TO_PASS)
- touch $@
-
-.stmp-gperf: $(BUILD_LIBS)
- @if [ "x$(GPERF)" != "x" ]; then \
- rootme=`pwd`/ ; export rootme ; cd $(GPERF) ; \
- $(MAKE) $(FLAGS_TO_PASS); \
- else true; fi
- touch $@
-
-.stmp-utils: $(BUILD_LIBS)
- @if [ "x$(UTILS)" != "x" ]; then \
- rootme=`pwd`/ ; export rootme ; cd $(UTILS) ; \
- $(MAKE) $(FLAGS_TO_PASS); \
- else true; fi
- touch $@
-
-#
-#
-# Installation
-#
-
-.PHONY: install
-install:
- @if [ -f $(gxx_includedir)/unistd.h ] ; then echo; \
- echo '*** You seem to have files in $(gxx_includedir)/g++-include'; \
- echo '*** left over from an old release of libg++. These must be removed.'; \
- echo '*** Please see $(srcdir)/README for more information.'; \
- echo; \
- else \
- true; \
- fi
- rootme=`pwd`/ ; export rootme ; \
- for FILE in $(BUILD_LIBS) ; do \
- rm -f $(INSTALLDIR)$(MULTISUBDIR)/$$FILE ; \
- if [ $$FILE = $(SHLINK) ] || [ $$FILE = $(MSHLINK) ]; then \
- ln -s -f $(SHLIB) $(INSTALLDIR)$(MULTISUBDIR)/$$FILE ; \
- elif [ $$FILE = $(SHLIB) ]; then \
- $(INSTALL_PROGRAM) $$FILE $(INSTALLDIR)$(MULTISUBDIR)/$$FILE ; \
- : On the HP, shared libraries must be mode 555. ;\
- chmod 555 $(INSTALLDIR)$(MULTISUBDIR)/$$FILE ; \
- else \
- $(INSTALL_DATA) $$FILE $(INSTALLDIR)$(MULTISUBDIR)/$$FILE ; \
- $(RANLIB) $(INSTALLDIR)$(MULTISUBDIR)/$$FILE ; \
- chmod a-x $(INSTALLDIR)$(MULTISUBDIR)/$$FILE ; \
- fi ; \
- done
- @for D in src genclass $(UTILS) ; do \
- if [ -d $$D ] ; then \
- (rootme=`pwd`/ ; export rootme ; cd $$D;\
- $(MAKE) $(FLAGS_TO_PASS) "gxx_includedir=$(gxx_includedir)" install) ; \
- else true ; \
- fi ; \
- done
- if [ "x$(GPERF)" != "x" ]; then \
- rootme=`pwd`/ ; export rootme ; cd gperf ;\
- $(MAKE) $(FLAGS_TO_PASS) install; \
- else true; fi
- @rootme=`pwd`/ ; export rootme ; \
- $(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=install
-
-installcheck:
- if [ "x$(TEST_INSTALL)" != "x" ]; then \
- cd test-install; $(MAKE) $(TEST_INSTALL) \
- CXX=$(INSTALLED_CXX) "CXXFLAGS=$(CXXFLAGS)" \
- COMPILE_FLAGS="" LIBS=-lg++; \
- else true; fi
-
-DIST_NAME = libg++-$(LIBG++_DIST_VERSION)
-
-$(DIST_NAME).tar.gz: dist
-
-# Making a dist:
-# cvs rtag libgxx-x-yy libg++
-# cvs co -r libgxx-x-yy libg++
-# Sanitize
-# cd {HERE}/..
-# make -f Makefile.in libg++.tar.gz
-
-diststuff: info g++FAQ.txt
-
-g++FAQ.txt: $(srcdir)/g++FAQ.texi
- $(MAKEINFO) --no-split --no-headers $< -o - \
- | sed -e '/^Concept Index/,$$d' \
- -e 's|Making info file `[---]|Making info file `g++FAQ.txt|' \
- >$@
-
-# Preprocess the texi file so that the final document will have
-# hyperlinks.
-# It would be nice if texi2html could do something like this itself.
-# Assumption 1: the FAQ puts all http: and ftp: links in a @file{...}.
-# Assumption 2: email addresses match the regexp shown.
-
-g++FAQ.html: $(srcdir)/g++FAQ.texi
- mkdir work
- sed -e 's?@file{\([fth]*p://[^}]*\)}?@strong{<A HREF="\1">\1</A>}?' \
- -e 's?\([.+a-zA-Z0-9-]*@@[.a-zA-Z0-9-]*[a-zA-Z0-9]\)?<A HREF="mailto:\1">\1</A>?' \
- $< > work/g++FAQ.texi
- cd work; texi2html g++FAQ.texi
- mv work/*.html .
- rm -r work
-
-force:
-.PHONY: $(SUBDIRS) dist force
diff --git a/contrib/libg++/libg++/NEWS b/contrib/libg++/libg++/NEWS
deleted file mode 100644
index 43983b6948df..000000000000
--- a/contrib/libg++/libg++/NEWS
+++ /dev/null
@@ -1,573 +0,0 @@
-SUMMARY OF RECENT MAJOR CHANGES to LIBG++.
-(Also check ../libio/NEWS.)
-
-*** Major changes in libg++ version 2.7.2:
-
-* The CursesW code is no longer built or supported (though the source is
- still included). This is due to portability and shared library problem.
- CursesW is now distributed with ncurses, the new curses library
- used by BSD and Linux.
-
-*** Major changes in libg++ version 2.7.1:
-
-* Include the g++ FAQ.
-
-*** Major changes in libg++ 2.7.0:
-
-* New configure scheme.
-
-*** Major changes in libg++ version 2.6.2:
-
-* A first release of the "GNU Standard C++ Library" is in the libstdc++
-directory. Building it requires gcc-2.6.1. See ./README. This library
-will contain classes and functions according to the ANSI/ISO standard.
-The copyright conditions are those of libio, not those of libg++ proper.
-[This was announced as being in 2.6.1, but got left out.]
-
-* The new libstc++ also includes a hacked-up version of the
-HP's Standard Template Library. This will eventually replace the
-container classes in libg++/src/gen. See ../libstdc++/stl/README.
-
-* Makefile support for building libg++ as a shared library.
-See README.SHLIB.
-
-*** Major changes in libg++ version 2.6.1:
-
-* The Regex class no longer uses the old GNU regex functions.
-Instead it uses the new GNU rx library (librx), written by Tom Lord.
-(The rx library is also used in new versions of GNU sed.)
-The rx library lazily constructs a deterministic finite-state
-automaton, so it seldom has to do backtracking.
-
-*** Major changes in libg++ version 2.6:
-
-* There is a new set of bit*.c and bit*.h files in the src directory.
-This is a preliminary version of language-independent library for
-general low-level manipulation of bitstrings. The BitString class
-has been (partially) re-written to use the new functions.
-(What kind of copyright to use for this library has not been
-decided yet. It will at least be OK to treat it as LGPL code.)
-
-*** Major changes in libg++ version 2.5:
-
-* The iostream directory is gone. It has been replaced by ../libio.
-The latter is a major re-write. One major change is that libiostream.a
-(which is built in ../libio) can be used independently of libg++,
-which is interesting because you may find its licensing conditions
-less onerous. See ../libio/README.
-
-Also, the guts of the code has been re-written in C instead of C++.
-This is so that you can build a C stdio implementation without
-a C++ compiler (as was needed before). However, this is not 100% done.
-
-* There is (preliminary) iostream manual (in ../libio/iostream.texi).
-
-* The files in libg++/g++-include are now obsolete. Instead, it
-is the compiler's responsibility to generate "fixed" copies of your
-existing C header files (such as /usr/include/stdio.h). These copies
-(together with a g++ compiler modification) provide C++ access
-to the standard C library. See the fixproto script in the gcc-2.5
-distribution.
-
-*** Major changes in libg++ version 2.4:
-
-* The configuration scheme has been largely re-vamped.
-Instead of the definitions that are common to all (or many) of
-the Makefiles being duplicated in each Makefile.in, they have
-now been moved into a shell script libg++/config.shared, which
-generates these standard definitions and rules.
-
-Most of libg++/tests/Makefile, which had a lot of regularity,
-is now generated by the libg++/tests/Makefile.sh shell script.
-
-Also libg++ no longer uses configure's 'subdirs' mechanism.
-Instead, it uses the 'configdirs' mechanism that most Cygnus
-packages use. This means that each directory has its own
-configure.in, and each directory can be independently re-configured.
-
-* Lots of fixes have been made so libg++ can be compiled by compilers
-other than g++ (specifically cfront), though there are still lots of
-warnings. You may still have to edit some Makefiles etc; this
-will probably become easier in the next release. Many of the
-changes involved not depending on g++ extensions. However, some changes
-turned out to be that libg++ was depending on bugs in g++'s overload
-resolution. These bugs in g++ are being fixed; this will cause some
-difficulties for libg++. In some cases, we have decided that the
-cleanest fix is removing some libg++ functionality. Specifically,
-the coersions Integer::operator long and Integer::operator double
-have been replaced by explicit methods Integer::as_long and
-Integer::as_double. This means you may need to change your code.
-Please let us know if this is problematial.
-
-*** Changes in libg++ version 2.3:
-
-* iostream classes use multiple inheritance and virtual base classes.
-This is a little more complicated and slightly less efficient,
-but saves a slight amount of code duplication. More importantly,
-it improves compatibility with other iostream implementations.
-
-* A few of pseudo-template classes have been converted to use
-real templates. The style used emphasizes sharing code for
-multiple template instatiations at the cost of somewhat more
-complex internal logic. No promise is implied about when/if
-the remaining ones will be converted. Using the template classes
-assumes gcc-2.3 or similar compiler.
-
-* Added stdiobuf class which provides a streambuf wrapper around
-a stdio (FILE*). This can be useful when mixing C and C++ code.
-
-* streambuf sputn/sgetn virtuals have been made renamed to xsputn/xsgetn,
-and sputn/sgetn addedas inline methods. This change is to be compatible
-with AT&T and ANSI; it could require changes to user code if you have
-written your own streambuf sub-classes.
-
-* New utils/c++-mode.el (for editing C++ in emacs).
-
-* Lots of little fixes all over.
-
-*** Changes in libg++ version 2.2:
-
-* Accurate input and output of floating-point numbers
-
-* 'make clean' and its variants have been made more consistent.
-
-* Improved portability (SVR4, NeXT, ...)
-
-
-*** Changes in libg++ version 2.1:
-
-* "Class" include files in g++-include moved to src
-
-Those include files that are just wrappers around C header files
-(e.g. signal.h) remain in g++-include, while the header files
-that are specific to libg++ (or C++) have been moved to src.
-If your system includes "C++-ready" C header files (as in SVR4 or
-Linux), you don't need to use the wrappers in g++-include.
-
-* Portability
-
-A lot of effort has gone into making libg++ more portable.
-Code that depends on internals of "traditional" implementations
-had been made more portable. The 'libiberty' library is incorporated
-into libg++; this supplies (if needed) many functions that may be
-missing on particular hosts.
-
-* Auto-configuration
-
-New scripts automaticly figure out various properties of the
-system (and compiler) you use. While these scripts are not
-foolproof, the intent is that on most systems you will no longer
-have to edit Makefiles or build special configuration files.
-
-* Iostream bug-fixes
-
-There have been numerous bug-fixes and enhancements in the
-iostream code. Lots of rough edges in the streambuf and filebuf
-classes have been fixed.
-
-There are still some rough edges of the protocol (as in what the
-streambuf class should do, and what sub-classes such as filebuf
-should handle).
-
-* iostream enhancements for lexing/parsing.
-
-You can now create a 'streammarker' object, which is a "remembered"
-position is a streambuf. Later, you can backtrack to that position.
-This is supposed to work, even if the streambuf is unbuffered and
-otherwise unseekable, because the streambuffer never throws away
-any data following an extant streammarker. This feature will be
-used to build various scanning/parsing facilities (with backup).
-(See iostream.texi for an example.)
-
-* stdio library
-
-Now supports all of ANSI's functionality.
-
-*** Changes in libg++ version 2.0:
-
-* iostream classes
-
-The major change is that input/output uses the new iostream library.
-The design is based on (but not identical to) iostreams from
-AT&T C++ release 2.x, and the ANSI X3J16/WG21 draft C++ standard.
-
-The iostream classes replace the old stream. The new
-package provides some compatibility hooks. Including the
-obsolete <stream.h> (or defining _STREAM_COMPAT) makes
-more obsolete methods and features available. However,
-you will probably have to change your code if you have used
-any libg++-specific extensions (such as the File class).
-
-If you want stick with the old stream classes, change the
-definition of IO_DIR in Make.defs (to old-stream). You will
-also need to 'make depend' in directories that contain depend,
-and then re-configure everything. Note that the old-stream
-classes are *not* supported and *will* go away in a future release.
-
-* Use g++ version 2 features (if available)
-
-The main one is that an include file g++-include/FOO.h
-that is a wrapper for a standard C include file will now
-#include_next <FOO.h> instead of #include "/usr/include/FOO.h".
-This provides more flexibility wrt to using alternate C libraries
-(such as GNU libc), but it is not without its own problems.
-For example, if you compile libg++.a with a g++ that has old
-incompatible g++-include files in its path, these will be
-read (and then in turn read the /usr/include file). If there
-are conflicts, you can remove the previously installed include files,
-or try something like 'make XTRAFLAGS=-I/usr/include' (or whatever
-include path gcc uses by default).
-
-* Major Makefile changes.
-You can now 'make' from any subdirectory.
-
-* Use of 'configure'.
-
-* Copyrights changed to use the Library license version 2.0.
-(Some files have not been updated yet; we'll try to finish it for 2.1.)
-
-* The prototype class SplayNode was put into a separate include file
-(g++-include/gen/SplayNode.hP). This is to avoid duplication.
-It will require you to generate the approriate SplayNode file
-if you use SplayBag, SplaySet, or SplayPQ.
-
-* You can now use inline functions in header files without
-having to use either -O or _DUSE_LIBGXX_INLINES. (The #ifdef
-that depended on these has been removed, so inline functions
-are inline independent of -O).
-
-* Numerous minor bug-fixes and enhancements.
-
-*** Changes in libg++-1.39.0 from libg++-1.37.0
-
- * All files use the new g++ #pragma interface / #pragma implementation
- convention, which minimies duplication of `outlined' inlines
- and vtables. This also causes no inlines to be used at
- all when not compiling with `-O', which speeds compilation
- and simplifies debugging.
-
- * Many .h header file names had to be shortened so as to simulaneously
- work with SYSV and with #pragma interface (since .h and .cc file
- base names must match.) Sorry!
-
- * All genclass-able files have been moved to g++-include/gen.
-
- * various and sundry bug fixes, minor enhancements, and/or portability
- improvements as described in the ChangeLog.
-
-*** changes from libg++-1.36.3 to libg++-1.37.0
-
- * Most utility classes and functions are now in stand-alone .cc and/or .h
- files. This should generate smaller exectuables, and, sometimes
- faster compilation. In particular, istream.h, and ostream.h are
- now separately includable. If you only need one, you don't have
- to get the other.
-
- * The Plex classes now understand `const'. The `changes' and `changed'
- member functions were removed, since it is now possible to
- avoid changes in Plex structures by using const versions.
-
- * class RandomInteger is available, courtesy of John Reidl.
-
- * PlotFile3D, a 3D plot class is in libg++/etc. It will be
- incorporated into libg++ proper for the next release, perhaps
- with a few changes. Thanks to Tom Ngo.
-
- * various and sundry bug fixes, minor enhancements, and/or portability
- improvements as described in the ChangeLog.
-
- * The file etc/HINTS is an emacs RMAIL file that contains recent
- bug-lib-g++ list mail and related messages that may be useful.
-
-
-*** changes from libg++-1.36.1 to libg++-1.36.3
-
- * `Tmp' classes have been eliminated from Strings, Integers, etc.
- (Via some retuning of the main classes, Tmp classes were found
- to not significantly impact performance one way or the other,
- so they were removed.)
-
- * There is now a version of malloc, directly supporting operator
- new, etc. It may be faster and better suited to C++ applications
- than your libc malloc. You should be able to use it unless you need
- a special malloc for a distributed shared memory environment or
- the like. If you can't use it, edit the appropriate flag in
- the top-level Makefile. I would very much appreciate feedback
- about whether this malloc makes any difference in time or space
- efficiency than whatever you are now using.
-
- * By default, output is now line-buffered. Use the
- NO_LINE_BUFFER_STREAMBUF define in the Makefile to override
-
- * Otherwise, the stream classes remain C++-1.2 compatible.
- C++-2.0-compatible versions are still in the works.
-
- * various and sundry bug fixes, minor enhancements, and/or portability
- improvements as described in the ChangeLog.
-
-*** changes from libg++-1.35.0 & 1.35.1 to 1.36.1
-
- * various and sundry bug fixes, minor enhancements, and/or portability
- improvements as described in the ChangeLog.
-
- * Most everything should now work on most SystemV machines. Let me
- know if they don't.
-
- * genclass now allows an optional prefix to be used instead of type
- name concatenation in order to help minimize filename
- lengths for SYSV users. This is not a great solution, but
- is A solution to filename length problems for SYSV users.
-
- * Some, but not all classes now behave well with respect to
- the new 2.0 const specifications. Some uncertainties about
- how g++ will interpret gcc-based const function qualifiers
- (to indicate lack of side effects) versus C++-2.0 const member
- functions has held up the conversion of some classes to use
- const in either or both of these ways.
-
- * A version of etags suitable for use with c++ is in etc/
- (courtesy of J. Clark)
-
- * `graph', a unix graph(1) work-alike is in libg++/etc, courtesy
- of Rich Murphey.
-
- * RAVLMap (Ranked AVLs) prototypes.
-
- * The GetOpt class & support has been moved from etc/ into libg++.a
-
- * Streams have been redone to be nearly 100% AT&T 1.2 compatible.
- One minor possible incompatibility exists (ostream<< char)
- that can be eliminated via #define NO_OUTPUT_CHAR at the
- top of stream.h. This is probably necessary in order to
- compile et++. See libg++.texinfo for more details.
-
- The new stream implementation is not particulary pretty.
- Its main virtue is that it avoids some of the worst things
- about both AT&T streams and old libg++ streams. A much
- superior AT&T 2.0-iostream superset is in the works
- for future release.
-
-*** changes from libg++-1.25.0 to libg++-1.32.0
-
- * Nearly all data and methods previously declared as `private'
- are now declared as `protected' to make subclassing from
- library classes easier.
-
- * Most classes now contain a method `OK()' that checks to
- make sure that an objects internal data is in a valid state.
- See the documentation for further details
-
- * Mosts tests in ./tests now contain various kinds of assert
- statements. If tests execute without assertion failures,
- and without any other errors that cause aborted execution,
- you may consider them successful. The test files now include
- nearly all of my internal tests, which in turn have been
- made more extensive.
-
- * Plex classes are available.
- A bit of propaganda about these:
- Plexes are very attractive replacements for arrays
- in many contexts. Try them!
-
- * `shrink' and `contains' have been added to Obstack
-
- * Files and streams have not yet been revamped (a complete
- reworking awaits the AT&T 2.0 stream specification), but
- have been adjusted to provide slightly faster IO in some
- cases, and now support the use of a user-supplied string
- to read or write from instead of an actual IO source.
-
- * Rationals are now normalized when input via `>>'.
-
- * atoI is fixed.
-
- * variable-length representations in String, Integer, etc., are
- now completely different. See the documentation for details.
-
- * New String functions:
- * readline -- read in a line from an istream as a String
- * prepend -- prepend stuff to a String
- * through -- make a SubString from beginning to match point
- * from -- make a SubString from match point to end
- * s[i] -- now returns the char by reference
-
- * BitVec's are no longer supported, since their capabilities
- are now incorporated in the revised BitString class.
-
- * stdarg.h and regex.h are revised to support the Sun4
-
- * Several interesting and/or useful examples of libg++
- class use are in ./etc, mainly courtesy of Doug Schmidt.
-
- * .cc file names are now all less than 15 characters. Some
- .h file names are longer, but this should not present
- problems on SYSV systems.
-
- * pseudo-generic `proto' classes have been thoroughly revised:
- * The prototype file names now end in `P', not `.proto'
- and are in the g++-include directory
- * A single, simple-to-use collection traversal mechanism
- via pseudo-indices (`Pix') is used instead of particular
- traversal friend classes.
- * `Bag' prototypes are included
- * Base classes are now supplied, so that all implementations
- of Sets, Bags, are derived, allowing programmers to
- mix and match implementations.
- * They are now simpler to create: all comparison operators
- and the like are now defined as macros in a `defs' file
- which uses some reasonable defaults.
- * The `Dictionary' versions of Set prototypes are not now
- supported. Revised versions of such classes are forthcoming.
- * Class prototypes previously labelled as `Assoc' are now
- called `Maps', with slightly different capabilities.
-
- * Splay tree prototypes are available.
- A bit more propaganda: Consider using Splay tree
- based containers (Set, Bag, Map, PQ). They are often
- the most efficient structures when performing mixtures
- of operations (adds, deletes, searches...)
-
- * Fixed precision reals are available, courtesy of Kurt Baudendistel
-
- * An ordered hash Set prototype (VOHSet) is available,
- courtesy of Doug Schmidt.
-
- * MLCG now allows access and modifications to the seeds.
-
- * The Normal random generator is fixed.
-
- * SampleStatistic now allows any prob value for confidence
- intervals.
-
- * some simple timer routines are in builtin.cc, courtesy of Doug Schmidt
-
- * While the Vec class prototypes are still available, they are
- currently undergoing revision in order to correspond to
- the forthcoming Matrix package (which should be available
- in the next libg++ release).
-
- * A C++ version of GPERF, a perfect hash function generator
- program is also available in ./etc, courtesy of Doug Schmidt.
-
-
-*** changes from libg++-1.22.2 to libg++-1.25.0
-
- * All reported errors from the previous release are fixed, and many
- suggested modifications have been performed. Thanks to all who
- have sent bug reports and comments, including those with mail
- addresses that I have not been able to reply to. (My mail connections
- are sometimes more than a little fragile. If you send me mail and
- I have not replied within a few days, you may want to try again. Sorry.)
-
- * A serious problem in the use of Obstacks by conversion functions
- has been repaired.
-
- * A bug in maintaining reference counts on `find' and related operations
- in List prototype classes has been fixed.
-
- * Strings now support self case manipulation in addition to the
- functional versions.
-
- * Some new functions have been added to builtin.[h.cc]. All are now
- documented in libg++.texinfo
-
- * Overload declarations are now performed in std.h and math.h,
- rather than builtin.h, to eliminate some include file ordering
- problems.
-
- * Random, RNG, and SampleStatistic classes are available,
- thanks to Dirk Grunwald.
-
- * A BitVec class is available.
-
- * The are many new generic container class prototype files. These
- support container classes based on elementary data structures
- (and a couple of non-elementary ones). Please read the documentation.
-
- * Class prototype OSet has been modified and renamed OLSet.
-
- * The genclass utility has been modified
-
-*** changes from libg++-1.22.1 to 1.22.2
-
- * Tests files are now in a separate directory.
-
- * Several minor errors (Complex unary -, several BitString functions)
- have been repaired.
-
- * pow(0,0) returns 1 for all versions of pow.
-
- * An experimental generic class prototyping feature is provided,
- including prototypes for lisp-style lists and ordered list-based sets.
-
- * several include files with the same names as those in AT&T CC
- are provided. These simply #include other files. OOPS should now
- compile using only g++-include files. See, however, the note
- about struct exception in file math.h
-
- * Some rearrangement of files containing char* conversion has been
- done to eliminate linking of unnecessary classes.
-
- * The inline-only-when-optimizing feature is still not supported.
-
-* New Random number generator classes are not yet available. Stubs for
- these files are in this directory. They should be available for next
- release.
-
-*** changes from libg++-1.21.1 to 1.22.0
-
- * All documentation is in a stand-alone texinfo file, libg++.texinfo,
- and is on its way to becoming a decent piece of documentation.
-
- * All reported errors from the previous release are fixed, and many
- suggested modifications have been performed. Thanks to all who
- have sent bug reports and comments, including those with mail
- addresses that I have not been able to reply to. (My mail connections
- are sometimes more than a little fragile. If you send me mail and
- I have not replied within a few days, you may want to try again. Sorry.)
-
- * New Complex, BitSet, and BitString classes are available. You will
- be performing a valuable service if you try these out and report
- back any bugs/comments/suggestions about these or any other classes.
-
- * File `values.h' has been added. This contains various system
- constants like the number of bits per long, etc. It contains
- much of the same information as sun <values.h>, although a
- few names and things differ slightly.
-
- * Files `builtin.h', `builtin.cc', and `convert.cc' have been added.
- `builtin' contains common inline and non-inline functions on
- builtin types (like `abs'). `convert' contains code for performing
- IO and char* conversions, mainly via Obstacks. Most of these
- functions are not new -- they have been collected from other .h
- and .cc files.
-
- * Files `std.h' and `math.h' now declare all libc.a C functions
- in a way that allows any of them to be overloaded in C++.
-
- * Strings and Integers now perform expansion via realloc() --
- see libconfig.h about whether you should #define SHOULD_FREE_TO_REALLOC.
-
- * `eatwhite' is supported for istreams.
-
- * File::getline(String, ...) and get(String) have been removed in order to
- maintain greater independence of different classes.
-
- * Strings now provide substring matching via new versions of
- `contains' and `matches', `common_prefix' and `common_suffix'.
- Also, there is more support for case operations via `fcompare', etc.
- The versions of `decompose' that do not deal with Regexes have
- been deleted since they provide little functionality over other
- operations. Also, a few special case functions dealing with char*'s
- have been deleted since the required constructors are necessary
- anyway. Several other corrections have been made in String.cc,
- including the elimination of a few aliasing problems.
-
- * The implementations of Integers and Rationals are now both much
- more efficient and well-tested, while remaining machine independent.
- A few minor visible features have been added and/or changed.
-
- * The `box' command in PlotFile is now simulated, whether or not
- it is present in libplot.a
-
- * The inlining-only-if-optimizing feature is still not fully implemented.
diff --git a/contrib/libg++/libg++/README b/contrib/libg++/libg++/README
deleted file mode 100644
index e3231ad7fe2a..000000000000
--- a/contrib/libg++/libg++/README
+++ /dev/null
@@ -1,247 +0,0 @@
-This is version 2.7.2 of libg++, the GNU C++ class library.
-Release date June 1996 by Cygnus Support
-
-* Please skim through this once BEFORE attempting to make and install libg++.
-
-* You probably want to at least skim ./g++FAQ.txt.
-
-* Contents
-
- * g++ source files (with their include files) are in the ./src directory
- * Some simple tests and demo programs are in ./tests
- * documentation is in ./libg++.texi.
- * A perfect hash function generator is in ./gperf.
- * Some miscellaneous files of possible interest are in ./etc
- (These files are not officially a part of the libg++ distribution,
- and are subject to arbitrary changes, deletions, etc. from release
- to release.)
-
-* Copyright restrictions
-
-The GNU Library General Public License (which is in the file
-../COPYING.LIB) covers all libraries (specificly libg++.a) and
-include files that get installed (by 'make install').
-
-Other parts of the libg++ *distribution* that are not part the libg++
-*library* per se have the GNU General Public License (which is in the
-file ../COPYING).
-
-Individual files should bear the appropriate Copyright (let us know
-if you think there is a mistake). But specificly, if your application
-only uses files that are installed by the normal build+install
-procedure, then it is bound by the restrictions of the GNU Library
-General Public License, but not those of the GNU General Public License.
-
-* Pre-installation
-
- * This version of libg++ requires gcc-2.7.2 or newer.
- It assume that gcc is responsible for fixing standard C include
- files (such as stdio.h) so that they are suitable for C++
- (Using the fixproto script that is part of gcc).
-
- * You can compile libg++ using a gcc that you haven't installed.
- The most convenient way to do that is to make a symlink named
- gcc in the top-level directory (i.e. libg++-2.7.2) that points to
- the directory containing the new gcc. (You should end up with
- libg++/../gcc/xgcc being a valid filename for the uninstalled gcc.)
-
- * With only trivial modifications (like changing file extensions,
- etc.) most things should compile and run with any modern C++ compiler.
- However, notice that libg++ may depend on recent (ANSI/ISO) changes
- to C++. If libg++ depends on a g++ feature that is not specified
- by the C++ draft standard *or* if there is a simple and clean
- work-around that would make it more portable, please let me know.
-
-* Installation (see libg++.texi for more details)
-
- * For VMS, cd to ./vms, and read AAAREADME.TXT
- [NOTE: The VMS support is obsolete. We need a volunteer to fix it.]
-
- * For Linux, things are complicated because the Linux C library is
- based on ../libio. Unfortunately, there is no publicly available
- version of libc that will work quite right with this release of
- libg++ and libio.
-
- The latest released version of libg++ for Linux is
-
- ftp://sunsite.unc.edu/pub/Linux/GCC/libg++-2.7.1.4.bin.tar.gz
-
- To use it you need to upgrade your C library to 5.2.15 or higher; the
- latest released version is
-
- ftp://sunsite.unc.edu/pub/Linux/GCC/libc-5.2.18.bin.tar.gz
-
- This release of libio will mostly work with libc 5.2.18, but a few
- things break; getopt, for instance.
-
- To get beta releases, you may want to join the Linux Gcc developer's
- mailing list; send mail to majordomo@vger.rutgers.edu with the text
- "subscribe linux-gcc" in the message body.
-
- * To build shared libraries, see README.SHLIB.
-
- * Make sure your sed is *not* GNU sed version 1.12.
- Most other versions (including GNU sed 1.13) should be OK.
- (It has been reported at GNU sed 3.0 fails.)
-
- * Go to the directory *above* libg++ (i.e.. libg++-2.7.2).
-
- * Run './configure' to configure the tree and create Makefiles.
-
- Typical example:
- ./configure [SYSTEM] --prefix=/usr/gnu
-
- The prefix says that installation should be into
- /usr/gnu/lib, /usr/gnu/bin, etc as appropriate.
-
- The SYSTEM indicates what machine configuration you're
- running on. If you don't specify it, the system can usually
- guess a default.
-
- IMPORTANT: The configure options (including SYSTEM and
- --prefix) must match those used to configure gcc, otherwise
- g++ may fail to find libg++.
-
- See etc/cfg-paper.texi for more details. (This paper is
- in texinfo format; see the section below on Installing
- the Documentation on how to make it more readable.)
-
- * Type `make all "CC=gcc -O2"'.
- (Builds libg++.a and some other things.) (The "CC=gcc -O2"
- is optional. It forces use of gcc to compile C programs.
- Set CXX to specify the C++ compiler, though it defaults to gcc.)
-
- * Optionally, type `make check' to make and run some tests/demos of libg++.
-
- * Before installing, if you have an old version that was installed
- into the same directory(s), you should probably remove it.
- (There is currently no clean mechanism to do that.
- You should at least remove $(prefix)/lib/g++-include/*.h,
- where $(prefix) is by default /usr/local.)
-
- If the previous version was libg++ 2.4 or older, you *must* remove
- the old includes. Prior to version 2.5, libg++ installed its own
- versions of certain standard headers for use on systems where the
- vendor headers don't include prototypes. Versions 2.5 and later of
- gcc add prototypes to vendor headers that don't have them, so
- the libg++ versions are no longer useful, and are harmful when
- they conflict with the vendor version.
-
- * Type `make install' to install
-
- libg++.a (from .)
- include files (from src and ../libio)
- prototype files (from src/gen)
- gperf (from gperf)
- some other stuff
-
- * Install the documentation
-
- If you are a systems administrator installing libg++ for others,
- please make the documentation available to users!
-
- The libg++.texi file may be formatted as a paper document by
-
- * Get a copy of texinfo.tex.
- This file defines various tex macros used in libg++.texi
- One is in the gcc release.
- You can temporarily copy it into the current directory.
- * Run tex on libg++.texi
- and do whatever you normally do from there to print it.
-
- It may be made into an emacs info file:
-
- * use the 'makeinfo' program (from the texinfo distribution).
-
- * Copy these files into your emacs info directory
- (normally somewhere like /usr/gnu/emacs/info).
- * If you have not done so before, edit the emacs/info/dir file
- to add a libg++ node, by inserting a line like
-
- * Libg++: (libg++). The GNU C++ Library
-
- to the bottom of the file.
-
- * (Optional) Install, from ./utils
- g++dep (a version of mkdep that understands c++)
-
-* Notes on compiling and running libg++/tests
-
-It is a very good idea to also cd to the test directory and run tests
-manually, to see what they do.
-
-Compiling and running the tests consumes a fair amount of time and
-disk space!
-
-Some reported diffs may be perfectly reasonable, owing to things like
-floating point precision differences: The expected.out file was created
-on a Sun4/110.
-
- Some tRational and tFix results depend on floating point precision
- and may generate slightly different output on different machines.
-
- tRandom seeds some random-numbers in a way that also relies on
- floating-point representations -- Your output should be numerically
- similar, but probably not identical.
-
-* Changes since previous versions(s).
-
- See the file NEWS.
-
-* Known bugs and problems
-
- * If "make install" fails with the error message:
-
- Static constructor test failed - see libg++.README
-
- this indicates an error in installing gcc.
- C++ needs special linker support beyond that needed for C, to make
- sure that static objects get initialized and destroyed properly.
- Some linkers (including the GNU linker as well as linkers for
- the Elf object file format) already provide the needed support.
- In other cases, gcc (or g++) uses the "collect2" linker driver.
- Gcc should by default do the right thing, but if you tell
- gcc to assum the GNU linker (with the --with-gnu-linker option),
- and then fail to correctly install GNU ld, you will lose.
-
-* Lots of other information is in the libg++.texi file. It really is
- very important to actually read the documentation before using
- library classes. Examination of the demo files in the test directory
- may also be useful. (Note however, that the demo files are merely
- designed to test examples of each class capability,
- and are not especially good examples of client functions that might
- use these classes.)
-
-* There is now a gnu libg++ mailing list (bug-lib-g++@prep.ai.mit.edu) and
- associated usenet gnu news group (gnu.g++.lib.bug). (It is preferred
- that messages be sent to the mailing list, rather than posted to
- newsgroup.) To subscribe or unsubscribe to the mailing list,
- send a request to bug-lib-g++-request@prep.ai.mit.edu.
-
-* You will be performing a valuable service if you use libg++
- classes and report back any comments, and suggestions, or bugs,
- preferably to the bug-lib-g++ list. Your feedback is extremely
- helpful in efforts to make libg++ as useful and reliable as possible.
-
-* We continue to solicit
-
- * bug reports.
- * suggestions.
- * comments.
- * questions about installing and using libg++
- * other contributions to be incorporated into libg++.
- * sample programs using libg++.
-
- Often, the best place to send such things is bug-lib-g++@prep.ai.mit.edu,
- although direct mail is also welcome.
-
-* Good luck!
-
-Doug Lea <dl@oswego.edu> designed and implemented most of the classes,
-and was the original maintainer and "owner" of libg++.
-He has handed over "ownership" to Cygnus Support.
-
-Per Bothner <bothner@cygnus.com> of Cygnus Support is now
-maintaining libg++, with much help from the rest of the
-Cygnus G++ team (Jason Merrill, Mike Stump, Brendan Kehoe).
-Cygnus Support, 1937 Landings Drive, Mountain View, CA 94043
diff --git a/contrib/libg++/libg++/README.SHLIB b/contrib/libg++/libg++/README.SHLIB
deleted file mode 100644
index 087e569ef194..000000000000
--- a/contrib/libg++/libg++/README.SHLIB
+++ /dev/null
@@ -1,38 +0,0 @@
-NOTES ON BUILDING LIBG++ AS A SHARED LIBRARY
-
-A shared library version of libg++-2.7.2 can be built using gcc-2.7.2 or
-above on the following platforms:
-
-x86 Linux (using the ELF toolchain)
-Sparc running SunOS 4.x
-Alpha running OSF/1
-SGI running IRIX 5.x and up
-HPPA running HPUX 9.x and up
-All SVR4 targets (tested on Sparc Solaris and i486 UnixWare)
-RS/6000 or PowerPC running AIX (requires GNU ld 2.7 or newer)
-
-To build a shared version of libg++ on one of these platforms, pass the
---enable-shared flag to configure, and be sure to compile with gcc.
-
-In order to run a program built with your new shared library (including
-gperf and the tests), you may have to set the environment variable
-LD_LIBRARY_PATH to include the directory where it lives.
-
-Discussion:
-----------
-
-Many shared library implementations have an idiosyncracy [bug ???] which
-requires anything that is declared in a shared library to be defined even
-if it isn't used. libstdc++.so and libg++.so contain a number of classes
-which use the math library. Consequently, if a shared libm does not exist
-(it does under Linux, OSF/1, IRIX, HPUX and Solaris, but not the others),
-either the math library must to added to the link command or you must
-compile with a flag that tells the linker to ignore unresolved references
-(-Wl,-assert,nodefinitions for SunOS, -Wl,-z,nodefs for SVR4).
-
-The `g++' program now adds -lm by default, so you may not have to worry
-about this.
-
-Jason Merrill (jason@cygnus.com)
-Thanks to Dr. Joseph E. Sacco (jsacco@ssl.com) for the original version of
-this note.
diff --git a/contrib/libg++/libg++/TODO b/contrib/libg++/libg++/TODO
deleted file mode 100644
index c1e12b84b1c4..000000000000
--- a/contrib/libg++/libg++/TODO
+++ /dev/null
@@ -1,13 +0,0 @@
-* See iostream/TODO for iostream-specific issues
-
-* Update README.
-
-* Add 'return 0' to end of tests.
-[Not needed, if ANSI makes that implicit.]
-
-* Undo gcc-2.3.2-specific kludge in test-install/bf.cc.
-
-* Remove use of _libgxx_io_ob from Fix.cc.
-
-* Since the libg++ include files in gxx_includedir aren't architecture
- dependent, they belong under $(datadir) not $(libdir).
diff --git a/contrib/libg++/libg++/g++FAQ.texi b/contrib/libg++/libg++/g++FAQ.texi
deleted file mode 100644
index dfed49574b48..000000000000
--- a/contrib/libg++/libg++/g++FAQ.texi
+++ /dev/null
@@ -1,1986 +0,0 @@
-\input texinfo.tex @c -*-texinfo-*-
-@c %**start of header
-@setfilename g++FAQ.info
-@settitle Frequently asked questions about the GNU C++ compiler
-@setchapternewpage off
-@c version: @(#)g++FAQ.texi 1.46 6/20/96
-@c %**end of header
-
-@iftex
-@finalout
-@end iftex
-@titlepage
-@title G++ FAQ
-@subtitle Frequently asked questions about the GNU C++ compiler
-@subtitle June 19, 1996
-@sp 1
-@author Joe Buck
-@page
-@end titlepage
-
-@ifinfo
-@node Top, new stuff, (dir), (dir)
-@top
-@unnumbered FAQ for g++ and libg++, by Joe Buck (jbuck@@synopsys.com)
-@end ifinfo
-
-@cindex FAQ for g++, latest version
-@cindex Archive site for FAQ lists
-@cindex rtfm.mit.edu
-@cindex Joe Buck <jbuck@@synopsys.com>
-@cindex FAQ for C++
-
-This is a list of frequently asked questions (FAQ) for g++ users; thanks to
-all those who sent suggestions for improvements. Thanks to Marcus Speh
-for doing the index. A hypertext version is available on the World Wide
-Web at @file{http://www.cygnus.com/misc/g++FAQ_toc.html}.
-
-Please send updates and corrections to the FAQ to
-@code{jbuck@@synopsys.com}. Please do @emph{not} use me as a resource
-to get your questions answered; that's what @file{gnu.g++.help} is for and I
-don't have the time to support the net's use of g++.
-
-Many FAQs, including this one, are available on the archive site
-``rtfm.mit.edu''; see @*
-@file{ftp://rtfm.mit.edu/pub/usenet/news.answers}.
-This FAQ may be found in the subdirectory g++-FAQ.
-
-@cindex Marshall Cline
-@cindex comp.lang.c++
-@cindex C++ FAQ
-This FAQ is intended to supplement, not replace, Marshall Cline's
-excellent FAQ for the C++ language and for the newsgroup
-@file{comp.lang.c++}. Especially if g++ is the first C++
-compiler you've ever used, the question ``How do I do <X> with g++?''
-is probably really ``How do I do <X> in C++?''.
-You can find this FAQ at
-@file{ftp://rtfm.mit.edu/pub/usenet/comp.lang.c++},
-or in HTML form at @file{http://www.cerfnet.com/~mpcline/On-Line-C++-FAQs/}.
-
-@menu
-* new stuff:: The latest poop -- gcc-2.7.x
-* getting g++:: Obtaining Source Code
-* installation:: Installation Issues and Problems
-* User Problems:: User Problems
-* legalities:: What are the rules for shipping code built with g++ and libg++?
-* index:: Concept Index
-
- --- The Detailed Node Listing ---
-
-New Stuff: The Latest Poop -- Gcc-2.7.x
-
-* version 2.7:: What's new in version 2.7.x of gcc/g++
-* libstdc++:: The GNU Standard C++ Library
-
-Obtaining Source Code
-
-* latest versions:: What is the latest version of gcc, g++, and libg++?
-* g++ for Unix:: How do I get a copy of g++ for Unix?
-* g++ for HP:: Getting gcc/g++ for the HP Precision Architecture
-* g++ for Solaris 2.x:: Getting gcc/g++ binaries for Solaris 2.x
-* g++ for other platforms:: How do I get a copy of g++ for (some other platform)?
-* 1.x vs 2.x versions:: But I can only find g++-1.42!
-
-Installation Issues and Problems
-
-* gcc-2 + g++-1:: I can't build g++ 1.x.y with gcc-2.x.y!
-* what else do I need?:: OK, I've obtained gcc; what else do I need?
-* repository:: How do I use the new template repository code?
-* repo bugs:: Known bugs and problems with the repo patch
-* libstdc++:: The GNU Standard C++ Library
-* use GNU linker?:: Should I use the GNU linker, or should I use "collect"?
-* Use GNU assembler?:: Should I use the GNU assembler, or my vendor's assembler?
-* Use GNU C library?:: Should I use the GNU C library?
-* Global constructor problems:: Global constructors aren't being called
-* Strange assembler errors:: Strange assembler errors when linking C++ programs
-* Other problems building libg++::
-* Rebuild libg++?:: Do I need to rebuild libg++ to go with my new g++?
-* co-existing versions:: I want several versions of g++ and libg++ to co-exist
-* Installing on Linux:: Trouble installing g++ and libg++ on Linux
-* Linux Slackware 3.0:: Problems with g++ on Linux Slackware 3.0
-
-User Problems
-
-* missing virtual table:: Linker complains about missing virtual table
-* for scope:: gcc-2.7.0 breaks declarations in "for" statements!
-* const constructor:: g++ seems to want a const constructor. What's that?
-* unused parameter warnings:: How to silence ``unused parameter'' warnings
-* jump crosses initialization:: g++ objects to a declaration in a case statement
-* Demangler:: Where can I find a demangler?
-* static data members:: Linker reports undefined symbols for static data members
-* internal compiler error:: What does ``internal compiler error'' mean?
-* bug reports:: I think I have found a bug in g++.
-* porting to g++:: Porting programs from other compilers to g++
-* name mangling:: Why does g++ mangle names differently from other C++ compilers?
-* problems linking with other libraries:: Why can't g++ code link with code from other C++ compilers?
-* documentation:: What documentation exists for g++ 2.x?
-* templates:: Problems with the template implementation
-* undefined templates:: I get undefined symbols when using templates
-* redundant templates:: I get multiply defined symbols when using templates
-* Standard Template Library:: Does g++ support the Standard Template Library?
-* exceptions:: Problems and limitations with exceptions
-* namespaces:: Does g++ support namespaces?
-* agreement with standards:: What are the differences between g++ and the ARM specification of C++?
-* compiling standard libraries:: Will g++ compile InterViews? NIHCL? Rogue Wave?
-* debugging on SVR4 systems:: Debugging on SVR4 systems
-* debugging problems on Solaris:: debugging problems on Solaris
-* X11 conflicts with libg++:: Conflict over meaning of String
-* assignment to streams:: Why can't I assign one stream to another?
-@end menu
-
-@node new stuff, getting g++, Top, Top
-@chapter The latest poop -- gcc-2.7.x
-
-This section is intended to describe more recent changes to g++, libg++,
-and such. Some things in this section will eventually move elsewhere.
-
-@strong{News:} as I write this (late February 1996) the gateway
-connecting the bug-g++ mailing list and the @file{gnu.g++.bug} newsgroup
-is broken. Please mail, do not post bug reports.
-
-@menu
-* version 2.7:: What's new in version 2.7.x of gcc/g++
-* libstdc++:: The GNU Standard C++ Library
-@end menu
-
-@node version 2.7, libstdc++, , new stuff
-@section What's new in version 2.7.x of gcc/g++
-
-The current version of gcc/g++ is 2.7.2; the current libg++ is 2.7.1.
-
-By the time you read this, two minor bug-fix releases, gcc 2.7.3
-and libg++ 2.7.2, may be available. These new releases are mainly
-intended to fix platform-specific bugs and do not affect the C++
-``front end'' of the compiler.
-
-The 2.7.x releases represent a great deal of work on the part of the g++
-maintainers to fix outstanding bugs and move the compiler closer to the
-current ANSI/ISO standards committee's working paper, including
-supporting many of the new features that have been added to the
-language. I recommend that everyone read the NEWS file contained in the
-distribution (and that system administrators make the file available to
-their users). I've borrowed liberally from this file here.
-
-@cindex C++ working paper
-If any features seem unfamiliar, you will probably want to
-look at the recently-released public review copy of the C++ Working
-Paper:
-@itemize @bullet
-@item
-PostScript and PDF (Adobe Acrobat):
-see @file{ftp://research.att.com/dist/c++std/WP}.
-@item
-HTML and ASCII versions: see @file{ftp://ftp.cygnus.com/pub/g++}.
-@item
-World Wide Web: see
-@file{http://www.cygnus.com/misc/wp/}.
-@end itemize
-
-Here are the main points:
-
-@itemize @bullet
-@item
-@cindex for scope
-As described above, the scope of variables declared in the
-initialization part of a for statement has been changed; such variables
-are now visible only in the loop body. Use @code{-fno-for-scope} to get
-the old behavior. You'll need this flag to build groff version 1.09,
-Ptolemy, and many other free software packages.
-
-@item
-@cindex vtable duplication
-Code that does not use #pragma interface/implementation will most
-likely shrink dramatically, as g++ now only emits the vtable for a
-class in the translation unit where its first non-inline, non-abstract
-virtual function is defined.
-
-@item
-@cindex automatic template instantiation
-Support for automatic template instantiation has @emph{not} been enabled
-in the official distribution, due to a disagreement over design philosophies.
-But you can get a patch from Cygnus to turn it on; retrieve the patch
-from @file{ftp://ftp.cygnus.com/pub/g++/gcc-2.7.2-repo.gz} to patch
-gcc-2.7.2 (there are also patches for earlier gcc versions).
-
-@item
-@cindex exception handling, 2.7.0
-
-@xref{exceptions}
-
-@item
-@cindex run-time type identification
-Support for Run-Time Type Identification has been added with @code{-frtti}.
-This support is still in alpha; one major restriction is that any file
-compiled with @code{-frtti} must include @code{<typeinfo>} (@emph{not}
-@code{typeinfo.h} as the NEWS file says).
-Also, all code you link with (including libg++) has to be built with
-@code{-frtti}, so it's still tricky to use.
-
-@item
-@cindex compiler-generated operators
-Synthesis of compiler-generated constructors, destructors and
-assignment operators is now deferred until the functions are used.
-
-@item
-@cindex assignment in conditional expressions
-The parsing of expressions such as @code{a ? b : c = 1}
-has changed from
-@code{(a ? b : c) = 1} to @code{a ? b : (c = 1)}. This is a new C/C++
-incompatibility brought to you by the ANSI/ISO standards committee.
-
-@item
-@cindex new operator keywords
-The operator keywords and, and_eq, bitand, bitor, compl, not, not_eq,
-or, or_eq, xor and xor_eq are now supported. Use @code{-ansi} or
-@code{-foperator-names} to enable them.
-
-@item
-@cindex explicit keyword
-The @code{explicit} keyword is now supported. @code{explicit} is used to mark
-constructors and type conversion operators that should not be used
-implicitly.
-
-@item
-@cindex user-defined type conversion
-Handling of user-defined type conversion has been improved.
-
-@item
-@cindex explicit template instantiation
-Explicit instantiation of template methods is now supported. Also,
-@code{inline template class foo<int>;}
-can be used to emit only the vtable
-for a template class.
-
-@item
-@cindex -fcheck-new
-With -fcheck-new, g++ will check the return value of all calls to
-operator new, and not attempt to modify a returned null pointer.
-
-@item
-collect2 now demangles linker output, and c++filt has become part of
-the gcc distribution.
-
-@item
-Improvements to template instantiation: only members actually used
-are instantiated. (Actually this is not quite true: some inline
-templates that are not successfully inlined may be expanded even
-though they are not needed).
-
-@end itemize
-
-@node libstdc++, , version 2.7, new stuff
-@section The GNU Standard C++ Library
-
-The GNU Standard C++ Library (also called the ``GNU ANSI C++ Library''
-in places in the code) is not libg++, though it is included in the
-libg++ distribution. Rather, it contains classes and functions
-required by the ANSI/ISO standard. The copyright conditions are the
-same as those for for the iostreams classes; the LGPL is not used
-(@xref{legalities}).
-
-This library, libstdc++, is in the libg++ distribution in versions 2.6.2
-and later. It requires at least gcc 2.6.3 to build the libg++-2.6.2
-version; use at least gcc 2.7.0 to build the libg++ 2.7.0 version. It
-contains a hacked-up version of HP's implementation of the Standard
-Template Library (see @xref{Standard Template Library}). I've
-successfully used this Standard Template Library version to build
-a number of the demos you'll see on various web pages.
-
-As of version 2.7.0, the streams classes are now in libstdc++ instead of
-libg++, and libiostream is being phased out (don't use it). The g++
-program searches this library.
-
-@node getting g++, installation, new stuff, Top
-@chapter Obtaining Source Code
-@cindex Source code
-
-@menu
-* latest versions:: What is the latest version of gcc, g++, and libg++?
-* g++ for Unix:: How do I get a copy of g++ for Unix?
-* g++ for HP:: Getting gcc/g++ for the HP Precision Architecture
-* g++ for Solaris 2.x:: Getting gcc/g++ binaries for Solaris 2.x
-* g++ for other platforms:: How do I get a copy of g++ for (some other platform)?
-* 1.x vs 2.x versions:: But I can only find g++-1.42!
-@end menu
-
-@node latest versions, g++ for Unix, , getting g++
-@section What is the latest version of gcc, g++, and libg++?
-
-@cindex gcc/g++, version date
-The latest "2.x" version of gcc/g++ is 2.7.2, released November 26, 1995.
-The latest version of libg++ is 2.7.1, released November 12, 1995.
-
-Don't use 2.5.x, with x less than 5, for C++ code; there were some
-serious bugs that didn't have easy workarounds. 2.5.8 is the most
-solid 2.5.x release. 2.6.3 is the most solid 2.6.x release.
-
-For some non-Unix platforms, the latest port of gcc may be an earlier
-version (2.5.8, say). You'll need to use a version of libg++ that
-has the same first two digits as the compiler version, e.g. use libg++
-2.5.x (for the latest x you can find) with gcc version 2.5.8.
-
-The latest "1.x" version of gcc is 1.42, and the latest "1.x" version of
-g++ is 1.42.0.
-While gcc 1.42 is quite usable for C programs,
-I recommend against using g++ 1.x except in special circumstances
-(and I can't think of any such circumstances).
-
-@node g++ for Unix, g++ for HP, latest versions, getting g++
-@section How do I get a copy of g++ for Unix?
-
-First, you may already have it if you have gcc for your platform;
-g++ and gcc are combined now (as of gcc version 2.0).
-@cindex GNU gcc, version
-@cindex GNU g++ and gcc
-
-You can get g++ from a friend who has a copy, by anonymous FTP or
-UUCP, or by ordering a tape or CD-ROM from the Free Software
-Foundation.
-@cindex g++, ordering
-@cindex g++, getting a copy
-
-The Free Software Foundation is a nonprofit organization that
-distributes software and manuals to raise funds for more GNU
-development. Getting your copy from the FSF contributes directly to
-paying staff to develop GNU software. CD-ROMs cost $400 if an
-organization is buying, or $100 if an individual is buying. Tapes
-cost around $200 depending on media type. I recommend asking for
-version 2, not version 1, of g++.
-@cindex FSF [Free Software Foundation]
-@cindex GNU [GNU's not unix]
-
-For more information about ordering from the FSF, contact
-gnu@@prep.ai.mit.edu, phone (617) 542-5942 or anonymous ftp file
-@file{ftp://prep.ai.mit.edu/pub/gnu/GNUinfo/ORDERS} (you can
-also use one of the sites listed below if you can't get into ``prep'').
-
-@cindex FSF, contact <gnu@@prep.ai.mit.edu>
-
-Here is a list of anonymous FTP archive sites for GNU software.
-If no directory is given, look in @file{/pub/gnu}.
-
-@cindex GNUware, anonymous FTP sites
-
-@example
-ASIA: ftp.cs.titech.ac.jp, utsun.s.u-tokyo.ac.jp:/ftpsync/prep,
-cair.kaist.ac.kr, ftp.nectec.or.th:/pub/mirrors/gnu
-
-AUSTRALIA: archie.oz.au:/gnu (archie.oz or archie.oz.au for ACSnet)
-
-AFRICA: ftp.sun.ac.za
-
-MIDDLE-EAST: ftp.technion.ac.il:/pub/unsupported/gnu
-
-EUROPE: irisa.irisa.fr, ftp.univ-lyon1.fr, ftp.mcc.ac.uk,
-unix.hensa.ac.uk:/pub/uunet/systems/gnu, ftp.denet.dk,
-src.doc.ic.ac.uk:/gnu, ftp.eunet.ch, nic.switch.ch:/mirror/gnu,
-ftp.informatik.rwth-aachen.de, ftp.informatik.tu-muenchen.de,
-ftp.win.tue.nl, ftp.funet.fi, ftp.denet.dk, ftp.stacken.kth.se,
-isy.liu.se, ftp.luth.se:/pub/unix/gnu, ftp.sunet.se, archive.eu.net
-
-SOUTH AMERICA: ftp.unicamp.br, ftp.inf.utfsm.cl
-
-WESTERN CANADA: ftp.cs.ubc.ca:/mirror2/gnu
-
-USA: wuarchive.wustl.edu:/systems/gnu, labrea.stanford.edu,
-ftp.digex.net:/pub/gnu, ftp.kpc.com:/pub/mirror/gnu, f.ms.uky.edu:/pub3/gnu,
-jaguar.utah.edu:/gnustuff, ftp.hawaii.edu:/mirrors/gnu,
-uiarchive.cso.uiuc.edu:/pub/gnu, ftp.cs.columbia.edu:/archives/gnu/prep,
-col.hp.com:/mirrors/gnu, gatekeeper.dec.com:/pub/GNU,
-ftp.uu.net:/systems/gnu
-
-@end example
-
-The ``official site'' is prep.ai.mit.edu, but your transfer will probably
-go faster if you use one of the above machines.
-
-@cindex gzip
-Most GNU utilities are compressed with ``gzip'', the GNU compression
-utility. All GNU archive sites should have a copy of this program,
-which you will need to uncompress the distributions.
-
-@cindex UUNET
-@cindex UUCP
-UUNET customers can get GNU sources from UUNET via UUCP.
-UUCP-only sites can get GNU sources by ``anonymous UUCP'' from site
-"osu-cis" at Ohio State University. You pay for the long-distance call
-to OSU; the price isn't too bad on weekends at 9600 bps. Send mail to
-uucp@@cis.ohio-state.edu or osu-cis!uucp for more information.
-
-OSU lines are often busy. If you're in the USA, and are willing to spend
-more money, you can get sources via UUCP from UUNET using their 900 number:
-1-900-GOT-SRCS (900 numbers don't work internationally). You will be
-billed $0.50/minute by your phone company.
-
-@cindex libg++
-Don't forget to retrieve libg++ as well!
-
-@node g++ for HP, g++ for Solaris 2.x, g++ for Unix, getting g++
-@section Getting gcc/g++ for the HP Precision Architecture
-
-@cindex HP Precision Architecture
-@cindex Hewlett-Packard
-@cindex GNU GAS
-@cindex GNU gdb
-
-If you use the HP Precision Architecture (HP-9000/7xx and HP-9000/8xx)
-and you want to use debugging, you'll need to use the GNU assembler, GAS
-(version 2.3 or later). If you build from source, you must tell the
-configure program that you are using GAS or you won't get debugging
-support. A non-standard debug format is used, since until recently HP
-considered their debug format a trade secret. Thanks to the work of
-lots of good folks both inside and outside HP, the company has seen the
-error of its ways and has now released the required information. The
-team at the University of Utah that did the gcc port now has code that
-understands the native HP format.
-
-Some enhancements for the HP that haven't been integrated back into the
-official GCC are available from the University of Utah, site
-jaguar.cs.utah.edu. You can retrieve sources and prebuilt binaries for
-GCC, GDB, binutils,and libg++; see the directory @file{/dist}.
-
-The libg++ version is actually the same as the FSF 2.6. The Utah
-version of GDB can now understand both the GCC and HP C compiler debug
-formats, so it is no longer necessary to have two different GDB versions.
-
-I recommend that HP users use the Utah versions of the tools (see
-above), though at this point the standard FSF versions will work well.
-
-HP GNU users can also find useful stuff on the site geod.emr.ca in the
-@file{/pub/UNIX/GNU-HP} directory.
-
-Jeff Law is leaving the University of Utah, so the Utah prebuilt
-binaries may be discontinued.
-
-@node g++ for Solaris 2.x, g++ for other platforms, g++ for HP, getting g++
-@section Getting gcc/g++ binaries for Solaris 2.x
-
-``Sun took the C compiler out of Solaris 2.x. Am I stuck?''
-
-@cindex Solaris
-@cindex gcc/g++ binaries for Solaris
-
-No; prep.ai.mit.edu and its mirror sites provide GCC binaries for
-Solaris. As a rule, these binaries are not updated as often as the
-sources are, so if you want the very latest version of gcc/g++, you
-may need to grab and install binaries for an older version and use it to
-bootstrap the latest version from source.
-
-@cindex gzip
-The latest gcc binaries on prep.ai.mit.edu and its mirror sites are for
-version 2.5.6 for Solaris on the Sparc, and version 2.4.5 for Solaris on
-Intel 386/486 machines (the Solaris/Intel binaries seem to be gone from
-prep but still exist on some mirrors).
-
-There are also binaries for ``gzip'', the GNU compression utility, which
-you'll need for uncompressing the binary distribution. On any GNU
-archive site, look in subdirectories @file{i486-sun-solaris2} or
-@file{sparc-sun-solaris2}.
-
-@cindex Solaris pkgadd utility
-The ftp directory @file{ftp://ftp.quintus.com/pub/GNU}
-contains various
-GNU and freeware programs for Solaris2.X running on the sparc. These are
-packaged to enable installation using the Solaris ``pkgadd'' utility.
-These include GNU emacs 19.27, gcc (and g++) 2.6.0, Perl 4.036, and others.
-
-@node g++ for other platforms, 1.x vs 2.x versions, g++ for Solaris 2.x, getting g++
-@section How do I get a copy of g++ for (some other platform)?
-
-@cindex Windows NT support
-As of gcc-2.7.x, there is Windows NT support in gcc. Some special
-utilities are required. See the INSTALL file from the distribution.
-If you're interested in GNU tools on Windows NT, see
-@file{http://www.cygnus.com/misc/gnu-win32/} on the WWW, or the
-anonymous FTP directory
-@file{ftp://ftp.cygnus.com/pub/gnu-win32/}.
-
-@cindex VMS support
-@cindex VAX
-@cindex VMS, g++/libg++ precompiled
-The standard gcc/g++ distribution includes VMS support. Since the
-FSF people don't use VMS, it's likely to be somewhat less solid than
-the Unix version. Precompiled copies of g++ and libg++ in VMS-installable
-form are available by FTP from
-@file{ftp://mango.rsmas.miami.edu/pub/VMS-gcc/}.
-
-@cindex MS-DOS support
-@cindex Delorie's gcc/g++
-@cindex DJGPP
-@cindex EMX
-There are two different versions of gcc/g++ for MS-DOS: EMX and DJGPP.
-EMX also works for OS/2 and is described later.
-DJGPP is DJ Delorie's port. It can be found on many FTP archive
-sites; try
-@file{ftp://ftp.coast.net/SimTel/vendors/djgpp/}
-or, for a complete list, see
-@file{http://www.delorie.com/djgpp/getting.html}.
-
-
-The latest version of DJGPP is 1.12.maint4, a port of gcc-2.6.3 plus
-support software. This version runs under Windows 3.x. There's
-also a beta-2.00 version.
-
-FSF sells floppies with DJGPP on them; see above for ordering software
-from the FSF.
-
-DJGPP has its own newsgroup: @file{comp.os.msdos.djgpp}.
-
-@cindex Amiga support
-For information on Amiga ports of gcc/g++, retrieve the file @*
-@file{ftp://prep.ai.mit.edu/pub/gnu/MicrosPorts/Amiga} @*
-or write
-to Markus M. Wild <wild@@nessie.cs.id.ethz.ch>, who I hope won't be too upset
-that I mentioned his name here.
-
-@cindex Atari ST support
-A port of gcc to the Atari ST can be found at @*
-@file{ftp://atari.archive.umich.edu/atari/Gnustuff/Tos}
-along with many
-other GNU programs. This version is usually the same as the latest FSF
-release. See the ``Software FAQ'' for the Usenet group
-@file{comp.sys.atari.st} for more information.
-
-@cindex EMX port
-@cindex gcc/2
-@cindex OS/2 support
-
-There are two different ports of gcc to OS/2, the
-so-called EMX port (which also runs on MS-DOS), and a port called
-``gcc/2''. The latter port is no longer supported, since the EMX
-port includes all of its functionality.
-The EMX port's C library attempts to provide a Unix-like environment.
-For more information ask around on @file{comp.os.os2.programmer.misc}.
-
-The EMX port is available by FTP from
-
-@example
-ftp://ftp.uni-stuttgart.de/pub/systems/os2/emx-0.9a
-ftp://src.doc.ic.ac.uk/pub/packages/os2/unix/emx09a
-ftp://ftp.informatik.tu-muenchen.de/pub/comp/os/os2/devtools/emx+gcc
-@end example
-
-Eberhard Mattes did the EMX port. His address is
-mattes@@azu.informatik.uni-stuttgart.de.
-
-@cindex Apple support
-@cindex Macintosh support
-
-I'm looking for more information on gcc/g++ support on the Apple
-Macintosh. Until recently, this FAQ did not provide such information,
-but FSF is no longer boycotting Apple as the League for Programming
-Freedom boycott has been dropped.
-
-Versions 1.37.1 and 2.3.3 of gcc were ported by Stan Shebs and are available
-at @*
-@file{ftp://ftp.cygnus.com/pub/mac}
-
-They are both interfaced to MPW.
-Stan is working on a version using the current (post-2.7) sources, contact
-him directly (shebs@@cygnus.com) for more information.
-
-@node 1.x vs 2.x versions, ,g++ for other platforms, getting g++
-@section But I can only find g++-1.42!
-
-``I keep hearing people talking about g++ 2.7.2 (or some other number
-starting with 2), but the latest version I can find is g++ 1.42.
-Where is it?''
-
-@cindex Objective-C
-@cindex g++, version number
-As of gcc 2.0, C, C++, and Objective-C as well are all combined into a
-single distribution called gcc. If you get gcc you already have g++. The
-standard installation procedure for any gcc version 2 compiler will
-install the C++ compiler as well.
-
-One could argue that we shouldn't even refer to "g++-2.x.y" but it's a
-convention. It means ``the C++ compiler included with gcc-2.x.y.''
-
-@node installation, User Problems, getting g++, Top
-@chapter Installation Issues and Problems
-
-@menu
-* gcc-2 + g++-1:: I can't build g++ 1.x.y with gcc-2.x.y!
-* what else do I need?:: OK, I've obtained gcc; what else do I need?
-* use GNU linker?:: Should I use the GNU linker, or should I use "collect"?
-* Use GNU assembler?:: Should I use the GNU assembler, or my vendor's assembler?
-* repository:: How do I use the new template repository code?
-* repo bugs:: Known bugs and problems with the repo patch
-* Use GNU C library?:: Should I use the GNU C library?
-* Global constructor problems:: Global constructors aren't being called
-* Strange assembler errors:: Strange assembler errors when linking C++ programs
-* Other problems building libg++:: Other problems building libg++
-* More size_t problems:: But I'm still having problems with size_t!
-* Rebuild libg++?:: Rebuild libg++ to go with my new g++?
-* co-existing versions:: I want several versions of g++ and libg++ to co-exist
-* Installing on Linux:: Trouble installing g++ and libg++ on Linux
-* Linux Slackware 3.0:: On my Linux system, the "hello world" program fails
-@end menu
-
-@node gcc-2 + g++-1, what else do I need?, , installation
-@section I can't build g++ 1.x.y with gcc-2.x.y!
-
-``I obtained gcc-2.x.y and g++ 1.x.y and I'm trying to build it, but
-I'm having major problems. What's going on?''
-
-@cindex g++, building
-If you wish to build g++-1.42, you must obtain gcc-1.42 first. The
-installation instructions for g++ version 1 leave a lot to be desired,
-unfortunately, and I would recommend that, unless you have a special
-reason for needing the 1.x compiler, that C++ users use the latest
-g++-2.x version, as it
-is the version that is being actively maintained.
-
-@cindex g++, template support
-@cindex Templates
-@cindex ANSI draft standard
-There is no template support in g++-1.x, and it is generally much further
-away from the ANSI draft standard than g++-2.x is.
-
-@node what else do I need?, use GNU linker?, gcc-2 + g++-1, installation
-@section OK, I've obtained gcc; what else do I need?
-
-@cindex libg++
-First off, you'll want libg++ as you can do almost nothing without it
-(unless you replace it with some other class library).
-
-@cindex GNU GAS
-@cindex GNU GAS [assembler]
-Second, depending on your platform, you may need "GAS", the GNU assembler,
-or the GNU linker (see next question).
-
-@cindex GNU gdb
-Finally, while it is not required, you'll almost certainly want the GNU
-debugger, gdb. The latest version is 4.15.1, released November 4, 1995. Other
-debuggers (like dbx, for example) will normally not be able to
-understand at least some of the debug information produced by g++.
-
-@node use GNU linker?, Use GNU assembler?, what else do I need?, installation
-@section Should I use the GNU linker, or should I use "collect"?
-
-@cindex Linker
-@cindex System VR3, linker
-@cindex System VR4, linker
-First off, for novices: special measures must be taken with C++ to arrange
-for the calling of constructors for global or static objects before the
-execution of your program, and for the calling of destructors at the end.
-(Exception: System VR3 and System VR4 linkers, Linux/ELF, and some other
-systems support user-defined
-segments; g++ on these systems requires neither the GNU linker nor
-collect. So if you have such a system, the answer is that you don't
-need either one).
-
-@cindex AT&T cfront
-@cindex Cfront-end
-@cindex collect program
-@cindex GNU linker
-@cindex GNU binutils
-If you have experience with AT&T's "cfront", this function is performed
-there by programs named "patch" or "munch". With GNU C++, it is performed
-either by the GNU linker or by a program known as "collect". The collect
-program is part of the gcc-2.x distribution; you can obtain the GNU linker
-separately as part of the "binutils" package. The latest version of
-binutils is 2.5.2, released November 2, 1994.
-
-(To be technical, it's "collect2"; there were originally several
-alternative versions of collect, and this is the one that survived).
-
-There are advantages and disadvantages to either choice.
-
-Advantages of the GNU linker:
-@cindex GNU linker, advantages
-@cindex GNU ld
-@cindex ld [GNU linker]
-
-It's faster than using collect -- collect basically runs the standard Unix
-linker on your program twice, inserting some extra code after the first
-pass to call the constructors. This is a sizable time penalty for large
-programs. The GNU linker does not require this extra pass.
-
-GNU ld reports undefined symbols using their true names, not the mangled
-names (but as of 2.7.0 so does collect).
-
-If there are undefined symbols, GNU ld reports which object file(s) refer to
-the undefined symbol(s).
-
-As of binutils version 2.2, on systems that use the so-called "a.out"
-debug format (e.g. Suns running SunOS 4.x), the GNU linker compresses
-the debug symbol table considerably.
-
-@cindex collect linker, advantages
-Advantages of collect:
-
-@cindex Shared libraries
-If your native linker supports shared libraries, you can use shared
-libraries with collect. This used to be a strong reason @emph{not}
-to use the GNU linker, but recent versions of GNU ld support linking
-with shared libraries on many platforms, and creating shared libraries
-on a few (such as Intel x86 systems that use ELF object format).
-
-Note: using existing shared libraries (X and libc, for example) works
-very nicely. Generating shared libraries from g++-compiled code is
-another matter, generally requiring OS-dependent tricks if it is
-possible at all. But progress has been made recently.
-
-As of 2.7.0, building C++ shared libraries should work fine on supported
-platforms (HPUX 9+, IRIX 5+, DEC UNIX (formerly OSF/1), SunOS 4,
-Linux/ELF
-and all targets using SVR4-style ELF shared libraries).
-
-@cindex Shared version of libg++
-However, as of libg++ 2.6.2, the libg++ distribution contains some
-patches to build libg++ as a shared library on some OSes (those listed
-above). Check the file @file{README.SHLIB} from that distribution.
-
-@cindex GNU linker, porting
-The GNU linker has not been ported to as many platforms as g++ has, so you
-may be forced to use collect.
-
-If you use collect, you don't need to get something extra and figure out
-how to install it; the standard gcc installation procedure will do it for you.
-
-In conclusion, I don't see a clear win for either alternative at this
-point. Take your pick.
-
-@node Use GNU assembler?, repository, use GNU linker?, installation
-@section Should I use the GNU assembler, or my vendor's assembler?
-
-@cindex Assembler
-@cindex GNU GAS
-This depends on your platform and your decision about the GNU linker. For
-most platforms, you'll need to use GAS if you use the GNU linker. For
-some platforms, you have no choice; check the gcc installation notes to
-see whether you must use GAS. But you can usually use the vendor's
-assembler if you don't use the GNU linker.
-
-The GNU assembler assembles faster than many native assemblers; however,
-on many platforms it cannot support the local debugging format.
-
-If you want to build shared libraries from gcc/g++ output and you are on
-a Sun, you must @emph{not} use GNU as, as it cannot do
-position-independent code correctly yet. @emph{Note}: I've been
-told that this problem has been fixed in the most recent binutils
-release, but I haven't checked this yet.
-
-On HPUX or IRIX, you must use GAS (and configure gcc with the
-@code{--with-gnu-as} option) to debug your programs. GAS is
-strongly recommended particularly on the HP platform because of
-limitations in the HP assembler.
-
-The GAS distribution has recently been merged with the binutils
-distribution, so the GNU assembler and linker are now together in
-this package (as of binutils version 2.5.1).
-
-@node repository, repo bugs, Use GNU assembler?, installation
-@section How do I use the new repository code?
-
-@cindex repo patch
-Because there is some disagreement about the details of the template
-repository mechanism, you'll need to obtain a patch from Cygnus Support
-to enable the 2.7.2 repository code. You can obtain the patch by
-anonymous FTP: @file{ftp://ftp.cygnus.com/pub/g++/gcc-2.7.2-repo.gz}.
-
-There are patches for 2.7.0 and 2.7.1 in the same directory, though
-if you're going to rebuild the compiler you should use the latest one.
-
-@cindex repo patch for BSD
-If you're running NetBSD or BSDI, the Cygnus repo patch is not quite
-correct. Tim Liddelow has made an alternate version available at
-@file{ftp://ftp.cst.com.au/pub/gcc-2.7.2-repo-bsd.gz}.
-
-After you've applied the patch, the @code{-frepo} flag will enable the
-repository mechanism. The flag works much like the existing
-@code{-fno-implicit-templates} flag, except that auxiliary files, with
-an @file{.rpo} extension, are built that specify what template
-expansions are needed. At link time, the (patched) collect program
-detects missing templates and recompiles some of the object files
-so that the required templates are expanded.
-
-Note that the mechanism differs from that of cfront in that template
-definitions still must be visible at the point where they are to be
-expanded. No assumption is made that @file{foo.C} contains template
-definitions corresponding to template declarations in @file{foo.h}.
-
-@cindex closure with repo
-@cindex template closure
-Jason Merrill writes: ``To perform closure on a set of objects, just try
-to link them together. It will fail, but as a side effect all needed
-instances will be generated in the objects.''
-
-@node repo bugs, Use GNU C library?, repository, installation
-@section Known bugs and problems with the repo patch
-
-``The @code{-frepo} won't expand templated friend functions!''
-
-This is a known bug; currently you'll have to explicitly instantiate
-friend functions when using @code{-frepo} due to this bug (in 2.7.0
-through 2.7.2 at least).
-
-With earlier versions of the repo patch, there was a bug that happens
-when you have given a quoted command line switch, something like
-
-@example
--D'MESSAGE="hello there"'
-@end example
-
-The repo code tries to recompile files using the same flags you
-originally specified, but doesn't quote arguments that need quoting,
-resulting in failures in some cases. This is no longer a problem
-with the 2.7.2 patch.
-
-@node Use GNU C library?, Global constructor problems, repo bugs, installation
-@section Should I use the GNU C library?
-
-@cindex GNU C library
-@cindex libg++
-At this point in time, no. The GNU C library is still very young, and
-libg++ still conflicts with it in some places. Use your native C library
-unless you know a lot about the gory details of libg++ and gnu-libc. This
-will probably change in the future.
-
-@node Global constructor problems, Strange assembler errors, Use GNU C library?, installation
-@section Global constructors aren't being called
-
-@cindex global constructors
-``I've installed gcc and it almost works, but constructors and
-destructors for global objects and objects at file scope aren't being
-called. What did I do wrong?''
-
-@cindex collect program
-It appears that you are running on a platform that requires you to
-install either "collect2" or the GNU linker, and you have done neither.
-For more information, see the section discussing the GNU linker
-(@xref{use GNU linker?}).
-
-@cindex constructor problems on Solaris
-@cindex Solaris, constructor problems
-On Solaris 2.x, you shouldn't need a collect program and GNU ld doesn't run.
-If your global constructors aren't being called, you may need to install
-a patch, available from Sun, to fix your linker. The number of the
-``jumbo patch'' that applies is 101409-03. Thanks to Russell Street
-(r.street@@auckland.ac.nz) for this info.
-
-@cindex IRIX, installing collect
-It appears that on IRIX, the collect2 program is not being installed
-by default during the installation process, though it is required;
-you can install it manually by executing
-
-@example
-make install-collect2
-@end example
-
-from the gcc source directory after installing the compiler. (I'm
-not certain for which versions of gcc this problem occurs, and whether
-it is still present).
-
-@node Strange assembler errors, Other problems building libg++, Global constructor problems, installation
-@section Strange assembler errors when linking C++ programs
-
-``I've installed gcc and it seemed to go OK, but when I attempt to link
-any C++ program, I'm getting strange errors from the assembler! How
-can that be?''
-
-The messages in question might look something like
-
-@example
-as: "/usr/tmp/cca14605.s", line 8: error: statement syntax
-as: "/usr/tmp/cca14605.s", line 14: error: statement syntax
-@end example
-
-(on a Sun, different on other platforms). The important thing is that
-the errors come out at the link step, @emph{not} when a C++ file is
-being compiled.
-
-@cindex nm program
-@cindex GNU nm program
-Here's what's going on: the collect2 program uses the Unix ``nm''
-program to obtain a list of symbols for the global constructors and
-destructors, and it builds a little assembly language module that
-will permit them all to be called. If you're seeing this symptom,
-you have an old version of GNU nm somewhere on your path. This old
-version prints out symbol names in a format that the collect2 program
-does not expect, so bad assembly code is generated.
-
-The solution is either to remove the old version of GNU nm from your
-path (and that of everyone else who uses g++), or to install a newer
-version (it is part of the GNU "binutils" package). Recent versions
-of GNU nm do not have this problem.
-
-@node Other problems building libg++, More size_t problems, Strange assembler errors, installation
-@section Other problems building libg++
-@cindex libg++ on Ultrix
-@cindex libg++ on SunOS
-
-``I am having trouble building libg++. Help!''
-
-On some platforms (for example, Ultrix), you may see errors complaining
-about being unable to open dummy.o. On other platforms (for example,
-SunOS), you may see problems having to do with the type of size_t.
-The fix for these problems is to make libg++ by saying "make CC=gcc".
-According to Per Bothner, it should no longer be necessary to specify
-"CC=gcc" for libg++-2.3.1 or later.
-
-``I built and installed libg++, but g++ can't find it. Help!''
-
-The string given to @file{configure} that identifies your system must
-be the same when you install libg++ as it was when you installed gcc.
-Also, if you used the @code{--prefix} option to install gcc somewhere
-other than @file{/usr/local}, you must use the same value for
-@code{--prefix} when installing libg++, or else g++ will not be able
-to find libg++.
-
-@cindex patch for libg++-2.6.2
-
-The toplevel Makefile in the libg++ 2.6.2 distribution is broken, which
-along with a bug in g++ 2.6.3 causes problems linking programs that use the
-libstdc++ complex classes. A patch for this is available from
-@file{ftp://ftp.cygnus.com//pub/g++/libg++-2.6.2-fix.gz}.
-
-@node More size_t problems, Rebuild libg++?, Other problems building libg++, installation
-@section But I'm @emph{still} having problems with @code{size_t}!
-
-@cindex Type of size_t
-``I did all that, and I'm @emph{still} having problems with disagreeing
-definitions of size_t, SIZE_TYPE, and the type of functions like
-@code{strlen}.''
-
-@cindex _G_config.h
-The problem may be that you have an old version of @file{_G_config.h}
-lying around. As of libg++ version 2.4, @file{_G_config.h}, since it is
-platform-specific, is inserted into a different directory; most include
-files are in @file{$prefix/lib/g++-include}, but this file now lives in
-@file{$prefix/$arch/include}. If, after upgrading your libg++, you find that
-there is an old copy of @file{_G_config.h} left around, remove it,
-otherwise g++ will find the old one first.
-
-@node Rebuild libg++?, co-existing versions, More size_t problems, installation
-@section Do I need to rebuild libg++ to go with my new g++?
-
-``After I upgraded g++ to the latest version, I'm seeing undefined
-symbols.''
-
-or
-
-``If I upgrade to a new version of g++, do I need to reinstall libg++?''
-
-@cindex Incompatibilities between g++ versions
-
-As a rule, the first two digits of your g++ and libg++ should be the
-same. Normally when you do an upgrade in the ``minor version number''
-(2.5.7 to 2.5.8, say) there isn't a need to rebuild libg++, but there
-have been a couple of exceptions in the past.
-
-@node co-existing versions, Installing on Linux, Rebuild libg++?, installation
-@section I want several versions of g++ and libg++ to co-exist.
-
-I recommend against using the @code{-V} flag to make multiple versions
-of gcc/g++ co-exist, unless they are different minor releases that can use
-the same compiled version of libg++. The reason is that all these
-versions will try to use the same libg++ version, which usually will
-not work.
-
-Instead, use the @code{--prefix} flag when configuring gcc. Use a
-different value of @code{--prefix} for each gcc version. Use the
-same value of @code{--prefix} when configuring libg++. You can then
-have any number of co-existing gcc/libg++ pairs. Symbolic links can
-be used so that users don't need to put all these different directories
-on their paths.
-
-One possible system to use is to set @code{--prefix} to
-@file{/usr/local/gcc-2.x.y} for version 2.x.y of gcc, and to link
-whichever version of gcc you wish to be the default into
-@file{/usr/local/bin/gcc} and @file{/usr/local/bin/g++}.
-
-@node Installing on Linux, Linux Slackware 3.0, co-existing versions, installation
-@section Trouble installing g++ and libg++ on Linux
-
-``I've downloaded the latest g++ and libg++ and I'm trying to install
-them on Linux, and I'm having lots of problems.''
-
-@cindex Linux
-FSF releases of libg++ won't install on Linux unchanged, since Linux
-uses are part of the libio library from libg++ for its standard C
-library, only this is changed in a way that it clashes with libg++.
-This means that you'll need a patched version of libg++ for it to
-work.
-
-If you want to upgrade to a new gcc/libg++ combination, the easiest
-thing to do is to grab the prebuilt versions of gcc and libg++ for Linux
-from @file{ftp://tsx-11.mit.edu/pub/linux/packages/GCC}. Follow the
-directions carefully. If you want to build from source, you'll need
-a patch for libg++; the Linux developers have named the patched libg++
-version libg++-2.7.1.3 and there is a patch file in the above-named
-directory.
-
-See @file{ftp://www.mrc-apu.cam.ac.uk/pub/linux/GCC-FAQ.html},
-the Linux GCC FAQ (though it may be a bit out of date; the Linux
-community moves quickly).
-
-@node Linux Slackware 3.0, , Installing on Linux, installation
-@section Problems with g++ on Linux Slackware 3.0
-
-@cindex Slackware
-@cindex Linux Slackware
-``When I try to compile the traditional Hello, world program on Linux,
-the compiler can't find @file{iostream.h}. What's the deal?''
-
-You probably have the Slackware 3.0 release. There's an error in the
-setup. It's easy to fix, though; log in as root, and make a symbolic
-link:
-
-@example
-ln -s /usr/lib/g++-include /usr/include/g++
-@end example
-
-@node User Problems, legalities, installation, Top
-@chapter User Problems
-
-@menu
-* missing virtual table:: Linker complains about missing virtual table
-* for scope:: gcc-2.7.0 breaks declarations in "for" statements!
-* const constructor:: g++ seems to want a const constructor. What's that?
-* unused parameter warnings:: How to silence ``unused parameter'' warnings
-* jump crosses initialization:: g++ objects to a declaration in a case statement
-* Demangler:: Where can I find a demangler?
-* static data members:: Linker reports undefined symbols for static data members
-* internal compiler error:: What does ``internal compiler error'' mean?
-* bug reports:: I think I have found a bug in g++.
-* porting to g++:: Porting programs from other compilers to g++
-* name mangling:: Why does g++ mangle names differently from other C++ compilers?
-* problems linking with other libraries:: Why can't g++ code link with code from other C++ compilers?
-* documentation:: What documentation exists for g++ 2.x?
-* templates:: Problems with the template implementation
-* undefined templates:: I get undefined symbols when using templates
-* redundant templates:: I get multiply defined symbols when using templates
-* Standard Template Library:: Does g++ support the Standard Template Library?
-* exceptions:: Problems and limitations with exceptions
-* namespaces:: Does g++ support namespaces?
-* agreement with standards:: What are the differences between g++ and the ARM specification of C++?
-* compiling standard libraries:: Will g++ compile InterViews? NIHCL? Rogue Wave?
-* debugging on SVR4 systems:: Debugging on SVR4 systems
-* debugging problems on Solaris:: debugging problems on Solaris
-* X11 conflicts with libg++:: Conflict over meaning of String
-* assignment to streams:: Why can't I assign one stream to another?
-@end menu
-
-@node missing virtual table, for scope, , User Problems
-@section Linker complains about missing virtual table
-
-``I'm getting a message complaining about an undefined virtual table. Is
-this a compiler bug?''
-
-(On platforms that run neither collect nor the GNU linker, like Solaris,
-you may see an odd undefined symbol like "_vt.3foo", where foo is a
-class name).
-
-This is probably because you are missing a definition for the first
-(non-inline) virtual function of the class. Since gcc-2.7.0, g++ uses
-a trick borrowed from cfront: the .o file containing the definition for
-the first non-inline virtual function for the class will also contain
-the virtual function table.
-
-@node for scope, const constructor, missing virtual table, User Problems
-@section gcc-2.7.0 breaks declarations in "for" statements!
-
-@cindex declarations in for statements
-@cindex for statements: declarations
-
-gcc-2.7.0 implements the new ANSI/ISO rule on the scope of variables
-declared in for loops.
-
-@example
-for (int i = 1; i <= 10; i++) @{
- // do something here
-@}
-foo(i);
-@end example
-
-In the above example, most existing C++ compilers would pass the
-value 11 to the function @code{foo}. In gcc 2.7 and in the ANSI/ISO
-working paper, the scope of @code{i} is only the for loop body, so
-this is an error. So that old code can be compiled, the new gcc has
-a flag @code{-fno-for-scope} that causes the old rule to be used.
-@cindex -fno-for-scope
-
-As of 2.7.1, the compiler attempts to issue warnings about code that
-has different meanings under the two sets of rules, but the code is
-not perfect: the intent was that code that has valid, but different,
-meanings under the ARM rules and the working paper rules would give
-warnings but have the new behavior, and this doesn't seem to happen.
-
-The @code{-ffor-scope} flag under 2.7.1 and 2.7.2 gives the 2.7.0 behavior.
-
-@node const constructor, unused parameter warnings, for scope, User Problems
-@section g++ seems to want a const constructor. What's that?
-
-gcc-2.7.1 introduced a bug that causes the compiler to ask for a
-const constructor (there's no such thing in C++) in certain situations
-where a const object appears in a template class. Most cases have been
-fixed in gcc-2.7.2, but unfortunately not all. Still, if you're running
-gcc-2.7.1 and have this problem, upgrade to 2.7.2; it is a vast improvement.
-
-@cindex ObjectSpace<STL>
-
-The default constructor for the template @code{pair} in ObjectSpace's
-implementation of STL triggers the bug in one place, for gcc 2.7.2. If
-you're using ObjectSpace<STL> and having this problem, simply
-change the default constructor from
-
-@example
-os_pair () : first (T1 ()), second (T2 ()) @{@}
-@end example
-
-to just
-
-@example
-os_pair () @{@}
-@end example
-
-Once this is done, ObjectSpace<STL> works fairly well.
-
-@node unused parameter warnings, jump crosses initialization, const constructor,User Problems
-@section How to silence ``unused parameter'' warnings
-
-@cindex -Wall
-@cindex -Wunused
-
-``When I use @code{-Wall} (or @code{-Wunused}), g++ warns about
-unused parameters. But the parameters have to be there, for use
-in derived class functions. How do I get g++ to stop complaining?''
-
-The answer is to simply omit the names of the unused parameters when
-defining the function. This makes clear, both to g++ and to readers
-of your code, that the parameter is unused. For example:
-
-@example
-int Foo::bar(int arg) @{ return 0; @}
-@end example
-
-will give a warning for the unused parameter @code{arg}. To suppress
-the warning write
-
-@example
-int Foo::bar(int) @{ return 0; @}
-@end example
-
-@node jump crosses initialization, Demangler, unused parameter warnings, User Problems
-@section g++ objects to a declaration in a case statement
-
-``The compiler objects to my declaring a variable in one of the branches
-of a case statement. Earlier versions used to accept this code. Why?''
-
-The draft standard does not allow a goto or a jump to a case label to
-skip over an initialization of a variable or a class object. For
-example:
-
-@example
-switch ( i ) @{
- case 1:
- Object obj(0);
- ...
- break;
- case 2:
- ...
- break;
-@}
-@end example
-
-The reason is that @code{obj} is also in scope in the rest of the switch
-statement.
-
-As of version 2.7.0, the compiler will object that the jump to the
-second case level crosses the initialization of @code{obj}. Older
-compiler versions would object only if class Object has a destructor.
-In either case, the solution is to add a set of curly braces around
-the case branch:
-
-@example
- case 1:
- @{
- Object obj(0);
- ...
- break;
- @}
-@end example
-
-@node Demangler, static data members, jump crosses initialization, User Problems
-@section Where can I find a demangler?
-
-@cindex demangler program
-A g++-compatible demangler named @code{c++filt} can be found in the
-@file{binutils} distribution. This distribution (which also contains
-the GNU linker) can be found at any GNU archive site.
-
-As of version 2.7.0, @code{c++filt} is included with gcc and is
-installed automatically. Even better, it is used by the @code{collect}
-linker, so you don't see mangled symbols anymore (except on platforms
-that use neither collect nor the GNU linker, like Solaris).
-
-@node static data members, internal compiler error, Demangler, User Problems
-@section Linker reports undefined symbols for static data members
-
-@cindex Static data members
-``g++ reports undefined symbols for all my static data members when I link,
-even though the program works correctly for compiler XYZ. What's going on?''
-
-The problem is almost certainly that you don't give definitions for
-your static data members. If you have
-
-@example
-class Foo @{
- ...
- void method();
- static int bar;
-@};
-@end example
-
-you have only declared that there is an int named Foo::bar and a member
-function named Foo::method that is defined somewhere. You still need to
-define @emph{both} method() and bar in some source file. According to
-the draft ANSI standard, you must supply an initializer, such as
-
-@example
-int Foo::bar = 0;
-@end example
-
-@noindent
-in one (and only one) source file.
-
-@node internal compiler error, bug reports, static data members, User Problems
-@section What does ``Internal compiler error'' mean?
-
-It means that the compiler has detected a bug in itself. Unfortunately,
-g++ still has many bugs, though it is a lot better than it used to be.
-If you see this message, please send in a complete bug report (see next
-section).
-
-@node bug reports, porting to g++, internal compiler error, User Problems
-@section I think I have found a bug in g++.
-
-@cindex Bug in g++, newly found
-``I think I have found a bug in g++, but I'm not sure. How do I know,
-and who should I tell?''
-
-@cindex Manual, for gcc
-First, see the excellent section on bugs and bug reports in the gcc manual
-(which is included in the gcc distribution). As a short summary of that
-section: if the compiler gets a fatal signal, for any input, it's a bug
-(newer versions of g++ will ask you to send in a bug report when they
-detect an error in themselves). Same thing for producing invalid
-assembly code.
-
-When you report a bug, make sure to describe your platform (the type of
-computer, and the version of the operating system it is running) and the
-version of the compiler that you are running. See the output of the
-command @code{g++ -v} if you aren't sure. Also provide enough code
-so that the g++ maintainers can duplicate your bug. Remember that the
-maintainers won't have your header files; one possibility is to send
-the output of the preprocessor (use @code{g++ -E} to get this). This
-is what a ``complete bug report'' means.
-
-I will add some extra notes that are C++-specific, since the notes from
-the gcc documentation are generally C-specific.
-
-@cindex g++ bug report
-First, mail your bug report to "bug-g++@@prep.ai.mit.edu". You may also
-post to @file{gnu.g++.bug}, but it's better to use mail, particularly if you
-have any doubt as to whether your news software generates correct reply
-addresses. Don't mail C++ bugs to bug-gcc@@prep.ai.mit.edu.
-
-@strong{News:} as I write this (late February 1996) the gateway
-connecting the bug-g++ mailing list and the @file{gnu.g++.bug} newsgroup
-is (temporarily?) broken. Please mail, do not post bug reports.
-
-@cindex libg++ bug report
-If your bug involves libg++ rather than the compiler, mail to
-bug-lib-g++@@prep.ai.mit.edu. If you're not sure, choose one, and if you
-guessed wrong, the maintainers will forward it to the other list.
-
-@cindex C++, reference books
-@cindex ARM [Annotated C++ Ref Manual]
-Second, if your program does one thing, and you think it should do
-something else, it is best to consult a good reference if in doubt.
-The standard reference is the draft working paper from the ANSI/ISO
-C++ standardization committee, which you can get on the net.
-For PostScript and PDF (Adobe Acrobat) versions, see the
-archive at @file{ftp://research.att.com/dist/stdc++/WP}. For HTML and ASCII
-versions, see @file{ftp://ftp.cygnus.com/pub/g++}. On the World Wide Web, see
-@file{http://www.cygnus.com/misc/wp/}.
-
-An older
-standard reference is "The Annotated C++ Reference Manual", by Ellis and
-Stroustrup (copyright 1990, ISBN #0-201-51459-1). This is what they're
-talking about on the net when they refer to ``the ARM''. But you should
-know that changes have been made to the language since then.
-
-The ANSI/ISO C++ standards committee have adopted some changes to the
-C++ language since the publication of the original ARM, and newer
-versions of g++ (2.5.x and later) support some of these changes, notably
-the mutable keyword (added in 2.5.0), the bool type (added in 2.6.0),
-and changes in the scope of variables defined in for statements (added
-in 2.7.0).
-You can obtain an addendum to the ARM explaining many of these changes by FTP
-from @file{ftp://ftp.std.com/AW/stroustrup2e/new_iso.ps}.
-
-@cindex AT&T cfront
-Note that the behavior of (any version of) AT&T's "cfront" compiler is
-NOT the standard for the language.
-
-@node porting to g++, name mangling, bug reports, User Problems
-@section Porting programs from other compilers to g++
-
-``I have a program that runs on <some other C++ compiler>, and I want
-to get it running under g++. Is there anything I should watch out
-for?''
-
-@cindex Porting to g++
-
-Note that g++ supports many of the newer keywords that have recently
-been added to the language. Your other C++ compiler may not support
-them, so you may need to rename variables and members that conflict
-with these keywords.
-
-There are two other reasons why a program that worked under one compiler
-might fail under another: your program may depend on the order of
-evaluation of side effects in an expression, or it may depend on the
-lifetime of a temporary (you may be assuming that a temporary object
-"lives" longer than the standard guarantees). As an example of the
-first:
-
-@example
-void func(int,int);
-
-int i = 3;
-func(i++,i++);
-@end example
-
-@cindex Order of evaluation, problems in porting
-Novice programmers think that the increments will be evaluated in strict
-left-to-right order. Neither C nor C++ guarantees this; the second
-increment might happen first, for example. func might get 3,4, or it
-might get 4,3.
-
-@cindex Classes, problems in porting
-@cindex Problems in porting, class
-The second problem often happens with classes like the libg++ String
-class. Let's say I have
-
-@example
-String func1();
-void func2(const char*);
-@end example
-
-and I say
-
-@example
-func2(func1());
-@end example
-
-because I know that class String has an "operator const char*". So what
-really happens is
-
-@example
-func2(func1().convert());
-@end example
-
-@cindex temporaries
-where I'm pretending I have a convert() method that is the same as the
-cast. This is unsafe in g++ versions before 2.6.0, because the
-temporary String object may be deleted after its last use (the call to
-the conversion function), leaving the pointer pointing to garbage, so by
-the time func2 is called, it gets an invalid argument.
-
-@cindex ANSI draft standard
-Both the cfront and the old g++ behaviors are legal according to the ARM,
-but the powers that be have decided that compiler writers were given
-too much freedom here.
-
-The ANSI C++ committee has now come to a resolution of the lifetime of
-temporaries problem: they specify that temporaries should be deleted at
-end-of-statement (and at a couple of other points). This means that g++
-versions before 2.6.0 now delete temporaries too early, and cfront
-deletes temporaries too late. As of version 2.6.0, g++ does things
-according to the new standard.
-
-@cindex Scope, problems in porting
-@cindex Problems in porting, scope
-For now, the safe way to write such code is to give the temporary a name,
-which forces it to live until the end of the scope of the name. For
-example:
-
-@example
-String& tmp = func1();
-func2(tmp);
-@end example
-
-Finally, like all compilers (but especially C++ compilers, it seems),
-g++ has bugs, and you may have tweaked one. If so, please file a bug
-report (after checking the above issues).
-
-@node name mangling, problems linking with other libraries, porting to g++, User Problems
-@section Why does g++ mangle names differently from other C++ compilers?
-
-See the answer to the next question.
-@cindex Mangling names
-
-@node problems linking with other libraries, documentation, name mangling, User Problems
-@section Why can't g++ code link with code from other C++ compilers?
-
-``Why can't I link g++-compiled programs against libraries compiled by
-some other C++ compiler?''
-
-@cindex Mangling names
-@cindex Cygnus Support
-Some people think that,
-if only the FSF and Cygnus Support folks would stop being
-stubborn and mangle names the same way that, say, cfront does, then any
-g++-compiled program would link successfully against any cfront-compiled
-library and vice versa. Name mangling is the least of the problems.
-Compilers differ as to how objects are laid out, how multiple inheritance
-is implemented, how virtual function calls are handled, and so on, so if
-the name mangling were made the same, your programs would link against
-libraries provided from other compilers but then crash when run. For this
-reason, the ARM @emph{encourages} compiler writers to make their name mangling
-different from that of other compilers for the same platform.
-Incompatible libraries are then detected at link time, rather than at run
-time.
-@cindex ARM [Annotated C++ Ref Manual]
-@cindex Compiler differences
-
-@node documentation, templates, problems linking with other libraries, User Problems
-@section What documentation exists for g++ 2.x?
-
-@cindex g++, documentation
-Relatively little.
-While the gcc manual that comes with the distribution has some coverage
-of the C++ part of the compiler, it focuses mainly on the C compiler
-(though the information on the ``back end'' pertains to C++ as well).
-Still, there is useful information on the command line options and the
-#pragma interface and #pragma implementation directives in the manual,
-and there is a useful section on template instantiation in the 2.6 version.
-There is a Unix-style manual entry, "g++.1", in the gcc-2.x
-distribution; the information here is a subset of what is in the manual.
-
-You can buy a nicely printed and bound copy of this manual from the FSF;
-see above for ordering information.
-
-For versions 2.6.2 and later, the gcc/g++ distribution contains the
-gcc manual in PostScript. Also,
-Postscript versions of GNU documentation in U.S. letter format
-are available by anonymous FTP from @file{ftp://primus.com/pub/gnu-ps}.
-The same, in A4 format, are on @*
-@file{ftp://liasun3.epfl.ch/pub/gnu/ps-doc}.
-
-A draft of a document describing the g++ internals appears in the gcc
-distribution (called g++int.texi); it is incomplete but gives lots of
-information.
-
-@node templates, undefined templates, documentation, User Problems
-@section Problems with the template implementation
-
-@cindex g++, template support
-@cindex Templates
-
-g++ does not implement a separate pass to instantiate template functions
-and classes at this point; for this reason, it will not work, for the most
-part, to declare your template functions in one file and define them in
-another. The compiler will need to see the entire definition of the
-function, and will generate a static copy of the function in each file
-in which it is used.
-
-(The experimental template repository code (see @xref{repository}) that
-can be added to 2.7.0 or later does implement a separate pass, but there
-is still no searching of files that the compiler never saw).
-
-@cindex -fno-implicit-templates
-For version 2.6.0, however, a new switch @code{-fno-implicit-templates}
-was added; with this switch, templates are expanded only under user
-control. I recommend that all g++ users that use templates read the
-section ``Template Instantiation'' in the gcc manual (version 2.6.x
-and newer). g++ now supports explicit template expansion using the
-syntax from the latest C++ working paper:
-
-@example
-template class A<int>;
-template ostream& operator << (ostream&, const A<int>&);
-@end example
-
-@cindex template limitations
-As of version 2.6.3, there are still a few limitations in the template
-implementation besides the above (thanks to Jason Merrill for this info):
-These are still present in version 2.7.2, but a new implementation of
-templates planned for version 2.8 will eliminate them.
-
-@enumerate 1
-@item
-Static data member templates are not supported. You can work around
-this by explicitly declaring the static variable for each template
-specialization:
-
-@example
-template <class T> struct A @{
- static T t;
-@};
-
-template <class T> T A<T>::t = 0; // gets bogus error
-int A<int>::t = 0; // OK (workaround)
-@end example
-
-(still a limitation in 2.7.2)
-
-@item
-Template member names are not available when defining member function
-templates.
-
-@example
-template <class T> struct A @{
- typedef T foo;
- void f (foo);
- void g (foo arg) @{ ... @}; // this works
-@};
-
-template <class T> void A<T>::f (foo) @{ @} // gets bogus error
-@end example
-
-@item
-Templates are instantiated using the parser. This results in two
-problems:
-
-a) Class templates are instantiated in some situations where such
-instantiation should not occur.
-
-@example
-template <class T> class A @{ @};
-A<int> *aip = 0; // should not instantiate A<int> (but does)
-@end example
-
-b) Function templates cannot be inlined at the site of their
-instantiation.
-
-@example
-template <class T> inline T min (T a, T b) @{ return a < b ? a : b; @}
-
-void f () @{
- int i = min (1, 0); // not inlined
-@}
-
-void g () @{
- int j = min (1, 0); // inlined
-@}
-@end example
-
-A workaround that works in version 2.6.1 and later is to specify
-
-@example
-extern template int min (int, int);
-@end example
-
-before @code{f()}; this will force it to be instantiated (though not
-emitted).
-
-@item
-Member function templates are always instantiated when their containing
-class is. This is wrong.
-@end enumerate
-
-@node undefined templates, redundant templates, templates, User Problems
-@section I get undefined symbols when using templates
-
-(Thanks to Jason Merrill for this section).
-
-@cindex template instantiation
-g++ does not automatically instantiate templates defined in other files.
-Because of this, code written for cfront will often produce undefined
-symbol errors when compiled with g++. You need to tell g++ which template
-instances you want, by explicitly instantiating them in the file where they
-are defined. For instance, given the files
-
-@file{templates.h}:
-@example
-template <class T>
-class A @{
-public:
- void f ();
- T t;
-@};
-
-template <class T> void g (T a);
-@end example
-
-@file{templates.cc}:
-@example
-#include "templates.h"
-
-template <class T>
-void A<T>::f () @{ @}
-
-template <class T>
-void g (T a) @{ @}
-@end example
-
-
-main.cc:
-@example
-#include "templates.h"
-
-main ()
-@{
- A<int> a;
- a.f ();
- g (a);
-@}
-@end example
-
-compiling everything with @code{g++ main.cc templates.cc} will result in
-undefined symbol errors for @samp{A<int>::f ()} and @samp{g (A<int>)}. To
-fix these errors, add the lines
-
-@example
-template class A<int>;
-template void g (A<int>);
-@end example
-
-to the bottom of @samp{templates.cc} and recompile.
-
-@node redundant templates, Standard Template Library, undefined templates, User Problems
-@section I get multiply defined symbols using templates
-
-You may be running into a bug that was introduced in version 2.6.1
-(and is still present in 2.6.3) that generated external linkage
-for templates even when neither @code{-fexternal-templates} nor
-@code{-fno-implicit-templates} is specified. There is a patch for
-this problem at @*
-@file{ftp://ftp.cygnus.com/pub/g++/gcc-2.6.3-template-fix}.
-
-I recommend either applying the patch or
-using @code{-fno-implicit-templates}
-together with explicit template instantiation as described in previous
-sections.
-
-This bug is fixed in 2.7.0.
-
-@node Standard Template Library, exceptions, redundant templates, User Problems
-@section Does g++ support the Standard Template Library?
-
-From Per Bothner:
-
-@cindex STL
-@cindex Standard Template Library
-The Standard Template Library (STL) uses many of the extensions that the
-ANSI/ISO committee has made to templates, and g++ doesn't support
-some of these yet. So if you grab HP's free implementation of STL it
-isn't going to work. However, starting with libg++-2.6.2 libg++ contains a
-hacked version of STL, based on work by Carsten Bormann, which permits
-g++ to compile at least the containers. A full implementation is
-going to need improved template support, which will take a while yet
-(2.8.0 will compile the HP version successfully, except for a couple
-of easily fixed places where the HP code violates the draft standard).
-
-Actually, the hacked STL and gcc-2.7.2 work quite well; I've succeeded
-in making significant use of it.
-Almost all of the ObjectSpace examples (a set of
-over 200 simple examples of STL usage) now work.
-
-There are several commercial suppliers of STL implementations;
-ObjectSpace's version supports gcc-2.7.x.
-
-Mumit Khan has produced an ``STL newbie guide'' with lots of information
-on using STL with gcc. See
-
-@file{http://www.xraylith.wisc.edu/~khan/software/stl/STL.newbie.html}
-
-@node exceptions, namespaces, Standard Template Library, User Problems
-@section Problems and limitations with exceptions
-
-Recent g++ versions provide limited support for exceptions. You must
-provide the @code{-fhandle-exceptions} flag to enable exception
-handling. As of version 2.7.2, exceptions may not work properly
-(and you may get odd error messages when compiling) if you turn
-on optimization (the @code{-O} flag).
-
-You must give the @code{-frtti} switch to enable catching
-of derived exception objects with handlers for the base exception class;
-if @code{-frtti} is not given, only exact type matching works.
-
-For exception handling to work with 2.7.0 your CPU must be a SPARC,
-RS6000/PowerPC, 386/486/Pentium, or ARM. Release 2.7.1 added support
-for the Alpha, and ``m68k is rumored to work on some platforms''
-and ``VAX may also work'' (according to Mike Stump).
-@emph{It still doesn't work on HP-PA or MIPS platforms.}
-
-@node namespaces, agreement with standards, exceptions, User Problems
-@section Does g++ support namespaces?
-
-As of version 2.7.2, g++ recognizes the keywords @code{namespace} and
-@code{using}, and there is some rudimentary code present, but almost
-nothing connected with namespaces works yet. It appears that this will
-still be true when 2.8.0 is released.
-
-@node agreement with standards, compiling standard libraries, namespaces, User Problems
-@section What are the differences between g++ and the ARM specification of C++?
-
-@cindex ARM [Annotated C++ Ref Manual]
-@cindex exceptions
-As of version 2.7.0, g++ has exception support on most but not all
-platforms
-(no support on MIPS-based platforms yet), but
-it doesn't work right if optimizaton is enabled, which means the
-exception
-implementation is still
-not really ready for production use.
-
-
-@cindex mutable
-Some features that the ANSI/ISO standardization committee has voted in
-that don't appear in the ARM are supported, notably the @code{mutable}
-keyword, in version 2.5.x. 2.6.x adds support for the built-in boolean
-type @code{bool}, with constants @code{true} and @code{false}. The
-beginnings of run-time type identification are present, so there are
-more reserved words: @code{typeid}, @code{static_cast},
-@code{reinterpret_cast}, @code{const_cast}, and @code{dynamic_cast}.
-
-@cindex g++ bugs
-As with any beta-test compiler, there are bugs. You can help improve
-the compiler by submitting detailed bug reports.
-
-One of the weakest areas of g++ other than templates is the resolution
-of overloaded functions and operators in complex cases. The usual
-symptom is that in a case where the ARM says that it is ambiguous which
-function should be chosen, g++ chooses one (often the first one
-declared). This is usually not a problem when porting C++ code from
-other compilers to g++, but shows up as errors when code developed under
-g++ is ported to other compilers. (I believe this is no longer a
-significant problem in 2.7.0).
-
-[A full bug list would be very long indeed, so I won't put one here.
-I may add a list of frequently-reported bugs and "non-bugs" like the
-static class members issue mentioned above].
-
-@node compiling standard libraries, debugging on SVR4 systems, agreement with standards, User Problems
-@section Will g++ compile InterViews? The NIH class library? Rogue Wave?
-
-@cindex NIH class library
-@cindex NIHCL with g++
-The NIH class library uses a non-portable, compiler-dependent hack
-to initialize itself, which makes life difficult for g++ users.
-It will not work without modification, and I don't know what modifications
-are required or whether anyone has done them successfully.
-
-In short, it's not going to happen any time soon (previous FAQs referred
-to patches that a new NIHCL release would hopefully contain, but this
-hasn't happened).
-
-@strong{Note:} I thought I saw an item indicating that someone
-@emph{had} patched NIHCL to work with g++. Any pointers?
-
-@cindex InterViews
-I think that as of version 2.5.6, the standard g++ will compile the
-standard 3.1 InterViews completely successfully.
-Note that you'll need the @code{-fno-for-scope} flag
-if you use gcc-2.7.0; with 2.7.2 you may be able to omit this flag
-but you'll get warnings.
-
-@cindex Rogue Wave
-According to Jason Merrill, gcc-2.7.0 and newer works with Rogue
-Wave's @code{tools.h++} class library, but you may want to grab
-@file{ftp://ftp.cygnus.com/pub/g++/Tools.h++-6.1-patch}. Again,
-you'll need the @code{-fno-for-scope} flag since Rogue Wave hasn't
-fixed their code to comply with the new standard yet.
-
-@node debugging on SVR4 systems, debugging problems on Solaris, compiling standard libraries, User Problems
-@section Debugging on SVR4 systems
-@cindex System VR4, debugging
-
-``How do I get debugging to work on my System V Release 4 system?''
-
-Most systems based on System V Release 4 (except Solaris) encode symbolic
-debugging information in a format known as `DWARF'.
-
-Although the GNU C compiler already knows how to write out symbolic debugging
-information in the DWARF format, the GNU C++ compiler does not yet have this
-feature, nor is it likely to in the immediate future.
-
-Ron Guilmette has done a great deal of work to try to get the GNU C++ compiler
-to produce DWARF format symbolic debugging information (for C++ code)
-but he gave up on the project because of a lack of funding and/or interest
-from the g++ user community. If you have a strong desire to see this project
-completed, contact Ron at <rfg@@netcom.com>.
-
-@cindex stabs
-@cindex --with-stabs
-
-In the meantime, you @emph{can} get g++ debugging under SVR4 systems by
-configuring gcc with the @code{--with-stabs} option. This causes gcc to
-use an alternate debugging format, one more like that used under SunOS4.
-You won't need to do anything special to GDB; it will always understand
-the ``stabs'' format.
-
-@node debugging problems on Solaris, X11 conflicts with libg++, debugging on SVR4 systems, User Problems
-@section debugging problems on Solaris
-
-``I'm on Solaris, and gdb says it doesn't know about some of my local
-symbols. Help!''
-
-This problem was introduced in gcc 2.7.2, I believe; debug symbols for
-locals that aren't declared at the beginning of a block come out in the
-wrong order, and gdb can't find such symbols.
-
-There are several patches floating around to correct this problem. It
-is, however, fixed in gcc-2.7.3, which should be available very shortly
-(it may already be available by the time you read this).
-
-@node X11 conflicts with libg++, assignment to streams, debugging problems on Solaris, User Problems
-@section X11 conflicts with libg++ in definition of String
-@cindex String, conflicts in definition
-
-``X11 and Motif define String, and this conflicts with the String class
-in libg++. How can I use both together?''
-
-One possible method is the following:
-
-@example
-#define String XString
-#include <X11/Intrinsic.h>
-/* include other X11 and Motif headers */
-#undef String
-@end example
-
-and remember to use the correct @code{String} or @code{XString} when
-you declare things later.
-
-@node assignment to streams, ,X11 conflicts with libg++, User Problems
-@section Why can't I assign one stream to another?
-
-[ Thanks to Per Bothner and Jerry Schwarz for this section. ]
-
-Assigning one stream to another seems like a reasonable thing to do, but
-it's a bad idea. Usually, this comes up because people want to assign
-to @code{cout}. This is poor style, especially for libraries, and is
-contrary to good object-oriented design. (Libraries that write directly
-to @code{cout} are less flexible, modular, and object-oriented).
-
-The iostream classes do not allow assigning to arbitrary streams, because
-this can violate typing:
-
-@example
-ifstream foo ("foo");
-istrstream str(...);
-foo = str;
-foo->close (); /* Oops! Not defined for istrstream! */
-@end example
-
-@cindex assignment to cout
-
-The original cfront implementation of iostreams by Jerry Schwarz allows
-you to assign to @code{cin}, @code{cout}, @code{cerr}, and @code{clog},
-but this is not part of the draft standard for iostreams and generally
-isn't considered a good idea, so standard-conforming code shouldn't use
-this technique.
-
-The GNU implementation of iostream did not support assigning to
-@code{cin}, @code{cout}, @code{cerr}, and @code{clog}
-for quite a while, but it now does, for backward
-compatibility with cfront iostream (versions 2.6.1 and later of libg++).
-
-The ANSI/ISO C++ Working Paper does provide ways of changing the
-streambuf associated with a stream. Assignment isn't allowed;
-there is an explicit named member that must be used.
-
-However, it is not wise to do this, and the results are confusing. For
-example: @code{fstream::rdbuf} is supposed to return the @emph{original}
-filebuf, not the one you assigned. (This is not yet implemented in GNU
-iostream.) This must be so because @code{fstream::rdbuf} is defined to
-return a @code{filebuf *}.
-
-@node legalities, index, User Problems, Top
-@chapter What are the rules for shipping code built with g++ and libg++?
-@cindex Shipping rules
-@cindex GPL [GNU Public License]
-
-``Is it is possible to distribute programs for profit that are created
-with g++ and use the g++ libraries?''
-
-I am not a lawyer, and this is not legal advice. In any case, I have
-little interest in telling people how to violate the spirit of the
-GNU licenses without violating the letter. This section tells you
-how to comply with the intention of the GNU licenses as best I understand
-them.
-
-@cindex FSF [Free Software Foundation]
-The FSF has no objection to your making money. Its only interest is that
-source code to their programs, and libraries, and to modified versions of
-their programs and libraries, is always available.
-
-The short answer is that you do not need to release the source to
-your program, but you can't just ship a stripped executable either,
-unless you use only the subset of libg++ that includes the iostreams
-classes (see discussion below) or the new libstdc++ library (available
-in libg++ 2.6.2 and later).
-
-Compiling your code with a GNU compiler does not affect its copyright;
-it is still yours. However, in order to ship code that links in a GNU
-library such as libg++ there are certain rules you must follow. The
-rules are described in the file COPYING.LIB that accompanies gcc
-distributions; it is also included in the libg++ distribution.
-See that file for the exact rules. The agreement is called the
-Library GNU Public License or LGPL. It is much "looser" than the
-GNU Public License, or GPL, that covers must GNU programs.
-
-@cindex libg++, shipping code
-Here's the deal: let's say that you use some version of libg++,
-completely unchanged, in your software, and you want to ship only
-a binary form of your code. You can do this, but there are several
-special requirements. If you want to use libg++ but ship only object
-code for your code, you have to ship source for libg++ (or ensure
-somehow that your customer already has the source for the exact
-version you are using), and ship your application in linkable form.
-You cannot forbid your customer from reverse-engineering or extending
-your program by exploiting its linkable form.
-
-@cindex libg++, modifying
-Furthermore, if you modify libg++ itself, you must provide source
-for your modifications (making a derived class does not count as
-modifying the library -- that is "a work that uses the library").
-
-@cindex special copying conditions for iostreams
-For certain portions of libg++ that implement required parts of the C++
-language (such as iostreams and other standard classes), the FSF has
-loosened the copyright requirement still more by adding the ``special
-exception'' clause, which reads as follows:
-
-@quotation
-As a special exception, if you link this library with files
-compiled with GCC to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License.
-@end quotation
-
-If your only use of libg++ uses code with this exception, you may ship
-stripped executables or license your executables under different
-conditions without fear of violating an FSF copyright. It is the intent
-of FSF and Cygnus that, as the other classes required by the ANSI/ISO
-draft standard are developed, these will also be placed under this
-``special exception'' license.
-The code in the new libstdc++ library, intended to implement standard
-classes as defined by ANSI/ISO, is also licensed this way.
-
-To avoid coming under the influence of the LGPL, you can link with
-@file{-liostream} rather than @file{-lg++} (for version 2.6.x and
-earlier), or @file{-lstdc++} now that it is available. In version 2.7.0
-all the standard classes are in @file{-lstdc++}; you can do the link
-step with @code{c++} instead of @code{g++} to search only the
-@file{-lstdc++} library and avoid the LGPL'ed code in @file{-lg++}.
-
-If you wish to discuss legal issues connected with GNU software on the
-net, please use @file{gnu.misc.discuss}, not the technical newsgroups.
-
-@node index, , legalities, Top
-@comment node-name, next, previous, up
-@appendix Concept Index
-
-@printindex cp
-
-@page
-@contents
-@bye
diff --git a/contrib/libg++/libg++/genclass/ChangeLog b/contrib/libg++/libg++/genclass/ChangeLog
deleted file mode 100644
index 0cc12419064b..000000000000
--- a/contrib/libg++/libg++/genclass/ChangeLog
+++ /dev/null
@@ -1,27 +0,0 @@
-Thu Nov 4 11:18:05 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * Makefile.in (install): Use INSTALL_PROGRAM for genclass.
-
-Wed Aug 12 12:52:16 1992 Per Bothner (bothner@cygnus.com)
-
- * genclass.sh: Don't use RCS id as version number. Instead
- use libg++ version number.
- * Makefile.in (genclass): Hackery to extract libg++ version
- number from ../Makefile and insert it into genclass script.
-
-Mon Aug 10 11:38:48 1992 Ian Lance Taylor (ian@dumbest.cygnus.com)
-
- * Makefile.in: always create installation directories.
-
-Thu May 14 15:10:18 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * genclass.sh: Move comments inside sed script (which is
- not supported by all versions of sed) outside.
- * Makefile.in: Update IDIR->gxx_includedir.
-
-Wed Feb 26 18:04:40 1992 K. Richard Pixley (rich@cygnus.com)
-
- * Makefile.in, configure.in: removed traces of namesubdir,
- -subdirs, $(subdir), $(unsubdir), some rcs triggers. Forced
- copyrights to '92, changed some from Cygnus to FSF.
-
diff --git a/contrib/libg++/libg++/genclass/Makefile.in b/contrib/libg++/libg++/genclass/Makefile.in
deleted file mode 100644
index c6a04f5f4816..000000000000
--- a/contrib/libg++/libg++/genclass/Makefile.in
+++ /dev/null
@@ -1,23 +0,0 @@
-# Makefile for g++ library genclass test
-
-srcdir = .
-
-#### package, host, target, and site dependent Makefile fragments come in here.
-##
-
-genclass: $(srcdir)/genclass.sh
- echo "/^PROTODIR=/c\\" > sedscript
- echo "PROTODIR=$$\{PROTODIR-$(gxx_includedir)/gen\}" >> sedscript
- sed <../Makefile -n -e '/VERSION/s/LIBG++_DIST_VERSION *= *\(.*\)/s|<VERSION>|\1|/p' >> sedscript
- sed -f sedscript < $(srcdir)/genclass.sh > genclass.tmp
- chmod 0755 genclass.tmp
- rm -f sedscript
- mv genclass.tmp genclass
-
-gentest: $(srcdir)/gentest.sh $(srcdir)/expected.out
- $(srcdir)/gentest.sh > my.out 2>&1
- diff $(srcdir)/expected.out my.out
-
-.PHONY: install
-install:
- $(INSTALL_PROGRAM) genclass $(bindir)/genclass
diff --git a/contrib/libg++/libg++/genclass/configure.in b/contrib/libg++/libg++/genclass/configure.in
deleted file mode 100644
index 6e237d716a86..000000000000
--- a/contrib/libg++/libg++/genclass/configure.in
+++ /dev/null
@@ -1,26 +0,0 @@
-# This file is a shell script fragment that supplies the information
-# necessary to tailor a template configure script into the configure
-# script appropriate for this directory. For more information, check
-# any existing configure script.
-
-configdirs=""
-srctrigger=genclass.sh
-srcname="old libg++ template expander"
-
-target_makefile_frag=../target-mkfrag
-package_makefile_frag=Make.pack
-
-# per-host:
-
-# per-target:
-
-
-TOLIBGXX=../
-CLEAN='genclass *.h *.cc my.out'
-ALL=genclass
-
-(. ${srcdir}/../config.shared) >${package_makefile_frag}
-
-# post-target:
-
-rm -f ${package_makefile_frag}
diff --git a/contrib/libg++/libg++/genclass/expected.out b/contrib/libg++/libg++/genclass/expected.out
deleted file mode 100644
index cecc3cd3c1bd..000000000000
--- a/contrib/libg++/libg++/genclass/expected.out
+++ /dev/null
@@ -1,1027 +0,0 @@
----------- genclass -usage ----------
-usage:
- genclass -list [proto ...]
- genclass -catalog [proto ...]
- genclass type1 {ref|val} proto [out_prefix]
- genclass -2 type1 {ref|val} type2 {ref|val} proto [out_prefix]
------------
----------- genclass -version ----------
-genclass: version 2.1
------------
----------- genclass -requires ----------
-
------------
----------- genclass -catalog ----------
-Catalog of genclass class templates
-directories searched:
- /usr/latest/lib/gcc/sun4/1.95.01/g++-include/gen
- /play/hgs/libg++-1.90/gentests
-selecting: all
-classes available:
- AVLMap AVLSet AVec BSTSet Bag CHBag CHMap CHSet DLDeque DLList
- Deque FPQueue FPStack FPlex List MPlex Map OSLBag OSLSet OXPBag
- OXPSet PHPQ PQ Plex Queue RAVLMap RPlex SLBag SLList SLQueue
- SLSet SLStack Set SplayBag SplayMap SplayPQ SplaySet Stack VHBag
- VHMap VHSet VOHSet VQueue VStack Vec XPBag XPDeque XPPQ XPQueue
- XPSet XPStack XPlex defs
-
------------
----------- genclass -list ----------
-AVLMap
-AVLSet
-AVec
-BSTSet
-Bag
-CHBag
-CHMap
-CHSet
-DLDeque
-DLList
-Deque
-FPQueue
-FPStack
-FPlex
-List
-MPlex
-Map
-OSLBag
-OSLSet
-OXPBag
-OXPSet
-PHPQ
-PQ
-Plex
-Queue
-RAVLMap
-RPlex
-SLBag
-SLList
-SLQueue
-SLSet
-SLStack
-Set
-SplayBag
-SplayMap
-SplayPQ
-SplaySet
-Stack
-VHBag
-VHMap
-VHSet
-VOHSet
-VQueue
-VStack
-Vec
-XPBag
-XPDeque
-XPPQ
-XPQueue
-XPSet
-XPStack
-XPlex
-defs
------------
----------- genclass -catalog PQ Set ----------
-Catalog of genclass class templates
-directories searched:
- /usr/latest/lib/gcc/sun4/1.95.01/g++-include/gen
- /play/hgs/libg++-1.90/gentests
-selecting: PQ Set
-classes available:
- AVLSet BSTSet CHSet OSLSet OXPSet PHPQ PQ SLSet Set SplayPQ
- SplaySet VHSet VOHSet XPPQ XPSet
-
------------
----------- genclass -list Map Stack ----------
-AVLMap
-CHMap
-FPStack
-Map
-RAVLMap
-SLStack
-SplayMap
-Stack
-VHMap
-VStack
-XPStack
------------
-Generating: genclass int ref AVLMap
-genclass: the AVLMap class requires the -2 syntax for the 2nd type
-usage:
- genclass -list [proto ...]
- genclass -catalog [proto ...]
- genclass type1 {ref|val} proto [out_prefix]
- genclass -2 type1 {ref|val} type2 {ref|val} proto [out_prefix]
-Generation for int-AVLMap failed
-
-genclass int ref AVLMap fig
-genclass: the AVLMap class requires the -2 syntax for the 2nd type
-usage:
- genclass -list [proto ...]
- genclass -catalog [proto ...]
- genclass type1 {ref|val} proto [out_prefix]
- genclass -2 type1 {ref|val} type2 {ref|val} proto [out_prefix]
-Generation for int-AVLMap failed
-
-Generating: genclass int ref AVLSet
-Checking for badsub
-removing int.AVLSet.h int.AVLSet.cc
-
-genclass int ref AVLSet fig
-Checking for badsub
-removing figAVLSet.h figAVLSet.cc
-
-Generating: genclass int ref AVec
-Checking for badsub
-removing int.AVec.h int.AVec.cc
-
-genclass int ref AVec fig
-Checking for badsub
-removing figAVec.h figAVec.cc
-
-Generating: genclass int ref BSTSet
-Checking for badsub
-removing int.BSTSet.h int.BSTSet.cc
-
-genclass int ref BSTSet fig
-Checking for badsub
-removing figBSTSet.h figBSTSet.cc
-
-Generating: genclass int ref Bag
-Checking for badsub
-removing int.Bag.h int.Bag.cc
-
-genclass int ref Bag fig
-Checking for badsub
-removing figBag.h figBag.cc
-
-Generating: genclass int ref CHBag
-Checking for badsub
-removing int.CHBag.h int.CHBag.cc
-
-genclass int ref CHBag fig
-Checking for badsub
-removing figCHBag.h figCHBag.cc
-
-Generating: genclass int ref CHMap
-genclass: the CHMap class requires the -2 syntax for the 2nd type
-usage:
- genclass -list [proto ...]
- genclass -catalog [proto ...]
- genclass type1 {ref|val} proto [out_prefix]
- genclass -2 type1 {ref|val} type2 {ref|val} proto [out_prefix]
-Generation for int-CHMap failed
-
-genclass int ref CHMap fig
-genclass: the CHMap class requires the -2 syntax for the 2nd type
-usage:
- genclass -list [proto ...]
- genclass -catalog [proto ...]
- genclass type1 {ref|val} proto [out_prefix]
- genclass -2 type1 {ref|val} type2 {ref|val} proto [out_prefix]
-Generation for int-CHMap failed
-
-Generating: genclass int ref CHSet
-Checking for badsub
-removing int.CHSet.h int.CHSet.cc
-
-genclass int ref CHSet fig
-Checking for badsub
-removing figCHSet.h figCHSet.cc
-
-Generating: genclass int ref DLDeque
-Checking for badsub
-removing int.DLDeque.h int.DLDeque.cc
-
-genclass int ref DLDeque fig
-Checking for badsub
-removing figDLDeque.h figDLDeque.cc
-
-Generating: genclass int ref DLList
-Checking for badsub
-removing int.DLList.h int.DLList.cc
-
-genclass int ref DLList fig
-Checking for badsub
-removing figDLList.h figDLList.cc
-
-Generating: genclass int ref Deque
-Checking for badsub
-removing int.Deque.h int.Deque.cc
-
-genclass int ref Deque fig
-Checking for badsub
-removing figDeque.h figDeque.cc
-
-Generating: genclass int ref FPQueue
-Checking for badsub
-removing int.FPQueue.h int.FPQueue.cc
-
-genclass int ref FPQueue fig
-Checking for badsub
-removing figFPQueue.h figFPQueue.cc
-
-Generating: genclass int ref FPStack
-Checking for badsub
-removing int.FPStack.h int.FPStack.cc
-
-genclass int ref FPStack fig
-Checking for badsub
-removing figFPStack.h figFPStack.cc
-
-Generating: genclass int ref FPlex
-Checking for badsub
-removing int.FPlex.h int.FPlex.cc
-
-genclass int ref FPlex fig
-Checking for badsub
-removing figFPlex.h figFPlex.cc
-
-Generating: genclass int ref List
-Checking for badsub
-removing int.List.h int.List.cc
-
-genclass int ref List fig
-Checking for badsub
-removing figList.h figList.cc
-
-Generating: genclass int ref MPlex
-Checking for badsub
-removing int.MPlex.h int.MPlex.cc
-
-genclass int ref MPlex fig
-Checking for badsub
-removing figMPlex.h figMPlex.cc
-
-Generating: genclass int ref Map
-genclass: the Map class requires the -2 syntax for the 2nd type
-usage:
- genclass -list [proto ...]
- genclass -catalog [proto ...]
- genclass type1 {ref|val} proto [out_prefix]
- genclass -2 type1 {ref|val} type2 {ref|val} proto [out_prefix]
-Generation for int-Map failed
-
-genclass int ref Map fig
-genclass: the Map class requires the -2 syntax for the 2nd type
-usage:
- genclass -list [proto ...]
- genclass -catalog [proto ...]
- genclass type1 {ref|val} proto [out_prefix]
- genclass -2 type1 {ref|val} type2 {ref|val} proto [out_prefix]
-Generation for int-Map failed
-
-Generating: genclass int ref OSLBag
-Checking for badsub
-removing int.OSLBag.h int.OSLBag.cc
-
-genclass int ref OSLBag fig
-Checking for badsub
-removing figOSLBag.h figOSLBag.cc
-
-Generating: genclass int ref OSLSet
-Checking for badsub
-removing int.OSLSet.h int.OSLSet.cc
-
-genclass int ref OSLSet fig
-Checking for badsub
-removing figOSLSet.h figOSLSet.cc
-
-Generating: genclass int ref OXPBag
-Checking for badsub
-removing int.OXPBag.h int.OXPBag.cc
-
-genclass int ref OXPBag fig
-Checking for badsub
-removing figOXPBag.h figOXPBag.cc
-
-Generating: genclass int ref OXPSet
-Checking for badsub
-removing int.OXPSet.h int.OXPSet.cc
-
-genclass int ref OXPSet fig
-Checking for badsub
-removing figOXPSet.h figOXPSet.cc
-
-Generating: genclass int ref PHPQ
-Checking for badsub
-removing int.PHPQ.h int.PHPQ.cc
-
-genclass int ref PHPQ fig
-Checking for badsub
-removing figPHPQ.h figPHPQ.cc
-
-Generating: genclass int ref PQ
-Checking for badsub
-removing int.PQ.h int.PQ.cc
-
-genclass int ref PQ fig
-Checking for badsub
-removing figPQ.h figPQ.cc
-
-Generating: genclass int ref Plex
-Checking for badsub
-removing int.Plex.h int.Plex.cc
-
-genclass int ref Plex fig
-Checking for badsub
-removing figPlex.h figPlex.cc
-
-Generating: genclass int ref Queue
-Checking for badsub
-removing int.Queue.h int.Queue.cc
-
-genclass int ref Queue fig
-Checking for badsub
-removing figQueue.h figQueue.cc
-
-Generating: genclass int ref RAVLMap
-genclass: the RAVLMap class requires the -2 syntax for the 2nd type
-usage:
- genclass -list [proto ...]
- genclass -catalog [proto ...]
- genclass type1 {ref|val} proto [out_prefix]
- genclass -2 type1 {ref|val} type2 {ref|val} proto [out_prefix]
-Generation for int-RAVLMap failed
-
-genclass int ref RAVLMap fig
-genclass: the RAVLMap class requires the -2 syntax for the 2nd type
-usage:
- genclass -list [proto ...]
- genclass -catalog [proto ...]
- genclass type1 {ref|val} proto [out_prefix]
- genclass -2 type1 {ref|val} type2 {ref|val} proto [out_prefix]
-Generation for int-RAVLMap failed
-
-Generating: genclass int ref RPlex
-Checking for badsub
-removing int.RPlex.h int.RPlex.cc
-
-genclass int ref RPlex fig
-Checking for badsub
-removing figRPlex.h figRPlex.cc
-
-Generating: genclass int ref SLBag
-Checking for badsub
-removing int.SLBag.h int.SLBag.cc
-
-genclass int ref SLBag fig
-Checking for badsub
-removing figSLBag.h figSLBag.cc
-
-Generating: genclass int ref SLList
-Checking for badsub
-removing int.SLList.h int.SLList.cc
-
-genclass int ref SLList fig
-Checking for badsub
-removing figSLList.h figSLList.cc
-
-Generating: genclass int ref SLQueue
-Checking for badsub
-removing int.SLQueue.h int.SLQueue.cc
-
-genclass int ref SLQueue fig
-Checking for badsub
-removing figSLQueue.h figSLQueue.cc
-
-Generating: genclass int ref SLSet
-Checking for badsub
-removing int.SLSet.h int.SLSet.cc
-
-genclass int ref SLSet fig
-Checking for badsub
-removing figSLSet.h figSLSet.cc
-
-Generating: genclass int ref SLStack
-Checking for badsub
-removing int.SLStack.h int.SLStack.cc
-
-genclass int ref SLStack fig
-Checking for badsub
-removing figSLStack.h figSLStack.cc
-
-Generating: genclass int ref Set
-Checking for badsub
-removing int.Set.h int.Set.cc
-
-genclass int ref Set fig
-Checking for badsub
-removing figSet.h figSet.cc
-
-Generating: genclass int ref SplayBag
-Checking for badsub
-removing int.SplayBag.h int.SplayBag.cc
-
-genclass int ref SplayBag fig
-Checking for badsub
-removing figSplayBag.h figSplayBag.cc
-
-Generating: genclass int ref SplayMap
-genclass: the SplayMap class requires the -2 syntax for the 2nd type
-usage:
- genclass -list [proto ...]
- genclass -catalog [proto ...]
- genclass type1 {ref|val} proto [out_prefix]
- genclass -2 type1 {ref|val} type2 {ref|val} proto [out_prefix]
-Generation for int-SplayMap failed
-
-genclass int ref SplayMap fig
-genclass: the SplayMap class requires the -2 syntax for the 2nd type
-usage:
- genclass -list [proto ...]
- genclass -catalog [proto ...]
- genclass type1 {ref|val} proto [out_prefix]
- genclass -2 type1 {ref|val} type2 {ref|val} proto [out_prefix]
-Generation for int-SplayMap failed
-
-Generating: genclass int ref SplayPQ
-Checking for badsub
-removing int.SplayPQ.h int.SplayPQ.cc
-
-genclass int ref SplayPQ fig
-Checking for badsub
-removing figSplayPQ.h figSplayPQ.cc
-
-Generating: genclass int ref SplaySet
-Checking for badsub
-removing int.SplaySet.h int.SplaySet.cc
-
-genclass int ref SplaySet fig
-Checking for badsub
-removing figSplaySet.h figSplaySet.cc
-
-Generating: genclass int ref Stack
-Checking for badsub
-removing int.Stack.h int.Stack.cc
-
-genclass int ref Stack fig
-Checking for badsub
-removing figStack.h figStack.cc
-
-Generating: genclass int ref VHBag
-Checking for badsub
-removing int.VHBag.h int.VHBag.cc
-
-genclass int ref VHBag fig
-Checking for badsub
-removing figVHBag.h figVHBag.cc
-
-Generating: genclass int ref VHMap
-genclass: the VHMap class requires the -2 syntax for the 2nd type
-usage:
- genclass -list [proto ...]
- genclass -catalog [proto ...]
- genclass type1 {ref|val} proto [out_prefix]
- genclass -2 type1 {ref|val} type2 {ref|val} proto [out_prefix]
-Generation for int-VHMap failed
-
-genclass int ref VHMap fig
-genclass: the VHMap class requires the -2 syntax for the 2nd type
-usage:
- genclass -list [proto ...]
- genclass -catalog [proto ...]
- genclass type1 {ref|val} proto [out_prefix]
- genclass -2 type1 {ref|val} type2 {ref|val} proto [out_prefix]
-Generation for int-VHMap failed
-
-Generating: genclass int ref VHSet
-Checking for badsub
-removing int.VHSet.h int.VHSet.cc
-
-genclass int ref VHSet fig
-Checking for badsub
-removing figVHSet.h figVHSet.cc
-
-Generating: genclass int ref VOHSet
-Checking for badsub
-removing int.VOHSet.h int.VOHSet.cc
-
-genclass int ref VOHSet fig
-Checking for badsub
-removing figVOHSet.h figVOHSet.cc
-
-Generating: genclass int ref VQueue
-Checking for badsub
-removing int.VQueue.h int.VQueue.cc
-
-genclass int ref VQueue fig
-Checking for badsub
-removing figVQueue.h figVQueue.cc
-
-Generating: genclass int ref VStack
-Checking for badsub
-removing int.VStack.h int.VStack.cc
-
-genclass int ref VStack fig
-Checking for badsub
-removing figVStack.h figVStack.cc
-
-Generating: genclass int ref Vec
-Checking for badsub
-removing int.Vec.h int.Vec.cc
-
-genclass int ref Vec fig
-Checking for badsub
-removing figVec.h figVec.cc
-
-Generating: genclass int ref XPBag
-Checking for badsub
-removing int.XPBag.h int.XPBag.cc
-
-genclass int ref XPBag fig
-Checking for badsub
-removing figXPBag.h figXPBag.cc
-
-Generating: genclass int ref XPDeque
-Checking for badsub
-removing int.XPDeque.h int.XPDeque.cc
-
-genclass int ref XPDeque fig
-Checking for badsub
-removing figXPDeque.h figXPDeque.cc
-
-Generating: genclass int ref XPPQ
-Checking for badsub
-removing int.XPPQ.h int.XPPQ.cc
-
-genclass int ref XPPQ fig
-Checking for badsub
-removing figXPPQ.h figXPPQ.cc
-
-Generating: genclass int ref XPQueue
-Checking for badsub
-removing int.XPQueue.h int.XPQueue.cc
-
-genclass int ref XPQueue fig
-Checking for badsub
-removing figXPQueue.h figXPQueue.cc
-
-Generating: genclass int ref XPSet
-Checking for badsub
-removing int.XPSet.h int.XPSet.cc
-
-genclass int ref XPSet fig
-Checking for badsub
-removing figXPSet.h figXPSet.cc
-
-Generating: genclass int ref XPStack
-Checking for badsub
-removing int.XPStack.h int.XPStack.cc
-
-genclass int ref XPStack fig
-Checking for badsub
-removing figXPStack.h figXPStack.cc
-
-Generating: genclass int ref XPlex
-Checking for badsub
-removing int.XPlex.h int.XPlex.cc
-
-genclass int ref XPlex fig
-Checking for badsub
-removing figXPlex.h figXPlex.cc
-
-Generating: genclass int ref defs
-genclass: warning, class has a .h but no .cc file
-Checking for badsub
-egrep: int.defs.cc: No such file or directory
-removing int.defs.h int.defs.cc
-rm: int.defs.cc: No such file or directory
-
-genclass int ref defs fig
-genclass: warning, class has a .h but no .cc file
-Checking for badsub
-egrep: figdefs.cc: No such file or directory
-removing figdefs.h figdefs.cc
-rm: figdefs.cc: No such file or directory
-
-Generating: genclass -2 int ref char val AVLMap
-Checking for badsub
-removing int.char.AVLMap.h int.char.AVLMap.cc
-
-Generating: genclass -2 int ref char val AVLMap fig
-Checking for badsub
-removing figAVLMap.h figAVLMap.cc
-
-Generating: genclass -2 int ref char val AVLSet
-Checking for badsub
-removing int.char.AVLSet.h int.char.AVLSet.cc
-
-Generating: genclass -2 int ref char val AVLSet fig
-Checking for badsub
-removing figAVLSet.h figAVLSet.cc
-
-Generating: genclass -2 int ref char val AVec
-Checking for badsub
-removing int.char.AVec.h int.char.AVec.cc
-
-Generating: genclass -2 int ref char val AVec fig
-Checking for badsub
-removing figAVec.h figAVec.cc
-
-Generating: genclass -2 int ref char val BSTSet
-Checking for badsub
-removing int.char.BSTSet.h int.char.BSTSet.cc
-
-Generating: genclass -2 int ref char val BSTSet fig
-Checking for badsub
-removing figBSTSet.h figBSTSet.cc
-
-Generating: genclass -2 int ref char val Bag
-Checking for badsub
-removing int.char.Bag.h int.char.Bag.cc
-
-Generating: genclass -2 int ref char val Bag fig
-Checking for badsub
-removing figBag.h figBag.cc
-
-Generating: genclass -2 int ref char val CHBag
-Checking for badsub
-removing int.char.CHBag.h int.char.CHBag.cc
-
-Generating: genclass -2 int ref char val CHBag fig
-Checking for badsub
-removing figCHBag.h figCHBag.cc
-
-Generating: genclass -2 int ref char val CHMap
-Checking for badsub
-removing int.char.CHMap.h int.char.CHMap.cc
-
-Generating: genclass -2 int ref char val CHMap fig
-Checking for badsub
-removing figCHMap.h figCHMap.cc
-
-Generating: genclass -2 int ref char val CHSet
-Checking for badsub
-removing int.char.CHSet.h int.char.CHSet.cc
-
-Generating: genclass -2 int ref char val CHSet fig
-Checking for badsub
-removing figCHSet.h figCHSet.cc
-
-Generating: genclass -2 int ref char val DLDeque
-Checking for badsub
-removing int.char.DLDeque.h int.char.DLDeque.cc
-
-Generating: genclass -2 int ref char val DLDeque fig
-Checking for badsub
-removing figDLDeque.h figDLDeque.cc
-
-Generating: genclass -2 int ref char val DLList
-Checking for badsub
-removing int.char.DLList.h int.char.DLList.cc
-
-Generating: genclass -2 int ref char val DLList fig
-Checking for badsub
-removing figDLList.h figDLList.cc
-
-Generating: genclass -2 int ref char val Deque
-Checking for badsub
-removing int.char.Deque.h int.char.Deque.cc
-
-Generating: genclass -2 int ref char val Deque fig
-Checking for badsub
-removing figDeque.h figDeque.cc
-
-Generating: genclass -2 int ref char val FPQueue
-Checking for badsub
-removing int.char.FPQueue.h int.char.FPQueue.cc
-
-Generating: genclass -2 int ref char val FPQueue fig
-Checking for badsub
-removing figFPQueue.h figFPQueue.cc
-
-Generating: genclass -2 int ref char val FPStack
-Checking for badsub
-removing int.char.FPStack.h int.char.FPStack.cc
-
-Generating: genclass -2 int ref char val FPStack fig
-Checking for badsub
-removing figFPStack.h figFPStack.cc
-
-Generating: genclass -2 int ref char val FPlex
-Checking for badsub
-removing int.char.FPlex.h int.char.FPlex.cc
-
-Generating: genclass -2 int ref char val FPlex fig
-Checking for badsub
-removing figFPlex.h figFPlex.cc
-
-Generating: genclass -2 int ref char val List
-Checking for badsub
-removing int.char.List.h int.char.List.cc
-
-Generating: genclass -2 int ref char val List fig
-Checking for badsub
-removing figList.h figList.cc
-
-Generating: genclass -2 int ref char val MPlex
-Checking for badsub
-removing int.char.MPlex.h int.char.MPlex.cc
-
-Generating: genclass -2 int ref char val MPlex fig
-Checking for badsub
-removing figMPlex.h figMPlex.cc
-
-Generating: genclass -2 int ref char val Map
-Checking for badsub
-removing int.char.Map.h int.char.Map.cc
-
-Generating: genclass -2 int ref char val Map fig
-Checking for badsub
-removing figMap.h figMap.cc
-
-Generating: genclass -2 int ref char val OSLBag
-Checking for badsub
-removing int.char.OSLBag.h int.char.OSLBag.cc
-
-Generating: genclass -2 int ref char val OSLBag fig
-Checking for badsub
-removing figOSLBag.h figOSLBag.cc
-
-Generating: genclass -2 int ref char val OSLSet
-Checking for badsub
-removing int.char.OSLSet.h int.char.OSLSet.cc
-
-Generating: genclass -2 int ref char val OSLSet fig
-Checking for badsub
-removing figOSLSet.h figOSLSet.cc
-
-Generating: genclass -2 int ref char val OXPBag
-Checking for badsub
-removing int.char.OXPBag.h int.char.OXPBag.cc
-
-Generating: genclass -2 int ref char val OXPBag fig
-Checking for badsub
-removing figOXPBag.h figOXPBag.cc
-
-Generating: genclass -2 int ref char val OXPSet
-Checking for badsub
-removing int.char.OXPSet.h int.char.OXPSet.cc
-
-Generating: genclass -2 int ref char val OXPSet fig
-Checking for badsub
-removing figOXPSet.h figOXPSet.cc
-
-Generating: genclass -2 int ref char val PHPQ
-Checking for badsub
-removing int.char.PHPQ.h int.char.PHPQ.cc
-
-Generating: genclass -2 int ref char val PHPQ fig
-Checking for badsub
-removing figPHPQ.h figPHPQ.cc
-
-Generating: genclass -2 int ref char val PQ
-Checking for badsub
-removing int.char.PQ.h int.char.PQ.cc
-
-Generating: genclass -2 int ref char val PQ fig
-Checking for badsub
-removing figPQ.h figPQ.cc
-
-Generating: genclass -2 int ref char val Plex
-Checking for badsub
-removing int.char.Plex.h int.char.Plex.cc
-
-Generating: genclass -2 int ref char val Plex fig
-Checking for badsub
-removing figPlex.h figPlex.cc
-
-Generating: genclass -2 int ref char val Queue
-Checking for badsub
-removing int.char.Queue.h int.char.Queue.cc
-
-Generating: genclass -2 int ref char val Queue fig
-Checking for badsub
-removing figQueue.h figQueue.cc
-
-Generating: genclass -2 int ref char val RAVLMap
-Checking for badsub
-removing int.char.RAVLMap.h int.char.RAVLMap.cc
-
-Generating: genclass -2 int ref char val RAVLMap fig
-Checking for badsub
-removing figRAVLMap.h figRAVLMap.cc
-
-Generating: genclass -2 int ref char val RPlex
-Checking for badsub
-removing int.char.RPlex.h int.char.RPlex.cc
-
-Generating: genclass -2 int ref char val RPlex fig
-Checking for badsub
-removing figRPlex.h figRPlex.cc
-
-Generating: genclass -2 int ref char val SLBag
-Checking for badsub
-removing int.char.SLBag.h int.char.SLBag.cc
-
-Generating: genclass -2 int ref char val SLBag fig
-Checking for badsub
-removing figSLBag.h figSLBag.cc
-
-Generating: genclass -2 int ref char val SLList
-Checking for badsub
-removing int.char.SLList.h int.char.SLList.cc
-
-Generating: genclass -2 int ref char val SLList fig
-Checking for badsub
-removing figSLList.h figSLList.cc
-
-Generating: genclass -2 int ref char val SLQueue
-Checking for badsub
-removing int.char.SLQueue.h int.char.SLQueue.cc
-
-Generating: genclass -2 int ref char val SLQueue fig
-Checking for badsub
-removing figSLQueue.h figSLQueue.cc
-
-Generating: genclass -2 int ref char val SLSet
-Checking for badsub
-removing int.char.SLSet.h int.char.SLSet.cc
-
-Generating: genclass -2 int ref char val SLSet fig
-Checking for badsub
-removing figSLSet.h figSLSet.cc
-
-Generating: genclass -2 int ref char val SLStack
-Checking for badsub
-removing int.char.SLStack.h int.char.SLStack.cc
-
-Generating: genclass -2 int ref char val SLStack fig
-Checking for badsub
-removing figSLStack.h figSLStack.cc
-
-Generating: genclass -2 int ref char val Set
-Checking for badsub
-removing int.char.Set.h int.char.Set.cc
-
-Generating: genclass -2 int ref char val Set fig
-Checking for badsub
-removing figSet.h figSet.cc
-
-Generating: genclass -2 int ref char val SplayBag
-Checking for badsub
-removing int.char.SplayBag.h int.char.SplayBag.cc
-
-Generating: genclass -2 int ref char val SplayBag fig
-Checking for badsub
-removing figSplayBag.h figSplayBag.cc
-
-Generating: genclass -2 int ref char val SplayMap
-Checking for badsub
-removing int.char.SplayMap.h int.char.SplayMap.cc
-
-Generating: genclass -2 int ref char val SplayMap fig
-Checking for badsub
-removing figSplayMap.h figSplayMap.cc
-
-Generating: genclass -2 int ref char val SplayPQ
-Checking for badsub
-removing int.char.SplayPQ.h int.char.SplayPQ.cc
-
-Generating: genclass -2 int ref char val SplayPQ fig
-Checking for badsub
-removing figSplayPQ.h figSplayPQ.cc
-
-Generating: genclass -2 int ref char val SplaySet
-Checking for badsub
-removing int.char.SplaySet.h int.char.SplaySet.cc
-
-Generating: genclass -2 int ref char val SplaySet fig
-Checking for badsub
-removing figSplaySet.h figSplaySet.cc
-
-Generating: genclass -2 int ref char val Stack
-Checking for badsub
-removing int.char.Stack.h int.char.Stack.cc
-
-Generating: genclass -2 int ref char val Stack fig
-Checking for badsub
-removing figStack.h figStack.cc
-
-Generating: genclass -2 int ref char val VHBag
-Checking for badsub
-removing int.char.VHBag.h int.char.VHBag.cc
-
-Generating: genclass -2 int ref char val VHBag fig
-Checking for badsub
-removing figVHBag.h figVHBag.cc
-
-Generating: genclass -2 int ref char val VHMap
-Checking for badsub
-removing int.char.VHMap.h int.char.VHMap.cc
-
-Generating: genclass -2 int ref char val VHMap fig
-Checking for badsub
-removing figVHMap.h figVHMap.cc
-
-Generating: genclass -2 int ref char val VHSet
-Checking for badsub
-removing int.char.VHSet.h int.char.VHSet.cc
-
-Generating: genclass -2 int ref char val VHSet fig
-Checking for badsub
-removing figVHSet.h figVHSet.cc
-
-Generating: genclass -2 int ref char val VOHSet
-Checking for badsub
-removing int.char.VOHSet.h int.char.VOHSet.cc
-
-Generating: genclass -2 int ref char val VOHSet fig
-Checking for badsub
-removing figVOHSet.h figVOHSet.cc
-
-Generating: genclass -2 int ref char val VQueue
-Checking for badsub
-removing int.char.VQueue.h int.char.VQueue.cc
-
-Generating: genclass -2 int ref char val VQueue fig
-Checking for badsub
-removing figVQueue.h figVQueue.cc
-
-Generating: genclass -2 int ref char val VStack
-Checking for badsub
-removing int.char.VStack.h int.char.VStack.cc
-
-Generating: genclass -2 int ref char val VStack fig
-Checking for badsub
-removing figVStack.h figVStack.cc
-
-Generating: genclass -2 int ref char val Vec
-Checking for badsub
-removing int.char.Vec.h int.char.Vec.cc
-
-Generating: genclass -2 int ref char val Vec fig
-Checking for badsub
-removing figVec.h figVec.cc
-
-Generating: genclass -2 int ref char val XPBag
-Checking for badsub
-removing int.char.XPBag.h int.char.XPBag.cc
-
-Generating: genclass -2 int ref char val XPBag fig
-Checking for badsub
-removing figXPBag.h figXPBag.cc
-
-Generating: genclass -2 int ref char val XPDeque
-Checking for badsub
-removing int.char.XPDeque.h int.char.XPDeque.cc
-
-Generating: genclass -2 int ref char val XPDeque fig
-Checking for badsub
-removing figXPDeque.h figXPDeque.cc
-
-Generating: genclass -2 int ref char val XPPQ
-Checking for badsub
-removing int.char.XPPQ.h int.char.XPPQ.cc
-
-Generating: genclass -2 int ref char val XPPQ fig
-Checking for badsub
-removing figXPPQ.h figXPPQ.cc
-
-Generating: genclass -2 int ref char val XPQueue
-Checking for badsub
-removing int.char.XPQueue.h int.char.XPQueue.cc
-
-Generating: genclass -2 int ref char val XPQueue fig
-Checking for badsub
-removing figXPQueue.h figXPQueue.cc
-
-Generating: genclass -2 int ref char val XPSet
-Checking for badsub
-removing int.char.XPSet.h int.char.XPSet.cc
-
-Generating: genclass -2 int ref char val XPSet fig
-Checking for badsub
-removing figXPSet.h figXPSet.cc
-
-Generating: genclass -2 int ref char val XPStack
-Checking for badsub
-removing int.char.XPStack.h int.char.XPStack.cc
-
-Generating: genclass -2 int ref char val XPStack fig
-Checking for badsub
-removing figXPStack.h figXPStack.cc
-
-Generating: genclass -2 int ref char val XPlex
-Checking for badsub
-removing int.char.XPlex.h int.char.XPlex.cc
-
-Generating: genclass -2 int ref char val XPlex fig
-Checking for badsub
-removing figXPlex.h figXPlex.cc
-
-Generating: genclass -2 int ref char val defs
-genclass: warning, class has a .h but no .cc file
-Checking for badsub
-egrep: int.char.defs.cc: No such file or directory
-removing int.char.defs.h int.char.defs.cc
-rm: int.char.defs.cc: No such file or directory
-
-Generating: genclass -2 int ref char val defs fig
-genclass: warning, class has a .h but no .cc file
-Checking for badsub
-egrep: figdefs.cc: No such file or directory
-removing figdefs.h figdefs.cc
-rm: figdefs.cc: No such file or directory
-
diff --git a/contrib/libg++/libg++/genclass/genclass.sh b/contrib/libg++/libg++/genclass/genclass.sh
deleted file mode 100755
index 08d510754ad2..000000000000
--- a/contrib/libg++/libg++/genclass/genclass.sh
+++ /dev/null
@@ -1,452 +0,0 @@
-#!/bin/sh
-
-# Copyright (C) 1989 Free Software Foundation, Inc.
-#
-# genclass program enhanced by Wendell C. Baker
-# (original by Doug Lea (dl@rocky.oswego.edu))
-
-#This file is part of GNU libg++.
-
-#GNU libg++ is free software; you can redistribute it and/or modify
-#it under the terms of the GNU General Public License as published by
-#the Free Software Foundation; either version 1, or (at your option)
-#any later version.
-
-#GNU libg++ is distributed in the hope that it will be useful,
-#but WITHOUT ANY WARRANTY; without even the implied warranty of
-#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-#GNU General Public License for more details.
-
-#You should have received a copy of the GNU General Public License
-#along with GNU libg++; see the file COPYING. If not, write to
-#the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
-
-
-#
-# genclass -list [proto ...]
-# genclass -catalog [proto ...]
-# genclass type1 {ref|val} proto [out_prefix]
-# genclass -2 type1 {ref|val} type2 {ref, val} proto [out_prefix]
-#
-# Generate classes from prototypes
-#
-name=genclass ;
-usage="
- $name -list [proto ...]
- $name -catalog [proto ...]
- $name type1 {ref|val} proto [out_prefix]
- $name -2 type1 {ref|val} type2 {ref|val} proto [out_prefix]" ;
-
-case "$1" in
--usage)
- #
- # -usage
- #
- echo "usage: $usage" 1>&2 ;
- exit 0;
- ;;
--version)
- #
- # -version
- #
- # <VERSION> is substituted by the build process.
- # We currently use the libg++ version number (extracted from ../Makefile).
- echo "$name: version <VERSION>" ;
- exit 0;
- ;;
--requires)
- #
- # -requires
- #
- # The following line should contain any nonstandard programs
- # which must be in the users's path (i.e. not referenced by a
- # fullpath);it allows one to check a script for dependencies
- # without exhaustively testing its usages.
- # ... in this case genclass depends on nothing else.
- echo ;
- exit 0;
- ;;
-esac ;
-
-# pull it in from the environment
-[ "$TRACE" = "" ] || set -xv
-
-# Search in standard g++ prototype directory and in the current directory
-# NOTE: this variable is edited by the install process
-PROTODIR=/projects/gnu-cygnus/gnu-cygnus-2/mips/lib/g++-include/gen
-
-pwd=`pwd`
-
-case "$1" in
--catalog*|-list*)
- #
- # genclass -catalog [proto ...]
- # genclass -list [proto ...]
- #
- option="$1" ;
- shift ;
-
- case $# in
- 0)
- #
- # -catalog
- # -list
- #
- select=all ;
- select_pattern=p ;
- ;;
- *)
- #
- # -catalog proto ...
- # -list proto ...
- #
- select="$@" ;
- select_pattern= ;
- for i in $@ ; do
- select_pattern="\
-$select_pattern
-/.*$i\$/ p
-" ;
- done ;
-
- ;;
- esac ;
-
- #
- # select_pattern is now a (possibly-vacuous) newline-
- # separated list of patterns of the form:
- #
- # /.*Proto1$/ p
- # /.*Proto2$/ p
- # /.*Proto3$/ p
- #
- # or select_pattern is simply ``p'' to select everything
-
- # Hmmm... not all systems have a fmt program; should we
- # just go ahead and use ``nroff -Tcrt | cat -s'' here?
- fmt='nroff -Tcrt | cat -s'
- #fmt=fmt ;
-
- case "$option" in
- -catalog*)
- #
- # -catalog [proto ...]
- #
- echo "\
-Catalog of ${name} class templates
-directories searched:
- $PROTODIR
- $pwd
-selecting: $select
-classes available:" ;
- ;;
- -list*)
- #
- # -list [proto ...]
- #
- # no need to do anything (the list is coming out next)
- ;;
- esac ;
-
-# The sed script does the following:
-# - If it does not end in a .ccP or .hP then
-# it's not a template and we are not intereseted.
-# - Get rid of pathname components [s;.*/;;]
-# - Just take the template names
-# - change quoting conventions and select off what we want to see
-# -if it did not pass the patterns, kill it
-
- ls $pwd $PROTODIR | sed -e '
-/\.ccP$/ !{
- /\.hP$/ !{
- d
- }
-}
-s;.*/;;
-s/\.ccP$//
-s/\.hP$//
-' -e "$select_pattern
-d
-" | sort -u | case "$option" in
- -catalog*)
- # The library catalog information preceded the list
- # format the list, and tab in in a bit to make it readable.
- # Re-evaluate $fmt because it might contain a shell command
- eval $fmt | sed -e 's/.*/ &/' ;
- ;;
- -list*)
- # nothing special, just let the sorted list dribble out
- # we must use cat to receive (and reproduce) the incoming list
- cat ;
- ;;
- esac ;
- exit 0;
- ;;
--2)
- #
- # genclass -2 type1 {ref|val} type2 {ref|val} proto [out_prefix]
- #
- N=2 ;
-
- case $# in
- 6) # genclass -2 type1 {ref|val} type2 {ref|val} proto
- ;;
- 7) # genclass -2 type1 {ref|val} type2 {ref|val} proto out_prefix
- ;;
- *)
- echo "usage: $usage" 1>&2 ;
- exit 1;
- esac ;
- shift ;
- ;;
-*)
- #
- # genclass type1 {ref|val} proto [out_prefix]
- #
- N=1 ;
-
- case $# in
- 3) # genclass type1 {ref|val} proto
- ;;
- 4) # genclass type1 {ref|val} proto out_prefix
- ;;
- *)
- echo "usage: $usage" 1>&2 ;
- exit 1;
- esac ;
- ;;
-esac
-
-#
-# Args are now (the point being the leading ``-2'' is gone)
-#
-# type1 {ref|val} proto [out_prefix]
-# type1 {ref|val} type2 {ref|val} proto [out_prefix]
-#
-
-#
-# Quote all of the $1 $2 etc references to guard against
-# dynamic syntax errors due to vacuous arguments (i.e. '')
-# as sometimes occurs when genclass is used from a Makefile
-#
-
-T1="$1";
-T1NAME="$T1." ;
-T1SEDNAME="$T1" ;
-
-case "$2" in
-ref)
- T1ACC="\&" ;
- ;;
-val)
- T1ACC=" " ;
- ;;
-*)
- echo "${name}: Must specify type1 access as ref or val" 1>&2 ;
- echo "usage: $usage" 1>&2 ;
- exit 1;
- ;;
-esac
-
-# N is either 1 or 2
-
-case $N in
-1)
- #
- # type1 {ref|val} proto [out_prefix]
- #
- class="$3" ;
-
- T2="" ;
- T2ACC="" ;
- ;;
-2)
- #
- # type1 {ref|val} type2 {ref|val} proto [out_prefix]
- #
- class="$5" ;
-
- T2="$3";
- T2NAME="$T2." ;
- T2SEDNAME="$T2" ;
-
- case "$4" in
- ref)
- T2ACC="\&" ;
- ;;
- val)
- T2ACC=" " ;
- ;;
- *)
- echo "${name}: Must specify type2 access: ref or val" 1>&2 ;
- echo "usage: $usage" 1>&2 ;
- exit 1;;
- esac;
- ;;
-esac
-
-defaultprefix="$T1NAME$T2NAME" ;
-
-case $# in
-3) # type1 {ref|val} proto
- replaceprefix="N" ;
- prefix="$defaultprefix" ;
- ;;
-5) # type1 {ref|val} type2 {ref|val} proto
- replaceprefix="N" ;
- prefix="$defaultprefix" ;
- ;;
-4) # type1 {ref|val} proto out_prefix
- prefix="$4" ;
- replaceprefix="Y" ;
- ;;
-6) # type1 {ref|val} type2 {ref|val} proto out_prefix
- prefix="$6" ;
- replaceprefix="Y" ;
- ;;
-*)
- echo "${name}: too many arguments" 1>&2 ;
- echo "usage: $usage" 1>&2 ;
- exit 1;
- ;;
-esac ;
-
-src_h=$class.hP
-src_cc=$class.ccP
-out_h=$prefix$class.h;
-out_cc=$prefix$class.cc ;
-
-#
-# Note #1: The .h and .cc parts are done separately
-# in case only a .h exists for the prototype
-#
-# Note #2: Bind the .h and .cc parts to the fullpath
-# directories at the same time to ensure consistency.
-#
-
-if [ -f $pwd/$src_h ] ; then
- fullsrc_h=$pwd/$src_h ;
- fullsrc_cc=$pwd/$src_cc ;
-elif [ -f $PROTODIR/$src_h ] ; then
- fullsrc_h=$PROTODIR/$src_h ;
- fullsrc_cc=$PROTODIR/$src_cc ;
-else
- echo "${name}: there is no prototype for class $class - file $src_h" 1>&2 ;
- $0 -list ;
- exit 1;
-fi
-
-CASES="$N$replaceprefix" ;
-# CASES is one of { 2Y 2N 1Y 1N }
-
-#
-# WATCHOUT - we have no way of checking whether or not
-# the proper case type is being used with the prototype.
-#
-# For example, we have no way of ensuring that any of
-# Map variants are specified with the -2 argument set
-# Further, we have no way of ensuring that -2 is not
-# used with the prototypes which require only one.
-#
-# The second problem is not serious because it still
-# results in correctly-generated C++ code; the first
-# problem is serious because it results in C++ code that
-# still has ``<C>'' and ``<C&>'' syntax inside it. Such
-# code of course will not compile.
-#
-# SO THE BEST WE CAN DO - is check for the presence of
-# <C> and <C&> AFTER the thing has been generated.
-#
-
-case $CASES in
-2Y) # Two output substitutions, change the prefix
- sed < $fullsrc_h > $out_h -e "
-s/<T>/$T1/g
-s/<T&>/$T1$T1ACC/g
-s/<C>/$T2/g
-s/<C&>/$T2$T2ACC/g
-s/$T1SEDNAME\.$T2SEDNAME\./$prefix/g
-s/$T1SEDNAME\./$prefix/g
-s/$T2SEDNAME\./$prefix/g
-" ;
- ;;
-2N) # Two output substitutions, use the default prefix
- sed < $fullsrc_h > $out_h -e "
-s/<T>/$T1/g
-s/<T&>/$T1$T1ACC/g
-s/<C>/$T2/g
-s/<C&>/$T2$T2ACC/g
-" ;
- ;;
-1Y) # One output substitution, change the prefix
- sed < $fullsrc_h > $out_h -e "
-s/<T>/$T1/g
-s/<T&>/$T1$T1ACC/g
-s/$T1SEDNAME\./$prefix/g
-" ;
- ;;
-1N) # One output substitution, use the default prefix
- sed < $fullsrc_h > $out_h -e "
-s/<T>/$T1/g
-s/<T&>/$T1$T1ACC/g
-" ;
- ;;
-esac
-
-if egrep '<C&?>' $out_h > /dev/null ; then
- echo "${name}: the $class class requires the -2 syntax for the 2nd type" 1>&2 ;
- echo "usage: $usage" 1>&2 ;
- # the user does not get to see the mistakes (he might try to compile it)
- rm $out_h ;
- exit 1;
-fi ;
-
-if [ ! -f $fullsrc_cc ] ; then
- echo "${name}: warning, class has a .h but no .cc file" 1>&2 ;
- exit 0;
-fi
-
-case $CASES in
-2Y) # Two output substitutions, change the prefix
- sed < $fullsrc_cc > $out_cc -e "
-s/<T>/$T1/g
-s/<T&>/$T1$T1ACC/g
-s/<C>/$T2/g
-s/<C&>/$T2$T2ACC/g
-s/$T1SEDNAME\.$T2SEDNAME\./$prefix/g
-s/$T1SEDNAME\./$prefix/g
-s/$T2SEDNAME\./$prefix/g
-"
- ;;
-2N) # Two output substitutions, use the default prefix
- sed < $fullsrc_cc > $out_cc -e "
-s/<T>/$T1/g
-s/<T&>/$T1$T1ACC/g
-s/<C>/$T2/g
-s/<C&>/$T2$T2ACC/g
-"
- ;;
-1Y) # One output substitution, change the prefix
- sed < $fullsrc_cc > $out_cc -e "
-s/<T>/$T1/g
-s/<T&>/$T1$T1ACC/g
-s/$T1SEDNAME\./$prefix/g
-"
- ;;
-1N) # One output substitution, use the default prefix
- sed < $fullsrc_cc > $out_cc -e "
-s/<T>/$T1/g
-s/<T&>/$T1$T1ACC/g
-"
- ;;
-esac
-
-if egrep '<C&?>' $out_h $out_cc > /dev/null ; then
- echo "${name}: the $class class requires the -2 syntax for the 2nd type" 1>&2 ;
- echo "usage: $usage" 1>&2 ;
- # the user does not get to see the mistakes (he might try to compile it)
- rm $out_h $out_cc ;
- exit 1;
-fi ;
-
-exit 0;
diff --git a/contrib/libg++/libg++/genclass/gentest.sh b/contrib/libg++/libg++/genclass/gentest.sh
deleted file mode 100755
index f3e23482f84e..000000000000
--- a/contrib/libg++/libg++/genclass/gentest.sh
+++ /dev/null
@@ -1,174 +0,0 @@
-#!/bin/sh
-
-# Copyright (C) 1989 Free Software Foundation, Inc.
-#
-# genclass test program by Wendell C. Baker
-
-#This file is part of GNU libg++.
-
-#GNU libg++ is free software; you can redistribute it and/or modify
-#it under the terms of the GNU General Public License as published by
-#the Free Software Foundation; either version 1, or (at your option)
-#any later version.
-
-#GNU libg++ is distributed in the hope that it will be useful,
-#but WITHOUT ANY WARRANTY; without even the implied warranty of
-#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-#GNU General Public License for more details.
-
-#You should have received a copy of the GNU General Public License
-#along with GNU libg++; see the file COPYING. If not, write to
-#the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
-
-#
-# test.sh
-#
-name=gentest.sh
-usage="$name" ;
-genclass=
-
-case "$1" in
--usage)
- #
- # -usage
- #
- echo "usage: $usage" 1>&2 ;
- exit 0;
- ;;
--version)
- #
- # -version
- #
- version="`expr '$Revision: 1.3 $' : '.*Revision: \(.*\) .*'`" ;
- echo "$name: version $version" ;
- exit 0;
- ;;
--requires)
- #
- # -requires
- #
- echo genclass ;
- exit 0;
- ;;
--genclass)
- #
- shift; genclass=$1
- ;;
-esac ;
-
-# pull it in from the environment
-[ "$TRACE" = "" ] || set -xv
-
-if [ "${genclass}" = "" ]
-then
- genclass="./genclass"
-fi
-
-for arg in -usage -version -requires -catalog -list ; do
- echo "---------- genclass $arg ----------"
- ${genclass} $arg
- echo "-----------"
-done ;
-
-arg="-catalog PQ Set"
-echo "---------- genclass $arg ----------"
-${genclass} $arg
-echo "-----------"
-
-arg="-list Map Stack"
-echo "---------- genclass $arg ----------"
-${genclass} $arg
-echo "-----------"
-
-std1=int ;
-std2=char ;
-
-#
-# Do all of them with the single-type syntax
-# The Map-based classes are expected to fail (good)
-#
-for proto in `${genclass} -list` ; do
- file_h=$std1.$proto.h
- file_cc=$std1.$proto.cc
- files="$file_h $file_cc" ;
- echo "Generating: genclass $std1 ref $proto"
- ${genclass} $std1 ref $proto
- if [ $? != 0 ] ; then
- echo "Generation for $std1-$proto failed"
- else
- echo "Checking for badsub"
- egrep '<[TC]&?>' $files
- echo "removing $files"
- rm $files
- fi ;
- echo ""
-
- nonstd1=fig
- file_h=$nonstd1$proto.h
- file_cc=$nonstd1$proto.cc
- files="$file_h $file_cc" ;
- echo "genclass $std1 ref $proto $nonstd1"
- ${genclass} $std1 ref $proto $nonstd1
- if [ $? != 0 ] ; then
- echo "Generation for $std1-$proto failed"
- else
- echo "Checking for badsub"
- egrep '<[TC]?>' $files
- echo "removing $files"
- rm $files
- fi ;
- echo ""
-
-done ;
-
-#
-# Do them all again with the -2 syntax
-# None are expected to fail because there is no
-# way to tell something that requires the single-type syntax
-#
-for proto in `${genclass} -list` ; do
- file1_h=$std1.$proto.h
- file1_cc=$std1.$proto.cc
- files1="$file1_h $file1_cc";
- file2_h=$std1.$std2.$proto.h
- file2_cc=$std1.$std2.$proto.cc
- files2="$file2_h $file2_cc" ;
- files="$file1_h $file1_cc $file2_h $file2_cc" ;
- echo "Generating: genclass -2 $std1 ref $std2 val $proto"
- ${genclass} -2 $std1 ref $std2 val $proto
- if [ $? != 0 ] ; then
- echo "Generation for $std1-$std2-$proto failed"
- else
- echo "Checking for badsub"
- if [ -f $file1_h ] ; then
- # then $file1_cc is expected to exist
- egrep '<[TC]&?>' $files1
- echo "removing $files1"
- rm $files1
- else
- # then [ -f $file2_h ]
- # and $file2_cc is expected to exist
- egrep '<[TC]&?>' $files2
- echo "removing $files2"
- rm $files2
- fi ;
- fi ;
- echo ""
-
- nonstd=fig
- file_h=$nonstd$proto.h
- file_cc=$nonstd$proto.cc
- files="$file_h $file_cc" ;
- echo "Generating: genclass -2 $std1 ref $std2 val $proto $nonstd"
- ${genclass} -2 $std1 ref $std2 val $proto $nonstd
- if [ $? != 0 ] ; then
- echo "Generation for $std1-$std2-$proto failed"
- else
- echo "Checking for badsub"
- egrep '<[TC]&?>' $files
- echo "removing $files"
- rm $files
- fi ;
- echo ""
-
-done ;
diff --git a/contrib/libg++/libg++/libg++.texi b/contrib/libg++/libg++/libg++.texi
deleted file mode 100644
index 4153a7a2e2f4..000000000000
--- a/contrib/libg++/libg++/libg++.texi
+++ /dev/null
@@ -1,4803 +0,0 @@
-\input texinfo @c -*-texinfo-*-
-
-@settitle User's Guide to the GNU C++ Class Library
-@setfilename libg++.info
-
-@ifinfo
-@format
-START-INFO-DIR-ENTRY
-* Libg++: (libg++). The g++ class library.
-END-INFO-DIR-ENTRY
-@end format
-@end ifinfo
-
-@ifinfo
-This file documents the features and implementation of The GNU C++ library
-
-Copyright (C) 1988, 1991, 1992 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-@ignore
-Permission is granted to process this file through @TeX{} and print the
-results, provided the printed document carries copying permission
-notice identical to this one except for the removal of this paragraph
-(this paragraph not being relevant to the printed manual).
-
-@end ignore
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided also that the
-section entitled ``GNU Library General Public License'' is included exactly as
-in the original, and provided that the entire resulting derived work is
-distributed under the terms of a permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions,
-except that the section entitled ``GNU Library General Public License'' and
-this permission notice may be included in translations approved by the
-Free Software Foundation instead of in the original English.
-@end ifinfo
-
-@iftex
-@finalout
-@c @smallbook
-@c @cropmarks
-@end iftex
-
-@setchapternewpage odd
-
-@titlepage
-@title User's Guide
-@title to the GNU C++ Library
-@sp 3
-@subtitle last updated April 29, 1992
-@subtitle for version 2.0
-@author Doug Lea (dl@@g.oswego.edu)
-@page
-@vskip 0pt plus 1filll
-Copyright @copyright{} 1988, 1991, 1992 Free Software Foundation, Inc.
-
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided also that the
-section entitled ``GNU Library General Public License'' is included exactly as
-in the original, and provided that the entire resulting derived work is
-distributed under the terms of a permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions,
-except that the section entitled ``GNU Library General Public License'' may be
-included in a translation approved by the author instead of in the original
-English.
-
-@strong{Note: The GNU C++ library is still in test release. You will
-be performing a valuable service if you report any bugs you encounter.}
-
-@end titlepage
-
-@ifinfo
-@node Top, Copying, , (DIR)
-
-Introduction
-************
-
-This manual documents how to install and use the GNU C++ library.
-
-@end ifinfo
-@menu
-* Copying:: GNU Library Public License says how you can copy
- and share the GNU C++ library.
-* Contributors:: People who have contributed to GNU C++ library.
-* Installation:: How to configure, compile and install GNU C++ library
-* Trouble:: If you have trouble installing GNU C++ library.
-* General:: Aims, objectives, and limitations of the GNU C++ library
-* Conventions:: Stylistic conventions
-* OK:: Support for representation invariants
-* Proto:: Introduction to container class prototypes
-* Pix:: Pseudo-indexes
-* Representations:: How variable-sized objects are represented
-* Expressions:: Some guidance on programming expression-oriented classes
-* Headers:: Header files and other support for interfacing C++ to C
-* Builtin:: Utility functions for builtin types
-* New:: Library dynamic allocation primitives
-* IOStream:(iostream)Top.
- The input/output library (istreams and ostreams).
-* Stream:: obsolete I/O library
-* Obstack:: Obstacks and their uses.
-* AllocRing:: A place to store objects for a while
-* String:: String, SubString, and Regex classes.
-* Integer:: Multiple precision Integer class.
-* Rational:: Multiple precision Rational class
-* Complex:: Complex number class
-* Fix:: Fixed point proportion classes
-* Bit:: BitSet and BitString classes
-* Random:: Random number generators
-* Data:: SampleStatistic and related classes for data collection
-* Curses:: CursesWindow class
-* List:: Lisp-like List prototype
-* LinkList:: Singly and doubly linked list class prototypes
-* Vector:: Vector prototypes
-* Plex:: Plex (adjustable array) prototypes
-* Stack:: Stack prototypes
-* Queue:: Queue prototypes
-* Deque:: Double ended queue prototypes
-* PQ:: Heap (priority queue) class prototypes
-* Set:: Set class prototypes
-* Bag:: Bag class prototypes
-* Map:: Map (Associative array) prototypes
-* GetOpt:: C++ class-based version of the GNU/UNIX getopt function
-* Projects:: Things Still Left to do
-@end menu
-
-@node Copying, Contributors, Top, Top
-@include lgpl.texinfo
-
-@node Contributors, Installation, Copying, Top
-@unnumbered Contributors to GNU C++ library
-
-Aside from Michael Tiemann, who worked out the front end for GNU C++, and
-Richard Stallman, who worked out the back end, the following people (not
-including those who have made their contributions to GNU CC) should not go
-unmentioned.
-
-@itemize @bullet
-@item
-Doug Lea contributed most otherwise unattributed classes.
-
-@item
-Per Bothner contributed the iostream I/O classes.
-
-@item
-Dirk Grunwald contributed the Random number generation classes,
-and PairingHeaps.
-
-@item
-Kurt Baudendistel contributed Fixed precision reals.
-
-@item
-Doug Schmidt contributed ordered hash tables, a perfect
-hash function generator, and several other utilities.
-
-@item
-Marc Shapiro contributed the ideas and preliminary code for Plexes.
-
-@item
-Eric Newton contributed the curses window classes.
-
-@item
-Some of the I/O code is derived from BSD 4.4,
-and was developed by the University of California, Berkeley.
-
-@item
-The code for converting accurately between floating point numbers
-and their string representations was written by David M. Gay of AT&T.
-@end itemize
-
-@node Installation, Trouble, Contributors, Top
-@chapter Installing GNU C++ library
-
-
-@enumerate
-@item
-Read through the README file and the Makefile. Make sure that all
-paths, system-dependent compile switches, and program names are correct.
-
-@item
-Check that files @file{values.h}, @file{stdio.h},
-and @file{math.h} declare and define values appropriate for your
-system.
-
-@item
-Type @samp{make all} to compile the library, test, and install.
-Current details about contents of the tests and utilities are in the
-@file{README} file.
-
-@end enumerate
-
-@node Trouble, General, Installation, Top
-@chapter Trouble in Installation
-
-Here are some of the things that have caused trouble for people installing
-GNU C++ library.
-
-@enumerate
-@item
-Make sure that your GNU C++ version number is at least as high as your
-libg++ version number. For example, libg++ 1.22.0 requires g++ 1.22.0 or
-later releases.
-
-@item
-Double-check system constants in the header files mentioned above.
-
-@end enumerate
-
-@node General, Conventions, Trouble, Top
-@chapter GNU C++ library aims, objectives, and limitations
-
-The GNU C++ library, libg++ is an attempt to provide a variety of C++
-programming tools and other support to GNU C++ programmers.
-
-Differences in distribution policy are only part of the difference
-between libg++.a and AT&T libC.a. libg++ is not intended to be an
-exact clone of libC. For one, libg++ contains bits of code that depend
-on special features of GNU g++ that are either different or lacking in
-the AT&T version, including slightly different inlining and overloading
-strategies, dynamic local arrays, etc. All of these
-differences are minor. For example, while the AT&T and GNU stream
-classes are implemented in very different ways, the vast majority of
-C++ programs compile and run under either version with no visible
-difference. Additionally, all g++-specific constructs are conditionally
-compiled; The library is designed to be compatible with any 2.0 C++
-compiler.
-
-libg++ has also contained workarounds for some limitations in g++: both
-g++ and libg++ are still undergoing rapid development and testing---a
-task that is helped tremendously by the feedback of active users. This
-manual is also still under development; it has some catching up to do
-to include all the facilities now in the library.
-
-libg++ is not the only freely available source of C++ class libraries.
-Some notable alternative sources are Interviews and NIHCL.
-(InterViews has been available on the X-windows X11 tapes and also
-from interviews.stanford.edu. NIHCL is available by anonymous
-ftp from GNU archives (such as the pub directory of prep.ai.mit.edu),
-although it is not supported by the FSF - and needs some work
-before it will work with g++.)
-
-As every C++ programmer knows, the design (moreso than the
-implementation) of a C++ class library is something of a challenge.
-Part of the reason is that C++ supports two, partially incompatible,
-styles of object-oriented programming -- The "forest" approach,
-involving a collection of free-standing classes that can be mixed and
-matched, versus the completely hierarchical (smalltalk style)
-approach, in which all classes are derived from a common ancestor. Of
-course, both styles have advantages and disadvantages. So far, libg++
-has adopted the "forest" approach. Keith Gorlen's OOPS library adopts
-the hierarchical approach, and may be an attractive alternative for C++
-programmers who prefer this style.
-
-Currently (and/or in the near future) libg++ provides support for a
-few basic kinds of classes:
-
-The first kind of support provides an interface between C++ programs and
-C libraries. This includes basic header files (like @file{stdio.h}) as
-well as things like the File and stream classes. Other classes that
-interface to other aspects of C libraries (like those that maintain
-environmental information) are in various stages of development; all
-will undergo implementation modifications when the forthcoming GNU libc
-library is released.
-
-The second kind of support contains general-purpose basic classes that
-transparently manage variable-sized objects on the freestore. This
-includes Obstacks, multiple-precision Integers and Rationals,
-arbitrary length Strings, BitSets, and BitStrings.
-
-Third, several classes and utilities of common interest (e.g.,
-Complex numbers) are provided.
-
-Fourth, a set of pseudo-generic prototype files are available
-as a mechanism for generating common container classes. These
-are described in more detail in the introduction to container
-prototypes. Currently, only a textual substitution
-mechanism is available for generic class creation.
-
-@node Conventions, OK, General, Top
-@chapter GNU C++ library stylistic conventions
-
-@itemize @bullet
-
-@item
-C++ source files have file extension @file{.cc}. Both C-compatibility
-header files and class declaration files have extension @file{.h}.
-
-@item
-C++ class names begin with capital letters, except for @code{istream}
-and @code{ostream}, for AT&T C++ compatibility. Multi-word class
-names capitalize each word, with no underscore separation.
-
-@item
-Include files that define C++ classes begin with capital letters
-(as do the names of the classes themselves). @file{stream.h} is
-uncapitalized for AT&T C++ compatibility.
-
-@item
-Include files that supply function prototypes for other C
-functions (system calls and libraries) are all lower case.
-
-@item
-All include files define a preprocessor variable _X_h, where X
-is the name of the file, and conditionally compile only if this
-has not been already defined. The @code{#pragma once} facility
-is also used to avoid re-inclusion.
-
-@item
-Structures and objects that must be publicly defined,
-but are not intended for public use have names beginning
-with an underscore. (for example, the @code{_Srep} struct, which
-is used only by the String and SubString classes.)
-
-@item
-The underscore is used to separate components of long function
-names, @*e.g., @code{set_File_exception_handler()}.
-
-@item
-When a function could be usefully defined either as a
-member or a friend, it is generally a member if it modifies
-and/or returns itself, else it is a friend. There are cases
-where naturalness of expression wins out over this rule.
-
-@item
-Class declaration files are formatted so that it is easy
-to quickly check them to determine function names, parameters,
-and so on. Because of the different kinds of things that may
-appear in class declarations, there is no perfect way to do
-this. Any suggestions on developing a common class
-declaration formatting style are welcome.
-
-@item
-All classes use the same simple error (exception) handling strategy.
-Almost every class has a member function named @code{error(char* msg)}
-that invokes an associated error handler function via a pointer to that
-function, so that the error handling function may be reset by
-programmers. By default nearly all call @code{*lib_error_handler}, which
-prints the message and then aborts execution. This system is subject
-to change. In general, errors are assumed to be non-recoverable:
-Library classes do not include code that allows graceful continuation
-after exceptions.
-
-@end itemize
-
-@node OK, Proto, Conventions, Top
-@chapter Support for representation invariants
-
-Most GNU C++ library classes possess a method named @code{OK()},
-that is useful in helping to verify correct performance of class
-operations.
-
-The @code{OK()} operations checks the ``representation invariant'' of a
-class object. This is a test to check whether the object is in a valid
-state. In effect, it is a (sometimes partial) verification of the
-library's promise that (1) class operations always leave objects in
-valid states, and (2) the class protects itself so that client functions
-cannot corrupt this state.
-
-While no simple validation technique can assure that all operations
-perform correctly, calls to @code{OK()} can at least verify that
-operations do not corrupt representations. For example for @code{String
-a, b, c; ... a = b + c;}, a call to @code{a.OK();} will guarantee that
-@code{a} is a valid @code{String}, but does not guarantee that it
-contains the concatenation of @code{b + c}. However, given that @code{a}
-is known to be valid, it is possible to further verify its properties,
-for example via @code{a.after(b) == c && a.before(c) == b}. In other
-words, @code{OK()} generally checks only those internal representation
-properties that are otherwise inaccessible to users of the class. Other
-class operations are often useful for further validation.
-
-Failed calls to @code{OK()} call a class's @code{error} method if
-one exists, else directly call @code{abort}. Failure indicates
-an implementation error that should be reported.
-
-With only rare exceptions, the internal support functions for a class
-never themselves call @code{OK()} (although many of the test files
-in the distribution call @code{OK()} extensively).
-
-Verification of representational invariants can sometimes be
-very time consuming for complicated data structures.
-
-
-@node Proto, Representations, OK, Top
-@chapter Introduction to container class prototypes
-
-As a temporary mechanism enabling the support of generic classes, the GNU
-C++ Library distribution contains a directory (@file{g++-include}) of files
-designed to serve as the basis for generating container classes of
-specified elements. These files can be used to generate @file{.h} and
-@file{.cc} files in the current directory via a supplied shell script
-program that performs simple textual substitution to create specific
-classes.
-
-While these classes are generated independently, and thus share no code,
-it is possible to create versions that do share code among subclasses. For
-example, using @code{typedef void* ent}, and then generating a
-@code{entList} class, other derived classes could be created using the
-@code{void*} coercion method described in Stroustrup, pp204-210.
-
-This very simple class-generation facility is useful enough to serve
-current purposes, but will be replaced with a more coherent mechanism for
-handling C++ generics in a way that minimally disrupts current usage.
-Without knowing exactly when or how parametric classes might be
-added to the C++ language, provision of this simplest possible
-mechanism, textual substitution, appears to be the safest strategy,
-although it does require certain redundancies and awkward constructions.
-
-Specific classes may be generated via the @file{genclass} shell script
-program. This program has arguments specifying the kinds of base types(s)
-to be used. Specifying base types requires two arguments. The first is the
-name of the base type, which may be any named type, like @code{int} or
-@code{String}. Only named types are supported; things like @code{int*} are
-not accepted. However, pointers like this may be used by supplying the
-appropriate typedefs (e.g., editing the resulting files to include
-@code{typedef int* intp;}). The type name must be followed by one of the
-words @code{val} or @code{ref}, to indicate whether the base elements
-should be passed to functions by-value or by-reference.
-
-You can specify basic container classes using @code{genclass base
-[val,ref] proto}, where @code{proto} is the name of the class being
-generated. Container classes like dictionaries and maps that require
-two types may be specified via @code{genclass -2 keytype [val, ref],
-basetype [val, ref] proto}, where the key type is specified first and
-the contents type second. The resulting classnames and filenames are
-generated by prepending the specified type names to the prototype names,
-and separating the filename parts with dots. For example,
-@code{genclass int val List} generates class @code{intList} residing in
-files @file{int.List.h} and @file{int.List.cc}. @code{genclass -2 String
-ref int val VHMap} generates (the awkward, but unavoidable) class name
-@code{StringintVHMap}. Of course, programmers may use @code{typedef} or
-simple editing to create more appropriate names. The existence of dot
-seperators in file names allows the use of GNU make to help automate
-configuration and recompilation. An example Makefile exploiting such
-capabilities may be found in the @file{libg++/proto-kit} directory.
-
-The @code{genclass} utility operates via simple text substitution using
-@code{sed}. All occurrences of the pseudo-types @code{<T>} and @code{<C>}
-(if there are two types) are replaced with the indicated type, and
-occurrences of @code{<T&>} and @code{<C&>} are replaced by just the types,
-if @code{val} is specified, or types followed by ``&'' if @code{ref} is
-specified.
-
-Programmers will frequently need to edit the @file{.h} file in order to
-insert additional @code{#include} directives or other modifications. A
-simple utility, @file{prepend-header} to prepend other @file{.h} files
-to generated files is provided in the distribution.
-
-One dubious virtue of the prototyping mechanism is that, because sources files,
-not archived library classes, are generated, it is relatively simple for
-programmers to modify container classes in the common case where slight
-variations of standard container classes are required.
-
-It is often a good idea for programmers to archive (via @code{ar})
-generated classes into @file{.a} files so that only those class
-functions actually used in a given application will be loaded.
-The test subdirectory of the distribution shows an example of this.
-
-Because of @code{#pragma interface} directives, the @file{.cc} files
-should be compiled with @code{-O} or @code{-DUSE_LIBGXX_INLINES}
-enabled.
-
-Many container classes require specifications over and above the base
-class type. For example, classes that maintain some kind of ordering of
-elements require specification of a comparison function upon which to
-base the ordering. This is accomplished via a prototype file
-@file{defs.hP} that contains macros for these functions. While these
-macros default to perform reasonable actions, they can and should be
-changed in particular cases. Most prototypes require only one or a few
-of these. No harm is done if unused macros are defined to perform
-nonsensical actions. The macros are:
-
-@table @code
-
-@item DEFAULT_INITIAL_CAPACITY
-The initial capacity for containers (e.g., hash tables) that require
-an initial capacity argument for constructors.
-Default: 100
-
-@item <T>EQ(a, b)
-return true if a is considered equal to b for the purposes of
-locating, etc., an element in a container.
-Default: (a == b)
-
-@item <T>LE(a, b)
-return true if a is less than or equal to b
-Default: (a <= b)
-
-@item <T>CMP(a, b)
-return an integer < 0 if a<b, 0 if a==b, or > 0 if a>b.
-Default: (a <= b)? (a==b)? 0 : -1 : 1
-
-@item <T>HASH(a)
-return an unsigned integer representing the hash of a.
-Default: hash(a) ; where extern unsigned int hash(<T&>).
-(note: several useful hash functions are declared in builtin.h
-and defined in hash.cc)
-
-@end table
-
-Nearly all prototypes container classes support container
-traversal via @code{Pix} pseudo indices, as described elsewhere.
-
-All object containers must perform either a @code{X::X(X&)} (or
-@code{X::X()} followed by @code{X::operator =(X&)}) to copy objects into
-containers. (The latter form is used for containers built from C++
-arrays, like @code{VHSets}). When containers are destroyed, they invoke
-@code{X::~X()}. Any objects used in containers must have well behaved
-constructors and destructors. If you want to create containers that
-merely reference (point to) objects that reside elsewhere, and are not
-copied or destroyed inside the container, you must use containers
-of pointers, not containers of objects.
-
-All prototypes are designed to generate @emph{HOMOGENOUS} container
-classes. There is no universally applicable method in C++ to support
-heterogenous object collections with elements of various subclasses of
-some specified base class. The only way to get heterogenous structures
-is to use collections of pointers-to-objects, not collections of objects
-(which also requires you to take responsibility for managing storage for
-the objects pointed to yourself).
-
-For example, the following usage illustrates a commonly encountered
-danger in trying to use container classes for heterogenous structures:
-
-@smallexample
-class Base @{ int x; ...@}
-class Derived : public Base @{ int y; ... @}
-
-BaseVHSet s; // class BaseVHSet generated via something like
- // `genclass Base ref VHSet'
-
-void f()
-@{
- Base b;
- s.add(b); // OK
-
- Derived d;
- s.add(d); // (CHOP!)
-@}
-@end smallexample
-
-At the line flagged with @samp{(CHOP!)}, a @code{Base::Base(Base&)} is
-called inside @code{Set::add(Base&)}---@emph{not}
-@code{Derived::Derived(Derived&)}. Actually, in @code{VHSet}, a
-@code{Base::operator =(Base&)}, is used instead to place the element in
-an array slot, but with the same effect. So only the Base part is
-copied as a @code{VHSet} element (a so-called chopped-copy). In this
-case, it has an @code{x} part, but no @code{y} part; and a Base, not
-Derived, vtable. Objects formed via chopped copies are rarely
-sensible.@refill
-
-To avoid this, you must resort to pointers:
-
-@smallexample
-typedef Base* BasePtr;
-
-BasePtrVHSet s; // class BaseVHSet generated via something like
- // `genclass BasePtr val VHSet'
-
-void f()
-@{
- Base* bp = new Base;
- s.add(b);
-
- Base* dp = new Derived;
- s.add(d); // works fine.
-
- // Don't forget to delete bp and dp sometime.
- // The VHSet won't do this for you.
-@}
-@end smallexample
-
-@section Example
-
-The prototypes can be difficult to use on first attempt. Here is an
-example that may be helpful. The utilities in the @file{proto-kit}
-simplify much of the actions described, but are not used here.
-
-Suppose you create a class @code{Person}, and want to make an Map that
-links the social security numbers associated with each person. You start
-off with a file @file{Person.h}
-
-@example
-
-#include <String.h>
-
-class Person
-@{
- String nm;
- String addr;
- //...
-public:
- const String& name() @{ return nm; @}
- const String& address() @{ return addr; @}
- void print() @{ ... @}
- //...
-@}
-
-@end example
-
-And in file @file{SSN.h},
-
-@example
-typedef unsigned int SSN;
-@end example
-
-Your first decision is what storage/usage strategy to use. There are
-several reasonable alternatives here: You might create an ``object
-collection'' of Persons, a ``pointer collection'' of
-pointers-to-Persons, or even a simple String map, housing either copies
-of pointers to the names of Persons, since other fields are unused for
-purposes of the Map. In an object collection, instances of class Person
-``live'' inside the Map, while in a pointer collection, the instances
-live elsewhere. Also, as above, if instances of subclasses of Person are
-to be used inside the Map, you must use pointers. In a String Map, the
-same difference holds, but now only for the name fields. Any of these
-choices might make sense in particular applications.
-
-The second choice is the Map implementation strategy. Either a tree
-or a hash table might make sense. Suppose you want an AVL tree Map.
-There are two things to now check. First, as an object collection,
-the AVLMap requires that the elsement class contain an @code{X(X&)}
-constructor. In C++, if you don't specify such a constructor, one
-is constructed for you, but it is a very good idea to always do this
-yourself, to avoid surprises. In this example, you'd use something like
-@example
-class Person
-@{ ...;
- Person(const Person& p) :nm(p.nm), addr(p.addr) @{@}
-@};
-@end example
-
-Also, an AVLMap requires a comparison function for elements in order
-to maintain order. Rather than requiring you to write a particular
-comparison function, a @file{defs} file is consulted to determine how to
-compare items. You must create and edit such a file.
-
-Before creating @file{Person.defs.h}, you must first make one additional
-decision. Should the Map member functions like @code{m.contains(p)}
-take arguments (@code{p}) by reference (i.e., typed as
-@code{int Map::contains(const Person& p)} or by value (i.e., typed as
-@code{int Map::contains(const Person p)}. Generally, for user-defined
-classes, you want to pass by reference, and for builtins and pointers,
-to pass by value. SO you should pick by-reference.
-
-You can now create @file{Person.defs.h} via @code{genclass Person ref defs}.
-This creates a simple skeleton that you must edit. First, add
-@code{#include "Person.h"} to the top. Second, edit the @code{<T>CMP(a,b)}
-macro to compare on name, via
-
-@example
-#define <T>CMP(a, b) ( compare(a.name(), b.name()) )
-@end example
-
-@noindent
-which invokes the @code{int compare(const String&, const String&)}
-function from @file{String.h}. Of course, you could define this in any
-other way as well. In fact, the default versions in the skeleton turn
-out to be OK (albeit inefficient) in this particular example.
-
-You may also want to create file @file{SSN.defs.h}. Here, choosing
-call-by-value makes sense, and since no other capabilities (like
-comparison functions) of the SSNs are used (and the defaults are OK
-anyway), you'd type
-
-@example
-genclass SSN val defs
-@end example
-
-@noindent
-and then edit to place @code{#include "SSN.h"} at the top.
-
-Finally, you can generate the classes. First, generate the base
-class for Maps via
-
-@example
-genclass -2 Person ref SSN val Map
-@end example
-
-@noindent
-This generates only the abstract class, not the implementation, in file
-@file{Person.SSN.Map.h} and @file{Person.SSN.Map.cc}. To create the
-AVL implementation, type
-
-@example
-genclass -2 Person ref SSN val AVLMap
-@end example
-
-@noindent
-This creates the class @code{PersonSSNAVLMap}, in
-@file{Person.SSN.AVLMap.h} and @file{Person.SSN.AVLMap.cc}.
-
-To use the AVL implementation, compile the two generated @file{.cc} files, and
-specify @samp{#include "Person.SSN.AVLMap.h"} in the application program.
-All other files are included in the right ways automatically.
-
-One last consideration, peculiar to Maps, is to pick a reasonable
-default contents when declaring an AVLMap. Zero might be appropriate
-here, so you might declare a Map,
-
-@example
-PersonSSNAVLMap m((SSN)0);
-@end example
-
-Suppose you wanted a @code{VHMap} instead of an @code{AVLMap} Besides
-generating different implementations, there are two differences in
-how you should prepare the @file{defs} file. First, because a VHMap
-uses a C++ array internally, and because C++ array slots are initialized
-differently than single elements, you must ensure that class Person
-contains (1) a no-argument constructor, and (2) an assignment operator.
-You could arrange this via
-
-@smallexample
-class Person
-@{ ...;
- Person() @{@}
- void operator = (const Person& p) @{ nm = p.nm; addr = p.addr; @}
-@};
-@end smallexample
-
-(The lack of action in the constructor is OK here because @code{Strings}
-possess usable no-argument constructors.)
-
-You also need to edit @file{Person.defs.h} to indicate a usable hash
-function and default capacity, via something like
-
-@example
-#include <builtin.h>
-#define <T>HASH(x) (hashpjw(x.name().chars()))
-#define DEFAULT_INITIAL_CAPACITY 1000
-@end example
-
-Since the @code{hashpjw} function from @file{builtin.h} is
-appropriate here. Changing the default capacity to a value
-expected to exceed the actual capacity helps to avoid
-``hidden'' inefficiencies when a new VHMap is created without
-overriding the default, which is all too easy to do.
-
-Otherwise, everything is the same as above, substituting
-@code{VHMap} for @code{AVLMap}.
-
-@node Representations, Expressions, Proto, Top
-@chapter Variable-Sized Object Representation
-
-One of the first goals of the GNU C++ library is to enrich the kinds of
-basic classes that may be considered as (nearly) ``built into'' C++. A good
-deal of the inspiration for these efforts is derived from considering
-features of other type-rich languages, particularly Common Lisp and Scheme.
-The general characteristics of most class and friend operators and
-functions supported by these classes has been heavily influenced
-by such languages.
-
-Four of these types, Strings, Integers, BitSets, and BitStrings (as well as
-associated and/or derived classes) require representations suitable for
-managing variable-sized objects on the free-store. The basic technique used
-for all of these is the same, although various details necessarily differ
-from class to class.
-
-The general strategy for representing such objects is to create chunks of
-memory that include both header information (e.g., the size of the object),
-as well as the variable-size data (an array of some sort) at the end
-of the chunk. Generally the maximum size of an object is limited to
-something less than all of addressable memory, as a safeguard. The minimum
-size is also limited so as not to waste allocations expanding very small
-chunks. Internally, chunks are allocated in blocks well-tuned to the
-performance of the @code{new} operator.
-
-Class elements themselves are merely pointers to these chunks.
-Most class operations are performed via inline ``translation''
-functions that perform the required operation on the corresponding
-representation. However, constructors and assignments operate by
-copying entire representations, not just pointers.
-
-
-No attempt is made to control temporary creation in expressions
-and functions involving these classes. Users of previous versions
-of the classes will note the disappearance of both ``Tmp'' classes
-and reference counting. These were dropped because, while they
-did improve performance in some cases, they obscure class
-mechanics, lead programmers into the false belief that they need not
-worry about such things, and occasionally have paradoxical behavior.
-
-
-These variable-sized object classes are integrated as well as possible
-into C++. Most such classes possess converters that allow automatic
-coercion both from and to builtin basic types. (e.g., char* to and from
-String, long int to and from Integer, etc.). There are pro's and con's
-to circular converters, since they can sometimes lead to the conversion
-from a builtin type through to a class function and back to a builtin
-type without any special attention on the part of the programmer, both
-for better and worse.
-
-Most of these classes also provide special-case operators and functions
-mixing basic with class types, as a way to avoid constructors in cases
-where the operations do not rely on anything special about the
-representations. For example, there is a special case concatenation
-operator for a String concatenated with a char, since building the
-result does not rely on anything about the String header. Again, there
-are arguments both for and against this approach. Supporting these cases
-adds a non-trivial degree of (mainly inline) function proliferation, but
-results in more efficient operations. Efficiency wins out over parsimony
-here, as part of the goal to produce classes that provide sufficient
-functionality and efficiency so that programmers are not tempted to try
-to manipulate or bypass the underlying representations.
-
-@node Expressions, Pix, Representations, Top
-@chapter Some guidelines for using expression-oriented classes
-
-
-The fact that C++ allows operators to be overloaded for user-defined
-classes can make programming with library classes like @code{Integer},
-@code{String}, and so on very convenient. However, it is worth
-becoming familiar with some of the inherent limitations and problems
-associated with such operators.
-
-Many operators are @emph{constructive}, i.e., create a new object
-based on some function of some arguments. Sometimes the creation
-of such objects is wasteful. Most library classes supporting
-expressions contain facilities that help you avoid such waste.
-
-For example, for @code{Integer a, b, c; ...; c = a + b + a;}, the
-plus operator is called to sum a and b, creating a new temporary object
-as its result. This temporary is then added with a, creating another
-temporary, which is finally copied into c, and the temporaries are then
-deleted. In other words, this code might have an effect similar to
-@code{Integer a, b, c; ...; Integer t1(a); t1 += b; Integer t2(t1);
-t2 += a; c = t2;}.
-
-For small objects, simple operators, and/or non-time/space critical
-programs, creation of temporaries is not a big problem. However, often,
-when fine-tuning a program, it may be a good idea to rewrite such
-code in a less pleasant, but more efficient manner.
-
-For builtin types like ints, and floats, C and C++ compilers already
-know how to optimize such expressions to reduce the need for
-temporaries. Unfortunately, this is not true for C++ user defined
-types, for the simple (but very annoying, in this context) reason that
-nothing at all is guaranteed about the semantics of overloaded operators
-and their interrelations. For example, if the above expression just
-involved ints, not Integers, a compiler might internally convert the
-statement into something like @code{ c = a; c += b; c+= a; }, or
-perhaps something even more clever. But since C++ does not know that
-Integer operator += has any relation to Integer operator +, A C++
-compiler cannot do this kind of expression optimization itself.
-
-In many cases, you can avoid construction of temporaries simply by
-using the assignment versions of operators whenever possible, since
-these versions create no temporaries. However, for maximum flexibility,
-most classes provide a set of ``embedded assembly code'' procedures
-that you can use to fully control time, space, and evaluation strategies.
-Most of these procedures are ``three-address'' procedures that take
-two @code{const} source arguments, and a destination argument. The
-procedures perform the appropriate actions, placing the results in
-the destination (which is may involve overwriting old contents). These
-procedures are designed to be fast and robust. In particular, aliasing
-is always handled correctly, so that, for example
-@code{add(x, x, x); } is perfectly OK. (The names of these procedures
-are listed along with the classes.)
-
-For example, suppose you had an Integer expression
-@code{ a = (b - a) * -(d / c); }
-
-This would be compiled as if it were
-@code{ Integer t1=b-a; Integer t2=d/c; Integer t3=-t2; Integer t4=t1*t3; a=t4;}
-
-But, with some manual cleverness, you might yourself some up with
-@code{ sub(a, b, a); mul(a, d, a); div(a, c, a); }
-
-
-A related phenomenon occurs when creating your own constructive
-functions returning instances of such types. Suppose you wanted
-to write function
-@code{Integer f(const Integer& a) @{ Integer r = a; r += a; return r; @}}
-
-This function, when called (as in @code{ a = f(a); }) demonstrates a
-similar kind of wasted copy. The returned value r must be copied
-out of the function before it can be used by the caller. In GNU
-C++, there is an alternative via the use of named return values.
-Named return values allow you to manipulate the returned object
-directly, rather than requiring you to create a local inside
-a function and then copy it out as the returned value. In this
-example, this can be done via
-@code{Integer f(const Integer& a) return r(a) @{ r += a; return; @}}
-
-
-A final guideline: The overloaded operators are very convenient, and
-much clearer to use than procedural code. It is almost always a good
-idea to make it right, @emph{then} make it fast, by translating
-expression code into procedural code after it is known to be correct.
-
-
-
-@node Pix, Headers, Expressions, Top
-@chapter Pseudo-indexes
-
-Many useful classes operate as containers of elements. Techniques for
-accessing these elements from a container differ from class to class.
-In the GNU C++ library, access methods have been partially standardized
-across different classes via the use of pseudo-indexes called
-@code{Pixes}. A @code{Pix} acts in some ways like an index, and in some
-ways like a pointer. (Their underlying representations are just
-@code{void*} pointers). A @code{Pix} is a kind of ``key'' that is
-translated into an element access by the class. In virtually all cases,
-@code{Pixes} are pointers to some kind internal storage cells. The
-containers use these pointers to extract items.
-
-@code{Pixes} support traversal and inspection of elements in a
-collection using analogs of array indexing. However, they are
-pointer-like in that @code{0} is treated as an invalid @code{Pix}, and
-unsafe insofar as programmers can attempt to access nonexistent elements
-via dangling or otherwise invalid @code{Pixes} without first checking
-for their validity.
-
-In general it is a very bad idea to perform traversals in the the midst
-of destructive modifications to containers.
-
-Typical applications might include code using the idiom
-@example
-for (Pix i = a.first(); i != 0; a.next(i)) use(a(i));
-@end example
-for some container @code{a} and function @code{use}.
-
-Classes supporting the use of @code{Pixes} always contain the following
-methods, assuming a container @code{a} of element types of @code{Base}.
-
-@table @code
-
-@item Pix i = a.first()
-Set i to index the first element of a or 0 if a is empty.
-
-@item a.next(i)
-advance i to the next element of a or 0 if there is no next element;
-
-@item Base x = a(i); a(i) = x;
-a(i) returns a reference to the element indexed by i.
-
-@item int present = a.owns(i)
-returns true if Pix i is a valid Pix in a. This is often a
-relatively slow operation, since the collection must usually
-traverse through elements to see if any correspond to the Pix.
-
-@end table
-
-Some container classes also support backwards traversal via
-
-@table @code
-@item Pix i = a.last()
-Set i to the last element of a or 0 if a is empty.
-
-@item a.prev(i)
-sets i to the previous element in a, or 0 if there is none.
-@end table
-
-Collections supporting elements with an equality operation possess
-
-@table @code
-@item Pix j = a.seek(x)
-sets j to the index of the first occurrence of x, or 0 if x is
-not contained in a.
-@end table
-
-Bag classes possess
-
-@table @code
-@item Pix j = a.seek(x, Pix from = 0)
-sets j to the index of the next occurrence of x following i,
-or 0 if x is not contained in a. If i == 0, the first occurrence
-is returned.
-@end table
-
-Set, Bag, and PQ classes possess
-
-@table @code
-@item Pix j = a.add(x) (or a.enq(x) for priority queues)
-add x to the collection, returning its Pix. The Pix of an item
-can change in collections where further additions and deletions
-involve the actual movement of elements (currently in OXPSet,
-OXPBag, XPPQ, VOHSet), but in all other cases, an item's Pix may
-be considered a permanent key to its location.
-@end table
-
-@node Headers, Builtin, Pix, Top
-@chapter Header files for interfacing C++ to C
-
-The following files are provided so that C++ programmers may
-invoke common C library and system calls. The names and contents
-of these files are subject to change in order to be compatible
-with the forthcoming GNU C library. Other files, not listed
-here, are simply C++-compatible interfaces to corresponding C
-library files.
-
-@table @file
-@item values.h
-A collection of constants defining the numbers of bits in builtin
-types, minimum and maximum values, and the like. Most names are
-the same as those found in @file{values.h} found on Sun systems.
-
-@item std.h
-A collection of common system calls and @file{libc.a} functions.
-Only those functions that can be declared without introducing
-new type definitions (socket structures, for example) are
-provided. Common @code{char*} functions (like @code{strcmp}) are among
-the declarations. All functions are declared along with their
-library names, so that they may be safely overloaded.
-
-@item string.h
-This file merely includes @file{<std.h>}, where string function
-prototypes are declared. This is a workaround for the fact that
-system @file{string.h} and @file{strings.h} files often differ
-in contents.
-
-@item osfcn.h
-This file merely includes @file{<std.h>}, where system function
-prototypes are declared.
-
-@item libc.h
-This file merely includes @file{<std.h>}, where C library function
-prototypes are declared.
-
-@item math.h
-A collection of prototypes for functions usually found in
-libm.a, plus some @code{#define}d constants that appear to be
-consistent with those provided in the AT&T version. The value
-of @code{HUGE} should be checked before using. Declarations of
-all common math functions are preceded with @code{overload}
-declarations, since these are commonly overloaded.
-
-@item stdio.h
-Declaration of @code{FILE} (@code{_iobuf}), common macros (like
-@code{getc}), and function prototypes for @file{libc.a}
-functions that operate on @code{FILE*}'s. The value
-@code{BUFSIZ} and the declaration of @code{_iobuf} should be
-checked before using.
-
-@item assert.h
-C++ versions of assert macros.
-
-@item generic.h
-String concatenation macros useful in creating generic classes.
-They are similar in function to the AT&T CC versions.
-
-@item new.h
-Declarations of the default global operator new, the two-argument
-placement version, and associated error handlers.
-@end table
-
-@node Builtin, New, Headers, Top
-@chapter Utility functions for built in types
-
-Files @file{builtin.h} and corresponding @file{.cc} implementation
-files contain various convenient
-inline and non-inline utility functions. These include useful
-enumeration types, such as @code{TRUE}, @code{FALSE} ,the type
-definition for pointers to libg++ error handling functions, and
-the following functions.
-
-@table @code
-@item long abs(long x); double abs(double x);
-inline versions of abs. Note that the standard libc.a version,
-@code{int abs(int)} is @emph{not} declared as inline.
-
-@item void clearbit(long& x, long b);
-clears the b'th bit of x (inline).
-
-@item void setbit(long& x, long b);
-sets the b'th bit of x (inline)
-
-@item int testbit(long x, long b);
-returns the b'th bit of x (inline).
-
-@item int even(long y);
-returns true if x is even (inline).
-
-@item int odd(long y);
-returns true is x is odd (inline).
-
-@item int sign(long x); int sign(double x);
-returns -1, 0, or 1, indicating whether x is less than, equal to, or
-greater than zero (inline).
-
-@item long gcd(long x, long y);
-returns the greatest common divisor of x and y.
-
-@item long lcm(long x, long y);
-returns the least common multiple of x and y.
-
-@item long lg(long x);
-returns the floor of the base 2 log of x.
-
-@item long pow(long x, long y); double pow(double x, long y);
-returns x to the integer power y using via the iterative O(log y)
-``Russian peasant'' method.
-
-@item long sqr(long x); double sqr(double x);
-returns x squared (inline).
-
-@item long sqrt(long y);
-returns the floor of the square root of x.
-
-@item unsigned int hashpjw(const char* s);
-a hash function for null-terminated char* strings using the
-method described in Aho, Sethi, & Ullman, p 436.
-
-@item unsigned int multiplicativehash(int x);
-a hash function for integers that returns the lower bits of
-multiplying x by the golden ratio times pow(2, 32).
-See Knuth, Vol 3, p 508.
-
-@item unsigned int foldhash(double x);
-a hash function for doubles that exclusive-or's the first and
-second words of x, returning the result as an integer.
-
-@item double start_timer()
-Starts a process timer.
-
-@item double return_elapsed_time(double last_time)
-Returns the process time since last_time.
-If last_time == 0 returns the time since the last start_timer.
-Returns -1 if start_timer was not first called.
-
-@end table
-
-File @file{Maxima.h} includes versions of @code{MAX, MIN}
-for builtin types.
-
-File @file{compare.h} includes versions of @code{compare(x, y)}
-for builtin types. These return negative if the first argument
-is less than the second, zero for equal, and positive for greater.
-
-@node New, Stream, Builtin, Top
-@chapter Library dynamic allocation primitives
-
-Libg++ contains versions of @code{malloc, free, realloc} that were
-designed to be well-tuned to C++ applications. The source file
-@file{malloc.c} contains some design and implementation details.
-Here are the major user-visible differences from most system
-malloc routines:
-
-@enumerate
-
-@item
-These routines @emph{overwrite} storage of freed space. This
-means that it is never permissible to use a @code{delete}'d
-object in any way. Doing so will either result in trapped
-fatal errors or random aborts within malloc, free, or realloc.
-
-@item
-The routines tend to perform well when a large number
-of objects of the same size are allocated and freed. You
-may find that it is not worth it to create your
-own special allocation schemes in such cases.
-
-@item
-The library sets top-level @code{operator new()} to call malloc and
-@code{operator delete()} to call free. Of course, you may override these
-definitions in C++ programs by creating your own operators that will
-take precedence over the library versions. However, if you do so, be
-sure to define @emph{both} @code{operator new()} and @code{operator
-delete()}.
-
-@item
-These routines do @emph{not} support the odd convention, maintained by
-some versions of malloc, that you may call @code{realloc} with a pointer
-that has been @code{free}'d.
-
-@item
-The routines automatically perform simple checks on @code{free}'d
-pointers that can often determine whether users have accidentally
-written beyond the boundaries of allocated space, resulting in a fatal
-error.
-
-@item
-The function @code{malloc_usable_size(void* p)} returns the number of
-bytes actually allocated for @code{p}. For a valid pointer (i.e., one
-that has been @code{malloc}'d or @code{realloc}'d but not yet
-@code{free}'d) this will return a number greater than or equal to the
-requested size, else it will normally return 0. Unfortunately, a
-non-zero return can not be an absolutely perfect indication of lack of
-error. If a chunk has been @code{free}'d but then re-allocated for a
-different purpose somewhere elsewhere, then @code{malloc_usable_size}
-will return non-zero. Despite this, the function can be very valuable
-for performing run-time consistency checks.
-
-@item
-@code{malloc} requires 8 bytes of overhead per allocated chunk, plus a
-mmaximum alignment adjustment of 8 bytes. The number of bytes of usable
-space is exactly as requested, rounded to the nearest 8 byte boundary.
-
-@item
-The routines do @emph{not} contain any synchronization support for
-multiprocessing. If you perform global allocation on a shared
-memory multiprocessor, you should disable compilation and use
-of libg++ malloc in the distribution @file{Makefile} and use your
-system version of malloc.
-
-@end enumerate
-
-@iftex
-@node IOStream
-@chapter The new input/output classes
-
-The iostream classes implement most of the features of AT&T
-version 2.0 iostream library classes, and most of the features
-of the ANSI X3J16 library draft (which is based on the AT&T design).
-These classes are available in @code{libg++} for convenience and for
-compatibility with older releases; however, since the iostream classes
-are licensed under less stringent terms than @code{libg++}, they are now
-also available in a separate library called @code{libio}---and
-documented in a separate manual, corresponding to that library.
-
-@xref{Introduction,,Introduction, iostream.info, The GNU C++ Iostream
-Library}.
-@end iftex
-
-@node Stream, Obstack, New, Top
-@chapter The old I/O library
-
-WARNING: This chapter describes classes that are @emph{obsolete}.
-These classes are normally not available when libg++
-is installed normally. The sources are currently included
-in the distribution, and you can configure libg++ to use
-these classes instead of the new iostream classes.
-This is only a temporary measure; you should convert your
-code to use iostreams as soon as possible. The iostream
-classes provide some compatibility support, but it is
-very incomplete (there is no longer a @code{File} class).
-
-@section File-based classes
-
-The @code{File} class supports basic IO on Unix files. Operations are
-based on common C stdio library functions.
-
-@code{File} serves as the base class for istreams, ostreams, and other
-derived classes. It contains the interface between the Unix stdio file
-library and these more structured classes. Most operations are implemented
-as simple calls to stdio functions. @code{File} class operations are also fully
-compatible with raw system file reads and writes (like the system
-@code{read} and @code{lseek} calls) when buffering is disabled (see below).
-The @code{FILE*} stdio file pointer is, however maintained as protected.
-Classes derived from File may only use the IO operations provided by File,
-which encompass essentially all stdio capabilities.
-
-The class contains four general kinds of functions: methods for binding
-@code{File}s to physical Unix files, basic IO methods, file and buffer
-control methods, and methods for maintaining logical and physical file
-status.
-
-
-Binding and related tasks are accomplished via @code{File} constructors and
-destructors, and member functions @code{open, close, remove, filedesc,
-name, setname}.
-
-If a file name is provided in a constructor or open, it is
-maintained as class variable @code{nm} and is accessible
-via @code{name}. If no name is provided, then @code{nm} remains
-null, except that @code{Files} bound to the default files stdin,
-stdout, and stderr are automatically given the names
-@code{(stdin), (stdout), (stderr)} respectively.
-The function @code{setname} may be used to change the
-internal name of the @code{File}. This does not change the name
-of the physical file bound to the File.
-
-The member function @code{close} closes a file. The
-@code{~File} destructor closes a file if it is open, except
-that stdin, stdout, and stderr are flushed but left open for
-the system to close on program exit since some systems may
-require this, and on others it does not matter. @code{remove}
-closes the file, and then deletes it if possible by calling the
-system function to delete the file with the name provided in
-the @code{nm} field.
-
-@section Basic IO
-
-@itemize @bullet
-
-@item
-@code{read} and @code{write} perform binary IO via stdio
-@code{fread} and @code{fwrite}.
-
-@item
-@code{get} and @code{put} for chars invoke stdio @code{getc}
-and @code{putc} macros.
-
-@item
-@code{put(const char* s)} outputs a null-terminated string via
-stdio @code{fputs}.
-
-@item
-@code{unget} and @code{putback} are synonyms. Both call stdio
-@code{ungetc}.
-
-@end itemize
-
-@section File Control
-
-@code{flush}, @code{seek}, @code{tell}, and @code{tell} call the
-corresponding stdio functions.
-
-@code{flush(char)} and @code{fill()} call stdio @code{_flsbuf}
-and @code{_filbuf} respectively.
-
-@code{setbuf} is mainly useful to turn off buffering in cases
-where nonsequential binary IO is being performed. @code{raw} is a
-synonym for @code{setbuf(_IONBF)}. After a @code{f.raw()}, using
-the stdio functions instead of the system @code{read, write},
-etc., calls entails very little overhead. Moreover, these become
-fully compatible with intermixed system calls (e.g.,
-@code{lseek(f.filedesc(), 0, 0)}). While intermixing @code{File}
-and system IO calls is not at all recommended, this technique
-does allow the @code{File} class to be used in conjunction with
-other functions and libraries already set up to operate on file
-descriptors. @code{setbuf} should be called at most once after a
-constructor or open, but before any IO.
-
-@section File Status
-
-File status is maintained in several ways.
-
-A @code{File} may be checked for accessibility via
-@code{is_open()}, which returns true if the File is bound to a
-usable physical file, @code{readable()}, which returns true if
-the File can be read from (opened for reading, and not in a
-_fail state), or @code{writable()}, which returns true if the
-File can be written to.
-
-@code{File} operations return their status via two means: failure and
-success are represented via the logical state. Also, the
-return values of invoked stdio and system functions that
-return useful numeric values (not just failure/success flags)
-are held in a class variable accessible via @code{iocount}.
-(This is useful, for example, in determining the number of
-items actually read by the @code{read} function.)
-
-Like the AT&T i/o-stream classes, but unlike the description in
-the Stroustrup book, p238, @code{rdstate()} returns the bitwise
-OR of @code{_eof}, @code{_fail} and @code{_bad}, not necessarily
-distinct values. The functions @code{eof()}, @code{fail()},
-@code{bad()}, and @code{good()} can be used to test for each of
-these conditions independently.
-
-@code{_fail} becomes set for any input operation that could not
-read in the desired data, and for other failed operations. As
-with all Unix IO, @code{_eof} becomes true only when an input
-operations fails because of an end of file. Therefore,
-@code{_eof} is not immediately true after the last successful
-read of a file, but only after one final read attempt. Thus, for
-input operations, @code{_fail} and @code{_eof} almost always
-become true at the same time. @code{bad} is set for unbound
-files, and may also be set by applications in order to communicate
-input corruption. Conversely, @code{_good} is defined as 0 and
-is returned by @code{rdstate()} if all is well.
-
-The state may be modified via @code{clear(flag)}, which,
-despite its name, sets the corresponding state_value flag.
-@code{clear()} with no arguments resets the state to @code{_good}.
-@code{failif(int cond)} sets the state to @code{_fail} only if
-@code{cond} is true.
-
-Errors occuring during constructors and file opens also invoke the
-function @code{error}. @code{error} in turn calls a resetable error
-handling function pointed to by the non-member global variable
-@code{File_error_handler} only if a system error has been generated.
-Since @code{error} cannot tell if the current system error is actually
-responsible for a failure, it may at times print out spurious messages.
-Three error handlers are provided. The default,
-@code{verbose_File_error_handler} calls the system function
-@code{perror} to print the corresponding error message on standard
-error, and then returns to the caller. @code{quiet_File_error_handler}
-does nothing, and simply returns. @code{fatal_File_error_handler}
-prints the error and then aborts execution. These three handlers, or any
-other user-defined error handlers can be selected via the non-member
-function @code{set_File_error_handler}.
-
-All read and write operations communicate either logical or
-physical failure by setting the @code{_fail} flag. All further
-operations are blocked if the state is in a @code{_fail} or@code{_bad}
-condition. Programmers must explicitly use @code{clear()} to
-reset the state in order to continue IO processing after
-either a logical or physical failure. C programmers who are
-unfamiliar with these conventions should note that, unlike
-the stdio library, @code{File} functions indicate IO success,
-status, or failure solely through the state, not via return values of
-the functions. The @code{void*} operator or @code{rdstate()}
-may be used to test success. In particular, according to c++
-conversion rules, the @code{void*} coercion is automatically
-applied whenever the @code{File&} return value of any @code{File}
-function is tested in an @code{if} or @code{while}. Thus,
-for example, an easy way to copy all of stdin to stdout until
-eof (at which point @code{get} fails) or some error is
-@code{char c; while(cin.get(c) && cout.put(c));}.
-
-@ignore
-@section The istream and ostream classes
-
-Some of these are supported by incorporating additional,
-mainly virtual, functions into streambufs:
-
-@table @code
-
-@item streambuf::open([various args])
-attaches the streambuf to a file, if applicable
-
-@item streambuf::close()
-detaches the streambuf from a file, if applicable.
-
-@item streambuf::sputs(const char* s)
-outputs null-terminated string s in a generally faster way
-than repeated @code{sputcs}.
-
-@item streambuf::sputsn(const char* s, int n)
-outputs the first n characters of s in a generally faster way
-than repeated @code{sputcs}.
-
-@end table
-@end ignore
-
-The current version of istreams and ostreams differs significantly
-from previous versions in order to obtain compatibility with
-AT&T 1.2 streams. Most code using previous versions should still
-work. However, the following features of @code{File} are not
-incorporated in streams (they are still present in @code{File}):
-@code{scan(const char* fmt...), remove(), read(), write(),
-setbuf(), raw()}. Additionally, the feature of previous streams
-that allowed free intermixing of stream and stdio input and output
-is no longer guaranteed to always behave as desired.
-
-@node Obstack, AllocRing, Stream, Top
-@chapter The Obstack class
-
-
-The @code{Obstack} class is a simple rewrite of the C obstack macros and
-functions provided in the GNU CC compiler source distribution.
-
-Obstacks provide a simple method of creating and maintaining a string
-table, optimized for the very frequent task of building strings
-character-by-character, and sometimes keeping them, and sometimes
-not. They seem especially useful in any parsing application. One of the
-test files demonstrates usage.
-
-A brief summary:
-@table @code
-
-@item grow
-places something on the obstack without committing to wrap
-it up as a single entity yet.
-
-@item finish
-wraps up a constructed object as a single entity,
-and returns the pointer to its start address.
-
-@item copy
-places things on the obstack, and @emph{does} wrap them up.
-@code{copy} is always equivalent to first grow, then finish.
-
-@item free
-deletes something, and anything else put on the obstack since its creation.
-@end table
-
-The other functions are less commonly needed:
-@table @code
-@item blank
-is like grow, except it just grows the space by size units
-without placing anything into this space
-@item alloc
-is like @code{blank}, but it wraps up the object and returns its starting
-address.
-@item chunk_size, base, next_free, alignment_mask, size, room
-returns the appropriate class variables.
-@item grow_fast
-places a character on the obstack without checking if there is enough room.
-@item blank_fast
-like @code{blank}, but without checking if there is enough room.
-@item shrink(int n)
-shrink the current chunk by n bytes.
-@item contains(void* addr)
-returns true if the Obstack holds the address addr.
-@end table
-
-Here is a lightly edited version of the original C documentation:
-
-These functions operate a stack of objects. Each object starts life
-small, and may grow to maturity. (Consider building a word syllable
-by syllable.) An object can move while it is growing. Once it has
-been ``finished'' it never changes address again. So the ``top of the
-stack'' is typically an immature growing object, while the rest of the
-stack is of mature, fixed size and fixed address objects.
-
-These routines grab large chunks of memory, using the GNU C++ @code{new}
-operator. On occasion, they free chunks, via @code{delete}.
-
-Each independent stack is represented by a Obstack.
-
-One motivation for this package is the problem of growing char strings
-in symbol tables. Unless you are a ``fascist pig with a read-only mind''
-[Gosper's immortal quote from HAKMEM item 154, out of context] you
-would not like to put any arbitrary upper limit on the length of your
-symbols.
-
-In practice this often means you will build many short symbols and a
-few long symbols. At the time you are reading a symbol you don't know
-how long it is. One traditional method is to read a symbol into a
-buffer, @code{realloc()}ating the buffer every time you try to read a
-symbol that is longer than the buffer. This is beaut, but you still will
-want to copy the symbol from the buffer to a more permanent
-symbol-table entry say about half the time.
-
-With obstacks, you can work differently. Use one obstack for all symbol
-names. As you read a symbol, grow the name in the obstack gradually.
-When the name is complete, finalize it. Then, if the symbol exists already,
-free the newly read name.
-
-The way we do this is to take a large chunk, allocating memory from
-low addresses. When you want to build a symbol in the chunk you just
-add chars above the current ``high water mark'' in the chunk. When you
-have finished adding chars, because you got to the end of the symbol,
-you know how long the chars are, and you can create a new object.
-Mostly the chars will not burst over the highest address of the chunk,
-because you would typically expect a chunk to be (say) 100 times as
-long as an average object.
-
-In case that isn't clear, when we have enough chars to make up
-the object, @emph{they are already contiguous in the chunk} (guaranteed)
-so we just point to it where it lies. No moving of chars is
-needed and this is the second win: potentially long strings need
-never be explicitly shuffled. Once an object is formed, it does not
-change its address during its lifetime.
-
-When the chars burst over a chunk boundary, we allocate a larger
-chunk, and then copy the partly formed object from the end of the old
-chunk to the beginning of the new larger chunk. We then carry on
-accreting characters to the end of the object as we normally would.
-
-A special version of grow is provided to add a single char at a time
-to a growing object.
-
-Summary:
-
-@itemize @bullet
-@item
-We allocate large chunks.
-@item
-We carve out one object at a time from the current chunk.
-@item
-Once carved, an object never moves.
-@item
-We are free to append data of any size to the currently growing object.
-@item
-Exactly one object is growing in an obstack at any one time.
-@item
-You can run one obstack per control block.
-@item
-You may have as many control blocks as you dare.
-@item
-Because of the way we do it, you can `unwind' a obstack back to a
-previous state. (You may remove objects much as you would with a stack.)
-@end itemize
-
-The obstack data structure is used in many places in the GNU C++ compiler.
-
-Differences from the the GNU C version
-@enumerate
-@item
-The obvious differences stemming from the use of classes and
-inline functions instead of structs and macros. The C
-@code{init} and @code{begin} macros are replaced by constructors.
-
-@item
-Overloaded function names are used for grow (and others),
-rather than the C @code{grow}, @code{grow0}, etc.
-
-@item
-All dynamic allocation uses the the built-in @code{new} operator.
-This restricts flexibility by a little, but maintains compatibility
-with usual C++ conventions.
-
-@item
-There are now two versions of finish:
-
-@enumerate
-@item
-finish() behaves like the C version.
-
-@item
-finish(char terminator) adds @code{terminator}, and then calls
-@code{finish()}. This enables the normal invocation of @code{finish(0)} to
-wrap up a string being grown character-by-character.
-@end enumerate
-
-@item
-There are special versions of grow(const char* s) and
-copy(const char* s) that add the null-terminated string @code{s}
-after computing its length.
-
-@item
-The shrink and contains functions are provided.
-
-@end enumerate
-
-@node AllocRing, String, Obstack, Top
-@chapter The AllocRing class
-
-An AllocRing is a bounded ring (circular list), each of whose elements
-contains a pointer to some space allocated via @code{new
-char[some_size]}. The entries are used cyclicly. The size, n, of the
-ring is fixed at construction. After that, every nth use of the ring
-will reuse (or reallocate) the same space. AllocRings are needed in
-order to temporarily hold chunks of space that are needed transiently,
-but across constructor-destructor scopes. They mainly useful for storing
-strings containing formatted characters to print across various
-functions and coercions. These strings are needed across routines, so
-may not be deleted in any one of them, but should be recovered at some
-point. In other words, an AllocRing is an extremely simple minded
-garbage collection mechanism. The GNU C++ library used to use one
-AllocRing for such formatting purposes, but it is being phased out,
-and is now only used by obsolete functions.
-These days, AllocRings are probably not very useful.
-
-Support includes:
-
-@table @code
-
-@item AllocRing a(int n)
-constructs an Alloc ring with n entries, all null.
-
-@item void* mem = a.alloc(sz)
-moves the ring pointer to the next entry, and reuses the space
-if their is enough, also allocates space via new char[sz].
-
-@item int present = a.contains(void* ptr)
-returns true if ptr is held in one of the ring entries.
-
-@item a.clear()
-deletes all space pointed to in any entry. This is called
-automatically upon destruction.
-
-@item a.free(void* ptr)
-If ptr is one of the entries, calls delete of the pointer,
-and resets to entry pointer to null.
-
-@end table
-
-@node String, Integer, AllocRing, Top
-@chapter The String class
-
-The @code{String} class is designed to extend GNU C++ to support
-string processing capabilities similar to those in languages like
-Awk. The class provides facilities that ought to be convenient
-and efficient enough to be useful replacements for @code{char*}
-based processing via the C string library (i.e., @code{strcpy,
-strcmp,} etc.) in many applications. Many details about String
-representations are described in the Representation section.
-
-A separate @code{SubString} class supports substring extraction
-and modification operations. This is implemented in a way that
-user programs never directly construct or represent substrings,
-which are only used indirectly via String operations.
-
-Another separate class, @code{Regex} is also used indirectly via String
-operations in support of regular expression searching, matching, and the
-like. The Regex class is based entirely on the GNU Emacs regex
-functions. @xref{Regexps, Syntax of Regular Expressions, Syntax of
-Regular Expressions, emacs.info, GNU Emacs Manual}, for a full
-explanation of regular expression syntax. (For implementation details,
-see the internal documentation in files @file{regex.h} and
-@file{regex.c}.)
-
-@section Constructors
-
-Strings are initialized and assigned as in the following examples:
-
-@table @code
-
-@item String x; String y = 0; String z = "";
-Set x, y, and z to the nil string. Note that either 0 or "" may
-always be used to refer to the nil string.
-
-@item String x = "Hello"; String y("Hello");
-Set x and y to a copy of the string "Hello".
-
-@item String x = 'A'; String y('A');
-Set x and y to the string value "A"
-
-@item String u = x; String v(x);
-Set u and v to the same string as String x
-
-@item String u = x.at(1,4); String v(x.at(1,4));
-Set u and v to the length 4 substring of x starting at position 1
-(counting indexes from 0).
-
-@item String x("abc", 2);
-Sets x to "ab", i.e., the first 2 characters of "abc".
-
-@item String x = dec(20);
-Sets x to "20". As here, Strings may be initialized or assigned
-the results of any @code{char*} function.
-
-@end table
-
-There are no directly accessible forms for declaring SubString
-variables.
-
-The declaration @code{Regex r("[a-zA-Z_][a-zA-Z0-9_]*");} creates
-a compiled regular expression suitable for use in String
-operations described below. (In this case, one that matches any
-C++ identifier). The first argument may also be a String.
-Be careful in distinguishing the role of backslashes in quoted
-GNU C++ char* constants versus those in Regexes. For example, a Regex
-that matches either one or more tabs or all strings beginning
-with "ba" and ending with any number of occurrences of "na"
-could be declared as @code{Regex r = "\\(\t+\\)\\|\\(ba\\(na\\)*\\)"}
-Note that only one backslash is needed to signify the tab, but
-two are needed for the parenthesization and virgule, since the
-GNU C++ lexical analyzer decodes and strips backslashes before
-they are seen by Regex.
-
-There are three additional optional arguments to the Regex constructor
-that are less commonly useful:
-
-@table @code
-@item fast (default 0)
-@code{fast} may be set to true (1) if the Regex should be
-"fast-compiled". This causes an additional compilation step that
-is generally worthwhile if the Regex will be used many times.
-
-@item bufsize (default max(40, length of the string))
-This is an estimate of the size of the internal compiled
-expression. Set it to a larger value if you know that the
-expression will require a lot of space. If you do not know,
-do not worry: realloc is used if necessary.
-
-@item transtable (default none == 0)
-The address of a byte translation table (a char[256]) that
-translates each character before matching.
-
-@end table
-
-As a convenience, several Regexes are predefined and usable in
-any program. Here are their declarations from @file{String.h}.
-
-@smallexample
-extern Regex RXwhite; // = "[ \n\t]+"
-extern Regex RXint; // = "-?[0-9]+"
-extern Regex RXdouble; // = "-?\\(\\([0-9]+\\.[0-9]*\\)\\|
- // \\([0-9]+\\)\\|
- // \\(\\.[0-9]+\\)\\)
- // \\([eE][---+]?[0-9]+\\)?"
-extern Regex RXalpha; // = "[A-Za-z]+"
-extern Regex RXlowercase; // = "[a-z]+"
-extern Regex RXuppercase; // = "[A-Z]+"
-extern Regex RXalphanum; // = "[0-9A-Za-z]+"
-extern Regex RXidentifier; // = "[A-Za-z_][A-Za-z0-9_]*"
-
-@end smallexample
-
-@section Examples
-
-Most @code{String} class capabilities are best shown via example.
-The examples below use the following declarations.
-
-@example
- String x = "Hello";
- String y = "world";
- String n = "123";
- String z;
- char* s = ",";
- String lft, mid, rgt;
- Regex r = "e[a-z]*o";
- Regex r2("/[a-z]*/");
- char c;
- int i, pos, len;
- double f;
- String words[10];
- words[0] = "a";
- words[1] = "b";
- words[2] = "c";
-
-@end example
-
-@section Comparing, Searching and Matching
-
-The usual lexicographic relational operators (@code{==, !=, <, <=, >, >=})
-are defined. A functional form @code{compare(String, String)} is also
-provided, as is @code{fcompare(String, String)}, which compares
-Strings without regard for upper vs. lower case.
-
-All other matching and searching operations are based on some form of the
-(non-public) @code{match} and @code{search} functions. @code{match} and
-@code{search} differ in that @code{match} attempts to match only at the
-given starting position, while @code{search} starts at the position, and
-then proceeds left or right looking for a match. As seen in the following
-examples, the second optional @code{startpos} argument to functions using
-@code{match} and @code{search} specifies the starting position of the
-search: If non-negative, it results in a left-to-right search starting at
-position @code{startpos}, and if negative, a right-to-left search starting
-at position @code{x.length() + startpos}. In all cases, the index returned
-is that of the beginning of the match, or -1 if there is no match.
-
-Three String functions serve as front ends to @code{search} and @code{match}.
-@code{index} performs a search, returning the index, @code{matches} performs
-a match, returning nonzero (actually, the length of the match) on success,
-and @code{contains} is a boolean function performing either a search or
-match, depending on whether an index argument is provided:
-
-@table @code
-
-@item x.index("lo")
-returns the zero-based index of the leftmost occurrence of
-substring "lo" (3, in this case). The argument may be a
-String, SubString, char, char*, or Regex.
-
-@item x.index("l", 2)
-returns the index of the first of the leftmost occurrence of "l"
-found starting the search at position x[2], or 2 in this case.
-
-@item x.index("l", -1)
-returns the index of the rightmost occurrence of "l", or 3 here.
-
-@item x.index("l", -3)
-returns the index of the rightmost occurrence of "l" found by
-starting the search at the 3rd to the last position of x,
-returning 2 in this case.
-
-@item pos = r.search("leo", 3, len, 0)
-returns the index of r in the @code{char*} string of length 3,
-starting at position 0, also placing the length of the match
-in reference parameter len.
-
-@item x.contains("He")
-returns nonzero if the String x contains the substring "He". The
-argument may be a String, SubString, char, char*, or Regex.
-
-@item x.contains("el", 1)
-returns nonzero if x contains the substring "el" at position 1.
-As in this example, the second argument to @code{contains},
-if present, means to match the substring only at that position,
-and not to search elsewhere in the string.
-
-@item x.contains(RXwhite);
-returns nonzero if x contains any whitespace (space, tab, or
-newline). Recall that @code{RXwhite} is a global whitespace Regex.
-
-@item x.matches("lo", 3)
-returns nonzero if x starting at position 3 exactly matches "lo", with
-no trailing characters (as it does in this example).
-
-@item x.matches(r)
-returns nonzero if String x as a whole matches Regex r.
-
-@item int f = x.freq("l")
-returns the number of distinct, nonoverlapping matches to the argument
-(2 in this case).
-
-@end table
-
-@section Substring extraction
-
-Substrings may be extracted via the @code{at}, @code{before},
-@code{through}, @code{from}, and @code{after} functions.
-These behave as either lvalues or rvalues.
-
-@table @code
-
-@item z = x.at(2, 3)
-sets String z to be equal to the length 3 substring of String x
-starting at zero-based position 2, setting z to "llo" in this
-case. A nil String is returned if the arguments don't make sense.
-
-@item x.at(2, 2) = "r"
-Sets what was in positions 2 to 3 of x to "r", setting x to
-"Hero" in this case. As indicated here, SubString assignments may
-be of different lengths.
-
-@item x.at("He") = "je";
-x("He") is the substring of x that matches the first occurrence of
-it's argument. The substitution sets x to "jello". If "He" did
-not occur, the substring would be nil, and the assignment would
-have no effect.
-
-@item x.at("l", -1) = "i";
-replaces the rightmost occurrence of "l" with "i", setting x to
-"Helio".
-
-@item z = x.at(r)
-sets String z to the first match in x of Regex r, or "ello" in this
-case. A nil String is returned if there is no match.
-
-@item z = x.before("o")
-sets z to the part of x to the left of the first occurrence of
-"o", or "Hell" in this case. The argument may also be a String,
-SubString, or Regex. (If there is no match, z is set to "".)
-
-@item x.before("ll") = "Bri";
-sets the part of x to the left of "ll" to "Bri", setting x to
-"Brillo".
-
-@item z = x.before(2)
-sets z to the part of x to the left of x[2], or "He" in this
-case.
-
-@item z = x.after("Hel")
-sets z to the part of x to the right of "Hel", or "lo" in this
-case.
-
-@item z = x.through("el")
-sets z to the part of x up and including "el", or "Hel" in this case.
-
-@item z = x.from("el")
-sets z to the part of x from "el" to the end, or "ello" in this case.
-
-@item x.after("Hel") = "p";
-sets x to "Help";
-
-@item z = x.after(3)
-sets z to the part of x to the right of x[3] or "o" in this case.
-
-@item z = " ab c"; z = z.after(RXwhite)
-sets z to the part of its old string to the right of the first
-group of whitespace, setting z to "ab c"; Use gsub(below) to
-strip out multiple occurrences of whitespace or any pattern.
-
-@item x[0] = 'J';
-sets the first element of x to 'J'. x[i] returns a reference to
-the ith element of x, or triggers an error if i is out of range.
-
-@item common_prefix(x, "Help")
-returns the String containing the common prefix of the two Strings
-or "Hel" in this case.
-
-@item common_suffix(x, "to")
-returns the String containing the common suffix of the two Strings
-or "o" in this case.
-
-@end table
-
-@section Concatenation
-
-@table @code
-
-@item z = x + s + ' ' + y.at("w") + y.after("w") + ".";
-sets z to "Hello, world."
-
-@item x += y;
-sets x to "Helloworld"
-
-@item cat(x, y, z)
-A faster way to say z = x + y.
-
-@item cat(z, y, x, x)
-Double concatenation; A faster way to say x = z + y + x.
-
-@item y.prepend(x);
-A faster way to say y = x + y.
-
-@item z = replicate(x, 3);
-sets z to "HelloHelloHello".
-
-@item z = join(words, 3, "/")
-sets z to the concatenation of the first 3 Strings in String
-array words, each separated by "/", setting z to "a/b/c" in this
-case. The last argument may be "" or 0, indicating no separation.
-
-@end table
-
-@section Other manipulations
-
-@table @code
-
-@item z = "this string has five words"; i = split(z, words, 10, RXwhite);
-sets up to 10 elements of String array words to the parts of z
-separated by whitespace, and returns the number of parts actually
-encountered (5 in this case). Here, words[0] = "this", words[1] =
-"string", etc. The last argument may be any of the usual.
-If there is no match, all of z ends up in words[0]. The words array
-is @emph{not} dynamically created by split.
-
-@item int nmatches x.gsub("l","ll")
-substitutes all original occurrences of "l" with "ll", setting x
-to "Hellllo". The first argument may be any of the usual,
-including Regex. If the second argument is "" or 0, all
-occurrences are deleted. gsub returns the number of matches
-that were replaced.
-
-@item z = x + y; z.del("loworl");
-deletes the leftmost occurrence of "loworl" in z, setting z to
-"Held".
-
-@item z = reverse(x)
-sets z to the reverse of x, or "olleH".
-
-@item z = upcase(x)
-sets z to x, with all letters set to uppercase, setting z to "HELLO"
-
-@item z = downcase(x)
-sets z to x, with all letters set to lowercase, setting z to "hello"
-
-@item z = capitalize(x)
-sets z to x, with the first letter of each word set to uppercase,
-and all others to lowercase, setting z to "Hello"
-
-@item x.reverse(), x.upcase(), x.downcase(), x.capitalize()
-in-place, self-modifying versions of the above.
-
-@end table
-
-@section Reading, Writing and Conversion
-
-@table @code
-
-@item cout << x
-writes out x.
-
-@item cout << x.at(2, 3)
-writes out the substring "llo".
-
-@item cin >> x
-reads a whitespace-bounded string into x.
-
-@item x.length()
-returns the length of String x (5, in this case).
-
-@item s = (const char*)x
-can be used to extract the @code{char*} char array. This
-coercion is useful for sending a String as an argument to any
-function expecting a @code{const char*} argument (like
-@code{atoi}, and @code{File::open}). This operator must be
-used with care, since the conversion returns a pointer
-to @code{String} internals without copying the characters:
-The resulting @code{(char*)} is only valid until
-the next String operation, and you must not modify it.
-(The conversion is defined to return a const
-value so that GNU C++ will produce warning and/or error
-messages if changes are attempted.)
-
-@end table
-
-@node Integer, Rational, String, Top
-@chapter The Integer class.
-
-The @code{Integer} class provides multiple precision integer arithmetic
-facilities. Some representation details are discussed in the
-Representation section.
-
-@code{Integers} may be up to @code{b * ((1 << b) - 1)} bits long, where
-@code{b} is the number of bits per short (typically 1048560 bits when
-@code{b = 16}). The implementation assumes that a @code{long} is at least
-twice as long as a @code{short}. This assumption hides beneath almost all
-primitive operations, and would be very difficult to change. It also relies
-on correct behavior of @emph{unsigned} arithmetic operations.
-
-Some of the arithmetic algorithms are very loosely based on those
-provided in the MIT Scheme @file{bignum.c} release, which is
-Copyright (c) 1987 Massachusetts Institute of Technology. Their use
-here falls within the provisions described in the Scheme release.
-
-Integers may be constructed in the following ways:
-@table @code
-
-@item Integer x;
-Declares an uninitialized Integer.
-
-@item Integer x = 2; Integer y(2);
-Set x and y to the Integer value 2;
-
-@item Integer u(x); Integer v = x;
-Set u and v to the same value as x.
-
-@end table
-
-@deftypefn Method long Integer::as_long() const
-Used to coerce an @code{Integer} back into longs via the @code{long}
-coercion operator. If the Integer cannot fit into a long, this returns
-MINLONG or MAXLONG (depending on the sign) where MINLONG is the most
-negative, and MAXLONG is the most positive representable long.
-@end deftypefn
-
-@deftypefn Method int Integer::fits_in_long() const
-Returns true iff the @code{Integer} is @code{< MAXLONG} and @code{> MINLONG}.
-@end deftypefn
-
-@deftypefn Method double Integer::as_double() const
-Coerce the @code{Integer} to a @code{double}, with potential
-loss of precision.
-@code{+/-HUGE} is returned if the Integer cannot fit into a double.
-@end deftypefn
-
-@deftypefn Method int Integer::fits_in_double() const
-Returns true iff the @code{Integer} can fit into a double.
-@end deftypefn
-
-All of the usual arithmetic operators are provided (@code{+, -, *, /,
-%, +=, ++, -=, --, *=, /=, %=, ==, !=, <, <=, >, >=}). All operators
-support special versions for mixed arguments of Integers and regular
-C++ longs in order to avoid useless coercions, as well as to allow
-automatic promotion of shorts and ints to longs, so that they may be
-applied without additional Integer coercion operators. The only
-operators that behave differently than the corresponding int or long
-operators are @code{++} and @code{--}. Because C++ does not
-distinguish prefix from postfix application, these are declared as
-@code{void} operators, so that no confusion can result from applying
-them as postfix. Thus, for Integers x and y, @code{ ++x; y = x; } is
-correct, but @code{ y = ++x; } and @code{ y = x++; } are not.
-
-Bitwise operators (@code{~}, @code{&}, @code{|}, @code{^}, @code{<<},
-@code{>>}, @code{&=}, @code{|=}, @code{^=}, @code{<<=}, @code{>>=}) are
-also provided. However, these operate on sign-magnitude, rather than
-two's complement representations. The sign of the result is arbitrarily
-taken as the sign of the first argument. For example, @code{Integer(-3)
-& Integer(5)} returns @code{Integer(-1)}, not -3, as it would using
-two's complement. Also, @code{~}, the complement operator, complements
-only those bits needed for the representation. Bit operators are also
-provided in the BitSet and BitString classes. One of these classes
-should be used instead of Integers when the results of bit manipulations
-are not interpreted numerically.
-
-The following utility functions are also provided. (All arguments
-are Integers unless otherwise noted).
-
-@deftypefun void divide(const Integer& @var{x}, const Integer& @var{y}, Integer& @var{q}, Integer& @var{r})
-Sets @var{q} to the quotient and @var{r} to the remainder of @var{x} and @var{y}.
-(@var{q} and @var{r} are returned by reference).
-@end deftypefun
-
-@deftypefun Integer pow(const Integer& @var{x}, const Integer& @var{p})
-Returns @var{x} raised to the power @var{p}.
-@end deftypefun
-
-@deftypefun Integer Ipow(long @var{x}, long @var{p})
-Returns @var{x} raised to the power @var{p}.
-@end deftypefun
-
-@deftypefun Integer gcd(const Integer& @var{x}, const Integer& @var{p})
-Returns the greatest common divisor of @var{x} and @var{y}.
-@end deftypefun
-
-@deftypefun Integer lcm(const Integer& @var{x}, const Integer& @var{p})
-Returns the least common multiple of @var{x} and @var{y}.
-@end deftypefun
-
-@deftypefun Integer abs(const Integer& @var{x}
-Returns the absolute value of @var{x}.
-@end deftypefun
-
-@deftypefn Method void Integer::negate()
-Negates @code{this} in place.
-@end deftypefn
-
-@table @code
-
-@item Integer sqr(x)
-returns x * x;
-
-@item Integer sqrt(x)
-returns the floor of the square root of x.
-
-@item long lg(x);
-returns the floor of the base 2 logarithm of abs(x)
-
-@item int sign(x)
-returns -1 if x is negative, 0 if zero, else +1.
-Using @code{if (sign(x) == 0)} is a generally faster method
-of testing for zero than using relational operators.
-
-@item int even(x)
-returns true if x is an even number
-
-@item int odd(x)
-returns true if x is an odd number.
-
-@item void setbit(Integer& x, long b)
-sets the b'th bit (counting right-to-left from zero) of x to 1.
-
-@item void clearbit(Integer& x, long b)
-sets the b'th bit of x to 0.
-
-@item int testbit(Integer x, long b)
-returns true if the b'th bit of x is 1.
-
-@item Integer atoI(char* asciinumber, int base = 10);
-converts the base base char* string into its Integer form.
-
-@item void Integer::printon(ostream& s, int base = 10, int width = 0);
-prints the ascii string value of @code{(*this)} as a base @code{base}
-number, in field width at least @code{width}.
-
-@item ostream << x;
-prints x in base ten format.
-
-@item istream >> x;
-reads x as a base ten number.
-
-@item int compare(Integer x, Integer y)
-returns a negative number if x<y, zero if x==y, or positive if x>y.
-
-@item int ucompare(Integer x, Integer y)
-like compare, but performs unsigned comparison.
-
-@item add(x, y, z)
-A faster way to say z = x + y.
-
-@item sub(x, y, z)
-A faster way to say z = x - y.
-
-@item mul(x, y, z)
-A faster way to say z = x * y.
-
-@item div(x, y, z)
-A faster way to say z = x / y.
-
-@item mod(x, y, z)
-A faster way to say z = x % y.
-
-@item and(x, y, z)
-A faster way to say z = x & y.
-
-@item or(x, y, z)
-A faster way to say z = x | y.
-
-@item xor(x, y, z)
-A faster way to say z = x ^ y.
-
-@item lshift(x, y, z)
-A faster way to say z = x << y.
-
-@item rshift(x, y, z)
-A faster way to say z = x >> y.
-
-@item pow(x, y, z)
-A faster way to say z = pow(x, y).
-
-@item complement(x, z)
-A faster way to say z = ~x.
-
-@item negate(x, z)
-A faster way to say z = -x.
-
-@end table
-
-@node Rational, Complex, Integer, Top
-@chapter The Rational Class
-
-Class @code{Rational} provides multiple precision rational
-number arithmetic. All rationals are maintained in simplest
-form (i.e., with the numerator and denominator relatively
-prime, and with the denominator strictly positive).
-Rational arithmetic and relational operators are provided
-(@code{+, -, *, /, +=, -=, *=, /=, ==, !=, <, <=, >, >=}).
-Operations resulting in a rational number with zero denominator
-trigger an exception.
-
-Rationals may be constructed and used in the following ways:
-
-@table @code
-
-@item Rational x;
-Declares an uninitialized Rational.
-
-@item Rational x = 2; Rational y(2);
-Set x and y to the Rational value 2/1;
-
-@item Rational x(2, 3);
-Sets x to the Rational value 2/3;
-
-@item Rational x = 1.2;
-Sets x to a Rational value close to 1.2. Any double precision value
-may be used to construct a Rational. The Rational will possess
-exactly as much precision as the double. Double values that do
-not have precise floating point equivalents (like 1.2) produce
-similarly imprecise rational values.
-
-@item Rational x(Integer(123), Integer(4567));
-Sets x to the Rational value 123/4567.
-
-@item Rational u(x); Rational v = x;
-Set u and v to the same value as x.
-
-@item double(Rational x)
-A Rational may be coerced to a double with potential
-loss of precision. +/-HUGE is returned if it will not fit.
-
-@item Rational abs(x)
-returns the absolute value of x.
-
-@item void x.negate()
-negates x.
-
-@item void x.invert()
-sets x to 1/x.
-
-@item int sign(x)
-returns 0 if x is zero, 1 if positive, and -1 if negative.
-
-@item Rational sqr(x)
-returns x * x.
-
-@item Rational pow(x, Integer y)
-returns x to the y power.
-
-@item Integer x.numerator()
-returns the numerator.
-
-@item Integer x.denominator()
-returns the denominator.
-
-@item Integer floor(x)
-returns the greatest Integer less than x.
-
-@item Integer ceil(x)
-returns the least Integer greater than x.
-
-@item Integer trunc(x)
-returns the Integer part of x.
-
-@item Integer round(x)
-returns the nearest Integer to x.
-
-@item int compare(x, y)
-returns a negative, zero, or positive number signifying whether x is
-less than, equal to, or greater than y.
-
-@item ostream << x;
-prints x in the form num/den, or just num if the denominator is one.
-
-@item istream >> x;
-reads x in the form num/den, or just num in which case the
-denominator is set to one.
-
-@item add(x, y, z)
-A faster way to say z = x + y.
-
-@item sub(x, y, z)
-A faster way to say z = x - y.
-
-@item mul(x, y, z)
-A faster way to say z = x * y.
-
-@item div(x, y, z)
-A faster way to say z = x / y.
-
-@item pow(x, y, z)
-A faster way to say z = pow(x, y).
-
-@item negate(x, z)
-A faster way to say z = -x.
-
-@end table
-
-@node Complex, Fix, Rational, Top
-@chapter The Complex class.
-
-Class @code{Complex} is implemented in a way similar to that
-described by Stroustrup. In keeping with libg++ conventions,
-the class is named @code{Complex}, not @code{complex}.
-Complex arithmetic and relational operators are provided
-(@code{+, -, *, /, +=, -=, *=, /=, ==, !=}).
-Attempted division by (0, 0) triggers an exception.
-
-Complex numbers may be constructed and used in the following ways:
-
-@table @code
-
-@item Complex x;
-Declares an uninitialized Complex.
-
-@item Complex x = 2; Complex y(2.0);
-Set x and y to the Complex value (2.0, 0.0);
-
-@item Complex x(2, 3);
-Sets x to the Complex value (2, 3);
-
-@item Complex u(x); Complex v = x;
-Set u and v to the same value as x.
-
-@item double real(Complex& x);
-returns the real part of x.
-
-@item double imag(Complex& x);
-returns the imaginary part of x.
-
-@item double abs(Complex& x);
-returns the magnitude of x.
-
-@item double norm(Complex& x);
-returns the square of the magnitude of x.
-
-@item double arg(Complex& x);
-returns the argument (amplitude) of x.
-
-@item Complex polar(double r, double t = 0.0);
-returns a Complex with abs of r and arg of t.
-
-@item Complex conj(Complex& x);
-returns the complex conjugate of x.
-
-@item Complex cos(Complex& x);
-returns the complex cosine of x.
-
-@item Complex sin(Complex& x);
-returns the complex sine of x.
-
-@item Complex cosh(Complex& x);
-returns the complex hyperbolic cosine of x.
-
-@item Complex sinh(Complex& x);
-returns the complex hyperbolic sine of x.
-
-@item Complex exp(Complex& x);
-returns the exponential of x.
-
-@item Complex log(Complex& x);
-returns the natural log of x.
-
-@item Complex pow(Complex& x, long p);
-returns x raised to the p power.
-
-@item Complex pow(Complex& x, Complex& p);
-returns x raised to the p power.
-
-@item Complex sqrt(Complex& x);
-returns the square root of x.
-
-@item ostream << x;
-prints x in the form (re, im).
-
-@item istream >> x;
-reads x in the form (re, im), or just (re) or re in which case the
-imaginary part is set to zero.
-
-@end table
-
-@node Fix, Bit, Complex, Top
-@chapter Fixed precision numbers
-
-Classes @code{Fix16}, @code{Fix24}, @code{Fix32}, and @code{Fix48}
-support operations on 16, 24, 32, or 48 bit quantities that are
-considered as real numbers in the range [-1, +1). Such numbers are
-often encountered in digital signal processing applications. The classes
-may be be used in isolation or together. Class @code{Fix32}
-operations are entirely self-contained. Class @code{Fix16} operations
-are self-contained except that the multiplication operation @code{Fix16
-* Fix16} returns a @code{Fix32}. @code{Fix24} and @code{Fix48} are
-similarly related.
-
-The standard arithmetic and relational operations are supported
-(@code{=}, @code{+}, @code{-}, @code{*}, @code{/}, @code{<<}, @code{>>},
-@code{+=}, @code{-=}, @code{*=}, @code{/=}, @code{<<=}, @code{>>=},
-@code{==}, @code{!=}, @code{<}, @code{<=}, @code{>}, @code{>=}).
-All operations include provisions for special handling in cases where
-the result exceeds +/- 1.0. There are two cases that may be handled
-separately: ``overflow'' where the results of addition and subtraction
-operations go out of range, and all other ``range errors'' in which
-resulting values go off-scale (as with division operations, and
-assignment or initialization with off-scale values). In signal
-processing applications, it is often useful to handle these two cases
-differently. Handlers take one argument, a reference to the integer
-mantissa of the offending value, which may then be manipulated. In
-cases of overflow, this value is the result of the (integer) arithmetic
-computation on the mantissa; in others it is a fully saturated (i.e.,
-most positive or most negative) value. Handling may be reset to any of
-several provided functions or any other user-defined function via
-@code{set_overflow_handler} and @code{set_range_error_handler}. The
-provided functions for @code{Fix16} are as follows (corresponding
-functions are also supported for the others).
-
-@table @code
-
-@item Fix16_overflow_saturate
-The default overflow handler. Results are ``saturated'': positive results
-are set to the largest representable value (binary 0.111111...), and
-negative values to -1.0.
-
-@item Fix16_ignore
-Performs no action. For overflow, this will allow addition and
-subtraction operations to ``wrap around'' in the same manner
-as integer arithmetic, and for saturation, will leave values saturated.
-
-@item Fix16_overflow_warning_saturate
-Prints a warning message on standard error, then saturates the results.
-
-@item Fix16_warning
-The default range_error handler. Prints a warning message
-on standard error; otherwise leaving the argument unmodified.
-
-@item Fix16_abort
-prints an error message on standard error, then aborts execution.
-
-
-@end table
-
-In addition to arithmetic operations, the following are provided:
-
-@table @code
-
-@item Fix16 a = 0.5;
-Constructs fixed precision objects from double precision values.
-Attempting to initialize to a value outside the range invokes
-the range_error handler, except, as a convenience,
-initialization to 1.0 sets the variable to the most positive
-representable value (binary 0.1111111...) without invoking the handler.
-
-@item short& mantissa(a); long& mantissa(b);
-return a * pow(2, 15) or b * pow(2, 31) as an integer. These
-are returned by reference, to enable ``manual'' data manipulation.
-
-@item double value(a); double value(b);
-return a or b as floating point numbers.
-
-@end table
-
-@node Bit, Random, Fix, Top
-@chapter Classes for Bit manipulation
-
-libg++ provides several different classes supporting the use
-and manipulation of collections of bits in different ways.
-
-@itemize @bullet
-
-@item
-Class @code{Integer} provides ``integer'' semantics. It supports
-manipulation of bits in ways that are often useful when treating bit arrays
-as numerical (integer) quantities. This class is described elsewhere.
-
-@item
-Class @code{BitSet} provides ``set'' semantics. It supports operations
-useful when treating collections of bits as representing potentially
-infinite sets of integers.
-
-@item
-Class @code{BitSet32} supports fixed-length BitSets holding exactly
-32 bits.
-
-@item
-Class @code{BitSet256} supports fixed-length BitSets holding exactly
-256 bits.
-
-@item
-Class @code{BitString} provides ``string'' (or ``vector'') semantics.
-It supports operations useful when treating collections of bits as
-strings of zeros and ones.
-
-@end itemize
-
-These classes also differ in the following ways:
-
-@itemize @bullet
-
-
-@item
-BitSets are logically infinite. Their space is dynamically altered to
-adjust to the smallest number of consecutive bits actually required to
-represent the sets. Integers also have this property. BitStrings are
-logically finite, but their sizes are internally dynamically managed to
-maintain proper length. This means that, for example, BitStrings are
-concatenatable while BitSets and Integers are not.
-
-@item
-BitSet32 and BitSet256 have precisely the same properties as BitSets,
-except that they use constant fixed length bit vectors.
-
-@item
-While all classes support basic unary and binary operations @code{~, &,
-|, ^, -}, the semantics differ. BitSets perform bit operations that
-precisely mirror those for infinite sets. For example, complementing an
-empty BitSet returns one representing an infinite number of set bits.
-Operations on BitStrings and Integers operate only on those bits
-actually present in the representation. For BitStrings and Integers,
-the the @code{&} operation returns a BitString with a length equal to
-the minimum length of the operands, and @code{|, ^} return one with
-length of the maximum.
-
-@item
-Only BitStrings support substring extraction and bit pattern matching.
-
-@end itemize
-
-@section BitSet
-
-BitSets are objects that contain logically infinite sets of nonnegative
-integers. Representational details are discussed in the Representation
-chapter. Because they are logically infinite, all BitSets possess a
-trailing, infinitely replicated 0 or 1 bit, called the ``virtual bit'', and
-indicated via 0* or 1*.
-
-BitSet32 and BitSet256 have they same properties, except they are
-of fixed length, and thus have no virtual bit.
-
-BitSets may be constructed as follows:
-
-@table @code
-
-@item BitSet a;
-declares an empty BitSet.
-
-@item BitSet a = atoBitSet("001000");
-sets a to the BitSet 0010*, reading left-to-right. The ``0*''
-indicates that the set ends with an infinite number of zero
-(clear) bits.
-
-@item BitSet a = atoBitSet("00101*");
-sets a to the BitSet 00101*, where ``1*'' means that the set ends
-with an infinite number of one (set) bits.
-
-@item BitSet a = longtoBitSet((long)23);
-sets a to the BitSet 111010*, the binary representation of decimal 23.
-
-@item BitSet a = utoBitSet((unsigned)23);
-sets a to the BitSet 111010*, the binary representation of decimal 23.
-
-@end table
-
-The following functions and operators are provided (Assume the
-declaration of BitSets a = 0011010*, b = 101101*, throughout, as
-examples).
-
-@table @code
-
-@item ~a
-returns the complement of a, or 1100101* in this case.
-
-@item a.complement()
-sets a to ~a.
-
-@item a & b; a &= b;
-returns a intersected with b, or 0011010*.
-
-@item a | b; a |= b;
-returns a unioned with b, or 1011111*.
-
-@item a - b; a -= b;
-returns the set difference of a and b, or 000010*.
-
-@item a ^ b; a ^= b;
-returns the symmetric difference of a and b, or 1000101*.
-
-@item a.empty()
-returns true if a is an empty set.
-
-@item a == b;
-returns true if a and b contain the same set.
-
-@item a <= b;
-returns true if a is a subset of b.
-
-@item a < b;
-returns true if a is a proper subset of b;
-
-@item a != b; a >= b; a > b;
-are the converses of the above.
-
-@item a.set(7)
-sets the 7th (counting from 0) bit of a, setting a to 001111010*
-
-@item a.clear(2)
-clears the 2nd bit bit of a, setting a to 00011110*
-
-@item a.clear()
-clears all bits of a;
-
-@item a.set()
-sets all bits of a;
-
-@item a.invert(0)
-complements the 0th bit of a, setting a to 10011110*
-
-@item a.set(0,1)
-sets the 0th through 1st bits of a, setting a to 110111110*
-The two-argument versions of clear and invert are similar.
-
-@item a.test(3)
-returns true if the 3rd bit of a is set.
-
-@item a.test(3, 5)
-returns true if any of bits 3 through 5 are set.
-
-@item int i = a[3]; a[3] = 0;
-The subscript operator allows bits to be inspected and changed
-via standard subscript semantics, using a friend class BitSetBit.
-The use of the subscript operator a[i] rather than a.test(i)
-requires somewhat greater overhead.
-
-@item a.first(1) or a.first()
-returns the index of the first set bit of a (2 in this case),
-or -1 if no bits are set.
-
-@item a.first(0)
-returns the index of the first clear bit of a (0 in this case),
-or -1 if no bits are clear.
-
-@item a.next(2, 1) or a.next(2)
-returns the index of the next bit after position 2 that is set (3
-in this case) or -1. @code{first} and @code{next} may be used as
-iterators, as in
-@code{for (int i = a.first(); i >= 0; i = a.next(i))...}.
-
-@item a.last(1)
-returns the index of the rightmost set bit, or -1 if there or no set
-bits or all set bits.
-
-@item a.prev(3, 0)
-returns the index of the previous clear bit before position 3.
-
-@item a.count(1)
-returns the number of set bits in a, or -1 if there are
-an infinite number.
-
-@item a.virtual_bit()
-returns the trailing (infinitely replicated) bit of a.
-
-@item a = atoBitSet("ababX", 'a', 'b', 'X');
-converts the char* string into a bitset, with 'a' denoting false,
-'b' denoting true, and 'X' denoting infinite replication.
-
-@item a.printon(cout, '-', '.', 0)
-prints @code{a} to @code{cout} represented with
-@code{'-'} for falses, @code{'.'} for trues, and no replication marker.
-
-@item cout << a
-prints @code{a} to @code{cout} (representing lases by @code{'f'},
-trues by @code{'t'}, and using @code{'*'} as the replication marker).
-
-@end table
-
-@section BitString
-
-BitStrings are objects that contain arbitrary-length strings of
-zeroes and ones. BitStrings possess some features that make them
-behave like sets, and others that behave as strings. They are
-useful in applications (such as signature-based algorithms) where
-both capabilities are needed. Representational details are
-discussed in the Representation chapter. Most capabilities are
-exact analogs of those supported in the BitSet and String
-classes. A BitSubString is used with substring operations along
-the same lines as the String SubString class. A BitPattern class
-is used for masked bit pattern searching.
-
-Only a default constructor is supported. The declaration
-@code{BitString a;} initializes a to be an empty BitString.
-BitStrings may often be initialized via @code{atoBitString}
-and @code{longtoBitString}.
-
-Set operations (@code{ ~, complement, &, &=, |, |=, -, ^, ^=})
-behave just as the BitSet versions, except that there is no
-``virtual bit'': complementing complements only those bits in the
-BitString, and all binary operations across unequal length
-BitStrings assume a virtual bit of zero. The @code{&} operation
-returns a BitString with a length equal to the minimum length of
-the operands, and @code{|, ^} return one with length of the
-maximum.
-
-Set-based relational operations (@code{==, !=, <=, <, >=, >})
-follow the same rules. A string-like lexicographic comparison
-function, @code{lcompare}, tests the lexicographic relation between
-two BitStrings. For example, lcompare(1100, 0101) returns 1,
-since the first BitString starts with 1 and the second with 0.
-
-Individual bit setting, testing, and iterator operations
-(@code{set, clear, invert, test, first, next, last, prev})
-are also like those for BitSets. BitStrings are automatically
-expanded when setting bits at positions greater than their
-current length.
-
-The string-based capabilities are just as those for class String.
-BitStrings may be concatenated (@code{+, +=}), searched
-(@code{index, contains, matches}), and extracted into
-BitSubStrings (@code{before, at, after}) which may be assigned and
-otherwise manipulated. Other string-based utility functions
-(@code{reverse, common_prefix, common_suffix}) are also provided.
-These have the same capabilities and descriptions as those
-for Strings.
-
-String-oriented operations can also be performed with a mask via
-class BitPattern. BitPatterns consist of two BitStrings, a
-pattern and a mask. On searching and matching, bits in the pattern
-that correspond to 0 bits in the mask are ignored. (The mask may
-be shorter than the pattern, in which case trailing mask bits are
-assumed to be 0). The pattern and mask are both public variables,
-and may be individually subjected to other bit operations.
-
-Converting to char* and printing (@code{(atoBitString,
-atoBitPattern, printon, ostream <<)}) are also as in BitSets,
-except that no virtual bit is used, and an 'X' in a BitPattern means
-that the pattern bit is masked out.
-
-The following features are unique to BitStrings.
-
-Assume declarations of BitString a = atoBitString("01010110") and b =
-atoBitSTring("1101").
-
-@table @code
-
-@item a = b + c;
-Sets a to the concatenation of b and c;
-
-@item a = b + 0; a = b + 1;
-sets a to b, appended with a zero (one).
-
-@item a += b;
-appends b to a;
-
-@item a += 0; a += 1;
-appends a zero (one) to a.
-
-@item a << 2; a <<= 2
-return a with 2 zeros prepended, setting a to 0001010110. (Note
-the necessary confusion of << and >> operators. For consistency
-with the integer versions, << shifts low bits to high, even though
-they are printed low bits first.)
-
-@item a >> 3; a >>= 3
-return a with the first 3 bits deleted, setting a to 10110.
-
-@item a.left_trim(0)
-deletes all 0 bits on the left of a, setting a to 1010110.
-
-@item a.right_trim(0)
-deletes all trailing 0 bits of a, setting a to 0101011.
-
-@item cat(x, y, z)
-A faster way to say z = x + y.
-
-@item diff(x, y, z)
-A faster way to say z = x - y.
-
-@item and(x, y, z)
-A faster way to say z = x & y.
-
-@item or(x, y, z)
-A faster way to say z = x | y.
-
-@item xor(x, y, z)
-A faster way to say z = x ^ y.
-
-@item lshift(x, y, z)
-A faster way to say z = x << y.
-
-@item rshift(x, y, z)
-A faster way to say z = x >> y.
-
-@item complement(x, z)
-A faster way to say z = ~x.
-
-@end table
-
-
-@node Random, Data, Bit, Top
-@chapter Random Number Generators and related classes
-
-The two classes @code{RNG} and @code{Random} are used together to
-generate a variety of random number distributions. A distinction must
-be made between @emph{random number generators}, implemented by class
-@code{RNG}, and @emph{random number distributions}. A random number
-generator produces a series of randomly ordered bits. These bits can be
-used directly, or cast to other representations, such as a floating
-point value. A random number generator should produce a @emph{uniform}
-distribution. A random number distribution, on the other hand, uses the
-randomly generated bits of a generator to produce numbers from a
-distribution with specific properties. Each instance of @code{Random}
-uses an instance of class @code{RNG} to provide the raw, uniform
-distribution used to produce the specific distribution. Several
-instances of @code{Random} classes can share the same instance of
-@code{RNG}, or each instance can use its own copy.
-
-@section RNG
-
-Random distributions are constructed from members of class @code{RNG},
-the actual random number generators. The @code{RNG} class contains no
-data; it only serves to define the interface to random number
-generators. The @code{RNG::asLong} member returns an unsigned long
-(typically 32 bits) of random bits. Applications that require a number
-of random bits can use this directly. More often, these random bits are
-transformed to a uniform random number:
-
-@smallexample
- //
- // Return random bits converted to either a float or a double
- //
- float asFloat();
- double asDouble();
-@};
-@end smallexample
-
-@noindent
-using either @code{asFloat} or @code{asDouble}. It is intended that
-@code{asFloat} and @code{asDouble} return differing precisions;
-typically, @code{asDouble} will draw two random longwords and transform
-them into a legal @code{double}, while @code{asFloat} will draw a single
-longword and transform it into a legal @code{float}. These members are
-used by subclasses of the @code{Random} class to implement a variety of
-random number distributions.
-
-@section ACG
-
-Class @code{ACG} is a variant of a Linear Congruential Generator
-(Algorithm M) described in Knuth, @emph{Art of Computer Programming, Vol
-III}. This result is permuted with a Fibonacci Additive Congruential
-Generator to get good independence between samples. This is a very high
-quality random number generator, although it requires a fair amount of
-memory for each instance of the generator.
-
-The @code{ACG::ACG} constructor takes two parameters: the seed and the
-size. The seed is any number to be used as an initial seed. The
-performance of the generator depends on having a distribution of bits
-through the seed. If you choose a number in the range of 0 to 31, a
-seed with more bits is chosen. Other values are deterministically
-modified to give a better distribution of bits. This provides a good
-random number generator while still allowing a sequence to be repeated
-given the same initial seed.
-
-The @code{size} parameter determines the size of two tables used in the
-generator. The first table is used in the Additive Generator; see the
-algorithm in Knuth for more information. In general, this table is
-@code{size} longwords long. The default value, used in the algorithm in
-Knuth, gives a table of 220 bytes. The table size affects the period of
-the generators; smaller values give shorter periods and larger tables
-give longer periods. The smallest table size is 7 longwords, and the
-longest is 98 longwords. The @code{size} parameter also determines the
-size of the table used for the Linear Congruential Generator. This value
-is chosen implicitly based on the size of the Additive Congruential
-Generator table. It is two powers of two larger than the power of two
-that is larger than @code{size}. For example, if @code{size} is 7, the
-ACG table is 7 longwords and the LCG table is 128 longwords. Thus, the
-default size (55) requires 55 + 256 longwords, or 1244 bytes. The
-largest table requires 2440 bytes and the smallest table requires 100
-bytes. Applications that require a large number of generators or
-applications that aren't so fussy about the quality of the generator may
-elect to use the @code{MLCG} generator.
-
-@section MLCG
-
-The @code{MLCG} class implements a @emph{Multiplicative Linear
-Congruential Generator}. In particular, it is an implementation of the
-double MLCG described in @emph{``Efficient and Portable Combined Random
-Number Generators''} by Pierre L'Ecuyer, appearing in
-@emph{Communications of the ACM, Vol. 31. No. 6}. This generator has a
-fairly long period, and has been statistically analyzed to show that it
-gives good inter-sample independence.
-
-The @code{MLCG::MLCG} constructor has two parameters, both of which are
-seeds for the generator. As in the @code{MLCG} generator, both seeds are
-modified to give a ``better'' distribution of seed digits. Thus, you can
-safely use values such as `0' or `1' for the seeds. The @code{MLCG}
-generator used much less state than the @code{ACG} generator; only two
-longwords (8 bytes) are needed for each generator.
-
-@section Random
-
-A random number generator may be declared by first declaring a
-@code{RNG} and then a @code{Random}. For example, @code{ACG gen(10, 20);
-NegativeExpntl rnd (1.0, &gen);} declares an additive congruential
-generator with seed 10 and table size 20, that is used to generate
-exponentially distributed values with mean of 1.0.
-
-The virtual member @code{Random::operator()} is the common way of
-extracting a random number from a particular distribution. The base
-class, @code{Random} does not implement @code{operator()}. This is
-performed by each of the subclasses. Thus, given the above declaration
-of @code{rnd}, new random values may be obtained via, for example,
-@code{double next_exp_rand = rnd();} Currently, the following subclasses
-are provided.
-
-@section Binomial
-
-The binomial distribution models successfully drawing items from
-a pool. The first parameter to the constructor, @code{n}, is the
-number of items in the pool, and the second parameter, @code{u},
-is the probability of each item being successfully drawn. The
-member @code{asDouble} returns the number of samples drawn from
-the pool. Although it is not checked, it is assumed that
-@code{n>0} and @code{0 <= u <= 1}. The remaining members allow
-you to read and set the parameters.
-
-@section Erlang
-
-The @code{Erlang} class implements an Erlang distribution with
-mean @code{mean} and variance @code{variance}.
-
-@section Geometric
-
-The @code{Geometric} class implements a discrete geometric
-distribution. The first parameter to the constructor,
-@code{mean}, is the mean of the distribution. Although it is not
-checked, it is assumed that @code{0 <= mean <= 1}.
-@code{Geometric()} returns the number of uniform random samples
-that were drawn before the sample was larger than @code{mean}.
-This quantity is always greater than zero.
-
-@section HyperGeometric
-
-The @code{HyperGeometric} class implements the hypergeometric
-distribution. The first parameter to the constructor,
-@code{mean}, is the mean and the second, @code{variance}, is the
-variance. The remaining members allow you to inspect and change
-the mean and variance.
-
-@section NegativeExpntl
-
-The @code{NegativeExpntl} class implements the negative
-exponential distribution. The first parameter to the constructor
-is the mean. The remaining members allow you to inspect and
-change the mean.
-
-@section Normal
-
-The @code{Normal}class implements the normal distribution. The
-first parameter to the constructor, @code{mean}, is the mean and
-the second, @code{variance}, is the variance. The remaining
-members allow you to inspect and change the mean and variance.
-The @code{LogNormal} class is a subclass of @code{Normal}.
-
-@section LogNormal
-
-The @code{LogNormal}class implements the logarithmic normal
-distribution. The first parameter to the constructor,
-@code{mean}, is the mean and the second, @code{variance}, is the
-variance. The remaining members allow you to inspect and change
-the mean and variance. The @code{LogNormal} class is a subclass
-of @code{Normal}.
-
-@section Poisson
-
-The @code{Poisson} class implements the poisson distribution.
-The first parameter to the constructor is the mean. The
-remaining members allow you to inspect and change the mean.
-
-@section DiscreteUniform
-
-The @code{DiscreteUniform} class implements a uniform random variable over
-the closed interval ranging from @code{[low..high]}. The first parameter
-to the constructor is @code{low}, and the second is @code{high}, although
-the order of these may be reversed. The remaining members allow you to
-inspect and change @code{low} and @code{high}.
-
-@section Uniform
-
-The @code{Uniform} class implements a uniform random variable over the
-open interval ranging from @code{[low..high)}. The first parameter to
-the constructor is @code{low}, and the second is @code{high}, although
-the order of these may be reversed. The remaining members allow you to
-inspect and change @code{low} and @code{high}.@refill
-
-@section Weibull
-
-The @code{Weibull} class implements a weibull distribution with
-parameters @code{alpha} and @code{beta}. The first parameter to
-the class constructor is @code{alpha}, and the second parameter
-is @code{beta}. The remaining members allow you to inspect and
-change @code{alpha} and @code{beta}.
-
-@section RandomInteger
-
-The @code{RandomInteger} class is @emph{not} a subclass of Random,
-but a stand-alone integer-oriented class that is dependent on the
-RNG classes. RandomInteger returns random integers uniformly from
-the closed interval @code{[low..high]}. The first parameter to the
-constructor is @code{low}, and the second is @code{high}, although
-both are optional. The last argument is always a generator.
-Additional members allow you to inspect and change @code{low} and
-@code{high}. Random integers are generated using @code{asInt()} or
-@code{asLong()}. Operator syntax (@code{()}) is also available as a
-shorthand for @code{asLong()}. Because @code{RandomInteger} is often
-used in simulations for which uniform random integers are desired over
-a variety of ranges, @code{asLong()} and @code{asInt} have @code{high}
-as an optional argument. Using this optional argument produces a
-single value from the new range, but does not change the default
-range.
-
-
-@node Data, Curses, Random, Top
-@chapter Data Collection
-Libg++ currently provides two classes for @emph{data collection}
-and analysis of the collected data.
-
-@section SampleStatistic
-
-Class @code{SampleStatistic} provides a means of accumulating
-samples of @code{double} values and providing common sample statistics.
-
-Assume declaration of @code{double x}.
-
-@table @code
-
-@item SampleStatistic a;
-declares and initializes a.
-
-@item a.reset();
-re-initializes a.
-
-@item a += x;
-adds sample x.
-
-@item int n = a.samples();
-returns the number of samples.
-
-@item x = a.mean;
-returns the means of the samples.
-
-@item x = a.var()
-returns the sample variance of the samples.
-
-@item x = a.stdDev()
-returns the sample standard deviation of the samples.
-
-@item x = a.min()
-returns the minimum encountered sample.
-
-@item x = a.max()
-returns the maximum encountered sample.
-
-@item x = a.confidence(int p)
-returns the p-percent (0 <= p < 100) confidence interval.
-
-@item x = a.confidence(double p)
-returns the p-probability (0 <= p < 1) confidence interval.
-
-
-@end table
-
-@section SampleHistogram
-
-Class @code{SampleHistogram} is a derived class of
-@code{SampleStatistic} that supports collection and display of samples
-in bucketed intervals. It supports the following in addition to
-@code{SampleStatisic} operations.
-
-@table @code
-
-@item SampleHistogram h(double lo, double hi, double width);
-declares and initializes h to have buckets of size width from lo to hi.
-If the optional argument width is not specified, 10 buckets are
-created. The first bucket and also holds samples less than lo,
-and the last one holds samples greater than hi.
-
-@item int n = h.similarSamples(x)
-returns the number of samples in the same bucket as x.
-
-@item int n = h.inBucket(int i)
-returns the number of samples in bucket i.
-
-@item int b = h.buckets()
-returns the number of buckets.
-
-@item h.printBuckets(ostream s)
-prints bucket counts on ostream s.
-
-@item double bound = h.bucketThreshold(int i)
-returns the upper bound of bucket i.
-
-
-@end table
-
-@node Curses, List, Data, Top
-@chapter Curses-based classes
-
-The @code{CursesWindow} class is a repackaging of standard
-curses library features into a class. It relies on @file{curses.h}.
-
-The supplied @file{curses.h} is a fairly conservative declaration
-of curses library features, and does not include features like
-``screen'' or X-window support. It is, for the most part, an
-adaptation, rather than an improvement of C-based @file{curses.h}
-files. The only substantive changes are the declarations of
-many functions as inline functions rather than macros, which
-was done solely to allow overloading.
-
-The @code{CursesWindow} class encapsulates curses window functions
-within a class. Only those functions that control windows are included:
-Terminal control functions and macros like @code{cbreak} are not part
-of the class. All @code{CursesWindows} member functions have names
-identical to the corresponding curses library functions, except that the
-``w'' prefix is generally dropped. Descriptions of these functions may
-be found in your local curses library documentation.
-
-A @code{CursesWindow} may be declared via
-
-@table @code
-
-@item CursesWindow w(WINDOW* win)
-attaches w to the existing WINDOW* win. This is constructor is normally
-used only in the following special case.
-
-@item CursesWindow w(stdscr)
-attaches w to the default curses library standard screen window.
-
-@item CursesWindow w(int lines, int cols, int begin_y, int begin_x)
-attaches to an allocated curses window with the indicated size and
-screen position.
-
-@item CursesWindow sub(CursesWindow& w,int l,int c,int by,int bx,char ar='a')
-attaches to a subwindow of w created via the curses `subwin' command.
-If ar is sent as `r', the origin (by, bx) is relative to the parent
-window, else it is absolute.
-
-@end table
-
-The class maintains a static counter that is used in order to
-automatically call the curses library @code{initscr} and @code{endscr}
-functions at the proper times. These need not, and should not be
-called ``manually''.
-
-@code{CursesWindow}s maintain a tree of their subwindows. Upon
-destruction of a @code{CursesWindow}, all of their subwindows are
-also invalidated if they had not previously been destroyed.
-
-It is possible to traverse trees of subwindows via the following
-member functions
-
-@table @code
-
-@item CursesWindow* w.parent()
-returns a pointer to the parent of the subwindow, or 0 if there is none.
-
-@item CursesWindow* w.child()
-returns the first child subwindow of the window, or 0 if there is none.
-
-@item CursesWindow* w.sibling()
-returns the next sibling of the subwindow, or 0 if there is none.
-
-@end table
-
-For example, to call some function @code{visit} for all subwindows
-of a window, you could write
-
-@example
-
-void traverse(CursesWindow& w)
-@{
- visit(w);
- if (w.child() != 0) traverse(*w.child);
- if (w.sibling() != 0) traverse(*w.sibling);
-@}
-
-@end example
-
-@node List, LinkList, Curses, Top
-@chapter List classes
-
-The files @file{g++-include/List.hP} and @file{g++-include/List.ccP}
-provide pseudo-generic Lisp-type List classes. These lists are homogeneous
-lists, more similar to lists in statically typed functional languages like
-ML than Lisp, but support operations very similar to those found in Lisp.
-Any particular kind of list class may be generated via the @code{genclass}
-shell command. However, the implementation assumes that the base class
-supports an equality operator @code{==}. All equality tests use the
-@code{==} operator, and are thus equivalent to the use of @code{equal}, not
-@code{eq} in Lisp.@refill
-
-All list nodes are created dynamically, and managed via reference counts.
-@code{List} variables are actually pointers to these list nodes.
-Lists may also be traversed via Pixes, as described in the section
-describing Pixes. @xref{Pix}
-
-Supported operations are mirrored closely after those in Lisp. Generally,
-operations with functional forms are constructive, functional operations,
-while member forms (often with the same name) are sometimes
-procedural, possibly destructive operations.
-
-As with Lisp, destructive operations are supported. Programmers
-are allowed to change head and tail fields in any fashion, creating
-circular structures and the like. However, again as with Lisp, some
-operations implicitly assume that they are operating on pure lists, and
-may enter infinite loops when presented with improper lists. Also, the
-reference-counting storage management facility may fail to reclaim
-unused circularly-linked nodes.
-
-Several Lisp-like higher order functions are supported (e.g., @code{map}).
-Typedef declarations for the required functional forms are provided
-int the @file{.h} file.
-
-For purposes of illustration, assume the specification of class
-@code{intList}. Common Lisp versions of supported operations are shown
-in brackets for comparison purposes.
-
-@section Constructors and assignment
-
-@table @code
-
-@item intList a; [ (setq a nil) ]
-Declares a to be a nil intList.
-
-@item intList b(2); [ (setq b (cons 2 nil)) ]
-Declares b to be an intList with a head value of 2, and a nil tail.
-
-@item intList c(3, b); [ (setq c (cons 3 b)) ]
-Declares c to be an intList with a head value of 3, and b as its tail.
-
-@item b = a; [ (setq b a) ]
-Sets b to be the same list as a.
-
-@end table
-
-Assume the declarations of intLists a, b, and c in the following.
-@xref{Pix}.
-
-@section List status
-
-@table @code
-
-@item a.null(); OR !a; [ (null a) ]
-returns true if a is null.
-
-@item a.valid(); [ (listp a) ]
-returns true if a is non-null. Inside a conditional test, the
-@code{void*} coercion may also be used as in @code{if (a) ...}.
-
-@item intList(); [ nil ]
-intList() may be used to null terminate a list, as in
-@code{intList f(int x) @{if (x == 0) return intList(); ... @} }.
-
-@item a.length(); [ (length a) ]
-returns the length of a.
-
-@item a.list_length(); [ (list-length a) ]
-returns the length of a, or -1 if a is circular.
-@end table
-
-@section heads and tails
-
-@table @code
-
-@item a.get(); OR a.head() [ (car a) ]
-returns a reference to the head field.
-
-@item a[2]; [ (elt a 2) ]
-returns a reference to the second (counting from zero) head field.
-
-@item a.tail(); [ (cdr a) ]
-returns the intList that is the tail of a.
-
-@item a.last(); [ (last a) ]
-returns the intList that is the last node of a.
-
-@item a.nth(2); [ (nth a 2) ]
-returns the intList that is the nth node of a.
-
-@item a.set_tail(b); [ (rplacd a b) ]
-sets a's tail to b.
-
-@item a.push(2); [ (push 2 a) ]
-equivalent to a = intList(2, a);
-
-@item int x = a.pop() [ (setq x (car a)) (pop a) ]
-returns the head of a, also setting a to its tail.
-
-@end table
-
-@section Constructive operations
-
-@table @code
-
-@item b = copy(a); [ (setq b (copy-seq a)) ]
-sets b to a copy of a.
-
-@item b = reverse(a); [ (setq b (reverse a)) ]
-Sets b to a reversed copy of a.
-
-@item c = concat(a, b); [ (setq c (concat a b)) ]
-Sets c to a concatenated copy of a and b.
-
-@item c = append(a, b); [ (setq c (append a b)) ]
-Sets c to a concatenated copy of a and b. All nodes of a are
-copied, with the last node pointing to b.
-
-@item b = map(f, a); [ (setq b (mapcar f a)) ]
-Sets b to a new list created by applying function f to each node
-of a.
-
-@item c = combine(f, a, b);
-Sets c to a new list created by applying function f to successive
-pairs of a and b. The resulting list has length the shorter of a
-and b.
-
-@item b = remove(x, a); [ (setq b (remove x a)) ]
-Sets b to a copy of a, omitting all occurrences of x.
-
-@item b = remove(f, a); [ (setq b (remove-if f a)) ]
-Sets b to a copy of a, omitting values causing function f to
-return true.
-
-@item b = select(f, a); [ (setq b (remove-if-not f a)) ]
-Sets b to a copy of a, omitting values causing function f to
-return false.
-
-@item c = merge(a, b, f); [ (setq c (merge a b f)) ]
-Sets c to a list containing the ordered elements (using the
-comparison function f) of the sorted lists a and b.
-
-@end table
-
-@section Destructive operations
-
-@table @code
-
-@item a.append(b); [ (rplacd (last a) b) ]
-appends b to the end of a. No new nodes are constructed.
-
-@item a.prepend(b); [ (setq a (append b a)) ]
-prepends b to the beginning of a.
-
-@item a.del(x); [ (delete x a) ]
-deletes all nodes with value x from a.
-
-@item a.del(f); [ (delete-if f a) ]
-deletes all nodes causing function f to return true.
-
-@item a.select(f); [ (delete-if-not f a) ]
-deletes all nodes causing function f to return false.
-
-@item a.reverse(); [ (nreverse a) ]
-reverses a in-place.
-
-@item a.sort(f); [ (sort a f) ]
-sorts a in-place using ordering (comparison) function f.
-
-@item a.apply(f); [ (mapc f a) ]
-Applies void function f (int x) to each element of a.
-
-@item a.subst(int old, int repl); [ (nsubst repl old a) ]
-substitutes repl for each occurrence of old in a. Note the
-different argument order than the Lisp version.
-
-@end table
-
-@section Other operations
-
-@table @code
-
-@item a.find(int x); [ (find x a) ]
-returns the intList at the first occurrence of x.
-
-@item a.find(b); [ (find b a) ]
-returns the intList at the first occurrence of sublist b.
-
-@item a.contains(int x); [ (member x a) ]
-returns true if a contains x.
-
-@item a.contains(b); [ (member b a) ]
-returns true if a contains sublist b.
-
-@item a.position(int x); [ (position x a) ]
-returns the zero-based index of x in a, or -1 if x does not occur.
-
-@item int x = a.reduce(f, int base); [ (reduce f a :initial-value base) ]
-Accumulates the result of applying int function f(int, int) to
-successive elements of a, starting with base.
-
-@end table
-
-
-@node LinkList, Vector, List, Top
-@chapter Linked Lists
-
-SLLists provide pseudo-generic singly linked lists. DLLists provide
-doubly linked lists. The lists are designed for the simple maintenance
-of elements in a linked structure, and do not provide the more extensive
-operations (or node-sharing) of class @code{List}. They behave similarly
-to the @code{slist} and similar classes described by Stroustrup.@refill
-
-All list nodes are created dynamically. Assignment is performed via
-copying.
-
-Class @code{DLList} supports all @code{SLList} operations, plus
-additional operations described below.
-
-For purposes of illustration, assume the specification of class
-@code{intSLList}. In addition to the operations listed here,
-SLLists support traversal via Pixes. @xref{Pix}
-
-@table @code
-
-@item intSLList a;
-Declares a to be an empty list.
-
-@item intSLList b = a;
-Sets b to an element-by-element copy of a.
-
-@item a.empty()
-returns true if a contains no elements
-
-@item a.length();
-returns the number of elements in a.
-
-@item a.prepend(x);
-places x at the front of the list.
-
-@item a.append(x);
-places x at the end of the list.
-
-@item a.join(b)
-places all nodes from b to the end of a, simultaneously destroying b.
-
-@item x = a.front()
-returns a reference to the item stored at the head of the list,
-or triggers an error if the list is empty.
-
-@item a.rear()
-returns a reference to the rear of the list, or triggers an error if the
-list is empty.
-
-@item x = a.remove_front()
-deletes and returns the item stored at the head of the list.
-
-@item a.del_front()
-deletes the first element, without returning it.
-
-@item a.clear()
-deletes all items from the list.
-
-@item a.ins_after(Pix i, item);
-inserts item after position i. If i is null, insertion is at the front.
-
-@item a.del_after(Pix i);
-deletes the element following i. If i is 0, the first item is deleted.
-
-@end table
-
-@section Doubly linked lists
-
-Class @code{DLList} supports the following additional operations,
-as well as backward traversal via Pixes.
-
-@table @code
-
-@item x = a.remove_rear();
-deletes and returns the item stored at the rear of the list.
-
-@item a.del_rear();
-deletes the last element, without returning it.
-
-@item a.ins_before(Pix i, x)
-inserts x before the i.
-
-@item a.del(Pix& iint dir = 1)
-deletes the item at the current position, then advances forward
-if dir is positive, else backward.
-
-@end table
-
-@node Vector, Plex, LinkList, Top
-@chapter Vector classes
-
-The files @file{g++-include/Vec.ccP} and @file{g++-include/AVec.ccP}
-provide pseudo-generic standard array-based vector operations. The
-corresponding header files are @file{g++-include/Vec.hP} and
-@file{g++-include/AVec.hP}. Class @code{Vec} provides operations
-suitable for any base class that includes an equality operator. Subclass
-@code{AVec} provides additional arithmetic operations suitable for base
-classes that include the full complement of arithmetic operators.
-
-@code{Vecs} are constructed and assigned by copying. Thus, they should
-normally be passed by reference in applications programs.
-
-Several mapping functions are provided that allow programmers to
-specify operations on vectors as a whole.
-
-For illustrative purposes assume that classes @code{intVec} and
-@code{intAVec} have been generated via @code{genclass}.
-
-@section Constructors and assignment
-
-@table @code
-@item intVec a;
-declares a to be an empty vector. Its size may be changed via resize.
-
-@item intVec a(10);
-declares a to be an uninitialized vector of ten elements (numbered 0-9).
-
-@item intVec b(6, 0);
-declares b to be a vector of six elements, all initialized to zero. Any
-value can be used as the initial fill argument.
-
-@item a = b;
-Copies b to a. a is resized to be the same as b.
-
-@item a = b.at(2, 4)
-constructs a from the 4 elements of b starting at b[2].
-@end table
-
-Assume declarations of @code{intVec a, b, c} and @code{int i, x} in
-the following.
-
-@section Status and access
-
-@table @code
-@item a.capacity();
-returns the number of elements that can be held in a.
-
-@item a.resize(20);
-sets a's length to 20. All elements are unchanged, except that if
-the new size is smaller than the original, than trailing elements
-are deleted, and if greater, trailing elements are uninitialized.
-
-@item a[i];
-returns a reference to the i'th element of a, or produces an error
-if i is out of range.
-
-@item a.elem(i)
-returns a reference to the i'th element of a. Unlike the @code{[]} operator,
-i is not checked to ensure that it is within range.
-
-@item a == b;
-returns true if a and b contain the same elements in the same order.
-
-@item a != b;
-is the converse of a == b.
-@end table
-
-@section Constructive operations
-
-@table @code
-@item c = concat(a, b);
-sets c to the new vector constructed from all of the elements of
-a followed by all of b.
-
-@item c = map(f, a);
-sets c to the new vector constructed by applying int function f(int)
-to each element of a.
-
-@item c = merge(a, b, f);
-sets c to the new vector constructed by merging the elements of
-ordered vectors a and b using ordering (comparison) function f.
-
-@item c = combine(f, a, b);
-sets c to the new vector constructed by applying int function f(int, int)
-to successive pairs of a and b. The result has length the shorter of
-a and b.
-
-@item c = reverse(a)
-sets c to a, with elements in reverse order.
-@end table
-
-@section Destructive operations
-
-@table @code
-@item a.reverse();
-reverses a in-place.
-
-@item a.sort(f)
-sorts a in-place using comparison function f. The sorting method is a
-variation of the quicksort functions supplied with GNU emacs.
-
-@item a.fill(0, 4, 2)
-fills the 2 elements starting at a[4] with zero.
-
-@end table
-
-@section Other operations
-
-@table @code
-
-@item a.apply(f)
-applies function f to each element in a.
-
-@item x = a.reduce(f, base)
-accumulates the results of applying function f to successive elements
-of a starting with base.
-
-@item a.index(int targ);
-returns the index of the leftmost occurrence of the target, or -1,
-if it does not occur.
-
-@item a.error(char* msg)
-invokes the error handler. The default version prints the error message,
-then aborts.
-@end table
-
-@section AVec operations.
-
-AVecs provide additional arithmetic operations. All vector-by-vector
-operators generate an error if the vectors are not the same length. The
-following operations are provided, for @code{AVecs a, b} and
-base element (scalar) @code{s}.
-
-@table @code
-@item a = b;
-Copies b to a. a and b must be the same size.
-
-@item a = s;
-fills all elements of a with the value s. a is not resized.
-
-@item a + s; a - s; a * s; a / s
-adds, subtracts, multiplies, or divides each element of a with the scalar.
-
-@item a += s; a -= s; a *= s; a /= s;
-adds, subtracts, multiplies, or divides the scalar into a.
-
-@item a + b; a - b; product(a, b), quotient(a, b)
-adds, subtracts, multiplies, or divides corresponding elements of a and b.
-
-@item a += b; a -= b; a.product(b); a.quotient(b);
-adds, subtracts, multiplies, or divides corresponding elements of b into a.
-
-@item s = a * b;
-returns the inner (dot) product of a and b.
-
-@item x = a.sum();
-returns the sum of elements of a.
-
-@item x = a.sumsq();
-returns the sum of squared elements of a.
-
-@item x = a.min();
-returns the minimum element of a.
-
-@item x = a.max();
-returns the maximum element of a.
-
-@item i = a.min_index();
-returns the index of the minimum element of a.
-
-@item i = a.max_index();
-returns the index of the maximum element of a.
-
-Note that it is possible to apply vector versions other arithmetic
-operators via the mapping functions. For example, to set vector b
-to the cosines of doubleVec a, use @code{b = map(cos, a);}.
-This is often more efficient than performing the operations
-in an element-by-element fashion.
-@end table
-
-@node Plex, Stack, Vector, Top
-@chapter Plex classes
-
-A ``Plex'' is a kind of array with the following properties:
-
-@itemize @bullet
-@item
-Plexes may have arbitrary upper and lower index bounds. For example
-a Plex may be declared to run from indices -10 .. 10.
-
-@item
-Plexes may be dynamically expanded at both the lower and upper bounds
-of the array in steps of one element.
-
-@item
-Only elements that have been specifically initialized or added may
-be accessed.
-
-@item
-Elements may be accessed via indices. Indices are always checked for
-validity at run time. Plexes may be traversed via simple variations of
-standard array indexing loops.
-
-@item
-Plex elements may be accessed and traversed via Pixes.
-
-@item
-Plex-to-Plex assignment and related operations on entire Plexes
-are supported.
-
-@item
-Plex classes contain methods to help programmers check the validity
-of indexing and pointer operations.
-
-@item
-Plexes form ``natural'' base classes for many restricted-access data
-structures relying on logically contiguous indices, such as array-based
-stacks and queues.
-
-@item
-Plexes are implemented as pseudo-generic classes, and must be generated
-via the @code{genclass} utility.
-@end itemize
-
-Four subclasses of Plexes are supported: A @code{FPlex} is a Plex that
-may only grow or shrink within declared bounds; an @code{XPlex} may
-dynamically grow or shrink without bounds; an @code{RPlex} is the
-same as an @code{XPlex} but better supports indexing with poor
-locality of reference; a @code{MPlex} may grow
-or shrink, and additionally allows the logical deletion and restoration
-of elements. Because these classes are virtual subclasses of the
-``abstract'' class @code{Plex}, it is possible to write user code
-such as @code{void f(Plex& a) ...} that operates on any kind of
-Plex. However, as with nearly any virtual class, specifying the
-particular Plex class being used results in more efficient code.
-
-Plexes are implemented as a linked list of @code{IChunks}. Each chunk
-contains a part of the array. Chunk sizes may be specified within Plex
-constructors. Default versions also exist, that use a @code{#define'd}
-default. Plexes grow by filling unused space in existing chunks, if
-possible, else, except for FPlexes, by adding another chunk. Whenever
-Plexes grow by a new chunk, the default element constructors (i.e.,
-those which take no arguments) for all chunk elements are called at
-once. When Plexes shrink, destructors for the elements are not called
-until an entire chunk is freed. For this reason, Plexes (like C++
-arrays) should only be used for elements with default constructors and
-destructors that have no side effects.
-
-Plexes may be indexed and used like arrays, although traversal
-syntax is slightly different. Even though Plexes maintain elements
-in lists of chunks, they are implemented so that iteration and
-other constructs that maintain locality of reference require very
-little overhead over that for simple array traversal
-Pix-based traversal is also supported. For example, for a plex, p,
-of ints, the following traversal methods could be used.
-
-@smallexample
-for (int i = p.low(); i < p.fence(); p.next(i)) use(p[i]);
-for (int i = p.high(); i > p.ecnef(); p.prev(i)) use(p[i]);
-for (Pix t = p.first(); t != 0; p.next(t)) use(p(i));
-for (Pix t = p.last(); t != 0; p.prev(t)) use(p(i));
-@end smallexample
-
-Except for MPlexes, simply using @code{++i} and @code{--i} works just as
-well as @code{p.next(i)} and @code{p.prev(i)} when traversing by index.
-Index-based traversal is generally a bit faster than Pix-based
-traversal.
-
-@code{XPlexes} and @code{MPlexes} are less than optimal for applications
-in which widely scattered elements are indexed, as might occur when
-using Plexes as hash tables or ``manually'' allocated linked lists.
-In such applications, @code{RPlexes} are often preferable. @code{RPlexes}
-use a secondary chunk index table that requires slightly greater,
-but entirely uniform overhead per index operation.
-
-Even though they may grow in either direction, Plexes are normally
-constructed so that their ``natural'' growth direction is upwards,
-in that default chunk construction leaves free space, if present,
-at the end of the plex. However, if the chunksize arguments to
-constructors are negative, they leave space at the beginning.
-
-All versions of Plexes support the following basic capabilities.
-(letting @code{Plex} stand for the type name constructed via the
-genclass utility (e.g., @code{intPlex}, @code{doublePlex})). Assume
-declarations of @code{Plex p, q}, @code{int i, j}, base element
-@code{x}, and Pix @code{pix}.
-
-@table @code
-
-@item Plex p;
-Declares p to be an initially zero-sized Plex with low index of zero,
-and the default chunk size. For FPlexes, chunk sizes represent maximum
-sizes.
-
-@item Plex p(int size);
-Declares p to be an initially zero-sized Plex with low index of zero,
-and the indicated chunk size. If size is negative, then the Plex
-is created with free space at the beginning of the Plex,
-allowing more efficient add_low() operations. Otherwise, it
-leaves space at the end.
-
-@item Plex p(int low, int size);
-Declares p to be an initially zero-sized Plex with low index of low,
-and the indicated chunk size.
-
-@item Plex p(int low, int high, Base initval, int size = 0);
-Declares p to be a Plex with indices from low to high, initially
-filled with initval, and the indicated chunk size if specified,
-else the default or (high - low + 1), whichever is greater.
-
-@item Plex q(p);
-Declares q to be a copy of p.
-
-@item p = q;
-Copies Plex q into p, deleting its previous contents.
-
-@item p.length()
-Returns the number of elements in the Plex.
-
-@item p.empty()
-Returns true if Plex p contains no elements.
-
-@item p.full()
-Returns true if Plex p cannot be expanded. This always returns
-false for XPlexes and MPlexes.
-
-@item p[i]
-Returns a reference to the i'th element of p. An exception (error) occurs
-if i is not a valid index.
-
-@item p.valid(i)
-Returns true if i is a valid index into Plex p.
-
-@item p.low(); p.high();
-Return the minimum (maximum) valid index of the Plex, or the high (low)
-fence if the plex is empty.
-
-@item p.ecnef(); p.fence();
-Return the index one position past the minimum (maximum) valid index.
-
-@item p.next(i); i = p.prev(i);
-Set i to the next (previous) index. This index may not be within bounds.
-
-@item p(pix)
-returns a reference to the item at Pix pix.
-
-@item pix = p.first(); pix = p.last();
-Return the minimum (maximum) valid Pix of the Plex, or 0
-if the plex is empty.
-
-@item p.next(pix); p.prev(pix);
-set pix to the next (previous) Pix, or 0 if there is none.
-
-@item p.owns(pix)
-Returns true if the Plex contains the element associated with pix.
-
-@item p.Pix_to_index(pix)
-If pix is a valid Pix to an element of the Plex,
-returns its corresponding index, else raises an exception.
-
-@item ptr = p.index_to_Pix(i)
-if i is a valid index, returns a the corresponding Pix.
-
-@item p.low_element(); p.high_element();
-Return a reference to the element at the minimum (maximum) valid index.
-An exception occurs if the Plex is empty.
-
-@item p.can_add_low(); p.can_add_high();
-Returns true if the plex can be extended one element downward (upward).
-These always return true for XPlex and MPlex.
-
-@item j = p.add_low(x); j = p.add_high(x);
-Extend the Plex by one element downward (upward). The new minimum
-(maximum) index is returned.
-
-@item j = p.del_low(); j = p.del_high()
-Shrink the Plex by one element on the low (high) end. The new
-minimum (maximum) element is returned. An exception occurs if the
-Plex is empty.
-
-@item p.append(q);
-Append all of Plex q to the high side of p.
-
-@item p.prepend(q);
-Prepend all of q to the low side of p.
-
-@item p.clear()
-Delete all elements, resetting p to a zero-sized Plex.
-
-@item p.reset_low(i);
-Resets p to be indexed starting at low() = i. For example.
-if p were initially declared via @code{Plex p(0, 10, 0)},
-and then re-indexed via @code{p.reset_low(5)},
-it could then be indexed from indices 5 .. 14.
-
-@item p.fill(x)
-sets all p[i] to x.
-
-@item p.fill(x, lo, hi)
-sets all of p[i] from lo to hi, inclusive, to x.
-
-@item p.reverse()
-reverses p in-place.
-
-@item p.chunk_size()
-returns the chunk size used for the plex.
-
-@item p.error(const char * msg)
-calls the resettable error handler.
-
-@end table
-
-MPlexes are plexes with bitmaps that allow items to be logically
-deleted and restored. They behave like other plexes, but
-also support the following additional and modified capabilities:
-
-@table @code
-
-@item p.del_index(i); p.del_Pix(pix)
-logically deletes p[i] (p(pix)). After deletion, attempts to access p[i]
-generate a error. Indexing via low(), high(), prev(),
-and next() skip the element. Deleting an element never changes the
-logical bounds of the plex.
-
-@item p.undel_index(i); p.undel_Pix(pix)
-logically undeletes p[i] (p(pix)).
-
-@item p.del_low(); p.del_high()
-Delete the lowest (highest) undeleted element, resetting the
-logical bounds of the plex to the next lowest (highest) undeleted
-index. Thus, MPlex del_low() and del_high() may shrink the bounds
-of the plex by more than one index.
-
-@item p.adjust_bounds()
-Resets the low and high bounds of the Plex to the indexes of
-the lowest and highest actual undeleted elements.
-
-@item int i = p.add(x)
-Adds x in an unused index, if possible, else performs add_high.
-
-@item p.count()
-returns the number of valid (undeleted) elements.
-
-@item p.available()
-returns the number of available (deleted) indices.
-
-@item int i = p.unused_index()
-returns the index of some deleted element, if one exists,
-else triggers an error. An unused element may be reused via undel.
-
-@item pix = p.unused_Pix()
-returns the pix of some deleted element, if one exists, else 0.
-An unused element may be reused via undel.
-
-@end table
-
-@node Stack, Queue, Plex, Top
-@chapter Stacks
-
-Stacks are declared as an ``abstract'' class. They are currently
-implemented in any of three ways.
-
-@table @code
-
-@item VStack
-implement fixed sized stacks via arrays.
-
-@item XPStack
-implement dynamically-sized stacks via XPlexes.
-
-@item SLStack
-implement dynamically-size stacks via linked lists.
-
-@end table
-
-All possess the same capabilities. They differ only in constructors.
-VStack constructors require a fixed maximum capacity argument.
-XPStack constructors optionally take a chunk size argument.
-SLStack constructors take no argument.
-
-Assume the declaration of a base element @code{x}.
-
-@table @code
-
-@item Stack s; or Stack s(int capacity)
-declares a Stack.
-
-@item s.empty()
-returns true if stack s is empty.
-
-@item s.full()
-returns true if stack s is full. XPStacks and SLStacks never become full.
-
-@item s.length()
-returns the current number of elements in the stack.
-
-@item s.push(x)
-pushes x on stack s.
-
-@item x = s.pop()
-pops and returns the top of stack
-
-@item s.top()
-returns a reference to the top of stack.
-
-@item s.del_top()
-pops, but does not return the top of stack. When large items are held
-on the stack it is often a good idea to use @code{top()} to inspect and use
-the top of stack, followed by a @code{del_top()}
-
-@item s.clear()
-removes all elements from the stack.
-
-@end table
-
-@node Queue, Deque, Stack, Top
-@chapter Queues
-
-Queues are declared as an ``abstract'' class. They are currently
-implemented in any of three ways.
-
-@table @code
-@item VQueue
-implement fixed sized Queues via arrays.
-
-@item XPQueue
-implement dynamically-sized Queues via XPlexes.
-
-@item SLQueue
-implement dynamically-size Queues via linked lists.
-@end table
-
-All possess the same capabilities; they differ only in constructors.
-@code{VQueue} constructors require a fixed maximum capacity argument.
-@code{XPQueue} constructors optionally take a chunk size argument.
-@code{SLQueue} constructors take no argument.
-
-Assume the declaration of a base element @code{x}.
-
-@table @code
-@item Queue q; or Queue q(int capacity);
-declares a queue.
-
-@item q.empty()
-returns true if queue q is empty.
-
-@item q.full()
-returns true if queue q is full. XPQueues and SLQueues are never full.
-
-@item q.length()
-returns the current number of elements in the queue.
-
-@item q.enq(x)
-enqueues x on queue q.
-
-@item x = q.deq()
-dequeues and returns the front of queue
-
-@item q.front()
-returns a reference to the front of queue.
-
-@item q.del_front()
-dequeues, but does not return the front of queue
-
-@item q.clear()
-removes all elements from the queue.
-@end table
-
-@node Deque, PQ, Queue, Top
-@chapter Double ended Queues
-
-Deques are declared as an ``abstract'' class. They are currently
-implemented in two ways.
-
-@table @code
-
-@item XPDeque
-implement dynamically-sized Deques via XPlexes.
-
-@item DLDeque
-implement dynamically-size Deques via linked lists.
-
-@end table
-
-All possess the same capabilities. They differ only in constructors.
-XPDeque constructors optionally take a chunk size argument.
-DLDeque constructors take no argument.
-
-Double-ended queues support both stack-like and queue-like capabilities:
-
-Assume the declaration of a base element @code{x}.
-
-@table @code
-
-@item Deque d; or Deque d(int initial_capacity)
-declares a deque.
-
-@item d.empty()
-returns true if deque d is empty.
-
-@item d.full()
-returns true if deque d is full.
-Always returns false in current implementations.
-
-@item d.length()
-returns the current number of elements in the deque.
-
-@item d.enq(x)
-inserts x at the rear of deque d.
-
-@item d.push(x)
-inserts x at the front of deque d.
-
-@item x = d.deq()
-dequeues and returns the front of deque
-
-@item d.front()
-returns a reference to the front of deque.
-
-@item d.rear()
-returns a reference to the rear of the deque.
-
-@item d.del_front()
-deletes, but does not return the front of deque
-
-@item d.del_rear()
-deletes, but does not return the rear of the deque.
-
-@item d.clear()
-removes all elements from the deque.
-
-@end table
-
-@node PQ, Set, Deque, Top
-@chapter Priority Queue class prototypes.
-
-Priority queues maintain collections of objects arranged for fast
-access to the least element.
-
-Several prototype implementations of priority queues are supported.
-
-@table @code
-
-@item XPPQs
-implement 2-ary heaps via XPlexes.
-
-@item SplayPQs
-implement PQs via Sleator and Tarjan's (JACM 1985)
-splay trees. The algorithms use a version of ``simple top-down
-splaying'' (described on page 669 of the article). The simple-splay
-mechanism for priority queue functions is loosely based on the one used
-by D. Jones in the C splay tree functions available from volume 14 of
-the uunet.uu.net archives.
-
-@item PHPQs
-implement pairing heaps (as described by Fredman and
-Sedgewick in @cite{Algorithmica}, Vol 1, p111-129). Storage for heap elements
-is managed via an internal freelist technique. The constructor allows an
-initial capacity estimate for freelist space. The storage is automatically
-expanded if necessary to hold new items. The deletion technique is a fast
-``lazy deletion'' strategy that marks items as deleted, without reclaiming
-space until the items come to the top of the heap.
-
-@end table
-
-All PQ classes support the following operations, for some PQ class
-@code{Heap}, instance @code{h}, @code{Pix ind}, and base class
-variable @code{x}.
-
-@table @code
-
-@item h.empty()
-returns true if there are no elements in the PQ.
-
-@item h.length()
-returns the number of elements in h.
-
-@item ind = h.enq(x)
-Places x in the PQ, and returns its index.
-
-@item x = h.deq()
-Dequeues the minimum element of the PQ into x, or generates an error
-if the PQ is empty.
-
-@item h.front()
-returns a reference to the minimum element.
-
-@item h.del_front()
-deletes the minimum element.
-
-@item h.clear();
-deletes all elements from h;
-
-@item h.contains(x)
-returns true if x is in h.
-
-@item h(ind)
-returns a reference to the item indexed by ind.
-
-@item ind = h.first()
-returns the Pix of first item in the PQ or 0 if empty.
-This need not be the Pix of the least element.
-
-@item h.next(ind)
-advances ind to the Pix of next element, or 0 if there are no more.
-
-@item ind = h.seek(x)
-Sets ind to the Pix of x, or 0 if x is not in h.
-
-@item h.del(ind)
-deletes the item with Pix ind.
-
-@end table
-
-@node Set, Bag, PQ, Top
-@chapter Set class prototypes
-
-Set classes maintain unbounded collections of items containing
-no duplicate elements.
-
-These are currently implemented in several ways, differing in
-representation strategy, algorithmic efficiency, and appropriateness for
-various tasks. (Listed next to each are average (followed by worst-case,
-if different) time complexities for [a] adding, [f] finding (via seek,
-contains), [d] deleting, elements, and [c] comparing (via ==, <=) and
-[m] merging (via |=, -=, &=) sets).
-
-@table @code
-@item XPSets
-implement unordered sets via XPlexes.
-([a O(n)], [f O(n)], [d O(n)], [c O(n^2)] [m O(n^2)]).
-
-@item OXPSets
-implement ordered sets via XPlexes.
-([a O(n)], [f O(log n)], [d O(n)], [c O(n)] [m O(n)]).
-
-@item SLSets
-implement unordered sets via linked lists
-([a O(n)], [f O(n)], [d O(n)], [c O(n^2)] [m O(n^2)]).
-
-@item OSLSets
-implement ordered sets via linked lists
-([a O(n)], [f O(n)], [d O(n)], [c O(n)] [m O(n)]).
-
-@item AVLSets
-implement ordered sets via threaded AVL trees
-([a O(log n)], [f O(log n)], [d O(log n)], [c O(n)] [m O(n)]).
-
-@item BSTSets
-implement ordered sets via binary search trees. The trees may
-be manually rebalanced via the O(n) @code{balance()} member function.
-([a O(log n)/O(n)], [f O(log n)/O(n)], [d O(log n)/O(n)], [c O(n)] [m O(n)]).
-
-@item SplaySets
-implement ordered sets via Sleator and Tarjan's (JACM 1985)
-splay trees. The algorithms use a version of ``simple top-down
-splaying'' (described on page 669 of the article).
-(Amortized: [a O(log n)], [f O(log n)], [d O(log n)], [c O(n)] [m O(n log n)]).
-
-@item VHSets
-implement unordered sets via hash tables.
-The tables are automatically resized when their capacity is exhausted.
-([a O(1)/O(n)], [f O(1)/O(n)], [d O(1)/O(n)], [c O(n)/O(n^2)] [m O(n)/O(n^2)]).
-
-@item VOHSets
-implement unordered sets via ordered hash tables
-The tables are automatically resized when their capacity is exhausted.
-([a O(1)/O(n)], [f O(1)/O(n)], [d O(1)/O(n)], [c O(n)/O(n^2)] [m O(n)/O(n^2)]).
-
-@item CHSets
-implement unordered sets via chained hash tables.
-([a O(1)/O(n)], [f O(1)/O(n)], [d O(1)/O(n)], [c O(n)/O(n^2)] [m O(n)/O(n^2)]).
-@end table
-
-The different implementations differ in whether their constructors
-require an argument specifying their initial capacity. Initial
-capacities are required for plex and hash table based Sets. If none is
-given @code{DEFAULT_INITIAL_CAPACITY} (from @file{<T>defs.h}) is
-used.@refill
-
-Sets support the following operations, for some class @code{Set},
-instances @code{a} and @code{b}, @code{Pix ind}, and base
-element @code{x}. Since all implementations are virtual derived classes
-of the @code{<T>Set} class, it is possible to mix and match operations
-across different implementations, although, as usual, operations
-are generally faster when the particular classes are specified
-in functions operating on Sets.
-
-Pix-based operations are more fully described in the section
-on Pixes. @xref{Pix}
-
-@table @code
-
-@item Set a; or Set a(int initial_size);
-Declares a to be an empty Set. The second version is allowed in
-set classes that require initial capacity or sizing specifications.
-
-@item a.empty()
-returns true if a is empty.
-
-@item a.length()
-returns the number of elements in a.
-
-@item Pix ind = a.add(x)
-inserts x into a, returning its index.
-
-@item a.del(x)
-deletes x from a.
-
-@item a.clear()
-deletes all elements from a;
-
-@item a.contains(x)
-returns true if x is in a.
-
-@item a(ind)
-returns a reference to the item indexed by ind.
-
-@item ind = a.first()
-returns the Pix of first item in the set or 0 if the Set is empty.
-For ordered Sets, this is the Pix of the least element.
-
-@item a.next(ind)
-advances ind to the Pix of next element, or 0 if there are no more.
-
-@item ind = a.seek(x)
-Sets ind to the Pix of x, or 0 if x is not in a.
-
-@item a == b
-returns true if a and b contain all the same elements.
-
-@item a != b
-returns true if a and b do not contain all the same elements.
-
-@item a <= b
-returns true if a is a subset of b.
-
-@item a |= b
-Adds all elements of b to a.
-
-@item a -= b
-Deletes all elements of b from a.
-
-@item a &= b
-Deletes all elements of a not occurring in b.
-
-@end table
-
-
-@node Bag, Map, Set, Top
-@chapter Bag class prototypes
-
-Bag classes maintain unbounded collections of items potentially
-containing duplicate elements.
-
-These are currently implemented in several ways, differing in
-representation strategy, algorithmic efficiency, and appropriateness for
-various tasks. (Listed next to each are average (followed by worst-case,
-if different) time complexities for [a] adding, [f] finding (via seek,
-contains), [d] deleting elements).
-
-
-@table @code
-
-@item XPBags
-implement unordered Bags via XPlexes.
-([a O(1)], [f O(n)], [d O(n)]).
-
-@item OXPBags
-implement ordered Bags via XPlexes.
-([a O(n)], [f O(log n)], [d O(n)]).
-
-@item SLBags
-implement unordered Bags via linked lists
-([a O(1)], [f O(n)], [d O(n)]).
-
-@item OSLBags
-implement ordered Bags via linked lists
-([a O(n)], [f O(n)], [d O(n)]).
-
-@item SplayBags
-implement ordered Bags via Sleator and Tarjan's (JACM 1985)
-splay trees. The algorithms use a version of ``simple top-down
-splaying'' (described on page 669 of the article).
-(Amortized: [a O(log n)], [f O(log n)], [d O(log n)]).
-
-@item VHBags
-implement unordered Bags via hash tables.
-The tables are automatically resized when their capacity is exhausted.
-([a O(1)/O(n)], [f O(1)/O(n)], [d O(1)/O(n)]).
-
-@item CHBags
-implement unordered Bags via chained hash tables.
-([a O(1)/O(n)], [f O(1)/O(n)], [d O(1)/O(n)]).
-
-@end table
-
-The implementations differ in whether their constructors
-require an argument to specify their initial capacity. Initial
-capacities are required for plex and hash table based Bags. If none is
-given @code{DEFAULT_INITIAL_CAPACITY} (from @file{<T>defs.h}) is used.@refill
-
-Bags support the following operations, for some class @code{Bag},
-instances @code{a} and @code{b}, @code{Pix ind}, and base
-element @code{x}. Since all implementations are virtual derived classes
-of the @code{<T>Bag} class, it is possible to mix and match operations
-across different implementations, although, as usual, operations
-are generally faster when the particular classes are specified
-in functions operating on Bags.
-
-Pix-based operations are more fully described in the section
-on Pixes. @xref{Pix}
-
-@table @code
-
-@item Bag a; or Bag a(int initial_size)
-Declares a to be an empty Bag. The second version is allowed in
-Bag classes that require initial capacity or sizing specifications.
-
-@item a.empty()
-returns true if a is empty.
-
-@item a.length()
-returns the number of elements in a.
-
-@item ind = a.add(x)
-inserts x into a, returning its index.
-
-@item a.del(x)
-deletes one occurrence of x from a.
-
-@item a.remove(x)
-deletes all occurrences of x from a.
-
-@item a.clear()
-deletes all elements from a;
-
-@item a.contains(x)
-returns true if x is in a.
-
-@item a.nof(x)
-returns the number of occurrences of x in a.
-
-@item a(ind)
-returns a reference to the item indexed by ind.
-
-@item int = a.first()
-returns the Pix of first item in the Bag or 0 if the Bag is empty.
-For ordered Bags, this is the Pix of the least element.
-
-@item a.next(ind)
-advances ind to the Pix of next element, or 0 if there are no more.
-
-@item ind = a.seek(x, Pix from = 0)
-Sets ind to the Pix of the next occurrence x, or 0 if there are none.
-If from is 0, the first occurrence is returned, else the following from.
-
-@end table
-
-@node Map, GetOpt, Bag, Top
-@chapter Map Class Prototypes
-
-Maps support associative array operations (insertion, deletion, and
-membership of records based on an associated key). They require
-the specification of two types, the key type and the contents type.
-
-These are currently implemented in several ways, differing in
-representation strategy, algorithmic efficiency, and appropriateness for
-various tasks. (Listed next to each are average (followed by worst-case,
-if different) time complexities for [a] accessing (via op [],
-contains), [d] deleting elements).
-
-
-@table @code
-
-@item AVLMaps
-implement ordered Maps via threaded AVL trees
-([a O(log n)], [d O(log n)]).
-
-@item RAVLMaps
-Similar, but also maintain ranking information, used via
-@code{ranktoPix(int r)}, that returns the @code{Pix} of the
-item at rank r, and @code{rank(key)} that returns the
-rank of the corresponding item.
-([a O(log n)], [d O(log n)]).
-
-@item SplayMaps
-implement ordered Maps via Sleator and Tarjan's (JACM 1985)
-splay trees. The algorithms use a version of ``simple top-down
-splaying'' (described on page 669 of the article).
-(Amortized: [a O(log n)], [d O(log n)]).
-
-@item VHMaps
-implement unordered Maps via hash tables.
-The tables are automatically resized when their capacity is exhausted.
-([a O(1)/O(n)], [d O(1)/O(n)]).
-
-@item CHMaps
-implement unordered Maps via chained hash tables.
-([a O(1)/O(n)], [d O(1)/O(n)]).
-
-@end table
-
-The different implementations differ in whether their constructors
-require an argument specifying their initial capacity. Initial
-capacities are required for hash table based Maps. If none is
-given @code{DEFAULT_INITIAL_CAPACITY} (from @file{<T>defs.h}) is
-used.@refill
-
-All Map classes share the following operations (for some Map class,
-@code{Map} instance @code{d}, @code{Pix ind} and key variable @code{k},
-and contents variable @code{x}).
-
-Pix-based operations are more fully described in the section
-on Pixes. @xref{Pix}
-
-@table @code
-
-@item Map d(x); Map d(x, int initial_capacity)
-Declare d to be an empty Map. The required argument, x, specifies
-the default contents, i.e., the contents of an otherwise
-uninitialized location. The second version, specifying
-initial capacity is allowed for Maps with an initial capacity
-argument.
-
-@item d.empty()
-returns true if d contains no items.
-
-@item d.length()
-returns the number of items in d.
-
-@item d[k]
-returns a reference to the contents of item with key k. If no
-such item exists, it is installed with the default contents.
-Thus d[k] = x installs x, and x = d[k] retrieves it.
-
-@item d.contains(k)
-returns true if an item with key field k exists in d.
-
-@item d.del(k)
-deletes the item with key k.
-
-@item d.clear()
-deletes all items from the table.
-
-@item x = d.dflt()
-returns the default contents.
-
-@item k = d.key(ind)
-returns a reference to the key at Pix ind.
-
-@item x = d.contents(ind)
-returns a reference to the contents at Pix ind.
-
-@item ind = d.first()
-returns the Pix of the first element in d, or 0 if d is empty.
-
-@item d.next(ind)
-advances ind to the next element, or 0 if there are no more.
-
-@item ind = d.seek(k)
-returns the Pix of element with key k, or 0 if k is not in d.
-
-@end table
-
-@node GetOpt, Projects, Map, Top
-@chapter C++ version of the GNU getopt function
-
-The GetOpt class provides an efficient and structured mechanism for
-processing command-line options from an application program. The sample
-program fragment below illustrates a typical use of the GetOpt class
-for some hypothetical application program:
-
-@smallexample
-#include <stdio.h>
-#include <GetOpt.h>
-//...
-int debug_flag, compile_flag, size_in_bytes;
-
-int
-main (int argc, char **argv)
-@{
- // Invokes ctor `GetOpt (int argc, char **argv,
- // char *optstring);'
- GetOpt getopt (argc, argv, "dcs:");
- int option_char;
-
- // Invokes member function `int operator ()(void);'
- while ((option_char = getopt ()) != EOF)
- switch (option_char)
- @{
- case 'd': debug_flag = 1; break;
- case 'c': compile_flag = 1; break;
- case 's': size_in_bytes = atoi (getopt.optarg); break;
- case '?': fprintf (stderr,
- "usage: %s [dcs<size>]\n", argv[0]);
- @}
-@}
-@end smallexample
-
-Unlike the C library version, the libg++ GetOpt class uses its
-constructor to initialize class data members containing the argument
-count, argument vector, and the option string. This simplifies the
-interface for each subsequent call to member function @code{int operator
-()(void)}.
-
-The C version, on the other hand, uses hidden static variables to retain
-the option string and argument list values between calls to
-@code{getopt}. This complicates the @code{getopt} interface since the
-argument count, argument vector, and option string must be passed as
-parameters for each invocation. For the C version, the loop in the
-previous example becomes:
-
-@smallexample
- while ((option_char = getopt (argc, argv, "dcs:")) != EOF)
- // ...
-@end smallexample
-
-which requires extra overhead to pass the parameters for every call.
-
-Along with the GetOpt constructor and @code{int operator ()(void)},
-the other relevant elements of class GetOpt are:
-
-@table @code
-@item char *optarg
-Used for communication from @code{operator ()(void)} to the caller.
-When @code{operator ()(void)} finds an option that takes an argument, the
-argument value is stored here.
-@item int optind
-Index in @code{argv} of the next element to be scanned.
-This is used for communication to and from the caller
-and for communication between successive calls to @code{operator ()(void)}.
-
-When @code{operator ()(void)} returns EOF, this is the index of the
-first of the non-option elements that the caller should itself scan.
-
-Otherwise, @code{optind} communicates from one call to the next how much
-of @code{argv} has been scanned so far.
-@end table
-
-The libg++ version of GetOpt acts like standard UNIX @code{getopt} for
-the calling routine, but it behaves differently for the user, since it
-allows the user to intersperse the options with the other arguments.
-
-As GetOpt works, it permutes the elements of @code{argv} so that, when
-it is done, all the options precede everything else. Thus all
-application programs are extended to handle flexible argument order.
-
-Setting the environment variable _POSIX_OPTION_ORDER disables
-permutation. Then the behavior is completely standard.
-
-@ignore
-((Left out because it is not part of libg++ proper, and does not
-use the library copyright.))
-
-@node Gperf, Projects, GetOpt, Top
-@chapter A Perfect Hash Function Generator
-
-GNU GPERF is a utility program that automatically generates perfect hash
-functions from a list of keywords. The GNU C, GNU C++, GNU Pascal, GNU
-Modula 3 compilers and the GNU indent code formatting program all
-utilize reserved word recognizer routines generated by GPERF. Complete
-documentation and source code is available in the ./gperf subdirectory
-in the libg++ distribution. A paper describing GPERF in detail is
-available in the proceedings of the USENIX Second C++ Conference.
-@end ignore
-
-@node Projects, , GetOpt, Top
-@chapter Projects and other things left to do
-
-@section Coming Attractions
-
-Some things that will probably be available in libg++ in the near future:
-
-@itemize @bullet
-
-@item
-Revamped C-compatibility header files that will be compatible with
-the forthcoming (ANSI-based) GNU libc.a
-
-@item
-A revision of the File-based classes that will use the GNU stdio library,
-and also be 100% compatible (even at the streambuf level) with the AT&T
-2.0 stream classes.
-
-@item
-Additional container class prototypes.
-
-@item
-generic Matrix class prototypes.
-
-@item
-A task package probably based on Dirk Grunwald's threads package.
-
-@end itemize
-
-@section Wish List
-
-Some things that people have mentioned that they would like to
-see in libg++, but for which there have not been any offers:
-
-@itemize @bullet
-
-@item
-A method to automatically convert or incorporate libg++ classes
-so they can be used directly in Gorlen's OOPS environment.
-
-@item
-A class browser.
-
-@item
-A better general exception-handling strategy.
-
-@item
-Better documentation.
-
-@end itemize
-
-@section How to contribute
-
-Programmers who have written C++ classes that they believe to
-be of general interest are encourage to write to dl at rocky.oswego.edu.
-Contributing code is not difficult. Here are some general guidelines:
-
-@itemize @bullet
-
-@item
-FSF must maintain the right to accept or reject potential contributions.
-Generally, the only reasons for rejecting contributions are cases where
-they duplicate existing or nearly-released code, contain unremovable
-specific machine dependencies, or are somehow incompatible with the
-rest of the library.
-
-@item
-Acceptance of contributions means that the code is accepted for adaptation
-into libg++. FSF must reserve the right to make various editorial changes
-in code. Very often, this merely entails formatting, maintenance of various
-conventions, etc. Contributors are always given authorship credit and shown
-the final version for approval.
-
-@item
-Contributors must assign their copyright to FSF via a form sent out
-upon acceptance. Assigning copyright to FSF ensures that the code
-may be freely distributed.
-
-@item
-Assistance in providing documentation, test files, and debugging
-support is strongly encouraged.
-
-@end itemize
-
-Extensions, comments, and suggested modifications of existing libg++
-features are also very welcome.
-@contents
-@bye
diff --git a/contrib/libg++/libg++/src/ACG.cc b/contrib/libg++/libg++/src/ACG.cc
deleted file mode 100644
index b8a3c89e582a..000000000000
--- a/contrib/libg++/libg++/src/ACG.cc
+++ /dev/null
@@ -1,292 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1989 Free Software Foundation
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <ACG.h>
-#include <assert.h>
-
-//
-// This is an extension of the older implementation of Algorithm M
-// which I previously supplied. The main difference between this
-// version and the old code are:
-//
-// + Andres searched high & low for good constants for
-// the LCG.
-//
-// + theres more bit chopping going on.
-//
-// The following contains his comments.
-//
-// agn@UNH.CS.CMU.EDU sez..
-//
-// The generator below is based on 2 well known
-// methods: Linear Congruential (LCGs) and Additive
-// Congruential generators (ACGs).
-//
-// The LCG produces the longest possible sequence
-// of 32 bit random numbers, each being unique in
-// that sequence (it has only 32 bits of state).
-// It suffers from 2 problems: a) Independence
-// isnt great, that is the (n+1)th number is
-// somewhat related to the preceding one, unlike
-// flipping a coin where knowing the past outcomes
-// dont help to predict the next result. b)
-// Taking parts of a LCG generated number can be
-// quite non-random: for example, looking at only
-// the least significant byte gives a permuted
-// 8-bit counter (that has a period length of only
-// 256). The advantage of an LCA is that it is
-// perfectly uniform when run for the entire period
-// length (and very uniform for smaller sequences
-// too, if the parameters are chosen carefully).
-//
-// ACGs have extremly long period lengths and
-// provide good independence. Unfortunately,
-// uniformity isnt not too great. Furthermore, I
-// didnt find any theoretically analysis of ACGs
-// that addresses uniformity.
-//
-// The RNG given below will return numbers
-// generated by an LCA that are permuted under
-// control of a ACG. 2 permutations take place: the
-// 4 bytes of one LCG generated number are
-// subjected to one of 16 permutations selected by
-// 4 bits of the ACG. The permutation a such that
-// byte of the result may come from each byte of
-// the LCG number. This effectively destroys the
-// structure within a word. Finally, the sequence
-// of such numbers is permuted within a range of
-// 256 numbers. This greatly improves independence.
-//
-//
-// Algorithm M as describes in Knuths "Art of Computer Programming",
-// Vol 2. 1969
-// is used with a linear congruential generator (to get a good uniform
-// distribution) that is permuted with a Fibonacci additive congruential
-// generator to get good independence.
-//
-// Bit, byte, and word distributions were extensively tested and pass
-// Chi-squared test near perfect scores (>7E8 numbers tested, Uniformity
-// assumption holds with probability > 0.999)
-//
-// Run-up tests for on 7E8 numbers confirm independence with
-// probability > 0.97.
-//
-// Plotting random points in 2d reveals no apparent structure.
-//
-// Autocorrelation on sequences of 5E5 numbers (A(i) = SUM X(n)*X(n-i),
-// i=1..512)
-// results in no obvious structure (A(i) ~ const).
-//
-// Except for speed and memory requirements, this generator outperforms
-// random() for all tests. (random() scored rather low on uniformity tests,
-// while independence test differences were less dramatic).
-//
-// AGN would like to..
-// thanks to M.Mauldin, H.Walker, J.Saxe and M.Molloy for inspiration & help.
-//
-// And I would (DGC) would like to thank Donald Kunth for AGN for letting me
-// use his extensions in this implementation.
-//
-
-//
-// Part of the table on page 28 of Knuth, vol II. This allows us
-// to adjust the size of the table at the expense of shorter sequences.
-//
-
-static randomStateTable[][3] = {
-{3,7,16}, {4,9, 32}, {3,10, 32}, {1,11, 32}, {1,15,64}, {3,17,128},
-{7,18,128}, {3,20,128}, {2,21, 128}, {1,22, 128}, {5,23, 128}, {3,25, 128},
-{2,29, 128}, {3,31, 128}, {13,33, 256}, {2,35, 256}, {11,36, 256},
-{14,39,256}, {3,41,256}, {9,49,256}, {3,52,256}, {24,55,256}, {7,57, 256},
-{19,58,256}, {38,89,512}, {17,95,512}, {6,97,512}, {11,98,512}, {-1,-1,-1} };
-
-//
-// spatial permutation table
-// RANDOM_PERM_SIZE must be a power of two
-//
-
-#define RANDOM_PERM_SIZE 64
-_G_uint32_t randomPermutations[RANDOM_PERM_SIZE] = {
-0xffffffff, 0x00000000, 0x00000000, 0x00000000, // 3210
-0x0000ffff, 0x00ff0000, 0x00000000, 0xff000000, // 2310
-0xff0000ff, 0x0000ff00, 0x00000000, 0x00ff0000, // 3120
-0x00ff00ff, 0x00000000, 0xff00ff00, 0x00000000, // 1230
-
-0xffff0000, 0x000000ff, 0x00000000, 0x0000ff00, // 3201
-0x00000000, 0x00ff00ff, 0x00000000, 0xff00ff00, // 2301
-0xff000000, 0x00000000, 0x000000ff, 0x00ffff00, // 3102
-0x00000000, 0x00000000, 0x00000000, 0xffffffff, // 2103
-
-0xff00ff00, 0x00000000, 0x00ff00ff, 0x00000000, // 3012
-0x0000ff00, 0x00000000, 0x00ff0000, 0xff0000ff, // 2013
-0x00000000, 0x00000000, 0xffffffff, 0x00000000, // 1032
-0x00000000, 0x0000ff00, 0xffff0000, 0x000000ff, // 1023
-
-0x00000000, 0xffffffff, 0x00000000, 0x00000000, // 0321
-0x00ffff00, 0xff000000, 0x00000000, 0x000000ff, // 0213
-0x00000000, 0xff000000, 0x0000ffff, 0x00ff0000, // 0132
-0x00000000, 0xff00ff00, 0x00000000, 0x00ff00ff // 0123
-};
-
-//
-// SEED_TABLE_SIZE must be a power of 2
-//
-#define SEED_TABLE_SIZE 32
-static _G_uint32_t seedTable[SEED_TABLE_SIZE] = {
-0xbdcc47e5, 0x54aea45d, 0xec0df859, 0xda84637b,
-0xc8c6cb4f, 0x35574b01, 0x28260b7d, 0x0d07fdbf,
-0x9faaeeb0, 0x613dd169, 0x5ce2d818, 0x85b9e706,
-0xab2469db, 0xda02b0dc, 0x45c60d6e, 0xffe49d10,
-0x7224fea3, 0xf9684fc9, 0xfc7ee074, 0x326ce92a,
-0x366d13b5, 0x17aaa731, 0xeb83a675, 0x7781cb32,
-0x4ec7c92d, 0x7f187521, 0x2cf346b4, 0xad13310f,
-0xb89cff2b, 0x12164de1, 0xa865168d, 0x32b56cdf
-};
-
-//
-// The LCG used to scramble the ACG
-//
-//
-// LC-parameter selection follows recommendations in
-// "Handbook of Mathematical Functions" by Abramowitz & Stegun 10th, edi.
-//
-// LC_A = 251^2, ~= sqrt(2^32) = 66049
-// LC_C = result of a long trial & error series = 3907864577
-//
-
-static const _G_uint32_t LC_A = 66049;
-static const _G_uint32_t LC_C = 3907864577;
-static inline _G_uint32_t LCG(_G_uint32_t x)
-{
- return( x * LC_A + LC_C );
-}
-
-
-ACG::ACG(_G_uint32_t seed, int size)
-{
- register int l;
- initialSeed = seed;
-
- //
- // Determine the size of the state table
- //
-
- for (l = 0;
- randomStateTable[l][0] != -1 && randomStateTable[l][1] < size;
- l++);
-
- if (randomStateTable[l][1] == -1) {
- l--;
- }
-
- initialTableEntry = l;
-
- stateSize = randomStateTable[ initialTableEntry ][ 1 ];
- auxSize = randomStateTable[ initialTableEntry ][ 2 ];
-
- //
- // Allocate the state table & the auxillary table in a single malloc
- //
-
- state = new _G_uint32_t[stateSize + auxSize];
- auxState = &state[stateSize];
-
- reset();
-}
-
-//
-// Initialize the state
-//
-void
-ACG::reset()
-{
- register _G_uint32_t u;
-
- if (initialSeed < SEED_TABLE_SIZE) {
- u = seedTable[ initialSeed ];
- } else {
- u = initialSeed ^ seedTable[ initialSeed & (SEED_TABLE_SIZE-1) ];
- }
-
-
- j = randomStateTable[ initialTableEntry ][ 0 ] - 1;
- k = randomStateTable[ initialTableEntry ][ 1 ] - 1;
-
- register int i;
- for(i = 0; i < stateSize; i++) {
- state[i] = u = LCG(u);
- }
-
- for (i = 0; i < auxSize; i++) {
- auxState[i] = u = LCG(u);
- }
-
- k = u % stateSize;
- int tailBehind = (stateSize - randomStateTable[ initialTableEntry ][ 0 ]);
- j = k - tailBehind;
- if (j < 0) {
- j += stateSize;
- }
-
- lcgRecurr = u;
-
- assert(sizeof(double) == 2 * sizeof(_G_int32_t));
-}
-
-ACG::~ACG()
-{
- if (state) delete state;
- state = 0;
- // don't delete auxState, it's really an alias for state.
-}
-
-//
-// Returns 32 bits of random information.
-//
-
-_G_uint32_t
-ACG::asLong()
-{
- _G_uint32_t result = state[k] + state[j];
- state[k] = result;
- j = (j <= 0) ? (stateSize-1) : (j-1);
- k = (k <= 0) ? (stateSize-1) : (k-1);
-
- short int auxIndex = (result >> 24) & (auxSize - 1);
- register _G_uint32_t auxACG = auxState[auxIndex];
- auxState[auxIndex] = lcgRecurr = LCG(lcgRecurr);
-
- //
- // 3c is a magic number. We are doing four masks here, so we
- // do not want to run off the end of the permutation table.
- // This insures that we have always got four entries left.
- //
- register _G_uint32_t *perm = & randomPermutations[result & 0x3c];
-
- result = *(perm++) & auxACG;
- result |= *(perm++) & ((auxACG << 24)
- | ((auxACG >> 8)& 0xffffff));
- result |= *(perm++) & ((auxACG << 16)
- | ((auxACG >> 16) & 0xffff));
- result |= *(perm++) & ((auxACG << 8)
- | ((auxACG >> 24) & 0xff));
-
- return(result);
-}
diff --git a/contrib/libg++/libg++/src/ACG.h b/contrib/libg++/libg++/src/ACG.h
deleted file mode 100644
index aa1d25914a83..000000000000
--- a/contrib/libg++/libg++/src/ACG.h
+++ /dev/null
@@ -1,68 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Dirk Grunwald (grunwald@cs.uiuc.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-#ifndef _ACG_h
-#define _ACG_h 1
-
-#include <RNG.h>
-#include <math.h>
-#ifdef __GNUG__
-#pragma interface
-#endif
-
-//
-// Additive number generator. This method is presented in Volume II
-// of The Art of Computer Programming by Knuth. I've coded the algorithm
-// and have added the extensions by Andres Nowatzyk of CMU to randomize
-// the result of algorithm M a bit by using an LCG & a spatial
-// permutation table.
-//
-// The version presented uses the same constants for the LCG that Andres
-// uses (chosen by trial & error). The spatial permutation table is
-// the same size (it's based on word size). This is for 32-bit words.
-//
-// The ``auxillary table'' used by the LCG table varies in size, and
-// is chosen to be the the smallest power of two which is larger than
-// twice the size of the state table.
-//
-
-class ACG : public RNG {
-
- _G_uint32_t initialSeed; // used to reset generator
- int initialTableEntry;
-
- _G_uint32_t *state;
- _G_uint32_t *auxState;
- short stateSize;
- short auxSize;
- _G_uint32_t lcgRecurr;
- short j;
- short k;
-
-protected:
-
-public:
- ACG(_G_uint32_t seed = 0, int size = 55);
- virtual ~ACG();
- //
- // Return a long-words word of random bits
- //
- virtual _G_uint32_t asLong();
- virtual void reset();
-};
-
-#endif
diff --git a/contrib/libg++/libg++/src/AllocRing.cc b/contrib/libg++/libg++/src/AllocRing.cc
deleted file mode 100644
index 883288ab0480..000000000000
--- a/contrib/libg++/libg++/src/AllocRing.cc
+++ /dev/null
@@ -1,110 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1989 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <std.h>
-#include <AllocRing.h>
-#include <new.h>
-
-AllocRing::AllocRing(int max)
- :nodes(new AllocQNode[max]), n(max), current(0)
-{
- for (int i = 0; i < n; ++i)
- {
- nodes[i].ptr = 0;
- nodes[i].sz = 0;
- }
-}
-
-int AllocRing::find(void* p)
-{
- if (p == 0) return -1;
-
- for (int i = 0; i < n; ++i)
- if (nodes[i].ptr == p)
- return i;
-
- return -1;
-}
-
-
-void AllocRing::clear()
-{
- for (int i = 0; i < n; ++i)
- {
- if (nodes[i].ptr != 0)
- {
- delete(nodes[i].ptr);
- nodes[i].ptr = 0;
- }
- nodes[i].sz = 0;
- }
- current = 0;
-}
-
-
-void AllocRing::free(void* p)
-{
- int idx = find(p);
- if (idx >= 0)
- {
- delete nodes[idx].ptr;
- nodes[idx].ptr = 0;
- }
-}
-
-AllocRing::~AllocRing()
-{
- clear();
-}
-
-int AllocRing::contains(void* p)
-{
- return find(p) >= 0;
-}
-
-static inline unsigned int good_size(unsigned int s)
-{
- unsigned int req = s + 4;
- unsigned int good = 8;
- while (good < req) good <<= 1;
- return good - 4;
-}
-
-void* AllocRing::alloc(int s)
-{
- unsigned int size = good_size(s);
-
- void* p;
- if (nodes[current].ptr != 0 &&
- nodes[current].sz >= int(size) &&
- nodes[current].sz < int(4 * size))
- p = nodes[current].ptr;
- else
- {
- if (nodes[current].ptr != 0) operator delete (nodes[current].ptr);
- p = operator new (size);
- nodes[current].ptr = p;
- nodes[current].sz = size;
- }
- ++current;
- if (current >= n) current = 0;
- return p;
-}
diff --git a/contrib/libg++/libg++/src/AllocRing.h b/contrib/libg++/libg++/src/AllocRing.h
deleted file mode 100644
index fc8b30c44d55..000000000000
--- a/contrib/libg++/libg++/src/AllocRing.h
+++ /dev/null
@@ -1,62 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1989 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#ifndef _AllocRing_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _AllocRing_h 1
-
-
-/*
- An AllocRing holds the last n malloc'ed strings, reallocating/reusing
- one only when the queue wraps around. It thus guarantees that the
- last n allocations are intact. It is useful for things like I/O
- formatting where reasonable restrictions may be made about the
- number of allowable live allocations before auto-deletion.
-*/
-
-class AllocRing
-{
-
- struct AllocQNode
- {
- void* ptr;
- int sz;
- };
-
- AllocQNode* nodes;
- int n;
- int current;
-
- int find(void* p);
-
-public:
-
- AllocRing(int max);
- ~AllocRing();
-
- void* alloc(int size);
- int contains(void* ptr);
- void clear();
- void free(void* p);
-};
-
-
-#endif
diff --git a/contrib/libg++/libg++/src/Binomial.cc b/contrib/libg++/libg++/src/Binomial.cc
deleted file mode 100644
index 8e2b56d71ab3..000000000000
--- a/contrib/libg++/libg++/src/Binomial.cc
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Dirk Grunwald (grunwald@cs.uiuc.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <builtin.h>
-#include <Random.h>
-#include <Binomial.h>
-
-double Binomial::operator()()
-{
- int s = 0;
- for (int i = 0; i < pN; i++) {
- if (pGenerator -> asDouble() < pU) {
- s++;
- }
- }
- return(double(s));
-}
-
diff --git a/contrib/libg++/libg++/src/Binomial.h b/contrib/libg++/libg++/src/Binomial.h
deleted file mode 100644
index 58afa854caf7..000000000000
--- a/contrib/libg++/libg++/src/Binomial.h
+++ /dev/null
@@ -1,55 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Dirk Grunwald (grunwald@cs.uiuc.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-#ifndef _Binomial_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _Binomial_h 1
-
-#include <Random.h>
-
-class Binomial: public Random {
-protected:
- int pN;
- double pU;
-public:
- Binomial(int n, double u, RNG *gen);
-
- int n();
- int n(int xn);
-
- double u();
- double u(double xu);
-
- virtual double operator()();
-
-};
-
-
-inline Binomial::Binomial(int n, double u, RNG *gen)
-: Random(gen){
- pN = n; pU = u;
-}
-
-inline int Binomial::n() { return pN; }
-inline int Binomial::n(int xn) { int tmp = pN; pN = xn; return tmp; }
-
-inline double Binomial::u() { return pU; }
-inline double Binomial::u(double xu) { double tmp = pU; pU = xu; return tmp; }
-
-#endif
diff --git a/contrib/libg++/libg++/src/BitSet.cc b/contrib/libg++/libg++/src/BitSet.cc
deleted file mode 100644
index 15096e2d28be..000000000000
--- a/contrib/libg++/libg++/src/BitSet.cc
+++ /dev/null
@@ -1,1104 +0,0 @@
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/*
- BitSet class implementation
- */
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <BitSet.h>
-#include <std.h>
-#include <limits.h>
-#include <Obstack.h>
-#include <AllocRing.h>
-#include <new.h>
-#include <builtin.h>
-#include <string.h>
-#include <strstream.h>
-
-#undef OK
-
-void BitSet::error(const char* msg) const
-{
- (*lib_error_handler)("BitSet", msg);
-}
-
-// globals & constants
-
-BitSetRep _nilBitSetRep = { 0, 1, 0, {0} }; // nil BitSets point here
-
-#define ONES ((_BS_word)(~0L))
-#define MASK1(BITNO) ((_BS_word)1 << (BITNO))
-#define MAXBitSetRep_SIZE (((_BS_word)1 << (sizeof(unsigned short)*CHAR_BIT - 1)) - 1)
-#define MINBitSetRep_SIZE (sizeof(_BS_word)*CHAR_BIT)
-
-#ifndef MALLOC_MIN_OVERHEAD
-#define MALLOC_MIN_OVERHEAD 4
-#endif
-
-// break things up into .s indices and positions
-
-
-// mask out bits from left
-
-static inline _BS_word lmask(int p)
-{
- return ONES << p;
-}
-
-// mask out high bits
-
-static inline _BS_word rmask(int p)
-{
- return ONES >> (BITSETBITS - 1 - p);
-}
-
-
-inline static BitSetRep* BSnew(int newlen)
-{
- unsigned int siz = sizeof(BitSetRep) + newlen * sizeof(_BS_word)
- + MALLOC_MIN_OVERHEAD;
- unsigned int allocsiz = MINBitSetRep_SIZE;;
- while (allocsiz < siz) allocsiz <<= 1;
- allocsiz -= MALLOC_MIN_OVERHEAD;
- if (allocsiz >= MAXBitSetRep_SIZE * sizeof(_BS_word))
- (*lib_error_handler)("BitSet", "Requested length out of range");
-
- BitSetRep* rep = new (operator new (allocsiz)) BitSetRep;
- memset(rep, 0, allocsiz);
- rep->sz = (allocsiz - sizeof(BitSetRep) + sizeof(_BS_word)) / sizeof(_BS_word);
- return rep;
-}
-
-BitSetRep* BitSetalloc(BitSetRep* old, const _BS_word* src, int srclen,
- int newvirt, int newlen)
-{
- if (old == &_nilBitSetRep) old = 0;
- BitSetRep* rep;
- if (old == 0 || newlen >= old->sz)
- rep = BSnew(newlen);
- else
- rep = old;
-
- rep->len = newlen;
- rep->virt = newvirt;
-
- if (srclen != 0 && src != rep->s)
- memcpy(rep->s, src, srclen * sizeof(_BS_word));
- // BUG fix: extend virtual bit! 20 Oct 1992 Kevin Karplus
- if (rep->virt)
- memset(&rep->s[srclen], (char)ONES,
- (newlen - srclen) * sizeof(_BS_word));
- if (old != rep && old != 0) delete old;
- return rep;
-}
-
-BitSetRep* BitSetresize(BitSetRep* old, int newlen)
-{
- BitSetRep* rep;
- if (old == 0 || old == &_nilBitSetRep)
- {
- rep = BSnew(newlen);
- rep->virt = 0;
- }
- else if (newlen >= old->sz)
- {
- rep = BSnew(newlen);
- memcpy(rep->s, old->s, old->len * sizeof(_BS_word));
- rep->virt = old->virt;
- // BUG fix: extend virtual bit! 20 Oct 1992 Kevin Karplus
- if (rep->virt)
- memset(&rep->s[old->len], (char)ONES,
- (newlen - old->len) * sizeof(_BS_word));
- delete old;
- }
- else
- {
- rep = old;
- if (rep->len < newlen)
- memset(&rep->s[rep->len],
- rep->virt ? (char)ONES : (char)0,
- (newlen - rep->len) * sizeof(_BS_word));
- }
-
- rep->len = newlen;
-
- return rep;
-}
-
-// same, for straight copy
-
-BitSetRep* BitSetcopy(BitSetRep* old, const BitSetRep* src)
-{
- BitSetRep* rep;
- if (old == &_nilBitSetRep) old = 0;
- if (src == 0 || src == &_nilBitSetRep)
- {
- if (old == 0)
- rep = BSnew(0);
- else
- rep = old;
- rep->len = 0;
- rep->virt = 0;
- }
- else if (old == src)
- return old;
- else
- {
- int newlen = src->len;
- if (old == 0 || newlen > old->sz)
- {
- rep = BSnew(newlen);
- if (old != 0) delete old;
- }
- else
- rep = old;
-
- memcpy(rep->s, src->s, newlen * sizeof(_BS_word));
- rep->len = newlen;
- rep->virt = src->virt;
- }
- return rep;
-}
-
-
-// remove unneeded top bits
-
-inline static void trim(BitSetRep* rep)
-{
- int l = rep->len;
- _BS_word* s = &(rep->s[l - 1]);
-
- if (rep->virt == 0)
- while (l > 0 && *s-- == 0) --l;
- else
- while (l > 0 && *s-- == ONES) --l;
- rep->len = l;
-}
-
-int operator == (const BitSet& x, const BitSet& y)
-{
- if (x.rep->virt != y.rep->virt)
- return 0;
- int xl = x.rep->len;
- int yl = y.rep->len;
-
- const _BS_word* xs = x.rep->s;
- const _BS_word* ys = y.rep->s;
- if (xl < yl) {
- if (memcmp((void*)xs, (void*)ys, xl * sizeof(_BS_word)))
- return 0;
- ys+=xl;
- const _BS_word* topy = &(ys[yl]);
- while (ys<topy)
- if (x.rep->virt?((*ys++)!=ONES):((*ys++)!=0))
- return 0;
- }
- else {
- if (memcmp((void*)xs, (void*)ys, yl * sizeof(_BS_word)))
- return 0;
- if (xl > yl) {
- xs+=yl;
- const _BS_word* topx = &(xs[xl]);
- while (xs<topx)
- if (y.rep->virt?((*xs++)!=ONES):((*xs++)!=0))
- return 0;
- }
- }
- return 1;
-}
-
-int operator <= (const BitSet& x, const BitSet& y)
-{
- if (x.rep->virt > y.rep->virt)
- return 0;
-
- int xl = x.rep->len;
- int yl = y.rep->len;
-
- const _BS_word* xs = x.rep->s;
- const _BS_word* ys = y.rep->s;
- const _BS_word* topx = &(xs[xl]);
- const _BS_word* topy = &(ys[yl]);
-
- while (xs < topx && ys < topy)
- {
- _BS_word a = *xs++;
- _BS_word b = *ys++;
- if ((a | b) != b)
- return 0;
- }
- if (xl < yl) {
- if (x.rep->virt) {
- while (ys<topy)
- if ((*ys++)!=ONES)
- return 0;
- }
- }
- else if (xl > yl) {
- if (!y.rep->virt) {
- while (xs<topx)
- if ((*xs++)!=0)
- return 0;
- }
- }
- return 1;
-}
-
-
-int operator < (const BitSet& x, const BitSet& y)
-{
- if (x.rep->virt > y.rep->virt)
- return 0;
-
- int xl = x.rep->len;
- int yl = y.rep->len;
-
- _BS_word* xs = x.rep->s;
- _BS_word* ys = y.rep->s;
- _BS_word* topx = &(xs[xl]);
- _BS_word* topy = &(ys[yl]);
- int one_diff = 0;
- while (xs < topx && ys < topy)
- {
- _BS_word a = *xs++;
- _BS_word b = *ys++;
- _BS_word c = a | b;
- if (c != b)
- return 0;
- else if (c != a)
- one_diff = 1;
- }
- if (xl < yl) {
- if (x.rep->virt) {
- if (!one_diff)
- return 0;
- while (ys<topy)
- if ((*ys++)!=ONES)
- return 0;
- return 1;
- }
- else {
- if (one_diff || y.rep->virt)
- return 1;
- while (ys<topy)
- if ((*ys++)!=0)
- return 1;
- return 0;
- }
- }
- else if (xl > yl) {
- if (y.rep->virt) {
- if (one_diff || !x.rep->virt)
- return 1;
- while (xs<topx)
- if ((*xs++)!=ONES)
- return 1;
- return 0;
- }
- else {
- if (!one_diff)
- return 0;
- while (xs<topx)
- if ((*xs++)!=0)
- return 0;
- return 1;
- }
- }
- else
- return one_diff || x.rep->virt < y.rep->virt;
-}
-
-int lcompare(const BitSet& x, const BitSet& y)
-{
- int xl = x.rep->len;
- int yl = y.rep->len;
-
- const _BS_word* xs = x.rep->s;
- const _BS_word* ys = y.rep->s;
- const _BS_word* topx = &(xs[xl]);
- const _BS_word* topy = &(ys[yl]);
-
- while (xs < topx && ys < topy)
- {
- _BS_word a = *xs++;
- _BS_word b = *ys++;
- if (a!=b) {
-#if 0
- // Faster but opinable
- return (a<b) ? -1 : 1;
-#else
- _BS_word diff=(a^b); // one's where different
- _BS_word mask=diff&~(diff-1); // first bit different
- return (a&mask)?1:-1;
-#endif
- }
- if (a<b)
- return -1;
- if (a>b)
- return 1;
- }
- if (xl < yl) {
- if (x.rep->virt) {
- while (ys<topy)
- if ((*ys++)!=ONES)
- return 1;
- return 0;
- }
- else {
- while (ys<topy)
- if ((*ys++)!=0)
- return -1;
- return 0;
- }
- }
- else if (xl > yl) {
- if (y.rep->virt) {
- while (xs<topx)
- if ((*xs++)!=ONES)
- return -1;
- return 0;
- }
- else {
- while (xs<topx)
- if ((*xs++)!=0)
- return 1;
- return 0;
- }
- }
- return 0;
-}
-
-int BitSet::empty() const
-{
- if (rep->virt == 1)
- return 0;
-
- _BS_word* bots = rep->s;
- _BS_word* s = &(bots[rep->len - 1]);
- while (s >= bots) if (*s-- != 0) return 0;
- return 1;
-}
-
-
-int BitSet::count(int b) const
-{
- if (b == rep->virt)
- return -1;
- int l = 0;
- _BS_word* s = rep->s;
- _BS_word* tops = &(s[rep->len]);
- if (b == 1)
- {
- while (s < tops)
- {
- _BS_word a = *s++;
- for (int i = 0; i < BITSETBITS && a != 0; ++i)
- {
- if (a & 1)
- ++l;
- a >>= 1;
- }
- }
- }
- else
- {
- _BS_word maxbit = MASK1 (BITSETBITS - 1);
- while (s < tops)
- {
- _BS_word a = *s++;
- for (int i = 0; i < BITSETBITS; ++i)
- {
- if ((a & maxbit) == 0)
- ++l;
- a <<= 1;
- }
- }
- }
- return l;
-}
-
-BitSetRep* BitSetcmpl(const BitSetRep* src, BitSetRep* r)
-{
- r = BitSetcopy(r, src);
- r->virt = !src->virt;
- _BS_word* rs = r->s;
- _BS_word* topr = &(rs[r->len]);
- if (r->len == 0)
- *rs = ONES;
- else
- {
- while (rs < topr)
- {
- _BS_word cmp = ~(*rs);
- *rs++ = cmp;
- }
- }
- trim(r);
- return r;
-}
-
-
-BitSetRep* BitSetop(const BitSetRep* x, const BitSetRep* y,
- BitSetRep* r, char op)
-{
- int xrsame = x == r;
- int yrsame = y == r;
- int xv = x->virt;
- int yv = y->virt;
- int xl = x->len;
- int yl = y->len;
- int rl = (xl >= yl)? xl : yl;
-
- r = BitSetresize(r, rl);
- _BS_word* rs = r->s;
- _BS_word* topr = &(rs[rl]);
-
- int av, bv;
- const _BS_word* as;
- const _BS_word* topa;
- const _BS_word* bs;
- const _BS_word* topb;
-
- if (xl <= yl)
- {
- as = (xrsame)? r->s : x->s;
- av = xv;
- topa = &(as[xl]);
- bs = (yrsame)? r->s : y->s;
- bv = yv;
- topb = &(bs[yl]);
- }
- else
- {
- as = (yrsame)? r->s : y->s;
- av = yv;
- topa = &(as[yl]);
- bs = (xrsame)? r->s : x->s;
- bv = xv;
- topb = &(bs[xl]);
- if (op == '-') // reverse sense of difference
- op = 'D';
- }
-
- switch (op)
- {
- case '&':
- r->virt = av & bv;
- while (as < topa) *rs++ = *as++ & *bs++;
- if (av)
- while (rs < topr) *rs++ = *bs++;
- else
- while (rs < topr) *rs++ = 0;
- break;
- case '|':
- r->virt = av | bv;
- while (as < topa) *rs++ = *as++ | *bs++;
- if (av)
- while (rs < topr) *rs++ = ONES;
- else
- while (rs < topr) *rs++ = *bs++;
- break;
- case '^':
- r->virt = av ^ bv;
- while (as < topa) *rs++ = *as++ ^ *bs++;
- if (av)
- while (rs < topr) *rs++ = ~(*bs++);
- else
- while (rs < topr) *rs++ = *bs++;
- break;
- case '-':
- r->virt = av & ~(bv);
- while (as < topa) *rs++ = *as++ & ~(*bs++);
- if (av)
- while (rs < topr) *rs++ = ~(*bs++);
- else
- while (rs < topr) *rs++ = 0;
- break;
- case 'D':
- r->virt = ~(av) & (bv);
- while (as < topa) *rs++ = ~(*as++) & (*bs++);
- if (av)
- while (rs < topr) *rs++ = 0;
- else
- while (rs < topr) *rs++ = *bs++;
- break;
- }
- trim(r);
- return r;
-}
-
-
-void BitSet::set(int p)
-{
- if (p < 0) error("Illegal bit index");
-
- int index = BitSet_index(p);
- int pos = BitSet_pos(p);
-
- if (index >= rep->len)
- {
- if (rep->virt)
- return;
- else
- rep = BitSetresize(rep, index+1);
- }
-
- rep->s[index] |= MASK1 (pos);
-}
-
-void BitSet::clear()
-{
- if (rep->len > 0) memset(rep->s, 0, rep->sz * sizeof(_BS_word));
- rep->len = rep->virt = 0;
-}
-
-void BitSet::clear(int p)
-{
- if (p < 0) error("Illegal bit index");
- int index = BitSet_index(p);
- if (index >= rep->len)
- {
- if (rep->virt == 0)
- return;
- else
- rep = BitSetresize(rep, index+1);
- }
- rep->s[index] &= ~MASK1(BitSet_pos(p));
-}
-
-void BitSet::invert(int p)
-{
- if (p < 0) error("Illegal bit index");
- int index = BitSet_index(p);
- if (index >= rep->len) rep = BitSetresize(rep, index+1);
- rep->s[index] ^= MASK1(BitSet_pos(p));
-}
-
-void BitSet::set(int from, int to)
-{
- if (from < 0 || from > to) error("Illegal bit index");
-
- int index1 = BitSet_index(from);
- int pos1 = BitSet_pos(from);
-
- if (rep->virt && index1 >= rep->len)
- return;
-
- int index2 = BitSet_index(to);
- int pos2 = BitSet_pos(to);
-
- if (index2 >= rep->len)
- rep = BitSetresize(rep, index2+1);
-
- _BS_word* s = &(rep->s[index1]);
- _BS_word m1 = lmask(pos1);
- _BS_word m2 = rmask(pos2);
- if (index2 == index1)
- *s |= m1 & m2;
- else
- {
- *s++ |= m1;
- _BS_word* top = &(rep->s[index2]);
- *top |= m2;
- while (s < top)
- *s++ = ONES;
- }
-}
-
-void BitSet::clear(int from, int to)
-{
- if (from < 0 || from > to) error("Illegal bit index");
-
- int index1 = BitSet_index(from);
- int pos1 = BitSet_pos(from);
-
- if (!rep->virt && index1 >= rep->len)
- return;
-
- int index2 = BitSet_index(to);
- int pos2 = BitSet_pos(to);
-
- if (index2 >= rep->len)
- rep = BitSetresize(rep, index2+1);
-
- _BS_word* s = &(rep->s[index1]);
- _BS_word m1 = lmask(pos1);
- _BS_word m2 = rmask(pos2);
- if (index2 == index1)
- *s &= ~(m1 & m2);
- else
- {
- *s++ &= ~m1;
- _BS_word* top = &(rep->s[index2]);
- *top &= ~m2;
- while (s < top)
- *s++ = 0;
- }
-}
-
-void BitSet::invert(int from, int to)
-{
- if (from < 0 || from > to) error("Illegal bit index");
-
- int index1 = BitSet_index(from);
- int pos1 = BitSet_pos(from);
- int index2 = BitSet_index(to);
- int pos2 = BitSet_pos(to);
-
- if (index2 >= rep->len)
- rep = BitSetresize(rep, index2+1);
-
- _BS_word* s = &(rep->s[index1]);
- _BS_word m1 = lmask(pos1);
- _BS_word m2 = rmask(pos2);
- if (index2 == index1)
- *s ^= m1 & m2;
- else
- {
- *s++ ^= m1;
- _BS_word* top = &(rep->s[index2]);
- *top ^= m2;
- while (s < top)
- {
- _BS_word cmp = ~(*s);
- *s++ = cmp;
- }
- }
-}
-
-
-int BitSet::test(int from, int to) const
-{
- if (from < 0 || from > to) return 0;
-
- int index1 = BitSet_index(from);
- int pos1 = BitSet_pos(from);
-
- if (index1 >= rep->len)
- return rep->virt;
-
- int index2 = BitSet_index(to);
- int pos2 = BitSet_pos(to);
-
- if (index2 >= rep->len)
- {
- if (rep->virt)
- return 1;
- else
- {
- index2 = rep->len - 1;
- pos2 = BITSETBITS - 1;
- }
- }
-
- _BS_word* s = &(rep->s[index1]);
- _BS_word m1 = lmask(pos1);
- _BS_word m2 = rmask(pos2);
-
- if (index2 == index1)
- return (*s & m1 & m2) != 0;
- else
- {
- if (*s++ & m1)
- return 1;
- _BS_word* top = &(rep->s[index2]);
- if (*top & m2)
- return 1;
- while (s < top)
- if (*s++ != 0)
- return 1;
- return 0;
- }
-}
-
-int BitSet::next(int p, int b) const
-{
- ++p;
- int index = BitSet_index(p);
- int pos = BitSet_pos(p);
-
- int l = rep->len;
-
- if (index >= l)
- {
- if (rep->virt == b)
- return p;
- else
- return -1;
- }
- int j = index;
- _BS_word* s = rep->s;
- _BS_word a = s[j] >> pos;
- int i = pos;
-
- if (b == 1)
- {
- for (; i < BITSETBITS && a != 0; ++i)
- {
- if (a & 1)
- return j * BITSETBITS + i;
- a >>= 1;
- }
- for (++j; j < l; ++j)
- {
- a = s[j];
- for (i = 0; i < BITSETBITS && a != 0; ++i)
- {
- if (a & 1)
- return j * BITSETBITS + i;
- a >>= 1;
- }
- }
- if (rep->virt)
- return j * BITSETBITS;
- else
- return -1;
- }
- else
- {
- for (; i < BITSETBITS; ++i)
- {
- if ((a & 1) == 0)
- return j * BITSETBITS + i;
- a >>= 1;
- }
- for (++j; j < l; ++j)
- {
- a = s[j];
- if (a != ONES)
- {
- for (i = 0; i < BITSETBITS; ++i)
- {
- if ((a & 1) == 0)
- return j * BITSETBITS + i;
- a >>= 1;
- }
- }
- }
- if (!rep->virt)
- return j * BITSETBITS;
- else
- return -1;
- }
-}
-
-int BitSet::prev(int p, int b) const
-{
- if (--p < 0)
- return -1;
-
- int index = BitSet_index(p);
- int pos = BitSet_pos(p);
-
- _BS_word* s = rep->s;
- int l = rep->len;
-
- if (index >= l)
- {
- if (rep->virt == b)
- return p;
- else
- {
- index = l - 1;
- pos = BITSETBITS - 1;
- }
- }
-
- int j = index;
- _BS_word a = s[j];
-
- int i = pos;
- _BS_word maxbit = MASK1(pos);
-
- if (b == 1)
- {
- for (; i >= 0 && a != 0; --i)
- {
- if (a & maxbit)
- return j * BITSETBITS + i;
- a <<= 1;
- }
- maxbit = MASK1(BITSETBITS - 1);
- for (--j; j >= 0; --j)
- {
- a = s[j];
- for (i = BITSETBITS - 1; i >= 0 && a != 0; --i)
- {
- if (a & maxbit)
- return j * BITSETBITS + i;
- a <<= 1;
- }
- }
- return -1;
- }
- else
- {
- if (a != ONES)
- {
- for (; i >= 0; --i)
- {
- if ((a & maxbit) == 0)
- return j * BITSETBITS + i;
- a <<= 1;
- }
- }
- maxbit = MASK1(BITSETBITS - 1);
- for (--j; j >= 0; --j)
- {
- a = s[j];
- if (a != ONES)
- {
- for (i = BITSETBITS - 1; i >= 0; --i)
- {
- if ((a & maxbit) == 0)
- return j * BITSETBITS + i;
- a <<= 1;
- }
- }
- }
- return -1;
- }
-}
-
-int BitSet::last(int b) const
-{
- if (b == rep->virt)
- return -1;
- else
- return prev((rep->len) * BITSETBITS, b);
-}
-
-
-extern AllocRing _libgxx_fmtq;
-
-const char* BitSettoa(const BitSet& x, char f, char t, char star)
-{
- trim(x.rep);
- int wrksiz = (x.rep->len + 1) * BITSETBITS + 2;
- char* fmtbase = (char *) _libgxx_fmtq.alloc(wrksiz);
- ostrstream stream(fmtbase, wrksiz);
-
- x.printon(stream, f, t, star);
- stream << ends;
- return fmtbase;
-}
-
-BitSet shorttoBitSet(unsigned short i)
-{
- BitSet r;
- _BS_word w = i;
- r.rep = BitSetalloc(0, &w, 1, 0, 2); trim(r.rep);
- return r;
-}
-
-BitSet longtoBitSet(unsigned long i)
-{
- BitSet r;
-#if 1
- _BS_word w = i;
- r.rep = BitSetalloc(0, &w, 1, 0, 2);
-#else
- _BS_word u[2];
- u[0] = i & ((_BS_word)(~(0)));
- u[1] = sizeof(long) <= sizeof(_BS_word) ? 0 : i >> BITSETBITS;
- r.rep = BitSetalloc(0, &u[0], 2, 0, 3);
-#endif
- trim(r.rep);
- return r;
-}
-
-#if defined(__GNUG__) && !defined(_G_NO_NRV)
-
-BitSet atoBitSet(const char* s, char f, char t, char star) return r
-{
- int sl = strlen(s);
- if (sl != 0)
- {
- r.rep = BitSetresize(r.rep, sl / BITSETBITS + 1);
- _BS_word* rs = r.rep->s;
- _BS_word a = 0;
- _BS_word m = 1;
- char lastch = 0;
- unsigned int i = 0;
- unsigned int l = 1;
- for(;;)
- {
- char ch = s[i];
- if (ch == t)
- a |= m;
- else if (ch == star)
- {
- if ((r.rep->virt = (lastch == t)))
- *rs = a | ~(m - 1);
- else
- *rs = a;
- break;
- }
- else if (ch != f)
- {
- *rs = a;
- break;
- }
- lastch = ch;
- if (++i == sl)
- {
- *rs = a;
- break;
- }
- else if (i % BITSETBITS == 0)
- {
- *rs++ = a;
- a = 0;
- m = 1;
- ++l;
- }
- else
- m <<= 1;
- }
- r.rep->len = l;
- trim(r.rep);
- }
- return;
-}
-
-#else
-
-BitSet atoBitSet(const char* s, char f, char t, char star)
-{
- BitSet r;
- int sl = strlen(s);
- if (sl != 0)
- {
- r.rep = BitSetresize(r.rep, sl / BITSETBITS + 1);
- _BS_word* rs = r.rep->s;
- _BS_word a = 0;
- _BS_word m = 1;
- char lastch = 0;
- unsigned int i = 0;
- unsigned int l = 1;
- for(;;)
- {
- char ch = s[i];
- if (ch == t)
- a |= m;
- else if (ch == star)
- {
- if (r.rep->virt = lastch == t)
- *rs = a | ~(m - 1);
- else
- *rs = a;
- break;
- }
- else if (ch != f)
- {
- *rs = a;
- break;
- }
- lastch = ch;
- if (++i == sl)
- {
- *rs = a;
- break;
- }
- else if (i % BITSETBITS == 0)
- {
- *rs++ = a;
- a = 0;
- m = 1;
- ++l;
- }
- else
- m <<= 1;
- }
- r.rep->len = l;
- trim(r.rep);
- }
- return r;
-}
-
-#endif
-
-ostream& operator << (ostream& s, const BitSet& x)
-{
- if (s.opfx())
- x.printon(s);
- return s;
-}
-
-void BitSet::printon(ostream& os, char f, char t, char star) const
-// FIXME: Does not respect s.width()!
-{
- trim(rep);
- register streambuf* sb = os.rdbuf();
- const _BS_word* s = rep->s;
- const _BS_word* top = &(s[rep->len - 1]);
-
- while (s < top)
- {
- _BS_word a = *s++;
- for (int j = 0; j < BITSETBITS; ++j)
- {
- sb->sputc((a & 1)? t : f);
- a >>= 1;
- }
- }
-
- if (!rep->virt)
- {
- _BS_word a = *s;
- if (rep->len != 0)
- {
- for (int j = 0; j < BITSETBITS && a != 0; ++j)
- {
- sb->sputc((a & 1)? t : f);
- a >>= 1;
- }
- }
- sb->sputc(f);
- }
- else
- {
- _BS_word a = *s;
- _BS_word mask = ONES;
- _BS_word himask = MASK1(BITSETBITS - 1) - 1;
- if (rep->len != 0)
- {
- for (int j = 0; j < BITSETBITS && a != mask; ++j)
- {
- sb->sputc((a & 1)? t : f);
- a = (a >> 1) & himask;
- mask = (mask >> 1) & himask;
- }
- }
- sb->sputc(t);
- }
-
- sb->sputc(star);
-}
-
-int BitSet::OK() const
-{
- int v = rep != 0; // have a rep
- v &= rep->len <= rep->sz; // within bounds
- v &= rep->virt == 0 || rep->virt == 1; // valid virtual bit
- if (!v) error("invariant failure");
- return v;
-}
-
diff --git a/contrib/libg++/libg++/src/BitSet.h b/contrib/libg++/libg++/src/BitSet.h
deleted file mode 100644
index 3ff982a8ebab..000000000000
--- a/contrib/libg++/libg++/src/BitSet.h
+++ /dev/null
@@ -1,360 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifndef _BitSet_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-
-#define _BitSet_h 1
-
-#include <iostream.h>
-#include <limits.h>
-#include <bitprims.h>
-
-#undef OK
-
-#define BITSETBITS (sizeof(_BS_word) * CHAR_BIT)
-
-struct BitSetRep
-{
- unsigned short len; // number of _BS_word in s
- unsigned short sz; // allocated slots
- unsigned short virt; // virtual 0 or 1
- _BS_word s[1]; // bits start here
-};
-
-extern BitSetRep* BitSetalloc(BitSetRep*, const _BS_word*,
- int, int, int);
-extern BitSetRep* BitSetcopy(BitSetRep*, const BitSetRep*);
-extern BitSetRep* BitSetresize(BitSetRep*, int);
-extern BitSetRep* BitSetop(const BitSetRep*, const BitSetRep*,
- BitSetRep*, char);
-extern BitSetRep* BitSetcmpl(const BitSetRep*, BitSetRep*);
-extern BitSetRep _nilBitSetRep;
-
-class BitSet;
-
-class BitSetBit
-{
-protected:
- BitSet* src;
- unsigned long pos;
-
- public:
- BitSetBit(BitSet* v, int p);
- BitSetBit(const BitSetBit& b);
- ~BitSetBit();
- operator int() const;
- int operator = (int b);
- int operator = (const BitSetBit& b);
-};
-
-class BitSet
-{
-protected:
- BitSetRep* rep;
-
- enum BS_op {
- BS_and = (int) '&',
- BS_or = (int) '|',
- BS_xor = (int) '^',
- BS_diff = (int) '-',
- BS_inv = (int) '~'
- };
- BitSet(const BitSet& x, const BitSet& y, enum BS_op op)
- { rep = BitSetop (x.rep, y.rep, NULL, (char) op); }
- BitSet(const BitSet& x, enum BS_op /* op */)
- { rep = BitSetcmpl (x.rep, NULL); }
-
-public:
-
-// constructors
- BitSet();
- BitSet(const BitSet&);
-
- ~BitSet();
-
- BitSet& operator = (const BitSet& y);
-
-// equality & subset tests
-
- friend int operator == (const BitSet& x, const BitSet& y);
- friend int operator != (const BitSet& x, const BitSet& y);
- friend int operator < (const BitSet& x, const BitSet& y);
- friend int operator <= (const BitSet& x, const BitSet& y);
- friend int operator > (const BitSet& x, const BitSet& y);
- friend int operator >= (const BitSet& x, const BitSet& y);
- friend int lcompare(const BitSet& x, const BitSet& y);
-
-// operations on self
-
- BitSet& operator |= (const BitSet& y);
- BitSet& operator &= (const BitSet& y);
- BitSet& operator -= (const BitSet& y);
- BitSet& operator ^= (const BitSet& y);
-
- void complement();
-
-// functional operators
-
- friend BitSet operator & (const BitSet& x, const BitSet& y);
- friend BitSet operator | (const BitSet& x, const BitSet& y);
- friend BitSet operator ^ (const BitSet& x, const BitSet& y);
- friend BitSet operator - (const BitSet& x, const BitSet& y);
- friend BitSet operator ~ (const BitSet& x);
-
-// individual bit manipulation
-
- void set(int pos);
- void set(int from, int to);
- void set(); // set all
-
- void clear(int pos);
- void clear(int from, int to);
- void clear(); // clear all
-
- void invert(int pos);
- void invert(int from, int to);
-
- int test(int pos) const;
- int test(int from, int to) const;
-
- BitSetBit operator [] (int i);
-
-// iterators
-
- int first(int b = 1) const;
- int last(int b = 1) const;
-
- int next(int pos, int b = 1) const;
- int prev(int pos, int b = 1) const;
- int previous(int pos, int b = 1) const /* Obsolete synonym */
- { return prev(pos, b); }
-
-// status
-
- int empty() const;
- int virtual_bit() const;
- int count(int b = 1) const;
-
-// convertors & IO
-
- friend BitSet atoBitSet(const char* s,
- char f='0', char t='1', char star='*');
- // BitSettoa is deprecated; do not use in new programs.
- friend const char* BitSettoa(const BitSet& x,
- char f='0', char t='1', char star='*');
-
- friend BitSet shorttoBitSet(unsigned short w);
- friend BitSet longtoBitSet(unsigned long w);
-
- friend ostream& operator << (ostream& s, const BitSet& x);
- void printon(ostream& s,
- char f='0', char t='1', char star='*') const;
-
-#ifndef __STRICT_ANSI__
- // procedural versions of operators
-
- // The first three of these are incompatible with ANSI C++ digraphs.
- // In any case, it's not a great interface.
- friend void and(const BitSet& x, const BitSet& y, BitSet& r);
- friend void or(const BitSet& x, const BitSet& y, BitSet& r);
- friend void xor(const BitSet& x, const BitSet& y, BitSet& r);
- friend void diff(const BitSet& x, const BitSet& y, BitSet& r);
- friend void complement(const BitSet& x, BitSet& r);
-#endif
-
-// misc
-
- void error(const char* msg) const;
- int OK() const;
-};
-
-
-typedef BitSet BitSetTmp;
-
-// These are inlined regardless of optimization
-
-inline int BitSet_index(int l)
-{
- return (unsigned)(l) / BITSETBITS;
-}
-
-inline int BitSet_pos(int l)
-{
- return l & (BITSETBITS - 1);
-}
-
-inline BitSet::BitSet() : rep(&_nilBitSetRep) {}
-
-inline BitSet::BitSet(const BitSet& x) :rep(BitSetcopy(0, x.rep)) {}
-
-inline BitSet::~BitSet() { if (rep != &_nilBitSetRep) delete rep; }
-
-inline BitSet& BitSet::operator = (const BitSet& y)
-{
- rep = BitSetcopy(rep, y.rep);
- return *this;
-}
-
-inline int operator != (const BitSet& x, const BitSet& y) { return !(x == y); }
-
-inline int operator > (const BitSet& x, const BitSet& y) { return y < x; }
-
-inline int operator >= (const BitSet& x, const BitSet& y) { return y <= x; }
-
-#ifndef __STRICT_ANSI__
-inline void and(const BitSet& x, const BitSet& y, BitSet& r)
-{
- r.rep = BitSetop(x.rep, y.rep, r.rep, '&');
-}
-
-inline void or(const BitSet& x, const BitSet& y, BitSet& r)
-{
- r.rep = BitSetop(x.rep, y.rep, r.rep, '|');
-}
-
-inline void xor(const BitSet& x, const BitSet& y, BitSet& r)
-{
- r.rep = BitSetop(x.rep, y.rep, r.rep, '^');
-}
-
-inline void diff(const BitSet& x, const BitSet& y, BitSet& r)
-{
- r.rep = BitSetop(x.rep, y.rep, r.rep, '-');
-}
-
-inline void complement(const BitSet& x, BitSet& r)
-{
- r.rep = BitSetcmpl(x.rep, r.rep);
-}
-#endif
-
-inline BitSet operator & (const BitSet& x, const BitSet& y)
-{
- return BitSet::BitSet(x, y, BitSet::BS_and);
-}
-
-inline BitSet operator | (const BitSet& x, const BitSet& y)
-{
- return BitSet::BitSet(x, y, BitSet::BS_or);
-}
-
-inline BitSet operator ^ (const BitSet& x, const BitSet& y)
-{
- return BitSet::BitSet(x, y, BitSet::BS_xor);
-}
-
-inline BitSet operator - (const BitSet& x, const BitSet& y)
-{
- return BitSet::BitSet(x, y, BitSet::BS_diff);
-}
-
-inline BitSet operator ~ (const BitSet& x)
-{
- return BitSet::BitSet(x, BitSet::BS_inv);
-}
-
-inline BitSet& BitSet::operator &= (const BitSet& y)
-{
- rep = BitSetop(rep, y.rep, rep, '&');
- return *this;
-}
-
-inline BitSet& BitSet::operator |= (const BitSet& y)
-{
- rep = BitSetop(rep, y.rep, rep, '|');
- return *this;
-}
-
-inline BitSet& BitSet::operator ^= (const BitSet& y)
-{
- rep = BitSetop(rep, y.rep, rep, '^');
- return *this;
-}
-
-inline BitSet& BitSet::operator -= (const BitSet& y)
-{
- rep = BitSetop(rep, y.rep, rep, '-');
- return *this;
-}
-
-
-inline void BitSet::complement()
-{
- rep = BitSetcmpl(rep, rep);
-}
-
-inline int BitSet::virtual_bit() const
-{
- return rep->virt;
-}
-
-inline int BitSet::first(int b) const
-{
- return next(-1, b);
-}
-
-inline int BitSet::test(int p) const
-{
- if (p < 0) error("Illegal bit index");
- int index = BitSet_index(p);
- return (index >= rep->len)? rep->virt :
- ((rep->s[index] & ((_BS_word)1 << BitSet_pos(p))) != 0);
-}
-
-
-inline void BitSet::set()
-{
- rep = BitSetalloc(rep, 0, 0, 1, 0);
-}
-
-inline BitSetBit::BitSetBit(const BitSetBit& b) :src(b.src), pos(b.pos) {}
-
-inline BitSetBit::BitSetBit(BitSet* v, int p)
-{
- src = v; pos = p;
-}
-
-inline BitSetBit::~BitSetBit() {}
-
-inline BitSetBit::operator int() const
-{
- return src->test(pos);
-}
-
-inline int BitSetBit::operator = (int b)
-{
- if (b) src->set(pos); else src->clear(pos); return b;
-}
-
-inline int BitSetBit::operator = (const BitSetBit& b)
-{
- int i = (int)b;
- *this = i;
- return i;
-}
-
-inline BitSetBit BitSet::operator [] (int i)
-{
- if (i < 0) error("illegal bit index");
- return BitSetBit(this, i);
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/BitString.cc b/contrib/libg++/libg++/src/BitString.cc
deleted file mode 100644
index 32568fa7ef2d..000000000000
--- a/contrib/libg++/libg++/src/BitString.cc
+++ /dev/null
@@ -1,1608 +0,0 @@
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/*
- BitString class implementation
- */
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <BitString.h>
-#include <std.h>
-#include <limits.h>
-#include <Obstack.h>
-#include <AllocRing.h>
-#include <new.h>
-#include <builtin.h>
-#include <strstream.h>
-
-#undef OK
-
-void BitString::error(const char* msg) const
-{
- (*lib_error_handler)("BitString", msg);
-}
-
-// globals
-
-BitStrRep _nilBitStrRep = { 0, 1, {0} };
-
-BitString _nil_BitString;
-
-#define MINBitStrRep_SIZE 8
-#define MAXBitStrRep_SIZE ((1 << (sizeof(short)*CHAR_BIT - 1)) - 1)
-
-#ifndef MALLOC_MIN_OVERHEAD
-#define MALLOC_MIN_OVERHEAD 4
-#endif
-
-#define ONES ((_BS_word)(~0L))
-#define MAXBIT (((_BS_word)1) << (BITSTRBITS - 1))
-
-/*
- * bit manipulation utilities
-*/
-
-// break things up into .s indices and positions
-
-inline static int BitStr_len(int l)
-{
- return (unsigned)(l) / BITSTRBITS + 1;
-}
-
-
-// mask out low bits
-
-static inline _BS_word lmask(int p)
-{
- return ONES _BS_RIGHT p;
-}
-
-// mask out high bits
-
-static inline _BS_word rmask(int p)
-{
- int s = BITSTRBITS - 1 - p;
- if (s <= 0)
- return ONES;
- else
- return ONES _BS_LEFT s;
-}
-
-
-// mask out unused bits in last word of rep
-
-inline static void check_last(BitStrRep* r)
-{
- int bit_len_mod = r->len & (BITSTRBITS - 1);
- if (bit_len_mod)
- r->s[r->len / BITSTRBITS] &= ONES _BS_LEFT (BITSTRBITS - bit_len_mod);
-}
-
-// merge bits from next word
-
-static inline _BS_word borrow_hi(const _BS_word a[], int ind,
- int maxind, int p)
-{
- if (p == 0)
- return a[ind];
- else if (ind < maxind)
- return (a[ind] _BS_LEFT p) | (a[ind+1] _BS_RIGHT (BITSTRBITS - p));
- else
- return (a[ind] _BS_LEFT p);
-}
-
-// merge bits from prev word
-
-static inline _BS_word borrow_lo(const _BS_word a[], int ind,
- int minind, int p)
-{
- _BS_word word = a[ind] _BS_RIGHT (BITSTRBITS - 1 - p);
- if (ind > minind)
- word |= (a[ind-1] _BS_LEFT (p + 1));
- return word;
-}
-
-// same with bounds check (for masks shorter than patterns)
-
-static inline _BS_word safe_borrow_hi(const _BS_word a[], int ind,
- int maxind, int p)
-{
- if (ind > maxind)
- return 0;
- else if (p == 0)
- return a[ind];
- else if (ind == maxind)
- return a[ind] _BS_LEFT p;
- else
- return (a[ind] _BS_LEFT p) | (a[ind+1] _BS_RIGHT (BITSTRBITS - p));
-}
-
-
-// allocate a new rep; pad to near a power of two
-
-inline static BitStrRep* BSnew(int newlen)
-{
- unsigned int siz = sizeof(BitStrRep) + BitStr_len(newlen) * sizeof(_BS_word)
- + MALLOC_MIN_OVERHEAD;
- unsigned int allocsiz = MINBitStrRep_SIZE;;
- while (allocsiz < siz) allocsiz <<= 1;
- allocsiz -= MALLOC_MIN_OVERHEAD;
- if (allocsiz >= MAXBitStrRep_SIZE * sizeof(_BS_word))
- (*lib_error_handler)("BitString", "Requested length out of range");
-
- BitStrRep* rep = new (operator new (allocsiz)) BitStrRep;
- memset(rep, 0, allocsiz);
- rep->sz =
- (allocsiz - sizeof(BitStrRep) + sizeof(_BS_word)) / sizeof(_BS_word);
- return rep;
-}
-
-inline void
-copy_bits (_BS_word* pdst, _BS_size_t dstbit,
- const _BS_word* psrc, _BS_size_t srcbit,
- _BS_size_t length)
-{
- _BS_NORMALIZE (pdst, dstbit);
- _BS_NORMALIZE (psrc, srcbit);
- _BS_copy (pdst, dstbit, psrc, srcbit, length);
-}
-
-BitStrRep* BStr_alloc(BitStrRep* old, const _BS_word* src,
- int startpos, int endp, int newlen)
-{
- if (old == &_nilBitStrRep) old = 0;
- if (newlen < 0) newlen = 0;
- int news = BitStr_len(newlen);
- BitStrRep* rep;
- if (old == 0 || news > old->sz)
- rep = BSnew(newlen);
- else
- rep = old;
- rep->len = newlen;
-
- if (src != 0 && endp > 0 && (src != rep->s || startpos > 0))
- copy_bits (rep->s, 0, src, startpos, endp - startpos);
-
- check_last(rep);
-
- if (old != rep && old != 0) delete old;
-
- return rep;
-}
-
-BitStrRep* BStr_resize(BitStrRep* old, int newlen)
-{
- BitStrRep* rep;
- if (newlen < 0) newlen = 0;
- int news = BitStr_len(newlen);
- if (old == 0 || old == &_nilBitStrRep)
- {
- rep = BSnew(newlen);
- }
- else if (news > old->sz)
- {
- rep = BSnew(newlen);
- memcpy(rep->s, old->s, BitStr_len(old->len) * sizeof(_BS_word));
- delete old;
- }
- else
- rep = old;
-
- rep->len = newlen;
- check_last(rep);
- return rep;
-}
-
-BitStrRep* BStr_copy(BitStrRep* old, const BitStrRep* src)
-{
- BitStrRep* rep;
- if (old == src && old != &_nilBitStrRep) return old;
- if (old == &_nilBitStrRep) old = 0;
- if (src == &_nilBitStrRep) src = 0;
- if (src == 0)
- {
- if (old == 0)
- rep = BSnew(0);
- else
- rep = old;
- rep->len = 0;
- }
- else
- {
- int newlen = src->len;
- int news = BitStr_len(newlen);
- if (old == 0 || news > old->sz)
- {
- rep = BSnew(newlen);
- if (old != 0) delete old;
- }
- else
- rep = old;
-
- memcpy(rep->s, src->s, news * sizeof(_BS_word));
- rep->len = newlen;
- }
- check_last(rep);
- return rep;
-}
-
-
-int operator == (const BitString& x, const BitString& y)
-{
- return x.rep->len == y.rep->len &&
- memcmp((void*)x.rep->s, (void*)y.rep->s,
- BitStr_len(x.rep->len) * sizeof(_BS_word)) == 0;
-}
-
-int operator <= (const BitString& x, const BitString& y)
-{
- unsigned int xl = x.rep->len;
- unsigned int yl = y.rep->len;
- if (xl > yl)
- return 0;
-
- const _BS_word* xs = x.rep->s;
- const _BS_word* topx = &(xs[BitStr_len(xl)]);
- const _BS_word* ys = y.rep->s;
-
- while (xs < topx)
- {
- _BS_word a = *xs++;
- _BS_word b = *ys++;
- if ((a | b) != b)
- return 0;
- }
- return 1;
-}
-
-int operator < (const BitString& x, const BitString& y)
-{
- unsigned short xl = x.rep->len;
- unsigned short yl = y.rep->len;
- if (xl > yl)
- return 0;
-
- const _BS_word* xs = x.rep->s;
- const _BS_word* ys = y.rep->s;
- const _BS_word* topx = &(xs[BitStr_len(xl)]);
- const _BS_word* topy = &(ys[BitStr_len(yl)]);
- int one_diff = 0;
- while (xs < topx)
- {
- _BS_word a = *xs++;
- _BS_word b = *ys++;
- _BS_word c = a | b;
- if (c != b)
- return 0;
- else if (c != a)
- one_diff = 1;
- }
- if (one_diff)
- return 1;
- else
- {
- while (ys < topy)
- if (*ys++ != 0)
- return 1;
- return 0;
- }
-}
-
-int lcompare(const BitString& x, const BitString& y)
-{
- return _BS_lcompare_0 (x.rep->s, x.rep->len, y.rep->s, y.rep->len);
-}
-
-int BitString::count(unsigned int b) const
-{
- int count = _BS_count (rep->s, 0, rep->len);
- if (!b)
- count = rep->len - count;
- return count;
-}
-
-
-BitStrRep* cmpl(const BitStrRep* src, BitStrRep* r)
-{
- r = BStr_copy(r, src);
- _BS_word* rs = r->s;
- _BS_word* topr = &(rs[BitStr_len(r->len)]);
- while (rs < topr)
- {
- _BS_word cmp = ~(*rs);
- *rs++ = cmp;
- }
- check_last(r);
- return r;
-}
-
-
-BitStrRep* and(const BitStrRep* x, const BitStrRep* y, BitStrRep* r)
-{
- int xrsame = x == r;
- int yrsame = y == r;
-
- unsigned int xl = x->len;
- unsigned int yl = y->len;
- unsigned int rl = (xl <= yl)? xl : yl;
-
- r = BStr_resize(r, rl);
-
- _BS_word* rs = r->s;
- _BS_word* topr = &(rs[BitStr_len(rl)]);
- const _BS_word* xs = (xrsame)? rs : x->s;
- const _BS_word* ys = (yrsame)? rs : y->s;
-
- while (rs < topr) *rs++ = *xs++ & *ys++;
- check_last(r);
- return r;
-}
-
-BitStrRep* or(const BitStrRep* x, const BitStrRep* y, BitStrRep* r)
-{
- unsigned int xl = x->len;
- unsigned int yl = y->len;
- unsigned int rl = (xl >= yl)? xl : yl;
- int xrsame = x == r;
- int yrsame = y == r;
-
- r = BStr_resize(r, rl);
-
- _BS_word* rs = r->s;
- const _BS_word* xs = (xrsame)? rs : x->s;
- const _BS_word* topx = &(xs[BitStr_len(xl)]);
- const _BS_word* ys = (yrsame)? rs : y->s;
- const _BS_word* topy = &(ys[BitStr_len(yl)]);
-
- if (xl <= yl)
- {
- while (xs < topx) *rs++ = *xs++ | *ys++;
- if (rs != ys) while (ys < topy) *rs++ = *ys++;
- }
- else
- {
- while (ys < topy) *rs++ = *xs++ | *ys++;
- if (rs != xs) while (xs < topx) *rs++ = *xs++;
- }
- check_last(r);
- return r;
-}
-
-
-BitStrRep* xor(const BitStrRep* x, const BitStrRep* y, BitStrRep* r)
-{
- unsigned int xl = x->len;
- unsigned int yl = y->len;
- unsigned int rl = (xl >= yl)? xl : yl;
- int xrsame = x == r;
- int yrsame = y == r;
-
- r = BStr_resize(r, rl);
-
- _BS_word* rs = r->s;
- const _BS_word* xs = (xrsame)? rs : x->s;
- const _BS_word* topx = &(xs[BitStr_len(xl)]);
- const _BS_word* ys = (yrsame)? rs : y->s;
- const _BS_word* topy = &(ys[BitStr_len(yl)]);
-
- if (xl <= yl)
- {
- while (xs < topx) *rs++ = *xs++ ^ *ys++;
- if (rs != ys) while (ys < topy) *rs++ = *ys++;
- }
- else
- {
- while (ys < topy) *rs++ = *xs++ ^ *ys++;
- if (rs != xs) while (xs < topx) *rs++ = *xs++;
- }
- check_last(r);
- return r;
-}
-
-
-BitStrRep* diff(const BitStrRep* x, const BitStrRep* y, BitStrRep* r)
-{
- unsigned int xl = x->len;
- unsigned int yl = y->len;
- int xrsame = x == y;
- int yrsame = y == r;
-
- r = BStr_resize(r, xl);
-
- _BS_word* rs = r->s;
- const _BS_word* xs = (xrsame)? rs : x->s;
- const _BS_word* topx = &(xs[BitStr_len(xl)]);
- const _BS_word* ys = (yrsame)? rs : y->s;
- const _BS_word* topy = &(ys[BitStr_len(yl)]);
-
- if (xl <= yl)
- {
- while (xs < topx) *rs++ = *xs++ & ~(*ys++);
- }
- else
- {
- while (ys < topy) *rs++ = *xs++ & ~(*ys++);
- if (rs != xs) while (xs < topx) *rs++ = *xs++;
- }
- check_last(r);
- return r;
-}
-
-
-BitStrRep* cat(const BitStrRep* x, const BitStrRep* y, BitStrRep* r)
-{
- unsigned int xl = x->len;
- unsigned int yl = y->len;
- unsigned int rl = xl + yl;
- int xrsame = x == r;
- int yrsame = y == r;
-
- if (yrsame)
- {
- if (xrsame)
- {
- r = BStr_resize(r, rl);
- copy_bits (r->s, xl, r->s, 0, yl);
- }
- else
- {
- BitStrRep* tmp = BStr_copy(0, y);
- r = BStr_resize(r, rl);
- _BS_copy_0(r->s, x->s, xl);
- copy_bits (r->s, xl, tmp->s, 0, yl);
- delete tmp;
- }
- }
- else
- {
- r = BStr_resize(r, rl);
- if (!xrsame) _BS_copy_0(r->s, x->s, xl);
- copy_bits (r->s, xl, y->s, 0, yl);
- }
- check_last(r);
- return r;
-}
-
-BitStrRep* cat(const BitStrRep* x, unsigned int bit, BitStrRep* r)
-{
- unsigned int xl = x->len;
- int xrsame = x == r;
- r = BStr_resize(r, xl+1);
- if (!xrsame)
- _BS_copy_0(r->s, x->s, xl);
- if (bit)
- r->s[BitStr_index(xl)] |= _BS_BITMASK(BitStr_pos(xl));
- else
- r->s[BitStr_index(xl)] &= ~(_BS_BITMASK(BitStr_pos(xl)));
- check_last(r);
- return r;
-}
-
-BitStrRep* lshift(const BitStrRep* x, int s, BitStrRep* r)
-{
- int xrsame = x == r;
- int xl = x->len;
- int rl = xl + s;
- if (s == 0)
- r = BStr_copy(r, x);
- else if (rl <= 0)
- {
- r = BStr_resize(r, 0);
- r->len = 0;
- r->s[0] = 0;
- }
- else if (s > 0)
- {
- r = BStr_resize(r, rl);
- const _BS_word* xs = (xrsame)? r->s : x->s;
- copy_bits (r->s, s, xs, 0, xl);
- _BS_clear (r->s, 0, s);
- }
- else if (xrsame)
- {
- r = BStr_resize(r, xl);
- r->len = rl;
- copy_bits (r->s, 0, r->s, -s, xl + s);
- }
- else
- {
- r = BStr_resize(r, rl);
- copy_bits (r->s, 0, x->s, -s, xl + s);
- }
- check_last(r);
- return r;
-}
-
-
-void BitString::set(int p)
-{
- if (p < 0) error("Illegal bit index");
- if ((unsigned)(p) >= rep->len) rep = BStr_resize(rep, p + 1);
- rep->s[BitStr_index(p)] |= _BS_BITMASK(BitStr_pos(p));
-}
-
-void BitString::assign(int p, unsigned int bit)
-{
- if (p < 0) error("Illegal bit index");
- if ((unsigned)(p) >= rep->len) rep = BStr_resize(rep, p + 1);
- if (bit)
- rep->s[BitStr_index(p)] |= _BS_BITMASK(BitStr_pos(p));
- else
- rep->s[BitStr_index(p)] &= ~(_BS_BITMASK(BitStr_pos(p)));
-}
-
-void BitString::clear(int p)
-{
- if (p < 0) error("Illegal bit index");
- if ((unsigned)(p) >= rep->len) rep = BStr_resize(rep, p + 1);
- rep->s[BitStr_index(p)] &= ~(_BS_BITMASK(BitStr_pos(p)));
-}
-
-void BitString::clear()
-{
- if (rep == &_nilBitStrRep) return;
- _BS_clear (rep->s, 0, rep->len);
-}
-
-void BitString::set()
-{
- if (rep == &_nilBitStrRep) return;
- _BS_word* s = rep->s;
- _BS_word* tops = &(s[BitStr_len(rep->len)]);
- while (s < tops) *s++ = ONES;
- check_last(rep);
-}
-
-void BitString::invert(int p)
-{
- if (p < 0) error("Illegal bit index");
- if ((unsigned)(p) >= rep->len) rep = BStr_resize(rep, p + 1);
- rep->s[BitStr_index(p)] ^= _BS_BITMASK(BitStr_pos(p));
-}
-
-void BitString::set(int from, int to)
-{
- if (from < 0 || from > to) error("Illegal bit index");
- if ((unsigned)(to) >= rep->len) rep = BStr_resize(rep, to+1);
-
- _BS_size_t len = to - from + 1;
- _BS_word* xs = rep->s;
- _BS_NORMALIZE (xs, from);
- _BS_invert (xs, from, len);
-}
-
-void BitString::clear(int from, int to)
-{
- if (from < 0 || from > to) error("Illegal bit index");
- if ((unsigned)(to) >= rep->len) rep = BStr_resize(rep, to+1);
-
- _BS_size_t len = to - from + 1;
- _BS_word* xs = rep->s;
- _BS_NORMALIZE (xs, from);
- _BS_clear (xs, from, len);
-}
-
-void BitString::invert(int from, int to)
-{
- if (from < 0 || from > to) error("Illegal bit index");
- if ((unsigned)(to) >= rep->len) rep = BStr_resize(rep, to+1);
- _BS_size_t len = to - from + 1;
- _BS_word* xs = rep->s;
- _BS_NORMALIZE (xs, from);
- _BS_invert (xs, from, len);
-}
-
-
-int BitString::test(int from, int to) const
-{
- if (from < 0 || from > to || (unsigned)(from) >= rep->len) return 0;
-
- _BS_size_t len = to - from + 1;
- _BS_word* xs = rep->s;
- _BS_NORMALIZE (xs, from);
- return _BS_any (xs, from, len);
-}
-
-int BitString::next(int p, unsigned int b) const
-{
- if ((unsigned)(++p) >= rep->len)
- return -1;
-
- int ind = BitStr_index(p);
- int pos = BitStr_pos(p);
- int l = BitStr_len(rep->len);
-
- int j = ind;
- const _BS_word* s = rep->s;
- _BS_word a = s[j] >> pos;
- int i = pos;
-
- if (b != 0)
- {
- for (; i < BITSTRBITS && a != 0; ++i)
- {
- if (a & 1)
- return j * BITSTRBITS + i;
- a >>= 1;
- }
- for (++j; j < l; ++j)
- {
- a = s[j];
- for (i = 0; i < BITSTRBITS && a != 0; ++i)
- {
- if (a & 1)
- return j * BITSTRBITS + i;
- a >>= 1;
- }
- }
- return -1;
- }
- else
- {
- int last = BitStr_pos(rep->len);
- if (j == l - 1)
- {
- for (; i < last; ++i)
- {
- if ((a & 1) == 0)
- return j * BITSTRBITS + i;
- a >>= 1;
- }
- return -1;
- }
-
- for (; i < BITSTRBITS; ++i)
- {
- if ((a & 1) == 0)
- return j * BITSTRBITS + i;
- a >>= 1;
- }
- for (++j; j < l - 1; ++j)
- {
- a = s[j];
- if (a != ONES)
- {
- for (i = 0; i < BITSTRBITS; ++i)
- {
- if ((a & 1) == 0)
- return j * BITSTRBITS + i;
- a >>= 1;
- }
- }
- }
- a = s[j];
- for (i = 0; i < last; ++i)
- {
- if ((a & 1) == 0)
- return j * BITSTRBITS + i;
- a >>= 1;
- }
- return -1;
- }
-}
-
-int BitString::prev(int p, unsigned int b) const
-{
- if (--p < 0)
- return -1;
-
- int ind = BitStr_index(p);
- int pos = BitStr_pos(p);
-
- const _BS_word* s = rep->s;
-
- if ((unsigned)(p) >= rep->len)
- {
- ind = BitStr_index(rep->len - 1);
- pos = BitStr_pos(rep->len - 1);
- }
-
- int j = ind;
- _BS_word a = s[j];
-
- int i = pos;
- _BS_word maxbit = ((_BS_word)1) << pos;
-
- if (b != 0)
- {
- for (; i >= 0 && a != 0; --i)
- {
- if (a & maxbit)
- return j * BITSTRBITS + i;
- a <<= 1;
- }
- maxbit = ((_BS_word)1) << (BITSTRBITS - 1);
- for (--j; j >= 0; --j)
- {
- a = s[j];
- for (i = BITSTRBITS - 1; i >= 0 && a != 0; --i)
- {
- if (a & maxbit)
- return j * BITSTRBITS + i;
- a <<= 1;
- }
- }
- return -1;
- }
- else
- {
- if (a != ONES)
- {
- for (; i >= 0; --i)
- {
- if ((a & maxbit) == 0)
- return j * BITSTRBITS + i;
- a <<= 1;
- }
- }
- maxbit = ((_BS_word)1) << (BITSTRBITS - 1);
- for (--j; j >= 0; --j)
- {
- a = s[j];
- if (a != ONES)
- {
- for (i = BITSTRBITS - 1; i >= 0; --i)
- {
- if ((a & maxbit) == 0)
- return j * BITSTRBITS + i;
- a <<= 1;
- }
- }
- }
- return -1;
- }
-}
-
-
-int BitString::search(int startx, int lengthx,
- const _BS_word* ys, int starty, int lengthy) const
-{
- const _BS_word* xs = rep->s;
- int ylen = lengthy - starty;
- int righty = lengthy - 1;
- int rev = startx < 0;
- if (rev)
- {
- int leftx = 0;
- int rightx = lengthx + startx;
- startx = rightx - ylen + 1;
- if (ylen == 0) return startx;
- if (starty < 0 || righty < 0 || startx < 0 || startx >= lengthx) return -1;
-
- int xind = BitStr_index(startx);
- int xpos = BitStr_pos(startx);
- int yind = BitStr_index(starty);
- int ypos = BitStr_pos(starty);
-
- int rightxind = BitStr_index(rightx);
-
- _BS_word x = borrow_hi(xs, xind, rightxind, xpos);
-
- int rightyind = BitStr_index(righty);
- int rightypos = BitStr_pos(righty);
- _BS_word y = borrow_hi(ys, yind, rightyind, ypos);
- _BS_word ymask;
- if (yind == rightyind)
- ymask = rmask(rightypos);
- else if (yind+1 == rightyind)
- ymask = rmask(BITSTRBITS - ypos + rightypos + 1);
- else
- ymask = ONES;
-
- int p = startx;
- for (;;)
- {
- if ((x & ymask) == y)
- {
- int xi = xind;
- int yi = yind;
- for (;;)
- {
- if (++yi > rightyind || ++xi > rightxind)
- return p;
- _BS_word tx = borrow_hi(xs, xi, rightxind, xpos);
- _BS_word ty = borrow_hi(ys, yi, rightyind, ypos);
- if (yi == rightyind)
- tx &= rmask(rightypos);
- else if (yi+1 == rightyind)
- tx &= rmask(BITSTRBITS - ypos + rightypos + 1);
- if (tx != ty)
- break;
- }
- }
- if (--p < leftx)
- return -1;
- if (--xpos < 0)
- {
- xpos = BITSTRBITS - 1;
- --xind;
- }
- x = borrow_hi(xs, xind, rightxind, xpos);
- }
- }
- else
- {
-
- int rightx = lengthx - 1;
- if (ylen == 0) return startx;
- if (starty < 0 || righty < 0 || startx < 0 || startx >= lengthx) return -1;
-
- int xind = BitStr_index(startx);
- int xpos = BitStr_pos(startx);
- int yind = BitStr_index(starty);
- int ypos = BitStr_pos(starty);
-
- int rightxind = BitStr_index(rightx);
-
- _BS_word x = borrow_hi(xs, xind, rightxind, xpos);
- _BS_word nextx = (xind >= rightxind) ? 0 : (xs[xind+1] >> xpos);
-
- int rightyind = BitStr_index(righty);
- int rightypos = BitStr_pos(righty);
- _BS_word y = borrow_hi(ys, yind, rightyind, ypos);
- _BS_word ymask;
- if (yind == rightyind)
- ymask = rmask(rightypos);
- else if (yind+1 == rightyind)
- ymask = rmask(BITSTRBITS - ypos + rightypos + 1);
- else
- ymask = ONES;
-
- int p = startx;
- for (;;)
- {
- if ((x & ymask) == y)
- {
- int xi = xind;
- int yi = yind;
- for (;;)
- {
- if (++yi > rightyind || ++xi > rightxind)
- return p;
- _BS_word tx = borrow_hi(xs, xi, rightxind, xpos);
- _BS_word ty = borrow_hi(ys, yi, rightyind, ypos);
- if (yi == rightyind)
- tx &= rmask(rightypos);
- else if (yi+1 == rightyind)
- tx &= rmask(BITSTRBITS - ypos + rightypos + 1);
- if (tx != ty)
- break;
- }
- }
- if (++p > rightx)
- return -1;
- if (++xpos == BITSTRBITS)
- {
- xpos = 0;
- x = xs[++xind];
- nextx = (xind >= rightxind) ? 0 : xs[xind+1];
- }
- else
- {
- x >>= 1;
- if (nextx & 1)
- x |= MAXBIT;
- nextx >>= 1;
- }
- }
- }
-}
-
-
-int BitPattern::search(const _BS_word* xs, int startx, int lengthx) const
-{
- const _BS_word* ys = pattern.rep->s;
- const _BS_word* ms = mask.rep->s;
- int righty = pattern.rep->len - 1;
- int rightm = mask.rep->len - 1;
-
- int rev = startx < 0;
- if (rev)
- {
- int leftx = 0;
- int rightx = lengthx + startx;
- startx = rightx - righty;
-
- if (righty < 0) return startx;
- if (startx < 0 || startx >= lengthx) return -1;
-
- int xind = BitStr_index(startx);
- int xpos = BitStr_pos(startx);
-
- int rightxind = BitStr_index(rightx);
-
- int rightmind = BitStr_index(rightm);
- int rightyind = BitStr_index(righty);
-
- _BS_word x = safe_borrow_hi(xs, xind, rightxind, xpos);
- _BS_word m = safe_borrow_hi(ms, 0, rightmind, 0);
- _BS_word y = safe_borrow_hi(ys, 0, rightyind, 0) & m;
-
- int p = startx;
- for (;;)
- {
- if ((x & m) == y)
- {
- int xi = xind;
- int yi = 0;
- for (;;)
- {
- if (++yi > rightyind || ++xi > rightxind)
- return p;
- _BS_word tm = safe_borrow_hi(ms, yi, rightmind, 0);
- _BS_word ty = safe_borrow_hi(ys, yi, rightyind, 0);
- _BS_word tx = safe_borrow_hi(xs, xi, rightxind, xpos);
- if ((tx & tm) != (ty & tm))
- break;
- }
- }
- if (--p < leftx)
- return -1;
- if (--xpos < 0)
- {
- xpos = BITSTRBITS - 1;
- --xind;
- }
- x = safe_borrow_hi(xs, xind, rightxind, xpos);
- }
- }
- else
- {
-
- int rightx = lengthx - 1;
-
- if (righty < 0) return startx;
- if (startx < 0 || startx >= lengthx) return -1;
-
- int xind = BitStr_index(startx);
- int xpos = BitStr_pos(startx);
-
- int rightxind = BitStr_index(rightx);
-
- int rightmind = BitStr_index(rightm);
- int rightyind = BitStr_index(righty);
-
- _BS_word x = safe_borrow_hi(xs, xind, rightxind, xpos);
- _BS_word m = safe_borrow_hi(ms, 0, rightmind, 0);
- _BS_word y = safe_borrow_hi(ys, 0, rightyind, 0) & m;
-
- _BS_word nextx = (xind >= rightxind) ? 0 : (xs[xind+1] >> xpos);
-
- int p = startx;
- for (;;)
- {
- if ((x & m) == y)
- {
- int xi = xind;
- int yi = 0;
- for (;;)
- {
- if (++yi > rightyind || ++xi > rightxind)
- return p;
- _BS_word tm = safe_borrow_hi(ms, yi, rightmind, 0);
- _BS_word ty = safe_borrow_hi(ys, yi, rightyind, 0);
- _BS_word tx = safe_borrow_hi(xs, xi, rightxind, xpos);
- if ((tx & tm) != (ty & tm))
- break;
- }
- }
- if (++p > rightx)
- return -1;
- if (++xpos == BITSTRBITS)
- {
- xpos = 0;
- x = xs[++xind];
- nextx = (xind >= rightxind) ? 0 : xs[xind+1];
- }
- else
- {
- x >>= 1;
- if (nextx & 1)
- x |= MAXBIT;
- nextx >>= 1;
- }
- }
- }
-}
-
-int BitString::match(int startx, int lengthx, int exact,
- const _BS_word* ys, int starty, int yl) const
-{
- const _BS_word* xs = rep->s;
- int ylen = yl - starty;
- int righty = yl - 1;
-
- int rightx;
- int rev = startx < 0;
- if (rev)
- {
- rightx = lengthx + startx;
- startx = rightx - ylen + 1;
- if (exact && startx != 0)
- return 0;
- }
- else
- {
- rightx = lengthx - 1;
- if (exact && rightx - startx != righty)
- return 0;
- }
-
- if (ylen == 0) return 1;
- if (righty < 0 || startx < 0 || startx >= lengthx) return 0;
-
- int xi = BitStr_index(startx);
- int xpos = BitStr_pos(startx);
- int yi = BitStr_index(starty);
- int ypos = BitStr_pos(starty);
-
- int rightxind = BitStr_index(rightx);
- int rightyind = BitStr_index(righty);
- int rightypos = BitStr_pos(righty);
-
- for (;;)
- {
- _BS_word x = borrow_hi(xs, xi, rightxind, xpos);
- _BS_word y = borrow_hi(ys, yi, rightyind, ypos);
- if (yi == rightyind)
- x &= rmask(rightypos);
- else if (yi+1 == rightyind)
- x &= rmask(BITSTRBITS - ypos + rightypos + 1);
- if (x != y)
- return 0;
- else if (++yi > rightyind || ++xi > rightxind)
- return 1;
- }
-}
-
-int BitPattern::match(const _BS_word* xs, int startx,
- int lengthx, int exact) const
-{
- const _BS_word* ys = pattern.rep->s;
- int righty = pattern.rep->len - 1;
- _BS_word* ms = mask.rep->s;
- int rightm = mask.rep->len - 1;
-
- int rightx;
- int rev = startx < 0;
- if (rev)
- {
- rightx = lengthx + startx;
- startx = rightx - righty;
- if (exact && startx != 0)
- return 0;
- }
- else
- {
- rightx = lengthx - 1;
- if (exact && rightx - startx != righty)
- return 0;
- }
-
- if (righty < 0) return 1;
- if (startx < 0 || startx >= lengthx) return 0;
-
- int xind = BitStr_index(startx);
- int xpos = BitStr_pos(startx);
- int yind = 0;
-
- int rightxind = BitStr_index(rightx);
- int rightyind = BitStr_index(righty);
- int rightmind = BitStr_index(rightm);
-
- for(;;)
- {
- _BS_word m = safe_borrow_hi(ms, yind, rightmind, 0);
- _BS_word x = safe_borrow_hi(xs, xind, rightxind, xpos) & m;
- _BS_word y = safe_borrow_hi(ys, yind, rightyind, 0) & m;
- if (x != y)
- return 0;
- else if (++yind > rightyind || ++xind > rightxind)
- return 1;
- }
-}
-
-BitSubString& BitSubString::operator = (const BitString& y)
-{
- if (&S == &_nil_BitString)
- return *this;
- BitStrRep* targ = S.rep;
-
- unsigned int ylen = y.rep->len;
- int sl = targ->len - len + ylen;
-
- if (y.rep == targ || ylen > len)
- {
- BitStrRep* oldtarg = targ;
- targ = BStr_alloc(0, 0, 0, 0, sl);
- _BS_copy (targ->s, 0, oldtarg->s, 0, pos);
- copy_bits (targ->s, pos, y.rep->s, 0, ylen);
- copy_bits (targ->s, pos + ylen, oldtarg->s, pos+len, oldtarg->len-pos-len);
- delete oldtarg;
- }
- else if (len == ylen)
- copy_bits (targ->s, pos, y.rep->s, 0, len);
- else if (ylen < len)
- {
- copy_bits (targ->s, pos, y.rep->s, 0, ylen);
- copy_bits (targ->s, pos + ylen, targ->s, pos + len, targ->len - pos - len);
- targ->len = sl;
- }
- check_last(targ);
- S.rep = targ;
- return *this;
-}
-
-BitSubString& BitSubString::operator = (const BitSubString& y)
-{
- if (&S == &_nil_BitString)
- return *this;
- BitStrRep* targ = S.rep;
-
- if (len == 0 || pos >= targ->len)
- return *this;
-
- int sl = targ->len - len + y.len;
-
- if (y.S.rep == targ || y.len > len)
- {
- BitStrRep* oldtarg = targ;
- targ = BStr_alloc(0, 0, 0, 0, sl);
- _BS_copy_0(targ->s, oldtarg->s, pos);
- copy_bits (targ->s, pos, y.S.rep->s, y.pos, y.len);
- copy_bits (targ->s, pos + y.len, oldtarg->s, pos+len,
- oldtarg->len-pos-len);
- delete oldtarg;
- }
- else if (len == y.len)
- copy_bits (targ->s, pos, y.S.rep->s, y.pos, y.len);
- else if (y.len < len)
- {
- copy_bits (targ->s, pos, y.S.rep->s, y.pos, y.len);
- copy_bits (targ->s, pos + y.len, targ->s, pos + len,
- targ->len - pos - len);
- targ->len = sl;
- }
- check_last(targ);
- S.rep = targ;
- return *this;
-}
-
-BitSubString BitString::at(int first, int len)
-{
- return _substr(first, len);
-}
-
-BitSubString BitString::before(int pos)
-{
- return _substr(0, pos);
-}
-
-BitSubString BitString::after(int pos)
-{
- return _substr(pos + 1, rep->len - (pos + 1));
-}
-
-BitSubString BitString::at(const BitString& y, int startpos)
-{
- int first = search(startpos, rep->len, y.rep->s, 0, y.rep->len);
- return _substr(first, y.rep->len);
-}
-
-BitSubString BitString::before(const BitString& y, int startpos)
-{
- int last = search(startpos, rep->len, y.rep->s, 0, y.rep->len);
- return _substr(0, last);
-}
-
-BitSubString BitString::after(const BitString& y, int startpos)
-{
- int first = search(startpos, rep->len, y.rep->s, 0, y.rep->len);
- if (first >= 0) first += y.rep->len;
- return _substr(first, rep->len - first);
-}
-
-
-BitSubString BitString::at(const BitSubString& y, int startpos)
-{
- int first = search(startpos, rep->len, y.S.rep->s, y.pos, y.len);
- return _substr(first, y.len);
-}
-
-BitSubString BitString::before(const BitSubString& y, int startpos)
-{
- int last = search(startpos, rep->len, y.S.rep->s, y.pos, y.len);
- return _substr(0, last);
-}
-
-BitSubString BitString::after(const BitSubString& y, int startpos)
-{
- int first = search(startpos, rep->len, y.S.rep->s, y.pos, y.len);
- if (first >= 0) first += y.len;
- return _substr(first, rep->len - first);
-}
-
-BitSubString BitString::at(const BitPattern& r, int startpos)
-{
- int first = r.search(rep->s, startpos, rep->len);
- return _substr(first, r.pattern.rep->len);
-}
-
-
-BitSubString BitString::before(const BitPattern& r, int startpos)
-{
- int first = r.search(rep->s, startpos, rep->len);
- return _substr(0, first);
-}
-
-BitSubString BitString::after(const BitPattern& r, int startpos)
-{
- int first = r.search(rep->s, startpos, rep->len);
- if (first >= 0) first += r.pattern.rep->len;
- return _substr(first, rep->len - first);
-}
-
-#if defined(__GNUG__) && !defined(_G_NO_NRV)
-#define RETURN(r) return
-#define RETURNS(r) return r;
-#define RETURN_OBJECT(TYPE, NAME) /* nothing */
-#define USE_UNSIGNED 1 /* probably correct */
-#else /* _G_NO_NRV */
-#define RETURN(r) return r
-#define RETURNS(r) /* nothing */
-#define RETURN_OBJECT(TYPE, NAME) TYPE NAME;
-#define USE_UNSIGNED 0 /* probably old bug */
-#endif
-
-BitString
-common_prefix (const BitString& x, const BitString& y, int startpos)
- RETURNS(r)
-{
- RETURN_OBJECT(BitString, r);
- unsigned int xl = x.rep->len;
- unsigned int yl = y.rep->len;
-
- unsigned int startx, starty;
- if (startpos < 0)
- {
- startx = xl + startpos;
- starty = yl + startpos;
- }
- else
- startx = starty = startpos;
-
- if (startx >= xl || starty >= yl)
- RETURN(r);
-
- const _BS_word* xs = &(x.rep->s[BitStr_index(startx)]);
- _BS_word a = *xs++;
- unsigned int xp = startx;
-
- const _BS_word* ys = &(y.rep->s[BitStr_index(starty)]);
- _BS_word b = *ys++;
- unsigned int yp = starty;
-
- for(; xp < xl && yp < yl; ++xp, ++yp)
- {
- _BS_word xbit = ((_BS_word)1) << (BitStr_pos(xp));
- _BS_word ybit = ((_BS_word)1) << (BitStr_pos(yp));
- if (((a & xbit) == 0) != ((b & ybit) == 0))
- break;
- if (xbit == MAXBIT)
- a = *xs++;
- if (ybit == MAXBIT)
- b = *ys++;
- }
- r.rep = BStr_alloc(0, x.rep->s, startx, xp, xp - startx);
- RETURN(r);
-}
-
-
-BitString
-common_suffix (const BitString& x, const BitString& y, int startpos)
- RETURNS(r)
-{
- RETURN_OBJECT(BitString, r);
- unsigned int xl = x.rep->len;
- unsigned int yl = y.rep->len;
-
- unsigned int startx, starty;
- if (startpos < 0)
- {
- startx = xl + startpos;
- starty = yl + startpos;
- }
- else
- startx = starty = startpos;
-
- if (startx >= xl || starty >= yl)
- RETURN(r);
-
- const _BS_word* xs = &(x.rep->s[BitStr_index(startx)]);
- _BS_word a = *xs--;
- int xp = startx;
-
- const _BS_word* ys = &(y.rep->s[BitStr_index(starty)]);
- _BS_word b = *ys--;
- int yp = starty;
-
- for(; xp >= 0 && yp >= 0; --xp, --yp)
- {
- _BS_word xbit = ((_BS_word)1) << (BitStr_pos(xp));
- _BS_word ybit = ((_BS_word)1) << (BitStr_pos(yp));
- if (((a & xbit) == 0) != ((b & ybit) == 0))
- break;
- if (xbit == 1)
- a = *xs--;
- if (ybit == 1)
- b = *ys--;
- }
- r.rep = BStr_alloc(0, x.rep->s, xp+1, startx+1, startx - xp);
- RETURN(r);
-}
-
-BitString reverse (const BitString& x)
- RETURNS(r)
-{
- RETURN_OBJECT(BitString, r);
- unsigned int yl = x.rep->len;
- BitStrRep* y = BStr_resize(0, yl);
- if (yl > 0)
- {
- const _BS_word* ls = x.rep->s;
- _BS_word lm = 1;
- _BS_word* rs = &(y->s[BitStr_index(yl - 1)]);
- _BS_word rm = ((_BS_word)1) << (BitStr_pos(yl - 1));
- for (unsigned int l = 0; l < yl; ++l)
- {
- if (*ls & lm)
- *rs |= rm;
- if (lm == MAXBIT)
- {
- ++ls;
- lm = 1;
- }
- else
- lm <<= 1;
- if (rm == 1)
- {
- --rs;
- rm = MAXBIT;
- }
- else
- rm >>= 1;
- }
- }
- r.rep = y;
- RETURN(r);
-}
-
-BitString
-atoBitString (const char* s, char f, char t)
- RETURNS(res)
-{
- RETURN_OBJECT(BitString, res);
- int sl = strlen(s);
- BitStrRep* r = BStr_resize(0, sl);
- if (sl != 0)
- {
- unsigned int rl = 0;
- _BS_word* rs = r->s;
- _BS_word a = 0;
- _BS_word m = 1;
- unsigned int i = 0;
- for(;;)
- {
- char ch = s[i];
- if (ch != t && ch != f)
- {
- *rs = a;
- break;
- }
- ++rl;
- if (ch == t)
- a |= m;
- if (++i == sl)
- {
- *rs = a;
- break;
- }
- else if (i % BITSTRBITS == 0)
- {
- *rs++ = a;
- a = 0;
- m = 1;
- }
- else
- m <<= 1;
- }
- r = BStr_resize(r, rl);
- }
- res.rep = r;
- RETURN(res);
-}
-
-BitPattern
-atoBitPattern (const char* s, char f,char t,char x)
- RETURNS(r)
-{
- RETURN_OBJECT(BitPattern, r);
- int sl = strlen(s);
- if (sl != 0)
- {
- unsigned int rl = 0;
- r.pattern.rep = BStr_resize(r.pattern.rep, sl);
- r.mask.rep = BStr_resize(r.mask.rep, sl);
- _BS_word* rs = r.pattern.rep->s;
- _BS_word* ms = r.mask.rep->s;
- _BS_word a = 0;
- _BS_word b = 0;
- _BS_word m = 1;
- unsigned int i = 0;
- for(;;)
- {
- char ch = s[i];
- if (ch != t && ch != f && ch != x)
- {
- *rs = a;
- *ms = b;
- break;
- }
- ++rl;
- if (ch == t)
- {
- a |= m;
- b |= m;
- }
- else if (ch == f)
- {
- b |= m;
- }
- if (++i == sl)
- {
- *rs = a;
- *ms = b;
- break;
- }
- else if (i % BITSTRBITS == 0)
- {
- *rs++ = a;
- *ms++ = b;
- a = 0;
- b = 0;
- m = 1;
- }
- else
- m <<= 1;
- }
- r.pattern.rep = BStr_resize(r.pattern.rep, rl);
- r.mask.rep = BStr_resize(r.mask.rep, rl);
- }
- RETURN(r);
-}
-
-extern AllocRing _libgxx_fmtq;
-
-void BitString::printon (ostream& os, char f, char t) const
-{
- unsigned int xl = rep->len;
- const _BS_word* ptr = rep->s;
- register streambuf *sb = os.rdbuf();
- _BS_word a = 0;
-
- for (unsigned int i = 0; i < xl; ++i)
- {
- if (i % BITSTRBITS == 0)
- a = *ptr++;
- sb->sputc((a & 1)? t : f);
- a >>= 1;
- }
-}
-const char* BitStringtoa(const BitString& x, char f, char t)
-{
- int wrksiz = x.length() + 2;
- char* fmtbase = (char *) _libgxx_fmtq.alloc(wrksiz);
- ostrstream stream(fmtbase, wrksiz);
-
- x.printon(stream, f, t);
- stream << ends;
- return fmtbase;
-}
-
-ostream& operator << (ostream& s, const BitString& x)
-{
- if (s.opfx())
- x.printon(s);
- return s;
-}
-
-const char* BitPatterntoa(const BitPattern& p, char f,char t,char x)
-{
- unsigned int pl = p.pattern.rep->len;
- unsigned int ml = p.mask.rep->len;
- unsigned int l = (pl <= ml)? pl : ml;
-
- int wrksiz = l + 2;
- char* fmtbase = (char *) _libgxx_fmtq.alloc(wrksiz);
- ostrstream stream(fmtbase, wrksiz);
-
- p.printon(stream, f, t, x);
- stream << ends;
- return fmtbase;
-}
-
-void BitPattern::printon(ostream& s, char f,char t,char x) const
-{
- unsigned int pl = pattern.rep->len;
- unsigned int ml = mask.rep->len;
- unsigned int l = (pl <= ml)? pl : ml;
- register streambuf *sb = s.rdbuf();
-
- const _BS_word* ps = pattern.rep->s;
- const _BS_word* ms = mask.rep->s;
- _BS_word a = 0;
- _BS_word m = 0;
-
- for (unsigned int i = 0; i < l; ++i)
- {
- if (i % BITSTRBITS == 0)
- {
- a = *ps++;
- m = *ms++;
- }
- if (m & 1)
- sb->sputc((a & 1)? t : f);
- else
- sb->sputc(x);
- a >>= 1;
- m >>= 1;
- }
-}
-
-ostream& operator << (ostream& s, const BitPattern& x)
-{
- if (s.opfx())
- x.printon(s);
- return s;
-}
-
-
-int BitString::OK() const
-{
- int v = rep != 0; // have a rep;
- v &= BitStr_len(rep->len) <= rep->sz; // within allocated size
- if (!v) error("invariant failure");
- return v;
-}
-
-int BitSubString::OK() const
-{
- int v = S.OK(); // valid BitString
- v &= pos + len <= S.rep->len; // within bounds of targ
- if (!v) S.error("BitSubString invariant failure");
- return v;
-}
-
-int BitPattern::OK() const
-{
- int v = pattern.OK() && mask.OK();
- if (!v) pattern.error("BitPattern invariant failure");
- return v;
-}
-
diff --git a/contrib/libg++/libg++/src/BitString.h b/contrib/libg++/libg++/src/BitString.h
deleted file mode 100644
index f3f2d8c3111c..000000000000
--- a/contrib/libg++/libg++/src/BitString.h
+++ /dev/null
@@ -1,763 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifndef _BitString_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-
-#define _BitString_h 1
-
-#include <stream.h>
-#include <limits.h>
-
-#undef OK
-
-#include <bitprims.h>
-#define BITSTRBITS _BS_BITS_PER_WORD
-
-struct BitStrRep
-{
- unsigned int len; // length in bits
- unsigned short sz; // allocated slots
- _BS_word s[1]; // bits start here
-};
-
-extern BitStrRep* BStr_alloc(BitStrRep*, const _BS_word*, int, int,int);
-extern BitStrRep* BStr_resize(BitStrRep*, int);
-extern BitStrRep* BStr_copy(BitStrRep*, const BitStrRep*);
-extern BitStrRep* cmpl(const BitStrRep*, BitStrRep*);
-extern BitStrRep* and(const BitStrRep*, const BitStrRep*, BitStrRep*);
-extern BitStrRep* or(const BitStrRep*, const BitStrRep*, BitStrRep*);
-extern BitStrRep* xor(const BitStrRep*, const BitStrRep*, BitStrRep*);
-extern BitStrRep* diff(const BitStrRep*, const BitStrRep*, BitStrRep*);
-extern BitStrRep* cat(const BitStrRep*, const BitStrRep*, BitStrRep*);
-extern BitStrRep* cat(const BitStrRep*, unsigned int, BitStrRep*);
-extern BitStrRep* lshift(const BitStrRep*, int, BitStrRep*);
-
-
-class BitString;
-class BitPattern;
-
-class BitStrBit
-{
-protected:
- BitString& src;
- unsigned int pos;
-
- public:
- BitStrBit(BitString& v, int p);
- BitStrBit(const BitStrBit& b);
- ~BitStrBit();
- operator unsigned int() const;
- int operator = (unsigned int b);
-};
-
-class BitSubString
-{
- friend class BitString;
- friend class BitPattern;
-
-protected:
-
- BitString& S;
- unsigned int pos;
- unsigned int len;
-
- BitSubString(BitString& x, int p, int l);
- BitSubString(const BitSubString& x);
-public:
- ~BitSubString();
-
- BitSubString& operator = (const BitString&);
- BitSubString& operator = (const BitSubString&);
-
- int length() const;
- int empty() const;
-
- int OK() const;
-};
-
-class BitString
-{
- friend class BitSubString;
- friend class BitPattern;
-protected:
- BitStrRep* rep;
-
- int search(int, int, const _BS_word*, int, int) const;
- int match(int, int, int, const _BS_word*,int,int) const;
- BitSubString _substr(int first, int l);
-
-public:
-
-// constructors
- BitString();
- BitString(const BitString&);
- BitString(const BitSubString& y);
-
- ~BitString();
-
- BitString& operator = (unsigned int bit);
- BitString& operator = (const BitString& y);
- BitString& operator = (const BitSubString& y);
-
-// equality & subset tests
-
- friend int operator == (const BitString&, const BitString&);
- friend int operator != (const BitString&, const BitString&);
- friend int operator < (const BitString&, const BitString&);
- friend int operator <= (const BitString&, const BitString&);
- friend int operator > (const BitString&, const BitString&);
- friend int operator >= (const BitString&, const BitString&);
-
-// procedural versions of operators
-
-
- friend void and(const BitString&, const BitString&, BitString&);
- friend void or(const BitString&, const BitString&, BitString&);
- friend void xor(const BitString&, const BitString&, BitString&);
- friend void diff(const BitString&, const BitString&, BitString&);
- friend void cat(const BitString&, const BitString&, BitString&);
- friend void cat(const BitString&, unsigned int, BitString&);
- friend void lshift(const BitString&, int, BitString&);
- friend void rshift(const BitString&, int, BitString&);
-
- friend void complement(const BitString&, BitString&);
-
- friend int lcompare(const BitString&, const BitString&);
-
-// assignment-based operators
-// (constuctive versions decalred inline below
-
- BitString& operator |= (const BitString&);
- BitString& operator &= (const BitString&);
- BitString& operator -= (const BitString&);
- BitString& operator ^= (const BitString&);
- BitString& operator += (const BitString&);
- BitString& operator += (unsigned int b);
- BitString& operator <<=(int s);
- BitString& operator >>=(int s);
-
- void complement();
-
-// individual bit manipulation
-
- void set(int pos);
- void set(int from, int to);
- void set();
-
- void clear(int pos);
- void clear(int from, int to);
- void clear();
-
- void invert(int pos);
- void invert(int from, int to);
-
- int test(int pos) const;
- int test(int from, int to) const;
-
- void assign(int p, unsigned int bit);
-
-// indexing
-
- BitStrBit operator [] (int pos);
-
-// iterators
-
- int first(unsigned int bit = 1) const;
- int last(unsigned int b = 1) const;
-
- int next(int pos, unsigned int b = 1) const;
- int prev(int pos, unsigned int b = 1) const;
- int previous(int pos, unsigned int b = 1) const
- { return prev(pos, b); } /* Obsolete synonym */
-
-// searching & matching
-
- int index(unsigned int bit, int startpos = 0) const ;
- int index(const BitString&, int startpos = 0) const;
- int index(const BitSubString&, int startpos = 0) const;
- int index(const BitPattern&, int startpos = 0) const;
-
- int contains(const BitString&) const;
- int contains(const BitSubString&) const;
- int contains(const BitPattern&) const;
-
- int contains(const BitString&, int pos) const;
- int contains(const BitSubString&, int pos) const;
- int contains(const BitPattern&, int pos) const;
-
- int matches(const BitString&, int pos = 0) const;
- int matches(const BitSubString&, int pos = 0) const;
- int matches(const BitPattern&, int pos = 0) const;
-
-// BitSubString extraction
-
- BitSubString at(int pos, int len);
- BitSubString at(const BitString&, int startpos = 0);
- BitSubString at(const BitSubString&, int startpos = 0);
- BitSubString at(const BitPattern&, int startpos = 0);
-
- BitSubString before(int pos);
- BitSubString before(const BitString&, int startpos = 0);
- BitSubString before(const BitSubString&, int startpos = 0);
- BitSubString before(const BitPattern&, int startpos = 0);
-
- BitSubString after(int pos);
- BitSubString after(const BitString&, int startpos = 0);
- BitSubString after(const BitSubString&, int startpos = 0);
- BitSubString after(const BitPattern&, int startpos = 0);
-
-// other friends & utilities
-
- friend BitString common_prefix(const BitString&, const BitString&,
- int pos = 0);
- friend BitString common_suffix(const BitString&, const BitString&,
- int pos = -1);
- friend BitString reverse(const BitString&);
-
- void right_trim(unsigned int bit);
- void left_trim(unsigned int bit);
-
-// status
-
- int empty() const ;
- int count(unsigned int bit = 1) const;
- int length() const;
-
-// convertors & IO
-
- friend BitString atoBitString(const char* s, char f='0', char t='1');
- // BitStringtoa is deprecated; do not use in new programs!
- friend const char* BitStringtoa(const BitString&, char f='0', char t='1');
- void printon(ostream&, char f='0', char t='1') const;
-
- friend BitString shorttoBitString(unsigned short);
- friend BitString longtoBitString(unsigned long);
-
- friend ostream& operator << (ostream& s, const BitString&);
-
-// misc
-
- void error(const char* msg) const;
-
-// indirect friends
-
- friend BitPattern atoBitPattern(const char* s,
- char f='0',char t='1',char x='X');
- friend const char* BitPatterntoa(const BitPattern& p,
- char f='0',char t='1',char x='X');
- int OK() const;
-};
-
-
-class BitPattern
-{
-public:
- BitString pattern;
- BitString mask;
-
- BitPattern();
- BitPattern(const BitPattern&);
- BitPattern(const BitString& p, const BitString& m);
-
- ~BitPattern();
-
- friend const char* BitPatterntoa(const BitPattern& p,
- char f/*='0'*/,char t/*='1'*/,char x/*='X'*/);
- void printon(ostream&, char f='0',char t='1',char x='X') const;
- friend BitPattern atoBitPattern(const char* s, char f,char t, char x);
- friend ostream& operator << (ostream& s, const BitPattern&);
-
- int search(const _BS_word*, int, int) const;
- int match(const _BS_word* xs, int, int, int) const;
-
- int OK() const;
-};
-
-BitString operator & (const BitString& x, const BitString& y);
-BitString operator | (const BitString& x, const BitString& y);
-BitString operator ^ (const BitString& x, const BitString& y);
-BitString operator << (const BitString& x, int y);
-BitString operator >> (const BitString& x, int y);
-BitString operator - (const BitString& x, const BitString& y);
-BitString operator + (const BitString& x, const BitString& y);
-BitString operator + (const BitString& x, unsigned int y);
-BitString operator ~ (const BitString& x);
-int operator != (const BitString& x, const BitString& y);
-int operator>(const BitString& x, const BitString& y);
-int operator>=(const BitString& x, const BitString& y);
-
-extern BitStrRep _nilBitStrRep;
-extern BitString _nil_BitString;
-
-// primitive bit extraction
-
-// These must be inlined regardless of optimization.
-
-inline int BitStr_index(int l) { return (unsigned)(l) / BITSTRBITS; }
-
-inline int BitStr_pos(int l) { return l & (BITSTRBITS - 1); }
-
-
-// constructors & assignment
-
-inline BitString::BitString() :rep(&_nilBitStrRep) {}
-
-inline BitString::BitString(const BitString& x) :rep(BStr_copy(0, x.rep)) {}
-
-inline BitString::BitString(const BitSubString& y)
- :rep (BStr_alloc(0, y.S.rep->s, y.pos, y.pos+y.len, y.len)) {}
-
-inline BitString::~BitString()
-{
- if (rep != &_nilBitStrRep) delete rep;
-}
-
-inline BitString shorttoBitString(unsigned short w)
-{
- BitString r;
- _BS_word ww = w;
-#if _BS_BIGENDIAN
- abort();
-#endif
- r.rep = BStr_alloc(0, &ww, 0, 8 * sizeof(short), 8 * sizeof(short));
- return r;
-}
-
-inline BitString longtoBitString(unsigned long w)
-{
- BitString r;
-#if 1
- _BS_word u = w;
- r.rep = BStr_alloc(0, &u, 0, BITSTRBITS, BITSTRBITS);
-#else
- unsigned short u[2];
- u[0] = w & ((unsigned short)(~(0)));
- u[1] = w >> BITSTRBITS;
- r.rep = BStr_alloc(0, &u[0], 0, 2*BITSTRBITS, 2*BITSTRBITS);
-#endif
- return r;
-}
-
-inline BitString& BitString::operator = (const BitString& y)
-{
- rep = BStr_copy(rep, y.rep);
- return *this;
-}
-
-inline BitString& BitString::operator = (unsigned int b)
-{
- _BS_word bit = b;
- rep = BStr_alloc(rep, &bit, 0, 1, 1);
- return *this;
-}
-
-inline BitString& BitString::operator=(const BitSubString& y)
-{
- rep = BStr_alloc(rep, y.S.rep->s, y.pos, y.pos+y.len, y.len);
- return *this;
-}
-
-inline BitSubString::BitSubString(const BitSubString& x)
- :S(x.S), pos(x.pos), len(x.len) {}
-
-inline BitSubString::BitSubString(BitString& x, int p, int l)
- : S(x), pos(p), len(l) {}
-
-inline BitSubString::~BitSubString() {}
-
-inline BitPattern::BitPattern(const BitString& p, const BitString& m)
- :pattern(p), mask(m) {}
-
-inline BitPattern::BitPattern(const BitPattern& b)
- :pattern(b.pattern), mask(b.mask) {}
-
-inline BitPattern::BitPattern() {}
-inline BitPattern::~BitPattern() {}
-
-
-// procedural versions of operators
-
-inline void and(const BitString& x, const BitString& y, BitString& r)
-{
- r.rep = and(x.rep, y.rep, r.rep);
-}
-
-inline void or(const BitString& x, const BitString& y, BitString& r)
-{
- r.rep = or(x.rep, y.rep, r.rep);
-}
-
-inline void xor(const BitString& x, const BitString& y, BitString& r)
-{
- r.rep = xor(x.rep, y.rep, r.rep);
-}
-
-inline void diff(const BitString& x, const BitString& y, BitString& r)
-{
- r.rep = diff(x.rep, y.rep, r.rep);
-}
-
-inline void cat(const BitString& x, const BitString& y, BitString& r)
-{
- r.rep = cat(x.rep, y.rep, r.rep);
-}
-
-inline void cat(const BitString& x, unsigned int y, BitString& r)
-{
- r.rep = cat(x.rep, y, r.rep);
-}
-
-inline void rshift(const BitString& x, int y, BitString& r)
-{
- r.rep = lshift(x.rep, -y, r.rep);
-}
-
-inline void lshift(const BitString& x, int y, BitString& r)
-{
- r.rep = lshift(x.rep, y, r.rep);
-}
-
-inline void complement(const BitString& x, BitString& r)
-{
- r.rep = cmpl(x.rep, r.rep);
-}
-
-// operators
-
-
-inline BitString& BitString::operator &= (const BitString& y)
-{
- and(*this, y, *this);
- return *this;
-}
-
-
-inline BitString& BitString::operator |= (const BitString& y)
-{
- or(*this, y, *this);
- return *this;
-}
-
-inline BitString& BitString::operator ^= (const BitString& y)
-{
- xor(*this, y, *this);
- return *this;
-}
-
-inline BitString& BitString::operator <<= (int y)
-{
- lshift(*this, y, *this);
- return *this;
-}
-
-inline BitString& BitString::operator >>= (int y)
-{
- rshift(*this, y, *this);
- return *this;
-}
-
-inline BitString& BitString::operator -= (const BitString& y)
-{
- diff(*this, y, *this);
- return *this;
-}
-
-inline BitString& BitString::operator += (const BitString& y)
-{
- cat(*this, y, *this);
- return *this;
-}
-
-inline BitString& BitString::operator += (unsigned int y)
-{
- cat(*this, y, *this);
- return *this;
-}
-
-inline void BitString::complement()
-{
- ::complement(*this, *this);
-}
-
-#if defined(__GNUG__) && !defined(_G_NO_NRV)
-
-inline BitString operator & (const BitString& x, const BitString& y) return r
-{
- and(x, y, r);
-}
-
-inline BitString operator | (const BitString& x, const BitString& y) return r
-{
- or(x, y, r);
-}
-
-inline BitString operator ^ (const BitString& x, const BitString& y) return r
-{
- xor(x, y, r);
-}
-
-inline BitString operator << (const BitString& x, int y) return r
-{
- lshift(x, y, r);
-}
-
-inline BitString operator >> (const BitString& x, int y) return r
-{
- rshift(x, y, r);
-}
-
-inline BitString operator - (const BitString& x, const BitString& y) return r
-{
- diff(x, y, r);
-}
-
-inline BitString operator + (const BitString& x, const BitString& y) return r
-{
- cat(x, y, r);
-}
-
-inline BitString operator + (const BitString& x, unsigned int y) return r
-{
- cat(x, y, r);
-}
-
-inline BitString operator ~ (const BitString& x) return r
-{
- complement(x, r);
-}
-
-#else /* NO_NRV */
-
-inline BitString operator & (const BitString& x, const BitString& y)
-{
- BitString r; and(x, y, r); return r;
-}
-
-inline BitString operator | (const BitString& x, const BitString& y)
-{
- BitString r; or(x, y, r); return r;
-}
-
-inline BitString operator ^ (const BitString& x, const BitString& y)
-{
- BitString r; xor(x, y, r); return r;
-}
-
-inline BitString operator << (const BitString& x, int y)
-{
- BitString r; lshift(x, y, r); return r;
-}
-
-inline BitString operator >> (const BitString& x, int y)
-{
- BitString r; rshift(x, y, r); return r;
-}
-
-inline BitString operator - (const BitString& x, const BitString& y)
-{
- BitString r; diff(x, y, r); return r;
-}
-
-inline BitString operator + (const BitString& x, const BitString& y)
-{
- BitString r; cat(x, y, r); return r;
-}
-
-inline BitString operator + (const BitString& x, unsigned int y)
-{
- BitString r; cat(x, y, r); return r;
-}
-
-inline BitString operator ~ (const BitString& x)
-{
- BitString r; complement(x, r); return r;
-}
-
-#endif
-
-// status, matching
-
-inline int BitString::length() const
-{
- return rep->len;
-}
-
-inline int BitString::empty() const
-{
- return rep->len == 0;
-}
-
-inline int BitString::index(const BitString& y, int startpos) const
-{
- return search(startpos, rep->len, y.rep->s, 0, y.rep->len);
-}
-
-inline int BitString::index(const BitSubString& y, int startpos) const
-{
- return search(startpos, rep->len, y.S.rep->s, y.pos, y.pos+y.len);
-}
-
-inline int BitString::contains(const BitString& y) const
-{
- return search(0, rep->len, y.rep->s, 0, y.rep->len) >= 0;
-}
-
-inline int BitString::contains(const BitSubString& y) const
-{
- return search(0, rep->len, y.S.rep->s, y.pos, y.pos+y.len) >= 0;
-}
-
-inline int BitString::contains(const BitString& y, int p) const
-{
- return match(p, rep->len, 0, y.rep->s, 0, y.rep->len);
-}
-
-inline int BitString::matches(const BitString& y, int p) const
-{
- return match(p, rep->len, 1, y.rep->s, 0, y.rep->len);
-}
-
-inline int BitString::contains(const BitSubString& y, int p) const
-{
- return match(p, rep->len, 0, y.S.rep->s, y.pos, y.pos+y.len);
-}
-
-inline int BitString::matches(const BitSubString& y, int p) const
-{
- return match(p, rep->len, 1, y.S.rep->s, y.pos, y.pos+y.len);
-}
-
-inline int BitString::contains(const BitPattern& r) const
-{
- return r.search(rep->s, 0, rep->len) >= 0;
-}
-
-inline int BitString::contains(const BitPattern& r, int p) const
-{
- return r.match(rep->s, p, rep->len, 0);
-}
-
-inline int BitString::matches(const BitPattern& r, int p) const
-{
- return r.match(rep->s, p, rep->len, 1);
-}
-
-inline int BitString::index(const BitPattern& r, int startpos) const
-{
- return r.search(rep->s, startpos, rep->len);
-}
-
-inline int BitSubString::length() const
-{
- return len;
-}
-
-inline int BitSubString::empty() const
-{
- return len == 0;
-}
-
-inline int operator != (const BitString& x, const BitString& y)
-{
- return !(x == y);
-}
-
-inline int operator>(const BitString& x, const BitString& y)
-{
- return y < x;
-}
-
-inline int operator>=(const BitString& x, const BitString& y)
-{
- return y <= x;
-}
-
-inline int BitString::first(unsigned int b) const
-{
- return next(-1, b);
-}
-
-inline int BitString::last(unsigned int b) const
-{
- return prev(rep->len, b);
-}
-
-inline int BitString::index(unsigned int bit, int startpos) const
-{
- if (startpos >= 0)
- return next(startpos - 1, bit);
- else
- return prev(rep->len + startpos + 1, bit);
-}
-
-inline void BitString::right_trim(unsigned int b)
-{
- int nb = (b == 0)? 1 : 0;
- rep = BStr_resize(rep, prev(rep->len, nb) + 1);
-}
-
-inline void BitString::left_trim(unsigned int b)
-{
- int nb = (b == 0)? 1 : 0;
- int p = next(-1, nb);
- rep = BStr_alloc(rep, rep->s, p, rep->len, rep->len - p);
-}
-
-inline int BitString::test(int i) const
-{
- return ((unsigned)(i) >= rep->len)? 0 :
- ((rep->s[BitStr_index(i)] & (1 << (BitStr_pos(i)))) != 0);
-}
-
-
-// subscripting
-
-inline BitStrBit::BitStrBit(const BitStrBit& b) :src(b.src), pos(b.pos) {}
-
-inline BitStrBit::BitStrBit(BitString& v, int p) :src(v), pos(p) {}
-
-inline BitStrBit::~BitStrBit() {}
-
-inline BitStrBit::operator unsigned int() const
-{
- return src.test(pos);
-}
-
-inline int BitStrBit::operator = (unsigned int b)
-{
- src.assign(pos, b); return b;
-}
-
-inline BitStrBit BitString::operator [] (int i)
-{
- if ((unsigned)(i) >= rep->len) error("illegal bit index");
- return BitStrBit(*this, i);
-}
-
-inline BitSubString BitString::_substr(int first, int l)
-{
- if (first < 0 || l <= 0 || (unsigned)(first + l) > rep->len)
- return BitSubString(_nil_BitString, 0, 0) ;
- else
- return BitSubString(*this, first, l);
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/ChangeLog b/contrib/libg++/libg++/src/ChangeLog
deleted file mode 100644
index 76693b7f60ce..000000000000
--- a/contrib/libg++/libg++/src/ChangeLog
+++ /dev/null
@@ -1,1213 +0,0 @@
-Tue Jun 18 18:31:28 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * BitSet.h (BitSet): Comment out parameter name 'op' in second
- constructor.
-
-Tue Jun 18 11:07:32 1996 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * AllocRing.cc (AllocRing): Fix order of init of N and CURRENT.
-
-Mon Jun 17 14:15:01 1996 Per Bothner <bothner@deneb.cygnus.com>
-
- * Regex.cc (Regex::~Regex): Fix memory leak.
-
- * BitSet.h: If __STRICT_ANSI__, do not define and, or, xor, diff,
- and complement, since the first 3 conflict with ANSI C++ digraphs.
- Re-implement operator& etc to not use 'and' etc and be more efficient.
- * Integer.h: Likewise, fix for __STRICT_ANSI__.
-
- * BitSet.cc: Add casts in length arguments to memset.
-
- * bitlcomp.c, bitprims.h (_BS_lcompare_0): Add const.
-
-Tue Jun 11 13:42:29 1996 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * AllocRing.cc (AllocRing): Reorder init of NODES and N to match
- declaration order.
-
-Wed May 1 14:48:50 1996 Per Bothner <bothner@andros.cygnus.com>
-
- * malloc.c: New version from Doug Lea.
-
- * gen/Vec.ccP (gsort): Re-do Mar 30 fix.
-
-Wed Apr 24 10:58:05 1996 Doug Evans <dje@blues.cygnus.com>
-
- * depend: Regenerated.
-
-Wed Mar 27 15:06:11 1996 Per Bothner <bothner@kalessin.cygnus.com>
-
- * Binomial.h (Binominal::u): Fix parameter from int to double.
- From John Hasler <uunet!hasler!root>.
-
-Sun Mar 24 21:46:28 1996 Per Bothner <bothner@kalessin.cygnus.com>
-
- * Strings.cc: Subtract chars giving int (not signed char) to avoid
- truncation. From Emmanuel Giguet <giguet@calvin.info.unicaen.fr>.
-
-Mon Feb 5 19:32:49 1996 Per Bothner <bothner@kalessin.cygnus.com>
-
- * gen/VHMap.ccP: Add missing [] in delete.
- From Dirk Bonne <h0444xiv@hppool9.rz.hu-berlin.de>.
-
-Sat Mar 30 15:31:49 1996 Per Bothner <bothner@kalessin.cygnus.com>
-
- * gen/Vec.ccP (gsort): Fix stack/loop fence-post error.
-
-Wed Jan 24 18:26:20 1996 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * Makefile.in (OBJS): Take out CursesW.o.
-
-Fri Dec 22 17:41:20 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * String.cc (common_prefix, common_suffix): Fix Nov 9 bad fix.
-
-Tue Dec 12 19:34:02 1995 Jason Molenda (crash@phydeaux.cygnus.com)
-
- * Makefile.in (OBJS): add sqrt.o not sqrt..o.
-
-Tue Dec 12 17:18:41 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * str.cc, chr.cc, Makefile.in: Moved str() and chr() to libio.
-
-Thu Nov 30 13:21:58 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * BitSet.h, BitSet.cc: Fixed problem on Alpha where 1 was being
- shifted, rather than (_BS_word)1.
- Problem diagnosed by Robin Williams <rjrw@ast.man.ac.uk>.
- * BitSet.cc (MASK1): New macro, to save code duplication.
-
-Wed Nov 22 15:49:01 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * malloc.c (realloc): Old copy if we failed to allocate.
- Also, use memcpy to copy.
- (calloc): Don't zero memory if malloc failed. Also, use memset.
- Fix from Raymond Nijssen <raymond@es.ele.tue.nl>.
-
-Sun Nov 12 16:41:56 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * configure.in (EXTRA_DISTCLEAN): Add rx.h.
-
-Thu Nov 9 17:43:04 1995 Jason Merrill <jason@yorick.cygnus.com>
-
- * String.cc (common_prefix, common_suffix): Fix for scoping for
- non-NRV case.
- * configure.in (MOSTLYCLEAN): Add pic and stamp-picdir.
- From alan@spri.levels.unisa.edu.au (Alan Modra).
-
-Thu Nov 2 21:54:45 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * BitSet.cc (shorttoBitsSet, longtoBitSet): Re-implement for
- new word-length.
-
-Wed Sep 27 10:18:03 1995 Roberto Bagnara <bagnara@di.unipi.it>
-
- * BitSet.cc: several bug fixes, mainly concerning the treatment
- (especially in comparison operators) of non-normalized reps
- (e.g. with trailing zeros).
- * bitlcomp.c (_BS_lcompare_0): was completely wrong, fixed.
- * BitSet.h: added lexical comparison function on BitSets
- int lcompare(const BitSet& x, const BitSet& y).
- * BitSet.h: now makes use of the _BS_* macros of bitprims.h.
-
-Tue Sep 5 23:08:05 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * depend: Updated now that libstdc++ doesn't have a string.h.
-
-Fri Sep 1 13:22:47 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * bitprims.h (_BS_BITMASK): Cast 1 to _BS_word.
- Fix from Curtis A. Snyder <C1S@icf.hrb.com>.
-
-Tue Aug 29 21:53:34 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * builtin.h: Remove 'noreturn' attribute from error handler typedefs.
-
-Tue Aug 22 15:11:46 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * error.cc (default_one_arg_error_handler): Lose uses of
- _VOLATILE_VOID and NoReturnFunc.
- * builtin.h: Replace use of _VOLATILE_VOID with __attribute__
- ((noreturn)).
-
-Mon Aug 21 12:41:20 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * builtin.h: Lose definitions of abs(float), abs(double) and
- abs(long).
-
- * std.h: Use C++ names of standard headers.
-
- * Complex.h: Use complex<double> from libstdc++.
- * Complex.cc: Remove.
- * Makefile.in: Forget about Complex.o.
-
-Wed Aug 2 17:19:12 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * gen/AVLSet.hP. gen/BSTSet.hP, gen/CHMap.hP, gen/CHNode.hP,
- gen/DLList.hP, gen/RAVLMap.hP, gen/SLList.hP, gen/SplayMap.hP,
- gen/SplayNode.hP: Re-order constructor args to avoid -Wall warnings.
- * gen/BSTSet.ccP (T>BSTSet::add): Re-arrange to avoid warning.
- * gen/MPlex.ccP: Make constant unsigned to avoid warning.
- * gen/PHPQ.ccP: Add parentheses to avoid warning from -Wall.
-
-Sun Jun 25 13:58:25 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * gen/CHMap.hP, gen/AVLSet.hP: Re-order constructor args,
- to avoid warnings. Reported by Per Cederqvist <ceder@lysator.liu.se>.
- * RndInt.h: Likewise. Reported by Ralf Stephan <ralf@ark.franken.de>.
-
-Tue Jun 20 20:27:23 1995 Paul Eggert <eggert@twinsun.com>
-
- * CursesW.h (_begx, _begy, _maxx, _maxy):
- Define to be their _-less equivalents
- if __bsdi__, __NetBSD__, or __FreeBSD__ is defined,
- to work around an incompatibility with 4.4 BSD curses.
-
-Tue Jun 20 16:49:36 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * SmplStat.h, gen/*.hP: Declare inline virtuals accordingly in class.
-
-Wed Jun 14 21:45:44 1995 Jason Merrill <jason@python.cygnus.com>
-
- * CursesW.cc (OK): Define if not already defined.
-
-Mon Jun 5 18:42:04 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * Makefile.in (libgxx.list): Depend on stamp-picdir.
-
-Mon May 22 23:46:34 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * bitprims.h: Rewrite __GNUC__ test to work with gcc-1.xx.
-
-Fri May 5 17:25:17 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * timer.c: #include <sys/types.h> also if we have <sys/resource.h>.
-
-Fri May 5 13:04:17 1995 Mike Stump <mrs@cygnus.com>
-
- * Move `for' decl out of `for' statement.
-
-Thu Apr 27 01:03:42 1995 Jason Merrill <jason@python.cygnus.com>
-
- * Fix24.h: Move definition of ~Fix48 up.
- * Fix16.h: Move definition of ~Fix32 up.
-
-Wed Apr 26 13:01:30 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * configure.in (XCINCLUDES): Rename to work with config.shared change.
-
-Mon Apr 17 16:59:17 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * BitSet.h: Remove duplicate (forward) decls of inline functions.
-
-Sun Apr 16 12:47:53 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * CursesW.h: Make return type explicit instead of implicit int.
- Reported by Ulrich Drepper <drepper@ipd.info.uni-karlsruhe.de>.
-
- * SLList.h (BaseSLNode): Force double alignment of derived fields.
-
-Thu Mar 30 18:09:58 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * AllocRing.cc (alloc): Call operator new/delete directly.
- * String.cc (Snew): Use placement new to create the new rep.
- * BitSet.cc (BSnew): Ditto.
- * BitString.cc (BSnew): Ditto.
- * Fix.cc (_new_Fix): Ditto.
- * Obstack.cc (newchunk): Ditto.
- * Integer.cc (Inew): Ditto.
- (printon): Use array delete to match array new.
-
-Fri Feb 17 16:33:39 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * timer.c: If _G_HAVE_SYS_TIMES is 0, define USE_CLOCK. Add
- USE_CLOCK cases where needed which call the ANSI function clock.
-
- * BitSet.h: Add #undef OK after including system header files, to
- avoid problems on VxWorks.
- * BitString.h, DLList.h, Integer.h, Obstack.h: Likewise.
- * Rational.h, Regex.h, SLList.h, String.h: Likewise.
- * BitSet.cc, BitString.cc, Integer.cc, Rational.cc: Likewise.
- * String.cc: Likewise.
-
- * SmplStat.h: Add #undef min and #undef max after including system
- header files.
-
- * timer.c (return_elapsed_time): Fix syntax of #if 0 case.
-
-Mon Feb 6 20:10:35 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * Makefile.in (OBJS): Don't include EH support anymore.
- * except.c: Move code to libstdc++/exception.cc.
-
-Thu Jan 26 13:16:09 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * Fix.h: Add Fix(_G_uint16_t) for targets where _G_uint16_t does
- not promote to int.
-
-Fri Jan 20 01:36:37 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * Makefile.in (OBJS): Remove new.o and math.o.
-
- * std.h: Include std/stddef.h instead of defines.h.
- * complex.h: Remove (replaced by libstdc++ version).
- * defines.h: Remove (replaced by libstdc++ std/stddef.h).
- * new.{cc,h}: Remove (replaced by libstdc++ new.cc and std/new.h).
- * drt0.c, dynamic_lib.c, init.c, init_main.c: Remove (obsolete).
- * math.cc, xyzzy.cc: Remove (obsolete).
- * depend: Update.
-
-Wed Dec 14 18:41:11 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * gen/VQueue.ccP (VQueue::resize): Fix thinko. Reported by
- Jocelyn Serot <jserot@alize.univ-bpclermont.fr>.
-
-Tue Dec 13 17:05:02 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * gen/AVLMap.hP: Re-order base initializer to avoid warning.
- Patch from Gustavo Chaves <gustavo@cpqd.br>.
-
-Tue Nov 29 12:58:44 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * gen/Map.hP (Map::empty, Map::length): Make const.
- Patch from Gustavo Chaves <gustavo@cpqd.br>.
-
-Sat Nov 5 19:13:17 1994 Jason Merrill (jason@phydeaux.cygnus.com)
-
- * configure.in (LIBDIR): Set.
-
-Sat Nov 5 16:23:02 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * Makefile.in (REGEX_OBJ): Remove ../../librx/rx.o.
- This is now the responsibility of ../Makefile.in.
-
-Fri Nov 4 21:46:30 1994 Paul Eggert <eggert@twinsun.com>
-
- * bitprims.h (__P): Change argument name spelling from
- `paramlist' to `protos' for compatibility with BSDI 1.1.
-
-Mon Oct 24 16:06:44 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * CursesW.h (box): Slightly more complicated "wrapper" to turn
- box macro into inline function, needed for Solaris2
- (which defines box with no arguments as box32).
-
-Fri Oct 14 16:36:56 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * CursesW.h: Wrap #include <curses.h> by extern "C" { ... },
- because even systems with "C++-ready" header files often miss curses.h.
-
- * DLList.cc (BaseDLList::del): Fix memory leak.
- Patch from Mark Stankus <mstankus@oba.ucsd.edu>.
-
-Thu Oct 13 16:57:08 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * gen/List.hP, gen/List.ccP (copy): Take const argument.
- (List::seekK): Make const.
- (const <T>& operator () (Pix p) const): Added.
- * gen/List.hP (operator!=): Add missing inline.
- * gen/List.hP (new): Take const argument.
- * gen/List.ccP (List::del): Defer deleting.
- Patches from Klamer Schutte <schutte@tpd.tno.nl>.
-
-Wed Oct 12 13:49:27 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * String.cc (Sresize): Make static.
- * String.h, String.cc (String::alloc): Don't change length, only size.
- Bug reported by Mark Stankus <mstankus@oba.ucsd.edu>.
- * String.cc (join): Use Sresize, not (changed) String::alloc.
- Also, merge NO_NRV and named return value versions.
-
-Thu Sep 29 03:23:24 1994 Philippe De Muyter (phdm@info.ucl.ac.be)
-
- * timer.c: include <sys/types.h> before <sys/times.h>
-
-Tue Sep 27 13:27:17 1994 Mike Stump (mrs@cygnus.com)
-
- * Makefile.in, depend, except.c: New support routines for EH.
-
-Sun Sep 4 14:22:25 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * String.cc: Remove unneeded #include <regex.h>.
-
-Thu Sep 1 16:34:33 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * error.cc (#define ABORT): Add missing parentheses.
-
- * regex.cc, regex.h: Removed.
-
-Wed Aug 31 10:32:57 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * SLList.h: Make BaseSLList::{error,owns,OK} const, create const
- SLList::{first,next}.
- * DLList.h: Similarly.
-
-Fri Aug 26 18:44:43 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * SLList.h: Make SLList::first and SLList::next const, create
- const SLList::operator().
- * DLList.h: Similarly.
-
-Tue Aug 16 11:41:43 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * Regex.cc (Regex::Regex): Add missing 'const'.
-
- * configure.in (rx.h): Add link to ../../librx/rx.h.
-
-Mon Aug 15 16:41:30 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * Regex.cc, Makefile.in: Change to use Tom Lord'd rx library,
- instead of (a very old version of) the regex library.
-
-Fri Aug 12 12:05:39 1994 Brendan Kehoe (brendan@lisa.cygnus.com)
-
- Improve Alpha support a bit more.
-
- * Fix.cc (Fix::shift): Cast Y to _G_int32_t, not long.
- (Fix::printon): Use _G_int32_t, not long.
- * Fix16.h: Declare all methods to take/return _G_{u,}int32_t, not long
- or unsigned long.
- (Fix32_fs, Fix32_msb, Fix32_m_max, Fix32_m_min): Cast to _G_{,u}int32_t
- not long/unsigned long.
- (class Fix32): Make member M _G_int32_t. Declare methods round,
- assign, both mantissa, overflow, and range_error to use _G_int32_t.
- * Fix16.cc: Likewise.
- (operator*, operator/): Declare stuff to be _G_uint32_t, not unsigned
- long.
- * Fix24.h (twolongs): Make them _G_{,u}int32_t, not long/unsigned long.
- (class Fix24): Same as above for Fix32.
- * Fix24.cc: As in Fix16.cc.
-
- * RNG.h (RNG::asLong): Make its return value _G_uint32_t.
- * MLCG.h (MLCG::asLong): Likewise.
- * MLCG.cc (MLCG::asLong): Likewise.
-
- * ACG.h (ACG): Make members initialSeed, state, auxState, and
- lcgRecurr to be _G_uint32_t.
- (ACG::ACG): Declare SEED to be _G_uint32_t.
- (ACG::asLong): Declare return value to be _G_uint32_t.
- * ACG.cc (ACG::reset): Check _G_int32_t, not long, against double.
- Define local variable U to be _G_uint32_t, not unsigned long.
- (randomPermutations): Define as _G_uint32_t, not unsigned long.
- (seedTable): Likewise.
- (LC_A, LC_C, LCG): Likewise.
- (ACG::ACG): Define SEED argument to be _G_uint32_t, not unsigned
- long. Create a _G_uint32_t for STATE, not an unsigned long.
- (ACG::asLong): Declare return to be _G_uint32_t. Make local
- variables RESULT, AUXACG, and PERM also be _G_uint32_t.
-
-Tue Aug 2 00:53:01 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * defines.h (enum capacity): Define.
-
-Fri Jul 22 17:31:37 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * String.h (String::operator[](int) const): New method,
- added to allow indexing of const Strings. Patch
- from Klamer Schutte <schutte@tpd.tno.nl>.
-
-Thu Jul 21 23:41:36 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * builtin.h: Remove unneeded forward declarations. (Compiling
- with -Wall complains because they are missing "inline".)
- Reported by Michael Haggerty <mhagger@rigel.krl.caltech.edu>.
-
-Wed Jul 20 14:54:50 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * String.h: Add "inline" to friend declarations, and remove
- some unneeded forward references, to avoid complaints from -Wall.
- Patch from Klamer Schutte <schutte@tpd.tno.nl>.
-
-Tue Jul 19 12:35:13 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * Complex.h: Remove unneeded forward declarations. (Compiling
- with -Wall complains because they are missing "inline".)
- Reported by John Eaton <jwe@che.utexas.edu>.
-
-Mon Jul 18 18:15:17 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * String.h, String.cc: Add const to some parameter types,
- to fix to const violations.
-
-Fri Jul 1 11:20:34 1994 Brendan Kehoe (brendan@phydeaux.cygnus.com)
-
- * MLCG.cc (seedTable): Declare to be a _G_int32_t, not a long.
- (MLCG::MLCG): Make its arguments likewise.
- (MLCG::reset): Also make SEED1 and SEED2 _G_int32_t.
- (MLCG::asLong): Likewise for local variables K and Z.
- * MLCG.h (class MLCG): Declare members to be _G_int32_t, not long.
- Make constructor and other mothod args and return type match the
- way we've adjusted them.
-
- * RNG.cc (RNG::RNG): Check against _G_uint32_t, not unsigned long.
- * RNG.h: Include _G_config.h.
- (PrivateRNGSingleType, PrivateRNGDoubleType): Adjust U member the
- same way...use _G_uint32_t, not unsigned long.
-
-Tue Jun 28 03:04:13 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * gen/List.*: Add some 'const's.
- * gen/Vec.*: Ditto.
-
- * gen/AVec.* (Vec): Add additional vec() method for const AVecs,
- which returns a const pointer. The operand of operator = is a
- const reference.
-
-Mon Jun 27 17:49:25 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * Fix.*: Add lots of 'const's. Lose _Fix typedef for _Frep*, as
- it caused confusion like thinking that 'const _Fix' was meaningful
- and declaring references to _Fix. Move _Frep inside of Fix and
- rename it to Rep. Move lots of associated functions and variables
- inside Fix. Use _G_int16_t instead of uint16. Put function names
- flush left.
-
- * gen/List.* (operator =): Make parameter a const reference.
-
- * Fix.h (operator =): Make parameter a const reference.
-
-Wed Jun 15 10:50:35 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * String.cc (Scapitalize): Don't consider '\'' a word break.
-
-Tue May 31 09:18:10 1994 Mike Stump (mrs@cygnus.com)
-
- * BitString.cc: Make more portable to machines where sizeof(int)
- != sizeof(long). Cures warnings on Alpha.
-
-Mon May 30 17:31:18 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * bitcount.c: #define inline as empty if compiled
- by a non-GNU C compiler.
- * Makefile.in (install): Install include files.
- (This used to be done by ../Makefile.in.)
-
-Sun May 29 19:07:29 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * bitdo2.h: Fix typo/thinko: srcbit -> dstbit.
-
-Wed May 25 15:45:37 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * SLList.h (SLList<T>::empty): Move up the hierarchy (to become
- BaseSLList::empty), and make const.
- * DLList.h, DLList.cc (BaseDLList::empty, BaseDLList::length):
- Make const.
-
-Sun May 22 17:13:24 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * bitand.c, bitany.c, bitblt.c, bitclear.c, bitcopy.c, bitcount.c,
- bitdo1.h, bitdo2.h, bitinvert.c, bitlcomp.c, bitprims.h, bitset1.c,
- bitxor.c: Preliminary version of language-independent (sub-)library
- for general low-level manipulation of bistrings.
- * BitString.h, BitString.cc, Makefile.in: Partially re-written
- BitString class using the new library.
-
- * sysent.h: New file, provided for compatibility with other C++
- compilers, and so Fresco can compile.
-
-Thu May 19 23:00:26 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * gen/PHPQ.ccP (<T>PHPQ::OK): Set int variable to INT_MAX, not
- LONG_MAX.
-
-Fri May 13 14:14:47 1994 Mike Stump (mrs@cygnus.com)
-
- * bool.h: Use builtin bool, true, and false, if compiler supports
- them.
-
-Wed May 11 00:31:12 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- Make libg++ build with gcc -ansi -pedantic-errors
- * ?LList.*: Add 'const' as necessary to make conformant.
- * {BitSet,BitString,Integer,Rational,String}.*: Change NO_NRV to
- _G_NO_NRV.
- * {Fix,Integer,Rational}.*: Protect uses of <? and >? with #ifndef
- __STRICT_ANSI__.
- * generic.h: Put /* */ around #endif comment.
- * regex.cc: Remove comma at end of enumerator list.
-
-Fri May 6 14:25:15 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * SLList.h, SLList.cc (BaseSLList::length): Make const.
-
-Thu May 5 14:28:30 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * defines.h: Avoid multiple definition of wint_t.
-
-Sat Apr 30 14:49:02 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * defines.h: New file as per 17.3.1 of the WP.
- * new.h: include defines.h instead of std.h.
- (new[]): Add default placement version of opeator new[].
- * std.h: include defines.h instead of stddef.h.
-
-Mon Apr 25 14:05:57 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * Fix24.h (operator>>): Cast mask to long explicitly, since it
- doesn't fit in a long.
-
-Sun Mar 27 18:45:20 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * BitSet.h (BitSetBit): operator int() is const.
-
-Mon Mar 14 10:46:26 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * BitSet.h, BitString.{h,cc}, Integer.h, Rational.h, String.h:
- Make operator= and similar operators return a reference to lhs.
- Patches from Martin Pottendorfer <fs_potte@aaf.alcatel.at>.
-
- * Obstack.cc: Re-do int -> char* convertsion (using pointer
- subtraction as in the C version of obstack.h) to avoid problems
- on 64-bits machines like the Alpha.
- * Integer.cc (operator>>): Return stream, not 0.
- * CursesW.h (box, scroll, touchwin): If these are macros (as
- they can be in the SYSV-based nurses.h), convert to inlines.
- * Fix.h (Fix::Fix(int, const _Fix)): Use named constants instead
- of integer literals. Patch from Andreas Schwab
- <schwab@issan.informatik.uni-dortmund.de>.
-
-Thu Feb 10 16:36:37 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * BitSet.cc (BitSetresize): When newlen is greater than the
- old->len (but < old->sz), clear out new words.
-
-Fri Feb 4 12:07:23 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * new.h: Wrap g++-specific things in #ifdef __GNUG__.
- (NEW): Use parens now.
- (new): Remove definition of realloc-ish new, as it doesn't belong
- in a standard header.
-
-Wed Dec 29 22:52:43 1993 Mike Stump (mrs@cygnus.com)
-
- * BitSet.h (BitSetBit): Add int operator = (const BitSetBit& b),
- because the default op= would have the wrong semantics.
-
-Mon Dec 6 14:14:52 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * math-68881.h: Removed.
-
-Sun Dec 5 19:15:01 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
-
- * Integer.cc (cvtItoa): Delete unused var `gap'.
- * Fix.cc (Fix::printon): Delete unused var `format'.
-
-Thu Nov 18 16:51:49 1993 Jeffrey A. Law (law@snake.cs.utah.edu)
-
- * gen/*: Replace all occurences of <values.h> with <limits.h>.
- Replace MAXLONG with LONG_MAX.
-
-Thu Nov 4 17:00:20 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * gen/List.hP: Re-arrange #includes. Patch submitted
- by chris@lslsun7.epfl.ch (Christian Iseli).
-
- * osfcn.h: #include <sys/time.h> before <sys/resource.h>.
-
-Wed Nov 3 12:56:28 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * Integer.cc: Move functions that convert between Integer and
- double from here to ...
- * Intdouble.cc (new file): Here. Improves modularity, and lessens
- need for linking with libm.a on some systems (e.g. SunOS4).
- * Integer.hP: New file. Integer internals.
- * Integer.h, Makefile.in: Associated changes.
-
-Mon Oct 25 19:16:19 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * timer.c (return_elapsed_time): Make K&R-(not C++-)compatible.
-
- * configure.in: Define CINCLUDES (to get _G_config.h).
- * timer.cc -> timer.c: Convert to reduce some portability
- problems with getrusage.
- * builtin.h (start_timer, return_elapsed_time): Now extern "C".
-
-Sat Oct 23 22:29:16 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * gen/SplaySet.hP (<T>SplaySet::operator =): Added.
- (Many other classes also need operator=. FIXME.)
-
-Sun Oct 10 15:02:22 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * gen/VOHSet.ccP: Patch from Doug Lea <dl@g.oswego.edu>, fixing
- a bug reported by David Einstein <EINSTEIN@pl9000.plh.af.mil>.
-
-Thu Aug 26 18:02:51 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * Integer.cc (operator>>(istream&, Integer&): Fixed some logic
- problems (single "0" dropped when base is unknown) by copying
- algorithm from istream::operator>>(int &).
-
-Wed Aug 18 12:03:52 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * Makefile.in: Add libgxx.list, for use by libg++/Makefile.
- * configure.in: No longer need TOUCH_ON_COMPILE magic.
- * configure.in (MOSTLYCLEAN): Add libgxx.list.
-
- * CursesW.h: Remove re-definition of wattrset from macro to inline.
- Doesn't work under Solaris (wattrset is parameterless), and isn't
- needed (there are no conflicting definitions of wattrset in CursesW.*).
-
-Sat Aug 14 14:01:04 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * malloc.c: New version from Doug Lea.
-
-Thu Jul 29 13:25:31 1993 Per Bothner (bothner@kalessin)
-
- * error.cc (abort prototype): Removed (can conflict with stdlib.h).
- * error.cc (ABORT): New macro, to call abort(), but with a cast
- to avoid g++ warning about volatile function returning.
- * error.cc (default_one_arg_error_handler,
- default_two_arg_error_handler): Use ABORT macro.
-
-Wed Jul 28 15:40:29 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * CursesW.cc, RNG.cc, Rational.cc, Regex.cc:
- Remove unneeded #include <values.h>.
- * DLList.cc, Obstack.cc, SLList.cc: Replace non-standard #include
- <values.h> by ANSI <limits.h>, and macro MAXLONG by LONG_MAX.
- * Makefile.in (OBJS): Remove dtoa.o: It is obsolete and non-portable.
- * std.h: Remove #include of non-standard <memory.h>.
-
-Sat Jul 24 17:57:51 1993 Per Bothner (bothner@kalessin)
-
- * LogNorm.cc (LogNormal::operator()): Call exp (foo) instead
- of pow (M_E, foo), thus avoiding use of non-ANSI M_E macro
- (and probably being more efficient).
- * timer.cc: Don't #include <osfcn.h>.
- Do #include <sys/time.h> before #include <sys/resource.h>.
-
-Mon Jun 28 18:34:41 1993 Per Bothner (bothner@rtl.cygnus.com)
-
- * regex.cc (STORE_NUMBER): Add cast to avoid g++ warning.
- * Fix16.h (Fix32_m_max): Add cast to avoid g++ warning.
-
-Tue Jun 22 14:08:23 1993 Per Bothner (bothner@deneb.cygnus.com)
-
- * Integer.h: Remove Integer::operator long and
- Integer::operator double. They cuase ambiguities, and this
- seems the cleanest fix, though it does break compatibility.
- * regex.h, regex.cc: Remove defs of re_comp and re_exec.
-
-Fri Jun 4 18:06:54 1993 Per Bothner (bothner@cygnus.com)
-
- * Integer.cc (setbit): Do Iresize also when x.rep initially NULL.
- Fixes bug reported by Marco Franzen <cp44@ips.cs.tu-bs.de>.
- * Integer.cc (clearbit): No need to resize to clear bits!
-
-Tue Jun 1 16:06:23 1993 Per Bothner (bothner@rtl.cygnus.com)
-
- * BitSet.h, Complex.h, SmplHist.h: #include <iostream.h>,
- not obsolete <stream.h>.
- * Fix.h (Fix::Fix(double&), Fix::operator=): Take double, not double&.
- * Fix.h, Fix.cc, Fix16.h, Fix16.cc, Fix24.h, Fix24.cc:
- Make operands be const, where appropriate. (Incoplete.)
- * Fix.cc (mantissa, multiply), String.cc (SubString::OK):
- Minor changes to avoid ambiguity complaints from cfront.
- * Fix.cc, Complex.cc, Rational.cc, String.cc, Integer.cc:
- Avoid non-standard iostream operations (ios::set, _fail).
- * Rational.cc (pow): Use Integer::as_long().
- * Rational.cc (ceil, floor, round): Use prefix ++ and --
- instead of (the missing) postfix versions.
- * Rational.h (Rational::Rational): Add some more overloaded
- versions, to avoid cfront ambiguity complaints.
- * Integer.h (Integer::opertor long, Integer::operator double):
- Disable these, unless using g++. These cause lots of
- ambiguities, which g++ tolerates, but shouldn't.
- * Integer.h (Integer::as_long, Integer::as_double):
- Substitues for above conversions.
-
- * gen/MPlex.ccP, gen/RPlex.ccP: ANSIfy bzero->memset, bcopy->memcpy.
-
- * GetOpt.cc, regex.cc: #ifdef sparc, add declaration
- __builtin_alloca; needed when compiling on Solaris2 with cfront.
- * regex.cc (re_match_2): Add extra cast, to make cfront happy.
- * Makefile.in (add-to-targetlib): New rule.
-
-Fri May 28 14:25:47 1993 Per Bothner (bothner@rtl.cygnus.com)
-
- * BitSet.h (BitSetBit::operator==, BitSetBit::operator!=),
- BitString.h (BitStrBit::operator==, BitStrBit::operator!=):
- Remove redundant operators.
- * builtin.h (chr, str): Moved to ../iostream/stream.h.
- * CursesW.cc (CursesWindow::printw, CursesWindow::mvprintw):
- Assume existence of vsprintf. (Will be provided by
- libiberty, at worst.)
- * CursesW.cc (CursesWindow::scanw, CursesWindow::mvscanw):
- Re-do logic for missing vsscanf: Provide an implementation,
- unless we're using GNU iostreams.
-
-Wed May 26 15:09:49 1993 Per Bothner (bothner@cygnus.com)
-
- * CursesW.h: Also "convert" wstandend, wstandout, and wattrset
- from macros to inlines. Needed for Coherent 4.0.
- Patch from Jim West <jwest@jwest.ecen.okstate.edu>.
-
-Thu May 6 15:52:40 1993 Per Bothner (bothner@cygnus.com)
-
- * Rational.cc (Rational::fits_in_float, Rational::fits_in_double):
- Add explicit double->Rational conversion; else cfront complains.
- * SLList.h (SLNode::SLNode), DLList.h (DLNode::DLNode):
- Don't use mem-initializers for members of a base class.
- * DLList.h (DLList::remove_front, DLList::remove_rear), SLList.h
- (SLList::remove_front): Use base class qualifiers to avoid ambiguity.
- * gen/AVLMap.ccP, gen/AVLSet.ccP, gen/RAVLMap.ccP: Cfront
- complains about jumps past initializer (in switch statement).
- Fix by adding block around such statements.
-
-Fri Apr 30 15:03:12 1993 Per Bothner (bothner@cygnus.com)
-
- * BitSet.cc (BitSet::printon): Fix name clash (rename s -> os).
- * dtoa.cc (dtoa): #ifdef out unless __GNUC__, since cfront
- can't compile it (variable-sized array), and it's obsolete anyway.
- * configure.in: Set TOUCH_ON_COMPILE to cause stamp file to
- be touched on every compile.
-
-Mon Apr 19 00:48:10 1993 Per Bothner (bothner@cygnus.com)
-
- * gen/Plex.ccP (Plex::del_chunk): Delete unused local variable.
-
- * Makefile.in, configure.in: Re-vamped configure scheme.
- * CursesW.h: #undef lines to avoid clash on SCO.
-
-Fri Apr 16 15:25:39 1993 Per Bothner (bothner@cygnus.com)
-
- * BitSet.{h,cc}, BitString.{h,cc}: Rename BitSet::previous()
- and BitString::pvreious() to prev() for the sake of consistency
- with other libg++ classes. Keep previous() as a synonym
- for compatibility.
-
-Fri Mar 5 17:25:59 1993 Per Bothner (bothner@rtl.cygnus.com)
-
- * Integer.cc (Icopy_zero): Make sure we don't trash
- a STATIC_IntRep object.
- * Integer.cc: #include <math.h> after <limits.h> and <float.h>
- to avoid some conflict I don't remember.
-
-Tue Jan 5 20:52:29 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
-
- * Rational.cc (floor, ceil, round): Use prefix ++ and --, not
- postfix, since the Integer class only has prefix defined.
-
-Tue Dec 29 13:15:59 1992 Ian Lance Taylor (ian@cygnus.com)
-
- * builtin.h: Check _G_MATH_H_INLINES rather than __hpux.
- * CursesW.h: Undef "lines" to avoid problems on SCO 3.2v4.
-
-Mon Dec 21 18:57:41 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * SLList.h: Fix typo.
- * osfcn.h: Don't include non-Posix <sys/time.h>.
- * Integer.h, String.h: #include <iostream.h>, not old <stream.h>.
- * Integer.cc, String.cc: Update _fail->ios::failbit,
- _eof->ios::eofbit.
- * CursesW.h: #include <_G_config.h> before testing _H_HAVE_CURSES.
- * gen/{XPBag,OXPBag}.h: Add #undef remove, to avoid conflicts
- with systems where stdio.h defines remove as a macro.
-
-Wed Dec 9 14:36:37 1992 Per Bothner (bothner@cygnus.com)
-
- * gen/Bag.hP, gen/List.hP: #undef remove, in case some
- version of stdio.h defines remove as a macro.
- * gen/MPlex.ccP, gen/RPlex.ccP: Use ANSI memset/memcpy
- instead of bzero/bcopy.
-
-Thu Dec 3 15:37:17 1992 Per Bothner (bothner@cygnus.com)
-
- * BitSet.cc (operator ==): Fixed version from
- karplus@cse.ucsc.edu (Kevin Karplus).
-
- * Integer.cc (compare, operator>>): Two small patches from
- Doug Lea.
- * regex.cc, BitString.cc, Fix.cc, Obstack.cc, GetOpt.cc:
- Replace bcopy/bzero/cmp by ANSI functions memcpy/memset/memcmp.
- * gen/List.ccP: Use <T>EQ macro instead of ==, as appropriate.
- * SLList.h, DLList.h: Fix destructors so that clear() is
- called directly in the SLList<T>/DLList<T> destructor, not
- in the BaseSLList/BaseDLList destructor, since the vtable
- pointer gets reset by the time the latter is called.
-
-Thu Nov 19 17:54:43 1992 Per Bothner (bothner@cygnus.com)
-
- * BitString.cc, BitSet.cc: Use ANSI byte-string functions
- instead of BSD ones: bcmp->memcmp, bzero->memset, bcopy->memcpy.
-
-Tue Nov 17 21:50:09 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * Complex.cc: Use standard fabs() in preference to inline
- overloaded function abs() defined in builtin.h.
- * DLList.h, SLList.h: Make destructors virtual, to shut up
- a warning.
-
-Thu Oct 29 16:06:38 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * GetOpt.h (GetOpt): Make GetOpt::ordering be a regular field,
- not a static member. (No reason it should be static.)
- * GetOpt.cc: Remove no-longer-needed dedinition of
- GetOpt::ordering (- which had visibility problems).
-
-Tue Oct 27 14:50:52 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * Integer.cc, Sample.cc, SmplStat.cc, SmplHist.cc: Replace
- non-ANSI HUGE by standard HUGE_VAL or DBL_MAX as appropriate.
-
-Wed Oct 21 15:22:32 1992 Per Bothner (bothner@cygnus.com)
-
- * BitSet.cc (BitSetalloc, BitSetresize): Merged in a bug fix
- from Kevin Karplus <karplus@cse.ucsc.edu>.
- * BitSet.ccANSI-fy: bcopy -> memcpy, bzero -> memset.
- * Integer.h: Un-optimize non-working operator %=.
-
-Fri Oct 16 15:35:51 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * Obstack.h: ANSI-fy: bcopy -> memcpy.
- * builtin.h: Supposedly, HPUX defines __hpux, not hpux.
-
-Fri Sep 25 11:13:53 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * Obstack.cc (Obstack::_free): Use delete [], not plain delete.
-
- * {SLList,DLList}.{h,cc}: New template-based versions derived
- from gen/{SLList,DLList}.{h,cc}P.
- * Makefile.in: Make {SLList,DLList}.o.
-
-Thu Sep 10 22:48:49 1992 Ian Lance Taylor (ian@cygnus.com)
-
- * CursesW.h, CursesW.cc: don't do anything if the new
- configuration flag _G_HAVE_CURSES is zero.
-
-Mon Aug 31 22:52:17 1992 Brendan Kehoe (brendan@rtl.cygnus.com)
-
- * BitString.h (BitPattern::BitPatterntoa): Fix comments around
- default parameters.
-
-Mon Aug 31 15:44:07 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * gen/Vec.ccP (<T>Vec::index): Use EQ instead of ==.
- * BitString.h (BitPatterntoa friend of BitPattern):
- Comment out default parameters to avoid duplication (that
- cfront -and ANSI- frown on).
- * String.h (SubString::contains) Fix parameter list
- passed to String::search.
- * generic.h: Comment out genericerror() declaration, since
- we don't support it.
-
-Mon Aug 10 15:05:42 1992 Per Bothner (bothner@cygnus.com)
-
- * gen/defs.hP: New macro HASHTABLE_TOO_CROWDED to decide
- when to rehash a hash table (specifically, when 7/8 full).
- * gen/{VHSet.ccP,VHBag.ccP,vHMap.ccP}: Use HASHTABLE_TOO_CROWDED
- to control when hash table needs to grow.
-
- * GetOpt.cc (GetOpt::operator()): Replace index() -> strchr().
- * Integer.{h,cc}: Add Integer::Integer(unsigned long)
- constructor in addition to Integer::Integer(long).
- * Rational.h: Add Rational constructors taking (unsigned long).
- * Makefile.in (XTRAFLAGS): Fix.
-
-Mon Jul 13 06:52:57 1992 Michael Tiemann (tiemann@rtl.cygnus.com)
-
- * Regex.cc (Regex::Regex): Cast malloc calls, since G++ no longer
- freely converts void* to char* (in accordance with dpANSI spec).
-
-Fri Jun 26 11:23:32 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * BitString.cc: Replace bcopy->memmove;
- add const to cast; remove two unused variables.
- * CursesW.h, builtin.h: Kludges for hpux.
- * Integer.cc: Replace MAXLONG/MINLONG by ANSI standard
- LONG_MAX/LONG_MIN.
- * Integer.h, Integer.cc, builtin.h: Protect setbit function
- name from macro-expansion (on systems that define setbit as
- a macro is sys/param.h) by putting parentheses around it.
- * Obstack.h, regex.cc: Use proper const-ness in casts,
- * std.h: #include <_G_config.h>, since it may not be
- included otherwise if we're not using ../g++-include.
-
-Sat Jun 13 20:05:24 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * gen/List.ccP: Remove redundant 'inline'.
- * gen/{SLList,DLList}.{hP,ccP}: Make 'copy-ee' arg of copy
- constructors and 2nd arg of operator= be const.
- * CursesW.h: Make more robust wrt const vs. non-const
- formal parameters to support SVR4.
- * EH.cc, EH2.c: Removed (since currently not used).
- * GetOpt.cc: alloca() kludges.
- * {BitSet,BitString}.{cc,h}, Integer.cc, String.cc: Remove
- dependence on non-standard <values.h> in favor of standard
- CHAR_BIT from <limits.h>
- * Makefile.in: Fix *clean stuff.
- * math-68881.h: Updated versions form gcc2.
- * timer.cc: #include <sys/param.h> before <sys/times.h>.
- Use !_G_HAVE_SYS_RESOURCE, not !defined(_G_HAVE_SYS_RESOURCE).
-
-Mon Jun 15 19:57:45 1992 Mike Stump (mrs at cygnus.com)
-
- * regex.cc (re_compile_pattern): Add const to p, p1, pend and p1.
-
-Wed Jun 3 16:49:51 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * Fix.cc (Fix::printon): Fix fmtflags -> ios::fmtflags.
- * Makefile.in: Hook (for Linux) for not putting regex.o into lib.
- * Regex.cc (Regex::Regex): Replace cast.
- * regex.h (RE_DUP_MAX): Gross hack for AIX.
- * regex.h, regex.cc, Regex.c: Change 2nd arg of
- re_compile_pattern from (char*) to (const char*).
- * timer.cc: Use explicit USE_TIMES to control use of
- times() instead of getrusage(). Supposedly, some systems
- have <sys/resource.h>, but not getrusage().
-
-Fri May 29 11:51:44 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * Fix.cc (Fix::printon):: Re-write to use operator<< instead
- of the non-standard ostream::form.
- * builtin.h: Removed redundant declarations of min() and max()
- (available in minmax.h).
- * malloc.c, regex.cc: Replace #ifdef USG by #ifdef _G_SYSV.
- * math-68881.h: Update from gcc (should be removed!),
- * minmax.h: Removed redundant 'signed' qualifiers.
- Add (char) versiosn of min and max, and made the (signed
- char) version conditional #ifndef _G_BROKEN_SIGNED_CHAR.
- * regex.cc: Better definitions of SIGN_EXTEND_CHAR.
- * new.cc: Change //-comment to /*comment*/ for old cpp-s.
- * Binomial.h, DiscUnif.h, Erlang.h, Geom.h, HypGeom.h, LogNorm.h,
- NegExp.h, Normal.h, Poisson.h, Uniform.h, Weibull.h,
- gen/{AVLMap.hP,AVec.hP,RAVLMap.hP,SplayMap.hP}: Replace
- anachronistic base constructor syntax :(args) with :Base(args).
- * gen/stdlib.h (_do_treeify): #include <stdlib.h> (for abort()).
- * gen/{CHNode,SplayNode,Vec}.hP: Include <T>.defs.h.
- * gen/{FPlex,RPlex,XPlex}.{h,cc}P: Remove redundant (and
- conflicting - according to cfront) append and prepend methods.
- * gen/SkipBag.ccP (SKipBag::seek): Add cast (for cfront's sake).
- * gen/SkipMap.hP: Fixed visibilty bug.
- * gen/Vec.ccP (operator==): Use EQ macro, instead of !=.
-
-Thu May 14 00:07:29 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * String.cc (operator>> and readline): Clean up setting
- of ios::flags().
-
- * osfcn.h: Only #include sys/socket.h and sys/resource.h
- if these are available (according to _G_config.h).
- * timer.cc: If HZ is undefined, define it as CLK_TCK (Posix, sort of).
- * gen/Lisp.hP: #include "<T>.defs.h", as done elsewhere.
-
-Sat May 9 12:34:09 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * std.h: Add strcasecmp().
-
-Wed May 6 01:33:05 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * gen/SLList.{hP,ccP}: Make argument of copy constructor
- be const.
-
- * CursesW.h: Add more kludges to convert macros into inline
- functions. This is so we can use /usr/include/curses.h.
- * CursesW.h: Replace uses of old cbool typedef by int.
- * bool.h: Add a comment deprecating its use.
-
-Tue May 5 15:19:24 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * CursesW.h: Fix typo.
- * curses.cc: Removed: No longer needed.
- * Makefile.in: Don't build curses.o.
-
-Sat May 2 16:42:28 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- VMS changes from Eric Youngdale.
- * AllocRing.cc, Obstack.cc: Remove some a VMS hack that
- is no longer needed.
- * CursesW.cc, regex.h: More VMS stuff.
-
-Thu Apr 30 13:52:30 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * timer.cc: Use the more specific _G_HAVE_SYS_RESOURCE
- instead of the vague _G_SYSV.
- * delete.cc: Redundant with gcc/libgcc.2.c.
- * malloc.c: Remove junk that is now in gcc/libgcc2.c.
-
-Thu Apr 30 09:11:21 1992 K. Richard Pixley (rich@cygnus.com)
-
- * Makefile.in: make CFLAGS work from command line to make.
-
-Mon Apr 20 14:42:34 1992 Per Bothner (bothner@cygnus.com)
-
- * String.cc (String::OK): Re-arrange to avoid
- not-reached warning.
- * Makefile.in: Make 'touch stamp' not print out.
-
-Fri Apr 17 12:01:33 1992 Per Bothner (bothner at PersSony)
-
- * Integer.h, ...: Moved from ../g++-include. The plan
- is that ../g++-include only contains wrappers around
- standard C headers. It would not be needed on systems
- where the C header already support C++ (e.g. SVR4, Linux).
- * gen: Directory moved from ../g++-include.
- * CursesW.h, CursesW.cc: Handle using /usr/include/curses.h.
- * {Integer,Rational}.{h,cc}: Add a convention that an IntRep
- whose sz==0 is staticly allocated and should not be deleted
- when an Integer is destroyed. Define static INtReps for -1, 0,
- and 1, and use those where appropriate (including default
- constructors for Integer and Rational).
- * Integer.cc, Rational.cc, String.cc: Make Integer::OK(),
- Rational::OK() and String::OK() more robust.
- * RNG.cc: Don't give RNG::{single,double}Mantissa initial
- values, since that may be too late if there is a static
- RNG. Instead, initialize them in RNG::RNG.
- * bcopy.cc: Removed (use libiberty version).
- * timer.cc: Include <_G_config.h> to get __G_SYSV definition.
-
-Tue Mar 24 16:15:40 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * Rational.cc: Added Rational::fits_in_float() and
- fits_in_double() methods. Suggested/requested by
- Wendell Craig Baker <wbaker@ic.berkeley.edu>/
-
-Mon Mar 23 16:34:16 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * BitSet.cc, BitString.cc, Fix.cc: Add printon() methods,
- and changed operator<< functions to use printon().
- Deprecate use of *toa-style functions that use AllocRing;
- the new printon() methods do not.
- * Integer.cc: Added Integer::printon; fixed up operator<<
- to use opfx() as it's supposed to.
-
-Fri Mar 6 15:25:55 1992 Per Bothner (bothner@cygnus.com)
-
- * gnulib3.c: Removed obsolete file.
-
-Thu Mar 5 16:40:09 1992 Per Bothner (bothner@cygnus.com)
-
- * *.cc: Experiemnted with for each Foo.cc, adding
- '#define _COMPILING_Foo' to control compilation of inlines in
- Foo.h, then undid that change (see discussion in
- ../g_++-include/ChangeLog). Net difference is thus some
- minor tweaking.
-
- * regex.cc: Tweaks to remove warnings.
-
-Tue Mar 3 17:23:57 1992 Per Bothner (bothner@cygnus.com)
-
- * BitSet.cc: Move BitSet::clear() here from BitSet.h,
- and make non-inlined.
-
-Sun Mar 1 16:26:07 1992 Per Bothner (bothner@cygnus.com)
-
- * BitSet.cc, BitString.cc, Integer.cc, Rational.cc, String.cc:
- Make error() methods return void, not volatile void, since
- sometimes these error handlers *do* return.
- * Fix.cc: Fix parenthesization error.
-
-Sat Feb 29 14:07:32 1992 Michael Tiemann (tiemann@cygnus.com)
-
- * regex.cc (re_compile_pattern): Back out source code change that
- was used to workaround a bug in g++.
-
-Wed Feb 26 18:04:40 1992 K. Richard Pixley (rich@cygnus.com)
-
- * Makefile.in, configure.in: removed traces of namesubdir,
- -subdirs, $(subdir), $(unsubdir), some rcs triggers. Forced
- copyrights to '92, changed some from Cygnus to FSF.
-
-Wed Feb 26 12:37:43 1992 Per Bothner (bothner at cygnus.com)
-
- * BitSet.cc, BitString.cc, Integer.cc, Rational.cc,
- String.cc, error.cc: Use new _VOLATILE_VOID macro (from
- builtin.h) (to allow compilation by other C++ compilers).
- * BitSet.cc,regex.cc: #include <string.h>.
-
-Thu Feb 20 21:46:17 1992 Per Bothner (bothner at cygnus.com)
-
- * Regex.cc, regex.cc: Add some needed casts.
-
-Wed Feb 19 23:32:38 1992 Per Bothner (bothner at cygnus.com)
-
- * timer.cc: Include sys/types.h, since it is no
- longer automatically included by time.h.
- * regex.cc: Added a comment about being based on regex.c.
-
-Tue Feb 11 11:24:18 1992 Per Bothner (bothner at cygnus.com)
-
- * String.cc: Only skip ws if appropriate.
- * Complex.cc, Fix.cc, Integer.cc, Rational.cc:
- Apply fix below to other cases of operator>>.
- (And if the format is bad, set failbit, not badbit.)
-
- * String.cc (String::operator>>, readline):
- Use ipfx(0) instead of good() (unless _OLD_STREAMS).
- Thus make sure to set the failbit (to prevent
- infinite loops if eofbit is set without failbit).
-
-Mon Feb 10 11:20:13 1992 Per Bothner (bothner at rtl.cygnus.com)
-
- * String.C (String::operator const char*): Don't
- use the str() function to copy into an AllocRing
- (since we're phasing out use of AllocRings).
-
-Wed Jan 29 12:51:05 1992 Per Bothner (bothner at cygnus.com)
-
- * Sample.cc: Rename #included files to current names.
-
-Fri Jan 24 15:51:50 1992 Per Bothner (bothner at cygnus.com)
-
- * Makefile.in, configure.in: Some common rules moved to Make.defs.
-
- * new.cc, delete.cc: Include stdlib.h instead of obsolete malloc.h.
-
-Fri Jan 17 15:03:28 1992 Per Bothner (bothner at cygnus.com)
-
- Merge in Doug Lea's latest version; other fixes.
- * Most files: Replaced copyright notice (the old
- ones claimed to be part of GNU CC).
- * Makefile.in (depend): Tweak it.
- * ACG.cc, AllocRing.cc, BitSet.cc, BitString.cc, GetOpt.cc,
- RNG.cc, dtoa.cc: Minor improvements.
- * BitString.cc, Fix16.cc, Fix24.cc, String.cc: Change (int)
- to (unsigned int) various places, inspired by gcc-2 warnings.
- * Complex.cc, CursesW.cc, Fix.cc, Integer.cc, Rational.cc,
- String.cc: Various changes to allow use with either the
- old stream facility or the new iostream facility.
- * regex.cc: Use 'new char[]' instead of 'malloc()'.
- * bcopy.cc: Minor changes. Rename bcopy -> libgxx_bcopy.
- * malloc.c: Use size_t consistently.
- * regex.cc: New version from FSF (C++ -ified).
- * minmax.cc: New file.
- * MIN.cc, MAX.cc, std.cc: Removed.
-
-Sat Jan 11 14:44:17 1992 Michael Tiemann (tiemann at cygnus.com)
-
- * CursesW.cc, GetOpt.cc: Don't declare any static class members
- `static' at top-level.
-
-Sun Jan 5 00:12:05 1992 Per Bothner (bothner at cygnus.com)
-
- * Makefile.in, configure.in: Automated 'make depend' support.
- * String.cc: For now, use _bad instead of ios::badbit.
- * File.cc, Filebuf.cc, PlotFile.cc, SFile.cc, filebuf.cc,
- form.cc, istream.cc, itoa.cc, ostream.cc, streambuf.cc:
- Moved to ../old-stream.
- * Makefile.in: Move rules for Making the stream stuff to
- ../old-stream/Makefile.in.
-
-Fri Jan 3 17:00:40 1992 Per Bothner (bothner at cygnus.com)
-
- * Integer.cc, BitSet.cc, BitString.cc, Rational.cc:
- Add #include <builtin.h> as needed. It was included by the
- old stream.h, but not by the new iostream.h.
- * Integer.cc: Merged in Doug Lea's changes to avoid
- signed/unsigned warnings.
- * Fix.cc, String.cc: Fix some portabilty problems that
- depended on the old stream code.
-
-Tue Dec 31 18:19:15 1991 Per Bothner (bothner at cygnus.com)
-
- * Makefile.in: Move common definitions to ../Make.defs.
- * configure.in: Define host_makefile_frag to pull in Make.defs.
-
-Sat Dec 28 16:47:38 1991 Michael Tiemann (tiemann at cygnus.com)
-
- * regex.cc (re_compile_pattern,re_comp,main): Use `malloc' instead
- of `new char[]' since we need to call realloc, and that doesn't
- work with arrays allocated by new.
- * Regex.cc (Regex::Regex): Ditto.
-
diff --git a/contrib/libg++/libg++/src/Complex.h b/contrib/libg++/libg++/src/Complex.h
deleted file mode 100644
index 242f06e16644..000000000000
--- a/contrib/libg++/libg++/src/Complex.h
+++ /dev/null
@@ -1,10 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-
-#ifndef _Complex_h
-#define _Complex_h
-
-// Use the ANSI complex number template.
-#include <complex>
-typedef complex<double> Complex;
-
-#endif
diff --git a/contrib/libg++/libg++/src/CursesW.cc b/contrib/libg++/libg++/src/CursesW.cc
deleted file mode 100644
index c80f33d47da1..000000000000
--- a/contrib/libg++/libg++/src/CursesW.cc
+++ /dev/null
@@ -1,257 +0,0 @@
-/*
-Copyright (C) 1989, 1992 Free Software Foundation
- written by Eric Newton (newton@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <stdio.h>
-#include <stdarg.h>
-#include <builtin.h>
-#ifndef _OLD_STREAMS
-#include <strstream.h>
-#endif
-// Include CurseW.h and/or curses.h *after* iostream includes,
-// because curses.h defines a clear macro that conflicts with iostream. Sigh.
-#include <CursesW.h>
-
-#if _G_HAVE_CURSES
-
-#ifndef OK
-#define OK (1)
-#endif
-
-int CursesWindow::count = 0;
-
-/*
- * C++ interface to curses library.
- *
- */
-
-#if !defined(_IO_MAGIC) && !defined(HAVE_VSCANF) &&!defined vsscanf
-extern "C" int _doscan(FILE *, const char*, va_list args);
-
-static int vsscanf(char *buf, const char * fmt, va_list args)
-{
- FILE b;
-#ifdef _IOSTRG
- b._flag = _IOREAD|_IOSTRG;
-#else
- b._flag = _IOREAD;
-#endif
- b._base = (unsigned char*)buf;
- b._ptr = (unsigned char*)buf;
- b._cnt = BUFSIZ;
- return _doscan(&b, fmt, args);
-}
-#endif
-
-/*
- * varargs functions are handled conservatively:
- * They interface directly into the underlying
- * _doscan, _doprnt and/or vfprintf routines rather than
- * assume that such things are handled compatibly in the curses library
- */
-
-int CursesWindow::scanw(const char * fmt, ...)
-{
- va_list args;
- va_start(args, fmt);
-#ifdef VMS
- int result = wscanw(w , fmt , args);
-#else /* NOT VMS */
- char buf[BUFSIZ];
- int result = wgetstr(w, buf);
- if (result == OK) {
-
-#ifdef _IO_MAGIC /* GNU iostreams */
- strstreambuf ss(buf, BUFSIZ);
- result = ss.vscan(fmt, args);
-#else
- result = vsscanf(buf, fmt, args);
-#endif
- }
-#endif /* !VMS */
- va_end(args);
- return result;
-}
-
-int CursesWindow::mvscanw(int y, int x, const char * fmt, ...)
-{
- va_list args;
- va_start(args, fmt);
- char buf[BUFSIZ];
- int result = wmove(w, y, x);
- if (result == OK)
-#ifdef VMS
- result=wscanw(w , fmt , args);
-#else /* !VMS */
- {
- result = wgetstr(w, buf);
- if (result == OK) {
-#ifdef _IO_MAGIC /* GNU iostreams */
- strstreambuf ss(buf, BUFSIZ);
- result = ss.vscan(fmt, args);
-#else
- result = vsscanf(buf, fmt, args);
-#endif
- }
- }
-#endif /* !VMS */
- va_end(args);
- return result;
-}
-
-int CursesWindow::printw(const char * fmt, ...)
-{
- va_list args;
- va_start(args, fmt);
- char buf[BUFSIZ];
- vsprintf(buf, fmt, args);
- va_end(args);
- return waddstr(w, buf);
-}
-
-
-int CursesWindow::mvprintw(int y, int x, const char * fmt, ...)
-{
- va_list args;
- va_start(args, fmt);
- int result = wmove(w, y, x);
- if (result == OK)
- {
- char buf[BUFSIZ];
- vsprintf(buf, fmt, args);
- result = waddstr(w, buf);
- }
- va_end(args);
- return result;
-}
-
-CursesWindow::CursesWindow(int lines, int cols, int begin_y, int begin_x)
-{
- if (count==0)
- initscr();
-
- w = newwin(lines, cols, begin_y, begin_x);
- if (w == 0)
- {
- (*lib_error_handler)("CursesWindow", "Cannot construct window");
- }
-
- alloced = 1;
- subwins = par = sib = 0;
- count++;
-}
-
-CursesWindow::CursesWindow(WINDOW* &window)
-{
- if (count==0)
- initscr();
-
- w = window;
- alloced = 0;
- subwins = par = sib = 0;
- count++;
-}
-
-CursesWindow::CursesWindow(CursesWindow& win, int l, int c,
- int by, int bx, char absrel)
-{
-
- if (absrel == 'r') // relative origin
- {
- by += win.begy();
- bx += win.begx();
- }
-
- // Even though we treat subwindows as a tree, the standard curses
- // library needs the `subwin' call to link to the root in
- // order to correctly perform refreshes, etc.
-
- CursesWindow* root = &win;
- while (root->par != 0) root = root->par;
-
- w = subwin(root->w, l, c, by, bx);
- if (w == 0)
- {
- (*lib_error_handler)("CursesWindow", "Cannot construct subwindow");
- }
-
- par = &win;
- sib = win.subwins;
- win.subwins = this;
- subwins = 0;
- alloced = 1;
- count++;
-}
-
-
-void CursesWindow::kill_subwindows()
-{
- for (CursesWindow* p = subwins; p != 0; p = p->sib)
- {
- p->kill_subwindows();
- if (p->alloced)
- {
- if (p->w != 0)
- ::delwin(p->w);
- p->alloced = 0;
- }
- p->w = 0; // cause a run-time error if anyone attempts to use...
- }
-}
-
-CursesWindow::~CursesWindow()
-{
- kill_subwindows();
-
- if (par != 0) // Snip us from the parent's list of subwindows.
- {
- CursesWindow * win = par->subwins;
- CursesWindow * trail = 0;
- for (;;)
- {
- if (win == 0)
- break;
- else if (win == this)
- {
- if (trail != 0)
- trail->sib = win->sib;
- else
- par->subwins = win->sib;
- break;
- }
- else
- {
- trail = win;
- win = win->sib;
- }
- }
- }
-
- if (alloced && w != 0)
- delwin(w);
-
- --count;
- if (count == 0)
- endwin();
- else if (count < 0) // cannot happen!
- {
- (*lib_error_handler)("CursesWindow", "Too many windows destroyed");
- }
-}
-
-#endif /* _G_HAVE_CURSES */
diff --git a/contrib/libg++/libg++/src/CursesW.h b/contrib/libg++/libg++/src/CursesW.h
deleted file mode 100644
index 5bff08df2582..000000000000
--- a/contrib/libg++/libg++/src/CursesW.h
+++ /dev/null
@@ -1,603 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-
-/*
-Copyright (C) 1989 Free Software Foundation
- written by Eric Newton (newton@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifndef _CursesWindow_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _CursesWindow_h
-
-#include <_G_config.h>
-
-#if defined(__bsdi__) || defined(__NetBSD__) || defined(__FreeBSD__)
-#define _begx begx
-#define _begy begy
-#define _maxx maxx
-#define _maxy maxy
-#endif
-
-#if _G_HAVE_CURSES
-// Even many system which mostly have C++-ready header files,
-// do not have C++-ready curses.h.
-extern "C" {
-#include <curses.h>
-}
-
-/* SCO 3.2v4 curses.h includes term.h, which defines lines as a macro.
- Undefine it here, because CursesWindow uses lines as a method. */
-#undef lines
-
-// "Convert" macros to inlines, if needed.
-#ifdef addch
-inline int (addch)(char ch) { return addch(ch); }
-#undef addch
-#endif
-#ifdef addstr
-/* The (char*) cast is to hack around missing const's */
-inline int (addstr)(const char * str) { return addstr((char*)str); }
-#undef addstr
-#endif
-#ifdef clear
-inline int (clear)() { return clear(); }
-#undef clear
-#endif
-#ifdef clearok
-inline int (clearok)(WINDOW* win, int bf) { return clearok(win, bf); }
-#undef clearok
-#else
-extern "C" int clearok(WINDOW*, int);
-#endif
-#ifdef clrtobot
-inline int (clrtobot)() { return clrtobot(); }
-#undef clrtobot
-#endif
-#ifdef clrtoeol
-inline int (clrtoeol)() { return clrtoeol(); }
-#undef clrtoeol
-#endif
-#ifdef delch
-inline int (delch)() { return delch(); }
-#undef delch
-#endif
-#ifdef deleteln
-inline int (deleteln)() { return deleteln(); }
-#undef deleteln
-#endif
-#ifdef erase
-inline int (erase)() { return erase(); }
-#undef erase
-#endif
-#ifdef flushok
-inline int (flushok)(WINDOW* _win, int _bf) { return flushok(_win, _bf); }
-#undef flushok
-#else
-#define _no_flushok
-#endif
-#ifdef getch
-inline int (getch)() { return getch(); }
-#undef getch
-#endif
-#ifdef getstr
-inline int (getstr)(char *_str) { return getstr(_str); }
-#undef getstr
-#endif
-#ifdef getyx
-inline void (getyx)(WINDOW* win, int& y, int& x) { getyx(win, y, x); }
-#undef getyx
-#endif
-#ifdef inch
-inline int (inch)() { return inch(); }
-#undef inch
-#endif
-#ifdef insch
-inline int (insch)(char c) { return insch(c); }
-#undef insch
-#endif
-#ifdef insertln
-inline int (insertln)() { return insertln(); }
-#undef insertln
-#endif
-#ifdef leaveok
-inline int (leaveok)(WINDOW* win, int bf) { return leaveok(win, bf); }
-#undef leaveok
-#else
-extern "C" int leaveok(WINDOW* win, int bf);
-#endif
-#ifdef move
-inline int (move)(int x, int y) { return move(x, y); }
-#undef move
-#endif
-#ifdef refresh
-inline int (rfresh)() { return refresh(); }
-#undef refresh
-#endif
-#ifdef scrollok
-inline int (scrollok)(WINDOW* win, int bf) { return scrollok(win, bf); }
-#undef scrollok
-#else
-#ifndef hpux
-extern "C" int scrollok(WINDOW*, int);
-#else
-extern "C" int scrollok(WINDOW*, char);
-#endif
-#endif
-#ifdef standend
-inline int (standend)() { return standend(); }
-#undef standend
-#endif
-#ifdef standout
-inline int (standout)() { return standout(); }
-#undef standout
-#endif
-#ifdef wstandend
-inline int (wstandend)(WINDOW *win) { return wstandend(win); }
-#undef wstandend
-#endif
-#ifdef wstandout
-inline int (wstandout)(WINDOW *win) { return wstandout(win); }
-#undef wstandout
-#endif
-#ifdef winch
-inline int (winch)(WINDOW* win) { return winch(win); }
-#undef winch
-#endif
-
-/* deal with conflicting macros in ncurses.h which is SYSV based*/
-#ifdef box
-inline int _G_box(WINDOW* win, chtype v, chtype h) {return box(win, v, h); }
-#undef box
-inline int box(WINDOW* win, chtype v, chtype h) {return _G_box(win, v, h); }
-#endif
-#ifdef scroll
-inline int (scroll)(WINDOW* win) { return scroll(win); }
-#undef scroll
-#endif
-#ifdef touchwin
-inline int (touchwin)(WINDOW* win) { return touchwin(win); }
-#undef touchwin
-#endif
-
-#ifdef mvwaddch
-inline int (mvwaddch)(WINDOW *win, int y, int x, char ch)
-{ return mvwaddch(win, y, x, ch); }
-#undef mvwaddch
-#endif
-#ifdef mvwaddstr
-inline int (mvwaddstr)(WINDOW *win, int y, int x, const char * str)
-{ return mvwaddstr(win, y, x, (char*)str); }
-#undef mvwaddstr
-#endif
-#ifdef mvwdelch
-inline int (mvwdelch)(WINDOW *win, int y, int x) { return mvwdelch(win, y, x);}
-#undef mvwdelch
-#endif
-#ifdef mvwgetch
-inline int (mvwgetch)(WINDOW *win, int y, int x) { return mvwgetch(win, y, x);}
-#undef mvwgetch
-#endif
-#ifdef mvwgetstr
-inline int (mvwgetstr)(WINDOW *win, int y, int x, char *str)
-{return mvwgetstr(win,y,x, str);}
-#undef mvwgetstr
-#endif
-#ifdef mvwinch
-inline int (mvwinch)(WINDOW *win, int y, int x) { return mvwinch(win, y, x);}
-#undef mvwinch
-#endif
-#ifdef mvwinsch
-inline int (mvwinsch)(WINDOW *win, int y, int x, char c)
-{ return mvwinsch(win, y, x, c); }
-#undef mvwinsch
-#endif
-
-#ifdef mvaddch
-inline int (mvaddch)(int y, int x, char ch)
-{ return mvaddch(y, x, ch); }
-#undef mvaddch
-#endif
-#ifdef mvaddstr
-inline int (mvaddstr)(int y, int x, const char * str)
-{ return mvaddstr(y, x, (char*)str); }
-#undef mvaddstr
-#endif
-#ifdef mvdelch
-inline int (mvdelch)(int y, int x) { return mvdelch(y, x);}
-#undef mvdelch
-#endif
-#ifdef mvgetch
-inline int (mvgetch)(int y, int x) { return mvgetch(y, x);}
-#undef mvgetch
-#endif
-#ifdef mvgetstr
-inline int (mvgetstr)(int y, int x, char *str) {return mvgetstr(y, x, str);}
-#undef mvgetstr
-#endif
-#ifdef mvinch
-inline int (mvinch)(int y, int x) { return mvinch(y, x);}
-#undef mvinch
-#endif
-#ifdef mvinsch
-inline int (mvinsch)(int y, int x, char c)
-{ return mvinsch(y, x, c); }
-#undef mvinsch
-#endif
-
-/*
- *
- * C++ class for windows.
- *
- *
- */
-
-class CursesWindow
-{
-protected:
- static int count; // count of all active windows:
- // We rely on the c++ promise that
- // all otherwise uninitialized
- // static class vars are set to 0
-
- WINDOW * w; // the curses WINDOW
-
- int alloced; // true if we own the WINDOW
-
- CursesWindow* par; // parent, if subwindow
- CursesWindow* subwins; // head of subwindows list
- CursesWindow* sib; // next subwindow of parent
-
- void kill_subwindows(); // disable all subwindows
-
-public:
- CursesWindow(WINDOW* &window); // useful only for stdscr
-
- CursesWindow(int lines, // number of lines
- int cols, // number of columns
- int begin_y, // line origin
- int begin_x); // col origin
-
- CursesWindow(CursesWindow& par, // parent window
- int lines, // number of lines
- int cols, // number of columns
- int by, // absolute or relative
- int bx, // origins:
- char absrel = 'a'); // if `a', by & bx are
- // absolute screen pos,
- // else if `r', they are
- // relative to par origin
- ~CursesWindow();
-
-// terminal status
- int lines(); // number of lines on terminal, *not* window
- int cols(); // number of cols on terminal, *not* window
-
-// window status
- int height(); // number of lines in this window
- int width(); // number of cols in this window
- int begx(); // smallest x coord in window
- int begy(); // smallest y coord in window
- int maxx(); // largest x coord in window
- int maxy(); // largest x coord in window
-
-// window positioning
- int move(int y, int x);
-
-// coordinate positioning
- void getyx(int& y, int& x);
- int mvcur(int sy, int ey, int sx, int ex);
-
-// input
- int getch();
- int getstr(char * str);
- int scanw(const char *, ...);
-
-// input + positioning
- int mvgetch(int y, int x);
- int mvgetstr(int y, int x, char * str);
- int mvscanw(int, int, const char*, ...);
-
-// output
- int addch(const char ch);
- int addstr(const char * str);
- int printw(const char * fmt, ...);
- int inch();
- int insch(char c);
- int insertln();
-
-// output + positioning
- int mvaddch(int y, int x, char ch);
- int mvaddstr(int y, int x, const char * str);
- int mvprintw(int y, int x, const char * fmt, ...);
- int mvinch(int y, int x);
- int mvinsch(int y, int x, char ch);
-
-// borders
- int box(char vert, char hor);
-
-// erasure
- int erase();
- int clear();
- int clearok(int bf);
- int clrtobot();
- int clrtoeol();
- int delch();
- int mvdelch(int y, int x);
- int deleteln();
-
-// screen control
- int scroll();
- int scrollok(int bf);
- int touchwin();
- int refresh();
- int leaveok(int bf);
-#ifndef _no_flushok
- int flushok(int bf);
-#endif
- int standout();
- int standend();
-
-// multiple window control
- int overlay(CursesWindow &win);
- int overwrite(CursesWindow &win);
-
-
-// traversal support
- CursesWindow* child();
- CursesWindow* sibling();
- CursesWindow* parent();
-};
-
-
-inline int CursesWindow::begx()
-{
- return w->_begx;
-}
-
-inline int CursesWindow::begy()
-{
- return w->_begy;
-}
-
-inline int CursesWindow::maxx()
-{
- return w->_maxx;
-}
-
-inline int CursesWindow::maxy()
-{
- return w->_maxy;
-}
-
-inline int CursesWindow::height()
-{
- return maxy() - begy() + 1;
-}
-
-inline int CursesWindow::width()
-{
- return maxx() - begx() + 1;
-}
-
-inline int CursesWindow::box(char vert, char hor)
-{
- return ::box(w, vert, hor);
-}
-
-inline int CursesWindow::overlay(CursesWindow &win)
-{
- return ::overlay(w, win.w);
-}
-
-inline int CursesWindow::overwrite(CursesWindow &win)
-{
- return ::overwrite(w, win.w);
-}
-
-inline int CursesWindow::scroll()
-{
- return ::scroll(w);
-}
-
-
-inline int CursesWindow::touchwin()
-{
- return ::touchwin(w);
-}
-
-inline int CursesWindow::addch(const char ch)
-{
- return ::waddch(w, ch);
-}
-
-inline int CursesWindow::addstr(const char * str)
-{
- // The (char*) cast is to hack around prototypes in curses.h that
- // have const missing in the parameter lists. [E.g. SVR4]
- return ::waddstr(w, (char*)str);
-}
-
-inline int CursesWindow::clear()
-{
- return ::wclear(w);
-}
-
-inline int CursesWindow::clrtobot()
-{
- return ::wclrtobot(w);
-}
-
-inline int CursesWindow::clrtoeol()
-{
- return ::wclrtoeol(w);
-}
-
-inline int CursesWindow::delch()
-{
- return ::wdelch(w);
-}
-
-inline int CursesWindow::deleteln()
-{
- return ::wdeleteln(w);
-}
-
-inline int CursesWindow::erase()
-{
- return ::werase(w);
-}
-
-inline int CursesWindow::getch()
-{
- return ::wgetch(w);
-}
-
-inline int CursesWindow::getstr(char * str)
-{
- return ::wgetstr(w, str);
-}
-
-inline int CursesWindow::inch()
-{
- return winch(w);
-}
-
-inline int CursesWindow::insch(char c)
-{
- return ::winsch(w, c);
-}
-
-inline int CursesWindow::insertln()
-{
- return ::winsertln(w);
-}
-
-inline int CursesWindow::move(int y, int x)
-{
- return ::wmove(w, y, x);
-}
-
-
-inline int CursesWindow::mvcur(int sy, int ey, int sx, int ex)
-{
- return ::mvcur(sy, ey, sx,ex);
-}
-
-inline int CursesWindow::mvaddch(int y, int x, char ch)
-{
- return (::wmove(w, y, x)==ERR) ? ERR : ::waddch(w, ch);
-}
-
-inline int CursesWindow::mvgetch(int y, int x)
-{
- return (::wmove(w, y, x)==ERR) ? ERR : ::wgetch(w);
-}
-
-inline int CursesWindow::mvaddstr(int y, int x, const char * str)
-{
- return (::wmove(w, y, x)==ERR) ? ERR : ::waddstr(w, (char*)str);
-}
-
-inline int CursesWindow::mvgetstr(int y, int x, char * str)
-{
- return (::wmove(w, y, x)==ERR) ? ERR : ::wgetstr(w, str);
-}
-
-inline int CursesWindow::mvinch(int y, int x)
-{
- return (::wmove(w, y, x)==ERR) ? ERR : ::winch(w);
-}
-
-inline int CursesWindow::mvdelch(int y, int x)
-{
- return (::wmove(w, y, x)==ERR) ? ERR : ::wdelch(w);
-}
-
-inline int CursesWindow::mvinsch(int y, int x, char ch)
-{
- return (::wmove(w, y, x)==ERR) ? ERR : ::winsch(w, ch);
-}
-
-inline int CursesWindow::refresh()
-{
- return ::wrefresh(w);
-}
-
-inline int CursesWindow::clearok(int bf)
-{
- return ::clearok(w,bf);
-}
-
-inline int CursesWindow::leaveok(int bf)
-{
- return ::leaveok(w,bf);
-}
-
-inline int CursesWindow::scrollok(int bf)
-{
- return ::scrollok(w,bf);
-}
-
-#ifndef _no_flushok
-inline int CursesWindow::flushok(int bf)
-{
- return ::flushok(w, bf);
-}
-#endif
-
-inline void CursesWindow::getyx(int& y, int& x)
-{
- ::getyx(w, y, x);
-}
-
-inline int CursesWindow::standout()
-{
- return ::wstandout(w);
-}
-
-inline int CursesWindow::standend()
-{
- return ::wstandend(w);
-}
-
-inline int CursesWindow::lines()
-{
- return LINES;
-}
-
-inline int CursesWindow::cols()
-{
- return COLS;
-}
-
-inline CursesWindow* CursesWindow::child()
-{
- return subwins;
-}
-
-inline CursesWindow* CursesWindow::parent()
-{
- return par;
-}
-
-inline CursesWindow* CursesWindow::sibling()
-{
- return sib;
-}
-
-#endif /* _G_HAVE_CURSES */
-#endif
diff --git a/contrib/libg++/libg++/src/DLList.cc b/contrib/libg++/libg++/src/DLList.cc
deleted file mode 100644
index 6e15408d35bb..000000000000
--- a/contrib/libg++/libg++/src/DLList.cc
+++ /dev/null
@@ -1,327 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifndef _G_NO_TEMPLATES
-#ifdef __GNUG__
-//#pragma implementation
-#endif
-#include <limits.h>
-#include <stream.h>
-#include <builtin.h>
-#include "DLList.h"
-
-void BaseDLList::error(const char* msg) const
-{
- (*lib_error_handler)("DLList", msg);
-}
-
-int BaseDLList::length() const
-{
- int l = 0;
- BaseDLNode* t = h;
- if (t != 0) do { ++l; t = t->fd; } while (t != h);
- return l;
-}
-
-// Note: This is an internal method. It does *not* free old contents!
-
-void BaseDLList::copy(const BaseDLList& a)
-{
- if (a.h == 0)
- h = 0;
- else
- {
- BaseDLNode* p = a.h;
- BaseDLNode* t = copy_node(p->item());
- h = t;
- p = p->fd;
- while (p != a.h)
- {
- BaseDLNode* n = copy_node(p->item());
- t->fd = n;
- n->bk = t;
- t = n;
- p = p->fd;
- }
- t->fd = h;
- h->bk = t;
- return;
- }
-}
-
-void BaseDLList::clear()
-{
- if (h == 0)
- return;
-
- BaseDLNode* p = h->fd;
- h->fd = 0;
- h = 0;
-
- while (p != 0)
- {
- BaseDLNode* nxt = p->fd;
- delete_node(p);
- p = nxt;
- }
-}
-
-BaseDLList& BaseDLList::operator = (const BaseDLList& a)
-{
- if (h != a.h)
- {
- clear();
- copy(a);
- }
- return *this;
-}
-
-
-Pix BaseDLList::prepend(const void *datum)
-{
- BaseDLNode* t = copy_node(datum);
- if (h == 0)
- t->fd = t->bk = h = t;
- else
- {
- t->fd = h;
- t->bk = h->bk;
- h->bk->fd = t;
- h->bk = t;
- h = t;
- }
- return Pix(t);
-}
-
-Pix BaseDLList::append(const void *datum)
-{
- BaseDLNode* t = copy_node(datum);
- if (h == 0)
- t->fd = t->bk = h = t;
- else
- {
- t->bk = h->bk;
- t->bk->fd = t;
- t->fd = h;
- h->bk = t;
- }
- return Pix(t);
-}
-
-Pix BaseDLList::ins_after(Pix p, const void *datum)
-{
- if (p == 0) return prepend(datum);
- BaseDLNode* u = (BaseDLNode*) p;
- BaseDLNode* t = copy_node(datum);
- t->bk = u;
- t->fd = u->fd;
- u->fd->bk = t;
- u->fd = t;
- return Pix(t);
-}
-
-Pix BaseDLList::ins_before(Pix p, const void *datum)
-{
- if (p == 0) error("null Pix");
- BaseDLNode* u = (BaseDLNode*) p;
- BaseDLNode* t = copy_node(datum);
- t->bk = u->bk;
- t->fd = u;
- u->bk->fd = t;
- u->bk = t;
- if (u == h) h = t;
- return Pix(t);
-}
-
-void BaseDLList::join(BaseDLList& b)
-{
- BaseDLNode* t = b.h;
- b.h = 0;
- if (h == 0)
- h = t;
- else if (t != 0)
- {
- BaseDLNode* l = t->bk;
- h->bk->fd = t;
- t->bk = h->bk;
- h->bk = l;
- l->fd = h;
- }
-}
-
-int BaseDLList::owns(Pix p) const
-{
- BaseDLNode* t = h;
- if (t != 0 && p != 0)
- {
- do
- {
- if (Pix(t) == p) return 1;
- t = t->fd;
- } while (t != h);
- }
- return 0;
-}
-
-void BaseDLList::del(Pix& p, int dir)
-{
- if (p == 0) error("null Pix");
- BaseDLNode* t = (BaseDLNode*) p;
- if (t->fd == t)
- {
- h = 0;
- p = 0;
- }
- else
- {
- if (dir < 0)
- {
- if (t == h)
- p = 0;
- else
- p = Pix(t->bk);
- }
- else
- {
- if (t == h->bk)
- p = 0;
- else
- p = Pix(t->fd);
- }
- t->bk->fd = t->fd;
- t->fd->bk = t->bk;
- if (t == h) h = t->fd;
- }
- delete_node(t);
-}
-
-void BaseDLList::del_after(Pix& p)
-{
- if (p == 0)
- {
- del_front();
- return;
- }
-
- BaseDLNode* b = (BaseDLNode*) p;
- BaseDLNode* t = b->fd;
-
- if (b == t)
- {
- h = 0;
- p = 0;
- }
- else
- {
- t->bk->fd = t->fd;
- t->fd->bk = t->bk;
- if (t == h) h = t->fd;
- }
- delete_node(t);
-}
-
-void BaseDLList::remove_front(void *dst)
-{
- if (h == 0)
- error("remove_front of empty list");
- else {
- BaseDLNode* t = h;
- copy_item(dst, t->item());
- if (h->fd == h)
- h = 0;
- else
- {
- h->fd->bk = h->bk;
- h->bk->fd = h->fd;
- h = h->fd;
- }
- delete_node(t);
- }
-}
-
-void BaseDLList::del_front()
-{
- if (h == 0)
- error("del_front of empty list");
- BaseDLNode* t = h;
- if (h->fd == h)
- h = 0;
- else
- {
- h->fd->bk = h->bk;
- h->bk->fd = h->fd;
- h = h->fd;
- }
- delete_node(t);
-}
-
-void BaseDLList::remove_rear(void *dst)
-{
- if (h == 0)
- error("remove_rear of empty list");
- else
- {
- BaseDLNode* t = h->bk;
- copy_item(dst, t->item());
- if (h->fd == h)
- h = 0;
- else
- {
- t->fd->bk = t->bk;
- t->bk->fd = t->fd;
- }
- delete_node(t);
- }
-}
-
-void BaseDLList::del_rear()
-{
- if (h == 0)
- error("del_rear of empty list");
- BaseDLNode* t = h->bk;
- if (h->fd == h)
- h = 0;
- else
- {
- t->fd->bk = t->bk;
- t->bk->fd = t->fd;
- }
- delete_node(t);
-}
-
-
-int BaseDLList::OK() const
-{
- int v = 1;
- if (h != 0)
- {
- BaseDLNode* t = h;
- long count = LONG_MAX; // Lots of chances to find h!
- do
- {
- count--;
- v &= t->bk->fd == t;
- v &= t->fd->bk == t;
- t = t->fd;
- } while (v && count > 0 && t != h);
- v &= count > 0;
- }
- if (!v) error("invariant failure");
- return v;
-}
-#endif
diff --git a/contrib/libg++/libg++/src/DLList.h b/contrib/libg++/libg++/src/DLList.h
deleted file mode 100644
index 3723c5c6506d..000000000000
--- a/contrib/libg++/libg++/src/DLList.h
+++ /dev/null
@@ -1,139 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#ifndef _DLList_h
-#ifdef __GNUG__
-//#pragma interface
-#endif
-#define _DLList_h 1
-
-#undef OK
-
-#include <Pix.h>
-
-struct BaseDLNode {
- BaseDLNode *bk;
- BaseDLNode *fd;
- void *item() {return (void*)(this+1);} //Return ((DLNode<T>*)this)->hd
-};
-
-template<class T>
-class DLNode : public BaseDLNode
-{
- public:
- T hd;
- DLNode() { }
- DLNode(const T& h, DLNode* p = 0, DLNode* n = 0)
- : hd(h) { bk = p; fd = n; }
- ~DLNode() { }
-};
-
-class BaseDLList {
- protected:
- BaseDLNode *h;
-
- BaseDLList() { h = 0; }
- void copy(const BaseDLList&);
- BaseDLList& operator= (const BaseDLList& a);
- virtual void delete_node(BaseDLNode*node) = 0;
- virtual BaseDLNode* copy_node(const void* datum) = 0;
- virtual void copy_item(void *dst, void *src) = 0;
- virtual ~BaseDLList() { }
-
- Pix prepend(const void*);
- Pix append(const void*);
- Pix ins_after(Pix p, const void *datum);
- Pix ins_before(Pix p, const void *datum);
- void remove_front(void *dst);
- void remove_rear(void *dst);
- void join(BaseDLList&);
-
- public:
- int empty() const { return h == 0; }
- int length() const;
- void clear();
- void error(const char* msg) const;
- int owns(Pix p) const;
- int OK() const;
- void del(Pix& p, int dir = 1);
- void del_after(Pix& p);
- void del_front();
- void del_rear();
-};
-
-template <class T>
-class DLList : public BaseDLList {
- //friend class <T>DLListTrav;
-
- virtual void delete_node(BaseDLNode *node) { delete (DLNode<T>*)node; }
- virtual BaseDLNode* copy_node(const void *datum)
- { return new DLNode<T>(*(const T*)datum); }
- virtual void copy_item(void *dst, void *src) { *(T*)dst = *(T*)src; }
-
- public:
- DLList() : BaseDLList() { }
- DLList(const DLList<T>& a) : BaseDLList() { copy(a); }
-
- DLList<T>& operator = (const DLList<T>& a)
- { BaseDLList::operator=((const BaseDLList&) a); return *this; }
- virtual ~DLList() { clear(); }
-
- Pix prepend(const T& item) {return BaseDLList::prepend(&item);}
- Pix append(const T& item) {return BaseDLList::append(&item);}
-
- void join(DLList<T>& a) { BaseDLList::join(a); }
-
- T& front() {
- if (h == 0) error("front: empty list");
- return ((DLNode<T>*)h)->hd; }
- T& rear() {
- if (h == 0) error("rear: empty list");
- return ((DLNode<T>*)h->bk)->hd;
- }
- const T& front() const {
- if (h == 0) error("front: empty list");
- return ((DLNode<T>*)h)->hd; }
- const T& rear() const {
- if (h == 0) error("rear: empty list");
- return ((DLNode<T>*)h->bk)->hd;
- }
- T remove_front() { T dst; BaseDLList::remove_front(&dst); return dst; }
- T remove_rear() { T dst; BaseDLList::remove_rear(&dst); return dst; }
-
- T& operator () (Pix p) {
- if (p == 0) error("null Pix");
- return ((DLNode<T>*)p)->hd;
- }
- const T& operator () (Pix p) const {
- if (p == 0) error("null Pix");
- return ((DLNode<T>*)p)->hd;
- }
- Pix first() const { return Pix(h); }
- Pix last() const { return (h == 0) ? 0 : Pix(h->bk); }
- void next(Pix& p) const
- { p = (p == 0 || p == h->bk)? 0 : Pix(((DLNode<T>*)p)->fd); }
- void prev(Pix& p) const
- { p = (p == 0 || p == h)? 0 : Pix(((DLNode<T>*)p)->bk); }
- Pix ins_after(Pix p, const T& item)
- {return BaseDLList::ins_after(p, &item); }
- Pix ins_before(Pix p, const T& item)
- {return BaseDLList::ins_before(p, &item);}
-};
-
-#endif
diff --git a/contrib/libg++/libg++/src/DiscUnif.cc b/contrib/libg++/libg++/src/DiscUnif.cc
deleted file mode 100644
index 950d9f9409e4..000000000000
--- a/contrib/libg++/libg++/src/DiscUnif.cc
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Dirk Grunwald (grunwald@cs.uiuc.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <builtin.h>
-#include <Random.h>
-#include <DiscUnif.h>
-
-double DiscreteUniform::operator()()
-{
- long tmp = long(floor(delta * pGenerator -> asDouble()));
- return( double(pLow + tmp) );
-}
-
diff --git a/contrib/libg++/libg++/src/DiscUnif.h b/contrib/libg++/libg++/src/DiscUnif.h
deleted file mode 100644
index 8633db2c804d..000000000000
--- a/contrib/libg++/libg++/src/DiscUnif.h
+++ /dev/null
@@ -1,72 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Dirk Grunwald (grunwald@cs.uiuc.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-#ifndef _DiscreteUniform_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _DiscreteUniform_h 1
-
-#include <Random.h>
-
-//
-// The interval [lo..hi)
-//
-
-class DiscreteUniform: public Random {
- long pLow;
- long pHigh;
- double delta;
-public:
- DiscreteUniform(long low, long high, RNG *gen);
-
- long low();
- long low(long x);
- long high();
- long high(long x);
-
- virtual double operator()();
-};
-
-
-inline DiscreteUniform::DiscreteUniform(long low, long high, RNG *gen)
-: Random(gen)
-{
- pLow = (low < high) ? low : high;
- pHigh = (low < high) ? high : low;
- delta = (pHigh - pLow) + 1;
-}
-
-inline long DiscreteUniform::low() { return pLow; }
-
-inline long DiscreteUniform::low(long x) {
- long tmp = pLow;
- pLow = x;
- delta = (pHigh - pLow) + 1;
- return tmp;
-}
-
-inline long DiscreteUniform::high() { return pHigh; }
-
-inline long DiscreteUniform::high(long x) {
- long tmp = pHigh;
- pHigh = x;
- delta = (pHigh - pLow) + 1;
- return tmp;
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/Erlang.cc b/contrib/libg++/libg++/src/Erlang.cc
deleted file mode 100644
index 5a73021f10f3..000000000000
--- a/contrib/libg++/libg++/src/Erlang.cc
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Dirk Grunwald (grunwald@cs.uiuc.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <builtin.h>
-#include <Random.h>
-#include <Erlang.h>
-
-double Erlang::operator()()
-{
- double prod = 1.0;
-
- for (int i = 0; i < k; i++) {
- prod *= pGenerator -> asDouble();
- }
- return(-log(prod)/a);
-}
diff --git a/contrib/libg++/libg++/src/Erlang.h b/contrib/libg++/libg++/src/Erlang.h
deleted file mode 100644
index 3f2b3ede71fb..000000000000
--- a/contrib/libg++/libg++/src/Erlang.h
+++ /dev/null
@@ -1,68 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Dirk Grunwald (grunwald@cs.uiuc.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-#ifndef _Erlang_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _Erlang_h 1
-
-#include <Random.h>
-
-class Erlang: public Random {
-protected:
- double pMean;
- double pVariance;
- int k;
- double a;
- void setState();
-public:
- Erlang(double mean, double variance, RNG *gen);
-
- double mean();
- double mean(double x);
- double variance();
- double variance(double x);
-
- virtual double operator()();
-
-};
-
-
-inline void Erlang::setState() {
- k = int( (pMean * pMean ) / pVariance + 0.5 );
- k = (k > 0) ? k : 1;
- a = k / pMean;
-}
-
-inline Erlang::Erlang(double mean, double variance, RNG *gen) : Random(gen)
-{
- pMean = mean; pVariance = variance;
- setState();
-}
-
-inline double Erlang::mean() { return pMean; }
-inline double Erlang::mean(double x) {
- double tmp = pMean; pMean = x; setState(); return tmp;
-};
-
-inline double Erlang::variance() { return pVariance; }
-inline double Erlang::variance(double x) {
- double tmp = pVariance; pVariance = x; setState(); return tmp;
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/Fix.cc b/contrib/libg++/libg++/src/Fix.cc
deleted file mode 100644
index 9f68f826c6cf..000000000000
--- a/contrib/libg++/libg++/src/Fix.cc
+++ /dev/null
@@ -1,670 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1989 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-//
-// Fix.cc : variable length fixed point data type class functions
-//
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <Fix.h>
-#include <std.h>
-#include <Obstack.h>
-#include <AllocRing.h>
-#include <strstream.h>
-#include <new.h>
-
-// member constants
-
-const _G_uint16_t Fix::min_length;
-const _G_uint16_t Fix::max_length;
-const double Fix::min_value;
-const double Fix::max_value;
-
-// default parameters
-
-_G_uint16_t Fix::default_length = 16;
-int Fix::default_print_width = 8;
-
-Fix::PEH Fix::overflow_handler = Fix::overflow_saturate;
-
-Fix::Rep Fix::Rep_0 = { 16, 1, 1, { 0 } };
-Fix::Rep Fix::Rep_m1 = { 16, 1, 1, { 0x8000 } };
-Fix::Rep Fix::Rep_quotient_bump = { 16, 1, 1, { 0x4000 } };
-
-// error handling
-
-void
-Fix::default_error_handler(const char* msg)
-{
- cerr << "Fix: " << msg << "\n";
- abort();
-}
-
-void
-Fix::default_range_error_handler(const char* msg)
-{
- cerr << "Fix: range error in " << msg << "\n";
- //abort();
-}
-
-one_arg_error_handler_t
- Fix::error_handler = Fix::default_error_handler,
- Fix::range_error_handler = Fix::default_range_error_handler;
-
-one_arg_error_handler_t
-Fix::set_error_handler(one_arg_error_handler_t f)
-{
- one_arg_error_handler_t old = error_handler;
- error_handler = f;
- return old;
-}
-
-one_arg_error_handler_t
-Fix::set_range_error_handler(one_arg_error_handler_t f)
-{
- one_arg_error_handler_t old = range_error_handler;
- range_error_handler = f;
- return old;
-}
-
-void
-Fix::error(const char* msg)
-{
- error_handler(msg);
-}
-
-void
-Fix::range_error(const char* msg)
-{
- range_error_handler(msg);
-}
-
-// Fix::Rep allocation and initialization functions
-
-static inline Fix::Rep*
-_new_Fix(_G_uint16_t len)
-{
- int siz = (((_G_uint32_t) len + 15) >> 4);
- if (siz <= 0) siz = 1;
- unsigned int allocsiz = (sizeof(Fix::Rep) + (siz - 1) * sizeof(_G_uint16_t));
- Fix::Rep* z = new (operator new (allocsiz)) Fix::Rep;
- memset(z, 0, allocsiz);
- z->len = len;
- z->siz = siz;
- z->ref = 1;
- return z;
-}
-
-Fix::Rep*
-Fix::new_Fix(_G_uint16_t len)
-{
- return _new_Fix(len);
-}
-
-Fix::Rep*
-Fix::new_Fix(_G_uint16_t len, const Rep* x)
-{
- Rep* z = _new_Fix(len);
- return copy(x,z);
-}
-
-Fix::Rep*
-Fix::new_Fix(_G_uint16_t len, double d)
-{
- Rep* z = _new_Fix(len);
-
- if ( d == max_value )
- {
- z->s[0] = 0x7fff;
- for ( int i=1; i < z->siz; i++ )
- z->s[i] = 0xffff;
- }
- else if ( d < min_value || d > max_value )
- range_error("declaration");
- else
- {
- if (d < 0)
- d += 2.0;
- d *= 32768;
- for ( int i=0; i < z->siz; i++ )
- {
- z->s[i] = (_G_uint16_t )d;
- d -= z->s[i];
- d *= 65536;
- }
- if ( d >= 32768 )
- z->s[z->siz-1]++;
- }
- mask(z);
- return z;
-}
-
-// convert to a double
-
-double
-value(const Fix& x)
-{
- double d = 0.0;
- for ( int i=x.rep->siz-1; i >= 0; i-- )
- {
- d += x.rep->s[i];
- d *= 1./65536.;
- }
- d *= 2.;
- return d < 1. ? d : d - 2.;
-}
-
-// extract mantissa to Integer
-
-Integer
-mantissa(const Fix& x)
-{
- Integer a = 1, b=1;
- for ( int i=0; i < x.rep->siz; i++ )
- {
- a <<= 16;
- a += x.rep->s[i];
- b <<= 16;
- }
- return a-b;
-}
-
-// comparison functions
-
-inline static int
-docmp(const _G_uint16_t* x, const _G_uint16_t* y, int siz)
-{
- int diff = (_G_int16_t )*x - (_G_int16_t )*y;
- while ( --siz && !diff )
- diff = (_G_int32_t )(_G_uint32_t )*++x - (_G_int32_t )(_G_uint32_t )*++y;
- return diff;
-}
-
-inline static int
-docmpz(const _G_uint16_t* x, int siz)
-{
- while ( siz-- )
- if ( *x++ ) return 1;
- return 0;
-}
-
-int
-Fix::compare(const Rep* x, const Rep* y)
-{
- if ( x->siz == y->siz )
- return docmp(x->s, y->s, x->siz);
- else
- {
- int r;
- const Rep* longer, *shorter;
- if ( x->siz > y->siz )
- {
- longer = x;
- shorter = y;
- r = 1;
- }
- else
- {
- longer = y;
- shorter = x;
- r = -1;
- }
- int diff = docmp(x->s, y->s, shorter->siz);
- if ( diff )
- return diff;
- else if ( docmpz(&longer->s[shorter->siz], longer->siz-shorter->siz) )
- return r;
- else
- return 0;
- }
-}
-
-// arithmetic functions
-
-Fix::Rep*
-Fix::add(const Rep* x, const Rep* y, Rep* r)
-{
- _G_uint16_t xsign = x->s[0], ysign = y->s[0];
- const Rep* longer, *shorter;
- if ( x->len >= y->len )
- longer = x, shorter = y;
- else
- longer = y, shorter = x;
- if ( r == NULL )
- r = new_Fix(longer->len);
- int i;
- for ( i=r->siz-1; i >= longer->siz; i-- )
- r->s[i] = 0;
- for ( ; i >= shorter->siz; i-- )
- r->s[i] = longer->s[i];
- _G_uint32_t sum = 0, carry = 0;
- for ( ; i >= 0; i-- )
- {
- sum = carry + (_G_uint32_t )x->s[i] + (_G_uint32_t )y->s[i];
- carry = sum >> 16;
- r->s[i] = sum;
- }
- if ( (xsign ^ sum) & (ysign ^ sum) & 0x8000 )
- overflow_handler(r);
- return r;
-}
-
-Fix::Rep*
-Fix::subtract(const Rep* x, const Rep* y, Rep* r)
-{
- _G_uint16_t xsign = x->s[0], ysign = y->s[0];
- const Rep* longer, *shorter;
- if ( x->len >= y->len )
- longer = x, shorter = y;
- else
- longer = y, shorter = x;
- if ( r == NULL )
- r = new_Fix(longer->len);
- int i;
- for ( i=r->siz-1; i >= longer->siz; i-- )
- r->s[i] = 0;
- for ( ; i >= shorter->siz; i-- )
- r->s[i] = (longer == x ? x->s[i] : -y->s[i]);
- _G_int16_t carry = 0;
- _G_uint32_t sum = 0;
- for ( ; i >= 0; i-- )
- {
- sum = (_G_int32_t )carry + (_G_uint32_t )x->s[i] - (_G_uint32_t )y->s[i];
- carry = sum >> 16;
- r->s[i] = sum;
- }
- if ( (xsign ^ sum) & (~ysign ^ sum) & 0x8000 )
- overflow_handler(r);
- return r;
-}
-
-Fix::Rep*
-Fix::multiply(const Rep* x, const Rep* y, Rep* r)
-{
- if ( r == NULL )
- r = new_Fix(x->len + y->len);
- int xsign = x->s[0] & 0x8000,
- ysign = y->s[0] & 0x8000;
- Fix X(x->len), Y(y->len);
- if ( xsign )
- x = negate(x,X.rep);
- if ( ysign )
- y = negate(y,Y.rep);
- int i;
- for ( i=0; i < r->siz; i++ )
- r->s[i] = 0;
- for ( i=x->siz-1; i >= 0; i-- )
- {
- _G_uint32_t carry = 0;
- for ( int j=y->siz-1; j >= 0; j-- )
- {
- int k = i + j + 1;
- _G_uint32_t a = (_G_uint32_t )x->s[i] * (_G_uint32_t )y->s[j];
- _G_uint32_t b = ((a << 1) & 0xffff) + carry;
- if ( k < r->siz )
- {
- b += r->s[k];
- r->s[k] = b;
- }
- if ( k < (int)r->siz + 1 )
- carry = (a >> 15) + (b >> 16);
- }
- r->s[i] = carry;
- }
- if ( xsign != ysign )
- negate(r,r);
- return r;
-}
-
-Fix::Rep*
-Fix::multiply(const Rep* x, int y, Rep* r)
-{
- if ( y != (_G_int16_t )y )
- range_error("multiply by int -- int too large");
- if ( r == NULL )
- r = new_Fix(x->len);
- int i;
- for ( i=r->siz-1; i >= x->siz; i-- )
- r->s[i] = 0;
- _G_int32_t a, carry = 0;
- for ( ; i > 0; i-- )
- {
- a = (_G_int32_t) (_G_uint32_t )x->s[i] * y + carry;
- r->s[i] = a;
- carry = a >> 16; // assumes arithmetic right shift
- }
- a = (_G_int32_t) (_G_int16_t )x->s[0] * y + carry;
- r->s[0] = a;
- a &= 0xffff8000L;
- if ( a != (_G_int32_t)0xffff8000L && a != (_G_int32_t)0L ) {
- r->s[0] = 0x8000 ^ x->s[0] ^ y;
- overflow_handler(r);
- }
- return r;
-}
-
-Fix::Rep*
-Fix::divide(const Rep* x, const Rep* y, Rep* q, Rep* r)
-{
- int xsign = x->s[0] & 0x8000,
- ysign = y->s[0] & 0x8000;
- if ( q == NULL )
- q = new_Fix(x->len);
- copy(&Rep_0,q);
- if ( r == NULL )
- r = new_Fix(x->len + y->len - 1);
- if ( xsign )
- negate(x,r);
- else
- copy(x,r);
- Fix Y(y->len);
- Rep* y2 = ( ysign ? negate(y,Y.rep) : copy(y,Y.rep) );
- if ( !compare(y2) )
- range_error("division -- division by zero");
- else if ( compare(x,y2) >= 0 )
- if ( compare(x,y2) == 0 && (xsign ^ ysign) != 0 )
- {
- copy(&Rep_m1,q);
- copy(&Rep_0,r);
- }
- else
- range_error("division");
- else
- {
- Rep* t;
- Fix S(r->len),
- W(q->len,&Rep_quotient_bump);
- for ( int i=1; i < q->len; i++ )
- {
- shift(y2,-1,y2);
- subtract(r,y2,S.rep);
- int s_status = compare(S.rep);
- if ( s_status == 0 )
- {
- t = r, r = S.rep, S.rep = t;
- break;
- }
- else if ( s_status > 0 )
- {
- t = r, r = S.rep, S.rep = t;
- add(q,W.rep,q);
- }
- shift(W.rep,-1,W.rep);
- }
- if ( xsign ^ ysign )
- negate(q,q);
- }
- return q;
-}
-
-Fix::Rep*
-Fix::shift(const Rep* x, int y, Rep* r)
-{
- if ( r == NULL )
- r = new_Fix(x->len);
- if ( y == 0 )
- {
- copy (x, r);
- return r;
- }
-
- int ay = abs((_G_int32_t) y),
- ayh = ay >> 4,
- ayl = ay & 0x0f;
- int xl, u, ilow, ihigh;
- _G_uint16_t *rs;
- const _G_uint16_t *xsl, *xsr;
-
- if ( y > 0 )
- {
- rs = r->s;
- xsl = x->s + ayh;
- xsr = xsl + 1;
- xl = ayl;
- u = 1;
- ihigh = x->siz - ayh - 1;
- ilow = 0;
- }
- else
- {
- rs = &r->s[r->siz - 1];
- xsr = &x->s[r->siz - 1] - ayh;
- xsl = xsr - 1;
- xl = 16 - ayl;
- u = -1;
- ihigh = r->siz - ayh - 1;
- ilow = ihigh - x->siz;
- }
-
- int xr = 16 - xl;
- _G_uint16_t xrmask = 0xffffL >> xr;
- int i;
- for ( i=0; i < ilow; i++, rs+=u, xsl+=u, xsr+=u )
- *rs = 0;
- for ( ; i < ihigh; i++, rs+=u, xsl+=u, xsr+=u )
- *rs = (*xsl << xl) + ((*xsr >> xr) & xrmask);
- *rs = (y > 0 ? (*xsl << xl) : ((*xsr >> xr) & xrmask));
- rs += u;
- for ( ; ++i < r->siz; rs+=u )
- *rs = 0;
- return r;
-}
-
-Fix::Rep*
-Fix::negate(const Rep* x, Rep* r)
-{
- if ( r == NULL )
- r = new_Fix(x->len);
- _G_uint32_t carry = 1;
- int i;
- for ( i=r->siz-1; i >= x->siz; i-- )
- r->s[i] = 0;
- for ( ; i >= 0; i-- )
- {
- _G_uint32_t a = (_G_uint16_t )~x->s[i] + carry; // bug work-around
- r->s[i] = a;
- carry = a >> 16;
- }
- return r;
-}
-
-// io functions
-
-Fix
-atoF(const char* a, int len)
-{
- return Fix(len,atof(a));
-}
-
-extern AllocRing _libgxx_fmtq;
-
-void
-Fix::printon(ostream& s, int width) const
-{
- double val = value(*this);
- int old_precision = s.precision(width-3);
- _G_int32_t old_flags = s.setf(ios::fixed, ios::fixed|ios::scientific);
- if (val >= 0)
- s << ' ';
- s.width(width-2);
- s << val;
- s.precision(old_precision);
- s.flags(old_flags);
-}
-
-char*
-Ftoa(Fix& x, int width)
-{
- int wrksiz = width + 2;
- char *fmtbase = (char *) _libgxx_fmtq.alloc(wrksiz);
- ostrstream stream(fmtbase, wrksiz);
-
- x.printon(stream, width);
- stream << ends;
- return fmtbase;
-}
-
-extern Obstack _libgxx_io_ob;
-
-Fix
-Fix::operator %= (int y)
-{
- Fix r((int )rep->len + y, *this); return *this = r;
-}
-
-istream&
-operator >> (istream& s, Fix& y)
-{
- int got_one = 0;
- if (!s.ipfx(0))
- {
- s.clear(ios::failbit|s.rdstate()); // Redundant if using GNU iostreams.
- return s;
- }
-
- char sign = 0, point = 0;
- char ch;
- s >> ws;
- if (!s.good())
- {
- s.clear(ios::failbit|s.rdstate());
- return s;
- }
- while (s.get(ch))
- {
- if (ch == '-')
- {
- if (sign == 0)
- {
- sign = 1;
- _libgxx_io_ob.grow(ch);
- }
- else
- break;
- }
- if (ch == '.')
- {
- if (point == 0)
- {
- point = 1;
- _libgxx_io_ob.grow(ch);
- }
- else
- break;
- }
- else if (ch >= '0' && ch <= '9')
- {
- got_one = 1;
- _libgxx_io_ob.grow(ch);
- }
- else
- break;
- }
- char * p = (char*)(_libgxx_io_ob.finish(0));
- if (s.good())
- s.putback(ch);
- if (!got_one)
- s.clear(ios::failbit|s.rdstate());
- else
- y = atoF(p);
- _libgxx_io_ob.free(p);
- return s;
-}
-
-void
-show(const Fix& x)
-{
- cout << "len = " << x.rep->len << "\n";
- cout << "siz = " << x.rep->siz << "\n";
- cout << "ref = " << x.rep->ref << "\n";
- cout << "man = ";
-#ifdef _OLD_STREAMS
- cout << Itoa(mantissa(x),16,4*x.rep->siz);
-#else
- int old_flags = cout.setf(ios::hex, ios::hex|ios::dec|ios::oct);
- cout.width(4*x.rep->siz);
- cout << mantissa(x);
- cout.setf(old_flags, ios::hex|ios::dec|ios::oct);
-#endif
- cout << "\n";
- cout << "val = " << value(x) << "\n";
-}
-
-// parameter setting operations
-
-Fix::PEH Fix::set_overflow_handler(PEH new_handler)
-{
- PEH old_handler = overflow_handler;
- overflow_handler = new_handler;
- return old_handler;
-}
-
-int
-Fix::set_default_length(int newlen)
-{
- _G_uint16_t oldlen = default_length;
- if ( newlen < min_length || newlen > max_length )
- error("illegal length in Fix::set_default_length");
- default_length = newlen;
- return oldlen;
-}
-
-// overflow handlers
-
-void
-Fix::overflow_saturate(Rep* r)
-{
- if ( (_G_int16_t) r->s[0] > 0 )
- {
- r->s[0] = 0x8000;
- for ( int i=1; i < r->siz; i++ )
- r->s[i] = 0;
- }
- else
- {
- r->s[0] = 0x7fff;
- for ( int i = 1; i < (int)r->siz; i++ )
- r->s[i] = 0xffff;
- mask(r);
- }
-}
-
-void
-Fix::overflow_wrap(Rep*)
-{}
-
-void
-Fix::overflow_warning_saturate(Rep* r)
-{
- overflow_warning(r);
- overflow_saturate(r);
-}
-
-void
-Fix::overflow_warning(Rep*)
-{
- cerr << "Fix: overflow warning\n";
-}
-
-void
-Fix::overflow_error(Rep*)
-{
- cerr << "Fix: overflow error\n";
- abort();
-}
diff --git a/contrib/libg++/libg++/src/Fix.h b/contrib/libg++/libg++/src/Fix.h
deleted file mode 100644
index ae9b9046e7b8..000000000000
--- a/contrib/libg++/libg++/src/Fix.h
+++ /dev/null
@@ -1,523 +0,0 @@
-// -*- C++ -*-
-// Fix.h : variable length fixed point data type
-//
-
-#ifndef _Fix_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _Fix_h 1
-
-#include <stream.h>
-#include <std.h>
-#include <stddef.h>
-#include <Integer.h>
-#include <builtin.h>
-
-class Fix
-{
- struct Rep // internal Fix representation
- {
- _G_uint16_t len; // length in bits
- _G_uint16_t siz; // allocated storage
- _G_int16_t ref; // reference count
- _G_uint16_t s[1]; // start of ushort array represention
- };
-
-public:
-
- typedef void (*PEH)(Rep*);
-
-private:
-
- Rep* rep;
-
- Fix(Rep*);
- Fix(int, const Rep*);
-
- void unique();
-
- static const _G_uint16_t min_length = 1;
- static const _G_uint16_t max_length = 65535;
- static const double min_value = -1.0;
- static const double max_value = 1.0;
-
- static _G_uint16_t default_length;
- static int default_print_width;
- static Rep Rep_0;
- static Rep Rep_m1;
- static Rep Rep_quotient_bump;
-
- // internal class functions
- static void mask(Rep*);
- static int compare(const Rep*, const Rep* = &Rep_0);
-
- static Rep* new_Fix(_G_uint16_t);
- static Rep* new_Fix(_G_uint16_t, const Rep*);
- static Rep* new_Fix(_G_uint16_t, double);
-
- static Rep* copy(const Rep*, Rep*);
- static Rep* negate(const Rep*, Rep* = NULL);
- static Rep* add(const Rep*, const Rep*, Rep* = NULL);
- static Rep* subtract(const Rep*, const Rep*, Rep* = NULL);
- static Rep* multiply(const Rep*, const Rep*, Rep* = NULL);
- static Rep* multiply(const Rep*, int, Rep* = NULL);
- static Rep* divide(const Rep*, const Rep*, Rep* = NULL,
- Rep* = NULL);
- static Rep* shift(const Rep*, int, Rep* = NULL);
-
- static one_arg_error_handler_t error_handler;
- static one_arg_error_handler_t range_error_handler;
-
- static PEH overflow_handler;
-
-public:
- Fix();
- Fix(const Fix&);
- Fix(double);
- Fix(int);
- Fix(_G_uint16_t);
- Fix(int, const Fix&);
- Fix(int, double);
-
- ~Fix();
-
- Fix operator = (const Fix&);
- Fix operator = (double);
-
- friend int operator == (const Fix&, const Fix&);
- friend int operator != (const Fix&, const Fix&);
-
- friend int operator < (const Fix&, const Fix&);
- friend int operator <= (const Fix&, const Fix&);
- friend int operator > (const Fix&, const Fix&);
- friend int operator >= (const Fix&, const Fix&);
-
- Fix& operator + ();
- Fix operator - ();
-
- friend Fix operator + (const Fix&, const Fix&);
- friend Fix operator - (const Fix&, const Fix&);
- friend Fix operator * (const Fix&, const Fix&);
- friend Fix operator / (const Fix&, const Fix&);
-
- friend Fix operator * (const Fix&, int);
- friend Fix operator * (int, const Fix&);
- friend Fix operator % (const Fix&, int);
- friend Fix operator << (const Fix&, int);
- friend Fix operator >> (const Fix&, int);
-
-#if defined (__GNUG__) && ! defined (__STRICT_ANSI__)
- friend Fix operator <? (const Fix&, const Fix&); // min
- friend Fix operator >? (const Fix&, const Fix&); // max
-#endif
-
- Fix operator += (const Fix&);
- Fix operator -= (const Fix&);
- Fix operator *= (const Fix&);
- Fix operator /= (const Fix&);
-
- Fix operator *= (int);
- Fix operator %= (int);
- Fix operator <<=(int);
- Fix operator >>=(int);
-
- friend char* Ftoa(const Fix&, int width = default_print_width);
- void printon(ostream&, int width = default_print_width) const;
- friend Fix atoF(const char*, int len = default_length);
-
- friend istream& operator >> (istream&, Fix&);
- friend ostream& operator << (ostream&, const Fix&);
-
- // built-in functions
- friend Fix abs(Fix); // absolute value
- friend int sgn(const Fix&); // -1, 0, +1
- friend Integer mantissa(const Fix&); // integer representation
- friend double value(const Fix&); // double value
- friend int length(const Fix&); // field length
- friend void show(const Fix&); // show contents
-
- // error handlers
- static void error(const char* msg); // error handler
- static void range_error(const char* msg); // range error handler
-
- static one_arg_error_handler_t set_error_handler(one_arg_error_handler_t f);
- static one_arg_error_handler_t
- set_range_error_handler(one_arg_error_handler_t f);
-
- static void default_error_handler (const char *);
- static void default_range_error_handler (const char *);
-
- // non-operator versions for user
- friend void negate(const Fix& x, Fix& r);
- friend void add(const Fix& x, const Fix& y, Fix& r);
- friend void subtract(const Fix& x, const Fix& y, Fix& r);
- friend void multiply(const Fix& x, const Fix& y, Fix& r);
- friend void divide(const Fix& x, const Fix& y, Fix& q, Fix& r);
- friend void shift(const Fix& x, int y, Fix& r);
-
- // overflow handlers
- static void overflow_saturate(Fix::Rep*);
- static void overflow_wrap(Fix::Rep*);
- static void overflow_warning_saturate(Fix::Rep*);
- static void overflow_warning(Fix::Rep*);
- static void overflow_error(Fix::Rep*);
-
- static PEH set_overflow_handler(PEH);
-
- static int set_default_length(int);
-};
-
-// function definitions
-
-inline void
-Fix::unique()
-{
- if ( rep->ref > 1 )
- {
- rep->ref--;
- rep = new_Fix(rep->len,rep);
- }
-}
-
-inline void
-Fix::mask (Fix::Rep* x)
-{
- int n = x->len & 0x0f;
- if ( n )
- x->s[x->siz - 1] &= 0xffff0000 >> n;
-}
-
-inline Fix::Rep*
-Fix::copy(const Fix::Rep* from, Fix::Rep* to)
-{
- _G_uint16_t *ts = to->s;
- const _G_uint16_t *fs = from->s;
- int ilim = to->siz < from->siz ? to->siz : from->siz;
- int i;
- for ( i=0; i < ilim; i++ )
- *ts++ = *fs++;
- for ( ; i < to->siz; i++ )
- *ts++ = 0;
- mask(to);
- return to;
-}
-
-inline
-Fix::Fix(Rep* f)
-{
- rep = f;
-}
-
-inline
-Fix::Fix()
-{
- rep = new_Fix(default_length);
-}
-
-inline
-Fix::Fix(int len)
-{
- if ( len < min_length || len > max_length )
- error("illegal length in declaration");
- rep = new_Fix((_G_uint16_t) len);
-}
-
-inline
-Fix::Fix(_G_uint16_t len)
-{
- if ( len < min_length || len > max_length )
- error("illegal length in declaration");
- rep = new_Fix(len);
-}
-
-inline
-Fix::Fix(double d)
-{
- rep = new_Fix(default_length,d);
-}
-
-inline
-Fix::Fix(const Fix& y)
-{
- rep = y.rep; rep->ref++;
-}
-
-inline
-Fix::Fix(int len, const Fix& y)
-{
- if ( len < Fix::min_length || len > Fix::max_length )
- error("illegal length in declaration");
- rep = new_Fix((_G_uint16_t) len,y.rep);
-}
-
-inline
-Fix::Fix(int len, const Rep* fr)
-{
- if ( len < Fix::min_length || len > Fix::max_length )
- error("illegal length in declaration");
- rep = new_Fix((_G_uint16_t) len,fr);
-}
-
-inline
-Fix::Fix(int len, double d)
-{
- if ( len < Fix::min_length || len > Fix::max_length )
- error("illegal length in declaration");
- rep = new_Fix((_G_uint16_t) len,d);
-}
-
-inline
-Fix::~Fix()
-{
- if ( --rep->ref <= 0 ) delete rep;
-}
-
-inline Fix
-Fix::operator = (const Fix& y)
-{
- if ( rep->len == y.rep->len ) {
- ++y.rep->ref;
- if ( --rep->ref <= 0 ) delete rep;
- rep = y.rep;
- }
- else {
- unique();
- copy(y.rep,rep);
- }
- return *this;
-}
-
-inline Fix
-Fix::operator = (double d)
-{
- int oldlen = rep->len;
- if ( --rep->ref <= 0 ) delete rep;
- rep = new_Fix(oldlen,d);
- return *this;
-}
-
-inline int
-operator == (const Fix& x, const Fix& y)
-{
- return Fix::compare(x.rep, y.rep) == 0;
-}
-
-inline int
-operator != (const Fix& x, const Fix& y)
-{
- return Fix::compare(x.rep, y.rep) != 0;
-}
-
-inline int
-operator < (const Fix& x, const Fix& y)
-{
- return Fix::compare(x.rep, y.rep) < 0;
-}
-
-inline int
-operator <= (const Fix& x, const Fix& y)
-{
- return Fix::compare(x.rep, y.rep) <= 0;
-}
-
-inline int
-operator > (const Fix& x, const Fix& y)
-{
- return Fix::compare(x.rep, y.rep) > 0;
-}
-
-inline int
-operator >= (const Fix& x, const Fix& y)
-{
- return Fix::compare(x.rep, y.rep) >= 0;
-}
-
-inline Fix&
-Fix::operator + ()
-{
- return *this;
-}
-
-inline Fix
-Fix::operator - ()
-{
- Rep* r = negate(rep); return r;
-}
-
-inline Fix
-operator + (const Fix& x, const Fix& y)
-{
- Fix::Rep* r = Fix::add(x.rep, y.rep); return r;
-}
-
-inline Fix
-operator - (const Fix& x, const Fix& y)
-{
- Fix::Rep* r = Fix::subtract(x.rep, y.rep); return r;
-}
-
-inline Fix
-operator * (const Fix& x, const Fix& y)
-{
- Fix::Rep* r = Fix::multiply(x.rep, y.rep); return r;
-}
-
-inline Fix
-operator * (const Fix& x, int y)
-{
- Fix::Rep* r = Fix::multiply(x.rep, y); return r;
-}
-
-inline Fix
-operator * (int y, const Fix& x)
-{
- Fix::Rep* r = Fix::multiply(x.rep, y); return r;
-}
-
-inline Fix
-operator / (const Fix& x, const Fix& y)
-{
- Fix::Rep* r = Fix::divide(x.rep, y.rep); return r;
-}
-
-inline Fix
-Fix::operator += (const Fix& y)
-{
- unique(); Fix::add(rep, y.rep, rep); return *this;
-}
-
-inline Fix
-Fix::operator -= (const Fix& y)
-{
- unique(); Fix::subtract(rep, y.rep, rep); return *this;
-}
-
-inline Fix
-Fix::operator *= (const Fix& y)
-{
- unique(); Fix::multiply(rep, y.rep, rep); return *this;
-}
-
-inline Fix
-Fix::operator *= (int y)
-{
- unique(); Fix::multiply(rep, y, rep); return *this;
-}
-
-inline Fix
-Fix::operator /= (const Fix& y)
-{
- unique(); Fix::divide(rep, y.rep, rep); return *this;
-}
-
-inline Fix
-operator % (const Fix& x, int y)
-{
- Fix r((int) x.rep->len + y, x); return r;
-}
-
-inline Fix
-operator << (const Fix& x, int y)
-{
- Fix::Rep* rep = Fix::shift(x.rep, y); return rep;
-}
-
-inline Fix
-operator >> (const Fix& x, int y)
-{
- Fix::Rep* rep = Fix::shift(x.rep, -y); return rep;
-}
-
-inline Fix
-Fix::operator <<= (int y)
-{
- unique(); Fix::shift(rep, y, rep); return *this;
-}
-
-inline Fix
-Fix::operator >>= (int y)
-{
- unique(); Fix::shift(rep, -y, rep); return *this;
-}
-
-#if defined (__GNUG__) && ! defined (__STRICT_ANSI__)
-inline Fix
-operator <? (const Fix& x, const Fix& y)
-{
- if ( Fix::compare(x.rep, y.rep) <= 0 ) return x; else return y;
-}
-
-inline Fix
-operator >? (const Fix& x, const Fix& y)
-{
- if ( Fix::compare(x.rep, y.rep) >= 0 ) return x; else return y;
-}
-#endif
-
-inline Fix
-abs(Fix x)
-{
- Fix::Rep* r = (Fix::compare(x.rep) >= 0 ? Fix::new_Fix(x.rep->len,x.rep) :
- Fix::negate(x.rep));
- return r;
-}
-
-inline int
-sgn(const Fix& x)
-{
- int a = Fix::compare(x.rep);
- return a == 0 ? 0 : (a > 0 ? 1 : -1);
-}
-
-inline int
-length(const Fix& x)
-{
- return x.rep->len;
-}
-
-inline ostream&
-operator << (ostream& s, const Fix& y)
-{
- if (s.opfx())
- y.printon(s);
- return s;
-}
-
-inline void
-negate (const Fix& x, Fix& r)
-{
- Fix::negate(x.rep, r.rep);
-}
-
-inline void
-add (const Fix& x, const Fix& y, Fix& r)
-{
- Fix::add(x.rep, y.rep, r.rep);
-}
-
-inline void
-subtract (const Fix& x, const Fix& y, Fix& r)
-{
- Fix::subtract(x.rep, y.rep, r.rep);
-}
-
-inline void
-multiply (const Fix& x, const Fix& y, Fix& r)
-{
- Fix::multiply(x.rep, y.rep, r.rep);
-}
-
-inline void
-divide (const Fix& x, const Fix& y, Fix& q, Fix& r)
-{
- Fix::divide(x.rep, y.rep, q.rep, r.rep);
-}
-
-inline void
-shift (const Fix& x, int y, Fix& r)
-{
- Fix::shift(x.rep, y, r.rep);
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/Fix16.cc b/contrib/libg++/libg++/src/Fix16.cc
deleted file mode 100644
index dddab2495d3b..000000000000
--- a/contrib/libg++/libg++/src/Fix16.cc
+++ /dev/null
@@ -1,238 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Kurt Baudendistel (gt-eedsp!baud@gatech.edu)
- adapted for libg++ by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-//
-// Fix.cc : fixed precision class support functions
-//
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <Fix16.h>
-
-// basic operators too large to be inline
-
-short Fix16::assign(double d)
-{
- if (d == 1.0)
- return Fix16_m_max;
- else if (d > Fix16_max)
- {
- short i = Fix16_m_max;
- range_error(i);
- return i;
- }
- else if (d < Fix16_min)
- {
- short i = Fix16_m_min;
- range_error(i);
- return i;
- }
- else
- return round(Fix16_mult * d);
-}
-
-_G_int32_t Fix32::assign(double d)
-{
- if (d == 1.0)
- return Fix32_m_max;
- else if (d > Fix32_max)
- {
- _G_int32_t i = Fix32_m_max;
- range_error(i);
- return i;
- }
- else if (d < Fix32_min)
- {
- _G_int32_t i = Fix32_m_min;
- range_error(i);
- return i;
- }
- else
- return round(Fix32_mult * d);
-}
-
-
-Fix32 operator * (const Fix32& a, const Fix32& b)
-{
-// break a and b into lo and hi parts, and do a multiple-precision
-// multiply, with rounding
-
- int apos = (a.m >= 0);
- _G_uint32_t ua = (apos)? a.m : - a.m;
- ua <<= 1; // ua is biased so result will be 31 bit mantissa, not 30:
- _G_uint32_t hi_a = (ua >> 16) & ((1 << 16) - 1);
- _G_uint32_t lo_a = ua & ((1 << 16) - 1);
-
- int bpos = (b.m >= 0);
- _G_uint32_t ub = (bpos)? b.m : -b.m;
- _G_uint32_t hi_b = (ub >> 16) & ((1 << 16) - 1);
- _G_uint32_t lo_b = ub & ((1 << 16) - 1);
-
- _G_uint32_t r = lo_a * lo_b + (1 << 15);
- r = (r >> 16) + hi_a * lo_b + lo_a * hi_b + (1 << 15);
- r = (r >> 16) + hi_a * hi_b;
- _G_int32_t p = (apos != bpos)? -r : r;
- return Fix32(p);
-}
-
-Fix16 operator / (const Fix16& a, const Fix16& b)
-{
- short q;
- int apos = (a.m >= 0);
- _G_int32_t la = (apos)? a.m : -a.m;
- _G_int32_t scaled_a = la << 15;
- int bpos = (b.m >= 0);
- short sb = (bpos)? b.m: -b.m;
- if (la >= sb)
- {
- q = (apos == bpos)? Fix16_m_max: Fix16_m_min;
- a.range_error(q);
- }
- else
- {
- q = scaled_a / sb;
- if ((scaled_a % sb) >= (sb / 2)) ++q;
- if (apos != bpos) q = -q;
- }
- return Fix16(q);
-}
-
-Fix32 operator / (const Fix32& a, const Fix32& b)
-{
- _G_int32_t q;
- int apos = (a.m >= 0);
- _G_uint32_t la = (apos)? a.m : -a.m;
- int bpos = (b.m >= 0);
- _G_uint32_t lb = (bpos)? b.m: -b.m;
- if (la >= lb)
- {
- q = (apos == bpos)? Fix32_m_max: Fix32_m_min;
- a.range_error(q);
- }
- else // standard shift-based division alg
- {
- q = 0;
- _G_int32_t r = la;
-
- for (int i = 32; i > 0; i--)
- {
- if ((unsigned)(r) > lb) {
- q = (q << 1) | 1;
- r -= lb;
- }
- else
- q = (q << 1);
- r <<= 1;
- }
-
- if (apos != bpos) q = -q; // Fix sign
- }
- return Fix32(q);
-}
-
-
-// error handling
-
-void Fix16::overflow(short& i) const
-{
- (*Fix16_overflow_handler)(i);
-}
-
-void Fix32::overflow(_G_int32_t& i) const
-{
- (*Fix32_overflow_handler)(i);
-}
-
-void Fix16::range_error(short& i) const
-{
- (*Fix16_range_error_handler)(i);
-}
-
-void Fix32::range_error(_G_int32_t& i) const
-{
- (*Fix32_range_error_handler)(i);
-}
-
-// data definitions
-
-Fix16_peh Fix16_overflow_handler = Fix16_overflow_saturate;
-Fix32_peh Fix32_overflow_handler = Fix32_overflow_saturate;
-
-Fix16_peh Fix16_range_error_handler = Fix16_warning;
-Fix32_peh Fix32_range_error_handler = Fix32_warning;
-
-//function definitions
-
-Fix16_peh set_Fix16_overflow_handler(Fix16_peh new_handler) {
- Fix16_peh old_handler = Fix16_overflow_handler;
- Fix16_overflow_handler = new_handler;
- return old_handler;
-}
-
-Fix32_peh set_Fix32_overflow_handler(Fix32_peh new_handler) {
- Fix32_peh old_handler = Fix32_overflow_handler;
- Fix32_overflow_handler = new_handler;
- return old_handler;
-}
-
-void set_overflow_handler(Fix16_peh handler16, Fix32_peh handler32) {
- set_Fix16_overflow_handler(handler16);
- set_Fix32_overflow_handler(handler32);
-}
-
-Fix16_peh set_Fix16_range_error_handler(Fix16_peh new_handler) {
- Fix16_peh old_handler = Fix16_range_error_handler;
- Fix16_range_error_handler = new_handler;
- return old_handler;
-}
-
-Fix32_peh set_Fix32_range_error_handler(Fix32_peh new_handler) {
- Fix32_peh old_handler = Fix32_range_error_handler;
- Fix32_range_error_handler = new_handler;
- return old_handler;
-}
-
-void set_range_error_handler(Fix16_peh handler16, Fix32_peh handler32) {
- set_Fix16_range_error_handler(handler16);
- set_Fix32_range_error_handler(handler32);
-}
-
-void Fix16_overflow_saturate(short& i)
- { i = (i > 0 ? Fix16_m_min : Fix16_m_max); }
-void Fix16_ignore(short&) {}
-void Fix16_warning(short&)
- { cerr << "warning: Fix16 result out of range\n"; }
-void Fix16_overflow_warning_saturate(short& i)
- { cerr << "warning: Fix16 result out of range\n";
- Fix16_overflow_saturate(i); }
-void Fix16_abort(short&)
- { cerr << "error: Fix16 result out of range\n"; abort(); }
-
-void Fix32_ignore(_G_int32_t&) {}
-void Fix32_overflow_saturate(_G_int32_t& i)
- { i = (i > 0 ? Fix32_m_min : Fix32_m_max); }
-void Fix32_warning(_G_int32_t&)
- { cerr << "warning: Fix32 result out of range\n"; }
-void Fix32_overflow_warning_saturate(_G_int32_t& i)
- { cerr << "warning: Fix32 result out of range\n";
- Fix32_overflow_saturate(i); }
-void Fix32_abort(_G_int32_t&)
- { cerr << "error: Fix32 result out of range\n"; abort(); }
-
diff --git a/contrib/libg++/libg++/src/Fix16.h b/contrib/libg++/libg++/src/Fix16.h
deleted file mode 100644
index 7f1336b308c8..000000000000
--- a/contrib/libg++/libg++/src/Fix16.h
+++ /dev/null
@@ -1,648 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Kurt Baudendistel (gt-eedsp!baud@gatech.edu)
- adapted for libg++ by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifndef _Fix16_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _Fix16_h 1
-
-#include <stream.h>
-#include <std.h>
-
-// constant definitions
-
-#define Fix16_fs ((double)((unsigned)(1 << 15)))
-
-#define Fix16_msb (1 << 15)
-#define Fix16_m_max ((1 << 15) - 1)
-#define Fix16_m_min ((short)(1 << 15))
-
-#define Fix16_mult Fix16_fs
-#define Fix16_div (1./Fix16_fs)
-#define Fix16_max (1. - .5/Fix16_fs)
-#define Fix16_min (-1.)
-
-
-#define Fix32_fs ((double)((_G_uint32_t)(1 << 31)))
-
-#define Fix32_msb ((_G_uint32_t)(1 << 31))
-#define Fix32_m_max ((_G_int32_t)((1 << 31) - 1))
-#define Fix32_m_min ((_G_int32_t)(1 << 31))
-
-#define Fix32_mult Fix32_fs
-#define Fix32_div (1./Fix32_fs)
-#define Fix32_max (1. - .5/Fix32_fs)
-#define Fix32_min (-1.)
-
-
-//
-// Fix16 class: 16-bit Fixed point data type
-//
-// consists of a 16-bit mantissa (sign bit & 15 data bits).
-//
-
-class Fix16
-{
- friend class Fix32;
-
- short m;
-
- short round(double d);
- short assign(double d);
- Fix16(short i);
- Fix16(int i);
-
- operator double() const;
-
-
-public:
- Fix16();
- Fix16(const Fix16& f);
- Fix16(double d);
- Fix16(const Fix32& f);
-
- ~Fix16();
-
- Fix16& operator=(const Fix16& f);
- Fix16& operator=(double d);
- Fix16& operator=(const Fix32& f);
-
- friend short& mantissa(Fix16& f);
- friend const short& mantissa(const Fix16& f);
- friend double value(const Fix16& f);
-
- Fix16 operator + () const;
- Fix16 operator - () const;
-
- friend Fix16 operator + (const Fix16& f, const Fix16& g);
- friend Fix16 operator - (const Fix16& f, const Fix16& g);
- friend Fix32 operator * (const Fix16& f, const Fix16& g);
- friend Fix16 operator / (const Fix16& f, const Fix16& g);
- friend Fix16 operator << (const Fix16& f, int b);
- friend Fix16 operator >> (const Fix16& f, int b);
-
- Fix16& operator += (const Fix16& f);
- Fix16& operator -= (const Fix16& f);
- Fix16& operator *= (const Fix16& );
- Fix16& operator /= (const Fix16& f);
-
- Fix16& operator <<=(int b);
- Fix16& operator >>=(int b);
-
- friend int operator == (const Fix16& f, const Fix16& g);
- friend int operator != (const Fix16& f, const Fix16& g);
- friend int operator >= (const Fix16& f, const Fix16& g);
- friend int operator <= (const Fix16& f, const Fix16& g);
- friend int operator > (const Fix16& f, const Fix16& g);
- friend int operator < (const Fix16& f, const Fix16& g);
-
- friend istream& operator >> (istream& s, Fix16& f);
- friend ostream& operator << (ostream& s, const Fix16& f);
-
- void overflow(short&) const;
- void range_error(short&) const;
-
- friend Fix16 operator * (const Fix16& f, int g);
- friend Fix16 operator * (int g, const Fix16& f);
- Fix16& operator *= (int g);
-};
-
-
-//
-// Fix32 class: 32-bit Fixed point data type
-//
-// consists of a 32-bit mantissa (sign bit & 31 data bits).
-//
-
-class Fix32
-{
- friend class Fix16;
-
- _G_int32_t m;
-
- _G_int32_t round(double d);
- _G_int32_t assign(double d);
-
- Fix32(_G_int32_t i);
- operator double() const;
-
-
-public:
- Fix32();
- Fix32(const Fix32& f);
- Fix32(const Fix16& f);
- Fix32(double d);
- ~Fix32();
-
- Fix32& operator = (const Fix32& f);
- Fix32& operator = (const Fix16& f);
- Fix32& operator = (double d);
-
- friend _G_int32_t& mantissa(Fix32& f);
- friend const _G_int32_t& mantissa(const Fix32& f);
- friend double value(const Fix32& f);
-
- Fix32 operator + () const;
- Fix32 operator - () const;
-
- friend Fix32 operator + (const Fix32& f, const Fix32& g);
- friend Fix32 operator - (const Fix32& f, const Fix32& g);
- friend Fix32 operator * (const Fix32& f, const Fix32& g);
- friend Fix32 operator / (const Fix32& f, const Fix32& g);
- friend Fix32 operator << (const Fix32& f, int b);
- friend Fix32 operator >> (const Fix32& f, int b);
-
- friend Fix32 operator * (const Fix16& f, const Fix16& g);
-
- Fix32& operator += (const Fix32& f);
- Fix32& operator -= (const Fix32& f);
- Fix32& operator *= (const Fix32& f);
- Fix32& operator /= (const Fix32& f);
- Fix32& operator <<=(int b);
- Fix32& operator >>=(int b);
-
- friend int operator == (const Fix32& f, const Fix32& g);
- friend int operator != (const Fix32& f, const Fix32& g);
- friend int operator >= (const Fix32& f, const Fix32& g);
- friend int operator <= (const Fix32& f, const Fix32& g);
- friend int operator > (const Fix32& f, const Fix32& g);
- friend int operator < (const Fix32& f, const Fix32& g);
-
- friend istream& operator >> (istream& s, Fix32& f);
- friend ostream& operator << (ostream& s, const Fix32& f);
-
- void overflow(_G_int32_t& i) const;
- void range_error(_G_int32_t& i) const;
-
- friend Fix32 operator * (const Fix32& f, int g);
- friend Fix32 operator * (int g, const Fix32& f);
- Fix32& operator *= (int g);
-};
-
-// active error handler declarations
-
-typedef void (*Fix16_peh)(short&);
-typedef void (*Fix32_peh)(_G_int32_t&);
-
-extern Fix16_peh Fix16_overflow_handler;
-extern Fix32_peh Fix32_overflow_handler;
-
-extern Fix16_peh Fix16_range_error_handler;
-extern Fix32_peh Fix32_range_error_handler;
-
-#if defined(SHORT_NAMES) || defined(VMS)
-#define set_overflow_handler sohndl
-#define set_range_error_handler srnghdl
-#endif
-
-
-// error handler declarations
-
-extern Fix16_peh set_Fix16_overflow_handler(Fix16_peh);
-extern Fix32_peh set_Fix32_overflow_handler(Fix32_peh);
-extern void set_overflow_handler(Fix16_peh, Fix32_peh);
-
-extern Fix16_peh set_Fix16_range_error_handler(Fix16_peh);
-extern Fix32_peh set_Fix32_range_error_handler(Fix32_peh);
-extern void set_range_error_handler(Fix16_peh, Fix32_peh);
-
-extern void
- Fix16_ignore(short&),
- Fix16_overflow_saturate(short&),
- Fix16_overflow_warning_saturate(short&),
- Fix16_warning(short&),
- Fix16_abort(short&);
-
-extern void
- Fix32_ignore(_G_int32_t&),
- Fix32_overflow_saturate(_G_int32_t&),
- Fix32_overflow_warning_saturate(_G_int32_t&),
- Fix32_warning(_G_int32_t&),
- Fix32_abort(_G_int32_t&);
-
-
-inline Fix16::~Fix16() {}
-
-inline Fix32::~Fix32() {}
-
-inline short Fix16::round(double d)
-{
- return short( (d >= 0)? d + 0.5 : d - 0.5);
-}
-
-inline Fix16::Fix16(short i)
-{
- m = i;
-}
-
-inline Fix16::Fix16(int i)
-{
- m = i;
-}
-
-inline Fix16::operator double() const
-{
- return Fix16_div * m;
-}
-
-inline Fix16::Fix16()
-{
- m = 0;
-}
-
-inline Fix16::Fix16(const Fix16& f)
-{
- m = f.m;
-}
-
-inline Fix16::Fix16(double d)
-{
- m = assign(d);
-}
-
-
-inline Fix16& Fix16::operator=(const Fix16& f)
-{
- m = f.m;
- return *this;
-}
-
-inline Fix16& Fix16::operator=(double d)
-{
- m = assign(d);
- return *this;
-}
-
-
-inline Fix32::Fix32()
-{
- m = 0;
-}
-
-inline Fix32::Fix32(_G_int32_t i)
-{
- m = i;
-}
-
-inline Fix32:: operator double() const
-{
- return Fix32_div * m;
-}
-
-
-inline Fix32::Fix32(const Fix32& f)
-{
- m = f.m;
-}
-
-inline Fix32::Fix32(const Fix16& f)
-{
- m = _G_int32_t(f.m) << 16;
-}
-
-inline Fix32::Fix32(double d)
-{
- m = assign(d);
-}
-
-inline Fix16::Fix16(const Fix32& f)
-{
- m = f.m >> 16;
-}
-
-
-inline Fix16& Fix16::operator=(const Fix32& f)
-{
- m = f.m >> 16;
- return *this;
-}
-
-inline Fix32& Fix32::operator=(const Fix32& f)
-{
- m = f.m;
- return *this;
-}
-
-inline Fix32& Fix32::operator=(const Fix16& f)
-{
- m = _G_int32_t(f.m) << 16;
- return *this;
-}
-
-inline Fix32& Fix32::operator=(double d)
-{
- m = assign(d);
- return *this;
-}
-
-inline short& mantissa(Fix16& f)
-{
- return f.m;
-}
-
-inline const short& mantissa(const Fix16& f)
-{
- return f.m;
-}
-
-inline double value(const Fix16& f)
-{
- return double(f);
-}
-
-inline Fix16 Fix16::operator+() const
-{
- return m;
-}
-
-inline Fix16 Fix16::operator-() const
-{
- return -m;
-}
-
-inline Fix16 operator+(const Fix16& f, const Fix16& g)
-{
- short sum = f.m + g.m;
- if ( (f.m ^ sum) & (g.m ^ sum) & Fix16_msb )
- f.overflow(sum);
- return sum;
-}
-
-inline Fix16 operator-(const Fix16& f, const Fix16& g)
-{
- short sum = f.m - g.m;
- if ( (f.m ^ sum) & (-g.m ^ sum) & Fix16_msb )
- f.overflow(sum);
- return sum;
-}
-
-inline Fix32 operator*(const Fix16& f, const Fix16& g)
-{
- return Fix32( _G_int32_t( _G_int32_t(f.m) * _G_int32_t(g.m) << 1));
-}
-
-inline Fix16 operator<<(const Fix16& a, int b)
-{
- return a.m << b;
-}
-
-inline Fix16 operator>>(const Fix16& a, int b)
-{
- return a.m >> b;
-}
-
-inline Fix16& Fix16:: operator+=(const Fix16& f)
-{
- return *this = *this + f;
-}
-
-inline Fix16& Fix16:: operator-=(const Fix16& f)
-{
- return *this = *this - f;
-}
-
-inline Fix16& Fix16::operator*=(const Fix16& f)
-{
- return *this = *this * f;
-}
-
-inline Fix16& Fix16:: operator/=(const Fix16& f)
-{
- return *this = *this / f;
-}
-
-inline Fix16& Fix16:: operator<<=(int b)
-{
- return *this = *this << b;
-}
-
-inline Fix16& Fix16:: operator>>=(int b)
-{
- return *this = *this >> b;
-}
-
-inline int operator==(const Fix16& f, const Fix16& g)
-{
- return f.m == g.m;
-}
-
-inline int operator!=(const Fix16& f, const Fix16& g)
-{
- return f.m != g.m;
-}
-
-inline int operator>=(const Fix16& f, const Fix16& g)
-{
- return f.m >= g.m;
-}
-
-inline int operator<=(const Fix16& f, const Fix16& g)
-{
- return f.m <= g.m;
-}
-
-inline int operator>(const Fix16& f, const Fix16& g)
-{
- return f.m > g.m;
-}
-
-inline int operator<(const Fix16& f, const Fix16& g)
-{
- return f.m < g.m;
-}
-
-inline istream& operator>>(istream& s, Fix16& f)
-{
- double d;
- s >> d;
- f = d;
- return s;
-}
-
-inline ostream& operator<<(ostream& s, const Fix16& f)
-{
- return s << double(f);
-}
-
-
-inline Fix16 operator*(const Fix16& f, int g)
-{
- return Fix16(short(f.m * g));
-}
-
-inline Fix16 operator*(int g, const Fix16& f)
-{
- return f * g;
-}
-
-
-inline Fix16& Fix16::operator*=(int g)
-{
- return *this = *this * g;
-}
-
-inline _G_int32_t Fix32::round(double d)
-{
- return _G_int32_t( (d >= 0)? d + 0.5 : d - 0.5);
-}
-
-inline _G_int32_t& mantissa(Fix32& f)
-{
- return f.m;
-}
-
-inline const _G_int32_t& mantissa(const Fix32& f)
-{
- return f.m;
-}
-
-inline double value(const Fix32& f)
-{
- return double(f);
-}
-
-inline Fix32 Fix32::operator+() const
-{
- return m;
-}
-
-inline Fix32 Fix32::operator-() const
-{
- return -m;
-}
-
-inline Fix32 operator+(const Fix32& f, const Fix32& g)
-{
- _G_int32_t sum = f.m + g.m;
- if ( (f.m ^ sum) & (g.m ^ sum) & Fix32_msb )
- f.overflow(sum);
- return sum;
-}
-
-inline Fix32 operator-(const Fix32& f, const Fix32& g)
-{
- _G_int32_t sum = f.m - g.m;
- if ( (f.m ^ sum) & (-g.m ^ sum) & Fix32_msb )
- f.overflow(sum);
- return sum;
-}
-
-inline Fix32 operator<<(const Fix32& a, int b)
-{
- return a.m << b;
-}
-
-inline Fix32 operator>>(const Fix32& a, int b)
-{
- return a.m >> b;
-}
-
-inline Fix32& Fix32::operator+=(const Fix32& f)
-{
- return *this = *this + f;
-}
-
-inline Fix32& Fix32::operator-=(const Fix32& f)
-{
- return *this = *this - f;
-}
-
-inline Fix32& Fix32::operator*=(const Fix32& f)
-{
- return *this = *this * f;
-}
-
-inline Fix32& Fix32::operator/=(const Fix32& f)
-{
- return *this = *this / f;
-}
-
-
-inline Fix32& Fix32::operator<<=(int b)
-{
- return *this = *this << b;
-}
-
-inline Fix32& Fix32::operator>>=(int b)
-{
- return *this = *this >> b;
-}
-
-inline int operator==(const Fix32& f, const Fix32& g)
-{
- return f.m == g.m;
-}
-
-inline int operator!=(const Fix32& f, const Fix32& g)
-{
- return f.m != g.m;
-}
-
-inline int operator>=(const Fix32& f, const Fix32& g)
-{
- return f.m >= g.m;
-}
-
-inline int operator<=(const Fix32& f, const Fix32& g)
-{
- return f.m <= g.m;
-}
-
-inline int operator>(const Fix32& f, const Fix32& g)
-{
- return f.m > g.m;
-}
-
-inline int operator<(const Fix32& f, const Fix32& g)
-{
- return f.m < g.m;
-}
-
-inline istream& operator>>(istream& s, Fix32& f)
-{
- double d;
- s >> d;
- f = d;
- return s;
-}
-
-inline ostream& operator<<(ostream& s, const Fix32& f)
-{
- return s << double(f);
-}
-
-inline Fix32 operator*(const Fix32& f, int g)
-{
- return Fix32(_G_int32_t(f.m * g));
-}
-
-inline Fix32 operator*(int g, const Fix32& f)
-{
- return f * g;
-}
-
-
-
-inline Fix32& Fix32::operator*=(int g)
-{
- return *this = *this * g;
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/Fix24.cc b/contrib/libg++/libg++/src/Fix24.cc
deleted file mode 100644
index 41878bb7c5e8..000000000000
--- a/contrib/libg++/libg++/src/Fix24.cc
+++ /dev/null
@@ -1,329 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Kurt Baudendistel (gt-eedsp!baud@gatech.edu)
- adapted for libg++ by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-//
-// Fix24.cc : fixed precision class support functions
-//
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <Fix24.h>
-
-// basic operators too large to be inline
-
-_G_int32_t Fix24::assign(double d)
-{
- if (d == 1.0)
- return Fix24_m_max;
- else if (d > Fix24_max)
- {
- _G_int32_t i = Fix24_m_max;
- range_error(i);
- return i;
- }
- else if (d < Fix24_min)
- {
- _G_int32_t i = Fix24_m_min;
- range_error(i);
- return i;
- }
- else {
- // Round to 24 bits
- d = (_G_int32_t) (d * (1 << 24) + ((d >= 0)? 0.5 : -0.5));
- /* Convert to integer format */
- return ((_G_int32_t) d) << (Fix24_shift - 24);
- }
-}
-
-twolongs Fix48::assign(double d)
-{
- if (d == 1.0)
- return Fix48_m_max;
- else if (d > Fix48_max)
- {
- twolongs i = Fix48_m_max;
- range_error(i);
- return i;
- }
- else if (d < Fix48_min)
- {
- twolongs i = Fix48_m_min;
- range_error(i);
- return i;
- }
- else {
- twolongs i;
- int sign = (d < 0);
-
-/* First, convert the absolute value of d to a 48-bit integer format */
- if (d < 0) d = -d;
- i.u = ((_G_int32_t)(d *= Fix24_mult)) & 0xffffff00;
- i.l = ((_G_uint32_t)((d - i.u)* (Fix24_mult / (1 << 7)))) & 0xffffff00;
-
-/* Calculate the two's complement if d was negative */
- if (sign) {
- _G_uint32_t oldlower = i.l;
- i.l = (~i.l + 1) & 0xffffff00;
- i.u = (~i.u + (((oldlower ^ i.l) & Fix24_msb)? 0 : 1)) & ~0xffL;
- }
- return i;
- }
-}
-
-
-Fix48 operator * (const Fix24& a, const Fix24& b)
-{
-// break a and b into lo and hi parts, and do a multiple-precision
-// multiply, with rounding
-
- int apos = (a.m >= 0);
- _G_uint32_t ua = (apos)? a.m : - a.m;
- ua <<= 1; // ua is biased so result will be 47 bit mantissa, not 46:
- _G_uint32_t hi_a = (ua >> 16) & ((1 << 16) - 1);
- _G_uint32_t lo_a = ua & ((1 << 16) - 1);
-
- int bpos = (b.m >= 0);
- _G_uint32_t ub = (bpos)? b.m : -b.m;
- _G_uint32_t hi_b = (ub >> 16) & ((1 << 16) - 1);
- _G_uint32_t lo_b = ub & ((1 << 16) - 1);
-
- _G_uint32_t
- hi_r = hi_a * hi_b,
- mi_r = hi_a * lo_b + lo_a * hi_b,
- lo_r = lo_a * lo_b,
- rl = ((hi_r << 16) & 0x00ffffffL) + (mi_r & 0x00ffffffL) + (lo_r >> 16);
- twolongs r;
- r.u = (hi_r & 0xffffff00L) + ((mi_r >> 16) & 0x0000ff00L)
- + ((rl >> 16) & 0x0000ff00L);
- r.l = rl << 8;
-
- if ( apos != bpos ) {
- _G_uint32_t l = r.l;
- r.l = -r.l;
- r.u = (~r.u + ((l ^ r.l) & Fix24_msb ? 0 : Fix24_lsb)) & 0xffffff00;
- }
- return r;
-}
-
-Fix24 operator / (const Fix24& a, const Fix24& b)
-{
- _G_int32_t q;
- int apos = (a.m >= 0);
- _G_uint32_t la = (apos)? a.m : -a.m;
- int bpos = (b.m >= 0);
- _G_uint32_t lb = (bpos)? b.m: -b.m;
- if (la >= lb)
- {
- q = (apos == bpos)? Fix24_m_max: Fix24_m_min;
- a.range_error(q);
- }
- else // standard shift-based division alg
- {
- q = 0;
- _G_int32_t r = la;
-
- for (int i = 32; i > 0; i--)
- {
- if ((unsigned)(r) > lb) {
- q = (q << 1) | 1;
- r -= lb;
- }
- else
- q = (q << 1);
- r <<= 1;
- }
-
- q += 0x80; // Round result to 24 bits
- if (apos != bpos) q = -q; // Fix sign
- }
- return (q & ~0xff);
-}
-
-
-Fix48 operator + (const Fix48& f, const Fix48& g)
-{
- _G_int32_t lo_r = (f.m.l >> 8) + (g.m.l >> 8);
- twolongs r;
- r.u = f.m.u + g.m.u + (lo_r & 0x01000000L ? 0x00000100L : 0);
- r.l = lo_r << 8;
-
- if ( (f.m.u ^ r.u) & (g.m.u ^ r.u) & Fix24_msb )
- f.overflow(r);
- return r;
-}
-
-Fix48 operator - (const Fix48& f, const Fix48& g)
-{
- unsigned lo_r = (f.m.l >> 8) - (g.m.l >> 8);
- twolongs r;
- r.u = f.m.u - g.m.u - (lo_r & 0x01000000L ? 0x00000100L: 0);
- r.l = lo_r << 8;
-
- if ( ((f.m.u ^ r.u) & (-g.m.u ^ r.u) & Fix24_msb) && g.m.u )
- f.overflow(r);
- return r;
-}
-
-Fix48 operator * (const Fix48& a, int b)
-{
- twolongs r;
- int bpos = (b >= 0);
- unsigned ub = (bpos)? b : -b;
- if ( ub >= 65536L ) {
- r = (bpos)? Fix48_m_max : Fix48_m_min;
- a.range_error(r);
- }
- else {
- _G_uint32_t
- lo_r = (a.m.l & 0xffff) * ub,
- mi_r = ((a.m.l >> 16) & 0xffff) * ub,
- hi_r = a.m.u * ub;
- r.l = lo_r + (mi_r << 16);
- r.u = hi_r + ((mi_r >> 8) & 0x00ffff00L);
- if ( !bpos ) {
- _G_uint32_t l = r.l;
- r.l = -r.l & 0xffffffff;
- r.u = ~r.u + ((l ^ r.l) & Fix24_msb ? 0 : Fix24_lsb);
- }
- }
- return r;
-}
-
-Fix48 operator << (const Fix48& a, int b)
-{
- twolongs r; r.u = 0; r.l = 0;
- if ( b >= 0 )
- if ( b < 24 ) {
- r.u = (a.m.u << b) + ((a.m.l >> (24 - b)) & 0xffffff00L);
- r.l = a.m.l << b;
- }
- else if ( b < 48 ) {
- r.u = a.m.l << (b - 24);
- }
- return r;
-}
-
-Fix48 operator >> (const Fix48& a, int b)
-{
- twolongs r; r.u = 0; r.l = 0;
- if ( b >= 0 )
- if ( b < 24 ) {
- r.l = ((a.m.u << (24 - b)) & 0xffffffffL) + ((a.m.l >> b) & 0xffffff00L);
- r.u = (a.m.u >> b) & ~0xffL;
- }
- else if ( b < 48 ) {
- r.l = (a.m.u >> (b - 24)) & 0xffffff00L;
- r.u = (a.m.u >> 24) & ~0xffL;
- }
- else {
- r.l = (a.m.u >> 24) & ~0xffL;
- r.u = r.l;
- }
- return r;
-}
-
-// error handling
-
-void Fix24::overflow(_G_int32_t& i) const
-{
- (*Fix24_overflow_handler)(i);
-}
-
-void Fix48::overflow(twolongs& i) const
-{
- (*Fix48_overflow_handler)(i);
-}
-
-void Fix24::range_error(_G_int32_t& i) const
-{
- (*Fix24_range_error_handler)(i);
-}
-
-void Fix48::range_error(twolongs& i) const
-{
- (*Fix48_range_error_handler)(i);
-}
-
-// data definitions
-
-Fix24_peh Fix24_overflow_handler = Fix24_overflow_saturate;
-Fix48_peh Fix48_overflow_handler = Fix48_overflow_saturate;
-
-Fix24_peh Fix24_range_error_handler = Fix24_warning;
-Fix48_peh Fix48_range_error_handler = Fix48_warning;
-
-//function definitions
-
-Fix24_peh set_Fix24_overflow_handler(Fix24_peh new_handler) {
- Fix24_peh old_handler = Fix24_overflow_handler;
- Fix24_overflow_handler = new_handler;
- return old_handler;
-}
-
-Fix48_peh set_Fix48_overflow_handler(Fix48_peh new_handler) {
- Fix48_peh old_handler = Fix48_overflow_handler;
- Fix48_overflow_handler = new_handler;
- return old_handler;
-}
-
-void set_overflow_handler(Fix24_peh handler24, Fix48_peh handler48) {
- set_Fix24_overflow_handler(handler24);
- set_Fix48_overflow_handler(handler48);
-}
-
-Fix24_peh set_Fix24_range_error_handler(Fix24_peh new_handler) {
- Fix24_peh old_handler = Fix24_range_error_handler;
- Fix24_range_error_handler = new_handler;
- return old_handler;
-}
-
-Fix48_peh set_Fix48_range_error_handler(Fix48_peh new_handler) {
- Fix48_peh old_handler = Fix48_range_error_handler;
- Fix48_range_error_handler = new_handler;
- return old_handler;
-}
-
-void set_range_error_handler(Fix24_peh handler24, Fix48_peh handler48) {
- set_Fix24_range_error_handler(handler24);
- set_Fix48_range_error_handler(handler48);
-}
-
-void Fix24_overflow_saturate(_G_int32_t& i)
- { i = (i > 0 ? Fix24_m_min : Fix24_m_max); }
-void Fix24_ignore(_G_int32_t&) {}
-void Fix24_warning(_G_int32_t&)
- { cerr << "warning: Fix24 result out of range\n"; }
-void Fix24_overflow_warning_saturate(_G_int32_t& i)
- { cerr << "warning: Fix24 result out of range\n";
- Fix24_overflow_saturate(i); }
-void Fix24_abort(_G_int32_t&)
- { cerr << "error: Fix24 result out of range\n"; abort(); }
-
-void Fix48_ignore(twolongs&) {}
-void Fix48_overflow_saturate(twolongs& i)
- { i = (i.u > 0 ? Fix48_m_min : Fix48_m_max); }
-void Fix48_warning(twolongs&)
- { cerr << "warning: Fix48 result out of range\n"; }
-void Fix48_overflow_warning_saturate(twolongs& i)
- { cerr << "warning: Fix48 result out of range\n";
- Fix48_overflow_saturate(i); }
-void Fix48_abort(twolongs&)
- { cerr << "error: Fix48 result out of range\n"; abort(); }
-
diff --git a/contrib/libg++/libg++/src/Fix24.h b/contrib/libg++/libg++/src/Fix24.h
deleted file mode 100644
index 215ded96af0f..000000000000
--- a/contrib/libg++/libg++/src/Fix24.h
+++ /dev/null
@@ -1,597 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Kurt Baudendistel (gt-eedsp!baud@gatech.edu)
- adapted for libg++ by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifndef _Fix24_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _Fix24_h 1
-
-#include <stream.h>
-#include <std.h>
-
-// extra type definitions
-
-typedef struct {
- _G_int32_t u;
- _G_uint32_t l;
-} twolongs;
-
-// constant definitions
-
-static const int
- Fix24_shift = 31;
-
-static const double
- Fix24_fs = 2147483648., // 2^Fix24_shift
- Fix24_mult = Fix24_fs,
- Fix24_div = 1./Fix24_fs,
- Fix24_max = 1. - .5/Fix24_fs,
- Fix24_min = -1.;
-
-static const _G_uint32_t
- Fix24_msb = 0x80000000L,
- Fix24_lsb = 0x00000100L,
- Fix24_m_max = 0x7fffff00L,
- Fix24_m_min = 0x80000000L;
-
-static const double
- Fix48_fs = 36028797018963968., // 2^(24+Fix24_shift)
- Fix48_max = 1. - .5/Fix48_fs,
- Fix48_min = -1.,
- Fix48_div_u = 1./Fix24_fs,
- Fix48_div_l = 1./Fix48_fs;
-
-static const twolongs
- Fix48_msb = { 0x80000000L, 0L },
- Fix48_lsb = { 0L, 0x00000100L },
- Fix48_m_max = { 0x7fffff00L, 0xffffff00L },
- Fix48_m_min = { 0x80000000L, 0L };
-
-//
-// Fix24 class: 24-bit Fixed point data type
-//
-// consists of a 24-bit mantissa (sign bit & 23 data bits).
-//
-
-class Fix24
-{
- friend class Fix48;
-
- _G_int32_t m;
-
- _G_int32_t assign(double d);
- operator double() const;
- Fix24(long i);
- Fix24(int i);
-
-
-public:
- Fix24();
- Fix24(const Fix24& f);
- Fix24(double d);
- Fix24(const Fix48& f);
-
- ~Fix24();
-
- Fix24& operator=(const Fix24& f);
- Fix24& operator=(double d);
- Fix24& operator=(const Fix48& f);
-
- friend _G_int32_t& mantissa(Fix24& f);
- friend const _G_int32_t& mantissa(const Fix24& f);
- friend double value(const Fix24& f);
-
- Fix24 operator + () const;
- Fix24 operator - () const;
-
- friend Fix24 operator + (const Fix24& f, const Fix24& g);
- friend Fix24 operator - (const Fix24& f, const Fix24& g);
- friend Fix48 operator * (const Fix24& f, const Fix24& g);
- friend Fix24 operator * (const Fix24& f, int g);
- friend Fix24 operator * (int g, const Fix24& f);
- friend Fix24 operator / (const Fix24& f, const Fix24& g);
- friend Fix24 operator << (const Fix24& f, int b);
- friend Fix24 operator >> (const Fix24& f, int b);
-
- Fix24& operator += (const Fix24& f);
- Fix24& operator -= (const Fix24& f);
- Fix24& operator *= (const Fix24& f);
- Fix24& operator *= (int b);
- Fix24& operator /= (const Fix24& f);
-
- Fix24& operator <<=(int b);
- Fix24& operator >>=(int b);
-
- friend int operator == (const Fix24& f, const Fix24& g);
- friend int operator != (const Fix24& f, const Fix24& g);
- friend int operator >= (const Fix24& f, const Fix24& g);
- friend int operator <= (const Fix24& f, const Fix24& g);
- friend int operator > (const Fix24& f, const Fix24& g);
- friend int operator < (const Fix24& f, const Fix24& g);
-
- friend istream& operator >> (istream& s, Fix24& f);
- friend ostream& operator << (ostream& s, const Fix24& f);
-
- void overflow(_G_int32_t&) const;
- void range_error(_G_int32_t&) const;
-};
-
-
-//
-// Fix48 class: 48-bit Fixed point data type
-//
-// consists of a 48-bit mantissa (sign bit & 47 data bits).
-//
-
-class Fix48
-{
- friend class Fix24;
-
- twolongs m;
-
- twolongs assign(double d);
- operator double() const;
- Fix48(twolongs i);
-
-public:
- Fix48();
- Fix48(const Fix48& f);
- Fix48(const Fix24& f);
- Fix48(double d);
- ~Fix48();
-
- Fix48& operator = (const Fix48& f);
- Fix48& operator = (const Fix24& f);
- Fix48& operator = (double d);
-
- friend twolongs& mantissa(Fix48& f);
- friend const twolongs& mantissa(const Fix48& f);
- friend double value(const Fix48& f);
-
- Fix48 operator + () const;
- Fix48 operator - () const;
-
- friend Fix48 operator + (const Fix48& f, const Fix48& g);
- friend Fix48 operator - (const Fix48& f, const Fix48& g);
- friend Fix48 operator * (const Fix48& f, int g);
- friend Fix48 operator * (int g, const Fix48& f);
- friend Fix48 operator << (const Fix48& f, int b);
- friend Fix48 operator >> (const Fix48& f, int b);
-
- friend Fix48 operator * (const Fix24& f, const Fix24& g);
-
- Fix48& operator += (const Fix48& f);
- Fix48& operator -= (const Fix48& f);
- Fix48& operator *= (int b);
- Fix48& operator <<=(int b);
- Fix48& operator >>=(int b);
-
- friend int operator == (const Fix48& f, const Fix48& g);
- friend int operator != (const Fix48& f, const Fix48& g);
- friend int operator >= (const Fix48& f, const Fix48& g);
- friend int operator <= (const Fix48& f, const Fix48& g);
- friend int operator > (const Fix48& f, const Fix48& g);
- friend int operator < (const Fix48& f, const Fix48& g);
-
- friend istream& operator >> (istream& s, Fix48& f);
- friend ostream& operator << (ostream& s, const Fix48& f);
-
- void overflow(twolongs& i) const;
- void range_error(twolongs& i) const;
-};
-
-
-// active error handler declarations
-
-typedef void (*Fix24_peh)(_G_int32_t&);
-typedef void (*Fix48_peh)(twolongs&);
-
-extern Fix24_peh Fix24_overflow_handler;
-extern Fix48_peh Fix48_overflow_handler;
-
-extern Fix24_peh Fix24_range_error_handler;
-extern Fix48_peh Fix48_range_error_handler;
-
-
-// error handler declarations
-
-#if defined(SHORT_NAMES) || defined(VMS)
-#define set_overflow_handler sohndl
-#define set_range_error_handler srnghdl
-#endif
-
-extern Fix24_peh set_Fix24_overflow_handler(Fix24_peh);
-extern Fix48_peh set_Fix48_overflow_handler(Fix48_peh);
-extern void set_overflow_handler(Fix24_peh, Fix48_peh);
-
-extern Fix24_peh set_Fix24_range_error_handler(Fix24_peh);
-extern Fix48_peh set_Fix48_range_error_handler(Fix48_peh);
-extern void set_range_error_handler(Fix24_peh, Fix48_peh);
-
-extern void
- Fix24_ignore(_G_int32_t&),
- Fix24_overflow_saturate(_G_int32_t&),
- Fix24_overflow_warning_saturate(_G_int32_t&),
- Fix24_warning(_G_int32_t&),
- Fix24_abort(_G_int32_t&);
-
-extern void
- Fix48_ignore(twolongs&),
- Fix48_overflow_saturate(twolongs&),
- Fix48_overflow_warning_saturate(twolongs&),
- Fix48_warning(twolongs&),
- Fix48_abort(twolongs&);
-
-
-inline Fix24::~Fix24() {}
-
-inline Fix48::~Fix48() {}
-
-inline Fix24::Fix24(long i)
-{
- m = i;
-}
-
-inline Fix24::Fix24(int i)
-{
- m = i;
-}
-
-inline Fix24::operator double() const
-{
- return Fix24_div * m;
-}
-
-inline Fix24::Fix24()
-{
- m = 0;
-}
-
-inline Fix24::Fix24(const Fix24& f)
-{
- m = f.m;
-}
-
-inline Fix24::Fix24(double d)
-{
- m = assign(d);
-}
-
-inline Fix24::Fix24(const Fix48& f)
-{
- m = f.m.u;
-}
-
-inline Fix24& Fix24::operator=(const Fix24& f)
-{
- m = f.m;
- return *this;
-}
-
-inline Fix24& Fix24::operator=(double d)
-{
- m = assign(d);
- return *this;
-}
-
-inline Fix24& Fix24::operator=(const Fix48& f)
-{
- m = f.m.u;
- return *this;
-}
-
-inline _G_int32_t& mantissa(Fix24& f)
-{
- return f.m;
-}
-
-inline const _G_int32_t& mantissa(const Fix24& f)
-{
- return f.m;
-}
-
-inline double value(const Fix24& f)
-{
- return double(f);
-}
-
-inline Fix24 Fix24::operator+() const
-{
- return m;
-}
-
-inline Fix24 Fix24::operator-() const
-{
- return -m;
-}
-
-inline Fix24 operator+(const Fix24& f, const Fix24& g)
-{
- _G_int32_t sum = f.m + g.m;
- if ( (f.m ^ sum) & (g.m ^ sum) & Fix24_msb )
- f.overflow(sum);
- return sum;
-}
-
-inline Fix24 operator-(const Fix24& f, const Fix24& g)
-{
- _G_int32_t sum = f.m - g.m;
- if ( (f.m ^ sum) & (-g.m ^ sum) & Fix24_msb )
- f.overflow(sum);
- return sum;
-}
-
-inline Fix24 operator*(const Fix24& a, int b)
-{
- return a.m * b;
-}
-
-inline Fix24 operator*(int b, const Fix24& a)
-{
- return a * b;
-}
-
-inline Fix24 operator<<(const Fix24& a, int b)
-{
- return a.m << b;
-}
-
-inline Fix24 operator>>(const Fix24& a, int b)
-{
- return (a.m >> b) & ~0xff;
-}
-
-inline Fix24& Fix24:: operator+=(const Fix24& f)
-{
- return *this = *this + f;
-}
-
-inline Fix24& Fix24:: operator-=(const Fix24& f)
-{
- return *this = *this - f;
-}
-
-inline Fix24& Fix24::operator*=(const Fix24& f)
-{
- return *this = *this * f;
-}
-
-inline Fix24& Fix24:: operator/=(const Fix24& f)
-{
- return *this = *this / f;
-}
-
-inline Fix24& Fix24:: operator<<=(int b)
-{
- return *this = *this << b;
-}
-
-inline Fix24& Fix24:: operator>>=(int b)
-{
- return *this = *this >> b;
-}
-
-inline Fix24& Fix24::operator*=(int b)
-{
- return *this = *this * b;
-}
-
-inline int operator==(const Fix24& f, const Fix24& g)
-{
- return f.m == g.m;
-}
-
-inline int operator!=(const Fix24& f, const Fix24& g)
-{
- return f.m != g.m;
-}
-
-inline int operator>=(const Fix24& f, const Fix24& g)
-{
- return f.m >= g.m;
-}
-
-inline int operator<=(const Fix24& f, const Fix24& g)
-{
- return f.m <= g.m;
-}
-
-inline int operator>(const Fix24& f, const Fix24& g)
-{
- return f.m > g.m;
-}
-
-inline int operator<(const Fix24& f, const Fix24& g)
-{
- return f.m < g.m;
-}
-
-inline istream& operator>>(istream& s, Fix24& f)
-{
- double d;
- s >> d;
- f = d;
- return s;
-}
-
-inline ostream& operator<<(ostream& s, const Fix24& f)
-{
- return s << double(f);
-}
-
-inline Fix48::Fix48(twolongs i)
-{
- m = i;
-}
-
-inline Fix48:: operator double() const
-{
-/*
- * Note: can't simply do Fix48_div_u * m.u + Fix48_div_l * m.l, because
- * m.u is signed and m.l is unsigned.
- */
- return (m.u >= 0)? Fix48_div_u * m.u + Fix48_div_l * m.l :
- (Fix48_div_u * ((_G_uint32_t)(m.u & 0xffffff00))
- + Fix48_div_l * m.l) - 2;
-}
-
-inline Fix48::Fix48()
-{
- m.u = 0;
- m.l = 0;
-}
-
-inline Fix48::Fix48(const Fix48& f)
-{
- m = f.m;
-}
-
-inline Fix48::Fix48(const Fix24& f)
-{
- m.u = f.m;
- m.l = 0;
-}
-
-inline Fix48::Fix48(double d)
-{
- m = assign(d);
-}
-
-inline Fix48& Fix48::operator=(const Fix48& f)
-{
- m = f.m;
- return *this;
-}
-
-inline Fix48& Fix48::operator=(const Fix24& f)
-{
- m.u = f.m;
- m.l = 0;
- return *this;
-}
-
-inline Fix48& Fix48::operator=(double d)
-{
- m = assign(d);
- return *this;
-}
-
-inline twolongs& mantissa(Fix48& f)
-{
- return f.m;
-}
-
-inline const twolongs& mantissa(const Fix48& f)
-{
- return f.m;
-}
-
-inline double value(const Fix48& f)
-{
- return double(f);
-}
-
-inline Fix48 Fix48::operator+() const
-{
- return m;
-}
-
-inline Fix48 Fix48::operator-() const
-{
- twolongs n;
- n.l = -m.l;
- n.u = ~m.u + ((n.l ^ m.l) & Fix24_msb ? 0 : Fix24_lsb);
- return Fix48(n);
-}
-
-inline Fix48 operator*(int b, const Fix48& a)
-{
- return a * b;
-}
-
-inline Fix48& Fix48::operator+=(const Fix48& f)
-{
- return *this = *this + f;
-}
-
-inline Fix48& Fix48::operator-=(const Fix48& f)
-{
- return *this = *this - f;
-}
-
-inline Fix48& Fix48::operator*=(int b)
-{
- return *this = *this * b;
-}
-
-inline Fix48& Fix48::operator<<=(int b)
-{
- return *this = *this << b;
-}
-
-inline Fix48& Fix48::operator>>=(int b)
-{
- return *this = *this >> b;
-}
-
-inline int operator==(const Fix48& f, const Fix48& g)
-{
- return f.m.u == g.m.u && f.m.l == g.m.l;
-}
-
-inline int operator!=(const Fix48& f, const Fix48& g)
-{
- return f.m.u != g.m.u || f.m.l != g.m.l;
-}
-
-inline int operator>=(const Fix48& f, const Fix48& g)
-{
- return f.m.u >= g.m.u || (f.m.u == g.m.u && f.m.l >= g.m.l);
-}
-
-inline int operator<=(const Fix48& f, const Fix48& g)
-{
- return f.m.u <= g.m.u || (f.m.u == g.m.u && f.m.l <= g.m.l);
-}
-
-inline int operator>(const Fix48& f, const Fix48& g)
-{
- return f.m.u > g.m.u || (f.m.u == g.m.u && f.m.l > g.m.l);
-}
-
-inline int operator<(const Fix48& f, const Fix48& g)
-{
- return f.m.u < g.m.u || (f.m.u == g.m.u && f.m.l < g.m.l);
-}
-
-inline istream& operator>>(istream& s, Fix48& f)
-{
- double d;
- s >> d;
- f = d;
- return s;
-}
-
-inline ostream& operator<<(ostream& s, const Fix48& f)
-{
- return s << double(f);
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/Geom.cc b/contrib/libg++/libg++/src/Geom.cc
deleted file mode 100644
index 3e6372e5978c..000000000000
--- a/contrib/libg++/libg++/src/Geom.cc
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Dirk Grunwald (grunwald@cs.uiuc.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <builtin.h>
-#include <Random.h>
-#include <Geom.h>
-
-double Geometric::operator()()
-{
- int samples;
- for (samples = 1; pGenerator -> asDouble() < pMean; samples++);
- return((double) samples);
-}
-
diff --git a/contrib/libg++/libg++/src/Geom.h b/contrib/libg++/libg++/src/Geom.h
deleted file mode 100644
index 064849ab8e65..000000000000
--- a/contrib/libg++/libg++/src/Geom.h
+++ /dev/null
@@ -1,52 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Dirk Grunwald (grunwald@cs.uiuc.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-#ifndef _Geometric_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _Geometric_h
-
-#include <Random.h>
-
-class Geometric: public Random {
-protected:
- double pMean;
-public:
- Geometric(double mean, RNG *gen);
-
- double mean();
- double mean(double x);
-
- virtual double operator()();
-
-};
-
-
-inline Geometric::Geometric(double mean, RNG *gen) : Random(gen)
-{
- pMean = mean;
-}
-
-
-inline double Geometric::mean() { return pMean; }
-inline double Geometric::mean(double x) {
- double tmp = pMean; pMean = x; return tmp;
-}
-
-
-#endif
diff --git a/contrib/libg++/libg++/src/GetOpt.cc b/contrib/libg++/libg++/src/GetOpt.cc
deleted file mode 100644
index 8dc54a1fe607..000000000000
--- a/contrib/libg++/libg++/src/GetOpt.cc
+++ /dev/null
@@ -1,253 +0,0 @@
-/*
-Getopt for GNU.
-Copyright (C) 1987, 1989 Free Software Foundation, Inc.
-
-(Modified by Douglas C. Schmidt for use with GNU G++.)
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-/* AIX requires the alloca decl to be the first thing in the file. */
-#ifdef __GNUC__
-#define alloca __builtin_alloca
-#elif defined(sparc)
-#include <alloca.h>
-extern "C" void *__builtin_alloca(...);
-#elif defined(_AIX)
-#pragma alloca
-#else
-char *alloca ();
-#endif
-#include <GetOpt.h>
-
-char* GetOpt::nextchar = 0;
-int GetOpt::first_nonopt = 0;
-int GetOpt::last_nonopt = 0;
-
-GetOpt::GetOpt (int argc, char **argv, const char *optstring)
- :opterr (1), nargc (argc), nargv (argv), noptstring (optstring)
-{
- /* Initialize the internal data when the first call is made.
- Start processing options with ARGV-element 1 (since ARGV-element 0
- is the program name); the sequence of previously skipped
- non-option ARGV-elements is empty. */
-
- first_nonopt = last_nonopt = optind = 1;
- optarg = nextchar = 0;
-
- /* Determine how to handle the ordering of options and nonoptions. */
-
- if (optstring[0] == '-')
- ordering = RETURN_IN_ORDER;
- else if (getenv ("_POSIX_OPTION_ORDER") != 0)
- ordering = REQUIRE_ORDER;
- else
- ordering = PERMUTE;
-}
-
-void
-GetOpt::exchange (char **argv)
-{
- int nonopts_size
- = (last_nonopt - first_nonopt) * sizeof (char *);
- char **temp = (char **) alloca (nonopts_size);
-
- /* Interchange the two blocks of data in argv. */
-
- memcpy (temp, &argv[first_nonopt], nonopts_size);
- memcpy (&argv[first_nonopt], &argv[last_nonopt],
- (optind - last_nonopt) * sizeof (char *));
- memcpy (&argv[first_nonopt + optind - last_nonopt], temp,
- nonopts_size);
-
- /* Update records for the slots the non-options now occupy. */
-
- first_nonopt += (optind - last_nonopt);
- last_nonopt = optind;
-}
-
-/* Scan elements of ARGV (whose length is ARGC) for option characters
- given in OPTSTRING.
-
- If an element of ARGV starts with '-', and is not exactly "-" or "--",
- then it is an option element. The characters of this element
- (aside from the initial '-') are option characters. If `getopt'
- is called repeatedly, it returns successively each of theoption characters
- from each of the option elements.
-
- If `getopt' finds another option character, it returns that character,
- updating `optind' and `nextchar' so that the next call to `getopt' can
- resume the scan with the following option character or ARGV-element.
-
- If there are no more option characters, `getopt' returns `EOF'.
- Then `optind' is the index in ARGV of the first ARGV-element
- that is not an option. (The ARGV-elements have been permuted
- so that those that are not options now come last.)
-
- OPTSTRING is a string containing the legitimate option characters.
- A colon in OPTSTRING means that the previous character is an option
- that wants an argument. The argument is taken from the rest of the
- current ARGV-element, or from the following ARGV-element,
- and returned in `optarg'.
-
- If an option character is seen that is not listed in OPTSTRING,
- return '?' after printing an error message. If you set `opterr' to
- zero, the error message is suppressed but we still return '?'.
-
- If a char in OPTSTRING is followed by a colon, that means it wants an arg,
- so the following text in the same ARGV-element, or the text of the following
- ARGV-element, is returned in `optarg. Two colons mean an option that
- wants an optional arg; if there is text in the current ARGV-element,
- it is returned in `optarg'.
-
- If OPTSTRING starts with `-', it requests a different method of handling the
- non-option ARGV-elements. See the comments about RETURN_IN_ORDER, above. */
-
-int
-GetOpt::operator () (void)
-{
- if (nextchar == 0 || *nextchar == 0)
- {
- if (ordering == PERMUTE)
- {
- /* If we have just processed some options following some non-options,
- exchange them so that the options come first. */
-
- if (first_nonopt != last_nonopt && last_nonopt != optind)
- exchange (nargv);
- else if (last_nonopt != optind)
- first_nonopt = optind;
-
- /* Now skip any additional non-options
- and extend the range of non-options previously skipped. */
-
- while (optind < nargc
- && (nargv[optind][0] != '-'
- || nargv[optind][1] == 0))
- optind++;
- last_nonopt = optind;
- }
-
- /* Special ARGV-element `--' means premature end of options.
- Skip it like a null option,
- then exchange with previous non-options as if it were an option,
- then skip everything else like a non-option. */
-
- if (optind != nargc && !strcmp (nargv[optind], "--"))
- {
- optind++;
-
- if (first_nonopt != last_nonopt && last_nonopt != optind)
- exchange (nargv);
- else if (first_nonopt == last_nonopt)
- first_nonopt = optind;
- last_nonopt = nargc;
-
- optind = nargc;
- }
-
- /* If we have done all the ARGV-elements, stop the scan
- and back over any non-options that we skipped and permuted. */
-
- if (optind == nargc)
- {
- /* Set the next-arg-index to point at the non-options
- that we previously skipped, so the caller will digest them. */
- if (first_nonopt != last_nonopt)
- optind = first_nonopt;
- return EOF;
- }
-
- /* If we have come to a non-option and did not permute it,
- either stop the scan or describe it to the caller and pass it by. */
-
- if (nargv[optind][0] != '-' || nargv[optind][1] == 0)
- {
- if (ordering == REQUIRE_ORDER)
- return EOF;
- optarg = nargv[optind++];
- return 0;
- }
-
- /* We have found another option-ARGV-element.
- Start decoding its characters. */
-
- nextchar = nargv[optind] + 1;
- }
-
- /* Look at and handle the next option-character. */
-
- {
- char c = *nextchar++;
- char *temp = (char *) strchr (noptstring, c);
-
- /* Increment `optind' when we start to process its last character. */
- if (*nextchar == 0)
- optind++;
-
- if (temp == 0 || c == ':')
- {
- if (opterr != 0)
- {
- if (c < 040 || c >= 0177)
- fprintf (stderr, "%s: unrecognized option, character code 0%o\n",
- nargv[0], c);
- else
- fprintf (stderr, "%s: unrecognized option `-%c'\n",
- nargv[0], c);
- }
- return '?';
- }
- if (temp[1] == ':')
- {
- if (temp[2] == ':')
- {
- /* This is an option that accepts an argument optionally. */
- if (*nextchar != 0)
- {
- optarg = nextchar;
- optind++;
- }
- else
- optarg = 0;
- nextchar = 0;
- }
- else
- {
- /* This is an option that requires an argument. */
- if (*nextchar != 0)
- {
- optarg = nextchar;
- /* If we end this ARGV-element by taking the rest as an arg,
- we must advance to the next element now. */
- optind++;
- }
- else if (optind == nargc)
- {
- if (opterr != 0)
- fprintf (stderr, "%s: no argument for `-%c' option\n",
- nargv[0], c);
- c = '?';
- }
- else
- /* We already incremented `optind' once;
- increment it again when taking next ARGV-elt as argument. */
- optarg = nargv[optind++];
- nextchar = 0;
- }
- }
- return c;
- }
-}
diff --git a/contrib/libg++/libg++/src/GetOpt.h b/contrib/libg++/libg++/src/GetOpt.h
deleted file mode 100644
index c554cac83215..000000000000
--- a/contrib/libg++/libg++/src/GetOpt.h
+++ /dev/null
@@ -1,129 +0,0 @@
-/* Getopt for GNU.
- Copyright (C) 1987, 1989, 1992 Free Software Foundation, Inc.
- (Modified by Douglas C. Schmidt for use with GNU G++.)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-/* This version of `getopt' appears to the caller like standard Unix `getopt'
- but it behaves differently for the user, since it allows the user
- to intersperse the options with the other arguments.
-
- As `getopt' works, it permutes the elements of `argv' so that,
- when it is done, all the options precede everything else. Thus
- all application programs are extended to handle flexible argument order.
-
- Setting the environment variable _POSIX_OPTION_ORDER disables permutation.
- Then the behavior is completely standard.
-
- GNU application programs can use a third alternative mode in which
- they can distinguish the relative order of options and other arguments. */
-
-#ifndef GetOpt_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define GetOpt_h 1
-
-#include <std.h>
-#include <stdio.h>
-
-class GetOpt
-{
-private:
- /* The next char to be scanned in the option-element
- in which the last option character we returned was found.
- This allows us to pick up the scan where we left off.
-
- If this is zero, or a null string, it means resume the scan
- by advancing to the next ARGV-element. */
-
- static char *nextchar;
-
-
- /* Describe how to deal with options that follow non-option ARGV-elements.
-
- UNSPECIFIED means the caller did not specify anything;
- the default is then REQUIRE_ORDER if the environment variable
- _OPTIONS_FIRST is defined, PERMUTE otherwise.
-
- REQUIRE_ORDER means don't recognize them as options.
- Stop option processing when the first non-option is seen.
- This is what Unix does.
-
- PERMUTE is the default. We permute the contents of `argv' as we scan,
- so that eventually all the options are at the end. This allows options
- to be given in any order, even with programs that were not written to
- expect this.
-
- RETURN_IN_ORDER is an option available to programs that were written
- to expect options and other ARGV-elements in any order and that care about
- the ordering of the two. We describe each non-option ARGV-element
- as if it were the argument of an option with character code zero.
- Using `-' as the first character of the list of option characters
- requests this mode of operation.
-
- The special argument `--' forces an end of option-scanning regardless
- of the value of `ordering'. In the case of RETURN_IN_ORDER, only
- `--' can cause `getopt' to return EOF with `optind' != ARGC. */
-
- enum OrderingEnum { REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER };
- OrderingEnum ordering;
-
- /* Handle permutation of arguments. */
-
- /* Describe the part of ARGV that contains non-options that have
- been skipped. `first_nonopt' is the index in ARGV of the first of them;
- `last_nonopt' is the index after the last of them. */
-
- static int first_nonopt;
- static int last_nonopt;
-
- void exchange (char **argv);
-public:
- /* For communication from `getopt' to the caller.
- When `getopt' finds an option that takes an argument,
- the argument value is returned here.
- Also, when `ordering' is RETURN_IN_ORDER,
- each non-option ARGV-element is returned here. */
-
- char *optarg;
-
- /* Index in ARGV of the next element to be scanned.
- This is used for communication to and from the caller
- and for communication between successive calls to `getopt'.
- On entry to `getopt', zero means this is the first call; initialize.
-
- When `getopt' returns EOF, this is the index of the first of the
- non-option elements that the caller should itself scan.
-
- Otherwise, `optind' communicates from one call to the next
- how much of ARGV has been scanned so far. */
-
- int optind;
-
- /* Callers store zero here to inhibit the error message
- for unrecognized options. */
-
- int opterr;
-
- int nargc;
- char **nargv;
- const char *noptstring;
-
- GetOpt (int argc, char **argv, const char *optstring);
- int operator () (void);
-};
-
-#endif
diff --git a/contrib/libg++/libg++/src/HypGeom.cc b/contrib/libg++/libg++/src/HypGeom.cc
deleted file mode 100644
index a283caddbc17..000000000000
--- a/contrib/libg++/libg++/src/HypGeom.cc
+++ /dev/null
@@ -1,30 +0,0 @@
-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Dirk Grunwald (grunwald@cs.uiuc.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <builtin.h>
-#include <Random.h>
-#include <HypGeom.h>
-
-double HyperGeometric::operator()()
-{
- double d = (pGenerator -> asDouble() > pP) ? (1.0 - pP) : (pP);
- return(-pMean * log(pGenerator -> asDouble()) / (2.0 * d) );
-}
-
diff --git a/contrib/libg++/libg++/src/HypGeom.h b/contrib/libg++/libg++/src/HypGeom.h
deleted file mode 100644
index 0aeeb7d78ee0..000000000000
--- a/contrib/libg++/libg++/src/HypGeom.h
+++ /dev/null
@@ -1,70 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Dirk Grunwald (grunwald@cs.uiuc.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-#ifndef _HyperGeometric_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _HyperGeometric_h
-
-#include <Random.h>
-
-class HyperGeometric: public Random {
-protected:
- double pMean;
- double pVariance;
- double pP;
- void setState();
-
-public:
- HyperGeometric(double mean, double variance, RNG *gen);
-
- double mean();
- double mean(double x);
- double variance();
- double variance(double x);
-
- virtual double operator()();
-};
-
-
-inline void HyperGeometric::setState() {
- double z = pVariance / (pMean * pMean);
- pP = 0.5 * (1.0 - sqrt((z - 1.0) / ( z + 1.0 )));
-}
-
-inline HyperGeometric::HyperGeometric(double mean, double variance, RNG *gen)
-: Random(gen) {
- pMean = mean; pVariance = variance;
- setState();
-}
-
-inline double HyperGeometric::mean() { return pMean; };
-
-inline double HyperGeometric::mean(double x) {
- double t = pMean; pMean = x;
- setState(); return t;
-}
-
-inline double HyperGeometric::variance() { return pVariance; }
-
-inline double HyperGeometric::variance(double x) {
- double t = pVariance; pVariance = x;
- setState(); return t;
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/Incremental.h b/contrib/libg++/libg++/src/Incremental.h
deleted file mode 100644
index 267970a8cfbc..000000000000
--- a/contrib/libg++/libg++/src/Incremental.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifndef Incremental_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define Incremental_h
-#define DECLARE_INIT_FUNCTION(USER_INIT_FUNCTION) \
-static void USER_INIT_FUNCTION (); extern void (*_initfn)(); \
-static struct xyzzy { xyzzy () {_initfn = USER_INIT_FUNCTION;}; \
-~xyzzy () {};} __2xyzzy;
-#else
-#error Incremental.h was not the first file included in this module
-#endif
diff --git a/contrib/libg++/libg++/src/Intdouble.cc b/contrib/libg++/libg++/src/Intdouble.cc
deleted file mode 100644
index 065175b967a3..000000000000
--- a/contrib/libg++/libg++/src/Intdouble.cc
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
-Copyright (C) 1988, 1993 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-// Routines for converting between Integers and doubles.
-// Split up into a separate file to avoid Integer.o's need
-// for libm.a on some systems (including SunOS 4).
-
-#include <Integer.h>
-#include "Integer.hP"
-#include <float.h>
-#include <math.h>
-#include <limits.h>
-
-#ifndef HUGE_VAL
-#ifdef HUGE
-#define HUGE_VAL HUGE
-#else
-#define HUGE_VAL DBL_MAX
-#endif
-#endif
-
-// convert to a double
-
-double Itodouble(const IntRep* rep)
-{
- double d = 0.0;
- double bound = DBL_MAX / 2.0;
- for (int i = rep->len - 1; i >= 0; --i)
- {
- unsigned short a = I_RADIX >> 1;
- while (a != 0)
- {
- if (d >= bound)
- return (rep->sgn == I_NEGATIVE) ? -HUGE_VAL : HUGE_VAL;
- d *= 2.0;
- if (rep->s[i] & a)
- d += 1.0;
- a >>= 1;
- }
- }
- if (rep->sgn == I_NEGATIVE)
- return -d;
- else
- return d;
-}
-
-// see whether op double() will work-
-// have to actually try it in order to find out
-// since otherwise might trigger fp exception
-
-int Iisdouble(const IntRep* rep)
-{
- double d = 0.0;
- double bound = DBL_MAX / 2.0;
- for (int i = rep->len - 1; i >= 0; --i)
- {
- unsigned short a = I_RADIX >> 1;
- while (a != 0)
- {
- if (d > bound || (d == bound && (i > 0 || (rep->s[i] & a))))
- return 0;
- d *= 2.0;
- if (rep->s[i] & a)
- d += 1.0;
- a >>= 1;
- }
- }
- return 1;
-}
-
-// real division of num / den
-
-double ratio(const Integer& num, const Integer& den)
-{
- Integer q, r;
- divide(num, den, q, r);
- double d1 = q.as_double();
-
- if (d1 >= DBL_MAX || d1 <= -DBL_MAX || sign(r) == 0)
- return d1;
- else // use as much precision as available for fractional part
- {
- double d2 = 0.0;
- double d3 = 0.0;
- int cont = 1;
- for (int i = den.rep->len - 1; i >= 0 && cont; --i)
- {
- unsigned short a = I_RADIX >> 1;
- while (a != 0)
- {
- if (d2 + 1.0 == d2) // out of precision when we get here
- {
- cont = 0;
- break;
- }
-
- d2 *= 2.0;
- if (den.rep->s[i] & a)
- d2 += 1.0;
-
- if (i < r.rep->len)
- {
- d3 *= 2.0;
- if (r.rep->s[i] & a)
- d3 += 1.0;
- }
-
- a >>= 1;
- }
- }
-
- if (sign(r) < 0)
- d3 = -d3;
- return d1 + d3 / d2;
- }
-}
-
-double
-Integer::as_double () const
-{
- return Itodouble (rep);
-}
-
-int
-Integer::fits_in_double () const
-{
- return Iisdouble(rep);
-}
diff --git a/contrib/libg++/libg++/src/Integer.cc b/contrib/libg++/libg++/src/Integer.cc
deleted file mode 100644
index 926b28ace683..000000000000
--- a/contrib/libg++/libg++/src/Integer.cc
+++ /dev/null
@@ -1,2282 +0,0 @@
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/*
- Some of the following algorithms are very loosely based on those from
- MIT C-Scheme bignum.c, which is
- Copyright (c) 1987 Massachusetts Institute of Technology
-
- with other guidance from Knuth, vol. 2
-
- Thanks to the creators of the algorithms.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <Integer.h>
-#include <std.h>
-#include <ctype.h>
-#include <limits.h>
-#include <Obstack.h>
-#include <AllocRing.h>
-#include <new.h>
-#include <builtin.h>
-#include "Integer.hP"
-
-#undef OK
-
-IntRep _ZeroRep = {1, 0, 1, {0}};
-IntRep _OneRep = {1, 0, 1, {1}};
-IntRep _MinusOneRep = {1, 0, 0, {1}};
-
-
-// utilities to extract and transfer bits
-
-// get low bits
-
-inline static unsigned short extract(unsigned long x)
-{
- return x & I_MAXNUM;
-}
-
-// transfer high bits to low
-
-inline static unsigned long down(unsigned long x)
-{
- return (x >> I_SHIFT) & I_MAXNUM;
-}
-
-// transfer low bits to high
-
-inline static unsigned long up(unsigned long x)
-{
- return x << I_SHIFT;
-}
-
-// compare two equal-length reps
-
-inline static int docmp(const unsigned short* x, const unsigned short* y, int l)
-{
- int diff = 0;
- const unsigned short* xs = &(x[l]);
- const unsigned short* ys = &(y[l]);
- while (l-- > 0 && (diff = (*--xs) - (*--ys)) == 0);
- return diff;
-}
-
-// figure out max length of result of +, -, etc.
-
-inline static int calc_len(int len1, int len2, int pad)
-{
- return (len1 >= len2)? len1 + pad : len2 + pad;
-}
-
-// ensure len & sgn are correct
-
-inline static void Icheck(IntRep* rep)
-{
- int l = rep->len;
- const unsigned short* p = &(rep->s[l]);
- while (l > 0 && *--p == 0) --l;
- if ((rep->len = l) == 0) rep->sgn = I_POSITIVE;
-}
-
-
-// zero out the end of a rep
-
-inline static void Iclear_from(IntRep* rep, int p)
-{
- unsigned short* cp = &(rep->s[p]);
- const unsigned short* cf = &(rep->s[rep->len]);
- while(cp < cf) *cp++ = 0;
-}
-
-// copy parts of a rep
-
-static inline void scpy(const unsigned short* src, unsigned short* dest,int nb)
-{
- while (--nb >= 0) *dest++ = *src++;
-}
-
-// make sure an argument is valid
-
-static inline void nonnil(const IntRep* rep)
-{
- if (rep == 0)
- (*lib_error_handler)("Integer", "operation on uninitialized Integer");
-}
-
-// allocate a new Irep. Pad to something close to a power of two.
-
-inline static IntRep* Inew(int newlen)
-{
- unsigned int siz = sizeof(IntRep) + newlen * sizeof(short) +
- MALLOC_MIN_OVERHEAD;
- unsigned int allocsiz = MINIntRep_SIZE;
- while (allocsiz < siz) allocsiz <<= 1; // find a power of 2
- allocsiz -= MALLOC_MIN_OVERHEAD;
- if (allocsiz >= MAXIntRep_SIZE * sizeof(short))
- (*lib_error_handler)("Integer", "Requested length out of range");
-
- IntRep* rep = new (operator new (allocsiz)) IntRep;
- rep->sz = (allocsiz - sizeof(IntRep) + sizeof(short)) / sizeof(short);
- return rep;
-}
-
-// allocate: use the bits in src if non-null, clear the rest
-
-IntRep* Ialloc(IntRep* old, const unsigned short* src, int srclen, int newsgn,
- int newlen)
-{
- IntRep* rep;
- if (old == 0 || newlen > old->sz)
- rep = Inew(newlen);
- else
- rep = old;
-
- rep->len = newlen;
- rep->sgn = newsgn;
-
- scpy(src, rep->s, srclen);
- Iclear_from(rep, srclen);
-
- if (old != rep && old != 0 && !STATIC_IntRep(old)) delete old;
- return rep;
-}
-
-// allocate and clear
-
-IntRep* Icalloc(IntRep* old, int newlen)
-{
- IntRep* rep;
- if (old == 0 || newlen > old->sz)
- {
- if (old != 0 && !STATIC_IntRep(old)) delete old;
- rep = Inew(newlen);
- }
- else
- rep = old;
-
- rep->len = newlen;
- rep->sgn = I_POSITIVE;
- Iclear_from(rep, 0);
-
- return rep;
-}
-
-// reallocate
-
-IntRep* Iresize(IntRep* old, int newlen)
-{
- IntRep* rep;
- unsigned short oldlen;
- if (old == 0)
- {
- oldlen = 0;
- rep = Inew(newlen);
- rep->sgn = I_POSITIVE;
- }
- else
- {
- oldlen = old->len;
- if (newlen > old->sz)
- {
- rep = Inew(newlen);
- scpy(old->s, rep->s, oldlen);
- rep->sgn = old->sgn;
- if (!STATIC_IntRep(old)) delete old;
- }
- else
- rep = old;
- }
-
- rep->len = newlen;
- Iclear_from(rep, oldlen);
-
- return rep;
-}
-
-
-// same, for straight copy
-
-IntRep* Icopy(IntRep* old, const IntRep* src)
-{
- if (old == src) return old;
- IntRep* rep;
- if (src == 0)
- {
- if (old == 0)
- rep = Inew(0);
- else
- {
- rep = old;
- Iclear_from(rep, 0);
- }
- rep->len = 0;
- rep->sgn = I_POSITIVE;
- }
- else
- {
- int newlen = src->len;
- if (old == 0 || newlen > old->sz)
- {
- if (old != 0 && !STATIC_IntRep(old)) delete old;
- rep = Inew(newlen);
- }
- else
- rep = old;
-
- rep->len = newlen;
- rep->sgn = src->sgn;
-
- scpy(src->s, rep->s, newlen);
- }
-
- return rep;
-}
-
-// allocate & copy space for a long
-
-IntRep* Icopy_long(IntRep* old, long x)
-{
- int newsgn = (x >= 0);
- IntRep* rep = Icopy_ulong(old, newsgn ? x : -x);
- rep->sgn = newsgn;
- return rep;
-}
-
-IntRep* Icopy_ulong(IntRep* old, unsigned long x)
-{
- unsigned short src[SHORT_PER_LONG];
-
- unsigned short srclen = 0;
- while (x != 0)
- {
- src[srclen++] = extract(x);
- x = down(x);
- }
-
- IntRep* rep;
- if (old == 0 || srclen > old->sz)
- {
- if (old != 0 && !STATIC_IntRep(old)) delete old;
- rep = Inew(srclen);
- }
- else
- rep = old;
-
- rep->len = srclen;
- rep->sgn = I_POSITIVE;
-
- scpy(src, rep->s, srclen);
-
- return rep;
-}
-
-// special case for zero -- it's worth it!
-
-IntRep* Icopy_zero(IntRep* old)
-{
- if (old == 0 || STATIC_IntRep(old))
- return &_ZeroRep;
-
- old->len = 0;
- old->sgn = I_POSITIVE;
-
- return old;
-}
-
-// special case for 1 or -1
-
-IntRep* Icopy_one(IntRep* old, int newsgn)
-{
- if (old == 0 || 1 > old->sz)
- {
- if (old != 0 && !STATIC_IntRep(old)) delete old;
- return newsgn==I_NEGATIVE ? &_MinusOneRep : &_OneRep;
- }
-
- old->sgn = newsgn;
- old->len = 1;
- old->s[0] = 1;
-
- return old;
-}
-
-// convert to a legal two's complement long if possible
-// if too big, return most negative/positive value
-
-long Itolong(const IntRep* rep)
-{
- if ((unsigned)(rep->len) > (unsigned)(SHORT_PER_LONG))
- return (rep->sgn == I_POSITIVE) ? LONG_MAX : LONG_MIN;
- else if (rep->len == 0)
- return 0;
- else if ((unsigned)(rep->len) < (unsigned)(SHORT_PER_LONG))
- {
- unsigned long a = rep->s[rep->len-1];
- if (SHORT_PER_LONG > 2) // normally optimized out
- {
- for (int i = rep->len - 2; i >= 0; --i)
- a = up(a) | rep->s[i];
- }
- return (rep->sgn == I_POSITIVE)? a : -((long)a);
- }
- else
- {
- unsigned long a = rep->s[SHORT_PER_LONG - 1];
- if (a >= I_MINNUM)
- return (rep->sgn == I_POSITIVE) ? LONG_MAX : LONG_MIN;
- else
- {
- a = up(a) | rep->s[SHORT_PER_LONG - 2];
- if (SHORT_PER_LONG > 2)
- {
- for (int i = SHORT_PER_LONG - 3; i >= 0; --i)
- a = up(a) | rep->s[i];
- }
- return (rep->sgn == I_POSITIVE)? a : -((long)a);
- }
- }
-}
-
-// test whether op long() will work.
-// careful about asymmetry between LONG_MIN & LONG_MAX
-
-int Iislong(const IntRep* rep)
-{
- unsigned int l = rep->len;
- if (l < SHORT_PER_LONG)
- return 1;
- else if (l > SHORT_PER_LONG)
- return 0;
- else if ((unsigned)(rep->s[SHORT_PER_LONG - 1]) < (unsigned)(I_MINNUM))
- return 1;
- else if (rep->sgn == I_NEGATIVE && rep->s[SHORT_PER_LONG - 1] == I_MINNUM)
- {
- for (unsigned int i = 0; i < SHORT_PER_LONG - 1; ++i)
- if (rep->s[i] != 0)
- return 0;
- return 1;
- }
- else
- return 0;
-}
-
-// comparison functions
-
-int compare(const IntRep* x, const IntRep* y)
-{
- int diff = x->sgn - y->sgn;
- if (diff == 0)
- {
- diff = x->len - y->len;
- if (diff == 0)
- diff = docmp(x->s, y->s, x->len);
- if (x->sgn == I_NEGATIVE)
- diff = -diff;
- }
- return diff;
-}
-
-int ucompare(const IntRep* x, const IntRep* y)
-{
- int diff = x->len - y->len;
- if (diff == 0)
- {
- int l = x->len;
- const unsigned short* xs = &(x->s[l]);
- const unsigned short* ys = &(y->s[l]);
- while (l-- > 0 && (diff = (*--xs) - (*--ys)) == 0);
- }
- return diff;
-}
-
-int compare(const IntRep* x, long y)
-{
- int xl = x->len;
- int xsgn = x->sgn;
- if (y == 0)
- {
- if (xl == 0)
- return 0;
- else if (xsgn == I_NEGATIVE)
- return -1;
- else
- return 1;
- }
- else
- {
- int ysgn = y >= 0;
- unsigned long uy = (ysgn)? y : -y;
- int diff = xsgn - ysgn;
- if (diff == 0)
- {
- diff = xl - SHORT_PER_LONG;
- if (diff <= 0)
- {
- unsigned short tmp[SHORT_PER_LONG];
- int yl = 0;
- while (uy != 0)
- {
- tmp[yl++] = extract(uy);
- uy = down(uy);
- }
- diff = xl - yl;
- if (diff == 0)
- diff = docmp(x->s, tmp, xl);
- }
- if (xsgn == I_NEGATIVE)
- diff = -diff;
- }
- return diff;
- }
-}
-
-int ucompare(const IntRep* x, long y)
-{
- int xl = x->len;
- if (y == 0)
- return xl;
- else
- {
- unsigned long uy = (y >= 0)? y : -y;
- int diff = xl - SHORT_PER_LONG;
- if (diff <= 0)
- {
- unsigned short tmp[SHORT_PER_LONG];
- int yl = 0;
- while (uy != 0)
- {
- tmp[yl++] = extract(uy);
- uy = down(uy);
- }
- diff = xl - yl;
- if (diff == 0)
- diff = docmp(x->s, tmp, xl);
- }
- return diff;
- }
-}
-
-
-
-// arithmetic functions
-
-IntRep* add(const IntRep* x, int negatex,
- const IntRep* y, int negatey, IntRep* r)
-{
- nonnil(x);
- nonnil(y);
-
- int xl = x->len;
- int yl = y->len;
-
- int xsgn = (negatex && xl != 0) ? !x->sgn : x->sgn;
- int ysgn = (negatey && yl != 0) ? !y->sgn : y->sgn;
-
- int xrsame = x == r;
- int yrsame = y == r;
-
- if (yl == 0)
- r = Ialloc(r, x->s, xl, xsgn, xl);
- else if (xl == 0)
- r = Ialloc(r, y->s, yl, ysgn, yl);
- else if (xsgn == ysgn)
- {
- if (xrsame || yrsame)
- r = Iresize(r, calc_len(xl, yl, 1));
- else
- r = Icalloc(r, calc_len(xl, yl, 1));
- r->sgn = xsgn;
- unsigned short* rs = r->s;
- const unsigned short* as;
- const unsigned short* bs;
- const unsigned short* topa;
- const unsigned short* topb;
- if (xl >= yl)
- {
- as = (xrsame)? r->s : x->s;
- topa = &(as[xl]);
- bs = (yrsame)? r->s : y->s;
- topb = &(bs[yl]);
- }
- else
- {
- bs = (xrsame)? r->s : x->s;
- topb = &(bs[xl]);
- as = (yrsame)? r->s : y->s;
- topa = &(as[yl]);
- }
- unsigned long sum = 0;
- while (bs < topb)
- {
- sum += (unsigned long)(*as++) + (unsigned long)(*bs++);
- *rs++ = extract(sum);
- sum = down(sum);
- }
- while (sum != 0 && as < topa)
- {
- sum += (unsigned long)(*as++);
- *rs++ = extract(sum);
- sum = down(sum);
- }
- if (sum != 0)
- *rs = extract(sum);
- else if (rs != as)
- while (as < topa)
- *rs++ = *as++;
- }
- else
- {
- int comp = ucompare(x, y);
- if (comp == 0)
- r = Icopy_zero(r);
- else
- {
- if (xrsame || yrsame)
- r = Iresize(r, calc_len(xl, yl, 0));
- else
- r = Icalloc(r, calc_len(xl, yl, 0));
- unsigned short* rs = r->s;
- const unsigned short* as;
- const unsigned short* bs;
- const unsigned short* topa;
- const unsigned short* topb;
- if (comp > 0)
- {
- as = (xrsame)? r->s : x->s;
- topa = &(as[xl]);
- bs = (yrsame)? r->s : y->s;
- topb = &(bs[yl]);
- r->sgn = xsgn;
- }
- else
- {
- bs = (xrsame)? r->s : x->s;
- topb = &(bs[xl]);
- as = (yrsame)? r->s : y->s;
- topa = &(as[yl]);
- r->sgn = ysgn;
- }
- unsigned long hi = 1;
- while (bs < topb)
- {
- hi += (unsigned long)(*as++) + I_MAXNUM - (unsigned long)(*bs++);
- *rs++ = extract(hi);
- hi = down(hi);
- }
- while (hi == 0 && as < topa)
- {
- hi = (unsigned long)(*as++) + I_MAXNUM;
- *rs++ = extract(hi);
- hi = down(hi);
- }
- if (rs != as)
- while (as < topa)
- *rs++ = *as++;
- }
- }
- Icheck(r);
- return r;
-}
-
-
-IntRep* add(const IntRep* x, int negatex, long y, IntRep* r)
-{
- nonnil(x);
- int xl = x->len;
- int xsgn = (negatex && xl != 0) ? !x->sgn : x->sgn;
- int xrsame = x == r;
-
- int ysgn = (y >= 0);
- unsigned long uy = (ysgn)? y : -y;
-
- if (y == 0)
- r = Ialloc(r, x->s, xl, xsgn, xl);
- else if (xl == 0)
- r = Icopy_long(r, y);
- else if (xsgn == ysgn)
- {
- if (xrsame)
- r = Iresize(r, calc_len(xl, SHORT_PER_LONG, 1));
- else
- r = Icalloc(r, calc_len(xl, SHORT_PER_LONG, 1));
- r->sgn = xsgn;
- unsigned short* rs = r->s;
- const unsigned short* as = (xrsame)? r->s : x->s;
- const unsigned short* topa = &(as[xl]);
- unsigned long sum = 0;
- while (as < topa && uy != 0)
- {
- unsigned long u = extract(uy);
- uy = down(uy);
- sum += (unsigned long)(*as++) + u;
- *rs++ = extract(sum);
- sum = down(sum);
- }
- while (sum != 0 && as < topa)
- {
- sum += (unsigned long)(*as++);
- *rs++ = extract(sum);
- sum = down(sum);
- }
- if (sum != 0)
- *rs = extract(sum);
- else if (rs != as)
- while (as < topa)
- *rs++ = *as++;
- }
- else
- {
- unsigned short tmp[SHORT_PER_LONG];
- int yl = 0;
- while (uy != 0)
- {
- tmp[yl++] = extract(uy);
- uy = down(uy);
- }
- int comp = xl - yl;
- if (comp == 0)
- comp = docmp(x->s, tmp, yl);
- if (comp == 0)
- r = Icopy_zero(r);
- else
- {
- if (xrsame)
- r = Iresize(r, calc_len(xl, yl, 0));
- else
- r = Icalloc(r, calc_len(xl, yl, 0));
- unsigned short* rs = r->s;
- const unsigned short* as;
- const unsigned short* bs;
- const unsigned short* topa;
- const unsigned short* topb;
- if (comp > 0)
- {
- as = (xrsame)? r->s : x->s;
- topa = &(as[xl]);
- bs = tmp;
- topb = &(bs[yl]);
- r->sgn = xsgn;
- }
- else
- {
- bs = (xrsame)? r->s : x->s;
- topb = &(bs[xl]);
- as = tmp;
- topa = &(as[yl]);
- r->sgn = ysgn;
- }
- unsigned long hi = 1;
- while (bs < topb)
- {
- hi += (unsigned long)(*as++) + I_MAXNUM - (unsigned long)(*bs++);
- *rs++ = extract(hi);
- hi = down(hi);
- }
- while (hi == 0 && as < topa)
- {
- hi = (unsigned long)(*as++) + I_MAXNUM;
- *rs++ = extract(hi);
- hi = down(hi);
- }
- if (rs != as)
- while (as < topa)
- *rs++ = *as++;
- }
- }
- Icheck(r);
- return r;
-}
-
-
-IntRep* multiply(const IntRep* x, const IntRep* y, IntRep* r)
-{
- nonnil(x);
- nonnil(y);
- int xl = x->len;
- int yl = y->len;
- int rl = xl + yl;
- int rsgn = x->sgn == y->sgn;
- int xrsame = x == r;
- int yrsame = y == r;
- int xysame = x == y;
-
- if (xl == 0 || yl == 0)
- r = Icopy_zero(r);
- else if (xl == 1 && x->s[0] == 1)
- r = Icopy(r, y);
- else if (yl == 1 && y->s[0] == 1)
- r = Icopy(r, x);
- else if (!(xysame && xrsame))
- {
- if (xrsame || yrsame)
- r = Iresize(r, rl);
- else
- r = Icalloc(r, rl);
- unsigned short* rs = r->s;
- unsigned short* topr = &(rs[rl]);
-
- // use best inner/outer loop params given constraints
- unsigned short* currentr;
- const unsigned short* bota;
- const unsigned short* as;
- const unsigned short* botb;
- const unsigned short* topb;
- if (xrsame)
- {
- currentr = &(rs[xl-1]);
- bota = rs;
- as = currentr;
- botb = y->s;
- topb = &(botb[yl]);
- }
- else if (yrsame)
- {
- currentr = &(rs[yl-1]);
- bota = rs;
- as = currentr;
- botb = x->s;
- topb = &(botb[xl]);
- }
- else if (xl <= yl)
- {
- currentr = &(rs[xl-1]);
- bota = x->s;
- as = &(bota[xl-1]);
- botb = y->s;
- topb = &(botb[yl]);
- }
- else
- {
- currentr = &(rs[yl-1]);
- bota = y->s;
- as = &(bota[yl-1]);
- botb = x->s;
- topb = &(botb[xl]);
- }
-
- while (as >= bota)
- {
- unsigned long ai = (unsigned long)(*as--);
- unsigned short* rs = currentr--;
- *rs = 0;
- if (ai != 0)
- {
- unsigned long sum = 0;
- const unsigned short* bs = botb;
- while (bs < topb)
- {
- sum += ai * (unsigned long)(*bs++) + (unsigned long)(*rs);
- *rs++ = extract(sum);
- sum = down(sum);
- }
- while (sum != 0 && rs < topr)
- {
- sum += (unsigned long)(*rs);
- *rs++ = extract(sum);
- sum = down(sum);
- }
- }
- }
- }
- else // x, y, and r same; compute over diagonals
- {
- r = Iresize(r, rl);
- unsigned short* botr = r->s;
- unsigned short* topr = &(botr[rl]);
- unsigned short* rs = &(botr[rl - 2]);
-
- const unsigned short* bota = (xrsame)? botr : x->s;
- const unsigned short* loa = &(bota[xl - 1]);
- const unsigned short* hia = loa;
-
- for (; rs >= botr; --rs)
- {
- const unsigned short* h = hia;
- const unsigned short* l = loa;
- unsigned long prod = (unsigned long)(*h) * (unsigned long)(*l);
- *rs = 0;
-
- for(;;)
- {
- unsigned short* rt = rs;
- unsigned long sum = prod + (unsigned long)(*rt);
- *rt++ = extract(sum);
- sum = down(sum);
- while (sum != 0 && rt < topr)
- {
- sum += (unsigned long)(*rt);
- *rt++ = extract(sum);
- sum = down(sum);
- }
- if (h > l)
- {
- rt = rs;
- sum = prod + (unsigned long)(*rt);
- *rt++ = extract(sum);
- sum = down(sum);
- while (sum != 0 && rt < topr)
- {
- sum += (unsigned long)(*rt);
- *rt++ = extract(sum);
- sum = down(sum);
- }
- if (--h >= ++l)
- prod = (unsigned long)(*h) * (unsigned long)(*l);
- else
- break;
- }
- else
- break;
- }
- if (loa > bota)
- --loa;
- else
- --hia;
- }
- }
- r->sgn = rsgn;
- Icheck(r);
- return r;
-}
-
-
-IntRep* multiply(const IntRep* x, long y, IntRep* r)
-{
- nonnil(x);
- int xl = x->len;
-
- if (xl == 0 || y == 0)
- r = Icopy_zero(r);
- else if (y == 1)
- r = Icopy(r, x);
- else
- {
- int ysgn = y >= 0;
- int rsgn = x->sgn == ysgn;
- unsigned long uy = (ysgn)? y : -y;
- unsigned short tmp[SHORT_PER_LONG];
- int yl = 0;
- while (uy != 0)
- {
- tmp[yl++] = extract(uy);
- uy = down(uy);
- }
-
- int rl = xl + yl;
- int xrsame = x == r;
- if (xrsame)
- r = Iresize(r, rl);
- else
- r = Icalloc(r, rl);
-
- unsigned short* rs = r->s;
- unsigned short* topr = &(rs[rl]);
- unsigned short* currentr;
- const unsigned short* bota;
- const unsigned short* as;
- const unsigned short* botb;
- const unsigned short* topb;
-
- if (xrsame)
- {
- currentr = &(rs[xl-1]);
- bota = rs;
- as = currentr;
- botb = tmp;
- topb = &(botb[yl]);
- }
- else if (xl <= yl)
- {
- currentr = &(rs[xl-1]);
- bota = x->s;
- as = &(bota[xl-1]);
- botb = tmp;
- topb = &(botb[yl]);
- }
- else
- {
- currentr = &(rs[yl-1]);
- bota = tmp;
- as = &(bota[yl-1]);
- botb = x->s;
- topb = &(botb[xl]);
- }
-
- while (as >= bota)
- {
- unsigned long ai = (unsigned long)(*as--);
- unsigned short* rs = currentr--;
- *rs = 0;
- if (ai != 0)
- {
- unsigned long sum = 0;
- const unsigned short* bs = botb;
- while (bs < topb)
- {
- sum += ai * (unsigned long)(*bs++) + (unsigned long)(*rs);
- *rs++ = extract(sum);
- sum = down(sum);
- }
- while (sum != 0 && rs < topr)
- {
- sum += (unsigned long)(*rs);
- *rs++ = extract(sum);
- sum = down(sum);
- }
- }
- }
- r->sgn = rsgn;
- }
- Icheck(r);
- return r;
-}
-
-
-// main division routine
-
-static void do_divide(unsigned short* rs,
- const unsigned short* ys, int yl,
- unsigned short* qs, int ql)
-{
- const unsigned short* topy = &(ys[yl]);
- unsigned short d1 = ys[yl - 1];
- unsigned short d2 = ys[yl - 2];
-
- int l = ql - 1;
- int i = l + yl;
-
- for (; l >= 0; --l, --i)
- {
- unsigned short qhat; // guess q
- if (d1 == rs[i])
- qhat = I_MAXNUM;
- else
- {
- unsigned long lr = up((unsigned long)rs[i]) | rs[i-1];
- qhat = lr / d1;
- }
-
- for(;;) // adjust q, use docmp to avoid overflow problems
- {
- unsigned short ts[3];
- unsigned long prod = (unsigned long)d2 * (unsigned long)qhat;
- ts[0] = extract(prod);
- prod = down(prod) + (unsigned long)d1 * (unsigned long)qhat;
- ts[1] = extract(prod);
- ts[2] = extract(down(prod));
- if (docmp(ts, &(rs[i-2]), 3) > 0)
- --qhat;
- else
- break;
- };
-
- // multiply & subtract
-
- const unsigned short* yt = ys;
- unsigned short* rt = &(rs[l]);
- unsigned long prod = 0;
- unsigned long hi = 1;
- while (yt < topy)
- {
- prod = (unsigned long)qhat * (unsigned long)(*yt++) + down(prod);
- hi += (unsigned long)(*rt) + I_MAXNUM - (unsigned long)(extract(prod));
- *rt++ = extract(hi);
- hi = down(hi);
- }
- hi += (unsigned long)(*rt) + I_MAXNUM - (unsigned long)(down(prod));
- *rt = extract(hi);
- hi = down(hi);
-
- // off-by-one, add back
-
- if (hi == 0)
- {
- --qhat;
- yt = ys;
- rt = &(rs[l]);
- hi = 0;
- while (yt < topy)
- {
- hi = (unsigned long)(*rt) + (unsigned long)(*yt++) + down(hi);
- *rt++ = extract(hi);
- }
- *rt = 0;
- }
- if (qs != 0)
- qs[l] = qhat;
- }
-}
-
-// divide by single digit, return remainder
-// if q != 0, then keep the result in q, else just compute rem
-
-static int unscale(const unsigned short* x, int xl, unsigned short y,
- unsigned short* q)
-{
- if (xl == 0 || y == 1)
- return 0;
- else if (q != 0)
- {
- unsigned short* botq = q;
- unsigned short* qs = &(botq[xl - 1]);
- const unsigned short* xs = &(x[xl - 1]);
- unsigned long rem = 0;
- while (qs >= botq)
- {
- rem = up(rem) | *xs--;
- unsigned long u = rem / y;
- *qs-- = extract(u);
- rem -= u * y;
- }
- int r = extract(rem);
- return r;
- }
- else // same loop, a bit faster if just need rem
- {
- const unsigned short* botx = x;
- const unsigned short* xs = &(botx[xl - 1]);
- unsigned long rem = 0;
- while (xs >= botx)
- {
- rem = up(rem) | *xs--;
- unsigned long u = rem / y;
- rem -= u * y;
- }
- int r = extract(rem);
- return r;
- }
-}
-
-
-IntRep* div(const IntRep* x, const IntRep* y, IntRep* q)
-{
- nonnil(x);
- nonnil(y);
- int xl = x->len;
- int yl = y->len;
- if (yl == 0) (*lib_error_handler)("Integer", "attempted division by zero");
-
- int comp = ucompare(x, y);
- int xsgn = x->sgn;
- int ysgn = y->sgn;
-
- int samesign = xsgn == ysgn;
-
- if (comp < 0)
- q = Icopy_zero(q);
- else if (comp == 0)
- q = Icopy_one(q, samesign);
- else if (yl == 1)
- {
- q = Icopy(q, x);
- unscale(q->s, q->len, y->s[0], q->s);
- }
- else
- {
- IntRep* yy = 0;
- IntRep* r = 0;
- unsigned short prescale = (I_RADIX / (1 + y->s[yl - 1]));
- if (prescale != 1 || y == q)
- {
- yy = multiply(y, ((long)prescale & I_MAXNUM), yy);
- r = multiply(x, ((long)prescale & I_MAXNUM), r);
- }
- else
- {
- yy = (IntRep*)y;
- r = Icalloc(r, xl + 1);
- scpy(x->s, r->s, xl);
- }
-
- int ql = xl - yl + 1;
-
- q = Icalloc(q, ql);
- do_divide(r->s, yy->s, yl, q->s, ql);
-
- if (yy != y && !STATIC_IntRep(yy)) delete yy;
- if (!STATIC_IntRep(r)) delete r;
- }
- q->sgn = samesign;
- Icheck(q);
- return q;
-}
-
-IntRep* div(const IntRep* x, long y, IntRep* q)
-{
- nonnil(x);
- int xl = x->len;
- if (y == 0) (*lib_error_handler)("Integer", "attempted division by zero");
-
- unsigned short ys[SHORT_PER_LONG];
- unsigned long u;
- int ysgn = y >= 0;
- if (ysgn)
- u = y;
- else
- u = -y;
- int yl = 0;
- while (u != 0)
- {
- ys[yl++] = extract(u);
- u = down(u);
- }
-
- int comp = xl - yl;
- if (comp == 0) comp = docmp(x->s, ys, xl);
-
- int xsgn = x->sgn;
- int samesign = xsgn == ysgn;
-
- if (comp < 0)
- q = Icopy_zero(q);
- else if (comp == 0)
- {
- q = Icopy_one(q, samesign);
- }
- else if (yl == 1)
- {
- q = Icopy(q, x);
- unscale(q->s, q->len, ys[0], q->s);
- }
- else
- {
- IntRep* r = 0;
- unsigned short prescale = (I_RADIX / (1 + ys[yl - 1]));
- if (prescale != 1)
- {
- unsigned long prod = (unsigned long)prescale * (unsigned long)ys[0];
- ys[0] = extract(prod);
- prod = down(prod) + (unsigned long)prescale * (unsigned long)ys[1];
- ys[1] = extract(prod);
- r = multiply(x, ((long)prescale & I_MAXNUM), r);
- }
- else
- {
- r = Icalloc(r, xl + 1);
- scpy(x->s, r->s, xl);
- }
-
- int ql = xl - yl + 1;
-
- q = Icalloc(q, ql);
- do_divide(r->s, ys, yl, q->s, ql);
-
- if (!STATIC_IntRep(r)) delete r;
- }
- q->sgn = samesign;
- Icheck(q);
- return q;
-}
-
-
-void divide(const Integer& Ix, long y, Integer& Iq, long& rem)
-{
- const IntRep* x = Ix.rep;
- nonnil(x);
- IntRep* q = Iq.rep;
- int xl = x->len;
- if (y == 0) (*lib_error_handler)("Integer", "attempted division by zero");
-
- unsigned short ys[SHORT_PER_LONG];
- unsigned long u;
- int ysgn = y >= 0;
- if (ysgn)
- u = y;
- else
- u = -y;
- int yl = 0;
- while (u != 0)
- {
- ys[yl++] = extract(u);
- u = down(u);
- }
-
- int comp = xl - yl;
- if (comp == 0) comp = docmp(x->s, ys, xl);
-
- int xsgn = x->sgn;
- int samesign = xsgn == ysgn;
-
- if (comp < 0)
- {
- rem = Itolong(x);
- q = Icopy_zero(q);
- }
- else if (comp == 0)
- {
- q = Icopy_one(q, samesign);
- rem = 0;
- }
- else if (yl == 1)
- {
- q = Icopy(q, x);
- rem = unscale(q->s, q->len, ys[0], q->s);
- }
- else
- {
- IntRep* r = 0;
- unsigned short prescale = (I_RADIX / (1 + ys[yl - 1]));
- if (prescale != 1)
- {
- unsigned long prod = (unsigned long)prescale * (unsigned long)ys[0];
- ys[0] = extract(prod);
- prod = down(prod) + (unsigned long)prescale * (unsigned long)ys[1];
- ys[1] = extract(prod);
- r = multiply(x, ((long)prescale & I_MAXNUM), r);
- }
- else
- {
- r = Icalloc(r, xl + 1);
- scpy(x->s, r->s, xl);
- }
-
- int ql = xl - yl + 1;
-
- q = Icalloc(q, ql);
-
- do_divide(r->s, ys, yl, q->s, ql);
-
- if (prescale != 1)
- {
- Icheck(r);
- unscale(r->s, r->len, prescale, r->s);
- }
- Icheck(r);
- rem = Itolong(r);
- if (!STATIC_IntRep(r)) delete r;
- }
- rem = abs(rem);
- if (xsgn == I_NEGATIVE) rem = -rem;
- q->sgn = samesign;
- Icheck(q);
- Iq.rep = q;
-}
-
-
-void divide(const Integer& Ix, const Integer& Iy, Integer& Iq, Integer& Ir)
-{
- const IntRep* x = Ix.rep;
- nonnil(x);
- const IntRep* y = Iy.rep;
- nonnil(y);
- IntRep* q = Iq.rep;
- IntRep* r = Ir.rep;
-
- int xl = x->len;
- int yl = y->len;
- if (yl == 0)
- (*lib_error_handler)("Integer", "attempted division by zero");
-
- int comp = ucompare(x, y);
- int xsgn = x->sgn;
- int ysgn = y->sgn;
-
- int samesign = xsgn == ysgn;
-
- if (comp < 0)
- {
- q = Icopy_zero(q);
- r = Icopy(r, x);
- }
- else if (comp == 0)
- {
- q = Icopy_one(q, samesign);
- r = Icopy_zero(r);
- }
- else if (yl == 1)
- {
- q = Icopy(q, x);
- int rem = unscale(q->s, q->len, y->s[0], q->s);
- r = Icopy_long(r, rem);
- if (rem != 0)
- r->sgn = xsgn;
- }
- else
- {
- IntRep* yy = 0;
- unsigned short prescale = (I_RADIX / (1 + y->s[yl - 1]));
- if (prescale != 1 || y == q || y == r)
- {
- yy = multiply(y, ((long)prescale & I_MAXNUM), yy);
- r = multiply(x, ((long)prescale & I_MAXNUM), r);
- }
- else
- {
- yy = (IntRep*)y;
- r = Icalloc(r, xl + 1);
- scpy(x->s, r->s, xl);
- }
-
- int ql = xl - yl + 1;
-
- q = Icalloc(q, ql);
- do_divide(r->s, yy->s, yl, q->s, ql);
-
- if (yy != y && !STATIC_IntRep(yy)) delete yy;
- if (prescale != 1)
- {
- Icheck(r);
- unscale(r->s, r->len, prescale, r->s);
- }
- }
- q->sgn = samesign;
- Icheck(q);
- Iq.rep = q;
- Icheck(r);
- Ir.rep = r;
-}
-
-IntRep* mod(const IntRep* x, const IntRep* y, IntRep* r)
-{
- nonnil(x);
- nonnil(y);
- int xl = x->len;
- int yl = y->len;
- if (yl == 0) (*lib_error_handler)("Integer", "attempted division by zero");
-
- int comp = ucompare(x, y);
- int xsgn = x->sgn;
-
- if (comp < 0)
- r = Icopy(r, x);
- else if (comp == 0)
- r = Icopy_zero(r);
- else if (yl == 1)
- {
- int rem = unscale(x->s, xl, y->s[0], 0);
- r = Icopy_long(r, rem);
- if (rem != 0)
- r->sgn = xsgn;
- }
- else
- {
- IntRep* yy = 0;
- unsigned short prescale = (I_RADIX / (1 + y->s[yl - 1]));
- if (prescale != 1 || y == r)
- {
- yy = multiply(y, ((long)prescale & I_MAXNUM), yy);
- r = multiply(x, ((long)prescale & I_MAXNUM), r);
- }
- else
- {
- yy = (IntRep*)y;
- r = Icalloc(r, xl + 1);
- scpy(x->s, r->s, xl);
- }
-
- do_divide(r->s, yy->s, yl, 0, xl - yl + 1);
-
- if (yy != y && !STATIC_IntRep(yy)) delete yy;
-
- if (prescale != 1)
- {
- Icheck(r);
- unscale(r->s, r->len, prescale, r->s);
- }
- }
- Icheck(r);
- return r;
-}
-
-IntRep* mod(const IntRep* x, long y, IntRep* r)
-{
- nonnil(x);
- int xl = x->len;
- if (y == 0) (*lib_error_handler)("Integer", "attempted division by zero");
-
- unsigned short ys[SHORT_PER_LONG];
- unsigned long u;
- int ysgn = y >= 0;
- if (ysgn)
- u = y;
- else
- u = -y;
- int yl = 0;
- while (u != 0)
- {
- ys[yl++] = extract(u);
- u = down(u);
- }
-
- int comp = xl - yl;
- if (comp == 0) comp = docmp(x->s, ys, xl);
-
- int xsgn = x->sgn;
-
- if (comp < 0)
- r = Icopy(r, x);
- else if (comp == 0)
- r = Icopy_zero(r);
- else if (yl == 1)
- {
- int rem = unscale(x->s, xl, ys[0], 0);
- r = Icopy_long(r, rem);
- if (rem != 0)
- r->sgn = xsgn;
- }
- else
- {
- unsigned short prescale = (I_RADIX / (1 + ys[yl - 1]));
- if (prescale != 1)
- {
- unsigned long prod = (unsigned long)prescale * (unsigned long)ys[0];
- ys[0] = extract(prod);
- prod = down(prod) + (unsigned long)prescale * (unsigned long)ys[1];
- ys[1] = extract(prod);
- r = multiply(x, ((long)prescale & I_MAXNUM), r);
- }
- else
- {
- r = Icalloc(r, xl + 1);
- scpy(x->s, r->s, xl);
- }
-
- do_divide(r->s, ys, yl, 0, xl - yl + 1);
-
- if (prescale != 1)
- {
- Icheck(r);
- unscale(r->s, r->len, prescale, r->s);
- }
- }
- Icheck(r);
- return r;
-}
-
-IntRep* lshift(const IntRep* x, long y, IntRep* r)
-{
- nonnil(x);
- int xl = x->len;
- if (xl == 0 || y == 0)
- {
- r = Icopy(r, x);
- return r;
- }
-
- int xrsame = x == r;
- int rsgn = x->sgn;
-
- long ay = (y < 0)? -y : y;
- int bw = ay / I_SHIFT;
- int sw = ay % I_SHIFT;
-
- if (y > 0)
- {
- int rl = bw + xl + 1;
- if (xrsame)
- r = Iresize(r, rl);
- else
- r = Icalloc(r, rl);
-
- unsigned short* botr = r->s;
- unsigned short* rs = &(botr[rl - 1]);
- const unsigned short* botx = (xrsame)? botr : x->s;
- const unsigned short* xs = &(botx[xl - 1]);
- unsigned long a = 0;
- while (xs >= botx)
- {
- a = up(a) | ((unsigned long)(*xs--) << sw);
- *rs-- = extract(down(a));
- }
- *rs-- = extract(a);
- while (rs >= botr)
- *rs-- = 0;
- }
- else
- {
- int rl = xl - bw;
- if (rl < 0)
- r = Icopy_zero(r);
- else
- {
- if (xrsame)
- r = Iresize(r, rl);
- else
- r = Icalloc(r, rl);
- int rw = I_SHIFT - sw;
- unsigned short* rs = r->s;
- unsigned short* topr = &(rs[rl]);
- const unsigned short* botx = (xrsame)? rs : x->s;
- const unsigned short* xs = &(botx[bw]);
- const unsigned short* topx = &(botx[xl]);
- unsigned long a = (unsigned long)(*xs++) >> sw;
- while (xs < topx)
- {
- a |= (unsigned long)(*xs++) << rw;
- *rs++ = extract(a);
- a = down(a);
- }
- *rs++ = extract(a);
- if (xrsame) topr = (unsigned short*)topx;
- while (rs < topr)
- *rs++ = 0;
- }
- }
- r->sgn = rsgn;
- Icheck(r);
- return r;
-}
-
-IntRep* lshift(const IntRep* x, const IntRep* yy, int negatey, IntRep* r)
-{
- long y = Itolong(yy);
- if (negatey)
- y = -y;
-
- return lshift(x, y, r);
-}
-
-IntRep* bitop(const IntRep* x, const IntRep* y, IntRep* r, char op)
-{
- nonnil(x);
- nonnil(y);
- int xl = x->len;
- int yl = y->len;
- int xsgn = x->sgn;
- int xrsame = x == r;
- int yrsame = y == r;
- if (xrsame || yrsame)
- r = Iresize(r, calc_len(xl, yl, 0));
- else
- r = Icalloc(r, calc_len(xl, yl, 0));
- r->sgn = xsgn;
- unsigned short* rs = r->s;
- unsigned short* topr = &(rs[r->len]);
- const unsigned short* as;
- const unsigned short* bs;
- const unsigned short* topb;
- if (xl >= yl)
- {
- as = (xrsame)? rs : x->s;
- bs = (yrsame)? rs : y->s;
- topb = &(bs[yl]);
- }
- else
- {
- bs = (xrsame)? rs : x->s;
- topb = &(bs[xl]);
- as = (yrsame)? rs : y->s;
- }
-
- switch (op)
- {
- case '&':
- while (bs < topb) *rs++ = *as++ & *bs++;
- while (rs < topr) *rs++ = 0;
- break;
- case '|':
- while (bs < topb) *rs++ = *as++ | *bs++;
- while (rs < topr) *rs++ = *as++;
- break;
- case '^':
- while (bs < topb) *rs++ = *as++ ^ *bs++;
- while (rs < topr) *rs++ = *as++;
- break;
- }
- Icheck(r);
- return r;
-}
-
-IntRep* bitop(const IntRep* x, long y, IntRep* r, char op)
-{
- nonnil(x);
- unsigned short tmp[SHORT_PER_LONG];
- unsigned long u;
- int newsgn;
- if (newsgn = (y >= 0))
- u = y;
- else
- u = -y;
-
- int l = 0;
- while (u != 0)
- {
- tmp[l++] = extract(u);
- u = down(u);
- }
-
- int xl = x->len;
- int yl = l;
- int xsgn = x->sgn;
- int xrsame = x == r;
- if (xrsame)
- r = Iresize(r, calc_len(xl, yl, 0));
- else
- r = Icalloc(r, calc_len(xl, yl, 0));
- r->sgn = xsgn;
- unsigned short* rs = r->s;
- unsigned short* topr = &(rs[r->len]);
- const unsigned short* as;
- const unsigned short* bs;
- const unsigned short* topb;
- if (xl >= yl)
- {
- as = (xrsame)? rs : x->s;
- bs = tmp;
- topb = &(bs[yl]);
- }
- else
- {
- bs = (xrsame)? rs : x->s;
- topb = &(bs[xl]);
- as = tmp;
- }
-
- switch (op)
- {
- case '&':
- while (bs < topb) *rs++ = *as++ & *bs++;
- while (rs < topr) *rs++ = 0;
- break;
- case '|':
- while (bs < topb) *rs++ = *as++ | *bs++;
- while (rs < topr) *rs++ = *as++;
- break;
- case '^':
- while (bs < topb) *rs++ = *as++ ^ *bs++;
- while (rs < topr) *rs++ = *as++;
- break;
- }
- Icheck(r);
- return r;
-}
-
-
-
-IntRep* compl(const IntRep* src, IntRep* r)
-{
- nonnil(src);
- r = Icopy(r, src);
- unsigned short* s = r->s;
- unsigned short* top = &(s[r->len - 1]);
- while (s < top)
- {
- unsigned short cmp = ~(*s);
- *s++ = cmp;
- }
- unsigned short a = *s;
- unsigned short b = 0;
- while (a != 0)
- {
- b <<= 1;
- if (!(a & 1)) b |= 1;
- a >>= 1;
- }
- *s = b;
- Icheck(r);
- return r;
-}
-
-void (setbit)(Integer& x, long b)
-{
- if (b >= 0)
- {
- int bw = (unsigned long)b / I_SHIFT;
- int sw = (unsigned long)b % I_SHIFT;
- int xl = x.rep ? x.rep->len : 0;
- if (xl <= bw)
- x.rep = Iresize(x.rep, calc_len(xl, bw+1, 0));
- x.rep->s[bw] |= (1 << sw);
- Icheck(x.rep);
- }
-}
-
-void clearbit(Integer& x, long b)
-{
- if (b >= 0)
- {
- if (x.rep == 0)
- x.rep = &_ZeroRep;
- else
- {
- int bw = (unsigned long)b / I_SHIFT;
- int sw = (unsigned long)b % I_SHIFT;
- if (x.rep->len > bw)
- x.rep->s[bw] &= ~(1 << sw);
- }
- Icheck(x.rep);
- }
-}
-
-int testbit(const Integer& x, long b)
-{
- if (x.rep != 0 && b >= 0)
- {
- int bw = (unsigned long)b / I_SHIFT;
- int sw = (unsigned long)b % I_SHIFT;
- return (bw < x.rep->len && (x.rep->s[bw] & (1 << sw)) != 0);
- }
- else
- return 0;
-}
-
-// A version of knuth's algorithm B / ex. 4.5.3.34
-// A better version that doesn't bother shifting all of `t' forthcoming
-
-IntRep* gcd(const IntRep* x, const IntRep* y)
-{
- nonnil(x);
- nonnil(y);
- int ul = x->len;
- int vl = y->len;
-
- if (vl == 0)
- return Ialloc(0, x->s, ul, I_POSITIVE, ul);
- else if (ul == 0)
- return Ialloc(0, y->s, vl, I_POSITIVE, vl);
-
- IntRep* u = Ialloc(0, x->s, ul, I_POSITIVE, ul);
- IntRep* v = Ialloc(0, y->s, vl, I_POSITIVE, vl);
-
-// find shift so that both not even
-
- long k = 0;
- int l = (ul <= vl)? ul : vl;
- int cont = 1;
- for (int i = 0; i < l && cont; ++i)
- {
- unsigned long a = (i < ul)? u->s[i] : 0;
- unsigned long b = (i < vl)? v->s[i] : 0;
- for (int j = 0; j < I_SHIFT; ++j)
- {
- if ((a | b) & 1)
- {
- cont = 0;
- break;
- }
- else
- {
- ++k;
- a >>= 1;
- b >>= 1;
- }
- }
- }
-
- if (k != 0)
- {
- u = lshift(u, -k, u);
- v = lshift(v, -k, v);
- }
-
- IntRep* t;
- if (u->s[0] & 01)
- t = Ialloc(0, v->s, v->len, !v->sgn, v->len);
- else
- t = Ialloc(0, u->s, u->len, u->sgn, u->len);
-
- while (t->len != 0)
- {
- long s = 0; // shift t until odd
- cont = 1;
- int tl = t->len;
- for (int i = 0; i < tl && cont; ++i)
- {
- unsigned long a = t->s[i];
- for (int j = 0; j < I_SHIFT; ++j)
- {
- if (a & 1)
- {
- cont = 0;
- break;
- }
- else
- {
- ++s;
- a >>= 1;
- }
- }
- }
-
- if (s != 0) t = lshift(t, -s, t);
-
- if (t->sgn == I_POSITIVE)
- {
- u = Icopy(u, t);
- t = add(t, 0, v, 1, t);
- }
- else
- {
- v = Ialloc(v, t->s, t->len, !t->sgn, t->len);
- t = add(t, 0, u, 0, t);
- }
- }
- if (!STATIC_IntRep(t)) delete t;
- if (!STATIC_IntRep(v)) delete v;
- if (k != 0) u = lshift(u, k, u);
- return u;
-}
-
-
-
-long lg(const IntRep* x)
-{
- nonnil(x);
- int xl = x->len;
- if (xl == 0)
- return 0;
-
- long l = (xl - 1) * I_SHIFT - 1;
- unsigned short a = x->s[xl-1];
-
- while (a != 0)
- {
- a = a >> 1;
- ++l;
- }
- return l;
-}
-
-IntRep* power(const IntRep* x, long y, IntRep* r)
-{
- nonnil(x);
- int sgn;
- if (x->sgn == I_POSITIVE || (!(y & 1)))
- sgn = I_POSITIVE;
- else
- sgn = I_NEGATIVE;
-
- int xl = x->len;
-
- if (y == 0 || (xl == 1 && x->s[0] == 1))
- r = Icopy_one(r, sgn);
- else if (xl == 0 || y < 0)
- r = Icopy_zero(r);
- else if (y == 1 || y == -1)
- r = Icopy(r, x);
- else
- {
- int maxsize = ((lg(x) + 1) * y) / I_SHIFT + 2; // pre-allocate space
- IntRep* b = Ialloc(0, x->s, xl, I_POSITIVE, maxsize);
- b->len = xl;
- r = Icalloc(r, maxsize);
- r = Icopy_one(r, I_POSITIVE);
- for(;;)
- {
- if (y & 1)
- r = multiply(r, b, r);
- if ((y >>= 1) == 0)
- break;
- else
- b = multiply(b, b, b);
- }
- if (!STATIC_IntRep(b)) delete b;
- }
- r->sgn = sgn;
- Icheck(r);
- return r;
-}
-
-IntRep* abs(const IntRep* src, IntRep* dest)
-{
- nonnil(src);
- if (src != dest)
- dest = Icopy(dest, src);
- dest->sgn = I_POSITIVE;
- return dest;
-}
-
-IntRep* negate(const IntRep* src, IntRep* dest)
-{
- nonnil(src);
- if (src != dest)
- dest = Icopy(dest, src);
- if (dest->len != 0)
- dest->sgn = !dest->sgn;
- return dest;
-}
-
-#if defined(__GNUG__) && !defined(_G_NO_NRV)
-
-Integer sqrt(const Integer& x) return r(x)
-{
- int s = sign(x);
- if (s < 0) x.error("Attempted square root of negative Integer");
- if (s != 0)
- {
- r >>= (lg(x) / 2); // get close
- Integer q;
- div(x, r, q);
- while (q < r)
- {
- r += q;
- r >>= 1;
- div(x, r, q);
- }
- }
- return;
-}
-
-Integer lcm(const Integer& x, const Integer& y) return r
-{
- if (!x.initialized() || !y.initialized())
- x.error("operation on uninitialized Integer");
- Integer g;
- if (sign(x) == 0 || sign(y) == 0)
- g = 1;
- else
- g = gcd(x, y);
- div(x, g, r);
- mul(r, y, r);
-}
-
-#else
-Integer sqrt(const Integer& x)
-{
- Integer r(x);
- int s = sign(x);
- if (s < 0) x.error("Attempted square root of negative Integer");
- if (s != 0)
- {
- r >>= (lg(x) / 2); // get close
- Integer q;
- div(x, r, q);
- while (q < r)
- {
- r += q;
- r >>= 1;
- div(x, r, q);
- }
- }
- return r;
-}
-
-Integer lcm(const Integer& x, const Integer& y)
-{
- Integer r;
- if (!x.initialized() || !y.initialized())
- x.error("operation on uninitialized Integer");
- Integer g;
- if (sign(x) == 0 || sign(y) == 0)
- g = 1;
- else
- g = gcd(x, y);
- div(x, g, r);
- mul(r, y, r);
- return r;
-}
-
-#endif
-
-
-
-IntRep* atoIntRep(const char* s, int base)
-{
- int sl = strlen(s);
- IntRep* r = Icalloc(0, sl * (lg(base) + 1) / I_SHIFT + 1);
- if (s != 0)
- {
- char sgn;
- while (isspace(*s)) ++s;
- if (*s == '-')
- {
- sgn = I_NEGATIVE;
- s++;
- }
- else if (*s == '+')
- {
- sgn = I_POSITIVE;
- s++;
- }
- else
- sgn = I_POSITIVE;
- for (;;)
- {
- long digit;
- if (*s >= '0' && *s <= '9') digit = *s - '0';
- else if (*s >= 'a' && *s <= 'z') digit = *s - 'a' + 10;
- else if (*s >= 'A' && *s <= 'Z') digit = *s - 'A' + 10;
- else break;
- if (digit >= base) break;
- r = multiply(r, base, r);
- r = add(r, 0, digit, r);
- ++s;
- }
- r->sgn = sgn;
- }
- return r;
-}
-
-
-
-extern AllocRing _libgxx_fmtq;
-
-char* Itoa(const IntRep* x, int base, int width)
-{
- int fmtlen = (x->len + 1) * I_SHIFT / lg(base) + 4 + width;
- char* fmtbase = (char *) _libgxx_fmtq.alloc(fmtlen);
- char* f = cvtItoa(x, fmtbase, fmtlen, base, 0, width, 0, ' ', 'X', 0);
- return f;
-}
-
-ostream& operator << (ostream& s, const Integer& y)
-{
-#ifdef _OLD_STREAMS
- return s << Itoa(y.rep);
-#else
- if (s.opfx())
- {
- int base = (s.flags() & ios::oct) ? 8 : (s.flags() & ios::hex) ? 16 : 10;
- int width = s.width();
- y.printon(s, base, width);
- }
- return s;
-#endif
-}
-
-void Integer::printon(ostream& s, int base /* =10 */, int width /* =0 */) const
-{
- int align_right = !(s.flags() & ios::left);
- int showpos = s.flags() & ios::showpos;
- int showbase = s.flags() & ios::showbase;
- char fillchar = s.fill();
- char Xcase = (s.flags() & ios::uppercase)? 'X' : 'x';
- const IntRep* x = rep;
- int fmtlen = (x->len + 1) * I_SHIFT / lg(base) + 4 + width;
- char* fmtbase = new char[fmtlen];
- char* f = cvtItoa(x, fmtbase, fmtlen, base, showbase, width, align_right,
- fillchar, Xcase, showpos);
- s.write(f, fmtlen);
- delete [] fmtbase;
-}
-
-char* cvtItoa(const IntRep* x, char* fmt, int& fmtlen, int base, int showbase,
- int width, int align_right, char fillchar, char Xcase,
- int showpos)
-{
- char* e = fmt + fmtlen - 1;
- char* s = e;
- *--s = 0;
-
- if (x->len == 0)
- *--s = '0';
- else
- {
- IntRep* z = Icopy(0, x);
-
- // split division by base into two parts:
- // first divide by biggest power of base that fits in an unsigned short,
- // then use straight signed div/mods from there.
-
- // find power
- int bpower = 1;
- unsigned short b = base;
- unsigned short maxb = I_MAXNUM / base;
- while (b < maxb)
- {
- b *= base;
- ++bpower;
- }
- for(;;)
- {
- int rem = unscale(z->s, z->len, b, z->s);
- Icheck(z);
- if (z->len == 0)
- {
- while (rem != 0)
- {
- char ch = rem % base;
- rem /= base;
- if (ch >= 10)
- ch += 'a' - 10;
- else
- ch += '0';
- *--s = ch;
- }
- if (!STATIC_IntRep(z)) delete z;
- break;
- }
- else
- {
- for (int i = 0; i < bpower; ++i)
- {
- char ch = rem % base;
- rem /= base;
- if (ch >= 10)
- ch += 'a' - 10;
- else
- ch += '0';
- *--s = ch;
- }
- }
- }
- }
-
- if (base == 8 && showbase)
- *--s = '0';
- else if (base == 16 && showbase)
- {
- *--s = Xcase;
- *--s = '0';
- }
- if (x->sgn == I_NEGATIVE) *--s = '-';
- else if (showpos) *--s = '+';
- int w = e - s - 1;
- if (!align_right || w >= width)
- {
- while (w++ < width)
- *--s = fillchar;
- fmtlen = e - s - 1;
- return s;
- }
- else
- {
- char* p = fmt;
- for (char* t = s; *t != 0; ++t, ++p) *p = *t;
- while (w++ < width) *p++ = fillchar;
- *p = 0;
- fmtlen = p - fmt;
- return fmt;
- }
-}
-
-char* dec(const Integer& x, int width)
-{
- return Itoa(x, 10, width);
-}
-
-char* oct(const Integer& x, int width)
-{
- return Itoa(x, 8, width);
-}
-
-char* hex(const Integer& x, int width)
-{
- return Itoa(x, 16, width);
-}
-
-istream& operator >> (istream& stream, Integer& val)
-{
- if (!stream.ipfx0())
- return stream;
- int sign = ' ';
- register streambuf* sb = stream.rdbuf();
- int base = 10;
- int ndigits = 0;
- register int ch = sb->sbumpc();
- while (ch != EOF && isspace(ch))
- ch = sb->sbumpc();
- if (ch == '+' || ch == '-')
- {
- sign = ch;
- ch = sb->sbumpc();
- while (ch != EOF && isspace(ch))
- ch = sb->sbumpc();
- }
- if (ch == EOF) goto eof_fail;
- if (!(stream.flags() & ios::basefield))
- {
- if (ch == '0')
- {
- ch = sb->sbumpc();
- if (ch == EOF) { }
- else if (ch == 'x' || ch == 'X')
- {
- base = 16;
- ch = sb->sbumpc();
- if (ch == EOF) goto eof_fail;
- }
- else
- {
- sb->sputbackc(ch);
- base = 8;
- ch = '0';
- }
- }
- }
- else if ((stream.flags() & ios::basefield) == ios::hex)
- base = 16;
- else if ((stream.flags() & ios::basefield) == ios::oct)
- base = 8;
-
- val.rep = Icopy_zero(val.rep);
-
- for (;;)
- {
- if (ch == EOF)
- break;
- int digit;
- if (ch >= '0' && ch <= '9')
- digit = ch - '0';
- else if (ch >= 'A' && ch <= 'F')
- digit = ch - 'A' + 10;
- else if (ch >= 'a' && ch <= 'f')
- digit = ch - 'a' + 10;
- else
- digit = 999;
- if (digit >= base)
- {
- sb->sputbackc(ch);
- if (ndigits == 0)
- goto fail;
- else
- goto done;
- }
- ndigits++;
- switch (base)
- {
- case 8:
- val <<= 3;
- break;
- case 16:
- val <<= 4;
- break;
- default:
- val *= base;
- break;
- }
- val += digit;
- ch = sb->sbumpc();
- }
- fail:
- stream.set(ios::failbit);
- done:
- if (sign == '-')
- val.negate();
- return stream;
- eof_fail:
- stream.set(ios::failbit|ios::eofbit);
- return stream;
-}
-
-int Integer::OK() const
-{
- if (rep != 0)
- {
- int l = rep->len;
- int s = rep->sgn;
- int v = l <= rep->sz || STATIC_IntRep(rep); // length within bounds
- v &= s == 0 || s == 1; // legal sign
- Icheck(rep); // and correctly adjusted
- v &= rep->len == l;
- v &= rep->sgn == s;
- if (v)
- return v;
- }
- error("invariant failure");
- return 0;
-}
-
-void Integer::error(const char* msg) const
-{
- (*lib_error_handler)("Integer", msg);
-}
-
diff --git a/contrib/libg++/libg++/src/Integer.h b/contrib/libg++/libg++/src/Integer.h
deleted file mode 100644
index b98a349272c8..000000000000
--- a/contrib/libg++/libg++/src/Integer.h
+++ /dev/null
@@ -1,1134 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifndef _Integer_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _Integer_h 1
-
-#include <iostream.h>
-
-#undef OK
-
-struct IntRep // internal Integer representations
-{
- unsigned short len; // current length
- unsigned short sz; // allocated space (0 means static).
- short sgn; // 1 means >= 0; 0 means < 0
- unsigned short s[1]; // represented as ushort array starting here
-};
-
-// True if REP is staticly (or manually) allocated,
-// and should not be deleted by an Integer destructor.
-#define STATIC_IntRep(rep) ((rep)->sz==0)
-
-extern IntRep* Ialloc(IntRep*, const unsigned short *, int, int, int);
-extern IntRep* Icalloc(IntRep*, int);
-extern IntRep* Icopy_ulong(IntRep*, unsigned long);
-extern IntRep* Icopy_long(IntRep*, long);
-extern IntRep* Icopy(IntRep*, const IntRep*);
-extern IntRep* Iresize(IntRep*, int);
-extern IntRep* add(const IntRep*, int, const IntRep*, int, IntRep*);
-extern IntRep* add(const IntRep*, int, long, IntRep*);
-extern IntRep* multiply(const IntRep*, const IntRep*, IntRep*);
-extern IntRep* multiply(const IntRep*, long, IntRep*);
-extern IntRep* lshift(const IntRep*, long, IntRep*);
-extern IntRep* lshift(const IntRep*, const IntRep*, int, IntRep*);
-extern IntRep* bitop(const IntRep*, const IntRep*, IntRep*, char);
-extern IntRep* bitop(const IntRep*, long, IntRep*, char);
-extern IntRep* power(const IntRep*, long, IntRep*);
-extern IntRep* div(const IntRep*, const IntRep*, IntRep*);
-extern IntRep* mod(const IntRep*, const IntRep*, IntRep*);
-extern IntRep* div(const IntRep*, long, IntRep*);
-extern IntRep* mod(const IntRep*, long, IntRep*);
-extern IntRep* compl(const IntRep*, IntRep*);
-extern IntRep* abs(const IntRep*, IntRep*);
-extern IntRep* negate(const IntRep*, IntRep*);
-extern IntRep* pow(const IntRep*, long);
-extern IntRep* gcd(const IntRep*, const IntRep* y);
-extern int compare(const IntRep*, const IntRep*);
-extern int compare(const IntRep*, long);
-extern int ucompare(const IntRep*, const IntRep*);
-extern int ucompare(const IntRep*, long);
-extern char* Itoa(const IntRep* x, int base = 10, int width = 0);
-extern char* cvtItoa(const IntRep* x, char* fmt, int& fmtlen, int base,
- int showbase, int width, int align_right,
- char fillchar, char Xcase, int showpos);
-extern IntRep* atoIntRep(const char* s, int base = 10);
-extern long Itolong(const IntRep*);
-extern int Iislong(const IntRep*);
-extern long lg(const IntRep*);
-
-extern IntRep _ZeroRep, _OneRep, _MinusOneRep;
-
-class Integer
-{
-protected:
- IntRep* rep;
-public:
- Integer();
- Integer(int);
- Integer(long);
- Integer(unsigned long);
- Integer(IntRep*);
- Integer(const Integer&);
-
- ~Integer();
- Integer& operator = (const Integer&);
- Integer& operator = (long);
-
-// unary operations to self
-
- Integer& operator ++ ();
- Integer& operator -- ();
- void negate(); // negate in-place
- void abs(); // absolute-value in-place
- void complement(); // bitwise complement in-place
-
-// assignment-based operations
-
- Integer& operator += (const Integer&);
- Integer& operator -= (const Integer&);
- Integer& operator *= (const Integer&);
- Integer& operator /= (const Integer&);
- Integer& operator %= (const Integer&);
- Integer& operator <<=(const Integer&);
- Integer& operator >>=(const Integer&);
- Integer& operator &= (const Integer&);
- Integer& operator |= (const Integer&);
- Integer& operator ^= (const Integer&);
-
- Integer& operator += (long);
- Integer& operator -= (long);
- Integer& operator *= (long);
- Integer& operator /= (long);
- Integer& operator %= (long);
- Integer& operator <<=(long);
- Integer& operator >>=(long);
- Integer& operator &= (long);
- Integer& operator |= (long);
- Integer& operator ^= (long);
-
-// (constructive binary operations are inlined below)
-
-#if defined (__GNUG__) && ! defined (__STRICT_ANSI__)
- friend Integer operator <? (const Integer& x, const Integer& y); // min
- friend Integer operator >? (const Integer& x, const Integer& y); // max
-#endif
-
-// builtin Integer functions that must be friends
-
- friend long lg (const Integer&); // floor log base 2 of abs(x)
- friend double ratio(const Integer& x, const Integer& y);
- // return x/y as a double
-
- friend Integer gcd(const Integer&, const Integer&);
- friend int even(const Integer&); // true if even
- friend int odd(const Integer&); // true if odd
- friend int sign(const Integer&); // returns -1, 0, +1
-
- friend void (setbit)(Integer& x, long b); // set b'th bit of x
- friend void clearbit(Integer& x, long b); // clear b'th bit
- friend int testbit(const Integer& x, long b); // return b'th bit
-
-// procedural versions of operators
-
- friend void abs(const Integer& x, Integer& dest);
- friend void negate(const Integer& x, Integer& dest);
- friend void complement(const Integer& x, Integer& dest);
-
- friend int compare(const Integer&, const Integer&);
- friend int ucompare(const Integer&, const Integer&);
- friend void add(const Integer& x, const Integer& y, Integer& dest);
- friend void sub(const Integer& x, const Integer& y, Integer& dest);
- friend void mul(const Integer& x, const Integer& y, Integer& dest);
- friend void div(const Integer& x, const Integer& y, Integer& dest);
- friend void mod(const Integer& x, const Integer& y, Integer& dest);
- friend void divide(const Integer& x, const Integer& y,
- Integer& q, Integer& r);
-#ifndef __STRICT_ANSI__
- friend void and(const Integer& x, const Integer& y, Integer& dest);
- friend void or(const Integer& x, const Integer& y, Integer& dest);
- friend void xor(const Integer& x, const Integer& y, Integer& dest);
-#endif
- friend void lshift(const Integer& x, const Integer& y, Integer& dest);
- friend void rshift(const Integer& x, const Integer& y, Integer& dest);
- friend void pow(const Integer& x, const Integer& y, Integer& dest);
-
- friend int compare(const Integer&, long);
- friend int ucompare(const Integer&, long);
- friend void add(const Integer& x, long y, Integer& dest);
- friend void sub(const Integer& x, long y, Integer& dest);
- friend void mul(const Integer& x, long y, Integer& dest);
- friend void div(const Integer& x, long y, Integer& dest);
- friend void mod(const Integer& x, long y, Integer& dest);
- friend void divide(const Integer& x, long y, Integer& q, long& r);
-#ifndef __STRICT_ANSI__
- friend void and(const Integer& x, long y, Integer& dest);
- friend void or(const Integer& x, long y, Integer& dest);
- friend void xor(const Integer& x, long y, Integer& dest);
-#endif
- friend void lshift(const Integer& x, long y, Integer& dest);
- friend void rshift(const Integer& x, long y, Integer& dest);
- friend void pow(const Integer& x, long y, Integer& dest);
-
- friend int compare(long, const Integer&);
- friend int ucompare(long, const Integer&);
- friend void add(long x, const Integer& y, Integer& dest);
- friend void sub(long x, const Integer& y, Integer& dest);
- friend void mul(long x, const Integer& y, Integer& dest);
-#ifndef __STRICT_ANSI__
- friend void and(long x, const Integer& y, Integer& dest);
- friend void or(long x, const Integer& y, Integer& dest);
- friend void xor(long x, const Integer& y, Integer& dest);
-#endif
-
- friend Integer operator & (const Integer&, const Integer&);
- friend Integer operator & (const Integer&, long);
- friend Integer operator & (long, const Integer&);
- friend Integer operator | (const Integer&, const Integer&);
- friend Integer operator | (const Integer&, long);
- friend Integer operator | (long, const Integer&);
- friend Integer operator ^ (const Integer&, const Integer&);
- friend Integer operator ^ (const Integer&, long);
- friend Integer operator ^ (long, const Integer&);
-
-// coercion & conversion
-
- int fits_in_long() const { return Iislong(rep); }
- int fits_in_double() const;
-
- long as_long() const { return Itolong(rep); }
- double as_double() const;
-
- friend char* Itoa(const Integer& x, int base = 10, int width = 0);
- friend Integer atoI(const char* s, int base = 10);
- void printon(ostream& s, int base = 10, int width = 0) const;
-
- friend istream& operator >> (istream& s, Integer& y);
- friend ostream& operator << (ostream& s, const Integer& y);
-
-// error detection
-
- int initialized() const;
- void error(const char* msg) const;
- int OK() const;
-};
-
-
-// (These are declared inline)
-
- int operator == (const Integer&, const Integer&);
- int operator == (const Integer&, long);
- int operator != (const Integer&, const Integer&);
- int operator != (const Integer&, long);
- int operator < (const Integer&, const Integer&);
- int operator < (const Integer&, long);
- int operator <= (const Integer&, const Integer&);
- int operator <= (const Integer&, long);
- int operator > (const Integer&, const Integer&);
- int operator > (const Integer&, long);
- int operator >= (const Integer&, const Integer&);
- int operator >= (const Integer&, long);
- Integer operator - (const Integer&);
- Integer operator ~ (const Integer&);
- Integer operator + (const Integer&, const Integer&);
- Integer operator + (const Integer&, long);
- Integer operator + (long, const Integer&);
- Integer operator - (const Integer&, const Integer&);
- Integer operator - (const Integer&, long);
- Integer operator - (long, const Integer&);
- Integer operator * (const Integer&, const Integer&);
- Integer operator * (const Integer&, long);
- Integer operator * (long, const Integer&);
- Integer operator / (const Integer&, const Integer&);
- Integer operator / (const Integer&, long);
- Integer operator % (const Integer&, const Integer&);
- Integer operator % (const Integer&, long);
- Integer operator << (const Integer&, const Integer&);
- Integer operator << (const Integer&, long);
- Integer operator >> (const Integer&, const Integer&);
- Integer operator >> (const Integer&, long);
-
- Integer abs(const Integer&); // absolute value
- Integer sqr(const Integer&); // square
-
- Integer pow(const Integer& x, const Integer& y);
- Integer pow(const Integer& x, long y);
- Integer Ipow(long x, long y); // x to the y as Integer
-
-
-extern char* dec(const Integer& x, int width = 0);
-extern char* oct(const Integer& x, int width = 0);
-extern char* hex(const Integer& x, int width = 0);
-extern Integer sqrt(const Integer&); // floor of square root
-extern Integer lcm(const Integer& x, const Integer& y); // least common mult
-
-
-typedef Integer IntTmp; // for backward compatibility
-
-inline Integer::Integer() :rep(&_ZeroRep) {}
-
-inline Integer::Integer(IntRep* r) :rep(r) {}
-
-inline Integer::Integer(int y) :rep(Icopy_long(0, (long)y)) {}
-
-inline Integer::Integer(long y) :rep(Icopy_long(0, y)) {}
-
-inline Integer::Integer(unsigned long y) :rep(Icopy_ulong(0, y)) {}
-
-inline Integer::Integer(const Integer& y) :rep(Icopy(0, y.rep)) {}
-
-inline Integer::~Integer() { if (rep && !STATIC_IntRep(rep)) delete rep; }
-
-inline Integer& Integer::operator = (const Integer& y)
-{
- rep = Icopy(rep, y.rep);
- return *this;
-}
-
-inline Integer& Integer::operator = (long y)
-{
- rep = Icopy_long(rep, y);
- return *this;
-}
-
-inline int Integer::initialized() const
-{
- return rep != 0;
-}
-
-// procedural versions
-
-inline int compare(const Integer& x, const Integer& y)
-{
- return compare(x.rep, y.rep);
-}
-
-inline int ucompare(const Integer& x, const Integer& y)
-{
- return ucompare(x.rep, y.rep);
-}
-
-inline int compare(const Integer& x, long y)
-{
- return compare(x.rep, y);
-}
-
-inline int ucompare(const Integer& x, long y)
-{
- return ucompare(x.rep, y);
-}
-
-inline int compare(long x, const Integer& y)
-{
- return -compare(y.rep, x);
-}
-
-inline int ucompare(long x, const Integer& y)
-{
- return -ucompare(y.rep, x);
-}
-
-inline void add(const Integer& x, const Integer& y, Integer& dest)
-{
- dest.rep = add(x.rep, 0, y.rep, 0, dest.rep);
-}
-
-inline void sub(const Integer& x, const Integer& y, Integer& dest)
-{
- dest.rep = add(x.rep, 0, y.rep, 1, dest.rep);
-}
-
-inline void mul(const Integer& x, const Integer& y, Integer& dest)
-{
- dest.rep = multiply(x.rep, y.rep, dest.rep);
-}
-
-inline void div(const Integer& x, const Integer& y, Integer& dest)
-{
- dest.rep = div(x.rep, y.rep, dest.rep);
-}
-
-inline void mod(const Integer& x, const Integer& y, Integer& dest)
-{
- dest.rep = mod(x.rep, y.rep, dest.rep);
-}
-
-#ifndef __STRICT_ANSI__
-inline void and(const Integer& x, const Integer& y, Integer& dest)
-{
- dest.rep = bitop(x.rep, y.rep, dest.rep, '&');
-}
-
-inline void or(const Integer& x, const Integer& y, Integer& dest)
-{
- dest.rep = bitop(x.rep, y.rep, dest.rep, '|');
-}
-
-inline void xor(const Integer& x, const Integer& y, Integer& dest)
-{
- dest.rep = bitop(x.rep, y.rep, dest.rep, '^');
-}
-#endif
-
-inline void lshift(const Integer& x, const Integer& y, Integer& dest)
-{
- dest.rep = lshift(x.rep, y.rep, 0, dest.rep);
-}
-
-inline void rshift(const Integer& x, const Integer& y, Integer& dest)
-{
- dest.rep = lshift(x.rep, y.rep, 1, dest.rep);
-}
-
-inline void pow(const Integer& x, const Integer& y, Integer& dest)
-{
- dest.rep = power(x.rep, Itolong(y.rep), dest.rep); // not incorrect
-}
-
-inline void add(const Integer& x, long y, Integer& dest)
-{
- dest.rep = add(x.rep, 0, y, dest.rep);
-}
-
-inline void sub(const Integer& x, long y, Integer& dest)
-{
- dest.rep = add(x.rep, 0, -y, dest.rep);
-}
-
-inline void mul(const Integer& x, long y, Integer& dest)
-{
- dest.rep = multiply(x.rep, y, dest.rep);
-}
-
-inline void div(const Integer& x, long y, Integer& dest)
-{
- dest.rep = div(x.rep, y, dest.rep);
-}
-
-inline void mod(const Integer& x, long y, Integer& dest)
-{
- dest.rep = mod(x.rep, y, dest.rep);
-}
-
-#ifndef __STRICT_ANSI__
-inline void and(const Integer& x, long y, Integer& dest)
-{
- dest.rep = bitop(x.rep, y, dest.rep, '&');
-}
-
-inline void or(const Integer& x, long y, Integer& dest)
-{
- dest.rep = bitop(x.rep, y, dest.rep, '|');
-}
-
-inline void xor(const Integer& x, long y, Integer& dest)
-{
- dest.rep = bitop(x.rep, y, dest.rep, '^');
-}
-#endif
-
-inline void lshift(const Integer& x, long y, Integer& dest)
-{
- dest.rep = lshift(x.rep, y, dest.rep);
-}
-
-inline void rshift(const Integer& x, long y, Integer& dest)
-{
- dest.rep = lshift(x.rep, -y, dest.rep);
-}
-
-inline void pow(const Integer& x, long y, Integer& dest)
-{
- dest.rep = power(x.rep, y, dest.rep);
-}
-
-inline void abs(const Integer& x, Integer& dest)
-{
- dest.rep = abs(x.rep, dest.rep);
-}
-
-inline void negate(const Integer& x, Integer& dest)
-{
- dest.rep = negate(x.rep, dest.rep);
-}
-
-inline void complement(const Integer& x, Integer& dest)
-{
- dest.rep = compl(x.rep, dest.rep);
-}
-
-inline void add(long x, const Integer& y, Integer& dest)
-{
- dest.rep = add(y.rep, 0, x, dest.rep);
-}
-
-inline void sub(long x, const Integer& y, Integer& dest)
-{
- dest.rep = add(y.rep, 1, x, dest.rep);
-}
-
-inline void mul(long x, const Integer& y, Integer& dest)
-{
- dest.rep = multiply(y.rep, x, dest.rep);
-}
-
-#ifndef __STRICT_ANSI__
-inline void and(long x, const Integer& y, Integer& dest)
-{
- dest.rep = bitop(y.rep, x, dest.rep, '&');
-}
-
-inline void or(long x, const Integer& y, Integer& dest)
-{
- dest.rep = bitop(y.rep, x, dest.rep, '|');
-}
-
-inline void xor(long x, const Integer& y, Integer& dest)
-{
- dest.rep = bitop(y.rep, x, dest.rep, '^');
-}
-#endif
-
-
-// operator versions
-
-inline int operator == (const Integer& x, const Integer& y)
-{
- return compare(x, y) == 0;
-}
-
-inline int operator == (const Integer& x, long y)
-{
- return compare(x, y) == 0;
-}
-
-inline int operator != (const Integer& x, const Integer& y)
-{
- return compare(x, y) != 0;
-}
-
-inline int operator != (const Integer& x, long y)
-{
- return compare(x, y) != 0;
-}
-
-inline int operator < (const Integer& x, const Integer& y)
-{
- return compare(x, y) < 0;
-}
-
-inline int operator < (const Integer& x, long y)
-{
- return compare(x, y) < 0;
-}
-
-inline int operator <= (const Integer& x, const Integer& y)
-{
- return compare(x, y) <= 0;
-}
-
-inline int operator <= (const Integer& x, long y)
-{
- return compare(x, y) <= 0;
-}
-
-inline int operator > (const Integer& x, const Integer& y)
-{
- return compare(x, y) > 0;
-}
-
-inline int operator > (const Integer& x, long y)
-{
- return compare(x, y) > 0;
-}
-
-inline int operator >= (const Integer& x, const Integer& y)
-{
- return compare(x, y) >= 0;
-}
-
-inline int operator >= (const Integer& x, long y)
-{
- return compare(x, y) >= 0;
-}
-
-
-inline Integer& Integer::operator += (const Integer& y)
-{
- add(*this, y, *this);
- return *this;
-}
-
-inline Integer& Integer::operator += (long y)
-{
- add(*this, y, *this);
- return *this;
-}
-
-inline Integer& Integer::operator ++ ()
-{
- add(*this, 1, *this);
- return *this;
-}
-
-
-inline Integer& Integer::operator -= (const Integer& y)
-{
- sub(*this, y, *this);
- return *this;
-}
-
-inline Integer& Integer::operator -= (long y)
-{
- sub(*this, y, *this);
- return *this;
-}
-
-inline Integer& Integer::operator -- ()
-{
- add(*this, -1, *this);
- return *this;
-}
-
-
-
-inline Integer& Integer::operator *= (const Integer& y)
-{
- mul(*this, y, *this);
- return *this;
-}
-
-inline Integer& Integer::operator *= (long y)
-{
- mul(*this, y, *this);
- return *this;
-}
-
-
-inline Integer& Integer::operator &= (const Integer& y)
-{
- rep = bitop(rep, y.rep, rep, '&');
- return *this;
-}
-
-inline Integer& Integer::operator &= (long y)
-{
- rep = bitop(rep, y, rep, '&');
- return *this;
-}
-
-inline Integer& Integer::operator |= (const Integer& y)
-{
- rep = bitop(rep, y.rep, rep, '|');
- return *this;
-}
-
-inline Integer& Integer::operator |= (long y)
-{
- rep = bitop(rep, y, rep, '|');
- return *this;
-}
-
-
-inline Integer& Integer::operator ^= (const Integer& y)
-{
- rep = bitop(rep, y.rep, rep, '^');
- return *this;
-}
-
-inline Integer& Integer::operator ^= (long y)
-{
- rep = bitop(rep, y, rep, '^');
- return *this;
-}
-
-
-
-inline Integer& Integer::operator /= (const Integer& y)
-{
- div(*this, y, *this);
- return *this;
-}
-
-inline Integer& Integer::operator /= (long y)
-{
- div(*this, y, *this);
- return *this;
-}
-
-
-inline Integer& Integer::operator <<= (const Integer& y)
-{
- lshift(*this, y, *this);
- return *this;
-}
-
-inline Integer& Integer::operator <<= (long y)
-{
- lshift(*this, y, *this);
- return *this;
-}
-
-
-inline Integer& Integer::operator >>= (const Integer& y)
-{
- rshift(*this, y, *this);
- return *this;
-}
-
-inline Integer& Integer::operator >>= (long y)
-{
- rshift(*this, y, *this);
- return *this;
-}
-
-#if defined (__GNUG__) && ! defined (__STRICT_ANSI__)
-inline Integer operator <? (const Integer& x, const Integer& y)
-{
- return (compare(x.rep, y.rep) <= 0) ? x : y;
-}
-
-inline Integer operator >? (const Integer& x, const Integer& y)
-{
- return (compare(x.rep, y.rep) >= 0)? x : y;
-}
-#endif
-
-
-inline void Integer::abs()
-{
- ::abs(*this, *this);
-}
-
-inline void Integer::negate()
-{
- ::negate(*this, *this);
-}
-
-
-inline void Integer::complement()
-{
- ::complement(*this, *this);
-}
-
-
-inline int sign(const Integer& x)
-{
- return (x.rep->len == 0) ? 0 : ( (x.rep->sgn == 1) ? 1 : -1 );
-}
-
-inline int even(const Integer& y)
-{
- return y.rep->len == 0 || !(y.rep->s[0] & 1);
-}
-
-inline int odd(const Integer& y)
-{
- return y.rep->len > 0 && (y.rep->s[0] & 1);
-}
-
-inline char* Itoa(const Integer& y, int base, int width)
-{
- return Itoa(y.rep, base, width);
-}
-
-
-
-inline long lg(const Integer& x)
-{
- return lg(x.rep);
-}
-
-// constructive operations
-
-#if defined(__GNUG__) && !defined(_G_NO_NRV)
-
-inline Integer operator + (const Integer& x, const Integer& y) return r
-{
- add(x, y, r);
-}
-
-inline Integer operator + (const Integer& x, long y) return r
-{
- add(x, y, r);
-}
-
-inline Integer operator + (long x, const Integer& y) return r
-{
- add(x, y, r);
-}
-
-inline Integer operator - (const Integer& x, const Integer& y) return r
-{
- sub(x, y, r);
-}
-
-inline Integer operator - (const Integer& x, long y) return r
-{
- sub(x, y, r);
-}
-
-inline Integer operator - (long x, const Integer& y) return r
-{
- sub(x, y, r);
-}
-
-inline Integer operator * (const Integer& x, const Integer& y) return r
-{
- mul(x, y, r);
-}
-
-inline Integer operator * (const Integer& x, long y) return r
-{
- mul(x, y, r);
-}
-
-inline Integer operator * (long x, const Integer& y) return r
-{
- mul(x, y, r);
-}
-
-inline Integer sqr(const Integer& x) return r
-{
- mul(x, x, r);
-}
-
-inline Integer operator & (const Integer& x, const Integer& y) return r
-{
- r.rep = bitop(x.rep, y.rep, r.rep, '&');
-}
-
-inline Integer operator & (const Integer& x, long y) return r
-{
- r.rep = bitop(x.rep, y, r.rep, '&');
-}
-
-inline Integer operator & (long x, const Integer& y) return r
-{
- r.rep = bitop(y.rep, x, r.rep, '&');
-}
-
-inline Integer operator | (const Integer& x, const Integer& y) return r
-{
- r.rep = bitop(x.rep, y.rep, r.rep, '|');
-}
-
-inline Integer operator | (const Integer& x, long y) return r
-{
- r.rep = bitop(x.rep, y, r.rep, '|');
-}
-
-inline Integer operator | (long x, const Integer& y) return r
-{
- r.rep = bitop(y.rep, x, r.rep, '|');
-}
-
-inline Integer operator ^ (const Integer& x, const Integer& y) return r
-{
- r.rep = bitop(x.rep, y.rep, r.rep, '^');
-}
-
-inline Integer operator ^ (const Integer& x, long y) return r
-{
- r.rep = bitop (x.rep, y, r.rep, '^');
-}
-
-inline Integer operator ^ (long x, const Integer& y) return r
-{
- r.rep = bitop (y.rep, x, r.rep, '^');
-}
-
-inline Integer operator / (const Integer& x, const Integer& y) return r
-{
- div(x, y, r);
-}
-
-inline Integer operator / (const Integer& x, long y) return r
-{
- div(x, y, r);
-}
-
-inline Integer operator % (const Integer& x, const Integer& y) return r
-{
- mod(x, y, r);
-}
-
-inline Integer operator % (const Integer& x, long y) return r
-{
- mod(x, y, r);
-}
-
-inline Integer operator << (const Integer& x, const Integer& y) return r
-{
- lshift(x, y, r);
-}
-
-inline Integer operator << (const Integer& x, long y) return r
-{
- lshift(x, y, r);
-}
-
-inline Integer operator >> (const Integer& x, const Integer& y) return r;
-{
- rshift(x, y, r);
-}
-
-inline Integer operator >> (const Integer& x, long y) return r
-{
- rshift(x, y, r);
-}
-
-inline Integer pow(const Integer& x, long y) return r
-{
- pow(x, y, r);
-}
-
-inline Integer Ipow(long x, long y) return r(x)
-{
- pow(r, y, r);
-}
-
-inline Integer pow(const Integer& x, const Integer& y) return r
-{
- pow(x, y, r);
-}
-
-
-
-inline Integer abs(const Integer& x) return r
-{
- abs(x, r);
-}
-
-inline Integer operator - (const Integer& x) return r
-{
- negate(x, r);
-}
-
-inline Integer operator ~ (const Integer& x) return r
-{
- complement(x, r);
-}
-
-inline Integer atoI(const char* s, int base) return r
-{
- r.rep = atoIntRep(s, base);
-}
-
-inline Integer gcd(const Integer& x, const Integer& y) return r
-{
- r.rep = gcd(x.rep, y.rep);
-}
-
-#else /* NO_NRV */
-
-inline Integer operator + (const Integer& x, const Integer& y)
-{
- Integer r; add(x, y, r); return r;
-}
-
-inline Integer operator + (const Integer& x, long y)
-{
- Integer r; add(x, y, r); return r;
-}
-
-inline Integer operator + (long x, const Integer& y)
-{
- Integer r; add(x, y, r); return r;
-}
-
-inline Integer operator - (const Integer& x, const Integer& y)
-{
- Integer r; sub(x, y, r); return r;
-}
-
-inline Integer operator - (const Integer& x, long y)
-{
- Integer r; sub(x, y, r); return r;
-}
-
-inline Integer operator - (long x, const Integer& y)
-{
- Integer r; sub(x, y, r); return r;
-}
-
-inline Integer operator * (const Integer& x, const Integer& y)
-{
- Integer r; mul(x, y, r); return r;
-}
-
-inline Integer operator * (const Integer& x, long y)
-{
- Integer r; mul(x, y, r); return r;
-}
-
-inline Integer operator * (long x, const Integer& y)
-{
- Integer r; mul(x, y, r); return r;
-}
-
-inline Integer sqr(const Integer& x)
-{
- Integer r; mul(x, x, r); return r;
-}
-
-inline Integer operator & (const Integer& x, const Integer& y)
-{
- Integer r; and(x, y, r); return r;
-}
-
-inline Integer operator & (const Integer& x, long y)
-{
- Integer r; and(x, y, r); return r;
-}
-
-inline Integer operator & (long x, const Integer& y)
-{
- Integer r; and(x, y, r); return r;
-}
-
-inline Integer operator | (const Integer& x, const Integer& y)
-{
- Integer r; or(x, y, r); return r;
-}
-
-inline Integer operator | (const Integer& x, long y)
-{
- Integer r; or(x, y, r); return r;
-}
-
-inline Integer operator | (long x, const Integer& y)
-{
- Integer r; or(x, y, r); return r;
-}
-
-inline Integer operator ^ (const Integer& x, const Integer& y)
-{
- Integer r; r.rep = bitop(x.rep, y.rep, r.rep, '^'); return r;
-}
-
-inline Integer operator ^ (const Integer& x, long y)
-{
- Integer r; r.rep = bitop(x.rep, y, r.rep, '^'); return r;
-}
-
-inline Integer operator ^ (long x, const Integer& y)
-{
- Integer r; r.rep = bitop(y.rep, x, r.rep, '^'); return r;
-}
-
-inline Integer operator / (const Integer& x, const Integer& y)
-{
- Integer r; div(x, y, r); return r;
-}
-
-inline Integer operator / (const Integer& x, long y)
-{
- Integer r; div(x, y, r); return r;
-}
-
-inline Integer operator % (const Integer& x, const Integer& y)
-{
- Integer r; mod(x, y, r); return r;
-}
-
-inline Integer operator % (const Integer& x, long y)
-{
- Integer r; mod(x, y, r); return r;
-}
-
-inline Integer operator << (const Integer& x, const Integer& y)
-{
- Integer r; lshift(x, y, r); return r;
-}
-
-inline Integer operator << (const Integer& x, long y)
-{
- Integer r; lshift(x, y, r); return r;
-}
-
-inline Integer operator >> (const Integer& x, const Integer& y)
-{
- Integer r; rshift(x, y, r); return r;
-}
-
-inline Integer operator >> (const Integer& x, long y)
-{
- Integer r; rshift(x, y, r); return r;
-}
-
-inline Integer pow(const Integer& x, long y)
-{
- Integer r; pow(x, y, r); return r;
-}
-
-inline Integer Ipow(long x, long y)
-{
- Integer r(x); pow(r, y, r); return r;
-}
-
-inline Integer pow(const Integer& x, const Integer& y)
-{
- Integer r; pow(x, y, r); return r;
-}
-
-
-
-inline Integer abs(const Integer& x)
-{
- Integer r; abs(x, r); return r;
-}
-
-inline Integer operator - (const Integer& x)
-{
- Integer r; negate(x, r); return r;
-}
-
-inline Integer operator ~ (const Integer& x)
-{
- Integer r; complement(x, r); return r;
-}
-
-inline Integer atoI(const char* s, int base)
-{
- Integer r; r.rep = atoIntRep(s, base); return r;
-}
-
-inline Integer gcd(const Integer& x, const Integer& y)
-{
- Integer r; r.rep = gcd(x.rep, y.rep); return r;
-}
-
-#endif /* NO_NRV */
-
-inline Integer& Integer::operator %= (const Integer& y)
-{
- *this = *this % y; // mod(*this, y, *this) doesn't work.
- return *this;
-}
-
-inline Integer& Integer::operator %= (long y)
-{
- *this = *this % y; // mod(*this, y, *this) doesn't work.
- return *this;
-}
-#endif /* !_Integer_h */
diff --git a/contrib/libg++/libg++/src/Integer.hP b/contrib/libg++/libg++/src/Integer.hP
deleted file mode 100644
index b8a803942656..000000000000
--- a/contrib/libg++/libg++/src/Integer.hP
+++ /dev/null
@@ -1,30 +0,0 @@
-// Stuff used to implement the Integer class.
-// WARNING: Its internals WILL change!
-
-/*
- Sizes of shifts for multiple-precision arithmetic.
- These should not be changed unless Integer representation
- as unsigned shorts is changed in the implementation files.
-*/
-
-#define I_SHIFT (sizeof(short) * CHAR_BIT)
-#define I_RADIX ((unsigned long)(1L << I_SHIFT))
-#define I_MAXNUM ((unsigned long)((I_RADIX - 1)))
-#define I_MINNUM ((unsigned long)(I_RADIX >> 1))
-#define I_POSITIVE 1
-#define I_NEGATIVE 0
-
-/* All routines assume SHORT_PER_LONG > 1 */
-#define SHORT_PER_LONG ((unsigned)(((sizeof(long) + sizeof(short) - 1) / sizeof(short))))
-#define CHAR_PER_LONG ((unsigned)sizeof(long))
-
-/*
- minimum and maximum sizes for an IntRep
-*/
-
-#define MINIntRep_SIZE 16
-#define MAXIntRep_SIZE I_MAXNUM
-
-#ifndef MALLOC_MIN_OVERHEAD
-#define MALLOC_MIN_OVERHEAD 4
-#endif
diff --git a/contrib/libg++/libg++/src/LogNorm.cc b/contrib/libg++/libg++/src/LogNorm.cc
deleted file mode 100644
index 446a9fe7f84f..000000000000
--- a/contrib/libg++/libg++/src/LogNorm.cc
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Dirk Grunwald (grunwald@cs.uiuc.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <builtin.h>
-#include <Random.h>
-#include <Normal.h>
-
-#include <LogNorm.h>
-
-//
-// See Simulation, Modelling & Analysis by Law & Kelton, pp260
-//
-//
-
-double LogNormal::operator()()
-{
- return exp (this->Normal::operator()() );
-}
-
-
diff --git a/contrib/libg++/libg++/src/LogNorm.h b/contrib/libg++/libg++/src/LogNorm.h
deleted file mode 100644
index 18fc1f11d234..000000000000
--- a/contrib/libg++/libg++/src/LogNorm.h
+++ /dev/null
@@ -1,78 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Dirk Grunwald (grunwald@cs.uiuc.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-#ifndef _LogNormal_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _LogNormal_h
-
-#include <Normal.h>
-
-class LogNormal: public Normal {
-protected:
- double logMean;
- double logVariance;
- void setState();
-public:
- LogNormal(double mean, double variance, RNG *gen);
- double mean();
- double mean(double x);
- double variance();
- double variance(double x);
- virtual double operator()();
-};
-
-
-inline void LogNormal::setState()
-{
- double m2 = logMean * logMean;
- pMean = log(m2 / sqrt(logVariance + m2) );
-// from ch@heike.informatik.uni-dortmund.de:
-// (was pVariance = log((sqrt(logVariance + m2)/m2 )); )
- pStdDev = sqrt(log((logVariance + m2)/m2 ));
-}
-
-inline LogNormal::LogNormal(double mean, double variance, RNG *gen)
- : Normal(mean, variance, gen)
-{
- logMean = mean;
- logVariance = variance;
- setState();
-}
-
-inline double LogNormal::mean() {
- return logMean;
-}
-
-inline double LogNormal::mean(double x)
-{
- double t=logMean; logMean = x; setState();
- return t;
-}
-
-inline double LogNormal::variance() {
- return logVariance;
-}
-
-inline double LogNormal::variance(double x)
-{
- double t=logVariance; logVariance = x; setState();
- return t;
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/MLCG.cc b/contrib/libg++/libg++/src/MLCG.cc
deleted file mode 100644
index 8e624772f34d..000000000000
--- a/contrib/libg++/libg++/src/MLCG.cc
+++ /dev/null
@@ -1,103 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1989 Free Software Foundation
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <MLCG.h>
-//
-// SEED_TABLE_SIZE must be a power of 2
-//
-
-
-#define SEED_TABLE_SIZE 32
-
-static _G_int32_t seedTable[SEED_TABLE_SIZE] = {
-0xbdcc47e5, 0x54aea45d, 0xec0df859, 0xda84637b,
-0xc8c6cb4f, 0x35574b01, 0x28260b7d, 0x0d07fdbf,
-0x9faaeeb0, 0x613dd169, 0x5ce2d818, 0x85b9e706,
-0xab2469db, 0xda02b0dc, 0x45c60d6e, 0xffe49d10,
-0x7224fea3, 0xf9684fc9, 0xfc7ee074, 0x326ce92a,
-0x366d13b5, 0x17aaa731, 0xeb83a675, 0x7781cb32,
-0x4ec7c92d, 0x7f187521, 0x2cf346b4, 0xad13310f,
-0xb89cff2b, 0x12164de1, 0xa865168d, 0x32b56cdf
-};
-
-MLCG::MLCG(_G_int32_t seed1, _G_int32_t seed2)
-{
- initialSeedOne = seed1;
- initialSeedTwo = seed2;
- reset();
-}
-
-void
-MLCG::reset()
-{
- _G_int32_t seed1 = initialSeedOne;
- _G_int32_t seed2 = initialSeedTwo;
-
- //
- // Most people pick stupid seed numbers that do not have enough
- // bits. In this case, if they pick a small seed number, we
- // map that to a specific seed.
- //
- if (seed1 < 0) {
- seed1 = (seed1 + 2147483561);
- seed1 = (seed1 < 0) ? -seed1 : seed1;
- }
-
- if (seed2 < 0) {
- seed2 = (seed2 + 2147483561);
- seed2 = (seed2 < 0) ? -seed2 : seed2;
- }
-
- if (seed1 > -1 && seed1 < SEED_TABLE_SIZE) {
- seedOne = seedTable[seed1];
- } else {
- seedOne = seed1 ^ seedTable[seed1 & (SEED_TABLE_SIZE-1)];
- }
-
- if (seed2 > -1 && seed2 < SEED_TABLE_SIZE) {
- seedTwo = seedTable[seed2];
- } else {
- seedTwo = seed2 ^ seedTable[ seed2 & (SEED_TABLE_SIZE-1) ];
- }
- seedOne = (seedOne % 2147483561) + 1;
- seedTwo = (seedTwo % 2147483397) + 1;
-}
-
-_G_uint32_t MLCG::asLong()
-{
- _G_int32_t k = seedOne % 53668;
-
- seedOne = 40014 * (seedOne-k * 53668) - k * 12211;
- if (seedOne < 0) {
- seedOne += 2147483563;
- }
-
- k = seedTwo % 52774;
- seedTwo = 40692 * (seedTwo - k * 52774) - k * 3791;
- if (seedTwo < 0) {
- seedTwo += 2147483399;
- }
-
- _G_int32_t z = seedOne - seedTwo;
- if (z < 1) {
- z += 2147483562;
- }
- return( (unsigned long) z);
-}
-
diff --git a/contrib/libg++/libg++/src/MLCG.h b/contrib/libg++/libg++/src/MLCG.h
deleted file mode 100644
index 0ae817cd7772..000000000000
--- a/contrib/libg++/libg++/src/MLCG.h
+++ /dev/null
@@ -1,87 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Dirk Grunwald (grunwald@cs.uiuc.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-#ifndef _MLCG_h
-#define _MLCG_h 1
-#ifdef __GNUG__
-#pragma interface
-#endif
-
-#include <RNG.h>
-#include <math.h>
-
-//
-// Multiplicative Linear Conguential Generator
-//
-
-class MLCG : public RNG {
- _G_int32_t initialSeedOne;
- _G_int32_t initialSeedTwo;
- _G_int32_t seedOne;
- _G_int32_t seedTwo;
-
-protected:
-
-public:
- MLCG(_G_int32_t seed1 = 0, _G_int32_t seed2 = 1);
- //
- // Return a long-words word of random bits
- //
- virtual _G_uint32_t asLong();
- virtual void reset();
- _G_int32_t seed1();
- void seed1(_G_int32_t);
- _G_int32_t seed2();
- void seed2(_G_int32_t);
- void reseed(_G_int32_t, _G_int32_t);
-};
-
-inline _G_int32_t
-MLCG::seed1()
-{
- return(seedOne);
-}
-
-inline void
-MLCG::seed1(_G_int32_t s)
-{
- initialSeedOne = s;
- reset();
-}
-
-inline _G_int32_t
-MLCG::seed2()
-{
- return(seedTwo);
-}
-
-inline void
-MLCG::seed2(_G_int32_t s)
-{
- initialSeedTwo = s;
- reset();
-}
-
-inline void
-MLCG::reseed(_G_int32_t s1, _G_int32_t s2)
-{
- initialSeedOne = s1;
- initialSeedTwo = s2;
- reset();
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/Makefile.in b/contrib/libg++/libg++/src/Makefile.in
deleted file mode 100644
index d67506019435..000000000000
--- a/contrib/libg++/libg++/src/Makefile.in
+++ /dev/null
@@ -1,75 +0,0 @@
-# Makefile for libg++.a
-
-# Copyright (C) 1988, 1992, 1993 Free Software Foundation
-# originally written by Doug Lea (dl@rocky.oswego.edu)
-
-# This file is part of libg++, the GNU C++ library.
-
-# GNU CC is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY. No author or distributor
-# accepts responsibility to anyone for the consequences of using it
-# or for whether it serves any particular purpose or works at all,
-# unless he says so in writing. Refer to the GNU CC General Public
-# License for full details.
-
-# Everyone is granted permission to copy, modify and redistribute
-# GNU CC, but only under the conditions described in the
-# GNU CC General Public License. A copy of this license is
-# supposed to have been given to you along with GNU CC so you
-# can know your rights and responsibilities. It should be in a
-# file named COPYING. Among other things, the copyright notice
-# and this notice must be preserved on all copies.
-
-srcdir = .
-
-#
-# declarations from here on should not normally need to be changed
-# in order to compile libg++.a
-#
-
-# library sources
-
-STREAM_OBJS = File.o ostream.o istream.o streambuf.o filebuf.o Filebuf.o \
- PlotFile.o SFile.o
-
-REGEX_OBJ=
-BIT_OBJS = bitand.o bitany.o bitblt.o bitclear.o bitcopy.o bitcount.o\
- bitinvert.o bitlcomp.o bitset1.o bitxor.o
-OBJS = AllocRing.o Obstack.o builtin.o \
- $(REGEX_OBJ) Regex.o String.o Intdouble.o Integer.o Rational.o \
- Random.o BitSet.o BitString.o LogNorm.o SmplHist.o SmplStat.o \
- Normal.o NegExp.o Weibull.o Erlang.o DiscUnif.o \
- Uniform.o Poisson.o HypGeom.o Geom.o Binomial.o \
- RNG.o ACG.o MLCG.o RndInt.o \
- Fix.o Fix16.o Fix24.o GetOpt.o \
- error.o gcd.o hash.o \
- lg.o fmtq.o ioob.o pow.o sqrt.o timer.o \
- compare.o $(BIT_OBJS) \
- SLList.o DLList.o
-
-DEPEND_SOURCES = $(srcdir)/*.cc
-
-#### host, target, and site dependent Makefile fragments come in here.
-##
-
-.PHONY: add-to-targetlib
-# Invoked from other directories, overriding $(TARGETLIB).
-add-to-targetlib:
- $(AR) $(AR_FLAGS) $(TARGETLIB) $(OBJS)
-
-# This is invoked by the top-level libg++ Makefile, to:
-# a) make sure $(OBJS) are up-to-date, and
-# b) make a list of those files that should be added to libg++.a.
-libgxx.list: stamp-picdir $(OBJS)
- @echo "$(OBJS)" >libgxx.list
-
-install:
- if [ -z "$(MULTISUBDIR)" ]; then \
- for FILE in `(cd ${srcdir}; echo *.h gen/*.ccP gen/*.hP)`; do \
- rm -f $(gxx_includedir)/$$FILE ; \
- $(INSTALL_DATA) ${srcdir}/$$FILE $(gxx_includedir)/$$FILE \
- || exit 1; \
- chmod a-x,a+r $(gxx_includedir)/$$FILE ; \
- done ; \
- else true ; \
- fi
diff --git a/contrib/libg++/libg++/src/NegExp.cc b/contrib/libg++/libg++/src/NegExp.cc
deleted file mode 100644
index f07769aff60b..000000000000
--- a/contrib/libg++/libg++/src/NegExp.cc
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Dirk Grunwald (grunwald@cs.uiuc.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <builtin.h>
-#include <Random.h>
-#include <NegExp.h>
-
-double NegativeExpntl::operator()()
-{
- return(-pMean * log(pGenerator -> asDouble()));
-}
-
diff --git a/contrib/libg++/libg++/src/NegExp.h b/contrib/libg++/libg++/src/NegExp.h
deleted file mode 100644
index 08f17afde953..000000000000
--- a/contrib/libg++/libg++/src/NegExp.h
+++ /dev/null
@@ -1,55 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Dirk Grunwald (grunwald@cs.uiuc.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-#ifndef _NegativeExpntl_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _NegativeExpntl_h 1
-
-
-//
-// Negative Exponential Random Numbers
-//
-//
-
-#include <Random.h>
-
-class NegativeExpntl: public Random {
-protected:
- double pMean;
-public:
- NegativeExpntl(double xmean, RNG *gen);
- double mean();
- double mean(double x);
-
- virtual double operator()();
-};
-
-
-inline NegativeExpntl::NegativeExpntl(double xmean, RNG *gen)
-: Random(gen) {
- pMean = xmean;
-}
-
-inline double NegativeExpntl::mean() { return pMean; }
-inline double NegativeExpntl::mean(double x) {
- double t = pMean; pMean = x;
- return t;
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/Normal.cc b/contrib/libg++/libg++/src/Normal.cc
deleted file mode 100644
index 29219b4a7302..000000000000
--- a/contrib/libg++/libg++/src/Normal.cc
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Dirk Grunwald (grunwald@cs.uiuc.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <builtin.h>
-#include <Random.h>
-#include <Normal.h>
-//
-// See Simulation, Modelling & Analysis by Law & Kelton, pp259
-//
-// This is the ``polar'' method.
-//
-
-double Normal::operator()()
-{
-
- if (haveCachedNormal == 1) {
- haveCachedNormal = 0;
- return(cachedNormal * pStdDev + pMean );
- } else {
-
- for(;;) {
- double u1 = pGenerator -> asDouble();
- double u2 = pGenerator -> asDouble();
- double v1 = 2 * u1 - 1;
- double v2 = 2 * u2 - 1;
- double w = (v1 * v1) + (v2 * v2);
-
-//
-// We actually generate two IID normal distribution variables.
-// We cache the one & return the other.
-//
- if (w <= 1) {
- double y = sqrt( (-2 * log(w)) / w);
- double x1 = v1 * y;
- double x2 = v2 * y;
-
- haveCachedNormal = 1;
- cachedNormal = x2;
- return(x1 * pStdDev + pMean);
- }
- }
- }
-}
-
diff --git a/contrib/libg++/libg++/src/Normal.h b/contrib/libg++/libg++/src/Normal.h
deleted file mode 100644
index 5e19f7ae6067..000000000000
--- a/contrib/libg++/libg++/src/Normal.h
+++ /dev/null
@@ -1,66 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Dirk Grunwald (grunwald@cs.uiuc.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-#ifndef _Normal_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _Normal_h
-
-#include <Random.h>
-
-class Normal: public Random {
- char haveCachedNormal;
- double cachedNormal;
-
-protected:
- double pMean;
- double pVariance;
- double pStdDev;
-
-public:
- Normal(double xmean, double xvariance, RNG *gen);
- double mean();
- double mean(double x);
- double variance();
- double variance(double x);
- virtual double operator()();
-};
-
-
-inline Normal::Normal(double xmean, double xvariance, RNG *gen)
-: Random(gen) {
- pMean = xmean;
- pVariance = xvariance;
- pStdDev = sqrt(pVariance);
- haveCachedNormal = 0;
-}
-
-inline double Normal::mean() { return pMean; };
-inline double Normal::mean(double x) {
- double t=pMean; pMean = x;
- return t;
-}
-
-inline double Normal::variance() { return pVariance; }
-inline double Normal::variance(double x) {
- double t=pVariance; pVariance = x;
- pStdDev = sqrt(pVariance);
- return t;
-};
-
-#endif
diff --git a/contrib/libg++/libg++/src/Obstack.cc b/contrib/libg++/libg++/src/Obstack.cc
deleted file mode 100644
index abef732979f8..000000000000
--- a/contrib/libg++/libg++/src/Obstack.cc
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <limits.h>
-#include <builtin.h>
-#include <Obstack.h>
-#include <new.h>
-
-/* We use subtraction of (char *)0 instead of casting to int
- because on word-addressable machines a simple cast to int
- may ignore the byte-within-word field of the pointer. */
-
-#ifndef __PTR_TO_INT
-#define __PTR_TO_INT(P) ((P) - (char *)0)
-#endif
-
-#ifndef __INT_TO_PTR
-#define __INT_TO_PTR(P) ((P) + (char *)0)
-#endif
-
-Obstack::Obstack(int size, int alignment)
-{
- alignmentmask = alignment - 1;
- chunksize = size;
- chunk = 0;
- nextfree = objectbase = 0;
- chunklimit = 0;
-}
-
-void Obstack::_free(void* obj)
-{
- _obstack_chunk* lp;
- _obstack_chunk* plp;
-
- lp = chunk;
- while (lp != 0 && ((void*)lp > obj || (void*)(lp)->limit < obj))
- {
- plp = lp -> prev;
- delete [] (char*)lp;
- lp = plp;
- }
- if (lp)
- {
- objectbase = nextfree = (char *)(obj);
- chunklimit = lp->limit;
- chunk = lp;
- }
- else if (obj != 0)
- (*lib_error_handler)("Obstack", "deletion of nonexistent obj");
-}
-
-void Obstack::newchunk(int size)
-{
- _obstack_chunk* old_chunk = chunk;
- _obstack_chunk* new_chunk;
- long new_size;
- int obj_size = nextfree - objectbase;
-
- new_size = (obj_size + size) << 1;
- if (new_size < chunksize)
- new_size = chunksize;
-
- new_chunk = chunk = new (operator new (new_size)) _obstack_chunk;
- new_chunk->prev = old_chunk;
- new_chunk->limit = chunklimit = (char *) new_chunk + new_size;
-
- memcpy((void*)new_chunk->contents, (void*)objectbase, obj_size);
- objectbase = new_chunk->contents;
- nextfree = objectbase + obj_size;
-}
-
-void* Obstack::finish()
-{
- void* value = (void*) objectbase;
- nextfree = __INT_TO_PTR (__PTR_TO_INT (nextfree + alignmentmask)
- & ~alignmentmask);
- if (nextfree - (char*)chunk > chunklimit - (char*)chunk)
- nextfree = chunklimit;
- objectbase = nextfree;
- return value;
-}
-
-int Obstack::contains(void* obj) // true if obj somewhere in Obstack
-{
- _obstack_chunk* ch;
- for (ch = chunk;
- ch != 0 && (obj < (void*)ch || obj >= (void*)(ch->limit));
- ch = ch->prev);
-
- return ch != 0;
-}
-
-int Obstack::OK()
-{
- int v = chunksize > 0; // valid size
- v &= alignmentmask != 0; // and alignment
- v &= chunk != 0;
- v &= objectbase >= chunk->contents;
- v &= nextfree >= objectbase;
- v &= nextfree <= chunklimit;
- v &= chunklimit == chunk->limit;
- _obstack_chunk* p = chunk;
- // allow lots of chances to find bottom!
- long x = LONG_MAX;
- while (p != 0 && x != 0) { --x; p = p->prev; }
- v &= x > 0;
- if (!v)
- (*lib_error_handler)("Obstack", "invariant failure");
- return v;
-}
diff --git a/contrib/libg++/libg++/src/Obstack.h b/contrib/libg++/libg++/src/Obstack.h
deleted file mode 100644
index 8dd9d09c91bc..000000000000
--- a/contrib/libg++/libg++/src/Obstack.h
+++ /dev/null
@@ -1,218 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#ifndef _Obstack_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _Obstack_h 1
-
-#include <std.h>
-
-#undef OK
-
-class Obstack
-{
- struct _obstack_chunk
- {
- char* limit;
- _obstack_chunk* prev;
- char contents[4];
- };
-
-protected:
- long chunksize;
- _obstack_chunk* chunk;
- char* objectbase;
- char* nextfree;
- char* chunklimit;
- int alignmentmask;
-
- void _free(void* obj);
- void newchunk(int size);
-
-public:
- Obstack(int size = 4080, int alignment = 4); // 4080=4096-mallocslop
-
- ~Obstack();
-
- void* base();
- void* next_free();
- int alignment_mask();
- int chunk_size();
- int size();
- int room();
- int contains(void* p); // does Obstack hold pointer p?
-
- void grow(const void* data, int size);
- void grow(const void* data, int size, char terminator);
- void grow(const char* s);
- void grow(char c);
- void grow_fast(char c);
- void blank(int size);
- void blank_fast(int size);
-
- void* finish();
- void* finish(char terminator);
-
- void* copy(const void* data, int size);
- void* copy(const void* data, int size, char terminator);
- void* copy(const char* s);
- void* copy(char c);
- void* alloc(int size);
-
- void free(void* obj);
- void shrink(int size = 1); // suggested by ken@cs.rochester.edu
-
- int OK(); // rep invariant
-};
-
-
-inline Obstack::~Obstack()
-{
- _free(0);
-}
-
-inline void* Obstack::base()
-{
- return objectbase;
-}
-
-inline void* Obstack::next_free()
-{
- return nextfree;
-}
-
-inline int Obstack::alignment_mask()
-{
- return alignmentmask;
-}
-
-inline int Obstack::chunk_size()
-{
- return chunksize;
-}
-
-inline int Obstack::size()
-{
- return nextfree - objectbase;
-}
-
-inline int Obstack::room()
-{
- return chunklimit - nextfree;
-}
-
-inline void Obstack:: grow(const void* data, int size)
-{
- if (nextfree+size > chunklimit)
- newchunk(size);
- memcpy(nextfree, data, size);
- nextfree += size;
-}
-
-inline void Obstack:: grow(const void* data, int size, char terminator)
-{
- if (nextfree+size+1 > chunklimit)
- newchunk(size+1);
- memcpy(nextfree, data, size);
- nextfree += size;
- *(nextfree)++ = terminator;
-}
-
-inline void Obstack:: grow(const char* s)
-{
- grow((const void*)s, strlen(s), 0);
-}
-
-inline void Obstack:: grow(char c)
-{
- if (nextfree+1 > chunklimit)
- newchunk(1);
- *(nextfree)++ = c;
-}
-
-inline void Obstack:: blank(int size)
-{
- if (nextfree+size > chunklimit)
- newchunk(size);
- nextfree += size;
-}
-
-inline void* Obstack::finish(char terminator)
-{
- grow(terminator);
- return finish();
-}
-
-inline void* Obstack::copy(const void* data, int size)
-{
- grow (data, size);
- return finish();
-}
-
-inline void* Obstack::copy(const void* data, int size, char terminator)
-{
- grow(data, size, terminator);
- return finish();
-}
-
-inline void* Obstack::copy(const char* s)
-{
- grow((const void*)s, strlen(s), 0);
- return finish();
-}
-
-inline void* Obstack::copy(char c)
-{
- grow(c);
- return finish();
-}
-
-inline void* Obstack::alloc(int size)
-{
- blank(size);
- return finish();
-}
-
-inline void Obstack:: free(void* obj)
-{
- if (obj >= (void*)chunk && obj<(void*)chunklimit)
- nextfree = objectbase = (char *) obj;
- else
- _free(obj);
-}
-
-inline void Obstack:: grow_fast(char c)
-{
- *(nextfree)++ = c;
-}
-
-inline void Obstack:: blank_fast(int size)
-{
- nextfree += size;
-}
-
-inline void Obstack:: shrink(int size) // from ken@cs.rochester.edu
-{
- if (nextfree >= objectbase + size)
- nextfree -= size;
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/Pix.h b/contrib/libg++/libg++/src/Pix.h
deleted file mode 100644
index be90525c6313..000000000000
--- a/contrib/libg++/libg++/src/Pix.h
+++ /dev/null
@@ -1,5 +0,0 @@
-
-#ifndef _Pix_h
-#define _Pix_h 1
-typedef void* Pix;
-#endif
diff --git a/contrib/libg++/libg++/src/Poisson.cc b/contrib/libg++/libg++/src/Poisson.cc
deleted file mode 100644
index b7fac8f5ca33..000000000000
--- a/contrib/libg++/libg++/src/Poisson.cc
+++ /dev/null
@@ -1,36 +0,0 @@
-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Dirk Grunwald (grunwald@cs.uiuc.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <builtin.h>
-#include <Random.h>
-#include <Poisson.h>
-
-double Poisson::operator()()
-{
- double bound = exp(-1.0 * pMean);
- int count = 0;
-
- for (double product = 1.0;
- product >= bound;
- product *= pGenerator -> asDouble()) {
- count++;
- }
- return(count - 1);
-}
diff --git a/contrib/libg++/libg++/src/Poisson.h b/contrib/libg++/libg++/src/Poisson.h
deleted file mode 100644
index 2566de5aa507..000000000000
--- a/contrib/libg++/libg++/src/Poisson.h
+++ /dev/null
@@ -1,51 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Dirk Grunwald (grunwald@cs.uiuc.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-#ifndef _Poisson_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _Poisson_h
-
-#include <Random.h>
-
-class Poisson: public Random {
-protected:
- double pMean;
-public:
- Poisson(double mean, RNG *gen);
-
- double mean();
- double mean(double x);
-
- virtual double operator()();
-};
-
-
-inline Poisson::Poisson(double mean, RNG *gen)
-: Random(gen) {
- pMean = mean;
-}
-
-inline double Poisson::mean() { return pMean; }
-inline double Poisson::mean(double x) {
- double t = pMean;
- pMean = x;
- return t;
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/RNG.cc b/contrib/libg++/libg++/src/RNG.cc
deleted file mode 100644
index 81f55a07f8c9..000000000000
--- a/contrib/libg++/libg++/src/RNG.cc
+++ /dev/null
@@ -1,131 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1989 Free Software Foundation
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <assert.h>
-#include <builtin.h>
-#include <RNG.h>
-
-// These two static fields get initialized by RNG::RNG().
-PrivateRNGSingleType RNG::singleMantissa;
-PrivateRNGDoubleType RNG::doubleMantissa;
-
-//
-// The scale constant is 2^-31. It is used to scale a 31 bit
-// long to a double.
-//
-
-//static const double randomDoubleScaleConstant = 4.656612873077392578125e-10;
-//static const float randomFloatScaleConstant = 4.656612873077392578125e-10;
-
-static char initialized = 0;
-
-RNG::RNG()
-{
- if (!initialized)
- {
-
- assert (sizeof(double) == 2 * sizeof(_G_uint32_t));
-
- //
- // The following is a hack that I attribute to
- // Andres Nowatzyk at CMU. The intent of the loop
- // is to form the smallest number 0 <= x < 1.0,
- // which is then used as a mask for two longwords.
- // this gives us a fast way way to produce double
- // precision numbers from longwords.
- //
- // I know that this works for IEEE and VAX floating
- // point representations.
- //
- // A further complication is that gnu C will blow
- // the following loop, unless compiled with -ffloat-store,
- // because it uses extended representations for some of
- // of the comparisons. Thus, we have the following hack.
- // If we could specify #pragma optimize, we wouldn't need this.
- //
-
- PrivateRNGDoubleType t;
- PrivateRNGSingleType s;
-
-#if _IEEE == 1
-
- t.d = 1.5;
- if ( t.u[1] == 0 ) { // sun word order?
- t.u[0] = 0x3fffffff;
- t.u[1] = 0xffffffff;
- }
- else {
- t.u[0] = 0xffffffff; // encore word order?
- t.u[1] = 0x3fffffff;
- }
-
- s.u = 0x3fffffff;
-#else
- volatile double x = 1.0; // volatile needed when fp hardware used,
- // and has greater precision than memory doubles
- double y = 0.5;
- do { // find largest fp-number < 2.0
- t.d = x;
- x += y;
- y *= 0.5;
- } while (x != t.d && x < 2.0);
-
- volatile float xx = 1.0; // volatile needed when fp hardware used,
- // and has greater precision than memory floats
- float yy = 0.5;
- do { // find largest fp-number < 2.0
- s.s = xx;
- xx += yy;
- yy *= 0.5;
- } while (xx != s.s && xx < 2.0);
-#endif
- // set doubleMantissa to 1 for each doubleMantissa bit
- doubleMantissa.d = 1.0;
- doubleMantissa.u[0] ^= t.u[0];
- doubleMantissa.u[1] ^= t.u[1];
-
- // set singleMantissa to 1 for each singleMantissa bit
- singleMantissa.s = 1.0;
- singleMantissa.u ^= s.u;
-
- initialized = 1;
- }
-}
-
-float RNG::asFloat()
-{
- PrivateRNGSingleType result;
- result.s = 1.0;
- result.u |= (asLong() & singleMantissa.u);
- result.s -= 1.0;
- assert( result.s < 1.0 && result.s >= 0);
- return( result.s );
-}
-
-double RNG::asDouble()
-{
- PrivateRNGDoubleType result;
- result.d = 1.0;
- result.u[0] |= (asLong() & doubleMantissa.u[0]);
- result.u[1] |= (asLong() & doubleMantissa.u[1]);
- result.d -= 1.0;
- assert( result.d < 1.0 && result.d >= 0);
- return( result.d );
-}
-
diff --git a/contrib/libg++/libg++/src/RNG.h b/contrib/libg++/libg++/src/RNG.h
deleted file mode 100644
index cb3fbfb17329..000000000000
--- a/contrib/libg++/libg++/src/RNG.h
+++ /dev/null
@@ -1,58 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Dirk Grunwald (grunwald@cs.uiuc.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-#ifndef _RNG_h
-#define _RNG_h 1
-#ifdef __GNUG__
-#pragma interface
-#endif
-
-#include <assert.h>
-#include <math.h>
-#include <_G_config.h>
-
-union PrivateRNGSingleType { // used to access floats as unsigneds
- float s;
- _G_uint32_t u;
-};
-
-union PrivateRNGDoubleType { // used to access doubles as unsigneds
- double d;
- _G_uint32_t u[2];
-};
-
-//
-// Base class for Random Number Generators. See ACG and MLCG for instances.
-//
-class RNG {
- static PrivateRNGSingleType singleMantissa; // mantissa bit vector
- static PrivateRNGDoubleType doubleMantissa; // mantissa bit vector
-public:
- RNG();
- //
- // Return a long-words word of random bits
- //
- virtual _G_uint32_t asLong() = 0;
- virtual void reset() = 0;
- //
- // Return random bits converted to either a float or a double
- //
- float asFloat();
- double asDouble();
-};
-
-#endif
diff --git a/contrib/libg++/libg++/src/Random.cc b/contrib/libg++/libg++/src/Random.cc
deleted file mode 100644
index 572a602cf7a1..000000000000
--- a/contrib/libg++/libg++/src/Random.cc
+++ /dev/null
@@ -1,4 +0,0 @@
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <Random.h>
diff --git a/contrib/libg++/libg++/src/Random.h b/contrib/libg++/libg++/src/Random.h
deleted file mode 100644
index 2a6d0ee54a31..000000000000
--- a/contrib/libg++/libg++/src/Random.h
+++ /dev/null
@@ -1,54 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Dirk Grunwald (grunwald@cs.uiuc.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-#ifndef _Random_h
-#define _Random_h 1
-#ifdef __GNUG__
-#pragma interface
-#endif
-
-#include <math.h>
-#include <RNG.h>
-
-class Random {
-protected:
- RNG *pGenerator;
-public:
- Random(RNG *generator);
- virtual double operator()() = 0;
-
- RNG *generator();
- void generator(RNG *p);
-};
-
-
-inline Random::Random(RNG *gen)
-{
- pGenerator = gen;
-}
-
-inline RNG *Random::generator()
-{
- return(pGenerator);
-}
-
-inline void Random::generator(RNG *p)
-{
- pGenerator = p;
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/Rational.cc b/contrib/libg++/libg++/src/Rational.cc
deleted file mode 100644
index 07bcd4f1d17f..000000000000
--- a/contrib/libg++/libg++/src/Rational.cc
+++ /dev/null
@@ -1,416 +0,0 @@
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <Rational.h>
-#include <std.h>
-#include <math.h>
-#include <builtin.h>
-#include <float.h>
-
-#undef OK
-
-void Rational::error(const char* msg) const
-{
- (*lib_error_handler)("Rational", msg);
-}
-
-static const Integer _Int_One(1);
-
-void Rational::normalize()
-{
- int s = sign(den);
- if (s == 0)
- error("Zero denominator.");
- else if (s < 0)
- {
- den.negate();
- num.negate();
- }
-
- Integer g = gcd(num, den);
- if (ucompare(g, _Int_One) != 0)
- {
- num /= g;
- den /= g;
- }
-}
-
-void add(const Rational& x, const Rational& y, Rational& r)
-{
- if (&r != &x && &r != &y)
- {
- mul(x.num, y.den, r.num);
- mul(x.den, y.num, r.den);
- add(r.num, r.den, r.num);
- mul(x.den, y.den, r.den);
- }
- else
- {
- Integer tmp;
- mul(x.den, y.num, tmp);
- mul(x.num, y.den, r.num);
- add(r.num, tmp, r.num);
- mul(x.den, y.den, r.den);
- }
- r.normalize();
-}
-
-void sub(const Rational& x, const Rational& y, Rational& r)
-{
- if (&r != &x && &r != &y)
- {
- mul(x.num, y.den, r.num);
- mul(x.den, y.num, r.den);
- sub(r.num, r.den, r.num);
- mul(x.den, y.den, r.den);
- }
- else
- {
- Integer tmp;
- mul(x.den, y.num, tmp);
- mul(x.num, y.den, r.num);
- sub(r.num, tmp, r.num);
- mul(x.den, y.den, r.den);
- }
- r.normalize();
-}
-
-void mul(const Rational& x, const Rational& y, Rational& r)
-{
- mul(x.num, y.num, r.num);
- mul(x.den, y.den, r.den);
- r.normalize();
-}
-
-void div(const Rational& x, const Rational& y, Rational& r)
-{
- if (&r != &x && &r != &y)
- {
- mul(x.num, y.den, r.num);
- mul(x.den, y.num, r.den);
- }
- else
- {
- Integer tmp;
- mul(x.num, y.den, tmp);
- mul(y.num, x.den, r.den);
- r.num = tmp;
- }
- r.normalize();
-}
-
-
-
-
-void Rational::invert()
-{
- Integer tmp = num;
- num = den;
- den = tmp;
- int s = sign(den);
- if (s == 0)
- error("Zero denominator.");
- else if (s < 0)
- {
- den.negate();
- num.negate();
- }
-}
-
-int compare(const Rational& x, const Rational& y)
-{
- int xsgn = sign(x.num);
- int ysgn = sign(y.num);
- int d = xsgn - ysgn;
- if (d == 0 && xsgn != 0) d = compare(x.num * y.den, x.den * y.num);
- return d;
-}
-
-Rational::Rational(double x)
-{
- num = 0;
- den = 1;
- if (x != 0.0)
- {
- int neg = x < 0;
- if (neg)
- x = -x;
-
- const long shift = 15; // a safe shift per step
- const double width = 32768.0; // = 2^shift
- const int maxiter = 20; // ought not be necessary, but just in case,
- // max 300 bits of precision
- int expt;
- double mantissa = frexp(x, &expt);
- long exponent = expt;
- double intpart;
- int k = 0;
- while (mantissa != 0.0 && k++ < maxiter)
- {
- mantissa *= width;
- mantissa = modf(mantissa, &intpart);
- num <<= shift;
- num += (long)intpart;
- exponent -= shift;
- }
- if (exponent > 0)
- num <<= exponent;
- else if (exponent < 0)
- den <<= -exponent;
- if (neg)
- num.negate();
- }
- normalize();
-}
-
-
-Integer trunc(const Rational& x)
-{
- return x.num / x.den ;
-}
-
-
-Rational pow(const Rational& x, const Integer& y)
-{
- long yy = y.as_long();
- return pow(x, yy);
-}
-
-#if defined(__GNUG__) && !defined(_G_NO_NRV)
-
-Rational operator - (const Rational& x) return r(x)
-{
- r.negate();
-}
-
-Rational abs(const Rational& x) return r(x)
-{
- if (sign(r.num) < 0) r.negate();
-}
-
-
-Rational sqr(const Rational& x) return r
-{
- mul(x.num, x.num, r.num);
- mul(x.den, x.den, r.den);
- r.normalize();
-}
-
-Integer floor(const Rational& x) return q
-{
- Integer r;
- divide(x.num, x.den, q, r);
- if (sign(x.num) < 0 && sign(r) != 0) --q;
-}
-
-Integer ceil(const Rational& x) return q
-{
- Integer r;
- divide(x.num, x.den, q, r);
- if (sign(x.num) >= 0 && sign(r) != 0) ++q;
-}
-
-Integer round(const Rational& x) return q
-{
- Integer r;
- divide(x.num, x.den, q, r);
- r <<= 1;
- if (ucompare(r, x.den) >= 0)
- {
- if (sign(x.num) >= 0)
- ++q;
- else
- --q;
- }
-}
-
-// power: no need to normalize since num & den already relatively prime
-
-Rational pow(const Rational& x, long y) return r
-{
- if (y >= 0)
- {
- pow(x.num, y, r.num);
- pow(x.den, y, r.den);
- }
- else
- {
- y = -y;
- pow(x.num, y, r.den);
- pow(x.den, y, r.num);
- if (sign(r.den) < 0)
- {
- r.num.negate();
- r.den.negate();
- }
- }
-}
-
-#else
-
-Rational operator - (const Rational& x)
-{
- Rational r(x); r.negate(); return r;
-}
-
-Rational abs(const Rational& x)
-{
- Rational r(x);
- if (sign(r.num) < 0) r.negate();
- return r;
-}
-
-
-Rational sqr(const Rational& x)
-{
- Rational r;
- mul(x.num, x.num, r.num);
- mul(x.den, x.den, r.den);
- r.normalize();
- return r;
-}
-
-Integer floor(const Rational& x)
-{
- Integer q;
- Integer r;
- divide(x.num, x.den, q, r);
- if (sign(x.num) < 0 && sign(r) != 0) --q;
- return q;
-}
-
-Integer ceil(const Rational& x)
-{
- Integer q;
- Integer r;
- divide(x.num, x.den, q, r);
- if (sign(x.num) >= 0 && sign(r) != 0) ++q;
- return q;
-}
-
-Integer round(const Rational& x)
-{
- Integer q;
- Integer r;
- divide(x.num, x.den, q, r);
- r <<= 1;
- if (ucompare(r, x.den) >= 0)
- {
- if (sign(x.num) >= 0)
- ++q;
- else
- --q;
- }
- return q;
-}
-
-Rational pow(const Rational& x, long y)
-{
- Rational r;
- if (y >= 0)
- {
- pow(x.num, y, r.num);
- pow(x.den, y, r.den);
- }
- else
- {
- y = -y;
- pow(x.num, y, r.den);
- pow(x.den, y, r.num);
- if (sign(r.den) < 0)
- {
- r.num.negate();
- r.den.negate();
- }
- }
- return r;
-}
-
-#endif
-
-ostream& operator << (ostream& s, const Rational& y)
-{
- if (y.denominator() == 1L)
- s << y.numerator();
- else
- {
- s << y.numerator();
- s << "/";
- s << y.denominator();
- }
- return s;
-}
-
-istream& operator >> (istream& s, Rational& y)
-{
-#ifdef _OLD_STREAMS
- if (!s.good())
- {
- return s;
- }
-#else
- if (!s.ipfx(0))
- {
- s.clear(ios::failbit|s.rdstate()); // Redundant if using GNU iostreams.
- return s;
- }
-#endif
- Integer n = 0;
- Integer d = 1;
- if (s >> n)
- {
- char ch = 0;
- s.get(ch);
- if (ch == '/')
- {
- s >> d;
- }
- else
- {
- s.putback(ch);
- }
- }
- y = Rational(n, d);
- return s;
-}
-
-int Rational::OK() const
-{
- int v = num.OK() && den.OK(); // have valid num and denom
- if (v)
- {
- v &= sign(den) > 0; // denominator positive;
- v &= ucompare(gcd(num, den), _Int_One) == 0; // relatively prime
- }
- if (!v) error("invariant failure");
- return v;
-}
-
-int
-Rational::fits_in_float() const
-{
- return Rational (FLT_MIN) <= *this && *this <= Rational (FLT_MAX);
-}
-
-int
-Rational::fits_in_double() const
-{
- return Rational (DBL_MIN) <= *this && *this <= Rational (DBL_MAX);
-}
diff --git a/contrib/libg++/libg++/src/Rational.h b/contrib/libg++/libg++/src/Rational.h
deleted file mode 100644
index 6542c49f9e4c..000000000000
--- a/contrib/libg++/libg++/src/Rational.h
+++ /dev/null
@@ -1,290 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifndef _Rational_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _Rational_h 1
-
-#include <Integer.h>
-#include <math.h>
-
-#undef OK
-
-class Rational
-{
-protected:
- Integer num;
- Integer den;
-
- void normalize();
-
-public:
- Rational();
- Rational(double);
- Rational(int n);
- Rational(long n);
- Rational(int n, int d);
- Rational(long n, long d);
- Rational(long n, unsigned long d);
- Rational(unsigned long n, long d);
- Rational(unsigned long n, unsigned long d);
- Rational(const Integer& n);
- Rational(const Integer& n, const Integer& d);
- Rational(const Rational&);
-
- ~Rational();
-
- Rational& operator = (const Rational& y);
-
- friend int operator == (const Rational& x, const Rational& y);
- friend int operator != (const Rational& x, const Rational& y);
- friend int operator < (const Rational& x, const Rational& y);
- friend int operator <= (const Rational& x, const Rational& y);
- friend int operator > (const Rational& x, const Rational& y);
- friend int operator >= (const Rational& x, const Rational& y);
-
- friend Rational operator + (const Rational& x, const Rational& y);
- friend Rational operator - (const Rational& x, const Rational& y);
- friend Rational operator * (const Rational& x, const Rational& y);
- friend Rational operator / (const Rational& x, const Rational& y);
-
- Rational& operator += (const Rational& y);
- Rational& operator -= (const Rational& y);
- Rational& operator *= (const Rational& y);
- Rational& operator /= (const Rational& y);
-
-#if defined (__GNUG__) && ! defined (__STRICT_ANSI__)
- friend Rational operator <? (const Rational& x, const Rational& y); // min
- friend Rational operator >? (const Rational& x, const Rational& y); // max
-#endif
-
- friend Rational operator - (const Rational& x);
-
-
-// builtin Rational functions
-
-
- void negate(); // x = -x
- void invert(); // x = 1/x
-
- friend int sign(const Rational& x); // -1, 0, or +1
- friend Rational abs(const Rational& x); // absolute value
- friend Rational sqr(const Rational& x); // square
- friend Rational pow(const Rational& x, long y);
- friend Rational pow(const Rational& x, const Integer& y);
- const Integer& numerator() const;
- const Integer& denominator() const;
-
-// coercion & conversion
-
- operator double() const;
- friend Integer floor(const Rational& x);
- friend Integer ceil(const Rational& x);
- friend Integer trunc(const Rational& x);
- friend Integer round(const Rational& x);
-
- friend istream& operator >> (istream& s, Rational& y);
- friend ostream& operator << (ostream& s, const Rational& y);
-
- int fits_in_float() const;
- int fits_in_double() const;
-
-// procedural versions of operators
-
- friend int compare(const Rational& x, const Rational& y);
- friend void add(const Rational& x, const Rational& y, Rational& dest);
- friend void sub(const Rational& x, const Rational& y, Rational& dest);
- friend void mul(const Rational& x, const Rational& y, Rational& dest);
- friend void div(const Rational& x, const Rational& y, Rational& dest);
-
-// error detection
-
- void error(const char* msg) const;
- int OK() const;
-
-};
-
-typedef Rational RatTmp; // backwards compatibility
-
-inline Rational::Rational() : num(&_ZeroRep), den(&_OneRep) {}
-inline Rational::~Rational() {}
-
-inline Rational::Rational(const Rational& y) :num(y.num), den(y.den) {}
-
-inline Rational::Rational(const Integer& n) :num(n), den(&_OneRep) {}
-
-inline Rational::Rational(const Integer& n, const Integer& d) :num(n),den(d)
-{
- normalize();
-}
-
-inline Rational::Rational(long n) :num(n), den(&_OneRep) { }
-
-inline Rational::Rational(int n) :num(n), den(&_OneRep) { }
-
-inline Rational::Rational(long n, long d) :num(n), den(d) { normalize(); }
-inline Rational::Rational(int n, int d) :num(n), den(d) { normalize(); }
-inline Rational::Rational(long n, unsigned long d) :num(n), den(d)
-{
- normalize();
-}
-inline Rational::Rational(unsigned long n, long d) :num(n), den(d)
-{
- normalize();
-}
-inline Rational::Rational(unsigned long n, unsigned long d) :num(n), den(d)
-{
- normalize();
-}
-
-inline Rational& Rational::operator = (const Rational& y)
-{
- num = y.num; den = y.den;
- return *this;
-}
-
-inline int operator == (const Rational& x, const Rational& y)
-{
- return compare(x.num, y.num) == 0 && compare(x.den, y.den) == 0;
-}
-
-inline int operator != (const Rational& x, const Rational& y)
-{
- return compare(x.num, y.num) != 0 || compare(x.den, y.den) != 0;
-}
-
-inline int operator < (const Rational& x, const Rational& y)
-{
- return compare(x, y) < 0;
-}
-
-inline int operator <= (const Rational& x, const Rational& y)
-{
- return compare(x, y) <= 0;
-}
-
-inline int operator > (const Rational& x, const Rational& y)
-{
- return compare(x, y) > 0;
-}
-
-inline int operator >= (const Rational& x, const Rational& y)
-{
- return compare(x, y) >= 0;
-}
-
-inline int sign(const Rational& x)
-{
- return sign(x.num);
-}
-
-inline void Rational::negate()
-{
- num.negate();
-}
-
-
-inline Rational& Rational::operator += (const Rational& y)
-{
- add(*this, y, *this);
- return *this;
-}
-
-inline Rational& Rational::operator -= (const Rational& y)
-{
- sub(*this, y, *this);
- return *this;
-}
-
-inline Rational& Rational::operator *= (const Rational& y)
-{
- mul(*this, y, *this);
- return *this;
-}
-
-inline Rational& Rational::operator /= (const Rational& y)
-{
- div(*this, y, *this);
- return *this;
-}
-
-inline const Integer& Rational::numerator() const { return num; }
-inline const Integer& Rational::denominator() const { return den; }
-inline Rational::operator double() const { return ratio(num, den); }
-
-#if defined (__GNUG__) && ! defined (__STRICT_ANSI__)
-inline Rational operator <? (const Rational& x, const Rational& y)
-{
- if (compare(x, y) <= 0) return x; else return y;
-}
-
-inline Rational operator >? (const Rational& x, const Rational& y)
-{
- if (compare(x, y) >= 0) return x; else return y;
-}
-#endif
-
-#if defined(__GNUG__) && !defined(_G_NO_NRV)
-
-inline Rational operator + (const Rational& x, const Rational& y) return r
-{
- add(x, y, r);
-}
-
-inline Rational operator - (const Rational& x, const Rational& y) return r
-{
- sub(x, y, r);
-}
-
-inline Rational operator * (const Rational& x, const Rational& y) return r
-{
- mul(x, y, r);
-}
-
-inline Rational operator / (const Rational& x, const Rational& y) return r
-{
- div(x, y, r);
-}
-
-#else /* NO_NRV */
-
-inline Rational operator + (const Rational& x, const Rational& y)
-{
- Rational r; add(x, y, r); return r;
-}
-
-inline Rational operator - (const Rational& x, const Rational& y)
-{
- Rational r; sub(x, y, r); return r;
-}
-
-inline Rational operator * (const Rational& x, const Rational& y)
-{
- Rational r; mul(x, y, r); return r;
-}
-
-inline Rational operator / (const Rational& x, const Rational& y)
-{
- Rational r; div(x, y, r); return r;
-}
-#endif
-
-#endif
diff --git a/contrib/libg++/libg++/src/Regex.cc b/contrib/libg++/libg++/src/Regex.cc
deleted file mode 100644
index 642fd88e245c..000000000000
--- a/contrib/libg++/libg++/src/Regex.cc
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/*
- Regex class implementation
- */
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <std.h>
-#include <ctype.h>
-#include <new.h>
-#include <builtin.h>
-
-extern "C" {
-#if 1
-#include <rx.h>
-#else
-#include <regex.h>
-#endif
-}
-
-#include <Regex.h>
-
-Regex::~Regex()
-{
- if (buf->buffer) free(buf->buffer);
- if (buf->fastmap) free(buf->fastmap);
- if (buf->translate) free (buf->translate);
-
- if (reg->start)
- free (reg->start);
- if (reg->end)
- free (reg->end);
-
- delete(buf);
- delete(reg);
-}
-
-Regex::Regex(const char* t, int fast, int bufsize,
- const char* transtable)
-{
- int tlen = (t == 0)? 0 : strlen(t);
- buf = new re_pattern_buffer;
- memset (buf, 0, sizeof(re_pattern_buffer));
- reg = new re_registers;
- reg->start = 0;
- reg->end = 0;
- if (fast)
- buf->fastmap = (char*)malloc(256);
- else
- buf->fastmap = 0;
- buf->translate = (unsigned char*)transtable;
- if (tlen > bufsize)
- bufsize = tlen;
- buf->allocated = bufsize;
- buf->buffer = (char *)malloc(buf->allocated);
- const char* msg = re_compile_pattern((const char*)t, tlen, buf);
- if (msg != 0)
- (*lib_error_handler)("Regex", msg);
- else if (fast)
- re_compile_fastmap(buf);
-}
-
-int Regex::match_info(int& start, int& length, int nth) const
-{
- if ((unsigned)(nth) >= RE_NREGS)
- return 0;
- else
- {
- start = reg->start[nth];
- length = reg->end[nth] - start;
- return start >= 0 && length >= 0;
- }
-}
-
-int Regex::search(const char* s, int len, int& matchlen, int startpos) const
-{
- int matchpos, pos, range;
- if (startpos >= 0)
- {
- pos = startpos;
- range = len - startpos;
- }
- else
- {
- pos = len + startpos;
- range = -pos;
- }
- matchpos = re_search_2(buf, 0, 0, (char*)s, len, pos, range, reg, len);
- if (matchpos >= 0)
- matchlen = reg->end[0] - reg->start[0];
- else
- matchlen = 0;
- return matchpos;
-}
-
-int Regex::match(const char*s, int len, int p) const
-{
- if (p < 0)
- {
- p += len;
- if (p > len)
- return -1;
- return re_match_2(buf, 0, 0, (char*)s, p, 0, reg, p);
- }
- else if (p > len)
- return -1;
- else
- return re_match_2(buf, 0, 0, (char*)s, len, p, reg, len);
-}
-
-int Regex::OK() const
-{
-// can't verify much, since we've lost the original string
- int v = buf != 0; // have a regex buf
- v &= buf->buffer != 0; // with a pat
- if (!v) (*lib_error_handler)("Regex", "invariant failure");
- return v;
-}
-
-/*
- some built-in Regular expressions
-*/
-
-const Regex RXwhite("[ \n\t\r\v\f]+", 1);
-const Regex RXint("-?[0-9]+", 1);
-const Regex RXdouble("-?\\(\\([0-9]+\\.[0-9]*\\)\\|\\([0-9]+\\)\\|\\(\\.[0-9]+\\)\\)\\([eE][---+]?[0-9]+\\)?", 1, 200);
-const Regex RXalpha("[A-Za-z]+", 1);
-const Regex RXlowercase("[a-z]+", 1);
-const Regex RXuppercase("[A-Z]+", 1);
-const Regex RXalphanum("[0-9A-Za-z]+", 1);
-const Regex RXidentifier("[A-Za-z_][A-Za-z0-9_]*", 1);
-
diff --git a/contrib/libg++/libg++/src/Regex.h b/contrib/libg++/libg++/src/Regex.h
deleted file mode 100644
index 47f9a853a33d..000000000000
--- a/contrib/libg++/libg++/src/Regex.h
+++ /dev/null
@@ -1,78 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#ifndef _Regex_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _Regex_h 1
-
-#undef OK
-
-#if defined(SHORT_NAMES) || defined(VMS)
-#define re_compile_pattern recmppat
-#define re_pattern_buffer repatbuf
-#define re_registers reregs
-#endif
-
-struct re_pattern_buffer; // defined elsewhere
-struct re_registers;
-
-class Regex
-{
-private:
-
- Regex(const Regex&) {} // no X(X&)
- void operator = (const Regex&) {} // no assignment
-
-protected:
- re_pattern_buffer* buf;
- re_registers* reg;
-
-public:
- Regex(const char* t,
- int fast = 0,
- int bufsize = 40,
- const char* transtable = 0);
-
- ~Regex();
-
- int match(const char* s, int len, int pos = 0) const;
- int search(const char* s, int len,
- int& matchlen, int startpos = 0) const;
- int match_info(int& start, int& length, int nth = 0) const;
-
- int OK() const; // representation invariant
-};
-
-// some built in regular expressions
-
-extern const Regex RXwhite; // = "[ \n\t\r\v\f]+"
-extern const Regex RXint; // = "-?[0-9]+"
-extern const Regex RXdouble; // = "-?\\(\\([0-9]+\\.[0-9]*\\)\\|
- // \\([0-9]+\\)\\|\\(\\.[0-9]+\\)\\)
- // \\([eE][---+]?[0-9]+\\)?"
-extern const Regex RXalpha; // = "[A-Za-z]+"
-extern const Regex RXlowercase; // = "[a-z]+"
-extern const Regex RXuppercase; // = "[A-Z]+"
-extern const Regex RXalphanum; // = "[0-9A-Za-z]+"
-extern const Regex RXidentifier; // = "[A-Za-z_][A-Za-z0-9_]*"
-
-
-#endif
diff --git a/contrib/libg++/libg++/src/RndInt.cc b/contrib/libg++/libg++/src/RndInt.cc
deleted file mode 100644
index c09f1e504d39..000000000000
--- a/contrib/libg++/libg++/src/RndInt.cc
+++ /dev/null
@@ -1,4 +0,0 @@
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <RndInt.h>
diff --git a/contrib/libg++/libg++/src/RndInt.h b/contrib/libg++/libg++/src/RndInt.h
deleted file mode 100644
index 7a73aee1c0be..000000000000
--- a/contrib/libg++/libg++/src/RndInt.h
+++ /dev/null
@@ -1,176 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1990 Free Software Foundation
- adapted from a submission from John Reidl <riedl@cs.purdue.edu>
-
-
-GNU CC is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY. No author or distributor
-accepts responsibility to anyone for the consequences of using it
-or for whether it serves any particular purpose or works at all,
-unless he says so in writing. Refer to the GNU CC General Public
-License for full details.
-
-Everyone is granted permission to copy, modify and redistribute
-GNU CC, but only under the conditions described in the
-GNU CC General Public License. A copy of this license is
-supposed to have been given to you along with GNU CC so you
-can know your rights and responsibilities. It should be in a
-file named COPYING. Among other things, the copyright notice
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifndef _RandomInteger_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _RandomInteger_h 1
-
-// RandomInteger uses a random number generator to generate an integer
-// in a specified range. By default the range is 0..1. Since in my
-// experience random numbers are often needed for a wide variety of
-// ranges in the same program, this generator accepts a new low or high value
-// as an argument to the asLong and operator() methods to temporarily
-// override stored values
-
-#include <math.h>
-#include <RNG.h>
-
-class RandomInteger
-{
- protected:
- RNG *pGenerator;
- long pLow;
- long pHigh;
-
- long _asLong(long, long);
-
- public:
-
- RandomInteger(long low, long high, RNG *gen);
- RandomInteger(long high, RNG *gen);
- RandomInteger(RNG *gen);
-
-// read params
-
- long low() const;
- long high() const;
- RNG* generator() const;
-
-// change params
-
- long low(long x);
- long high(long x);
- RNG* generator(RNG *gen);
-
-// get a random number
-
- long asLong();
- long operator()(); // synonym for asLong
- int asInt(); // (possibly) truncate as int
-
-// override params for one shot
-
- long asLong(long high);
- long asLong(long low, long high);
-
- long operator () (long high); // synonyms
- long operator () (long low, long high);
-
-};
-
-
-inline RandomInteger::RandomInteger(long low, long high, RNG *gen)
- : pGenerator(gen),
- pLow((low < high) ? low : high),
- pHigh((low < high) ? high : low)
-
-{}
-
-inline RandomInteger::RandomInteger(long high, RNG *gen)
- : pGenerator(gen),
- pLow((0 < high) ? 0 : high),
- pHigh((0 < high) ? high : 0)
-{}
-
-
-inline RandomInteger::RandomInteger(RNG *gen)
- : pGenerator(gen),
- pLow(0),
- pHigh(1)
-{}
-
-inline RNG* RandomInteger::generator() const { return pGenerator;}
-inline long RandomInteger::low() const { return pLow; }
-inline long RandomInteger::high() const { return pHigh; }
-
-inline RNG* RandomInteger::generator(RNG *gen)
-{
- RNG *tmp = pGenerator; pGenerator = gen; return tmp;
-}
-
-inline long RandomInteger::low(long x)
-{
- long tmp = pLow; pLow = x; return tmp;
-}
-
-inline long RandomInteger:: high(long x)
-{
- long tmp = pHigh; pHigh = x; return tmp;
-}
-
-inline long RandomInteger:: _asLong(long low, long high)
-{
- return (pGenerator->asLong() % (high-low+1)) + low;
-}
-
-
-inline long RandomInteger:: asLong()
-{
- return _asLong(pLow, pHigh);
-}
-
-inline long RandomInteger:: asLong(long high)
-{
- return _asLong(pLow, high);
-}
-
-inline long RandomInteger:: asLong(long low, long high)
-{
- return _asLong(low, high);
-}
-
-inline long RandomInteger:: operator () ()
-{
- return _asLong(pLow, pHigh);
-}
-
-inline long RandomInteger:: operator () (long high)
-{
- return _asLong(pLow, high);
-}
-
-inline long RandomInteger:: operator () (long low, long high)
-{
- return _asLong(low, high);
-}
-
-
-
-
-inline int RandomInteger:: asInt()
-{
- return int(asLong());
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/SLList.cc b/contrib/libg++/libg++/src/SLList.cc
deleted file mode 100644
index 564e5997bdec..000000000000
--- a/contrib/libg++/libg++/src/SLList.cc
+++ /dev/null
@@ -1,247 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988, 1992 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifndef _G_NO_TEMPLATES
-#ifdef __GNUG__
-//#pragma implementation
-#endif
-#include <limits.h>
-#include <stream.h>
-#include <builtin.h>
-#include "SLList.h"
-
-void BaseSLList::error(const char* msg) const
-{
- (*lib_error_handler)("SLList", msg);
-}
-
-int BaseSLList::length() const
-{
- int l = 0;
- BaseSLNode* t = last;
- if (t != 0) do { ++l; t = t->tl; } while (t != last);
- return l;
-}
-
-void BaseSLList::clear()
-{
- if (last == 0)
- return;
-
- BaseSLNode* p = last->tl;
- last->tl = 0;
- last = 0;
-
- while (p != 0)
- {
- BaseSLNode* nxt = p->tl;
- delete_node(p);
- p = nxt;
- }
-}
-
-
-// Note: This is an internal method. It does *not* free old contents!
-
-void BaseSLList::copy(const BaseSLList& a)
-{
- if (a.last == 0)
- last = 0;
- else
- {
- BaseSLNode* p = a.last->tl;
- BaseSLNode* h = copy_node(p->item());
- last = h;
- for (;;)
- {
- if (p == a.last)
- {
- last->tl = h;
- return;
- }
- p = p->tl;
- BaseSLNode* n = copy_node(p->item());
- last->tl = n;
- last = n;
- }
- }
-}
-
-BaseSLList& BaseSLList::operator = (const BaseSLList& a)
-{
- if (last != a.last)
- {
- clear();
- copy(a);
- }
- return *this;
-}
-
-Pix BaseSLList::prepend(const void *datum)
-{
- return prepend(copy_node(datum));
-}
-
-
-Pix BaseSLList::prepend(BaseSLNode* t)
-{
- if (t == 0) return 0;
- if (last == 0)
- t->tl = last = t;
- else
- {
- t->tl = last->tl;
- last->tl = t;
- }
- return Pix(t);
-}
-
-
-Pix BaseSLList::append(const void *datum)
-{
- return append(copy_node(datum));
-}
-
-Pix BaseSLList::append(BaseSLNode* t)
-{
- if (t == 0) return 0;
- if (last == 0)
- t->tl = last = t;
- else
- {
- t->tl = last->tl;
- last->tl = t;
- last = t;
- }
- return Pix(t);
-}
-
-void BaseSLList::join(BaseSLList& b)
-{
- BaseSLNode* t = b.last;
- b.last = 0;
- if (last == 0)
- last = t;
- else if (t != 0)
- {
- BaseSLNode* f = last->tl;
- last->tl = t->tl;
- t->tl = f;
- last = t;
- }
-}
-
-Pix BaseSLList::ins_after(Pix p, const void *datum)
-{
- BaseSLNode* u = (BaseSLNode*)p;
- BaseSLNode* t = copy_node(datum);
- if (last == 0)
- t->tl = last = t;
- else if (u == 0) // ins_after 0 means prepend
- {
- t->tl = last->tl;
- last->tl = t;
- }
- else
- {
- t->tl = u->tl;
- u->tl = t;
- if (u == last)
- last = t;
- }
- return Pix(t);
-}
-
-void BaseSLList::del_after(Pix p)
-{
- BaseSLNode* u = (BaseSLNode*)p;
- if (last == 0 || u == last) error("cannot del_after last");
- if (u == 0) u = last; // del_after 0 means delete first
- BaseSLNode* t = u->tl;
- if (u == t)
- last = 0;
- else
- {
- u->tl = t->tl;
- if (last == t)
- last = u;
- }
- delete_node(t);
-}
-
-int BaseSLList::owns(Pix p) const
-{
- BaseSLNode* t = last;
- if (t != 0 && p != 0)
- {
- do
- {
- if (Pix(t) == p) return 1;
- t = t->tl;
- } while (t != last);
- }
- return 0;
-}
-
-int BaseSLList::remove_front(void *dst, int signal_error)
-{
- if (last)
- {
- BaseSLNode* t = last->tl;
- copy_item(dst, t->item());
- if (t == last)
- last = 0;
- else
- last->tl = t->tl;
- delete_node(t);
- return 1;
- }
- if (signal_error)
- error("remove_front of empty list");
- return 0;
-}
-
-void BaseSLList::del_front()
-{
- if (last == 0) error("del_front of empty list");
- BaseSLNode* t = last->tl;
- if (t == last)
- last = 0;
- else
- last->tl = t->tl;
- delete_node(t);
-}
-
-int BaseSLList::OK() const
-{
- int v = 1;
- if (last != 0)
- {
- BaseSLNode* t = last;
- long count = LONG_MAX; // Lots of chances to find last!
- do
- {
- count--;
- t = t->tl;
- } while (count > 0 && t != last);
- v &= count > 0;
- }
- if (!v) error("invariant failure");
- return v;
-}
-#endif /*!_G_NO_TEMPLATES*/
diff --git a/contrib/libg++/libg++/src/SLList.h b/contrib/libg++/libg++/src/SLList.h
deleted file mode 100644
index 072f249fe1db..000000000000
--- a/contrib/libg++/libg++/src/SLList.h
+++ /dev/null
@@ -1,129 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988, 1992 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifndef _SLList_h
-#ifdef __GNUG__
-//#pragma interface
-#endif
-#define _SLList_h 1
-
-#undef OK
-
-#include <Pix.h>
-
-struct BaseSLNode
-{
- union {
- struct BaseSLNode *tl;
- double dummy; /* To force correct alignment */
- };
- void *item() {return (void*)(this+1);} // Return ((SLNode<T>*)this)->hd
-};
-
-template<class T>
-class SLNode : public BaseSLNode
-{
- public:
- T hd; // Data part of node
- SLNode() { }
- SLNode(const T& h, SLNode* t = 0)
- : hd(h) { tl = t; }
- ~SLNode() { }
-};
-
-extern int __SLListLength(BaseSLNode *ptr);
-
-class BaseSLList {
- protected:
- BaseSLNode *last;
- virtual void delete_node(BaseSLNode*node) = 0;
- virtual BaseSLNode* copy_node(const void* datum) = 0;
- virtual void copy_item(void *dst, void *src) = 0;
- virtual ~BaseSLList() { }
- BaseSLList() { last = 0; }
- void copy(const BaseSLList&);
- BaseSLList& operator = (const BaseSLList& a);
- Pix ins_after(Pix p, const void *datum);
- Pix prepend(const void *datum);
- Pix append(const void *datum);
- int remove_front(void *dst, int signal_error = 0);
- void join(BaseSLList&);
- public:
- int length() const;
- int empty() const { return last == 0; }
- void clear();
- Pix prepend(BaseSLNode*);
- Pix append(BaseSLNode*);
- int OK() const;
- void error(const char* msg) const;
- void del_after(Pix p);
- int owns(Pix p) const;
- void del_front();
-};
-
-template <class T>
-class SLList : public BaseSLList
-{
- private:
- virtual void delete_node(BaseSLNode *node) { delete (SLNode<T>*)node; }
- virtual BaseSLNode* copy_node(const void *datum)
- { return new SLNode<T>(*(const T*)datum); }
- virtual void copy_item(void *dst, void *src) { *(T*)dst = *(T*)src; }
-
-public:
- SLList() : BaseSLList() { }
- SLList(const SLList<T>& a) : BaseSLList() { copy(a); }
- SLList<T>& operator = (const SLList<T>& a)
- { BaseSLList::operator=((const BaseSLList&) a); return *this; }
- virtual ~SLList() { clear(); }
-
- Pix prepend(const T& item) {return BaseSLList::prepend(&item);}
- Pix append(const T& item) {return BaseSLList::append(&item);}
- Pix prepend(SLNode<T>* node) {return BaseSLList::prepend(node);}
- Pix append(SLNode<T>* node) {return BaseSLList::append(node);}
-
- T& operator () (Pix p) {
- if (p == 0) error("null Pix");
- return ((SLNode<T>*)(p))->hd; }
- const T& operator () (Pix p) const {
- if (p == 0) error("null Pix");
- return ((SLNode<T>*)(p))->hd; }
- inline Pix first() const { return (last == 0) ? 0 : Pix(last->tl); }
- void next(Pix& p) const
- { p = (p == 0 || p == last) ? 0 : Pix(((SLNode<T>*)(p))->tl); }
- Pix ins_after(Pix p, const T& item)
- { return BaseSLList::ins_after(p, &item); }
- void join(SLList<T>& a) { BaseSLList::join(a); }
-
- T& front() {
- if (last == 0) error("front: empty list");
- return ((SLNode<T>*)last->tl)->hd; }
- T& rear() {
- if (last == 0) error("rear: empty list");
- return ((SLNode<T>*)last)->hd; }
- const T& front() const {
- if (last == 0) error("front: empty list");
- return ((SLNode<T>*)last->tl)->hd; }
- const T& rear() const {
- if (last == 0) error("rear: empty list");
- return ((SLNode<T>*)last)->hd; }
- int remove_front(T& x) { return BaseSLList::remove_front(&x); }
- T remove_front() { T dst; BaseSLList::remove_front(&dst, 1); return dst; }
-};
-
-#endif
diff --git a/contrib/libg++/libg++/src/Sample.cc b/contrib/libg++/libg++/src/Sample.cc
deleted file mode 100644
index 7ac3b1ca589a..000000000000
--- a/contrib/libg++/libg++/src/Sample.cc
+++ /dev/null
@@ -1,241 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Dirk Grunwald (grunwald@cs.uiuc.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <stream.h>
-#include <SmplStat.h>
-#include <math.h>
-#include <float.h>
-
-#ifndef HUGE_VAL
-#ifdef HUGE
-#define HUGE_VAL HUGE
-#else
-#define HUGE_VAL DBL_MAX
-#endif
-#endif
-
-// error handling
-
-void default_SampleStatistic_error_handler(const char* msg)
-{
- cerr << "Fatal SampleStatistic error. " << msg << "\n";
- exit(1);
-}
-
-one_arg_error_handler_t SampleStatistic_error_handler = default_SampleStatistic_error_handler;
-
-one_arg_error_handler_t set_SampleStatistic_error_handler(one_arg_error_handler_t f)
-{
- one_arg_error_handler_t old = SampleStatistic_error_handler;
- SampleStatistic_error_handler = f;
- return old;
-}
-
-void SampleStatistic::error(const char* msg)
-{
- (*SampleStatistic_error_handler)(msg);
-}
-
-// t-distribution: given p-value and degrees of freedom, return t-value
-// adapted from Peizer & Pratt JASA, vol63, p1416
-
-double tval(double p, int df)
-{
- double t;
- int positive = p >= 0.5;
- p = (positive)? 1.0 - p : p;
- if (p <= 0.0 || df <= 0)
- t = HUGE_VAL;
- else if (p == 0.5)
- t = 0.0;
- else if (df == 1)
- t = 1.0 / tan((p + p) * 1.57079633);
- else if (df == 2)
- t = sqrt(1.0 / ((p + p) * (1.0 - p)) - 2.0);
- else
- {
- double ddf = df;
- double a = sqrt(log(1.0 / (p * p)));
- double aa = a * a;
- a = a - ((2.515517 + (0.802853 * a) + (0.010328 * aa)) /
- (1.0 + (1.432788 * a) + (0.189269 * aa) +
- (0.001308 * aa * a)));
- t = ddf - 0.666666667 + 1.0 / (10.0 * ddf);
- t = sqrt(ddf * (exp(a * a * (ddf - 0.833333333) / (t * t)) - 1.0));
- }
- return (positive)? t : -t;
-}
-
-void
-SampleStatistic::reset()
-{
- n = 0; x = x2 = 0.0;
- maxValue = -HUGE_VAL;
- minValue = HUGE_VAL;
-}
-
-void
-SampleStatistic::operator+=(double value)
-{
- n += 1;
- x += value;
- x2 += (value * value);
- if ( minValue > value) minValue = value;
- if ( maxValue < value) maxValue = value;
-}
-
-double
-SampleStatistic::mean()
-{
- if ( n > 0) {
- return (x / n);
- }
- else {
- return ( 0.0 );
- }
-}
-
-double
-SampleStatistic::var()
-{
- if ( n > 1) {
- return(( x2 - ((x * x) / n)) / ( n - 1));
- }
- else {
- return ( 0.0 );
- }
-}
-
-double
-SampleStatistic::stdDev()
-{
- if ( n <= 0 || this -> var() <= 0) {
- return(0);
- } else {
- return( (double) sqrt( var() ) );
- }
-}
-
-double
-SampleStatistic::confidence(int interval)
-{
- int df = n - 1;
- if (df <= 0) return HUGE_VAL;
- double t = tval(double(100 + interval) * 0.005, df);
- if (t == HUGE_VAL)
- return t;
- else
- return (t * stdDev()) / sqrt(double(n));
-}
-
-double
-SampleStatistic::confidence(double p_value)
-{
- int df = n - 1;
- if (df <= 0) return HUGE_VAL;
- double t = tval((1.0 + p_value) * 0.5, df);
- if (t == HUGE_VAL)
- return t;
- else
- return (t * stdDev()) / sqrt(double(n));
-}
-
-
-#include <SmplHist.h>
-
-const int SampleHistogramMinimum = -2;
-const int SampleHistogramMaximum = -1;
-
-SampleHistogram::SampleHistogram(double low, double high, double width)
-{
- if (high < low) {
- double t = high;
- high = low;
- low = t;
- }
-
- if (width == -1) {
- width = (high - low) / 10;
- }
-
- howManyBuckets = int((high - low) / width) + 2;
- bucketCount = new int[howManyBuckets];
- bucketLimit = new double[howManyBuckets];
- double lim = low;
- for (int i = 0; i < howManyBuckets; i++) {
- bucketCount[i] = 0;
- bucketLimit[i] = lim;
- lim += width;
- }
- bucketLimit[howManyBuckets-1] = HUGE_VAL; /* from math.h */
-}
-
-SampleHistogram::~SampleHistogram()
-{
- if (howManyBuckets > 0) {
- delete bucketCount;
- delete bucketLimit;
- }
-}
-
-void
-SampleHistogram::operator+=(double value)
-{
- int i;
- for (i = 0; i < howManyBuckets; i++) {
- if (value < bucketLimit[i]) break;
- }
- bucketCount[i]++;
- this->SampleStatistic::operator+=(value);
-}
-
-int
-SampleHistogram::similarSamples(double d)
-{
- int i;
- for (i = 0; i < howManyBuckets; i++) {
- if (d < bucketLimit[i]) return(bucketCount[i]);
- }
- return(0);
-}
-
-void
-SampleHistogram::printBuckets(ostream& s)
-{
- for(int i = 0; i < howManyBuckets; i++) {
- if (bucketLimit[i] >= HUGE_VAL) {
- s << "< max : " << bucketCount[i] << "\n";
- } else {
- s << "< " << bucketLimit[i] << " : " << bucketCount[i] << "\n";
- }
- }
-}
-
-void
-SampleHistogram::reset()
-{
- this->SampleStatistic::reset();
- if (howManyBuckets > 0) {
- for (register int i = 0; i < howManyBuckets; i++) {
- bucketCount[i] = 0;
- }
- }
-}
-
diff --git a/contrib/libg++/libg++/src/SmplHist.cc b/contrib/libg++/libg++/src/SmplHist.cc
deleted file mode 100644
index 5dbe2c793279..000000000000
--- a/contrib/libg++/libg++/src/SmplHist.cc
+++ /dev/null
@@ -1,112 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Dirk Grunwald (grunwald@cs.uiuc.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <stream.h>
-#include <SmplHist.h>
-#include <math.h>
-
-#ifndef HUGE_VAL
-#ifdef HUGE
-#define HUGE_VAL HUGE
-#else
-#include <float.h>
-#define HUGE_VAL DBL_MAX
-#endif
-#endif
-
-const int SampleHistogramMinimum = -2;
-const int SampleHistogramMaximum = -1;
-
-SampleHistogram::SampleHistogram(double low, double high, double width)
-{
- if (high < low) {
- double t = high;
- high = low;
- low = t;
- }
-
- if (width == -1) {
- width = (high - low) / 10;
- }
-
- howManyBuckets = int((high - low) / width) + 2;
- bucketCount = new int[howManyBuckets];
- bucketLimit = new double[howManyBuckets];
- double lim = low;
- for (int i = 0; i < howManyBuckets; i++) {
- bucketCount[i] = 0;
- bucketLimit[i] = lim;
- lim += width;
- }
- bucketLimit[howManyBuckets-1] = HUGE_VAL; /* from math.h */
-}
-
-SampleHistogram::~SampleHistogram()
-{
- if (howManyBuckets > 0) {
- delete bucketCount;
- delete bucketLimit;
- }
-}
-
-void
-SampleHistogram::operator+=(double value)
-{
- int i;
- for (i = 0; i < howManyBuckets; i++) {
- if (value < bucketLimit[i]) break;
- }
- bucketCount[i]++;
- this->SampleStatistic::operator+=(value);
-}
-
-int
-SampleHistogram::similarSamples(double d)
-{
- int i;
- for (i = 0; i < howManyBuckets; i++) {
- if (d < bucketLimit[i]) return(bucketCount[i]);
- }
- return(0);
-}
-
-void
-SampleHistogram::printBuckets(ostream& s)
-{
- for(int i = 0; i < howManyBuckets; i++) {
- if (bucketLimit[i] >= HUGE_VAL) {
- s << "< max : " << bucketCount[i] << "\n";
- } else {
- s << "< " << bucketLimit[i] << " : " << bucketCount[i] << "\n";
- }
- }
-}
-
-void
-SampleHistogram::reset()
-{
- this->SampleStatistic::reset();
- if (howManyBuckets > 0) {
- for (register int i = 0; i < howManyBuckets; i++) {
- bucketCount[i] = 0;
- }
- }
-}
-
diff --git a/contrib/libg++/libg++/src/SmplHist.h b/contrib/libg++/libg++/src/SmplHist.h
deleted file mode 100644
index 959d6d4bc7a9..000000000000
--- a/contrib/libg++/libg++/src/SmplHist.h
+++ /dev/null
@@ -1,72 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Dirk Grunwald (grunwald@cs.uiuc.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifndef SampleHistogram_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define SampleHistogram_h 1
-
-#include <iostream.h>
-#include <SmplStat.h>
-
-extern const int SampleHistogramMinimum;
-extern const int SampleHistogramMaximum;
-
-class SampleHistogram : public SampleStatistic
-{
-protected:
- short howManyBuckets;
- int *bucketCount;
- double *bucketLimit;
-
-public:
-
- SampleHistogram(double low, double hi, double bucketWidth = -1.0);
-
- ~SampleHistogram();
-
- virtual void reset();
- virtual void operator+=(double);
-
- int similarSamples(double);
-
- int buckets();
-
- double bucketThreshold(int i);
- int inBucket(int i);
- void printBuckets(ostream&);
-
-};
-
-
-inline int SampleHistogram:: buckets() { return(howManyBuckets); };
-
-inline double SampleHistogram:: bucketThreshold(int i) {
- if (i < 0 || i >= howManyBuckets)
- error("invalid bucket access");
- return(bucketLimit[i]);
-}
-
-inline int SampleHistogram:: inBucket(int i) {
- if (i < 0 || i >= howManyBuckets)
- error("invalid bucket access");
- return(bucketCount[i]);
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/SmplStat.cc b/contrib/libg++/libg++/src/SmplStat.cc
deleted file mode 100644
index 9db3caa845d2..000000000000
--- a/contrib/libg++/libg++/src/SmplStat.cc
+++ /dev/null
@@ -1,160 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Dirk Grunwald (grunwald@cs.uiuc.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <stream.h>
-#include <SmplStat.h>
-#include <math.h>
-
-#ifndef HUGE_VAL
-#ifdef HUGE
-#define HUGE_VAL HUGE
-#else
-#include <float.h>
-#define HUGE_VAL DBL_MAX
-#endif
-#endif
-
-// error handling
-
-void default_SampleStatistic_error_handler(const char* msg)
-{
- cerr << "Fatal SampleStatistic error. " << msg << "\n";
- exit(1);
-}
-
-one_arg_error_handler_t SampleStatistic_error_handler = default_SampleStatistic_error_handler;
-
-one_arg_error_handler_t set_SampleStatistic_error_handler(one_arg_error_handler_t f)
-{
- one_arg_error_handler_t old = SampleStatistic_error_handler;
- SampleStatistic_error_handler = f;
- return old;
-}
-
-void SampleStatistic::error(const char* msg)
-{
- (*SampleStatistic_error_handler)(msg);
-}
-
-// t-distribution: given p-value and degrees of freedom, return t-value
-// adapted from Peizer & Pratt JASA, vol63, p1416
-
-double tval(double p, int df)
-{
- double t;
- int positive = p >= 0.5;
- p = (positive)? 1.0 - p : p;
- if (p <= 0.0 || df <= 0)
- t = HUGE_VAL;
- else if (p == 0.5)
- t = 0.0;
- else if (df == 1)
- t = 1.0 / tan((p + p) * 1.57079633);
- else if (df == 2)
- t = sqrt(1.0 / ((p + p) * (1.0 - p)) - 2.0);
- else
- {
- double ddf = df;
- double a = sqrt(log(1.0 / (p * p)));
- double aa = a * a;
- a = a - ((2.515517 + (0.802853 * a) + (0.010328 * aa)) /
- (1.0 + (1.432788 * a) + (0.189269 * aa) +
- (0.001308 * aa * a)));
- t = ddf - 0.666666667 + 1.0 / (10.0 * ddf);
- t = sqrt(ddf * (exp(a * a * (ddf - 0.833333333) / (t * t)) - 1.0));
- }
- return (positive)? t : -t;
-}
-
-void
-SampleStatistic::reset()
-{
- n = 0; x = x2 = 0.0;
- maxValue = -HUGE_VAL;
- minValue = HUGE_VAL;
-}
-
-void
-SampleStatistic::operator+=(double value)
-{
- n += 1;
- x += value;
- x2 += (value * value);
- if ( minValue > value) minValue = value;
- if ( maxValue < value) maxValue = value;
-}
-
-double
-SampleStatistic::mean()
-{
- if ( n > 0) {
- return (x / n);
- }
- else {
- return ( 0.0 );
- }
-}
-
-double
-SampleStatistic::var()
-{
- if ( n > 1) {
- return(( x2 - ((x * x) / n)) / ( n - 1));
- }
- else {
- return ( 0.0 );
- }
-}
-
-double
-SampleStatistic::stdDev()
-{
- if ( n <= 0 || this -> var() <= 0) {
- return(0);
- } else {
- return( (double) sqrt( var() ) );
- }
-}
-
-double
-SampleStatistic::confidence(int interval)
-{
- int df = n - 1;
- if (df <= 0) return HUGE_VAL;
- double t = tval(double(100 + interval) * 0.005, df);
- if (t == HUGE_VAL)
- return t;
- else
- return (t * stdDev()) / sqrt(double(n));
-}
-
-double
-SampleStatistic::confidence(double p_value)
-{
- int df = n - 1;
- if (df <= 0) return HUGE_VAL;
- double t = tval((1.0 + p_value) * 0.5, df);
- if (t == HUGE_VAL)
- return t;
- else
- return (t * stdDev()) / sqrt(double(n));
-}
-
-
diff --git a/contrib/libg++/libg++/src/SmplStat.h b/contrib/libg++/libg++/src/SmplStat.h
deleted file mode 100644
index 441692f8c7be..000000000000
--- a/contrib/libg++/libg++/src/SmplStat.h
+++ /dev/null
@@ -1,69 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Dirk Grunwald (grunwald@cs.uiuc.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-#ifndef SampleStatistic_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define SampleStatistic_h 1
-
-#include <builtin.h>
-
-#undef min
-#undef max
-
-class SampleStatistic {
-protected:
- int n;
- double x;
- double x2;
- double minValue, maxValue;
-
- public :
-
- SampleStatistic();
- inline virtual ~SampleStatistic();
- virtual void reset();
-
- virtual void operator+=(double);
- int samples();
- double mean();
- double stdDev();
- double var();
- double min();
- double max();
- double confidence(int p_percentage);
- double confidence(double p_value);
-
- void error(const char* msg);
-};
-
-// error handlers
-
-extern void default_SampleStatistic_error_handler(const char*);
-extern one_arg_error_handler_t SampleStatistic_error_handler;
-
-extern one_arg_error_handler_t
- set_SampleStatistic_error_handler(one_arg_error_handler_t f);
-
-inline SampleStatistic:: SampleStatistic(){ reset();}
-inline int SampleStatistic:: samples() {return(n);}
-inline double SampleStatistic:: min() {return(minValue);}
-inline double SampleStatistic:: max() {return(maxValue);}
-inline SampleStatistic::~SampleStatistic() {}
-
-#endif
diff --git a/contrib/libg++/libg++/src/String.cc b/contrib/libg++/libg++/src/String.cc
deleted file mode 100644
index cda827317916..000000000000
--- a/contrib/libg++/libg++/src/String.cc
+++ /dev/null
@@ -1,1307 +0,0 @@
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/*
- String class implementation
- */
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <String.h>
-#include <std.h>
-#include <ctype.h>
-#include <limits.h>
-#include <new.h>
-#include <builtin.h>
-
-#undef OK
-
-void String::error(const char* msg) const
-{
- (*lib_error_handler)("String", msg);
-}
-
-String::operator const char*() const
-{
- return (const char*)chars();
-}
-
-// globals
-
-StrRep _nilStrRep = { 0, 1, { 0 } }; // nil strings point here
-String _nilString; // nil SubStrings point here
-
-
-
-
-/*
- the following inline fcts are specially designed to work
- in support of String classes, and are not meant as generic replacements
- for libc "str" functions.
-
- inline copy fcts - I like left-to-right from->to arguments.
- all versions assume that `to' argument is non-null
-
- These are worth doing inline, rather than through calls because,
- via procedural integration, adjacent copy calls can be smushed
- together by the optimizer.
-*/
-
-// copy n bytes
-inline static void ncopy(const char* from, char* to, int n)
-{
- if (from != to) while (--n >= 0) *to++ = *from++;
-}
-
-// copy n bytes, null-terminate
-inline static void ncopy0(const char* from, char* to, int n)
-{
- if (from != to)
- {
- while (--n >= 0) *to++ = *from++;
- *to = 0;
- }
- else
- to[n] = 0;
-}
-
-// copy until null
-inline static void scopy(const char* from, char* to)
-{
- if (from != 0) while((*to++ = *from++) != 0);
-}
-
-// copy right-to-left
-inline static void revcopy(const char* from, char* to, short n)
-{
- if (from != 0) while (--n >= 0) *to-- = *from--;
-}
-
-
-inline static int slen(const char* t) // inline strlen
-{
- if (t == 0)
- return 0;
- else
- {
- const char* a = t;
- while (*a++ != 0);
- return a - 1 - t;
- }
-}
-
-// minimum & maximum representable rep size
-
-#define MAXStrRep_SIZE ((1 << (sizeof(short) * CHAR_BIT - 1)) - 1)
-#define MINStrRep_SIZE 16
-
-#ifndef MALLOC_MIN_OVERHEAD
-#define MALLOC_MIN_OVERHEAD 4
-#endif
-
-// The basic allocation primitive:
-// Always round request to something close to a power of two.
-// This ensures a bit of padding, which often means that
-// concatenations don't have to realloc. Plus it tends to
-// be faster when lots of Strings are created and discarded,
-// since just about any version of malloc (op new()) will
-// be faster when it can reuse identically-sized chunks
-
-inline static StrRep* Snew(int newsiz)
-{
- unsigned int siz = sizeof(StrRep) + newsiz + MALLOC_MIN_OVERHEAD;
- unsigned int allocsiz = MINStrRep_SIZE;
- while (allocsiz < siz) allocsiz <<= 1;
- allocsiz -= MALLOC_MIN_OVERHEAD;
- if (allocsiz >= MAXStrRep_SIZE)
- (*lib_error_handler)("String", "Requested length out of range");
-
- StrRep* rep = new (operator new (allocsiz)) StrRep;
- rep->sz = allocsiz - sizeof(StrRep);
- return rep;
-}
-
-// Do-something-while-allocating routines.
-
-// We live with two ways to signify empty Sreps: either the
-// null pointer (0) or a pointer to the nilStrRep.
-
-// We always signify unknown source lengths (usually when fed a char*)
-// via len == -1, in which case it is computed.
-
-// allocate, copying src if nonull
-
-StrRep* Salloc(StrRep* old, const char* src, int srclen, int newlen)
-{
- if (old == &_nilStrRep) old = 0;
- if (srclen < 0) srclen = slen(src);
- if (newlen < srclen) newlen = srclen;
- StrRep* rep;
- if (old == 0 || newlen > old->sz)
- rep = Snew(newlen);
- else
- rep = old;
-
- rep->len = newlen;
- ncopy0(src, rep->s, srclen);
-
- if (old != rep && old != 0) delete old;
-
- return rep;
-}
-
-// reallocate: Given the initial allocation scheme, it will
-// generally be faster in the long run to get new space & copy
-// than to call realloc
-
-static StrRep*
-Sresize(StrRep* old, int newlen)
-{
- if (old == &_nilStrRep) old = 0;
- StrRep* rep;
- if (old == 0)
- rep = Snew(newlen);
- else if (newlen > old->sz)
- {
- rep = Snew(newlen);
- ncopy0(old->s, rep->s, old->len);
- delete old;
- }
- else
- rep = old;
-
- rep->len = newlen;
-
- return rep;
-}
-
-void
-String::alloc (int newsize)
-{
- unsigned short old_len = rep->len;
- rep = Sresize(rep, newsize);
- rep->len = old_len;
-}
-
-// like allocate, but we know that src is a StrRep
-
-StrRep* Scopy(StrRep* old, const StrRep* s)
-{
- if (old == &_nilStrRep) old = 0;
- if (s == &_nilStrRep) s = 0;
- if (old == s)
- return (old == 0)? &_nilStrRep : old;
- else if (s == 0)
- {
- old->s[0] = 0;
- old->len = 0;
- return old;
- }
- else
- {
- StrRep* rep;
- int newlen = s->len;
- if (old == 0 || newlen > old->sz)
- {
- if (old != 0) delete old;
- rep = Snew(newlen);
- }
- else
- rep = old;
- rep->len = newlen;
- ncopy0(s->s, rep->s, newlen);
- return rep;
- }
-}
-
-// allocate & concatenate
-
-StrRep* Scat(StrRep* old, const char* s, int srclen, const char* t, int tlen)
-{
- if (old == &_nilStrRep) old = 0;
- if (srclen < 0) srclen = slen(s);
- if (tlen < 0) tlen = slen(t);
- int newlen = srclen + tlen;
- StrRep* rep;
-
- if (old == 0 || newlen > old->sz ||
- (t >= old->s && t < &(old->s[old->len]))) // beware of aliasing
- rep = Snew(newlen);
- else
- rep = old;
-
- rep->len = newlen;
-
- ncopy(s, rep->s, srclen);
- ncopy0(t, &(rep->s[srclen]), tlen);
-
- if (old != rep && old != 0) delete old;
-
- return rep;
-}
-
-// double-concatenate
-
-StrRep* Scat(StrRep* old, const char* s, int srclen, const char* t, int tlen,
- const char* u, int ulen)
-{
- if (old == &_nilStrRep) old = 0;
- if (srclen < 0) srclen = slen(s);
- if (tlen < 0) tlen = slen(t);
- if (ulen < 0) ulen = slen(u);
- int newlen = srclen + tlen + ulen;
- StrRep* rep;
- if (old == 0 || newlen > old->sz ||
- (t >= old->s && t < &(old->s[old->len])) ||
- (u >= old->s && u < &(old->s[old->len])))
- rep = Snew(newlen);
- else
- rep = old;
-
- rep->len = newlen;
-
- ncopy(s, rep->s, srclen);
- ncopy(t, &(rep->s[srclen]), tlen);
- ncopy0(u, &(rep->s[srclen+tlen]), ulen);
-
- if (old != rep && old != 0) delete old;
-
- return rep;
-}
-
-// like cat, but we know that new stuff goes in the front of existing rep
-
-StrRep* Sprepend(StrRep* old, const char* t, int tlen)
-{
- char* s;
- int srclen;
- if (old == &_nilStrRep || old == 0)
- {
- s = 0; old = 0; srclen = 0;
- }
- else
- {
- s = old->s; srclen = old->len;
- }
- if (tlen < 0) tlen = slen(t);
- int newlen = srclen + tlen;
- StrRep* rep;
- if (old == 0 || newlen > old->sz ||
- (t >= old->s && t < &(old->s[old->len])))
- rep = Snew(newlen);
- else
- rep = old;
-
- rep->len = newlen;
-
- revcopy(&(s[srclen]), &(rep->s[newlen]), srclen+1);
- ncopy(t, rep->s, tlen);
-
- if (old != rep && old != 0) delete old;
-
- return rep;
-}
-
-
-// string compare: first argument is known to be non-null
-
-inline static int scmp(const char* a, const char* b)
-{
- if (b == 0)
- return *a != 0;
- else
- {
- int diff = 0;
- while ((diff = *a - *b++) == 0 && *a++ != 0);
- return diff;
- }
-}
-
-
-inline static int ncmp(const char* a, int al, const char* b, int bl)
-{
- int n = (al <= bl)? al : bl;
- int diff;
- while (n-- > 0) if ((diff = *a++ - *b++) != 0) return diff;
- return al - bl;
-}
-
-int fcompare(const String& x, const String& y)
-{
- const char* a = x.chars();
- const char* b = y.chars();
- int al = x.length();
- int bl = y.length();
- int n = (al <= bl)? al : bl;
- int diff = 0;
- while (n-- > 0)
- {
- char ac = *a++;
- char bc = *b++;
- if ((diff = ac - bc) != 0)
- {
- if (ac >= 'a' && ac <= 'z')
- ac = ac - 'a' + 'A';
- if (bc >= 'a' && bc <= 'z')
- bc = bc - 'a' + 'A';
- if ((diff = ac - bc) != 0)
- return diff;
- }
- }
- return al - bl;
-}
-
-// these are not inline, but pull in the above inlines, so are
-// pretty fast
-
-int compare(const String& x, const char* b)
-{
- return scmp(x.chars(), b);
-}
-
-int compare(const String& x, const String& y)
-{
- return scmp(x.chars(), y.chars());
-}
-
-int compare(const String& x, const SubString& y)
-{
- return ncmp(x.chars(), x.length(), y.chars(), y.length());
-}
-
-int compare(const SubString& x, const String& y)
-{
- return ncmp(x.chars(), x.length(), y.chars(), y.length());
-}
-
-int compare(const SubString& x, const SubString& y)
-{
- return ncmp(x.chars(), x.length(), y.chars(), y.length());
-}
-
-int compare(const SubString& x, const char* b)
-{
- if (b == 0)
- return x.length();
- else
- {
- const char* a = x.chars();
- int n = x.length();
- int diff;
- while (n-- > 0) if ((diff = *a++ - *b++) != 0) return diff;
- return (*b == 0) ? 0 : -1;
- }
-}
-
-/*
- index fcts
-*/
-
-int String::search(int start, int sl, char c) const
-{
- const char* s = chars();
- if (sl > 0)
- {
- if (start >= 0)
- {
- const char* a = &(s[start]);
- const char* lasta = &(s[sl]);
- while (a < lasta) if (*a++ == c) return --a - s;
- }
- else
- {
- const char* a = &(s[sl + start + 1]);
- while (--a >= s) if (*a == c) return a - s;
- }
- }
- return -1;
-}
-
-int String::search(int start, int sl, const char* t, int tl) const
-{
- const char* s = chars();
- if (tl < 0) tl = slen(t);
- if (sl > 0 && tl > 0)
- {
- if (start >= 0)
- {
- const char* lasts = &(s[sl - tl]);
- const char* lastt = &(t[tl]);
- const char* p = &(s[start]);
-
- while (p <= lasts)
- {
- const char* x = p++;
- const char* y = t;
- while (*x++ == *y++) if (y >= lastt) return --p - s;
- }
- }
- else
- {
- const char* firsts = &(s[tl - 1]);
- const char* lastt = &(t[tl - 1]);
- const char* p = &(s[sl + start + 1]);
-
- while (--p >= firsts)
- {
- const char* x = p;
- const char* y = lastt;
- while (*x-- == *y--) if (y < t) return ++x - s;
- }
- }
- }
- return -1;
-}
-
-int String::match(int start, int sl, int exact, const char* t, int tl) const
-{
- if (tl < 0) tl = slen(t);
-
- if (start < 0)
- {
- start = sl + start - tl + 1;
- if (start < 0 || (exact && start != 0))
- return -1;
- }
- else if (exact && sl - start != tl)
- return -1;
-
- if (sl == 0 || tl == 0 || sl - start < tl || start >= sl)
- return -1;
-
- int n = tl;
- const char* s = &(rep->s[start]);
- while (--n >= 0) if (*s++ != *t++) return -1;
- return tl;
-}
-
-void SubString::assign(const StrRep* ysrc, const char* ys, int ylen)
-{
- if (&S == &_nilString) return;
-
- if (ylen < 0) ylen = slen(ys);
- StrRep* targ = S.rep;
- int sl = targ->len - len + ylen;
-
- if (ysrc == targ || sl >= targ->sz)
- {
- StrRep* oldtarg = targ;
- targ = Sresize(0, sl);
- ncopy(oldtarg->s, targ->s, pos);
- ncopy(ys, &(targ->s[pos]), ylen);
- scopy(&(oldtarg->s[pos + len]), &(targ->s[pos + ylen]));
- delete oldtarg;
- }
- else if (len == ylen)
- ncopy(ys, &(targ->s[pos]), len);
- else if (ylen < len)
- {
- ncopy(ys, &(targ->s[pos]), ylen);
- scopy(&(targ->s[pos + len]), &(targ->s[pos + ylen]));
- }
- else
- {
- revcopy(&(targ->s[targ->len]), &(targ->s[sl]), targ->len-pos-len +1);
- ncopy(ys, &(targ->s[pos]), ylen);
- }
- targ->len = sl;
- S.rep = targ;
-}
-
-
-
-/*
- * substitution
- */
-
-
-int String::_gsub(const char* pat, int pl, const char* r, int rl)
-{
- int nmatches = 0;
- if (pl < 0) pl = slen(pat);
- if (rl < 0) rl = slen(r);
- int sl = length();
- if (sl <= 0 || pl <= 0 || sl < pl)
- return nmatches;
-
- const char* s = chars();
-
- // prepare to make new rep
- StrRep* nrep = 0;
- int nsz = 0;
- char* x = 0;
-
- int si = 0;
- int xi = 0;
- int remaining = sl;
-
- while (remaining >= pl)
- {
- int pos = search(si, sl, pat, pl);
- if (pos < 0)
- break;
- else
- {
- ++nmatches;
- int mustfit = xi + remaining + rl - pl;
- if (mustfit >= nsz)
- {
- if (nrep != 0) nrep->len = xi;
- nrep = Sresize(nrep, mustfit);
- nsz = nrep->sz;
- x = nrep->s;
- }
- pos -= si;
- ncopy(&(s[si]), &(x[xi]), pos);
- ncopy(r, &(x[xi + pos]), rl);
- si += pos + pl;
- remaining -= pos + pl;
- xi += pos + rl;
- }
- }
-
- if (nrep == 0)
- {
- if (nmatches == 0)
- return nmatches;
- else
- nrep = Sresize(nrep, xi+remaining);
- }
-
- ncopy0(&(s[si]), &(x[xi]), remaining);
- nrep->len = xi + remaining;
-
- if (nrep->len <= rep->sz) // fit back in if possible
- {
- rep->len = nrep->len;
- ncopy0(nrep->s, rep->s, rep->len);
- delete(nrep);
- }
- else
- {
- delete(rep);
- rep = nrep;
- }
- return nmatches;
-}
-
-int String::_gsub(const Regex& pat, const char* r, int rl)
-{
- int nmatches = 0;
- int sl = length();
- if (sl <= 0)
- return nmatches;
-
- if (rl < 0) rl = slen(r);
-
- const char* s = chars();
-
- StrRep* nrep = 0;
- int nsz = 0;
-
- char* x = 0;
-
- int si = 0;
- int xi = 0;
- int remaining = sl;
- int pos, pl = 0; // how long is a regular expression?
-
- while (remaining > 0)
- {
- pos = pat.search(s, sl, pl, si); // unlike string search, the pos returned here is absolute
- if (pos < 0 || pl <= 0)
- break;
- else
- {
- ++nmatches;
- int mustfit = xi + remaining + rl - pl;
- if (mustfit >= nsz)
- {
- if (nrep != 0) nrep->len = xi;
- nrep = Sresize(nrep, mustfit);
- x = nrep->s;
- nsz = nrep->sz;
- }
- pos -= si;
- ncopy(&(s[si]), &(x[xi]), pos);
- ncopy(r, &(x[xi + pos]), rl);
- si += pos + pl;
- remaining -= pos + pl;
- xi += pos + rl;
- }
- }
-
- if (nrep == 0)
- {
- if (nmatches == 0)
- return nmatches;
- else
- nrep = Sresize(nrep, xi+remaining);
- }
-
- ncopy0(&(s[si]), &(x[xi]), remaining);
- nrep->len = xi + remaining;
-
- if (nrep->len <= rep->sz) // fit back in if possible
- {
- rep->len = nrep->len;
- ncopy0(nrep->s, rep->s, rep->len);
- delete(nrep);
- }
- else
- {
- delete(rep);
- rep = nrep;
- }
- return nmatches;
-}
-
-
-/*
- * deletion
- */
-
-void String::del(int pos, int len)
-{
- if (pos < 0 || len <= 0 || (unsigned)(pos + len) > length()) return;
- int nlen = length() - len;
- int first = pos + len;
- ncopy0(&(rep->s[first]), &(rep->s[pos]), length() - first);
- rep->len = nlen;
-}
-
-void String::del(const Regex& r, int startpos)
-{
- int mlen;
- int first = r.search(chars(), length(), mlen, startpos);
- del(first, mlen);
-}
-
-void String::del(const char* t, int startpos)
-{
- int tlen = slen(t);
- int p = search(startpos, length(), t, tlen);
- del(p, tlen);
-}
-
-void String::del(const String& y, int startpos)
-{
- del(search(startpos, length(), y.chars(), y.length()), y.length());
-}
-
-void String::del(const SubString& y, int startpos)
-{
- del(search(startpos, length(), y.chars(), y.length()), y.length());
-}
-
-void String::del(char c, int startpos)
-{
- del(search(startpos, length(), c), 1);
-}
-
-/*
- * substring extraction
- */
-
-
-SubString String::at(int first, int len)
-{
- return _substr(first, len);
-}
-
-SubString String::operator() (int first, int len)
-{
- return _substr(first, len);
-}
-
-SubString String::before(int pos)
-{
- return _substr(0, pos);
-}
-
-SubString String::through(int pos)
-{
- return _substr(0, pos+1);
-}
-
-SubString String::after(int pos)
-{
- return _substr(pos + 1, length() - (pos + 1));
-}
-
-SubString String::from(int pos)
-{
- return _substr(pos, length() - pos);
-}
-
-SubString String::at(const String& y, int startpos)
-{
- int first = search(startpos, length(), y.chars(), y.length());
- return _substr(first, y.length());
-}
-
-SubString String::at(const SubString& y, int startpos)
-{
- int first = search(startpos, length(), y.chars(), y.length());
- return _substr(first, y.length());
-}
-
-SubString String::at(const Regex& r, int startpos)
-{
- int mlen;
- int first = r.search(chars(), length(), mlen, startpos);
- return _substr(first, mlen);
-}
-
-SubString String::at(const char* t, int startpos)
-{
- int tlen = slen(t);
- int first = search(startpos, length(), t, tlen);
- return _substr(first, tlen);
-}
-
-SubString String::at(char c, int startpos)
-{
- int first = search(startpos, length(), c);
- return _substr(first, 1);
-}
-
-SubString String::before(const String& y, int startpos)
-{
- int last = search(startpos, length(), y.chars(), y.length());
- return _substr(0, last);
-}
-
-SubString String::before(const SubString& y, int startpos)
-{
- int last = search(startpos, length(), y.chars(), y.length());
- return _substr(0, last);
-}
-
-SubString String::before(const Regex& r, int startpos)
-{
- int mlen;
- int first = r.search(chars(), length(), mlen, startpos);
- return _substr(0, first);
-}
-
-SubString String::before(char c, int startpos)
-{
- int last = search(startpos, length(), c);
- return _substr(0, last);
-}
-
-SubString String::before(const char* t, int startpos)
-{
- int tlen = slen(t);
- int last = search(startpos, length(), t, tlen);
- return _substr(0, last);
-}
-
-SubString String::through(const String& y, int startpos)
-{
- int last = search(startpos, length(), y.chars(), y.length());
- if (last >= 0) last += y.length();
- return _substr(0, last);
-}
-
-SubString String::through(const SubString& y, int startpos)
-{
- int last = search(startpos, length(), y.chars(), y.length());
- if (last >= 0) last += y.length();
- return _substr(0, last);
-}
-
-SubString String::through(const Regex& r, int startpos)
-{
- int mlen;
- int first = r.search(chars(), length(), mlen, startpos);
- if (first >= 0) first += mlen;
- return _substr(0, first);
-}
-
-SubString String::through(char c, int startpos)
-{
- int last = search(startpos, length(), c);
- if (last >= 0) last += 1;
- return _substr(0, last);
-}
-
-SubString String::through(const char* t, int startpos)
-{
- int tlen = slen(t);
- int last = search(startpos, length(), t, tlen);
- if (last >= 0) last += tlen;
- return _substr(0, last);
-}
-
-SubString String::after(const String& y, int startpos)
-{
- int first = search(startpos, length(), y.chars(), y.length());
- if (first >= 0) first += y.length();
- return _substr(first, length() - first);
-}
-
-SubString String::after(const SubString& y, int startpos)
-{
- int first = search(startpos, length(), y.chars(), y.length());
- if (first >= 0) first += y.length();
- return _substr(first, length() - first);
-}
-
-SubString String::after(char c, int startpos)
-{
- int first = search(startpos, length(), c);
- if (first >= 0) first += 1;
- return _substr(first, length() - first);
-}
-
-SubString String::after(const Regex& r, int startpos)
-{
- int mlen;
- int first = r.search(chars(), length(), mlen, startpos);
- if (first >= 0) first += mlen;
- return _substr(first, length() - first);
-}
-
-SubString String::after(const char* t, int startpos)
-{
- int tlen = slen(t);
- int first = search(startpos, length(), t, tlen);
- if (first >= 0) first += tlen;
- return _substr(first, length() - first);
-}
-
-SubString String::from(const String& y, int startpos)
-{
- int first = search(startpos, length(), y.chars(), y.length());
- return _substr(first, length() - first);
-}
-
-SubString String::from(const SubString& y, int startpos)
-{
- int first = search(startpos, length(), y.chars(), y.length());
- return _substr(first, length() - first);
-}
-
-SubString String::from(const Regex& r, int startpos)
-{
- int mlen;
- int first = r.search(chars(), length(), mlen, startpos);
- return _substr(first, length() - first);
-}
-
-SubString String::from(char c, int startpos)
-{
- int first = search(startpos, length(), c);
- return _substr(first, length() - first);
-}
-
-SubString String::from(const char* t, int startpos)
-{
- int tlen = slen(t);
- int first = search(startpos, length(), t, tlen);
- return _substr(first, length() - first);
-}
-
-
-
-/*
- * split/join
- */
-
-
-int split(const String& src, String results[], int n, const String& sep)
-{
- String x = src;
- const char* s = x.chars();
- int sl = x.length();
- int i = 0;
- int pos = 0;
- while (i < n && pos < sl)
- {
- int p = x.search(pos, sl, sep.chars(), sep.length());
- if (p < 0)
- p = sl;
- results[i].rep = Salloc(results[i].rep, &(s[pos]), p - pos, p - pos);
- i++;
- pos = p + sep.length();
- }
- return i;
-}
-
-int split(const String& src, String results[], int n, const Regex& r)
-{
- String x = src;
- const char* s = x.chars();
- int sl = x.length();
- int i = 0;
- int pos = 0;
- int p, matchlen;
- while (i < n && pos < sl)
- {
- p = r.search(s, sl, matchlen, pos);
- if (p < 0)
- p = sl;
- results[i].rep = Salloc(results[i].rep, &(s[pos]), p - pos, p - pos);
- i++;
- pos = p + matchlen;
- }
- return i;
-}
-
-
-#if defined(__GNUG__) && !defined(_G_NO_NRV)
-#define RETURN(r) return
-#define RETURNS(r) return r;
-#define RETURN_OBJECT(TYPE, NAME) /* nothing */
-#else /* _G_NO_NRV */
-#define RETURN(r) return r
-#define RETURNS(r) /* nothing */
-#define RETURN_OBJECT(TYPE, NAME) TYPE NAME;
-#endif
-
-String join(String src[], int n, const String& separator) RETURNS(x)
-{
- RETURN_OBJECT(String,x)
- String sep = separator;
- int xlen = 0;
- int i;
- for (i = 0; i < n; ++i)
- xlen += src[i].length();
- xlen += (n - 1) * sep.length();
-
- x.rep = Sresize (x.rep, xlen);
-
- int j = 0;
-
- for (i = 0; i < n - 1; ++i)
- {
- ncopy(src[i].chars(), &(x.rep->s[j]), src[i].length());
- j += src[i].length();
- ncopy(sep.chars(), &(x.rep->s[j]), sep.length());
- j += sep.length();
- }
- ncopy0(src[i].chars(), &(x.rep->s[j]), src[i].length());
- RETURN(x);
-}
-
-/*
- misc
-*/
-
-
-StrRep* Sreverse(const StrRep* src, StrRep* dest)
-{
- int n = src->len;
- if (src != dest)
- dest = Salloc(dest, src->s, n, n);
- if (n > 0)
- {
- char* a = dest->s;
- char* b = &(a[n - 1]);
- while (a < b)
- {
- char t = *a;
- *a++ = *b;
- *b-- = t;
- }
- }
- return dest;
-}
-
-
-StrRep* Supcase(const StrRep* src, StrRep* dest)
-{
- int n = src->len;
- if (src != dest) dest = Salloc(dest, src->s, n, n);
- char* p = dest->s;
- char* e = &(p[n]);
- for (; p < e; ++p) if (islower(*p)) *p = toupper(*p);
- return dest;
-}
-
-StrRep* Sdowncase(const StrRep* src, StrRep* dest)
-{
- int n = src->len;
- if (src != dest) dest = Salloc(dest, src->s, n, n);
- char* p = dest->s;
- char* e = &(p[n]);
- for (; p < e; ++p) if (isupper(*p)) *p = tolower(*p);
- return dest;
-}
-
-StrRep* Scapitalize(const StrRep* src, StrRep* dest)
-{
- int n = src->len;
- if (src != dest) dest = Salloc(dest, src->s, n, n);
-
- char* p = dest->s;
- char* e = &(p[n]);
- for (; p < e; ++p)
- {
- int at_word;
- if (at_word = islower(*p))
- *p = toupper(*p);
- else
- at_word = isupper(*p) || isdigit(*p);
-
- if (at_word)
- {
- while (++p < e)
- {
- if (isupper(*p))
- *p = tolower(*p);
- /* A '\'' does not break a word, so that "Nathan's" stays
- "Nathan's" rather than turning into "Nathan'S". */
- else if (!islower(*p) && !isdigit(*p) && (*p != '\''))
- break;
- }
- }
- }
- return dest;
-}
-
-#if defined(__GNUG__) && !defined(_G_NO_NRV)
-
-String replicate(char c, int n) return w;
-{
- w.rep = Sresize(w.rep, n);
- char* p = w.rep->s;
- while (n-- > 0) *p++ = c;
- *p = 0;
-}
-
-String replicate(const String& y, int n) return w
-{
- int len = y.length();
- w.rep = Sresize(w.rep, n * len);
- char* p = w.rep->s;
- while (n-- > 0)
- {
- ncopy(y.chars(), p, len);
- p += len;
- }
- *p = 0;
-}
-
-String common_prefix(const String& x, const String& y, int startpos) return r;
-{
- const char* xchars = x.chars();
- const char* ychars = y.chars();
- const char* xs = &(xchars[startpos]);
- const char* ss = xs;
- const char* topx = &(xchars[x.length()]);
- const char* ys = &(ychars[startpos]);
- const char* topy = &(ychars[y.length()]);
- int l;
- for (l = 0; xs < topx && ys < topy && *xs++ == *ys++; ++l);
- r.rep = Salloc(r.rep, ss, l, l);
-}
-
-String common_suffix(const String& x, const String& y, int startpos) return r;
-{
- const char* xchars = x.chars();
- const char* ychars = y.chars();
- const char* xs = &(xchars[x.length() + startpos]);
- const char* botx = xchars;
- const char* ys = &(ychars[y.length() + startpos]);
- const char* boty = ychars;
- int l;
- for (l = 0; xs >= botx && ys >= boty && *xs == *ys ; --xs, --ys, ++l);
- r.rep = Salloc(r.rep, ++xs, l, l);
-}
-
-#else
-
-String replicate(char c, int n)
-{
- String w;
- w.rep = Sresize(w.rep, n);
- char* p = w.rep->s;
- while (n-- > 0) *p++ = c;
- *p = 0;
- return w;
-}
-
-String replicate(const String& y, int n)
-{
- String w;
- int len = y.length();
- w.rep = Sresize(w.rep, n * len);
- char* p = w.rep->s;
- while (n-- > 0)
- {
- ncopy(y.chars(), p, len);
- p += len;
- }
- *p = 0;
- return w;
-}
-
-String common_prefix(const String& x, const String& y, int startpos)
-{
- String r;
- const char* xchars = x.chars();
- const char* ychars = y.chars();
- const char* xs = &(xchars[startpos]);
- const char* ss = xs;
- const char* topx = &(xchars[x.length()]);
- const char* ys = &(ychars[startpos]);
- const char* topy = &(ychars[y.length()]);
- int l;
- for (l = 0; xs < topx && ys < topy && *xs++ == *ys++; ++l);
- r.rep = Salloc(r.rep, ss, l, l);
- return r;
-}
-
-String common_suffix(const String& x, const String& y, int startpos)
-{
- String r;
- const char* xchars = x.chars();
- const char* ychars = y.chars();
- const char* xs = &(xchars[x.length() + startpos]);
- const char* botx = xchars;
- const char* ys = &(ychars[y.length() + startpos]);
- const char* boty = ychars;
- int l;
- for (l = 0; xs >= botx && ys >= boty && *xs == *ys ; --xs, --ys, ++l);
- r.rep = Salloc(r.rep, ++xs, l, l);
- return r;
-}
-
-#endif
-
-// IO
-
-istream& operator>>(istream& s, String& x)
-{
- if (!s.ipfx(0) || (!(s.flags() & ios::skipws) && !ws(s)))
- {
- s.clear(ios::failbit|s.rdstate()); // Redundant if using GNU iostreams.
- return s;
- }
- int ch;
- int i = 0;
- x.rep = Sresize(x.rep, 20);
- register streambuf *sb = s.rdbuf();
- while ((ch = sb->sbumpc()) != EOF)
- {
- if (isspace(ch))
- break;
- if (i >= x.rep->sz - 1)
- x.rep = Sresize(x.rep, i+1);
- x.rep->s[i++] = ch;
- }
- x.rep->s[i] = 0;
- x.rep->len = i;
- int new_state = s.rdstate();
- if (i == 0) new_state |= ios::failbit;
- if (ch == EOF) new_state |= ios::eofbit;
- s.clear(new_state);
- return s;
-}
-
-int readline(istream& s, String& x, char terminator, int discard)
-{
- if (!s.ipfx(0))
- return 0;
- int ch;
- int i = 0;
- x.rep = Sresize(x.rep, 80);
- register streambuf *sb = s.rdbuf();
- while ((ch = sb->sbumpc()) != EOF)
- {
- if (ch != terminator || !discard)
- {
- if (i >= x.rep->sz - 1)
- x.rep = Sresize(x.rep, i+1);
- x.rep->s[i++] = ch;
- }
- if (ch == terminator)
- break;
- }
- x.rep->s[i] = 0;
- x.rep->len = i;
- if (ch == EOF) s.clear(ios::eofbit|s.rdstate());
- return i;
-}
-
-
-ostream& operator<<(ostream& s, const SubString& x)
-{
- const char* a = x.chars();
- const char* lasta = &(a[x.length()]);
- while (a < lasta)
- s.put(*a++);
- return(s);
-}
-
-// from John.Willis@FAS.RI.CMU.EDU
-
-int String::freq(const SubString& y) const
-{
- int found = 0;
- for (unsigned int i = 0; i < length(); i++)
- if (match(i,length(),0,y.chars(), y.length())>= 0) found++;
- return(found);
-}
-
-int String::freq(const String& y) const
-{
- int found = 0;
- for (unsigned int i = 0; i < length(); i++)
- if (match(i,length(),0,y.chars(),y.length()) >= 0) found++;
- return(found);
-}
-
-int String::freq(const char* t) const
-{
- int found = 0;
- for (unsigned int i = 0; i < length(); i++)
- if (match(i,length(),0,t) >= 0) found++;
- return(found);
-}
-
-int String::freq(char c) const
-{
- int found = 0;
- for (unsigned int i = 0; i < length(); i++)
- if (match(i,length(),0,&c,1) >= 0) found++;
- return(found);
-}
-
-
-int String::OK() const
-{
- if (rep == 0 // don't have a rep
- || rep->len > rep->sz // string oustide bounds
- || rep->s[rep->len] != 0) // not null-terminated
- error("invariant failure");
- return 1;
-}
-
-int SubString::OK() const
-{
- int v = S != (const char*)0; // have a String;
- v &= S.OK(); // that is legal
- v &= pos + len >= S.rep->len;// pos and len within bounds
- if (!v) S.error("SubString invariant failure");
- return v;
-}
-
diff --git a/contrib/libg++/libg++/src/String.h b/contrib/libg++/libg++/src/String.h
deleted file mode 100644
index b3bfd707cf3c..000000000000
--- a/contrib/libg++/libg++/src/String.h
+++ /dev/null
@@ -1,1284 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#ifndef _String_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _String_h 1
-
-#include <iostream.h>
-#include <Regex.h>
-
-#undef OK
-
-struct StrRep // internal String representations
-{
- unsigned short len; // string length
- unsigned short sz; // allocated space
- char s[1]; // the string starts here
- // (at least 1 char for trailing null)
- // allocated & expanded via non-public fcts
-};
-
-// primitive ops on StrReps -- nearly all String fns go through these.
-
-StrRep* Salloc(StrRep*, const char*, int, int);
-StrRep* Scopy(StrRep*, const StrRep*);
-StrRep* Scat(StrRep*, const char*, int, const char*, int);
-StrRep* Scat(StrRep*, const char*, int,const char*,int, const char*,int);
-StrRep* Sprepend(StrRep*, const char*, int);
-StrRep* Sreverse(const StrRep*, StrRep*);
-StrRep* Supcase(const StrRep*, StrRep*);
-StrRep* Sdowncase(const StrRep*, StrRep*);
-StrRep* Scapitalize(const StrRep*, StrRep*);
-
-// These classes need to be defined in the order given
-
-class String;
-class SubString;
-
-class SubString
-{
- friend class String;
-protected:
-
- String& S; // The String I'm a substring of
- unsigned short pos; // starting position in S's rep
- unsigned short len; // length of substring
-
- void assign(const StrRep*, const char*, int = -1);
- SubString(String& x, int p, int l);
- SubString(const SubString& x);
-
-public:
-
-// Note there are no public constructors. SubStrings are always
-// created via String operations
-
- ~SubString();
-
- SubString& operator = (const String& y);
- SubString& operator = (const SubString& y);
- SubString& operator = (const char* t);
- SubString& operator = (char c);
-
-// return 1 if target appears anywhere in SubString; else 0
-
- int contains(char c) const;
- int contains(const String& y) const;
- int contains(const SubString& y) const;
- int contains(const char* t) const;
- int contains(const Regex& r) const;
-
-// return 1 if target matches entire SubString
-
- int matches(const Regex& r) const;
-
-// IO
-
- friend ostream& operator<<(ostream& s, const SubString& x);
-
-// status
-
- unsigned int length() const;
- int empty() const;
- const char* chars() const;
-
- int OK() const;
-
-};
-
-
-class String
-{
- friend class SubString;
-
-protected:
- StrRep* rep; // Strings are pointers to their representations
-
-// some helper functions
-
- int search(int, int, const char*, int = -1) const;
- int search(int, int, char) const;
- int match(int, int, int, const char*, int = -1) const;
- int _gsub(const char*, int, const char* ,int);
- int _gsub(const Regex&, const char*, int);
- SubString _substr(int, int);
-
-public:
-
-// constructors & assignment
-
- String();
- String(const String& x);
- String(const SubString& x);
- String(const char* t);
- String(const char* t, int len);
- String(char c);
-
- ~String();
-
- String& operator = (const String& y);
- String& operator = (const char* y);
- String& operator = (char c);
- String& operator = (const SubString& y);
-
-// concatenation
-
- String& operator += (const String& y);
- String& operator += (const SubString& y);
- String& operator += (const char* t);
- String& operator += (char c);
-
- void prepend(const String& y);
- void prepend(const SubString& y);
- void prepend(const char* t);
- void prepend(char c);
-
-
-// procedural versions:
-// concatenate first 2 args, store result in last arg
-
- friend inline void cat(const String&, const String&, String&);
- friend inline void cat(const String&, const SubString&, String&);
- friend inline void cat(const String&, const char*, String&);
- friend inline void cat(const String&, char, String&);
-
- friend inline void cat(const SubString&, const String&, String&);
- friend inline void cat(const SubString&, const SubString&, String&);
- friend inline void cat(const SubString&, const char*, String&);
- friend inline void cat(const SubString&, char, String&);
-
- friend inline void cat(const char*, const String&, String&);
- friend inline void cat(const char*, const SubString&, String&);
- friend inline void cat(const char*, const char*, String&);
- friend inline void cat(const char*, char, String&);
-
-// double concatenation, by request. (yes, there are too many versions,
-// but if one is supported, then the others should be too...)
-// Concatenate first 3 args, store in last arg
-
- friend inline void cat(const String&,const String&, const String&,String&);
- friend inline void cat(const String&,const String&,const SubString&,String&);
- friend inline void cat(const String&,const String&, const char*, String&);
- friend inline void cat(const String&,const String&, char, String&);
- friend inline void cat(const String&,const SubString&,const String&,String&);
- inline friend void cat(const String&,const SubString&,const SubString&,String&);
- friend inline void cat(const String&,const SubString&, const char*, String&);
- friend inline void cat(const String&,const SubString&, char, String&);
- friend inline void cat(const String&,const char*, const String&, String&);
- friend inline void cat(const String&,const char*, const SubString&, String&);
- friend inline void cat(const String&,const char*, const char*, String&);
- friend inline void cat(const String&,const char*, char, String&);
-
- friend inline void cat(const char*, const String&, const String&,String&);
- friend inline void cat(const char*,const String&,const SubString&,String&);
- friend inline void cat(const char*,const String&, const char*, String&);
- friend inline void cat(const char*,const String&, char, String&);
- friend inline void cat(const char*,const SubString&,const String&,String&);
- friend inline void cat(const char*,const SubString&,const SubString&,String&);
- friend inline void cat(const char*,const SubString&, const char*, String&);
- friend inline void cat(const char*,const SubString&, char, String&);
- friend inline void cat(const char*,const char*, const String&, String&);
- friend inline void cat(const char*,const char*, const SubString&, String&);
- friend inline void cat(const char*,const char*, const char*, String&);
- friend inline void cat(const char*,const char*, char, String&);
-
-
-// searching & matching
-
-// return position of target in string or -1 for failure
-
- int index(char c, int startpos = 0) const;
- int index(const String& y, int startpos = 0) const;
- int index(const SubString& y, int startpos = 0) const;
- int index(const char* t, int startpos = 0) const;
- int index(const Regex& r, int startpos = 0) const;
-
-// return 1 if target appears anyhere in String; else 0
-
- int contains(char c) const;
- int contains(const String& y) const;
- int contains(const SubString& y) const;
- int contains(const char* t) const;
- int contains(const Regex& r) const;
-
-// return 1 if target appears anywhere after position pos
-// (or before, if pos is negative) in String; else 0
-
- int contains(char c, int pos) const;
- int contains(const String& y, int pos) const;
- int contains(const SubString& y, int pos) const;
- int contains(const char* t, int pos) const;
- int contains(const Regex& r, int pos) const;
-
-// return 1 if target appears at position pos in String; else 0
-
- int matches(char c, int pos = 0) const;
- int matches(const String& y, int pos = 0) const;
- int matches(const SubString& y, int pos = 0) const;
- int matches(const char* t, int pos = 0) const;
- int matches(const Regex& r, int pos = 0) const;
-
-// return number of occurences of target in String
-
- int freq(char c) const;
- int freq(const String& y) const;
- int freq(const SubString& y) const;
- int freq(const char* t) const;
-
-// SubString extraction
-
-// Note that you can't take a substring of a const String, since
-// this leaves open the possiblility of indirectly modifying the
-// String through the SubString
-
- SubString at(int pos, int len);
- SubString operator () (int pos, int len); // synonym for at
-
- SubString at(const String& x, int startpos = 0);
- SubString at(const SubString& x, int startpos = 0);
- SubString at(const char* t, int startpos = 0);
- SubString at(char c, int startpos = 0);
- SubString at(const Regex& r, int startpos = 0);
-
- SubString before(int pos);
- SubString before(const String& x, int startpos = 0);
- SubString before(const SubString& x, int startpos = 0);
- SubString before(const char* t, int startpos = 0);
- SubString before(char c, int startpos = 0);
- SubString before(const Regex& r, int startpos = 0);
-
- SubString through(int pos);
- SubString through(const String& x, int startpos = 0);
- SubString through(const SubString& x, int startpos = 0);
- SubString through(const char* t, int startpos = 0);
- SubString through(char c, int startpos = 0);
- SubString through(const Regex& r, int startpos = 0);
-
- SubString from(int pos);
- SubString from(const String& x, int startpos = 0);
- SubString from(const SubString& x, int startpos = 0);
- SubString from(const char* t, int startpos = 0);
- SubString from(char c, int startpos = 0);
- SubString from(const Regex& r, int startpos = 0);
-
- SubString after(int pos);
- SubString after(const String& x, int startpos = 0);
- SubString after(const SubString& x, int startpos = 0);
- SubString after(const char* t, int startpos = 0);
- SubString after(char c, int startpos = 0);
- SubString after(const Regex& r, int startpos = 0);
-
-
-// deletion
-
-// delete len chars starting at pos
- void del(int pos, int len);
-
-// delete the first occurrence of target after startpos
-
- void del(const String& y, int startpos = 0);
- void del(const SubString& y, int startpos = 0);
- void del(const char* t, int startpos = 0);
- void del(char c, int startpos = 0);
- void del(const Regex& r, int startpos = 0);
-
-// global substitution: substitute all occurrences of pat with repl
-
- int gsub(const String& pat, const String& repl);
- int gsub(const SubString& pat, const String& repl);
- int gsub(const char* pat, const String& repl);
- int gsub(const char* pat, const char* repl);
- int gsub(const Regex& pat, const String& repl);
-
-// friends & utilities
-
-// split string into array res at separators; return number of elements
-
- friend int split(const String& x, String res[], int maxn,
- const String& sep);
- friend int split(const String& x, String res[], int maxn,
- const Regex& sep);
-
- friend String common_prefix(const String& x, const String& y,
- int startpos = 0);
- friend String common_suffix(const String& x, const String& y,
- int startpos = -1);
- friend String replicate(char c, int n);
- friend String replicate(const String& y, int n);
- friend String join(String src[], int n, const String& sep);
-
-// simple builtin transformations
-
- friend inline String reverse(const String& x);
- friend inline String upcase(const String& x);
- friend inline String downcase(const String& x);
- friend inline String capitalize(const String& x);
-
-// in-place versions of above
-
- void reverse();
- void upcase();
- void downcase();
- void capitalize();
-
-// element extraction
-
- char& operator [] (int i);
- const char& operator [] (int i) const;
- char elem(int i) const;
- char firstchar() const;
- char lastchar() const;
-
-// conversion
-
- operator const char*() const;
- const char* chars() const;
-
-
-// IO
-
- friend inline ostream& operator<<(ostream& s, const String& x);
- friend ostream& operator<<(ostream& s, const SubString& x);
- friend istream& operator>>(istream& s, String& x);
-
- friend int readline(istream& s, String& x,
- char terminator = '\n',
- int discard_terminator = 1);
-
-// status
-
- unsigned int length() const;
- int empty() const;
-
-// preallocate some space for String
- void alloc(int newsize);
-
-// report current allocation (not length!)
-
- int allocation() const;
-
-
- void error(const char* msg) const;
-
- int OK() const;
-};
-
-typedef String StrTmp; // for backward compatibility
-
-// other externs
-
-int compare(const String& x, const String& y);
-int compare(const String& x, const SubString& y);
-int compare(const String& x, const char* y);
-int compare(const SubString& x, const String& y);
-int compare(const SubString& x, const SubString& y);
-int compare(const SubString& x, const char* y);
-int fcompare(const String& x, const String& y); // ignore case
-
-extern StrRep _nilStrRep;
-extern String _nilString;
-
-// status reports, needed before defining other things
-
-inline unsigned int String::length() const { return rep->len; }
-inline int String::empty() const { return rep->len == 0; }
-inline const char* String::chars() const { return &(rep->s[0]); }
-inline int String::allocation() const { return rep->sz; }
-
-inline unsigned int SubString::length() const { return len; }
-inline int SubString::empty() const { return len == 0; }
-inline const char* SubString::chars() const { return &(S.rep->s[pos]); }
-
-
-// constructors
-
-inline String::String()
- : rep(&_nilStrRep) {}
-inline String::String(const String& x)
- : rep(Scopy(0, x.rep)) {}
-inline String::String(const char* t)
- : rep(Salloc(0, t, -1, -1)) {}
-inline String::String(const char* t, int tlen)
- : rep(Salloc(0, t, tlen, tlen)) {}
-inline String::String(const SubString& y)
- : rep(Salloc(0, y.chars(), y.length(), y.length())) {}
-inline String::String(char c)
- : rep(Salloc(0, &c, 1, 1)) {}
-
-inline String::~String() { if (rep != &_nilStrRep) delete rep; }
-
-inline SubString::SubString(const SubString& x)
- :S(x.S), pos(x.pos), len(x.len) {}
-inline SubString::SubString(String& x, int first, int l)
- :S(x), pos(first), len(l) {}
-
-inline SubString::~SubString() {}
-
-// assignment
-
-inline String& String::operator = (const String& y)
-{
- rep = Scopy(rep, y.rep);
- return *this;
-}
-
-inline String& String::operator=(const char* t)
-{
- rep = Salloc(rep, t, -1, -1);
- return *this;
-}
-
-inline String& String::operator=(const SubString& y)
-{
- rep = Salloc(rep, y.chars(), y.length(), y.length());
- return *this;
-}
-
-inline String& String::operator=(char c)
-{
- rep = Salloc(rep, &c, 1, 1);
- return *this;
-}
-
-
-inline SubString& SubString::operator = (const char* ys)
-{
- assign(0, ys);
- return *this;
-}
-
-inline SubString& SubString::operator = (char ch)
-{
- assign(0, &ch, 1);
- return *this;
-}
-
-inline SubString& SubString::operator = (const String& y)
-{
- assign(y.rep, y.chars(), y.length());
- return *this;
-}
-
-inline SubString& SubString::operator = (const SubString& y)
-{
- assign(y.S.rep, y.chars(), y.length());
- return *this;
-}
-
-// Zillions of cats...
-
-inline void cat(const String& x, const String& y, String& r)
-{
- r.rep = Scat(r.rep, x.chars(), x.length(), y.chars(), y.length());
-}
-
-inline void cat(const String& x, const SubString& y, String& r)
-{
- r.rep = Scat(r.rep, x.chars(), x.length(), y.chars(), y.length());
-}
-
-inline void cat(const String& x, const char* y, String& r)
-{
- r.rep = Scat(r.rep, x.chars(), x.length(), y, -1);
-}
-
-inline void cat(const String& x, char y, String& r)
-{
- r.rep = Scat(r.rep, x.chars(), x.length(), &y, 1);
-}
-
-inline void cat(const SubString& x, const String& y, String& r)
-{
- r.rep = Scat(r.rep, x.chars(), x.length(), y.chars(), y.length());
-}
-
-inline void cat(const SubString& x, const SubString& y, String& r)
-{
- r.rep = Scat(r.rep, x.chars(), x.length(), y.chars(), y.length());
-}
-
-inline void cat(const SubString& x, const char* y, String& r)
-{
- r.rep = Scat(r.rep, x.chars(), x.length(), y, -1);
-}
-
-inline void cat(const SubString& x, char y, String& r)
-{
- r.rep = Scat(r.rep, x.chars(), x.length(), &y, 1);
-}
-
-inline void cat(const char* x, const String& y, String& r)
-{
- r.rep = Scat(r.rep, x, -1, y.chars(), y.length());
-}
-
-inline void cat(const char* x, const SubString& y, String& r)
-{
- r.rep = Scat(r.rep, x, -1, y.chars(), y.length());
-}
-
-inline void cat(const char* x, const char* y, String& r)
-{
- r.rep = Scat(r.rep, x, -1, y, -1);
-}
-
-inline void cat(const char* x, char y, String& r)
-{
- r.rep = Scat(r.rep, x, -1, &y, 1);
-}
-
-inline void cat(const String& a, const String& x, const String& y, String& r)
-{
- r.rep = Scat(r.rep, a.chars(), a.length(), x.chars(), x.length(), y.chars(), y.length());
-}
-
-inline void cat(const String& a, const String& x, const SubString& y, String& r)
-{
- r.rep = Scat(r.rep, a.chars(), a.length(), x.chars(), x.length(), y.chars(), y.length());
-}
-
-inline void cat(const String& a, const String& x, const char* y, String& r)
-{
- r.rep = Scat(r.rep, a.chars(), a.length(), x.chars(), x.length(), y, -1);
-}
-
-inline void cat(const String& a, const String& x, char y, String& r)
-{
- r.rep = Scat(r.rep, a.chars(), a.length(), x.chars(), x.length(), &y, 1);
-}
-
-inline void cat(const String& a, const SubString& x, const String& y, String& r)
-{
- r.rep = Scat(r.rep, a.chars(), a.length(), x.chars(), x.length(), y.chars(), y.length());
-}
-
-inline void cat(const String& a, const SubString& x, const SubString& y, String& r)
-{
- r.rep = Scat(r.rep, a.chars(), a.length(), x.chars(), x.length(), y.chars(), y.length());
-}
-
-inline void cat(const String& a, const SubString& x, const char* y, String& r)
-{
- r.rep = Scat(r.rep, a.chars(), a.length(), x.chars(), x.length(), y, -1);
-}
-
-inline void cat(const String& a, const SubString& x, char y, String& r)
-{
- r.rep = Scat(r.rep, a.chars(), a.length(), x.chars(), x.length(), &y, 1);
-}
-
-inline void cat(const String& a, const char* x, const String& y, String& r)
-{
- r.rep = Scat(r.rep, a.chars(), a.length(), x, -1, y.chars(), y.length());
-}
-
-inline void cat(const String& a, const char* x, const SubString& y, String& r)
-{
- r.rep = Scat(r.rep, a.chars(), a.length(), x, -1, y.chars(), y.length());
-}
-
-inline void cat(const String& a, const char* x, const char* y, String& r)
-{
- r.rep = Scat(r.rep, a.chars(), a.length(), x, -1, y, -1);
-}
-
-inline void cat(const String& a, const char* x, char y, String& r)
-{
- r.rep = Scat(r.rep, a.chars(), a.length(), x, -1, &y, 1);
-}
-
-
-inline void cat(const char* a, const String& x, const String& y, String& r)
-{
- r.rep = Scat(r.rep, a, -1, x.chars(), x.length(), y.chars(), y.length());
-}
-
-inline void cat(const char* a, const String& x, const SubString& y, String& r)
-{
- r.rep = Scat(r.rep, a, -1, x.chars(), x.length(), y.chars(), y.length());
-}
-
-inline void cat(const char* a, const String& x, const char* y, String& r)
-{
- r.rep = Scat(r.rep, a, -1, x.chars(), x.length(), y, -1);
-}
-
-inline void cat(const char* a, const String& x, char y, String& r)
-{
- r.rep = Scat(r.rep, a, -1, x.chars(), x.length(), &y, 1);
-}
-
-inline void cat(const char* a, const SubString& x, const String& y, String& r)
-{
- r.rep = Scat(r.rep, a, -1, x.chars(), x.length(), y.chars(), y.length());
-}
-
-inline void cat(const char* a, const SubString& x, const SubString& y, String& r)
-{
- r.rep = Scat(r.rep, a, -1, x.chars(), x.length(), y.chars(), y.length());
-}
-
-inline void cat(const char* a, const SubString& x, const char* y, String& r)
-{
- r.rep = Scat(r.rep, a, -1, x.chars(), x.length(), y, -1);
-}
-
-inline void cat(const char* a, const SubString& x, char y, String& r)
-{
- r.rep = Scat(r.rep, a, -1, x.chars(), x.length(), &y, 1);
-}
-
-inline void cat(const char* a, const char* x, const String& y, String& r)
-{
- r.rep = Scat(r.rep, a, -1, x, -1, y.chars(), y.length());
-}
-
-inline void cat(const char* a, const char* x, const SubString& y, String& r)
-{
- r.rep = Scat(r.rep, a, -1, x, -1, y.chars(), y.length());
-}
-
-inline void cat(const char* a, const char* x, const char* y, String& r)
-{
- r.rep = Scat(r.rep, a, -1, x, -1, y, -1);
-}
-
-inline void cat(const char* a, const char* x, char y, String& r)
-{
- r.rep = Scat(r.rep, a, -1, x, -1, &y, 1);
-}
-
-
-// operator versions
-
-inline String& String::operator +=(const String& y)
-{
- cat(*this, y, *this);
- return *this;
-}
-
-inline String& String::operator +=(const SubString& y)
-{
- cat(*this, y, *this);
- return *this;
-}
-
-inline String& String::operator += (const char* y)
-{
- cat(*this, y, *this);
- return *this;
-}
-
-inline String& String:: operator +=(char y)
-{
- cat(*this, y, *this);
- return *this;
-}
-
-// constructive concatenation
-
-#if defined(__GNUG__) && !defined(_G_NO_NRV)
-
-inline String operator + (const String& x, const String& y) return r;
-{
- cat(x, y, r);
-}
-
-inline String operator + (const String& x, const SubString& y) return r;
-{
- cat(x, y, r);
-}
-
-inline String operator + (const String& x, const char* y) return r;
-{
- cat(x, y, r);
-}
-
-inline String operator + (const String& x, char y) return r;
-{
- cat(x, y, r);
-}
-
-inline String operator + (const SubString& x, const String& y) return r;
-{
- cat(x, y, r);
-}
-
-inline String operator + (const SubString& x, const SubString& y) return r;
-{
- cat(x, y, r);
-}
-
-inline String operator + (const SubString& x, const char* y) return r;
-{
- cat(x, y, r);
-}
-
-inline String operator + (const SubString& x, char y) return r;
-{
- cat(x, y, r);
-}
-
-inline String operator + (const char* x, const String& y) return r;
-{
- cat(x, y, r);
-}
-
-inline String operator + (const char* x, const SubString& y) return r;
-{
- cat(x, y, r);
-}
-
-inline String reverse(const String& x) return r;
-{
- r.rep = Sreverse(x.rep, r.rep);
-}
-
-inline String upcase(const String& x) return r;
-{
- r.rep = Supcase(x.rep, r.rep);
-}
-
-inline String downcase(const String& x) return r;
-{
- r.rep = Sdowncase(x.rep, r.rep);
-}
-
-inline String capitalize(const String& x) return r;
-{
- r.rep = Scapitalize(x.rep, r.rep);
-}
-
-#else /* NO_NRV */
-
-inline String operator + (const String& x, const String& y)
-{
- String r; cat(x, y, r); return r;
-}
-
-inline String operator + (const String& x, const SubString& y)
-{
- String r; cat(x, y, r); return r;
-}
-
-inline String operator + (const String& x, const char* y)
-{
- String r; cat(x, y, r); return r;
-}
-
-inline String operator + (const String& x, char y)
-{
- String r; cat(x, y, r); return r;
-}
-
-inline String operator + (const SubString& x, const String& y)
-{
- String r; cat(x, y, r); return r;
-}
-
-inline String operator + (const SubString& x, const SubString& y)
-{
- String r; cat(x, y, r); return r;
-}
-
-inline String operator + (const SubString& x, const char* y)
-{
- String r; cat(x, y, r); return r;
-}
-
-inline String operator + (const SubString& x, char y)
-{
- String r; cat(x, y, r); return r;
-}
-
-inline String operator + (const char* x, const String& y)
-{
- String r; cat(x, y, r); return r;
-}
-
-inline String operator + (const char* x, const SubString& y)
-{
- String r; cat(x, y, r); return r;
-}
-
-inline String reverse(const String& x)
-{
- String r; r.rep = Sreverse(x.rep, r.rep); return r;
-}
-
-inline String upcase(const String& x)
-{
- String r; r.rep = Supcase(x.rep, r.rep); return r;
-}
-
-inline String downcase(const String& x)
-{
- String r; r.rep = Sdowncase(x.rep, r.rep); return r;
-}
-
-inline String capitalize(const String& x)
-{
- String r; r.rep = Scapitalize(x.rep, r.rep); return r;
-}
-
-#endif
-
-// prepend
-
-inline void String::prepend(const String& y)
-{
- rep = Sprepend(rep, y.chars(), y.length());
-}
-
-inline void String::prepend(const char* y)
-{
- rep = Sprepend(rep, y, -1);
-}
-
-inline void String::prepend(char y)
-{
- rep = Sprepend(rep, &y, 1);
-}
-
-inline void String::prepend(const SubString& y)
-{
- rep = Sprepend(rep, y.chars(), y.length());
-}
-
-// misc transformations
-
-
-inline void String::reverse()
-{
- rep = Sreverse(rep, rep);
-}
-
-
-inline void String::upcase()
-{
- rep = Supcase(rep, rep);
-}
-
-
-inline void String::downcase()
-{
- rep = Sdowncase(rep, rep);
-}
-
-
-inline void String::capitalize()
-{
- rep = Scapitalize(rep, rep);
-}
-
-// element extraction
-
-inline char& String::operator [] (int i)
-{
- if (((unsigned)i) >= length()) error("invalid index");
- return rep->s[i];
-}
-
-inline const char& String::operator [] (int i) const
-{
- if (((unsigned)i) >= length()) error("invalid index");
- return rep->s[i];
-}
-
-inline char String::elem (int i) const
-{
- if (((unsigned)i) >= length()) error("invalid index");
- return rep->s[i];
-}
-
-inline char String::firstchar() const
-{
- return elem(0);
-}
-
-inline char String::lastchar() const
-{
- return elem(length() - 1);
-}
-
-// searching
-
-inline int String::index(char c, int startpos) const
-{
- return search(startpos, length(), c);
-}
-
-inline int String::index(const char* t, int startpos) const
-{
- return search(startpos, length(), t);
-}
-
-inline int String::index(const String& y, int startpos) const
-{
- return search(startpos, length(), y.chars(), y.length());
-}
-
-inline int String::index(const SubString& y, int startpos) const
-{
- return search(startpos, length(), y.chars(), y.length());
-}
-
-inline int String::index(const Regex& r, int startpos) const
-{
- int unused; return r.search(chars(), length(), unused, startpos);
-}
-
-inline int String::contains(char c) const
-{
- return search(0, length(), c) >= 0;
-}
-
-inline int String::contains(const char* t) const
-{
- return search(0, length(), t) >= 0;
-}
-
-inline int String::contains(const String& y) const
-{
- return search(0, length(), y.chars(), y.length()) >= 0;
-}
-
-inline int String::contains(const SubString& y) const
-{
- return search(0, length(), y.chars(), y.length()) >= 0;
-}
-
-inline int String::contains(char c, int p) const
-{
- return match(p, length(), 0, &c, 1) >= 0;
-}
-
-inline int String::contains(const char* t, int p) const
-{
- return match(p, length(), 0, t) >= 0;
-}
-
-inline int String::contains(const String& y, int p) const
-{
- return match(p, length(), 0, y.chars(), y.length()) >= 0;
-}
-
-inline int String::contains(const SubString& y, int p) const
-{
- return match(p, length(), 0, y.chars(), y.length()) >= 0;
-}
-
-inline int String::contains(const Regex& r) const
-{
- int unused; return r.search(chars(), length(), unused, 0) >= 0;
-}
-
-inline int String::contains(const Regex& r, int p) const
-{
- return r.match(chars(), length(), p) >= 0;
-}
-
-
-inline int String::matches(const SubString& y, int p) const
-{
- return match(p, length(), 1, y.chars(), y.length()) >= 0;
-}
-
-inline int String::matches(const String& y, int p) const
-{
- return match(p, length(), 1, y.chars(), y.length()) >= 0;
-}
-
-inline int String::matches(const char* t, int p) const
-{
- return match(p, length(), 1, t) >= 0;
-}
-
-inline int String::matches(char c, int p) const
-{
- return match(p, length(), 1, &c, 1) >= 0;
-}
-
-inline int String::matches(const Regex& r, int p) const
-{
- int l = (p < 0)? -p : length() - p;
- return r.match(chars(), length(), p) == l;
-}
-
-
-inline int SubString::contains(const char* t) const
-{
- return S.search(pos, pos+len, t) >= 0;
-}
-
-inline int SubString::contains(const String& y) const
-{
- return S.search(pos, pos+len, y.chars(), y.length()) >= 0;
-}
-
-inline int SubString::contains(const SubString& y) const
-{
- return S.search(pos, pos+len, y.chars(), y.length()) >= 0;
-}
-
-inline int SubString::contains(char c) const
-{
- return S.search(pos, pos+len, c) >= 0;
-}
-
-inline int SubString::contains(const Regex& r) const
-{
- int unused; return r.search(chars(), len, unused, 0) >= 0;
-}
-
-inline int SubString::matches(const Regex& r) const
-{
- return r.match(chars(), len, 0) == len;
-}
-
-
-inline int String::gsub(const String& pat, const String& r)
-{
- return _gsub(pat.chars(), pat.length(), r.chars(), r.length());
-}
-
-inline int String::gsub(const SubString& pat, const String& r)
-{
- return _gsub(pat.chars(), pat.length(), r.chars(), r.length());
-}
-
-inline int String::gsub(const Regex& pat, const String& r)
-{
- return _gsub(pat, r.chars(), r.length());
-}
-
-inline int String::gsub(const char* pat, const String& r)
-{
- return _gsub(pat, -1, r.chars(), r.length());
-}
-
-inline int String::gsub(const char* pat, const char* r)
-{
- return _gsub(pat, -1, r, -1);
-}
-
-
-
-inline ostream& operator<<(ostream& s, const String& x)
-{
- s << x.chars(); return s;
-}
-
-// a zillion comparison operators
-
-inline int operator==(const String& x, const String& y)
-{
- return compare(x, y) == 0;
-}
-
-inline int operator!=(const String& x, const String& y)
-{
- return compare(x, y) != 0;
-}
-
-inline int operator>(const String& x, const String& y)
-{
- return compare(x, y) > 0;
-}
-
-inline int operator>=(const String& x, const String& y)
-{
- return compare(x, y) >= 0;
-}
-
-inline int operator<(const String& x, const String& y)
-{
- return compare(x, y) < 0;
-}
-
-inline int operator<=(const String& x, const String& y)
-{
- return compare(x, y) <= 0;
-}
-
-inline int operator==(const String& x, const SubString& y)
-{
- return compare(x, y) == 0;
-}
-
-inline int operator!=(const String& x, const SubString& y)
-{
- return compare(x, y) != 0;
-}
-
-inline int operator>(const String& x, const SubString& y)
-{
- return compare(x, y) > 0;
-}
-
-inline int operator>=(const String& x, const SubString& y)
-{
- return compare(x, y) >= 0;
-}
-
-inline int operator<(const String& x, const SubString& y)
-{
- return compare(x, y) < 0;
-}
-
-inline int operator<=(const String& x, const SubString& y)
-{
- return compare(x, y) <= 0;
-}
-
-inline int operator==(const String& x, const char* t)
-{
- return compare(x, t) == 0;
-}
-
-inline int operator!=(const String& x, const char* t)
-{
- return compare(x, t) != 0;
-}
-
-inline int operator>(const String& x, const char* t)
-{
- return compare(x, t) > 0;
-}
-
-inline int operator>=(const String& x, const char* t)
-{
- return compare(x, t) >= 0;
-}
-
-inline int operator<(const String& x, const char* t)
-{
- return compare(x, t) < 0;
-}
-
-inline int operator<=(const String& x, const char* t)
-{
- return compare(x, t) <= 0;
-}
-
-inline int operator==(const SubString& x, const String& y)
-{
- return compare(y, x) == 0;
-}
-
-inline int operator!=(const SubString& x, const String& y)
-{
- return compare(y, x) != 0;
-}
-
-inline int operator>(const SubString& x, const String& y)
-{
- return compare(y, x) < 0;
-}
-
-inline int operator>=(const SubString& x, const String& y)
-{
- return compare(y, x) <= 0;
-}
-
-inline int operator<(const SubString& x, const String& y)
-{
- return compare(y, x) > 0;
-}
-
-inline int operator<=(const SubString& x, const String& y)
-{
- return compare(y, x) >= 0;
-}
-
-inline int operator==(const SubString& x, const SubString& y)
-{
- return compare(x, y) == 0;
-}
-
-inline int operator!=(const SubString& x, const SubString& y)
-{
- return compare(x, y) != 0;
-}
-
-inline int operator>(const SubString& x, const SubString& y)
-{
- return compare(x, y) > 0;
-}
-
-inline int operator>=(const SubString& x, const SubString& y)
-{
- return compare(x, y) >= 0;
-}
-
-inline int operator<(const SubString& x, const SubString& y)
-{
- return compare(x, y) < 0;
-}
-
-inline int operator<=(const SubString& x, const SubString& y)
-{
- return compare(x, y) <= 0;
-}
-
-inline int operator==(const SubString& x, const char* t)
-{
- return compare(x, t) == 0;
-}
-
-inline int operator!=(const SubString& x, const char* t)
-{
- return compare(x, t) != 0;
-}
-
-inline int operator>(const SubString& x, const char* t)
-{
- return compare(x, t) > 0;
-}
-
-inline int operator>=(const SubString& x, const char* t)
-{
- return compare(x, t) >= 0;
-}
-
-inline int operator<(const SubString& x, const char* t)
-{
- return compare(x, t) < 0;
-}
-
-inline int operator<=(const SubString& x, const char* t)
-{
- return compare(x, t) <= 0;
-}
-
-
-// a helper needed by at, before, etc.
-
-inline SubString String::_substr(int first, int l)
-{
- if (first < 0 || (unsigned)(first + l) > length() )
- return SubString(_nilString, 0, 0) ;
- else
- return SubString(*this, first, l);
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/Uniform.cc b/contrib/libg++/libg++/src/Uniform.cc
deleted file mode 100644
index 0592b6d97812..000000000000
--- a/contrib/libg++/libg++/src/Uniform.cc
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Dirk Grunwald (grunwald@cs.uiuc.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <builtin.h>
-#include <Random.h>
-#include <Uniform.h>
-
-double Uniform::operator()()
-{
- return( pLow + delta * pGenerator -> asDouble() );
-}
diff --git a/contrib/libg++/libg++/src/Uniform.h b/contrib/libg++/libg++/src/Uniform.h
deleted file mode 100644
index 1a365b9a7745..000000000000
--- a/contrib/libg++/libg++/src/Uniform.h
+++ /dev/null
@@ -1,71 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Dirk Grunwald (grunwald@cs.uiuc.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-#ifndef _Uniform_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _Uniform_h 1
-
-#include <Random.h>
-
-//
-// The interval [lo..hi]
-//
-
-class Uniform: public Random {
- double pLow;
- double pHigh;
- double delta;
-public:
- Uniform(double low, double high, RNG *gen);
-
- double low();
- double low(double x);
- double high();
- double high(double x);
-
- virtual double operator()();
-};
-
-
-inline Uniform::Uniform(double low, double high, RNG *gen) : Random(gen)
-{
- pLow = (low < high) ? low : high;
- pHigh = (low < high) ? high : low;
- delta = pHigh - pLow;
-}
-
-inline double Uniform::low() { return pLow; }
-
-inline double Uniform::low(double x) {
- double tmp = pLow;
- pLow = x;
- delta = pHigh - pLow;
- return tmp;
-}
-
-inline double Uniform::high() { return pHigh; }
-
-inline double Uniform::high(double x) {
- double tmp = pHigh;
- pHigh = x;
- delta = pHigh - pLow;
- return tmp;
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/Weibull.cc b/contrib/libg++/libg++/src/Weibull.cc
deleted file mode 100644
index d7987f5ece0b..000000000000
--- a/contrib/libg++/libg++/src/Weibull.cc
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Dirk Grunwald (grunwald@cs.uiuc.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <builtin.h>
-#include <Random.h>
-#include <Weibull.h>
-
-//
-// See Simulation, Modelling & Analysis by Law & Kelton, pp259
-//
-// This is the ``polar'' method.
-//
-
-double Weibull::operator()()
-{
- return( pow(pBeta * ( - log(1 - pGenerator -> asDouble()) ), pInvAlpha) );
-}
diff --git a/contrib/libg++/libg++/src/Weibull.h b/contrib/libg++/libg++/src/Weibull.h
deleted file mode 100644
index fd064d5e619b..000000000000
--- a/contrib/libg++/libg++/src/Weibull.h
+++ /dev/null
@@ -1,74 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Dirk Grunwald (grunwald@cs.uiuc.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-#ifndef _Weibull_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _Weibull_h
-
-#include <Random.h>
-
-class Weibull: public Random {
-protected:
- double pAlpha;
- double pInvAlpha;
- double pBeta;
-
- void setState();
-
-public:
- Weibull(double alpha, double beta, RNG *gen);
-
- double alpha();
- double alpha(double x);
-
- double beta();
- double beta(double x);
-
- virtual double operator()();
-};
-
-
-inline void Weibull::setState() {
- pInvAlpha = 1.0 / pAlpha;
-}
-
-inline Weibull::Weibull(double alpha, double beta, RNG *gen) : Random(gen)
-{
- pAlpha = alpha;
- pBeta = beta;
- setState();
-}
-
-inline double Weibull::alpha() { return pAlpha; }
-
-inline double Weibull::alpha(double x) {
- double tmp = pAlpha;
- pAlpha = x;
- setState();
- return tmp;
-}
-
-inline double Weibull::beta() { return pBeta; };
-inline double Weibull::beta(double x) {
- double tmp = pBeta;
- pBeta = x;
- return tmp;
-};
-
-#endif
diff --git a/contrib/libg++/libg++/src/bitand.c b/contrib/libg++/libg++/src/bitand.c
deleted file mode 100644
index 149a8ab73866..000000000000
--- a/contrib/libg++/libg++/src/bitand.c
+++ /dev/null
@@ -1,41 +0,0 @@
-/* Copyright (C) 1994 Free Software Foundation
-
-This file is part of the GNU BitString Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-/* Written by Per Bothner (bothner@cygnus.com). */
-
-#include "bitprims.h"
-
-/* Copy LENGTH bits from (starting at SRCBIT) into pdst starting at DSTBIT.
- This will work even if psrc & pdst overlap. */
-
-void
-_BS_and (pdst, dstbit, psrc, srcbit, length)
- register _BS_word* pdst;
- int dstbit;
- register const _BS_word* psrc;
- int srcbit;
- _BS_size_t length;
-{
-#define COMBINE(dst, src) (dst) & (src)
-#include "bitdo2.h"
-}
diff --git a/contrib/libg++/libg++/src/bitany.c b/contrib/libg++/libg++/src/bitany.c
deleted file mode 100644
index 5a978d030d92..000000000000
--- a/contrib/libg++/libg++/src/bitany.c
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Copyright (C) 1994 Free Software Foundation
-
-This file is part of the GNU BitString Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-/* Written by Per Bothner (bothner@cygnus.com) */
-
-#include "bitprims.h"
-
-int
-_BS_any (ptr, offset, length)
- register const _BS_word *ptr;
- int offset;
- _BS_size_t length;
-{
-#undef DOIT
-#define DOIT(WORD, MASK) if ((WORD) & (MASK)) return 1;
-#include "bitdo1.h"
- return 0;
-}
diff --git a/contrib/libg++/libg++/src/bitblt.c b/contrib/libg++/libg++/src/bitblt.c
deleted file mode 100644
index b38fd3d9eb1e..000000000000
--- a/contrib/libg++/libg++/src/bitblt.c
+++ /dev/null
@@ -1,97 +0,0 @@
-/* Copyright (C) 1994 Free Software Foundation
-
-This file is part of the GNU BitString Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-/* Written by Per Bothner (bothner@cygnus.com).
- Based on ideas in the X11 MFB server. */
-
-#include "bitprims.h"
-#define ONES ((_BS_word)(~0))
-
-/* Copy LENGTH bits from (starting at SRCBIT) into pdst starting at DSTBIT.
- This will work even if psrc & pdst overlap. */
-
-void
-_BS_blt (op, pdst, dstbit, psrc, srcbit, length)
- enum _BS_alu op;
- register _BS_word* pdst;
- int dstbit;
- register const _BS_word* psrc;
- int srcbit;
- _BS_size_t length;
-{
- _BS_word ca1, cx1, ca2, cx2;
- switch (op)
- {
- case _BS_alu_clear:
- _BS_clear (pdst, dstbit, length);
- return;
- case _BS_alu_and:
- _BS_and (pdst, dstbit, psrc, srcbit, length);
- return;
- case _BS_alu_andReverse:
- ca1 = ONES; cx1 = 0; ca2 = ONES; cx2 = 0;
- break;
- case _BS_alu_copy:
- _BS_copy (pdst, dstbit, psrc, srcbit, length);
- return;
- case _BS_alu_andInverted:
- ca1 = ONES; cx1 = ONES; ca2 = 0; cx2 = 0;
- break;
- case _BS_alu_noop:
- return;
- case _BS_alu_xor:
- _BS_xor (pdst, dstbit, psrc, srcbit, length);
- return;
- case _BS_alu_or:
- ca1 = ONES; cx1 = ONES; ca2 = ONES; cx2 = 0;
- break;
- case _BS_alu_nor:
- ca1 = ONES; cx1 = ONES; ca2 = ONES; cx2 = ONES;
- break;
- case_BS_alu_equiv:
- ca1 = 0; cx1 = ONES; ca2 = ONES; cx2 = ONES;
- break;
- case _BS_alu_invert:
- _BS_invert (pdst, dstbit, length);
- return;
- case _BS_alu_orReverse:
- ca1 = ONES; cx1 = ONES; ca2 = 0; cx2 = ONES;
- break;
- case _BS_alu_copyInverted:
- ca1 = 0; cx1 = 0; ca2 = ONES; cx2 = ONES;
- break;
- case _BS_alu_orInverted:
- ca1 = ONES; cx1 = 0; ca2 = ONES; cx2 = ONES;
- break;
- case _BS_alu_nand:
- ca1 = ONES; cx1 = 0; ca2 = 0; cx2 = ONES;
- break;
- case _BS_alu_set:
- _BS_set (pdst, dstbit, length);
- return;
- }
- {
-#define COMBINE(dst, src) ((dst) & ((src) & ca1 ^ cx1) ^ ((src) & ca2 ^ cx2))
-#include "bitdo2.h"
- }
-}
diff --git a/contrib/libg++/libg++/src/bitclear.c b/contrib/libg++/libg++/src/bitclear.c
deleted file mode 100644
index 6dd94059ad68..000000000000
--- a/contrib/libg++/libg++/src/bitclear.c
+++ /dev/null
@@ -1,37 +0,0 @@
-/* Copyright (C) 1994 Free Software Foundation
-
-This file is part of the GNU BitString Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-/* Written by Per Bothner (bothner@cygnus.com) */
-
-#include "bitprims.h"
-
-void
-_BS_clear (ptr, offset, length)
- register _BS_word *ptr;
- int offset;
- _BS_size_t length;
-{
-#undef DOIT
-#define DOIT(WORD, MASK) ((WORD) &= ~(MASK))
-#include "bitdo1.h"
-}
diff --git a/contrib/libg++/libg++/src/bitcopy.c b/contrib/libg++/libg++/src/bitcopy.c
deleted file mode 100644
index aa48730e8d6e..000000000000
--- a/contrib/libg++/libg++/src/bitcopy.c
+++ /dev/null
@@ -1,41 +0,0 @@
-/* Copyright (C) 1994 Free Software Foundation
-
-This file is part of the GNU BitString Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-/* Written by Per Bothner (bothner@cygnus.com). */
-
-#include "bitprims.h"
-
-/* Copy LENGTH bits from (starting at SRCBIT) into pdst starting at DSTBIT.
- This will work even if psrc & pdst overlap. */
-
-void
-_BS_copy (pdst, dstbit, psrc, srcbit, length)
- register _BS_word* pdst;
- int dstbit;
- register const _BS_word* psrc;
- int srcbit;
- _BS_size_t length;
-{
-#define COMBINE(dst, src) (src)
-#include "bitdo2.h"
-}
diff --git a/contrib/libg++/libg++/src/bitcount.c b/contrib/libg++/libg++/src/bitcount.c
deleted file mode 100644
index 9583a827e4a3..000000000000
--- a/contrib/libg++/libg++/src/bitcount.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/* Copyright (C) 1994 Free Software Foundation
-
-This file is part of the GNU BitString Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-/* Written by Per Bothner (bothner@cygnus.com) */
-
-#include "bitprims.h"
-
-/* bit_count[I] is number of '1' bits in I. */
-static const unsigned char
-four_bit_count[16] = {
- 0, 1, 1, 2,
- 1, 2, 2, 3,
- 1, 2, 2, 3,
- 2, 3, 3, 4};
-
-#if !defined(inline) && !defined(__GNUC__) && !defined(__cplusplus)
-#define inline
-#endif
-
-static inline int
-_BS_count_word (word)
- register _BS_word word;
-{
- register int count = 0;
- while (word > 0)
- {
- count += four_bit_count[word & 15];
- word >>= 4;
- }
- return count;
-}
-
-int
-_BS_count (ptr, offset, length)
- register const _BS_word *ptr;
- int offset;
- _BS_size_t length;
-{
- register int count = 0;
-#undef DOIT
-#define DOIT(WORD, MASK) count += _BS_count_word ((WORD) & (MASK));
-#include "bitdo1.h"
- return count;
-}
diff --git a/contrib/libg++/libg++/src/bitdo1.h b/contrib/libg++/libg++/src/bitdo1.h
deleted file mode 100644
index c234d41d4069..000000000000
--- a/contrib/libg++/libg++/src/bitdo1.h
+++ /dev/null
@@ -1,32 +0,0 @@
-#ifndef ONES
-#define ONES ((_BS_word)(~0L))
-#endif
- register int nwords;
- register _BS_word mask;
- if (offset == 0)
- ;
- else if (offset + length >= _BS_BITS_PER_WORD)
- {
- mask = ONES _BS_RIGHT offset;
- DOIT(*ptr++, mask);
- length -= _BS_BITS_PER_WORD - offset;
- }
- else
- {
- mask = (ONES _BS_RIGHT (_BS_BITS_PER_WORD - length))
- _BS_LEFT (_BS_BITS_PER_WORD - length - offset);
- DOIT(*ptr, mask);
- goto done;
- }
- nwords = _BS_INDEX(length);
- while (--nwords >= 0)
- {
- DOIT(*ptr++, ONES);
- }
- length = _BS_POS (length);
- if (length)
- {
- mask = ONES _BS_LEFT (_BS_BITS_PER_WORD - length);
- DOIT(*ptr, mask);
- }
- done: ;
diff --git a/contrib/libg++/libg++/src/bitdo2.h b/contrib/libg++/libg++/src/bitdo2.h
deleted file mode 100644
index 6e9952353721..000000000000
--- a/contrib/libg++/libg++/src/bitdo2.h
+++ /dev/null
@@ -1,184 +0,0 @@
-#ifndef ONES
-#define ONES ((_BS_word)(~0L))
-#endif
-
-#ifndef DOIT_SOLID
-#ifdef DOIT
-#define DOIT_SOLID(dst, src) DOIT(dst, src, (_BS_word)(~0))
-#else
-#define DOIT_SOLID(dst, src) (dst) = (COMBINE(dst, src))
-#endif
-#endif
-
-#ifndef DOIT
-#define DOIT(dst, src, mask) \
- (dst) = ((COMBINE(dst, src)) & (mask)) | ((dst) & ~(mask))
-#endif
-
- _BS_word word0, mask;
- int shift0, shift1;
-
- if (length == 0)
- goto done;
-
- shift0 = srcbit - dstbit;
-
- /* First handle the case that only one destination word is touched. */
- if (length + dstbit <= _BS_BITS_PER_WORD)
- {
- _BS_word mask
- = (ONES _BS_LEFT (_BS_BITS_PER_WORD - length)) _BS_RIGHT dstbit;
- _BS_word word0 = *psrc++;
- if (shift0 <= 0) /* dstbit >= srcbit */
- {
- word0 = word0 _BS_RIGHT (-shift0);
- }
- else
- {
- word0 = word0 _BS_LEFT shift0;
- if (length + srcbit > _BS_BITS_PER_WORD)
- word0 = word0 | (*psrc _BS_RIGHT (_BS_BITS_PER_WORD - shift0));
- }
- DOIT(*pdst, word0, mask);
- goto done;
- }
-
- /* Next optimize the case that the source and destination are aligned. */
- if (shift0 == 0)
- {
- _BS_word mask;
- if (psrc > pdst)
- {
- if (srcbit)
- {
- mask = ONES _BS_RIGHT srcbit;
- DOIT(*pdst, *psrc, mask);
- pdst++; psrc++;
- length -= _BS_BITS_PER_WORD - srcbit;
- }
- for (; length >= _BS_BITS_PER_WORD; length -= _BS_BITS_PER_WORD)
- {
- DOIT_SOLID(*pdst, *psrc);
- pdst++; psrc++;
- }
- if (length)
- {
- mask = ONES _BS_LEFT (_BS_BITS_PER_WORD - length);
- DOIT(*pdst, *psrc, mask);
- }
- }
- else if (psrc < pdst)
- {
- _BS_size_t span = srcbit + length;
- pdst += span / (_BS_size_t)_BS_BITS_PER_WORD;
- psrc += span / (_BS_size_t)_BS_BITS_PER_WORD;
- span %= (_BS_size_t)_BS_BITS_PER_WORD;
- if (span)
- {
- mask = ONES _BS_LEFT (_BS_BITS_PER_WORD - span);
- DOIT(*pdst, *psrc, mask);
- length -= span;
- }
- pdst--; psrc--;
- for (; length >= _BS_BITS_PER_WORD; length -= _BS_BITS_PER_WORD)
- {
- DOIT_SOLID(*pdst, *psrc);
- pdst--; psrc--;
- }
- if (srcbit)
- {
- mask = ONES _BS_RIGHT srcbit;
- DOIT(*pdst, *psrc, mask);
- }
- }
- /* else if (psrc == pdst) --nothing to do--; */
- goto done;
- }
-
- /* Now we assume shift!=0, and more than on destination word is changed. */
- if (psrc >= pdst) /* Do the updates in forward direction. */
- {
- _BS_word word0 = *psrc++;
- _BS_word mask = ONES _BS_RIGHT dstbit;
- if (shift0 > 0)
- {
- _BS_word word1 = *psrc++;
- shift1 = _BS_BITS_PER_WORD - shift0;
- DOIT(*pdst, (word0 _BS_LEFT shift0) | (word1 _BS_RIGHT shift1), mask);
- word0 = word1;
- }
- else /* dstbit > srcbit */
- {
- shift1 = -shift0;
- shift0 += _BS_BITS_PER_WORD;
- DOIT(*pdst, word0 _BS_RIGHT shift1, mask);
- }
- pdst++;
- length -= _BS_BITS_PER_WORD - dstbit;
-
- for ( ; length >= _BS_BITS_PER_WORD; length -= _BS_BITS_PER_WORD)
- {
- register _BS_word word1 = *psrc++;
- DOIT_SOLID(*pdst,
- (word0 _BS_LEFT shift0) | (word1 _BS_RIGHT shift1));
- pdst++;
- word0 = word1;
- }
- if (length > 0)
- {
- _BS_size_t mask = ONES _BS_LEFT (_BS_BITS_PER_WORD - length);
- word0 = word0 _BS_LEFT shift0;
- if (length > shift1)
- word0 = word0 | (*psrc _BS_RIGHT shift1) ;
- DOIT (*pdst, word0, mask);
- }
- }
- else /* Do the updates in backward direction. */
- {
- _BS_word word0;
-
- /* Make (psrc, srcbit) and (pdst, dstbit) point to *last* bit. */
- psrc += (srcbit + length - 1) / _BS_BITS_PER_WORD;
- srcbit = (srcbit + length - 1) % _BS_BITS_PER_WORD;
- pdst += (dstbit + length - 1) / _BS_BITS_PER_WORD;
- dstbit = (dstbit + length - 1) % _BS_BITS_PER_WORD;
-
- shift0 = srcbit - dstbit;
-
- word0 = *psrc--;
- mask = ONES _BS_LEFT (_BS_BITS_PER_WORD - 1 - dstbit);
- if (shift0 < 0)
- {
- _BS_word word1 = *psrc--;
- shift1 = -shift0;
- shift0 += _BS_BITS_PER_WORD;
- DOIT (*pdst, (word0 _BS_RIGHT shift1) | (word1 _BS_LEFT shift0),
- mask);
- word0 = word1;
- }
- else
- {
- shift1 = _BS_BITS_PER_WORD - shift0;
- DOIT(*pdst, word0 _BS_LEFT shift0, mask);
- }
- pdst--;
- length -= dstbit + 1;
-
- for ( ; length >= _BS_BITS_PER_WORD; length -= _BS_BITS_PER_WORD)
- {
- register _BS_word word1 = *psrc--;
- DOIT_SOLID(*pdst,
- (word0 _BS_RIGHT shift1) | (word1 _BS_LEFT shift0));
- pdst--;
- word0 = word1;
- }
- if (length > 0)
- {
- _BS_size_t mask = ONES _BS_RIGHT (_BS_BITS_PER_WORD - length);
- word0 = word0 _BS_RIGHT shift1;
- if (length > shift0)
- word0 = word0 | (*psrc _BS_LEFT shift0) ;
- DOIT (*pdst, word0, mask);
- }
- }
- done: ;
diff --git a/contrib/libg++/libg++/src/bitinvert.c b/contrib/libg++/libg++/src/bitinvert.c
deleted file mode 100644
index 558c397838c0..000000000000
--- a/contrib/libg++/libg++/src/bitinvert.c
+++ /dev/null
@@ -1,37 +0,0 @@
-/* Copyright (C) 1994 Free Software Foundation
-
-This file is part of the GNU BitString Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-/* Written by Per Bothner (bothner@cygnus.com) */
-
-#include "bitprims.h"
-
-void
-_BS_invert (ptr, offset, length)
- register _BS_word *ptr;
- int offset;
- _BS_size_t length;
-{
-#undef DOIT
-#define DOIT(WORD, MASK) ((WORD) ^= (MASK))
-#include "bitdo1.h"
-}
diff --git a/contrib/libg++/libg++/src/bitlcomp.c b/contrib/libg++/libg++/src/bitlcomp.c
deleted file mode 100644
index 3fbfdb72c83b..000000000000
--- a/contrib/libg++/libg++/src/bitlcomp.c
+++ /dev/null
@@ -1,81 +0,0 @@
-/* Copyright (C) 1994 Free Software Foundation
-
-This file is part of the GNU BitString Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-/* Written by Per Bothner (bothner@cygnus.com) */
-
-#include "bitprims.h"
-#include <stdlib.h>
-
-/* Return -1, 0, 1 depending on whether (ptr0, len0) is
- lexicographically less than, equal, or greater than (ptr1, len1).
- Both bitstrings must be left-aligned. */
-
-int
-_BS_lcompare_0 (ptr0, len0, ptr1, len1)
- register const _BS_word *ptr0;
- _BS_size_t len0;
- register const _BS_word *ptr1;
- _BS_size_t len1;
-{
- _BS_size_t nwords0 = len0 / _BS_BITS_PER_WORD;
- _BS_size_t nwords1 = len1 / _BS_BITS_PER_WORD;
- register _BS_word word0, word1;
- _BS_size_t nwords = nwords0 > nwords1 ? nwords1 : nwords0;
- for (; nwords != 0; nwords--)
- {
- word0 = *ptr0++;
- word1 = *ptr1++;
- if (word0 != word1)
- {
-#if _BS_BIGENDIAN
- return (word0 < word1) ? -1 : 1;
-#else
- {
- _BS_word diff=(word0^word1); /* one's where different */
- _BS_word mask=diff&~(diff-1); /* first bit different */
- return (word0&mask)?1:-1;
- }
-#endif
- }
- }
- len0 -= nwords0 * _BS_BITS_PER_WORD;
- len1 -= nwords1 * _BS_BITS_PER_WORD;
- if (len0 == 0 || len1 == 0)
- return (len1 == 0) - (len0 == 0);
- len0 &= _BS_BITS_PER_WORD - 1;
- len1 &= _BS_BITS_PER_WORD - 1;
- word0 = *ptr0++ & ~((_BS_word)(~0) _BS_RIGHT len0);
- word1 = *ptr1++ & ~((_BS_word)(~0) _BS_RIGHT len1);
- if (word0 == word1)
- return len0 == len1 ? 0 : len0 < len1 ? -1 : 1;
-#if _BS_BIGENDIAN
- return (word0 < word1) ? -1 : 1;
-#else
- {
- _BS_word diff=(word0^word1); /* one's where different */
- _BS_word mask=diff&~(diff-1); /* first bit different */
- return (word0&mask)?1:-1;
- }
-#endif
-}
-
diff --git a/contrib/libg++/libg++/src/bitprims.h b/contrib/libg++/libg++/src/bitprims.h
deleted file mode 100644
index 25b809b68952..000000000000
--- a/contrib/libg++/libg++/src/bitprims.h
+++ /dev/null
@@ -1,125 +0,0 @@
-#ifndef _BS_PRIMS
-#define _BS_PRIMS
-
-/* A bitstring is an array of _BS_word. */
-typedef unsigned long _BS_word;
-
-#define _BS_CHAR_BIT 8
-#define _BS_BITS_PER_WORD (_BS_CHAR_BIT*sizeof(_BS_word))
-#define _BS_WORDS_NEEDED(NBITS) ((NBITS+_BS_BITS_PER_WORD-1)/_BS_BITS_PER_WORD)
-
-/* For now, we number the bits in a _BS_word in little-endian order.
- Later, might use machine order. */
-#ifdef CHILL_LIB
-#ifndef BITS_BIG_ENDIAN
-#include "config.h"
-#endif
-#define _BS_BIGENDIAN BITS_BIG_ENDIAN
-#else
-#define _BS_BIGENDIAN 0
-#endif
-
-/* By "left" we mean where bit number 0 is.
- Hence, so left shift is << if we're numbering the bits in big-endian oder,
- and >> if we're numbering the bits in little-endian order.
- Currently, we always use little-endian order.
- Later, we might use machine-endian order. */
-#if _BS_BIGENDIAN
-#define _BS_LEFT <<
-#define _BS_RIGHT >>
-#else
-#define _BS_LEFT >>
-#define _BS_RIGHT <<
-#endif
-
-#if _BS_BIGENDIAN
-#define _BS_BITMASK(BITNO) ((_BS_word)1 << (_BS_BITS_PER_WORD - 1 - (BITNO)))
-#else
-#define _BS_BITMASK(BITNO) ((_BS_word)1 << (BITNO))
-#endif
-
-/* Given a PTR which may not be aligned on a _BS_word boundary,
- set NEW_PTR to point to (the beginning of) the corresponding _BS_word.
- Adjust the bit-offset OFFSET to compensate for the difference. */
-#define _BS_ADJUST_ALIGNED(NEW_PTR, PTR, OFFSET) \
- ( (NEW_PTR) = (_BS_word*)(((char*)(PTR)-(char*)0) & ~(sizeof(_BS_word)-1)), \
- (OFFSET) += (char*)(PTR) - (char*)(NEW_PTR) )
-
-/* Given a bit pointer (PTR, OFFSET) normalize it so that
- OFFSET < _BS_BITS_PER_WORD. */
-#define _BS_NORMALIZE(PTR, OFFSET) \
-{ _BS_size_t __tmp_ind = _BS_INDEX (OFFSET); \
- (PTR) += __tmp_ind; \
- (OFFSET) -= __tmp_ind * _BS_BITS_PER_WORD; }
-
-#define _BS_INDEX(I) ((unsigned)(I) / _BS_BITS_PER_WORD)
-#define _BS_POS(I) ((I) & (_BS_BITS_PER_WORD -1 ))
-
-#ifndef _BS_size_t
-#if __GNUC__ > 1
-#define _BS_size_t __SIZE_TYPE__
-#else
-#define _BS_size_t unsigned long
-#endif
-#endif
-
-#ifndef __P
-#ifdef __STDC__
-#define __P(protos) protos
-#else
-#define __P(protos) ()
-#endif
-#endif /*!__P*/
-#if !defined(__STDC__) && !defined(const)
-#define const
-#endif
-#if !defined(__STDC__) && !defined(void)
-#define void int
-#endif
-
-/* The 16 2-operand raster-ops:
- These match the correspodning GX codes in X11. */
-enum _BS_alu {
- _BS_alu_clear = 0 /* 0 */,
- _BS_alu_and = 1 /* src & dst */,
- _BS_alu_andReverse = 2 /* src & ~dst */,
- _BS_alu_copy = 3 /* src */,
- _BS_alu_andInverted = 4 /* ~src & dst */,
- _BS_alu_noop = 5 /* dst */,
- _BS_alu_xor = 6 /* src ^ dst */,
- _BS_alu_or = 7 /* src | dst */,
- _BS_alu_nor = 8 /* ~src & ~dst */,
- _BS_alu_equiv = 9 /* ~(src ^ dst) */,
- _BS_alu_invert = 10 /* ~dst */,
- _BS_alu_orReverse = 11 /* src | ~dst */,
- _BS_alu_copyInverted = 12 /* ~src */,
- _BS_alu_orInverted = 13 /* ~src | dst */,
- _BS_alu_nand = 14 /* ~src | d~st */,
- _BS_alu_set = 15 /* ~src | dst */
-};
-#define _BS
-#define _BS
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-extern void _BS_and __P((_BS_word*,int, const _BS_word*, int, _BS_size_t));
-extern void _BS_blt __P((enum _BS_alu,
- _BS_word*,int, const _BS_word*,int, _BS_size_t));
-extern void _BS_copy __P((_BS_word*,int, const _BS_word*,int, _BS_size_t));
-#define _BS_copy_0(DS, SS, LENGTH) _BS_copy(DS, 0, SS, 0, LENGTH)
-extern int _BS_count __P((const _BS_word*, int, _BS_size_t));
-extern int _BS_any __P((const _BS_word*, int, _BS_size_t));
-extern void _BS_clear __P((_BS_word*, int, _BS_size_t));
-extern void _BS_set __P((_BS_word*, int, _BS_size_t));
-extern void _BS_invert __P((_BS_word*, int, _BS_size_t));
-int _BS_lcompare_0 __P((const _BS_word*, _BS_size_t,
- const _BS_word*, _BS_size_t));
-extern void _BS_xor __P((_BS_word*,int, const _BS_word*,int, _BS_size_t));
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* !_BS_PRIMS */
diff --git a/contrib/libg++/libg++/src/bitset1.c b/contrib/libg++/libg++/src/bitset1.c
deleted file mode 100644
index bf0dd8de1e11..000000000000
--- a/contrib/libg++/libg++/src/bitset1.c
+++ /dev/null
@@ -1,37 +0,0 @@
-/* Copyright (C) 1994 Free Software Foundation
-
-This file is part of the GNU BitString Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-/* Written by Per Bothner (bothner@cygnus.com) */
-
-#include "bitprims.h"
-
-void
-_BS_set (ptr, offset, length)
- register _BS_word *ptr;
- int offset;
- _BS_size_t length;
-{
-#undef DOIT
-#define DOIT(WORD, MASK) ((WORD) |= (MASK))
-#include "bitdo1.h"
-}
diff --git a/contrib/libg++/libg++/src/bitxor.c b/contrib/libg++/libg++/src/bitxor.c
deleted file mode 100644
index 7690419036ef..000000000000
--- a/contrib/libg++/libg++/src/bitxor.c
+++ /dev/null
@@ -1,41 +0,0 @@
-/* Copyright (C) 1994 Free Software Foundation
-
-This file is part of the GNU BitString Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-/* Written by Per Bothner (bothner@cygnus.com). */
-
-#include "bitprims.h"
-
-/* Copy LENGTH bits from (starting at SRCBIT) into pdst starting at DSTBIT.
- This will work even if psrc & pdst overlap. */
-
-void
-_BS_xor (pdst, dstbit, psrc, srcbit, length)
- register _BS_word* pdst;
- int dstbit;
- register const _BS_word* psrc;
- int srcbit;
- _BS_size_t length;
-{
-#define COMBINE(dst, src) (dst) ^ (src)
-#include "bitdo2.h"
-}
diff --git a/contrib/libg++/libg++/src/bool.h b/contrib/libg++/libg++/src/bool.h
deleted file mode 100644
index 40a2956e6e59..000000000000
--- a/contrib/libg++/libg++/src/bool.h
+++ /dev/null
@@ -1,24 +0,0 @@
-// Defining TRUE and FALSE is usually a Bad Idea,
-// because you will probably be inconsistent with anyone
-// else who had the same clever idea.
-// Therefore: DON'T USE THIS FILE.
-
-#ifndef _bool_h
-#define _bool_h 1
-
-#include <_G_config.h>
-
-#if _G_HAVE_BOOL
-#undef TRUE
-#undef FALSE
-#define TRUE true
-#define FALSE false
-#else
-#undef FALSE
-#undef TRUE
-#undef true
-#undef false
-enum bool { FALSE = 0, false = 0, TRUE = 1, true = 1 };
-#endif
-
-#endif
diff --git a/contrib/libg++/libg++/src/builtin.cc b/contrib/libg++/libg++/src/builtin.cc
deleted file mode 100644
index 6b9abe5380c5..000000000000
--- a/contrib/libg++/libg++/src/builtin.cc
+++ /dev/null
@@ -1,4 +0,0 @@
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <builtin.h>
diff --git a/contrib/libg++/libg++/src/builtin.h b/contrib/libg++/libg++/src/builtin.h
deleted file mode 100644
index 8d380828d771..000000000000
--- a/contrib/libg++/libg++/src/builtin.h
+++ /dev/null
@@ -1,125 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-
-/*
-Copyright (C) 1988, 1992 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/*
- arithmetic, etc. functions on built in types
-*/
-
-
-#ifndef _builtin_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _builtin_h 1
-
-#include <stddef.h>
-#include <std.h>
-#include <cmath>
-
-#ifndef __GNUC__
-#define __attribute__(x)
-#endif
-
-typedef void (*one_arg_error_handler_t)(const char*);
-typedef void (*two_arg_error_handler_t)(const char*, const char*);
-
-long gcd(long, long);
-long lg(unsigned long);
-double pow(double, long);
-long pow(long, long);
-
-extern "C" double start_timer();
-extern "C" double return_elapsed_time(double last_time = 0.0);
-
-char* dtoa(double x, char cvt = 'g', int width = 0, int prec = 6);
-
-unsigned int hashpjw(const char*);
-unsigned int multiplicativehash(int);
-unsigned int foldhash(double);
-
-extern void default_one_arg_error_handler(const char*) __attribute__ ((noreturn));
-extern void default_two_arg_error_handler(const char*, const char*) __attribute__ ((noreturn));
-
-extern two_arg_error_handler_t lib_error_handler;
-
-extern two_arg_error_handler_t
- set_lib_error_handler(two_arg_error_handler_t f);
-
-
-#if !defined(IV)
-
-inline short abs(short arg)
-{
- return (arg < 0)? -arg : arg;
-}
-
-inline int sign(long arg)
-{
- return (arg == 0) ? 0 : ( (arg > 0) ? 1 : -1 );
-}
-
-inline int sign(double arg)
-{
- return (arg == 0.0) ? 0 : ( (arg > 0.0) ? 1 : -1 );
-}
-
-inline long sqr(long arg)
-{
- return arg * arg;
-}
-
-#if ! _G_MATH_H_INLINES /* hpux and SCO define this in math.h */
-inline double sqr(double arg)
-{
- return arg * arg;
-}
-#endif
-
-inline int even(long arg)
-{
- return !(arg & 1);
-}
-
-inline int odd(long arg)
-{
- return (arg & 1);
-}
-
-inline long lcm(long x, long y)
-{
- return x / gcd(x, y) * y;
-}
-
-inline void (setbit)(long& x, long b)
-{
- x |= (1 << b);
-}
-
-inline void clearbit(long& x, long b)
-{
- x &= ~(1 << b);
-}
-
-inline int testbit(long x, long b)
-{
- return ((x & (1 << b)) != 0);
-}
-
-#endif
-#endif
diff --git a/contrib/libg++/libg++/src/compare.cc b/contrib/libg++/libg++/src/compare.cc
deleted file mode 100644
index aae8409a2aa5..000000000000
--- a/contrib/libg++/libg++/src/compare.cc
+++ /dev/null
@@ -1,4 +0,0 @@
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <compare.h>
diff --git a/contrib/libg++/libg++/src/compare.h b/contrib/libg++/libg++/src/compare.h
deleted file mode 100644
index fb720749873f..000000000000
--- a/contrib/libg++/libg++/src/compare.h
+++ /dev/null
@@ -1,91 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifndef _compare_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _compare_h 1
-
-#include <builtin.h>
-
-int compare(int a, int b);
-int compare(short a, short b);
-int compare(unsigned long a, unsigned long b);
-int compare(unsigned int a, unsigned int b);
-int compare(unsigned short a, unsigned short b);
-int compare(unsigned char a, unsigned char b);
-int compare(signed char a, signed char b);
-int compare(float a, float b);
-int compare(double a, double b);
-int compare(const char* a, const char* b);
-
-
-inline int compare(int a, int b)
-{
- return a - b;
-}
-
-inline int compare(short a, short b)
-{
- return a - b;
-}
-
-
-inline int compare(signed char a, signed char b)
-{
- return a - b;
-}
-
-inline int compare(unsigned long a, unsigned long b)
-{
- return (a < b)? -1 : (a > b)? 1 : 0;
-}
-
-inline int compare(unsigned int a, unsigned int b)
-{
- return (a < b)? -1 : (a > b)? 1 : 0;
-}
-
-inline int compare(unsigned short a, unsigned short b)
-{
- return (a < b)? -1 : (a > b)? 1 : 0;
-}
-
-inline int compare(unsigned char a, unsigned char b)
-{
- return (a < b)? -1 : (a > b)? 1 : 0;
-}
-
-inline int compare(float a, float b)
-{
- return (a < b)? -1 : (a > b)? 1 : 0;
-}
-
-inline int compare(double a, double b)
-{
- return (a < b)? -1 : (a > b)? 1 : 0;
-}
-
-inline int compare(const char* a, const char* b)
-{
- return strcmp(a,b);
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/configure.in b/contrib/libg++/libg++/src/configure.in
deleted file mode 100644
index 7b1abbf85749..000000000000
--- a/contrib/libg++/libg++/src/configure.in
+++ /dev/null
@@ -1,45 +0,0 @@
-# This file is a shell script fragment that supplies the information
-# necessary to tailor a template configure script into the configure
-# script appropriate for this directory. For more information, check
-# any existing configure script.
-
-configdirs=""
-srctrigger=Integer.cc
-srcname="main libio sources files"
-
-target_makefile_frag=../target-mkfrag
-package_makefile_frag=Make.pack
-
-# per-host:
-
-# per-target:
-
-LIBDIR=yes
-TOLIBGXX=../
-ALL='$(OBJS)'
-EXTRA_DISTCLEAN=rx.h
-MOSTLYCLEAN='*.o pic stamp-picdir core libgxx.list'
-XCINCLUDES='-I../../libio'
-
-(. ${srcdir}/../config.shared) >${package_makefile_frag}
-
-files=../../librx/rx.h
-links=rx.h
-
-# post-target:
-
-rm -f ${package_makefile_frag}
-
-# We need multilib support.
-case ${srcdir} in
-.)
- if [ "${with_target_subdir}" != "." ] ; then
- . ${srcdir}/${with_multisrctop}../../../config-ml.in
- else
- . ${srcdir}/${with_multisrctop}../../config-ml.in
- fi
- ;;
-*)
- . ${srcdir}/../../config-ml.in
- ;;
-esac
diff --git a/contrib/libg++/libg++/src/depend b/contrib/libg++/libg++/src/depend
deleted file mode 100644
index 6934ef42feff..000000000000
--- a/contrib/libg++/libg++/src/depend
+++ /dev/null
@@ -1,849 +0,0 @@
-# AUTOMATICALLY GENERATED BY 'make depend' - DO NOT EDIT
-
-ACG.o: ACG.cc \
- $(srcdir)/ACG.h $(srcdir)/RNG.h \
- ../../libio/_G_config.h
-AllocRing.o: AllocRing.cc \
- $(srcdir)/std.h ../../libio/_G_config.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/stddef \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/stddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdlib \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdlib.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstring \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstring.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdio \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdio.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cerrno \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cerrno.h \
- $(srcdir)/AllocRing.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/new.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/new.h
-Binomial.o: Binomial.cc \
- $(srcdir)/builtin.h \
- $(srcdir)/std.h ../../libio/_G_config.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/stddef \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/stddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdlib \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdlib.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstring \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstring.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdio \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdio.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cerrno \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cerrno.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cmath \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cmath.h \
- $(srcdir)/Random.h \
- $(srcdir)/RNG.h \
- $(srcdir)/Binomial.h
-BitSet.o: BitSet.cc \
- $(srcdir)/BitSet.h \
- $(srcdir)/$(MULTISRCTOP)../../libio/iostream.h \
- $(srcdir)/$(MULTISRCTOP)../../libio/streambuf.h \
- $(srcdir)/$(MULTISRCTOP)../../libio/libio.h \
- ../../libio/_G_config.h \
- $(srcdir)/bitprims.h \
- $(srcdir)/std.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/stddef \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/stddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdlib \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdlib.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstring \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstring.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdio \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdio.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cerrno \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cerrno.h \
- $(srcdir)/Obstack.h \
- $(srcdir)/AllocRing.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/new.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/new.h \
- $(srcdir)/builtin.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cmath \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cmath.h \
- $(srcdir)/$(MULTISRCTOP)../../libio/strstream.h \
- $(srcdir)/$(MULTISRCTOP)../../libio/strfile.h
-BitString.o: BitString.cc \
- $(srcdir)/BitString.h \
- $(srcdir)/$(MULTISRCTOP)../../libio/stream.h \
- $(srcdir)/$(MULTISRCTOP)../../libio/iostream.h \
- $(srcdir)/$(MULTISRCTOP)../../libio/streambuf.h \
- $(srcdir)/$(MULTISRCTOP)../../libio/libio.h \
- ../../libio/_G_config.h \
- $(srcdir)/bitprims.h \
- $(srcdir)/std.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/stddef \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/stddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdlib \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdlib.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstring \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstring.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdio \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdio.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cerrno \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cerrno.h \
- $(srcdir)/Obstack.h \
- $(srcdir)/AllocRing.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/new.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/new.h \
- $(srcdir)/builtin.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cmath \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cmath.h \
- $(srcdir)/$(MULTISRCTOP)../../libio/strstream.h \
- $(srcdir)/$(MULTISRCTOP)../../libio/strfile.h
-CursesW.o: CursesW.cc \
- $(srcdir)/builtin.h \
- $(srcdir)/std.h ../../libio/_G_config.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/stddef \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/stddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdlib \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdlib.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstring \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstring.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdio \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdio.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cerrno \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cerrno.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cmath \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cmath.h \
- $(srcdir)/$(MULTISRCTOP)../../libio/strstream.h \
- $(srcdir)/$(MULTISRCTOP)../../libio/iostream.h \
- $(srcdir)/$(MULTISRCTOP)../../libio/streambuf.h \
- $(srcdir)/$(MULTISRCTOP)../../libio/libio.h \
- $(srcdir)/$(MULTISRCTOP)../../libio/strfile.h \
- $(srcdir)/CursesW.h
-DLList.o: DLList.cc \
- $(srcdir)/$(MULTISRCTOP)../../libio/stream.h \
- $(srcdir)/$(MULTISRCTOP)../../libio/iostream.h \
- $(srcdir)/$(MULTISRCTOP)../../libio/streambuf.h \
- $(srcdir)/$(MULTISRCTOP)../../libio/libio.h \
- ../../libio/_G_config.h $(srcdir)/builtin.h \
- $(srcdir)/std.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/stddef \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/stddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdlib \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdlib.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstring \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstring.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdio \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdio.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cerrno \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cerrno.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cmath \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cmath.h \
- $(srcdir)/DLList.h \
- $(srcdir)/Pix.h
-DiscUnif.o: DiscUnif.cc \
- $(srcdir)/builtin.h \
- $(srcdir)/std.h ../../libio/_G_config.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/stddef \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/stddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdlib \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdlib.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstring \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstring.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdio \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdio.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cerrno \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cerrno.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cmath \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cmath.h \
- $(srcdir)/Random.h \
- $(srcdir)/RNG.h \
- $(srcdir)/DiscUnif.h
-Erlang.o: Erlang.cc \
- $(srcdir)/builtin.h \
- $(srcdir)/std.h ../../libio/_G_config.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/stddef \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/stddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdlib \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdlib.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstring \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstring.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdio \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdio.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cerrno \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cerrno.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cmath \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cmath.h \
- $(srcdir)/Random.h \
- $(srcdir)/RNG.h \
- $(srcdir)/Erlang.h
-Fix.o: Fix.cc \
- $(srcdir)/Fix.h \
- $(srcdir)/$(MULTISRCTOP)../../libio/stream.h \
- $(srcdir)/$(MULTISRCTOP)../../libio/iostream.h \
- $(srcdir)/$(MULTISRCTOP)../../libio/streambuf.h \
- $(srcdir)/$(MULTISRCTOP)../../libio/libio.h \
- ../../libio/_G_config.h $(srcdir)/std.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/stddef \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/stddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdlib \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdlib.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstring \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstring.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdio \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdio.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cerrno \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cerrno.h \
- $(srcdir)/Integer.h \
- $(srcdir)/builtin.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cmath \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cmath.h \
- $(srcdir)/Obstack.h \
- $(srcdir)/AllocRing.h \
- $(srcdir)/$(MULTISRCTOP)../../libio/strstream.h \
- $(srcdir)/$(MULTISRCTOP)../../libio/strfile.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/new.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/new.h
-Fix16.o: Fix16.cc \
- $(srcdir)/Fix16.h \
- $(srcdir)/$(MULTISRCTOP)../../libio/stream.h \
- $(srcdir)/$(MULTISRCTOP)../../libio/iostream.h \
- $(srcdir)/$(MULTISRCTOP)../../libio/streambuf.h \
- $(srcdir)/$(MULTISRCTOP)../../libio/libio.h \
- ../../libio/_G_config.h $(srcdir)/std.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/stddef \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/stddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdlib \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdlib.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstring \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstring.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdio \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdio.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cerrno \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cerrno.h
-Fix24.o: Fix24.cc \
- $(srcdir)/Fix24.h \
- $(srcdir)/$(MULTISRCTOP)../../libio/stream.h \
- $(srcdir)/$(MULTISRCTOP)../../libio/iostream.h \
- $(srcdir)/$(MULTISRCTOP)../../libio/streambuf.h \
- $(srcdir)/$(MULTISRCTOP)../../libio/libio.h \
- ../../libio/_G_config.h $(srcdir)/std.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/stddef \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/stddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdlib \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdlib.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstring \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstring.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdio \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdio.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cerrno \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cerrno.h
-Geom.o: Geom.cc \
- $(srcdir)/builtin.h \
- $(srcdir)/std.h ../../libio/_G_config.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/stddef \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/stddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdlib \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdlib.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstring \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstring.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdio \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdio.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cerrno \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cerrno.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cmath \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cmath.h \
- $(srcdir)/Random.h \
- $(srcdir)/RNG.h \
- $(srcdir)/Geom.h
-GetOpt.o: GetOpt.cc \
- $(srcdir)/GetOpt.h \
- $(srcdir)/std.h ../../libio/_G_config.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/stddef \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/stddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdlib \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdlib.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstring \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstring.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdio \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdio.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cerrno \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cerrno.h
-HypGeom.o: HypGeom.cc \
- $(srcdir)/builtin.h \
- $(srcdir)/std.h ../../libio/_G_config.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/stddef \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/stddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdlib \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdlib.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstring \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstring.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdio \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdio.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cerrno \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cerrno.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cmath \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cmath.h \
- $(srcdir)/Random.h \
- $(srcdir)/RNG.h \
- $(srcdir)/HypGeom.h
-Intdouble.o: Intdouble.cc \
- $(srcdir)/Integer.h \
- $(srcdir)/$(MULTISRCTOP)../../libio/iostream.h \
- $(srcdir)/$(MULTISRCTOP)../../libio/streambuf.h \
- $(srcdir)/$(MULTISRCTOP)../../libio/libio.h \
- ../../libio/_G_config.h $(srcdir)/Integer.hP
-Integer.o: Integer.cc \
- $(srcdir)/Integer.h \
- $(srcdir)/$(MULTISRCTOP)../../libio/iostream.h \
- $(srcdir)/$(MULTISRCTOP)../../libio/streambuf.h \
- $(srcdir)/$(MULTISRCTOP)../../libio/libio.h \
- ../../libio/_G_config.h $(srcdir)/std.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/stddef \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/stddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdlib \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdlib.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstring \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstring.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdio \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdio.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cerrno \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cerrno.h \
- $(srcdir)/Obstack.h \
- $(srcdir)/AllocRing.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/new.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/new.h \
- $(srcdir)/builtin.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cmath \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cmath.h \
- $(srcdir)/Integer.hP
-LogNorm.o: LogNorm.cc \
- $(srcdir)/builtin.h \
- $(srcdir)/std.h ../../libio/_G_config.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/stddef \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/stddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdlib \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdlib.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstring \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstring.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdio \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdio.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cerrno \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cerrno.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cmath \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cmath.h \
- $(srcdir)/Random.h \
- $(srcdir)/RNG.h \
- $(srcdir)/Normal.h \
- $(srcdir)/LogNorm.h
-MLCG.o: MLCG.cc \
- $(srcdir)/MLCG.h $(srcdir)/RNG.h \
- ../../libio/_G_config.h
-NegExp.o: NegExp.cc \
- $(srcdir)/builtin.h \
- $(srcdir)/std.h ../../libio/_G_config.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/stddef \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/stddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdlib \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdlib.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstring \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstring.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdio \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdio.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cerrno \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cerrno.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cmath \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cmath.h \
- $(srcdir)/Random.h \
- $(srcdir)/RNG.h \
- $(srcdir)/NegExp.h
-Normal.o: Normal.cc \
- $(srcdir)/builtin.h \
- $(srcdir)/std.h ../../libio/_G_config.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/stddef \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/stddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdlib \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdlib.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstring \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstring.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdio \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdio.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cerrno \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cerrno.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cmath \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cmath.h \
- $(srcdir)/Random.h \
- $(srcdir)/RNG.h \
- $(srcdir)/Normal.h
-Obstack.o: Obstack.cc \
- $(srcdir)/builtin.h \
- $(srcdir)/std.h ../../libio/_G_config.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/stddef \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/stddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdlib \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdlib.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstring \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstring.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdio \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdio.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cerrno \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cerrno.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cmath \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cmath.h \
- $(srcdir)/Obstack.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/new.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/new.h
-Poisson.o: Poisson.cc \
- $(srcdir)/builtin.h \
- $(srcdir)/std.h ../../libio/_G_config.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/stddef \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/stddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdlib \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdlib.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstring \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstring.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdio \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdio.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cerrno \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cerrno.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cmath \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cmath.h \
- $(srcdir)/Random.h \
- $(srcdir)/RNG.h \
- $(srcdir)/Poisson.h
-RNG.o: RNG.cc \
- $(srcdir)/builtin.h \
- $(srcdir)/std.h ../../libio/_G_config.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/stddef \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/stddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdlib \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdlib.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstring \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstring.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdio \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdio.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cerrno \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cerrno.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cmath \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cmath.h \
- $(srcdir)/RNG.h
-Random.o: Random.cc \
- $(srcdir)/Random.h \
- $(srcdir)/RNG.h \
- ../../libio/_G_config.h
-Rational.o: Rational.cc \
- $(srcdir)/Rational.h \
- $(srcdir)/Integer.h \
- $(srcdir)/$(MULTISRCTOP)../../libio/iostream.h \
- $(srcdir)/$(MULTISRCTOP)../../libio/streambuf.h \
- $(srcdir)/$(MULTISRCTOP)../../libio/libio.h \
- ../../libio/_G_config.h \
- $(srcdir)/std.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/stddef \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/stddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdlib \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdlib.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstring \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstring.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdio \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdio.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cerrno \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cerrno.h \
- $(srcdir)/builtin.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cmath \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cmath.h
-Regex.o: Regex.cc \
- $(srcdir)/std.h ../../libio/_G_config.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/stddef \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/stddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdlib \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdlib.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstring \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstring.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdio \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdio.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cerrno \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cerrno.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/new.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/new.h \
- $(srcdir)/builtin.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cmath \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cmath.h \
- rx.h $(srcdir)/Regex.h
-RndInt.o: RndInt.cc \
- $(srcdir)/RndInt.h \
- $(srcdir)/RNG.h \
- ../../libio/_G_config.h
-SLList.o: SLList.cc \
- $(srcdir)/$(MULTISRCTOP)../../libio/stream.h \
- $(srcdir)/$(MULTISRCTOP)../../libio/iostream.h \
- $(srcdir)/$(MULTISRCTOP)../../libio/streambuf.h \
- $(srcdir)/$(MULTISRCTOP)../../libio/libio.h \
- ../../libio/_G_config.h $(srcdir)/builtin.h \
- $(srcdir)/std.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/stddef \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/stddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdlib \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdlib.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstring \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstring.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdio \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdio.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cerrno \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cerrno.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cmath \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cmath.h \
- $(srcdir)/SLList.h \
- $(srcdir)/Pix.h
-Sample.o: Sample.cc \
- $(srcdir)/$(MULTISRCTOP)../../libio/stream.h \
- $(srcdir)/$(MULTISRCTOP)../../libio/iostream.h \
- $(srcdir)/$(MULTISRCTOP)../../libio/streambuf.h \
- $(srcdir)/$(MULTISRCTOP)../../libio/libio.h \
- ../../libio/_G_config.h $(srcdir)/SmplStat.h \
- $(srcdir)/builtin.h \
- $(srcdir)/std.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/stddef \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/stddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdlib \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdlib.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstring \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstring.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdio \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdio.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cerrno \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cerrno.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cmath \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cmath.h \
- $(srcdir)/SmplHist.h
-SmplHist.o: SmplHist.cc \
- $(srcdir)/$(MULTISRCTOP)../../libio/stream.h \
- $(srcdir)/$(MULTISRCTOP)../../libio/iostream.h \
- $(srcdir)/$(MULTISRCTOP)../../libio/streambuf.h \
- $(srcdir)/$(MULTISRCTOP)../../libio/libio.h \
- ../../libio/_G_config.h $(srcdir)/SmplHist.h \
- $(srcdir)/SmplStat.h \
- $(srcdir)/builtin.h \
- $(srcdir)/std.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/stddef \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/stddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdlib \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdlib.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstring \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstring.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdio \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdio.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cerrno \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cerrno.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cmath \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cmath.h
-SmplStat.o: SmplStat.cc \
- $(srcdir)/$(MULTISRCTOP)../../libio/stream.h \
- $(srcdir)/$(MULTISRCTOP)../../libio/iostream.h \
- $(srcdir)/$(MULTISRCTOP)../../libio/streambuf.h \
- $(srcdir)/$(MULTISRCTOP)../../libio/libio.h \
- ../../libio/_G_config.h $(srcdir)/SmplStat.h \
- $(srcdir)/builtin.h \
- $(srcdir)/std.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/stddef \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/stddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdlib \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdlib.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstring \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstring.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdio \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdio.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cerrno \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cerrno.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cmath \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cmath.h
-String.o: String.cc \
- $(srcdir)/String.h \
- $(srcdir)/$(MULTISRCTOP)../../libio/iostream.h \
- $(srcdir)/$(MULTISRCTOP)../../libio/streambuf.h \
- $(srcdir)/$(MULTISRCTOP)../../libio/libio.h \
- ../../libio/_G_config.h $(srcdir)/Regex.h \
- $(srcdir)/std.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/stddef \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/stddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdlib \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdlib.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstring \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstring.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdio \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdio.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cerrno \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cerrno.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/new.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/new.h \
- $(srcdir)/builtin.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cmath \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cmath.h
-Uniform.o: Uniform.cc \
- $(srcdir)/builtin.h \
- $(srcdir)/std.h ../../libio/_G_config.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/stddef \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/stddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdlib \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdlib.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstring \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstring.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdio \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdio.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cerrno \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cerrno.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cmath \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cmath.h \
- $(srcdir)/Random.h \
- $(srcdir)/RNG.h \
- $(srcdir)/Uniform.h
-Weibull.o: Weibull.cc \
- $(srcdir)/builtin.h \
- $(srcdir)/std.h ../../libio/_G_config.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/stddef \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/stddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdlib \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdlib.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstring \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstring.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdio \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdio.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cerrno \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cerrno.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cmath \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cmath.h \
- $(srcdir)/Random.h \
- $(srcdir)/RNG.h \
- $(srcdir)/Weibull.h
-builtin.o: builtin.cc \
- $(srcdir)/builtin.h \
- $(srcdir)/std.h ../../libio/_G_config.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/stddef \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/stddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdlib \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdlib.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstring \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstring.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdio \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdio.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cerrno \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cerrno.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cmath \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cmath.h
-compare.o: compare.cc \
- $(srcdir)/compare.h \
- $(srcdir)/builtin.h \
- $(srcdir)/std.h ../../libio/_G_config.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/stddef \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/stddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdlib \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdlib.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstring \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstring.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdio \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdio.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cerrno \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cerrno.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cmath \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cmath.h
-dtoa.o: dtoa.cc \
- $(srcdir)/builtin.h \
- $(srcdir)/std.h ../../libio/_G_config.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/stddef \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/stddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdlib \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdlib.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstring \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstring.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdio \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdio.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cerrno \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cerrno.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cmath \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cmath.h \
- $(srcdir)/AllocRing.h
-error.o: error.cc \
- $(srcdir)/builtin.h \
- $(srcdir)/std.h ../../libio/_G_config.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/stddef \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/stddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdlib \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdlib.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstring \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstring.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdio \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdio.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cerrno \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cerrno.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cmath \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cmath.h
-fmtq.o: fmtq.cc \
- $(srcdir)/builtin.h \
- $(srcdir)/std.h ../../libio/_G_config.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/stddef \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/stddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdlib \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdlib.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstring \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstring.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdio \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdio.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cerrno \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cerrno.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cmath \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cmath.h \
- $(srcdir)/AllocRing.h
-gcd.o: gcd.cc \
- $(srcdir)/builtin.h \
- $(srcdir)/std.h ../../libio/_G_config.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/stddef \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/stddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdlib \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdlib.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstring \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstring.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdio \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdio.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cerrno \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cerrno.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cmath \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cmath.h
-hash.o: hash.cc \
- $(srcdir)/builtin.h \
- $(srcdir)/std.h ../../libio/_G_config.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/stddef \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/stddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdlib \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdlib.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstring \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstring.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdio \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdio.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cerrno \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cerrno.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cmath \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cmath.h
-ioob.o: ioob.cc \
- $(srcdir)/Obstack.h \
- $(srcdir)/std.h ../../libio/_G_config.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/stddef \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/stddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdlib \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdlib.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstring \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstring.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdio \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdio.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cerrno \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cerrno.h
-lg.o: lg.cc \
- $(srcdir)/builtin.h \
- $(srcdir)/std.h ../../libio/_G_config.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/stddef \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/stddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdlib \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdlib.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstring \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstring.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdio \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdio.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cerrno \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cerrno.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cmath \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cmath.h
-minmax.o: minmax.cc \
- $(srcdir)/minmax.h ../../libio/_G_config.h
-pow.o: pow.cc \
- $(srcdir)/builtin.h \
- $(srcdir)/std.h ../../libio/_G_config.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/stddef \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/stddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdlib \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdlib.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstring \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstring.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdio \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdio.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cerrno \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cerrno.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cmath \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cmath.h
-sqrt.o: sqrt.cc \
- $(srcdir)/builtin.h \
- $(srcdir)/std.h ../../libio/_G_config.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/stddef \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/stddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstddef.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdlib \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdlib.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstring \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstring.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cstdio \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cstdio.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cerrno \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cerrno.h \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/cmath \
- $(srcdir)/$(MULTISRCTOP)../../libstdc++/std/cmath.h
-bitand.o: bitand.c \
- $(srcdir)/bitprims.h \
- $(srcdir)/bitdo2.h
-bitany.o: bitany.c \
- $(srcdir)/bitprims.h \
- $(srcdir)/bitdo1.h
-bitblt.o: bitblt.c \
- $(srcdir)/bitprims.h \
- $(srcdir)/bitdo2.h
-bitclear.o: bitclear.c \
- $(srcdir)/bitprims.h \
- $(srcdir)/bitdo1.h
-bitcopy.o: bitcopy.c \
- $(srcdir)/bitprims.h \
- $(srcdir)/bitdo2.h
-bitcount.o: bitcount.c \
- $(srcdir)/bitprims.h \
- $(srcdir)/bitdo1.h
-bitinvert.o: bitinvert.c \
- $(srcdir)/bitprims.h \
- $(srcdir)/bitdo1.h
-bitlcomp.o: bitlcomp.c \
- $(srcdir)/bitprims.h
-bitset1.o: bitset1.c \
- $(srcdir)/bitprims.h \
- $(srcdir)/bitdo1.h
-bitxor.o: bitxor.c \
- $(srcdir)/bitprims.h \
- $(srcdir)/bitdo2.h
-malloc.o: malloc.c
-timer.o: timer.c ../../libio/_G_config.h
diff --git a/contrib/libg++/libg++/src/dtoa.cc b/contrib/libg++/libg++/src/dtoa.cc
deleted file mode 100644
index cdc69200e8a1..000000000000
--- a/contrib/libg++/libg++/src/dtoa.cc
+++ /dev/null
@@ -1,335 +0,0 @@
-/*
-Copyright (C) 1990 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <builtin.h>
-#include <math.h>
-#include <values.h>
-#include <AllocRing.h>
-
-extern AllocRing _libgxx_fmtq;
-
-#ifdef __GNUC__ /* cfront cannot compile this routine */
-// OBSOLETE ROUTINE!
-
-char* dtoa(double fpnum, char cvt, int width, int prec)
-{
- // set up workspace
-
- // max possible digits <= those need to show all of prec + exp
- // <= ceil(log10(HUGE)) plus space for null, etc.
-
- const int worksiz = int((M_LN2 / M_LN10) * DMAXEXP) + 8;
-
- // for fractional part
- char fwork[worksiz];
- char* fw = fwork;
-
- // for integer part
- char iwork[worksiz];
- char* iworkend = &iwork[sizeof(iwork) - 1];
- char* iw = iworkend;
- *iw = 0;
-
- // for exponent part
-
- const int eworksiz = int(M_LN2 * _DEXPLEN) + 8;
- char ework[eworksiz];
- char* eworkend = &ework[sizeof(ework) - 1];
- char* ew = eworkend;
- *ew = 0;
-
-#if (_IEEE != 0)
- if (isinf(fpnum))
- {
- char* inffmt = (char *) _libgxx_fmtq.alloc(5);
- char* inffmtp = inffmt;
- if (fpnum < 0)
- *inffmtp++ = '-';
- strcpy(inffmtp, "Inf");
- return inffmt;
- }
-
- if (isnan(fpnum))
- {
- char* nanfmt = (char *) _libgxx_fmtq.alloc(4);
- strcpy(nanfmt, "NaN");
- return nanfmt;
- }
-#endif
-
- // grab sign & make non-negative
- int is_neg = fpnum < 0;
- if (is_neg) fpnum = -fpnum;
-
- // precision matters
-
- if (prec > worksiz - 2) // can't have more prec than supported
- prec = worksiz - 2;
-
- double powprec;
- if (prec == 6)
- powprec = 1.0e6;
- else
- powprec = pow(10.0, (long) prec);
-
- double rounder = 0.5 / powprec;
-
- int f_fmt = cvt == 'f' ||
- ((cvt == 'g') && (fpnum == 0.0 || (fpnum >= 1e-4 && fpnum < powprec)));
-
- int iwidth = 0;
- int fwidth = 0;
- int ewidth = 0;
-
- if (f_fmt) // fixed format
- {
- double ipart;
- double fpart = modf(fpnum, &ipart);
-
- // convert fractional part
-
- if (fpart >= rounder || cvt != 'g')
- {
- fpart += rounder;
- if (fpart >= 1.0)
- {
- ipart += 1.0;
- fpart -= 1.0;
- }
- double ffpart = fpart;
- double ifpart;
- for (int i = 0; i < prec; ++i)
- {
- ffpart = modf(ffpart * 10.0, &ifpart);
- *fw++ = '0' + int(ifpart);
- ++fwidth;
- }
- if (cvt == 'g') // inhibit trailing zeroes if g-fmt
- {
- for (char* p = fw - 1; p >= fwork && *p == '0'; --p)
- {
- *p = 0;
- --fwidth;
- }
- }
- }
-
- // convert integer part
- if (ipart == 0.0)
- {
- if (cvt != 'g' || fwidth < prec || fwidth < width)
- {
- *--iw = '0'; ++iwidth;
- }
- }
- else if (ipart <= double(MAXLONG)) // a useful speedup
- {
- long li = long(ipart);
- while (li != 0)
- {
- *--iw = '0' + (li % 10);
- li = li / 10;
- ++iwidth;
- }
- }
- else // the slow way
- {
- while (ipart > 0.5)
- {
- double ff = modf(ipart / 10.0, &ipart);
- ff = (ff + 0.05) * 10.0;
- *--iw = '0' + int(ff);
- ++iwidth;
- }
- }
-
- // g-fmt: kill part of frac if prec/width exceeded
- if (cvt == 'g')
- {
- int m = prec;
- if (m < width)
- m = width;
- int adj = iwidth + fwidth - m;
- if (adj > fwidth)
- adj = fwidth;
- if (adj > 0)
- {
- for (char* f = &fwork[fwidth-1]; f >= fwork && adj > 0; --adj, --f)
- {
- --fwidth;
- char ch = *f;
- *f = 0;
- if (ch > '5') // properly round: unavoidable propagation
- {
- int carry = 1;
- for (char* p = f - 1; p >= fwork && carry; --p)
- {
- ++*p;
- if (*p > '9')
- *p = '0';
- else
- carry = 0;
- }
- if (carry)
- {
- for (p = iworkend - 1; p >= iw && carry; --p)
- {
- ++*p;
- if (*p > '9')
- *p = '0';
- else
- carry = 0;
- }
- if (carry)
- {
- *--iw = '1';
- ++iwidth;
- --adj;
- }
- }
- }
- }
- }
- }
-
- }
- else // e-fmt
- {
-
- // normalize
- int exp = 0;
- while (fpnum >= 10.0)
- {
- fpnum *= 0.1;
- ++exp;
- }
- double almost_one = 1.0 - rounder;
- while (fpnum > 0.0 && fpnum < almost_one)
- {
- fpnum *= 10.0;
- --exp;
- }
-
- double ipart;
- double fpart = modf(fpnum, &ipart);
-
-
- if (cvt == 'g') // used up one digit for int part...
- {
- --prec;
- powprec /= 10.0;
- rounder = 0.5 / powprec;
- }
-
- // convert fractional part -- almost same as above
- if (fpart >= rounder || cvt != 'g')
- {
- fpart += rounder;
- if (fpart >= 1.0)
- {
- fpart -= 1.0;
- ipart += 1.0;
- if (ipart >= 10.0)
- {
- ++exp;
- ipart /= 10.0;
- fpart /= 10.0;
- }
- }
- double ffpart = fpart;
- double ifpart;
- for (int i = 0; i < prec; ++i)
- {
- ffpart = modf(ffpart * 10.0, &ifpart);
- *fw++ = '0' + int(ifpart);
- ++fwidth;
- }
- if (cvt == 'g') // inhibit trailing zeroes if g-fmt
- {
- for (char* p = fw - 1; p >= fwork && *p == '0'; --p)
- {
- *p = 0;
- --fwidth;
- }
- }
- }
-
-
- // convert exponent
-
- char eneg = exp < 0;
- if (eneg) exp = - exp;
-
- while (exp > 0)
- {
- *--ew = '0' + (exp % 10);
- exp /= 10;
- ++ewidth;
- }
-
- while (ewidth < 2) // ensure at least 2 zeroes
- {
- *--ew = '0';
- ++ewidth;
- }
-
- *--ew = eneg ? '-' : '+';
- *--ew = 'e';
-
- ewidth += 2;
-
- // convert the one-digit integer part
- *--iw = '0' + int(ipart);
- ++iwidth;
-
- }
-
- // arrange everything in returned string
-
- int showdot = cvt != 'g' || fwidth > 0;
-
- int fmtwidth = is_neg + iwidth + showdot + fwidth + ewidth;
-
- int pad = width - fmtwidth;
- if (pad < 0) pad = 0;
-
- char* fmtbase = (char *) _libgxx_fmtq.alloc(fmtwidth + pad + 1);
- char* fmt = fmtbase;
-
- for (int i = 0; i < pad; ++i) *fmt++ = ' ';
-
- if (is_neg) *fmt++ = '-';
-
- for (i = 0; i < iwidth; ++i) *fmt++ = *iw++;
-
- if (showdot)
- {
- *fmt++ = '.';
- fw = fwork;
- for (i = 0; i < fwidth; ++i) *fmt++ = *fw++;
- }
-
- for (i = 0; i < ewidth; ++i) *fmt++ = *ew++;
-
- *fmt = 0;
-
- return fmtbase;
-}
-#endif
diff --git a/contrib/libg++/libg++/src/error.cc b/contrib/libg++/libg++/src/error.cc
deleted file mode 100644
index 7d163d67631e..000000000000
--- a/contrib/libg++/libg++/src/error.cc
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
-Copyright (C) 1990 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <builtin.h>
-
-void default_one_arg_error_handler(const char* msg)
-{
- fputs("Error: ", stderr);
- fputs(msg, stderr);
- fputs("\n", stderr);
- abort();
-}
-
-
-void default_two_arg_error_handler(const char* kind, const char* msg)
-{
- fputs(kind, stderr);
- fputs(" Error: ", stderr);
- fputs(msg, stderr);
- fputs("\n", stderr);
- abort();
-}
-
-two_arg_error_handler_t lib_error_handler = default_two_arg_error_handler;
-
-two_arg_error_handler_t set_lib_error_handler(two_arg_error_handler_t f)
-{
- two_arg_error_handler_t old = lib_error_handler;
- lib_error_handler = f;
- return old;
-}
-
diff --git a/contrib/libg++/libg++/src/fmtq.cc b/contrib/libg++/libg++/src/fmtq.cc
deleted file mode 100644
index 2a01073699be..000000000000
--- a/contrib/libg++/libg++/src/fmtq.cc
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
-Copyright (C) 1990 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <builtin.h>
-#include <AllocRing.h>
-
-// AllocRings are used for output operations
-// We guaranteee that the last _libgxx_maxfmt formats
-// will be intact
-
-static const int _libgxx_maxfmt = 20;
-AllocRing _libgxx_fmtq(_libgxx_maxfmt);
diff --git a/contrib/libg++/libg++/src/gcd.cc b/contrib/libg++/libg++/src/gcd.cc
deleted file mode 100644
index 602b55f87969..000000000000
--- a/contrib/libg++/libg++/src/gcd.cc
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
-Copyright (C) 1990 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <builtin.h>
-
-
-/*
- common functions on built-in types
-*/
-
-long gcd(long x, long y) // euclid's algorithm
-{
- long a = abs(x);
- long b = abs(y);
-
- long tmp;
-
- if (b > a)
- {
- tmp = a; a = b; b = tmp;
- }
- for(;;)
- {
- if (b == 0)
- return a;
- else if (b == 1)
- return b;
- else
- {
- tmp = b;
- b = a % b;
- a = tmp;
- }
- }
-}
diff --git a/contrib/libg++/libg++/src/gen/AVLMap.ccP b/contrib/libg++/libg++/src/gen/AVLMap.ccP
deleted file mode 100644
index 0e2c63542ad6..000000000000
--- a/contrib/libg++/libg++/src/gen/AVLMap.ccP
+++ /dev/null
@@ -1,614 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <stream.h>
-#include "<T>.<C>.AVLMap.h"
-
-
-/*
- constants & inlines for maintaining balance & thread status in tree nodes
-*/
-
-#define AVLBALANCEMASK 3
-#define AVLBALANCED 0
-#define AVLLEFTHEAVY 1
-#define AVLRIGHTHEAVY 2
-
-#define LTHREADBIT 4
-#define RTHREADBIT 8
-
-
-static inline int bf(<T><C>AVLNode* t)
-{
- return t->stat & AVLBALANCEMASK;
-}
-
-static inline void set_bf(<T><C>AVLNode* t, int b)
-{
- t->stat = (t->stat & ~AVLBALANCEMASK) | (b & AVLBALANCEMASK);
-}
-
-
-static inline int rthread(<T><C>AVLNode* t)
-{
- return t->stat & RTHREADBIT;
-}
-
-static inline void set_rthread(<T><C>AVLNode* t, int b)
-{
- if (b)
- t->stat |= RTHREADBIT;
- else
- t->stat &= ~RTHREADBIT;
-}
-
-static inline int lthread(<T><C>AVLNode* t)
-{
- return t->stat & LTHREADBIT;
-}
-
-static inline void set_lthread(<T><C>AVLNode* t, int b)
-{
- if (b)
- t->stat |= LTHREADBIT;
- else
- t->stat &= ~LTHREADBIT;
-}
-
-/*
- traversal primitives
-*/
-
-
-<T><C>AVLNode* <T><C>AVLMap::leftmost()
-{
- <T><C>AVLNode* t = root;
- if (t != 0) while (t->lt != 0) t = t->lt;
- return t;
-}
-
-<T><C>AVLNode* <T><C>AVLMap::rightmost()
-{
- <T><C>AVLNode* t = root;
- if (t != 0) while (t->rt != 0) t = t->rt;
- return t;
-}
-
-<T><C>AVLNode* <T><C>AVLMap::succ(<T><C>AVLNode* t)
-{
- <T><C>AVLNode* r = t->rt;
- if (!rthread(t)) while (!lthread(r)) r = r->lt;
- return r;
-}
-
-<T><C>AVLNode* <T><C>AVLMap::pred(<T><C>AVLNode* t)
-{
- <T><C>AVLNode* l = t->lt;
- if (!lthread(t)) while (!rthread(l)) l = l->rt;
- return l;
-}
-
-
-Pix <T><C>AVLMap::seek(<T&> key)
-{
- <T><C>AVLNode* t = root;
- if (t == 0)
- return 0;
- for (;;)
- {
- int cmp = <T>CMP(key, t->item);
- if (cmp == 0)
- return Pix(t);
- else if (cmp < 0)
- {
- if (lthread(t))
- return 0;
- else
- t = t->lt;
- }
- else if (rthread(t))
- return 0;
- else
- t = t->rt;
- }
-}
-
-
-/*
- The combination of threads and AVL bits make adding & deleting
- interesting, but very awkward.
-
- We use the following statics to avoid passing them around recursively
-*/
-
-static int _need_rebalancing; // to send back balance info from rec. calls
-static <T>* _target_item; // add/del_item target
-static <T><C>AVLNode* _found_node; // returned added/deleted node
-static int _already_found; // for deletion subcases
-
-
-void <T><C>AVLMap:: _add(<T><C>AVLNode*& t)
-{
- int cmp = <T>CMP(*_target_item, t->item);
- if (cmp == 0)
- {
- _found_node = t;
- return;
- }
- else if (cmp < 0)
- {
- if (lthread(t))
- {
- ++count;
- _found_node = new <T><C>AVLNode(*_target_item, def);
- set_lthread(_found_node, 1);
- set_rthread(_found_node, 1);
- _found_node->lt = t->lt;
- _found_node->rt = t;
- t->lt = _found_node;
- set_lthread(t, 0);
- _need_rebalancing = 1;
- }
- else
- _add(t->lt);
- if (_need_rebalancing)
- {
- switch(bf(t))
- {
- case AVLRIGHTHEAVY:
- set_bf(t, AVLBALANCED);
- _need_rebalancing = 0;
- return;
- case AVLBALANCED:
- set_bf(t, AVLLEFTHEAVY);
- return;
- case AVLLEFTHEAVY:
- {
- <T><C>AVLNode* l = t->lt;
- if (bf(l) == AVLLEFTHEAVY)
- {
- if (rthread(l))
- t->lt = l;
- else
- t->lt = l->rt;
- set_lthread(t, rthread(l));
- l->rt = t;
- set_rthread(l, 0);
- set_bf(t, AVLBALANCED);
- set_bf(l, AVLBALANCED);
- t = l;
- _need_rebalancing = 0;
- }
- else
- {
- <T><C>AVLNode* r = l->rt;
- set_rthread(l, lthread(r));
- if (lthread(r))
- l->rt = r;
- else
- l->rt = r->lt;
- r->lt = l;
- set_lthread(r, 0);
- set_lthread(t, rthread(r));
- if (rthread(r))
- t->lt = r;
- else
- t->lt = r->rt;
- r->rt = t;
- set_rthread(r, 0);
- if (bf(r) == AVLLEFTHEAVY)
- set_bf(t, AVLRIGHTHEAVY);
- else
- set_bf(t, AVLBALANCED);
- if (bf(r) == AVLRIGHTHEAVY)
- set_bf(l, AVLLEFTHEAVY);
- else
- set_bf(l, AVLBALANCED);
- set_bf(r, AVLBALANCED);
- t = r;
- _need_rebalancing = 0;
- return;
- }
- }
- }
- }
- }
- else
- {
- if (rthread(t))
- {
- ++count;
- _found_node = new <T><C>AVLNode(*_target_item, def);
- set_rthread(t, 0);
- set_lthread(_found_node, 1);
- set_rthread(_found_node, 1);
- _found_node->lt = t;
- _found_node->rt = t->rt;
- t->rt = _found_node;
- _need_rebalancing = 1;
- }
- else
- _add(t->rt);
- if (_need_rebalancing)
- {
- switch(bf(t))
- {
- case AVLLEFTHEAVY:
- set_bf(t, AVLBALANCED);
- _need_rebalancing = 0;
- return;
- case AVLBALANCED:
- set_bf(t, AVLRIGHTHEAVY);
- return;
- case AVLRIGHTHEAVY:
- {
- <T><C>AVLNode* r = t->rt;
- if (bf(r) == AVLRIGHTHEAVY)
- {
- if (lthread(r))
- t->rt = r;
- else
- t->rt = r->lt;
- set_rthread(t, lthread(r));
- r->lt = t;
- set_lthread(r, 0);
- set_bf(t, AVLBALANCED);
- set_bf(r, AVLBALANCED);
- t = r;
- _need_rebalancing = 0;
- }
- else
- {
- <T><C>AVLNode* l = r->lt;
- set_lthread(r, rthread(l));
- if (rthread(l))
- r->lt = l;
- else
- r->lt = l->rt;
- l->rt = r;
- set_rthread(l, 0);
- set_rthread(t, lthread(l));
- if (lthread(l))
- t->rt = l;
- else
- t->rt = l->lt;
- l->lt = t;
- set_lthread(l, 0);
- if (bf(l) == AVLRIGHTHEAVY)
- set_bf(t, AVLLEFTHEAVY);
- else
- set_bf(t, AVLBALANCED);
- if (bf(l) == AVLLEFTHEAVY)
- set_bf(r, AVLRIGHTHEAVY);
- else
- set_bf(r, AVLBALANCED);
- set_bf(l, AVLBALANCED);
- t = l;
- _need_rebalancing = 0;
- return;
- }
- }
- }
- }
- }
-}
-
-
-<C>& <T><C>AVLMap::operator [] (<T&> item)
-{
- if (root == 0)
- {
- ++count;
- root = new <T><C>AVLNode(item, def);
- set_rthread(root, 1);
- set_lthread(root, 1);
- return root->cont;
- }
- else
- {
- _target_item = &item;
- _need_rebalancing = 0;
- _add(root);
- return _found_node->cont;
- }
-}
-
-
-void <T><C>AVLMap::_del(<T><C>AVLNode* par, <T><C>AVLNode*& t)
-{
- int comp;
- if (_already_found)
- {
- if (rthread(t))
- comp = 0;
- else
- comp = 1;
- }
- else
- comp = <T>CMP(*_target_item, t->item);
- if (comp == 0)
- {
- if (lthread(t) && rthread(t))
- {
- _found_node = t;
- if (t == par->lt)
- {
- set_lthread(par, 1);
- par->lt = t->lt;
- }
- else
- {
- set_rthread(par, 1);
- par->rt = t->rt;
- }
- _need_rebalancing = 1;
- return;
- }
- else if (lthread(t))
- {
- _found_node = t;
- <T><C>AVLNode* s = succ(t);
- if (s != 0 && lthread(s))
- s->lt = t->lt;
- t = t->rt;
- _need_rebalancing = 1;
- return;
- }
- else if (rthread(t))
- {
- _found_node = t;
- <T><C>AVLNode* p = pred(t);
- if (p != 0 && rthread(p))
- p->rt = t->rt;
- t = t->lt;
- _need_rebalancing = 1;
- return;
- }
- else // replace item & find someone deletable
- {
- <T><C>AVLNode* p = pred(t);
- t->item = p->item;
- t->cont = p->cont;
- _already_found = 1;
- comp = -1; // fall through below to left
- }
- }
-
- if (comp < 0)
- {
- if (lthread(t))
- return;
- _del(t, t->lt);
- if (!_need_rebalancing)
- return;
- switch (bf(t))
- {
- case AVLLEFTHEAVY:
- set_bf(t, AVLBALANCED);
- return;
- case AVLBALANCED:
- set_bf(t, AVLRIGHTHEAVY);
- _need_rebalancing = 0;
- return;
- case AVLRIGHTHEAVY:
- {
- <T><C>AVLNode* r = t->rt;
- switch (bf(r))
- {
- case AVLBALANCED:
- if (lthread(r))
- t->rt = r;
- else
- t->rt = r->lt;
- set_rthread(t, lthread(r));
- r->lt = t;
- set_lthread(r, 0);
- set_bf(t, AVLRIGHTHEAVY);
- set_bf(r, AVLLEFTHEAVY);
- _need_rebalancing = 0;
- t = r;
- return;
- case AVLRIGHTHEAVY:
- if (lthread(r))
- t->rt = r;
- else
- t->rt = r->lt;
- set_rthread(t, lthread(r));
- r->lt = t;
- set_lthread(r, 0);
- set_bf(t, AVLBALANCED);
- set_bf(r, AVLBALANCED);
- t = r;
- return;
- case AVLLEFTHEAVY:
- {
- <T><C>AVLNode* l = r->lt;
- set_lthread(r, rthread(l));
- if (rthread(l))
- r->lt = l;
- else
- r->lt = l->rt;
- l->rt = r;
- set_rthread(l, 0);
- set_rthread(t, lthread(l));
- if (lthread(l))
- t->rt = l;
- else
- t->rt = l->lt;
- l->lt = t;
- set_lthread(l, 0);
- if (bf(l) == AVLRIGHTHEAVY)
- set_bf(t, AVLLEFTHEAVY);
- else
- set_bf(t, AVLBALANCED);
- if (bf(l) == AVLLEFTHEAVY)
- set_bf(r, AVLRIGHTHEAVY);
- else
- set_bf(r, AVLBALANCED);
- set_bf(l, AVLBALANCED);
- t = l;
- return;
- }
- }
- }
- }
- }
- else
- {
- if (rthread(t))
- return;
- _del(t, t->rt);
- if (!_need_rebalancing)
- return;
- switch (bf(t))
- {
- case AVLRIGHTHEAVY:
- set_bf(t, AVLBALANCED);
- return;
- case AVLBALANCED:
- set_bf(t, AVLLEFTHEAVY);
- _need_rebalancing = 0;
- return;
- case AVLLEFTHEAVY:
- {
- <T><C>AVLNode* l = t->lt;
- switch (bf(l))
- {
- case AVLBALANCED:
- if (rthread(l))
- t->lt = l;
- else
- t->lt = l->rt;
- set_lthread(t, rthread(l));
- l->rt = t;
- set_rthread(l, 0);
- set_bf(t, AVLLEFTHEAVY);
- set_bf(l, AVLRIGHTHEAVY);
- _need_rebalancing = 0;
- t = l;
- return;
- case AVLLEFTHEAVY:
- if (rthread(l))
- t->lt = l;
- else
- t->lt = l->rt;
- set_lthread(t, rthread(l));
- l->rt = t;
- set_rthread(l, 0);
- set_bf(t, AVLBALANCED);
- set_bf(l, AVLBALANCED);
- t = l;
- return;
- case AVLRIGHTHEAVY:
- {
- <T><C>AVLNode* r = l->rt;
- set_rthread(l, lthread(r));
- if (lthread(r))
- l->rt = r;
- else
- l->rt = r->lt;
- r->lt = l;
- set_lthread(r, 0);
- set_lthread(t, rthread(r));
- if (rthread(r))
- t->lt = r;
- else
- t->lt = r->rt;
- r->rt = t;
- set_rthread(r, 0);
- if (bf(r) == AVLLEFTHEAVY)
- set_bf(t, AVLRIGHTHEAVY);
- else
- set_bf(t, AVLBALANCED);
- if (bf(r) == AVLRIGHTHEAVY)
- set_bf(l, AVLLEFTHEAVY);
- else
- set_bf(l, AVLBALANCED);
- set_bf(r, AVLBALANCED);
- t = r;
- return;
- }
- }
- }
- }
- }
-}
-
-
-
-void <T><C>AVLMap::del(<T&> item)
-{
- if (root == 0) return;
- _need_rebalancing = 0;
- _already_found = 0;
- _found_node = 0;
- _target_item = &item;
- _del(root, root);
- if (_found_node)
- {
- delete(_found_node);
- if (--count == 0)
- root = 0;
- }
-}
-
-void <T><C>AVLMap::_kill(<T><C>AVLNode* t)
-{
- if (t != 0)
- {
- if (!lthread(t)) _kill(t->lt);
- if (!rthread(t)) _kill(t->rt);
- delete t;
- }
-}
-
-
-<T><C>AVLMap::<T><C>AVLMap(<T><C>AVLMap& b) :<T><C>Map(b.def)
-{
- root = 0;
- count = 0;
- for (Pix i = b.first(); i != 0; b.next(i))
- (*this)[b.key(i)] = b.contents(i);
-}
-
-
-int <T><C>AVLMap::OK()
-{
- int v = 1;
- if (root == 0)
- v = count == 0;
- else
- {
- int n = 1;
- <T><C>AVLNode* trail = leftmost();
- <T><C>AVLNode* t = succ(trail);
- while (t != 0)
- {
- ++n;
- v &= <T>CMP(trail->item, t->item) < 0;
- trail = t;
- t = succ(t);
- }
- v &= n == count;
- }
- if (!v) error("invariant failure");
- return v;
-}
diff --git a/contrib/libg++/libg++/src/gen/AVLMap.hP b/contrib/libg++/libg++/src/gen/AVLMap.hP
deleted file mode 100644
index a5c0884be0dc..000000000000
--- a/contrib/libg++/libg++/src/gen/AVLMap.hP
+++ /dev/null
@@ -1,141 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#ifndef _<T><C>AVLMap_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _<T><C>AVLMap_h 1
-
-#include "<T>.<C>.Map.h"
-
-struct <T><C>AVLNode
-{
- <T><C>AVLNode* lt;
- <T><C>AVLNode* rt;
- <T> item;
- <C> cont;
- char stat;
- <T><C>AVLNode(<T&> h, <C&> c,
- <T><C>AVLNode* l=0, <T><C>AVLNode* r=0);
- ~<T><C>AVLNode();
-};
-
-inline <T><C>AVLNode::<T><C>AVLNode(<T&> h, <C&> c,
- <T><C>AVLNode* l, <T><C>AVLNode* r)
- :lt(l), rt(r), item(h), cont(c), stat(0) {}
-
-inline <T><C>AVLNode::~<T><C>AVLNode() {}
-
-typedef <T><C>AVLNode* <T><C>AVLNodePtr;
-
-
-class <T><C>AVLMap : public <T><C>Map
-{
-protected:
- <T><C>AVLNode* root;
-
- <T><C>AVLNode* leftmost();
- <T><C>AVLNode* rightmost();
- <T><C>AVLNode* pred(<T><C>AVLNode* t);
- <T><C>AVLNode* succ(<T><C>AVLNode* t);
- void _kill(<T><C>AVLNode* t);
- void _add(<T><C>AVLNode*& t);
- void _del(<T><C>AVLNode* p, <T><C>AVLNode*& t);
-
-public:
- <T><C>AVLMap(<C&> dflt);
- <T><C>AVLMap(<T><C>AVLMap& a);
- inline ~<T><C>AVLMap();
-
- <C>& operator [] (<T&> key);
-
- void del(<T&> key);
-
- inline Pix first();
- inline void next(Pix& i);
- inline <T>& key(Pix i);
- inline <C>& contents(Pix i);
-
- Pix seek(<T&> key);
- inline int contains(<T&> key);
-
- inline void clear();
-
- Pix last();
- void prev(Pix& i);
-
- int OK();
-};
-
-inline <T><C>AVLMap::~<T><C>AVLMap()
-{
- _kill(root);
-}
-
-inline <T><C>AVLMap::<T><C>AVLMap(<C&> dflt) :<T><C>Map(dflt)
-{
- root = 0;
-}
-
-inline Pix <T><C>AVLMap::first()
-{
- return Pix(leftmost());
-}
-
-inline Pix <T><C>AVLMap::last()
-{
- return Pix(rightmost());
-}
-
-inline void <T><C>AVLMap::next(Pix& i)
-{
- if (i != 0) i = Pix(succ((<T><C>AVLNode*)i));
-}
-
-inline void <T><C>AVLMap::prev(Pix& i)
-{
- if (i != 0) i = Pix(pred((<T><C>AVLNode*)i));
-}
-
-inline <T>& <T><C>AVLMap::key(Pix i)
-{
- if (i == 0) error("null Pix");
- return ((<T><C>AVLNode*)i)->item;
-}
-
-inline <C>& <T><C>AVLMap::contents(Pix i)
-{
- if (i == 0) error("null Pix");
- return ((<T><C>AVLNode*)i)->cont;
-}
-
-inline void <T><C>AVLMap::clear()
-{
- _kill(root);
- count = 0;
- root = 0;
-}
-
-inline int <T><C>AVLMap::contains(<T&> key)
-{
- return seek(key) != 0;
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/gen/AVLSet.ccP b/contrib/libg++/libg++/src/gen/AVLSet.ccP
deleted file mode 100644
index 98c07d189149..000000000000
--- a/contrib/libg++/libg++/src/gen/AVLSet.ccP
+++ /dev/null
@@ -1,892 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <stream.h>
-#include "<T>.AVLSet.h"
-#include <stdlib.h>
-
-
-/*
- constants & inlines for maintaining balance & thread status in tree nodes
-*/
-
-#define AVLBALANCEMASK 3
-#define AVLBALANCED 0
-#define AVLLEFTHEAVY 1
-#define AVLRIGHTHEAVY 2
-
-#define LTHREADBIT 4
-#define RTHREADBIT 8
-
-
-static inline int bf(<T>AVLNode* t)
-{
- return t->stat & AVLBALANCEMASK;
-}
-
-static inline void set_bf(<T>AVLNode* t, int b)
-{
- t->stat = (t->stat & ~AVLBALANCEMASK) | (b & AVLBALANCEMASK);
-}
-
-
-static inline int rthread(<T>AVLNode* t)
-{
- return t->stat & RTHREADBIT;
-}
-
-static inline void set_rthread(<T>AVLNode* t, int b)
-{
- if (b)
- t->stat |= RTHREADBIT;
- else
- t->stat &= ~RTHREADBIT;
-}
-
-static inline int lthread(<T>AVLNode* t)
-{
- return t->stat & LTHREADBIT;
-}
-
-static inline void set_lthread(<T>AVLNode* t, int b)
-{
- if (b)
- t->stat |= LTHREADBIT;
- else
- t->stat &= ~LTHREADBIT;
-}
-
-/*
- traversal primitives
-*/
-
-
-<T>AVLNode* <T>AVLSet::leftmost()
-{
- <T>AVLNode* t = root;
- if (t != 0) while (t->lt != 0) t = t->lt;
- return t;
-}
-
-<T>AVLNode* <T>AVLSet::rightmost()
-{
- <T>AVLNode* t = root;
- if (t != 0) while (t->rt != 0) t = t->rt;
- return t;
-}
-
-<T>AVLNode* <T>AVLSet::succ(<T>AVLNode* t)
-{
- <T>AVLNode* r = t->rt;
- if (!rthread(t)) while (!lthread(r)) r = r->lt;
- return r;
-}
-
-<T>AVLNode* <T>AVLSet::pred(<T>AVLNode* t)
-{
- <T>AVLNode* l = t->lt;
- if (!lthread(t)) while (!rthread(l)) l = l->rt;
- return l;
-}
-
-
-Pix <T>AVLSet::seek(<T&> key)
-{
- <T>AVLNode* t = root;
- if (t == 0)
- return 0;
- for (;;)
- {
- int cmp = <T>CMP(key, t->item);
- if (cmp == 0)
- return Pix(t);
- else if (cmp < 0)
- {
- if (lthread(t))
- return 0;
- else
- t = t->lt;
- }
- else if (rthread(t))
- return 0;
- else
- t = t->rt;
- }
-}
-
-
-/*
- The combination of threads and AVL bits make adding & deleting
- interesting, but very awkward.
-
- We use the following statics to avoid passing them around recursively
-*/
-
-static int _need_rebalancing; // to send back balance info from rec. calls
-static <T>* _target_item; // add/del_item target
-static <T>AVLNode* _found_node; // returned added/deleted node
-static int _already_found; // for deletion subcases
-
-static <T>AVLNode** _hold_nodes; // used for rebuilding trees
-static int _max_hold_index; // # elements-1 in _hold_nodes
-
-
-void <T>AVLSet:: _add(<T>AVLNode*& t)
-{
- int cmp = <T>CMP(*_target_item, t->item);
- if (cmp == 0)
- {
- _found_node = t;
- return;
- }
- else if (cmp < 0)
- {
- if (lthread(t))
- {
- ++count;
- _found_node = new <T>AVLNode(*_target_item);
- set_lthread(_found_node, 1);
- set_rthread(_found_node, 1);
- _found_node->lt = t->lt;
- _found_node->rt = t;
- t->lt = _found_node;
- set_lthread(t, 0);
- _need_rebalancing = 1;
- }
- else
- _add(t->lt);
- if (_need_rebalancing)
- {
- switch(bf(t))
- {
- case AVLRIGHTHEAVY:
- set_bf(t, AVLBALANCED);
- _need_rebalancing = 0;
- return;
- case AVLBALANCED:
- set_bf(t, AVLLEFTHEAVY);
- return;
- case AVLLEFTHEAVY:
- {
- <T>AVLNode* l = t->lt;
- if (bf(l) == AVLLEFTHEAVY)
- {
- if (rthread(l))
- t->lt = l;
- else
- t->lt = l->rt;
- set_lthread(t, rthread(l));
- l->rt = t;
- set_rthread(l, 0);
- set_bf(t, AVLBALANCED);
- set_bf(l, AVLBALANCED);
- t = l;
- _need_rebalancing = 0;
- }
- else
- {
- <T>AVLNode* r = l->rt;
- set_rthread(l, lthread(r));
- if (lthread(r))
- l->rt = r;
- else
- l->rt = r->lt;
- r->lt = l;
- set_lthread(r, 0);
- set_lthread(t, rthread(r));
- if (rthread(r))
- t->lt = r;
- else
- t->lt = r->rt;
- r->rt = t;
- set_rthread(r, 0);
- if (bf(r) == AVLLEFTHEAVY)
- set_bf(t, AVLRIGHTHEAVY);
- else
- set_bf(t, AVLBALANCED);
- if (bf(r) == AVLRIGHTHEAVY)
- set_bf(l, AVLLEFTHEAVY);
- else
- set_bf(l, AVLBALANCED);
- set_bf(r, AVLBALANCED);
- t = r;
- _need_rebalancing = 0;
- return;
- }
- }
- }
- }
- }
- else
- {
- if (rthread(t))
- {
- ++count;
- _found_node = new <T>AVLNode(*_target_item);
- set_rthread(t, 0);
- set_lthread(_found_node, 1);
- set_rthread(_found_node, 1);
- _found_node->lt = t;
- _found_node->rt = t->rt;
- t->rt = _found_node;
- _need_rebalancing = 1;
- }
- else
- _add(t->rt);
- if (_need_rebalancing)
- {
- switch(bf(t))
- {
- case AVLLEFTHEAVY:
- set_bf(t, AVLBALANCED);
- _need_rebalancing = 0;
- return;
- case AVLBALANCED:
- set_bf(t, AVLRIGHTHEAVY);
- return;
- case AVLRIGHTHEAVY:
- {
- <T>AVLNode* r = t->rt;
- if (bf(r) == AVLRIGHTHEAVY)
- {
- if (lthread(r))
- t->rt = r;
- else
- t->rt = r->lt;
- set_rthread(t, lthread(r));
- r->lt = t;
- set_lthread(r, 0);
- set_bf(t, AVLBALANCED);
- set_bf(r, AVLBALANCED);
- t = r;
- _need_rebalancing = 0;
- }
- else
- {
- <T>AVLNode* l = r->lt;
- set_lthread(r, rthread(l));
- if (rthread(l))
- r->lt = l;
- else
- r->lt = l->rt;
- l->rt = r;
- set_rthread(l, 0);
- set_rthread(t, lthread(l));
- if (lthread(l))
- t->rt = l;
- else
- t->rt = l->lt;
- l->lt = t;
- set_lthread(l, 0);
- if (bf(l) == AVLRIGHTHEAVY)
- set_bf(t, AVLLEFTHEAVY);
- else
- set_bf(t, AVLBALANCED);
- if (bf(l) == AVLLEFTHEAVY)
- set_bf(r, AVLRIGHTHEAVY);
- else
- set_bf(r, AVLBALANCED);
- set_bf(l, AVLBALANCED);
- t = l;
- _need_rebalancing = 0;
- return;
- }
- }
- }
- }
- }
-}
-
-
-Pix <T>AVLSet::add(<T&> item)
-{
- if (root == 0)
- {
- ++count;
- root = new <T>AVLNode(item);
- set_rthread(root, 1);
- set_lthread(root, 1);
- return Pix(root);
- }
- else
- {
- _target_item = &item;
- _need_rebalancing = 0;
- _add(root);
- return Pix(_found_node);
- }
-}
-
-
-void <T>AVLSet::_del(<T>AVLNode* par, <T>AVLNode*& t)
-{
- int comp;
- if (_already_found)
- {
- if (rthread(t))
- comp = 0;
- else
- comp = 1;
- }
- else
- comp = <T>CMP(*_target_item, t->item);
- if (comp == 0)
- {
- if (lthread(t) && rthread(t))
- {
- _found_node = t;
- if (t == par->lt)
- {
- set_lthread(par, 1);
- par->lt = t->lt;
- }
- else
- {
- set_rthread(par, 1);
- par->rt = t->rt;
- }
- _need_rebalancing = 1;
- return;
- }
- else if (lthread(t))
- {
- _found_node = t;
- <T>AVLNode* s = succ(t);
- if (s != 0 && lthread(s))
- s->lt = t->lt;
- t = t->rt;
- _need_rebalancing = 1;
- return;
- }
- else if (rthread(t))
- {
- _found_node = t;
- <T>AVLNode* p = pred(t);
- if (p != 0 && rthread(p))
- p->rt = t->rt;
- t = t->lt;
- _need_rebalancing = 1;
- return;
- }
- else // replace item & find someone deletable
- {
- <T>AVLNode* p = pred(t);
- t->item = p->item;
- _already_found = 1;
- comp = -1; // fall through below to left
- }
- }
-
- if (comp < 0)
- {
- if (lthread(t))
- return;
- _del(t, t->lt);
- if (!_need_rebalancing)
- return;
- switch (bf(t))
- {
- case AVLLEFTHEAVY:
- set_bf(t, AVLBALANCED);
- return;
- case AVLBALANCED:
- set_bf(t, AVLRIGHTHEAVY);
- _need_rebalancing = 0;
- return;
- case AVLRIGHTHEAVY:
- {
- <T>AVLNode* r = t->rt;
- switch (bf(r))
- {
- case AVLBALANCED:
- if (lthread(r))
- t->rt = r;
- else
- t->rt = r->lt;
- set_rthread(t, lthread(r));
- r->lt = t;
- set_lthread(r, 0);
- set_bf(t, AVLRIGHTHEAVY);
- set_bf(r, AVLLEFTHEAVY);
- _need_rebalancing = 0;
- t = r;
- return;
- case AVLRIGHTHEAVY:
- if (lthread(r))
- t->rt = r;
- else
- t->rt = r->lt;
- set_rthread(t, lthread(r));
- r->lt = t;
- set_lthread(r, 0);
- set_bf(t, AVLBALANCED);
- set_bf(r, AVLBALANCED);
- t = r;
- return;
- case AVLLEFTHEAVY:
- {
- <T>AVLNode* l = r->lt;
- set_lthread(r, rthread(l));
- if (rthread(l))
- r->lt = l;
- else
- r->lt = l->rt;
- l->rt = r;
- set_rthread(l, 0);
- set_rthread(t, lthread(l));
- if (lthread(l))
- t->rt = l;
- else
- t->rt = l->lt;
- l->lt = t;
- set_lthread(l, 0);
- if (bf(l) == AVLRIGHTHEAVY)
- set_bf(t, AVLLEFTHEAVY);
- else
- set_bf(t, AVLBALANCED);
- if (bf(l) == AVLLEFTHEAVY)
- set_bf(r, AVLRIGHTHEAVY);
- else
- set_bf(r, AVLBALANCED);
- set_bf(l, AVLBALANCED);
- t = l;
- return;
- }
- }
- }
- }
- }
- else
- {
- if (rthread(t))
- return;
- _del(t, t->rt);
- if (!_need_rebalancing)
- return;
- switch (bf(t))
- {
- case AVLRIGHTHEAVY:
- set_bf(t, AVLBALANCED);
- return;
- case AVLBALANCED:
- set_bf(t, AVLLEFTHEAVY);
- _need_rebalancing = 0;
- return;
- case AVLLEFTHEAVY:
- {
- <T>AVLNode* l = t->lt;
- switch (bf(l))
- {
- case AVLBALANCED:
- if (rthread(l))
- t->lt = l;
- else
- t->lt = l->rt;
- set_lthread(t, rthread(l));
- l->rt = t;
- set_rthread(l, 0);
- set_bf(t, AVLLEFTHEAVY);
- set_bf(l, AVLRIGHTHEAVY);
- _need_rebalancing = 0;
- t = l;
- return;
- case AVLLEFTHEAVY:
- if (rthread(l))
- t->lt = l;
- else
- t->lt = l->rt;
- set_lthread(t, rthread(l));
- l->rt = t;
- set_rthread(l, 0);
- set_bf(t, AVLBALANCED);
- set_bf(l, AVLBALANCED);
- t = l;
- return;
- case AVLRIGHTHEAVY:
- {
- <T>AVLNode* r = l->rt;
- set_rthread(l, lthread(r));
- if (lthread(r))
- l->rt = r;
- else
- l->rt = r->lt;
- r->lt = l;
- set_lthread(r, 0);
- set_lthread(t, rthread(r));
- if (rthread(r))
- t->lt = r;
- else
- t->lt = r->rt;
- r->rt = t;
- set_rthread(r, 0);
- if (bf(r) == AVLLEFTHEAVY)
- set_bf(t, AVLRIGHTHEAVY);
- else
- set_bf(t, AVLBALANCED);
- if (bf(r) == AVLRIGHTHEAVY)
- set_bf(l, AVLLEFTHEAVY);
- else
- set_bf(l, AVLBALANCED);
- set_bf(r, AVLBALANCED);
- t = r;
- return;
- }
- }
- }
- }
- }
-}
-
-
-
-void <T>AVLSet::del(<T&> item)
-{
- if (root == 0) return;
- _need_rebalancing = 0;
- _already_found = 0;
- _found_node = 0;
- _target_item = &item;
- _del(root, root);
- if (_found_node)
- {
- delete(_found_node);
- if (--count == 0)
- root = 0;
- }
-}
-
-// build an ordered array of pointers to tree nodes back into a tree
-// we know that at least one element exists
-
-static <T>AVLNode* _do_treeify(int lo, int hi, int& h)
-{
- int lh, rh;
- int mid = (lo + hi) / 2;
- <T>AVLNode* t = _hold_nodes[mid];
- if (lo > mid - 1)
- {
- set_lthread(t, 1);
- if (mid == 0)
- t->lt = 0;
- else
- t->lt = _hold_nodes[mid-1];
- lh = 0;
- }
- else
- {
- set_lthread(t, 0);
- t->lt = _do_treeify(lo, mid-1, lh);
- }
- if (hi < mid + 1)
- {
- set_rthread(t, 1);
- if (mid == _max_hold_index)
- t->rt = 0;
- else
- t->rt = _hold_nodes[mid+1];
- rh = 0;
- }
- else
- {
- set_rthread(t, 0);
- t->rt = _do_treeify(mid+1, hi, rh);
- }
- if (lh == rh)
- {
- set_bf(t, AVLBALANCED);
- h = lh + 1;
- }
- else if (lh == rh - 1)
- {
- set_bf(t, AVLRIGHTHEAVY);
- h = rh + 1;
- }
- else if (rh == lh - 1)
- {
- set_bf(t, AVLLEFTHEAVY);
- h = lh + 1;
- }
- else // can't happen
- abort();
-
- return t;
-}
-
-static <T>AVLNode* _treeify(int n)
-{
- <T>AVLNode* t;
- if (n == 0)
- t = 0;
- else
- {
- int b;
- _max_hold_index = n-1;
- t = _do_treeify(0, _max_hold_index, b);
- }
- delete _hold_nodes;
- return t;
-}
-
-
-void <T>AVLSet::_kill(<T>AVLNode* t)
-{
- if (t != 0)
- {
- if (!lthread(t)) _kill(t->lt);
- if (!rthread(t)) _kill(t->rt);
- delete t;
- }
-}
-
-
-<T>AVLSet::<T>AVLSet(<T>AVLSet& b)
-{
- if ((count = b.count) == 0)
- {
- root = 0;
- }
- else
- {
- _hold_nodes = new <T>AVLNodePtr [count];
- <T>AVLNode* t = b.leftmost();
- int i = 0;
- while (t != 0)
- {
- _hold_nodes[i++] = new <T>AVLNode(t->item);
- t = b.succ(t);
- }
- root = _treeify(count);
- }
-}
-
-
-int <T>AVLSet::operator == (<T>AVLSet& y)
-{
- if (count != y.count)
- return 0;
- else
- {
- <T>AVLNode* t = leftmost();
- <T>AVLNode* u = y.leftmost();
- for (;;)
- {
- if (t == 0)
- return 1;
- else if (!(<T>EQ(t->item, u->item)))
- return 0;
- else
- {
- t = succ(t);
- u = y.succ(u);
- }
- }
- }
-}
-
-int <T>AVLSet::operator <= (<T>AVLSet& y)
-{
- if (count > y.count)
- return 0;
- else
- {
- <T>AVLNode* t = leftmost();
- <T>AVLNode* u = y.leftmost();
- for (;;)
- {
- if (t == 0)
- return 1;
- else if (u == 0)
- return 0;
- int cmp = <T>CMP(t->item, u->item);
- if (cmp == 0)
- {
- t = succ(t);
- u = y.succ(u);
- }
- else if (cmp < 0)
- return 0;
- else
- u = y.succ(u);
- }
- }
-}
-
-void <T>AVLSet::operator |=(<T>AVLSet& y)
-{
- <T>AVLNode* t = leftmost();
- <T>AVLNode* u = y.leftmost();
- int rsize = count + y.count;
- _hold_nodes = new <T>AVLNodePtr [rsize];
- int k = 0;
- for (;;)
- {
- if (t == 0)
- {
- while (u != 0)
- {
- _hold_nodes[k++] = new <T>AVLNode(u->item);
- u = y.succ(u);
- }
- break;
- }
- else if (u == 0)
- {
- while (t != 0)
- {
- _hold_nodes[k++] = t;
- t = succ(t);
- }
- break;
- }
- int cmp = <T>CMP(t->item, u->item);
- if (cmp == 0)
- {
- _hold_nodes[k++] = t;
- t = succ(t);
- u = y.succ(u);
- }
- else if (cmp < 0)
- {
- _hold_nodes[k++] = t;
- t = succ(t);
- }
- else
- {
- _hold_nodes[k++] = new <T>AVLNode(u->item);
- u = y.succ(u);
- }
- }
- root = _treeify(k);
- count = k;
-}
-
-void <T>AVLSet::operator &= (<T>AVLSet& y)
-{
- <T>AVLNode* t = leftmost();
- <T>AVLNode* u = y.leftmost();
- int rsize = (count < y.count)? count : y.count;
- _hold_nodes = new <T>AVLNodePtr [rsize];
- int k = 0;
- for (;;)
- {
- if (t == 0)
- break;
- if (u == 0)
- {
- while (t != 0)
- {
- <T>AVLNode* tmp = succ(t);
- delete t;
- t = tmp;
- }
- break;
- }
- int cmp = <T>CMP(t->item, u->item);
- if (cmp == 0)
- {
- _hold_nodes[k++] = t;
- t = succ(t);
- u = y.succ(u);
- }
- else if (cmp < 0)
- {
- <T>AVLNode* tmp = succ(t);
- delete t;
- t = tmp;
- }
- else
- u = y.succ(u);
- }
- root = _treeify(k);
- count = k;
-}
-
-
-void <T>AVLSet::operator -=(<T>AVLSet& y)
-{
- <T>AVLNode* t = leftmost();
- <T>AVLNode* u = y.leftmost();
- int rsize = count;
- _hold_nodes = new <T>AVLNodePtr [rsize];
- int k = 0;
- for (;;)
- {
- if (t == 0)
- break;
- else if (u == 0)
- {
- while (t != 0)
- {
- _hold_nodes[k++] = t;
- t = succ(t);
- }
- break;
- }
- int cmp = <T>CMP(t->item, u->item);
- if (cmp == 0)
- {
- <T>AVLNode* tmp = succ(t);
- delete t;
- t = tmp;
- u = y.succ(u);
- }
- else if (cmp < 0)
- {
- _hold_nodes[k++] = t;
- t = succ(t);
- }
- else
- u = y.succ(u);
- }
- root = _treeify(k);
- count = k;
-}
-
-int <T>AVLSet::owns(Pix i)
-{
- if (i == 0) return 0;
- for (<T>AVLNode* t = leftmost(); t != 0; t = succ(t))
- if (Pix(t) == i) return 1;
- return 0;
-}
-
-int <T>AVLSet::OK()
-{
- int v = 1;
- if (root == 0)
- v = count == 0;
- else
- {
- int n = 1;
- <T>AVLNode* trail = leftmost();
- <T>AVLNode* t = succ(trail);
- while (t != 0)
- {
- ++n;
- v &= <T>CMP(trail->item, t->item) < 0;
- trail = t;
- t = succ(t);
- }
- v &= n == count;
- }
- if (!v) error("invariant failure");
- return v;
-}
diff --git a/contrib/libg++/libg++/src/gen/AVLSet.hP b/contrib/libg++/libg++/src/gen/AVLSet.hP
deleted file mode 100644
index c1aa8fad6ac2..000000000000
--- a/contrib/libg++/libg++/src/gen/AVLSet.hP
+++ /dev/null
@@ -1,152 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#ifndef _<T>AVL_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _<T>AVL_h 1
-
-#include "<T>.Set.h"
-
-struct <T>AVLNode
-{
- <T>AVLNode* lt;
- <T>AVLNode* rt;
- <T> item;
- char stat;
- <T>AVLNode(<T&> h, <T>AVLNode* l=0, <T>AVLNode* r=0);
- ~<T>AVLNode();
-};
-
-inline <T>AVLNode::<T>AVLNode(<T&> h, <T>AVLNode* l, <T>AVLNode* r)
-:lt(l), rt(r), item(h), stat(0) {}
-
-inline <T>AVLNode::~<T>AVLNode() {}
-
-typedef <T>AVLNode* <T>AVLNodePtr;
-
-
-class <T>AVLSet : public <T>Set
-{
-protected:
- <T>AVLNode* root;
-
- <T>AVLSet(<T>AVLNode* p, int l);
-
- <T>AVLNode* leftmost();
- <T>AVLNode* rightmost();
- <T>AVLNode* pred(<T>AVLNode* t);
- <T>AVLNode* succ(<T>AVLNode* t);
- void _kill(<T>AVLNode* t);
- void _add(<T>AVLNode*& t);
- void _del(<T>AVLNode* p, <T>AVLNode*& t);
-
-public:
- <T>AVLSet();
- <T>AVLSet(<T>AVLSet& a);
- inline ~<T>AVLSet();
-
- Pix add(<T&> item);
- void del(<T&> item);
- inline int contains(<T&> item);
-
- inline void clear();
-
- inline Pix first();
- inline void next(Pix& i);
- inline <T>& operator () (Pix i);
- int owns(Pix i);
- Pix seek(<T&> item);
-
- Pix last();
- void prev(Pix& i);
-
- void operator |= (<T>AVLSet& b);
- void operator -= (<T>AVLSet& b);
- void operator &= (<T>AVLSet& b);
-
- int operator == (<T>AVLSet& b);
- int operator != (<T>AVLSet& b);
- int operator <= (<T>AVLSet& b);
-
- int OK();
-};
-
-inline <T>AVLSet::~<T>AVLSet()
-{
- _kill(root);
-}
-
-inline <T>AVLSet::<T>AVLSet()
-{
- root = 0;
- count = 0;
-}
-
-inline <T>AVLSet::<T>AVLSet(<T>AVLNode* p, int l)
-{
- root = p;
- count = l;
-}
-
-inline int <T>AVLSet::operator != (<T>AVLSet& b)
-{
- return ! ((*this) == b);
-}
-
-inline Pix <T>AVLSet::first()
-{
- return Pix(leftmost());
-}
-
-inline Pix <T>AVLSet::last()
-{
- return Pix(rightmost());
-}
-
-inline void <T>AVLSet::next(Pix& i)
-{
- if (i != 0) i = Pix(succ((<T>AVLNode*)i));
-}
-
-inline void <T>AVLSet::prev(Pix& i)
-{
- if (i != 0) i = Pix(pred((<T>AVLNode*)i));
-}
-
-inline <T>& <T>AVLSet::operator () (Pix i)
-{
- if (i == 0) error("null Pix");
- return ((<T>AVLNode*)i)->item;
-}
-
-inline void <T>AVLSet::clear()
-{
- _kill(root);
- count = 0;
- root = 0;
-}
-
-inline int <T>AVLSet::contains(<T&> key)
-{
- return seek(key) != 0;
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/gen/AVec.ccP b/contrib/libg++/libg++/src/gen/AVec.ccP
deleted file mode 100644
index 57a92708d9f2..000000000000
--- a/contrib/libg++/libg++/src/gen/AVec.ccP
+++ /dev/null
@@ -1,397 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <stream.h>
-#include <builtin.h>
-#include "<T>.AVec.h"
-
-/*
- The following brought to you by the department of redundancy department
-*/
-
-<T>AVec& <T>AVec::operator = (const <T>AVec& v)
-{
- if (len != 0 && len != v.capacity())
- error("nonconformant vectors.");
- if (len == 0)
- s = new <T> [len = v.capacity()];
- if (s != v.vec())
- {
- for (int i = 0; i < len; ++i)
- s[i] = v.vec()[i];
- }
- return *this;
-}
-
-<T>AVec& <T>AVec::operator = (<T&> f)
-{
- for (int i = 0; i < len; ++i) s[i] = f;
- return *this;
-}
-
-
-<T>AVec concat(<T>AVec & a, <T>AVec & b)
-{
- int newl = a.capacity() + b.capacity();
- <T>* news = new <T> [newl];
- <T>* p = news;
- <T>* top = &(a.vec()[a.capacity()]);
- <T>* t = a.vec();
- while (t < top) *p++ = *t++;
- top = &(b.vec()[b.capacity()]);
- t = b.vec();
- while (t < top) *p++ = *t++;
- return <T>AVec(newl, news);
-}
-
-
-<T>AVec combine(<T>Combiner f, <T>AVec& a, <T>AVec& b)
-{
- int newl = (a.capacity() < b.capacity())? a.capacity() : b.capacity();
- <T>* news = new <T> [newl];
- <T>* p = news;
- <T>* top = &(a.vec()[newl]);
- <T>* t = a.vec();
- <T>* u = b.vec();
- while (t < top) *p++ = (*f)(*t++, *u++);
- return <T>AVec(newl, news);
-}
-
-<T>AVec reverse(<T>AVec& a)
-{
- <T>* news = new <T> [a.capacity()];
- if (a.capacity() != 0)
- {
- <T>* lo = news;
- <T>* hi = &(news[a.capacity() - 1]);
- while (lo < hi)
- {
- <T> tmp = *lo;
- *lo++ = *hi;
- *hi-- = tmp;
- }
- }
- return <T>AVec(a.capacity(), news);
-}
-
-<T>AVec map(<T>Mapper f, <T>AVec& a)
-{
- <T>* news = new <T> [a.capacity()];
- <T>* p = news;
- <T>* top = &(a.vec()[a.capacity()]);
- <T>* t = a.vec();
- while(t < top) *p++ = (*f)(*t++);
- return <T>AVec(a.capacity(), news);
-}
-
-<T>AVec <T>AVec::at(int from, int n)
-{
- int to;
- if (n < 0)
- {
- n = len - from;
- to = len - 1;
- }
- else
- to = from + n - 1;
- if ((unsigned)from > (unsigned)to)
- range_error();
- <T>* news = new <T> [n];
- <T>* p = news;
- <T>* t = &(s[from]);
- <T>* top = &(s[to]);
- while (t <= top) *p++ = *t++;
- return <T>AVec(n, news);
-}
-
-<T>AVec merge(<T>AVec & a, <T>AVec & b, <T>Comparator f)
-{
- int newl = a.capacity() + b.capacity();
- <T>* news = new <T> [newl];
- <T>* p = news;
- <T>* topa = &(a.vec()[a.capacity()]);
- <T>* as = a.vec();
- <T>* topb = &(b.vec()[b.capacity()]);
- <T>* bs = b.vec();
-
- for (;;)
- {
- if (as >= topa)
- {
- while (bs < topb) *p++ = *bs++;
- break;
- }
- else if (bs >= topb)
- {
- while (as < topa) *p++ = *as++;
- break;
- }
- else if ((*f)(*as, *bs) <= 0)
- *p++ = *as++;
- else
- *p++ = *bs++;
- }
- return <T>AVec(newl, news);
-}
-
-<T>AVec operator + (<T>AVec& a, <T>AVec& b)
-{
- a.check_len(b.capacity());
- <T>* news = new <T> [a.capacity()];
- <T>* p = news;
- <T>* top = &(a.vec()[a.capacity()]);
- <T>* t = a.vec();
- <T>* u = b.vec();
- while (t < top) *p++ = *t++ + *u++;
- return <T>AVec(a.capacity(), news);
-}
-
-<T>AVec operator - (<T>AVec& a, <T>AVec& b)
-{
- a.check_len(b.capacity());
- <T>* news = new <T> [a.capacity()];
- <T>* p = news;
- <T>* top = &(a.vec()[a.capacity()]);
- <T>* t = a.vec();
- <T>* u = b.vec();
- while (t < top) *p++ = *t++ - *u++;
- return <T>AVec(a.capacity(), news);
-}
-
-<T>AVec product (<T>AVec& a, <T>AVec& b)
-{
- a.check_len(b.capacity());
- <T>* news = new <T> [a.capacity()];
- <T>* p = news;
- <T>* top = &(a.vec()[a.capacity()]);
- <T>* t = a.vec();
- <T>* u = b.vec();
- while (t < top) *p++ = *t++ * *u++;
- return <T>AVec(a.capacity(), news);
-}
-
-<T>AVec quotient(<T>AVec& a, <T>AVec& b)
-{
- a.check_len(b.capacity());
- <T>* news = new <T> [a.capacity()];
- <T>* p = news;
- <T>* top = &(a.vec()[a.capacity()]);
- <T>* t = a.vec();
- <T>* u = b.vec();
- while (t < top) *p++ = *t++ / *u++;
- return <T>AVec(a.capacity(), news);
-}
-
-<T>AVec operator + (<T>AVec& a, <T&> b)
-{
- <T>* news = new <T> [a.capacity()];
- <T>* p = news;
- <T>* top = &(a.vec()[a.capacity()]);
- <T>* t = a.vec();
- while (t < top) *p++ = *t++ + b;
- return <T>AVec(a.capacity(), news);
-}
-
-<T>AVec operator - (<T>AVec& a, <T&> b)
-{
- <T>* news = new <T> [a.capacity()];
- <T>* p = news;
- <T>* top = &(a.vec()[a.capacity()]);
- <T>* t = a.vec();
- while (t < top) *p++ = *t++ - b;
- return <T>AVec(a.capacity(), news);
-}
-
-<T>AVec operator * (<T>AVec& a, <T&> b)
-{
- <T>* news = new <T> [a.capacity()];
- <T>* p = news;
- <T>* top = &(a.vec()[a.capacity()]);
- <T>* t = a.vec();
- while (t < top) *p++ = *t++ * b;
- return <T>AVec(a.capacity(), news);
-}
-
-<T>AVec operator / (<T>AVec& a, <T&> b)
-{
- <T>* news = new <T> [a.capacity()];
- <T>* p = news;
- <T>* top = &(a.vec()[a.capacity()]);
- <T>* t = a.vec();
- while (t < top) *p++ = *t++ / b;
- return <T>AVec(a.capacity(), news);
-}
-
-<T>AVec <T>AVec::operator - ()
-{
- <T>* news = new <T> [len];
- <T>* p = news;
- <T>* top = &(s[len]);
- <T>* t = s;
- while (t < top) *p++ = -(*t++);
- return <T>AVec(len, news);
-}
-
-<T>AVec& <T>AVec::operator += (<T>AVec& b)
-{
- check_len(b.capacity());
- <T>* u = b.vec();
- <T>* top = &(s[len]);
- <T>* t = s;
- while (t < top) *t++ += *u++;
- return *this;
-}
-
-<T>AVec& <T>AVec::operator -= (<T>AVec& b)
-{
- check_len(b.capacity());
- <T>* u = b.vec();
- <T>* top = &(s[len]);
- <T>* t = s;
- while (t < top) *t++ -= *u++;
- return *this;
-}
-
-<T>AVec& <T>AVec::product(<T>AVec& b)
-{
- check_len(b.capacity());
- <T>* u = b.vec();
- <T>* top = &(s[len]);
- <T>* t = s;
- while (t < top) *t++ *= *u++;
- return *this;
-}
-
-<T>AVec& <T>AVec::quotient(<T>AVec& b)
-{
- check_len(b.capacity());
- <T>* u = b.vec();
- <T>* top = &(s[len]);
- <T>* t = s;
- while (t < top) *t++ /= *u++;
- return *this;
-}
-
-<T>AVec& <T>AVec::operator += (<T&> b)
-{
- <T>* top = &(s[len]);
- <T>* t = s;
- while (t < top) *t++ += b;
- return *this;
-}
-
-<T>AVec& <T>AVec::operator -= (<T&> b)
-{
- <T>* top = &(s[len]);
- <T>* t = s;
- while (t < top) *t++ -= b;
- return *this;
-}
-
-<T>AVec& <T>AVec::operator *= (<T&> b)
-{
- <T>* top = &(s[len]);
- <T>* t = s;
- while (t < top) *t++ *= b;
- return *this;
-}
-
-<T>AVec& <T>AVec::operator /= (<T&> b)
-{
- <T>* top = &(s[len]);
- <T>* t = s;
- while (t < top) *t++ /= b;
- return *this;
-}
-
-<T> <T>AVec::max()
-{
- if (len == 0)
- return 0;
- <T>* top = &(s[len]);
- <T>* t = s;
- <T> res = *t++;
- for (; t < top; ++t) if (*t > res) res = *t;
- return res;
-}
-
-int <T>AVec::max_index()
-{
- if (len == 0)
- return -1;
- int ind = 0;
- for (int i = 1; i < len; ++i)
- if (s[i] > s[ind])
- ind = i;
- return ind;
-}
-
-<T> <T>AVec::min()
-{
- if (len == 0)
- return 0;
- <T>* top = &(s[len]);
- <T>* t = s;
- <T> res = *t++;
- for (; t < top; ++t) if (*t < res) res = *t;
- return res;
-}
-
-int <T>AVec::min_index()
-{
- if (len == 0)
- return -1;
- int ind = 0;
- for (int i = 1; i < len; ++i)
- if (s[i] < s[ind])
- ind = i;
- return ind;
-}
-
-<T> <T>AVec::sum()
-{
- <T> res = 0;
- <T>* top = &(s[len]);
- <T>* t = s;
- while (t < top) res += *t++;
- return res;
-}
-
-
-<T> <T>AVec::sumsq()
-{
- <T> res = 0;
- <T>* top = &(s[len]);
- <T>* t = s;
- for (; t < top; ++t) res += *t * *t;
- return res;
-}
-
-<T> operator * (<T>AVec& a, <T>AVec& b)
-{
- a.check_len(b.capacity());
- <T>* top = &(a.vec()[a.capacity()]);
- <T>* t = a.vec();
- <T>* u = b.vec();
- <T> res = 0;
- while (t < top) res += *t++ * *u++;
- return res;
-}
diff --git a/contrib/libg++/libg++/src/gen/AVec.hP b/contrib/libg++/libg++/src/gen/AVec.hP
deleted file mode 100644
index c59720e93cc1..000000000000
--- a/contrib/libg++/libg++/src/gen/AVec.hP
+++ /dev/null
@@ -1,118 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#ifndef _<T>AVec_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _<T>AVec_h 1
-
-#include "<T>.Vec.h"
-
-class <T>AVec : public <T>Vec
-{
-protected:
- void check_len(int l);
- <T>* vec();
- const <T>* vec() const;
- <T>AVec(int l, <T>* d);
- public:
- <T>AVec ();
- <T>AVec (int l);
- <T>AVec (int l, <T&> fill_value);
- <T>AVec (<T>AVec&);
- ~<T>AVec ();
-
- <T>AVec& operator = (const <T>AVec& a);
- <T>AVec& operator = (<T&> fill_value);
-
-// vector by scalar -> vector operations
-
- friend <T>AVec operator + (<T>AVec& a, <T&> b);
- friend <T>AVec operator - (<T>AVec& a, <T&> b);
- friend <T>AVec operator * (<T>AVec& a, <T&> b);
- friend <T>AVec operator / (<T>AVec& a, <T&> b);
-
- <T>AVec& operator += (<T&> b);
- <T>AVec& operator -= (<T&> b);
- <T>AVec& operator *= (<T&> b);
- <T>AVec& operator /= (<T&> b);
-
-// vector by vector -> vector operations
-
- friend <T>AVec operator + (<T>AVec& a, <T>AVec& b);
- friend <T>AVec operator - (<T>AVec& a, <T>AVec& b);
- <T>AVec& operator += (<T>AVec& b);
- <T>AVec& operator -= (<T>AVec& b);
-
- <T>AVec operator - ();
-
- friend <T>AVec product(<T>AVec& a, <T>AVec& b);
- <T>AVec& product(<T>AVec& b);
- friend <T>AVec quotient(<T>AVec& a, <T>AVec& b);
- <T>AVec& quotient(<T>AVec& b);
-
-// vector -> scalar operations
-
- friend <T> operator * (<T>AVec& a, <T>AVec& b);
-
- <T> sum();
- <T> min();
- <T> max();
- <T> sumsq();
-
-// indexing
-
- int min_index();
- int max_index();
-
-// redundant but necesssary
- friend <T>AVec concat(<T>AVec& a, <T>AVec& b);
- friend <T>AVec map(<T>Mapper f, <T>AVec& a);
- friend <T>AVec merge(<T>AVec& a, <T>AVec& b, <T>Comparator f);
- friend <T>AVec combine(<T>Combiner f, <T>AVec& a, <T>AVec& b);
- friend <T>AVec reverse(<T>AVec& a);
- <T>AVec at(int from = 0, int n = -1);
-};
-
-inline <T>AVec::<T>AVec() {}
-inline <T>AVec::<T>AVec(int l) :<T>Vec(l) {}
-inline <T>AVec::<T>AVec(int l, <T&> fill_value) : <T>Vec (l, fill_value) {}
-inline <T>AVec::<T>AVec(<T>AVec& v) :<T>Vec(v) {}
-inline <T>AVec::<T>AVec(int l, <T>* d) :<T>Vec(l, d) {}
-inline <T>AVec::~<T>AVec() {}
-
-
-inline <T>* <T>AVec::vec()
-{
- return s;
-}
-
-inline const <T>* <T>AVec::vec() const
-{
- return s;
-}
-
-inline void <T>AVec::check_len(int l)
-{
- if (l != len)
- error("nonconformant vectors.");
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/gen/BSTSet.ccP b/contrib/libg++/libg++/src/gen/BSTSet.ccP
deleted file mode 100644
index da7d73a3a032..000000000000
--- a/contrib/libg++/libg++/src/gen/BSTSet.ccP
+++ /dev/null
@@ -1,377 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <stream.h>
-#include "<T>.BSTSet.h"
-
-
-/*
- traversal primitives
-*/
-
-
-<T>BSTNode* <T>BSTSet::leftmost()
-{
- <T>BSTNode* t = root;
- if (t != 0) while (t->lt != 0) t = t->lt;
- return t;
-}
-
-<T>BSTNode* <T>BSTSet::rightmost()
-{
- <T>BSTNode* t = root;
- if (t != 0) while (t->rt != 0) t = t->rt;
- return t;
-}
-
-<T>BSTNode* <T>BSTSet::succ(<T>BSTNode* t)
-{
- if (t == 0)
- return 0;
- if (t->rt != 0)
- {
- t = t->rt;
- while (t->lt != 0) t = t->lt;
- return t;
- }
- else
- {
- for (;;)
- {
- if (t->par == 0 || t == t->par->lt)
- return t->par;
- else
- t = t->par;
- }
- }
-}
-
-<T>BSTNode* <T>BSTSet::pred(<T>BSTNode* t)
-{
- if (t == 0)
- return 0;
- else if (t->lt != 0)
- {
- t = t->lt;
- while (t->rt != 0) t = t->rt;
- return t;
- }
- else
- {
- for (;;)
- {
- if (t->par == 0 || t == t->par->rt)
- return t->par;
- else
- t = t->par;
- }
- }
-}
-
-
-Pix <T>BSTSet::seek(<T&> key)
-{
- <T>BSTNode* t = root;
- for (;;)
- {
- if (t == 0)
- return 0;
- int comp = <T>CMP(key, t->item);
- if (comp == 0)
- return Pix(t);
- else if (comp < 0)
- t = t->lt;
- else
- t = t->rt;
- }
-}
-
-
-Pix <T>BSTSet::add(<T&> item)
-{
- if (root == 0)
- {
- ++count;
- root = new <T>BSTNode(item);
- return Pix(root);
- }
-
- <T>BSTNode* t = root;
- <T>BSTNode* p = root;
- for (;;)
- {
- int comp = <T>CMP(t->item, item);
- if (comp == 0)
- return Pix(t);
- else if (comp > 0)
- t = t->lt;
- else
- t = t->rt;
- if (t == 0)
- {
- ++count;
- t = new <T>BSTNode(item);
- if (comp > 0)
- p->lt = t;
- else
- p->rt = t;
- t->par = p;
- return Pix(t);
- }
- p = t;
- }
-}
-
-
-void <T>BSTSet::del(<T&> key)
-{
- <T>BSTNode* t = root;
- <T>BSTNode* p = root;
- int comp;
- for (;;)
- {
- if (t == 0)
- return;
- comp = <T>CMP(key, t->item);
- if (comp == 0)
- {
- --count;
- <T>BSTNode* repl;
- if (t->lt == 0)
- repl = t->rt;
- else if (t->rt == 0)
- repl = t->lt;
- else
- {
- <T>BSTNode* prepl = t;
- repl = t->lt;
- while (repl->rt != 0)
- {
- prepl = repl;
- repl = repl->rt;
- }
- if (prepl != t)
- {
- prepl->rt = repl->lt;
- if (prepl->rt != 0) prepl->rt->par = prepl;
- repl->lt = t->lt;
- if (repl->lt != 0) repl->lt->par = repl;
- }
- repl->rt = t->rt;
- if (repl->rt != 0) repl->rt->par = repl;
- }
- if (t == root)
- {
- root = repl;
- if (repl != 0) repl->par = 0;
- }
- else
- {
- if (t == p->lt)
- p->lt = repl;
- else
- p->rt = repl;
- if (repl != 0) repl->par = p;
- }
- delete t;
- return;
- }
- p = t;
- if (comp < 0)
- t = t->lt;
- else
- t = t->rt;
- }
-}
-
-
-void <T>BSTSet::_kill(<T>BSTNode* t)
-{
- if (t != 0)
- {
- _kill(t->lt);
- _kill(t->rt);
- delete t;
- }
-}
-
-<T>BSTNode* <T>BSTSet::_copy(<T>BSTNode* t)
-{
- if (t == 0)
- return 0;
- else
- {
- <T>BSTNode* u = new <T>BSTNode(t->item, _copy(t->lt), _copy(t->rt));
- if (u->lt != 0) u->lt->par = u;
- if (u->rt != 0) u->rt->par = u;
- return u;
- }
-}
-
-
-int <T>BSTSet::operator == (<T>BSTSet& y)
-{
- if (count != y.count)
- return 0;
- else
- {
- <T>BSTNode* t = leftmost();
- <T>BSTNode* u = y.leftmost();
- for (;;)
- {
- if (t == 0)
- return 1;
- else if (!<T>EQ(t->item, u->item))
- return 0;
- else
- {
- t = succ(t);
- u = y.succ(u);
- }
- }
- }
-}
-
-int <T>BSTSet::operator <= (<T>BSTSet& y)
-{
- if (count > y.count)
- return 0;
- else
- {
- <T>BSTNode* t = leftmost();
- <T>BSTNode* u = y.leftmost();
- for (;;)
- {
- if (t == 0)
- return 1;
- else if (u == 0)
- return 0;
- int cmp = <T>CMP(t->item, u->item);
- if (cmp == 0)
- {
- t = succ(t);
- u = y.succ(u);
- }
- else if (cmp < 0)
- return 0;
- else
- u = y.succ(u);
- }
- }
-}
-
-
-// linear-time, zero space overhead binary tree rebalancing from
-// Stout & Warren, ``Tree rebalancing in linear space and time''
-// CACM, Sept, 1986, p902.
-
-
-void <T>BSTSet::balance()
-{
- if (count <= 2) return; // don't bother --
- // also we assume non-null root, below
-
- // make re-attaching the root easy via trickery
-
- struct _fake_node { _fake_node *lt, *rt, *par; } fake_root;
-
- fake_root.rt = (_fake_node*)root;
- fake_root.par = 0;
- <T>BSTNode* pseudo_root = (<T>BSTNode*)&fake_root;
-
- // phase 1: tree-to-vine
-
- <T>BSTNode* vine_tail = pseudo_root;
- <T>BSTNode* remainder = root;
-
- while (remainder != 0)
- {
- if (remainder->lt == 0)
- {
- vine_tail = remainder;
- remainder = remainder->rt;
- }
- else
- {
- <T>BSTNode* tmp = remainder->lt;
- remainder->lt = tmp->rt;
- if (remainder->lt != 0) remainder->lt->par = remainder;
- tmp->rt = remainder;
- remainder->par = tmp;
- vine_tail->rt = remainder = tmp;
- }
- }
-
- // phase 2: vine-to-tree
-
- // Uses the slightly simpler version adapted from
- // Day ``Balancing a binary tree'' Computer Journal, Nov. 1976,
- // since it's not generally important whether the `stray' leaves are
- // on the left or on the right.
-
- unsigned int spines = count - 1;
- while (spines > 1)
- {
- int compressions = spines >> 1; // compress every other node
- spines -= compressions + 1; // halve for next time
-
- <T>BSTNode* scanner = pseudo_root;
- while (compressions-- > 0)
- {
- <T>BSTNode* child = scanner->rt;
- <T>BSTNode* grandchild = child->rt;
- scanner->rt = grandchild;
- grandchild->par = scanner;
- child->rt = grandchild->lt;
- if (child->rt != 0) child->rt->par = child;
- grandchild->lt = child;
- child->par = grandchild;
- scanner = grandchild;
- }
- }
-
- root = pseudo_root->rt;
- root->par = 0;
-}
-
-
-int <T>BSTSet::OK()
-{
- int v = 1;
- if (root == 0)
- v = count == 0;
- else
- {
- int n = 1;
- <T>BSTNode* trail = leftmost();
- <T>BSTNode* t = succ(trail);
- while (t != 0)
- {
- ++n;
- v &= <T>CMP(trail->item, t->item) < 0;
- trail = t;
- t = succ(t);
- }
- v &= n == count;
- }
- if (!v) error("invariant failure");
- return v;
-}
diff --git a/contrib/libg++/libg++/src/gen/BSTSet.hP b/contrib/libg++/libg++/src/gen/BSTSet.hP
deleted file mode 100644
index 79a3dd36edfa..000000000000
--- a/contrib/libg++/libg++/src/gen/BSTSet.hP
+++ /dev/null
@@ -1,152 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#ifndef _<T>BSTSet_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _<T>BSTSet_h 1
-
-#include "<T>.Set.h"
-
-#ifndef _<T>BSTNode
-#define _<T>BSTNode 1
-
-struct <T>BSTNode
-{
- <T>BSTNode* lt;
- <T>BSTNode* rt;
- <T>BSTNode* par;
- <T> item;
- <T>BSTNode(<T&> h, <T>BSTNode* l=0, <T>BSTNode* r=0,
- <T>BSTNode* p = 0);
- ~<T>BSTNode();
-};
-
-inline <T>BSTNode::<T>BSTNode(<T&> h, <T>BSTNode* l, <T>BSTNode* r,
- <T>BSTNode* p)
-:lt(l), rt(r), par(p), item(h) {}
-
-inline <T>BSTNode::~<T>BSTNode() {}
-
-typedef <T>BSTNode* <T>BSTNodePtr;
-
-#endif
-
-class <T>BSTSet : public <T>Set
-{
-protected:
- <T>BSTNode* root;
-
- <T>BSTNode* leftmost();
- <T>BSTNode* rightmost();
- <T>BSTNode* pred(<T>BSTNode* t);
- <T>BSTNode* succ(<T>BSTNode* t);
- void _kill(<T>BSTNode* t);
- <T>BSTNode* _copy(<T>BSTNode* t);
-
-public:
- <T>BSTSet();
- <T>BSTSet(<T>BSTSet& a);
- inline ~<T>BSTSet();
-
- Pix add(<T&> item);
- void del(<T&> item);
- inline int contains(<T&> item);
-
- inline void clear();
-
- inline Pix first();
- inline void next(Pix& i);
- inline <T>& operator () (Pix i);
- Pix seek(<T&> item);
-
- Pix last();
- void prev(Pix& i);
-
- int operator == (<T>BSTSet& b);
- int operator != (<T>BSTSet& b);
- int operator <= (<T>BSTSet& b);
-
- void balance();
- int OK();
-};
-
-inline <T>BSTSet::~<T>BSTSet()
-{
- _kill(root);
-}
-
-inline <T>BSTSet::<T>BSTSet()
-{
- root = 0;
- count = 0;
-}
-
-
-inline <T>BSTSet::<T>BSTSet(<T>BSTSet& a)
-{
- count = a.count;
- root = _copy(a.root);
-}
-
-inline int <T>BSTSet::operator != (<T>BSTSet& b)
-{
- return ! (*this == b);
-}
-
-inline Pix <T>BSTSet::first()
-{
- return Pix(leftmost());
-}
-
-inline Pix <T>BSTSet::last()
-{
- return Pix(rightmost());
-}
-
-inline void <T>BSTSet::next(Pix& i)
-{
- if (i != 0) i = Pix(succ((<T>BSTNode*)i));
-}
-
-inline void <T>BSTSet::prev(Pix& i)
-{
- if (i != 0) i = Pix(pred((<T>BSTNode*)i));
-}
-
-inline <T>& <T>BSTSet::operator () (Pix i)
-{
- if (i == 0) error("null Pix");
- return ((<T>BSTNode*)i)->item;
-}
-
-inline void <T>BSTSet::clear()
-{
- _kill(root);
- count = 0;
- root = 0;
-}
-
-inline int <T>BSTSet::contains(<T&> key)
-{
- return seek(key) != 0;
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/gen/Bag.ccP b/contrib/libg++/libg++/src/gen/Bag.ccP
deleted file mode 100644
index 3f9f06c00bc7..000000000000
--- a/contrib/libg++/libg++/src/gen/Bag.ccP
+++ /dev/null
@@ -1,74 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <builtin.h>
-#include "<T>.Bag.h"
-
-// error handling
-
-void <T>Bag::error(const char* msg)
-{
- (*lib_error_handler)("Bag", msg);
-}
-
-
-Pix <T>Bag::seek(<T&> item, Pix i)
-{
- if (i == 0)
- i = first();
- else
- next(i);
- for (;i != 0 && (!(<T>EQ((*this)(i), item))); next(i));
- return i;
-}
-
-int <T>Bag::owns(Pix p)
-{
- if (p == 0) return 0;
- for (Pix i = first(); i != 0; next(i)) if (i == p) return 1;
- return 0;
-}
-
-void <T>Bag::remove(<T&> item)
-{
- int i = nof(item);
- while (i-- > 0) del(item);
-}
-
-
-int <T>Bag::nof(<T&> item)
-{
- int n = 0;
- for (Pix p = first(); p; next(p)) if (<T>EQ((*this)(p), item)) ++n;
- return n;
-}
-
-void <T>Bag::clear()
-{
- Pix i = first();
- while (i != 0)
- {
- del((*this)(i));
- i = first();
- }
-}
-
-
diff --git a/contrib/libg++/libg++/src/gen/Bag.hP b/contrib/libg++/libg++/src/gen/Bag.hP
deleted file mode 100644
index de6dc5c4ca01..000000000000
--- a/contrib/libg++/libg++/src/gen/Bag.hP
+++ /dev/null
@@ -1,79 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#ifndef _<T>Bag_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _<T>Bag_h 1
-
-#include <Pix.h>
-#include "<T>.defs.h"
-
-class <T>Bag
-{
-protected:
- int count;
-
-public:
- inline virtual ~<T>Bag();
-
- int length(); // current number of items
- int empty();
-
- virtual Pix add(<T&> item) = 0; // add item; return Pix
-
- virtual void del(<T&> item) = 0; // delete 1 occurrence of item
-#undef remove
- virtual void remove(<T&> item); // delete all occurrences
- virtual void clear(); // delete all items
-
- inline virtual int contains(<T&> item); // is item in Bag?
- virtual int nof(<T&> item); // how many in Bag?
-
- virtual Pix first() = 0; // Pix of first item or 0
- virtual void next(Pix& i) = 0; // advance to next or 0
-
- virtual <T>& operator () (Pix i) = 0; // access item at i
-
- virtual Pix seek(<T&> item, Pix from=0); // Pix of next occurrence
- virtual int owns(Pix i); // is i a valid Pix ?
-
- void error(const char* msg);
- virtual int OK() = 0; // rep invariant
-};
-
-inline <T>Bag::~<T>Bag() {}
-
-inline int <T>Bag::length()
-{
- return count;
-}
-
-inline int <T>Bag::empty()
-{
- return count == 0;
-}
-
-inline int <T>Bag::contains(<T&> item)
-{
- return seek(item) != 0;
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/gen/CHBag.ccP b/contrib/libg++/libg++/src/gen/CHBag.ccP
deleted file mode 100644
index 22c9d707a59e..000000000000
--- a/contrib/libg++/libg++/src/gen/CHBag.ccP
+++ /dev/null
@@ -1,210 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include "<T>.CHBag.h"
-
-// The nodes are linked together serially via a version
-// of a trick used in some vtables: odd pointers are
-// actually links to the next table entry.
-// Not terrible, but not wonderful either
-
-static inline int goodCHptr(<T>CHNode* t)
-{
- return ((((unsigned)t) & 1) == 0);
-}
-
-static inline <T>CHNode* index_to_CHptr(int i)
-{
- return (<T>CHNode*)((i << 1) + 1);
-}
-
-static inline int CHptr_to_index(<T>CHNode* t)
-{
- return ( ((unsigned) t) >> 1);
-}
-
-<T>CHBag::<T>CHBag(unsigned int sz)
-{
- tab = (<T>CHNode**)(new <T>CHNodePtr[size = sz]);
- for (unsigned int i = 0; i < size; ++i) tab[i] = index_to_CHptr(i+1);
- count = 0;
-}
-
-<T>CHBag::<T>CHBag(<T>CHBag& a)
-{
- tab = (<T>CHNode**)(new <T>CHNodePtr[size = a.size]);
- for (unsigned int i = 0; i < size; ++i) tab[i] = index_to_CHptr(i+1);
- count = 0;
- for (Pix p = a.first(); p; a.next(p)) add(a(p));
-}
-
-
-Pix <T>CHBag::seek(<T&> key, Pix i)
-{
- <T>CHNode* p = (<T>CHNode*)i;
- if (p == 0 || !<T>EQ(p->hd, key))
- {
- unsigned int h = <T>HASH(key) % size;
- for (<T>CHNode* t = tab[h]; goodCHptr(t); t = t->tl)
- if (<T>EQ(key, t->hd))
- return Pix(t);
- }
- else
- {
- for (p = p->tl; goodCHptr(p); p = p->tl)
- if (<T>EQ(p->hd, key))
- return Pix(p);
- }
- return 0;
-}
-
-int <T>CHBag::nof(<T&> key)
-{
- int n = 0;
- unsigned int h = <T>HASH(key) % size;
- for (<T>CHNode* t = tab[h]; goodCHptr(t); t = t->tl)
- if (<T>EQ(key, t->hd)) ++n;
- return n;
-}
-
-
-Pix <T>CHBag::add(<T&> item)
-{
- unsigned int h = <T>HASH(item) % size;
- <T>CHNode* t = new <T>CHNode(item);
- t->tl = tab[h];
- tab[h] = t;
- ++count;
- return Pix(t);
-}
-
-void <T>CHBag::del(<T&> key)
-{
- unsigned int h = <T>HASH(key) % size;
-
- <T>CHNode* t = tab[h];
- <T>CHNode* trail = t;
- while (goodCHptr(t))
- {
- if (<T>EQ(key, t->hd))
- {
- if (trail == t)
- tab[h] = t->tl;
- else
- trail->tl = t->tl;
- delete t;
- --count;
- return;
- }
- trail = t;
- t = t->tl;
- }
-}
-
-void <T>CHBag::remove(<T&> key)
-{
- unsigned int h = <T>HASH(key) % size;
-
- <T>CHNode* t = tab[h];
- <T>CHNode* trail = t;
- while (goodCHptr(t))
- {
- if (<T>EQ(key, t->hd))
- {
- --count;
- if (trail == t)
- {
- tab[h] = t->tl;
- delete t;
- t = trail = tab[h];
- }
- else
- {
- trail->tl = t->tl;
- delete t;
- t = trail->tl;
- }
- }
- else
- {
- trail = t;
- t = t->tl;
- }
- }
-}
-
-
-void <T>CHBag::clear()
-{
- for (unsigned int i = 0; i < size; ++i)
- {
- <T>CHNode* p = tab[i];
- tab[i] = index_to_CHptr(i+1);
- while (goodCHptr(p))
- {
- <T>CHNode* nxt = p->tl;
- delete(p);
- p = nxt;
- }
- }
- count = 0;
-}
-
-Pix <T>CHBag::first()
-{
- for (unsigned int i = 0; i < size; ++i) if (goodCHptr(tab[i])) return Pix(tab[i]);
- return 0;
-}
-
-void <T>CHBag::next(Pix& p)
-{
- if (p == 0) return;
- <T>CHNode* t = ((<T>CHNode*)p)->tl;
- if (goodCHptr(t))
- p = Pix(t);
- else
- {
- for (unsigned int i = CHptr_to_index(t); i < size; ++i)
- {
- if (goodCHptr(tab[i]))
- {
- p = Pix(tab[i]);
- return;
- }
- }
- p = 0;
- }
-}
-
-int <T>CHBag::OK()
-{
- int v = tab != 0;
- int n = 0;
- for (unsigned int i = 0; i < size; ++i)
- {
- <T>CHNode* p;
- for (p = tab[i]; goodCHptr(p); p = p->tl) ++n;
- v &= CHptr_to_index(p) == i + 1;
- }
- v &= count == n;
- if (!v) error("invariant failure");
- return v;
-}
diff --git a/contrib/libg++/libg++/src/gen/CHBag.hP b/contrib/libg++/libg++/src/gen/CHBag.hP
deleted file mode 100644
index b2fe61f67078..000000000000
--- a/contrib/libg++/libg++/src/gen/CHBag.hP
+++ /dev/null
@@ -1,76 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#ifndef _<T>CHBag_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _<T>CHBag_h 1
-
-#include "<T>.Bag.h"
-
-
-#include "<T>.CHNode.h"
-
-class <T>CHBag : public <T>Bag
-{
-protected:
- <T>CHNode** tab;
- unsigned int size;
-
-public:
- <T>CHBag(unsigned int sz = DEFAULT_INITIAL_CAPACITY);
- <T>CHBag(<T>CHBag& a);
- inline ~<T>CHBag();
-
- Pix add(<T&> item);
- void del(<T&> item);
- void remove(<T&>item);
- int nof(<T&> item);
- inline int contains(<T&> item);
-
- void clear();
-
- Pix first();
- void next(Pix& i);
- inline <T>& operator () (Pix i);
- Pix seek(<T&> item, Pix from = 0);
-
- int OK();
-};
-
-
-inline <T>CHBag::~<T>CHBag()
-{
- clear();
- delete tab;
-}
-
-inline int <T>CHBag::contains(<T&> key)
-{
- return seek(key) != 0;
-}
-
-inline <T>& <T>CHBag::operator () (Pix i)
-{
- if (i == 0) error("null Pix");
- return ((<T>CHNode*)i)->hd;
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/gen/CHMap.ccP b/contrib/libg++/libg++/src/gen/CHMap.ccP
deleted file mode 100644
index af28fc305a86..000000000000
--- a/contrib/libg++/libg++/src/gen/CHMap.ccP
+++ /dev/null
@@ -1,168 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include "<T>.<C>.CHMap.h"
-
-// The nodes are linked together serially via a version
-// of a trick used in some vtables: odd pointers are
-// actually links to the next table entry.
-// Not terrible, but not wonderful either
-
-static inline int goodCHptr(<T><C>CHNode* t)
-{
- return ((((unsigned)t) & 1) == 0);
-}
-
-static inline <T><C>CHNode* index_to_CHptr(int i)
-{
- return (<T><C>CHNode*)((i << 1) + 1);
-}
-
-static inline int CHptr_to_index(<T><C>CHNode* t)
-{
- return ( ((unsigned) t) >> 1);
-}
-
-<T><C>CHMap::<T><C>CHMap(<C&> dflt, unsigned int sz)
- :<T><C>Map(dflt)
-{
- tab = (<T><C>CHNode**)(new <T><C>CHNodePtr[size = sz]);
- for (unsigned int i = 0; i < size; ++i) tab[i] = index_to_CHptr(i+1);
- count = 0;
-}
-
-<T><C>CHMap::<T><C>CHMap(<T><C>CHMap& a) :<T><C>Map(a.def)
-{
- tab = (<T><C>CHNode**)(new <T><C>CHNodePtr[size = a.size]);
- for (unsigned int i = 0; i < size; ++i) tab[i] = index_to_CHptr(i+1);
- count = 0;
- for (Pix p = a.first(); p; a.next(p)) (*this)[a.key(p)] = a.contents(p);
-}
-
-
-Pix <T><C>CHMap::seek(<T&> key)
-{
- unsigned int h = <T>HASH(key) % size;
-
- for (<T><C>CHNode* t = tab[h]; goodCHptr(t); t = t->tl)
- if (<T>EQ(key, t->hd))
- return Pix(t);
-
- return 0;
-}
-
-
-<C>& <T><C>CHMap::operator [](<T&> item)
-{
- unsigned int h = <T>HASH(item) % size;
- <T><C>CHNode* t;
-
- for (t = tab[h]; goodCHptr(t); t = t->tl)
- if (<T>EQ(item, t->hd))
- return t->cont;
-
- t = new <T><C>CHNode(item, def, tab[h]);
- tab[h] = t;
- ++count;
- return t->cont;
-}
-
-
-void <T><C>CHMap::del(<T&> key)
-{
- unsigned int h = <T>HASH(key) % size;
-
- <T><C>CHNode* t = tab[h];
- <T><C>CHNode* trail = t;
- while (goodCHptr(t))
- {
- if (<T>EQ(key, t->hd))
- {
- if (trail == t)
- tab[h] = t->tl;
- else
- trail->tl = t->tl;
- delete t;
- --count;
- return;
- }
- trail = t;
- t = t->tl;
- }
-}
-
-
-void <T><C>CHMap::clear()
-{
- for (unsigned int i = 0; i < size; ++i)
- {
- <T><C>CHNode* p = tab[i];
- tab[i] = index_to_CHptr(i+1);
- while (goodCHptr(p))
- {
- <T><C>CHNode* nxt = p->tl;
- delete(p);
- p = nxt;
- }
- }
- count = 0;
-}
-
-Pix <T><C>CHMap::first()
-{
- for (unsigned int i = 0; i < size; ++i) if (goodCHptr(tab[i])) return Pix(tab[i]);
- return 0;
-}
-
-void <T><C>CHMap::next(Pix& p)
-{
- <T><C>CHNode* t = ((<T><C>CHNode*)p)->tl;
- if (goodCHptr(t))
- p = Pix(t);
- else
- {
- for (unsigned int i = CHptr_to_index(t); i < size; ++i)
- {
- if (goodCHptr(tab[i]))
- {
- p = Pix(tab[i]);
- return;
- }
- }
- p = 0;
- }
-}
-
-
-int <T><C>CHMap::OK()
-{
- int v = tab != 0;
- int n = 0;
- for (unsigned int i = 0; i < size; ++i)
- {
- <T><C>CHNode* p;
- for (p = tab[i]; goodCHptr(p); p = p->tl) ++n;
- v &= CHptr_to_index(p) == i + 1;
- }
- v &= count == n;
- if (!v) error("invariant failure");
- return v;
-}
diff --git a/contrib/libg++/libg++/src/gen/CHMap.hP b/contrib/libg++/libg++/src/gen/CHMap.hP
deleted file mode 100644
index 2b4e25a284b8..000000000000
--- a/contrib/libg++/libg++/src/gen/CHMap.hP
+++ /dev/null
@@ -1,104 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#ifndef _<T><C>CHMap_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _<T><C>CHMap_h 1
-
-#include "<T>.<C>.Map.h"
-
-#ifndef _<T><C>CHNode_h
-#define _<T><C>CHNode_h 1
-
-struct <T><C>CHNode
-{
- <T><C>CHNode* tl;
- <T> hd;
- <C> cont;
- <T><C>CHNode();
- <T><C>CHNode(<T&> h, <C&> c, <T><C>CHNode* t = 0);
- ~<T><C>CHNode();
-};
-
-inline <T><C>CHNode::<T><C>CHNode() {}
-
-inline <T><C>CHNode::<T><C>CHNode(<T&> h, <C&> c, <T><C>CHNode* t)
- : tl(t), hd(h), cont(c) {}
-
-inline <T><C>CHNode::~<T><C>CHNode() {}
-
-typedef <T><C>CHNode* <T><C>CHNodePtr;
-
-#endif
-
-
-class <T><C>CHMap : public <T><C>Map
-{
-protected:
- <T><C>CHNode** tab;
- unsigned int size;
-
-public:
- <T><C>CHMap(<C&> dflt,unsigned int sz=DEFAULT_INITIAL_CAPACITY);
- <T><C>CHMap(<T><C>CHMap& a);
- inline ~<T><C>CHMap();
-
- <C>& operator [] (<T&> key);
-
- void del(<T&> key);
-
- Pix first();
- void next(Pix& i);
- inline <T>& key(Pix i);
- inline <C>& contents(Pix i);
-
- Pix seek(<T&> key);
- inline int contains(<T&> key);
-
- void clear();
- int OK();
-};
-
-
-inline <T><C>CHMap::~<T><C>CHMap()
-{
- clear();
- delete tab;
-}
-
-inline int <T><C>CHMap::contains(<T&> key)
-{
- return seek(key) != 0;
-}
-
-inline <T>& <T><C>CHMap::key(Pix p)
-{
- if (p == 0) error("null Pix");
- return ((<T><C>CHNode*)p)->hd;
-}
-
-inline <C>& <T><C>CHMap::contents(Pix p)
-{
- if (p == 0) error("null Pix");
- return ((<T><C>CHNode*)p)->cont;
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/gen/CHNode.ccP b/contrib/libg++/libg++/src/gen/CHNode.ccP
deleted file mode 100644
index b9a1e176ef43..000000000000
--- a/contrib/libg++/libg++/src/gen/CHNode.ccP
+++ /dev/null
@@ -1,21 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1992 Free Software Foundation
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include "<T>.CHNode.h"
diff --git a/contrib/libg++/libg++/src/gen/CHNode.hP b/contrib/libg++/libg++/src/gen/CHNode.hP
deleted file mode 100644
index af3acd1557c5..000000000000
--- a/contrib/libg++/libg++/src/gen/CHNode.hP
+++ /dev/null
@@ -1,43 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988, 1982 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifndef _<T>CHNode_h
-#define _<T>CHNode_h 1
-#ifdef __GNUG__
-#pragma interface
-#endif
-#include "<T>.defs.h"
-
-struct <T>CHNode
-{
- <T>CHNode* tl;
- <T> hd;
- <T>CHNode();
- <T>CHNode(<T&> h, <T>CHNode* t = 0);
- ~<T>CHNode();
-};
-
-inline <T>CHNode::<T>CHNode() {}
-
-inline <T>CHNode::<T>CHNode(<T&> h, <T>CHNode* t) :tl(t), hd(h) {}
-
-inline <T>CHNode::~<T>CHNode() {}
-
-typedef <T>CHNode* <T>CHNodePtr;
-
-#endif
diff --git a/contrib/libg++/libg++/src/gen/CHSet.ccP b/contrib/libg++/libg++/src/gen/CHSet.ccP
deleted file mode 100644
index 5a3727b79702..000000000000
--- a/contrib/libg++/libg++/src/gen/CHSet.ccP
+++ /dev/null
@@ -1,273 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include "<T>.CHSet.h"
-
-// A CHSet is implemented as an array (tab) of buckets, each of which
-// contains a pointer to a list of <T>CHNodes. Each node contains a
-// pointer to the next node in the list, and a pointer to the <T>.
-// The end of the list is marked by a next node pointer which is odd
-// when considered as an integer (least significant bit = 1). The
-// assumption is that CHNodes will all begin on even addresses. If
-// the odd pointer is right-shifted by one bit, it becomes the index
-// within the tab array of the next bucket (that is, bucket i has
-// next bucket pointer 2*(i+1)+1).
-
-// The bucket pointers are initialized by the constructor and
-// used to support the next(Pix&) method.
-
-// This implementation is not portable to machines with different
-// pointer and integer sizes, or on which CHNodes might be aligned on
-// odd byte boundaries, but allows the same pointer to be used for
-// chaining within a bucket and to the next bucket.
-
-
-static inline int goodCHptr(<T>CHNode* t)
-{
- return ((((unsigned)t) & 1) == 0);
-}
-
-static inline <T>CHNode* index_to_CHptr(int i)
-{
- return (<T>CHNode*)((i << 1) + 1);
-}
-
-static inline int CHptr_to_index(<T>CHNode* t)
-{
- return ( ((unsigned) t) >> 1);
-}
-
-<T>CHSet::<T>CHSet(unsigned int sz)
-{
- tab = (<T>CHNode**)(new <T>CHNodePtr[size = sz]);
- for (unsigned int i = 0; i < size; ++i) tab[i] = index_to_CHptr(i+1);
- count = 0;
-}
-
-<T>CHSet::<T>CHSet(<T>CHSet& a)
-{
- tab = (<T>CHNode**)(new <T>CHNodePtr[size = a.size]);
- for (unsigned int i = 0; i < size; ++i) tab[i] = index_to_CHptr(i+1);
- count = 0;
- for (Pix p = a.first(); p; a.next(p)) add(a(p));
-}
-
-
-Pix <T>CHSet::seek(<T&> key)
-{
- unsigned int h = <T>HASH(key) % size;
-
- for (<T>CHNode* t = tab[h]; goodCHptr(t); t = t->tl)
- if (<T>EQ(key, t->hd))
- return Pix(t);
-
- return 0;
-}
-
-
-Pix <T>CHSet::add(<T&> item)
-{
- unsigned int h = <T>HASH(item) % size;
- <T>CHNode* t;
-
- for (t = tab[h]; goodCHptr(t); t = t->tl)
- if (<T>EQ(item, t->hd))
- return Pix(t);
-
- ++count;
- t = new <T>CHNode(item, tab[h]);
- tab[h] = t;
- return Pix(t);
-}
-
-
-void <T>CHSet::del(<T&> key)
-{
- unsigned int h = <T>HASH(key) % size;
-
- <T>CHNode* t = tab[h];
- <T>CHNode* trail = t;
- while (goodCHptr(t))
- {
- if (<T>EQ(key, t->hd))
- {
- if (trail == t)
- tab[h] = t->tl;
- else
- trail->tl = t->tl;
- delete t;
- --count;
- return;
- }
- trail = t;
- t = t->tl;
- }
-}
-
-
-void <T>CHSet::clear()
-{
- for (unsigned int i = 0; i < size; ++i)
- {
- <T>CHNode* p = tab[i];
- tab[i] = index_to_CHptr(i+1);
- while (goodCHptr(p))
- {
- <T>CHNode* nxt = p->tl;
- delete(p);
- p = nxt;
- }
- }
- count = 0;
-}
-
-Pix <T>CHSet::first()
-{
- for (unsigned int i = 0; i < size; ++i) if (goodCHptr(tab[i])) return Pix(tab[i]);
- return 0;
-}
-
-void <T>CHSet::next(Pix& p)
-{
- if (p == 0) return;
- <T>CHNode* t = ((<T>CHNode*)p)->tl;
- if (goodCHptr(t))
- p = Pix(t);
- else
- {
- for (unsigned int i = CHptr_to_index(t); i < size; ++i)
- {
- if (goodCHptr(tab[i]))
- {
- p = Pix(tab[i]);
- return;
- }
- }
- p = 0;
- }
-}
-
-int <T>CHSet::operator == (<T>CHSet& b)
-{
- if (count != b.count)
- return 0;
- else
- {
- <T>CHNode* p;
- for (unsigned int i = 0; i < size; ++i)
- for (p = tab[i]; goodCHptr(p); p = p->tl)
- if (b.seek(p->hd) == 0)
- return 0;
- for (unsigned int i = 0; i < b.size; ++i)
- for (p = b.tab[i]; goodCHptr(p); p = p->tl)
- if (seek(p->hd) == 0)
- return 0;
- return 1;
- }
-}
-
-int <T>CHSet::operator <= (<T>CHSet& b)
-{
- if (count > b.count)
- return 0;
- else
- {
- for (unsigned int i = 0; i < size; ++i)
- for (<T>CHNode* p = tab[i]; goodCHptr(p); p = p->tl)
- if (b.seek(p->hd) == 0)
- return 0;
- return 1;
- }
-}
-
-void <T>CHSet::operator |= (<T>CHSet& b)
-{
- if (&b == this || b.count == 0)
- return;
- for (unsigned int i = 0; i < b.size; ++i)
- for (<T>CHNode* p = b.tab[i]; goodCHptr(p); p = p->tl)
- add(p->hd);
-}
-
-void <T>CHSet::operator &= (<T>CHSet& b)
-{
- for (unsigned int i = 0; i < size; ++i)
- {
- <T>CHNode* t = tab[i];
- <T>CHNode* trail = t;
- while (goodCHptr(t))
- {
- <T>CHNode* nxt = t->tl;
- if (b.seek(t->hd) == 0)
- {
- if (trail == tab[i])
- trail = tab[i] = nxt;
- else
- trail->tl = nxt;
- delete t;
- --count;
- }
- else
- trail = t;
- t = nxt;
- }
- }
-}
-
-void <T>CHSet::operator -= (<T>CHSet& b)
-{
- for (unsigned int i = 0; i < size; ++i)
- {
- <T>CHNode* t = tab[i];
- <T>CHNode* trail = t;
- while (goodCHptr(t))
- {
- <T>CHNode* nxt = t->tl;
- if (b.seek(t->hd) != 0)
- {
- if (trail == tab[i])
- trail = tab[i] = nxt;
- else
- trail->tl = nxt;
- delete t;
- --count;
- }
- else
- trail = t;
- t = nxt;
- }
- }
-}
-
-int <T>CHSet::OK()
-{
- int v = tab != 0;
- int n = 0;
- for (unsigned int i = 0; i < size; ++i)
- {
- <T>CHNode* p;
- for (p = tab[i]; goodCHptr(p); p = p->tl) ++n;
- v &= CHptr_to_index(p) == i + 1;
- }
- v &= count == n;
- if (!v) error("invariant failure");
- return v;
-}
diff --git a/contrib/libg++/libg++/src/gen/CHSet.hP b/contrib/libg++/libg++/src/gen/CHSet.hP
deleted file mode 100644
index 1fc2c8e994fc..000000000000
--- a/contrib/libg++/libg++/src/gen/CHSet.hP
+++ /dev/null
@@ -1,84 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#ifndef _<T>CHSet_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _<T>CHSet_h 1
-
-#include "<T>.Set.h"
-#include "<T>.CHNode.h"
-
-class <T>CHSet : public <T>Set
-{
-protected:
- <T>CHNode** tab;
- unsigned int size;
-
-public:
- <T>CHSet(unsigned int sz = DEFAULT_INITIAL_CAPACITY);
- <T>CHSet(<T>CHSet& a);
- inline ~<T>CHSet();
-
- Pix add(<T&> item);
- void del(<T&> item);
- inline int contains(<T&> item);
-
- void clear();
-
- Pix first();
- void next(Pix& i);
- inline <T>& operator () (Pix i);
- Pix seek(<T&> item);
-
- void operator |= (<T>CHSet& b);
- void operator -= (<T>CHSet& b);
- void operator &= (<T>CHSet& b);
-
- int operator == (<T>CHSet& b);
- int operator != (<T>CHSet& b);
- int operator <= (<T>CHSet& b);
-
- int OK();
-};
-
-inline <T>CHSet::~<T>CHSet()
-{
- clear();
- delete tab;
-}
-
-inline int <T>CHSet::contains(<T&> key)
-{
- return seek(key) != 0;
-}
-
-inline <T>& <T>CHSet::operator () (Pix i)
-{
- if (i == 0) error("null Pix");
- return ((<T>CHNode*)i)->hd;
-}
-
-inline int <T>CHSet::operator != (<T>CHSet& b)
-{
- return ! ((*this) == b);
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/gen/DLDeque.ccP b/contrib/libg++/libg++/src/gen/DLDeque.ccP
deleted file mode 100644
index d5a0db7f910a..000000000000
--- a/contrib/libg++/libg++/src/gen/DLDeque.ccP
+++ /dev/null
@@ -1,4 +0,0 @@
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include "<T>.DLDeque.h"
diff --git a/contrib/libg++/libg++/src/gen/DLDeque.hP b/contrib/libg++/libg++/src/gen/DLDeque.hP
deleted file mode 100644
index 6d8cc70fd98a..000000000000
--- a/contrib/libg++/libg++/src/gen/DLDeque.hP
+++ /dev/null
@@ -1,130 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#ifndef _<T>DLDeque_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _<T>DLDeque_h
-
-#include "<T>.DLList.h"
-#include "<T>.Deque.h"
-
-class <T>DLDeque : public <T>Deque
-{
- <T>DLList p;
-
-public:
- <T>DLDeque();
- <T>DLDeque(const <T>DLDeque& d);
- inline ~<T>DLDeque();
-
- void operator = (const <T>DLDeque&);
-
- inline void push(<T&> item); // insert at front
- inline void enq(<T&> item); // insert at rear
-
- inline <T>& front();
- inline <T>& rear();
-
- inline <T> deq();
- inline void del_front();
- inline void del_rear();
-
- inline void clear();
- inline int empty();
- inline int full();
- inline int length();
-
- inline int OK();
-};
-
-
-inline <T>DLDeque::<T>DLDeque() : p() {}
-inline <T>DLDeque::<T>DLDeque(const <T>DLDeque& d) : p(d.p) {}
-
-inline <T>DLDeque::~<T>DLDeque() {}
-
-inline void <T>DLDeque::push(<T&>item)
-{
- p.prepend(item);
-}
-
-inline void <T>DLDeque::enq(<T&>item)
-{
- p.append(item);
-}
-
-inline <T> <T>DLDeque::deq()
-{
- return p.remove_front();
-}
-
-inline <T>& <T>DLDeque::front()
-{
- return p.front();
-}
-
-inline <T>& <T>DLDeque::rear()
-{
- return p.rear();
-}
-
-inline void <T>DLDeque::del_front()
-{
- p.del_front();
-}
-
-inline void <T>DLDeque::del_rear()
-{
- p.del_rear();
-}
-
-inline void <T>DLDeque::operator =(const <T>DLDeque& s)
-{
- p.operator = (s.p);
-}
-
-
-inline int <T>DLDeque::empty()
-{
- return p.empty();
-}
-
-inline int <T>DLDeque::full()
-{
- return 0;
-}
-
-inline int <T>DLDeque::length()
-{
- return p.length();
-}
-
-inline int <T>DLDeque::OK()
-{
- return p.OK();
-}
-
-inline void <T>DLDeque::clear()
-{
- p.clear();
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/gen/DLList.ccP b/contrib/libg++/libg++/src/gen/DLList.ccP
deleted file mode 100644
index c870dc185952..000000000000
--- a/contrib/libg++/libg++/src/gen/DLList.ccP
+++ /dev/null
@@ -1,339 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-// WARNING: This file is obsolete. Use ../DLList.cc, if you can.
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <limits.h>
-#include <stream.h>
-#include <builtin.h>
-#include "<T>.DLList.h"
-
-// error handling
-
-
-
-void <T>DLList::error(const char* msg)
-{
- (*lib_error_handler)("DLList", msg);
-}
-
-int <T>DLList::length()
-{
- int l = 0;
- <T>DLListNode* t = h;
- if (t != 0) do { ++l; t = t->fd; } while (t != h);
- return l;
-}
-
-<T>DLList::<T>DLList(const <T>DLList& a)
-{
- if (a.h == 0)
- h = 0;
- else
- {
- <T>DLListNode* p = a.h;
- <T>DLListNode* t = new <T>DLListNode(p->hd);
- h = t;
- p = p->fd;
- while (p != a.h)
- {
- <T>DLListNode* n = new <T>DLListNode(p->hd);
- t->fd = n;
- n->bk = t;
- t = n;
- p = p->fd;
- }
- t->fd = h;
- h->bk = t;
- return;
- }
-}
-
-<T>DLList& <T>DLList::operator = (const <T>DLList& a)
-{
- if (h != a.h)
- {
- clear();
- if (a.h != 0)
- {
- <T>DLListNode* p = a.h;
- <T>DLListNode* t = new <T>DLListNode(p->hd);
- h = t;
- p = p->fd;
- while (p != a.h)
- {
- <T>DLListNode* n = new <T>DLListNode(p->hd);
- t->fd = n;
- n->bk = t;
- t = n;
- p = p->fd;
- }
- t->fd = h;
- h->bk = t;
- }
- }
- return *this;
-}
-
-void <T>DLList::clear()
-{
- if (h == 0)
- return;
-
- <T>DLListNode* p = h->fd;
- h->fd = 0;
- h = 0;
-
- while (p != 0)
- {
- <T>DLListNode* nxt = p->fd;
- delete(p);
- p = nxt;
- }
-}
-
-
-Pix <T>DLList::prepend(<T&> item)
-{
- <T>DLListNode* t = new <T>DLListNode(item);
- if (h == 0)
- t->fd = t->bk = h = t;
- else
- {
- t->fd = h;
- t->bk = h->bk;
- h->bk->fd = t;
- h->bk = t;
- h = t;
- }
- return Pix(t);
-}
-
-Pix <T>DLList::append(<T&> item)
-{
- <T>DLListNode* t = new <T>DLListNode(item);
- if (h == 0)
- t->fd = t->bk = h = t;
- else
- {
- t->bk = h->bk;
- t->bk->fd = t;
- t->fd = h;
- h->bk = t;
- }
- return Pix(t);
-}
-
-Pix <T>DLList::ins_after(Pix p, <T&> item)
-{
- if (p == 0) return prepend(item);
- <T>DLListNode* u = (<T>DLListNode*) p;
- <T>DLListNode* t = new <T>DLListNode(item, u, u->fd);
- u->fd->bk = t;
- u->fd = t;
- return Pix(t);
-}
-
-Pix <T>DLList::ins_before(Pix p, <T&> item)
-{
- if (p == 0) error("null Pix");
- <T>DLListNode* u = (<T>DLListNode*) p;
- <T>DLListNode* t = new <T>DLListNode(item, u->bk, u);
- u->bk->fd = t;
- u->bk = t;
- if (u == h) h = t;
- return Pix(t);
-}
-
-void <T>DLList::join(<T>DLList& b)
-{
- <T>DLListNode* t = b.h;
- b.h = 0;
- if (h == 0)
- h = t;
- else if (t != 0)
- {
- <T>DLListNode* l = t->bk;
- h->bk->fd = t;
- t->bk = h->bk;
- h->bk = l;
- l->fd = h;
- }
-}
-
-int <T>DLList::owns(Pix p)
-{
- <T>DLListNode* t = h;
- if (t != 0 && p != 0)
- {
- do
- {
- if (Pix(t) == p) return 1;
- t = t->fd;
- } while (t != h);
- }
- return 0;
-}
-
-void <T>DLList::del(Pix& p, int dir)
-{
- if (p == 0) error("null Pix");
- <T>DLListNode* t = (<T>DLListNode*) p;
- if (t->fd == t)
- {
- h = 0;
- p = 0;
- }
- else
- {
- if (dir < 0)
- {
- if (t == h)
- p = 0;
- else
- p = Pix(t->bk);
- }
- else
- {
- if (t == h->bk)
- p = 0;
- else
- p = Pix(t->fd);
- }
- t->bk->fd = t->fd;
- t->fd->bk = t->bk;
- if (t == h) h = t->fd;
- }
- delete t;
-}
-
-void <T>DLList::del_after(Pix& p)
-{
- if (p == 0)
- {
- del_front();
- return;
- }
-
- <T>DLListNode* b = (<T>DLListNode*) p;
- <T>DLListNode* t = b->fd;
-
- if (b == t)
- {
- h = 0;
- p = 0;
- }
- else
- {
- t->bk->fd = t->fd;
- t->fd->bk = t->bk;
- if (t == h) h = t->fd;
- }
- delete t;
-}
-
-<T> <T>DLList::remove_front()
-{
- if (h == 0)
- error("remove_front of empty list");
- <T>DLListNode* t = h;
- <T> res = t->hd;
- if (h->fd == h)
- h = 0;
- else
- {
- h->fd->bk = h->bk;
- h->bk->fd = h->fd;
- h = h->fd;
- }
- delete t;
- return res;
-}
-
-
-void <T>DLList::del_front()
-{
- if (h == 0)
- error("del_front of empty list");
- <T>DLListNode* t = h;
- if (h->fd == h)
- h = 0;
- else
- {
- h->fd->bk = h->bk;
- h->bk->fd = h->fd;
- h = h->fd;
- }
- delete t;
-}
-
-<T> <T>DLList::remove_rear()
-{
- if (h == 0)
- error("remove_rear of empty list");
- <T>DLListNode* t = h->bk;
- <T> res = t->hd;
- if (h->fd == h)
- h = 0;
- else
- {
- t->fd->bk = t->bk;
- t->bk->fd = t->fd;
- }
- delete t;
- return res;
-}
-
-
-void <T>DLList::del_rear()
-{
- if (h == 0)
- error("del_rear of empty list");
- <T>DLListNode* t = h->bk;
- if (h->fd == h)
- h = 0;
- else
- {
- t->fd->bk = t->bk;
- t->bk->fd = t->fd;
- }
- delete t;
-}
-
-
-int <T>DLList::OK()
-{
- int v = 1;
- if (h != 0)
- {
- <T>DLListNode* t = h;
- long count = LONG_MAX; // Lots of chances to find h!
- do
- {
- count--;
- v &= t->bk->fd == t;
- v &= t->fd->bk == t;
- t = t->fd;
- } while (v && count > 0 && t != h);
- v &= count > 0;
- }
- if (!v) error("invariant failure");
- return v;
-}
diff --git a/contrib/libg++/libg++/src/gen/DLList.hP b/contrib/libg++/libg++/src/gen/DLList.hP
deleted file mode 100644
index 8d1a3f45d7b3..000000000000
--- a/contrib/libg++/libg++/src/gen/DLList.hP
+++ /dev/null
@@ -1,157 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-// WARNING: This file is obsolete. Use ../DLList.h, if you can.
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#ifndef _<T>DLList_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _<T>DLList_h 1
-
-#include <Pix.h>
-#include "<T>.defs.h"
-
-#ifndef _<T>DLListNode_h
-#define _<T>DLListNode_h 1
-
-struct <T>DLListNode
-{
- <T>DLListNode* bk;
- <T>DLListNode* fd;
- <T> hd;
- <T>DLListNode();
- <T>DLListNode(const <T&> h,
- <T>DLListNode* p = 0,
- <T>DLListNode* n = 0);
- ~<T>DLListNode();
-};
-
-inline <T>DLListNode::<T>DLListNode() {}
-
-inline <T>DLListNode::<T>DLListNode(const <T&> h, <T>DLListNode* p,
- <T>DLListNode* n)
- :bk(p), fd(n), hd(h) {}
-
-inline <T>DLListNode::~<T>DLListNode() {}
-
-typedef <T>DLListNode* <T>DLListNodePtr;
-
-#endif
-
-class <T>DLList
-{
- friend class <T>DLListTrav;
-
- <T>DLListNode* h;
-
-public:
- <T>DLList();
- <T>DLList(const <T>DLList& a);
- ~<T>DLList();
-
- <T>DLList& operator = (const <T>DLList& a);
-
- int empty();
- int length();
-
- void clear();
-
- Pix prepend(<T&> item);
- Pix append(<T&> item);
- void join(<T>DLList&);
-
- <T>& front();
- <T> remove_front();
- void del_front();
-
- <T>& rear();
- <T> remove_rear();
- void del_rear();
-
- <T>& operator () (Pix p);
- Pix first();
- Pix last();
- void next(Pix& p);
- void prev(Pix& p);
- int owns(Pix p);
- Pix ins_after(Pix p, <T&> item);
- Pix ins_before(Pix p, <T&> item);
- void del(Pix& p, int dir = 1);
- void del_after(Pix& p);
-
- void error(const char* msg);
- int OK();
-};
-
-
-inline <T>DLList::~<T>DLList()
-{
- clear();
-}
-
-inline <T>DLList::<T>DLList()
-{
- h = 0;
-}
-
-inline int <T>DLList::empty()
-{
- return h == 0;
-}
-
-
-inline void <T>DLList::next(Pix& p)
-{
- p = (p == 0 || p == h->bk)? 0 : Pix(((<T>DLListNode*)p)->fd);
-}
-
-inline void <T>DLList::prev(Pix& p)
-{
- p = (p == 0 || p == h)? 0 : Pix(((<T>DLListNode*)p)->bk);
-}
-
-inline Pix <T>DLList::first()
-{
- return Pix(h);
-}
-
-inline Pix <T>DLList::last()
-{
- return (h == 0)? 0 : Pix(h->bk);
-}
-
-inline <T>& <T>DLList::operator () (Pix p)
-{
- if (p == 0) error("null Pix");
- return ((<T>DLListNode*)p)->hd;
-}
-
-inline <T>& <T>DLList::front()
-{
- if (h == 0) error("front: empty list");
- return h->hd;
-}
-
-inline <T>& <T>DLList::rear()
-{
- if (h == 0) error("rear: empty list");
- return h->bk->hd;
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/gen/Deque.ccP b/contrib/libg++/libg++/src/gen/Deque.ccP
deleted file mode 100644
index 79a9b72c875c..000000000000
--- a/contrib/libg++/libg++/src/gen/Deque.ccP
+++ /dev/null
@@ -1,11 +0,0 @@
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include "<T>.Deque.h"
-
-<T>Deque::~<T>Deque() {}
-
-void <T>Deque::error(const char* msg)
-{
- (*lib_error_handler)("Deque", msg);
-}
diff --git a/contrib/libg++/libg++/src/gen/Deque.hP b/contrib/libg++/libg++/src/gen/Deque.hP
deleted file mode 100644
index 35764321f35d..000000000000
--- a/contrib/libg++/libg++/src/gen/Deque.hP
+++ /dev/null
@@ -1,57 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
- based on code by Marc Shapiro (shapiro@sor.inria.fr)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#ifndef _<T>Deque_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _<T>Deque_h
-
-#include <builtin.h>
-
-#include "<T>.defs.h"
-
-class <T>Deque
-{
-public:
- <T>Deque() { }
- virtual ~<T>Deque();
-
- virtual void push(<T&> item) = 0; // insert at front
- virtual void enq(<T&> item) = 0; // insert at rear
-
- virtual <T>& front() = 0;
- virtual <T>& rear() = 0;
-
- virtual <T> deq() = 0;
- virtual void del_front() = 0;
- virtual void del_rear() = 0;
-
- virtual int empty() = 0;
- virtual int full() = 0;
- virtual int length() = 0;
- virtual void clear() = 0;
-
- virtual int OK() = 0;
-
- void error(const char*);
-};
-
-#endif
diff --git a/contrib/libg++/libg++/src/gen/FPQueue.ccP b/contrib/libg++/libg++/src/gen/FPQueue.ccP
deleted file mode 100644
index a358cacb60ee..000000000000
--- a/contrib/libg++/libg++/src/gen/FPQueue.ccP
+++ /dev/null
@@ -1,4 +0,0 @@
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include "<T>.FPQueue.h"
diff --git a/contrib/libg++/libg++/src/gen/FPQueue.hP b/contrib/libg++/libg++/src/gen/FPQueue.hP
deleted file mode 100644
index adf7e8d3159d..000000000000
--- a/contrib/libg++/libg++/src/gen/FPQueue.hP
+++ /dev/null
@@ -1,112 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
- based on code by Marc Shapiro (shapiro@sor.inria.fr)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#ifndef _<T>FPQueue_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _<T>FPQueue_h
-
-#include "<T>.FPlex.h"
-#include "<T>.Queue.h"
-
-class <T>FPQueue : public <T>Queue
-{
- <T>FPlex p;
-
-public:
- <T>FPQueue(int chunksize = DEFAULT_INITIAL_CAPACITY);
- <T>FPQueue(const <T>FPQueue& q);
- ~<T>FPQueue();
-
- void operator = (const <T>FPQueue&);
-
- void enq(<T&> item);
- <T> deq();
- <T>& front();
- void del_front();
-
- void clear();
- int empty();
- int full();
- int length();
-
- int OK();
-};
-
-inline <T>FPQueue::<T>FPQueue(int chunksize) : p(chunksize) {}
-inline <T>FPQueue::<T>FPQueue(const <T>FPQueue& q) : p(q.p) {}
-
-inline <T>FPQueue::~<T>FPQueue() {}
-
-inline void <T>FPQueue::enq(<T&>item)
-{
- p.add_high(item);
-}
-
-inline <T> <T>FPQueue::deq()
-{
- <T> res = p.low_element();
- p.del_low();
- return res;
-}
-
-inline <T>& <T>FPQueue::front()
-{
- return p.low_element();
-}
-
-
-inline void <T>FPQueue::del_front()
-{
- p.del_low();
-}
-
-inline void <T>FPQueue::operator =(const <T>FPQueue& s)
-{
- p = s.p;
-}
-
-inline int <T>FPQueue::empty()
-{
- return p.empty();
-}
-
-inline int <T>FPQueue::full()
-{
- return p.full();
-}
-
-inline int <T>FPQueue::length()
-{
- return p.length();
-}
-
-inline int <T>FPQueue::OK()
-{
- return p.OK();
-}
-
-inline void <T>FPQueue::clear()
-{
- p.clear();
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/gen/FPStack.ccP b/contrib/libg++/libg++/src/gen/FPStack.ccP
deleted file mode 100644
index 954991193b7a..000000000000
--- a/contrib/libg++/libg++/src/gen/FPStack.ccP
+++ /dev/null
@@ -1,4 +0,0 @@
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include "<T>.FPStack.h"
diff --git a/contrib/libg++/libg++/src/gen/FPStack.hP b/contrib/libg++/libg++/src/gen/FPStack.hP
deleted file mode 100644
index de1310465f96..000000000000
--- a/contrib/libg++/libg++/src/gen/FPStack.hP
+++ /dev/null
@@ -1,114 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
- based on code by Marc Shapiro (shapiro@sor.inria.fr)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#ifndef _<T>FPStack_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _<T>FPStack_h
-
-#include "<T>.FPlex.h"
-#include "<T>.Stack.h"
-
-class <T>FPStack : public <T>Stack
-{
- <T>FPlex p;
-
-public:
- <T>FPStack(int chunksize = DEFAULT_INITIAL_CAPACITY);
- <T>FPStack(const <T>FPStack& s);
- ~<T>FPStack();
-
- void operator = (const <T>FPStack&);
-
- void push(<T&> item);
- <T> pop();
- <T>& top();
- void del_top();
-
- int empty();
- int full();
- int length();
-
- void clear();
-
- int OK();
-
-};
-
-
-inline <T>FPStack::<T>FPStack(int chunksize) : p(chunksize) {}
-inline <T>FPStack::<T>FPStack(const <T>FPStack& s) : p(s.p) {}
-
-inline <T>FPStack::~<T>FPStack() {}
-
-inline void <T>FPStack::push(<T&>item)
-{
- p.add_high(item);
-}
-
-inline <T> <T>FPStack::pop()
-{
- <T> res = p.high_element();
- p.del_high();
- return res;
-}
-
-inline <T>& <T>FPStack::top()
-{
- return p.high_element();
-}
-
-inline void <T>FPStack::del_top()
-{
- p.del_high();
-}
-
-inline void <T>FPStack::operator =(const <T>FPStack& s)
-{
- p = s.p;
-}
-
-inline int <T>FPStack::empty()
-{
- return p.empty();
-}
-
-inline int <T>FPStack::full()
-{
- return p.full();
-}
-
-inline int <T>FPStack::length()
-{
- return p.length();
-}
-
-inline int <T>FPStack::OK()
-{
- return p.OK();
-}
-
-inline void <T>FPStack::clear()
-{
- p.clear();
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/gen/FPlex.ccP b/contrib/libg++/libg++/src/gen/FPlex.ccP
deleted file mode 100644
index 980870d86755..000000000000
--- a/contrib/libg++/libg++/src/gen/FPlex.ccP
+++ /dev/null
@@ -1,167 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
- based on code by Marc Shapiro (shapiro@sor.inria.fr)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include "<T>.FPlex.h"
-
-
-<T>FPlex:: <T>FPlex()
-{
- lo = fnc = 0;
- csize = DEFAULT_INITIAL_CAPACITY;
- <T>* data = new <T>[csize];
- hd = new <T>IChunk(data, lo, lo, fnc, csize);
-}
-
-<T>FPlex:: <T>FPlex(int maxsize)
-{
- if (maxsize == 0) error("invalid constructor specification");
- lo = fnc = 0;
- if (maxsize > 0)
- {
- csize = maxsize;
- <T>* data = new <T>[csize];
- hd = new <T>IChunk(data, lo, lo, fnc, csize);
- }
- else
- {
- csize = -maxsize;
- <T>* data = new <T>[csize];
- hd = new <T>IChunk(data, maxsize, lo, fnc, fnc);
- }
-}
-
-
-<T>FPlex:: <T>FPlex(int l, int maxsize)
-{
- if (maxsize == 0) error("invalid constructor specification");
- lo = fnc = l;
- if (maxsize > 0)
- {
- csize = maxsize;
- <T>* data = new <T>[csize];
- hd = new <T>IChunk(data, lo, lo, fnc, csize+lo);
- }
- else
- {
- csize = -maxsize;
- <T>* data = new <T>[csize];
- hd = new <T>IChunk(data, maxsize+lo, lo, fnc, fnc);
- }
-}
-
-<T>FPlex:: <T>FPlex(int l, int hi, const <T&> initval, int maxsize)
-{
- lo = l;
- fnc = hi + 1;
- if (maxsize >= 0)
- {
- csize = maxsize;
- if (csize < fnc - lo)
- csize = fnc - lo;
- <T>* data = new <T>[csize];
- hd = new <T>IChunk(data, lo, lo, fnc, csize);
- }
- else
- {
- csize = -maxsize;
- if (csize < fnc - lo)
- csize = fnc - lo;
- <T>* data = new <T>[csize];
- hd = new <T>IChunk(data, -csize, lo, fnc, fnc);
- }
- fill(initval);
-}
-
-<T>FPlex::<T>FPlex(const <T>FPlex& a)
-{
- lo = a.lo;
- fnc = a.fnc;
- csize = fnc - lo;
- if (csize < a.csize) csize = a.csize;
- <T>* data = new <T> [csize];
- hd = new <T>IChunk(data, lo, lo, fnc, lo+csize);
- for (int i = a.low(); i < a.fence(); a.next(i)) (*this)[i] = a[i];
-}
-
-void <T>FPlex::operator= (const <T>FPlex& a)
-{
- if (&a != this)
- {
- del_chunk(hd);
- lo = a.lo;
- fnc = a.fnc;
- csize = fnc - lo;
- if (csize < a.csize) csize = a.csize;
- <T>* data = new <T> [csize];
- hd = new <T>IChunk(data, lo, lo, fnc, lo+csize);
- for (int i = a.low(); i < a.fence(); a.next(i)) (*this)[i] = a[i];
- }
-}
-
-
-void <T>FPlex::reverse()
-{
- <T> tmp;
- int l = lo;
- int h = fnc - 1;
- while (l < h)
- {
- tmp = (*this)[l];
- (*this)[l] = (*this)[h];
- (*this)[h] = tmp;
- next(l);
- prev(h);
- }
-}
-
-void <T>FPlex::fill(const <T&> x)
-{
- for (int i = lo; i < fnc; ++i) (*this)[i] = x;
-}
-
-void <T>FPlex::fill(const <T&> x, int lo, int hi)
-{
- for (int i = lo; i <= hi; ++i) (*this)[i] = x;
-}
-
-void <T>FPlex::clear()
-{
- if (fnc != lo)
- {
- hd->clear(lo);
- fnc = lo;
- }
-}
-
-int <T>FPlex::OK () const
-{
- int v = hd != 0; // hd exists
- v &= hd-><T>IChunk::OK(); // and is OK
- v &= fnc - lo <= hd->size(); // and has enough space
- v &= lo <= fnc; // plex indices consistent
- v &= lo == hd->low_index(); // and match those
- v &= fnc == hd->fence_index(); // of chunk
- v &= one_chunk(); // and only one chunk
- if (!v) error("invariant failure");
- return v;
-}
-
diff --git a/contrib/libg++/libg++/src/gen/FPlex.hP b/contrib/libg++/libg++/src/gen/FPlex.hP
deleted file mode 100644
index 03cf96d20ba7..000000000000
--- a/contrib/libg++/libg++/src/gen/FPlex.hP
+++ /dev/null
@@ -1,253 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
- based on code by Marc Shapiro (shapiro@sor.inria.fr)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifndef _<T>FPlex_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _<T>FPlex_h 1
-
-#include "<T>.Plex.h"
-
-class <T>FPlex : public <T>Plex
-{
-public:
- <T>FPlex(); // set low = 0;
- // fence = 0;
- // csize = default
-
- <T>FPlex(int maxsize); // low = 0;
- // fence = 0;
- // csize = maxsize
-
- <T>FPlex(int lo, // low = lo;
- int maxsize); // fence=lo
- // csize = maxsize
-
- <T>FPlex(int lo, // low = lo
- int hi, // fence = hi+1
- const <T&> initval,// fill with initval,
- int maxsize = 0); // csize = maxsize
- // or fence - lo if 0
-
- <T>FPlex(const <T>FPlex&); // X(X&)
-
- inline ~<T>FPlex();
-
- void operator= (const <T>FPlex&);
-
-// virtuals
-
- inline <T>& high_element ();
- inline <T>& low_element ();
-
- inline const <T>& high_element () const;
- inline const <T>& low_element () const;
-
- inline Pix first() const;
- inline Pix last() const;
- inline void prev(Pix& ptr) const;
- inline void next(Pix& ptr) const;
- inline int owns(Pix p) const;
- inline <T>& operator () (Pix p);
- inline const <T>& operator () (Pix p) const;
-
- inline int low() const;
- inline int high() const;
- inline int valid(int idx) const;
- inline void prev(int& idx) const;
- inline void next(int& x) const;
- inline <T>& operator [] (int index);
- inline const <T>& operator [] (int index) const;
-
- inline int Pix_to_index(Pix p) const;
- inline Pix index_to_Pix(int idx) const;
-
- inline int can_add_high() const;
- inline int can_add_low() const;
- inline int full() const;
-
- inline int add_high(const <T&> elem);
- inline int del_high ();
- inline int add_low (const <T&> elem);
- inline int del_low ();
-
- void fill(const <T&> x);
- void fill(const <T&> x, int from, int to);
- void clear();
- void reverse();
-
- int OK () const;
-};
-
-
-inline int <T>FPlex::valid (int idx) const
-{
- return idx >= lo && idx < fnc;
-}
-
-inline int <T>FPlex::low() const
-{
- return lo;
-}
-
-inline int <T>FPlex::high() const
-{
- return fnc - 1;
-}
-
-inline Pix <T>FPlex::first() const
-{
- return (Pix)(hd-><T>IChunk::first_pointer());
-}
-
-inline void <T>FPlex::prev(Pix& p) const
-{
- p = Pix(hd-><T>IChunk::pred((<T>*) p));
-}
-
-inline void <T>FPlex::next(Pix& p) const
-{
- p = Pix(hd-><T>IChunk::succ((<T>*) p));
-}
-
-inline Pix <T>FPlex::last() const
-{
- return Pix(hd-><T>IChunk::last_pointer());
-}
-
-inline int <T>FPlex::full () const
-{
- return fnc - lo == csize;
-}
-
-inline void <T>FPlex::prev(int& idx) const
-{
- --idx;
-}
-
-inline void <T>FPlex::next(int& idx) const
-{
- ++idx;
-}
-
-inline <T>& <T>FPlex:: operator [] (int idx)
-{
- if (idx < lo || idx >= fnc) index_error();
- return *(hd->pointer_to(idx));
-}
-
-inline <T>& <T>FPlex:: operator () (Pix p)
-{
- return *((<T>*)p);
-}
-
-inline <T>& <T>FPlex::low_element ()
-{
- if (empty()) index_error();
- return *(hd->pointer_to(lo));
-}
-
-inline <T>& <T>FPlex::high_element ()
-{
- if (empty()) index_error();
- return *(hd->pointer_to(fnc - 1));
-}
-
-inline const <T>& <T>FPlex:: operator [] (int idx) const
-{
- if (idx < lo || idx >= fnc) index_error();
- return *(hd->pointer_to(idx));
-}
-
-inline const <T>& <T>FPlex:: operator () (Pix p) const
-{
- return *((const <T>*)p);
-}
-
-inline const <T>& <T>FPlex::low_element () const
-{
- if (empty()) index_error();
- return *(hd->pointer_to(lo));
-}
-
-inline const <T>& <T>FPlex::high_element () const
-{
- if (empty()) index_error();
- return *(hd->pointer_to(fnc - 1));
-}
-
-inline int <T>FPlex::can_add_high() const
-{
- return hd->can_grow_high();
-}
-
-inline int <T>FPlex::can_add_low() const
-{
- return hd->can_grow_low();
-}
-
-inline int <T>FPlex::add_high(const <T&> elem)
-{
- if (!can_add_high()) full_error();
- *((hd-><T>IChunk::grow_high())) = elem;
- return fnc++;
-}
-
-inline int <T>FPlex::del_high ()
-{
- if (empty()) empty_error();
- hd-><T>IChunk::shrink_high();
- return --fnc - 1;
-}
-
-inline int <T>FPlex::add_low (const <T&> elem)
-{
- if (!can_add_low()) full_error();
- *((hd-><T>IChunk::grow_low())) = elem;
- return --lo;
-}
-
-inline int <T>FPlex::del_low ()
-{
- if (empty()) empty_error();
- hd-><T>IChunk::shrink_low();
- return ++lo;
-}
-
-inline int <T>FPlex::owns (Pix p) const
-{
- return hd->actual_pointer((<T>*)p);
-}
-
-inline int <T>FPlex::Pix_to_index(Pix p) const
-{
- if (!hd->actual_pointer((const <T>*)p)) index_error();
- return hd->index_of((const <T>*)p);
-}
-
-inline Pix <T>FPlex::index_to_Pix(int idx) const
-{
- if (idx < lo || idx >= fnc) index_error();
- return Pix(hd->pointer_to(idx));
-}
-
-inline <T>FPlex::~<T>FPlex() {}
-
-#endif
diff --git a/contrib/libg++/libg++/src/gen/List.ccP b/contrib/libg++/libg++/src/gen/List.ccP
deleted file mode 100644
index f672cf2db637..000000000000
--- a/contrib/libg++/libg++/src/gen/List.ccP
+++ /dev/null
@@ -1,972 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <builtin.h>
-#include "<T>.List.h"
-
-<T>ListNode Nil<T>ListNode;
-
-class init_Nil<T>ListNode
-{
-public:
- init_Nil<T>ListNode()
- {
- Nil<T>ListNode.tl = &Nil<T>ListNode;
- Nil<T>ListNode.ref = -1;
- }
-};
-
-static init_Nil<T>ListNode Nil<T>ListNode_initializer;
-
-<T>List& <T>List::operator = (const <T>List& a)
-{
- reference(a.P);
- dereference(P);
- P = a.P;
- return *this;
-}
-
-<T> <T>List::pop()
-{
- <T> res = P->hd;
- <T>ListNode* tail = P->tl;
- reference(tail);
- dereference(P);
- P = tail;
- return res;
-}
-
-void <T>List::set_tail(<T>List& a)
-{
- reference(a.P);
- dereference(P->tl);
- P->tl = a.P;
-}
-
-<T>List <T>List::nth(int n)
-{
- <T>ListNode* p;
- for ( p = P; n-- > 0; p = p->tl);
- reference(p);
- return <T>List(p);
-}
-
-<T>List <T>List::last()
-{
- <T>ListNode* p = P;
- if (p != &Nil<T>ListNode) while (p->tl != &Nil<T>ListNode) p = p->tl;
- reference(p);
- return <T>List(p);
-}
-
-void <T>List::append(<T>List& l)
-{
- <T>ListNode* p = P;
- <T>ListNode* a = l.P;
- reference(a);
- if (p != &Nil<T>ListNode)
- {
- while (p->tl != &Nil<T>ListNode) p = p->tl;
- p->tl = a;
- }
- else
- P = a;
-}
-
-int <T>List::length()
-{
- int l = 0;
- for (<T>ListNode* p = P; p != &Nil<T>ListNode; p = p->tl) ++l;
- return l;
-}
-
-<T>& <T>List::operator [] (int n)
-{
- <T>ListNode* p;
- for ( p = P; n-- > 0; p = p->tl);
- return (p->hd);
-}
-
-int operator == (const <T>List& x, const <T>List& y)
-{
- <T>ListNode* a = x.P;
- <T>ListNode* b = y.P;
-
- for (;;)
- {
- if (a == &Nil<T>ListNode)
- return b == &Nil<T>ListNode;
- else if (b == &Nil<T>ListNode)
- return 0;
- else if (<T>EQ(a->hd, b->hd))
- {
- a = a->tl;
- b = b->tl;
- }
- else
- return 0;
- }
-}
-
-
-void <T>List::apply(<T>Procedure f)
-{
- for(<T>ListNode* p = P; p != &Nil<T>ListNode; p = p->tl)
- (*f)((p->hd));
-}
-
-void <T>List::subst(<T&> old, <T&> repl)
-{
- for(<T>ListNode* p = P; p != &Nil<T>ListNode; p = p->tl)
- if (<T>EQ(p->hd, old))
- p->hd = repl;
-}
-
-<T> <T>List::reduce(<T>Combiner f, <T&> base)
-{
- <T> r = base;
- for(<T>ListNode* p = P; p != &Nil<T>ListNode; p = p->tl)
- r = (*f)(r, (p->hd));
- return r;
-}
-
-int <T>List::position(<T&> targ)
-{
- int l = 0;
- <T>ListNode* p = P;
- for (;;)
- {
- if (p == &Nil<T>ListNode)
- return -1;
- else if (<T>EQ(p->hd, targ))
- return l;
- else
- {
- ++l;
- p = p->tl;
- }
- }
-}
-
-int <T>List::contains(<T&> targ)
-{
- <T>ListNode* p = P;
- for (;;)
- {
- if (p == &Nil<T>ListNode)
- return 0;
- else if (<T>EQ(p->hd, targ))
- return 1;
- else
- p = p->tl;
- }
-}
-
-<T>List <T>List::find(<T&> targ)
-{
- <T>ListNode* p = P;
- while (p != &Nil<T>ListNode && !<T>EQ(p->hd, targ))
- p=p->tl;
- reference(p);
- return <T>List(p);
-}
-
-Pix <T>List::seek(<T&> targ) const
-{
- const <T>ListNode* p = P;
- for (;;)
- {
- if (p == &Nil<T>ListNode)
- return 0;
- else if (<T>EQ(p->hd, targ))
- return Pix(p);
- else
- p = p->tl;
- }
-}
-
-int <T>List::owns(Pix i)
-{
- <T>ListNode* p = P;
- for (;;)
- {
- if (p == &Nil<T>ListNode)
- return 0;
- else if (Pix(p) == i)
- return 1;
- else
- p = p->tl;
- }
-}
-
-<T>List <T>List::find(<T>List& target)
-{
- <T>ListNode* targ = target.P;
- if (targ == &Nil<T>ListNode)
- return <T>List(targ);
-
- <T>ListNode* p = P;
- while (p != &Nil<T>ListNode)
- {
- if (<T>EQ(p->hd, targ->hd))
- {
- <T>ListNode* a = p->tl;
- <T>ListNode* t = targ->tl;
- for(;;)
- {
- if (t == &Nil<T>ListNode)
- {
- reference(p);
- return <T>List(p);
- }
- else if (a == &Nil<T>ListNode || !<T>EQ(a->hd, t->hd))
- break;
- else
- {
- a = a->tl;
- t = t->tl;
- }
- }
- }
- p = p->tl;
- }
- return <T>List(&Nil<T>ListNode);
-}
-
-int <T>List::contains(<T>List& target)
-{
- <T>ListNode* targ = target.P;
- if (targ == &Nil<T>ListNode)
- return 0;
-
- <T>ListNode* p = P;
- while (p != &Nil<T>ListNode)
- {
- if (<T>EQ(p->hd, targ->hd))
- {
- <T>ListNode* a = p->tl;
- <T>ListNode* t = targ->tl;
- for(;;)
- {
- if (t == &Nil<T>ListNode)
- return 1;
- else if (a == &Nil<T>ListNode || !<T>EQ(a->hd, t->hd))
- break;
- else
- {
- a = a->tl;
- t = t->tl;
- }
- }
- }
- p = p->tl;
- }
- return 0;
-}
-
-void <T>List::del(<T&> targ)
-{
- <T>ListNode* h = P;
- // Former bug: targ can be a reference to a element in this list
- // So do not dereference a element if targ is the element,
- // until targ is no longer needed, as dereferencing it may destroy it.
- <T>ListNode* to_be_dereferenced = 0;
-
- for (;;)
- {
- if (h == &Nil<T>ListNode)
- {
- P = h;
- if (to_be_dereferenced)
- dereference(to_be_dereferenced);
- return;
- }
- else if (<T>EQ(h->hd, targ))
- {
- <T>ListNode* nxt = h->tl;
- reference(nxt);
- if ((&targ == &h->hd) && (to_be_dereferenced == 0))
- to_be_dereferenced = h;
- else
- dereference(h);
- h = nxt;
- }
- else
- break;
- }
-
- <T>ListNode* trail = h;
- <T>ListNode* p = h->tl;
- while (p != &Nil<T>ListNode)
- {
- if (<T>EQ(p->hd, targ))
- {
- <T>ListNode* nxt = p->tl;
- reference(nxt);
- if ((&targ == &p->hd) && (to_be_dereferenced == 0))
- to_be_dereferenced = p;
- else
- dereference(p);
- trail->tl = nxt;
- p = nxt;
- }
- else
- {
- trail = p;
- p = p->tl;
- }
- }
- P = h;
- if (to_be_dereferenced)
- dereference(to_be_dereferenced);
-}
-
-void <T>List::del(<T>Predicate f)
-{
- <T>ListNode* h = P;
- for (;;)
- {
- if (h == &Nil<T>ListNode)
- {
- P = h;
- return;
- }
- else if ((*f)(h->hd))
- {
- <T>ListNode* nxt = h->tl;
- reference(nxt);
- dereference(h);
- h = nxt;
- }
- else
- break;
- }
-
- <T>ListNode* trail = h;
- <T>ListNode* p = h->tl;
- while (p != &Nil<T>ListNode)
- {
- if ((*f)(p->hd))
- {
- <T>ListNode* nxt = p->tl;
- reference(nxt);
- dereference(p);
- trail->tl = nxt;
- p = nxt;
- }
- else
- {
- trail = p;
- p = p->tl;
- }
- }
- P = h;
-}
-
-void <T>List::select(<T>Predicate f)
-{
- <T>ListNode* h = P;
- for (;;)
- {
- if (h == &Nil<T>ListNode)
- {
- P = h;
- return;
- }
- else if (!(*f)(h->hd))
- {
- <T>ListNode* nxt = h->tl;
- reference(nxt);
- dereference(h);
- h = nxt;
- }
- else
- break;
- }
- <T>ListNode* trail = h;
- <T>ListNode* p = h->tl;
- while (p != &Nil<T>ListNode)
- {
- if (!(*f)(p->hd))
- {
- <T>ListNode* nxt = p->tl;
- reference(nxt);
- dereference(p);
- trail->tl = nxt;
- p = nxt;
- }
- else
- {
- trail = p;
- p = p->tl;
- }
- }
- P = h;
-}
-
-void <T>List::reverse()
-{
- <T>ListNode* l = &Nil<T>ListNode;
- <T>ListNode* p = P;
- while (p != &Nil<T>ListNode)
- {
- <T>ListNode* nxt = p->tl;
- p->tl = l;
- l = p;
- p = nxt;
- }
- P = l;
-}
-
-
-<T>List copy(const <T>List& x)
-{
- const <T>ListNode* a = x.P;
- if (a == &Nil<T>ListNode)
- return <T>List(&Nil<T>ListNode);
- else
- {
- <T>ListNode* h = new<T>ListNode(a->hd);
- <T>ListNode* trail = h;
- for(a = a->tl; a != &Nil<T>ListNode; a = a->tl)
- {
- <T>ListNode* n = new<T>ListNode(a->hd);
- trail->tl = n;
- trail = n;
- }
- trail->tl = &Nil<T>ListNode;
- return <T>List(h);
- }
-}
-
-
-<T>List subst(<T&> old, <T&> repl, <T>List& x)
-{
- <T>ListNode* a = x.P;
- if (a == &Nil<T>ListNode)
- return <T>List(a);
- else
- {
- <T>ListNode* h = new <T>ListNode;
- h->ref = 1;
- if (<T>EQ(a->hd, old))
- h->hd = repl;
- else
- h->hd = a->hd;
- <T>ListNode* trail = h;
- for(a = a->tl; a != &Nil<T>ListNode; a = a->tl)
- {
- <T>ListNode* n = new <T>ListNode;
- n->ref = 1;
- if (<T>EQ(a->hd, old))
- n->hd = repl;
- else
- n->hd = a->hd;
- trail->tl = n;
- trail = n;
- }
- trail->tl = &Nil<T>ListNode;
- return <T>List(h);
- }
-}
-
-<T>List combine(<T>Combiner f, <T>List& x, <T>List& y)
-{
- <T>ListNode* a = x.P;
- <T>ListNode* b = y.P;
- if (a == &Nil<T>ListNode || b == &Nil<T>ListNode)
- return <T>List(&Nil<T>ListNode);
- else
- {
- <T>ListNode* h = new<T>ListNode((*f)(a->hd, b->hd));
- <T>ListNode* trail = h;
- a = a->tl;
- b = b->tl;
- while (a != &Nil<T>ListNode && b != &Nil<T>ListNode)
- {
- <T>ListNode* n = new<T>ListNode((*f)(a->hd, b->hd));
- trail->tl = n;
- trail = n;
- a = a->tl;
- b = b->tl;
- }
- trail->tl = &Nil<T>ListNode;
- return <T>List(h);
- }
-}
-
-<T>List reverse(<T>List& x)
-{
- <T>ListNode* a = x.P;
- if (a == &Nil<T>ListNode)
- return <T>List(a);
- else
- {
- <T>ListNode* l = new<T>ListNode(a->hd);
- l->tl = &Nil<T>ListNode;
- for(a = a->tl; a != &Nil<T>ListNode; a = a->tl)
- {
- <T>ListNode* n = new<T>ListNode(a->hd);
- n->tl = l;
- l = n;
- }
- return <T>List(l);
- }
-}
-
-<T>List append(<T>List& x, <T>List& y)
-{
- <T>ListNode* a = x.P;
- <T>ListNode* b = y.P;
- reference(b);
- if (a != &Nil<T>ListNode)
- {
- <T>ListNode* h = new<T>ListNode(a->hd);
- <T>ListNode* trail = h;
- for(a = a->tl; a != &Nil<T>ListNode; a = a->tl)
- {
- <T>ListNode* n = new<T>ListNode(a->hd);
- trail->tl = n;
- trail = n;
- }
- trail->tl = b;
- return <T>List(h);
- }
- else
- return <T>List(b);
-}
-
-void <T>List::prepend(<T>List& y)
-{
- <T>ListNode* b = y.P;
- if (b != &Nil<T>ListNode)
- {
- <T>ListNode* h = new<T>ListNode(b->hd);
- <T>ListNode* trail = h;
- for(b = b->tl; b != &Nil<T>ListNode; b = b->tl)
- {
- <T>ListNode* n = new<T>ListNode(b->hd);
- trail->tl = n;
- trail = n;
- }
- trail->tl = P;
- P = h;
- }
-}
-
-<T>List concat(<T>List& x, <T>List& y)
-{
- <T>ListNode* a = x.P;
- <T>ListNode* b = y.P;
- if (a != &Nil<T>ListNode)
- {
- <T>ListNode* h = new<T>ListNode(a->hd);
- <T>ListNode* trail = h;
- for(a = a->tl; a != &Nil<T>ListNode; a = a->tl)
- {
- <T>ListNode* n = new<T>ListNode(a->hd);
- trail->tl = n;
- trail = n;
- };
- for(;b != &Nil<T>ListNode; b = b->tl)
- {
- <T>ListNode* n = new<T>ListNode(b->hd);
- trail->tl = n;
- trail = n;
- }
- trail->tl = &Nil<T>ListNode;
- return <T>List(h);
- }
- else if (b != &Nil<T>ListNode)
- {
- <T>ListNode* h = new<T>ListNode(b->hd);
- <T>ListNode* trail = h;
- for(b = b->tl; b != &Nil<T>ListNode; b = b->tl)
- {
- <T>ListNode* n = new<T>ListNode(b->hd);
- trail->tl = n;
- trail = n;
- }
- trail->tl = &Nil<T>ListNode;
- return <T>List(h);
- }
- else
- return <T>List(&Nil<T>ListNode);
-}
-
-<T>List select(<T>Predicate f, <T>List& x)
-{
- <T>ListNode* a = x.P;
- <T>ListNode* h = &Nil<T>ListNode;
- while (a != &Nil<T>ListNode)
- {
- if ((*f)(a->hd))
- {
- h = new<T>ListNode(a->hd);
- <T>ListNode* trail = h;
- for(a = a->tl; a != &Nil<T>ListNode; a = a->tl)
- {
- if ((*f)(a->hd))
- {
- <T>ListNode* n = new<T>ListNode(a->hd);
- trail->tl = n;
- trail = n;
- }
- }
- trail->tl = &Nil<T>ListNode;
- break;
- }
- else
- a = a->tl;
- }
- return <T>List(h);
-}
-
-<T>List remove(<T>Predicate f, <T>List& x)
-{
- <T>ListNode* a = x.P;
- <T>ListNode* h = &Nil<T>ListNode;
- while (a != &Nil<T>ListNode)
- {
- if (!(*f)(a->hd))
- {
- h = new<T>ListNode(a->hd);
- <T>ListNode* trail = h;
- for(a = a->tl; a != &Nil<T>ListNode; a = a->tl)
- {
- if (!(*f)(a->hd))
- {
- <T>ListNode* n = new<T>ListNode(a->hd);
- trail->tl = n;
- trail = n;
- }
- }
- trail->tl = &Nil<T>ListNode;
- break;
- }
- else
- a = a->tl;
- }
- return <T>List(h);
-}
-
-<T>List remove(<T&> targ, <T>List& x)
-{
- <T>ListNode* a = x.P;
- <T>ListNode* h = &Nil<T>ListNode;
- while (a != &Nil<T>ListNode)
- {
- if (!(<T>EQ(a->hd, targ)))
- {
- h = new<T>ListNode(a->hd);
- <T>ListNode* trail = h;
- for(a = a->tl; a != &Nil<T>ListNode; a = a->tl)
- {
- if (!<T>EQ(a->hd, targ))
- {
- <T>ListNode* n = new<T>ListNode(a->hd);
- trail->tl = n;
- trail = n;
- }
- }
- trail->tl = &Nil<T>ListNode;
- break;
- }
- else
- a = a->tl;
- }
- return <T>List(h);
-}
-
-<T>List map(<T>Mapper f, <T>List& x)
-{
- <T>ListNode* a = x.P;
- <T>ListNode* h = &Nil<T>ListNode;
- if (a != &Nil<T>ListNode)
- {
- h = new<T>ListNode((*f)(a->hd));
- <T>ListNode* trail = h;
- for(a = a->tl; a != &Nil<T>ListNode; a = a->tl)
- {
- <T>ListNode* n = new<T>ListNode((*f)(a->hd));
- trail->tl = n;
- trail = n;
- }
- trail->tl = &Nil<T>ListNode;
- }
- return <T>List(h);
-}
-
-
-<T>List merge(<T>List& x, <T>List& y, <T>Comparator f)
-{
- <T>ListNode* a = x.P;
- <T>ListNode* b = y.P;
-
- if (a == &Nil<T>ListNode)
- {
- if (b == &Nil<T>ListNode)
- return <T>List(&Nil<T>ListNode);
- else
- return copy(y);
- }
- else if (b == &Nil<T>ListNode)
- return copy(x);
-
- <T>ListNode* h = new <T>ListNode;
- h->ref = 1;
- if ((*f)(a->hd, b->hd) <= 0)
- {
- h->hd = a->hd;
- a = a->tl;
- }
- else
- {
- h->hd = b->hd;
- b = b->tl;
- }
-
- <T>ListNode* r = h;
-
- for(;;)
- {
- if (a == &Nil<T>ListNode)
- {
- while (b != &Nil<T>ListNode)
- {
- <T>ListNode* n = new <T>ListNode;
- n->ref = 1;
- n->hd = b->hd;
- r->tl = n;
- r = n;
- b = b->tl;
- }
- r->tl = &Nil<T>ListNode;
- return <T>List(h);
- }
- else if (b == &Nil<T>ListNode)
- {
- while (a != &Nil<T>ListNode)
- {
- <T>ListNode* n = new <T>ListNode;
- n->ref = 1;
- n->hd = a->hd;
- r->tl = n;
- r = n;
- a = a->tl;
- }
- r->tl = &Nil<T>ListNode;
- return <T>List(h);
- }
- else if ((*f)(a->hd, b->hd) <= 0)
- {
- <T>ListNode* n = new <T>ListNode;
- n->ref = 1;
- n->hd = a->hd;
- r->tl = n;
- r = n;
- a = a->tl;
- }
- else
- {
- <T>ListNode* n = new <T>ListNode;
- n->ref = 1;
- n->hd = b->hd;
- r->tl = n;
- r = n;
- b = b->tl;
- }
- }
-}
-
-void <T>List::sort(<T>Comparator f)
-{
- // strategy: place runs in queue, merge runs until done
- // This is often very fast
-
- if (P == &Nil<T>ListNode || P->tl == &Nil<T>ListNode)
- return;
-
- int qlen = 250; // guess a good queue size, realloc if necessary
-
- <T>ListNode** queue = (<T>ListNode**)malloc(qlen * sizeof(<T>ListNode*));
-
- <T>ListNode* h = P;
- <T>ListNode* a = h;
- <T>ListNode* b = a->tl;
- int qin = 0;
-
- while (b != &Nil<T>ListNode)
- {
- if ((*f)(a->hd, b->hd) > 0)
- {
- if (h == a) // minor optimization: ensure runlen >= 2
- {
- h = b;
- a->tl = b->tl;
- b->tl = a;
- b = a->tl;
- }
- else
- {
- if (qin >= qlen)
- {
- qlen *= 2;
- queue = (<T>ListNode**)realloc(queue, qlen * sizeof(<T>ListNode*));
- }
- queue[qin++] = h;
- a->tl = &Nil<T>ListNode;
- h = a = b;
- b = b->tl;
- }
- }
- else
- {
- a = b;
- b = b->tl;
- }
- }
-
- int count = qin;
- queue[qin] = h;
- if (++qin >= qlen) qin = 0;
- int qout = 0;
-
- while (count-- > 0)
- {
- a = queue[qout];
- if (++qout >= qlen) qout = 0;
- b = queue[qout];
- if (++qout >= qlen) qout = 0;
-
- if ((*f)(a->hd, b->hd) <= 0)
- {
- h = a;
- a = a->tl;
- }
- else
- {
- h = b;
- b = b->tl;
- }
- queue[qin] = h;
- if (++qin >= qlen) qin = 0;
-
- for (;;)
- {
- if (a == &Nil<T>ListNode)
- {
- h->tl = b;
- break;
- }
- else if (b == &Nil<T>ListNode)
- {
- h->tl = a;
- break;
- }
- else if ((*f)(a->hd, b->hd) <= 0)
- {
- h->tl = a;
- h = a;
- a = a->tl;
- }
- else
- {
- h->tl = b;
- h = b;
- b = b->tl;
- }
- }
- }
- P = queue[qout];
- free(queue);
-}
-
-int <T>List::list_length()
-{
- <T>ListNode* fast = P;
- if (fast == &Nil<T>ListNode)
- return 0;
-
- <T>ListNode* slow = fast->tl;
- if (slow == &Nil<T>ListNode)
- return 1;
-
- fast = slow->tl;
- int n = 2;
-
- for (;;)
- {
- if (fast == &Nil<T>ListNode)
- return n;
- else if (fast->tl == &Nil<T>ListNode)
- return n+1;
- else if (fast == slow)
- return -1;
- else
- {
- n += 2;
- fast = fast->tl->tl;
- slow = slow->tl;
- }
- }
-}
-
-void <T>List::error(const char* msg)
-{
- (*lib_error_handler)("List", msg);
-}
-
-int <T>List::OK()
-{
- int v = P != 0; // have a node
- // check that all nodes OK, even if circular:
-
- <T>ListNode* fast = P;
- if (fast != &Nil<T>ListNode)
- {
- v &= fast->ref != 0;
- <T>ListNode* slow = fast->tl;
- v &= slow->ref != 0;
- if (v && slow != &Nil<T>ListNode)
- {
- fast = slow->tl;
- v &= fast->ref != 0;
- while (v)
- {
- if (fast == &Nil<T>ListNode)
- break;
- else if (fast->tl == &Nil<T>ListNode)
- break;
- else if (fast == slow)
- break;
- else
- {
- v &= fast->ref != 0 && slow->ref != 0;
- fast = fast->tl->tl;
- slow = slow->tl;
- }
- }
- }
- }
- if (!v) error ("invariant failure");
- return v;
-}
diff --git a/contrib/libg++/libg++/src/gen/List.hP b/contrib/libg++/libg++/src/gen/List.hP
deleted file mode 100644
index 4551e3e47ef2..000000000000
--- a/contrib/libg++/libg++/src/gen/List.hP
+++ /dev/null
@@ -1,279 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#ifndef _<T>List_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _<T>List_h 1
-
-#include <Pix.h>
-#include "<T>.defs.h"
-
-#ifndef _<T>_typedefs
-#define _<T>_typedefs 1
-typedef void (*<T>Procedure)(<T&>);
-typedef <T> (*<T>Mapper)(<T&>);
-typedef <T> (*<T>Combiner)(<T&>, <T&>);
-typedef int (*<T>Predicate)(<T&>);
-typedef int (*<T>Comparator)(<T&>, <T&>);
-#endif
-
-struct <T>ListNode
-{
- <T>ListNode* tl;
- short ref;
- <T> hd;
-};
-
-extern <T>ListNode Nil<T>ListNode;
-
-class <T>List
-{
-protected:
- <T>ListNode* P;
-
- <T>List(<T>ListNode* p);
-public:
- <T>List();
- <T>List(<T&> head);
- <T>List(<T&> head, const <T>List& tl);
- <T>List(<T>List& a);
- <T>List(Pix p);
- ~<T>List();
-
- <T>List& operator = (const <T>List& a);
-
- int null();
- int valid();
- operator const void* ();
- int operator ! ();
-
- int length();
- int list_length();
-
- <T>& get();
- <T>& head();
- <T>& operator [] (int n);
-
- <T>List nth(int n);
- <T>List tail();
- <T>List last();
-
- <T>List find(<T&> targ);
- <T>List find(<T>List& targ);
- int contains(<T&> targ);
- int contains(<T>List& targ);
- int position(<T&> targ);
-
- friend <T>List copy(const <T>List& a);
- friend <T>List concat(<T>List& a, <T>List& b);
- friend <T>List append(<T>List& a, <T>List& b);
- friend <T>List map(<T>Mapper f, <T>List& a);
- friend <T>List merge(<T>List& a, <T>List& b, <T>Comparator f);
- friend <T>List combine(<T>Combiner f, <T>List& a, <T>List& b);
- friend <T>List reverse(<T>List& a);
- friend <T>List select(<T>Predicate f, <T>List& a);
-#undef remove
- friend <T>List remove(<T&> targ, <T>List& a);
- friend <T>List remove(<T>Predicate f, <T>List& a);
- friend <T>List subst(<T&> old, <T&> repl, <T>List& a);
-
- void push(<T&> x);
- <T> pop();
-
- void set_tail(<T>List& p);
- void append(<T>List& p);
- void prepend(<T>List& p);
- void del(<T&> targ);
- void del(<T>Predicate f);
- void select(<T>Predicate f);
- void subst(<T&> old, <T&> repl);
- void reverse();
- void sort(<T>Comparator f);
-
- void apply(<T>Procedure f);
- <T> reduce(<T>Combiner f, <T&> base);
-
- friend int operator == (const <T>List& a, const <T>List& b);
- friend inline int operator != (const <T>List& a, const <T>List& b);
-
- Pix first();
- void next(Pix& p);
- Pix seek(<T&> item) const;
- <T>& operator () (Pix p);
- const <T>& operator () (Pix p) const;
- int owns(Pix p);
-
- void error(const char*);
- int OK();
-};
-
-
-inline void reference(<T>ListNode* p)
-{
- if (p->ref >= 0) ++p->ref;
-}
-
-inline void dereference(<T>ListNode* p)
-{
- while (p->ref > 0 && --p->ref == 0)
- {
- <T>ListNode* n = p->tl;
- delete(p);
- p = n;
- }
-}
-
-
-inline <T>ListNode* new<T>ListNode(const <T&> h)
-{
- <T>ListNode* p = new <T>ListNode;
- p->ref = 1;
- p->hd = h;
- return p;
-}
-
-inline <T>ListNode* new<T>ListNode(<T&> h, <T>ListNode* t)
-{
- <T>ListNode* p = new <T>ListNode;
- p->ref = 1;
- p->hd = h;
- p->tl = t;
- return p;
-}
-
-
-inline <T>List::~<T>List()
-{
- dereference(P);
-}
-
-inline <T>List::<T>List()
-{
- P = &Nil<T>ListNode;
-}
-
-inline <T>List::<T>List(<T>ListNode* p)
-{
- P = p;
-}
-
-inline <T>List::<T>List(<T&> head)
-{
- P = new<T>ListNode(head);
- P->tl = &Nil<T>ListNode;
-}
-
-inline <T>List::<T>List(<T&> head, const <T>List& tl)
-{
- P = new<T>ListNode(head, tl.P);
- reference(P->tl);
-}
-
-inline <T>List::<T>List(<T>List& a)
-{
- reference(a.P);
- P = a.P;
-}
-
-
-inline <T>& <T>List::get()
-{
- return P->hd;
-}
-
-inline <T>& <T>List::head()
-{
- return P->hd;
-}
-
-
-inline <T>List <T>List::tail()
-{
- reference(P->tl);
- return <T>List(P->tl);
-}
-
-
-
-inline int <T>List::null()
-{
- return P == &Nil<T>ListNode;
-}
-
-inline int <T>List::valid()
-{
- return P != &Nil<T>ListNode;
-}
-
-inline <T>List::operator const void* ()
-{
- return (P == &Nil<T>ListNode)? 0 : this;
-}
-
-inline int <T>List::operator ! ()
-{
- return (P == &Nil<T>ListNode);
-}
-
-
-inline void <T>List::push(<T&> head)
-{
- <T>ListNode* oldp = P;
- P = new<T>ListNode(head, oldp);
-}
-
-
-inline int operator != (const <T>List& x, const <T>List& y)
-{
- return !(x == y);
-}
-
-inline Pix <T>List::first()
-{
- return (P == &Nil<T>ListNode)? 0 : Pix(P);
-}
-
-inline <T>& <T>List::operator () (Pix p)
-{
- return ((<T>ListNode*)p)->hd;
-}
-
-inline const <T>& <T>List::operator () (Pix p) const
-{
- return ((const <T>ListNode*)p)->hd;
-}
-
-inline void <T>List::next(Pix& p)
-{
- if (p != 0)
- {
- p = Pix(((<T>ListNode*)p)->tl);
- if (p == &Nil<T>ListNode) p = 0;
- }
-}
-
-inline <T>List::<T>List(Pix p)
-{
- P = (<T>ListNode*)p;
- reference(P);
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/gen/MPlex.ccP b/contrib/libg++/libg++/src/gen/MPlex.ccP
deleted file mode 100644
index 8c306b5e8a65..000000000000
--- a/contrib/libg++/libg++/src/gen/MPlex.ccP
+++ /dev/null
@@ -1,848 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
- based on code by Marc Shapiro (shapiro@sor.inria.fr)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include "<T>.MPlex.h"
-
-// <T>MChunk support
-
-
-<T>MChunk::<T>MChunk(<T>* d,
- int baseidx,
- int lowidx,
- int fenceidx,
- int topidx)
- : <T>IChunk(d, baseidx, lowidx, fenceidx, topidx)
-{
- unused = fence - low;
- unsigned msize = (top - base)/_MAP_BITS + 1;
- map = (unsigned long *) (new long[msize]);
- memset((void*)map, 0, msize * sizeof(long));
-}
-
-void <T>MChunk:: shrink_high ()
-{
- if (fence <= low) empty_error();
- --fence;
- if (!valid(fence))
- --unused;
- else
- free(fence);
- reset_high();
-}
-
-void <T>MChunk:: shrink_low ()
-{
- if (fence <= low) empty_error();
- if (!valid(low))
- --unused;
- else
- free(low);
- ++low;
- reset_low();
-}
-
-void <T>MChunk::clear(int lo)
-{
- int s = top - base;
- low = base = fence = lo;
- top = base + s;
- unused = 0;
- memset((void*)map, 0, ((top - base)/_MAP_BITS + 1) * sizeof(long));
-}
-
-void <T>MChunk::cleardown(int hi)
-{
- int s = top - base;
- low = top = fence = hi;
- base = top - s;
- unused = 0;
- memset((void*)map, 0, ((top - base)/_MAP_BITS + 1) * sizeof(long));
-}
-
-int <T>MChunk::del(int idx)
-{
- if (idx < low || idx >= fence) index_error();
- int v = valid(idx);
- if (v)
- {
- free(idx);
- ++unused;
- }
- return v;
-}
-
-
-int <T>MChunk::undel(int idx)
-{
- if (idx < low || idx >= fence) index_error();
- int v = valid(idx);
- if (!v)
- {
- mark(idx);
- --unused;
- }
- return v;
-}
-
-int <T>MChunk::unused_index() const
-{
- if (unused_indices() == 0) index_error();
- int slot;
- if (low == base) // can traverse 32 slots at a time
- {
- int blk = 0;
- while (map[blk] == ~0UL) ++blk;
- slot = blk * _MAP_BITS + base;
- }
- else
- slot = low;
-
- while(valid(slot)) ++slot;
- return slot;
-}
-
-int <T>MChunk::first_index() const
-{
- if (empty()) return fence;
- int slot;
- if (low == base)
- {
- int blk = 0;
- while (map[blk] == 0) ++blk;
- slot = blk * _MAP_BITS + base;
- }
- else
- slot = low;
-
- while(!valid(slot)) ++slot;
- return slot;
-}
-
-int <T>MChunk::last_index() const
-{
- if (empty()) return low - 1;
- int slot;
- if (top == fence)
- {
- int blk = (top - base) / _MAP_BITS;
- while (map[blk] == 0) --blk;
- slot = blk * _MAP_BITS + base + _MAP_BITS - 1;
- }
- else
- slot = fence - 1;
-
- while(!valid(slot)) --slot;
- return slot;
-}
-
-
-int <T>MChunk:: OK() const
-{
- int v = data != 0; // have some data
- v &= map != 0; // and a map
- v &= base <= low; // ok, index-wise
- v &= low <= fence;
- v &= fence <= top;
-
- v &= ((<T>MChunk*)(nxt->prev())) == this; // and links are OK
- v &= ((<T>MChunk*)(prv->next())) == this;
-
- int bitcount = 0; // and unused count correct
- for (int i = low; i < fence; ++i) if (!valid(i)) ++bitcount;
- v &= unused == bitcount;
-
- if (!v) error("invariant failure");
- return(v);
-}
-
-<T>* <T>MChunk::succ(<T>* p) const
-{
- int i = ((int) p - (int) data) / sizeof(<T>) + base + 1;
- if (p == 0 || i < low) return 0;
- while (i < fence && !valid(i)) ++i;
- if (i >= fence) return 0;
- return pointer_to(i);
-}
-
-<T>* <T>MChunk::pred(<T>* p) const
-{
- int i = ((int) p - (int) data) / sizeof(<T>) + base - 1;
- if (p == 0 || i >= fence) return 0;
- while (i >= low && !valid(i)) --i;
- if (i < low) return 0;
- return pointer_to(i);
-}
-
-<T>* <T>MChunk::first_pointer() const
-{
- if (empty()) return 0;
- int slot;
- if (low == base)
- {
- int blk = 0;
- while (map[blk] == 0) ++blk;
- slot = blk * _MAP_BITS + base;
- }
- else
- slot = low;
-
- while(!valid(slot)) ++slot;
- return pointer_to(slot);
-}
-
-<T>* <T>MChunk::last_pointer() const
-{
- if (empty()) return 0;
- int slot;
- if (top == fence)
- {
- int blk = (top - base) / _MAP_BITS;
- while (map[blk] == 0) --blk;
- slot = blk * _MAP_BITS + base + _MAP_BITS - 1;
- }
- else
- slot = fence - 1;
-
- while(!valid(slot)) --slot;
- return pointer_to(slot);
-}
-
-<T>MPlex:: <T>MPlex()
-{
- unused = 0;
- lo = fnc = 0;
- csize = DEFAULT_INITIAL_CAPACITY;
- <T>* data = new <T>[csize];
- hd = ch = new <T>MChunk(data, lo, lo, fnc, lo+csize);
-}
-
-<T>MPlex:: <T>MPlex(int chunksize)
-{
- if (chunksize == 0) error("invalid constructor specification");
- unused = 0;
- lo = fnc = 0;
- if (chunksize > 0)
- {
- csize = chunksize;
- <T>* data = new <T>[csize];
- hd = ch = new <T>MChunk(data, lo, lo, fnc, csize);
- }
- else
- {
- csize = -chunksize;
- <T>* data = new <T>[csize];
- hd = ch = new <T>MChunk(data, chunksize, lo, fnc, fnc);
- }
-}
-
-
-<T>MPlex:: <T>MPlex(int l, int chunksize)
-{
- if (chunksize == 0) error("invalid constructor specification");
- unused = 0;
- lo = fnc = l;
- if (chunksize > 0)
- {
- csize = chunksize;
- <T>* data = new <T>[csize];
- hd = ch = new <T>MChunk(data, lo, lo, fnc, csize+lo);
- }
- else
- {
- csize = -chunksize;
- <T>* data = new <T>[csize];
- hd = ch = new <T>MChunk(data, chunksize+lo, lo, fnc, fnc);
- }
-}
-
-
-void <T>MPlex::make_initial_chunks(int up)
-{
- int need = fnc - lo;
- hd = 0;
- if (up)
- {
- int l = lo;
- do
- {
- int sz;
- if (need >= csize)
- sz = csize;
- else
- sz = need;
- <T>* data = new <T> [csize];
- <T>MChunk* h = new <T>MChunk(data, l, l, l+sz, l+csize);
- if (hd != 0)
- h->link_to_next(hd);
- else
- hd = h;
- l += sz;
- need -= sz;
- } while (need > 0);
- }
- else
- {
- int hi = fnc;
- do
- {
- int sz;
- if (need >= csize)
- sz = csize;
- else
- sz = need;
- <T>* data = new <T> [csize];
- <T>MChunk* h = new <T>MChunk(data, hi-csize, hi-sz, hi, hi);
- if (hd != 0)
- h->link_to_next(hd);
- hd = h;
- hi -= sz;
- need -= sz;
- } while (need > 0);
- }
- ch = (<T>MChunk*) hd;
-}
-
-<T>MPlex:: <T>MPlex(int l, int hi, const <T&> initval, int chunksize)
-{
- lo = l;
- fnc = hi + 1;
- if (chunksize == 0)
- {
- csize = fnc - l;
- make_initial_chunks(1);
- }
- else if (chunksize < 0)
- {
- csize = -chunksize;
- make_initial_chunks(0);
- }
- else
- {
- csize = chunksize;
- make_initial_chunks(1);
- }
- unused = fnc - lo;
- for (int i=lo; i<fnc; ++i)
- undel_index(i);
- fill(initval);
-}
-
-<T>MPlex::<T>MPlex(const <T>MPlex& a)
-{
- lo = a.lo;
- fnc = a.fnc;
- csize = a.csize;
- unused = fnc - lo;
- hd = 0;
- const <T>IChunk* p = a.hd;
- do
- {
- <T>* data = new <T> [p->size()];
- <T>MChunk* h = new <T>MChunk(data, p->base_index(),
- p->low_index(), p->fence_index(), p->top_index());
- if (hd != 0)
- h->link_to_next(hd);
- else
- hd = h;
- p = p->next();
- } while (p != a.hd);
- ch = (<T>MChunk*) hd;
- for (int i = a.low(); i < a.fence(); a.next(i))
- {
- undel_index(i);
- (*this)[i] = a[i];
- }
-}
-
-void <T>MPlex::operator= (const <T>MPlex& a)
-{
- if (&a != this)
- {
- invalidate();
- lo = a.lo;
- fnc = a.fnc;
- csize = a.csize;
- unused = fnc - lo;
- hd = 0;
- const <T>IChunk* p = a.hd;
- do
- {
- <T>* data = new <T> [p->size()];
- <T>MChunk* h = new <T>MChunk(data, p->base_index(),
- p->low_index(), p->fence_index(),
- p->top_index());
- if (hd != 0)
- h->link_to_next(hd);
- else
- hd = h;
- p = p->next();
- } while (p != a.hd);
- ch = (<T>MChunk*) hd;
- for (int i = a.low(); i < a.fence(); a.next(i))
- {
- undel_index(i);
- (*this)[i] = a[i];
- }
- }
-}
-
-int <T>MPlex::valid(int idx) const
-{
- const <T>MChunk* tail = (<T>MChunk*)tl();
- const <T>MChunk* t = ch;
- while (idx >= t->fence_index())
- {
- if (t == tail) return 0;
- t = ((<T>MChunk*)(t->next()));
- }
- while (idx < t->low_index())
- {
- if (t == (<T>MChunk*)(hd)) return 0;
- t = ((<T>MChunk*)(t->prev()));
- }
- set_cache(t);
- return t-><T>MChunk::valid_index(idx);
-}
-
-void <T>MPlex::cache(int idx) const
-{
- const <T>MChunk* tail = (<T>MChunk*)tl();
- const <T>MChunk* t = ch;
- while (idx >= t->fence_index())
- {
- if (t == tail) index_error();
- t = ((<T>MChunk*)(t->next()));
- }
- while (idx < t->low_index())
- {
- if (t == (<T>MChunk*)hd) index_error();
- t = ((<T>MChunk*)(t->prev()));
- }
- if (!t-><T>MChunk::valid_index(idx)) index_error();
- set_cache(t);
-}
-
-void <T>MPlex::cache(const <T>* p) const
-{
- const <T>MChunk* old = ch;
- const <T>MChunk* t = ch;
- while (!t->actual_pointer(p))
- {
- t = ((<T>MChunk*)(t->next()));
- if (t == old) index_error();
- }
- if (!t-><T>MChunk::valid_pointer(p)) index_error();
- set_cache(t);
-}
-
-int <T>MPlex::owns(Pix px) const
-{
- <T>* p = (<T>*)px;
- const <T>MChunk* old = ch;
- const <T>MChunk* t = ch;
- while (!t->actual_pointer(p))
- {
- t = ((<T>MChunk*)(t->next()));
- if (t == old) return 0;
- }
- set_cache(t);
- return t-><T>MChunk::valid_pointer(p);
-}
-
-int <T>MPlex::add_high(const <T&> elem)
-{
- <T>MChunk* t = ((<T>MChunk*) tl());
-
- if (!t->can_grow_high())
- {
- <T>* data = new <T> [csize];
- t = (new <T>MChunk(data, fnc,fnc,fnc,fnc+csize));
- t->link_to_prev(tl());
- }
-
- *((t-><T>MChunk::grow_high())) = elem;
- set_cache(t);
- return fnc++;
-}
-
-int <T>MPlex::add_low (const <T&> elem)
-{
- <T>MChunk* t = ((<T>MChunk*) hd);
- if (!t->can_grow_low())
- {
- <T>* data = new <T> [csize];
- hd = new <T>MChunk(data, lo-csize, lo, lo, lo);
- hd->link_to_next(t);
- t = ((<T>MChunk*) hd);
- }
-
- *((t-><T>MChunk::grow_low())) = elem;
- set_cache(t);
- return --lo;
-}
-
-void <T>MPlex::adjust_bounds()
-{
- <T>MChunk* t = ((<T>MChunk*) tl());
-
- // clean up tail
-
- t->reset_high();
- while (t-><T>MChunk::empty() && !one_chunk())
- {
- <T>MChunk* pred = (<T>MChunk*)(t->prev());
- del_chunk(t);
- pred->reset_high();
- t = (pred);
- }
- if (one_chunk())
- t->reset_high();
-
- int oldfnc = fnc;
- fnc = t->fence_index();
- unused -= oldfnc - fnc;
-
- // and head..
- t = ((<T>MChunk*) hd);
- t->reset_low();
- while (t-><T>MChunk::empty() && !one_chunk())
- {
- hd = (<T>MChunk*)(t->next());
- del_chunk(t);
- t = ((<T>MChunk*) hd);
- t->reset_low();
- }
-
- int oldlo = lo;
- lo = t->low_index();
- unused -= lo - oldlo;
-
-
- set_cache(t);
-}
-
-int <T>MPlex::del_high ()
-{
- if (empty()) empty_error();
- <T>MChunk* t = ((<T>MChunk*) tl());
- while (t-><T>MChunk::empty() && !one_chunk()) // possible stragglers
- {
- <T>MChunk* pred = (<T>MChunk*)(t->prev());
- del_chunk(t);
- pred->reset_high();
- t = (pred);
- }
- t-><T>MChunk::shrink_high();
- while (t-><T>MChunk::empty() && !one_chunk())
- {
- <T>MChunk* pred = (<T>MChunk*)(t->prev());
- del_chunk(t);
- pred->reset_high();
- t = (pred);
- }
- int oldfnc = fnc;
- fnc = t->fence_index();
- unused -= oldfnc - fnc - 1;
- set_cache(t);
- return fnc - 1;
-}
-
-int <T>MPlex::del_low ()
-{
- if (empty()) empty_error();
- <T>MChunk* t = ((<T>MChunk*) hd);
- while (t-><T>MChunk::empty() && !one_chunk())
- {
- hd = (<T>MChunk*)(t->next());
- del_chunk(t);
- t = ((<T>MChunk*) hd);
- t->reset_low();
- }
- t-><T>MChunk::shrink_low();
- while (t-><T>MChunk::empty() && !one_chunk())
- {
- hd = (<T>MChunk*)(t->next());
- del_chunk(t);
- t = ((<T>MChunk*) hd);
- t->reset_low();
- }
- int oldlo = lo;
- lo = t->low_index();
- unused -= lo - oldlo - 1;
- set_cache(t);
- return lo;
-}
-
-int <T>MPlex::add(const <T&> elem)
-{
- if (unused == 0)
- return add_high(elem);
-
- <T>MChunk* t;
- for (t = ch;
- t->unused_indices() == 0;
- t = (<T>MChunk*)(t->prev()))
- ;
-
- int i = t->unused_index();
- set_cache(t);
- undel_index(i);
- (*this)[i] = elem;
- return i;
-}
-
-int <T>MPlex::unused_index() const
-{
- if (unused == 0) index_error();
-
- <T>MChunk* t;
- for (t = ch;
- t->unused_indices() == 0;
- t = (<T>MChunk*)(t->prev()))
- ;
-
- set_cache(t);
- return t->unused_index();
-}
-
-Pix <T>MPlex::unused_Pix() const
-{
- if (unused == 0) return 0;
-
- <T>MChunk* t;
- for (t = ch;
- t->unused_indices() == 0;
- t = (<T>MChunk*)(t->prev()))
- ;
-
- set_cache(t);
- return t->pointer_to(t->unused_index());
-}
-
-int <T>MPlex::del_index(int idx)
-{
- if (idx < lo || idx >= fnc) index_error();
- if (<T>MPlex::valid(idx))
- {
- ++unused;
- ch-><T>MChunk::del(idx);
- return 1;
- }
- else
- return 0;
-}
-
-int <T>MPlex::dopred(int idx) const
-{
-
- if (idx >= fnc) idx = fnc;
- if (idx <= lo) return lo - 1;
-
- const <T>MChunk* t = ch;
-
- while (idx > t->fence_index())
- {
- t = ((<T>MChunk*)(t->next()));
- }
- while (idx <= t->low_index())
- {
- t = ((<T>MChunk*)(t->prev()));
- }
- int i = t-><T>MChunk::pred(idx);
- while (i < t->low_index() && i >= lo)
- {
- t = ((<T>MChunk*)(t->prev()));
- i = t-><T>MChunk::last_index();
- }
- set_cache(t);
- return i;
-}
-
-
-int <T>MPlex::dosucc(int idx) const
-{
- if (idx < lo) idx = lo;
- if (idx >= fnc - 1) return fnc;
-
- const <T>MChunk* t = ch;
- while (idx >= t->fence_index())
- {
- t = ((<T>MChunk*)(t->next()));
- }
- while (idx < t->low_index())
- {
- t = ((<T>MChunk*)(t->prev()));
- }
- int i = t-><T>MChunk::succ(idx);
- while (i >= t->fence_index() && i < fnc)
- {
- t = (<T>MChunk*)(t->next());
- i = t-><T>MChunk::first_index();
- }
- set_cache(t);
- return i;
-}
-
-void <T>MPlex::prev(Pix& i) const
-{
- if (i == 0) return;
-
- <T>* p = (<T>*) i;
- const <T>MChunk* old = ch;
- const <T>MChunk* t = ch;
-
- while (!t->actual_pointer(p))
- {
- t = ((<T>MChunk*)(t->prev()));
- if (t == old)
- {
- i = 0;
- return;
- }
- }
- <T>* q = t-><T>MChunk::pred(p);
- while (q == 0 && t != (<T>MChunk*)hd)
- {
- t = ((<T>MChunk*)(t->prev()));
- q = t-><T>MChunk::last_pointer();
- }
-
- i = Pix(q);
- set_cache(t);
- return;
-}
-
-void <T>MPlex::next(Pix& i) const
-{
- if (i == 0) return;
-
- <T>* p = (<T>*) i;
- const <T>MChunk* tail = (<T>MChunk*)(tl());
- const <T>MChunk* old = ch;
- const <T>MChunk* t = ch;
-
- while (!t->actual_pointer(p))
- {
- t = ((<T>MChunk*)(t->next()));
- if (t == old)
- {
- i = 0;
- return;
- }
- }
- <T>* q = t-><T>MChunk::succ(p);
- while (q == 0 && t != tail)
- {
- t = ((<T>MChunk*)(t->next()));
- q = t-><T>MChunk::first_pointer();
- }
-
- i = Pix(q);
- set_cache(t);
- return;
-}
-
-
-void <T>MPlex::undel_index(int idx)
-{
- if (idx < lo || idx >= fnc) index_error();
-
- <T>MChunk* t = ch;
- while (idx >= t->fence_index())
- {
- t = ((<T>MChunk*)(t->next()));
- }
- while (idx < t->low_index())
- {
- t = ((<T>MChunk*)(t->prev()));
- }
- int was_present = t-><T>MChunk::undel(idx);
- if (!was_present)
- {
- --unused;
- }
- set_cache(t);
- return;
-}
-
-void <T>MPlex::clear()
-{
- if (fnc != lo)
- {
- <T>MChunk* t = ((<T>MChunk*)tl());
- while (t != hd)
- {
- <T>MChunk* prv = (<T>MChunk*)(t->prev());
- del_chunk(t);
- t = prv;
- }
- t-><T>MChunk::clear(lo);
- set_cache(t);
- fnc = lo;
- unused = 0;
- }
-}
-
-int <T>MPlex::OK () const
-{
- int v = hd != 0; // at least one chunk
-
- int found_ch = 0; // to make sure ch is in list;
-
- int count = 0; // to count unused slots
-
- const <T>MChunk* t = (<T>MChunk*)(hd);
-
- int gap = t->low_index() - lo;
- v &= gap == 0; // hd lo not less than lo.
- count += gap;
-
- for (;;)
- {
- if (t == ch) ++found_ch;
- v &= t-><T>MChunk::OK(); // each chunk is OK
- count += t->unused_indices();
- if (t == (<T>MChunk*)(tl()))
- break;
- else // and has indices less than succ
- {
- gap = t->next()->base_index() - t->top_index();
- v &= gap == 0;
- count += gap;
-
- if (t != (<T>MChunk*)hd) // internal chunks can't grow
- v &= !t->can_grow_low() && !t->can_grow_high();
-
- t = (const <T>MChunk*)(t->next());
- }
- }
- gap = fnc - t->fence_index();
- v &= gap == 0;
- count += gap;
-
- v &= count == unused; // chunk counts agree with plex
-
- v &= found_ch == 1;
- if (!v) error("invariant failure");
- return v;
-}
-
diff --git a/contrib/libg++/libg++/src/gen/MPlex.hP b/contrib/libg++/libg++/src/gen/MPlex.hP
deleted file mode 100644
index c257f43de5a5..000000000000
--- a/contrib/libg++/libg++/src/gen/MPlex.hP
+++ /dev/null
@@ -1,414 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
- based on code by Marc Shapiro (shapiro@sor.inria.fr)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifndef _<T>MPlex_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _<T>MPlex_h 1
-
-
-#include "<T>.Plex.h"
-
-
-// Number of bits per long, used in MChunk bit map operations
-
-#define _MAP_BITS 32
-
-
-class <T>MChunk : public <T>IChunk
-{
-protected:
-
- unsigned long* map; // bitmap of slots
- int unused; // number of unused internal slots
-
- inline void mark(int); // bitmap operations
- inline void free(int);
- inline int valid(int) const;
-
-public:
-
- <T>MChunk(<T>* d, // ptr to array of elements
- int base_idx, // initial indices
- int low_idx, // & initially clear map
- int fence_idx,
- int top_idx);
-
- inline ~<T>MChunk();
-
-// virtuals
-
- int first_index() const;
- int last_index() const;
- inline int succ(int idx) const;
- inline int pred(int idx) const;
- <T>* first_pointer() const;
- <T>* last_pointer() const;
- <T>* succ(<T>*) const;
- <T>* pred(<T>*) const;
- inline int empty() const;
- inline int full() const;
- inline int valid_index(int i) const;
- inline int valid_pointer(const <T>* p) const;
- inline <T>* grow_high ();
- inline <T>* grow_low ();
- void shrink_high ();
- void shrink_low ();
- void clear(int);
- void cleardown(int);
- int OK() const;
-
-// extensions
-
- int unused_indices() const; // how many free slot in low..fence?
-
- int unused_index() const; // return index of free slot
-
- int del(int i); // delete data indexed by i
- // return true if was present
- int undel(int idx); // un-delete data indexed by i
- // return true if already present
-
- void reset_low(); // reset low = lowest valid index;
- void reset_high(); // same for high
-
-};
-
-
-class <T>MPlex: public <T>Plex
-{
- <T>MChunk* ch; // cached chunk
- int unused; // # of free slots between low & fence
-
- void make_initial_chunks(int up = 1);
- void cache(int idx) const;
- void cache(const <T>* p) const;
- int dopred(int) const;
- int dosucc(int) const;
-
- void set_cache(const <T>MChunk* t) const; // logically,
- // not physically const
-
-public:
- <T>MPlex(); // set low = 0;
- // fence = 0;
- // csize = default
-
- <T>MPlex(int ch_size); // low = 0;
- // fence = 0;
- // csize = ch_size
-
- <T>MPlex(int lo, // low = lo;
- int ch_size); // fence=lo
- // csize = ch_size
-
- <T>MPlex(int lo, // low = lo
- int hi, // fence = hi+1
- const <T&> initval,// fill with initval,
- int ch_size = 0); // csize= ch_size
- // or fence-lo if 0
-
- <T>MPlex(const <T>MPlex&);
-
- void operator= (const <T>MPlex&);
-
-// virtuals
-
- inline <T>& high_element ();
- inline <T>& low_element ();
- inline const <T>& high_element () const;
- inline const <T>& low_element () const;
-
- inline Pix first() const;
- inline Pix last() const ;
- void prev(Pix& ptr) const;
- void next(Pix& ptr) const;
- int owns(Pix p) const;
- inline <T>& operator () (Pix p);
- inline const <T>& operator () (Pix p) const;
-
- inline int low() const;
- inline int high() const;
- int valid(int idx) const;
- inline void prev(int& idx) const;
- inline void next(int& x) const;
- inline <T>& operator [] (int index);
- inline const <T>& operator [] (int index) const;
-
- inline int Pix_to_index(Pix p) const;
- inline Pix index_to_Pix(int idx) const;
-
- inline int can_add_high() const;
- inline int can_add_low() const;
- inline int full() const;
-
- int add_high(const <T&> elem);
- int del_high ();
- int add_low (const <T&> elem);
- int del_low ();
- void clear();
-
- int OK () const;
-
-// extensions
-
- int count() const; // # valid elements
- int available() const; // # deleted elements
-
- int unused_index()const; // return index of a deleted elem
- Pix unused_Pix() const; // return Pix of a deleted elem
-
- int del_index(int idx); // logically delete at idx;
- // return true if was present
- int del_Pix(Pix p); // delete at p
-
- void undel_index(int idx); // undelete at idx;
- void undel_Pix(Pix p); // undelete at p;
-
- void adjust_bounds(); // reset lo, hi to lowest &
- // highest valid indices
-
- int add(const <T&> elem); // add anywhere
-};
-
-
-inline <T>MChunk:: ~<T>MChunk()
-{
- delete map;
-}
-
-inline void <T>MChunk::mark(int idx)
-{
- unsigned int i = idx - base;
- map[i / _MAP_BITS] |= 1 << (i & (_MAP_BITS - 1));
-}
-
-inline void <T>MChunk::free(int idx)
-{
- unsigned int i = idx - base;
- map[i / _MAP_BITS] &= ~(1 << (i & (_MAP_BITS - 1)));
-}
-
-inline int <T>MChunk::valid(int idx) const
-{
- unsigned int i = idx - base;
- return map[i / _MAP_BITS] & (1 << (i & (_MAP_BITS - 1)));
-}
-
-inline int <T>MChunk:: valid_index(int i) const
-{
- return i >= low && i < fence && valid(i);
-}
-
-inline int <T>MChunk:: valid_pointer(const <T>* p) const
-{
- int i = ((int)p - (int)data) / sizeof(<T>);
- return i >= 0 && i < (fence - base) &&
- (map[(unsigned)i / _MAP_BITS] & (1 << (i & (_MAP_BITS - 1))));
-}
-
-inline int <T>MChunk::empty() const
-{
- return fence - low - unused == 0;
-}
-
-inline int <T>MChunk::full() const
-{
- return unused + (top - fence) + (low - base) == 0;
-}
-
-inline int <T>MChunk::succ(int idx) const
-{
- int i = (idx < low)? low : idx + 1;
- while (i < fence && !valid(i)) ++i;
- return i;
-}
-
-inline int <T>MChunk::pred(int idx) const
-{
- int i = (idx > fence)? (fence - 1) : idx - 1;
- while (i >= low && !valid(i)) --i;
- return i;
-}
-
-inline int <T>MChunk::unused_indices() const
-{
- return unused;
-}
-
-inline <T>* <T>MChunk:: grow_high ()
-{
- if (!can_grow_high()) full_error();
- mark(fence);
- return &(data[fence++ - base]);
-}
-
-inline <T>* <T>MChunk:: grow_low ()
-{
- if (!can_grow_low()) full_error();
- mark(--low);
- return &(data[low - base]);
-}
-
-inline void <T>MChunk::reset_low()
-{
- while (low < fence && !valid(low))
- {
- --unused;
- ++low;
- }
-}
-
-inline void <T>MChunk::reset_high()
-{
- while (fence > low && !valid(fence - 1))
- {
- --unused;
- --fence;
- }
-}
-
-inline int <T>MPlex::full () const
-{
- return 0;
-}
-
-inline int <T>MPlex::can_add_high() const
-{
- return 1;
-}
-
-inline int <T>MPlex::can_add_low() const
-{
- return 1;
-}
-
-inline int <T>MPlex::available() const
-{
- return unused;
-}
-
-inline int <T>MPlex::count() const
-{
- return fnc - lo - unused;
-}
-
-inline void <T>MPlex::set_cache(const <T>MChunk* t) const
-{
- ((<T>MPlex*)(this))->ch = (<T>MChunk*)t;
-}
-
-inline <T>& <T>MPlex:: operator [] (int idx)
-{
- if (!ch-><T>MChunk::valid_index(idx)) cache(idx);
- return * (ch->pointer_to(idx));
-}
-
-inline const <T>& <T>MPlex:: operator [] (int idx) const
-{
- if (!ch-><T>MChunk::valid_index(idx)) cache(idx);
- return * ((const <T>*)(ch->pointer_to(idx)));
-}
-
-inline int <T>MPlex::Pix_to_index(Pix p) const
-{
- if (!ch-><T>MChunk::valid_pointer((<T>*)p)) cache((<T>*)p);
- return ch->index_of((<T>*)p);
-}
-
-inline int <T>MPlex::high() const
-{
- return (((const <T>MChunk*)tl())-><T>MChunk::valid_index(fnc-1)) ?
- fnc-1 : dopred(fnc-1);
-}
-
-inline int <T>MPlex::low() const
-{
- return (((const <T>MChunk*)hd)-><T>MChunk::valid_index(lo))? lo : dosucc(lo);
-}
-
-inline <T>& <T>MPlex::low_element ()
-{
- return (*this)[low()];
-}
-
-inline const <T>& <T>MPlex::low_element () const
-{
- return (*this)[low()];
-}
-
-inline <T>& <T>MPlex::high_element ()
-{
- return (*this)[high()];
-}
-
-inline const <T>& <T>MPlex::high_element () const
-{
- return (*this)[high()];
-}
-
-inline Pix <T>MPlex::index_to_Pix(int idx) const
-{
- if (!ch-><T>MChunk::valid_index(idx)) cache(idx);
- return Pix(ch->pointer_to(idx));
-}
-
-inline void <T>MPlex::next(int& idx) const
-{
- idx = (ch-><T>MChunk::valid_index(idx+1))? idx+1 : dosucc(idx);
-}
-
-inline void <T>MPlex::prev(int& idx) const
-{
- idx = (ch-><T>MChunk::valid_index(idx-1))? idx-1 : dopred(idx);
-}
-
-inline Pix <T>MPlex::first() const
-{
- return index_to_Pix(low());
-}
-
-inline Pix <T>MPlex::last() const
-{
- return index_to_Pix(high());
-}
-
-
-inline void <T>MPlex::undel_Pix(Pix p)
-{
- undel_index(Pix_to_index(p));
-}
-
-inline int <T>MPlex::del_Pix(Pix p)
-{
- return del_index(Pix_to_index(p));
-}
-
-inline <T>& <T>MPlex:: operator () (Pix p)
-{
- return *((<T>*)p);
-}
-
-inline const <T>& <T>MPlex:: operator () (Pix p) const
-{
- return *((const <T>*)p);
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/gen/Map.ccP b/contrib/libg++/libg++/src/gen/Map.ccP
deleted file mode 100644
index 146a2d2b2a90..000000000000
--- a/contrib/libg++/libg++/src/gen/Map.ccP
+++ /dev/null
@@ -1,59 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <builtin.h>
-#include "<T>.<C>.Map.h"
-
-
-Pix <T><C>Map::seek(<T&> item)
-{
- Pix i;
- for (i = first(); i != 0 && !(<T>EQ(key(i), item)); next(i));
- return i;
-}
-
-int <T><C>Map::owns(Pix idx)
-{
- if (idx == 0) return 0;
- for (Pix i = first(); i; next(i)) if (i == idx) return 1;
- return 0;
-}
-
-void <T><C>Map::clear()
-{
- Pix i = first();
- while (i != 0)
- {
- del(key(i));
- i = first();
- }
-}
-
-int <T><C>Map::contains (<T&> item)
-{
- return seek(item) != 0;
-}
-
-
-void <T><C>Map::error(const char* msg)
-{
- (*lib_error_handler)("Map", msg);
-}
diff --git a/contrib/libg++/libg++/src/gen/Map.hP b/contrib/libg++/libg++/src/gen/Map.hP
deleted file mode 100644
index 13a3fb14518a..000000000000
--- a/contrib/libg++/libg++/src/gen/Map.hP
+++ /dev/null
@@ -1,87 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#ifndef _<T><C>Map_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _<T><C>Map_h 1
-
-#include <Pix.h>
-#include "<T>.defs.h"
-
-class <T><C>Map
-{
-protected:
- int count;
- <C> def;
-
-public:
- <T><C>Map(<C&> dflt);
- inline virtual ~<T><C>Map();
-
- int length() const; // current number of items
- int empty() const;
-
- virtual int contains(<T&> key); // is key mapped?
-
- virtual void clear(); // delete all items
-
- virtual <C>& operator [] (<T&> key) = 0; // access contents by key
-
- virtual void del(<T&> key) = 0; // delete entry
-
- virtual Pix first() = 0; // Pix of first item or 0
- virtual void next(Pix& i) = 0; // advance to next or 0
- virtual <T>& key(Pix i) = 0; // access key at i
- virtual <C>& contents(Pix i) = 0; // access contents at i
-
- virtual int owns(Pix i); // is i a valid Pix ?
- virtual Pix seek(<T&> key); // Pix of key
-
- <C>& dflt(); // access default val
-
- void error(const char* msg);
- virtual int OK() = 0; // rep invariant
-};
-
-
-inline <T><C>Map::~<T><C>Map() {}
-
-inline int <T><C>Map::length() const
-{
- return count;
-}
-
-inline int <T><C>Map::empty() const
-{
- return count == 0;
-}
-
-inline <C>& <T><C>Map::dflt()
-{
- return def;
-}
-
-inline <T><C>Map::<T><C>Map(<C&> dflt) :def(dflt)
-{
- count = 0;
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/gen/OSLBag.ccP b/contrib/libg++/libg++/src/gen/OSLBag.ccP
deleted file mode 100644
index 285c2cfd000c..000000000000
--- a/contrib/libg++/libg++/src/gen/OSLBag.ccP
+++ /dev/null
@@ -1,196 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include "<T>.OSLBag.h"
-
-
-Pix <T>OSLBag::seek(<T&> item, Pix i)
-{
- if (i == 0) i = p.first(); else next(i);
- for (; i != 0; p.next(i))
- {
- int cmp = <T>CMP(item, p(i));
- if (cmp == 0)
- return i;
- else if (cmp < 0)
- return 0;
- }
- return 0;
-}
-
-int <T>OSLBag::nof(<T&> item)
-{
- int n = 0;
- for (Pix i = p.first(); i != 0; p.next(i))
- {
- int cmp = <T>CMP(item, p(i));
- if (cmp == 0)
- ++n;
- else if (cmp < 0)
- break;
- }
- return n;
-}
-
-Pix <T>OSLBag::add(<T&> item)
-{
- Pix i = p.first();
- if (i == 0)
- {
- ++count;
- return p.prepend(item);
- }
- int cmp = <T>CMP(item, p(i));
- if (cmp <= 0)
- {
- ++count;
- return p.prepend(item);
- }
- else
- {
- Pix trail = i;
- p.next(i);
- for (;;)
- {
- if (i == 0)
- {
- ++count;
- return p.append(item);
- }
- cmp = <T>CMP(item, p(i));
- if (cmp <= 0)
- {
- ++count;
- return p.ins_after(trail, item);
- }
- else
- {
- trail = i;
- p.next(i);
- }
- }
- }
-}
-
-void <T>OSLBag::del(<T&> item)
-{
- Pix i = p.first();
- if (i == 0)
- return;
- int cmp = <T>CMP(item, p(i));
- if (cmp < 0)
- return;
- else if (cmp == 0)
- {
- --count;
- p.del_front();
- }
- else
- {
- Pix trail = i;
- p.next(i);
- while (i != 0)
- {
- cmp = <T>CMP(item, p(i));
- if (cmp < 0)
- return;
- else if (cmp == 0)
- {
- --count;
- p.del_after(trail);
- return;
- }
- else
- {
- trail = i;
- p.next(i);
- }
- }
- }
-}
-
-void <T>OSLBag::remove(<T&> item)
-{
- Pix i = p.first();
- if (i == 0)
- return;
- int cmp = <T>CMP(item, p(i));
- if (cmp < 0)
- return;
- else if (cmp == 0)
- {
- do
- {
- --count;
- p.del_front();
- i = p.first();
- } while (i != 0 && <T>EQ(item, p(i)));
- }
- else
- {
- Pix trail = i;
- p.next(i);
- while (i != 0)
- {
- cmp = <T>CMP(item, p(i));
- if (cmp < 0)
- return;
- else if (cmp == 0)
- {
- do
- {
- --count;
- p.del_after(trail);
- i = trail;
- next(i);
- } while (i != 0 && <T>EQ(item, p(i)));
- return;
- }
- else
- {
- trail = i;
- p.next(i);
- }
- }
- }
-}
-
-int <T>OSLBag::OK()
-{
- int v = p.OK();
- v &= count == p.length();
- Pix trail = p.first();
- if (trail == 0)
- v &= count == 0;
- else
- {
- Pix i = trail; next(i);
- while (i != 0)
- {
- v &= <T>CMP(p(trail), p(i)) <= 0;
- trail = i;
- next(i);
- }
- }
- if (!v) error("invariant failure");
- return v;
-}
-
diff --git a/contrib/libg++/libg++/src/gen/OSLBag.hP b/contrib/libg++/libg++/src/gen/OSLBag.hP
deleted file mode 100644
index 5a657f0f3a15..000000000000
--- a/contrib/libg++/libg++/src/gen/OSLBag.hP
+++ /dev/null
@@ -1,91 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#ifndef _<T>OSLBag_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _<T>OSLBag_h 1
-
-#include "<T>.Bag.h"
-#include "<T>.SLList.h"
-
-class <T>OSLBag : public <T>Bag
-{
-protected:
- <T>SLList p;
-
-public:
- <T>OSLBag();
- <T>OSLBag(const <T>OSLBag&);
-
- Pix add(<T&> item);
- void del(<T&> item);
- void remove(<T&>item);
-
- inline int contains(<T&> item);
- int nof(<T&> item);
-
- inline void clear();
-
- inline Pix first();
- inline void next(Pix& i);
- inline <T>& operator () (Pix i);
- inline int owns(Pix i);
- Pix seek(<T&> item, Pix from = 0);
-
- int OK();
-};
-
-
-inline <T>OSLBag::<T>OSLBag() : p() { count = 0; }
-
-inline <T>OSLBag::<T>OSLBag(const <T>OSLBag& s) : p(s.p) { count = s.count; }
-
-inline Pix <T>OSLBag::first()
-{
- return p.first();
-}
-
-inline void <T>OSLBag::next(Pix & idx)
-{
- p.next(idx);
-}
-
-inline <T>& <T>OSLBag::operator ()(Pix idx)
-{
- return p(idx);
-}
-
-inline void <T>OSLBag::clear()
-{
- count = 0; p.clear();
-}
-
-inline int <T>OSLBag::owns (Pix idx)
-{
- return p.owns(idx);
-}
-
-inline int <T>OSLBag::contains(<T&> item)
-{
- return seek(item) != 0;
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/gen/OSLSet.ccP b/contrib/libg++/libg++/src/gen/OSLSet.ccP
deleted file mode 100644
index 937d915a96b1..000000000000
--- a/contrib/libg++/libg++/src/gen/OSLSet.ccP
+++ /dev/null
@@ -1,321 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include "<T>.OSLSet.h"
-
-
-Pix <T>OSLSet::seek(<T&> item)
-{
- for (Pix i = p.first(); i != 0; p.next(i))
- {
- int cmp = <T>CMP(item, p(i));
- if (cmp == 0)
- return i;
- else if (cmp < 0)
- return 0;
- }
- return 0;
-}
-
-Pix <T>OSLSet::add(<T&> item)
-{
- Pix i = p.first();
- if (i == 0)
- {
- ++count;
- return p.prepend(item);
- }
- int cmp = <T>CMP(item, p(i));
- if (cmp == 0)
- return i;
- else if (cmp < 0)
- {
- ++count;
- return p.prepend(item);
- }
- else
- {
- Pix trail = i;
- p.next(i);
- for (;;)
- {
- if (i == 0)
- {
- ++count;
- return p.append(item);
- }
- cmp = <T>CMP(item, p(i));
- if (cmp == 0)
- return i;
- else if (cmp < 0)
- {
- ++count;
- return p.ins_after(trail, item);
- }
- else
- {
- trail = i;
- p.next(i);
- }
- }
- }
-}
-
-void <T>OSLSet::del(<T&> item)
-{
- Pix i = p.first();
- if (i == 0)
- return;
- int cmp = <T>CMP(item, p(i));
- if (cmp < 0)
- return;
- else if (cmp == 0)
- {
- --count;
- p.del_front();
- }
- else
- {
- Pix trail = i;
- p.next(i);
- while (i != 0)
- {
- cmp = <T>CMP(item, p(i));
- if (cmp < 0)
- return;
- else if (cmp == 0)
- {
- --count;
- p.del_after(trail);
- return;
- }
- else
- {
- trail = i;
- p.next(i);
- }
- }
- }
-}
-
-
-int <T>OSLSet::operator <= (<T>OSLSet& b)
-{
- if (count > b.count) return 0;
- Pix i = first();
- Pix j = b.first();
- for (;;)
- {
- if (i == 0)
- return 1;
- else if (j == 0)
- return 0;
- int cmp = <T>CMP(p(i), b.p(j));
- if (cmp == 0)
- {
- next(i); b.next(j);
- }
- else if (cmp < 0)
- return 0;
- else
- b.next(j);
- }
-}
-
-int <T>OSLSet::operator == (<T>OSLSet& b)
-{
- if (count != b.count) return 0;
- if (count == 0) return 1;
- Pix i = p.first();
- Pix j = b.p.first();
- while (i != 0)
- {
- if (!<T>EQ(p(i),b.p(j))) return 0;
- next(i);
- b.next(j);
- }
- return 1;
-}
-
-
-void <T>OSLSet::operator |= (<T>OSLSet& b)
-{
- if (&b == this || b.count == 0)
- return;
- else
- {
- Pix j = b.p.first();
- Pix i = p.first();
- Pix trail = 0;
- for (;;)
- {
- if (j == 0)
- return;
- else if (i == 0)
- {
- for (; j != 0; b.next(j))
- {
- ++count;
- p.append(b.p(j));
- }
- return;
- }
- int cmp = <T>CMP(p(i), b.p(j));
- if (cmp <= 0)
- {
- if (cmp == 0) b.next(j);
- trail = i;
- next(i);
- }
- else
- {
- ++count;
- if (trail == 0)
- trail = p.prepend(b.p(j));
- else
- trail = p.ins_after(trail, b.p(j));
- b.next(j);
- }
- }
- }
-}
-
-
-void <T>OSLSet::operator -= (<T>OSLSet& b)
-{
- if (&b == this)
- clear();
- else if (count != 0 && b.count != 0)
- {
- Pix i = p.first();
- Pix j = b.p.first();
- Pix trail = 0;
- for (;;)
- {
- if (j == 0 || i == 0)
- return;
- int cmp = <T>CMP(p(i), b.p(j));
- if (cmp == 0)
- {
- --count;
- b.next(j);
- if (trail == 0)
- {
- p.del_front();
- i = p.first();
- }
- else
- {
- next(i);
- p.del_after(trail);
- }
- }
- else if (cmp < 0)
- {
- trail = i;
- next(i);
- }
- else
- b.next(j);
- }
- }
-}
-
-void <T>OSLSet::operator &= (<T>OSLSet& b)
-{
- if (b.count == 0)
- clear();
- else if (&b != this && count != 0)
- {
- Pix i = p.first();
- Pix j = b.p.first();
- Pix trail = 0;
- for (;;)
- {
- if (i == 0)
- return;
- else if (j == 0)
- {
- if (trail == 0)
- {
- p.clear();
- count = 0;
- }
- else
- {
- while (i != 0)
- {
- --count;
- next(i);
- p.del_after(trail);
- }
- }
- return;
- }
- int cmp = <T>CMP(p(i), b.p(j));
-
- if (cmp == 0)
- {
- trail = i;
- next(i);
- b.next(j);
- }
- else if (cmp < 0)
- {
- --count;
- if (trail == 0)
- {
- p.del_front();
- i = p.first();
- }
- else
- {
- next(i);
- p.del_after(trail);
- }
- }
- else
- b.next(j);
- }
- }
-}
-
-
-int <T>OSLSet::OK()
-{
- int v = p.OK();
- v &= count == p.length();
- Pix trail = p.first();
- if (trail == 0)
- v &= count == 0;
- else
- {
- Pix i = trail; next(i);
- while (i != 0)
- {
- v &= <T>CMP(p(trail), p(i)) < 0;
- trail = i;
- next(i);
- }
- }
- if (!v) error("invariant failure");
- return v;
-}
diff --git a/contrib/libg++/libg++/src/gen/OSLSet.hP b/contrib/libg++/libg++/src/gen/OSLSet.hP
deleted file mode 100644
index 02ace589cba7..000000000000
--- a/contrib/libg++/libg++/src/gen/OSLSet.hP
+++ /dev/null
@@ -1,101 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#ifndef _<T>OSLSet_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _<T>OSLSet_h 1
-
-#include "<T>.Set.h"
-#include "<T>.SLList.h"
-
-class <T>OSLSet : public <T>Set
-{
-protected:
- <T>SLList p;
-
-public:
- <T>OSLSet();
- <T>OSLSet(const <T>OSLSet&);
-
- Pix add(<T&> item);
- void del(<T&> item);
- inline int contains(<T&> item);
-
- inline void clear();
-
- inline Pix first();
- inline void next(Pix& i);
- inline <T>& operator () (Pix i);
- inline int owns(Pix i);
- Pix seek(<T&> item);
-
- void operator |= (<T>OSLSet& b);
- void operator -= (<T>OSLSet& b);
- void operator &= (<T>OSLSet& b);
-
- int operator == (<T>OSLSet& b);
- int operator != (<T>OSLSet& b);
- int operator <= (<T>OSLSet& b);
-
- int OK();
-};
-
-
-inline <T>OSLSet::<T>OSLSet() : p() { count = 0; }
-
-inline <T>OSLSet::<T>OSLSet(const <T>OSLSet& s) : p(s.p) { count = s.count; }
-
-inline Pix <T>OSLSet::first()
-{
- return p.first();
-}
-
-inline void <T>OSLSet::next(Pix & idx)
-{
- p.next(idx);
-}
-
-inline <T>& <T>OSLSet::operator ()(Pix idx)
-{
- return p(idx);
-}
-
-inline void <T>OSLSet::clear()
-{
- count = 0; p.clear();
-}
-
-inline int <T>OSLSet::contains (<T&> item)
-{
- return seek(item) != 0;
-}
-
-inline int <T>OSLSet::owns (Pix idx)
-{
- return p.owns(idx);
-}
-
-inline int <T>OSLSet::operator != (<T>OSLSet& b)
-{
- return !(*this == b);
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/gen/OXPBag.ccP b/contrib/libg++/libg++/src/gen/OXPBag.ccP
deleted file mode 100644
index b81c3a0a3738..000000000000
--- a/contrib/libg++/libg++/src/gen/OXPBag.ccP
+++ /dev/null
@@ -1,221 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include "<T>.OXPBag.h"
-
-
-Pix <T>OXPBag::seek(<T&> item, Pix i)
-{
- if (i == 0)
- {
- int l = p.low();
- int h = p.high();
- while (l <= h)
- {
- int mid = (l + h) / 2;
- int cmp = <T>CMP(item, p[mid]);
- if (cmp == 0)
- {
- while (mid > p.low() && <T>EQ(item, p[mid - 1])) --mid;
- return p.index_to_Pix(mid);
- }
- else if (cmp < 0)
- h = mid - 1;
- else
- l = mid + 1;
- }
- return 0;
- }
- int cmp = <T>CMP(item, p(i));
- if (cmp == 0)
- {
- next(i);
- return (<T>EQ(item, p(i)))? i : 0;
- }
- else if (cmp < 0)
- {
- int ind = p.Pix_to_index(i);
- int l = ind;
- int h = p.high();
- while (l <= h)
- {
- int mid = (l + h) / 2;
- cmp = <T>CMP(item, p[mid]);
- if (cmp == 0)
- {
- while (mid > ind && <T>EQ(item, p[mid - 1])) --mid;
- return p.index_to_Pix(mid);
- }
- else if (cmp < 0)
- h = mid - 1;
- else
- l = mid + 1;
- }
- return 0;
- }
- else
- return 0;
-}
-
-int <T>OXPBag::nof(<T&> item)
-{
- int l = p.low();
- int h = p.high();
- while (l <= h)
- {
- int mid = (l + h) / 2;
- int cmp = <T>CMP(item, p[mid]);
- if (cmp == 0)
- {
- l = h = mid;
- while (l > p.low() && <T>EQ(item, p[l - 1])) --l;
- while (h < p.high() && <T>EQ(item, p[h + 1])) ++h;
- return h - l + 1;
- }
- else if (cmp < 0)
- h = mid - 1;
- else
- l = mid + 1;
- }
- return 0;
-}
-
-Pix <T>OXPBag::add(<T&> item)
-{
- if (count == 0)
- {
- ++count;
- return p.index_to_Pix(p.add_high(item));
- }
- int l = p.low();
- int h = p.high();
- while (l <= h)
- {
- int mid = (l + h) / 2;
- int cmp = <T>CMP(item, p[mid]);
- if (cmp == 0)
- {
- l = mid;
- break;
- }
- else if (cmp < 0)
- h = mid - 1;
- else
- l = mid + 1;
- }
- // add on whichever side is shortest
- ++count;
- if (l == p.fence())
- return p.index_to_Pix(p.add_high(item));
- else if (l == p.low())
- return p.index_to_Pix(p.add_low(item));
- else
- {
- if (p.high() - l < l - p.low())
- {
- h = p.add_high(p.high_element());
- for (int i = h - 1; i > l; --i) p[i] = p[i-1];
- }
- else
- {
- --l;
- h = p.add_low(p.low_element());
- for (int i = h + 1; i < l; ++i) p[i] = p[i+1];
- }
- p[l] = item;
- return p.index_to_Pix(l);
- }
-}
-
-void <T>OXPBag::del(<T&> item)
-{
- int l = p.low();
- int h = p.high();
- while (l <= h)
- {
- int mid = (l + h) / 2;
- int cmp = <T>CMP(item, p[mid]);
- if (cmp == 0)
- {
- --count;
- if (p.high() - mid < mid - p.low())
- {
- for (int i = mid; i < p.high(); ++i) p[i] = p[i+1];
- p.del_high();
- }
- else
- {
- for (int i = mid; i > p.low(); --i) p[i] = p[i-1];
- p.del_low();
- }
- return;
- }
- else if (cmp < 0)
- h = mid - 1;
- else
- l = mid + 1;
- }
-}
-
-void <T>OXPBag::remove(<T&> item)
-{
- int l = p.low();
- int h = p.high();
- while (l <= h)
- {
- int mid = (l + h) / 2;
- int cmp = <T>CMP(item, p[mid]);
- if (cmp == 0)
- {
- l = h = mid;
- while (l > p.low() && <T>EQ(item, p[l - 1])) --l;
- while (h < p.high() && <T>EQ(item, p[h + 1])) ++h;
- int n = h - l + 1;
- count -= n;
- if (p.high() - h < l - p.low())
- {
- h = p.high() - n;
- for (int i = l; i <= h; ++i) p[i] = p[i+n];
- while (n-- > 0) p.del_high();
- }
- else
- {
- l = p.low() + n;
- for (int i = h; i >= l; --i) p[i] = p[i-n];
- while (n-- > 0) p.del_low();
- }
- return;
- }
- else if (cmp < 0)
- h = mid - 1;
- else
- l = mid + 1;
- }
-}
-
-int <T>OXPBag::OK()
-{
- int v = p.OK();
- v &= count == p.length();
- for (int i = p.low(); i < p.high(); ++i) v &= <T>CMP(p[i], p[i+1]) <= 0;
- if (!v) error("invariant failure");
- return v;
-}
diff --git a/contrib/libg++/libg++/src/gen/OXPBag.hP b/contrib/libg++/libg++/src/gen/OXPBag.hP
deleted file mode 100644
index c7a251414153..000000000000
--- a/contrib/libg++/libg++/src/gen/OXPBag.hP
+++ /dev/null
@@ -1,73 +0,0 @@
-#ifndef _<T>OXPBag_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _<T>OXPBag_h 1
-
-#include "<T>.Bag.h"
-#include "<T>.XPlex.h"
-
-class <T>OXPBag : public <T>Bag
-{
-protected:
- <T>XPlex p;
-
-public:
- <T>OXPBag(int chunksize = DEFAULT_INITIAL_CAPACITY);
- <T>OXPBag(const <T>OXPBag&);
-
- Pix add(<T&> item);
- void del(<T&> item);
-#undef remove
- void remove(<T&>item);
- int nof(<T&> item);
- inline int contains(<T&> item);
-
- inline void clear();
-
- inline Pix first();
- inline void next(Pix& i);
- inline <T>& operator () (Pix i);
- inline int owns(Pix i);
- Pix seek(<T&> item, Pix from = 0);
-
- int OK();
-};
-
-
-inline <T>OXPBag::<T>OXPBag(int chunksize)
- : p(chunksize) { count = 0; }
-
-inline <T>OXPBag::<T>OXPBag(const <T>OXPBag& s) : p(s.p) { count = s.count; }
-
-inline Pix <T>OXPBag::first()
-{
- return p.first();
-}
-
-inline void <T>OXPBag::next(Pix & idx)
-{
- p.next(idx);
-}
-
-inline <T>& <T>OXPBag::operator ()(Pix idx)
-{
- return p(idx);
-}
-
-inline void <T>OXPBag::clear()
-{
- count = 0; p.clear();
-}
-
-inline int <T>OXPBag::owns (Pix idx)
-{
- return p.owns(idx);
-}
-
-inline int <T>OXPBag::contains(<T&> item)
-{
- return seek(item) != 0;
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/gen/OXPSet.ccP b/contrib/libg++/libg++/src/gen/OXPSet.ccP
deleted file mode 100644
index 397c2c986a27..000000000000
--- a/contrib/libg++/libg++/src/gen/OXPSet.ccP
+++ /dev/null
@@ -1,280 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include "<T>.OXPSet.h"
-
-
-Pix <T>OXPSet::seek(<T&> item)
-{
- int l = p.low();
- int h = p.high();
- while (l <= h)
- {
- int mid = (l + h) / 2;
- int cmp = <T>CMP(item, p[mid]);
- if (cmp == 0)
- return p.index_to_Pix(mid);
- else if (cmp < 0)
- h = mid - 1;
- else
- l = mid + 1;
- }
- return 0;
-}
-
-Pix <T>OXPSet::add(<T&> item)
-{
- if (count == 0)
- {
- ++count;
- return p.index_to_Pix(p.add_high(item));
- }
- int l = p.low();
- int h = p.high();
- while (l <= h)
- {
- int mid = (l + h) / 2;
- int cmp = <T>CMP(item, p[mid]);
- if (cmp == 0)
- return p.index_to_Pix(mid);
- else if (cmp < 0)
- h = mid - 1;
- else
- l = mid + 1;
- }
- // add on whichever side is shortest
- ++count;
- if (l == p.fence())
- return p.index_to_Pix(p.add_high(item));
- else if (l == p.low())
- return p.index_to_Pix(p.add_low(item));
- else
- {
- if (p.fence() - l < l - p.low())
- {
- h = p.add_high(p.high_element());
- for (int i = h - 1; i > l; --i) p[i] = p[i-1];
- }
- else
- {
- --l;
- h = p.add_low(p.low_element());
- for (int i = h + 1; i < l; ++i) p[i] = p[i+1];
- }
- p[l] = item;
- return p.index_to_Pix(l);
- }
-}
-
-void <T>OXPSet::del(<T&> item)
-{
- int l = p.low();
- int h = p.high();
- while (l <= h)
- {
- int mid = (l + h) / 2;
- int cmp = <T>CMP(item, p[mid]);
- if (cmp == 0)
- {
- --count;
- if (p.high() - mid < mid - p.low())
- {
- for (int i = mid; i < p.high(); ++i) p[i] = p[i+1];
- p.del_high();
- }
- else
- {
- for (int i = mid; i > p.low(); --i) p[i] = p[i-1];
- p.del_low();
- }
- return;
- }
- else if (cmp < 0)
- h = mid - 1;
- else
- l = mid + 1;
- }
-}
-
-int <T>OXPSet::operator <= (<T>OXPSet& b)
-{
- if (count > b.count) return 0;
- int i = p.low();
- int j = b.p.low();
- for (;;)
- {
- if (i >= p.fence())
- return 1;
- else if (j >= b.p.fence())
- return 0;
- int cmp = <T>CMP(p[i], b.p[j]);
- if (cmp == 0)
- {
- ++i; ++j;
- }
- else if (cmp < 0)
- return 0;
- else
- ++j;
- }
-}
-
-int <T>OXPSet::operator == (<T>OXPSet& b)
-{
- int n = count;
- if (n != b.count) return 0;
- if (n == 0) return 1;
- int i = p.low();
- int j = b.p.low();
- while (n-- > 0) if (!<T>EQ(p[i++], b.p[j++])) return 0;
- return 1;
-}
-
-
-void <T>OXPSet::operator |= (<T>OXPSet& b)
-{
- if (&b == this || b.count == 0)
- return;
- else if (b.count <= 2) // small b -- just add
- for (Pix i = b.first(); i; b.next(i)) add(b(i));
- else
- {
- // strategy: merge into top of p, simultaneously killing old bottom
- int oldfence = p.fence();
- int i = p.low();
- int j = b.p.low();
- for (;;)
- {
- if (i == oldfence)
- {
- while (j < b.p.fence()) p.add_high(b.p[j++]);
- break;
- }
- else if (j == b.p.fence())
- {
- while (i++ < oldfence)
- {
- p.add_high(p.low_element());
- p.del_low();
- }
- break;
- }
- int cmp = <T>CMP(p[i], b.p[j]);
- if (cmp <= 0)
- {
- ++i;
- if (cmp == 0) ++j;
- p.add_high(p.low_element());
- p.del_low();
- }
- else
- p.add_high(b.p[j++]);
- }
- count = p.length();
- }
-}
-
-
-
-void <T>OXPSet::operator -= (<T>OXPSet& b)
-{
- if (&b == this)
- clear();
- else if (count != 0 && b.count != 0)
- {
- int i = p.low();
- int k = i;
- int j = b.p.low();
- int oldfence = p.fence();
- for (;;)
- {
- if (i >= oldfence)
- break;
- else if (j >= b.p.fence())
- {
- if (k != i)
- while (i < oldfence) p[k++] = p[i++];
- else
- k = oldfence;
- break;
- }
- int cmp = <T>CMP(p[i], b.p[j]);
- if (cmp == 0)
- {
- ++i; ++j;
- }
- else if (cmp < 0)
- {
- if (k != i) p[k] = p[i];
- ++i; ++k;
- }
- else
- j++;
- }
- while (k++ < oldfence)
- {
- --count;
- p.del_high();
- }
- }
-}
-
-void <T>OXPSet::operator &= (<T>OXPSet& b)
-{
- if (b.count == 0)
- clear();
- else if (&b != this && count != 0)
- {
- int i = p.low();
- int k = i;
- int j = b.p.low();
- int oldfence = p.fence();
- for (;;)
- {
- if (i >= oldfence || j >= b.p.fence())
- break;
- int cmp = <T>CMP(p[i], b.p[j]);
- if (cmp == 0)
- {
- if (k != i) p[k] = p[i];
- ++i; ++k; ++j;
- }
- else if (cmp < 0)
- ++i;
- else
- ++j;
- }
- while (k++ < oldfence)
- {
- --count;
- p.del_high();
- }
- }
-}
-
-int <T>OXPSet::OK()
-{
- int v = p.OK();
- v &= count == p.length();
- for (int i = p.low(); i < p.high(); ++i) v &= <T>CMP(p[i], p[i+1]) < 0;
- if (!v) error("invariant failure");
- return v;
-}
diff --git a/contrib/libg++/libg++/src/gen/OXPSet.hP b/contrib/libg++/libg++/src/gen/OXPSet.hP
deleted file mode 100644
index cfa0f156fb92..000000000000
--- a/contrib/libg++/libg++/src/gen/OXPSet.hP
+++ /dev/null
@@ -1,102 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#ifndef _<T>OXPSet_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _<T>OXPSet_h 1
-
-#include "<T>.Set.h"
-#include "<T>.XPlex.h"
-
-class <T>OXPSet : public <T>Set
-{
-protected:
- <T>XPlex p;
-
-public:
- <T>OXPSet(int chunksize = DEFAULT_INITIAL_CAPACITY);
- <T>OXPSet(const <T>OXPSet&);
-
- Pix add(<T&> item);
- void del(<T&> item);
- inline int contains(<T&> item);
-
- inline void clear();
-
- inline Pix first();
- inline void next(Pix& i);
- inline <T>& operator () (Pix i);
- inline int owns(Pix i);
- Pix seek(<T&> item);
-
- void operator |= (<T>OXPSet& b);
- void operator -= (<T>OXPSet& b);
- void operator &= (<T>OXPSet& b);
-
- int operator == (<T>OXPSet& b);
- int operator != (<T>OXPSet& b);
- int operator <= (<T>OXPSet& b);
-
- int OK();
-};
-
-
-inline <T>OXPSet::<T>OXPSet(int chunksize)
- : p(chunksize) { count = 0; }
-
-inline <T>OXPSet::<T>OXPSet(const <T>OXPSet& s) : p(s.p) { count = s.count; }
-
-inline Pix <T>OXPSet::first()
-{
- return p.first();
-}
-
-inline void <T>OXPSet::next(Pix & idx)
-{
- p.next(idx);
-}
-
-inline <T>& <T>OXPSet::operator ()(Pix idx)
-{
- return p(idx);
-}
-
-inline void <T>OXPSet::clear()
-{
- count = 0; p.clear();
-}
-
-inline int <T>OXPSet::contains (<T&> item)
-{
- return seek(item) != 0;
-}
-
-inline int <T>OXPSet::owns (Pix idx)
-{
- return p.owns(idx);
-}
-
-inline int <T>OXPSet::operator != (<T>OXPSet& b)
-{
- return !(*this == b);
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/gen/PHPQ.ccP b/contrib/libg++/libg++/src/gen/PHPQ.ccP
deleted file mode 100644
index ae8cde6cd075..000000000000
--- a/contrib/libg++/libg++/src/gen/PHPQ.ccP
+++ /dev/null
@@ -1,339 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Dirk Grunwald (grunwald@cs.uiuc.edu)
- adapted for libg++ by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <limits.h>
-#include "<T>.PHPQ.h"
-
-//
-// This defines a Pairing Heap structure
-//
-// See ``The Pairing Heap: A New Form of Self-Adjusting Heap''
-// Fredman, Segdewick et al,
-// Algorithmica (1986) 1:111-129
-//
-// In particular, this implements the pairing heap using the circular
-// list.
-//
-//
-
-<T>PHPQ::<T>PHPQ(int sz)
-{
- storage = 0;
- root = 0;
- count = 0;
- size = 0;
- prealloc(sz);
-}
-
-<T>PHPQ::<T>PHPQ(<T>PHPQ& a)
-{
- storage = 0;
- root = 0;
- count = 0;
- size = 0;
- prealloc(a.size);
- for (Pix i = a.first(); i != 0; a.next(i)) enq(a(i));
-}
-
-
-void <T>PHPQ::prealloc(int newsize)
-{
- ++newsize; // leave a spot for freelist
- if (size != 0)
- {
- int news = size;
- while (news <= newsize) news = (news * 3) / 2;
- newsize = news;
- }
- // see if indices are OK
- <T>PHPQNode test;
- test.sibling = 0;
- test.sibling = ~test.sibling;
- if ((unsigned long)newsize > (unsigned long)(test.sibling))
- error("storage size exceeds index range");
-
- if (storage == 0)
- {
- storage = new <T>PHPQNode[size = newsize];
- for (int i = 0; i < size; ++i)
- {
- storage[i].sibling = i + 1;
- storage[i].valid = 0;
- }
- storage[size-1].sibling = 0;
- }
- else
- {
- <T>PHPQNode* newstor = new <T>PHPQNode[newsize];
- for (int i = 1; i < size; ++i)
- newstor[i] = storage[i];
- delete [] storage;
- storage = newstor;
- for (int i = size; i < newsize; ++i)
- {
- storage[i].sibling = i + 1;
- storage[i].valid = 0;
- }
- storage[newsize-1].sibling = 0;
- storage[0].sibling = size;
- size = newsize;
- }
-}
-
-
-void <T>PHPQ::clear()
-{
- for (int i = 0; i < size; ++i)
- {
- storage[i].sibling = i + 1;
- storage[i].valid = 0;
- }
- storage[size-1].sibling = 0;
- root = 0;
- count = 0;
-}
-
-Pix <T>PHPQ::enq(<T&> item)
-{
- ++count;
- if (storage[0].sibling == 0)
- prealloc(count);
-
- int cell = storage[0].sibling;
- storage[0].sibling = storage[cell].sibling;
- storage[cell].sibling = 0;
- storage[cell].children = 0;
- storage[cell].item = item;
- storage[cell].valid = 1;
-
- if (root == 0)
- {
- root = cell;
- return Pix(root);
- }
- else
- {
- int parent;
- int child;
-
- if (<T>LE(storage[root].item, storage[cell].item))
- {
- parent = root; child = cell;
- }
- else
- {
- parent = cell; child = root;
- }
- int popsKid = storage[parent].children;
-
- if (popsKid == 0)
- {
- storage[parent].children = child;
- storage[child].sibling = child;
- }
- else
- {
- int temp = storage[popsKid].sibling;
- storage[popsKid].sibling = child;
- storage[child].sibling = temp;
- storage[parent].children = child;
- }
- root = parent;
- return Pix(cell);
- }
-}
-
-//
-// Item removal is the most complicated routine.
-//
-// We remove the root (should there be one) and then select a new
-// root. The siblings of the root are in a circular list. We continue
-// to pair elements in this list until there is a single element.
-// This element will be the new root.
-
-void <T>PHPQ::del_front()
-{
- int valid = 0;
- do
- {
- if (root == 0) return;
- if ((valid = storage[root].valid))
- --count;
- storage[root].valid = 0;
- int child = storage[root].children;
- storage[root].sibling = storage[0].sibling;
- storage[0].sibling = root;
-
- if (child == 0)
- {
- root = 0;
- return;
- }
- else
- {
- while(storage[child].sibling != child)
- {
- // We have at least two kids, but we may only have
- // two kids. So, oneChild != child, but it is possible
- // that twoChild == child.
-
- int oneChild = storage[child].sibling;
- int twoChild = storage[oneChild].sibling;
-
- // Remove the two from the sibling list
-
- storage[child].sibling = storage[twoChild].sibling;
- storage[oneChild].sibling = 0;
- storage[twoChild].sibling = 0;
-
- int bestChild;
- int worstChild;
-
- if (<T>LE(storage[oneChild].item, storage[twoChild].item))
- {
- bestChild = oneChild; worstChild = twoChild;
- }
- else
- {
- bestChild = twoChild; worstChild = oneChild;
- }
- int popsKid = storage[bestChild].children;
-
- if (popsKid == 0)
- {
- storage[bestChild].children = worstChild;
- storage[worstChild].sibling = worstChild;
- }
- else
- {
- int temp = storage[popsKid].sibling;
- storage[popsKid].sibling = worstChild;
- storage[worstChild].sibling = temp;
- storage[bestChild].children = worstChild;
- }
- if (twoChild == child)
- {
- // We have reduced the two to one, so we'll be exiting.
- child = bestChild;
- storage[child].sibling = child;
- }
- else
- {
- // We've removed two siblings, now we need to insert
- // the better of the two
- storage[bestChild].sibling = storage[child].sibling;
- storage[child].sibling = bestChild;
- child = storage[bestChild].sibling;
- }
- }
- root = child;
- }
- } while ( !valid );
-}
-
-void <T>PHPQ::del(Pix p)
-{
- if (p == 0) error("null Pix");
- int i = int(p);
- if (storage[i].valid)
- {
- if (i == root)
- del_front();
- else
- {
- storage[i].valid = 0;
- --count;
- }
- }
-}
-
-
-Pix <T>PHPQ::seek(<T&> key)
-{
- for (int i = 1; i < size; ++i)
- if (storage[i].valid && <T>EQ(storage[i].item, key))
- return Pix(i);
- return 0;
-}
-
-Pix <T>PHPQ::first()
-{
- for (int i = 1; i < size; ++i)
- if (storage[i].valid)
- return Pix(i);
- return 0;
-}
-
-
-void <T>PHPQ::next(Pix& p)
-{
- if (p == 0) return;
- for (int i = int(p)+1; i < size; ++i)
- if (storage[i].valid)
- {
- p = Pix(i);
- return;
- }
- p = 0;
-}
-
-int <T>PHPQ::OK()
-{
- int v = storage != 0;
- int n = 0;
- for (int i = 0; i < size; ++i) if (storage[i].valid) ++n;
- v &= n == count;
- v &= check_sibling_list(root);
- int ct = INT_MAX;
- n = 0;
- int f = storage[0].sibling;
- while (f != 0 && ct-- > 0)
- {
- f = storage[f].sibling;
- ++n;
- }
- v &= ct > 0;
- v &= n <= size - count;
- if (!v) error("invariant failure");
- return v;
-}
-
-
-int <T>PHPQ::check_sibling_list(int t)
-{
- if (t != 0)
- {
- int s = t;
- long ct = LONG_MAX; // Lots of chances to find self!
- do
- {
- if (storage[s].valid && !check_sibling_list(storage[s].children))
- return 0;
- s = storage[s].sibling;
- } while (ct-- > 0 && s != t && s != 0);
- if (ct <= 0) return 0;
- }
- return 1;
-}
-
-
diff --git a/contrib/libg++/libg++/src/gen/PHPQ.hP b/contrib/libg++/libg++/src/gen/PHPQ.hP
deleted file mode 100644
index 1964ba40dc3f..000000000000
--- a/contrib/libg++/libg++/src/gen/PHPQ.hP
+++ /dev/null
@@ -1,108 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Dirk Grunwald (grunwald@cs.uiuc.edu)
- adapted for libg++ by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifndef <T>PHPQ_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define <T>PHPQ_h 1
-
-#include "<T>.PQ.h"
-
-#ifndef <T>PHPQIndex
-#define <T>PHPQIndex unsigned short
-#endif
-
-struct <T>PHPQNode
-{
- <T>PHPQIndex sibling;
- <T>PHPQIndex children;
- <T> item;
- char valid;
-};
-
-
-class <T>PHPQ : public <T>PQ
-{
- <T>PHPQNode* storage; // table -- freelist in storage[0].sibling
- int root;
- int size;
-
- void prealloc(int);
- int check_sibling_list(int);
-
-public:
-
- <T>PHPQ(int sz = DEFAULT_INITIAL_CAPACITY);
- <T>PHPQ(<T>PHPQ&);
- inline ~<T>PHPQ();
-
- Pix enq(<T&> item);
- inline <T> deq();
-
- inline <T>& front();
- void del_front();
-
- inline int contains(<T&> item);
-
- void clear();
-
- Pix first();
- void next(Pix& i);
- inline <T>& operator () (Pix i);
- void del(Pix i);
- Pix seek(<T&> item);
-
- int OK(); // rep invariant
-};
-
-
-inline <T>PHPQ::~<T>PHPQ()
-{
- delete [] storage;
-}
-
-
-inline <T> <T>PHPQ::deq()
-{
- if (count == 0) error("deq of empty PQ");
- <T> x = storage[root].item;
- del_front();
- return x;
-}
-
-
-inline <T>& <T>PHPQ::front()
-{
- if (count == 0) error("front of empty PQ");
- return storage[root].item;
-}
-
-inline int <T>PHPQ::contains(<T&> item)
-{
- return seek(item) != 0;
-}
-
-inline <T>& <T>PHPQ::operator() (Pix p)
-{
- if (p == 0) error("null Pix");
- return storage[int(p)].item;
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/gen/PQ.ccP b/contrib/libg++/libg++/src/gen/PQ.ccP
deleted file mode 100644
index ec3bd06210c9..000000000000
--- a/contrib/libg++/libg++/src/gen/PQ.ccP
+++ /dev/null
@@ -1,63 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <builtin.h>
-#include "<T>.PQ.h"
-
-
-
-<T> <T>PQ::deq()
-{
- <T> x = front();
- del_front();
- return x;
-}
-
-Pix <T>PQ::seek(<T&> item)
-{
- Pix i;
- for (i = first(); i != 0 && !(<T>EQ((*this)(i), item)); next(i));
- return i;
-}
-
-int <T>PQ::owns(Pix idx)
-{
- if (idx == 0) return 0;
- for (Pix i = first(); i; next(i)) if (i == idx) return 1;
- return 0;
-}
-
-void <T>PQ::clear()
-{
- while (count != 0) del_front();
-}
-
-int <T>PQ::contains (<T&> item)
-{
- return seek(item) != 0;
-}
-
-
-void <T>PQ::error(const char* msg)
-{
- (*lib_error_handler)("PQ", msg);
-}
-
diff --git a/contrib/libg++/libg++/src/gen/PQ.hP b/contrib/libg++/libg++/src/gen/PQ.hP
deleted file mode 100644
index efe18f87e7fe..000000000000
--- a/contrib/libg++/libg++/src/gen/PQ.hP
+++ /dev/null
@@ -1,78 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#ifndef _<T>PQ_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _<T>PQ_h 1
-
-#include <Pix.h>
-#include "<T>.defs.h"
-
-class <T>PQ
-{
-protected:
-
- int count;
-
-public:
- <T>PQ();
- inline virtual ~<T>PQ();
-
- int length(); // current number of items
- int empty();
-
- virtual Pix enq(<T&> item) = 0; // add item; return Pix
- virtual <T> deq(); // return & remove min
-
- virtual <T>& front() = 0; // access min item
- virtual void del_front() = 0; // delete min item
-
- virtual int contains(<T&> item); // is item in PQ?
-
- virtual void clear(); // delete all items
-
- virtual Pix first() = 0; // Pix of first item or 0
- virtual void next(Pix& i) = 0; // advance to next or 0
- virtual <T>& operator () (Pix i) = 0; // access item at i
- virtual void del(Pix i) = 0; // delete item at i
- virtual int owns(Pix i); // is i a valid Pix ?
- virtual Pix seek(<T&> item); // Pix of item
-
- void error(const char* msg);
- virtual int OK() = 0; // rep invariant
-};
-
-
-inline <T>PQ::<T>PQ() :count(0) {}
-
-inline <T>PQ::~<T>PQ() {}
-
-inline int <T>PQ::length()
-{
- return count;
-}
-
-inline int <T>PQ::empty()
-{
- return count == 0;
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/gen/PSList.hP b/contrib/libg++/libg++/src/gen/PSList.hP
deleted file mode 100644
index eacb34dbe354..000000000000
--- a/contrib/libg++/libg++/src/gen/PSList.hP
+++ /dev/null
@@ -1,32 +0,0 @@
-/* : Light weight list: This will simply reuse code from a VoidP List, which
-was genclassed from the SLList libg++ class. The classes generated from this file
-will all be derived classes from class VoidSLList or intSLList. Note that class SLList does not
-offer all the functionality of List classes, such as sharing of sub-lists.
-However, no additional code is needed at all and no .cc file is generated. So it costs nothing
-to use these type-safe lists. Only member functions needing type casting are re-defined */
-
-
-#ifndef _<T>SList_h
-#define _<T>SList_h 1
-
-#include "VoidP.SLList.h"
-#include "<T>.defs.h"
-
-class <T>SList : public VoidPSLList
-{
-public:
- <T>SList() {}
- <T>SList(<T>SList& a) : (a) {}
- ~<T>SList() {}
-
- <T>SList& operator = (<T>SList& a) {
- return (<T>SList&) VoidPSLList::operator= (a); }
-
- <T>& operator () (Pix p) { return (<T>&) (VoidPSLList::operator() (p)); }
- <T>& front() { return (<T>&) VoidPSLList::front(); }
- <T>& rear() { return (<T>&) VoidPSLList::rear(); }
- <T> remove_front() { return (<T>) VoidPSLList::remove_front(); }
-
-};
-
-#endif /* conditional include */
diff --git a/contrib/libg++/libg++/src/gen/PVec.hP b/contrib/libg++/libg++/src/gen/PVec.hP
deleted file mode 100644
index de32482610b4..000000000000
--- a/contrib/libg++/libg++/src/gen/PVec.hP
+++ /dev/null
@@ -1,79 +0,0 @@
-/* : light weight Vector: This will simply reuse code from */
-/* a VoidP Vec, which was genclassed from the Vec libg++ class. */
-/* The classes generated from this file will all be derived classes */
-/* from class VoidVec or intVec. No .cc file is generated. So */
-/* it costs nothing to use these type-safe Vectors. Only member */
-/* functions needing type casting are re-defined. */
-/* */
-
-#ifndef _<T>Vec_h
-#define _<T>Vec_h 1
-
-#include "VoidP.Vec.h"
-#include "<T>.defs.h"
-
-
-#ifndef _<T>_typedefs
-#define _<T>_typedefs 1
-typedef void (*<T>Procedure)(<T> );
-typedef <T> (*<T>Mapper)(<T> );
-typedef <T> (*<T>Combiner)(<T> , <T> );
-typedef int (*<T>Predicate)(<T> );
-typedef int (*<T>Comparator)(<T> , <T> );
-#endif
-
-class <T>Vec : public VoidPVec
-{
-protected:
- <T>Vec(int l, <T>* d) : (l, (VoidP*) d) {};
-public:
- <T>Vec() {};
- <T>Vec(int l) : (l) {};
- <T>Vec(int l, <T&> fill_value) : (l, fill_value) {};
- <T>Vec(<T>Vec& v) : (v) {};
- <T>Vec(VoidPVec& v) {fake_copy(v, s, len);}
- ~<T>Vec() {};
-
- <T>Vec& operator = (<T>Vec& a)
- {return (<T>Vec&) VoidPVec::operator= (a);}
- <T>Vec at(int from, int n) {return (<T>Vec) VoidPVec::at(from, n);}
-
- <T>& operator [] (int n) {return (<T>&)VoidPVec::operator[] (n);}
- <T>& elem(int n) {return (<T>&)VoidPVec::elem(n);}
-
- friend <T>Vec concat(<T>Vec& a, <T>Vec& b);
- friend <T>Vec map(<T>Mapper f, <T>Vec & a);
- friend <T>Vec merge(<T>Vec & a, <T>Vec & b, <T>Comparator f);
- friend <T>Vec combine(<T>Combiner f, <T>Vec & a, <T>Vec & b);
- friend <T>Vec reverse(<T>Vec& a);
-
- void sort(<T>Comparator f);
- void apply(<T>Procedure f);
- <T> reduce(<T>Combiner f, <T> base);
-};
-
-inline <T>Vec concat(<T>Vec& a, <T>Vec& b)
-{return (<T>Vec)concat((VoidPVec&)a, (VoidPVec&)b);}
-
-inline <T>Vec map(<T>Mapper f, <T>Vec & a) {
- return (<T>Vec)map((VoidPMapper)f, (VoidPVec&)a); }
-
-inline <T>Vec merge(<T>Vec & a, <T>Vec & b, <T>Comparator f) {
- return (<T>Vec)merge((VoidPVec&)a, (VoidPVec&)b, (VoidPComparator)f); }
-
-inline <T>Vec combine(<T>Combiner f, <T>Vec & a, <T>Vec & b) {
- return (<T>Vec)combine((VoidPCombiner)f, (VoidPVec&)a, (VoidPVec&)b); }
-
-inline <T>Vec reverse(<T>Vec& a) {
- return (<T>Vec)reverse((VoidPVec&)a);}
-
-inline void <T>Vec::sort(<T>Comparator f) {
- VoidPVec::sort((VoidPComparator) f); }
-
-inline void <T>Vec::apply(<T>Procedure f) {
- VoidPVec::apply((VoidPProcedure) f); }
-
-inline <T> <T>Vec::reduce(<T>Combiner f, <T> base) {
- return (<T>)VoidPVec::reduce((VoidPCombiner)f, base);}
-
-#endif /* conditional include */
diff --git a/contrib/libg++/libg++/src/gen/Plex.ccP b/contrib/libg++/libg++/src/gen/Plex.ccP
deleted file mode 100644
index 9a62571aca00..000000000000
--- a/contrib/libg++/libg++/src/gen/Plex.ccP
+++ /dev/null
@@ -1,222 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
- based on code by Marc Shapiro (shapiro@sor.inria.fr)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <stream.h>
-#include <builtin.h>
-#include "<T>.Plex.h"
-
-// IChunk support
-
-void <T>IChunk::error(const char* msg) const
-{
- (*lib_error_handler)("<T>IChunk", msg);
-}
-
-void <T>IChunk::index_error() const
-{
- error("attempt to use invalid index");
-}
-
-void <T>IChunk::empty_error() const
-{
- error("invalid use of empty chunk");
-}
-
-void <T>IChunk::full_error() const
-{
- error("attempt to extend chunk beyond bounds");
-}
-
-<T>IChunk:: ~<T>IChunk() {}
-
-<T>IChunk::<T>IChunk(<T>* d,
- int baseidx,
- int lowidx,
- int fenceidx,
- int topidx)
-{
- if (d == 0 || baseidx > lowidx || lowidx > fenceidx || fenceidx > topidx)
- error("inconsistent specification");
- data = d;
- base = baseidx;
- low = lowidx;
- fence = fenceidx;
- top = topidx;
- nxt = prv = this;
-}
-
-void <T>IChunk:: re_index(int lo)
-{
- int delta = lo - low;
- base += delta;
- low += delta;
- fence += delta;
- top += delta;
-}
-
-
-void <T>IChunk::clear(int lo)
-{
- int s = top - base;
- low = base = fence = lo;
- top = base + s;
-}
-
-void <T>IChunk::cleardown(int hi)
-{
- int s = top - base;
- low = top = fence = hi;
- base = top - s;
-}
-
-int <T>IChunk:: OK() const
-{
- int v = data != 0; // have some data
- v &= base <= low; // ok, index-wise
- v &= low <= fence;
- v &= fence <= top;
-
- v &= nxt->prv == this; // and links are OK
- v &= prv->nxt == this;
- if (!v) error("invariant failure");
- return(v);
-}
-
-
-// error handling
-
-
-void <T>Plex::error(const char* msg) const
-{
- (*lib_error_handler)("Plex", msg);
-}
-
-void <T>Plex::index_error() const
-{
- error("attempt to access invalid index");
-}
-
-void <T>Plex::empty_error() const
-{
- error("attempted operation on empty plex");
-}
-
-void <T>Plex::full_error() const
-{
- error("attempt to increase size of plex past limit");
-}
-
-// generic plex ops
-
-<T>Plex:: ~<T>Plex()
-{
- invalidate();
-}
-
-
-void <T>Plex::append (const <T>Plex& a)
-{
- for (int i = a.low(); i < a.fence(); a.next(i)) add_high(a[i]);
-}
-
-void <T>Plex::prepend (const <T>Plex& a)
-{
- for (int i = a.high(); i > a.ecnef(); a.prev(i)) add_low(a[i]);
-}
-
-void <T>Plex::reverse()
-{
- <T> tmp;
- int l = low();
- int h = high();
- while (l < h)
- {
- tmp = (*this)[l];
- (*this)[l] = (*this)[h];
- (*this)[h] = tmp;
- next(l);
- prev(h);
- }
-}
-
-
-void <T>Plex::fill(const <T&> x)
-{
- for (int i = lo; i < fnc; ++i) (*this)[i] = x;
-}
-
-void <T>Plex::fill(const <T&> x, int lo, int hi)
-{
- for (int i = lo; i <= hi; ++i) (*this)[i] = x;
-}
-
-
-void <T>Plex::del_chunk(<T>IChunk* x)
-{
- if (x != 0)
- {
- x->unlink();
- <T>* data = (<T>*)(x->invalidate());
- delete [] data;
- delete x;
- }
-}
-
-
-void <T>Plex::invalidate()
-{
- <T>IChunk* t = hd;
- if (t != 0)
- {
- <T>IChunk* tail = tl();
- while (t != tail)
- {
- <T>IChunk* nxt = t->next();
- del_chunk(t);
- t = nxt;
- }
- del_chunk(t);
- hd = 0;
- }
-}
-
-int <T>Plex::reset_low(int l)
-{
- int old = lo;
- int diff = l - lo;
- if (diff != 0)
- {
- lo += diff;
- fnc += diff;
- <T>IChunk* t = hd;
- do
- {
- t->re_index(t->low_index() + diff);
- t = t->next();
- } while (t != hd);
- }
- return old;
-}
-
-
-
-
diff --git a/contrib/libg++/libg++/src/gen/Plex.hP b/contrib/libg++/libg++/src/gen/Plex.hP
deleted file mode 100644
index d756167b15a4..000000000000
--- a/contrib/libg++/libg++/src/gen/Plex.hP
+++ /dev/null
@@ -1,494 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
- based on code by Marc Shapiro (shapiro@sor.inria.fr)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifndef _<T>Plex_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _<T>Plex_h 1
-
-#include <std.h>
-#include <Pix.h>
-#include "<T>.defs.h"
-
-// Plexes are made out of <T>IChunks
-
-#include <stddef.h>
-
-class <T>IChunk
-{
-//public: // kludge until C++ `protected' policies settled
-protected:
-
- <T>* data; // data, from client
-
- int base; // lowest possible index
- int low; // lowest valid index
- int fence; // highest valid index + 1
- int top; // highest possible index + 1
-
- <T>IChunk* nxt; // circular links
- <T>IChunk* prv;
-
-public:
-
-// constructors
-
- <T>IChunk(<T>* d, // ptr to array of elements
- int base_idx, // initial indices
- int low_idx,
- int fence_idx,
- int top_idx);
-
- virtual ~<T>IChunk();
-
-// status reports
-
- int size() const; // number of slots
-
- inline virtual int empty() const ;
- inline virtual int full() const ;
-
- int can_grow_high () const ; // there is space to add data
- int can_grow_low () const;
-
- int base_index() const; // lowest possible index;
- int low_index() const; // lowest actual index;
- inline virtual int first_index() const; // lowest valid index or fence if none
- inline virtual int last_index() const; // highest valid index or low-1 if none
- int fence_index() const; // highest actual index + 1
- int top_index() const; // highest possible index + 1
-
-// indexing conversion
-
- int possible_index(int i) const; // i between base and top
- int actual_index(int i) const; // i between low and fence
- inline virtual int valid_index(int i) const; // i not deleted (mainly for mchunks)
-
- int possible_pointer(const <T>* p) const; // same for ptr
- int actual_pointer(const <T>* p) const;
- inline virtual int valid_pointer(const <T>* p) const;
-
- <T>* pointer_to(int i) const ; // pointer to data indexed by i
- // caution: i is not checked for validity
- int index_of(const <T>* p) const; // index of data pointed to by p
- // caution: p is not checked for validity
-
- inline virtual int succ(int idx) const; // next valid index or fence if none
- inline virtual int pred(int idx) const; // previous index or low - 1 if none
-
- inline virtual <T>* first_pointer() const; // pointer to first valid pos or 0
- inline virtual <T>* last_pointer() const; // pointer to first valid pos or 0
- inline virtual <T>* succ(<T>* p) const; // next pointer or 0
- inline virtual <T>* pred(<T>* p) const; // previous pointer or 0
-
-// modification
-
- inline virtual <T>* grow_high (); // return spot to add an element
- inline virtual <T>* grow_low ();
-
- inline virtual void shrink_high (); // logically delete top index
- inline virtual void shrink_low ();
-
- virtual void clear(int lo); // reset to empty ch with base = lo
- virtual void cleardown(int hi); // reset to empty ch with top = hi
- void re_index(int lo); // re-index so lo is new low
-
-// chunk traversal
-
- <T>IChunk* next() const;
- <T>IChunk* prev() const;
-
- void link_to_prev(<T>IChunk* prev);
- void link_to_next(<T>IChunk* next);
- void unlink();
-
-// state checks
-
- <T>* invalidate(); // mark self as invalid; return data
- // for possible deletion
-
- virtual int OK() const; // representation invariant
-
- void error(const char*) const;
- void empty_error() const;
- void full_error() const;
- void index_error() const;
-};
-
-// <T>Plex is a partly `abstract' class: few of the virtuals
-// are implemented at the Plex level, only in the subclasses
-
-class <T>Plex
-{
-protected:
-
- <T>IChunk* hd; // a chunk holding the data
- int lo; // lowest index
- int fnc; // highest index + 1
- int csize; // size of the chunk
-
- void invalidate(); // mark so OK() is false
- void del_chunk(<T>IChunk*); // delete a chunk
-
- <T>IChunk* tl() const; // last chunk;
- int one_chunk() const; // true if hd == tl()
-
-public:
-
-// constructors, etc.
-
- <T>Plex(); // no-op
-
- virtual ~<T>Plex();
-
-
-// Access functions
-
- virtual <T>& operator [] (int idx) = 0; // access by index;
- virtual <T>& operator () (Pix p) = 0; // access by Pix;
-
- virtual <T>& high_element () = 0; // access high element
- virtual <T>& low_element () = 0; // access low element
-
-// read-only versions for const Plexes
-
- virtual const <T>& operator [] (int idx) const = 0; // access by index;
- virtual const <T>& operator () (Pix p) const = 0; // access by Pix;
-
- virtual const <T>& high_element () const = 0; // access high element
- virtual const <T>& low_element () const = 0; // access low element
-
-
-// Index functions
-
- virtual int valid (int idx) const = 0; // idx is an OK index
-
- virtual int low() const = 0; // lowest index or fence if none
- virtual int high() const = 0; // highest index or low-1 if none
-
- int ecnef() const; // low limit index (low-1)
- int fence() const; // high limit index (high+1)
-
- virtual void prev(int& idx) const= 0; // set idx to preceding index
- // caution: pred may be out of bounds
-
- virtual void next(int& idx) const = 0; // set to next index
- // caution: succ may be out of bounds
-
- virtual Pix first() const = 0; // Pix to low element or 0
- virtual Pix last() const = 0; // Pix to high element or 0
- virtual void prev(Pix& pix) const = 0; // preceding pix or 0
- virtual void next(Pix& pix) const = 0; // next pix or 0
- virtual int owns(Pix p) const = 0; // p is an OK Pix
-
-// index<->Pix
-
- virtual int Pix_to_index(Pix p) const = 0; // get index via Pix
- virtual Pix index_to_Pix(int idx) const = 0; // Pix via index
-
-// Growth
-
- virtual int add_high(const <T&> elem) =0;// add new element at high end
- // return new high
-
- virtual int add_low(const <T&> elem) = 0; // add new low element,
- // return new low
-
-// Shrinkage
-
- virtual int del_high() = 0; // remove the element at high end
- // return new high
- virtual int del_low() = 0; // delete low element, return new lo
-
- // caution: del_low/high
- // does not necessarily
- // immediately call <T>::~<T>
-
-
-// operations on multiple elements
-
- virtual void fill(const <T&> x); // set all elements = x
- virtual void fill(const <T&> x, int from, int to); // fill from to to
- virtual void clear() = 0; // reset to zero-sized Plex
- virtual int reset_low(int newlow); // change low index,return old
- virtual void reverse(); // reverse in-place
- virtual void append(const <T>Plex& a); // concatenate a copy
- virtual void prepend(const <T>Plex& a); // prepend a copy
-
-// status
-
- virtual int can_add_high() const = 0;
- virtual int can_add_low() const = 0;
-
- int length () const; // number of slots
-
- int empty () const; // is the plex empty?
- virtual int full() const = 0; // it it full?
-
- int chunk_size() const; // report chunk size;
-
- virtual int OK() const = 0; // representation invariant
-
- void error(const char* msg) const;
- void index_error() const;
- void empty_error() const;
- void full_error() const;
-};
-
-
-// <T>IChunk ops
-
-inline int <T>IChunk:: size() const
-{
- return top - base;
-}
-
-
-inline int <T>IChunk:: base_index() const
-{
- return base;
-}
-
-inline int <T>IChunk:: low_index() const
-{
- return low;
-}
-
-inline int <T>IChunk:: fence_index() const
-{
- return fence;
-}
-
-inline int <T>IChunk:: top_index() const
-{
- return top;
-}
-
-inline <T>* <T>IChunk:: pointer_to(int i) const
-{
- return &(data[i-base]);
-}
-
-inline int <T>IChunk:: index_of(const <T>* p) const
-{
- return ((int)p - (int)data) / sizeof(<T>) + base;
-}
-
-inline int <T>IChunk:: possible_index(int i) const
-{
- return i >= base && i < top;
-}
-
-inline int <T>IChunk:: possible_pointer(const <T>* p) const
-{
- return p >= data && p < &(data[top-base]);
-}
-
-inline int <T>IChunk:: actual_index(int i) const
-{
- return i >= low && i < fence;
-}
-
-inline int <T>IChunk:: actual_pointer(const <T>* p) const
-{
- return p >= data && p < &(data[fence-base]);
-}
-
-inline int <T>IChunk:: can_grow_high () const
-{
- return fence < top;
-}
-
-inline int <T>IChunk:: can_grow_low () const
-{
- return base < low;
-}
-
-inline <T>* <T>IChunk:: invalidate()
-{
- <T>* p = data;
- data = 0;
- return p;
-}
-
-
-inline <T>IChunk* <T>IChunk::prev() const
-{
- return prv;
-}
-
-inline <T>IChunk* <T>IChunk::next() const
-{
- return nxt;
-}
-
-inline void <T>IChunk::link_to_prev(<T>IChunk* prev)
-{
- nxt = prev->nxt;
- prv = prev;
- nxt->prv = this;
- prv->nxt = this;
-}
-
-inline void <T>IChunk::link_to_next(<T>IChunk* next)
-{
- prv = next->prv;
- nxt = next;
- nxt->prv = this;
- prv->nxt = this;
-}
-
-inline void <T>IChunk::unlink()
-{
- <T>IChunk* n = nxt;
- <T>IChunk* p = prv;
- n->prv = p;
- p->nxt = n;
- prv = nxt = this;
-}
-
-inline int <T>IChunk:: empty() const
-{
- return low == fence;
-}
-
-inline int <T>IChunk:: full() const
-{
- return top - base == fence - low;
-}
-
-inline int <T>IChunk:: first_index() const
-{
- return (low == fence)? fence : low;
-}
-
-inline int <T>IChunk:: last_index() const
-{
- return (low == fence)? low - 1 : fence - 1;
-}
-
-inline int <T>IChunk:: succ(int i) const
-{
- return (i < low) ? low : i + 1;
-}
-
-inline int <T>IChunk:: pred(int i) const
-{
- return (i > fence) ? (fence - 1) : i - 1;
-}
-
-inline int <T>IChunk:: valid_index(int i) const
-{
- return i >= low && i < fence;
-}
-
-inline int <T>IChunk:: valid_pointer(const <T>* p) const
-{
- return p >= &(data[low - base]) && p < &(data[fence - base]);
-}
-
-inline <T>* <T>IChunk:: grow_high ()
-{
- if (!can_grow_high()) full_error();
- return &(data[fence++ - base]);
-}
-
-inline <T>* <T>IChunk:: grow_low ()
-{
- if (!can_grow_low()) full_error();
- return &(data[--low - base]);
-}
-
-inline void <T>IChunk:: shrink_high ()
-{
- if (empty()) empty_error();
- --fence;
-}
-
-inline void <T>IChunk:: shrink_low ()
-{
- if (empty()) empty_error();
- ++low;
-}
-
-inline <T>* <T>IChunk::first_pointer() const
-{
- return (low == fence)? 0 : &(data[low - base]);
-}
-
-inline <T>* <T>IChunk::last_pointer() const
-{
- return (low == fence)? 0 : &(data[fence - base - 1]);
-}
-
-inline <T>* <T>IChunk::succ(<T>* p) const
-{
- return ((p+1) < &(data[low - base]) || (p+1) >= &(data[fence - base])) ?
- 0 : (p+1);
-}
-
-inline <T>* <T>IChunk::pred(<T>* p) const
-{
- return ((p-1) < &(data[low - base]) || (p-1) >= &(data[fence - base])) ?
- 0 : (p-1);
-}
-
-
-// generic Plex operations
-
-inline <T>Plex::<T>Plex() {}
-
-inline int <T>Plex::chunk_size() const
-{
- return csize;
-}
-
-inline int <T>Plex::ecnef () const
-{
- return lo - 1;
-}
-
-
-inline int <T>Plex::fence () const
-{
- return fnc;
-}
-
-inline int <T>Plex::length () const
-{
- return fnc - lo;
-}
-
-inline int <T>Plex::empty () const
-{
- return fnc == lo;
-}
-
-inline <T>IChunk* <T>Plex::tl() const
-{
- return hd->prev();
-}
-
-inline int <T>Plex::one_chunk() const
-{
- return hd == hd->prev();
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/gen/Queue.ccP b/contrib/libg++/libg++/src/gen/Queue.ccP
deleted file mode 100644
index fb48d952ff71..000000000000
--- a/contrib/libg++/libg++/src/gen/Queue.ccP
+++ /dev/null
@@ -1,14 +0,0 @@
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include "<T>.Queue.h"
-
-<T>Queue::~<T>Queue() {}
-
-
-// error handling
-
-void <T>Queue::error(const char* msg)
-{
- (*lib_error_handler)("Queue", msg);
-}
diff --git a/contrib/libg++/libg++/src/gen/Queue.hP b/contrib/libg++/libg++/src/gen/Queue.hP
deleted file mode 100644
index c7e05ac6124f..000000000000
--- a/contrib/libg++/libg++/src/gen/Queue.hP
+++ /dev/null
@@ -1,51 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#ifndef _<T>Queue_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _<T>Queue_h
-
-#include <builtin.h>
-
-#include "<T>.defs.h"
-
-class <T>Queue
-{
-public:
- <T>Queue() { }
- virtual ~<T>Queue();
-
- virtual void enq(<T&> item) = 0;
- virtual <T> deq() = 0;
- virtual <T>& front() = 0;
- virtual void del_front() = 0;
-
- virtual void clear() = 0;
- virtual int empty() = 0;
- virtual int full() = 0;
- virtual int length() = 0;
-
- void error(const char*);
-
- virtual int OK() = 0;
-};
-
-#endif
diff --git a/contrib/libg++/libg++/src/gen/RAVLMap.ccP b/contrib/libg++/libg++/src/gen/RAVLMap.ccP
deleted file mode 100644
index 9477250a6e60..000000000000
--- a/contrib/libg++/libg++/src/gen/RAVLMap.ccP
+++ /dev/null
@@ -1,690 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <stream.h>
-#include "<T>.<C>.RAVLMap.h"
-
-
-/*
- constants & inlines for maintaining balance & thread status in tree nodes
-*/
-
-#define AVLBALANCEMASK 3
-#define AVLBALANCED 0
-#define AVLLEFTHEAVY 1
-#define AVLRIGHTHEAVY 2
-
-#define LTHREADBIT 4
-#define RTHREADBIT 8
-
-
-static inline int bf(<T><C>RAVLNode* t)
-{
- return t->stat & AVLBALANCEMASK;
-}
-
-static inline void set_bf(<T><C>RAVLNode* t, int b)
-{
- t->stat = (t->stat & ~AVLBALANCEMASK) | (b & AVLBALANCEMASK);
-}
-
-
-static inline int rthread(<T><C>RAVLNode* t)
-{
- return t->stat & RTHREADBIT;
-}
-
-static inline void set_rthread(<T><C>RAVLNode* t, int b)
-{
- if (b)
- t->stat |= RTHREADBIT;
- else
- t->stat &= ~RTHREADBIT;
-}
-
-static inline int lthread(<T><C>RAVLNode* t)
-{
- return t->stat & LTHREADBIT;
-}
-
-static inline void set_lthread(<T><C>RAVLNode* t, int b)
-{
- if (b)
- t->stat |= LTHREADBIT;
- else
- t->stat &= ~LTHREADBIT;
-}
-
-/*
- traversal primitives
-*/
-
-
-<T><C>RAVLNode* <T><C>RAVLMap::leftmost()
-{
- <T><C>RAVLNode* t = root;
- if (t != 0) while (t->lt != 0) t = t->lt;
- return t;
-}
-
-<T><C>RAVLNode* <T><C>RAVLMap::rightmost()
-{
- <T><C>RAVLNode* t = root;
- if (t != 0) while (t->rt != 0) t = t->rt;
- return t;
-}
-
-<T><C>RAVLNode* <T><C>RAVLMap::succ(<T><C>RAVLNode* t)
-{
- <T><C>RAVLNode* r = t->rt;
- if (!rthread(t)) while (!lthread(r)) r = r->lt;
- return r;
-}
-
-<T><C>RAVLNode* <T><C>RAVLMap::pred(<T><C>RAVLNode* t)
-{
- <T><C>RAVLNode* l = t->lt;
- if (!lthread(t)) while (!rthread(l)) l = l->rt;
- return l;
-}
-
-
-Pix <T><C>RAVLMap::seek(<T&> key)
-{
- <T><C>RAVLNode* t = root;
- if (t == 0)
- return 0;
- for (;;)
- {
- int cmp = <T>CMP(key, t->item);
- if (cmp == 0)
- return Pix(t);
- else if (cmp < 0)
- {
- if (lthread(t))
- return 0;
- else
- t = t->lt;
- }
- else if (rthread(t))
- return 0;
- else
- t = t->rt;
- }
-}
-
-
-int <T><C>RAVLMap::rankof(<T&> key)
-{
- int r;
- <T><C>RAVLNode* t = root;
- if (t == 0)
- return 0;
- for (r=t->rank; t != 0; r+=t->rank)
- {
- int cmp = <T>CMP(key, t->item);
- if (cmp == 0)
- return r;
- else if (cmp < 0)
- {
- if (lthread(t))
- return 0;
- else
- {
- r -= t->rank;
- t = t->lt;
- }
- }
- else if (rthread(t))
- return 0;
- else
- {
- t = t->rt;
- }
- }
- return 0;
-}
-
-Pix <T><C>RAVLMap::ranktoPix(int i)
-{
- int r;
- <T><C>RAVLNode* t = root;
-
- if ((i<1)||(i>count))
- return 0;
- for (r=t->rank; r!=i; r+=t->rank)
- {
- if (r>i)
- {
- r -= t->rank;
- t = t->lt;
- }
- else
- t = t->rt;
- }
- return Pix(t);
-}
-
-/*
- The combination of threads and AVL bits make adding & deleting
- interesting, but very awkward.
-
- We use the following statics to avoid passing them around recursively
-*/
-
-static int _need_rebalancing; // to send back balance info from rec. calls
-static <T>* _target_item; // add/del_item target
-static <T><C>RAVLNode* _found_node; // returned added/deleted node
-static int _already_found; // for deletion subcases
-static int _rank_changed; // for rank computation
-
-
-void <T><C>RAVLMap:: _add(<T><C>RAVLNode*& t)
-{
- int cmp = <T>CMP(*_target_item, t->item);
- if (cmp == 0)
- {
- _found_node = t;
- return;
- }
- else if (cmp < 0)
- {
- if (lthread(t))
- {
- ++count;
- _found_node = new <T><C>RAVLNode(*_target_item, def);
- set_lthread(_found_node, 1);
- set_rthread(_found_node, 1);
- _found_node->lt = t->lt;
- _found_node->rt = t;
- t->lt = _found_node;
- set_lthread(t, 0);
- _need_rebalancing = 1;
- _rank_changed = 1;
- }
- else
- _add(t->lt);
- if (_rank_changed) ++t->rank;
- if (_need_rebalancing)
- {
- switch(bf(t))
- {
- case AVLRIGHTHEAVY:
- set_bf(t, AVLBALANCED);
- _need_rebalancing = 0;
- return;
- case AVLBALANCED:
- set_bf(t, AVLLEFTHEAVY);
- return;
- case AVLLEFTHEAVY:
- {
- <T><C>RAVLNode* l = t->lt;
- if (bf(l) == AVLLEFTHEAVY)
- {
- t->rank -= l->rank;
- if (rthread(l))
- t->lt = l;
- else
- t->lt = l->rt;
- set_lthread(t, rthread(l));
- l->rt = t;
- set_rthread(l, 0);
- set_bf(t, AVLBALANCED);
- set_bf(l, AVLBALANCED);
- t = l;
- _need_rebalancing = 0;
- }
- else
- {
- <T><C>RAVLNode* r = l->rt;
- r->rank += l->rank;
- t->rank -= r->rank;
- set_rthread(l, lthread(r));
- if (lthread(r))
- l->rt = r;
- else
- l->rt = r->lt;
- r->lt = l;
- set_lthread(r, 0);
- set_lthread(t, rthread(r));
- if (rthread(r))
- t->lt = r;
- else
- t->lt = r->rt;
- r->rt = t;
- set_rthread(r, 0);
- if (bf(r) == AVLLEFTHEAVY)
- set_bf(t, AVLRIGHTHEAVY);
- else
- set_bf(t, AVLBALANCED);
- if (bf(r) == AVLRIGHTHEAVY)
- set_bf(l, AVLLEFTHEAVY);
- else
- set_bf(l, AVLBALANCED);
- set_bf(r, AVLBALANCED);
- t = r;
- _need_rebalancing = 0;
- return;
- }
- }
- }
- }
- }
- else
- {
- if (rthread(t))
- {
- ++count;
- _found_node = new <T><C>RAVLNode(*_target_item, def);
- set_rthread(t, 0);
- set_lthread(_found_node, 1);
- set_rthread(_found_node, 1);
- _found_node->lt = t;
- _found_node->rt = t->rt;
- t->rt = _found_node;
- _need_rebalancing = 1;
- _rank_changed = 1;
- }
- else
- _add(t->rt);
- if (_need_rebalancing)
- {
- switch(bf(t))
- {
- case AVLLEFTHEAVY:
- set_bf(t, AVLBALANCED);
- _need_rebalancing = 0;
- return;
- case AVLBALANCED:
- set_bf(t, AVLRIGHTHEAVY);
- return;
- case AVLRIGHTHEAVY:
- {
- <T><C>RAVLNode* r = t->rt;
- if (bf(r) == AVLRIGHTHEAVY)
- {
- r->rank += t->rank;
- if (lthread(r))
- t->rt = r;
- else
- t->rt = r->lt;
- set_rthread(t, lthread(r));
- r->lt = t;
- set_lthread(r, 0);
- set_bf(t, AVLBALANCED);
- set_bf(r, AVLBALANCED);
- t = r;
- _need_rebalancing = 0;
- }
- else
- {
- <T><C>RAVLNode* l = r->lt;
- r->rank -= l->rank;
- l->rank += t->rank;
- set_lthread(r, rthread(l));
- if (rthread(l))
- r->lt = l;
- else
- r->lt = l->rt;
- l->rt = r;
- set_rthread(l, 0);
- set_rthread(t, lthread(l));
- if (lthread(l))
- t->rt = l;
- else
- t->rt = l->lt;
- l->lt = t;
- set_lthread(l, 0);
- if (bf(l) == AVLRIGHTHEAVY)
- set_bf(t, AVLLEFTHEAVY);
- else
- set_bf(t, AVLBALANCED);
- if (bf(l) == AVLLEFTHEAVY)
- set_bf(r, AVLRIGHTHEAVY);
- else
- set_bf(r, AVLBALANCED);
- set_bf(l, AVLBALANCED);
- t = l;
- _need_rebalancing = 0;
- return;
- }
- }
- }
- }
- }
-}
-
-
-<C>& <T><C>RAVLMap::operator [] (<T&> item)
-{
- if (root == 0)
- {
- ++count;
- root = new <T><C>RAVLNode(item, def);
- set_rthread(root, 1);
- set_lthread(root, 1);
- return root->cont;
- }
- else
- {
- _target_item = &item;
- _need_rebalancing = 0;
- _rank_changed = 0;
- _add(root);
- return _found_node->cont;
- }
-}
-
-
-void <T><C>RAVLMap::_del(<T><C>RAVLNode* par, <T><C>RAVLNode*& t)
-{
- int comp;
- if (_already_found)
- {
- if (rthread(t))
- comp = 0;
- else
- comp = 1;
- }
- else
- comp = <T>CMP(*_target_item, t->item);
- if (comp == 0)
- {
- if (lthread(t) && rthread(t))
- {
- _found_node = t;
- if (t == par->lt)
- {
- set_lthread(par, 1);
- par->lt = t->lt;
- }
- else
- {
- set_rthread(par, 1);
- par->rt = t->rt;
- }
- _need_rebalancing = 1;
- _rank_changed = 1;
- return;
- }
- else if (lthread(t))
- {
- _found_node = t;
- <T><C>RAVLNode* s = succ(t);
- if (s != 0 && lthread(s))
- s->lt = t->lt;
- t = t->rt;
- _need_rebalancing = 1;
- _rank_changed = 1;
- return;
- }
- else if (rthread(t))
- {
- _found_node = t;
- <T><C>RAVLNode* p = pred(t);
- if (p != 0 && rthread(p))
- p->rt = t->rt;
- t = t->lt;
- _need_rebalancing = 1;
- _rank_changed = 1;
- return;
- }
- else // replace item & find someone deletable
- {
- <T><C>RAVLNode* p = pred(t);
- t->item = p->item;
- t->cont = p->cont;
- _already_found = 1;
- comp = -1; // fall through below to left
- }
- }
-
- if (comp < 0)
- {
- if (lthread(t))
- return;
- _del(t, t->lt);
- if (_rank_changed) --t->rank;
- if (!_need_rebalancing)
- return;
- switch (bf(t))
- {
- case AVLLEFTHEAVY:
- set_bf(t, AVLBALANCED);
- return;
- case AVLBALANCED:
- set_bf(t, AVLRIGHTHEAVY);
- _need_rebalancing = 0;
- return;
- case AVLRIGHTHEAVY:
- {
- <T><C>RAVLNode* r = t->rt;
- switch (bf(r))
- {
- case AVLBALANCED:
- r->rank += t->rank;
- if (lthread(r))
- t->rt = r;
- else
- t->rt = r->lt;
- set_rthread(t, lthread(r));
- r->lt = t;
- set_lthread(r, 0);
- set_bf(t, AVLRIGHTHEAVY);
- set_bf(r, AVLLEFTHEAVY);
- _need_rebalancing = 0;
- t = r;
- return;
- case AVLRIGHTHEAVY:
- r->rank += t->rank;
- if (lthread(r))
- t->rt = r;
- else
- t->rt = r->lt;
- set_rthread(t, lthread(r));
- r->lt = t;
- set_lthread(r, 0);
- set_bf(t, AVLBALANCED);
- set_bf(r, AVLBALANCED);
- t = r;
- return;
- case AVLLEFTHEAVY:
- {
- <T><C>RAVLNode* l = r->lt;
- r->rank -= l->rank;
- l->rank += t->rank;
- set_lthread(r, rthread(l));
- if (rthread(l))
- r->lt = l;
- else
- r->lt = l->rt;
- l->rt = r;
- set_rthread(l, 0);
- set_rthread(t, lthread(l));
- if (lthread(l))
- t->rt = l;
- else
- t->rt = l->lt;
- l->lt = t;
- set_lthread(l, 0);
- if (bf(l) == AVLRIGHTHEAVY)
- set_bf(t, AVLLEFTHEAVY);
- else
- set_bf(t, AVLBALANCED);
- if (bf(l) == AVLLEFTHEAVY)
- set_bf(r, AVLRIGHTHEAVY);
- else
- set_bf(r, AVLBALANCED);
- set_bf(l, AVLBALANCED);
- t = l;
- return;
- }
- }
- }
- }
- }
- else
- {
- if (rthread(t))
- return;
- _del(t, t->rt);
- if (!_need_rebalancing)
- return;
- switch (bf(t))
- {
- case AVLRIGHTHEAVY:
- set_bf(t, AVLBALANCED);
- return;
- case AVLBALANCED:
- set_bf(t, AVLLEFTHEAVY);
- _need_rebalancing = 0;
- return;
- case AVLLEFTHEAVY:
- {
- <T><C>RAVLNode* l = t->lt;
- switch (bf(l))
- {
- case AVLBALANCED:
- t->rank -= l->rank;
- if (rthread(l))
- t->lt = l;
- else
- t->lt = l->rt;
- set_lthread(t, rthread(l));
- l->rt = t;
- set_rthread(l, 0);
- set_bf(t, AVLLEFTHEAVY);
- set_bf(l, AVLRIGHTHEAVY);
- _need_rebalancing = 0;
- t = l;
- return;
- case AVLLEFTHEAVY:
- t->rank -= l->rank;
- if (rthread(l))
- t->lt = l;
- else
- t->lt = l->rt;
- set_lthread(t, rthread(l));
- l->rt = t;
- set_rthread(l, 0);
- set_bf(t, AVLBALANCED);
- set_bf(l, AVLBALANCED);
- t = l;
- return;
- case AVLRIGHTHEAVY:
- {
- <T><C>RAVLNode* r = l->rt;
- r->rank += l->rank;
- t->rank -= r->rank;
- set_rthread(l, lthread(r));
- if (lthread(r))
- l->rt = r;
- else
- l->rt = r->lt;
- r->lt = l;
- set_lthread(r, 0);
- set_lthread(t, rthread(r));
- if (rthread(r))
- t->lt = r;
- else
- t->lt = r->rt;
- r->rt = t;
- set_rthread(r, 0);
- if (bf(r) == AVLLEFTHEAVY)
- set_bf(t, AVLRIGHTHEAVY);
- else
- set_bf(t, AVLBALANCED);
- if (bf(r) == AVLRIGHTHEAVY)
- set_bf(l, AVLLEFTHEAVY);
- else
- set_bf(l, AVLBALANCED);
- set_bf(r, AVLBALANCED);
- t = r;
- return;
- }
- }
- }
- }
- }
-}
-
-
-void <T><C>RAVLMap::del(<T&> item)
-{
- if (root == 0) return;
- _need_rebalancing = 0;
- _already_found = 0;
- _found_node = 0;
- _rank_changed = 0;
- _target_item = &item;
- _del(root, root);
- if (_found_node)
- {
- delete(_found_node);
- if (--count == 0)
- root = 0;
- }
-}
-
-void <T><C>RAVLMap::_kill(<T><C>RAVLNode* t)
-{
- if (t != 0)
- {
- if (!lthread(t)) _kill(t->lt);
- if (!rthread(t)) _kill(t->rt);
- delete t;
- }
-}
-
-
-<T><C>RAVLMap::<T><C>RAVLMap(<T><C>RAVLMap& b) :<T><C>Map(b.def)
-{
- root = 0;
- count = 0;
- for (Pix i = b.first(); i != 0; b.next(i))
- (*this)[b.key(i)] = b.contents(i);
-}
-
-
-int <T><C>RAVLMap::OK()
-{
- int v = 1;
- if (root == 0)
- v = count == 0;
- else
- {
- int n = 1;
- <T><C>RAVLNode* trail = leftmost();
- v &= rankof(trail->item) == n;
- <T><C>RAVLNode* t = succ(trail);
- while (t != 0)
- {
- ++n;
- v &= <T>CMP(trail->item, t->item) < 0;
- v &= rankof(t->item) == n;
- trail = t;
- t = succ(t);
- }
- v &= n == count;
- }
- if (!v) error("invariant failure");
- return v;
-}
diff --git a/contrib/libg++/libg++/src/gen/RAVLMap.hP b/contrib/libg++/libg++/src/gen/RAVLMap.hP
deleted file mode 100644
index 1009ef1a9a57..000000000000
--- a/contrib/libg++/libg++/src/gen/RAVLMap.hP
+++ /dev/null
@@ -1,147 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
- ranking code from Paul Anderson (paul%lfcs.ed.ac.uk)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#ifndef _<T><C>RAVLMap_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _<T><C>RAVLMap_h 1
-
-#include "<T>.<C>.Map.h"
-
-struct <T><C>RAVLNode
-{
- <T><C>RAVLNode* lt;
- <T><C>RAVLNode* rt;
- <T> item;
- <C> cont;
- int rank;
- char stat;
- <T><C>RAVLNode(<T&> h, <C&> c,
- <T><C>RAVLNode* l=0, <T><C>RAVLNode* r=0, int k=1);
- ~<T><C>RAVLNode();
-};
-
-inline <T><C>RAVLNode::<T><C>RAVLNode(<T&> h, <C&> c,
- <T><C>RAVLNode* l, <T><C>RAVLNode* r, int k)
- :lt(l), rt(r), item(h), cont(c), rank(k), stat(0) {}
-
-inline <T><C>RAVLNode::~<T><C>RAVLNode() {}
-
-typedef <T><C>RAVLNode* <T><C>RAVLNodePtr;
-
-
-class <T><C>RAVLMap : public <T><C>Map
-{
-protected:
- <T><C>RAVLNode* root;
-
- <T><C>RAVLNode* leftmost();
- <T><C>RAVLNode* rightmost();
- <T><C>RAVLNode* pred(<T><C>RAVLNode* t);
- <T><C>RAVLNode* succ(<T><C>RAVLNode* t);
- void _kill(<T><C>RAVLNode* t);
- void _add(<T><C>RAVLNode*& t);
- void _del(<T><C>RAVLNode* p, <T><C>RAVLNode*& t);
-
-public:
- <T><C>RAVLMap(<C&> dflt);
- <T><C>RAVLMap(<T><C>RAVLMap& a);
- inline ~<T><C>RAVLMap();
-
- <C>& operator [] (<T&> key);
-
- void del(<T&> key);
-
- inline Pix first();
- inline void next(Pix& i);
- inline <T>& key(Pix i);
- inline <C>& contents(Pix i);
-
- Pix seek(<T&> key);
- inline int contains(<T&> key);
-
- Pix ranktoPix(int i);
- int rankof(<T&> key);
-
- inline void clear();
-
- Pix last();
- void prev(Pix& i);
-
- int OK();
-};
-
-inline <T><C>RAVLMap::~<T><C>RAVLMap()
-{
- _kill(root);
-}
-
-inline <T><C>RAVLMap::<T><C>RAVLMap(<C&> dflt) :<T><C>Map(dflt)
-{
- root = 0;
-}
-
-
-inline Pix <T><C>RAVLMap::first()
-{
- return Pix(leftmost());
-}
-
-inline Pix <T><C>RAVLMap::last()
-{
- return Pix(rightmost());
-}
-
-inline void <T><C>RAVLMap::next(Pix& i)
-{
- if (i != 0) i = Pix(succ((<T><C>RAVLNode*)i));
-}
-
-inline void <T><C>RAVLMap::prev(Pix& i)
-{
- if (i != 0) i = Pix(pred((<T><C>RAVLNode*)i));
-}
-
-inline <T>& <T><C>RAVLMap::key(Pix i)
-{
- if (i == 0) error("null Pix");
- return ((<T><C>RAVLNode*)i)->item;
-}
-
-inline <C>& <T><C>RAVLMap::contents(Pix i)
-{
- if (i == 0) error("null Pix");
- return ((<T><C>RAVLNode*)i)->cont;
-}
-
-inline void <T><C>RAVLMap::clear()
-{
- _kill(root);
- count = 0;
- root = 0;
-}
-
-inline int <T><C>RAVLMap::contains(<T&> key)
-{
- return seek(key) != 0;
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/gen/RPlex.ccP b/contrib/libg++/libg++/src/gen/RPlex.ccP
deleted file mode 100644
index 1707b5d0ab2a..000000000000
--- a/contrib/libg++/libg++/src/gen/RPlex.ccP
+++ /dev/null
@@ -1,477 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
- based on code by Marc Shapiro (shapiro@sor.inria.fr)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include "<T>.RPlex.h"
-
-typedef <T>IChunk* _<T>IChunk_ptr;
-
-<T>RPlex:: <T>RPlex()
-{
- lo = fnc = 0;
- csize = DEFAULT_INITIAL_CAPACITY;
- <T>* data = new <T>[csize];
- set_cache(new <T>IChunk(data, lo, lo, fnc, lo+csize));
- hd = ch;
- maxch = MIN_NCHUNKS;
- lch = maxch / 2;
- fch = lch + 1;
- base = ch->base_index() - lch * csize;
- chunks = new _<T>IChunk_ptr[maxch];
- chunks[lch] = ch;
-}
-
-<T>RPlex:: <T>RPlex(int chunksize)
-{
- if (chunksize == 0) error("invalid constructor specification");
- lo = fnc = 0;
- if (chunksize > 0)
- {
- csize = chunksize;
- <T>* data = new <T>[csize];
- set_cache(new <T>IChunk(data, lo, lo, fnc, csize+lo));
- hd = ch;
- }
- else
- {
- csize = -chunksize;
- <T>* data = new <T>[csize];
- set_cache(new <T>IChunk(data, chunksize+lo, lo, fnc, fnc));
- hd = ch;
- }
- maxch = MIN_NCHUNKS;
- lch = maxch / 2;
- fch = lch + 1;
- base = ch->base_index() - lch * csize;
- chunks = new _<T>IChunk_ptr[maxch];
- chunks[lch] = ch;
-}
-
-
-<T>RPlex:: <T>RPlex(int l, int chunksize)
-{
- if (chunksize == 0) error("invalid constructor specification");
- lo = fnc = l;
- if (chunksize > 0)
- {
- csize = chunksize;
- <T>* data = new <T>[csize];
- set_cache(new <T>IChunk(data, lo, lo, fnc, lo+csize));
- hd = ch;
- }
- else
- {
- csize = -chunksize;
- <T>* data = new <T>[csize];
- set_cache(new <T>IChunk(data, chunksize+lo, lo, fnc, fnc));
- hd = ch;
- }
- maxch = MIN_NCHUNKS;
- lch = maxch / 2;
- fch = lch + 1;
- base = ch->base_index() - lch * csize;
- chunks = new _<T>IChunk_ptr[maxch];
- chunks[lch] = ch;
-}
-
-void <T>RPlex::make_initial_chunks(int up)
-{
- int count = 0;
- int need = fnc - lo;
- hd = 0;
- if (up)
- {
- int l = lo;
- do
- {
- ++count;
- int sz;
- if (need >= csize)
- sz = csize;
- else
- sz = need;
- <T>* data = new <T> [csize];
- <T>IChunk* h = new <T>IChunk(data, l, l, l+sz, l+csize);
- if (hd != 0)
- h->link_to_next(hd);
- else
- hd = h;
- l += sz;
- need -= sz;
- } while (need > 0);
- }
- else
- {
- int hi = fnc;
- do
- {
- ++count;
- int sz;
- if (need >= csize)
- sz = csize;
- else
- sz = need;
- <T>* data = new <T> [csize];
- <T>IChunk* h = new <T>IChunk(data, hi-csize, hi-sz, hi, hi);
- if (hd != 0)
- h->link_to_next(hd);
- hd = h;
- hi -= sz;
- need -= sz;
- } while (need > 0);
- }
- set_cache((<T>IChunk*)hd);
-
- maxch = MIN_NCHUNKS;
- if (maxch < count * 2)
- maxch = count * 2;
- chunks = new _<T>IChunk_ptr[maxch];
- lch = maxch / 3;
- fch = lch + count;
- base = ch->base_index() - csize * lch;
- int k = lch;
- do
- {
- chunks[k++] = ch;
- set_cache(ch->next());
- } while (ch != hd);
-}
-
-<T>RPlex:: <T>RPlex(int l, int hi, const <T&> initval, int chunksize)
-{
- lo = l;
- fnc = hi + 1;
- if (chunksize == 0)
- {
- csize = fnc - l;
- make_initial_chunks(1);
- }
- else if (chunksize < 0)
- {
- csize = -chunksize;
- make_initial_chunks(0);
- }
- else
- {
- csize = chunksize;
- make_initial_chunks(1);
- }
- fill(initval);
-}
-
-<T>RPlex::<T>RPlex(const <T>RPlex& a)
-{
- lo = a.lo;
- fnc = a.fnc;
- csize = a.csize;
- make_initial_chunks();
- for (int i = a.low(); i < a.fence(); a.next(i)) (*this)[i] = a[i];
-}
-
-void <T>RPlex::operator= (const <T>RPlex& a)
-{
- if (&a != this)
- {
- invalidate();
- lo = a.lo;
- fnc = a.fnc;
- csize = a.csize;
- make_initial_chunks();
- for (int i = a.low(); i < a.fence(); a.next(i)) (*this)[i] = a[i];
- }
-}
-
-
-void <T>RPlex::cache(const <T>* p) const
-{
- const <T>IChunk* old = ch;
- const <T>IChunk* t = ch;
- while (!t->actual_pointer(p))
- {
- t = (t->next());
- if (t == old) index_error();
- }
- set_cache(t);
-}
-
-int <T>RPlex::owns(Pix px) const
-{
- <T>* p = (<T>*)px;
- const <T>IChunk* old = ch;
- const <T>IChunk* t = ch;
- while (!t->actual_pointer(p))
- {
- t = (t->next());
- if (t == old) return 0;
- }
- set_cache(t);
- return 1;
-}
-
-
-<T>* <T>RPlex::dosucc(const <T>* p) const
-{
- if (p == 0) return 0;
- const <T>IChunk* old = ch;
- const <T>IChunk* t = ch;
- while (!t->actual_pointer(p))
- {
- t = (t->next());
- if (t == old) return 0;
- }
- int i = t->index_of(p) + 1;
- if (i >= fnc) return 0;
- if (i >= t->fence_index()) t = (t->next());
- set_cache(t);
- return t->pointer_to(i);
-}
-
-<T>* <T>RPlex::dopred(const <T>* p) const
-{
- if (p == 0) return 0;
- const <T>IChunk* old = ch;
- const <T>IChunk* t = ch;
- while (!t->actual_pointer(p))
- {
- t = (t->prev());
- if (t == old) return 0;
- }
- int i = t->index_of(p) - 1;
- if (i < lo) return 0;
- if (i < t->low_index()) t = (t->prev());
- set_cache(t);
- return (t->pointer_to(i));
-}
-
-int <T>RPlex::add_high(const <T&> elem)
-{
- <T>IChunk* t = tl();
- if (!t->can_grow_high())
- {
- if (t-><T>IChunk::empty() && one_chunk())
- {
- t->clear(fnc);
- base = t->base_index() - lch * csize;
- }
- else
- {
- <T>* data = new <T> [csize];
- t = (new <T>IChunk(data, fnc, fnc, fnc,fnc+csize));
- t->link_to_prev(tl());
- if (fch == maxch)
- {
- maxch *= 2;
- <T>IChunk** newch = new _<T>IChunk_ptr [maxch];
- memcpy(newch, chunks, fch * sizeof(_<T>IChunk_ptr));
- delete chunks;
- chunks = newch;
- }
- chunks[fch++] = t;
- }
- }
- *((t-><T>IChunk::grow_high())) = elem;
- set_cache(t);
- return fnc++;
-}
-
-int <T>RPlex::del_high ()
-{
- if (empty()) empty_error();
- <T>IChunk* t = tl();
- if (t-><T>IChunk::empty()) // kill straggler first
- {
- <T>IChunk* pred = t->prev();
- del_chunk(t);
- t = (pred);
- --fch;
- }
- t-><T>IChunk::shrink_high();
- if (t-><T>IChunk::empty() && !one_chunk())
- {
- <T>IChunk* pred = t->prev();
- del_chunk(t);
- t = (pred);
- --fch;
- }
- set_cache(t);
- return --fnc - 1;
-}
-
-int <T>RPlex::add_low (const <T&> elem)
-{
- <T>IChunk* t = hd;
- if (!t->can_grow_low())
- {
- if (t-><T>IChunk::empty() && one_chunk())
- {
- t->cleardown(lo);
- base = t->base_index() - lch * csize;
- }
- else
- {
- <T>* data = new <T> [csize];
- hd = new <T>IChunk(data, lo-csize, lo, lo, lo);
- hd->link_to_next(t);
- t = ( hd);
- if (lch == 0)
- {
- lch = maxch;
- fch += maxch;
- maxch *= 2;
- <T>IChunk** newch = new _<T>IChunk_ptr [maxch];
- memcpy(&(newch[lch]), chunks, lch * sizeof(_<T>IChunk_ptr));
- delete chunks;
- chunks = newch;
- base = t->base_index() - (lch - 1) * csize;
- }
- chunks[--lch] = t;
- }
- }
- *((t-><T>IChunk::grow_low())) = elem;
- set_cache(t);
- return --lo;
-}
-
-
-int <T>RPlex::del_low ()
-{
- if (empty()) empty_error();
- <T>IChunk* t = hd;
- if (t-><T>IChunk::empty())
- {
- hd = t->next();
- del_chunk(t);
- t = hd;
- ++lch;
- }
- t-><T>IChunk::shrink_low();
- if (t-><T>IChunk::empty() && !one_chunk())
- {
- hd = t->next();
- del_chunk(t);
- t = hd;
- ++lch;
- }
- set_cache(t);
- return ++lo;
-}
-
-void <T>RPlex::reverse()
-{
- <T> tmp;
- int l = lo;
- int h = fnc - 1;
- <T>IChunk* loch = hd;
- <T>IChunk* hich = tl();
- while (l < h)
- {
- <T>* lptr = loch->pointer_to(l);
- <T>* hptr = hich->pointer_to(h);
- tmp = *lptr;
- *lptr = *hptr;
- *hptr = tmp;
- if (++l >= loch->fence_index()) loch = loch->next();
- if (--h < hich->low_index()) hich = hich->prev();
- }
-}
-
-void <T>RPlex::fill(const <T&> x)
-{
- for (int i = lo; i < fnc; ++i) (*this)[i] = x;
-}
-
-void <T>RPlex::fill(const <T&> x, int lo, int hi)
-{
- for (int i = lo; i <= hi; ++i) (*this)[i] = x;
-}
-
-
-void <T>RPlex::clear()
-{
- for (int i = lch + 1; i < fch; ++i)
- del_chunk(chunks[i]);
- fch = lch + 1;
- set_cache(chunks[lch]);
- ch-><T>IChunk::clear(lo);
- fnc = lo;
-}
-
-int <T>RPlex::reset_low(int l)
-{
- int old = lo;
- int diff = l - lo;
- if (diff != 0)
- {
- lo += diff;
- fnc += diff;
- <T>IChunk* t = hd;
- do
- {
- t->re_index(t->low_index() + diff);
- t = t->next();
- } while (t != hd);
- }
- base = hd->base_index() - lch * csize;
- return old;
-}
-
-
-int <T>RPlex::OK () const
-{
- int v = hd != 0 && ch != 0; // at least one chunk
-
- v &= fnc == tl()->fence_index(); // last chunk fnc == plex fnc
- v &= lo == hd-><T>IChunk::low_index(); // first lo == plex lo
-
- v &= base == hd->base_index() - lch * csize; // base is correct;
- v &= lch < fch;
- v &= fch <= maxch; // within allocation;
-
-// loop for others:
-
- int k = lch; // to cross-check nch
-
- int found_ch = 0; // to make sure ch is in list;
- const <T>IChunk* t = (hd);
- for (;;)
- {
- v &= chunks[k++] == t; // each chunk is at proper index
- if (t == ch) ++found_ch;
- v &= t-><T>IChunk::OK(); // each chunk is OK
- if (t == tl())
- break;
- else // and has indices contiguous to succ
- {
- v &= t->top_index() == t->next()->base_index();
- if (t != hd) // internal chunks full
- {
- v &= !t->empty();
- v &= !t->can_grow_low();
- v &= !t->can_grow_high();
- }
- t = t->next();
- }
- }
- v &= found_ch == 1;
- v &= fch == k;
- if (!v) error("invariant failure");
- return v;
-}
diff --git a/contrib/libg++/libg++/src/gen/RPlex.hP b/contrib/libg++/libg++/src/gen/RPlex.hP
deleted file mode 100644
index 546adaa3c5dc..000000000000
--- a/contrib/libg++/libg++/src/gen/RPlex.hP
+++ /dev/null
@@ -1,257 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
- based on code by Marc Shapiro (shapiro@sor.inria.fr)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifndef _<T>RPlex_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _<T>RPlex_h 1
-
-#include "<T>.Plex.h"
-
-// minimum number of chunks to index
-
-#ifndef MIN_NCHUNKS
-#define MIN_NCHUNKS 16
-#endif
-
-class <T>RPlex: public <T>Plex
-{
- int base; // base index of lowest chunk
- int lch; // index of lowest used chunk
- int fch; // 1 + index of highest used chunk
- int maxch; // max chunks in array
- <T>IChunk** chunks; // array of chunks
- <T>IChunk* ch; // cached chunk
-
- void make_initial_chunks(int up = 1);
-
- void cache(int idx) const;
- void cache(const <T>* p) const;
- <T>* dopred(const <T>* p) const;
- <T>* dosucc(const <T>* p) const;
-
- inline void set_cache(const <T>IChunk* t) const; // logically,
- // not physically const
-
-public:
- <T>RPlex(); // set low = 0;
- // fence = 0;
- // csize = default
-
- <T>RPlex(int ch_size); // low = 0;
- // fence = 0;
- // csize = ch_size
-
- <T>RPlex(int lo, // low = lo;
- int ch_size); // fence=lo
- // csize = ch_size
-
- <T>RPlex(int lo, // low = lo
- int hi, // fence = hi+1
- const <T&> initval,// fill with initval,
- int ch_size = 0); // csize= ch_size
- // or fence-lo if 0
-
- <T>RPlex(const <T>RPlex&);
-
- inline ~<T>RPlex();
-
- void operator= (const <T>RPlex&);
-
-// virtuals
-
- inline <T>& high_element ();
- inline <T>& low_element ();
-
- inline const <T>& high_element () const;
- inline const <T>& low_element () const;
-
- inline Pix first() const;
- inline Pix last() const;
- inline void prev(Pix& ptr) const;
- inline void next(Pix& ptr) const;
- int owns(Pix p) const;
- inline <T>& operator () (Pix p);
- inline const <T>& operator () (Pix p) const;
-
- inline int low() const;
- inline int high() const;
- inline int valid(int idx) const;
- inline void prev(int& idx) const;
- inline void next(int& x) const;
- inline <T>& operator [] (int index);
- inline const <T>& operator [] (int index) const;
-
- inline int Pix_to_index(Pix p) const;
- inline Pix index_to_Pix(int idx) const;
-
- inline int can_add_high() const;
- inline int can_add_low() const;
- inline int full() const;
-
- int add_high(const <T&> elem);
- int del_high ();
- int add_low (const <T&> elem);
- int del_low ();
-
- void fill(const <T&> x);
- void fill(const <T&> x, int from, int to);
- void clear();
- void reverse();
-
- int reset_low(int newlow);
-
- int OK () const;
-};
-
-
-inline void <T>RPlex::prev(int& idx) const
-{
- --idx;
-}
-
-inline void <T>RPlex::next(int& idx) const
-{
- ++idx;
-}
-
-inline int <T>RPlex::full () const
-{
- return 0;
-}
-
-inline int <T>RPlex::can_add_high() const
-{
- return 1;
-}
-
-inline int <T>RPlex::can_add_low() const
-{
- return 1;
-}
-
-inline int <T>RPlex::valid (int idx) const
-{
- return idx >= lo && idx < fnc;
-}
-
-inline int <T>RPlex::low() const
-{
- return lo;
-}
-
-inline int <T>RPlex::high() const
-{
- return fnc - 1;
-}
-
-inline void <T>RPlex::set_cache(const <T>IChunk* t) const
-{
- ((<T>RPlex*)(this))->ch = (<T>IChunk*)t;
-}
-
-inline void <T>RPlex::cache(int idx) const
-{
- if (idx < lo || idx >= fnc) index_error();
- set_cache(chunks[(idx - base) / csize]);
-}
-
-inline <T>& <T>RPlex::low_element ()
-{
- cache(lo); return *(ch->pointer_to(lo));
-}
-
-inline <T>& <T>RPlex::high_element ()
-{
- cache(fnc-1); return *(ch->pointer_to(fnc - 1));
-}
-
-inline const <T>& <T>RPlex::low_element () const
-{
- cache(lo); return *((const <T>*)(ch->pointer_to(lo)));
-}
-
-inline const <T>& <T>RPlex::high_element () const
-{
- cache(fnc-1); return *((const <T>*)(ch->pointer_to(fnc - 1)));
-}
-
-inline int <T>RPlex::Pix_to_index(Pix px) const
-{
- <T>* p = (<T>*)px;
- if (!ch->actual_pointer(p)) cache(p);
- return ch->index_of(p);
-}
-
-inline Pix <T>RPlex::index_to_Pix(int idx) const
-{
- if (!ch->actual_index(idx)) cache(idx);
- return (Pix)(ch->pointer_to(idx));
-}
-
-inline Pix <T>RPlex::first() const
-{
- return Pix(hd-><T>IChunk::first_pointer());
-}
-
-inline Pix <T>RPlex::last() const
-{
- return Pix(tl()-><T>IChunk::last_pointer());
-}
-
-inline void <T>RPlex::prev(Pix& p) const
-{
- Pix q = Pix(ch-><T>IChunk::pred((<T>*)p));
- p = (q == 0)? Pix(dopred((<T>*)p)) : q;
-}
-
-inline void <T>RPlex::next(Pix& p) const
-{
- Pix q = Pix(ch-><T>IChunk::succ((<T>*)p));
- p = (q == 0)? Pix(dosucc((<T>*)p)) : q;
-}
-
-inline <T>& <T>RPlex:: operator () (Pix p)
-{
- return *((<T>*)p);
-}
-
-
-inline <T>& <T>RPlex:: operator [] (int idx)
-{
- cache(idx); return *(ch->pointer_to(idx));
-}
-
-inline const <T>& <T>RPlex:: operator () (Pix p) const
-{
- return *((const <T>*)p);
-}
-
-inline const <T>& <T>RPlex:: operator [] (int idx) const
-{
- cache(idx); return *((const <T>*)(ch->pointer_to(idx)));
-}
-
-inline <T>RPlex::~<T>RPlex()
-{
- delete chunks;
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/gen/SLBag.ccP b/contrib/libg++/libg++/src/gen/SLBag.ccP
deleted file mode 100644
index 6b7c0faca5c8..000000000000
--- a/contrib/libg++/libg++/src/gen/SLBag.ccP
+++ /dev/null
@@ -1,105 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include "<T>.SLBag.h"
-
-int <T>SLBag::OK()
-{
- int v = p.OK();
- v &= count == p.length();
- if (!v) error("invariant failure");
- return v;
-}
-
-Pix <T>SLBag::seek(<T&> item, Pix i)
-{
- if (i == 0) i = first(); else next(i);
- for (; i != 0 && (!(<T>EQ(p(i), item))); p.next(i));
- return i;
-}
-
-int <T>SLBag::nof(<T&> item)
-{
- int n = 0;
- for (Pix p = first(); p; next(p)) if (<T>EQ((*this)(p), item)) ++n;
- return n;
-}
-
-
-void <T>SLBag::del(<T&> item)
-{
- Pix i = p.first();
- if (i == 0)
- return;
- else if (<T>EQ(p(i), item))
- {
- --count;
- p.del_front();
- }
- else
- {
- Pix trail = i;
- p.next(i);
- while (i != 0)
- {
- if (<T>EQ(p(i), item))
- {
- --count;
- p.del_after(trail);
- return;
- }
- trail = i;
- p.next(i);
- }
- }
-}
-
-void <T>SLBag::remove(<T&> item)
-{
- Pix i = p.first();
- while (i != 0 && <T>EQ(p(i), item))
- {
- --count;
- p.del_front();
- i = p.first();
- }
- if (i != 0)
- {
- Pix trail = i;
- p.next(i);
- while (i != 0)
- {
- if (<T>EQ(p(i), item))
- {
- --count;
- p.del_after(trail);
- i = trail;
- p.next(i);
- }
- else
- {
- trail = i;
- p.next(i);
- }
- }
- }
-}
-
diff --git a/contrib/libg++/libg++/src/gen/SLBag.hP b/contrib/libg++/libg++/src/gen/SLBag.hP
deleted file mode 100644
index 2bab7db64a92..000000000000
--- a/contrib/libg++/libg++/src/gen/SLBag.hP
+++ /dev/null
@@ -1,96 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#ifndef _<T>SLBag_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _<T>SLBag_h 1
-
-#include "<T>.Bag.h"
-#include "<T>.SLList.h"
-
-class <T>SLBag : public <T>Bag
-{
-protected:
- <T>SLList p;
-
-public:
- <T>SLBag();
- <T>SLBag(const <T>SLBag&);
-
- inline Pix add(<T&> item);
- void del(<T&> item);
- void remove(<T&>item);
- inline int contains(<T&> item);
- int nof(<T&> item);
-
- inline void clear();
-
- inline Pix first();
- inline void next(Pix& i);
- inline <T>& operator () (Pix i);
- inline int owns(Pix i);
- Pix seek(<T&> item, Pix from = 0);
-
- int OK();
-};
-
-
-inline <T>SLBag::<T>SLBag() : p() { count = 0; }
-
-inline <T>SLBag::<T>SLBag(const <T>SLBag& s) : p(s.p) { count = s.count; }
-
-inline Pix <T>SLBag::first()
-{
- return p.first();
-}
-
-inline void <T>SLBag::next(Pix & idx)
-{
- p.next(idx);
-}
-
-inline <T>& <T>SLBag::operator ()(Pix idx)
-{
- return p(idx);
-}
-
-inline void <T>SLBag::clear()
-{
- count = 0; p.clear();
-}
-
-inline int <T>SLBag::owns (Pix idx)
-{
- return p.owns(idx);
-}
-
-inline Pix <T>SLBag::add(<T&> item)
-{
- ++count;
- return p.append(item);
-}
-
-inline int <T>SLBag::contains(<T&> item)
-{
- return seek(item) != 0;
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/gen/SLList.ccP b/contrib/libg++/libg++/src/gen/SLList.ccP
deleted file mode 100644
index 3dbe22f3d388..000000000000
--- a/contrib/libg++/libg++/src/gen/SLList.ccP
+++ /dev/null
@@ -1,292 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-// WARNING: This file is obsolete. Use ../SLList.cc, if you can.
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <limits.h>
-#include <stream.h>
-#include <builtin.h>
-#include "<T>.SLList.h"
-
-void <T>SLList::error(const char* msg)
-{
- (*lib_error_handler)("SLList", msg);
-}
-
-int <T>SLList::length()
-{
- int l = 0;
- <T>SLListNode* t = last;
- if (t != 0) do { ++l; t = t->tl; } while (t != last);
- return l;
-}
-
-<T>SLList::<T>SLList(const <T>SLList& a)
-{
- if (a.last == 0)
- last = 0;
- else
- {
- <T>SLListNode* p = a.last->tl;
- <T>SLListNode* h = new <T>SLListNode(p->hd);
- last = h;
- for (;;)
- {
- if (p == a.last)
- {
- last->tl = h;
- return;
- }
- p = p->tl;
- <T>SLListNode* n = new <T>SLListNode(p->hd);
- last->tl = n;
- last = n;
- }
- }
-}
-
-<T>SLList& <T>SLList::operator = (const <T>SLList& a)
-{
- if (last != a.last)
- {
- clear();
- if (a.last != 0)
- {
- <T>SLListNode* p = a.last->tl;
- <T>SLListNode* h = new <T>SLListNode(p->hd);
- last = h;
- for (;;)
- {
- if (p == a.last)
- {
- last->tl = h;
- break;
- }
- p = p->tl;
- <T>SLListNode* n = new <T>SLListNode(p->hd);
- last->tl = n;
- last = n;
- }
- }
- }
- return *this;
-}
-
-void <T>SLList::clear()
-{
- if (last == 0)
- return;
-
- <T>SLListNode* p = last->tl;
- last->tl = 0;
- last = 0;
-
- while (p != 0)
- {
- <T>SLListNode* nxt = p->tl;
- delete(p);
- p = nxt;
- }
-}
-
-
-Pix <T>SLList::prepend(<T&> item)
-{
- <T>SLListNode* t = new <T>SLListNode(item);
- if (last == 0)
- t->tl = last = t;
- else
- {
- t->tl = last->tl;
- last->tl = t;
- }
- return Pix(t);
-}
-
-
-Pix <T>SLList::prepend(<T>SLListNode* t)
-{
- if (t == 0) return 0;
- if (last == 0)
- t->tl = last = t;
- else
- {
- t->tl = last->tl;
- last->tl = t;
- }
- return Pix(t);
-}
-
-
-Pix <T>SLList::append(<T&> item)
-{
- <T>SLListNode* t = new <T>SLListNode(item);
- if (last == 0)
- t->tl = last = t;
- else
- {
- t->tl = last->tl;
- last->tl = t;
- last = t;
- }
- return Pix(t);
-}
-
-Pix <T>SLList::append(<T>SLListNode* t)
-{
- if (t == 0) return 0;
- if (last == 0)
- t->tl = last = t;
- else
- {
- t->tl = last->tl;
- last->tl = t;
- last = t;
- }
- return Pix(t);
-}
-
-void <T>SLList::join(<T>SLList& b)
-{
- <T>SLListNode* t = b.last;
- b.last = 0;
- if (last == 0)
- last = t;
- else if (t != 0)
- {
- <T>SLListNode* f = last->tl;
- last->tl = t->tl;
- t->tl = f;
- last = t;
- }
-}
-
-Pix <T>SLList::ins_after(Pix p, <T&> item)
-{
- <T>SLListNode* u = (<T>SLListNode*)p;
- <T>SLListNode* t = new <T>SLListNode(item);
- if (last == 0)
- t->tl = last = t;
- else if (u == 0) // ins_after 0 means prepend
- {
- t->tl = last->tl;
- last->tl = t;
- }
- else
- {
- t->tl = u->tl;
- u->tl = t;
- if (u == last)
- last = t;
- }
- return Pix(t);
-}
-
-
-void <T>SLList::del_after(Pix p)
-{
- <T>SLListNode* u = (<T>SLListNode*)p;
- if (last == 0 || u == last) error("cannot del_after last");
- if (u == 0) u = last; // del_after 0 means delete first
- <T>SLListNode* t = u->tl;
- if (u == t)
- last = 0;
- else
- {
- u->tl = t->tl;
- if (last == t)
- last = u;
- }
- delete t;
-}
-
-int <T>SLList::owns(Pix p)
-{
- <T>SLListNode* t = last;
- if (t != 0 && p != 0)
- {
- do
- {
- if (Pix(t) == p) return 1;
- t = t->tl;
- } while (t != last);
- }
- return 0;
-}
-
-<T> <T>SLList::remove_front()
-{
- if (last == 0) error("remove_front of empty list");
- <T>SLListNode* t = last->tl;
- <T> res = t->hd;
- if (t == last)
- last = 0;
- else
- last->tl = t->tl;
- delete t;
- return res;
-}
-
-int <T>SLList::remove_front(<T>& x)
-{
- if (last == 0)
- return 0;
- else
- {
- <T>SLListNode* t = last->tl;
- x = t->hd;
- if (t == last)
- last = 0;
- else
- last->tl = t->tl;
- delete t;
- return 1;
- }
-}
-
-
-void <T>SLList::del_front()
-{
- if (last == 0) error("del_front of empty list");
- <T>SLListNode* t = last->tl;
- if (t == last)
- last = 0;
- else
- last->tl = t->tl;
- delete t;
-}
-
-int <T>SLList::OK()
-{
- int v = 1;
- if (last != 0)
- {
- <T>SLListNode* t = last;
- long count = LONG_MAX; // Lots of chances to find last!
- do
- {
- count--;
- t = t->tl;
- } while (count > 0 && t != last);
- v &= count > 0;
- }
- if (!v) error("invariant failure");
- return v;
-}
diff --git a/contrib/libg++/libg++/src/gen/SLList.hP b/contrib/libg++/libg++/src/gen/SLList.hP
deleted file mode 100644
index cd89dee33094..000000000000
--- a/contrib/libg++/libg++/src/gen/SLList.hP
+++ /dev/null
@@ -1,137 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-// WARNING: This file is obsolete. Use ../SLList.h, if you can.
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#ifndef _<T>SLList_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _<T>SLList_h 1
-
-#include <Pix.h>
-#include "<T>.defs.h"
-
-#ifndef _<T>SLListNode_h
-#define _<T>SLListNode_h 1
-
-struct <T>SLListNode
-{
- <T>SLListNode* tl;
- <T> hd;
- <T>SLListNode() { }
- <T>SLListNode(const <T&> h, <T>SLListNode* t = 0);
- ~<T>SLListNode() { }
-};
-
-
-inline <T>SLListNode::<T>SLListNode(const <T&> h, <T>SLListNode* t)
-:tl(t), hd(h) {}
-
-typedef <T>SLListNode* <T>SLListNodePtr;
-
-#endif
-
-
-class <T>SLList
-{
-protected:
- <T>SLListNode* last;
-
-public:
- <T>SLList();
- <T>SLList(const <T>SLList& a);
- ~<T>SLList();
-
- <T>SLList& operator = (const <T>SLList& a);
-
- int empty();
- int length();
-
- void clear();
-
- Pix prepend(<T&> item);
- Pix append(<T&> item);
-
- void join(<T>SLList&);
-
- Pix prepend(<T>SLListNode*);
- Pix append(<T>SLListNode*);
-
- <T>& operator () (Pix p);
- Pix first();
- void next(Pix& p);
- int owns(Pix p);
- Pix ins_after(Pix p, <T&> item);
- void del_after(Pix p);
-
- <T>& front();
- <T>& rear();
- <T> remove_front();
- int remove_front(<T>& x);
- void del_front();
-
- void error(const char* msg);
- int OK();
-};
-
-inline <T>SLList::~<T>SLList()
-{
- clear();
-}
-
-inline <T>SLList::<T>SLList()
-{
- last = 0;
-}
-
-inline int <T>SLList::empty()
-{
- return last == 0;
-}
-
-
-inline Pix <T>SLList::first()
-{
- return (last == 0)? 0 : Pix(last->tl);
-}
-
-inline void <T>SLList::next(Pix& p)
-{
- p = (p == 0 || p == last)? 0 : Pix(((<T>SLListNode*)(p))->tl);
-}
-
-inline <T>& <T>SLList::operator () (Pix p)
-{
- if (p == 0) error("null Pix");
- return ((<T>SLListNode*)(p))->hd;
-}
-
-inline <T>& <T>SLList::front()
-{
- if (last == 0) error("front: empty list");
- return last->tl->hd;
-}
-
-inline <T>& <T>SLList::rear()
-{
- if (last == 0) error("rear: empty list");
- return last->hd;
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/gen/SLQueue.ccP b/contrib/libg++/libg++/src/gen/SLQueue.ccP
deleted file mode 100644
index 8a5935b77570..000000000000
--- a/contrib/libg++/libg++/src/gen/SLQueue.ccP
+++ /dev/null
@@ -1,4 +0,0 @@
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include "<T>.SLQueue.h"
diff --git a/contrib/libg++/libg++/src/gen/SLQueue.hP b/contrib/libg++/libg++/src/gen/SLQueue.hP
deleted file mode 100644
index 84683b85a2c2..000000000000
--- a/contrib/libg++/libg++/src/gen/SLQueue.hP
+++ /dev/null
@@ -1,108 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifndef _<T>SLQueue_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _<T>SLQueue_h
-
-#include "<T>.SLList.h"
-#include "<T>.Queue.h"
-
-class <T>SLQueue : public <T>Queue
-{
- <T>SLList p;
-
-public:
- <T>SLQueue();
- <T>SLQueue(const <T>SLQueue& q);
- inline ~<T>SLQueue();
-
- void operator = (const <T>SLQueue&);
-
- inline void enq(<T&> item);
- inline <T> deq();
- inline <T>& front();
- inline void del_front();
-
- inline void clear();
- inline int empty();
- inline int full();
- inline int length();
-
- inline int OK();
-};
-
-inline <T>SLQueue::<T>SLQueue() :p() {}
-inline <T>SLQueue::<T>SLQueue(const <T>SLQueue& q) : p(q.p) {}
-
-inline <T>SLQueue::~<T>SLQueue() {}
-
-inline void <T>SLQueue::enq(<T&>item)
-{
- p.append(item);
-}
-
-inline <T> <T>SLQueue::deq()
-{
- return p.remove_front();
-}
-
-inline <T>& <T>SLQueue::front()
-{
- return p.front();
-}
-
-
-inline void <T>SLQueue::del_front()
-{
- p.del_front();
-}
-
-inline void <T>SLQueue::operator =(const <T>SLQueue& s)
-{
- p = s.p;
-}
-
-inline int <T>SLQueue::empty()
-{
- return p.empty();
-}
-
-inline int <T>SLQueue::full()
-{
- return 0;
-}
-
-inline int <T>SLQueue::length()
-{
- return p.length();
-}
-
-inline int <T>SLQueue::OK()
-{
- return p.OK();
-}
-
-inline void <T>SLQueue::clear()
-{
- p.clear();
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/gen/SLSet.ccP b/contrib/libg++/libg++/src/gen/SLSet.ccP
deleted file mode 100644
index 7d2ac58d087f..000000000000
--- a/contrib/libg++/libg++/src/gen/SLSet.ccP
+++ /dev/null
@@ -1,77 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include "<T>.SLSet.h"
-
-int <T>SLSet::OK()
-{
- int v = p.OK();
- v &= count == p.length();
- if (!v) error("invariant failure");
- return v;
-}
-
-Pix <T>SLSet::seek(<T&> item)
-{
- Pix i;
- for (i = p.first(); i != 0 && !<T>EQ(p(i),item); p.next(i));
- return i;
-}
-
-Pix <T>SLSet::add(<T&> item)
-{
- Pix i = seek(item);
- if (i == 0)
- {
- ++count;
- i = p.append(item);
- }
- return i;
-}
-
-void <T>SLSet::del(<T&> item)
-{
- Pix i = p.first();
- if (i == 0)
- return;
- else if (<T>EQ(p(i), item))
- {
- --count;
- p.del_front();
- }
- else
- {
- Pix trail = i;
- p.next(i);
- while (i != 0)
- {
- if (<T>EQ(p(i), item))
- {
- --count;
- p.del_after(trail);
- return;
- }
- trail = i;
- p.next(i);
- }
- }
-}
-
diff --git a/contrib/libg++/libg++/src/gen/SLSet.hP b/contrib/libg++/libg++/src/gen/SLSet.hP
deleted file mode 100644
index fa94bb891bac..000000000000
--- a/contrib/libg++/libg++/src/gen/SLSet.hP
+++ /dev/null
@@ -1,87 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#ifndef _<T>SLSet_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _<T>SLSet_h 1
-
-#include "<T>.Set.h"
-#include "<T>.SLList.h"
-
-class <T>SLSet : public <T>Set
-{
-protected:
- <T>SLList p;
-
-public:
- <T>SLSet();
- <T>SLSet(const <T>SLSet&);
-
- Pix add(<T&> item);
- void del(<T&> item);
- inline int contains(<T&> item);
-
- inline void clear();
-
- inline Pix first();
- inline void next(Pix& i);
- inline <T>& operator () (Pix i);
- inline int owns(Pix i);
- Pix seek(<T&> item);
-
- int OK();
-};
-
-inline <T>SLSet::<T>SLSet() : p() { count = 0; }
-
-inline <T>SLSet::<T>SLSet(const <T>SLSet& s) : p(s.p) { count = s.count; }
-
-inline Pix <T>SLSet::first()
-{
- return p.first();
-}
-
-inline void <T>SLSet::next(Pix & idx)
-{
- p.next(idx);
-}
-
-inline <T>& <T>SLSet::operator ()(Pix idx)
-{
- return p(idx);
-}
-
-inline void <T>SLSet::clear()
-{
- count = 0; p.clear();
-}
-
-inline int <T>SLSet::contains (<T&> item)
-{
- return seek(item) != 0;
-}
-
-inline int <T>SLSet::owns (Pix idx)
-{
- return p.owns(idx);
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/gen/SLStack.ccP b/contrib/libg++/libg++/src/gen/SLStack.ccP
deleted file mode 100644
index 3996b41fac55..000000000000
--- a/contrib/libg++/libg++/src/gen/SLStack.ccP
+++ /dev/null
@@ -1,4 +0,0 @@
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include "<T>.SLStack.h"
diff --git a/contrib/libg++/libg++/src/gen/SLStack.hP b/contrib/libg++/libg++/src/gen/SLStack.hP
deleted file mode 100644
index 466cfee53b49..000000000000
--- a/contrib/libg++/libg++/src/gen/SLStack.hP
+++ /dev/null
@@ -1,109 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#ifndef _<T>SLStack_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _<T>SLStack_h 1
-
-#include "<T>.SLList.h"
-#include "<T>.Stack.h"
-
-class <T>SLStack : public <T>Stack
-{
- <T>SLList p;
-
-public:
- <T>SLStack();
- <T>SLStack(const <T>SLStack& s);
- inline ~<T>SLStack();
-
- void operator = (const <T>SLStack&);
-
- inline void push(<T&> item);
- inline <T> pop();
- inline <T>& top();
- inline void del_top();
-
- inline int empty();
- inline int full();
- inline int length();
-
- inline void clear();
-
- inline int OK();
-
-};
-
-inline <T>SLStack::<T>SLStack() :p() {}
-inline <T>SLStack::<T>SLStack(const <T>SLStack& a) : p(a.p) {}
-inline <T>SLStack::~<T>SLStack() {}
-
-inline void <T>SLStack::push(<T&> item)
-{
- p.prepend(item);
-}
-
-inline <T> <T>SLStack::pop()
-{
- return p.remove_front();
-}
-
-inline <T>& <T>SLStack::top()
-{
- return p.front();
-}
-
-inline void <T>SLStack::del_top()
-{
- p.del_front();
-}
-
-inline void <T>SLStack::operator =(const <T>SLStack& s)
-{
- p = s.p;
-}
-
-inline int <T>SLStack::empty()
-{
- return p.empty();
-}
-
-inline int <T>SLStack::full()
-{
- return 0;
-}
-
-inline int <T>SLStack::length()
-{
- return p.length();
-}
-
-inline int <T>SLStack::OK()
-{
- return p.OK();
-}
-
-inline void <T>SLStack::clear()
-{
- p.clear();
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/gen/Set.ccP b/contrib/libg++/libg++/src/gen/Set.ccP
deleted file mode 100644
index b072339158de..000000000000
--- a/contrib/libg++/libg++/src/gen/Set.ccP
+++ /dev/null
@@ -1,117 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <builtin.h>
-#include "<T>.Set.h"
-
-
-Pix <T>Set::seek(<T&> item)
-{
- Pix i;
- for (i = first(); i != 0 && !(<T>EQ((*this)(i), item)); next(i));
- return i;
-}
-
-int <T>Set::owns(Pix idx)
-{
- if (idx == 0) return 0;
- for (Pix i = first(); i; next(i)) if (i == idx) return 1;
- return 0;
-}
-
-void <T>Set::clear()
-{
- Pix i = first();
- while (i != 0)
- {
- del((*this)(i));
- i = first();
- }
-}
-
-int <T>Set::contains (<T&> item)
-{
- return seek(item) != 0;
-}
-
-int <T>Set::operator <= (<T>Set& b)
-{
- if (count > b.count) return 0;
- if (count == 0) return 1;
- for (Pix i = first(); i; next(i)) if (b.seek((*this)(i)) == 0) return 0;
- return 1;
-}
-
-int <T>Set::operator == (<T>Set& b)
-{
- int n = count;
- if (n != b.count) return 0;
- if (n == 0) return 1;
- Pix i = first();
- Pix j = b.first();
- while (n-- > 0)
- {
- if ((b.seek((*this)(i)) == 0) || (seek(b(j)) == 0)) return 0;
- next(i);
- b.next(j);
- }
- return 1;
-}
-
-int <T>Set::operator != (<T>Set& b)
-{
- return !(*this == b);
-}
-
-void <T>Set::operator |= (<T>Set& b)
-{
- if (&b != this)
- for (Pix i = b.first(); i; b.next(i)) add(b(i));
-}
-
-void <T>Set::operator -= (<T>Set& b)
-{
- if (&b == this)
- clear();
- else
- for (Pix i = b.first(); i; b.next(i)) del(b(i));
-}
-
-
-void <T>Set::operator &= (<T>Set& b)
-{
- if (&b != this)
- {
- Pix i = first();
- Pix n = i;
- while (i != 0)
- {
- next(n);
- if (b.seek((*this)(i)) == 0) del((*this)(i));
- i = n;
- }
- }
-}
-
-void <T>Set::error(const char* msg)
-{
- (*lib_error_handler)("Set", msg);
-}
diff --git a/contrib/libg++/libg++/src/gen/Set.hP b/contrib/libg++/libg++/src/gen/Set.hP
deleted file mode 100644
index 8dd99e574ca6..000000000000
--- a/contrib/libg++/libg++/src/gen/Set.hP
+++ /dev/null
@@ -1,78 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#ifndef _<T>Set_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _<T>Set_h 1
-
-#include <Pix.h>
-#include "<T>.defs.h"
-
-class <T>Set
-{
-protected:
-
- int count;
-
-public:
- inline virtual ~<T>Set();
-
- int length(); // current number of items
- int empty();
-
- virtual Pix add(<T&> item) = 0; // add item; return Pix
- virtual void del(<T&> item) = 0; // delete item
- virtual int contains(<T&> item); // is item in set?
-
- virtual void clear(); // delete all items
-
- virtual Pix first() = 0; // Pix of first item or 0
- virtual void next(Pix& i) = 0; // advance to next or 0
- virtual <T>& operator () (Pix i) = 0; // access item at i
-
- virtual int owns(Pix i); // is i a valid Pix ?
- virtual Pix seek(<T&> item); // Pix of item
-
- void operator |= (<T>Set& b); // add all items in b
- void operator -= (<T>Set& b); // delete items also in b
- void operator &= (<T>Set& b); // delete items not in b
-
- int operator == (<T>Set& b);
- int operator != (<T>Set& b);
- int operator <= (<T>Set& b);
-
- void error(const char* msg);
- virtual int OK() = 0; // rep invariant
-};
-
-inline <T>Set::~<T>Set() {}
-
-inline int <T>Set::length()
-{
- return count;
-}
-
-inline int <T>Set::empty()
-{
- return count == 0;
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/gen/SkipBag.ccP b/contrib/libg++/libg++/src/gen/SkipBag.ccP
deleted file mode 100644
index 9711d85c0951..000000000000
--- a/contrib/libg++/libg++/src/gen/SkipBag.ccP
+++ /dev/null
@@ -1,322 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-
-/*
-Copyright (C) 1991 Free Software Foundation
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/*
- * Bags implemented via William Pugh SkipList algorithms.
- * CACM, June 1990, p 668-676.
- *
- */
-
-#include <stream.h>
-#include <time.h>
-#include "<T>.SkipBag.h"
-
-MLCG* <T>SkipBag::gen = 0;
-int <T>SkipBaginit::count = 0;
-
-static int countbits(long bits)
-{
- int n = 0;
- while(bits>>=1L) n++;
- return n;
-}
-
-<T>SkipBag::<T>SkipBag(long size)
-: level(0),
- header(new <T>SkipBagNode (countbits(size)+1)),
- max_levels (countbits(size)+1),
- random_bits(gen->asLong()),
- randoms_left(BITS_IN_RANDOM / 2)
-{
- <T>SkipBagNodePtr *buffer_start = header->forward;
- <T>SkipBagNodePtr *trav = &header->forward[max_levels];
-
- count = 0;
- while (trav > buffer_start)
- *--trav = (<T>SkipBagNodePtr) header;
-}
-
-<T>SkipBag::<T>SkipBag(<T>SkipBag& b)
-: level (0),
- header (new <T>SkipBagNode (b.max_levels)),
- max_levels (b.max_levels),
- random_bits (gen->asLong()),
- randoms_left (BITS_IN_RANDOM / 2)
-{
- <T>SkipBagNodePtr *buffer_start = header->forward;
- <T>SkipBagNodePtr *trav = &header->forward[max_levels];
-
- count = 0;
-
- while (trav > buffer_start)
- *--trav = (<T>SkipBagNodePtr)header;
-
- for (<T>SkipBagNodePtr t = b.leftmost(); t; t = b.succ(t))
- add(t->item);
-}
-
-Pix <T>SkipBag::add (<T&> item)
-{
- <T>SkipBagNodePtr *update = new <T>SkipBagNodePtr[max_levels+1];
- <T>SkipBagNodePtr curr = (<T>SkipBagNodePtr) this->header;
- int l = level;
- <T>SkipBagNodePtr temp;
-
- do
- {
- while ((temp = curr->forward[l])!=header &&
- <T>CMP(temp->item, item) < 0)
- curr = temp;
- update[l] = curr;
- }
- while (--l >= 0);
-
- if ((l = random_level ()) > level)
- {
- l = ++level;
- update[l] = (<T>SkipBagNodePtr)header;
- };
-
- temp = new <T>RealSkipBagNode (item, l);
- <T>SkipBagNodePtr *temp_forward = temp->forward;
-
- do
- {
- <T>SkipBagNodePtr *curr_forward = update[l]->forward;
-
- temp_forward[l] = curr_forward[l];
- curr_forward[l] = temp;
- }
- while (--l >= 0);
-
- count++;
- delete update;
- return Pix(temp);
-}
-
-void <T>SkipBag::del(<T&> key)
-{
-
- int l = level;
- int curr_level = level;
- <T>SkipBagNodePtr *update = new <T>SkipBagNodePtr[max_levels+1];
- <T>SkipBagNodePtr curr = (<T>SkipBagNodePtr)header;
- <T>SkipBagNodePtr temp;
-
- do
- {
- while ((temp = curr->forward[l])!=header
- && <T>CMP(temp->item,key) < 0)
- curr = temp;
- update[l] = curr;
- }
- while (--l >= 0);
-
- if (<T>CMP(temp->item,key)==0)
- {
- <T>SkipBagNodePtr *temp_forward = temp->forward;
-
- for (l = 0;
- l <= curr_level && (curr = update[l])->forward[l] == temp;
- l++)
- curr->forward[l] = temp_forward[l];
-
- delete temp;
-
- <T>SkipBagNodePtr *forward = header->forward;
-
- while (forward[curr_level]==header && curr_level > 0)
- curr_level--;
-
- level = curr_level;
- count--;
- delete update;
- return;
- }
-}
-
-<T>SkipBagNodePtr <T>SkipBag::rightmost()
-{
- <T>SkipBagNodePtr temp;
- <T>SkipBagNode* curr = header;
- int l = level;
-
- do
- while ((temp = curr->forward[l])!=header)
- curr = temp;
- while (--l >= 0);
-
- return temp==header ? 0 : temp;
-}
-
-<T>SkipBagNodePtr <T>SkipBag::pred(<T>SkipBagNodePtr t)
-{
- <T>SkipBagNodePtr temp, curr = (<T>SkipBagNodePtr) header;
- int l = level;
-
- do
- while ((temp = curr->forward[l])!=t)
- curr = temp;
- while (--l >= 0);
-
- return curr == header ? 0 : curr;
-}
-
-void <T>SkipBag::_kill()
-{
- <T>SkipBagNode *p = this->header->forward[0];
-
- while (p != header)
- {
- <T>SkipBagNodePtr q = p->forward[0];
- delete p;
- p = q;
- }
-}
-
-void <T>SkipBag::clear()
-{
- <T>SkipBagNodePtr *buffer_start = header->forward;
- <T>SkipBagNodePtr *trav = &header->forward[level+1];
- _kill();
- count = 0;
-
- while (trav > buffer_start)
- *--trav = (<T>SkipBagNodePtr)header;
-}
-
-Pix <T>SkipBag::seek(<T&> key, Pix i)
-{
- <T>SkipBagNodePtr temp;
- <T>SkipBagNode *curr = header;
- int l = level;
- if (i)
- curr = (<T>SkipBagNode *)i;
-
- do
- {
- while ((temp = curr->forward[l])!=header &&
- <T>CMP(temp->item, key) < 0)
- curr = temp;
- }
- while (--l >= 0);
-
- if (<T>CMP(temp->item, key) != 0)
- return 0;
- else
- {
- return Pix(temp);
- }
-}
-
-
-int <T>SkipBag::nof(<T&> item)
-{
- int n = 0;
- <T>SkipBagNodePtr t = (<T>SkipBagNodePtr)(seek(item));
- if (t != 0)
- {
- do
- {
- ++n;
- t = succ(t);
- } while (t != 0 && <T>EQ(item, t->item));
- }
- return n;
-}
-
-void <T>SkipBag::remove(<T&> key)
-{
- Pix t = seek(key);
- while (t != 0)
- {
- del(key);
- t = seek(key);
- }
-}
-
-
-/*
- * random function for probabilistic balancing
- *
- * Hardwired for p = .25. Not too flexible,
- * but fast. Changing this would require a constructor
- * that would accept a different value for p, etc.
- * Perhaps someone else would like to implement this?
- *
- */
-int <T>SkipBag::random_level (void)
-{
- int rlevel = 0;
- int b;
-
- do
- {
- b = random_bits & 3L;
- if (!b)
- rlevel++;
- random_bits >>= 2;
- if (--randoms_left == 0)
- {
- random_bits = gen->asLong();
- randoms_left = BITS_IN_RANDOM / 2;
- };
- }
- while (!b);
-
- return rlevel > max_levels ? max_levels : rlevel;
-}
-
-int <T>SkipBag::OK()
-{
- int v = 1;
- if (header == 0)
- v = 0;
- else
- {
- int n = 0;
- <T>SkipBagNodePtr trail = leftmost();
- <T>SkipBagNodePtr t = 0;
- if (trail) t = succ(trail);
- if (t) n++;
- while (t != 0)
- {
- ++n;
- v &= <T>CMP(trail->item, t->item) < 0;
- trail = t;
- t = succ(t);
- }
- v &= n == count;
- }
- if (!v) error("invariant failure");
- return v;
-}
-
-<T>SkipBaginit::<T>SkipBaginit()
-{
- if (!count)
- <T>SkipBag::gen = new MLCG(time(0));
- count++;
-}
-
-<T>SkipBaginit::~<T>SkipBaginit()
-{
- count--;
- if (!count)
- delete <T>SkipBag::gen;
-}
diff --git a/contrib/libg++/libg++/src/gen/SkipBag.hP b/contrib/libg++/libg++/src/gen/SkipBag.hP
deleted file mode 100644
index 647711de3730..000000000000
--- a/contrib/libg++/libg++/src/gen/SkipBag.hP
+++ /dev/null
@@ -1,171 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1991 Free Software Foundation
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/*
- * Bags implemented via William Pugh SkipList algorithms.
- * CACM, June 1990, p 668-676.
- *
- */
-
-#ifndef _<T>SkipBag_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _<T>SkipBag_h 1
-
-#include "<T>.Bag.h"
-
-#include <limits.h>
-#include <MLCG.h>
-
-class <T>SkipBag;
-class <T>RealSkipBagNode;
-
-class <T>SkipBagNode
-{
-friend class <T>SkipBag;
- private:
- <T>RealSkipBagNode * * forward;
- <T>SkipBagNode(int size);
-};
-
-class <T>RealSkipBagNode : public <T>SkipBagNode
-{
-friend class <T>SkipBag;
- private:
- <T> item;
- <T>RealSkipBagNode(<T&> h, int size);
-};
-
-typedef <T>RealSkipBagNode* <T>SkipBagNodePtr;
-
-inline <T>SkipBagNode::<T>SkipBagNode(int size)
-: forward(new <T>SkipBagNodePtr[size+1])
-{
-}
-
-inline <T>RealSkipBagNode::<T>RealSkipBagNode(<T&> h, int size)
-: item(h),
- <T>SkipBagNode(size)
-{
-}
-
-class <T>SkipBag : public <T>Bag
-{
-friend class <T>SkipBaginit;
- protected:
- <T>SkipBagNode* header;
- int level;
- int max_levels;
- int randoms_left;
- long random_bits;
-
- static MLCG* gen;
- int random_level(void);
-
- <T>SkipBagNodePtr leftmost(void);
- <T>SkipBagNodePtr rightmost(void);
- <T>SkipBagNodePtr pred(<T>SkipBagNodePtr t);
- <T>SkipBagNodePtr succ(<T>SkipBagNodePtr t);
- void _kill(void);
-
- private:
- enum { BITS_IN_RANDOM = LONGBITS-1 };
-
- public:
- <T>SkipBag(long size=DEFAULT_INITIAL_CAPACITY);
- <T>SkipBag(<T>SkipBag& a);
- ~<T>SkipBag(void);
-
- Pix add(<T&> i);
- void del(<T&> i);
- void remove(<T&>i);
- int nof(<T&> i);
- int contains(<T&> i);
-
- void clear(void);
-
- Pix first(void);
- void next(Pix& i);
- <T>& operator () (Pix i);
- Pix seek(<T&> i, Pix from = 0);
-
- Pix last(void);
- void prev(Pix& i);
-
- int OK(void);
-};
-
-inline <T>SkipBagNodePtr <T>SkipBag::leftmost(void)
-{
- return header->forward[0];
-}
-
-inline <T>SkipBagNodePtr <T>SkipBag::succ(<T>SkipBagNodePtr t)
-{
- <T>SkipBagNodePtr result = 0;
- if (t->forward[0]!=header) result = t->forward[0];
- return result;
-}
-
-inline Pix <T>SkipBag::first(void)
-{
- return Pix(leftmost());
-}
-
-inline Pix <T>SkipBag::last(void)
-{
- return Pix(rightmost());
-}
-
-inline void <T>SkipBag::next(Pix& i)
-{
- if (i != 0) i = Pix(succ((<T>SkipBagNodePtr)i));
-}
-
-inline <T>& <T>SkipBag::operator () (Pix i)
-{
- if (i == 0) error("null Pix");
- return ((<T>SkipBagNodePtr)i)->item;
-}
-
-inline void <T>SkipBag::prev(Pix& i)
-{
- if (i != 0) i = Pix(pred((<T>SkipBagNodePtr)i));
-}
-
-inline int <T>SkipBag::contains(<T&> key)
-{
- return seek(key) != 0;
-}
-
-inline <T>SkipBag::~<T>SkipBag()
-{
- _kill();
- delete header;
-}
-
-static class <T>SkipBaginit
-{
- public:
- <T>SkipBaginit();
- ~<T>SkipBaginit();
- private:
- static int count;
-} <T>skipBaginit;
-
-#endif
diff --git a/contrib/libg++/libg++/src/gen/SkipMap.ccP b/contrib/libg++/libg++/src/gen/SkipMap.ccP
deleted file mode 100644
index 1d86ad4e3034..000000000000
--- a/contrib/libg++/libg++/src/gen/SkipMap.ccP
+++ /dev/null
@@ -1,307 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1991 Free Software Foundation
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-
-#include <stream.h>
-#include <time.h>
-#include "<T>.<C>.SkipMap.h"
-
-/*
- * Bags implemented via William Pugh SkipList algorithms.
- * CACM, June 1990, p 668-676.
- *
- */
-
-MLCG* <T><C>SkipMap::gen = 0;
-int <T><C>SkipMapinit::count = 0;
-
-static int countbits(long bits)
-{
- int n = 0;
- while(bits>>=1) n++;
- return n;
-}
-
-<T><C>SkipMap::<T><C>SkipMap(<C&> dflt, long size)
-: <T><C>Map(dflt),
- level(0),
- header(new <T><C>SkipMapNode (countbits(size)+1)),
- max_levels (countbits(size)+1),
- random_bits(gen->asLong()),
- randoms_left(BITS_IN_RANDOM / 2)
-{
- <T><C>SkipMapNodePtr *buffer_start = header->forward;
- <T><C>SkipMapNodePtr *trav = &header->forward[max_levels];
-
- count = 0;
- while (trav > buffer_start)
- *--trav = (<T><C>SkipMapNodePtr) header;
-}
-
-<T><C>SkipMap::<T><C>SkipMap(<T><C>SkipMap& b)
-: <T><C>Map(b.def),
- level (0),
- header (new <T><C>SkipMapNode (b.max_levels)),
- max_levels (b.max_levels),
- random_bits (gen->asLong()),
- randoms_left (BITS_IN_RANDOM / 2)
-{
- <T><C>SkipMapNodePtr *buffer_start = header->forward;
- <T><C>SkipMapNodePtr *trav = &header->forward[max_levels];
-
- count = 0;
-
- while (trav > buffer_start)
- *--trav = (<T><C>SkipMapNodePtr)header;
-
- for (<T><C>SkipMapNodePtr t = b.leftmost(); t; t = b.succ(t))
- (*this)[t->item] = t->cont;
-}
-
-<C>& <T><C>SkipMap::operator [] (<T&> item)
-{
- <T><C>SkipMapNodePtr *update = new <T><C>SkipMapNodePtr[max_levels+1];
- <T><C>SkipMapNodePtr curr =
- (<T><C>SkipMapNodePtr) this->header;
- int l = level;
- <T><C>SkipMapNodePtr temp;
-
- do
- {
- while ((temp = curr->forward[l])!=header &&
- <T>CMP(temp->item, item) < 0)
- curr = temp;
- update[l] = curr;
- }
- while (--l >= 0);
-
- if (temp != header && <T>CMP(temp->item, item) == 0)
- {
- delete update;
- return temp->cont;
- }
-
- if ((l = random_level ()) > level)
- {
- l = ++level;
- update[l] = (<T><C>SkipMapNodePtr)header;
- };
-
- temp = new <T><C>RealSkipMapNode (item, def, l);
- <T><C>SkipMapNodePtr *temp_forward = temp->forward;
-
- do
- {
- <T><C>SkipMapNodePtr *curr_forward = update[l]->forward;
-
- temp_forward[l] = curr_forward[l];
- curr_forward[l] = temp;
- }
- while (--l >= 0);
-
- count++;
- delete update;
- return temp->cont;
-}
-
-void <T><C>SkipMap::del(<T&> key)
-{
-
- int l = level;
- int curr_level = level;
- <T><C>SkipMapNodePtr *update = new <T><C>SkipMapNodePtr[max_levels+1];
- <T><C>SkipMapNodePtr curr = (<T><C>SkipMapNodePtr)header;
- <T><C>SkipMapNodePtr temp;
-
- do
- {
- while ((temp = curr->forward[l])!=header
- && <T>CMP(temp->item,key) < 0)
- curr = temp;
- update[l] = curr;
- }
- while (--l >= 0);
-
- if (<T>CMP(temp->item,key)==0)
- {
- <T><C>SkipMapNodePtr *temp_forward = temp->forward;
-
- for (l = 0;
- l <= curr_level && (curr = update[l])->forward[l] == temp;
- l++)
- curr->forward[l] = temp_forward[l];
-
- delete temp;
-
- <T><C>SkipMapNodePtr *forward = header->forward;
-
- while (forward[curr_level]==header && curr_level > 0)
- curr_level--;
-
- level = curr_level;
- count--;
- delete update;
- return;
- }
-}
-
-<T><C>SkipMapNodePtr <T><C>SkipMap::rightmost()
-{
- <T><C>SkipMapNodePtr temp;
- <T><C>SkipMapNode* curr = header;
- int l = level;
-
- do
- while ((temp = curr->forward[l])!=header)
- curr = temp;
- while (--l >= 0);
-
- return temp==header ? 0 : temp;
-}
-
-<T><C>SkipMapNodePtr <T><C>SkipMap::pred(<T><C>SkipMapNodePtr t)
-{
- <T><C>SkipMapNodePtr temp, curr = (<T><C>SkipMapNodePtr) header;
- int l = level;
-
- do
- while ((temp = curr->forward[l])!=t)
- curr = temp;
- while (--l >= 0);
-
- return curr == header ? 0 : curr;
-}
-
-void <T><C>SkipMap::_kill()
-{
- <T><C>SkipMapNode *p = this->header->forward[0];
-
- while (p != header)
- {
- <T><C>SkipMapNodePtr q = p->forward[0];
- delete p;
- p = q;
- }
-}
-
-void <T><C>SkipMap::clear()
-{
- <T><C>SkipMapNodePtr *buffer_start = header->forward;
- <T><C>SkipMapNodePtr *trav = &header->forward[level+1];
- _kill();
- count = 0;
-
- while (trav > buffer_start)
- *--trav = (<T><C>SkipMapNodePtr)header;
-}
-
-Pix <T><C>SkipMap::seek(<T&> key)
-{
- <T><C>SkipMapNodePtr temp;
- <T><C>SkipMapNode *curr = header;
- int l = level;
-
- do
- {
- while ((temp = curr->forward[l])!=header &&
- <T>CMP(temp->item, key) < 0)
- curr = temp;
- }
- while (--l >= 0);
-
- if (<T>CMP(temp->item, key) != 0)
- return 0;
- else
- {
- return Pix(temp);
- }
-}
-
-/*
- * random function for probabilistic balancing
- *
- * Hardwired for p = .25. Not too flexible,
- * but fast. Changing this would require a constructor
- * that would accept a different value for p, etc.
- * Perhaps someone else would like to implement this?
- *
- */
-int <T><C>SkipMap::random_level (void)
-{
- int rlevel = 0;
- int b;
-
- do
- {
- b = random_bits & 3L;
- if (!b)
- rlevel++;
- random_bits >>= 2;
- if (--randoms_left == 0)
- {
- random_bits = gen->asLong();
- randoms_left = BITS_IN_RANDOM / 2;
- };
- }
- while (!b);
-
- return rlevel > max_levels ? max_levels : rlevel;
-}
-
-int <T><C>SkipMap::OK()
-{
- int v = 1;
- if (header == 0)
- v = 0;
- else
- {
- int n = 0;
- <T><C>SkipMapNodePtr trail = leftmost();
- <T><C>SkipMapNodePtr t = 0;
- if (trail) t = succ(trail);
- if (t) n++;
- while (t != 0)
- {
- ++n;
- v &= <T>CMP(trail->item, t->item) < 0;
- trail = t;
- t = succ(t);
- }
- v &= n == count;
- }
- if (!v) error("invariant failure");
- return v;
-}
-
-<T><C>SkipMapinit::<T><C>SkipMapinit()
-{
- if (!count)
- <T><C>SkipMap::gen = new MLCG(time(0));
- count++;
-}
-
-<T><C>SkipMapinit::~<T><C>SkipMapinit()
-{
- count--;
- if (!count)
- delete <T><C>SkipMap::gen;
-}
-
-
diff --git a/contrib/libg++/libg++/src/gen/SkipMap.hP b/contrib/libg++/libg++/src/gen/SkipMap.hP
deleted file mode 100644
index 8b48cf9da851..000000000000
--- a/contrib/libg++/libg++/src/gen/SkipMap.hP
+++ /dev/null
@@ -1,176 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1991 Free Software Foundation
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/*
- * Bags implemented via William Pugh SkipList algorithms.
- * CACM, June 1990, p 668-676.
- *
- */
-
-#ifndef _<T><C>SkipMap_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _<T><C>SkipMap_h 1
-
-#include "<T>.<C>.Map.h"
-
-#include <limits.h>
-#include <MLCG.h>
-
-class <T><C>SkipMap;
-class <T><C>RealSkipMapNode;
-
-class <T><C>SkipMapNode
-{
-friend class <T><C>SkipMap;
- private:
- <T><C>RealSkipMapNode * * forward;
- protected:
- <T><C>SkipMapNode(int size);
-};
-
-class <T><C>RealSkipMapNode : public <T><C>SkipMapNode
-{
-friend class <T><C>SkipMap;
- private:
- <T> item;
- <C> cont;
- <T><C>RealSkipMapNode(<T&> h, <C&> i, int size);
-};
-
-typedef <T><C>RealSkipMapNode* <T><C>SkipMapNodePtr;
-
-inline <T><C>SkipMapNode::<T><C>SkipMapNode(int size)
-: forward(new <T><C>SkipMapNodePtr[size+1])
-{
-}
-
-inline <T><C>RealSkipMapNode::<T><C>RealSkipMapNode(<T&> h, <C&> i, int size)
-: item(h), cont(i),
- <T><C>SkipMapNode(size)
-{
-}
-
-class <T><C>SkipMap : public <T><C>Map
-{
-friend class <T><C>SkipMapinit;
- protected:
- <T><C>SkipMapNode* header;
- int level;
- int max_levels;
- int randoms_left;
- long random_bits;
-
- static MLCG* gen;
- int random_level(void);
-
- <T><C>SkipMapNodePtr leftmost();
- <T><C>SkipMapNodePtr rightmost();
- <T><C>SkipMapNodePtr pred(<T><C>SkipMapNodePtr t);
- <T><C>SkipMapNodePtr succ(<T><C>SkipMapNodePtr t);
- void _kill();
- private:
- enum { BITS_IN_RANDOM = LONGBITS-1 };
-
- public:
- <T><C>SkipMap( <C&> dflt, long size=DEFAULT_INITIAL_CAPACITY);
- <T><C>SkipMap(<T><C>SkipMap& a);
- ~<T><C>SkipMap();
-
- <C>& operator [] (<T&> key);
-
- void del(<T&> key);
-
- Pix first();
- void next(Pix& i);
- <T>& key(Pix i);
- <C>& contents(Pix i);
-
- Pix seek(<T&> key);
- int contains(<T&> key);
- void clear();
-
- Pix last();
- void prev(Pix& i);
-
- int OK();
-};
-
-inline <T><C>SkipMap::~<T><C>SkipMap()
-{
- _kill();
- delete header;
-}
-
-inline <T><C>SkipMapNodePtr <T><C>SkipMap::leftmost()
-{
- return header->forward[0]==header ? 0 : header->forward[0];
-}
-
-inline Pix <T><C>SkipMap::first()
-{
- return Pix(leftmost());
-}
-
-inline Pix <T><C>SkipMap::last()
-{
- return Pix(rightmost());
-}
-
-inline <T><C>SkipMapNodePtr <T><C>SkipMap::succ(<T><C>SkipMapNodePtr t)
-{
- return t->forward[0]==header ? 0 : t->forward[0];
-}
-
-inline void <T><C>SkipMap::next(Pix& i)
-{
- if (i != 0) i = Pix(succ((<T><C>SkipMapNodePtr)i));
-}
-
-inline void <T><C>SkipMap::prev(Pix& i)
-{
- if (i != 0) i = Pix(pred((<T><C>SkipMapNodePtr)i));
-}
-
-inline <T>& <T><C>SkipMap::key (Pix i)
-{
- if (i == 0) error("null Pix");
- return ((<T><C>SkipMapNodePtr)i)->item;
-}
-
-inline <C>& <T><C>SkipMap::contents (Pix i)
-{
- if (i == 0) error("null Pix");
- return ((<T><C>SkipMapNodePtr)i)->cont;
-}
-
-inline int <T><C>SkipMap::contains(<T&> key)
-{
- return seek(key) != 0;
-}
-
-static class <T><C>SkipMapinit
-{
- public:
- <T><C>SkipMapinit();
- ~<T><C>SkipMapinit();
- private:
- static int count;
-} <T><C>skipMapinit;
-
-#endif
diff --git a/contrib/libg++/libg++/src/gen/SkipSet.ccP b/contrib/libg++/libg++/src/gen/SkipSet.ccP
deleted file mode 100644
index 97525be8830d..000000000000
--- a/contrib/libg++/libg++/src/gen/SkipSet.ccP
+++ /dev/null
@@ -1,395 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1991 Free Software Foundation
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/*
- * Sets implemented via William Pugh SkipList algorithms.
- * CACM, June 1990, p 668-676.
- *
- */
-
-#include <stream.h>
-#include <time.h>
-
-#include "<T>.SkipSet.h"
-
-MLCG* <T>SkipSet::gen = 0;
-int <T>SkipSetinit::count = 0;
-
-static int countbits(long bits)
-{
- int n = 0;
- while(bits>>=1L) n++;
- return n;
-}
-
-<T>SkipSet::<T>SkipSet(long size)
-: level(0),
- header(new <T>SkipSetNode (countbits(size)+1)),
- max_levels (countbits(size)+1),
- random_bits(gen->asLong()),
- randoms_left(BITS_IN_RANDOM / 2)
-{
- <T>SkipSetNodePtr *buffer_start = header->forward;
- <T>SkipSetNodePtr *trav = &header->forward[max_levels];
-
- count = 0;
- while (trav > buffer_start)
- *--trav = (<T>SkipSetNodePtr) header;
-}
-
-<T>SkipSet::<T>SkipSet(<T>SkipSet& b)
-: level (0),
- header (new <T>SkipSetNode (b.max_levels)),
- max_levels (b.max_levels),
- random_bits (gen->asLong()),
- randoms_left (BITS_IN_RANDOM / 2)
-{
- <T>SkipSetNodePtr *buffer_start = header->forward;
- <T>SkipSetNodePtr *trav = &header->forward[max_levels];
-
- count = 0;
-
- while (trav > buffer_start)
- *--trav = (<T>SkipSetNodePtr)header;
-
- for (<T>SkipSetNodePtr t = b.leftmost(); t; t = b.succ(t))
- add(t->item);
-}
-
-/* relationals */
-
-int <T>SkipSet::operator == (<T>SkipSet& y)
-{
- if (count != y.count)
- return 0;
- else
- {
- <T>SkipSetNodePtr t = leftmost();
- <T>SkipSetNodePtr u = y.leftmost();
- for (;;)
- {
- if (t == 0)
- return 1;
- else if (!<T>EQ(t->item, u->item))
- return 0;
- else
- {
- t = succ(t);
- u = y.succ(u);
- }
- }
- }
-}
-
-int <T>SkipSet::operator <= (<T>SkipSet& y)
-{
- if (count > y.count)
- return 0;
- else
- {
- <T>SkipSetNodePtr t = leftmost();
- <T>SkipSetNodePtr u = y.leftmost();
- for (;;)
- {
- if (t == 0)
- return 1;
- else if (u == 0)
- return 0;
- int cmp = <T>CMP(t->item, u->item);
- if (cmp == 0)
- {
- t = succ(t);
- u = y.succ(u);
- }
- else if (cmp < 0)
- return 0;
- else
- u = y.succ(u);
- }
- }
-}
-
-
-void <T>SkipSet::operator |=(<T>SkipSet& y)
-{
- if (&y == this) return;
- <T>SkipSetNodePtr u = y.leftmost();
- while (u != 0)
- {
- add(u->item);
- u = y.succ(u);
- }
-}
-
-void <T>SkipSet::operator &= (<T>SkipSet& y)
-{
- if (y.count == 0)
- clear();
- else if (&y != this && count != 0)
- {
- <T>SkipSetNodePtr t = leftmost();
- while (t != 0)
- {
- <T>SkipSetNodePtr s = succ(t);
- if (y.seek(t->item) == 0) del(t->item);
- t = s;
- }
- }
-}
-
-
-void <T>SkipSet::operator -=(<T>SkipSet& y)
-{
- if (&y == this)
- clear();
- else if (y.count != 0)
- {
- <T>SkipSetNodePtr t = leftmost();
- while (t != 0)
- {
- <T>SkipSetNodePtr s = succ(t);
- if (y.seek(t->item) != 0) del(t->item);
- t = s;
- }
- }
-}
-
-Pix <T>SkipSet::add (<T&> i)
-{
- <T>SkipSetNodePtr *update = new <T>SkipSetNodePtr[max_levels+1];
- <T>SkipSetNodePtr curr = (<T>SkipSetNodePtr) this->header;
- int l = level;
- <T>SkipSetNodePtr temp;
-
- do
- {
- while ((temp = curr->forward[l])!=header &&
- <T>CMP(temp->item, i) < 0)
- curr = temp;
- update[l] = curr;
- }
- while (--l >= 0);
-
- if (temp != header && <T>CMP(temp->item, i) == 0)
- return Pix(temp);
-
- if ((l = random_level ()) > level)
- {
- l = ++level;
- update[l] = (<T>SkipSetNodePtr)header;
- };
-
- temp = new <T>RealSkipSetNode (i, l);
- <T>SkipSetNodePtr *temp_forward = temp->forward;
-
- do
- {
- <T>SkipSetNodePtr *curr_forward = update[l]->forward;
-
- temp_forward[l] = curr_forward[l];
- curr_forward[l] = temp;
- }
- while (--l >= 0);
-
- count++;
- delete update;
- return Pix(temp);
-}
-
-void <T>SkipSet::del(<T&> key)
-{
-
- int l = level;
- int curr_level = level;
- <T>SkipSetNodePtr *update = new <T>SkipSetNodePtr[max_levels+1];
- <T>SkipSetNodePtr curr = (<T>SkipSetNodePtr)header;
- <T>SkipSetNodePtr temp;
-
- do
- {
- while ((temp = curr->forward[l])!=header
- && <T>CMP(temp->item,key) < 0)
- curr = temp;
- update[l] = curr;
- }
- while (--l >= 0);
-
- if (<T>CMP(temp->item,key)==0)
- {
- <T>SkipSetNodePtr *temp_forward = temp->forward;
-
- for (l = 0;
- l <= curr_level && (curr = update[l])->forward[l] == temp;
- l++)
- curr->forward[l] = temp_forward[l];
-
- delete temp;
-
- <T>SkipSetNodePtr *forward = header->forward;
-
- while (forward[curr_level]==header && curr_level > 0)
- curr_level--;
-
- level = curr_level;
- count--;
- delete update;
- return;
- }
-}
-
-<T>SkipSetNodePtr <T>SkipSet::rightmost()
-{
- <T>SkipSetNodePtr temp;
- <T>SkipSetNode* curr = header;
- int l = level;
-
- do
- while ((temp = curr->forward[l])!=header)
- curr = temp;
- while (--l >= 0);
-
- return temp==header ? 0 : temp;
-}
-
-<T>SkipSetNodePtr <T>SkipSet::pred(<T>SkipSetNodePtr t)
-{
- <T>SkipSetNodePtr temp, curr = (<T>SkipSetNodePtr) header;
- int l = level;
-
- do
- while ((temp = curr->forward[l])!=t)
- curr = temp;
- while (--l >= 0);
-
- return curr == header ? 0 : curr;
-}
-
-void <T>SkipSet::_kill()
-{
- <T>SkipSetNode *p = this->header->forward[0];
-
- while (p != header)
- {
- <T>SkipSetNodePtr q = p->forward[0];
- delete p;
- p = q;
- }
-}
-
-void <T>SkipSet::clear()
-{
- <T>SkipSetNodePtr *buffer_start = header->forward;
- <T>SkipSetNodePtr *trav = &header->forward[level+1];
- _kill();
- count = 0;
-
- while (trav > buffer_start)
- *--trav = (<T>SkipSetNodePtr)header;
-}
-
-Pix <T>SkipSet::seek(<T&> key)
-{
- <T>SkipSetNodePtr temp;
- <T>SkipSetNode *curr = header;
- int l = level;
-
- do
- {
- while ((temp = curr->forward[l])!=header &&
- <T>CMP(temp->item, key) < 0)
- curr = temp;
- }
- while (--l >= 0);
-
- if (<T>CMP(temp->item, key) != 0)
- return 0;
- else
- {
- return Pix(temp);
- }
-}
-
-
-/*
- * random function for probabilistic balancing
- *
- * Hardwired for p = .25. Not too flexible,
- * but fast. Changing this would require a constructor
- * that would accept a different value for p, etc.
- * Perhaps someone else would like to implement this?
- *
- */
-int <T>SkipSet::random_level (void)
-{
- int rlevel = 0;
- int b;
-
- do
- {
- b = random_bits & 3L;
- if (!b)
- rlevel++;
- random_bits >>= 2;
- if (--randoms_left == 0)
- {
- random_bits = gen->asLong();
- randoms_left = BITS_IN_RANDOM / 2;
- };
- }
- while (!b);
-
- return rlevel > max_levels ? max_levels : rlevel;
-}
-
-int <T>SkipSet::OK()
-{
- int v = 1;
- if (header == 0)
- v = 0;
- else
- {
- int n = 0;
- <T>SkipSetNodePtr trail = leftmost();
- <T>SkipSetNodePtr t = 0;
- if (trail) t = succ(trail);
- if (t) n++;
- while (t != 0)
- {
- ++n;
- v &= <T>CMP(trail->item, t->item) < 0;
- trail = t;
- t = succ(t);
- }
- v &= n == count;
- }
- if (!v) error("invariant failure");
- return v;
-}
-
-<T>SkipSetinit::<T>SkipSetinit()
-{
- if (!count)
- <T>SkipSet::gen = new MLCG(time(0));
- count++;
-}
-
-<T>SkipSetinit::~<T>SkipSetinit()
-{
- count--;
- if (!count)
- delete <T>SkipSet::gen;
-}
diff --git a/contrib/libg++/libg++/src/gen/SkipSet.hP b/contrib/libg++/libg++/src/gen/SkipSet.hP
deleted file mode 100644
index d4b782bbadf4..000000000000
--- a/contrib/libg++/libg++/src/gen/SkipSet.hP
+++ /dev/null
@@ -1,187 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1991 Free Software Foundation
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/*
- * Sets implemented via William Pugh SkipList algorithms.
- * CACM, June 1990, p 668-676.
- *
- */
-
-#ifndef _<T>SkipSet_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _<T>SkipSet_h 1
-
-#include "<T>.Set.h"
-
-#include <limits.h>
-#include <MLCG.h>
-
-class <T>SkipSet;
-class <T>RealSkipSetNode;
-
-class <T>SkipSetNode
-{
-friend class <T>SkipSet;
- private:
- <T>RealSkipSetNode * * forward;
- <T>SkipSetNode(int size);
-};
-
-class <T>RealSkipSetNode : public <T>SkipSetNode
-{
-friend class <T>SkipSet;
- private:
- <T> item;
- <T>RealSkipSetNode(<T&> h, int size);
-};
-
-typedef <T>RealSkipSetNode* <T>SkipSetNodePtr;
-
-inline <T>SkipSetNode::<T>SkipSetNode(int size)
-: forward(new <T>SkipSetNodePtr[size+1])
-{
-}
-
-inline <T>RealSkipSetNode::<T>RealSkipSetNode(<T&> h, int size)
-: item(h),
- <T>SkipSetNode(size)
-{
-}
-
-class <T>SkipSet : public <T>Set
-{
-friend class <T>SkipSetinit;
- protected:
- <T>SkipSetNode* header;
- int level;
- int max_levels;
- int randoms_left;
- long random_bits;
-
- static MLCG* gen;
- int random_level(void);
-
- <T>SkipSetNodePtr leftmost(void);
- <T>SkipSetNodePtr rightmost(void);
- <T>SkipSetNodePtr pred(<T>SkipSetNodePtr t);
- <T>SkipSetNodePtr succ(<T>SkipSetNodePtr t);
- void _kill(void);
-
- private:
- enum { BITS_IN_RANDOM = LONGBITS-1 };
- public:
- <T>SkipSet(long size=DEFAULT_INITIAL_CAPACITY);
- <T>SkipSet(<T>SkipSet& a);
- ~<T>SkipSet();
-
- Pix add(<T&> i);
- void del(<T&> i);
- int contains(<T&> i);
-
- void clear(void);
-
- Pix first(void);
- void next(Pix& i);
- <T>& operator () (Pix i);
- Pix seek(<T&> i);
-
- Pix last(void);
- void prev(Pix& i);
-
- void operator |= (<T>SkipSet& b);
- void operator -= (<T>SkipSet& b);
- void operator &= (<T>SkipSet& b);
-
- int operator == (<T>SkipSet& b);
- int operator != (<T>SkipSet& b);
- int operator <= (<T>SkipSet& b);
-
- int OK(void);
-};
-
-/*
- * A little overkill on the inlines.
- *
- */
-
-inline <T>SkipSet::~<T>SkipSet(void)
-{
- _kill();
- delete header;
-}
-
-inline int <T>SkipSet::operator != (<T>SkipSet& b)
-{
- return ! (*this == b);
-}
-
-inline <T>SkipSetNodePtr <T>SkipSet::leftmost(void)
-{
- return header->forward[0];
-}
-
-inline <T>SkipSetNodePtr <T>SkipSet::succ(<T>SkipSetNodePtr t)
-{
- <T>SkipSetNodePtr result = 0;
- if (t->forward[0]!=header) result = t->forward[0];
- return result;
-}
-
-inline Pix <T>SkipSet::first(void)
-{
- return Pix(leftmost());
-}
-
-inline Pix <T>SkipSet::last(void)
-{
- return Pix(rightmost());
-}
-
-inline void <T>SkipSet::next(Pix& i)
-{
- if (i != 0) i = Pix(succ((<T>SkipSetNodePtr)i));
-}
-
-inline void <T>SkipSet::prev(Pix& i)
-{
- if (i != 0) i = Pix(pred((<T>SkipSetNodePtr)i));
-}
-
-inline <T>& <T>SkipSet::operator () (Pix i)
-{
- if (i == 0) error("null Pix");
- return ((<T>SkipSetNodePtr)i)->item;
-}
-
-
-inline int <T>SkipSet::contains(<T&> key)
-{
- return seek(key) != 0;
-}
-
-static class <T>SkipSetinit
-{
- public:
- <T>SkipSetinit();
- ~<T>SkipSetinit();
- private:
- static int count;
-} <T>skipSetinit;
-
-#endif
diff --git a/contrib/libg++/libg++/src/gen/SplayBag.ccP b/contrib/libg++/libg++/src/gen/SplayBag.ccP
deleted file mode 100644
index 1ff1421db4d3..000000000000
--- a/contrib/libg++/libg++/src/gen/SplayBag.ccP
+++ /dev/null
@@ -1,445 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <stream.h>
-#include "<T>.SplayBag.h"
-
-
-/*
-
- struct to simulate the special `null' node in the Sleater & Tarjan JACM 1985
- splay tree algorithms
-
- All routines use a version of their `simple top-down' splay alg. (p 669)
-
-*/
-
-struct _dummySplayNode
-{
- <T>SplayNode* lt;
- <T>SplayNode* rt;
- <T>SplayNode* par;
-} _dummy_null;
-
-
-/*
- traversal primitives
-*/
-
-
-<T>SplayNode* <T>SplayBag::leftmost()
-{
- <T>SplayNode* t = root;
- if (t != 0) while (t->lt != 0) t = t->lt;
- return t;
-}
-
-<T>SplayNode* <T>SplayBag::rightmost()
-{
- <T>SplayNode* t = root;
- if (t != 0) while (t->rt != 0) t = t->rt;
- return t;
-}
-
-<T>SplayNode* <T>SplayBag::succ(<T>SplayNode* t)
-{
- if (t == 0)
- return 0;
- if (t->rt != 0)
- {
- t = t->rt;
- while (t->lt != 0) t = t->lt;
- return t;
- }
- else
- {
- for (;;)
- {
- if (t->par == 0 || t == t->par->lt)
- return t->par;
- else
- t = t->par;
- }
- }
-}
-
-<T>SplayNode* <T>SplayBag::pred(<T>SplayNode* t)
-{
- if (t == 0)
- return 0;
- else if (t->lt != 0)
- {
- t = t->lt;
- while (t->rt != 0) t = t->rt;
- return t;
- }
- else
- {
- for (;;)
- {
- if (t->par == 0 || t == t->par->rt)
- return t->par;
- else
- t = t->par;
- }
- }
-}
-
-
-
-Pix <T>SplayBag::seek(<T&> key, Pix i)
-{
- if (root == 0) return 0;
-
- <T>SplayNode* t = (<T>SplayNode*) i;
- if (t != 0)
- {
- int cmp = <T>CMP(key, t->item);
- if (cmp == 0)
- {
- t = succ(t);
- if (t != 0 && <T>EQ(key, t->item))
- return Pix(t);
- else
- return 0;
- }
- else if (cmp < 0)
- return 0;
- }
-
- t = root;
- int comp = <T>CMP(key, t->item);
- if (comp == 0)
- return Pix(t);
-
- <T>SplayNode* dummy = (<T>SplayNode*)(&_dummy_null);
- <T>SplayNode* l = dummy;
- <T>SplayNode* r = dummy;
- dummy->rt = dummy->lt = dummy->par = 0;
-
- while (comp != 0)
- {
- if (comp > 0)
- {
- <T>SplayNode* tr = t->rt;
- if (tr == 0)
- break;
- else
- {
- comp = <T>CMP(key, tr->item);
- if (comp <= 0 || tr->rt == 0)
- {
- l->rt = t; t->par = l;
- l = t;
- t = tr;
- if (comp >= 0)
- break;
- }
- else
- {
- if ((t->rt = tr->lt) != 0) t->rt->par = t;
- tr->lt = t; t->par = tr;
- l->rt = tr; tr->par = l;
- l = tr;
- t = tr->rt;
- comp = <T>CMP(key, t->item);
- }
- }
- }
- else
- {
- <T>SplayNode* tl = t->lt;
- if (tl == 0)
- break;
- else
- {
- comp = <T>CMP(key, tl->item);
- if (comp >= 0 || tl->lt == 0)
- {
- r->lt = t; t->par = r;
- r = t;
- t = tl;
- if (comp <= 0)
- break;
- }
- else
- {
- if ((t->lt = tl->rt) != 0) t->lt->par = t;
- tl->rt = t; t->par = tl;
- r->lt = tl; tl->par = r;
- r = tl;
- t = tl->lt;
- comp = <T>CMP(key, t->item);
- }
- }
- }
- }
- if ((r->lt = t->rt) != 0) r->lt->par = r;
- if ((l->rt = t->lt) != 0) l->rt->par = l;
- if ((t->lt = dummy->rt) != 0) t->lt->par = t;
- if ((t->rt = dummy->lt) != 0) t->rt->par = t;
- t->par = 0;
- root = t;
- if (comp != 0)
- return 0;
- else
- {
- l = pred(t);
- while (l != 0 && <T>EQ(l->item, key)) { t = l; l = pred(l); }
- return Pix(t);
- }
-}
-
-int <T>SplayBag::nof(<T&> item)
-{
- int n = 0;
- <T>SplayNode* t = (<T>SplayNode*)(seek(item));
- if (t != 0)
- {
- do
- {
- ++n;
- t = succ(t);
- } while (t != 0 && <T>EQ(item, t->item));
- }
- return n;
-}
-
-Pix <T>SplayBag::add(<T&> item)
-{
- ++count;
- <T>SplayNode* newnode = new <T>SplayNode(item);
- <T>SplayNode* t = root;
- if (t == 0)
- {
- root = newnode;
- return Pix(root);
- }
-
- int comp = <T>CMP(item, t->item);
-
- <T>SplayNode* dummy = (<T>SplayNode*)(&_dummy_null);
- <T>SplayNode* l = dummy;
- <T>SplayNode* r = dummy;
- dummy->rt = dummy->lt = dummy->par = 0;
-
- int done = 0;
- while (!done)
- {
- if (comp >= 0)
- {
- <T>SplayNode* tr = t->rt;
- if (tr == 0)
- {
- tr = newnode;
- comp = 0; done = 1;
- }
- else
- comp = <T>CMP(item, tr->item);
-
- if (comp <= 0)
- {
- l->rt = t; t->par = l;
- l = t;
- t = tr;
- }
- else
- {
- <T>SplayNode* trr = tr->rt;
- if (trr == 0)
- {
- trr = newnode;
- comp = 0; done = 1;
- }
- else
- comp = <T>CMP(item, trr->item);
-
- if ((t->rt = tr->lt) != 0) t->rt->par = t;
- tr->lt = t; t->par = tr;
- l->rt = tr; tr->par = l;
- l = tr;
- t = trr;
- }
- }
- else
- {
- <T>SplayNode* tl = t->lt;
- if (tl == 0)
- {
- tl = newnode;
- comp = 0; done = 1;
- }
- else
- comp = <T>CMP(item, tl->item);
-
- if (comp >= 0)
- {
- r->lt = t; t->par = r;
- r = t;
- t = tl;
- }
- else
- {
- <T>SplayNode* tll = tl->lt;
- if (tll == 0)
- {
- tll = newnode;
- comp = 0; done = 1;
- }
- else
- comp = <T>CMP(item, tll->item);
-
- if ((t->lt = tl->rt) != 0) t->lt->par = t;
- tl->rt = t; t->par = tl;
- r->lt = tl; tl->par = r;
- r = tl;
- t = tll;
- }
- }
- }
- if ((r->lt = t->rt) != 0) r->lt->par = r;
- if ((l->rt = t->lt) != 0) l->rt->par = l;
- if ((t->lt = dummy->rt) != 0) t->lt->par = t;
- if ((t->rt = dummy->lt) != 0) t->rt->par = t;
- t->par = 0;
- root = t;
- return Pix(root);
-}
-
-void <T>SplayBag::_del(<T>SplayNode* t)
-{
- if (t == 0) return;
-
- <T>SplayNode* p = t->par;
-
- --count;
- if (t->rt == 0)
- {
- if (t == root)
- {
- if ((root = t->lt) != 0) root->par = 0;
- }
- else if (t == p->lt)
- {
- if ((p->lt = t->lt) != 0) p->lt->par = p;
- }
- else
- if ((p->rt = t->lt) != 0) p->rt->par = p;
- }
- else
- {
- <T>SplayNode* r = t->rt;
- <T>SplayNode* l = r->lt;
- for(;;)
- {
- if (l == 0)
- {
- if (t == root)
- {
- root = r;
- r->par = 0;
- }
- else if (t == p->lt)
- {
- p->lt = r;
- r->par = p;
- }
- else
- {
- p->rt = r;
- r->par = p;
- }
- if ((r->lt = t->lt) != 0) r->lt->par = r;
- break;
- }
- else
- {
- if ((r->lt = l->rt) != 0) r->lt->par = r;
- l->rt = r; r->par = l;
- r = l;
- l = l->lt;
- }
- }
- }
- delete t;
-}
-
-
-void <T>SplayBag::remove(<T&> key)
-{
- <T>SplayNode* t = (<T>SplayNode*)(seek(key));
- while (t != 0)
- {
- _del(t);
- t = (<T>SplayNode*)(seek(key));
- }
-}
-
-
-void <T>SplayBag::_kill(<T>SplayNode* t)
-{
- if (t != 0)
- {
- _kill(t->lt);
- _kill(t->rt);
- delete t;
- }
-}
-
-
-<T>SplayNode* <T>SplayBag::_copy(<T>SplayNode* t)
-{
- if (t != 0)
- {
- <T>SplayNode* l = _copy(t->lt);
- <T>SplayNode* r = _copy(t->rt);
- <T>SplayNode* x = new <T>SplayNode(t->item, l, r);
- if (l != 0) l->par = x;
- if (r != 0) r->par = x;
- return x;
- }
- else
- return 0;
-}
-
-int <T>SplayBag::OK()
-{
- int v = 1;
- if (root == 0)
- v = count == 0;
- else
- {
- int n = 1;
- <T>SplayNode* trail = leftmost();
- <T>SplayNode* t = succ(trail);
- while (t != 0)
- {
- ++n;
- v &= <T>CMP(trail->item, t->item) <= 0;
- trail = t;
- t = succ(t);
- }
- v &= n == count;
- }
- if (!v) error("invariant failure");
- return v;
-}
-
diff --git a/contrib/libg++/libg++/src/gen/SplayBag.hP b/contrib/libg++/libg++/src/gen/SplayBag.hP
deleted file mode 100644
index 9059d453df50..000000000000
--- a/contrib/libg++/libg++/src/gen/SplayBag.hP
+++ /dev/null
@@ -1,126 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988, 1982 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifndef _<T>SplayBag_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _<T>SplayBag_h 1
-
-#include "<T>.Bag.h"
-#include "<T>.SplayNode.h"
-
-class <T>SplayBag : public <T>Bag
-{
-protected:
- <T>SplayNode* root;
-
- <T>SplayNode* leftmost();
- <T>SplayNode* rightmost();
- <T>SplayNode* pred(<T>SplayNode* t);
- <T>SplayNode* succ(<T>SplayNode* t);
- void _kill(<T>SplayNode* t);
- <T>SplayNode* _copy(<T>SplayNode* t);
- void _del(<T>SplayNode* t);
-
-public:
- <T>SplayBag();
- <T>SplayBag(<T>SplayBag& a);
- inline ~<T>SplayBag();
-
- Pix add(<T&> item);
- inline void del(<T&> item);
- void remove(<T&>item);
- int nof(<T&> item);
- inline int contains(<T&> item);
-
- inline void clear();
-
- inline Pix first();
- inline void next(Pix& i);
- inline <T>& operator () (Pix i);
- Pix seek(<T&> item, Pix from = 0);
-
- Pix last();
- void prev(Pix& i);
-
- int OK();
-};
-
-
-inline <T>SplayBag::~<T>SplayBag()
-{
- _kill(root);
-}
-
-inline <T>SplayBag::<T>SplayBag()
-{
- root = 0;
- count = 0;
-}
-
-inline <T>SplayBag::<T>SplayBag(<T>SplayBag& b)
-{
- count = b.count;
- root = _copy(b.root);
-}
-
-inline Pix <T>SplayBag::first()
-{
- return Pix(leftmost());
-}
-
-inline Pix <T>SplayBag::last()
-{
- return Pix(rightmost());
-}
-
-inline void <T>SplayBag::next(Pix& i)
-{
- if (i != 0) i = Pix(succ((<T>SplayNode*)i));
-}
-
-inline void <T>SplayBag::prev(Pix& i)
-{
- if (i != 0) i = Pix(pred((<T>SplayNode*)i));
-}
-
-inline <T>& <T>SplayBag::operator () (Pix i)
-{
- if (i == 0) error("null Pix");
- return ((<T>SplayNode*)i)->item;
-}
-
-inline void <T>SplayBag::clear()
-{
- _kill(root);
- count = 0;
- root = 0;
-}
-
-inline int <T>SplayBag::contains(<T&> key)
-{
- return seek(key) != 0;
-}
-
-inline void <T>SplayBag::del(<T&> key)
-{
- _del((<T>SplayNode*)(seek(key)));
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/gen/SplayMap.ccP b/contrib/libg++/libg++/src/gen/SplayMap.ccP
deleted file mode 100644
index 5b9ffe96a961..000000000000
--- a/contrib/libg++/libg++/src/gen/SplayMap.ccP
+++ /dev/null
@@ -1,401 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <stream.h>
-#include "<T>.<C>.SplayMap.h"
-
-
-/*
-
- struct to simulate the special `null' node in the Sleater & Tarjan JACM 1985
- splay tree algorithms
-
- All routines use a version of their `simple top-down' splay alg. (p 669)
-
-*/
-
-struct _dummySplayNode
-{
- <T><C>SplayNode* lt;
- <T><C>SplayNode* rt;
- <T><C>SplayNode* par;
-} _dummy_null;
-
-
-/*
- traversal primitives
-*/
-
-
-<T><C>SplayNode* <T><C>SplayMap::leftmost()
-{
- <T><C>SplayNode* t = root;
- if (t != 0) while (t->lt != 0) t = t->lt;
- return t;
-}
-
-<T><C>SplayNode* <T><C>SplayMap::rightmost()
-{
- <T><C>SplayNode* t = root;
- if (t != 0) while (t->rt != 0) t = t->rt;
- return t;
-}
-
-<T><C>SplayNode* <T><C>SplayMap::succ(<T><C>SplayNode* t)
-{
- if (t == 0)
- return 0;
- if (t->rt != 0)
- {
- t = t->rt;
- while (t->lt != 0) t = t->lt;
- return t;
- }
- else
- {
- for (;;)
- {
- if (t->par == 0 || t == t->par->lt)
- return t->par;
- else
- t = t->par;
- }
- }
-}
-
-<T><C>SplayNode* <T><C>SplayMap::pred(<T><C>SplayNode* t)
-{
- if (t == 0)
- return 0;
- else if (t->lt != 0)
- {
- t = t->lt;
- while (t->rt != 0) t = t->rt;
- return t;
- }
- else
- {
- for (;;)
- {
- if (t->par == 0 || t == t->par->rt)
- return t->par;
- else
- t = t->par;
- }
- }
-}
-
-
-Pix <T><C>SplayMap::seek(<T&> key)
-{
- <T><C>SplayNode* t = root;
- if (t == 0)
- return 0;
-
- int comp = <T>CMP(key, t->item);
- if (comp == 0)
- return Pix(t);
-
- <T><C>SplayNode* dummy = (<T><C>SplayNode*)(&_dummy_null);
- <T><C>SplayNode* l = dummy;
- <T><C>SplayNode* r = dummy;
- dummy->rt = dummy->lt = dummy->par = 0;
-
- while (comp != 0)
- {
- if (comp > 0)
- {
- <T><C>SplayNode* tr = t->rt;
- if (tr == 0)
- break;
- else
- {
- comp = <T>CMP(key, tr->item);
- if (comp <= 0 || tr->rt == 0)
- {
- l->rt = t; t->par = l;
- l = t;
- t = tr;
- if (comp >= 0)
- break;
- }
- else
- {
- if ((t->rt = tr->lt) != 0) t->rt->par = t;
- tr->lt = t; t->par = tr;
- l->rt = tr; tr->par = l;
- l = tr;
- t = tr->rt;
- comp = <T>CMP(key, t->item);
- }
- }
- }
- else
- {
- <T><C>SplayNode* tl = t->lt;
- if (tl == 0)
- break;
- else
- {
- comp = <T>CMP(key, tl->item);
- if (comp >= 0 || tl->lt == 0)
- {
- r->lt = t; t->par = r;
- r = t;
- t = tl;
- if (comp <= 0)
- break;
- }
- else
- {
- if ((t->lt = tl->rt) != 0) t->lt->par = t;
- tl->rt = t; t->par = tl;
- r->lt = tl; tl->par = r;
- r = tl;
- t = tl->lt;
- comp = <T>CMP(key, t->item);
- }
- }
- }
- }
- if ((r->lt = t->rt) != 0) r->lt->par = r;
- if ((l->rt = t->lt) != 0) l->rt->par = l;
- if ((t->lt = dummy->rt) != 0) t->lt->par = t;
- if ((t->rt = dummy->lt) != 0) t->rt->par = t;
- t->par = 0;
- root = t;
- return (comp == 0) ? Pix(t) : 0;
-}
-
-
-<C>& <T><C>SplayMap::operator [] (<T&> item)
-{
- <T><C>SplayNode* t = root;
- if (t == 0)
- {
- ++count;
- root = new <T><C>SplayNode(item, def);
- return root->cont;
- }
- int comp = <T>CMP(item, t->item);
- if (comp == 0)
- return t->cont;
-
- <T><C>SplayNode* dummy = (<T><C>SplayNode*)(&_dummy_null);
- <T><C>SplayNode* l = dummy;
- <T><C>SplayNode* r = dummy;
- dummy->rt = dummy->lt = dummy->par = 0;
-
- while (comp != 0)
- {
- if (comp > 0)
- {
- <T><C>SplayNode* tr = t->rt;
- if (tr == 0)
- {
- ++count;
- tr = new <T><C>SplayNode(item, def);
- comp = 0;
- }
- else
- comp = <T>CMP(item, tr->item);
-
- if (comp <= 0)
- {
- l->rt = t; t->par = l;
- l = t;
- t = tr;
- }
- else
- {
- <T><C>SplayNode* trr = tr->rt;
- if (trr == 0)
- {
- ++count;
- trr = new <T><C>SplayNode(item, def);
- comp = 0;
- }
- else
- comp = <T>CMP(item, trr->item);
-
- if ((t->rt = tr->lt) != 0) t->rt->par = t;
- tr->lt = t; t->par = tr;
- l->rt = tr; tr->par = l;
- l = tr;
- t = trr;
- }
- }
- else
- {
- <T><C>SplayNode* tl = t->lt;
- if (tl == 0)
- {
- ++count;
- tl = new <T><C>SplayNode(item, def);
- comp = 0;
- }
- else
- comp = <T>CMP(item, tl->item);
-
- if (comp >= 0)
- {
- r->lt = t; t->par = r;
- r = t;
- t = tl;
- }
- else
- {
- <T><C>SplayNode* tll = tl->lt;
- if (tll == 0)
- {
- ++count;
- tll = new <T><C>SplayNode(item, def);
- comp = 0;
- }
- else
- comp = <T>CMP(item, tll->item);
-
- if ((t->lt = tl->rt) != 0) t->lt->par = t;
- tl->rt = t; t->par = tl;
- r->lt = tl; tl->par = r;
- r = tl;
- t = tll;
- }
- }
- }
- if ((r->lt = t->rt) != 0) r->lt->par = r;
- if ((l->rt = t->lt) != 0) l->rt->par = l;
- if ((t->lt = dummy->rt) != 0) t->lt->par = t;
- if ((t->rt = dummy->lt) != 0) t->rt->par = t;
- t->par = 0;
- root = t;
- return root->cont;
-}
-
-void <T><C>SplayMap::del(<T&> key)
-{
- <T><C>SplayNode* t = (<T><C>SplayNode*)(seek(key));
- if (t == 0) return;
-
- <T><C>SplayNode* p = t->par;
-
- --count;
- if (t->rt == 0)
- {
- if (t == root)
- {
- if ((root = t->lt) != 0) root->par = 0;
- }
- else if (t == p->lt)
- {
- if ((p->lt = t->lt) != 0) p->lt->par = p;
- }
- else
- if ((p->rt = t->lt) != 0) p->rt->par = p;
- }
- else
- {
- <T><C>SplayNode* r = t->rt;
- <T><C>SplayNode* l = r->lt;
- for(;;)
- {
- if (l == 0)
- {
- if (t == root)
- {
- root = r;
- r->par = 0;
- }
- else if (t == p->lt)
- {
- p->lt = r;
- r->par = p;
- }
- else
- {
- p->rt = r;
- r->par = p;
- }
- if ((r->lt = t->lt) != 0) r->lt->par = r;
- break;
- }
- else
- {
- if ((r->lt = l->rt) != 0) r->lt->par = r;
- l->rt = r; r->par = l;
- r = l;
- l = l->lt;
- }
- }
- }
- delete t;
-}
-
-
-void <T><C>SplayMap::_kill(<T><C>SplayNode* t)
-{
- if (t != 0)
- {
- _kill(t->lt);
- _kill(t->rt);
- delete t;
- }
-}
-
-
-<T><C>SplayNode* <T><C>SplayMap::_copy(<T><C>SplayNode* t)
-{
- if (t != 0)
- {
- <T><C>SplayNode* l = _copy(t->lt);
- <T><C>SplayNode* r = _copy(t->rt);
- <T><C>SplayNode* x = new <T><C>SplayNode(t->item, t->cont, l, r);
- if (l != 0) l->par = x;
- if (r != 0) r->par = x;
- return x;
- }
- else
- return 0;
-}
-
-
-int <T><C>SplayMap::OK()
-{
- int v = 1;
- if (root == 0)
- v = count == 0;
- else
- {
- int n = 1;
- <T><C>SplayNode* trail = leftmost();
- <T><C>SplayNode* t = succ(trail);
- while (t != 0)
- {
- ++n;
- v &= <T>CMP(trail->item, t->item) < 0;
- trail = t;
- t = succ(t);
- }
- v &= n == count;
- }
- if (!v) error("invariant failure");
- return v;
-}
diff --git a/contrib/libg++/libg++/src/gen/SplayMap.hP b/contrib/libg++/libg++/src/gen/SplayMap.hP
deleted file mode 100644
index 3acb1d4b14d1..000000000000
--- a/contrib/libg++/libg++/src/gen/SplayMap.hP
+++ /dev/null
@@ -1,154 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#ifndef _<T><C>SplayMap_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _<T><C>SplayMap_h 1
-
-#include "<T>.<C>.Map.h"
-
-#ifndef _<T><C>SplayNode
-#define _<T><C>SplayNode 1
-
-struct <T><C>SplayNode
-{
- <T><C>SplayNode* lt;
- <T><C>SplayNode* rt;
- <T><C>SplayNode* par;
- <T> item;
- <C> cont;
- <T><C>SplayNode(<T&> h, <C&> c,
- <T><C>SplayNode* l=0,
- <T><C>SplayNode* r=0);
- ~<T><C>SplayNode();
-};
-
-
-inline <T><C>SplayNode::<T><C>SplayNode(<T&> h, <C&> c,
- <T><C>SplayNode* l,
- <T><C>SplayNode* r)
- :lt(l), rt(r), par(0), item(h), cont(c) {}
-
-inline <T><C>SplayNode::~<T><C>SplayNode() {}
-
-typedef <T><C>SplayNode* <T><C>SplayNodePtr;
-
-#endif
-
-class <T><C>SplayMap : public <T><C>Map
-{
-protected:
- <T><C>SplayNode* root;
-
- <T><C>SplayNode* leftmost();
- <T><C>SplayNode* rightmost();
- <T><C>SplayNode* pred(<T><C>SplayNode* t);
- <T><C>SplayNode* succ(<T><C>SplayNode* t);
- void _kill(<T><C>SplayNode* t);
- <T><C>SplayNode* _copy(<T><C>SplayNode* t);
-
-public:
- <T><C>SplayMap(<C&> dflt);
- <T><C>SplayMap(<T><C>SplayMap& a);
- inline ~<T><C>SplayMap();
-
- <C>& operator [] (<T&> key);
-
- void del(<T&> key);
-
- inline Pix first();
- inline void next(Pix& i);
- inline <T>& key(Pix i);
- inline <C>& contents(Pix i);
-
- Pix seek(<T&> key);
- inline int contains(<T&> key);
-
- inline void clear();
-
- Pix last();
- void prev(Pix& i);
-
- int OK();
-};
-
-
-inline <T><C>SplayMap::~<T><C>SplayMap()
-{
- _kill(root);
-}
-
-inline <T><C>SplayMap::<T><C>SplayMap(<C&> dflt) :<T><C>Map(dflt)
-{
- root = 0;
-}
-
-inline <T><C>SplayMap::<T><C>SplayMap(<T><C>SplayMap& b) :<T><C>Map(b.def)
-{
- count = b.count;
- root = _copy(b.root);
-}
-
-inline Pix <T><C>SplayMap::first()
-{
- return Pix(leftmost());
-}
-
-inline Pix <T><C>SplayMap::last()
-{
- return Pix(rightmost());
-}
-
-inline void <T><C>SplayMap::next(Pix& i)
-{
- if (i != 0) i = Pix(succ((<T><C>SplayNode*)i));
-}
-
-inline void <T><C>SplayMap::prev(Pix& i)
-{
- if (i != 0) i = Pix(pred((<T><C>SplayNode*)i));
-}
-
-inline <T>& <T><C>SplayMap::key (Pix i)
-{
- if (i == 0) error("null Pix");
- return ((<T><C>SplayNode*)i)->item;
-}
-
-inline <C>& <T><C>SplayMap::contents (Pix i)
-{
- if (i == 0) error("null Pix");
- return ((<T><C>SplayNode*)i)->cont;
-}
-
-inline void <T><C>SplayMap::clear()
-{
- _kill(root);
- count = 0;
- root = 0;
-}
-
-inline int <T><C>SplayMap::contains(<T&> key)
-{
- return seek(key) != 0;
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/gen/SplayNode.ccP b/contrib/libg++/libg++/src/gen/SplayNode.ccP
deleted file mode 100644
index 74f071140fe3..000000000000
--- a/contrib/libg++/libg++/src/gen/SplayNode.ccP
+++ /dev/null
@@ -1,21 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1992 Free Software Foundation
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include "<T>.SplayNode.h"
diff --git a/contrib/libg++/libg++/src/gen/SplayNode.hP b/contrib/libg++/libg++/src/gen/SplayNode.hP
deleted file mode 100644
index e50ced51dcfb..000000000000
--- a/contrib/libg++/libg++/src/gen/SplayNode.hP
+++ /dev/null
@@ -1,44 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988, 1982 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifndef _<T>SplayNode
-#define _<T>SplayNode 1
-#ifdef __GNUG__
-#pragma interface
-#endif
-#include "<T>.defs.h"
-
-struct <T>SplayNode
-{
- <T>SplayNode* lt;
- <T>SplayNode* rt;
- <T>SplayNode* par;
- <T> item;
- <T>SplayNode(<T&> h, <T>SplayNode* l=0, <T>SplayNode* r=0);
- ~<T>SplayNode();
-};
-
-
-inline <T>SplayNode::<T>SplayNode(<T&> h, <T>SplayNode* l, <T>SplayNode* r)
-:lt(l), rt(r), par(0), item(h) {}
-
-inline <T>SplayNode::~<T>SplayNode() {}
-
-typedef <T>SplayNode* <T>SplayNodePtr;
-
-#endif
diff --git a/contrib/libg++/libg++/src/gen/SplayPQ.ccP b/contrib/libg++/libg++/src/gen/SplayPQ.ccP
deleted file mode 100644
index 890b9585e3a0..000000000000
--- a/contrib/libg++/libg++/src/gen/SplayPQ.ccP
+++ /dev/null
@@ -1,523 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <stream.h>
-#include "<T>.SplayPQ.h"
-
-
-/*
-
- struct to simulate the special `null' node in the Sleater & Tarjan JACM 1985
- splay tree algorithms
-
- All routines use a version of their `simple top-down' splay alg. (p 669)
-
-*/
-
-struct _dummySplayNode
-{
- <T>SplayNode* lt;
- <T>SplayNode* rt;
- <T>SplayNode* par;
-} _dummy_null;
-
-
-/*
- traversal primitives
-*/
-
-
-<T>SplayNode* <T>SplayPQ::leftmost()
-{
- <T>SplayNode* t = root;
- if (t != 0) while (t->lt != 0) t = t->lt;
- return t;
-}
-
-<T>SplayNode* <T>SplayPQ::rightmost()
-{
- <T>SplayNode* t = root;
- if (t != 0) while (t->rt != 0) t = t->rt;
- return t;
-}
-
-<T>SplayNode* <T>SplayPQ::succ(<T>SplayNode* t)
-{
- if (t == 0)
- return 0;
- if (t->rt != 0)
- {
- t = t->rt;
- while (t->lt != 0) t = t->lt;
- return t;
- }
- else
- {
- for (;;)
- {
- if (t->par == 0 || t == t->par->lt)
- return t->par;
- else
- t = t->par;
- }
- }
-}
-
-<T>SplayNode* <T>SplayPQ::pred(<T>SplayNode* t)
-{
- if (t == 0)
- return 0;
- else if (t->lt != 0)
- {
- t = t->lt;
- while (t->rt != 0) t = t->rt;
- return t;
- }
- else
- {
- for (;;)
- {
- if (t->par == 0 || t == t->par->rt)
- return t->par;
- else
- t = t->par;
- }
- }
-}
-
-
-Pix <T>SplayPQ::seek(<T&> key)
-{
- <T>SplayNode* t = root;
- if (t == 0)
- return 0;
-
- int comp = <T>CMP(key, t->item);
- if (comp == 0)
- return Pix(t);
-
- <T>SplayNode* dummy = (<T>SplayNode*)(&_dummy_null);
- <T>SplayNode* l = dummy;
- <T>SplayNode* r = dummy;
- dummy->rt = dummy->lt = dummy->par = 0;
-
- while (comp != 0)
- {
- if (comp > 0)
- {
- <T>SplayNode* tr = t->rt;
- if (tr == 0)
- break;
- else
- {
- comp = <T>CMP(key, tr->item);
- if (comp <= 0 || tr->rt == 0)
- {
- l->rt = t; t->par = l;
- l = t;
- t = tr;
- if (comp >= 0)
- break;
- }
- else
- {
- if ((t->rt = tr->lt) != 0) t->rt->par = t;
- tr->lt = t; t->par = tr;
- l->rt = tr; tr->par = l;
- l = tr;
- t = tr->rt;
- comp = <T>CMP(key, t->item);
- }
- }
- }
- else
- {
- <T>SplayNode* tl = t->lt;
- if (tl == 0)
- break;
- else
- {
- comp = <T>CMP(key, tl->item);
- if (comp >= 0 || tl->lt == 0)
- {
- r->lt = t; t->par = r;
- r = t;
- t = tl;
- if (comp <= 0)
- break;
- }
- else
- {
- if ((t->lt = tl->rt) != 0) t->lt->par = t;
- tl->rt = t; t->par = tl;
- r->lt = tl; tl->par = r;
- r = tl;
- t = tl->lt;
- comp = <T>CMP(key, t->item);
- }
- }
- }
- }
- if ((r->lt = t->rt) != 0) r->lt->par = r;
- if ((l->rt = t->lt) != 0) l->rt->par = l;
- if ((t->lt = dummy->rt) != 0) t->lt->par = t;
- if ((t->rt = dummy->lt) != 0) t->rt->par = t;
- t->par = 0;
- root = t;
- return (comp == 0) ? Pix(t) : 0;
-}
-
-
-Pix <T>SplayPQ::enq(<T&> item)
-{
- ++count;
- <T>SplayNode* newnode = new <T>SplayNode(item);
- <T>SplayNode* t = root;
- if (t == 0)
- {
- root = newnode;
- return Pix(root);
- }
-
- int comp = <T>CMP(item, t->item);
-
- <T>SplayNode* dummy = (<T>SplayNode*)(&_dummy_null);
- <T>SplayNode* l = dummy;
- <T>SplayNode* r = dummy;
- dummy->rt = dummy->lt = dummy->par = 0;
-
- int done = 0;
- while (!done)
- {
- if (comp >= 0)
- {
- <T>SplayNode* tr = t->rt;
- if (tr == 0)
- {
- tr = newnode;
- comp = 0; done = 1;
- }
- else
- comp = <T>CMP(item, tr->item);
-
- if (comp <= 0)
- {
- l->rt = t; t->par = l;
- l = t;
- t = tr;
- }
- else
- {
- <T>SplayNode* trr = tr->rt;
- if (trr == 0)
- {
- trr = newnode;
- comp = 0; done = 1;
- }
- else
- comp = <T>CMP(item, trr->item);
-
- if ((t->rt = tr->lt) != 0) t->rt->par = t;
- tr->lt = t; t->par = tr;
- l->rt = tr; tr->par = l;
- l = tr;
- t = trr;
- }
- }
- else
- {
- <T>SplayNode* tl = t->lt;
- if (tl == 0)
- {
- tl = newnode;
- comp = 0; done = 1;
- }
- else
- comp = <T>CMP(item, tl->item);
-
- if (comp >= 0)
- {
- r->lt = t; t->par = r;
- r = t;
- t = tl;
- }
- else
- {
- <T>SplayNode* tll = tl->lt;
- if (tll == 0)
- {
- tll = newnode;
- comp = 0; done = 1;
- }
- else
- comp = <T>CMP(item, tll->item);
-
- if ((t->lt = tl->rt) != 0) t->lt->par = t;
- tl->rt = t; t->par = tl;
- r->lt = tl; tl->par = r;
- r = tl;
- t = tll;
- }
- }
- }
- if ((r->lt = t->rt) != 0) r->lt->par = r;
- if ((l->rt = t->lt) != 0) l->rt->par = l;
- if ((t->lt = dummy->rt) != 0) t->lt->par = t;
- if ((t->rt = dummy->lt) != 0) t->rt->par = t;
- t->par = 0;
- root = t;
- return Pix(root);
-}
-
-
-void <T>SplayPQ::del(Pix pix)
-{
- <T>SplayNode* t = (<T>SplayNode*)pix;
- if (t == 0) return;
-
- <T>SplayNode* p = t->par;
-
- --count;
- if (t->rt == 0)
- {
- if (t == root)
- {
- if ((root = t->lt) != 0) root->par = 0;
- }
- else if (t == p->lt)
- {
- if ((p->lt = t->lt) != 0) p->lt->par = p;
- }
- else
- if ((p->rt = t->lt) != 0) p->rt->par = p;
- }
- else
- {
- <T>SplayNode* r = t->rt;
- <T>SplayNode* l = r->lt;
- for(;;)
- {
- if (l == 0)
- {
- if (t == root)
- {
- root = r;
- r->par = 0;
- }
- else if (t == p->lt)
- {
- p->lt = r;
- r->par = p;
- }
- else
- {
- p->rt = r;
- r->par = p;
- }
- if ((r->lt = t->lt) != 0) r->lt->par = r;
- break;
- }
- else
- {
- if ((r->lt = l->rt) != 0) r->lt->par = r;
- l->rt = r; r->par = l;
- r = l;
- l = l->lt;
- }
- }
- }
- delete t;
-}
-
-<T>& <T>SplayPQ::front()
-{
- if (root == 0)
- error ("min: empty tree\n");
-// else
- {
- <T>SplayNode* t = root;
- <T>SplayNode* l = root->lt;
- for(;;)
- {
- if (l == 0)
- {
- root = t;
- root->par = 0;
- return root->item;
- }
- else
- {
- if ((t->lt = l->rt) != 0) t->lt->par = t;
- l->rt = t; t->par = l;
- t = l;
- l = l->lt;
- }
- }
- }
-}
-
-void <T>SplayPQ::del_front()
-{
- if (root != 0)
- {
- --count;
- <T>SplayNode* t = root;
- <T>SplayNode* l = root->lt;
- if (l == 0)
- {
- if ((root = t->rt) != 0) root->par = 0;
- delete t;
- }
- else
- {
- for(;;)
- {
- <T>SplayNode* ll = l->lt;
- if (ll == 0)
- {
- if ((t->lt = l->rt) != 0) t->lt->par = t;
- delete l;
- break;
- }
- else
- {
- <T>SplayNode* lll = ll->lt;
- if (lll == 0)
- {
- if ((l->lt = ll->rt) != 0) l->lt->par = l;
- delete ll;
- break;
- }
- else
- {
- t->lt = ll; ll->par = t;
- if ((l->lt = ll->rt) != 0) l->lt->par = l;
- ll->rt = l; l->par = ll;
- t = ll;
- l = lll;
- }
- }
- }
- }
- }
-}
-
-<T> <T>SplayPQ::deq()
-{
- if (root == 0)
- error("deq: empty tree");
-// else
- {
- --count;
- <T>SplayNode* t = root;
- <T>SplayNode* l = root->lt;
- if (l == 0)
- {
- if ((root = t->rt) != 0) root->par = 0;
- <T> res = t->item;
- delete t;
- return res;
- }
- else
- {
- for(;;)
- {
- <T>SplayNode* ll = l->lt;
- if (ll == 0)
- {
- if ((t->lt = l->rt) != 0) t->lt->par = t;
- <T> res = l->item;
- delete l;
- return res;
- }
- else
- {
- <T>SplayNode* lll = ll->lt;
- if (lll == 0)
- {
- if ((l->lt = ll->rt) != 0) l->lt->par = l;
- <T> res = ll->item;
- delete ll;
- return res;
- }
- else
- {
- t->lt = ll; ll->par = t;
- if ((l->lt = ll->rt) != 0) l->lt->par = l;
- ll->rt = l; l->par = ll;
- t = ll;
- l = lll;
- }
- }
- }
- }
- }
-}
-
-
-void <T>SplayPQ::_kill(<T>SplayNode* t)
-{
- if (t != 0)
- {
- _kill(t->lt);
- _kill(t->rt);
- delete t;
- }
-}
-
-
-<T>SplayNode* <T>SplayPQ::_copy(<T>SplayNode* t)
-{
- if (t != 0)
- {
- <T>SplayNode* l = _copy(t->lt);
- <T>SplayNode* r = _copy(t->rt);
- <T>SplayNode* x = new <T>SplayNode(t->item, l, r);
- if (l != 0) l->par = x;
- if (r != 0) r->par = x;
- return x;
- }
- else
- return 0;
-}
-
-int <T>SplayPQ::OK()
-{
- int v = 1;
- if (root == 0)
- v = count == 0;
- else
- {
- int n = 1;
- <T>SplayNode* trail = leftmost();
- <T>SplayNode* t = succ(trail);
- while (t != 0)
- {
- ++n;
- v &= <T>CMP(trail->item, t->item) < 0;
- trail = t;
- t = succ(t);
- }
- v &= n == count;
- }
- if (!v) error("invariant failure");
- return v;
-}
diff --git a/contrib/libg++/libg++/src/gen/SplayPQ.hP b/contrib/libg++/libg++/src/gen/SplayPQ.hP
deleted file mode 100644
index 1084892fc8f3..000000000000
--- a/contrib/libg++/libg++/src/gen/SplayPQ.hP
+++ /dev/null
@@ -1,123 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#ifndef _<T>SplayPQ_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _<T>SplayPQ_h 1
-
-#include "<T>.PQ.h"
-#include "<T>.SplayNode.h"
-
-class <T>SplayPQ : public <T>PQ
-{
-protected:
- <T>SplayNode* root;
-
- <T>SplayNode* leftmost();
- <T>SplayNode* rightmost();
- <T>SplayNode* pred(<T>SplayNode* t);
- <T>SplayNode* succ(<T>SplayNode* t);
- void _kill(<T>SplayNode* t);
- <T>SplayNode* _copy(<T>SplayNode* t);
-
-public:
- <T>SplayPQ();
- <T>SplayPQ(<T>SplayPQ& a);
- inline virtual ~<T>SplayPQ();
-
- Pix enq(<T&> item);
- <T> deq();
-
- <T>& front();
- void del_front();
-
- inline int contains(<T&> item);
-
- inline void clear();
-
- inline Pix first();
- Pix last();
- inline void next(Pix& i);
- void prev(Pix& i);
- inline <T>& operator () (Pix i);
- void del(Pix i);
- Pix seek(<T&> item);
-
- int OK(); // rep invariant
-};
-
-
-inline <T>SplayPQ::~<T>SplayPQ()
-{
- _kill(root);
-}
-
-inline <T>SplayPQ::<T>SplayPQ()
-{
- root = 0;
- count = 0;
-}
-
-inline <T>SplayPQ::<T>SplayPQ(<T>SplayPQ& b)
-{
- count = b.count;
- root = _copy(b.root);
-}
-
-inline Pix <T>SplayPQ::first()
-{
- return Pix(leftmost());
-}
-
-inline Pix <T>SplayPQ::last()
-{
- return Pix(rightmost());
-}
-
-inline void <T>SplayPQ::next(Pix& i)
-{
- if (i != 0) i = Pix(succ((<T>SplayNode*)i));
-}
-
-inline void <T>SplayPQ::prev(Pix& i)
-{
- if (i != 0) i = Pix(pred((<T>SplayNode*)i));
-}
-
-inline <T>& <T>SplayPQ::operator () (Pix i)
-{
- if (i == 0) error("null Pix");
- return ((<T>SplayNode*)i)->item;
-}
-
-inline void <T>SplayPQ::clear()
-{
- _kill(root);
- count = 0;
- root = 0;
-}
-
-inline int <T>SplayPQ::contains(<T&> key)
-{
- return seek(key) != 0;
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/gen/SplaySet.ccP b/contrib/libg++/libg++/src/gen/SplaySet.ccP
deleted file mode 100644
index ebee425dbe4b..000000000000
--- a/contrib/libg++/libg++/src/gen/SplaySet.ccP
+++ /dev/null
@@ -1,499 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <stream.h>
-#include "<T>.SplaySet.h"
-
-
-/*
-
- struct to simulate the special `null' node in the Sleater & Tarjan JACM 1985
- splay tree algorithms
-
- All routines use a version of their `simple top-down' splay alg. (p 669)
-
-*/
-
-struct _dummySplayNode
-{
- <T>SplayNode* lt;
- <T>SplayNode* rt;
- <T>SplayNode* par;
-} _dummy_null;
-
-
-/*
- traversal primitives
-*/
-
-
-<T>SplayNode* <T>SplaySet::leftmost()
-{
- <T>SplayNode* t = root;
- if (t != 0) while (t->lt != 0) t = t->lt;
- return t;
-}
-
-<T>SplayNode* <T>SplaySet::rightmost()
-{
- <T>SplayNode* t = root;
- if (t != 0) while (t->rt != 0) t = t->rt;
- return t;
-}
-
-<T>SplayNode* <T>SplaySet::succ(<T>SplayNode* t)
-{
- if (t == 0)
- return 0;
- if (t->rt != 0)
- {
- t = t->rt;
- while (t->lt != 0) t = t->lt;
- return t;
- }
- else
- {
- for (;;)
- {
- if (t->par == 0 || t == t->par->lt)
- return t->par;
- else
- t = t->par;
- }
- }
-}
-
-<T>SplayNode* <T>SplaySet::pred(<T>SplayNode* t)
-{
- if (t == 0)
- return 0;
- else if (t->lt != 0)
- {
- t = t->lt;
- while (t->rt != 0) t = t->rt;
- return t;
- }
- else
- {
- for (;;)
- {
- if (t->par == 0 || t == t->par->rt)
- return t->par;
- else
- t = t->par;
- }
- }
-}
-
-
-Pix <T>SplaySet::seek(<T&> key)
-{
- <T>SplayNode* t = root;
- if (t == 0)
- return 0;
-
- int comp = <T>CMP(key, t->item);
- if (comp == 0)
- return Pix(t);
-
- <T>SplayNode* dummy = (<T>SplayNode*)(&_dummy_null);
- <T>SplayNode* l = dummy;
- <T>SplayNode* r = dummy;
- dummy->rt = dummy->lt = dummy->par = 0;
-
- while (comp != 0)
- {
- if (comp > 0)
- {
- <T>SplayNode* tr = t->rt;
- if (tr == 0)
- break;
- else
- {
- comp = <T>CMP(key, tr->item);
- if (comp <= 0 || tr->rt == 0)
- {
- l->rt = t; t->par = l;
- l = t;
- t = tr;
- if (comp >= 0)
- break;
- }
- else
- {
- if ((t->rt = tr->lt) != 0) t->rt->par = t;
- tr->lt = t; t->par = tr;
- l->rt = tr; tr->par = l;
- l = tr;
- t = tr->rt;
- comp = <T>CMP(key, t->item);
- }
- }
- }
- else
- {
- <T>SplayNode* tl = t->lt;
- if (tl == 0)
- break;
- else
- {
- comp = <T>CMP(key, tl->item);
- if (comp >= 0 || tl->lt == 0)
- {
- r->lt = t; t->par = r;
- r = t;
- t = tl;
- if (comp <= 0)
- break;
- }
- else
- {
- if ((t->lt = tl->rt) != 0) t->lt->par = t;
- tl->rt = t; t->par = tl;
- r->lt = tl; tl->par = r;
- r = tl;
- t = tl->lt;
- comp = <T>CMP(key, t->item);
- }
- }
- }
- }
- if ((r->lt = t->rt) != 0) r->lt->par = r;
- if ((l->rt = t->lt) != 0) l->rt->par = l;
- if ((t->lt = dummy->rt) != 0) t->lt->par = t;
- if ((t->rt = dummy->lt) != 0) t->rt->par = t;
- t->par = 0;
- root = t;
- return (comp == 0) ? Pix(t) : 0;
-}
-
-
-
-Pix <T>SplaySet::add(<T&> item)
-{
- <T>SplayNode* t = root;
- if (t == 0)
- {
- ++count;
- root = new <T>SplayNode(item);
- return Pix(root);
- }
- int comp = <T>CMP(item, t->item);
- if (comp == 0)
- return Pix(t);
-
- <T>SplayNode* dummy = (<T>SplayNode*)(&_dummy_null);
- <T>SplayNode* l = dummy;
- <T>SplayNode* r = dummy;
- dummy->rt = dummy->lt = dummy->par = 0;
-
- while (comp != 0)
- {
- if (comp > 0)
- {
- <T>SplayNode* tr = t->rt;
- if (tr == 0)
- {
- ++count;
- tr = new <T>SplayNode(item);
- comp = 0;
- }
- else
- comp = <T>CMP(item, tr->item);
-
- if (comp <= 0)
- {
- l->rt = t; t->par = l;
- l = t;
- t = tr;
- }
- else
- {
- <T>SplayNode* trr = tr->rt;
- if (trr == 0)
- {
- ++count;
- trr = new <T>SplayNode(item);
- comp = 0;
- }
- else
- comp = <T>CMP(item, trr->item);
-
- if ((t->rt = tr->lt) != 0) t->rt->par = t;
- tr->lt = t; t->par = tr;
- l->rt = tr; tr->par = l;
- l = tr;
- t = trr;
- }
- }
- else
- {
- <T>SplayNode* tl = t->lt;
- if (tl == 0)
- {
- ++count;
- tl = new <T>SplayNode(item);
- comp = 0;
- }
- else
- comp = <T>CMP(item, tl->item);
-
- if (comp >= 0)
- {
- r->lt = t; t->par = r;
- r = t;
- t = tl;
- }
- else
- {
- <T>SplayNode* tll = tl->lt;
- if (tll == 0)
- {
- ++count;
- tll = new <T>SplayNode(item);
- comp = 0;
- }
- else
- comp = <T>CMP(item, tll->item);
-
- if ((t->lt = tl->rt) != 0) t->lt->par = t;
- tl->rt = t; t->par = tl;
- r->lt = tl; tl->par = r;
- r = tl;
- t = tll;
- }
- }
- }
- if ((r->lt = t->rt) != 0) r->lt->par = r;
- if ((l->rt = t->lt) != 0) l->rt->par = l;
- if ((t->lt = dummy->rt) != 0) t->lt->par = t;
- if ((t->rt = dummy->lt) != 0) t->rt->par = t;
- t->par = 0;
- root = t;
- return Pix(root);
-}
-
-void <T>SplaySet::del(<T&> key)
-{
- <T>SplayNode* t = (<T>SplayNode*)(seek(key));
- if (t == 0) return;
-
- <T>SplayNode* p = t->par;
-
- --count;
- if (t->rt == 0)
- {
- if (t == root)
- {
- if ((root = t->lt) != 0) root->par = 0;
- }
- else if (t == p->lt)
- {
- if ((p->lt = t->lt) != 0) p->lt->par = p;
- }
- else
- if ((p->rt = t->lt) != 0) p->rt->par = p;
- }
- else
- {
- <T>SplayNode* r = t->rt;
- <T>SplayNode* l = r->lt;
- for(;;)
- {
- if (l == 0)
- {
- if (t == root)
- {
- root = r;
- r->par = 0;
- }
- else if (t == p->lt)
- {
- p->lt = r;
- r->par = p;
- }
- else
- {
- p->rt = r;
- r->par = p;
- }
- if ((r->lt = t->lt) != 0) r->lt->par = r;
- break;
- }
- else
- {
- if ((r->lt = l->rt) != 0) r->lt->par = r;
- l->rt = r; r->par = l;
- r = l;
- l = l->lt;
- }
- }
- }
- delete t;
-}
-
-
-void <T>SplaySet::_kill(<T>SplayNode* t)
-{
- if (t != 0)
- {
- _kill(t->lt);
- _kill(t->rt);
- delete t;
- }
-}
-
-
-<T>SplayNode* <T>SplaySet::_copy(<T>SplayNode* t)
-{
- if (t != 0)
- {
- <T>SplayNode* l = _copy(t->lt);
- <T>SplayNode* r = _copy(t->rt);
- <T>SplayNode* x = new <T>SplayNode(t->item, l, r);
- if (l != 0) l->par = x;
- if (r != 0) r->par = x;
- return x;
- }
- else
- return 0;
-}
-
-/* relationals */
-
-int <T>SplaySet::operator == (<T>SplaySet& y)
-{
- if (count != y.count)
- return 0;
- else
- {
- <T>SplayNode* t = leftmost();
- <T>SplayNode* u = y.leftmost();
- for (;;)
- {
- if (t == 0)
- return 1;
- else if (!<T>EQ(t->item, u->item))
- return 0;
- else
- {
- t = succ(t);
- u = y.succ(u);
- }
- }
- }
-}
-
-int <T>SplaySet::operator <= (<T>SplaySet& y)
-{
- if (count > y.count)
- return 0;
- else
- {
- <T>SplayNode* t = leftmost();
- <T>SplayNode* u = y.leftmost();
- for (;;)
- {
- if (t == 0)
- return 1;
- else if (u == 0)
- return 0;
- int cmp = <T>CMP(t->item, u->item);
- if (cmp == 0)
- {
- t = succ(t);
- u = y.succ(u);
- }
- else if (cmp < 0)
- return 0;
- else
- u = y.succ(u);
- }
- }
-}
-
-
-void <T>SplaySet::operator |=(<T>SplaySet& y)
-{
- if (&y == this) return;
- <T>SplayNode* u = y.leftmost();
- while (u != 0)
- {
- add(u->item);
- u = y.succ(u);
- }
-}
-
-void <T>SplaySet::operator &= (<T>SplaySet& y)
-{
- if (y.count == 0)
- clear();
- else if (&y != this && count != 0)
- {
- <T>SplayNode* t = leftmost();
- while (t != 0)
- {
- <T>SplayNode* s = succ(t);
- if (y.seek(t->item) == 0) del(t->item);
- t = s;
- }
- }
-}
-
-
-void <T>SplaySet::operator -=(<T>SplaySet& y)
-{
- if (&y == this)
- clear();
- else if (y.count != 0)
- {
- <T>SplayNode* t = leftmost();
- while (t != 0)
- {
- <T>SplayNode* s = succ(t);
- if (y.seek(t->item) != 0) del(t->item);
- t = s;
- }
- }
-}
-
-int <T>SplaySet::OK()
-{
- int v = 1;
- if (root == 0)
- v = count == 0;
- else
- {
- int n = 1;
- <T>SplayNode* trail = leftmost();
- <T>SplayNode* t = succ(trail);
- while (t != 0)
- {
- ++n;
- v &= <T>CMP(trail->item, t->item) < 0;
- trail = t;
- t = succ(t);
- }
- v &= n == count;
- }
- if (!v) error("invariant failure");
- return v;
-}
diff --git a/contrib/libg++/libg++/src/gen/SplaySet.hP b/contrib/libg++/libg++/src/gen/SplaySet.hP
deleted file mode 100644
index e69358334818..000000000000
--- a/contrib/libg++/libg++/src/gen/SplaySet.hP
+++ /dev/null
@@ -1,145 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#ifndef _<T>SplaySet_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _<T>SplaySet_h 1
-
-#include "<T>.Set.h"
-#include "<T>.SplayNode.h"
-
-class <T>SplaySet : public <T>Set
-{
-protected:
- <T>SplayNode* root;
-
- <T>SplayNode* leftmost();
- <T>SplayNode* rightmost();
- <T>SplayNode* pred(<T>SplayNode* t);
- <T>SplayNode* succ(<T>SplayNode* t);
- void _kill(<T>SplayNode* t);
- <T>SplayNode* _copy(<T>SplayNode* t);
-
-public:
- <T>SplaySet();
- <T>SplaySet(<T>SplaySet& a);
- inline ~<T>SplaySet();
-
- Pix add(<T&> item);
- void del(<T&> item);
- inline int contains(<T&> item);
-
- inline void clear();
-
- inline Pix first();
- inline void next(Pix& i);
- inline <T>& operator () (Pix i);
- Pix seek(<T&> item);
-
- Pix last();
- void prev(Pix& i);
-
- <T>SplaySet& operator = (const <T>SplaySet& b);
- void operator |= (<T>SplaySet& b);
- void operator -= (<T>SplaySet& b);
- void operator &= (<T>SplaySet& b);
-
- int operator == (<T>SplaySet& b);
- int operator != (<T>SplaySet& b);
- int operator <= (<T>SplaySet& b);
-
- int OK();
-};
-
-
-inline <T>SplaySet::~<T>SplaySet()
-{
- _kill(root);
-}
-
-inline <T>SplaySet::<T>SplaySet()
-{
- root = 0;
- count = 0;
-}
-
-inline <T>SplaySet::<T>SplaySet(<T>SplaySet& b)
-{
- count = b.count;
- root = _copy(b.root);
-}
-
-
-inline <T>SplaySet& <T>SplaySet::operator = (const <T>SplaySet& b)
-{
- if (this != &b)
- {
- _kill (root);
- count = b.count;
- root = _copy (b.root);
- }
- return *this;
-}
-
-inline int <T>SplaySet::operator != (<T>SplaySet& b)
-{
- return ! (*this == b);
-}
-
-inline Pix <T>SplaySet::first()
-{
- return Pix(leftmost());
-}
-
-inline Pix <T>SplaySet::last()
-{
- return Pix(rightmost());
-}
-
-inline void <T>SplaySet::next(Pix& i)
-{
- if (i != 0) i = Pix(succ((<T>SplayNode*)i));
-}
-
-inline void <T>SplaySet::prev(Pix& i)
-{
- if (i != 0) i = Pix(pred((<T>SplayNode*)i));
-}
-
-inline <T>& <T>SplaySet::operator () (Pix i)
-{
- if (i == 0) error("null Pix");
- return ((<T>SplayNode*)i)->item;
-}
-
-inline void <T>SplaySet::clear()
-{
- _kill(root);
- count = 0;
- root = 0;
-}
-
-inline int <T>SplaySet::contains(<T&> key)
-{
- return seek(key) != 0;
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/gen/Stack.ccP b/contrib/libg++/libg++/src/gen/Stack.ccP
deleted file mode 100644
index efb6b8edbde5..000000000000
--- a/contrib/libg++/libg++/src/gen/Stack.ccP
+++ /dev/null
@@ -1,11 +0,0 @@
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include "<T>.Stack.h"
-
-<T>Stack::~<T>Stack() {}
-
-void <T>Stack::error(const char* msg)
-{
- (*lib_error_handler)("Stack", msg);
-}
diff --git a/contrib/libg++/libg++/src/gen/Stack.hP b/contrib/libg++/libg++/src/gen/Stack.hP
deleted file mode 100644
index 094676880fce..000000000000
--- a/contrib/libg++/libg++/src/gen/Stack.hP
+++ /dev/null
@@ -1,51 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#ifndef _<T>Stack_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _<T>Stack_h
-
-#include <builtin.h>
-
-#include "<T>.defs.h"
-
-class <T>Stack
-{
-public:
- <T>Stack() { }
- virtual ~<T>Stack();
-
- virtual void push(<T&> item) = 0;
- virtual <T> pop() = 0;
- virtual <T>& top() = 0;
- virtual void del_top() = 0;
-
- virtual int empty() = 0;
- virtual int full() = 0;
- virtual int length() = 0;
-
- virtual void clear() = 0;
-
- void error(const char*);
- virtual int OK() = 0;
-};
-
-#endif
diff --git a/contrib/libg++/libg++/src/gen/VHBag.ccP b/contrib/libg++/libg++/src/gen/VHBag.ccP
deleted file mode 100644
index daa8313beae6..000000000000
--- a/contrib/libg++/libg++/src/gen/VHBag.ccP
+++ /dev/null
@@ -1,264 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include "<T>.VHBag.h"
-
-/* codes for status fields */
-
-#define EMPTYCELL 0
-#define VALIDCELL 1
-#define DELETEDCELL 2
-
-
-<T>VHBag::<T>VHBag(unsigned int sz)
-{
- tab = new <T>[size = sz];
- status = new char[size];
- for (unsigned int i = 0; i < size; ++i) status[i] = EMPTYCELL;
- count = 0;
-}
-
-<T>VHBag::<T>VHBag(<T>VHBag& a)
-{
- tab = new <T>[size = a.size];
- status = new char[size];
- for (unsigned int i = 0; i < size; ++i) status[i] = EMPTYCELL;
- count = 0;
- for (Pix p = a.first(); p; a.next(p)) add(a(p));
-}
-
-
-/*
- * hashing method: double hash based on high bits of hash fct,
- * followed by linear probe. Can't do too much better if table
- * sizes not constrained to be prime.
-*/
-
-
-static inline unsigned int doublehashinc(unsigned int h, unsigned int s)
-{
- unsigned int dh = ((h / s) % s);
- return (dh > 1)? dh : 1;
-}
-
-Pix <T>VHBag::seek(<T&> key, Pix p)
-{
- <T>* t = (<T>*) p;
- if (t == 0 || !<T>EQ(*t, key))
- {
- unsigned int hashval = <T>HASH(key);
- unsigned int h = hashval % size;
- for (unsigned int i = 0; i <= size; ++i)
- {
- if (status[h] == EMPTYCELL)
- return 0;
- else if (status[h] == VALIDCELL && <T>EQ(key, tab[h]))
- return Pix(&tab[h]);
- if (i == 0)
- h = (h + doublehashinc(hashval, size)) % size;
- else if (++h >= size)
- h -= size;
- }
- return 0;
- }
- else
- {
- int seent = 0;
- unsigned int hashval = <T>HASH(key);
- unsigned int h = hashval % size;
- for (unsigned int i = 0; i <= size; ++i)
- {
- if (status[h] == EMPTYCELL)
- return 0;
- else if (&tab[h] == t)
- seent = 1;
- else if (seent && status[h] == VALIDCELL && <T>EQ(key, tab[h]))
- return Pix(&tab[h]);
- if (i == 0)
- h = (h + doublehashinc(hashval, size)) % size;
- else if (++h >= size)
- h -= size;
- }
- return 0;
- }
-}
-
-int <T>VHBag::nof(<T&> item)
-{
- int n = 0;
- unsigned int hashval = <T>HASH(item);
- unsigned int h = hashval % size;
- unsigned int firsth = size;
- for (unsigned int i = 0; i <= size; ++i)
- {
- if (status[h] == EMPTYCELL)
- return n;
- else if (h != firsth && status[h] == VALIDCELL && <T>EQ(item, tab[h]))
- {
- ++n;
- if (firsth >= size)
- firsth = h;
- }
- if (i == 0)
- h = (h + doublehashinc(hashval, size)) % size;
- else if (++h >= size)
- h -= size;
- }
- return n;
-}
-
-
-Pix <T>VHBag::add(<T&> item)
-{
- if (HASHTABLE_TOO_CROWDED(count, size))
- resize();
- unsigned int bestspot = size;
- unsigned int hashval = <T>HASH(item);
- unsigned int h = hashval % size;
- for (unsigned int i = 0; i <= size; ++i)
- {
- if (status[h] == EMPTYCELL)
- {
- if (bestspot >= size) bestspot = h;
- tab[bestspot] = item;
- status[bestspot] = VALIDCELL;
- ++count;
- return Pix(&tab[bestspot]);
- }
- else if (status[h] == DELETEDCELL)
- {
- if (bestspot >= size) bestspot = h;
- }
-
- if (i == 0)
- h = (h + doublehashinc(hashval, size)) % size;
- else if (++h >= size)
- h -= size;
- }
- tab[bestspot] = item;
- status[bestspot] = VALIDCELL;
- ++count;
- return Pix(&tab[bestspot]);
-}
-
-
-void <T>VHBag::del(<T&> key)
-{
- unsigned int hashval = <T>HASH(key);
- unsigned int h = hashval % size;
- for (unsigned int i = 0; i <= size; ++i)
- {
- if (status[h] == EMPTYCELL)
- return;
- else if (status[h] == VALIDCELL && <T>EQ(key, tab[h]))
- {
- status[h] = DELETEDCELL;
- --count;
- return;
- }
- if (i == 0)
- h = (h + doublehashinc(hashval, size)) % size;
- else if (++h >= size)
- h -= size;
- }
-}
-
-void <T>VHBag::remove(<T&> key)
-{
- unsigned int hashval = <T>HASH(key);
- unsigned int h = hashval % size;
- for (unsigned int i = 0; i <= size; ++i)
- {
- if (status[h] == EMPTYCELL)
- return;
- else if (status[h] == VALIDCELL && <T>EQ(key, tab[h]))
- {
- status[h] = DELETEDCELL;
- --count;
- }
- if (i == 0)
- h = (h + doublehashinc(hashval, size)) % size;
- else if (++h >= size)
- h -= size;
- }
-}
-
-void <T>VHBag::clear()
-{
- for (unsigned int i = 0; i < size; ++i) status[i] = EMPTYCELL;
- count = 0;
-}
-
-void <T>VHBag::resize(unsigned int newsize)
-{
- if (newsize <= count)
- {
- newsize = DEFAULT_INITIAL_CAPACITY;
- while (HASHTABLE_TOO_CROWDED(count, newsize)) newsize <<= 1;
- }
- <T>* oldtab = tab;
- char* oldstatus = status;
- unsigned int oldsize = size;
- tab = new <T>[size = newsize];
- status = new char[size];
- for (unsigned int i = 0; i < size; ++i) status[i] = EMPTYCELL;
- count = 0;
- for (unsigned int i = 0; i < oldsize; ++i) if (oldstatus[i] == VALIDCELL) add(oldtab[i]);
- delete [] oldtab;
- delete oldstatus;
-}
-
-Pix <T>VHBag::first()
-{
- for (unsigned int pos = 0; pos < size; ++pos)
- if (status[pos] == VALIDCELL) return Pix(&tab[pos]);
- return 0;
-}
-
-void <T>VHBag::next(Pix& i)
-{
- if (i == 0) return;
- unsigned int pos = ((unsigned)i - (unsigned)tab) / sizeof(<T>) + 1;
- for (; pos < size; ++pos)
- if (status[pos] == VALIDCELL)
- {
- i = Pix(&tab[pos]);
- return;
- }
- i = 0;
-}
-
-
-int <T>VHBag::OK()
-{
- int v = tab != 0;
- v &= status != 0;
- int n = 0;
- for (unsigned int i = 0; i < size; ++i)
- {
- if (status[i] == VALIDCELL) ++n;
- else if (status[i] != DELETEDCELL && status[i] != EMPTYCELL)
- v = 0;
- }
- v &= n == count;
- if (!v) error("invariant failure");
- return v;
-}
diff --git a/contrib/libg++/libg++/src/gen/VHBag.hP b/contrib/libg++/libg++/src/gen/VHBag.hP
deleted file mode 100644
index 7a7cc32e4684..000000000000
--- a/contrib/libg++/libg++/src/gen/VHBag.hP
+++ /dev/null
@@ -1,84 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#ifndef _<T>VHBag_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _<T>VHBag_h 1
-
-#include "<T>.Bag.h"
-
-
-class <T>VHBag : public <T>Bag
-{
-protected:
- <T>* tab;
- char* status;
- unsigned int size;
-
-public:
- <T>VHBag(unsigned int sz = DEFAULT_INITIAL_CAPACITY);
- <T>VHBag(<T>VHBag& a);
- inline ~<T>VHBag();
-
- Pix add(<T&> item);
- void del(<T&> item);
- void remove(<T&>item);
- int nof(<T&> item);
- inline int contains(<T&> item);
-
- void clear();
-
- Pix first();
- void next(Pix& i);
- inline <T>& operator () (Pix i);
- Pix seek(<T&> item, Pix from = 0);
-
- int capacity();
- void resize(unsigned int newsize = 0);
-
- int OK();
-};
-
-
-inline <T>VHBag::~<T>VHBag()
-{
- delete [] tab;
- delete status;
-}
-
-
-inline int <T>VHBag::capacity()
-{
- return size;
-}
-
-inline int <T>VHBag::contains(<T&> key)
-{
- return seek(key) != 0;
-}
-
-inline <T>& <T>VHBag::operator () (Pix i)
-{
- if (i == 0) error("null Pix");
- return *((<T>*)i);
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/gen/VHMap.ccP b/contrib/libg++/libg++/src/gen/VHMap.ccP
deleted file mode 100644
index a24be1e5bfa0..000000000000
--- a/contrib/libg++/libg++/src/gen/VHMap.ccP
+++ /dev/null
@@ -1,210 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include "<T>.<C>.VHMap.h"
-
-/* codes for status fields */
-
-#define EMPTYCELL 0
-#define VALIDCELL 1
-#define DELETEDCELL 2
-
-
-<T><C>VHMap::<T><C>VHMap(<C&> dflt, unsigned int sz)
- :<T><C>Map(dflt)
-{
- tab = new <T>[size = sz];
- cont = new <C>[size];
- status = new char[size];
- for (unsigned int i = 0; i < size; ++i) status[i] = EMPTYCELL;
-}
-
-<T><C>VHMap::<T><C>VHMap(<T><C>VHMap& a) : <T><C>Map(a.def)
-{
- tab = new <T>[size = a.size];
- cont = new <C>[size];
- status = new char[size];
- for (unsigned int i = 0; i < size; ++i) status[i] = EMPTYCELL;
- count = 0;
- for (Pix p = a.first(); p; a.next(p)) (*this)[a.key(p)] = a.contents(p);
-}
-
-
-/*
- * hashing method: double hash based on high bits of hash fct,
- * followed by linear probe. Can't do too much better if table
- * sizes not constrained to be prime.
-*/
-
-
-static inline unsigned int doublehashinc(unsigned int h, unsigned int s)
-{
- unsigned int dh = ((h / s) % s);
- return (dh > 1)? dh : 1;
-}
-
-Pix <T><C>VHMap::seek(<T&> key)
-{
- unsigned int hashval = <T>HASH(key);
- unsigned int h = hashval % size;
- for (unsigned int i = 0; i <= size; ++i)
- {
- if (status[h] == EMPTYCELL)
- return 0;
- else if (status[h] == VALIDCELL && <T>EQ(key, tab[h]))
- return Pix(&tab[h]);
- if (i == 0)
- h = (h + doublehashinc(hashval, size)) % size;
- else if (++h >= size)
- h -= size;
- }
- return 0;
-}
-
-
-<C>& <T><C>VHMap::operator [](<T&> item)
-{
- if (HASHTABLE_TOO_CROWDED(count, size))
- resize();
-
- unsigned int bestspot = size;
- unsigned int hashval = <T>HASH(item);
- unsigned int h = hashval % size;
- for (unsigned int i = 0; i <= size; ++i)
- {
- if (status[h] == EMPTYCELL)
- {
- ++count;
- if (bestspot >= size) bestspot = h;
- tab[bestspot] = item;
- status[bestspot] = VALIDCELL;
- cont[bestspot] = def;
- return cont[bestspot];
- }
- else if (status[h] == DELETEDCELL)
- {
- if (bestspot >= size) bestspot = h;
- }
- else if (<T>EQ(tab[h],item))
- return cont[h];
-
- if (i == 0)
- h = (h + doublehashinc(hashval, size)) % size;
- else if (++h >= size)
- h -= size;
- }
-
- ++count;
- status[bestspot] = VALIDCELL;
- tab[bestspot] = item;
- cont[bestspot] = def;
- return cont[bestspot];
-}
-
-
-void <T><C>VHMap::del(<T&> key)
-{
- unsigned int hashval = <T>HASH(key);
- unsigned int h = hashval % size;
- for (unsigned int i = 0; i <= size; ++i)
- {
- if (status[h] == EMPTYCELL)
- return;
- else if (status[h] == VALIDCELL && <T>EQ(key, tab[h]))
- {
- status[h] = DELETEDCELL;
- --count;
- return;
- }
- if (i == 0)
- h = (h + doublehashinc(hashval, size)) % size;
- else if (++h >= size)
- h -= size;
- }
-}
-
-
-void <T><C>VHMap::clear()
-{
- for (unsigned int i = 0; i < size; ++i) status[i] = EMPTYCELL;
- count = 0;
-}
-
-void <T><C>VHMap::resize(unsigned int newsize)
-{
- if (newsize <= count)
- {
- newsize = DEFAULT_INITIAL_CAPACITY;
- while (HASHTABLE_TOO_CROWDED(count, newsize)) newsize <<= 1;
- }
- <T>* oldtab = tab;
- <C>* oldcont = cont;
- char* oldstatus = status;
- unsigned int oldsize = size;
- tab = new <T>[size = newsize];
- cont = new <C>[size];
- status = new char[size];
- for (unsigned int i = 0; i < size; ++i) status[i] = EMPTYCELL;
- count = 0;
- for (unsigned int i = 0; i < oldsize; ++i)
- if (oldstatus[i] == VALIDCELL)
- (*this)[oldtab[i]] = oldcont[i];
- delete [] oldtab;
- delete [] oldcont;
- delete [] oldstatus;
-}
-
-Pix <T><C>VHMap::first()
-{
- for (unsigned int pos = 0; pos < size; ++pos)
- if (status[pos] == VALIDCELL) return Pix(&tab[pos]);
- return 0;
-}
-
-void <T><C>VHMap::next(Pix& i)
-{
- if (i == 0) return;
- unsigned int pos = ((unsigned)i - (unsigned)tab) / sizeof(<T>) + 1;
- for (; pos < size; ++pos)
- if (status[pos] == VALIDCELL)
- {
- i = Pix(&tab[pos]);
- return;
- }
- i = 0;
-}
-
-
-int <T><C>VHMap::OK()
-{
- int v = tab != 0;
- v &= status != 0;
- int n = 0;
- for (unsigned int i = 0; i < size; ++i)
- {
- if (status[i] == VALIDCELL) ++n;
- else if (status[i] != DELETEDCELL && status[i] != EMPTYCELL)
- v = 0;
- }
- v &= n == count;
- if (!v) error("invariant failure");
- return v;
-}
diff --git a/contrib/libg++/libg++/src/gen/VHMap.hP b/contrib/libg++/libg++/src/gen/VHMap.hP
deleted file mode 100644
index ccc9328bcbae..000000000000
--- a/contrib/libg++/libg++/src/gen/VHMap.hP
+++ /dev/null
@@ -1,84 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#ifndef _<T><C>VHMap_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _<T><C>VHMap_h 1
-
-#include "<T>.<C>.Map.h"
-
-
-class <T><C>VHMap : public <T><C>Map
-{
-protected:
- <T>* tab;
- <C>* cont;
- char* status;
- unsigned int size;
-
-public:
- <T><C>VHMap(<C&> dflt,unsigned int sz=DEFAULT_INITIAL_CAPACITY);
- <T><C>VHMap(<T><C>VHMap& a);
- inline ~<T><C>VHMap();
-
- <C>& operator [] (<T&> key);
-
- void del(<T&> key);
-
- Pix first();
- void next(Pix& i);
- inline <T>& key(Pix i);
- inline <C>& contents(Pix i);
-
- Pix seek(<T&> key);
- inline int contains(<T&> key);
-
- void clear();
- void resize(unsigned int newsize = 0);
-
- int OK();
-};
-
-inline <T><C>VHMap::~<T><C>VHMap()
-{
- delete [] tab;
- delete [] cont;
- delete [] status;
-}
-
-inline int <T><C>VHMap::contains(<T&> key)
-{
- return seek(key) != 0;
-}
-
-inline <T>& <T><C>VHMap::key(Pix i)
-{
- if (i == 0) error("null Pix");
- return *((<T>*)i);
-}
-
-inline <C>& <T><C>VHMap::contents(Pix i)
-{
- if (i == 0) error("null Pix");
- return cont[((unsigned)(i) - (unsigned)(tab)) / sizeof(<T>)];
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/gen/VHSet.ccP b/contrib/libg++/libg++/src/gen/VHSet.ccP
deleted file mode 100644
index 414a7288207f..000000000000
--- a/contrib/libg++/libg++/src/gen/VHSet.ccP
+++ /dev/null
@@ -1,263 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include "<T>.VHSet.h"
-
-/* codes for status fields */
-
-#define EMPTYCELL 0
-#define VALIDCELL 1
-#define DELETEDCELL 2
-
-
-<T>VHSet::<T>VHSet(unsigned int sz)
-{
- tab = new <T>[size = sz];
- status = new char[size];
- for (unsigned int i = 0; i < size; ++i) status[i] = EMPTYCELL;
- count = 0;
-}
-
-<T>VHSet::<T>VHSet(<T>VHSet& a)
-{
- tab = new <T>[size = a.size];
- status = new char[size];
- for (unsigned int i = 0; i < size; ++i) status[i] = EMPTYCELL;
- count = 0;
- for (Pix p = a.first(); p; a.next(p)) add(a(p));
-}
-
-
-/*
- * hashing method: double hash based on high bits of hash fct,
- * followed by linear probe. Can't do too much better if table
- * sizes not constrained to be prime.
-*/
-
-
-static inline unsigned int doublehashinc(unsigned int h, unsigned int s)
-{
- unsigned int dh = ((h / s) % s);
- return (dh > 1)? dh : 1;
-}
-
-Pix <T>VHSet::seek(<T&> key)
-{
- unsigned int hashval = <T>HASH(key);
- unsigned int h = hashval % size;
- for (unsigned int i = 0; i <= size; ++i)
- {
- if (status[h] == EMPTYCELL)
- return 0;
- else if (status[h] == VALIDCELL && <T>EQ(key, tab[h]))
- return Pix(&tab[h]);
- if (i == 0)
- h = (h + doublehashinc(hashval, size)) % size;
- else if (++h >= size)
- h -= size;
- }
- return 0;
-}
-
-
-Pix <T>VHSet::add(<T&> item)
-{
- if (HASHTABLE_TOO_CROWDED(count, size))
- resize();
-
- unsigned int bestspot = size;
- unsigned int hashval = <T>HASH(item);
- unsigned int h = hashval % size;
- for (unsigned int i = 0; i <= size; ++i)
- {
- if (status[h] == EMPTYCELL)
- {
- if (bestspot >= size) bestspot = h;
- tab[bestspot] = item;
- status[bestspot] = VALIDCELL;
- ++count;
- return Pix(&tab[bestspot]);
- }
- else if (status[h] == DELETEDCELL)
- {
- if (bestspot >= size) bestspot = h;
- }
- else if (<T>EQ(tab[h],item))
- return Pix(&tab[h]);
-
- if (i == 0)
- h = (h + doublehashinc(hashval, size)) % size;
- else if (++h >= size)
- h -= size;
- }
- tab[bestspot] = item;
- status[bestspot] = VALIDCELL;
- ++count;
- return Pix(&tab[bestspot]);
-
-}
-
-
-void <T>VHSet::del(<T&> key)
-{
- unsigned int hashval = <T>HASH(key);
- unsigned int h = hashval % size;
- for (unsigned int i = 0; i <= size; ++i)
- {
- if (status[h] == EMPTYCELL)
- return;
- else if (status[h] == VALIDCELL && <T>EQ(key, tab[h]))
- {
- status[h] = DELETEDCELL;
- --count;
- return;
- }
- if (i == 0)
- h = (h + doublehashinc(hashval, size)) % size;
- else if (++h >= size)
- h -= size;
- }
-}
-
-
-void <T>VHSet::clear()
-{
- for (unsigned int i = 0; i < size; ++i) status[i] = EMPTYCELL;
- count = 0;
-}
-
-void <T>VHSet::resize(unsigned int newsize)
-{
- if (newsize <= count)
- {
- newsize = DEFAULT_INITIAL_CAPACITY;
- while (HASHTABLE_TOO_CROWDED(count, newsize)) newsize <<= 1;
- }
- <T>* oldtab = tab;
- char* oldstatus = status;
- unsigned int oldsize = size;
- tab = new <T>[size = newsize];
- status = new char[size];
- for (unsigned int i = 0; i < size; ++i) status[i] = EMPTYCELL;
- count = 0;
- for (unsigned int i = 0; i < oldsize; ++i) if (oldstatus[i] == VALIDCELL) add(oldtab[i]);
- delete [] oldtab;
- delete oldstatus;
-}
-
-Pix <T>VHSet::first()
-{
- for (unsigned int pos = 0; pos < size; ++pos)
- if (status[pos] == VALIDCELL) return Pix(&tab[pos]);
- return 0;
-}
-
-void <T>VHSet::next(Pix& i)
-{
- if (i == 0) return;
- unsigned int pos = ((unsigned)i - (unsigned)tab) / sizeof(<T>) + 1;
- for (; pos < size; ++pos)
- if (status[pos] == VALIDCELL)
- {
- i = Pix(&tab[pos]);
- return;
- }
- i = 0;
-}
-
-int <T>VHSet:: operator == (<T>VHSet& b)
-{
- if (count != b.count)
- return 0;
- else
- {
- for (unsigned int i = 0; i < size; ++i)
- if (status[i] == VALIDCELL && b.seek(tab[i]) == 0)
- return 0;
- for (unsigned int i = 0; i < b.size; ++i)
- if (b.status[i] == VALIDCELL && seek(b.tab[i]) == 0)
- return 0;
- return 1;
- }
-}
-
-int <T>VHSet::operator <= (<T>VHSet& b)
-{
- if (count > b.count)
- return 0;
- else
- {
- for (unsigned int i = 0; i < size; ++i)
- if (status[i] == VALIDCELL && b.seek(tab[i]) == 0)
- return 0;
- return 1;
- }
-}
-
-void <T>VHSet::operator |= (<T>VHSet& b)
-{
- if (&b == this || b.count == 0)
- return;
- for (unsigned int i = 0; i < b.size; ++i)
- if (b.status[i] == VALIDCELL) add(b.tab[i]);
-}
-
-void <T>VHSet::operator &= (<T>VHSet& b)
-{
- if (&b == this || count == 0)
- return;
- for (unsigned int i = 0; i < size; ++i)
- {
- if (status[i] == VALIDCELL && b.seek(tab[i]) == 0)
- {
- status[i] = DELETEDCELL;
- --count;
- }
- }
-}
-
-void <T>VHSet::operator -= (<T>VHSet& b)
-{
- for (unsigned int i = 0; i < size; ++i)
- {
- if (status[i] == VALIDCELL && b.seek(tab[i]) != 0)
- {
- status[i] = DELETEDCELL;
- --count;
- }
- }
-}
-
-int <T>VHSet::OK()
-{
- int v = tab != 0;
- v &= status != 0;
- int n = 0;
- for (unsigned int i = 0; i < size; ++i)
- {
- if (status[i] == VALIDCELL) ++n;
- else if (status[i] != DELETEDCELL && status[i] != EMPTYCELL)
- v = 0;
- }
- v &= n == count;
- if (!v) error("invariant failure");
- return v;
-}
diff --git a/contrib/libg++/libg++/src/gen/VHSet.hP b/contrib/libg++/libg++/src/gen/VHSet.hP
deleted file mode 100644
index e7180b320203..000000000000
--- a/contrib/libg++/libg++/src/gen/VHSet.hP
+++ /dev/null
@@ -1,96 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#ifndef _<T>VHSet_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _<T>VHSet_h 1
-
-#include "<T>.Set.h"
-
-
-
-class <T>VHSet : public <T>Set
-{
-protected:
- <T>* tab;
- char* status;
- unsigned int size;
-
-public:
- <T>VHSet(unsigned int sz = DEFAULT_INITIAL_CAPACITY);
- <T>VHSet(<T>VHSet& a);
- inline ~<T>VHSet();
-
- Pix add(<T&> item);
- void del(<T&> item);
- inline int contains(<T&> item);
-
- void clear();
-
- Pix first();
- void next(Pix& i);
- inline <T>& operator () (Pix i);
- Pix seek(<T&> item);
-
- void operator |= (<T>VHSet& b);
- void operator -= (<T>VHSet& b);
- void operator &= (<T>VHSet& b);
-
- int operator == (<T>VHSet& b);
- int operator != (<T>VHSet& b);
- int operator <= (<T>VHSet& b);
-
- int capacity();
- void resize(unsigned int newsize = 0);
-
- int OK();
-};
-
-
-inline <T>VHSet::~<T>VHSet()
-{
- delete [] tab;
- delete status;
-}
-
-
-inline int <T>VHSet::capacity()
-{
- return size;
-}
-
-inline int <T>VHSet::contains(<T&> key)
-{
- return seek(key) != 0;
-}
-
-inline <T>& <T>VHSet::operator () (Pix i)
-{
- if (i == 0) error("null Pix");
- return *((<T>*)i);
-}
-
-inline int <T>VHSet::operator != (<T>VHSet& b)
-{
- return ! ((*this) == b);
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/gen/VOHSet.ccP b/contrib/libg++/libg++/src/gen/VOHSet.ccP
deleted file mode 100644
index 252fdcb4c5bd..000000000000
--- a/contrib/libg++/libg++/src/gen/VOHSet.ccP
+++ /dev/null
@@ -1,305 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
- based on code by Doug Schmidt
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <stream.h>
-#include "<T>.VOHSet.h"
-
-
-/* codes for status fields */
-#define EMPTYCELL 0
-#define VALIDCELL 1
-#define DELETEDCELL 2
-
-
-<T>VOHSet::<T>VOHSet(int sz)
-{
-// The size of the hash table is always the smallest power of 2 >= the size
-// indicated by the user. This allows several optimizations, including
-// the use of actual double hashing and elimination of the mod instruction.
-
- size = 1;
- while (size < sz) size <<= 1;
- tab = new <T>[size];
- status = new char[size];
- for (int i = 0; i < size; ++i) status[i] = EMPTYCELL;
- count = cnt = 0;
-}
-
-<T>VOHSet::<T>VOHSet(<T>VOHSet& a)
-{
- tab = new <T>[size = a.size];
- status = new char[size];
- for (int i = 0; i < size; ++i) status[i] = EMPTYCELL;
- count = cnt = 0;
- for (Pix p = a.first(); p; a.next(p)) add(a(p));
-}
-
-Pix <T>VOHSet::seek(<T&> key)
-{
-// Uses ordered double hashing to perform a search of the table.
-// This greatly speeds up the average-case time for an unsuccessful search.
-
- unsigned hashval = <T>HASH(key);
-
- // We can avoid the mod operation since size is a power of 2.
- unsigned h = hashval & (size - 1);
-
- // The increment must be odd, since all odd numbers are relatively
- // prime to a power of 2!!
- unsigned inc = ((((hashval / size) << 1) + 1) & (size - 1));
-
- // There is always at least 1 empty cell, so this loop is guaranteed to halt!
- while (status[h] != EMPTYCELL)
- {
- int cmp = <T>CMP (key, tab[h]);
- if (cmp == 0)
- {
- if (status[h] == VALIDCELL)
- return Pix(&tab[h]);
- else
- return 0;
- }
- else if (cmp < 0)
- return 0;
- else
- h = ((h + inc) & (size - 1));
- }
- return 0;
-}
-
-// This adds an item if it doesn't already exist. By performing the initial
-// comparison we assure that the table always contains at least 1 empty
-// spot. This speeds up later searching by a constant factor.
-// The insertion algorithm uses ordered double hashing. See Standish's
-// 1980 ``Data Structure's Techniques'' book for details.
-
-Pix <T>VOHSet::add(<T&> x)
-{
- if (size <= cnt+1)
- resize();
-
- unsigned hashval = <T>HASH(x);
- unsigned h = hashval & (size - 1);
-
- if (status[h] != VALIDCELL) // save some work if possible
- {
- if (status[h] == EMPTYCELL)
- cnt++;
- count++;
- tab[h] = x;
- status[h] = VALIDCELL;
- return Pix(&tab[h]);
- }
-
- <T> item = x;
- Pix mypix = 0;
- unsigned inc = ((((hashval / size) << 1) + 1) & (size - 1));
-
- for (;;)
- {
- if (status[h] != VALIDCELL)
- {
- if (status[h] == EMPTYCELL)
- cnt++;
- count++;
- tab[h] = item;
- status[h] = VALIDCELL;
- return (mypix == 0)? Pix(&tab[h]) : mypix;
- }
- int cmp = <T>CMP(item, tab[h]);
- if (cmp == 0)
- return (mypix == 0)? Pix(&tab[h]) : mypix;
- else if (cmp < 0)
- {
- <T> temp = tab[h];
- tab[h] = item;
- item = temp;
- if (mypix == 0) mypix = Pix(&tab[h]);
- hashval = <T>HASH(item);
- h = hashval & (size - 1);
- inc = ((((hashval / size) << 1) + 1) & (size - 1));
- }
- else
- h = ((h + inc) & (size - 1));
- }
-}
-
-
-void <T>VOHSet::del(<T&> key)
-{
-// This performs a deletion by marking the item's status field.
-// Note that we only decrease the count, *not* the cnt, since this
-// would cause trouble for subsequent steps in the algorithm. See
-// Reingold and Hanson's ``Data Structure's'' book for a justification
-// of this approach.
-
- unsigned hashval = <T>HASH(key);
- unsigned h = hashval & (size - 1);
- unsigned inc = ((((hashval / size) << 1) + 1) & (size - 1));
-
- while (status[h] != EMPTYCELL)
- {
- int cmp = <T>CMP(key, tab[h]);
- if (cmp > 0)
- h = ((h + inc) & (size - 1));
- else if (status[h] == VALIDCELL && cmp == 0)
- {
- status[h] = DELETEDCELL;
- count--;
- return;
- }
- else
- return;
- }
-}
-
-void <T>VOHSet::clear()
-{
- for (int i = 0; i < size; ++i) status[i] = EMPTYCELL;
- count = cnt = 0;
-}
-
-void <T>VOHSet::resize(int newsize)
-{
- if (newsize <= count)
- newsize = count;
- int s = 1;
- while (s <= newsize) s <<= 1;
- newsize = s;
-
- <T>* oldtab = tab;
- char* oldstatus = status;
- int oldsize = size;
- tab = new <T>[size = newsize];
- status = new char[size];
- for (int i = 0; i < size; ++i) status[i] = EMPTYCELL;
- count = cnt = 0;
-
- for (int i = 0; i < oldsize; ++i) if (oldstatus[i] == VALIDCELL) add(oldtab[i]);
- delete [] oldtab;
- delete oldstatus;
-}
-
-Pix <T>VOHSet::first()
-{
- for (int pos = 0; pos < size; ++pos)
- if (status[pos] == VALIDCELL) return Pix(&tab[pos]);
- return 0;
-}
-
-void <T>VOHSet::next(Pix& i)
-{
- if (i == 0) return;
- int pos = ((unsigned)i - (unsigned)tab) / sizeof(<T>) + 1;
- for (; pos < size; ++pos)
- if (status[pos] == VALIDCELL)
- {
- i = Pix(&tab[pos]);
- return;
- }
- i = 0;
-}
-
-
-int <T>VOHSet:: operator == (<T>VOHSet& b)
-{
- if (count != b.count)
- return 0;
- else
- {
- for (int i = 0; i < size; ++i)
- if (status[i] == VALIDCELL && b.seek(tab[i]) == 0)
- return 0;
- for (int i = 0; i < b.size; ++i)
- if (b.status[i] == VALIDCELL && seek(b.tab[i]) == 0)
- return 0;
- return 1;
- }
-}
-
-int <T>VOHSet:: operator != (<T>VOHSet& b)
-{
- return !(*this == b);
-}
-
-int <T>VOHSet::operator <= (<T>VOHSet& b)
-{
- if (count > b.count)
- return 0;
- else
- {
- for (int i = 0; i < size; ++i)
- if (status[i] == VALIDCELL && b.seek(tab[i]) == 0)
- return 0;
- return 1;
- }
-}
-
-void <T>VOHSet::operator |= (<T>VOHSet& b)
-{
- if (&b == this || b.count == 0)
- return;
- for (int i = 0; i < b.size; ++i)
- if (b.status[i] == VALIDCELL) add(b.tab[i]);
-}
-
-void <T>VOHSet::operator &= (<T>VOHSet& b)
-{
- if (&b == this || count == 0)
- return;
- for (int i = 0; i < size; ++i)
- {
- if (status[i] == VALIDCELL && b.seek(tab[i]) == 0)
- {
- status[i] = DELETEDCELL;
- --count;
- }
- }
-}
-
-void <T>VOHSet::operator -= (<T>VOHSet& b)
-{
- for (int i = 0; i < size; ++i)
- {
- if (status[i] == VALIDCELL && b.seek(tab[i]) != 0)
- {
- status[i] = DELETEDCELL;
- --count;
- }
- }
-}
-
-int <T>VOHSet::OK()
-{
- int v = tab != 0;
- v &= status != 0;
- int n = 0;
- for (int i = 0; i < size; ++i)
- {
- if (status[i] == VALIDCELL) ++n;
- else if (status[i] != DELETEDCELL && status[i] != EMPTYCELL)
- v = 0;
- }
- v &= n == count;
- if (!v) error("invariant failure");
- return v;
-}
diff --git a/contrib/libg++/libg++/src/gen/VOHSet.hP b/contrib/libg++/libg++/src/gen/VOHSet.hP
deleted file mode 100644
index a3ff2c814824..000000000000
--- a/contrib/libg++/libg++/src/gen/VOHSet.hP
+++ /dev/null
@@ -1,88 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
- based on code by Doug Schmidt
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#ifndef _<T>VOHSet_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _<T>VOHSet_h 1
-
-#include "<T>.Set.h"
-
-
-
-class <T>VOHSet : public <T>Set
-{
- <T>* tab;
- char* status;
- int size;
- int cnt; // keeps track of VALIDCELLs and DELETEDCELLs
-
-public:
- <T>VOHSet(int sz = DEFAULT_INITIAL_CAPACITY);
- <T>VOHSet(<T>VOHSet&);
- inline ~<T>VOHSet();
-
- Pix add(<T&> item);
- void del(<T&> item);
- inline int contains(<T&> item);
-
- void clear();
-
- Pix first();
- void next(Pix& i);
- inline <T>& operator () (Pix i);
- Pix seek(<T&> item);
-
- void operator |= (<T>VOHSet& b);
- void operator -= (<T>VOHSet& b);
- void operator &= (<T>VOHSet& b);
-
- int operator == (<T>VOHSet& b);
- int operator != (<T>VOHSet& b);
- int operator <= (<T>VOHSet& b);
-
- int capacity();
- void resize(int newsize = 0);
-
- int OK();
-};
-
-
-inline <T>VOHSet::~<T>VOHSet()
-{
- delete [] tab;
- delete status;
-}
-
-
-inline int <T>VOHSet::contains(<T&> key)
-{
- return seek(key) != 0;
-}
-
-
-inline <T>& <T>VOHSet::operator () (Pix p)
-{
- if (p == 0) error("null Pix");
- return *((<T>*)p);
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/gen/VQueue.ccP b/contrib/libg++/libg++/src/gen/VQueue.ccP
deleted file mode 100644
index 8eca22d17142..000000000000
--- a/contrib/libg++/libg++/src/gen/VQueue.ccP
+++ /dev/null
@@ -1,83 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <stream.h>
-#include "<T>.VQueue.h"
-
-<T>VQueue::<T>VQueue(<T>VQueue& b)
-:size(b.size), cnt(b.cnt), inp(b.inp), outp(b.outp), s(new <T> [b.size])
-{
- int j = outp;
- for (int i = 0; i < cnt; ++i)
- {
- s[j] = b.s[j];
- if (++j == size) j = 0;
- }
-}
-
-void <T>VQueue::operator = (<T>VQueue& b)
-{
- if (&b == this) return;
- if (size != b.size)
- {
- delete [] s;
- s = new <T> [b.size];
- size = b.size;
- }
- inp = b.inp; outp = b.outp; cnt = b.cnt;
- int j = outp;
- for (int i = 0; i < cnt; ++i)
- {
- s[j] = b.s[j];
- if (++j == size) j = 0;
- }
-}
-
-
-void <T>VQueue::resize(int newsz)
-{
- if (newsz < cnt)
- error("resize: new size too small");
- <T>* news = new <T> [newsz];
- int j = outp;
- for (int i = 0; i < cnt; ++i)
- {
- news[i] = s[j];
- if (++j == size) j = 0;
- }
- inp = cnt;
- outp = 0;
- delete [] s;
- s = news;
- size = newsz;
-}
-
-int <T>VQueue::OK()
-{
- int v = s != 0; // have space
- v &= size >= 0; // a legal size
- v &= inp >= 0 && inp <= size; // pointers with bounds
- v &= outp >= 0 && outp <= size;
- int c = (size + inp - outp) % size;
- v &= cnt == size || cnt == c; // correct count
- if (!v) error("invariant failure");
- return v;
-}
diff --git a/contrib/libg++/libg++/src/gen/VQueue.hP b/contrib/libg++/libg++/src/gen/VQueue.hP
deleted file mode 100644
index 287a78187a13..000000000000
--- a/contrib/libg++/libg++/src/gen/VQueue.hP
+++ /dev/null
@@ -1,130 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#ifndef _<T>VQueue_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _<T>VQueue_h 1
-
-#include "<T>.Queue.h"
-
-class <T>VQueue : public <T>Queue
-{
-protected:
- int size;
- int cnt;
- int inp;
- int outp;
- <T>* s;
-
-public:
-
- <T>VQueue(int sz = DEFAULT_INITIAL_CAPACITY);
- <T>VQueue(<T>VQueue&);
- inline ~<T>VQueue();
-
- void operator = (<T>VQueue&);
-
- inline void enq(<T&> item);
- inline <T> deq();
- inline <T>& front();
- inline void del_front();
-
- inline int length();
- inline int empty();
- inline int full();
-
- int capacity();
- void resize(int sz);
- inline void clear();
-
- int OK();
-};
-
-
-inline <T>VQueue::<T>VQueue(int sz)
-{
- s = new <T> [size = sz];
- cnt = inp = outp = 0;
-}
-
-inline <T>VQueue::~<T>VQueue()
-{
- delete [] s;
-}
-
-inline void <T>VQueue::clear()
-{
- inp = outp = 0;
- cnt = 0;
-}
-
-inline int <T>VQueue::empty()
-{
- return cnt <= 0;
-}
-
-inline int <T>VQueue::capacity()
-{
- return size;
-}
-
-inline int <T>VQueue::full()
-{
- return cnt >= size;
-}
-
-inline int <T>VQueue::length()
-{
- return cnt;
-}
-
-inline void <T>VQueue::enq(<T&> item)
-{
- if (cnt >= size) error("enq to full Queue.");
- ++cnt;
- s[inp] = item;
- if (++inp == size) inp = 0;
-}
-
-inline <T> <T>VQueue::deq()
-{
- if (cnt <= 0) error("deq from empty Queue.");
- --cnt;
- int i = outp;
- if (++outp == size) outp = 0;
- return s[i];
-}
-
-
-inline void <T>VQueue::del_front()
-{
- if (cnt <= 0) error("delete from empty Queue.");
- --cnt;
- if (++outp == size) outp = 0;
-}
-
-inline <T>& <T>VQueue::front()
-{
- if (empty()) error("top from empty Queue.");
- return s[outp];
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/gen/VStack.ccP b/contrib/libg++/libg++/src/gen/VStack.ccP
deleted file mode 100644
index a5e8292fabfa..000000000000
--- a/contrib/libg++/libg++/src/gen/VStack.ccP
+++ /dev/null
@@ -1,66 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <stream.h>
-#include "<T>.VStack.h"
-
-// error handling
-
-
-<T>VStack::<T>VStack(<T>VStack& b)
-:size(b.size), ptr(b.ptr), s(new <T> [b.size])
-{
- for (int i = 0; i < ptr; ++i) s[i] = b.s[i];
-}
-
-void <T>VStack::operator = (<T>VStack& b)
-{
- if (&b == this) return;
- if (size < b.ptr)
- {
- delete [] s;
- s = new <T> [b.size];
- size = b.size;
- }
- ptr = b.ptr;
- for (int i = 0; i < ptr; ++i) s[i] = b.s[i];
-}
-
-
-void <T>VStack::resize(int newsz)
-{
- if (newsz < ptr) error("resize: new size too small");
- <T>* news = new <T> [newsz];
- for (int i = 0; i < ptr; ++i) news[i] = s[i];
- delete [] s;
- s = news;
- size = newsz;
-}
-
-int <T>VStack::OK()
-{
- int v = s != 0; // have space
- v &= size >= 0; // a legal size
- v &= ptr <= size; // ptr within bounds
- v &= ptr >= 0;
- if (!v) error("invariant failure");
- return v;
-}
diff --git a/contrib/libg++/libg++/src/gen/VStack.hP b/contrib/libg++/libg++/src/gen/VStack.hP
deleted file mode 100644
index c7f7631a4cc9..000000000000
--- a/contrib/libg++/libg++/src/gen/VStack.hP
+++ /dev/null
@@ -1,120 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#ifndef _<T>VStack_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _<T>VStack_h 1
-
-#include "<T>.Stack.h"
-
-class <T>VStack : public <T>Stack
-{
-protected:
- int size;
- int ptr;
- <T>* s;
-
-public:
-
- <T>VStack(int sz = DEFAULT_INITIAL_CAPACITY);
- <T>VStack(<T>VStack&);
- inline ~<T>VStack();
-
- void operator = (<T>VStack&);
- inline void push(<T&> item);
- inline <T> pop();
- inline <T>& top();
- inline void del_top();
-
- inline int length();
- inline int empty();
- inline int full();
- inline void clear();
-
- void resize(int sz);
- int capacity();
-
- int OK();
-};
-
-
-inline <T>VStack::<T>VStack(int sz)
-{
- s = new <T> [size = sz];
- ptr = 0;
-}
-
-inline <T>VStack::~<T>VStack()
-{
- delete [] s;
-}
-
-inline void <T>VStack::clear()
-{
- ptr = 0;
-}
-
-inline int <T>VStack::capacity()
-{
- return size;
-}
-
-inline int <T>VStack::empty()
-{
- return ptr == 0;
-}
-
-inline int <T>VStack::full()
-{
- return ptr == size;
-}
-
-inline int <T>VStack::length()
-{
- return ptr;
-}
-
-inline void <T>VStack::push(<T&> item)
-{
- if (full()) error("push to full stack.");
- s[ptr++] = item;
-}
-
-inline <T> <T>VStack::pop()
-{
- if (empty()) error("pop from empty stack.");
- return s[--ptr];
-}
-
-
-inline void <T>VStack::del_top()
-{
- if (empty()) error("del_top from empty stack.");
- --ptr;
-}
-
-inline <T>& <T>VStack::top()
-{
- if (empty()) error("top from empty stack.");
- return s[ptr-1];
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/gen/Vec.ccP b/contrib/libg++/libg++/src/gen/Vec.ccP
deleted file mode 100644
index d03e0bba4c4b..000000000000
--- a/contrib/libg++/libg++/src/gen/Vec.ccP
+++ /dev/null
@@ -1,478 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <stream.h>
-#include <builtin.h>
-#include "<T>.Vec.h"
-
-// error handling
-
-
-void default_<T>Vec_error_handler(const char* msg)
-{
- cerr << "Fatal <T>Vec error. " << msg << "\n";
- exit(1);
-}
-
-one_arg_error_handler_t <T>Vec_error_handler = default_<T>Vec_error_handler;
-
-one_arg_error_handler_t set_<T>Vec_error_handler(one_arg_error_handler_t f)
-{
- one_arg_error_handler_t old = <T>Vec_error_handler;
- <T>Vec_error_handler = f;
- return old;
-}
-
-void <T>Vec::error(const char* msg)
-{
- (*<T>Vec_error_handler)(msg);
-}
-
-void <T>Vec::range_error()
-{
- (*<T>Vec_error_handler)("Index out of range.");
-}
-
-<T>Vec::<T>Vec(const <T>Vec& v)
-{
- s = new <T> [len = v.len];
- <T>* top = &(s[len]);
- <T>* t = s;
- const <T>* u = v.s;
- while (t < top) *t++ = *u++;
-}
-
-<T>Vec::<T>Vec(int l, <T&> fill_value)
-{
- s = new <T> [len = l];
- <T>* top = &(s[len]);
- <T>* t = s;
- while (t < top) *t++ = fill_value;
-}
-
-
-<T>Vec& <T>Vec::operator = (const <T>Vec& v)
-{
- if (this != &v)
- {
- delete [] s;
- s = new <T> [len = v.len];
- <T>* top = &(s[len]);
- <T>* t = s;
- const <T>* u = v.s;
- while (t < top) *t++ = *u++;
- }
- return *this;
-}
-
-void <T>Vec::apply(<T>Procedure f)
-{
- <T>* top = &(s[len]);
- <T>* t = s;
- while (t < top) (*f)(*t++);
-}
-
-// can't just realloc since there may be need for constructors/destructors
-void <T>Vec::resize(int newl)
-{
- <T>* news = new <T> [newl];
- <T>* p = news;
- int minl = (len < newl)? len : newl;
- <T>* top = &(s[minl]);
- <T>* t = s;
- while (t < top) *p++ = *t++;
- delete [] s;
- s = news;
- len = newl;
-}
-
-<T>Vec concat(<T>Vec & a, <T>Vec & b)
-{
- int newl = a.len + b.len;
- <T>* news = new <T> [newl];
- <T>* p = news;
- <T>* top = &(a.s[a.len]);
- <T>* t = a.s;
- while (t < top) *p++ = *t++;
- top = &(b.s[b.len]);
- t = b.s;
- while (t < top) *p++ = *t++;
- return <T>Vec(newl, news);
-}
-
-
-<T>Vec combine(<T>Combiner f, <T>Vec& a, <T>Vec& b)
-{
- int newl = (a.len < b.len)? a.len : b.len;
- <T>* news = new <T> [newl];
- <T>* p = news;
- <T>* top = &(a.s[newl]);
- <T>* t = a.s;
- <T>* u = b.s;
- while (t < top) *p++ = (*f)(*t++, *u++);
- return <T>Vec(newl, news);
-}
-
-<T> <T>Vec::reduce(<T>Combiner f, <T&> base)
-{
- <T> r = base;
- <T>* top = &(s[len]);
- <T>* t = s;
- while (t < top) r = (*f)(r, *t++);
- return r;
-}
-
-<T>Vec reverse(<T>Vec& a)
-{
- <T>* news = new <T> [a.len];
- if (a.len != 0)
- {
- <T>* lo = news;
- <T>* hi = &(news[a.len - 1]);
- while (lo < hi)
- {
- <T> tmp = *lo;
- *lo++ = *hi;
- *hi-- = tmp;
- }
- }
- return <T>Vec(a.len, news);
-}
-
-void <T>Vec::reverse()
-{
- if (len != 0)
- {
- <T>* lo = s;
- <T>* hi = &(s[len - 1]);
- while (lo < hi)
- {
- <T> tmp = *lo;
- *lo++ = *hi;
- *hi-- = tmp;
- }
- }
-}
-
-int <T>Vec::index(<T&> targ)
-{
- for (int i = 0; i < len; ++i) if (<T>EQ(targ, s[i])) return i;
- return -1;
-}
-
-<T>Vec map(<T>Mapper f, <T>Vec& a)
-{
- <T>* news = new <T> [a.len];
- <T>* p = news;
- <T>* top = &(a.s[a.len]);
- <T>* t = a.s;
- while(t < top) *p++ = (*f)(*t++);
- return <T>Vec(a.len, news);
-}
-
-int operator == (<T>Vec& a, <T>Vec& b)
-{
- if (a.len != b.len)
- return 0;
- <T>* top = &(a.s[a.len]);
- <T>* t = a.s;
- <T>* u = b.s;
- while (t < top) if (!(<T>EQ(*t++, *u++))) return 0;
- return 1;
-}
-
-void <T>Vec::fill(<T&> val, int from, int n)
-{
- int to;
- if (n < 0)
- to = len - 1;
- else
- to = from + n - 1;
- if ((unsigned)from > (unsigned)to)
- range_error();
- <T>* t = &(s[from]);
- <T>* top = &(s[to]);
- while (t <= top) *t++ = val;
-}
-
-<T>Vec <T>Vec::at(int from, int n)
-{
- int to;
- if (n < 0)
- {
- n = len - from;
- to = len - 1;
- }
- else
- to = from + n - 1;
- if ((unsigned)from > (unsigned)to)
- range_error();
- <T>* news = new <T> [n];
- <T>* p = news;
- <T>* t = &(s[from]);
- <T>* top = &(s[to]);
- while (t <= top) *p++ = *t++;
- return <T>Vec(n, news);
-}
-
-<T>Vec merge(<T>Vec & a, <T>Vec & b, <T>Comparator f)
-{
- int newl = a.len + b.len;
- <T>* news = new <T> [newl];
- <T>* p = news;
- <T>* topa = &(a.s[a.len]);
- <T>* as = a.s;
- <T>* topb = &(b.s[b.len]);
- <T>* bs = b.s;
-
- for (;;)
- {
- if (as >= topa)
- {
- while (bs < topb) *p++ = *bs++;
- break;
- }
- else if (bs >= topb)
- {
- while (as < topa) *p++ = *as++;
- break;
- }
- else if ((*f)(*as, *bs) <= 0)
- *p++ = *as++;
- else
- *p++ = *bs++;
- }
- return <T>Vec(newl, news);
-}
-
-static int gsort(<T>*, int, <T>Comparator);
-
-void <T>Vec::sort (<T>Comparator compar)
-{
- gsort(s, len, compar);
-}
-
-
-// An adaptation of Schmidt's new quicksort
-
-static inline void SWAP(<T>* A, <T>* B)
-{
- <T> tmp = *A; *A = *B; *B = tmp;
-}
-
-/* This should be replaced by a standard ANSI macro. */
-#define BYTES_PER_WORD 8
-#define BYTES_PER_LONG 4
-
-/* The next 4 #defines implement a very fast in-line stack abstraction. */
-
-#define STACK_SIZE (BYTES_PER_WORD * BYTES_PER_LONG)
-#define PUSH(LOW,HIGH) do {top->lo = LOW;top++->hi = HIGH;} while (0)
-#define POP(LOW,HIGH) do {LOW = (--top)->lo;HIGH = top->hi;} while (0)
-#define STACK_NOT_EMPTY (stack < top)
-
-/* Discontinue quicksort algorithm when partition gets below this size.
- This particular magic number was chosen to work best on a Sun 4/260. */
-#define MAX_THRESH 4
-
-
-/* Order size using quicksort. This implementation incorporates
- four optimizations discussed in Sedgewick:
-
- 1. Non-recursive, using an explicit stack of pointer that
- store the next array partition to sort. To save time, this
- maximum amount of space required to store an array of
- MAX_INT is allocated on the stack. Assuming a 32-bit integer,
- this needs only 32 * sizeof (stack_node) == 136 bits. Pretty
- cheap, actually.
-
- 2. Chose the pivot element using a median-of-three decision tree.
- This reduces the probability of selecting a bad pivot value and
- eliminates certain extraneous comparisons.
-
- 3. Only quicksorts TOTAL_ELEMS / MAX_THRESH partitions, leaving
- insertion sort to order the MAX_THRESH items within each partition.
- This is a big win, since insertion sort is faster for small, mostly
- sorted array segements.
-
- 4. The larger of the two sub-partitions is always pushed onto the
- stack first, with the algorithm then concentrating on the
- smaller partition. This *guarantees* no more than log (n)
- stack size is needed! */
-
-static int gsort (<T> *base_ptr, int total_elems, <T>Comparator cmp)
-{
-/* Stack node declarations used to store unfulfilled partition obligations. */
- struct stack_node { <T> *lo; <T> *hi; };
- <T> pivot_buffer;
- int max_thresh = MAX_THRESH;
-
- if (total_elems > MAX_THRESH)
- {
- <T> *lo = base_ptr;
- <T> *hi = lo + (total_elems - 1);
- <T> *left_ptr;
- <T> *right_ptr;
- stack_node stack[STACK_SIZE]; /* Largest size needed for 32-bit int!!! */
- stack_node *top = stack;
-
- for (;;)
- {
- {
- <T> *pivot = &pivot_buffer;
- {
- /* Select median value from among LO, MID, and HI. Rearrange
- LO and HI so the three values are sorted. This lowers the
- probability of picking a pathological pivot value and
- skips a comparison for both the LEFT_PTR and RIGHT_PTR. */
-
- <T> *mid = lo + ((hi - lo) >> 1);
-
- if ((*cmp) (*mid, *lo) < 0)
- SWAP (mid, lo);
- if ((*cmp) (*hi, *mid) < 0)
- {
- SWAP (mid, hi);
- if ((*cmp) (*mid, *lo) < 0)
- SWAP (mid, lo);
- }
- *pivot = *mid;
- pivot = &pivot_buffer;
- }
- left_ptr = lo + 1;
- right_ptr = hi - 1;
-
- /* Here's the famous ``collapse the walls'' section of quicksort.
- Gotta like those tight inner loops! They are the main reason
- that this algorithm runs much faster than others.
-
- [Yeah, but there is a function call in the inner loop,
- which makes the speed claim rather dubious. --Per Bothner] */
- do
- {
- while ((*cmp) (*left_ptr, *pivot) < 0)
- left_ptr += 1;
-
- while ((*cmp) (*pivot, *right_ptr) < 0)
- right_ptr -= 1;
-
- if (left_ptr < right_ptr)
- {
- SWAP (left_ptr, right_ptr);
- left_ptr += 1;
- right_ptr -= 1;
- }
- else if (left_ptr == right_ptr)
- {
- left_ptr += 1;
- right_ptr -= 1;
- break;
- }
- }
- while (left_ptr <= right_ptr);
-
- }
-
- /* Set up pointers for next iteration. First determine whether
- left and right partitions are below the threshold size. If so,
- ignore one or both. Otherwise, push the larger partition's
- bounds on the stack and continue sorting the smaller one. */
-
- if ((right_ptr - lo) <= max_thresh)
- {
- if ((hi - left_ptr) <= max_thresh)
- { /* Ignore both small partitions. */
- if (STACK_NOT_EMPTY)
- POP (lo, hi);
- else
- break; /* No pending partitions - we're done. */
- }
- else /* Ignore small left partition. */
- lo = left_ptr;
- }
- else if ((hi - left_ptr) <= max_thresh) /* Ignore small right partition. */
- hi = right_ptr;
- else if ((right_ptr - lo) > (hi - left_ptr)) /* Push larger left partition indices. */
- {
- PUSH (lo, right_ptr);
- lo = left_ptr;
- }
- else /* Push larger right partition indices. */
- {
- PUSH (left_ptr, hi);
- hi = right_ptr;
- }
- }
- }
-
- /* Once the BASE_PTR array is partially sorted by quicksort the rest
- is completely sorted using insertion sort, since this is efficient
- for partitions below MAX_THRESH size. BASE_PTR points to the beginning
- of the array to sort, and END_PTR points at the very last element in
- the array (*not* one beyond it!). */
-
-
- {
- <T> *end_ptr = base_ptr + 1 * (total_elems - 1);
- <T> *run_ptr;
- <T> *tmp_ptr = base_ptr;
- <T> *thresh = (end_ptr < (base_ptr + max_thresh))?
- end_ptr : (base_ptr + max_thresh);
-
- /* Find smallest element in first threshold and place it at the
- array's beginning. This is the smallest array element,
- and the operation speeds up insertion sort's inner loop. */
-
- for (run_ptr = tmp_ptr + 1; run_ptr <= thresh; run_ptr += 1)
- if ((*cmp) (*run_ptr, *tmp_ptr) < 0)
- tmp_ptr = run_ptr;
-
- if (tmp_ptr != base_ptr)
- SWAP (tmp_ptr, base_ptr);
-
- /* Insertion sort, running from left-hand-side up to `right-hand-side.'
- Pretty much straight out of the original GNU qsort routine. */
-
- for (run_ptr = base_ptr + 1; (tmp_ptr = run_ptr += 1) <= end_ptr; )
- {
-
- while ((*cmp) (*run_ptr, *(tmp_ptr -= 1)) < 0)
- ;
-
- if ((tmp_ptr += 1) != run_ptr)
- {
- <T> *trav;
-
- for (trav = run_ptr + 1; --trav >= run_ptr;)
- {
- <T> c = *trav;
- <T> *hi, *lo;
-
- for (hi = lo = trav; (lo -= 1) >= tmp_ptr; hi = lo)
- *hi = *lo;
- *hi = c;
- }
- }
-
- }
- }
- return 1;
-}
diff --git a/contrib/libg++/libg++/src/gen/Vec.hP b/contrib/libg++/libg++/src/gen/Vec.hP
deleted file mode 100644
index 91993d1c4f13..000000000000
--- a/contrib/libg++/libg++/src/gen/Vec.hP
+++ /dev/null
@@ -1,135 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#ifndef _<T>Vec_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _<T>Vec_h 1
-
-#include <builtin.h>
-#include "<T>.defs.h"
-
-#ifndef _<T>_typedefs
-#define _<T>_typedefs 1
-typedef void (*<T>Procedure)(<T&>);
-typedef <T> (*<T>Mapper)(<T&>);
-typedef <T> (*<T>Combiner)(<T&>, <T&>);
-typedef int (*<T>Predicate)(<T&>);
-typedef int (*<T>Comparator)(<T&>, <T&>);
-#endif
-
-
-class <T>Vec
-{
-protected:
- int len;
- <T> *s;
-
- <T>Vec(int l, <T>* d);
-public:
- <T>Vec ();
- <T>Vec (int l);
- <T>Vec (int l, <T&> fill_value);
- <T>Vec (const <T>Vec&);
- ~<T>Vec ();
-
- <T>Vec & operator = (const <T>Vec & a);
- <T>Vec at(int from = 0, int n = -1);
-
- int capacity() const;
- void resize(int newlen);
-
- <T>& operator [] (int n);
- <T>& elem(int n);
-
- friend <T>Vec concat(<T>Vec & a, <T>Vec & b);
- friend <T>Vec map(<T>Mapper f, <T>Vec & a);
- friend <T>Vec merge(<T>Vec & a, <T>Vec & b, <T>Comparator f);
- friend <T>Vec combine(<T>Combiner f, <T>Vec & a, <T>Vec & b);
- friend <T>Vec reverse(<T>Vec & a);
-
- void reverse();
- void sort(<T>Comparator f);
- void fill(<T&> val, int from = 0, int n = -1);
-
- void apply(<T>Procedure f);
- <T> reduce(<T>Combiner f, <T&> base);
- int index(<T&> targ);
-
- friend int operator == (<T>Vec& a, <T>Vec& b);
- friend int operator != (<T>Vec& a, <T>Vec& b);
-
- void error(const char* msg);
- void range_error();
-};
-
-extern void default_<T>Vec_error_handler(const char*);
-extern one_arg_error_handler_t <T>Vec_error_handler;
-
-extern one_arg_error_handler_t
- set_<T>Vec_error_handler(one_arg_error_handler_t f);
-
-
-inline <T>Vec::<T>Vec()
-{
- len = 0; s = 0;
-}
-
-inline <T>Vec::<T>Vec(int l)
-{
- s = new <T> [len = l];
-}
-
-
-inline <T>Vec::<T>Vec(int l, <T>* d) :len(l), s(d) {}
-
-
-inline <T>Vec::~<T>Vec()
-{
- delete [] s;
-}
-
-
-inline <T>& <T>Vec::operator [] (int n)
-{
- if ((unsigned)n >= (unsigned)len)
- range_error();
- return s[n];
-}
-
-inline <T>& <T>Vec::elem(int n)
-{
- return s[n];
-}
-
-
-inline int <T>Vec::capacity() const
-{
- return len;
-}
-
-
-
-inline int operator != (<T>Vec& a, <T>Vec& b)
-{
- return !(a == b);
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/gen/XPBag.ccP b/contrib/libg++/libg++/src/gen/XPBag.ccP
deleted file mode 100644
index e2a7834077bc..000000000000
--- a/contrib/libg++/libg++/src/gen/XPBag.ccP
+++ /dev/null
@@ -1,72 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include "<T>.XPBag.h"
-
-int <T>XPBag::OK()
-{
- int v = p.OK();
- v &= count == p.length();
- if (!v) error("invariant failure");
- return v;
-}
-
-Pix <T>XPBag::seek(<T&> item, Pix i)
-{
- if (i == 0) i = p.first(); else next(i);
- for (; i != 0; p.next(i)) if (<T>EQ(p(i), item)) return i;
- return 0;
-}
-
-int <T>XPBag::nof(<T&> item)
-{
- int n = 0;
- for (int i = p.low(); i < p.fence(); p.next(i)) if (<T>EQ(p[i], item)) ++n;
- return n;
-}
-
-void <T>XPBag::del(<T&> item)
-{
- for (int i = p.low(); i < p.fence(); p.next(i))
- {
- if (<T>EQ(p[i], item))
- {
- --count;
- p[i] = p.low_element();
- p.del_low();
- return;
- }
- }
-}
-
-void <T>XPBag::remove(<T&> item)
-{
- for (int i = p.low(); i < p.fence(); p.next(i))
- {
- if (<T>EQ(p[i], item))
- {
- --count;
- p[i] = p.low_element();
- p.del_low();
- }
- }
-}
-
diff --git a/contrib/libg++/libg++/src/gen/XPBag.hP b/contrib/libg++/libg++/src/gen/XPBag.hP
deleted file mode 100644
index da8c199e2125..000000000000
--- a/contrib/libg++/libg++/src/gen/XPBag.hP
+++ /dev/null
@@ -1,98 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#ifndef _<T>XPBag_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _<T>XPBag_h 1
-
-#include "<T>.Bag.h"
-#include "<T>.XPlex.h"
-
-class <T>XPBag : public <T>Bag
-{
-protected:
- <T>XPlex p;
-
-public:
- <T>XPBag(int chunksize = DEFAULT_INITIAL_CAPACITY);
- <T>XPBag(const <T>XPBag&);
-
- inline Pix add(<T&> item);
- void del(<T&> item);
-#undef remove
- void remove(<T&>item);
- int nof(<T&> item);
- inline int contains(<T&> item);
-
- inline void clear();
-
- inline Pix first();
- inline void next(Pix& i);
- inline <T>& operator () (Pix i);
- inline int owns(Pix i);
- Pix seek(<T&> item, Pix from = 0);
-
- int OK();
-};
-
-
-inline <T>XPBag::<T>XPBag(int chunksize)
- : p(chunksize) { count = 0; }
-
-inline <T>XPBag::<T>XPBag(const <T>XPBag& s) : p(s.p) { count = s.count; }
-
-inline Pix <T>XPBag::first()
-{
- return p.first();
-}
-
-inline void <T>XPBag::next(Pix & idx)
-{
- p.next(idx);
-}
-
-inline <T>& <T>XPBag::operator ()(Pix idx)
-{
- return p(idx);
-}
-
-inline void <T>XPBag::clear()
-{
- count = 0; p.clear();
-}
-
-inline int <T>XPBag::owns (Pix idx)
-{
- return p.owns(idx);
-}
-
-inline Pix <T>XPBag::add(<T&> item)
-{
- ++count;
- return p.index_to_Pix(p.add_high(item));
-}
-
-inline int <T>XPBag::contains(<T&> item)
-{
- return seek(item) != 0;
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/gen/XPDeque.ccP b/contrib/libg++/libg++/src/gen/XPDeque.ccP
deleted file mode 100644
index 6b363d9bdc4e..000000000000
--- a/contrib/libg++/libg++/src/gen/XPDeque.ccP
+++ /dev/null
@@ -1,4 +0,0 @@
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include "<T>.XPDeque.h"
diff --git a/contrib/libg++/libg++/src/gen/XPDeque.hP b/contrib/libg++/libg++/src/gen/XPDeque.hP
deleted file mode 100644
index a73d8fdada8c..000000000000
--- a/contrib/libg++/libg++/src/gen/XPDeque.hP
+++ /dev/null
@@ -1,133 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
- based on code by Marc Shapiro (shapiro@sor.inria.fr)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#ifndef _<T>XPDeque_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _<T>XPDeque_h
-
-#include "<T>.XPlex.h"
-#include "<T>.Deque.h"
-
-class <T>XPDeque : public <T>Deque
-{
- <T>XPlex p;
-
-public:
- <T>XPDeque(int chunksize = DEFAULT_INITIAL_CAPACITY);
- <T>XPDeque(const <T>XPDeque& d);
- inline ~<T>XPDeque();
-
- void operator = (const <T>XPDeque&);
-
- inline void push(<T&> item); // insert at front
- inline void enq(<T&> item); // insert at rear
-
- inline <T>& front();
- inline <T>& rear();
-
- inline <T> deq();
- inline void del_front();
- inline void del_rear();
-
- inline void clear();
- inline int empty();
- inline int full();
- inline int length();
-
- inline int OK();
-};
-
-inline <T>XPDeque::<T>XPDeque(int chunksize)
- : p(chunksize) {}
-inline <T>XPDeque::<T>XPDeque(const <T>XPDeque& d) : p(d.p) {}
-
-inline <T>XPDeque::~<T>XPDeque() {}
-
-inline void <T>XPDeque::push(<T&>item)
-{
- p.add_low(item);
-}
-
-inline void <T>XPDeque::enq(<T&>item)
-{
- p.add_high(item);
-}
-
-inline <T> <T>XPDeque::deq()
-{
- <T> res = p.low_element();
- p.del_low();
- return res;
-}
-
-inline <T>& <T>XPDeque::front()
-{
- return p.low_element();
-}
-
-inline <T>& <T>XPDeque::rear()
-{
- return p.high_element();
-}
-
-inline void <T>XPDeque::del_front()
-{
- p.del_low();
-}
-
-inline void <T>XPDeque::del_rear()
-{
- p.del_high();
-}
-
-inline void <T>XPDeque::operator =(const <T>XPDeque& s)
-{
- p.operator = (s.p);
-}
-
-
-inline int <T>XPDeque::empty()
-{
- return p.empty();
-}
-
-inline int <T>XPDeque::full()
-{
- return p.full();
-}
-
-inline int <T>XPDeque::length()
-{
- return p.length();
-}
-
-inline int <T>XPDeque::OK()
-{
- return p.OK();
-}
-
-inline void <T>XPDeque::clear()
-{
- p.clear();
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/gen/XPPQ.ccP b/contrib/libg++/libg++/src/gen/XPPQ.ccP
deleted file mode 100644
index 4d7a8644b126..000000000000
--- a/contrib/libg++/libg++/src/gen/XPPQ.ccP
+++ /dev/null
@@ -1,143 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include "<T>.XPPQ.h"
-
-int <T>XPPQ::OK()
-{
- int v = p.OK();
- v &= p.low() == 1;
- v &= count == p.length();
- if (!v) error("invariant failure");
- return v;
-}
-
-Pix <T>XPPQ::seek(<T&> item)
-{
- for (int i = p.low(); i < p.fence(); p.next(i))
- if (<T>EQ(p[i],item)) return p.index_to_Pix(i);
- return 0;
-}
-
-// standard 2-ary heap ops
-// pointers are used a lot to avoid thrashing across chunks with plexes
-
-Pix <T>XPPQ::enq(<T&> item)
-{
- p.add_high(item);
- <T>* pk = &(p.high_element());
- int par = ++count >> 1;
- while (par != 0)
- {
- <T>* ppar = &(p[par]);
- if (!(<T>LE(*ppar, item)))
- {
- *pk = *ppar;
- pk = ppar;
- par >>= 1;
- }
- else
- break;
- }
- *pk = item;
- return Pix(pk);
-}
-
-void <T>XPPQ::del_front()
-{
- if (count == 0) error("empty PQ");
- --count;
- <T>* pk = &(p.low_element());
- <T>* ph = &(p.high_element());
- int child = 2;
- while (child <= count)
- {
- <T>* pchild = &(p[child]);
- if (child < count)
- {
- <T>* prchild = &(p[child+1]);
- if (!(<T>LE(*pchild, *prchild)))
- {
- pchild = prchild;
- ++child;
- }
- }
- if (!(<T>LE(*ph, *pchild)))
- {
- *pk = *pchild;
- pk = pchild;
- child <<= 1;
- }
- else
- break;
- }
- *pk = *ph;
- p.del_high();
-}
-
-
-void <T>XPPQ::del(Pix i)
-{
- if (i == 0) error("null Pix");
- --count;
- int k = p.Pix_to_index(i);
- <T>* pk = &(p[k]);
- <T>* ph = &(p.high_element());
- int child = k << 1;
- while (child <= count)
- {
- <T>* pchild = &(p[child]);
- if (child < count)
- {
- <T>* prchild = &(p[child+1]);
- if (!(<T>LE(*pchild, *prchild)))
- {
- pchild = prchild;
- ++child;
- }
- }
- if (!(<T>LE(*ph, *pchild)))
- {
- *pk = *pchild;
- pk = pchild;
- child <<= 1;
- }
- else
- break;
- }
- int par = child >> 2;
- while (par != 0)
- {
- <T>* ppar = &(p[par]);
- if (!(<T>LE(*ppar, *ph)))
- {
- *pk = *ppar;
- pk = ppar;
- par >>= 1;
- }
- else
- break;
- }
- *pk = *ph;
- p.del_high();
-}
-
-
diff --git a/contrib/libg++/libg++/src/gen/XPPQ.hP b/contrib/libg++/libg++/src/gen/XPPQ.hP
deleted file mode 100644
index 472670009d72..000000000000
--- a/contrib/libg++/libg++/src/gen/XPPQ.hP
+++ /dev/null
@@ -1,105 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#ifndef _<T>XPPQ_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _<T>XPPQ_h 1
-
-#include "<T>.PQ.h"
-#include "<T>.XPlex.h"
-
-class <T>XPPQ : public <T>PQ
-{
-protected:
- <T>XPlex p;
-
-public:
- <T>XPPQ(int chunksize = DEFAULT_INITIAL_CAPACITY);
- <T>XPPQ(const <T>XPPQ&);
-
- Pix enq(<T&> item);
- inline <T> deq();
-
- inline <T>& front();
- void del_front();
-
- inline int contains(<T&> item);
-
- inline void clear();
-
- inline Pix first();
- inline void next(Pix& i);
- inline <T>& operator () (Pix i);
- void del(Pix i);
- inline int owns(Pix i);
- Pix seek(<T&> item);
-
- int OK(); // rep invariant
-};
-
-inline <T>XPPQ::<T>XPPQ(int chunksize)
- : p(1, chunksize) { count = 0; }
-
-inline <T>XPPQ::<T>XPPQ(const <T>XPPQ& s) : p(s.p) { count = s.count; }
-
-inline Pix <T>XPPQ::first()
-{
- return p.first();
-}
-
-inline void <T>XPPQ::next(Pix & idx)
-{
- p.next(idx);
-}
-
-inline <T>& <T>XPPQ::operator ()(Pix idx)
-{
- return p(idx);
-}
-
-inline <T>& <T>XPPQ::front ()
-{
- return p.low_element();
-}
-
-inline <T> <T>XPPQ::deq ()
-{
- <T> x = p.low_element();
- del_front();
- return x;
-}
-
-inline void <T>XPPQ::clear()
-{
- count = 0; p.clear();
-}
-
-inline int <T>XPPQ::contains (<T&> item)
-{
- return seek(item) != 0;
-}
-
-inline int <T>XPPQ::owns (Pix idx)
-{
- return p.owns(idx);
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/gen/XPQueue.ccP b/contrib/libg++/libg++/src/gen/XPQueue.ccP
deleted file mode 100644
index 77bfd1c7a957..000000000000
--- a/contrib/libg++/libg++/src/gen/XPQueue.ccP
+++ /dev/null
@@ -1,4 +0,0 @@
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include "<T>.XPQueue.h"
diff --git a/contrib/libg++/libg++/src/gen/XPQueue.hP b/contrib/libg++/libg++/src/gen/XPQueue.hP
deleted file mode 100644
index a5baf7bd68e3..000000000000
--- a/contrib/libg++/libg++/src/gen/XPQueue.hP
+++ /dev/null
@@ -1,114 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
- based on code by Marc Shapiro (shapiro@sor.inria.fr)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#ifndef _<T>XPQueue_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _<T>XPQueue_h
-
-#include "<T>.XPlex.h"
-#include "<T>.Queue.h"
-
-class <T>XPQueue : public <T>Queue
-{
-protected:
- <T>XPlex p;
-
-public:
- <T>XPQueue(int chunksize = DEFAULT_INITIAL_CAPACITY);
- <T>XPQueue(const <T>XPQueue& q);
- inline ~<T>XPQueue();
-
- void operator = (const <T>XPQueue&);
-
- inline void enq(<T&> item);
- inline <T> deq();
- inline <T>& front();
- inline void del_front();
-
- inline void clear();
- inline int empty();
- inline int full();
- inline int length();
-
- inline int OK();
-};
-
-inline <T>XPQueue::<T>XPQueue(int chunksize)
- : p(chunksize) {}
-inline <T>XPQueue::<T>XPQueue(const <T>XPQueue& q) : p(q.p) {}
-
-inline <T>XPQueue::~<T>XPQueue() {}
-
-inline void <T>XPQueue::enq(<T&>item)
-{
- p.add_high(item);
-}
-
-inline <T> <T>XPQueue::deq()
-{
- <T> res = p.low_element();
- p.del_low();
- return res;
-}
-
-inline <T>& <T>XPQueue::front()
-{
- return p.low_element();
-}
-
-
-inline void <T>XPQueue::del_front()
-{
- p.del_low();
-}
-
-inline void <T>XPQueue::operator =(const <T>XPQueue& s)
-{
- p.operator = (s.p);
-}
-
-inline int <T>XPQueue::empty()
-{
- return p.empty();
-}
-
-inline int <T>XPQueue::full()
-{
- return p.full();
-}
-
-inline int <T>XPQueue::length()
-{
- return p.length();
-}
-
-inline int <T>XPQueue::OK()
-{
- return p.OK();
-}
-
-inline void <T>XPQueue::clear()
-{
- p.clear();
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/gen/XPSet.ccP b/contrib/libg++/libg++/src/gen/XPSet.ccP
deleted file mode 100644
index 596fa8847ad8..000000000000
--- a/contrib/libg++/libg++/src/gen/XPSet.ccP
+++ /dev/null
@@ -1,63 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include "<T>.XPSet.h"
-
-int <T>XPSet::OK()
-{
- int v = p.OK();
- v &= count == p.length();
- if (!v) error("invariant failure");
- return v;
-}
-
-Pix <T>XPSet::seek(<T&> item)
-{
- for (int i = p.low(); i < p.fence(); p.next(i))
- if (<T>EQ(p[i],item)) return p.index_to_Pix(i);
- return 0;
-}
-
-Pix <T>XPSet::add(<T&> item)
-{
- Pix i = seek(item);
- if (i == 0)
- {
- ++count;
- i = p.index_to_Pix(p.add_high(item));
- }
- return i;
-}
-
-void <T>XPSet::del(<T&> item)
-{
- for (int i = p.low(); i < p.fence(); p.next(i))
- {
- if (<T>EQ(p[i], item))
- {
- --count;
- p[i] = p.low_element();
- p.del_low();
- return;
- }
- }
-}
-
diff --git a/contrib/libg++/libg++/src/gen/XPSet.hP b/contrib/libg++/libg++/src/gen/XPSet.hP
deleted file mode 100644
index a87d8eb0b554..000000000000
--- a/contrib/libg++/libg++/src/gen/XPSet.hP
+++ /dev/null
@@ -1,89 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#ifndef _<T>XPSet_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _<T>XPSet_h 1
-
-#include "<T>.Set.h"
-#include "<T>.XPlex.h"
-
-class <T>XPSet : public <T>Set
-{
-protected:
- <T>XPlex p;
-
-public:
- <T>XPSet(int chunksize = DEFAULT_INITIAL_CAPACITY);
- <T>XPSet(const <T>XPSet&);
-
- Pix add(<T&> item);
- void del(<T&> item);
- inline int contains(<T&> item);
-
- inline void clear();
-
- inline Pix first();
- inline void next(Pix& i);
- inline <T>& operator () (Pix i);
- inline int owns(Pix i);
- Pix seek(<T&> item);
-
- int OK();
-};
-
-
-inline <T>XPSet::<T>XPSet(int chunksize)
- : p(chunksize) { count = 0; }
-
-inline <T>XPSet::<T>XPSet(const <T>XPSet& s) : p(s.p) { count = s.count; }
-
-inline Pix <T>XPSet::first()
-{
- return p.first();
-}
-
-inline void <T>XPSet::next(Pix & idx)
-{
- p.next(idx);
-}
-
-inline <T>& <T>XPSet::operator ()(Pix idx)
-{
- return p(idx);
-}
-
-inline void <T>XPSet::clear()
-{
- count = 0; p.clear();
-}
-
-inline int <T>XPSet::contains (<T&> item)
-{
- return seek(item) != 0;
-}
-
-inline int <T>XPSet::owns (Pix idx)
-{
- return p.owns(idx);
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/gen/XPStack.ccP b/contrib/libg++/libg++/src/gen/XPStack.ccP
deleted file mode 100644
index fe24f0f044a1..000000000000
--- a/contrib/libg++/libg++/src/gen/XPStack.ccP
+++ /dev/null
@@ -1,4 +0,0 @@
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include "<T>.XPStack.h"
diff --git a/contrib/libg++/libg++/src/gen/XPStack.hP b/contrib/libg++/libg++/src/gen/XPStack.hP
deleted file mode 100644
index 41f78adf5ce3..000000000000
--- a/contrib/libg++/libg++/src/gen/XPStack.hP
+++ /dev/null
@@ -1,115 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
- based on code by Marc Shapiro (shapiro@sor.inria.fr)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#ifndef _<T>XPStack_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _<T>XPStack_h
-
-#include "<T>.XPlex.h"
-#include "<T>.Stack.h"
-
-class <T>XPStack : public <T>Stack
-{
- <T>XPlex p;
-
-public:
- <T>XPStack(int chunksize = DEFAULT_INITIAL_CAPACITY);
- <T>XPStack(const <T>XPStack& s);
- inline ~<T>XPStack();
-
- void operator = (const <T>XPStack&);
-
- inline void push(<T&> item);
- inline <T> pop();
- inline <T>& top();
- inline void del_top();
-
- inline int empty();
- inline int full();
- inline int length();
-
- inline void clear();
-
- inline int OK();
-
-};
-
-
-inline <T>XPStack::<T>XPStack(int chunksize)
- : p(chunksize) {}
-inline <T>XPStack::<T>XPStack(const <T>XPStack& s) : p(s.p) {}
-
-inline <T>XPStack::~<T>XPStack() {}
-
-inline void <T>XPStack::push(<T&>item)
-{
- p.add_high(item);
-}
-
-inline <T> <T>XPStack::pop()
-{
- <T> res = p.high_element();
- p.del_high();
- return res;
-}
-
-inline <T>& <T>XPStack::top()
-{
- return p.high_element();
-}
-
-inline void <T>XPStack::del_top()
-{
- p.del_high();
-}
-
-inline void <T>XPStack::operator =(const <T>XPStack& s)
-{
- p.operator = (s.p);
-}
-
-inline int <T>XPStack::empty()
-{
- return p.empty();
-}
-
-inline int <T>XPStack::full()
-{
- return p.full();
-}
-
-inline int <T>XPStack::length()
-{
- return p.length();
-}
-
-inline int <T>XPStack::OK()
-{
- return p.OK();
-}
-
-inline void <T>XPStack::clear()
-{
- p.clear();
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/gen/XPlex.ccP b/contrib/libg++/libg++/src/gen/XPlex.ccP
deleted file mode 100644
index f5304222993a..000000000000
--- a/contrib/libg++/libg++/src/gen/XPlex.ccP
+++ /dev/null
@@ -1,397 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
- based on code by Marc Shapiro (shapiro@sor.inria.fr)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include "<T>.XPlex.h"
-
-
-<T>XPlex:: <T>XPlex()
-{
- lo = fnc = 0;
- csize = DEFAULT_INITIAL_CAPACITY;
- <T>* data = new <T>[csize];
- set_cache(new <T>IChunk(data, lo, lo, fnc, lo+csize));
- hd = ch;
-}
-
-<T>XPlex:: <T>XPlex(int chunksize)
-{
- if (chunksize == 0) error("invalid constructor specification");
- lo = fnc = 0;
- if (chunksize > 0)
- {
- csize = chunksize;
- <T>* data = new <T>[csize];
- set_cache(new <T>IChunk(data, lo, lo, fnc, csize));
- hd = ch;
- }
- else
- {
- csize = -chunksize;
- <T>* data = new <T>[csize];
- set_cache(new <T>IChunk(data, chunksize, lo, fnc, fnc));
- hd = ch;
- }
-}
-
-
-<T>XPlex:: <T>XPlex(int l, int chunksize)
-{
- if (chunksize == 0) error("invalid constructor specification");
- lo = fnc = l;
- if (chunksize > 0)
- {
- csize = chunksize;
- <T>* data = new <T>[csize];
- set_cache(new <T>IChunk(data, lo, lo, fnc, csize+lo));
- hd = ch;
- }
- else
- {
- csize = -chunksize;
- <T>* data = new <T>[csize];
- set_cache(new <T>IChunk(data, chunksize+lo, lo, fnc, fnc));
- hd = ch;
- }
-}
-
-void <T>XPlex::make_initial_chunks(int up)
-{
- int need = fnc - lo;
- hd = 0;
- if (up)
- {
- int l = lo;
- do
- {
- int sz;
- if (need >= csize)
- sz = csize;
- else
- sz = need;
- <T>* data = new <T> [csize];
- <T>IChunk* h = new <T>IChunk(data, l, l, l+sz, l+csize);
- if (hd != 0)
- h->link_to_next(hd);
- else
- hd = h;
- l += sz;
- need -= sz;
- } while (need > 0);
- }
- else
- {
- int hi = fnc;
- do
- {
- int sz;
- if (need >= csize)
- sz = csize;
- else
- sz = need;
- <T>* data = new <T> [csize];
- <T>IChunk* h = new <T>IChunk(data, hi-csize, hi-sz, hi, hi);
- if (hd != 0)
- h->link_to_next(hd);
- hd = h;
- hi -= sz;
- need -= sz;
- } while (need > 0);
- }
- set_cache(hd);
-}
-
-<T>XPlex:: <T>XPlex(int l, int hi, const <T&> initval, int chunksize)
-{
- lo = l;
- fnc = hi + 1;
- if (chunksize == 0)
- {
- csize = fnc - l;
- make_initial_chunks(1);
- }
- else if (chunksize < 0)
- {
- csize = -chunksize;
- make_initial_chunks(0);
- }
- else
- {
- csize = chunksize;
- make_initial_chunks(1);
- }
- fill(initval);
-}
-
-<T>XPlex::<T>XPlex(const <T>XPlex& a)
-{
- lo = a.lo;
- fnc = a.fnc;
- csize = a.csize;
- make_initial_chunks();
- for (int i = a.low(); i < a.fence(); a.next(i)) (*this)[i] = a[i];
-}
-
-void <T>XPlex::operator= (const <T>XPlex& a)
-{
- if (&a != this)
- {
- invalidate();
- lo = a.lo;
- fnc = a.fnc;
- csize = a.csize;
- make_initial_chunks();
- for (int i = a.low(); i < a.fence(); a.next(i)) (*this)[i] = a[i];
- }
-}
-
-
-void <T>XPlex::cache(int idx) const
-{
- const <T>IChunk* tail = tl();
- const <T>IChunk* t = ch;
- while (idx >= t->fence_index())
- {
- if (t == tail) index_error();
- t = (t->next());
- }
- while (idx < t->low_index())
- {
- if (t == hd) index_error();
- t = (t->prev());
- }
- set_cache(t);
-}
-
-
-void <T>XPlex::cache(const <T>* p) const
-{
- const <T>IChunk* old = ch;
- const <T>IChunk* t = ch;
- while (!t->actual_pointer(p))
- {
- t = (t->next());
- if (t == old) index_error();
- }
- set_cache(t);
-}
-
-int <T>XPlex::owns(Pix px) const
-{
- <T>* p = (<T>*)px;
- const <T>IChunk* old = ch;
- const <T>IChunk* t = ch;
- while (!t->actual_pointer(p))
- {
- t = (t->next());
- if (t == old) { set_cache(t); return 0; }
- }
- set_cache(t);
- return 1;
-}
-
-
-<T>* <T>XPlex::dosucc(const <T>* p) const
-{
- if (p == 0) return 0;
- const <T>IChunk* old = ch;
- const <T>IChunk* t = ch;
-
- while (!t->actual_pointer(p))
- {
- t = (t->next());
- if (t == old) return 0;
- }
- int i = t->index_of(p) + 1;
- if (i >= fnc) return 0;
- if (i >= t->fence_index()) t = (t->next());
- set_cache(t);
- return (t->pointer_to(i));
-}
-
-<T>* <T>XPlex::dopred(const <T>* p) const
-{
- if (p == 0) return 0;
- const <T>IChunk* old = ch;
- const <T>IChunk* t = ch;
- while (!t->actual_pointer(p))
- {
- t = (t->prev());
- if (t == old) return 0;
- }
- int i = t->index_of(p) - 1;
- if (i < lo) return 0;
- if (i < t->low_index()) t = (t->prev());
- set_cache(t);
- return (t->pointer_to(i));
-}
-
-
-int <T>XPlex::add_high(const <T&> elem)
-{
- <T>IChunk* t = tl();
- if (!t->can_grow_high())
- {
- if (t-><T>IChunk::empty() && one_chunk())
- t->clear(fnc);
- else
- {
- <T>* data = new <T> [csize];
- t = (new <T>IChunk(data, fnc, fnc, fnc,fnc+csize));
- t->link_to_prev(tl());
- }
- }
- *((t-><T>IChunk::grow_high())) = elem;
- set_cache(t);
- return fnc++;
-}
-
-int <T>XPlex::del_high ()
-{
- if (empty()) empty_error();
- <T>IChunk* t = tl();
- t-><T>IChunk::shrink_high();
- if (t-><T>IChunk::empty() && !one_chunk())
- {
- <T>IChunk* pred = t->prev();
- del_chunk(t);
- t = pred;
- }
- set_cache(t);
- return --fnc - 1;
-}
-
-int <T>XPlex::add_low (const <T&> elem)
-{
- <T>IChunk* t = hd;
- if (!t->can_grow_low())
- {
- if (t-><T>IChunk::empty() && one_chunk())
- t->cleardown(lo);
- else
- {
- <T>* data = new <T> [csize];
- hd = new <T>IChunk(data, lo-csize, lo, lo, lo);
- hd->link_to_next(t);
- t = hd;
- }
- }
- *((t-><T>IChunk::grow_low())) = elem;
- set_cache(t);
- return --lo;
-}
-
-
-int <T>XPlex::del_low ()
-{
- if (empty()) empty_error();
- <T>IChunk* t = hd;
- t-><T>IChunk::shrink_low();
- if (t-><T>IChunk::empty() && !one_chunk())
- {
- hd = t->next();
- del_chunk(t);
- t = hd;
- }
- set_cache(t);
- return ++lo;
-}
-
-void <T>XPlex::reverse()
-{
- <T> tmp;
- int l = lo;
- int h = fnc - 1;
- <T>IChunk* loch = hd;
- <T>IChunk* hich = tl();
- while (l < h)
- {
- <T>* lptr = loch->pointer_to(l);
- <T>* hptr = hich->pointer_to(h);
- tmp = *lptr;
- *lptr = *hptr;
- *hptr = tmp;
- if (++l >= loch->fence_index()) loch = loch->next();
- if (--h < hich->low_index()) hich = hich->prev();
- }
-}
-
-void <T>XPlex::fill(const <T&> x)
-{
- for (int i = lo; i < fnc; ++i) (*this)[i] = x;
-}
-
-void <T>XPlex::fill(const <T&> x, int l, int hi)
-{
- for (int i = l; i <= hi; ++i) (*this)[i] = x;
-}
-
-
-void <T>XPlex::clear()
-{
- if (fnc != lo)
- {
- <T>IChunk* t = tl();
- while (t != hd)
- {
- <T>IChunk* prv = t->prev();
- del_chunk(t);
- t = prv;
- }
- t-><T>IChunk::clear(lo);
- set_cache(t);
- fnc = lo;
- }
-}
-
-
-int <T>XPlex::OK () const
-{
- int v = hd != 0 && ch != 0; // at least one chunk
-
- v &= fnc == tl()->fence_index();// last chunk fence == plex fence
- v &= lo == ((hd))-><T>IChunk::low_index(); // first lo == plex lo
-
-// loop for others:
- int found_ch = 0; // to make sure ch is in list;
- const <T>IChunk* t = (hd);
- for (;;)
- {
- if (t == ch) ++found_ch;
- v &= t-><T>IChunk::OK(); // each chunk is OK
- if (t == tl())
- break;
- else // and has indices contiguous to succ
- {
- v &= t->top_index() == t->next()->base_index();
- if (t != hd) // internal chunks full
- {
- v &= !t->empty();
- v &= !t->can_grow_low();
- v &= !t->can_grow_high();
- }
- t = t->next();
- }
- }
- v &= found_ch == 1;
- if (!v) error("invariant failure");
- return v;
-}
diff --git a/contrib/libg++/libg++/src/gen/XPlex.hP b/contrib/libg++/libg++/src/gen/XPlex.hP
deleted file mode 100644
index 82445b308748..000000000000
--- a/contrib/libg++/libg++/src/gen/XPlex.hP
+++ /dev/null
@@ -1,238 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
- based on code by Marc Shapiro (shapiro@sor.inria.fr)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifndef _<T>XPlex_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _<T>XPlex_h 1
-
-#include "<T>.Plex.h"
-
-class <T>XPlex: public <T>Plex
-{
- <T>IChunk* ch; // cached chunk
-
- void make_initial_chunks(int up = 1);
-
- void cache(int idx) const;
- void cache(const <T>* p) const;
-
- <T>* dopred(const <T>* p) const;
- <T>* dosucc(const <T>* p) const;
-
- inline void set_cache(const <T>IChunk* t) const; // logically,
- // not physically const
-public:
- <T>XPlex(); // set low = 0;
- // fence = 0;
- // csize = default
-
- <T>XPlex(int ch_size); // low = 0;
- // fence = 0;
- // csize = ch_size
-
- <T>XPlex(int lo, // low = lo;
- int ch_size); // fence=lo
- // csize = ch_size
-
- <T>XPlex(int lo, // low = lo
- int hi, // fence = hi+1
- const <T&> initval,// fill with initval,
- int ch_size = 0); // csize= ch_size
- // or fence-lo if 0
-
- <T>XPlex(const <T>XPlex&);
-
- void operator= (const <T>XPlex&);
-
-// virtuals
-
-
- inline <T>& high_element ();
- inline <T>& low_element ();
-
- inline const <T>& high_element () const;
- inline const <T>& low_element () const;
-
- inline Pix first() const;
- inline Pix last() const;
- inline void prev(Pix& ptr) const;
- inline void next(Pix& ptr) const;
- int owns(Pix p) const;
- inline <T>& operator () (Pix p);
- inline const <T>& operator () (Pix p) const;
-
- inline int low() const;
- inline int high() const;
- inline int valid(int idx) const;
- inline void prev(int& idx) const;
- inline void next(int& x) const;
- inline <T>& operator [] (int index);
- inline const <T>& operator [] (int index) const;
-
- inline int Pix_to_index(Pix p) const;
- inline Pix index_to_Pix(int idx) const;
-
- inline int can_add_high() const;
- inline int can_add_low() const;
- inline int full() const;
-
- int add_high(const <T&> elem);
- int del_high ();
- int add_low (const <T&> elem);
- int del_low ();
-
- void fill(const <T&> x);
- void fill(const <T&> x, int from, int to);
- void clear();
- void reverse();
-
- int OK () const;
-
-};
-
-
-inline void <T>XPlex::prev(int& idx) const
-{
- --idx;
-}
-
-inline void <T>XPlex::next(int& idx) const
-{
- ++idx;
-}
-
-inline int <T>XPlex::full () const
-{
- return 0;
-}
-
-inline int <T>XPlex::can_add_high() const
-{
- return 1;
-}
-
-inline int <T>XPlex::can_add_low() const
-{
- return 1;
-}
-
-inline int <T>XPlex::valid (int idx) const
-{
- return idx >= lo && idx < fnc;
-}
-
-inline int <T>XPlex::low() const
-{
- return lo;
-}
-
-inline int <T>XPlex::high() const
-{
- return fnc - 1;
-}
-
-inline <T>& <T>XPlex:: operator [] (int idx)
-{
- if (!ch->actual_index(idx)) cache(idx);
- return *(ch->pointer_to(idx));
-}
-
-inline const <T>& <T>XPlex:: operator [] (int idx) const
-{
- if (!ch->actual_index(idx)) cache(idx);
- return *((const <T>*)(ch->pointer_to(idx)));
-}
-
-inline <T>& <T>XPlex::low_element ()
-{
- if (empty()) index_error();
- return *(hd->pointer_to(lo));
-}
-
-inline const <T>& <T>XPlex::low_element () const
-{
- if (empty()) index_error();
- return *((const <T>*)(hd->pointer_to(lo)));
-}
-
-inline <T>& <T>XPlex::high_element ()
-{
- if (empty()) index_error();
- return *(tl()->pointer_to(fnc - 1));
-}
-
-inline const <T>& <T>XPlex::high_element () const
-{
- if (empty()) index_error();
- return *((const <T>*)(tl()->pointer_to(fnc - 1)));
-}
-
-inline int <T>XPlex::Pix_to_index(Pix px) const
-{
- <T>* p = (<T>*)px;
- if (!ch->actual_pointer(p)) cache(p);
- return ch->index_of(p);
-}
-
-inline Pix <T>XPlex::index_to_Pix(int idx) const
-{
- if (!ch->actual_index(idx)) cache(idx);
- return (Pix)(ch->pointer_to(idx));
-}
-
-inline Pix <T>XPlex::first() const
-{
- return Pix(hd-><T>IChunk::first_pointer());
-}
-
-inline Pix <T>XPlex::last() const
-{
- return Pix(tl()-><T>IChunk::last_pointer());
-}
-
-inline void <T>XPlex::prev(Pix& p) const
-{
- Pix q = Pix(ch-><T>IChunk::pred((<T>*) p));
- p = (q == 0)? Pix(dopred((const <T>*) p)) : q;
-}
-
-inline void <T>XPlex::next(Pix& p) const
-{
- Pix q = Pix(ch-><T>IChunk::succ((<T>*) p));
- p = (q == 0)? Pix(dosucc((const <T>*)p)) : q;
-}
-
-inline <T>& <T>XPlex:: operator () (Pix p)
-{
- return *((<T>*)p);
-}
-
-inline const <T>& <T>XPlex:: operator () (Pix p) const
-{
- return *((const <T>*)p);
-}
-
-inline void <T>XPlex::set_cache(const <T>IChunk* t) const
-{
- ((<T>XPlex*)(this))->ch = (<T>IChunk*)t;
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/gen/defs.hP b/contrib/libg++/libg++/src/gen/defs.hP
deleted file mode 100644
index f03617594fe1..000000000000
--- a/contrib/libg++/libg++/src/gen/defs.hP
+++ /dev/null
@@ -1,57 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-
-#ifndef _<T>defs_h
-#define _<T>defs_h 1
-
-
-// equality operator
-#ifndef <T>EQ
-#define <T>EQ(a, b) ((a) == (b))
-#endif
-
-// less-than-or-equal
-#ifndef <T>LE
-#define <T>LE(a, b) ((a) <= (b))
-#endif
-
-// comparison : less-than -> < 0; equal -> 0; greater-than -> > 0
-#ifndef <T>CMP
-#define <T>CMP(a, b) ( ((a) <= (b))? (((a) == (b))? 0 : -1) : 1 )
-#endif
-
-// hash function
-#ifndef <T>HASH
-extern unsigned int hash(<T&>);
-#define <T>HASH(x) hash(x)
-#endif
-
-// initial capacity for structures requiring one
-
-#ifndef DEFAULT_INITIAL_CAPACITY
-#define DEFAULT_INITIAL_CAPACITY 100
-#endif
-
-// HASHTABLE_TOO_CROWDED(COUNT, SIZE) is true iff a hash table with COUNT
-// elements and SIZE slots is too full, and should be resized.
-// This is so if available space is less than 1/8.
-
-#define HASHTABLE_TOO_CROWDED(COUNT, SIZE) ((SIZE) - ((SIZE) >> 3) <= (COUNT))
-
-#endif
diff --git a/contrib/libg++/libg++/src/gen/intSList.hP b/contrib/libg++/libg++/src/gen/intSList.hP
deleted file mode 100644
index 24aa3b6a685b..000000000000
--- a/contrib/libg++/libg++/src/gen/intSList.hP
+++ /dev/null
@@ -1,33 +0,0 @@
-/* : Light weight List: This will simply reuse code from a int List, which
-was genclassed from the SLList libg++ class. The classes generated from this file
-will all be derived classes from class VoidSLList or intSLList. Note that class SLList does not
-offer all the functionality of List classes, such as sharing of sub-Lists.
-However, no additional code is needed at all and no .cc file is generated. So it costs nothing
-to use these type-safe Lists. Only member functions needing type casting are re-defined */
-
-
-#ifndef _<T>SList_h
-#define _<T>SList_h 1
-
-#include "int.SLList.h"
-#include "<T>.defs.h"
-
-class <T>SList : public intSLList
-{
-public:
- <T>SList() {}
- <T>SList(<T>SList& a) : (a) {}
- ~<T>SList() {}
-
- <T>SList& operator = (<T>SList& a) {
- return (<T>SList&) intSLList::operator= (a); }
-
- <T>& operator () (Pix p) { return (<T>&) (intSLList::operator() (p)); }
- <T>& front() { return (<T>&) intSLList::front(); }
- <T>& rear() { return (<T>&) intSLList::rear(); }
- <T> remove_front() { return (<T>) intSLList::remove_front(); }
-
-};
-
-#endif /* conditional include */
-
diff --git a/contrib/libg++/libg++/src/gen/intVec.hP b/contrib/libg++/libg++/src/gen/intVec.hP
deleted file mode 100644
index e3838700251d..000000000000
--- a/contrib/libg++/libg++/src/gen/intVec.hP
+++ /dev/null
@@ -1,80 +0,0 @@
-/* : light weight Vector: This will simply reuse code from */
-/* a int Vec, which was genclassed from the Vec libg++ class. */
-/* The classes generated from this file will all be derived classes */
-/* from class VoidVec or intVec. No .cc file is generated. So */
-/* it costs nothing to use these type-safe Vectors. Only member */
-/* functions needing type casting are re-defined. */
-/* */
-
-#ifndef _<T>Vec_h
-#define _<T>Vec_h 1
-
-#include "int.Vec.h"
-#include "<T>.defs.h"
-
-
-#ifndef _<T>_typedefs
-#define _<T>_typedefs 1
-typedef void (*<T>Procedure)(<T> );
-typedef <T> (*<T>Mapper)(<T> );
-typedef <T> (*<T>Combiner)(<T> , <T> );
-typedef int (*<T>Predicate)(<T> );
-typedef int (*<T>Comparator)(<T> , <T> );
-#endif
-
-class <T>Vec : public intVec
-{
-protected:
- <T>Vec(int l, <T>* d) : (l, (int*) d) {};
-public:
- <T>Vec() {};
- <T>Vec(int l) : (l) {};
- <T>Vec(int l, <T&> fill_value) : (l, fill_value) {};
- <T>Vec(<T>Vec& v) : (v) {};
- <T>Vec(intVec& v) {fake_copy(v, s, len);}
- ~<T>Vec() {};
-
- <T>Vec& operator = (<T>Vec& a)
- {return (<T>Vec&) intVec::operator= (a);}
- <T>Vec at(int from, int n) {return (<T>Vec) intVec::at(from, n);}
-
- <T>& operator [] (int n) {return (<T>&)intVec::operator[] (n);}
- <T>& elem(int n) {return (<T>&)intVec::elem(n);}
-
- friend <T>Vec concat(<T>Vec& a, <T>Vec& b);
- friend <T>Vec map(<T>Mapper f, <T>Vec & a);
- friend <T>Vec merge(<T>Vec & a, <T>Vec & b, <T>Comparator f);
- friend <T>Vec combine(<T>Combiner f, <T>Vec & a, <T>Vec & b);
- friend <T>Vec reverse(<T>Vec& a);
-
- void sort(<T>Comparator f);
- void apply(<T>Procedure f);
- <T> reduce(<T>Combiner f, <T> base);
-};
-
-inline <T>Vec concat(<T>Vec& a, <T>Vec& b)
-{return (<T>Vec)concat((intVec&)a, (intVec&)b);}
-
-inline <T>Vec map(<T>Mapper f, <T>Vec & a) {
- return (<T>Vec)map((intMapper)f, (intVec&)a); }
-
-inline <T>Vec merge(<T>Vec & a, <T>Vec & b, <T>Comparator f) {
- return (<T>Vec)merge((intVec&)a, (intVec&)b, (intComparator)f); }
-
-inline <T>Vec combine(<T>Combiner f, <T>Vec & a, <T>Vec & b) {
- return (<T>Vec)combine((intCombiner)f, (intVec&)a, (intVec&)b); }
-
-inline <T>Vec reverse(<T>Vec& a) {
- return (<T>Vec)reverse((intVec&)a);}
-
-inline void <T>Vec::sort(<T>Comparator f) {
- intVec::sort((intComparator) f); }
-
-inline void <T>Vec::apply(<T>Procedure f) {
- intVec::apply((intProcedure) f); }
-
-inline <T> <T>Vec::reduce(<T>Combiner f, <T> base) {
- return (<T>)intVec::reduce((intCombiner)f, base);}
-
-#endif /* conditional include */
-
diff --git a/contrib/libg++/libg++/src/generic.h b/contrib/libg++/libg++/src/generic.h
deleted file mode 100644
index d49a924afd12..000000000000
--- a/contrib/libg++/libg++/src/generic.h
+++ /dev/null
@@ -1,54 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifndef generic_h
-#define generic_h 1
-
-/*
- * See the CPP manual, argument prescan section for explanation
- */
-
-#define name2(a,b) gEnErIc2(a,b)
-#define gEnErIc2(a,b) a ## b
-
-#define name3(a,b,c) gEnErIc3(a,b,c)
-#define gEnErIc3(a,b,c) a ## b ## c
-
-#define name4(a,b,c,d) gEnErIc4(a,b,c,d)
-#define gEnErIc4(a,b,c,d) a ## b ## c ## d
-
-#define GENERIC_STRING(a) gEnErIcStRiNg(a)
-#define gEnErIcStRiNg(a) #a
-
-#define declare(clas,t) name2(clas,declare)(t)
-#define declare2(clas,t1,t2) name2(clas,declare2)(t1,t2)
-
-#define implement(clas,t) name2(clas,implement)(t)
-#define implement2(clas,t1,t2) name2(clas,implement2)(t1,t2)
-
-//extern genericerror(int,char*);
-typedef int (*GPT)(int,char*);
-
-#define set_handler(gen,type,x) name4(set_,type,gen,_handler)(x)
-
-#define errorhandler(gen,type) name3(type,gen,handler)
-
-#define callerror(gen,type,a,b) (*errorhandler(gen,type))(a,b)
-
-
-#endif /* generic_h */
diff --git a/contrib/libg++/libg++/src/getpagesize.h b/contrib/libg++/libg++/src/getpagesize.h
deleted file mode 100644
index 17d84316bd57..000000000000
--- a/contrib/libg++/libg++/src/getpagesize.h
+++ /dev/null
@@ -1,27 +0,0 @@
-#if defined(BSD) || defined(DGUX)
-#ifndef BSD4_1
-#define HAVE_GETPAGESIZE
-#endif
-#endif
-
-#ifndef HAVE_GETPAGESIZE
-
-#include <sys/param.h>
-
-#ifdef EXEC_PAGESIZE
-#define getpagesize() EXEC_PAGESIZE
-#else
-#ifdef NBPG
-#define getpagesize() NBPG * CLSIZE
-#ifndef CLSIZE
-#define CLSIZE 1
-#endif /* no CLSIZE */
-#else /* no NBPG */
-#ifdef NBPC
-#define getpagesize() NBPC
-#endif /* NBPC */
-#endif /* no NBPG */
-#endif /* no EXEC_PAGESIZE */
-
-#endif /* not HAVE_GETPAGESIZE */
-
diff --git a/contrib/libg++/libg++/src/hash.cc b/contrib/libg++/libg++/src/hash.cc
deleted file mode 100644
index 670e53f2bda5..000000000000
--- a/contrib/libg++/libg++/src/hash.cc
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
-Copyright (C) 1990 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <builtin.h>
-
-/*
- some useful hash functions
-*/
-
-unsigned int hashpjw(const char* x) // From Dragon book, p436
-{
- unsigned int h = 0;
- unsigned int g;
-
- while (*x != 0)
- {
- h = (h << 4) + *x++;
- if ((g = h & 0xf0000000) != 0)
- h = (h ^ (g >> 24)) ^ g;
- }
- return h;
-}
-
-unsigned int multiplicativehash(int x)
-{
- // uses a const close to golden ratio * pow(2,32)
- return ((unsigned)x) * 2654435767;
-}
-
-
-unsigned int foldhash(double x)
-{
- union { unsigned int i[2]; double d; } u;
- u.d = x;
- unsigned int u0 = u.i[0];
- unsigned int u1 = u.i[1];
- return u0 ^ u1;
-}
-
diff --git a/contrib/libg++/libg++/src/ioob.cc b/contrib/libg++/libg++/src/ioob.cc
deleted file mode 100644
index 08409a5d292d..000000000000
--- a/contrib/libg++/libg++/src/ioob.cc
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
-Copyright (C) 1990 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of GNU CC.
-
-GNU CC is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY. No author or distributor
-accepts responsibility to anyone for the consequences of using it
-or for whether it serves any particular purpose or works at all,
-unless he says so in writing. Refer to the GNU CC General Public
-License for full details.
-
-Everyone is granted permission to copy, modify and redistribute
-GNU CC, but only under the conditions described in the
-GNU CC General Public License. A copy of this license is
-supposed to have been given to you along with GNU CC so you
-can know your rights and responsibilities. It should be in a
-file named COPYING. Among other things, the copyright notice
-and this notice must be preserved on all copies.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <Obstack.h>
-
-// Obstacks are used as an easy way to allocate enough space
-// for various builtin input operations
-
-
-Obstack _libgxx_io_ob;
diff --git a/contrib/libg++/libg++/src/lg.cc b/contrib/libg++/libg++/src/lg.cc
deleted file mode 100644
index 0397dd43f010..000000000000
--- a/contrib/libg++/libg++/src/lg.cc
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
-Copyright (C) 1990 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <builtin.h>
-
-long lg(unsigned long x)
-{
- long l = 0;
- while (x > 1)
- {
- x = x >> 1;
- ++l;
- }
- return l;
-}
diff --git a/contrib/libg++/libg++/src/libc.h b/contrib/libg++/libg++/src/libc.h
deleted file mode 100644
index c8b49f26d172..000000000000
--- a/contrib/libg++/libg++/src/libc.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <stdlib.h>
diff --git a/contrib/libg++/libg++/src/malloc.c b/contrib/libg++/libg++/src/malloc.c
deleted file mode 100644
index ff570968084f..000000000000
--- a/contrib/libg++/libg++/src/malloc.c
+++ /dev/null
@@ -1,2690 +0,0 @@
-/* ---------- To make a malloc.h, start cutting here ------------ */
-
-/*
- A version of malloc/free/realloc written by Doug Lea and released to the
- public domain. Send questions/comments/complaints/performance data
- to dl@cs.oswego.edu
-
-* preliminary VERSION 2.6.2q Mon Jan 8 10:28:33 1996 Doug Lea (dl at gee)
-
- Note: There may be an updated version of this malloc obtainable at
- ftp://g.oswego.edu/pub/misc/malloc.c
- Check before installing!
-
-* Synopsis of public routines
-
- (Much fuller descriptions are contained in the program documentation below.)
-
- malloc(size_t n);
- Return a pointer to a newly allocated chunk of at least n bytes, or null
- if no space is available.
- free(Void_t* p);
- Release the chunk of memory pointed to by p, or no effect if p is null.
- realloc(Void_t* p, size_t n);
- Return a pointer to a chunk of size n that contains the same data
- as does chunk p up to the minimum of (n, p's size) bytes, or null
- if no space is available. The returned pointer may or may not be
- the same as p. If p is null, equivalent to malloc. Unless the
- #define REALLOC_ZERO_BYTES_FREES below is set, realloc with a
- size argument of zero (re)allocates a minimum-sized chunk.
- memalign(size_t alignment, size_t n);
- Return a pointer to a newly allocated chunk of n bytes, aligned
- in accord with the alignment argument, which must be a power of
- two.
- valloc(size_t n);
- Equivalent to memalign(pagesize, n), where pagesize is the page
- size of the system (or as near to this as can be figured out from
- all the includes/defines below.)
- calloc(size_t unit, size_t quantity);
- Returns a pointer to quantity * unit bytes, with all locations
- set to zero.
- cfree(Void_t* p);
- Equivalent to free(p).
- malloc_trim(size_t pad);
- Release all but pad bytes of freed top-most memory back
- to the system. Return 1 if successful, else 0.
- malloc_usable_size(Void_t* p);
- Report the number usable allocated bytes associated with allocated
- chunk p. This may or may not report more bytes than were requested,
- due to alignment and minimum size constraints.
- malloc_stats();
- Prints brief summary statistics on stderr.
- mallinfo()
- Returns (by copy) a struct containing various summary statistics.
- mallopt(int parameter_number, int parameter_value)
- Changes one of the tunable parameters described below. Returns
- 1 if successful in changing the parameter, else 0.
-
-* Vital statistics:
-
- Alignment: 8-byte
-
- 8 byte alignment is currently hardwired into the design. This
- seems to suffice for all current machines and C compilers.
-
- Assumed pointer representation: 4 bytes
- Assumed size_t representation: 4 bytes
- Minimum overhead per allocated chunk: 4 bytes
-
- Each malloced chunk has a hidden overhead of 4 bytes holding size
- and status information.
-
- Minimum allocated size: 16 bytes (12 bytes usable, 4 overhead)
-
- When a chunk is freed, 12 additional bytes are needed; 4 for a
- trailing size field and 8 bytes for free list pointers. Thus,
- the minimum allocatable size is 16 bytes, of which 12 bytes are
- usable. Even a request for zero bytes (i.e., malloc(0)) returns
- a pointer to something of the minimum allocatable size.
-
- Maximum allocated size: 2147483640 (2^31 - 8) bytes
-
- It is assumed that (possibly signed) 32 bit values suffice to
- represent chunk sizes. `Possibly signed' is due to the fact
- that `size_t' may be defined on a system as either a signed or
- an unsigned type. To be conservative, values that would appear
- as negative numbers are avoided. The maximum size chunk is
- 2^31 - 8 bytes. Requests for negative sizes (when size_t is
- signed) or those greater than (2^31 - 8) bytes will return a
- minimum-sized chunk.
-
- Maximum overhead wastage per allocated chunk: normally 15 bytes
-
- Alignnment demands, plus the minimum allocatable size restriction
- make the normal worst-case wastage 15 bytes (i.e., up to 15
- more bytes will be allocated than were requested in malloc), with
- two exceptions:
- 1. Because requests for zero bytes allocate non-zero space,
- the worst case wastage for a request of zero bytes is 24 bytes.
- 2. For requests >= mmap_threshold that are serviced via
- mmap(), the worst case wastage is 8 bytes plus the remainder
- from a system page (the minimal mmap unit); typically 4096 bytes.
-
-
-* Synopsis of compile-time options:
-
- People have reported using previous versions of this malloc on all
- versions of Unix, sometimes by tweaking some of the defines
- below. It has been tested most extensively on Solaris and
- Linux. People have also reported adapting this malloc for use in
- stand-alone embedded systems.
-
- The implementation is in straight, hand-tuned ANSI C. Among other
- consequences, it uses a lot of macros. Because of this, to be at
- all usable, this code should be compiled using an optimizing compiler
- (for example gcc -O2) that can simplify expressions and control
- paths.
-
- __STD_C (default: derived from C compiler defines)
- Nonzero if using ANSI-standard C compiler, a C++ compiler, or
- a C compiler sufficiently close to ANSI to get away with it.
- DEBUG (default: NOT defined)
- Define to enable debugging. Adds fairly extensive assertion-based
- checking to help track down memory errors, but noticeably slows down
- execution.
- REALLOC_ZERO_BYTES_FREES (default: NOT defined)
- Define this if you think that realloc(p, 0) should be equivalent
- to free(p). Otherwise, since malloc returns a unique pointer for
- malloc(0), so does realloc(p, 0).
- HAVE_MEMCPY (default: defined)
- Define if you are not otherwise using ANSI STD C, but still
- have memcpy and memset in your C library and want to use them.
- Otherwise, simple internal versions are supplied.
- HAVE_MMAP (default: defined as 1)
- Define to non-zero to optionally make malloc() use mmap() to
- allocate very large blocks.
- malloc_getpagesize (default: derived from system #includes)
- Either a constant or routine call returning the system page size.
- HAVE_USR_INCLUDE_MALLOC_H (default: NOT defined)
- Optionally define if you are on a system with a /usr/include/malloc.h
- that declares struct mallinfo. It is not at all necessary to
- define this even if you do, but will ensure consistency.
- INTERNAL_LINUX_C_LIB (default: NOT defined)
- Defined only when compiled as part of Linux libc.
- Also note that there is some odd internal name-magling via defines
- (for example, internally, `malloc' is named `mALLOc') needed
- when compiling in this case. These look funny but don't otherwise
- affect anything.
- MORECORE (default: sbrk)
- The name of the routine to call to obtain more memory from the system.
- MORECORE_FAILURE (default: -1)
- The value returned upon failure of MORECORE.
- DEFAULT_TRIM_THRESHOLD
- DEFAULT_TOP_PAD
- DEFAULT_MMAP_THRESHOLD
- DEFAULT_MMAP_MAX
- Default values of tunable parameters (described in detail below)
- controlling interaction with host system routines (sbrk, mmap, etc).
- These values may also be changed dynamically via mallopt(). The
- preset defaults are those that give best performance for typical
- programs/systems.
-
-
-*/
-
-
-
-
-/* Preliminaries */
-
-#ifndef __STD_C
-#ifdef __STDC__
-#define __STD_C 1
-#else
-#if __cplusplus
-#define __STD_C 1
-#else
-#define __STD_C 0
-#endif /*__cplusplus*/
-#endif /*__STDC__*/
-#endif /*__STD_C*/
-
-#ifndef Void_t
-#if __STD_C
-#define Void_t void
-#else
-#define Void_t char
-#endif
-#endif /*Void_t*/
-
-#if __STD_C
-#include <stddef.h> /* for size_t */
-#else
-#include <sys/types.h>
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <stdio.h> /* needed for malloc_stats */
-
-
-/*
- Compile-time options
-*/
-
-
-/*
- Debugging:
-
- Because freed chunks may be overwritten with link fields, this
- malloc will often die when freed memory is overwritten by user
- programs. This can be very effective (albeit in an annoying way)
- in helping track down dangling pointers.
-
- If you compile with -DDEBUG, a number of assertion checks are
- enabled that will catch more memory errors. You probably won't be
- able to make much sense of the actual assertion errors, but they
- should help you locate incorrectly overwritten memory. The
- checking is fairly extensive, and will slow down execution
- noticeably. Calling malloc_stats or mallinfo with DEBUG set will
- attempt to check every non-mmapped allocated and free chunk in the
- course of computing the summmaries. (By nature, mmapped regions
- cannot be checked very much automatically.)
-
- Setting DEBUG may also be helpful if you are trying to modify
- this code. The assertions in the check routines spell out in more
- detail the assumptions and invariants underlying the algorithms.
-
-*/
-
-#if DEBUG
-#include <assert.h>
-#else
-#define assert(x) ((void)0)
-#endif
-
-
-
-/*
- REALLOC_ZERO_BYTES_FREES should be set if a call to
- realloc with zero bytes should be the same as a call to free.
- Some people think it should. Otherwise, since this malloc
- returns a unique pointer for malloc(0), so does realloc(p, 0).
-*/
-
-
-/* #define REALLOC_ZERO_BYTES_FREES */
-
-
-/*
- HAVE_MEMCPY should be defined if you are not otherwise using
- ANSI STD C, but still have memcpy and memset in your C library
- and want to use them in calloc and realloc. Otherwise simple
- macro versions are defined here.
-*/
-
-#define HAVE_MEMCPY
-
-#if __STD_C || defined(HAVE_MEMCPY)
-
-void* memset(void*, int, size_t);
-void* memcpy(void*, const void*, size_t);
-
-#define MALLOC_ZERO(charp, nbytes) memset(charp, 0, nbytes)
-#define MALLOC_COPY(dest,src,nbytes) memcpy((dest), (src), (nbytes))
-
-#else
-
-/* We only invoke with multiples of size_t units, with size_t alignment */
-
-#define MALLOC_ZERO(charp, nbytes) \
-{ \
- size_t* mzp = (size_t*)(charp); \
- size_t mzn = (nbytes) / sizeof(size_t); \
- while (mzn-- > 0) *mzp++ = 0; \
-}
-
-#define MALLOC_COPY(dest,src,nbytes) \
-{ \
- size_t* mcsrc = (size_t*) src; \
- size_t* mcdst = (size_t*) dest; \
- long mcn = (nbytes) / sizeof(size_t); \
- while (mcn-- > 0) *mcdst++ = *mcsrc++; \
-}
-
-#endif
-
-/*
- Define HAVE_MMAP to optionally make malloc() use mmap() to
- allocate very large blocks. These will be returned to the
- operating system immediately after a free().
-*/
-
-#ifndef HAVE_MMAP
-#define HAVE_MMAP 1
-#endif
-
-#if HAVE_MMAP
-
-#include <unistd.h>
-#include <fcntl.h>
-#include <sys/mman.h>
-
-#if !defined(MAP_ANONYMOUS) && defined(MAP_ANON)
-#define MAP_ANONYMOUS MAP_ANON
-#endif
-
-#endif /* HAVE_MMAP */
-
-/*
- Access to system page size. To the extent possible, this malloc
- manages memory from the system in page-size units.
-
- The following mechanics for getpagesize were adapted from
- bsd/gnu getpagesize.h
-*/
-
-#ifndef malloc_getpagesize
-#if defined(BSD) || defined(DGUX) || defined(HAVE_GETPAGESIZE)
- extern size_t getpagesize();
-# define malloc_getpagesize getpagesize()
-#else
-# include <sys/param.h>
-# ifdef EXEC_PAGESIZE
-# define malloc_getpagesize EXEC_PAGESIZE
-# else
-# ifdef NBPG
-# ifndef CLSIZE
-# define malloc_getpagesize NBPG
-# else
-# define malloc_getpagesize (NBPG * CLSIZE)
-# endif
-# else
-# ifdef NBPC
-# define malloc_getpagesize NBPC
-# else
-# ifdef PAGESIZE
-# define malloc_getpagesize PAGESIZE
-# else
-# define malloc_getpagesize (4096) /* just guess */
-# endif
-# endif
-# endif
-# endif
-#endif
-#endif
-
-/*
-
- This version of malloc supports the standard SVID/XPG mallinfo
- routine that returns a struct containing the same kind of
- information you can get from malloc_stats. It should work on
- any SVID/XPG compliant system that has a /usr/include/malloc.h
- defining struct mallinfo. (If you'd like to install such a thing
- yourself, cut out the preliminary declarations as described above
- and below and save them in a malloc.h file. But there's no
- compelling reason to bother to do this.)
-
- The main declaration needed is the mallinfo struct that is returned
- (by-copy) by mallinfo(). The SVID/XPG malloinfo struct contains a
- bunch of fields, most of which are not even meaningful in this
- version of malloc. Some of these fields are are instead filled by
- mallinfo() with other numbers that might possibly be of interest.
-
- HAVE_USR_INCLUDE_MALLOC_H should be set if you have a
- /usr/include/malloc.h file that includes a declaration of struct
- mallinfo. If so, it is included; else an SVID2/XPG2 compliant
- version is declared below. These must be precisely the same for
- mallinfo() to work.
-
-*/
-
-/* #define HAVE_USR_INCLUDE_MALLOC_H */
-
-#if HAVE_USR_INCLUDE_MALLOC_H
-#include "/usr/include/malloc.h"
-#else
-
-/* SVID2/XPG mallinfo structure */
-
-struct mallinfo {
- int arena; /* total space allocated from system */
- int ordblks; /* number of non-inuse chunks */
- int smblks; /* unused -- always zero */
- int hblks; /* number of mmapped regions */
- int hblkhd; /* total space in mmapped regions */
- int usmblks; /* unused -- always zero */
- int fsmblks; /* unused -- always zero */
- int uordblks; /* total allocated space */
- int fordblks; /* total non-inuse space */
- int keepcost; /* top-most, releasable (via malloc_trim) space */
-};
-
-/* SVID2/XPG mallopt options */
-
-#define M_MXFAST 1 /* UNUSED in this malloc */
-#define M_NLBLKS 2 /* UNUSED in this malloc */
-#define M_GRAIN 3 /* UNUSED in this malloc */
-#define M_KEEP 4 /* UNUSED in this malloc */
-
-#endif
-
-/* mallopt options that actually do something */
-
-#define M_TRIM_THRESHOLD -1
-#define M_TOP_PAD -2
-#define M_MMAP_THRESHOLD -3
-#define M_MMAP_MAX -4
-
-
-
-#ifndef DEFAULT_TRIM_THRESHOLD
-#define DEFAULT_TRIM_THRESHOLD (1024 * 1024)
-#endif
-
-/*
- M_TRIM_THRESHOLD is the maximum amount of unused top-most memory
- to keep before releasing via malloc_trim in free().
-
- Automatic trimming is mainly useful in long-lived programs.
- Because trimming via sbrk can be slow on some systems, and can
- sometimes be wasteful (in cases where programs immediately
- afterward allocate more large chunks) the value should be high
- enough so that your overall system performance would improve by
- releasing.
-
- The trim threshold and the mmap control parameters (see below)
- can be traded off with one another. Trimming and mmapping are
- two different ways of releasing unused memory back to the
- system. Between these two, it is often possible to keep
- system-level demands of a long-lived program down to a bare
- minimum. For example, in one test suite of sessions measuring
- the XF86 X server on Linux, using a trim threshold of 128K and a
- mmap threshold of 192K led to near-minimal long term resource
- consumption.
-
- If you are using this malloc in a long-lived program, it should
- pay to experiment with these values. As a rough guide, you
- might set to a value close to the average size of a process
- (program) running on your system. Releasing this much memory
- would allow such a process to run in memory. Generally, it's
- worth it to tune for trimming rather tham memory mapping when a
- program undergoes phases where several large chunks are
- allocated and released in ways that can reuse each other's
- storage, perhaps mixed with phases where there are no such
- chunks at all. And in well-behaved long-lived programs,
- controlling release of large blocks via trimming versus mapping
- is usually faster.
-
- However, in most programs, these parameters serve mainly as
- protection against the system-level effects of carrying around
- massive amounts of unneeded memory. Since frequent calls to
- sbrk, mmap, and munmap otherwise degrade performance, the default
- parameters are set to relatively high values that serve only as
- safeguards.
-
- The default trim value is high enough to cause trimming only in
- fairly extreme (by current memory consumption standards) cases.
- It must be greater than page size to have any useful effect. To
- disable trimming completely, you can set to (unsigned long)(-1);
-
-
-*/
-
-
-#ifndef DEFAULT_TOP_PAD
-#define DEFAULT_TOP_PAD (0)
-#endif
-
-/*
- M_TOP_PAD is the amount of extra `padding' space to allocate or
- retain whenever sbrk is called. It is used in two ways internally:
-
- * When sbrk is called to extend the top of the arena to satisfy
- a new malloc request, this much padding is added to the sbrk
- request.
-
- * When malloc_trim is called automatically from free(),
- it is used as the `pad' argument.
-
- In both cases, the actual amount of padding is rounded
- so that the end of the arena is always a system page boundary.
-
- The main reason for using padding is to avoid calling sbrk so
- often. Having even a small pad greatly reduces the likelihood
- that nearly every malloc request during program start-up (or
- after trimming) will invoke sbrk, which needlessly wastes
- time.
-
- Automatic rounding-up to page-size units is normally sufficient
- to avoid measurable overhead, so the default is 0. However, in
- systems where sbrk is relatively slow, it can pay to increase
- this value, at the expense of carrying around more memory than
- the program needs.
-
-*/
-
-
-#ifndef DEFAULT_MMAP_THRESHOLD
-#define DEFAULT_MMAP_THRESHOLD (128 * 1024)
-#endif
-
-/*
-
- M_MMAP_THRESHOLD is the request size threshold for using mmap()
- to service a request. Requests of at least this size that cannot
- be allocated using already-existing space will be serviced via mmap.
- (If enough normal freed space already exists it is used instead.)
-
- Using mmap segregates relatively large chunks of memory so that
- they can be individually obtained and released from the host
- system. A request serviced through mmap is never reused by any
- other request (at least not directly; the system may just so
- happen to remap successive requests to the same locations).
-
- Segregating space in this way has the benefit that mmapped space
- can ALWAYS be individually released back to the system, which
- helps keep the system level memory demands of a long-lived
- program low. Mapped memory can never become `locked' between
- other chunks, as can happen with normally allocated chunks, which
- menas that even trimming via malloc_trim would not release them.
-
- However, it has the disadvantages that:
-
- 1. The space cannot be reclaimed, consolidated, and then
- used to service later requests, as happens with normal chunks.
- 2. It can lead to more wastage because of mmap page alignment
- requirements
- 3. It causes malloc performance to be more dependent on host
- system memory management support routines which may vary in
- implementation quality and may impose arbitrary
- limitations. Generally, servicing a request via normal
- malloc steps is faster than going through a system's mmap.
-
- All together, these considerations should lead you to use mmap
- only for relatively large requests.
-
-
-*/
-
-
-
-#ifndef DEFAULT_MMAP_MAX
-#if HAVE_MMAP
-#define DEFAULT_MMAP_MAX (8)
-#else
-#define DEFAULT_MMAP_MAX (0)
-#endif
-#endif
-
-/*
- M_MMAP_MAX is the maximum number of requests to simultaneously
- service using mmap. This parameter exists because:
-
- 1. Some systems have a limited number of internal tables for
- use by mmap.
- 2. In most systems, overreliance on mmap can degrade overall
- performance.
- 3. If a program allocates many large regions, it is probably
- better off using normal sbrk-based allocation routines that
- can reclaim and reallocate normal heap memory. Using a
- small value allows transition into this mode after the
- first few allocations.
-
- Setting to 0 disables all use of mmap. If HAVE_MMAP is not set,
- the default value is 0, and attempts to set it to non-zero values
- in mallopt will fail.
-*/
-
-
-
-/*
-
- Special defines for linux libc
-
- Except when compiled using these special defines for Linux libc
- using weak aliases, this malloc is NOT designed to work in
- multithreaded applications. No semaphores or other concurrency
- control are provided to ensure that multiple malloc or free calls
- don't run at the same time, which could be disasterous. A single
- semaphore could be used across malloc, realloc, and free (which is
- essentially the effect of the linux weak alias approach). It would
- be hard to obtain finer granularity.
-
-*/
-
-
-#ifdef INTERNAL_LINUX_C_LIB
-
-#if __STD_C
-
-Void_t * __default_morecore_init (ptrdiff_t);
-Void_t *(*__morecore)(ptrdiff_t) = __default_morecore_init;
-
-#else
-
-Void_t * __default_morecore_init ();
-Void_t *(*__morecore)() = __default_morecore_init;
-
-#endif
-
-#define MORECORE (*__morecore)
-#define MORECORE_FAILURE 0
-
-#else /* INTERNAL_LINUX_C_LIB */
-
-#if __STD_C
-extern Void_t* sbrk(ptrdiff_t);
-#else
-extern Void_t* sbrk();
-#endif
-
-#ifndef MORECORE
-#define MORECORE sbrk
-#endif
-
-#ifndef MORECORE_FAILURE
-#define MORECORE_FAILURE -1
-#endif
-
-#endif /* INTERNAL_LINUX_C_LIB */
-
-#if defined(INTERNAL_LINUX_C_LIB) && defined(__ELF__)
-
-#define cALLOc __libc_calloc
-#define fREe __libc_free
-#define mALLOc __libc_malloc
-#define mEMALIGn __libc_memalign
-#define rEALLOc __libc_realloc
-#define vALLOc __libc_valloc
-#define mALLINFo __libc_mallinfo
-#define mALLOPt __libc_mallopt
-
-#pragma weak calloc = __libc_calloc
-#pragma weak free = __libc_free
-#pragma weak cfree = __libc_free
-#pragma weak malloc = __libc_malloc
-#pragma weak memalign = __libc_memalign
-#pragma weak realloc = __libc_realloc
-#pragma weak valloc = __libc_valloc
-#pragma weak mallinfo = __libc_mallinfo
-#pragma weak mallopt = __libc_mallopt
-
-#else
-
-#define cALLOc calloc
-#define fREe free
-#define mALLOc malloc
-#define mEMALIGn memalign
-#define rEALLOc realloc
-#define vALLOc valloc
-#define mALLINFo mallinfo
-#define mALLOPt mallopt
-
-#endif
-
-/* Public routines */
-
-#if __STD_C
-
-Void_t* mALLOc(size_t);
-void fREe(Void_t*);
-Void_t* rEALLOc(Void_t*, size_t);
-Void_t* mEMALIGn(size_t, size_t);
-Void_t* vALLOc(size_t);
-Void_t* cALLOc(size_t, size_t);
-void cfree(Void_t*);
-int malloc_trim(size_t);
-size_t malloc_usable_size(Void_t*);
-void malloc_stats();
-int mALLOPt(int, int);
-struct mallinfo mALLINFo(void);
-#else
-Void_t* mALLOc();
-void fREe();
-Void_t* rEALLOc();
-Void_t* mEMALIGn();
-Void_t* vALLOc();
-Void_t* cALLOc();
-void cfree();
-int malloc_trim();
-size_t malloc_usable_size();
-void malloc_stats();
-int mALLOPt();
-struct mallinfo mALLINFo();
-#endif
-
-
-#ifdef __cplusplus
-}; /* end of extern "C" */
-#endif
-
-/* ---------- To make a malloc.h, end cutting here ------------ */
-
-
-
-
-/*
- Type declarations
-*/
-
-
-struct malloc_chunk
-{
- size_t size; /* Size in bytes, including overhead. */
- struct malloc_chunk* fd; /* double links -- used only if free. */
- struct malloc_chunk* bk;
- size_t unused; /* to pad decl to min chunk size */
-};
-
-typedef struct malloc_chunk* mchunkptr;
-
-/*
-
- malloc_chunk details:
-
- (The following includes lightly edited explanations by Colin Plumb.)
-
- Chunks of memory are maintained using a `boundary tag' method as
- described in e.g., Knuth or Standish. (See the paper by Paul
- Wilson ftp://ftp.cs.utexas.edu/pub/garbage/allocsrv.ps for a
- survey of such techniques.) Sizes of free chunks are stored both
- in the front of each chunk and at the end. This makes
- consolidating fragmented chunks into bigger chunks very fast. The
- size fields also hold bits representing whether chunks are free or
- in use.
-
- An allocated chunk looks like this:
-
-
- chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- | Size of chunk, in bytes |P|
- mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- | User data starts here... .
- . .
- . (malloc_usable_space() bytes) .
- . |
-nextchunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- | Size of next chunk |1|
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
-
- Where "chunk" is the front of the chunk for the purpose of most of
- the malloc code, but "mem" is the pointer that is returned to the
- user. "Nextchunk" is the beginning of the next contiguous chunk.
-
- Chunks always begin on odd-word boundries, so the mem portion
- (which is returned to the user) is on an even word boundary, and
- thus double-word aligned.
-
- Free chunks are stored in circular doubly-linked lists, and look like this:
-
- chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- `head:' | Size of chunk, in bytes |P|
- mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- | Forward pointer to next chunk in list |
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- | Back pointer to previous chunk in list |
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- | Unused space (may be 0 bytes long) .
- . .
- . |
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- `foot:' | Size of chunk, in bytes |
-nextchunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- | Size of next chunk |0|
- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
- The P (PREV_INUSE) bit, stored in the unused low-order bit of the
- chunk size (which is always a multiple of two words), is an in-use
- bit for the *previous* chunk. If that bit is *clear*, then the
- word before the current chunk size contains the previous chunk
- size, and can be used to find the front of the previous chunk.
- (The very first chunk allocated always has this bit set,
- preventing access to non-existent (or non-owned) memory.)
-
- The two exceptions to all this are
-
- 1. The special chunk `top', which doesn't bother using the
- trailing size field since there is no
- next contiguous chunk that would have to index off it. (After
- initialization, `top' is forced to always exist. If it would
- become less than MINSIZE bytes long, it is replenished via
- malloc_extend_top.)
-
- 2. Chunks allocated via mmap, which have the second-lowest-order
- bit (IS_MMAPPED) set in their size fields. Because they are
- never merged or traversed from any other chunk, they have no
- foot size or inuse information.
-
- Available chunks are kept in any of several places (all declared below):
-
- * `av': An array of chunks serving as bin headers for consolidated
- chunks. Each bin is doubly linked. The bins are approximately
- proportionally (log) spaced. There are a lot of these bins
- (128). This may look excessive, but works very well in
- practice. All procedures maintain the invariant that no
- consolidated chunk physically borders another one. Chunks in
- bins are kept in size order, with ties going to the
- approximately least recently used chunk.
-
- The chunks in each bin are maintained in decreasing sorted order by
- size. This is irrelevant for the small bins, which all contain
- the same-sized chunks, but facilitates best-fit allocation for
- larger chunks. (These lists are just sequential. Keeping them in
- order almost never requires enough traversal to warrant using
- fancier ordered data structures.) Chunks of the same size are
- linked with the most recently freed at the front, and allocations
- are taken from the back. This results in LRU or FIFO allocation
- order, which tends to give each chunk an equal opportunity to be
- consolidated with adjacent freed chunks, resulting in larger free
- chunks and less fragmentation.
-
- * `top': The top-most available chunk (i.e., the one bordering the
- end of available memory) is treated specially. It is never
- included in any bin, is used only if no other chunk is
- available, and is released back to the system if it is very
- large (see M_TRIM_THRESHOLD).
-
- * `last_remainder': A bin holding only the remainder of the
- most recently split (non-top) chunk. This bin is checked
- before other non-fitting chunks, so as to provide better
- locality for runs of sequentially allocated chunks.
-
- * Implicitly, through the host system's memory mapping tables.
- If supported, requests greater than a threshold are usually
- serviced via calls to mmap, and then later released via munmap.
-
-*/
-
-
-
-
-
-
-/* sizes, alignments */
-
-#define SIZE_SZ (sizeof(size_t))
-#define MALLOC_ALIGNMENT (SIZE_SZ + SIZE_SZ)
-#define MALLOC_ALIGN_MASK (MALLOC_ALIGNMENT - 1)
-#define MINSIZE (sizeof(struct malloc_chunk))
-
-/* conversion from malloc headers to user pointers, and back */
-
-#define chunk2mem(p) ((Void_t*)((char*)(p) + SIZE_SZ))
-#define mem2chunk(mem) ((mchunkptr)((char*)(mem) - SIZE_SZ))
-
-/* pad request bytes into a usable size */
-
-#define request2size(req) \
- (((long)(req) < (long)(MINSIZE - SIZE_SZ)) ? MINSIZE : \
- (((req) + SIZE_SZ + MALLOC_ALIGN_MASK) & ~(MALLOC_ALIGN_MASK)))
-
-
-/* Check if m has acceptable alignment */
-
-#define aligned_OK(m) (((size_t)((m)) & (MALLOC_ALIGN_MASK)) == 0)
-
-
-
-
-/*
- Physical chunk operations
-*/
-
-
-/* size field is or'ed with PREV_INUSE when previous adjacent chunk in use */
-
-#define PREV_INUSE 0x1
-
-/* size field is or'ed with IS_MMAPPED if the chunk was obtained with mmap() */
-
-#define IS_MMAPPED 0x2
-
-/* Bits to mask off when extracting size */
-
-#define SIZE_BITS (PREV_INUSE|IS_MMAPPED)
-
-
-/* Ptr to next physical malloc_chunk. */
-
-#define next_chunk(p) ((mchunkptr)( ((char*)(p)) + ((p)->size & ~PREV_INUSE) ))
-
-/* Ptr to previous physical malloc_chunk */
-
-#define prev_chunk(p)\
- ((mchunkptr)( ((char*)(p)) - *((size_t*)((char*)(p) - SIZE_SZ))))
-
-
-/* Treat space at ptr + offset as a chunk */
-
-#define chunk_at_offset(p, s) ((mchunkptr)(((char*)(p)) + (s)))
-
-
-
-
-/*
- Dealing with use bits
-*/
-
-/* extract p's inuse bit */
-
-#define inuse(p)\
-((((mchunkptr)(((char*)(p))+((p)->size & ~PREV_INUSE)))->size) & PREV_INUSE)
-
-/* extract inuse bit of previous chunk */
-
-#define prev_inuse(p) ((p)->size & PREV_INUSE)
-
-/* check for mmap()'ed chunk */
-
-#define chunk_is_mmapped(p) ((p)->size & IS_MMAPPED)
-
-/* set/clear chunk as in use without otherwise disturbing */
-
-#define set_inuse(p)\
-((mchunkptr)(((char*)(p)) + ((p)->size & ~PREV_INUSE)))->size |= PREV_INUSE
-
-#define clear_inuse(p)\
-((mchunkptr)(((char*)(p)) + ((p)->size & ~PREV_INUSE)))->size &= ~(PREV_INUSE)
-
-/* check/set/clear inuse bits in known places */
-
-#define inuse_bit_at_offset(p, s)\
- (((mchunkptr)(((char*)(p)) + (s)))->size & PREV_INUSE)
-
-#define set_inuse_bit_at_offset(p, s)\
- (((mchunkptr)(((char*)(p)) + (s)))->size |= PREV_INUSE)
-
-#define clear_inuse_bit_at_offset(p, s)\
- (((mchunkptr)(((char*)(p)) + (s)))->size &= ~(PREV_INUSE))
-
-
-
-
-/*
- Dealing with size fields
-*/
-
-/* Get size, ignoring use bits */
-
-#define chunksize(p) ((p)->size & ~(SIZE_BITS))
-
-/* Set size at head, without disturbing its use bit */
-
-#define set_head_size(p, s) ((p)->size = (((p)->size & PREV_INUSE) | (s)))
-
-/* Set size/use ignoring previous bits in header */
-
-#define set_head(p, s) ((p)->size = (s))
-
-/* Set size at footer (only when chunk is not in use) */
-
-#define set_foot(p, s) (*((size_t*)((char*)(p) + (s) - SIZE_SZ)) = (s))
-
-/* Get size of previous (but not inuse) chunk */
-
-#define prev_size(p) (*((size_t*)((char*)(p) - SIZE_SZ)))
-
-
-
-
-
-/*
- Bins
-
- The bins, `av_' are an array of pairs of pointers serving as the
- heads of (initially empty) doubly-linked lists of chunks, laid out
- in a way so that each pair can be treated as if it were in a
- malloc_chunk. (This way, the fd/bk offsets for linking bin heads
- and chunks are the same).
-
- Bins for sizes < 512 bytes contain chunks of all the same size, spaced
- 8 bytes apart. Larger bins are approximately logarithmically
- spaced. (See the table below.) The `av_' array is never mentioned
- directly in the code, but instead via bin access macros.
-
- Bin layout:
-
- 64 bins of size 8
- 32 bins of size 64
- 16 bins of size 512
- 8 bins of size 4096
- 4 bins of size 32768
- 2 bins of size 262144
- 1 bin of size what's left
-
- There is actually a little bit of slop in the numbers in bin_index
- for the sake of speed. This makes no difference elsewhere.
-
- The special chunks `top' and `last_remainder' get their own bins,
- (this is implemented via yet more trickery with the av_ array),
- although `top' is never properly linked to its bin since it is
- always handled specially.
-
-*/
-
-#define NAV 128 /* number of bins */
-
-typedef struct malloc_chunk* mbinptr;
-
-/* access macros */
-
-#define bin_at(i) ((mbinptr)(&(av_[2 * (i)])))
-#define next_bin(b) ((mbinptr)((char*)(b) + 2 * sizeof(mbinptr)))
-
-/*
- The first 2 bins are never indexed. The corresponding av_ cells are instead
- used for bookkeeping. This is not to save space, but to simplify
- indexing, maintain locality, and avoid some initialization tests.
-*/
-
-#define top (bin_at(0)->fd) /* The topmost chunk */
-#define last_remainder (bin_at(1)) /* remainder from last split */
-
-
-/*
- Because top initially points to its own bin with initial
- zero size, thus forcing extension on the first malloc request,
- we avoid having any special code in malloc to check whether
- it even exists yet. But we still need to in malloc_extend_top.
-*/
-
-#define initial_top ((mchunkptr)(av_))
-
-/* Helper macro to initialize bins */
-
-#define IAV(i) (mbinptr)(av_ + 2 * i), (mbinptr)(av_ + 2 * i)
-
-static mbinptr av_[NAV * 2 + 2] = {
- 0,
- IAV(0), IAV(1), IAV(2), IAV(3), IAV(4), IAV(5), IAV(6), IAV(7),
- IAV(8), IAV(9), IAV(10), IAV(11), IAV(12), IAV(13), IAV(14), IAV(15),
- IAV(16), IAV(17), IAV(18), IAV(19), IAV(20), IAV(21), IAV(22), IAV(23),
- IAV(24), IAV(25), IAV(26), IAV(27), IAV(28), IAV(29), IAV(30), IAV(31),
- IAV(32), IAV(33), IAV(34), IAV(35), IAV(36), IAV(37), IAV(38), IAV(39),
- IAV(40), IAV(41), IAV(42), IAV(43), IAV(44), IAV(45), IAV(46), IAV(47),
- IAV(48), IAV(49), IAV(50), IAV(51), IAV(52), IAV(53), IAV(54), IAV(55),
- IAV(56), IAV(57), IAV(58), IAV(59), IAV(60), IAV(61), IAV(62), IAV(63),
- IAV(64), IAV(65), IAV(66), IAV(67), IAV(68), IAV(69), IAV(70), IAV(71),
- IAV(72), IAV(73), IAV(74), IAV(75), IAV(76), IAV(77), IAV(78), IAV(79),
- IAV(80), IAV(81), IAV(82), IAV(83), IAV(84), IAV(85), IAV(86), IAV(87),
- IAV(88), IAV(89), IAV(90), IAV(91), IAV(92), IAV(93), IAV(94), IAV(95),
- IAV(96), IAV(97), IAV(98), IAV(99), IAV(100), IAV(101), IAV(102), IAV(103),
- IAV(104), IAV(105), IAV(106), IAV(107), IAV(108), IAV(109), IAV(110), IAV(111),
- IAV(112), IAV(113), IAV(114), IAV(115), IAV(116), IAV(117), IAV(118), IAV(119),
- IAV(120), IAV(121), IAV(122), IAV(123), IAV(124), IAV(125), IAV(126), IAV(127),
- 0
-};
-
-
-
-/* field-extraction macros */
-
-#define first(b) ((b)->fd)
-#define last(b) ((b)->bk)
-
-/*
- Indexing into bins
-*/
-
-#define bin_index(sz) \
-(((((unsigned long)(sz)) >> 9) == 0) ? (((unsigned long)(sz)) >> 3): \
- ((((unsigned long)(sz)) >> 9) <= 4) ? 56 + (((unsigned long)(sz)) >> 6): \
- ((((unsigned long)(sz)) >> 9) <= 20) ? 91 + (((unsigned long)(sz)) >> 9): \
- ((((unsigned long)(sz)) >> 9) <= 84) ? 110 + (((unsigned long)(sz)) >> 12): \
- ((((unsigned long)(sz)) >> 9) <= 340) ? 119 + (((unsigned long)(sz)) >> 15): \
- ((((unsigned long)(sz)) >> 9) <= 1364) ? 124 + (((unsigned long)(sz)) >> 18): \
- 126)
-/*
- bins for chunks < 512 are all spaced 8 bytes apart, and hold
- identically sized chunks. This is exploited in malloc.
-*/
-
-#define MAX_SMALLBIN 63
-#define MAX_SMALLBIN_SIZE 512
-#define SMALLBIN_WIDTH 8
-
-#define smallbin_index(sz) (((unsigned long)(sz)) >> 3)
-
-/*
- Requests are `small' if both the corresponding and the next bin are small
-*/
-
-#define is_small_request(nb) (nb < MAX_SMALLBIN_SIZE - SMALLBIN_WIDTH)
-
-
-
-/*
- To help compensate for the large number of bins, a one-level index
- structure is used for bin-by-bin searching. `binblocks' is a
- one-word bitvector recording whether groups of BINBLOCKWIDTH bins
- have any (possibly) non-empty bins, so they can be skipped over
- all at once during during traversals. The bits are NOT always
- cleared as soon as all bins in a block are empty, but instead only
- when all are noticed to be empty during traversal in malloc.
-*/
-
-#define BINBLOCKWIDTH 4 /* bins per block */
-
-#define binblocks (bin_at(0)->size) /* bitvector of nonempty blocks */
-
-/* bin<->block macros */
-
-#define idx2binblock(ix) (1 << (ix / BINBLOCKWIDTH))
-#define mark_binblock(ii) (binblocks |= idx2binblock(ii))
-#define clear_binblock(ii) (binblocks &= ~(idx2binblock(ii)))
-
-
-
-
-/* Other static bookkeeping data */
-
-/* variables holding tunable values */
-
-static unsigned long trim_threshold = DEFAULT_TRIM_THRESHOLD;
-static unsigned long top_pad = DEFAULT_TOP_PAD;
-static unsigned int n_mmaps_max = DEFAULT_MMAP_MAX;
-static unsigned long mmap_threshold = DEFAULT_MMAP_THRESHOLD;
-
-/* The first value returned from sbrk */
-static char* sbrk_base = (char*)(-1);
-
-/* The maximum memory obtained from system via sbrk */
-static unsigned long max_sbrked_mem = 0;
-
-/* The maximum via either sbrk or mmap */
-static unsigned long max_total_mem = 0;
-
-/* internal working copy of mallinfo */
-static struct mallinfo current_mallinfo = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
-
-/* The total memory obtained from system via sbrk */
-#define sbrked_mem (current_mallinfo.arena)
-
-/* Tracking mmaps */
-
-static unsigned int n_mmaps = 0;
-static unsigned int max_n_mmaps = 0;
-static unsigned long mmapped_mem = 0;
-static unsigned long max_mmapped_mem = 0;
-
-
-
-/*
- Debugging support
-*/
-
-#if DEBUG
-
-
-/*
- These routines make a number of assertions about the states
- of data structures that should be true at all times. If any
- are not true, it's very likely that a user program has somehow
- trashed memory. (It's also possible that there is a coding error
- in malloc. In which case, please report it!)
-*/
-
-#if __STD_C
-static void do_check_chunk(mchunkptr p)
-#else
-static void do_check_chunk(p) mchunkptr p;
-#endif
-{
- size_t sz = p->size & ~PREV_INUSE;
-
- /* No checkable chunk is mmapped */
- assert(!chunk_is_mmapped(p));
-
- /* Check for legal address ... */
- assert((char*)p >= sbrk_base);
- if (p != top)
- assert((char*)p + sz <= (char*)top);
- else
- assert((char*)p + sz <= sbrk_base + sbrked_mem);
-
-}
-
-
-#if __STD_C
-static void do_check_free_chunk(mchunkptr p)
-#else
-static void do_check_free_chunk(p) mchunkptr p;
-#endif
-{
- size_t sz = p->size & ~PREV_INUSE;
- mchunkptr next = chunk_at_offset(p, sz);
-
- do_check_chunk(p);
-
- /* Check whether it claims to be free ... */
- assert(!inuse(p));
-
- /* Unless a special marker, must have OK fields */
- if ((long)sz >= (long)MINSIZE)
- {
- assert((sz & MALLOC_ALIGN_MASK) == 0);
- assert((((size_t)((char*)(p) + SIZE_SZ)) & MALLOC_ALIGN_MASK) == 0);
- /* ... matching footer field */
- assert(*((size_t*)((char*)(p) + sz - SIZE_SZ)) == sz);
- /* ... and is fully consolidated */
- assert(prev_inuse(p));
- assert (next == top || inuse(next));
-
- /* ... and has minimally sane links */
- assert(p->fd->bk == p);
- assert(p->bk->fd == p);
- }
- else /* markers are always of size SIZE_SZ */
- assert(sz == SIZE_SZ);
-}
-
-#if __STD_C
-static void do_check_inuse_chunk(mchunkptr p)
-#else
-static void do_check_inuse_chunk(p) mchunkptr p;
-#endif
-{
- mchunkptr next = next_chunk(p);
- do_check_chunk(p);
-
- /* Check whether it claims to be in use ... */
- assert(inuse(p));
-
- /* ... and is surrounded by OK chunks.
- Since more things can be checked with free chunks than inuse ones,
- if an inuse chunk borders them and debug is on, it's worth doing them.
- */
- if (!prev_inuse(p))
- {
- mchunkptr prv = prev_chunk(p);
- assert(next_chunk(prv) == p);
- do_check_free_chunk(prv);
- }
- if (next == top)
- assert(prev_inuse(next));
- else if (!inuse(next))
- do_check_free_chunk(next);
-
-}
-
-#if __STD_C
-static void do_check_malloced_chunk(mchunkptr p, size_t s)
-#else
-static void do_check_malloced_chunk(p, s) mchunkptr p; size_t s;
-#endif
-{
- size_t sz = p->size & ~PREV_INUSE;
- long room = sz - s;
-
- do_check_inuse_chunk(p);
-
- /* Legal size ... */
- assert((long)sz >= (long)MINSIZE);
- assert((sz & MALLOC_ALIGN_MASK) == 0);
- assert(room >= 0);
- assert(room < (long)MINSIZE);
-
- /* ... and alignment */
- assert((((size_t)((char*)(p) + SIZE_SZ)) & MALLOC_ALIGN_MASK) == 0);
-
-
- /* ... and was allocated at front of an available chunk */
- assert(prev_inuse(p));
-
-}
-
-
-#define check_free_chunk(P) do_check_free_chunk(P)
-#define check_inuse_chunk(P) do_check_inuse_chunk(P)
-#define check_chunk(P) do_check_chunk(P)
-#define check_malloced_chunk(P,N) do_check_malloced_chunk(P,N)
-#else
-#define check_free_chunk(P)
-#define check_inuse_chunk(P)
-#define check_chunk(P)
-#define check_malloced_chunk(P,N)
-#endif
-
-
-
-/*
- Macro-based internal utilities
-*/
-
-
-/*
- Linking chunks in bin lists.
- Call these only with variables, not arbitrary expressions, as arguments.
-*/
-
-/*
- Place chunk p of size s in its bin, in size order,
- putting it ahead of others of same size.
-*/
-
-
-#define frontlink(P, S, IDX, BK, FD) \
-{ \
- if (S < MAX_SMALLBIN_SIZE) \
- { \
- IDX = smallbin_index(S); \
- mark_binblock(IDX); \
- BK = bin_at(IDX); \
- FD = BK->fd; \
- P->bk = BK; \
- P->fd = FD; \
- FD->bk = BK->fd = P; \
- } \
- else \
- { \
- IDX = bin_index(S); \
- BK = bin_at(IDX); \
- FD = BK->fd; \
- if (FD == BK) mark_binblock(IDX); \
- else \
- { \
- while (FD != BK && S < chunksize(FD)) FD = FD->fd; \
- BK = FD->bk; \
- } \
- P->bk = BK; \
- P->fd = FD; \
- FD->bk = BK->fd = P; \
- } \
-}
-
-
-/* take a chunk off a list */
-
-#define unlink(P, BK, FD) \
-{ \
- BK = P->bk; \
- FD = P->fd; \
- FD->bk = BK; \
- BK->fd = FD; \
-} \
-
-/* Place p as the last remainder */
-
-#define link_last_remainder(P) \
-{ \
- last_remainder->fd = last_remainder->bk = P; \
- P->fd = P->bk = last_remainder; \
-}
-
-/* Clear the last_remainder bin */
-
-#define clear_last_remainder \
- (last_remainder->fd = last_remainder->bk = last_remainder)
-
-
-
-
-
-
-/* Routines dealing with mmap(). */
-
-#if HAVE_MMAP
-
-#if __STD_C
-static mchunkptr mmap_chunk(size_t size)
-#else
-static mchunkptr mmap_chunk(size) size_t size;
-#endif
-{
- size_t offset = (MALLOC_ALIGNMENT) - SIZE_SZ;
- size_t page_mask = malloc_getpagesize - 1;
- char *cp;
- mchunkptr p;
-
-#ifndef MAP_ANONYMOUS
- static int fd = -1;
-#endif
-
- if(n_mmaps >= n_mmaps_max) return 0; /* too many regions */
-
- /* The offset to the start of the mmapped region is stored
- * in a size_t field immediately before the chunk.
- */
- size = (size + offset + page_mask) & ~page_mask;
-
-#ifdef MAP_ANONYMOUS
- cp = (char *)mmap(0, size, PROT_READ|PROT_WRITE,
- MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
-#else /* !MAP_ANONYMOUS */
- if (fd < 0)
- {
- fd = open("/dev/zero", O_RDWR);
- if(fd < 0) return 0;
- }
- cp = (char *)mmap(0, size, PROT_READ|PROT_WRITE, MAP_PRIVATE, fd, 0);
-#endif
-
- if(cp == (char *)-1) return 0;
-
- n_mmaps++;
- if (n_mmaps > max_n_mmaps) max_n_mmaps = n_mmaps;
-
- p = (mchunkptr)(cp + offset);
-
- /* We demand that eight bytes into a page must be 8-byte aligned. */
- assert(aligned_OK(chunk2mem(p)));
-
- *((size_t *)p - 1) = offset;
- set_head(p, (size - offset)|IS_MMAPPED);
-
- mmapped_mem += size;
- if ((unsigned long)mmapped_mem > (unsigned long)max_mmapped_mem)
- max_mmapped_mem = mmapped_mem;
- if ((unsigned long)(mmapped_mem + sbrked_mem) > (unsigned long)max_total_mem)
- max_total_mem = mmapped_mem + sbrked_mem;
- return p;
-}
-
-#if __STD_C
-static void munmap_chunk(mchunkptr p)
-#else
-static void munmap_chunk(p) mchunkptr p;
-#endif
-{
- size_t offset = *((size_t *)p - 1);
- size_t size = chunksize(p);
- int ret;
-
- assert (chunk_is_mmapped(p));
- assert(! ((char*)p >= sbrk_base && (char*)p < sbrk_base + sbrked_mem));
- assert((n_mmaps > 0));
- assert(((size + offset) & (malloc_getpagesize-1)) == 0);
-
- ret = munmap((char *)p - offset, size + offset);
-
- /* munmap returns non-zero on failure */
- assert(ret == 0);
-
- n_mmaps--;
- mmapped_mem -= (size + offset);
-}
-
-#endif /* HAVE_MMAP */
-
-
-
-
-/*
- Extend the top-most chunk by obtaining memory from system.
- Main interface to sbrk (but see also malloc_trim).
-*/
-
-#if __STD_C
-static void malloc_extend_top(size_t nb)
-#else
-static void malloc_extend_top(nb) size_t nb;
-#endif
-{
- char* brk; /* return value from sbrk */
- size_t front_misalign; /* unusable bytes at front of sbrked space */
- size_t correction; /* bytes for 2nd sbrk call */
- char* new_brk; /* return of 2nd sbrk call */
- size_t top_size; /* new size of top chunk */
-
- mchunkptr old_top = top; /* Record state of old top */
- size_t old_top_size = chunksize(old_top);
- char* old_end = (char*)(chunk_at_offset(old_top, old_top_size));
-
- /* Pad request with top_pad plus minimal overhead */
-
- size_t sbrk_size = nb + top_pad + MINSIZE;
- unsigned long pagesz = malloc_getpagesize;
-
- /* If not the first time through, round to preserve page boundary */
- /* Otherwise, we need to correct to a page size below anyway. */
- /* (We also correct below if an intervening foreign sbrk call.) */
-
- if (sbrk_base != (char*)(-1))
- sbrk_size = (sbrk_size + (pagesz - 1)) & ~(pagesz - 1);
-
- brk = (char*)(MORECORE (sbrk_size));
-
- /* Fail if sbrk failed or if a foreign sbrk call killed our space */
- if (brk == (char*)(MORECORE_FAILURE) ||
- (brk < old_end && old_top != initial_top))
- return;
-
- sbrked_mem += sbrk_size;
-
- if (brk == old_end) /* can just add bytes to current top */
- {
- top_size = sbrk_size + old_top_size;
- set_head(top, top_size | PREV_INUSE);
- }
- else
- {
- if (sbrk_base == (char*)(-1)) /* First time through. Record base */
- sbrk_base = brk;
- else /* Someone else called sbrk(). Count those bytes as sbrked_mem. */
- sbrked_mem += brk - (char*)old_end;
-
- /* Guarantee alignment of first new chunk made from this space */
- front_misalign = (size_t)chunk2mem(brk) & MALLOC_ALIGN_MASK;
- if (front_misalign > 0)
- {
- correction = (MALLOC_ALIGNMENT) - front_misalign;
- brk += correction;
- }
- else
- correction = 0;
-
- /* Guarantee the next brk will be at a page boundary */
- correction += pagesz - ((size_t)(brk + sbrk_size) & (pagesz - 1));
-
- /* Allocate correction */
- new_brk = (char*)(MORECORE (correction));
- if (new_brk == (char*)(MORECORE_FAILURE)) return;
-
- sbrked_mem += correction;
-
- top = (mchunkptr)brk;
- top_size = new_brk - brk + correction;
- set_head(top, top_size | PREV_INUSE);
-
- if (old_top != initial_top)
- {
- /* There must have been an intervening foreign sbrk call. */
- /* A double fencepost is necessary to prevent consolidation */
- chunk_at_offset(old_top, old_top_size - 2*SIZE_SZ)->size =
- SIZE_SZ|PREV_INUSE;
- chunk_at_offset(old_top, old_top_size - SIZE_SZ)->size =
- SIZE_SZ|PREV_INUSE;
-
- /* Also keep size a multiple of MINSIZE */
- old_top_size = (old_top_size - 2*SIZE_SZ) & MALLOC_ALIGN_MASK;
- chunk_at_offset(old_top, old_top_size )->size =
- SIZE_SZ|PREV_INUSE;
- chunk_at_offset(old_top, old_top_size + SIZE_SZ)->size =
- SIZE_SZ|PREV_INUSE;
- set_head_size(old_top, old_top_size);
- /* If possible, release the rest. */
- if (old_top_size >= MINSIZE)
- fREe(chunk2mem(old_top));
- }
- }
-
- if ((unsigned long)sbrked_mem > (unsigned long)max_sbrked_mem)
- max_sbrked_mem = sbrked_mem;
- if ((unsigned long)(mmapped_mem + sbrked_mem) > (unsigned long)max_total_mem)
- max_total_mem = mmapped_mem + sbrked_mem;
-
- /* We always land on a page boundary */
- assert(((size_t)((char*)top + top_size) & (pagesz - 1)) == 0);
-}
-
-
-
-
-/* Main public routines */
-
-
-/*
- Malloc Algorthim:
-
- The requested size is first converted into a usable form, `nb'.
- This currently means to add 4 bytes overhead plus possibly more to
- obtain 8-byte alignment and/or to obtain a size of at least
- MINSIZE (currently 16 bytes), the smallest allocatable size.
- (All fits are considered `exact' if they are within MINSIZE bytes.)
-
- From there, the first successful of the following steps is taken:
-
- 1. The bin corresponding to the request size is scanned, and if
- a chunk of exactly the right size is found, it is taken.
-
- 2. The most recently remaindered chunk is used if it is big
- enough. This is a form of (roving) first fit, used only in
- the absence of exact fits. Runs of consecutive requests use
- the remainder of the chunk used for the previous such request
- whenever possible. This limited use of a first-fit style
- allocation strategy tends to give contiguous chunks
- coextensive lifetimes, which improves locality and can reduce
- fragmentation in the long run.
-
- 3. Other bins are scanned in increasing size order, using a
- chunk big enough to fulfill the request, and splitting off
- any remainder. This search is strictly by best-fit; i.e.,
- the smallest (with ties going to approximately the least
- recently used) chunk that fits is selected.
-
- 4. If large enough, the chunk bordering the end of memory
- (`top') is split off. (This use of `top' is in accord with
- the best-fit search rule. In effect, `top' is treated as
- larger (and thus less well fitting) than any other available
- chunk since it can be extended to be as large as necessary
- (up to system limitations).
-
- 5. If the request size meets the mmap threshold and the
- system supports mmap, and there are few enough currently
- allocated mmapped regions, and a call to mmap succeeds,
- the request is allocated via direct memory mapping.
-
- 6. Otherwise, the top of memory is extended by
- obtaining more space from the system (normally using sbrk,
- but definable to anything else via the MORECORE macro).
- Memory is gathered from the system (in system page-sized
- units) in a way that allows chunks obtained across different
- sbrk calls to be consolidated, but does not require
- contiguous memory. Thus, it should be safe to intersperse
- mallocs with other sbrk calls.
-
-
- All allocations are made from the the `lowest' part of any found
- chunk. (The implementation invariant is that prev_inuse is
- always true of any allocated chunk; i.e., that each allocated
- chunk borders either a previously allocated and still in-use chunk,
- or the base of its memory arena.)
-
-*/
-
-#if __STD_C
-Void_t* mALLOc(size_t bytes)
-#else
-Void_t* mALLOc(bytes) size_t bytes;
-#endif
-{
- mchunkptr victim; /* inspected/selected chunk */
- size_t victim_size; /* its size */
- int idx; /* index for bin traversal */
- mbinptr bin; /* associated bin */
- mchunkptr remainder; /* remainder from a split */
- long remainder_size; /* its size */
- int remainder_index; /* its bin index */
- unsigned long block; /* block traverser bit */
- int startidx; /* first bin of a traversed block */
- mchunkptr fwd; /* misc temp for linking */
- mchunkptr bck; /* misc temp for linking */
-
- size_t nb = request2size(bytes); /* padded request size; */
-
- /* Check for exact match in a bin */
-
- if (is_small_request(nb)) /* Faster version for small requests */
- {
- idx = smallbin_index(nb);
-
- /* No traversal or size check necessary for small bins. */
- /* Also scan the next one, since it would have a remainder < MINSIZE */
-
- if ( ((victim = last(bin_at(idx))) != bin_at(idx)) ||
- ((victim = last(bin_at(idx+1))) != bin_at(idx+1)))
- {
- victim_size = chunksize(victim);
- unlink(victim, bck, fwd);
- set_inuse_bit_at_offset(victim, victim_size);
- check_malloced_chunk(victim, nb);
- return chunk2mem(victim);
- }
-
- idx += 2; /* Set for bin scan below. We've already scanned 2 bins. */
-
- }
- else
- {
- idx = bin_index(nb);
- bin = bin_at(idx);
-
- for (victim = last(bin); victim != bin; victim = victim->bk)
- {
- victim_size = chunksize(victim);
- remainder_size = victim_size - nb;
-
- if (remainder_size >= (long)MINSIZE) /* too big */
- {
- --idx; /* adjust to rescan below after checking last remainder */
- break;
- }
-
- else if (remainder_size >= 0) /* exact fit */
- {
- unlink(victim, bck, fwd);
- set_inuse_bit_at_offset(victim, victim_size);
- check_malloced_chunk(victim, nb);
- return chunk2mem(victim);
- }
- }
-
- ++idx;
-
- }
-
- /* Try to use the last split-off remainder */
-
- if ( (victim = last_remainder->fd) != last_remainder)
- {
- victim_size = chunksize(victim);
- remainder_size = victim_size - nb;
-
- if (remainder_size >= (long)MINSIZE) /* re-split */
- {
- remainder = chunk_at_offset(victim, nb);
- set_head(victim, nb | PREV_INUSE);
- link_last_remainder(remainder);
- set_head(remainder, remainder_size | PREV_INUSE);
- set_foot(remainder, remainder_size);
- check_malloced_chunk(victim, nb);
- return chunk2mem(victim);
- }
-
- clear_last_remainder;
-
- if (remainder_size >= 0) /* exhaust */
- {
- set_inuse_bit_at_offset(victim, victim_size);
- check_malloced_chunk(victim, nb);
- return chunk2mem(victim);
- }
-
- /* Else place in bin */
-
- frontlink(victim, victim_size, remainder_index, bck, fwd);
- }
-
- /*
- If there are any possibly nonempty big-enough blocks,
- search for best fitting chunk by scanning bins in blockwidth units.
- */
-
- if ( (block = idx2binblock(idx)) <= binblocks)
- {
-
- /* Get to the first marked block */
-
- if ( (block & binblocks) == 0)
- {
- /* force to an even block boundary */
- idx = (idx & ~(BINBLOCKWIDTH - 1)) + BINBLOCKWIDTH;
- block <<= 1;
- while ((block & binblocks) == 0)
- {
- idx += BINBLOCKWIDTH;
- block <<= 1;
- }
- }
-
- /* For each possibly nonempty block ... */
- for (;;)
- {
- startidx = idx; /* (track incomplete blocks) */
-
- /* For each bin in this block ... */
- do
- {
- bin = bin_at(idx);
-
- /* Find and use first big enough chunk ... */
-
- for (victim = last(bin); victim != bin; victim = victim->bk)
- {
- victim_size = chunksize(victim);
- remainder_size = victim_size - nb;
-
- if (remainder_size >= (long)MINSIZE) /* split */
- {
- remainder = chunk_at_offset(victim, nb);
- set_head(victim, nb | PREV_INUSE);
- unlink(victim, bck, fwd);
- link_last_remainder(remainder);
- set_head(remainder, remainder_size | PREV_INUSE);
- set_foot(remainder, remainder_size);
- check_malloced_chunk(victim, nb);
- return chunk2mem(victim);
- }
-
- else if (remainder_size >= 0) /* take */
- {
- set_inuse_bit_at_offset(victim, victim_size);
- unlink(victim, bck, fwd);
- check_malloced_chunk(victim, nb);
- return chunk2mem(victim);
- }
-
- }
-
- } while ((++idx & (BINBLOCKWIDTH - 1)) != 0);
-
- /* Clear out the block bit. */
-
- do /* Possibly backtrack to try to clear a partial block */
- {
- if ((startidx & (BINBLOCKWIDTH - 1)) == 0)
- {
- binblocks &= ~block;
- break;
- }
- --startidx;
- } while (first(bin_at(startidx)) == bin_at(startidx));
-
- /* Get to the next possibly nonempty block */
-
- if ( (block <<= 1) <= binblocks && (block != 0) )
- {
- while ((block & binblocks) == 0)
- {
- idx += BINBLOCKWIDTH;
- block <<= 1;
- }
- }
- else
- break;
- }
- }
-
-
- /* Try to use top chunk */
-
- /* Require that there be a remainder, ensuring top always exists */
- if ( (remainder_size = chunksize(top) - nb) < (long)MINSIZE)
- {
-
-#if HAVE_MMAP
- /* If big and would otherwise need to extend, try to use mmap instead */
- if ((unsigned long)nb >= (unsigned long)mmap_threshold &&
- (victim = mmap_chunk(nb)) != 0)
- return chunk2mem(victim);
-#endif
-
- /* Try to extend */
- malloc_extend_top(nb);
- if ( (remainder_size = chunksize(top) - nb) < (long)MINSIZE)
- return 0; /* propagate failure */
- }
-
- victim = top;
- set_head(victim, nb | PREV_INUSE);
- top = chunk_at_offset(victim, nb);
- set_head(top, remainder_size | PREV_INUSE);
- check_malloced_chunk(victim, nb);
- return chunk2mem(victim);
-
-}
-
-
-
-
-/*
-
- free() algorithm :
-
- cases:
-
- 1. free(0) has no effect.
-
- 2. If the chunk was allocated via mmap, it is release via munmap().
-
- 3. If a returned chunk borders the current high end of memory,
- it is consolidated into the top, and if the total unused
- topmost memory exceeds the trim threshold, malloc_trim is
- called.
-
- 4. Other chunks are consolidated as they arrive, and
- placed in corresponding bins. (This includes the case of
- consolidating with the current `last_remainder').
-
-*/
-
-
-#if __STD_C
-void fREe(Void_t* mem)
-#else
-void fREe(mem) Void_t* mem;
-#endif
-{
- mchunkptr p; /* chunk corresponding to mem */
- size_t hd; /* its head field */
- size_t sz; /* its size */
- int idx; /* its bin index */
- mchunkptr next; /* next contiguous chunk */
- size_t nextsz; /* its size */
- size_t prevsz; /* size of previous contiguous chunk */
- mchunkptr bck; /* misc temp for linking */
- mchunkptr fwd; /* misc temp for linking */
- int islr; /* track whther merging with last_remainder */
-
- if (mem == 0) /* free(0) has no effect */
- return;
-
- p = mem2chunk(mem);
- hd = p->size;
-
-#if HAVE_MMAP
- if (hd & IS_MMAPPED) /* release mmapped memory. */
- {
- munmap_chunk(p);
- return;
- }
-#endif
-
- check_inuse_chunk(p);
-
- sz = hd & ~PREV_INUSE;
- next = chunk_at_offset(p, sz);
- nextsz = chunksize(next);
-
- if (next == top) /* merge with top */
- {
- sz += nextsz;
-
- if (!(hd & PREV_INUSE)) /* consolidate backward */
- {
- prevsz = prev_size(p);
- p = chunk_at_offset(p, -prevsz);
- sz += prevsz;
- unlink(p, bck, fwd);
- }
-
- set_head(p, sz | PREV_INUSE);
- top = p;
- if ((unsigned long)(sz) >= (unsigned long)trim_threshold)
- malloc_trim(top_pad);
- return;
- }
-
- set_head(next, nextsz); /* clear inuse bit */
-
- islr = 0;
-
- if (!(hd & PREV_INUSE)) /* consolidate backward */
- {
- prevsz = prev_size(p);
- p = chunk_at_offset(p, -prevsz);
- sz += prevsz;
-
- if (p->fd == last_remainder) /* keep as last_remainder */
- islr = 1;
- else
- unlink(p, bck, fwd);
- }
-
- if (!(inuse_bit_at_offset(next, nextsz))) /* consolidate forward */
- {
- sz += nextsz;
-
- if (!islr && next->fd == last_remainder) /* re-insert last_remainder */
- {
- islr = 1;
- link_last_remainder(p);
- }
- else
- unlink(next, bck, fwd);
- }
-
-
- set_head(p, sz | PREV_INUSE);
- set_foot(p, sz);
- if (!islr)
- frontlink(p, sz, idx, bck, fwd);
-}
-
-
-
-
-
-/*
-
- Realloc algorithm:
-
- If the reallocation is for additional space, and the chunk can be
- extended, it is, else a malloc-copy-free sequence is taken. There
- are several different ways that a chunk could be extended. All are
- tried:
-
- * Extending forward into following adjacent free chunk.
- * Shifting backwards, joining preceding adjacent space
- * Both shifting backwards and extending forward.
- * Extending into newly sbrked space
-
-
- If the reallocation is for less space, the trailing space is
- lopped off and freed. Unless the #define REALLOC_ZERO_BYTES_FREES
- is set, realloc with a size argument of zero (re)allocates a
- minimum-sized chunk.
-
- Chunks that were obtained via mmap cannot be extended or shrunk.
- If their reallocation is for additional space, they are copied.
- If for less, they are just left alone.
-
- The old unix realloc convention of allowing the last-free'd chunk
- to be used as an argument to realloc is no longer supported.
- I don't know of any programs still relying on this feature,
- and allowing it would also allow too many other incorrect
- usages of realloc to be sensible.
-
-
-*/
-
-
-#if __STD_C
-Void_t* rEALLOc(Void_t* oldmem, size_t bytes)
-#else
-Void_t* rEALLOc(oldmem, bytes) Void_t* oldmem; size_t bytes;
-#endif
-{
- size_t nb; /* padded request size */
-
- mchunkptr oldp; /* chunk corresponding to oldmem */
- size_t oldsize; /* its size */
-
- mchunkptr newp; /* chunk to return */
- size_t newsize; /* its size */
- Void_t* newmem; /* corresponding user mem */
-
- mchunkptr next; /* next contiguous chunk after oldp */
- size_t nextsize; /* its size */
-
- mchunkptr prev; /* previous contiguous chunk before oldp */
- size_t prevsize; /* its size */
-
- mchunkptr remainder; /* holds split off extra space from newp */
- size_t remainder_size; /* its size */
-
- mchunkptr bck; /* misc temp for linking */
- mchunkptr fwd; /* misc temp for linking */
-
-#ifdef REALLOC_ZERO_BYTES_FREES
- if (bytes == 0) { fREe(oldmem); return 0; }
-#endif
-
-
- /* realloc of null is supposed to be same as malloc */
- if (oldmem == 0) return mALLOc(bytes);
-
- newp = oldp = mem2chunk(oldmem);
- newsize = oldsize = chunksize(oldp);
-
-
- nb = request2size(bytes);
-
-#if HAVE_MMAP
- if (chunk_is_mmapped(oldp))
- {
- if(oldsize >= nb) return oldmem; /* do nothing */
- /* Must alloc, copy, free. */
- newmem = mALLOc(bytes);
- if (newmem == 0) return 0; /* propagate failure */
- MALLOC_COPY(newmem, oldmem, oldsize - SIZE_SZ);
- munmap_chunk(oldp);
- return newmem;
- }
-#endif
-
- check_inuse_chunk(oldp);
-
- if ((long)(oldsize) < (long)(nb))
- {
-
- /* Try expanding forward */
-
- next = chunk_at_offset(oldp, oldsize);
- if (next == top || !inuse(next))
- {
- nextsize = chunksize(next);
-
- /* Forward into top only if a remainder */
- if (next == top)
- {
- if ((long)(nextsize + newsize) >= (long)(nb + MINSIZE))
- {
- newsize += nextsize;
- top = chunk_at_offset(oldp, nb);
- set_head(top, (newsize - nb) | PREV_INUSE);
- set_head_size(oldp, nb);
- return chunk2mem(oldp);
- }
- }
-
- /* Forward into next chunk */
- else if (((long)(nextsize + newsize) >= (long)(nb)))
- {
- unlink(next, bck, fwd);
- newsize += nextsize;
- goto split;
- }
- }
- else
- {
- next = 0;
- nextsize = 0;
- }
-
- /* Try shifting backwards. */
-
- if (!prev_inuse(oldp))
- {
- prev = prev_chunk(oldp);
- prevsize = chunksize(prev);
-
- /* try forward + backward first to save a later consolidation */
-
- if (next != 0)
- {
- /* into top */
- if (next == top)
- {
- if ((long)(nextsize + prevsize + newsize) >= (long)(nb + MINSIZE))
- {
- unlink(prev, bck, fwd);
- newp = prev;
- newsize += prevsize + nextsize;
- newmem = chunk2mem(newp);
- MALLOC_COPY(newmem, oldmem, oldsize - SIZE_SZ);
- top = chunk_at_offset(newp, nb);
- set_head(top, (newsize - nb) | PREV_INUSE);
- set_head_size(newp, nb);
- return chunk2mem(newp);
- }
- }
-
- /* into next chunk */
- else if (((long)(nextsize + prevsize + newsize) >= (long)(nb)))
- {
- unlink(next, bck, fwd);
- unlink(prev, bck, fwd);
- newp = prev;
- newsize += nextsize + prevsize;
- newmem = chunk2mem(newp);
- MALLOC_COPY(newmem, oldmem, oldsize - SIZE_SZ);
- goto split;
- }
- }
-
- /* backward only */
- if (prev != 0 && (long)(prevsize + newsize) >= (long)nb)
- {
- unlink(prev, bck, fwd);
- newp = prev;
- newsize += prevsize;
- newmem = chunk2mem(newp);
- MALLOC_COPY(newmem, oldmem, oldsize - SIZE_SZ);
- goto split;
- }
- }
-
- /* Must allocate */
-
- newmem = mALLOc (bytes);
-
- if (newmem == 0) /* propagate failure */
- return 0;
-
- /* Avoid copy if newp is next chunk after oldp. */
- /* (This can only happen when new chunk is sbrk'ed.) */
-
- if ( (newp = mem2chunk(newmem)) == next_chunk(oldp))
- {
- newsize += chunksize(newp);
- newp = oldp;
- goto split;
- }
-
- /* Otherwise copy, free, and exit */
- MALLOC_COPY(newmem, oldmem, oldsize - SIZE_SZ);
- fREe(oldmem);
- return newmem;
- }
-
- split: /* split off extra room in old or expanded chunk */
-
- if (newsize - nb >= MINSIZE) /* split off remainder */
- {
- remainder = chunk_at_offset(newp, nb);
- remainder_size = newsize - nb;
- set_head_size(newp, nb);
- set_head(remainder, remainder_size | PREV_INUSE);
- set_inuse_bit_at_offset(remainder, remainder_size);
- fREe(chunk2mem(remainder)); /* let free() deal with it */
- }
- else
- {
- set_head_size(newp, newsize);
- set_inuse_bit_at_offset(newp, newsize);
- }
-
- check_inuse_chunk(newp);
- return chunk2mem(newp);
-}
-
-
-
-
-/*
-
- memalign algorithm:
-
- memalign requests more than enough space from malloc, finds a spot
- within that chunk that meets the alignment request, and then
- possibly frees the leading and trailing space.
-
- The alignment argument must be a power of two. This property is not
- checked by memalign, so misuse may result in random runtime errors.
-
- 8-byte alignment is guaranteed by normal malloc calls, so don't
- bother calling memalign with an argument of 8 or less.
-
- Overreliance on memalign is a sure way to fragment space.
-
-*/
-
-
-#if __STD_C
-Void_t* mEMALIGn(size_t alignment, size_t bytes)
-#else
-Void_t* mEMALIGn(alignment, bytes) size_t alignment; size_t bytes;
-#endif
-{
- size_t nb; /* padded request size */
- char* m; /* memory returned by malloc call */
- mchunkptr p; /* corresponding chunk */
- char* brk; /* alignment point within p */
- mchunkptr newp; /* chunk to return */
- size_t newsize; /* its size */
- size_t leadsize; /* leading space befor alignment point */
- mchunkptr remainder; /* spare room at end to split off */
- long remainder_size; /* its size */
-
- /* If need less alignment than we give anyway, just relay to malloc */
-
- if (alignment <= MALLOC_ALIGNMENT) return mALLOc(bytes);
-
- /* Otherwise, ensure that it is at least a minimum chunk size */
-
- if (alignment < MINSIZE) alignment = MINSIZE;
-
- /* Call malloc with worst case padding to hit alignment. */
-
- nb = request2size(bytes);
- m = (char*)(mALLOc(nb + alignment + MINSIZE));
-
- if (m == 0) return 0; /* propagate failure */
-
- p = mem2chunk(m);
-
- if ((((size_t)(m)) % alignment) == 0) /* aligned */
- {
-#if HAVE_MMAP
- if(chunk_is_mmapped(p))
- return chunk2mem(p); /* nothing more to do */
-#endif
- }
- else /* misaligned */
- {
- /*
- Find an aligned spot inside chunk.
- Since we need to give back leading space in a chunk of at
- least MINSIZE, if the first calculation places us at
- a spot with less than MINSIZE leader, we can move to the
- next aligned spot -- we've allocated enough total room so that
- this is always possible.
- */
-
- brk = (char*) ( (((size_t)(m + alignment - 1)) & -alignment) - SIZE_SZ );
- if ((long)(brk - (char*)(p)) < MINSIZE) brk = brk + alignment;
-
- newp = (mchunkptr)brk;
- leadsize = brk - (char*)(p);
- newsize = chunksize(p) - leadsize;
-
-#if HAVE_MMAP
- if(chunk_is_mmapped(p))
- {
- *((size_t *)newp - 1) = *((size_t *)p - 1) + leadsize;
- set_head(newp, newsize|IS_MMAPPED);
- return chunk2mem(newp);
- }
-#endif
-
- /* give back leader, use the rest */
-
- set_head(newp, newsize | PREV_INUSE);
- set_inuse_bit_at_offset(newp, newsize);
- set_head_size(p, leadsize);
- fREe(chunk2mem(p));
- p = newp;
- }
-
- /* Also give back spare room at the end */
-
- remainder_size = chunksize(p) - nb;
-
- if (remainder_size >= (long)MINSIZE)
- {
- remainder = chunk_at_offset(p, nb);
- set_head(remainder, remainder_size | PREV_INUSE);
- set_head_size(p, nb);
- fREe(chunk2mem(remainder));
- }
-
- check_inuse_chunk(p);
- return chunk2mem(p);
-
-}
-
-
-
-
-/*
- valloc just invokes memalign with alignment argument equal
- to the page size of the system (or as near to this as can
- be figured out from all the includes/defines above.)
-*/
-
-#if __STD_C
-Void_t* vALLOc(size_t bytes)
-#else
-Void_t* vALLOc(bytes) size_t bytes;
-#endif
-{
- return mEMALIGn (malloc_getpagesize, bytes);
-}
-
-
-/*
-
- calloc calls malloc, then zeroes out the allocated chunk.
-
-*/
-
-#if __STD_C
-Void_t* cALLOc(size_t n, size_t elem_size)
-#else
-Void_t* cALLOc(n, elem_size) size_t n; size_t elem_size;
-#endif
-{
- mchunkptr p;
- size_t csz;
-
- size_t sz = n * elem_size;
- Void_t* mem = mALLOc (sz);
-
- if (mem == 0)
- return 0;
- else
- {
- p = mem2chunk(mem);
-
- if(chunk_is_mmapped(p)) /* no clearing is necessary */
- return mem;
-
- csz = chunksize(p);
- MALLOC_ZERO(mem, csz - SIZE_SZ);
- return mem;
- }
-}
-
-/*
-
- cfree just calls free. It is needed/defined on some systems
- that pair it with calloc, presumably for odd historical reasons.
-
-*/
-
-#if !defined(INTERNAL_LINUX_C_LIB) || !defined(__ELF__)
-#if __STD_C
-void cfree(Void_t *mem)
-#else
-void cfree(mem) Void_t *mem;
-#endif
-{
- free(mem);
-}
-#endif
-
-
-
-/*
-
- Malloc_trim gives memory back to the system (via negative
- arguments to sbrk) if there is unused memory at the `high' end of
- the malloc pool. You can call this after freeing large blocks of
- memory to potentially reduce the system-level memory requirements
- of a program. However, it cannot guarantee to reduce memory. Under
- some allocation patterns, some large free blocks of memory will be
- locked between two used chunks, so they cannot be given back to
- the system.
-
- The `pad' argument to malloc_trim represents the amount of free
- trailing space to leave untrimmed. If this argument is zero,
- only the minimum amount of memory to maintain internal data
- structures will be left (one page or less). Non-zero arguments
- can be supplied to maintain enough trailing space to service
- future expected allocations without having to re-obtain memory
- from the system.
-
- Malloc_trim returns 1 if it actually released any memory, else 0.
-
-*/
-
-#if __STD_C
-int malloc_trim(size_t pad)
-#else
-int malloc_trim(pad) size_t pad;
-#endif
-{
- long top_size; /* Amount of top-most memory */
- long extra; /* Amount to release */
- char* current_brk; /* address returned by pre-check sbrk call */
- char* new_brk; /* address returned by negative sbrk call */
-
- unsigned long pagesz = malloc_getpagesize;
-
- top_size = chunksize(top);
- extra = ((top_size - pad - MINSIZE + (pagesz-1)) / pagesz - 1) * pagesz;
-
- if (extra < (long)pagesz) /* Not enough memory to release */
- return 0;
-
- else
- {
- /* Test to make sure no one else called sbrk */
- current_brk = (char*)(MORECORE (0));
- if (current_brk != (char*)(top) + top_size)
- return 0; /* Apparently we don't own memory; must fail */
-
- else
- {
- new_brk = (char*)(MORECORE (-extra));
-
- if (new_brk == (char*)(MORECORE_FAILURE)) /* sbrk failed? */
- {
- /* Try to figure out what we have */
- current_brk = (char*)(MORECORE (0));
- top_size = current_brk - (char*)top;
- if (top_size >= (long)MINSIZE) /* if not, we are very very dead! */
- {
- sbrked_mem = current_brk - sbrk_base;
- set_head(top, top_size | PREV_INUSE);
- }
- check_chunk(top);
- return 0;
- }
-
- else
- {
- /* Success. Adjust top accordingly. */
- set_head(top, (top_size - extra) | PREV_INUSE);
- sbrked_mem -= extra;
- check_chunk(top);
- return 1;
- }
- }
- }
-}
-
-
-
-/*
- malloc_usable_size:
-
- This routine tells you how many bytes you can actually use in an
- allocated chunk, which may be more than you requested (although
- often not). You can use this many bytes without worrying about
- overwriting other allocated objects. Not a particularly great
- programming practice, but still sometimes useful.
-
-*/
-
-#if __STD_C
-size_t malloc_usable_size(Void_t* mem)
-#else
-size_t malloc_usable_size(mem) Void_t* mem;
-#endif
-{
- mchunkptr p;
- if (mem == 0)
- return 0;
- else
- {
- p = mem2chunk(mem);
- if(!chunk_is_mmapped(p))
- {
- if (!inuse(p)) return 0;
- check_inuse_chunk(p);
- }
- return chunksize(p) - SIZE_SZ;
- }
-}
-
-
-
-
-/* Utility to update current_mallinfo for malloc_stats and mallinfo() */
-
-static void malloc_update_mallinfo()
-{
- int i;
- mbinptr b;
- mchunkptr p;
-#if DEBUG
- mchunkptr q;
-#endif
-
- size_t avail = chunksize(top);
- int navail = ((long)(avail) >= (long)MINSIZE)? 1 : 0;
-
- for (i = 1; i < NAV; ++i)
- {
- b = bin_at(i);
- for (p = last(b); p != b; p = p->bk)
- {
-#if DEBUG
- check_free_chunk(p);
- for (q = next_chunk(p);
- q < top && inuse(q) && (long)(chunksize(q)) >= (long)MINSIZE;
- q = next_chunk(q))
- check_inuse_chunk(q);
-#endif
- avail += chunksize(p);
- navail++;
- }
- }
-
- current_mallinfo.ordblks = navail;
- current_mallinfo.uordblks = sbrked_mem - avail;
- current_mallinfo.fordblks = avail;
- current_mallinfo.hblks = n_mmaps;
- current_mallinfo.hblkhd = mmapped_mem;
- current_mallinfo.keepcost = chunksize(top);
-
-}
-
-
-
-/*
-
- malloc_stats:
-
- Prints on stderr the amount of space obtain from the system (both
- via sbrk and mmap), the maximum amount (which may be more than
- current if malloc_trim and/or munmap got called), the maximum
- number of simultaneous mmap regions used, and the current number
- of bytes allocated via malloc (or realloc, etc) but not yet
- freed. (Note that this is the number of bytes allocated, not the
- number requested. It will be larger than the number requested
- because of alignment and bookkeeping overhead.)
-
-*/
-
-void malloc_stats()
-{
- malloc_update_mallinfo();
- fprintf(stderr, "max system bytes = %10u\n",
- (unsigned int)(max_total_mem));
- fprintf(stderr, "system bytes = %10u\n",
- (unsigned int)(sbrked_mem + mmapped_mem));
- fprintf(stderr, "in use bytes = %10u\n",
- (unsigned int)(current_mallinfo.uordblks + mmapped_mem));
-#if HAVE_MMAP
- fprintf(stderr, "max mmap regions = %10u\n",
- (unsigned int)max_n_mmaps);
-#endif
-}
-
-/*
- mallinfo returns a copy of updated current mallinfo.
-*/
-
-struct mallinfo mALLINFo()
-{
- malloc_update_mallinfo();
- return current_mallinfo;
-}
-
-
-
-
-/*
- mallopt:
-
- mallopt is the general SVID/XPG interface to tunable parameters.
- The format is to provide a (parameter-number, parameter-value) pair.
- mallopt then sets the corresponding parameter to the argument
- value if it can (i.e., so long as the value is meaningful),
- and returns 1 if successful else 0.
-
- See descriptions of tunable parameters above.
-
-*/
-
-#if __STD_C
-int mALLOPt(int param_number, int value)
-#else
-int mALLOPt(param_number, value) int param_number; int value;
-#endif
-{
- switch(param_number)
- {
- case M_TRIM_THRESHOLD:
- trim_threshold = value; return 1;
- case M_TOP_PAD:
- top_pad = value; return 1;
- case M_MMAP_THRESHOLD:
- mmap_threshold = value; return 1;
- case M_MMAP_MAX:
-#if HAVE_MMAP
- n_mmaps_max = value; return 1;
-#else
- if (value != 0) return 0; else n_mmaps_max = value; return 1;
-#endif
-
- default:
- return 0;
- }
-}
-
-/*
-
-History:
-
- V2.6.2 Tue Dec 5 06:52:55 1995 Doug Lea (dl at gee)
- * Integrated most documentation with the code.
- * Add support for mmap, with help from
- Wolfram Gloger (Gloger@lrz.uni-muenchen.de).
- * Use last_remainder in more cases.
- * Pack bins using idea from colin@nyx10.cs.du.edu
- * Use ordered bins instead of best-fit threshhold
- * Eliminate block-local decls to simplify tracing and debugging.
- * Support another case of realloc via move into top
- * Fix error occuring when initial sbrk_base not word-aligned.
- * Rely on page size for units instead of SBRK_UNIT to
- avoid surprises about sbrk alignment conventions.
- * Add mallinfo, mallopt. Thanks to Raymond Nijssen
- (raymond@es.ele.tue.nl) for the suggestion.
- * Add `pad' argument to malloc_trim and top_pad mallopt parameter.
- * More precautions for cases where other routines call sbrk,
- courtesy of Wolfram Gloger (Gloger@lrz.uni-muenchen.de).
- * Added macros etc., allowing use in linux libc from
- H.J. Lu (hjl@gnu.ai.mit.edu)
- * Inverted this history list
-
- V2.6.1 Sat Dec 2 14:10:57 1995 Doug Lea (dl at gee)
- * Re-tuned and fixed to behave more nicely with V2.6.0 changes.
- * Removed all preallocation code since under current scheme
- the work required to undo bad preallocations exceeds
- the work saved in good cases for most test programs.
- * No longer use return list or unconsolidated bins since
- no scheme using them consistently outperforms those that don't
- given above changes.
- * Use best fit for very large chunks to prevent some worst-cases.
- * Added some support for debugging
-
- V2.6.0 Sat Nov 4 07:05:23 1995 Doug Lea (dl at gee)
- * Removed footers when chunks are in use. Thanks to
- Paul Wilson (wilson@cs.texas.edu) for the suggestion.
-
- V2.5.4 Wed Nov 1 07:54:51 1995 Doug Lea (dl at gee)
- * Added malloc_trim, with help from Wolfram Gloger
- (wmglo@Dent.MED.Uni-Muenchen.DE).
-
- V2.5.3 Tue Apr 26 10:16:01 1994 Doug Lea (dl at g)
-
- V2.5.2 Tue Apr 5 16:20:40 1994 Doug Lea (dl at g)
- * realloc: try to expand in both directions
- * malloc: swap order of clean-bin strategy;
- * realloc: only conditionally expand backwards
- * Try not to scavenge used bins
- * Use bin counts as a guide to preallocation
- * Occasionally bin return list chunks in first scan
- * Add a few optimizations from colin@nyx10.cs.du.edu
-
- V2.5.1 Sat Aug 14 15:40:43 1993 Doug Lea (dl at g)
- * faster bin computation & slightly different binning
- * merged all consolidations to one part of malloc proper
- (eliminating old malloc_find_space & malloc_clean_bin)
- * Scan 2 returns chunks (not just 1)
- * Propagate failure in realloc if malloc returns 0
- * Add stuff to allow compilation on non-ANSI compilers
- from kpv@research.att.com
-
- V2.5 Sat Aug 7 07:41:59 1993 Doug Lea (dl at g.oswego.edu)
- * removed potential for odd address access in prev_chunk
- * removed dependency on getpagesize.h
- * misc cosmetics and a bit more internal documentation
- * anticosmetics: mangled names in macros to evade debugger strangeness
- * tested on sparc, hp-700, dec-mips, rs6000
- with gcc & native cc (hp, dec only) allowing
- Detlefs & Zorn comparison study (in SIGPLAN Notices.)
-
- Trial version Fri Aug 28 13:14:29 1992 Doug Lea (dl at g.oswego.edu)
- * Based loosely on libg++-1.2X malloc. (It retains some of the overall
- structure of old version, but most details differ.)
-
-*/
diff --git a/contrib/libg++/libg++/src/minmax.cc b/contrib/libg++/libg++/src/minmax.cc
deleted file mode 100644
index 3cbc7e48c010..000000000000
--- a/contrib/libg++/libg++/src/minmax.cc
+++ /dev/null
@@ -1,5 +0,0 @@
-#ifdef _GNUG_
-#pragma implementation
-#endif
-
-#include <minmax.h>
diff --git a/contrib/libg++/libg++/src/minmax.h b/contrib/libg++/libg++/src/minmax.h
deleted file mode 100644
index ec2bfa335a7c..000000000000
--- a/contrib/libg++/libg++/src/minmax.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
-Copyright (C) 1992 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifndef _minmax_h
-#ifdef _GNUG_
-#pragma interface
-#endif
-#define _minmax_h 1
-
-#include <_G_config.h>
-
-inline char min(char a, char b) { return (a < b)?a:b;}
-#ifndef _G_BROKEN_SIGNED_CHAR
-inline signed char min(signed char a, signed char b) { return (a < b)?a:b;}
-#endif
-inline unsigned char min(unsigned char a, unsigned char b) {return (a<b)?a:b;}
-
-inline short min(short a, short b) {return (a < b) ?a:b;}
-inline unsigned short min(unsigned short a, unsigned short b) {return (a < b)?a:b;}
-
-inline int min(int a, int b) {return (a < b)?a:b;}
-inline unsigned int min(unsigned int a, unsigned int b) {return (a < b)?a:b;}
-
-inline long min(long a, long b) {return (a < b)?a:b;}
-inline unsigned long min(unsigned long a, unsigned long b) {return (a<b)?a:b;}
-
-inline float min(float a, float b) {return (a < b)?a:b;}
-
-inline double min(double a, double b) {return (a < b)?a:b;}
-
-inline char max(char a, char b) { return (a > b)?a:b;}
-#ifndef _G_BROKEN_SIGNED_CHAR
-inline signed char max(signed char a, signed char b) {return (a > b)?a:b;}
-#endif
-inline unsigned char max(unsigned char a, unsigned char b) {return (a>b)?a:b;}
-
-inline short max(short a, short b) {return (a > b) ?a:b;}
-inline unsigned short max(unsigned short a, unsigned short b) {return (a > b)?a:b;}
-
-inline int max(int a, int b) {return (a > b)?a:b;}
-inline unsigned int max(unsigned int a, unsigned int b) {return (a > b)?a:b;}
-
-inline long max(long a, long b) {return (a > b)?a:b;}
-inline unsigned long max(unsigned long a, unsigned long b) {return (a>b)?a:b;}
-
-inline float max(float a, float b) {return (a > b)?a:b;}
-
-inline double max(double a, double b) {return (a > b)?a:b;}
-
-#endif
-
diff --git a/contrib/libg++/libg++/src/osfcn.h b/contrib/libg++/libg++/src/osfcn.h
deleted file mode 100644
index 023b5c5b65d6..000000000000
--- a/contrib/libg++/libg++/src/osfcn.h
+++ /dev/null
@@ -1,17 +0,0 @@
-
-#ifndef OSFCN_H
-#define OSFCN_H 1
-
-#include <std.h>
-#include <time.h>
-#include <sys/types.h>
-#if _G_HAVE_SYS_SOCKET
-#include <sys/socket.h>
-#endif
-#if _G_HAVE_SYS_RESOURCE
-#include <sys/time.h>
-#include <sys/resource.h>
-#endif
-
-
-#endif
diff --git a/contrib/libg++/libg++/src/pow.cc b/contrib/libg++/libg++/src/pow.cc
deleted file mode 100644
index 497cb5b8b70c..000000000000
--- a/contrib/libg++/libg++/src/pow.cc
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
-Copyright (C) 1990 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <builtin.h>
-#include <math.h>
-
-double pow(double x, long p)
-{
- if (p == 0)
- return 1.0;
- else if (x == 0.0)
- return 0.0;
- else
- {
- if (p < 0)
- {
- p = -p;
- x = 1.0 / x;
- }
-
- double r = 1.0;
- for(;;)
- {
- if (p & 1)
- r *= x;
- if ((p >>= 1) == 0)
- return r;
- else
- x *= x;
- }
- }
-}
-
-long pow(long x, long p)
-{
- if (p == 0)
- return 1;
- else if (p < 0 || x == 0)
- return 0;
- else
- {
- long r = 1;
- for(;;)
- {
- if (p & 1)
- r *= x;
- if ((p >>= 1) == 0)
- return r;
- else
- x *= x;
- }
- }
-}
diff --git a/contrib/libg++/libg++/src/sqrt.cc b/contrib/libg++/libg++/src/sqrt.cc
deleted file mode 100644
index 622895eed45f..000000000000
--- a/contrib/libg++/libg++/src/sqrt.cc
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
-Copyright (C) 1990 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <builtin.h>
-#include <math.h>
-
-long sqrt(long x)
-{
- if (x <= 0)
- return 0; // no int error handler, so ...
- else if (x == 1)
- return 1;
- else
- {
- long r = x >> 1;
- long q;
- for(;;)
- {
- q = x / r;
- if (q >= r)
- return r;
- else
- r = (r + q) >> 1;
- }
- }
-}
diff --git a/contrib/libg++/libg++/src/std.h b/contrib/libg++/libg++/src/std.h
deleted file mode 100644
index 2cd73f243862..000000000000
--- a/contrib/libg++/libg++/src/std.h
+++ /dev/null
@@ -1,35 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988, 1992 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifndef _std_h
-#define _std_h 1
-
-#include <_G_config.h>
-#include <stddef>
-#include <cstdlib>
-#include <cstring>
-#include <unistd.h>
-#include <cstdio>
-#include <cerrno>
-#include <fcntl.h>
-
-extern "C" {
-int strcasecmp _G_ARGS((const char*, const char*));
-}
-
-#endif
diff --git a/contrib/libg++/libg++/src/strclass.h b/contrib/libg++/libg++/src/strclass.h
deleted file mode 100644
index 57dbcc8cf90a..000000000000
--- a/contrib/libg++/libg++/src/strclass.h
+++ /dev/null
@@ -1,5 +0,0 @@
-#ifndef _strclass_h
-#define _strclass_h
-#include <String.h>
-typedef class String string;
-#endif
diff --git a/contrib/libg++/libg++/src/swap.h b/contrib/libg++/libg++/src/swap.h
deleted file mode 100644
index 005cb0e46482..000000000000
--- a/contrib/libg++/libg++/src/swap.h
+++ /dev/null
@@ -1,3 +0,0 @@
-/* From Ron Guillmette; apparently needed for Hansen's code */
-
-#define swap(a,b) ({ typeof(a) temp = (a); (a) = (b); (b) = temp; })
diff --git a/contrib/libg++/libg++/src/sysent.h b/contrib/libg++/libg++/src/sysent.h
deleted file mode 100644
index 0535f38e934d..000000000000
--- a/contrib/libg++/libg++/src/sysent.h
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Provided for compatibity with other C++ compilers ONLY! */
-#include <std.h>
diff --git a/contrib/libg++/libg++/src/timer.c b/contrib/libg++/libg++/src/timer.c
deleted file mode 100644
index a7e2242d5290..000000000000
--- a/contrib/libg++/libg++/src/timer.c
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
-Copyright (C) 1990, 1992, 1995 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-
-/* Timing functions from Doug Schmidt... */
-
-/* no such thing as "negative time"! */
-#define TIMER_ERROR_VALUE -1.0
-
-/* If this does not work on your system, change this to #if 0, and
- report the problem. */
-
-#if 1
-
-#include <_G_config.h>
-#include <sys/types.h>
-#if _G_HAVE_SYS_RESOURCE
-#include <sys/time.h>
-#include <sys/resource.h>
-#endif
-#if !_G_HAVE_SYS_RESOURCE || !defined(RUSAGE_SELF)
-#if _G_HAVE_SYS_TIMES
-#define USE_TIMES
-#include <sys/param.h>
-#include <sys/times.h>
-#if !defined (HZ) && defined(CLK_TCK)
-#define HZ CLK_TCK
-#endif
-static struct tms Old_Time;
-static struct tms New_Time;
-#else /* ! _G_HAVE_SYS_TIMES */
-#define USE_CLOCK
-#include <time.h>
-#ifndef CLOCKS_PER_SEC
-#define CLOCKS_PER_SEC 1
-#endif
-clock_t Old_Time;
-clock_t New_Time;
-#endif /* ! _G_HAVE_SYS_TIMES */
-#else /* _G_HAVE_SYS_RESOURCE && defined(RUSAGE_SELF) */
-static struct rusage Old_Time;
-static struct rusage New_Time;
-#endif
-static int Timer_Set = 0;
-
-double
-start_timer()
-{
- Timer_Set = 1;
-#ifdef USE_CLOCK
- Old_Time = clock() / CLOCKS_PER_SEC;
- return((double) Old_Time);
-#else
-#ifdef USE_TIMES
- times(&Old_Time);
- return((double) Old_Time.tms_utime / HZ);
-#else
- getrusage(RUSAGE_SELF,&Old_Time); /* set starting process time */
- return(Old_Time.ru_utime.tv_sec + (Old_Time.ru_utime.tv_usec / 1000000.0));
-#endif
-#endif
-}
-
-/* Returns process time since Last_Time.
- If parameter is 0.0, returns time since the Old_Time was set.
- Returns TIMER_ERROR_VALUE if `start_timer' is not called first. */
-
-double
-return_elapsed_time(Last_Time)
- double Last_Time;
-{
- if (!Timer_Set) {
- return(TIMER_ERROR_VALUE);
- }
- else {
- /* get process time */
-#ifdef USE_CLOCK
- New_Time = clock();
-#else
-#ifdef USE_TIMES
- times(&New_Time);
-#else
- getrusage(RUSAGE_SELF,&New_Time);
-#endif
-#endif
- if (Last_Time == 0.0) {
-#ifdef USE_CLOCK
- return((double) (New_Time - Old_Time) / CLOCKS_PER_SEC);
-#else
-#ifdef USE_TIMES
- return((double) (New_Time.tms_utime - Old_Time.tms_utime) / HZ);
-#else
- return((New_Time.ru_utime.tv_sec - Old_Time.ru_utime.tv_sec) +
- ((New_Time.ru_utime.tv_usec - Old_Time.ru_utime.tv_usec)
- / 1000000.0));
-#endif
-#endif
- }
- else {
-#ifdef USE_CLOCK
- return((double) New_Time / CLOCKS_PER_SEC - Last_Time);
-#else
-#ifdef USE_TIMES
- return((double) New_Time.tms_utime / HZ - Last_Time);
-#else
- return((New_Time.ru_utime.tv_sec +
- (New_Time.ru_utime.tv_usec / 1000000.0)) - Last_Time);
-#endif
-#endif
- }
- }
-}
-
-#ifdef VMS
-void sys$gettim(unsigned int*) asm("sys$gettim");
-
-getrusage(int dummy,struct rusage* time){
- double rtime;
- unsigned int systime[2];
- int i;
- sys$gettim(&systime[0]);
- rtime=systime[1];
- for(i=0;i<4;i++) rtime *= 256;
- rtime+= systime[0];
-/* we subtract an offset to make sure that the number fits in a long int*/
- rtime=rtime/1.0e+7-4.144e+9;
- time->ru_utime.tv_sec= rtime;
- rtime=(rtime-time->ru_utime.tv_sec)*1.0e6;
- time->ru_utime.tv_usec= rtime;
-}
-#endif
-#else /* dummy them out */
-
-double start_timer()
-{
- return TIMER_ERROR_VALUE;
-}
-
-double
-return_elapsed_time(Last_Time)
- double Last_Time;
-{
- return TIMER_ERROR_VALUE;
-}
-
-#endif /* timing stuff */
-
-
diff --git a/contrib/libg++/libg++/src/typemacros.h b/contrib/libg++/libg++/src/typemacros.h
deleted file mode 100644
index f2bd7877e362..000000000000
--- a/contrib/libg++/libg++/src/typemacros.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#define _T(type) typeof(type)
-#define pointer_to(type) _T(_T(type)*)
-#define member_of(cls,type) _T(_T(type) cls::)
-#define function(res, args) _T(_T(res) args)
-
-#define _xq_yq(x,y) x ## _ ## y
-#define _x_y(x,y) _xq_yq(x,y)
-#define _gensym(stem) _x_y(stem, __LINE__)
diff --git a/contrib/libg++/libg++/test-install/ChangeLog b/contrib/libg++/libg++/test-install/ChangeLog
deleted file mode 100644
index 45208ea6dd91..000000000000
--- a/contrib/libg++/libg++/test-install/ChangeLog
+++ /dev/null
@@ -1,74 +0,0 @@
-Thu Oct 19 21:39:12 1995 Fred Fish <fnf@fishfood.amigalib.com>
-
- * Makefile.in: Remove extraneous tabs from otherwise empty
- line. This confuses older non-GNU versions of "make".
-
-Fri Apr 15 13:25:09 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * Makefile.in (COMPILE_FLAGS): Remove obsolete XTRAFLAGS.
-
-Tue Jun 1 16:54:46 1993 Per Bothner (bothner@rtl.cygnus.com)
-
- * Makefile.in (do_main.diff): Prefix commands by '@' to avoid
- unnecessarily alarming users with what looks like error messages.
-
-Mon Apr 19 00:25:36 1993 Per Bothner (bothner@cygnus.com)
-
- * Makefile.in, configure.in: Re-vamped configure scheme.
- * Makefile.in (foo_main.diff): Print more expressive
- error message, and refer to libg++/README.
-
-Tue Nov 17 22:20:02 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * bf.cc: Use different styles of initialization.
- * bm.cc: $#include <stdlib.h> (for exit()).
-
-Wed Aug 12 00:37:34 1992 Per Bothner (bothner@cygnus.com)
-
- * Makefile.in: da should be libked with libg++.a, but
- foo_main.run should not be (since it tests that
- constructors work *without* needing libg++.a).
-
-Thu May 14 15:13:31 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * foo_main.cc, foo_diff.cc: Change the strings naming the
- two static static_foo variables to be the same, because
- the language does not specify construction order.
- * expected.out: Update accordingly.
- * Makefile.in: Simplify, clean up. Now, if you 'make test-90S',
- it will test using ../libg++.a and local include files.
- But ../Makefile.in when testing installation, overrides
- variables so as to use installed versions. Thus things
- are more consistent and more flexible - and you can
- do the test before installing, if you want to.
-
-Sat Mar 7 19:19:49 1992 K. Richard Pixley (rich@cygnus.com)
-
- * Makefile.in: make test work when "." is not in PATH.
-
-Wed Feb 26 18:04:40 1992 K. Richard Pixley (rich@cygnus.com)
-
- * Makefile.in, configure.in: removed traces of namesubdir,
- -subdirs, $(subdir), $(unsubdir), some rcs triggers. Forced
- copyrights to '92, changed some from Cygnus to FSF.
-
-Mon Jan 6 00:39:54 1992 John Gilmore (gnu at cygnus.com)
-
- * foo_main.cc: Reverse previous change. foo_main.cc should
- never see SunOS assert.h; it should get gcc's assert.h. When
- the compile fails, it means the wrong include files are in use!
-
-Mon Jan 6 00:21:13 1992 Per Bothner (bothner at cygnus.com)
-
- * foo_main.cc: Include <stdio.h>, needed by broken SunOS assert.h.
-
-Fri Jan 3 09:17:17 1992 John Gilmore (gnu at cygnus.com)
-
- * Makefile.in: Cope with broken Sun Make VPATH.
- * Foo.cc: Expect that Foo:init_foo() will *not* be called.
- * foo_main.cc: Add comment about __init_start lossage.
- * expected.out: Remove ``expected'' __init_start call.
-
-Sat Dec 28 16:46:25 1991 Michael Tiemann (tiemann at cygnus.com)
-
- * Makefile.in (CPP_FLAGS): Add $(srcdir).
diff --git a/contrib/libg++/libg++/test-install/Foo.cc b/contrib/libg++/libg++/test-install/Foo.cc
deleted file mode 100644
index 313347652f4f..000000000000
--- a/contrib/libg++/libg++/test-install/Foo.cc
+++ /dev/null
@@ -1,89 +0,0 @@
-// Class Foo
-//#pragma implementation
-
-
-// We don't use header files, since we only want to see, whether the
-// compiler is installed properly.
-//
-#if (__GNUG__ == 2)
-typedef __SIZE_TYPE__ size_t;
-#else
-typedef unsigned int size_t;
-#endif
-
-extern "C" {
- char *strncpy (char* dest, const char* dest, size_t len);
- int printf (const char*, ...);
-};
-
-#include "Foo.h"
-
-int Foo::foos = 0;
-
-void Foo::init_foo ()
-{
- printf ("BROKENLY calling Foo::init_foo from __init_start; size_of(Foo) = %d\n", sizeof(Foo));
- foos = FOOLISH_NUMBER;
-}
-
-
-Foo::Foo ()
-{
- i = ++foos;
- strncpy (message, "default-foo", len);
-#ifdef WITH_ADDR
- printf ("Constructing Foo(%d) \"default-foo\" at %08x\n", i, this);
-#else
- printf ("Constructing Foo(%d) \"default-foo\"\n", i);
-#endif
-}
-
-Foo::Foo (char* msg)
-{
- i = ++foos;
- strncpy( message, msg, len);
-#ifdef WITH_ADDR
- printf ( "Constructing Foo(%d) \"%s\" at %08x\n", i, message, this);
-#else
- printf ( "Constructing Foo(%d) \"%s\"\n", i, message);
-#endif
-}
-
-
-Foo::Foo (const Foo& foo)
-{
- i = ++foos;
-#ifdef WITH_ADDR
- printf ("Initializing Foo(%d) \"%s\" at %08x with Foo(%d) %08x\n",
- i, foo.message, this, foo.i, &foo);
-#else
- printf ("Initializing Foo(%d) \"%s\" with Foo(%d)\n",i, foo.message, foo.i);
-#endif
- for ( int k = 0; k < FOO_MSG_LEN; k++) message[k] = foo.message[k];
-}
-
-
-Foo& Foo::operator= (const Foo& foo)
-{
-#ifdef WITH_ADDR
- printf ("Copying Foo(%d) \"%s\" at %08x to Foo(%d) %08x\n",
- foo.i, foo.message, &foo, i, this);
-#else
- printf ("Copying Foo(%d) \"%s\" to Foo(%d)\n", foo.i, foo.message, i);
-#endif
- for ( int k = 0; k < FOO_MSG_LEN; k++) message[k] = foo.message[k];
- return *this;
-}
-
-
-Foo::~Foo ()
-{
- foos--;
-#ifdef WITH_ADDR
- printf ("Destructing Foo(%d) \"%s\" at %08x (remaining foos: %d)\n",
- i, message, this, foos);
-#else
- printf ("Destructing Foo(%d) \"%s\" (remaining foos: %d)\n",
- i, message, foos);
-#endif
-}
diff --git a/contrib/libg++/libg++/test-install/Foo.h b/contrib/libg++/libg++/test-install/Foo.h
deleted file mode 100644
index 0ba2d37b2725..000000000000
--- a/contrib/libg++/libg++/test-install/Foo.h
+++ /dev/null
@@ -1,24 +0,0 @@
-// Class Foo
-
-#pragma interface
-
-#define FOOLISH_NUMBER -4711
-
-#ifndef FOO_MSG_LEN
-#define FOO_MSG_LEN 80
-#endif
-
-class Foo {
- static int foos;
- int i;
- const len = FOO_MSG_LEN;
- char message[len];
-public:
- static void init_foo ();
- static int nb_foos() { return foos; }
- Foo();
- Foo( char* message);
- Foo(const Foo&);
- Foo & operator= (const Foo&);
- ~Foo ();
-};
diff --git a/contrib/libg++/libg++/test-install/Makefile.in b/contrib/libg++/libg++/test-install/Makefile.in
deleted file mode 100644
index 32befa21a066..000000000000
--- a/contrib/libg++/libg++/test-install/Makefile.in
+++ /dev/null
@@ -1,170 +0,0 @@
-###*#######################################################################
-#
-# Makefile to test the installation of g++ and libg++
-# (by hgs@cygnus.com)
-#
-# Usage: make foo_main test-90S test-90D PREFIX=prefix [other macros]
-
-srcdir = .
-
-
-#
-# Compilation macros
-#
-PREFIX = $(prefix)
-
-CFLAGS =
-CXXFLAGS =
-CPP_FLAGS = #-I$(srcdir)/../g++-include
-OPTIMIZE_FLAGS = -O
-DEBUG_FLAGS = -g -v #-Wall
-COMPILE_FLAGS=$(NOSTDINC) -I.. -I$(srcdir) -I$(srcdir)/../src -I$(srcdir)/../$(IO_DIR) $(WRAP_C_INCLUDES)
-
-DEPEND_SOURCES = $(srcdir)/*.cc
-
-
-T90 = $(T90S) $(T90D)
-T90D = # dex_bar
-
-FLAGS_90 = \
- GXX="$(GXX)"\
- CPP_FLAGS="$(CPP_FLAGS)"\
- OPTIMIZE_FLAGS="$(OPTIMIZE_FLAGS)"\
- DEBUG_FLAGS="$(DEBUG_FLAGS)"\
- GXXLDFLAGS="$(GXXLDFLAGS)"
-
-#### package, host, target, and site dependent Makefile fragments come in here.
-##
-
-
-TEMP_FILES = *.o foo_main a b *foo_main.out *foo_main.diff *foo_main.run
-
-help:
- @echo Usage: make foo_main test-40 test-90S test-90D PREFIX=prefix [other macros]
-
-
-test-90S: foo_main a b
-
-test-90S-then-clean: test-90S
- rm -f ${TEMP_FILES}
-
-test-90D: dfoo_main da db
-
-test-90D-then-clean: test-90D
- rm -f ${TEMP_FILES}
-
-test: $(TEST)
- for P in $(TEST) ; do if [ $$P != foo_main ]; then eval ./$$P; fi; done
-
-a : a.o
- $(CXX) -o a a.o $(LIBS)
-da : a.o
- $(CXX) -o da -dynamic a.o $(LIBS)
-
-
-b : bf.o bm.o
- $(CXX) -o b bm.o bf.o $(LIBS)
-
-db : bf.o bm.o
- $(CXX) -o db -dynamic bm.o bf.o $(LIBS)
-
-
-foo_main: foo_main.diff
- @true
-
-dfoo_main: dfoo_main.diff
- @true
-
-foo_main.run: foo_main.o foo_func.o Foo.o expected.out
- $(CXX) $(DEBUG_FLAGS) -o $@ foo_main.o foo_func.o Foo.o
-
-foo_main.out: foo_main.run
- ./foo_main.run > foo_main.out
-
-foo_main.diff: foo_main.out $(srcdir)/expected.out
- @echo "diff $(srcdir)/expected.out foo_main.out >foo_main.diff"
- @diff $(srcdir)/expected.out foo_main.out >foo_main.diff \
- || (echo "Static constructor test failed - see libg++/README"; false)
-
-dfoo_main.run: foo_main.o foo_func.o Foo.o
- $(CXX) $(DEBUG_FLAGS) -o $@ -dynamic foo_main.o foo_func.o Foo.o $(LIBS)
-
-dfoo_main.out: dfoo_main.run
- ./dfoo_main.run > dfoo_main.out
-
-dfoo_main.diff: dfoo_main.out $(srcdir)/expected.out
- diff $(srcdir)/expected.out dfoo_main.out
-
-ex_bar.o: ex_bar.cc
- $(CXX) -fhandle-exceptions ex_bar.cc
-
-ex_bar: ex_bar.o
- $(CXX) $(DEBUG_FLAGS) -o $@ ex_bar.o
-
-dex_bar: ex_bar.o
- $(CXX) $(DEBUG_FLAGS) -o $@ -dynamic ex_bar.o
-
-# --- Generate depend rules ---
-
-SRCDIR=$(srcdir)/..
-
-# The sed script below attempts to make the depend output portable by
-# making the output use the same macros used elsewhere in the Makefile:
-# - It replaces double // by a single /.
-# - It replaces include files that match part of the GXX_INCLUDE_DIRS
-# by names defined in terms of the macros used to define GXX_INCLUDE_DIRS.
-# - It removes any absolute include file names that remain.
-# - then remove lines, which contain only `\'
-#
-depend: depend.tmp
- if [ "x$(DEPEND_SOURCES)" != "x" ] ; then \
- sed < depend.tmp \
- -e 's|//|/|g' \
- -e 's|$(srcdir)|$$(srcdir)|g' \
- -e 's| /[^ ]*[.]h||g' \
- -e 's|: *\$$(srcdir)/\(.*\.[cC]*\)|: \1|' \
- -e '/^[ ]*\\$$/d' -e 's/^[ ]*$$//' \
- | awk 'BEGIN { prev = "" } \
- /^( )*$$/ { if (prev ~ /\\$$/) \
- { prev = substr(prev,1,length(prev)-1); next } \
- } \
- { print prev; prev = $$0 } \
- END { if (prev !~ /^( )*$$/) print prev }' \
- > $(srcdir)/depend ;\
- fi
-
-depend.tmp: $(DEPEND_SOURCES)
- if [ "x$(DEPEND_SOURCES)" = "x" ] ; then \
- echo "" > $(srcdir)/depend ;\
- else \
- echo "" >depend.tmp ; \
- $(SRCDIR)/utils/g++dep.sh -f depend.tmp $(GXX_INCLUDE_DIRS) \
- $(DEPEND_SOURCES) ;\
- fi
-
-do_depend: depend
- if [ "$(SUBDIRS)" != "" ] ; then \
- for D in $(SUBDIRS) x ; do \
- if [ -d $$D ] ; then \
- echo "cd $$D; $(MAKE) do_depend" ; \
- (cd $$D ; $(MAKE) do_depend ); \
- fi ; \
- done ;\
- fi
-
-# DO NOT DELETE THIS LINE -- g++dep uses it.
-# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.
-
-Foo.o : Foo.cc \
- $(srcdir)/Foo.h
-a.o : a.cc
-bf.o : bf.cc
-bm.o : bm.cc
-ex_bar.o : ex_bar.cc \
- $(srcdir)/ex_bar.cc
-foo_func.o : foo_func.cc \
- $(srcdir)/Foo.h
-foo_main.o : foo_main.cc \
- $(srcdir)/Foo.h
-
-# IF YOU PUT ANYTHING HERE IT WILL GO AWAY
diff --git a/contrib/libg++/libg++/test-install/a.cc b/contrib/libg++/libg++/test-install/a.cc
deleted file mode 100644
index b704ee07adaf..000000000000
--- a/contrib/libg++/libg++/test-install/a.cc
+++ /dev/null
@@ -1,10 +0,0 @@
-#include <stream.h>
-#include <String.h>
-
-String s1 = "Hello";
-String s2 = " world!\n";
-
-main()
-{
- cout << s1 << s2 ;
-}
diff --git a/contrib/libg++/libg++/test-install/bf.cc b/contrib/libg++/libg++/test-install/bf.cc
deleted file mode 100644
index 0a32b4c85c56..000000000000
--- a/contrib/libg++/libg++/test-install/bf.cc
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <stream.h>
-#include <String.h>
-
-// gcc-2.3.2 is buggy, and can't deal with the following.
-// Take the wimpy way out for now until 2.3.3 is released.
-#if 0
-String s1 = String("Hello ");
-#else
-String s1("Hello ");
-#endif
-String s2(" world!\n");
-
-int f()
-{
- cout << s1 + s2;
- return cout.good();
-}
-
diff --git a/contrib/libg++/libg++/test-install/bm.cc b/contrib/libg++/libg++/test-install/bm.cc
deleted file mode 100644
index bbca52a27fdb..000000000000
--- a/contrib/libg++/libg++/test-install/bm.cc
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <errno.h>
-#include <stdlib.h>
-#include <stdio.h>
-
-extern int f();
-
-int main()
-{
- // We (mis-)use errno supposedly to check that we got a good errno.h
- // and libc. I don't quite buy it, but what the hell ... --Per
- errno = f();
- fprintf(stderr, "Return-code: %d (should be 1)\n", errno);
- exit(0);
-}
diff --git a/contrib/libg++/libg++/test-install/configure.in b/contrib/libg++/libg++/test-install/configure.in
deleted file mode 100644
index ec8c85117aad..000000000000
--- a/contrib/libg++/libg++/test-install/configure.in
+++ /dev/null
@@ -1,25 +0,0 @@
-# This file is a shell script fragment that supplies the information
-# necessary to tailor a template configure script into the configure
-# script appropriate for this directory. For more information, check
-# any existing configure script.
-
-configdirs=""
-srctrigger=Foo.h
-srcname="libg++ sanity checks"
-
-target_makefile_frag=../target-mkfrag
-package_makefile_frag=Make.pack
-
-# per-host:
-
-# per-target:
-
-TOLIBGXX=../
-MOSTLYCLEAN='${TEMP_FILES} dfoo_main da db core '
-ALL='$(NOTHING)'
-
-(. ${srcdir}/../config.shared) >${package_makefile_frag}
-
-# post-target:
-
-rm -f ${package_makefile_frag}
diff --git a/contrib/libg++/libg++/test-install/ex_bar.cc b/contrib/libg++/libg++/test-install/ex_bar.cc
deleted file mode 100644
index 29f58903e5cb..000000000000
--- a/contrib/libg++/libg++/test-install/ex_bar.cc
+++ /dev/null
@@ -1,123 +0,0 @@
-// bar.cc - test the runtime support for GNU C++ exception handling.
-// inspired by a PROLOG toplevel loop by Heinz Seidl (hgs@cygnus.com)
-
-#define S(s) SS(s)
-#define SS(s) # s
-
-extern "C" {
- int printf (const char*, ...);
- void abort ();
- int exit (int);
-};
-
-enum TERM { ATOM, INTEGER, DOUBLE, STRUCTURE, LIST, REF, EOF };
-
-exception {
- int number;
- char * message;
-} EX_IMPL;
-
-exception {
- TERM Term;
- char * message;
-} EX_CALL;
-
-exception {} EX_EOF;
-
-
-void pread (TERM & Term)
-{
- // simulate an input buffer
- //
- static int p = 0;
- TERM buffer[] =
- { REF,
- LIST,
- STRUCTURE,
- DOUBLE,
- INTEGER,
- ATOM
- };
- const int blen = sizeof (buffer) / sizeof (TERM);
-
- if ( p < blen)
- Term = buffer[p++];
- else
- Term = EOF;
-}
-
-void call (const TERM & Term) raises EX_CALL, EX_EOF, EX_IMPL
-{
- switch (Term)
- {
- case REF:
- raise EX_CALL (REF,
- "Sorry - dereferencing not implemented (REF).");
- break;
- case LIST:
- raise EX_CALL (LIST,
- "LISTs are not callable (LIST).");
- break;
- case STRUCTURE:
- raise EX_CALL (STRUCTURE,
- "Undefined predicate (STRUCTURE).");
- break;
- case DOUBLE:
- raise EX_CALL (DOUBLE,
- "DOUBLEs are not callable (DOUBLE).");
- break;
- case INTEGER:
- raise EX_CALL (INTEGER,
- "INTEGERs are not callable (INTEGER).");
- case ATOM:
- raise EX_CALL (ATOM,
- "Undefined predicate (ATOM).");
- break;
- case EOF:
- raise EX_EOF ();
- break;
- default:
- raise EX_IMPL ( Term,
- "Implementation error in file " __FILE__
- " at line " S(__LINE__) " .");
- }
-}
-
-void main()
-{
- try {
- while (1) {
- try {
- while (1)
- {
- TERM Term;
- pread (Term);
- call (Term);
- }
- } except ep {
- EX_CALL {
- printf ("EXCEPTION(%d) : %s\n", ep.Term, ep.message);
- }
- EX_EOF {
- printf ("EOF encountered.\n");
- raise ep;
- }
- default {
- raise ep;
- }
- }
- }
- } except ep {
- EX_IMPL {
- printf ("FATAL(%d): %s\n", ep.number, ep.message);
- abort();
- }
- EX_EOF {
- printf ("Good bye.\n");
- }
- default {
- raise ep;
- }
- }
- return 0;
-}
diff --git a/contrib/libg++/libg++/test-install/expected.out b/contrib/libg++/libg++/test-install/expected.out
deleted file mode 100644
index 39be0dbc2c7c..000000000000
--- a/contrib/libg++/libg++/test-install/expected.out
+++ /dev/null
@@ -1,15 +0,0 @@
-Constructing Foo(1) "static_foo"
-Constructing Foo(2) "static_foo"
-Constructing Foo(3) "automatic_foo"
-Constructing Foo(4) "default-foo"
-Initializing Foo(5) "default-foo" with Foo(4)
-Destructing Foo(4) "default-foo" (remaining foos: 4)
-Constructing Foo(5) "other_foo1"
-Constructing Foo(6) "other_foo2"
-Copying Foo(5) "other_foo1" to Foo(6)
-Destructing Foo(6) "other_foo1" (remaining foos: 5)
-Destructing Foo(5) "other_foo1" (remaining foos: 4)
-Destructing Foo(5) "default-foo" (remaining foos: 3)
-Destructing Foo(3) "automatic_foo" (remaining foos: 2)
-Destructing Foo(2) "static_foo" (remaining foos: 1)
-Destructing Foo(1) "static_foo" (remaining foos: 0)
diff --git a/contrib/libg++/libg++/test-install/foo_func.cc b/contrib/libg++/libg++/test-install/foo_func.cc
deleted file mode 100644
index ef941fbf18a2..000000000000
--- a/contrib/libg++/libg++/test-install/foo_func.cc
+++ /dev/null
@@ -1,17 +0,0 @@
-// test program for Class Foo
-
-#include "Foo.h"
-
-static Foo static_foo( "static_foo");
-
-Foo f()
-{
- Foo x;
- return x;
-}
-
-void g()
-{
- Foo other_foo1 = Foo( "other_foo1"), other_foo2 = Foo( "other_foo2");
- other_foo2 = other_foo1;
-}
diff --git a/contrib/libg++/libg++/test-install/foo_main.cc b/contrib/libg++/libg++/test-install/foo_main.cc
deleted file mode 100644
index bd235408ae51..000000000000
--- a/contrib/libg++/libg++/test-install/foo_main.cc
+++ /dev/null
@@ -1,40 +0,0 @@
-// main program for Class Foo
-
-extern "C" {
-// Some <assert.h> implementations (e.g. SUNOS 4.1) are broken,
-// in that they require <stdio.h>. But, if gcc/g++ is installed
-// correctly, you should get gcc's assert.h.
-// If the compile fails, it means the wrong include files are in use!
-#include <assert.h>
-};
-#include "Foo.h"
-
-extern "C" void __init_start();
-
-extern Foo f(void);
-extern void g(void);
-
-/* This function should *not* be called by the environment. There is
- no way in C++ to ``run something after the initializers but before main()''.
- The library that depends on this (NIHCL) is broken. -- John Gilmore
- We leave this here to test that future changes to the compiler
- do not re-introduce this losing ``feature''. */
-void
-__init_start()
-{
- Foo::init_foo();
-}
-
-static Foo static_foo( "static_foo");
-
-main()
-{
- assert (Foo::nb_foos() == 2);
- Foo automatic_foo( "automatic_foo");
- Foo bla_foo = f();
- assert (Foo::nb_foos() == 4);
- g();
- assert (Foo::nb_foos() == 4);
- // `automatic_foo' and `bla_foo' are destructed here
-}
-
diff --git a/contrib/libg++/libg++/tests/ChangeLog b/contrib/libg++/libg++/tests/ChangeLog
deleted file mode 100644
index de6d9d79821c..000000000000
--- a/contrib/libg++/libg++/tests/ChangeLog
+++ /dev/null
@@ -1,346 +0,0 @@
-Wed Feb 28 13:42:46 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * Makefile.sh: Remove tCurses rules.
-
-Wed Jan 24 18:27:16 1996 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * Makefile.sh (TSRCS): Take out tCurses.cc.
- (TOUTS): Remove tCurses.
- (tests): Take off tCurses and the message about running tCurses.
-
-Wed Nov 15 20:27:22 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * Makefile.sh (tCurses): New rule to only link dynamically if we
- have a shared curses library.
- (LIB_FOR_tCurses): Delete. Take tCurses out of the for loop.
-
-Fri Sep 1 16:56:27 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * tBitString.cc, tBitString.exp: Added test for operator +=,
- from Curtis A. Snyder <C1S@icf.hrb.com>.
-
-Mon Aug 21 11:45:25 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * configure.in (srctrigger): Use tObstack.cc instead of tComplex.cc.
-
- * Makefile.sh: Forget tComplex.
- * tComplex.*: Remove.
-
-Sun Jun 11 12:22:21 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * test_h.cc: Don't include <memory.h>.
-
-Fri May 5 13:04:17 1995 Mike Stump <mrs@cygnus.com>
-
- * Move `for' decl out of `for' statement.
-
-Fri Jan 20 00:19:57 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * test_h.cc: No longer include complex.h.
-
-Wed Dec 14 18:49:12 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * tQueue.cc (test_resize), tQueue.inp: New test case from
- Jocelyn Serot <jserot@alize.univ-bpclermont.fr>.
-
-Tue Dec 13 15:47:36 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * tiLList.cc (main): Add explicit variable to avoid warning
- on passing non-lvalue by reference.
-
-Sat Nov 5 19:13:38 1994 Jason Merrill (jason@phydeaux.cygnus.com)
-
- * Makefile.sh: Don't display the 'echo' command.
-
- * Makefile.in (LIBS): Remove.
-
-Sat Nov 5 14:29:00 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * tRational.cc (M_PI): #define it if it isn't defined.
-
- * tiLList.cc: Added new test from Magnus Nordborg.
- * tiLList.exp: New file.
- * Makefile.sh (check-tiLList): Merge with check-${TEST}.
-
-Mon Oct 24 16:03:14 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * Makefile.sh: Re-arrange so tFix* tCurses etc don't need LIBTEST.
-
-Thu Sep 29 03:23:24 1994 Philippe De Muyter (phdm@info.ucl.ac.be)
-
- * test_h.cc: do not include 3 times <fcntl.h>, some systems
- do not like that. Include <sys/wait.h> only if _G_HAVE_SYS_WAIT
-
-Mon Sep 5 13:07:01 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * test_h.cc: Remove #include <regex.h>.
-
-Thu Sep 1 17:35:33 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * tObstack.cc (main): Make output independent of size of pointers.
- * tObstack.exp: Update accordingly.
-
-Fri Aug 12 17:36:44 1994 Brendan Kehoe (brendan@lisa.cygnus.com)
-
- * tFix24.cc (check): Add unsigned int version.
-
-Tue Jun 28 03:07:03 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * tFix.cc: Adjust to new organization of Fix class (overflow
- handlers are now static members).
-
-Mon Jun 27 18:37:05 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * tVec.cc (print): Take parm by value.
-
- * tBitString.cc (accumtest): Make parms const refs.
-
-Wed Jun 15 11:04:47 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * tString.cc (utiltest), tString.exp: Add a test to capitalize
- a string with a bunch of apostrophes and single quotes.
-
-Wed Jun 1 13:59:53 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * tiLList.cc: Explicitly instantiate [SD]L{Node,List}<int>.
-
-Wed May 25 15:42:21 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * Makefile.sh: Fixes so that you don't need to build libtest.a
- for tests that don't need it.
-
-Fri May 13 16:49:13 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * tCurses.cc: Check _G_HAVE_CURSES, so we can compile
- (though not do anything useful) if curses.h is missing.
-
-Wed May 11 00:40:43 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- Make libg++ build with gcc -ansi -pedantic-errors
- * tRational.cc: Wrap use of <? and >? in #ifndef __STRICT_ANSI__
- * tBitSet.cc: Returns void.
-
-Thu Feb 10 16:44:04 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * tBitSet.cc (test4), tBitSet.exp: Add a new test.
-
-Sat Dec 4 16:14:38 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * test_h.cc: Remove #include <sys/socket.h> and <sys/resource.h>.
- They're included by <osfcn.h>, and the multiple inclusion
- loses on some systems (e.g. Ultrix). Also, don't #include
- <sys/param.h>, as it's non-Posix.
-
-Wed Nov 24 12:41:07 1993 Jeffrey A. Law (law@snake.cs.utah.edu)
-
- * test_h.cc: Include limits.h rather than values.h.
-
-Mon Oct 11 15:16:52 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * tSet.exp: Change VOHSet output to match new code.
-
-Wed Sep 15 14:46:40 1993 Mike Stump (mrs@cygnus.com)
-
- * Makefile.sh (LIB_FOR_tInteger): Add -lm for tInteger.
-
-Thu Aug 26 18:05:20 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * tInteger.cc (iotest), tInteger.inp, tInteger.exp:
- Test a couple of more things.
-
-Thu Aug 19 21:41:40 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * configure.in (CXXINCLUDES): Remove line - not needed.
-
-Thu Aug 19 12:44:14 1993 Mike Stump (mrs@cygnus.com)
-
- * configure.in (CXXINCLUDES): Add -I../../libio so that make check
- works when srcdir != objdir.
-
-Sat Jul 24 17:50:52 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * tComplex.cc: Add #include <builtin.h>, for abs(double).
-
-Tue Jun 1 17:02:12 1993 Per Bothner (bothner@rtl.cygnus.com)
-
- * Makefile.sh: Take out tFile, since it depends on GNU iostream.
- * tInteger.cc (main), tInteger.exp: Add test for setbit/clearbit.
- * tRational.cc (pitest): Only test >? and <? if g++.
- * tRational.cc (simpletest), tRational.exp: New test.
- * tString.cc (splittest): Cast 0 to (char*), to avoid ambiguity.
- * tFix.cc (checkb), tFix16.cc (check), tFix24.cc (check):
- New overloaded functions, to avoid ambiguities.
- * tFix.cc (main): Explicitly call Integer::as_double().
- * tBag.cc, tBitSet.cc, tBitString.cc, tDeque.cc, tFix.cc, tFix16.cc,
- tFix24.cc, tInteger.cc, tMap.cc, tObstack.cc, tPQ.cc, tQueue.cc,
- tRational.cc, tSet.cc, tStack.cc, tVec.cc: Make sure main() return 0.
- * test_h.cc: Don't include GNU-iostream specific files unless
- we're using GNU iostream.
-
-Fri May 21 12:57:37 1993 Per Bothner (bothner@deneb.cygnus.com)
-
- * configure.in: Define TOLIBGXX.
- * tiLList.cc, tList.cc: #include <iostream.h>, not old <stream.h>.
-
-Tue Apr 27 13:53:46 1993 Per Bothner (bothner@cygnus.com)
-
- * Makefile.in: Removed bogus re-definition of WRAP_C_INCLUDES/
- * tString.cc, tFile.cc, tComplex, tRandom.cc (main): Return 0.
-
-Mon Apr 19 01:30:01 1993 Per Bothner (bothner@cygnus.com)
-
- * Makefile.in, configure.in: Re-vamped configure scheme.
- * Makefile.sh: New shell scipt, used at configure time.
- This generates the repetitive rules of the Makefile.
- * tBitSet.cc, tBitString.cc: Prefer new "standardized"
- method names prev() instead of previous().
-
-Thu Jan 21 18:27:27 1993 Per Bothner (bothner@cygnus.com)
-
- * tFix.cc: Remove obsolete 'overload' declarations.
-
-Mon Jan 18 16:49:19 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
-
- * tString.cc: Include stream.h for dec(int) support.
-
-Sun Nov 1 14:44:13 1992 Per Bothner (bothner@cygnus.com)
-
- * tInteger.cc (modtest): New function, from a bug report.
- * tInteger.exp: New output.
-
-Fri Oct 16 15:33:11 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * Makefile.in: Remove some obsolete junk.
-
-Fri Sep 25 11:32:47 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * tiLList.cc: New files (derived from tList.cc) to
- check template-based versions of SLList and DLList.
- * Makefile.in: Use tiLList.cc.
-
-Mon Aug 10 15:11:42 1992 Per Bothner (bothner@cygnus.com)
-
- * Makefile.in (make-tests): New rule to build all the
- tests without running them (useful when ross-compiling.)
- * tSet.cc (main): Rename argc <-> argv.
- * tSet.exp, tBag.exp, tMap.exp: Update to handle new hashing
- policy for <int>VH{Set,Bag,Map} classes.
-
-Mon Jul 20 15:45:29 1992 Mike Stump (mrs@cygnus.com)
-
- * tObstack.cc (main): Add cast from void * to char since it is
- not a standard conversion.
-
-Fri Jun 26 11:46:53 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * tRational.cc: Use the slightly more standard M_PI
- instead of plain PI.
-
-Wed Jun 17 16:50:45 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * Makefile.in: Fix *clean rules. Add $(LDFLAGS) when linking.
- Remove the '-' error suppressing prefix so that failing
- checks cause the make to fail.
- Clean out the remnants of the obsolete runtests rule.
- * out.iostream, out.old-stream: Removed - no longer used.
- * test_h.cc: Don't #include <bstring.h> - it is non-standard.
-
-Thu May 14 15:08:37 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * test_h.cc: Only #include sys/socket.h and sys/resource.h
- if these are available (according to _G_config.h).
-
-Fri May 8 15:41:12 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * Makefile.in: Pass $(NOSTDINC) to compiler.
-
-Thu May 7 00:48:11 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * tList.cc (randseq): Evaluate 1st parameter of recursive
- call to randeq() first (separately). (Unspecified order of
- parameter evaluation was why the sun3 and sun4 versions
- gave different results.)
-
-Wed May 6 01:10:58 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * tList.cc: For randseq(), use a dumb but portable
- "random" number generator. (For unknown reason, the
- old code gave different result on sun3 and sun4.)
- * tList.exp: New output.
- * Makefile.in: Don't run 'check-tRandom' as part of
- 'check', because it isn't portable (byte-order problems?).
-
- * iostream.out: Split into multiple files, moving the
- tFile output into tFile.exp, etc.
- * Makefile.in: Add lots of new rules for check-tFile,
- check-tObstack etc. THese run an individual test,
- and compare the output to the matching *.exp file.
- This makes it easier to track down problems, and
- adds flexibility by making it easier to add or remove tests.
- * test_h.cc: Don't include bool.h, which is deprecated
- because it is likely to conflict with other header files.
-
-Fri Apr 17 14:48:26 1992 Per Bothner (bothner@cygnus.com)
-
- * tPQ.cc: Update delete of array to modern syntax.
- * test_h.cc: #include _G_config.h.
- Only #include <sys/resource.h> if not SYSV.
-
-Tue Mar 10 18:16:28 1992 Per Bothner (bothner@cygnus.com)
-
- * tests_h.cc: Include sys/time.h before sys/resource.h,
- according to traditional requirement.
-
-Fri Mar 6 15:11:36 1992 Per Bothner (bothner@cygnus.com)
-
- * tests_h.cc: Don't include malloc.h, since it is
- not a standard include file.
-
-Wed Feb 26 18:04:40 1992 K. Richard Pixley (rich@cygnus.com)
-
- * Makefile.in, configure.in: removed traces of namesubdir,
- -subdirs, $(subdir), $(unsubdir), some rcs triggers. Forced
- copyrights to '92, changed some from Cygnus to FSF.
-
-Fri Jan 31 17:07:30 1992 Per Bothner (bothner at cygnus.com)
-
- * Makefile.in: Add $(LSRCS) (the generated source files)
- to DEPEND_SOURCES. (Otherwise, make fails to generate
- some of the i*.h include files.)
-
- * Makefile.in: Add i{CH,Splay}Node.{cc,h,o} (because
- CHNode and SplayNode have been moved into their own
- include files).
- * out.iostream: Change to match real output (now that
- all discrepancies from old output are explained).
-
-Sat Jan 25 00:32:45 1992 Per Bothner (bothner at cygnus.com)
-
- * Makefile.in: Replace libtest.a by LIBTEST macro.
- * out.iostream: "Fix".
- * tFile.cc: New iostream class and classes derived from
- it allow us to support much more of the fucntionality
- of the old library.
-
-Thu Jan 16 18:00:04 1992 Per Bothner (bothner at cygnus.com)
-
- * expected.out, out_iostream, out.old_stream, Makefile.in:
- Replace expected.out by two versions: One when using new
- iostreams, and one for old streams.
- * Makefile.in: Some tweaks to 'make depend.'
- * tFix16.cc, tFix24.cc: Replace check macro by overloaded
- inline functions. This forces side effects (including
- error messages) when evaluating the operands to happen
- before printing.
- * tFile.cc: Comditionally compile depending on
- _OLD_STREAMS macro (defined by stream.h) so that most
- tests work for both new iostreams as well as old streams.
- * test_h.cc: Remove obsolete include files.
-
-Sun Jan 5 00:03:06 1992 Per Bothner (bothner at cygnus.com)
-
- * Makefile.in, configure.in: Add 'make depend' support.
- * tBag.cc, tMap.cc, tPQ.cc, tSet.cc: #include <builtin.h>,
- because new iostream library doesn't automatically include it.
- * tFile.cc, test_h.cc: #ifdef out code that won't work with new
- iostream library. Other tweaks for new library.
diff --git a/contrib/libg++/libg++/tests/Makefile.in b/contrib/libg++/libg++/tests/Makefile.in
deleted file mode 100644
index 8faf11284a4d..000000000000
--- a/contrib/libg++/libg++/tests/Makefile.in
+++ /dev/null
@@ -1,22 +0,0 @@
-srcdir = .
-
-#### package, host, target, and site dependent Makefile fragments come in here.
-##
-
-GENCLASS = ../genclass/genclass
-PROTODIR = $(srcdir)/../src/gen
-
-# compilation notes:
-# The following g++ warnings are expected to appear:
-#
-# 2. Several warnings from genclass about classes with only .h, no .cc files
-#
-# 3. A few harmless reminder warnings that some classes have no data members.
-#
-# 4. Many harmless warnings that arguments to vector-delete are unnecessary
-# when deleting arrays of builtin types.
-
-#--- NOTE: Lots of stuff gets added by ${srcdir}/Makefile.sh
-
-Makefile: $(srcdir)/Makefile.sh
-
diff --git a/contrib/libg++/libg++/tests/Makefile.sh b/contrib/libg++/libg++/tests/Makefile.sh
deleted file mode 100755
index 427ad0182827..000000000000
--- a/contrib/libg++/libg++/tests/Makefile.sh
+++ /dev/null
@@ -1,174 +0,0 @@
-cat <<'EOF'
-# test files
-TSRCS = tObstack.cc tString.cc tInteger.cc tRational.cc \
- tBitSet.cc tBitString.cc tRandom.cc tList.cc tPlex.cc \
- tLList.cc tVec.cc tStack.cc tQueue.cc tDeque.cc tPQ.cc tSet.cc tBag.cc \
- tMap.cc tFix.cc tFix16.cc tFix24.cc \
- tGetOpt.cc \
- tiLList.cc
-EOF
-
-TESTS0="tObstack tString tInteger tRational tBitSet"\
-" tBitString tFix tFix16 tFix24 tRandom"
-TESTS1="tStack tQueue tDeque tPQ tSet tBag tMap tList tPlex tLList tVec"
-
-cat <<EOF
-# executables
-TOUTS = test_h ${TESTS0} ${TESTS1} tiLList tGetOpt
-
-EOF
-
-cat <<'EOF'
-# files for archived prototype classes
-LOBJS = \
- iList.o iSLList.o iDLList.o iVec.o iAVec.o \
- iPlex.o iFPlex.o iXPlex.o iRPlex.o iMPlex.o \
- iSet.o iBag.o iMap.o iPQ.o \
- iXPSet.o iOXPSet.o iSLSet.o iOSLSet.o iBSTSet.o iCHNode.o \
- iAVLSet.o iSplayNode.o iSplaySet.o iVHSet.o iVOHSet.o iCHSet.o \
- iXPBag.o iOXPBag.o iSLBag.o iOSLBag.o iSplayBag.o iVHBag.o iCHBag.o \
- iVHMap.o iCHMap.o iSplayMap.o iAVLMap.o iRAVLMap.o \
- iSplayPQ.o iPHPQ.o iXPPQ.o \
- iVStack.o iVQueue.o iStack.o iQueue.o iDeque.o \
- iXPStack.o iSLStack.o iXPQueue.o iSLQueue.o iXPDeque.o iDLDeque.o
-
-LSRCS = \
- iList.cc iSLList.cc iDLList.cc iVec.cc iAVec.cc \
- iPlex.cc iFPlex.cc iXPlex.cc iRPlex.cc iMPlex.cc \
- iSet.cc iBag.cc iMap.cc iPQ.cc \
- iXPSet.cc iOXPSet.cc iSLSet.cc iOSLSet.cc iBSTSet.cc iCHNode.cc \
- iAVLSet.cc iSplayNode.cc iSplaySet.cc iVHSet.cc iVOHSet.cc iCHSet.cc \
- iXPBag.cc iOXPBag.cc iSLBag.cc iOSLBag.cc iSplayBag.cc iVHBag.cc iCHBag.cc \
- iVHMap.cc iCHMap.cc iSplayMap.cc iAVLMap.cc iRAVLMap.cc \
- iSplayPQ.cc iPHPQ.cc iXPPQ.cc \
- iVStack.cc iVQueue.cc iStack.cc iQueue.cc iDeque.cc \
- iXPStack.cc iSLStack.cc iXPQueue.cc iSLQueue.cc iXPDeque.cc iDLDeque.cc
-
-DEPEND_SOURCES = $(srcdir)/*.cc $(LSRCS)
-
-LHDRS = idefs.h
-
-.PHONY: all
-all:
-
-.PHONY: info
-info:
-.PHONY: install-info
-install-info:
-.PHONY: clean-info
-clean-info:
-
-.PHONY: check
-check: tests
-
-.PHONY: check-tGetOpt
-EOF
-
-for TEST in ${TESTS0} ${TESTS1} tiLList ; do
- echo ".PHONY: check-${TEST}"
- if [ -f ${srcdir}/${TEST}.inp ] ; then
- echo "check-${TEST}: ${TEST}" '$(srcdir)'"/${TEST}.inp"
- echo " ./${TEST} < "'$(srcdir)'"/${TEST}.inp > ${TEST}.out 2>&1"
- else
- echo "check-${TEST}: ${TEST}"
- echo " ./${TEST} > ${TEST}.out 2>&1"
- fi
- echo ' diff -b $(srcdir)/'"${TEST}.exp ${TEST}.out"
-done
-
-cat <<'EOF'
-
-check-tGetOpt: tGetOpt $(srcdir)/tGetOpt.inp
- ./tGetOpt -abc -de10 -2000 -h3i \
- <$(srcdir)/tGetOpt.inp >tGetOpt.out 2>&1
- diff -b $(srcdir)/tGetOpt.exp tGetOpt.out
-
-$(TOUTS): $(LIBGXX)
-
-LIBTEST=libtest.a
-
-# We don't do check-tRandom, because it is not portable.
-
-# Comment this out if your compiler doesn't handle templates:
-CHECK_TEMPLATES=check-templates
-
-tests checktests: clean_tests test_h \
- check-tObstack check-tString check-tInteger \
- check-tRational check-tBitSet check-tBitString \
- check-tFix check-tFix16 check-tFix24 check-tGetOpt \
- check-tList check-tPlex check-tLList check-tVec \
- check-tStack check-tQueue check-tDeque check-tPQ \
- check-tSet check-tBag check-tMap $(CHECK_TEMPLATES)
- ./test_h
-
-check-templates: check-tiLList
-
-# Build all the tests, but don't run them. (Useful when cross-compiling.)
-
-EOF
-
-cat <<'EOF'
-make-tests: $(TOUTS)
-
-test_h: test_h.o
- $(CXX) $(LDFLAGS) test_h.o -o $@ $(LIBS) -lm
-
-$(LIBTEST): $(LHDRS) $(LOBJS)
- rm -f $(LIBTEST)
- $(AR) r $(LIBTEST) $(LOBJS)
- $(RANLIB) $(LIBTEST)
-
-#
-# other tests
-#
-EOF
-
-LIB_FOR_tRational=-lm
-LIB_FOR_tInteger=-lm
-LIB_FOR_tRandom=-lm
-LIB_FOR_tFix=-lm
-LIB_FOR_tFix16=-lm
-LIB_FOR_tFix24=-lm
-
-for TEST in $TESTS0 tiLList tGetOpt; do
- echo "${TEST}: ${TEST}.o"
- echo ' $(CXX) $(LDFLAGS)' "${TEST}.o" '-o $@ $(LIBS)' \
- `eval echo '$LIB_FOR_'$TEST`
- echo ""
-done
-for TEST in twrapper tgwrapper $TESTS1; do
- echo "${TEST}: " '$(LIBTEST)' " ${TEST}.o"
- echo ' $(CXX) $(LDFLAGS)' "${TEST}.o" '-o $@ $(LIBTEST) $(LIBS)'
- echo ""
-done
-
-cat <<'EOF'
-idefs.h:
- PROTODIR=$(PROTODIR); export PROTODIR; $(GENCLASS) int val defs i
-EOF
-
-for TEST in Set XPSet OXPSet SLSet OSLSet BSTSet AVLSet SplayNode SplaySet VHSet VOHSet CHSet CHNode Bag XPBag OXPBag SLBag OSLBag SplayBag VHBag CHBag PQ PHPQ SplayPQ XPPQ Stack Queue Deque SLStack SLQueue DLDeque List Plex FPlex XPlex MPlex RPlex FPStack XPStack FPQueue XPQueue XPDeque SLList DLList Vec AVec; do
- echo "i$TEST.h i$TEST.cc:"
- echo ' PROTODIR=$(PROTODIR); export PROTODIR; $(GENCLASS) int val' $TEST i
-done
-
-for TEST in Map VHMap CHMap SplayMap AVLMap RAVLMap; do
- echo "i${TEST}.h i$TEST.cc:"
- echo ' PROTODIR=$(PROTODIR); export PROTODIR; $(GENCLASS) -2 int val int val' $TEST i
-done
-
-cat <<'EOF'
-iVStack.h iVStack.cc: iStack.h
- PROTODIR=$(PROTODIR); export PROTODIR; $(GENCLASS) int val VStack i
-iVQueue.h iVQueue.cc: iQueue.h
- PROTODIR=$(PROTODIR); export PROTODIR; $(GENCLASS) int val VQueue i
-
-relink: force
- rm -f $(TOUTS)
-
-.PHONY: clean_tests
-clean_tests: force
- rm -f *.out
-
-force:
-EOF
diff --git a/contrib/libg++/libg++/tests/configure.in b/contrib/libg++/libg++/tests/configure.in
deleted file mode 100644
index 5608fb750be4..000000000000
--- a/contrib/libg++/libg++/tests/configure.in
+++ /dev/null
@@ -1,27 +0,0 @@
-# This file is a shell script fragment that supplies the information
-# necessary to tailor a template configure script into the configure
-# script appropriate for this directory. For more information, check
-# any existing configure script.
-
-configdirs=
-srctrigger=tObstack.cc
-srcname="tests for libg++"
-
-target_makefile_frag=../target-mkfrag
-package_makefile_frag=Make.pack
-
-# per-host:
-
-# per-target:
-
-TOLIBGXX=../
-ALL=force
-MOSTLYCLEAN='*.out *.o \#* core trie-gen ffile streamfile i*.cc i*.h CXX.hack* test.bye test.bye2 test.shell $(LIBTEST) $(TOUTS)'
-CLEAN=
-
-(. ${srcdir}/../config.shared) >${package_makefile_frag}
-
-# post-target:
-
-(. ${srcdir}/Makefile.sh) >>Makefile
-rm -f ${package_makefile_frag}
diff --git a/contrib/libg++/libg++/tests/depend b/contrib/libg++/libg++/tests/depend
deleted file mode 100644
index dbd33e1774c7..000000000000
--- a/contrib/libg++/libg++/tests/depend
+++ /dev/null
@@ -1,161 +0,0 @@
-
-
-# DO NOT DELETE THIS LINE -- g++dep uses it.
-# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.
-
-tBag.o : tBag.cc \
- $(srcdir)/../$(IO_DIR)/stream.h \
- $(srcdir)/../$(IO_DIR)/iostream.h \
- $(srcdir)/../$(IO_DIR)/streambuf.h \
- iBag.h \
- iXPBag.h \
- iSLBag.h \
- iVHBag.h \
- iCHBag.h \
- iOXPBag.h \
- iOSLBag.h \
- iSplayBag.h
-tBitSet.o : tBitSet.cc \
- $(srcdir)/../$(IO_DIR)/stream.h \
- $(srcdir)/../$(IO_DIR)/iostream.h \
- $(srcdir)/../$(IO_DIR)/streambuf.h
-tBitString.o : tBitString.cc \
- $(srcdir)/../$(IO_DIR)/stream.h \
- $(srcdir)/../$(IO_DIR)/iostream.h \
- $(srcdir)/../$(IO_DIR)/streambuf.h
-tComplex.o : tComplex.cc \
- $(srcdir)/../$(IO_DIR)/stream.h \
- $(srcdir)/../$(IO_DIR)/iostream.h \
- $(srcdir)/../$(IO_DIR)/streambuf.h
-tCurses.o : tCurses.cc
-tDeque.o : tDeque.cc \
- $(srcdir)/../$(IO_DIR)/stream.h \
- $(srcdir)/../$(IO_DIR)/iostream.h \
- $(srcdir)/../$(IO_DIR)/streambuf.h \
- iDeque.h \
- iXPDeque.h \
- iDLDeque.h
-tFile.o : tFile.cc \
- $(srcdir)/../$(IO_DIR)/stream.h \
- $(srcdir)/../$(IO_DIR)/iostream.h \
- $(srcdir)/../$(IO_DIR)/streambuf.h \
- $(srcdir)/../$(IO_DIR)/strstream.h \
- $(srcdir)/../$(IO_DIR)/SFile.h \
- $(srcdir)/../$(IO_DIR)/fstream.h \
- $(srcdir)/../$(IO_DIR)/PlotFile.h
-tFix.o : tFix.cc \
- $(srcdir)/../$(IO_DIR)/stream.h \
- $(srcdir)/../$(IO_DIR)/iostream.h \
- $(srcdir)/../$(IO_DIR)/streambuf.h
-tFix16.o : tFix16.cc \
- $(srcdir)/../$(IO_DIR)/stream.h \
- $(srcdir)/../$(IO_DIR)/iostream.h \
- $(srcdir)/../$(IO_DIR)/streambuf.h
-tFix24.o : tFix24.cc \
- $(srcdir)/../$(IO_DIR)/stream.h \
- $(srcdir)/../$(IO_DIR)/iostream.h \
- $(srcdir)/../$(IO_DIR)/streambuf.h
-tGetOpt.o : tGetOpt.cc
-tInteger.o : tInteger.cc \
- $(srcdir)/../$(IO_DIR)/stream.h \
- $(srcdir)/../$(IO_DIR)/iostream.h \
- $(srcdir)/../$(IO_DIR)/streambuf.h
-tLList.o : tLList.cc \
- $(srcdir)/../$(IO_DIR)/stream.h \
- $(srcdir)/../$(IO_DIR)/iostream.h \
- $(srcdir)/../$(IO_DIR)/streambuf.h \
- iSLList.h \
- iDLList.h
-tList.o : tList.cc \
- $(srcdir)/../$(IO_DIR)/stream.h \
- $(srcdir)/../$(IO_DIR)/iostream.h \
- $(srcdir)/../$(IO_DIR)/streambuf.h \
- iList.h
-tMap.o : tMap.cc \
- $(srcdir)/../$(IO_DIR)/stream.h \
- $(srcdir)/../$(IO_DIR)/iostream.h \
- $(srcdir)/../$(IO_DIR)/streambuf.h \
- iMap.h \
- iSplayMap.h \
- iVHMap.h \
- iCHMap.h \
- iAVLMap.h \
- iRAVLMap.h
-tObstack.o : tObstack.cc \
- $(srcdir)/../$(IO_DIR)/stream.h \
- $(srcdir)/../$(IO_DIR)/iostream.h \
- $(srcdir)/../$(IO_DIR)/streambuf.h
-tPQ.o : tPQ.cc \
- $(srcdir)/../$(IO_DIR)/stream.h \
- $(srcdir)/../$(IO_DIR)/iostream.h \
- $(srcdir)/../$(IO_DIR)/streambuf.h \
- iPQ.h \
- iXPPQ.h \
- iPHPQ.h \
- iSplayPQ.h
-tPlex.o : tPlex.cc \
- $(srcdir)/../$(IO_DIR)/stream.h \
- $(srcdir)/../$(IO_DIR)/iostream.h \
- $(srcdir)/../$(IO_DIR)/streambuf.h \
- iPlex.h \
- iFPlex.h \
- iXPlex.h \
- iMPlex.h \
- iRPlex.h
-tQueue.o : tQueue.cc \
- $(srcdir)/../$(IO_DIR)/stream.h \
- $(srcdir)/../$(IO_DIR)/iostream.h \
- $(srcdir)/../$(IO_DIR)/streambuf.h \
- iQueue.h \
- iXPQueue.h \
- iVQueue.h \
- iSLQueue.h
-tRandom.o : tRandom.cc \
- $(srcdir)/../$(IO_DIR)/stream.h \
- $(srcdir)/../$(IO_DIR)/iostream.h \
- $(srcdir)/../$(IO_DIR)/streambuf.h
-tRational.o : tRational.cc \
- $(srcdir)/../$(IO_DIR)/stream.h \
- $(srcdir)/../$(IO_DIR)/iostream.h \
- $(srcdir)/../$(IO_DIR)/streambuf.h
-tSet.o : tSet.cc \
- $(srcdir)/../$(IO_DIR)/stream.h \
- $(srcdir)/../$(IO_DIR)/iostream.h \
- $(srcdir)/../$(IO_DIR)/streambuf.h \
- iSet.h \
- iXPSet.h \
- iSLSet.h \
- iVHSet.h \
- iVOHSet.h \
- iCHSet.h \
- iOXPSet.h \
- iOSLSet.h \
- iBSTSet.h \
- iAVLSet.h \
- iSplaySet.h
-tStack.o : tStack.cc \
- $(srcdir)/../$(IO_DIR)/stream.h \
- $(srcdir)/../$(IO_DIR)/iostream.h \
- $(srcdir)/../$(IO_DIR)/streambuf.h \
- iStack.h \
- iXPStack.h \
- iVStack.h \
- iSLStack.h
-tString.o : tString.cc \
- $(srcdir)/../$(IO_DIR)/stream.h \
- $(srcdir)/../$(IO_DIR)/iostream.h \
- $(srcdir)/../$(IO_DIR)/streambuf.h
-tVec.o : tVec.cc \
- $(srcdir)/../$(IO_DIR)/stream.h \
- $(srcdir)/../$(IO_DIR)/iostream.h \
- $(srcdir)/../$(IO_DIR)/streambuf.h \
- iVec.h \
- iAVec.h
-test_h.o : test_h.cc \
- $(srcdir)/../$(IO_DIR)/stream.h \
- $(srcdir)/../$(IO_DIR)/iostream.h \
- $(srcdir)/../$(IO_DIR)/streambuf.h \
- $(srcdir)/../$(IO_DIR)/istream.h \
- $(srcdir)/../$(IO_DIR)/ostream.h
-
-# IF YOU PUT ANYTHING HERE IT WILL GO AWAY
diff --git a/contrib/libg++/libg++/tests/tBag.cc b/contrib/libg++/libg++/tests/tBag.cc
deleted file mode 100644
index aa99ec13901d..000000000000
--- a/contrib/libg++/libg++/tests/tBag.cc
+++ /dev/null
@@ -1,540 +0,0 @@
-/*
- a test file for Bags
-*/
-
-
-#ifdef PTIMES
-const int ptimes = 1;
-#else
-const int ptimes = 0;
-#endif
-
-#include <stream.h>
-#include <assert.h>
-#include <builtin.h>
-
-#define tassert(ex) { cerr << #ex; \
- if ((ex)) cerr << " OK\n"; \
- else cerr << " Fail\n"; }
-
-#include "iBag.h"
-
-unsigned int hash(int x) { return multiplicativehash(x) ; }
-
-int SIZE;
-
-int *nums;
-int *odds;
-int *dups;
-
-void add(int x[], intBag& a)
-{
- for (int i = 0; i < SIZE; ++i) a.add(x[i]);
-}
-
-
-#include <MLCG.h>
-
-MLCG randgen;
-
-void permute(int x[])
-{
- for (int i = 1; i < SIZE; ++i)
- {
- int j = randgen.asLong() % (i + 1);
- int tmp = x[i]; x[i] = x[j]; x[j] = tmp;
- }
-}
-
-void makenums()
-{
- for (int i = 0; i < SIZE; ++i) nums[i] = i + 1;
-}
-
-void makeodds()
-{
- for (int i = 0; i < SIZE; ++i) odds[i] = 2 * i + 1;
- permute(odds);
-}
-
-void makedups()
-{
- for (int i = 0; i < SIZE; i += 2) dups[i] = dups[i+1] = i/2 + 1;
- permute(dups);
-}
-
-void printBag(intBag& a)
-{
- int maxprint = 20;
- cout << "[";
- int k = 0;
- Pix i;
- for (i = a.first(); i != 0 && k < maxprint; a.next(i),++k)
- cout << a(i) << " ";
- if (i != 0) cout << "...]\n";
- else cout << "]\n";
-}
-
-
-void generictest(intBag& a, intBag& b, intBag& c)
-{
- c.clear();
- assert(c.empty());
- Pix k;
- for (k = a.first(); k != 0; a.next(k)) c.add(a(k));
- for (k = a.first(); k != 0; a.next(k)) assert(c.contains(a(k)));
- c.del(a(a.first()));
- Pix i = a.first();
- assert(!c.contains(a(i)));
- for (a.next(i); i != 0; a.next(i)) assert(c.contains(a(i)));
- c.add(a(a.first()));
- for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));
- for (k = b.first(); k != 0; b.next(k)) c.add(b(k));
- for (i = b.first(); i != 0; b.next(i)) assert(c.contains(b(i)));
- for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));
- for (k = a.first(); k != 0; a.next(k)) c.remove(a(k));
- for (i = a.first(); i != 0; a.next(i)) assert(!c.contains(a(i)));
- for (i = b.first(); i != 0; b.next(i)) c.del(b(i));
- assert(c.empty());
- assert(a.OK());
- assert(b.OK());
- assert(c.OK());
-}
-
-#include "iXPBag.h"
-
-void XPtest()
-{
- intXPBag a(SIZE);
- add(nums, a);
- assert(a.length() == SIZE);
- for (int j = 1; j <= SIZE; ++j) assert(a.contains(j));
- intXPBag b(SIZE);
- add(odds, b);
- assert(b.length() == SIZE);
- intXPBag c(SIZE);
- add(dups, c);
- assert(c.length() == SIZE);
- intXPBag d(a);
- add(nums, d);
- assert(d.length() == SIZE*2);
- cout << "a: "; printBag(a);
- cout << "b: "; printBag(b);
- cout << "c: "; printBag(c);
- cout << "d: "; printBag(d);
- for (int j = 1; j <= SIZE; ++j) assert(d.nof(j) == 2);
- d.del(1);
- assert(d.nof(1) == 1);
- d.del(1);
- assert(d.nof(1) == 0);
- d.remove(2);
- assert(!d.contains(2));
- for (Pix l = c.first(); l; c.next(l)) d.remove(c(l));
- assert(d.length() == SIZE);
-
- c.clear();
- assert(c.empty());
- for (Pix k = a.first(); k != 0; a.next(k)) c.add(a(k));
- for (Pix k = a.first(); k != 0; a.next(k)) assert(c.contains(a(k)));
- c.del(a(a.first()));
- Pix i = a.first();
- assert(!c.contains(a(i)));
- for (a.next(i); i != 0; a.next(i)) assert(c.contains(a(i)));
- c.add(a(a.first()));
- for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));
- for (Pix k = b.first(); k != 0; b.next(k)) c.add(b(k));
- for (i = b.first(); i != 0; b.next(i)) assert(c.contains(b(i)));
- for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));
- for (Pix k = a.first(); k != 0; a.next(k)) c.remove(a(k));
- for (i = a.first(); i != 0; a.next(i)) assert(!c.contains(a(i)));
- for (i = b.first(); i != 0; b.next(i)) c.del(b(i));
- assert(c.empty());
- assert(a.OK());
- assert(b.OK());
- assert(c.OK());
-
- generictest(a, b, c);
-}
-
-
-#include "iSLBag.h"
-
-void SLtest()
-{
- intSLBag a;
- add(nums, a);
- assert(a.length() == SIZE);
- int j;
- for (j = 1; j <= SIZE; ++j) assert(a.contains(j));
- intSLBag b;
- add(odds, b);
- assert(b.length() == SIZE);
- intSLBag c;
- add(dups, c);
- assert(c.length() == SIZE);
- intSLBag d(a);
- add(nums, d);
- assert(d.length() == SIZE*2);
- cout << "a: "; printBag(a);
- cout << "b: "; printBag(b);
- cout << "c: "; printBag(c);
- cout << "d: "; printBag(d);
- for (j = 1; j <= SIZE; ++j) assert(d.nof(j) == 2);
- d.del(1);
- assert(d.nof(1) == 1);
- d.del(1);
- assert(d.nof(1) == 0);
- d.remove(2);
- assert(!d.contains(2));
- for (Pix l = c.first(); l; c.next(l)) d.remove(c(l));
- assert(d.length() == SIZE);
-
- c.clear();
- assert(c.empty());
- for (Pix k = a.first(); k != 0; a.next(k)) c.add(a(k));
- for (Pix k = a.first(); k != 0; a.next(k)) assert(c.contains(a(k)));
- c.del(a(a.first()));
- Pix i = a.first();
- assert(!c.contains(a(i)));
- for (a.next(i); i != 0; a.next(i)) assert(c.contains(a(i)));
- c.add(a(a.first()));
- for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));
- for (Pix k = b.first(); k != 0; b.next(k)) c.add(b(k));
- for (i = b.first(); i != 0; b.next(i)) assert(c.contains(b(i)));
- for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));
- for (Pix k = a.first(); k != 0; a.next(k)) c.remove(a(k));
- for (i = a.first(); i != 0; a.next(i)) assert(!c.contains(a(i)));
- for (i = b.first(); i != 0; b.next(i)) c.del(b(i));
- assert(c.empty());
- assert(a.OK());
- assert(b.OK());
- assert(c.OK());
-
- generictest(a, b, c);
-}
-
-
-#include "iVHBag.h"
-
-void VHtest()
-{
- intVHBag a(SIZE);
- add(nums, a);
- assert(a.length() == SIZE);
- int j;
- for (j = 1; j <= SIZE; ++j) assert(a.contains(j));
- intVHBag b(SIZE);
- add(odds, b);
- assert(b.length() == SIZE);
- intVHBag c(SIZE);
- add(dups, c);
- assert(c.length() == SIZE);
- intVHBag d(a);
- add(nums, d);
- assert(d.length() == SIZE*2);
- cout << "a: "; printBag(a);
- cout << "b: "; printBag(b);
- cout << "c: "; printBag(c);
- cout << "d: "; printBag(d);
- for (j = 1; j <= SIZE; ++j) assert(d.nof(j) == 2);
- d.del(1);
- assert(d.nof(1) == 1);
- d.del(1);
- assert(d.nof(1) == 0);
- d.remove(2);
- assert(!d.contains(2));
- for (Pix l = c.first(); l; c.next(l)) d.remove(c(l));
- assert(d.length() == SIZE);
-
- c.clear();
- assert(c.empty());
- for (Pix k = a.first(); k != 0; a.next(k)) c.add(a(k));
- for (Pix k = a.first(); k != 0; a.next(k)) assert(c.contains(a(k)));
- c.del(a(a.first()));
- Pix i = a.first();
- assert(!c.contains(a(i)));
- for (a.next(i); i != 0; a.next(i)) assert(c.contains(a(i)));
- c.add(a(a.first()));
- for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));
- for (Pix k = b.first(); k != 0; b.next(k)) c.add(b(k));
- for (i = b.first(); i != 0; b.next(i)) assert(c.contains(b(i)));
- for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));
- for (Pix k = a.first(); k != 0; a.next(k)) c.remove(a(k));
- for (i = a.first(); i != 0; a.next(i)) assert(!c.contains(a(i)));
- for (i = b.first(); i != 0; b.next(i)) c.del(b(i));
- assert(c.empty());
- assert(a.OK());
- assert(b.OK());
- assert(c.OK());
-
- generictest(a, b, c);
-}
-
-#include "iCHBag.h"
-
-void CHtest()
-{
- intCHBag a(SIZE);
- add(nums, a);
- assert(a.length() == SIZE);
- int j;
- for (j = 1; j <= SIZE; ++j) assert(a.contains(j));
- intCHBag b(SIZE);
- add(odds, b);
- assert(b.length() == SIZE);
- intCHBag c(SIZE);
- add(dups, c);
- assert(c.length() == SIZE);
- intCHBag d(a);
- add(nums, d);
- assert(d.length() == SIZE*2);
- cout << "a: "; printBag(a);
- cout << "b: "; printBag(b);
- cout << "c: "; printBag(c);
- cout << "d: "; printBag(d);
- for (j = 1; j <= SIZE; ++j) assert(d.nof(j) == 2);
- d.del(1);
- assert(d.nof(1) == 1);
- d.del(1);
- assert(d.nof(1) == 0);
- d.remove(2);
- assert(!d.contains(2));
- for (Pix l = c.first(); l; c.next(l)) d.remove(c(l));
- assert(d.length() == SIZE);
-
- c.clear();
- assert(c.empty());
- for (Pix k = a.first(); k != 0; a.next(k)) c.add(a(k));
- for (Pix k = a.first(); k != 0; a.next(k)) assert(c.contains(a(k)));
- c.del(a(a.first()));
- Pix i = a.first();
- assert(!c.contains(a(i)));
- for (a.next(i); i != 0; a.next(i)) assert(c.contains(a(i)));
- c.add(a(a.first()));
- for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));
- for (Pix k = b.first(); k != 0; b.next(k)) c.add(b(k));
- for (i = b.first(); i != 0; b.next(i)) assert(c.contains(b(i)));
- for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));
- for (Pix k = a.first(); k != 0; a.next(k)) c.remove(a(k));
- for (i = a.first(); i != 0; a.next(i)) assert(!c.contains(a(i)));
- for (i = b.first(); i != 0; b.next(i)) c.del(b(i));
- assert(c.empty());
- assert(a.OK());
- assert(b.OK());
- assert(c.OK());
-
- generictest(a, b, c);
-}
-
-#include "iOXPBag.h"
-
-void OXPtest()
-{
- intOXPBag a(SIZE);
- add(nums, a);
- assert(a.length() == SIZE);
- int j;
- for (j = 1; j <= SIZE; ++j) assert(a.contains(j));
- intOXPBag b(SIZE);
- add(odds, b);
- assert(b.length() == SIZE);
- intOXPBag c(SIZE);
- add(dups, c);
- assert(c.length() == SIZE);
- intOXPBag d(a);
- add(nums, d);
- assert(d.length() == SIZE*2);
- cout << "a: "; printBag(a);
- cout << "b: "; printBag(b);
- cout << "c: "; printBag(c);
- cout << "d: "; printBag(d);
- for (j = 1; j <= SIZE; ++j) assert(d.nof(j) == 2);
- d.del(1);
- assert(d.nof(1) == 1);
- d.del(1);
- assert(d.nof(1) == 0);
- d.remove(2);
- assert(!d.contains(2));
- for (Pix l = c.first(); l; c.next(l)) d.remove(c(l));
- assert(d.length() == SIZE);
-
- c.clear();
- assert(c.empty());
- for (Pix k = a.first(); k != 0; a.next(k)) c.add(a(k));
- for (Pix k = a.first(); k != 0; a.next(k)) assert(c.contains(a(k)));
- c.del(a(a.first()));
- Pix i = a.first();
- assert(!c.contains(a(i)));
- for (a.next(i); i != 0; a.next(i)) assert(c.contains(a(i)));
- c.add(a(a.first()));
- for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));
- for (Pix k = b.first(); k != 0; b.next(k)) c.add(b(k));
- for (i = b.first(); i != 0; b.next(i)) assert(c.contains(b(i)));
- for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));
- for (Pix k = a.first(); k != 0; a.next(k)) c.remove(a(k));
- for (i = a.first(); i != 0; a.next(i)) assert(!c.contains(a(i)));
- for (i = b.first(); i != 0; b.next(i)) c.del(b(i));
- assert(c.empty());
- assert(a.OK());
- assert(b.OK());
- assert(c.OK());
-
- generictest(a, b, c);
-}
-
-
-#include "iOSLBag.h"
-
-void OSLtest()
-{
- intOSLBag a;
- add(nums, a);
- assert(a.length() == SIZE);
- int j;
- for (j = 1; j <= SIZE; ++j) assert(a.contains(j));
- intOSLBag b;
- add(odds, b);
- assert(b.length() == SIZE);
- intOSLBag c;
- add(dups, c);
- assert(c.length() == SIZE);
- intOSLBag d(a);
- add(nums, d);
- assert(d.length() == SIZE*2);
- cout << "a: "; printBag(a);
- cout << "b: "; printBag(b);
- cout << "c: "; printBag(c);
- cout << "d: "; printBag(d);
- for (j = 1; j <= SIZE; ++j) assert(d.nof(j) == 2);
- d.del(1);
- assert(d.nof(1) == 1);
- d.del(1);
- assert(d.nof(1) == 0);
- d.remove(2);
- assert(!d.contains(2));
- for (Pix l = c.first(); l; c.next(l)) d.remove(c(l));
- assert(d.length() == SIZE);
-
- c.clear();
- assert(c.empty());
- for (Pix k = a.first(); k != 0; a.next(k)) c.add(a(k));
- for (Pix k = a.first(); k != 0; a.next(k)) assert(c.contains(a(k)));
- c.del(a(a.first()));
- Pix i = a.first();
- assert(!c.contains(a(i)));
- for (a.next(i); i != 0; a.next(i)) assert(c.contains(a(i)));
- c.add(a(a.first()));
- for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));
- for (Pix k = b.first(); k != 0; b.next(k)) c.add(b(k));
- for (i = b.first(); i != 0; b.next(i)) assert(c.contains(b(i)));
- for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));
- for (Pix k = a.first(); k != 0; a.next(k)) c.remove(a(k));
- for (i = a.first(); i != 0; a.next(i)) assert(!c.contains(a(i)));
- for (i = b.first(); i != 0; b.next(i)) c.del(b(i));
- assert(c.empty());
- assert(a.OK());
- assert(b.OK());
- assert(c.OK());
-
- generictest(a, b, c);
-}
-
-#include "iSplayBag.h"
-
-void Splaytest()
-{
- intSplayBag a;
- add(nums, a);
- assert(a.length() == SIZE);
- int j;
- for (j = 1; j <= SIZE; ++j) assert(a.contains(j));
- intSplayBag b;
- add(odds, b);
- assert(b.length() == SIZE);
- intSplayBag c;
- add(dups, c);
- assert(c.length() == SIZE);
- intSplayBag d(a);
- add(nums, d);
- assert(d.length() == SIZE*2);
- cout << "a: "; printBag(a);
- cout << "b: "; printBag(b);
- cout << "c: "; printBag(c);
- cout << "d: "; printBag(d);
- for (j = 1; j <= SIZE; ++j) assert(d.nof(j) == 2);
- d.del(1);
- assert(d.nof(1) == 1);
- d.del(1);
- assert(d.nof(1) == 0);
- d.remove(2);
- assert(!d.contains(2));
- for (Pix l = c.first(); l; c.next(l)) d.remove(c(l));
- assert(d.length() == SIZE);
-
- c.clear();
- assert(c.empty());
- for (Pix k = a.first(); k != 0; a.next(k)) c.add(a(k));
- for (Pix k = a.first(); k != 0; a.next(k)) assert(c.contains(a(k)));
- c.del(a(a.first()));
- Pix i = a.first();
- assert(!c.contains(a(i)));
- for (a.next(i); i != 0; a.next(i)) assert(c.contains(a(i)));
- c.add(a(a.first()));
- for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));
- for (Pix k = b.first(); k != 0; b.next(k)) c.add(b(k));
- for (i = b.first(); i != 0; b.next(i)) assert(c.contains(b(i)));
- for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));
- for (Pix k = a.first(); k != 0; a.next(k)) c.remove(a(k));
- for (i = a.first(); i != 0; a.next(i)) assert(!c.contains(a(i)));
- for (i = b.first(); i != 0; b.next(i)) c.del(b(i));
- assert(c.empty());
- assert(a.OK());
- assert(b.OK());
- assert(c.OK());
-
- generictest(a, b, c);
-}
-
-
-double return_elapsed_time ( double );
-double start_timer ( void );
-
-int main(int argv, char** argc)
-{
- if (argv > 1)
- {
- SIZE = abs(atoi(argc[1]));
- SIZE &= ~1;
- }
- else
- SIZE = 100;
- nums = new int[SIZE];
- odds = new int[SIZE];
- dups = new int[SIZE];
- makenums();
- makeodds();
- makedups();
- start_timer();
- cout << "VHtest\n"; VHtest();
- if (ptimes) cout << "\ntime = " << return_elapsed_time(0.0) << "\n";
- start_timer();
- cout << "CHtest\n"; CHtest();
- if (ptimes) cout << "\ntime = " << return_elapsed_time(0.0) << "\n";
- start_timer();
- cout << "SLtest\n"; SLtest();
- if (ptimes) cout << "\ntime = " << return_elapsed_time(0.0) << "\n";
- start_timer();
- cout << "XPtest\n"; XPtest();
- if (ptimes) cout << "\ntime = " << return_elapsed_time(0.0) << "\n";
- start_timer();
- cout << "Splaytest\n"; Splaytest();
- if (ptimes) cout << "\ntime = " << return_elapsed_time(0.0) << "\n";
- start_timer();
- cout << "OSLtest\n"; OSLtest();
- if (ptimes) cout << "\ntime = " << return_elapsed_time(0.0) << "\n";
- start_timer();
- cout << "OXPtest\n"; OXPtest();
- if (ptimes) cout << "\ntime = " << return_elapsed_time(0.0) << "\n";
-
- return 0;
-}
diff --git a/contrib/libg++/libg++/tests/tBag.exp b/contrib/libg++/libg++/tests/tBag.exp
deleted file mode 100644
index d86cf3461e6a..000000000000
--- a/contrib/libg++/libg++/tests/tBag.exp
+++ /dev/null
@@ -1,35 +0,0 @@
-VHtest
-a: [72 77 13 3 26 16 39 29 52 42 65 55 78 91 9 22 35 48 61 74 ...]
-b: [167 77 13 3 193 39 139 29 93 47 65 55 155 109 91 9 117 171 35 143 ...]
-c: [13 31 3 26 16 39 11 29 47 42 42 27 12 9 22 43 35 28 48 8 ...]
-d: [85 3 26 29 52 21 61 17 55 78 13 57 22 48 74 70 30 74 26 15 ...]
-CHtest
-a: [72 36 85 49 13 3 98 62 26 16 75 39 29 88 52 42 6 65 55 19 ...]
-b: [167 49 85 121 13 3 157 193 111 39 75 147 29 183 137 65 101 173 55 19 ...]
-c: [36 36 49 13 13 49 3 3 26 26 16 16 39 39 29 29 6 42 6 42 ...]
-d: [72 36 36 72 85 49 13 13 49 85 3 3 98 62 26 26 62 98 16 16 ...]
-SLtest
-a: [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...]
-b: [3 197 151 161 81 69 27 37 189 147 13 75 181 117 173 11 191 185 101 105 ...]
-c: [33 2 48 18 37 5 35 49 1 12 50 9 31 26 10 42 37 17 13 11 ...]
-d: [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...]
-XPtest
-a: [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...]
-b: [3 197 151 161 81 69 27 37 189 147 13 75 181 117 173 11 191 185 101 105 ...]
-c: [33 2 48 18 37 5 35 49 1 12 50 9 31 26 10 42 37 17 13 11 ...]
-d: [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...]
-Splaytest
-a: [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...]
-b: [1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 ...]
-c: [1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 ...]
-d: [1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 ...]
-OSLtest
-a: [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...]
-b: [1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 ...]
-c: [1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 ...]
-d: [1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 ...]
-OXPtest
-a: [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...]
-b: [1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 ...]
-c: [1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 ...]
-d: [1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 ...]
diff --git a/contrib/libg++/libg++/tests/tBag.inp b/contrib/libg++/libg++/tests/tBag.inp
deleted file mode 100644
index e69de29bb2d1..000000000000
--- a/contrib/libg++/libg++/tests/tBag.inp
+++ /dev/null
diff --git a/contrib/libg++/libg++/tests/tBitSet.cc b/contrib/libg++/libg++/tests/tBitSet.cc
deleted file mode 100644
index d98d3d453dcd..000000000000
--- a/contrib/libg++/libg++/tests/tBitSet.cc
+++ /dev/null
@@ -1,220 +0,0 @@
-/*
- a test/demo of BitSets
-*/
-
-#include <assert.h>
-
-#define tassert(ex) { cerr << #ex; \
- if ((ex)) cerr << "OK\n"; \
- else cerr << "Fail\n"; }
-
-
-
-#include <BitSet.h>
-
-
-void test3S(BitSet a, BitSet b, BitSet c)
-{
-// neg
- assert(~(~a) == a);
-// commutative
- assert((a | b) == (b | a));
- assert((a & b) == (b & a));
-// associative
- assert((a | (b | c)) == ((a | b) | c));
- assert((a & (b & c)) == ((a & b) & c));
-// distrib
- assert((a & (b | c)) == ((a & b) | (a & c)));
- assert((a | (b & c)) == ((a | b) & (a | c)));
-// absorption
- assert((a & (a | b)) == a);
- assert((a | (a & b)) == a);
-// demorgan
- assert((a | b) == ~(~a & ~b));
- assert((a & b) == ~(~a | ~b));
-// def of -
- assert((a - b) == (a & ~b));
- assert(((a - b) | b) == (a | b));
-// def of disjoint union
- assert((a ^ b) == ((a | b) & ~(a & b)));
- assert((a ^ b) == ((a - b) | (b - a)));
-
- BitSet x = a;
- x &= b;
- assert(x == (a & b));
- x |= c;
- assert(x == ((a & b) | c));
- x -= a;
- assert(x == (((a & b) | c) - a));
- x ^= b;
- assert(x == ((((a & b) | c) - a) ^ b));
- assert(x.OK());
-}
-
-/* This regression test found a bug in BitSetresize.
- Based on a bug report from Joaquim Jorge <jorgej@avs.cs.rpi.edu>.*/
-
-void
-test4()
-{
- BitSet a; cout << "a: " << a << endl;
- a.set(1, 2); cout << "after set(1,2): " << a << endl;
- a = BitSet();cout << "after copy: " << a << endl;
- a.set(1); cout << "after set(1): " << a << endl;
-}
-
-int main()
-{
- cout << "BitSet tests:\n";
-
- BitSet a;
- cout << "a = " << a << "\n";
- assert(a.OK());
-
- BitSet b = longtoBitSet(1024);
- cout << "b = " << b << "\n";
- assert(b.OK());
- assert(b[10] == 1);
- assert(b.count() == 1);
- b[0] = b[10];
- assert(b[0] == 1);
- assert(b.count() == 2);
-
- BitSet c = atoBitSet("1010101010101010101010101010101010101010");
- cout << "c = " << c << "\n";
- assert(c.OK());
- assert(c.count() == 20);
- for (int i = 0; i < 40; i += 2)
- {
- assert(c[i] == 1);
- assert(c[i+1] == 0);
- }
- for (int p = 0; p < 5; ++p)
- cout << "c[" << p << "] =" << int(c[p]) << "\n";
-
- BitSet d = atoBitSet("0011001100110011001100110011001100110011");
- cout << "d = " << d << "\n";
- assert(d.OK());
- assert(d.count() == 20);
- assert(d.count(0) == -1);
-
- BitSet e = atoBitSet("1111000011110000111100001111000011110000");
- cout << "e = " << e << "\n";
- assert(e.OK());
- assert(e.count() == 20);
-
- BitSet u = ~a;
- cout << "u = ~a = " << u << "\n";
- assert(a == ~u);
-
- BitSet g = ~e;
- cout << "g = ~e = " << g << "\n";
-
- cout << "~c = " << (~c) << "\n";
- cout << "c & d = " << (c & d) << "\n";
- cout << "c | d = " << (c | d) << "\n";
- cout << "c - d = " << (c - d) << "\n";
- cout << "c ^ d = " << (c ^ d) << "\n";
-
- test3S(b, c, d);
- test3S(a, a, a);
- test3S(a, b, c);
- test3S(a, c, b);
- test3S(c, b, a);
- test3S(c, c, c);
- test3S(c, d, e);
- test3S(e, d, c);
-
- BitSet f = b;
- cout << "f = b = " << f << "\n";
- f &= c;
- cout << "f &= c = " << f << "\n";
- f |= d;
- cout << "f |= d = " << f << "\n";
- f -= e;
- cout << "f -= e = " << f << "\n";
- f ^= u;
- cout << "f ^= u = " << f << "\n";
- assert(f.OK());
-
- assert(c != d);
- assert(!(c == d));
- assert(!(c < d));
- assert(!(c > d));
- assert(!(c <= d));
- assert(!(c >= d));
-
-
- BitSet h = d;
- cout << "h = d\n:" << h << "\n";
-
- assert(d == h);
- assert(d <= h);
- assert(d >= h);
- assert(!(d != h));
- assert(!(d > h));
- assert(!(d < h));
-
- h.set(0);
- cout << "h.set(0):\n" << h << "\n";
-
- assert(!(d == h));
- assert(!(d >= h));
- assert(!(d > h));
- assert((d != h));
- assert(d <= h);
- assert((d < h));
-
- h.set(65);
- cout << "h.set(65):\n" << h << "\n";
- assert(h[65] == 1);
- assert(h[64] == 0);
- assert(h[66] == 0);
- h.clear(2);
- cout << "h.clear(2):\n" << h << "\n";
- assert(h[2] == 0);
- assert(h[3] == 1);
- assert(h[11] == 1);
- h.invert(11,20);
- cout << "h.invert(11,20):\n" << h << "\n";
- assert(h[11] == 0);
- h.set(21,30);
- cout << "h.set(21,30):\n" << h << "\n";
- assert(h[21] == 1);
- h.clear(31,40);
- cout << "h.clear(31, 40):\n" << h << "\n";
- assert(h[33] == 0);
- cout << "h.test(0,5) = " << h.test(0, 5) << "\n";
- cout << "h.test(31,40) = " << h.test(31, 40) << "\n";
-
- cout << "set bits in e:\n";
- for (int p = e.first(); p >= 0; p = e.next(p))
- {
- assert(e[p] == 1);
- cout << p << " ";
- }
- cout << "\n";
-
- cout << "clear bits in g (reverse order):\n";
- for (int p = g.last(0); p >= 0; p = g.prev(p, 0))
- {
- assert(g[p] == 0);
- cout << p << " ";
- }
- cout << "\n";
-
- assert(a.OK());
- assert(b.OK());
- assert(c.OK());
- assert(d.OK());
- assert(e.OK());
- assert(f.OK());
- assert(g.OK());
- assert(h.OK());
-
- test4();
-
- cout << "\nEnd of test.\n";
- return 0;
-}
-
diff --git a/contrib/libg++/libg++/tests/tBitSet.exp b/contrib/libg++/libg++/tests/tBitSet.exp
deleted file mode 100644
index 689874d00b35..000000000000
--- a/contrib/libg++/libg++/tests/tBitSet.exp
+++ /dev/null
@@ -1,49 +0,0 @@
-BitSet tests:
-a = 0*
-b = 000000000010*
-c = 1010101010101010101010101010101010101010*
-c[0] =1
-c[1] =0
-c[2] =1
-c[3] =0
-c[4] =1
-d = 00110011001100110011001100110011001100110*
-e = 1111000011110000111100001111000011110*
-u = ~a = 1*
-g = ~e = 0000111100001111000011110000111100001*
-~c = 0101010101010101010101010101010101010101*
-c & d = 0010001000100010001000100010001000100010*
-c | d = 10111011101110111011101110111011101110110*
-c - d = 10001000100010001000100010001000100010*
-c ^ d = 10011001100110011001100110011001100110010*
-f = b = 100000000010*
-f &= c = 100000000010*
-f |= d = 10110011001100110011001100110011001100110*
-f -= e = 00000011000000110000001100000011000000110*
-f ^= u = 11111100111111001111110011111100111111001*
-h = d
-:00110011001100110011001100110011001100110*
-h.set(0):
-10110011001100110011001100110011001100110*
-h.set(65):
-1011001100110011001100110011001100110011000000000000000000000000010*
-h.clear(2):
-1001001100110011001100110011001100110011000000000000000000000000010*
-h.invert(11,20):
-1001001100101100110010110011001100110011000000000000000000000000010*
-h.set(21,30):
-1001001100101100110011111111111100110011000000000000000000000000010*
-h.clear(31, 40):
-1001001100101100110011111111111000000000000000000000000000000000010*
-h.test(0,5) = 1
-h.test(31,40) = 0
-set bits in e:
-0 1 2 3 8 9 10 11 16 17 18 19 24 25 26 27 32 33 34 35
-clear bits in g (reverse order):
-35 34 33 32 27 26 25 24 19 18 17 16 11 10 9 8 3 2 1 0
-a: 0*
-after set(1,2): 0110*
-after copy: 0*
-after set(1): 010*
-
-End of test.
diff --git a/contrib/libg++/libg++/tests/tBitSet.inp b/contrib/libg++/libg++/tests/tBitSet.inp
deleted file mode 100644
index e69de29bb2d1..000000000000
--- a/contrib/libg++/libg++/tests/tBitSet.inp
+++ /dev/null
diff --git a/contrib/libg++/libg++/tests/tBitString.cc b/contrib/libg++/libg++/tests/tBitString.cc
deleted file mode 100644
index f397a2136dc6..000000000000
--- a/contrib/libg++/libg++/tests/tBitString.cc
+++ /dev/null
@@ -1,327 +0,0 @@
-/*
- a test/demo of BitStrings
-*/
-
-#include <assert.h>
-#define tassert(ex) { cerr << #ex; \
- if ((ex)) cerr << " OK\n"; \
- else cerr << " Fail\n"; }
-
-
-#include <BitString.h>
-
-void doubletest(BitString a)
-{
- BitString x;
- BitString y;
- x = a + reverse(a);
- for (int i = 0; i < 7; ++i)
- {
- y = x;
- x += x;
- assert(x == reverse(x));
- assert(x.index(y) == 0);
- assert(x.index(y, -1) == x.length() / 2);
- assert(x.OK());
- }
-}
-
-// identities for equal-length args
-
-void identitytest(BitString a, BitString b, BitString c)
-{
-// neg
- assert(~(~a) == a);
-// commutative
- assert((a | b) == (b | a));
- assert((a & b) == (b & a));
-// associative
- assert((a | (b | c)) == ((a | b) | c));
- assert((a & (b & c)) == ((a & b) & c));
-// distrib
- assert((a & (b | c)) == ((a & b) | (a & c)));
- assert((a | (b & c)) == ((a | b) & (a | c)));
-// absorption
- assert((a & (a | b)) == a);
- assert((a | (a & b)) == a);
-// demorgan
- assert((a | b) == ~(~a & ~b));
- assert((a & b) == ~(~a | ~b));
-// def of -
- assert((a - b) == (a & ~b));
- assert(((a - b) | b) == (a | b));
-// def of disjoint union
- assert((a ^ b) == ((a | b) & ~(a & b)));
- assert((a ^ b) == ((a - b) | (b - a)));
-// shift
- assert(((a << 1) >> 1) == a);
-// concat
- assert((a + (b + c)) == ((a + b) + c));
-
- BitString x;
- x = a + b;
- assert(x.after(a) == b);
- assert(x.before(b, -1) == a);
-
- x = a;
- int l = x.length();
- x.set(l);
- assert(x == (a + 1));
- x.clear(l);
- assert(x == (a + 0));
-}
-
-void accumtest(const BitString& a, const BitString& b, const BitString& c)
-{
- BitString x = a;
- x &= b;
- assert(x == (a & b));
- x |= c;
- assert(x == ((a & b) | c));
- x -= a;
- assert(x == (((a & b) | c) - a));
- x ^= b;
- assert(x == ((((a & b) | c) - a) ^ b));
- x += c;
- assert(x == (((((a & b) | c) - a) ^ b) + c));
- x <<= 7;
- assert(x == ((((((a & b) | c) - a) ^ b) + c) << 7));
- x >>= 5;
- assert(x == (((((((a & b) | c) - a) ^ b) + c) << 7) >> 5));
- x += 0;
- assert(x == ((((((((a & b) | c) - a) ^ b) + c) << 7) >> 5) + 0));
-
- assert(x.OK());
-}
-
-
-void cmptest(BitString& x)
-{
- BitString a = x;
- a[0] = 0;
- BitString b = a;
-
- assert(a == b);
- assert(a <= b);
- assert(a >= b);
- assert(!(a != b));
- assert(!(a > b));
- assert(!(a < b));
- assert(lcompare(a, b) == 0);
- assert(a.matches(b));
- assert(a.contains(b));
-
- b[0] = 1;
- cout << "b.set(0) :" << b << "\n";
-
- assert(!(a == b));
- assert(!(a >= b));
- assert(!(a > b));
- assert((a != b));
- assert(a <= b);
- assert((a < b));
- assert(lcompare(a, b) < 0);
- assert(!a.matches(b));
- assert(!a.contains(b));
- assert(a.after(0) == b.after(0));
-
- b.set(65);
- cout << "b.set(65):\n" << b << "\n";
- assert(b[65] == 1);
- assert(b[64] == 0);
- assert(b.length() == 66);
- b.clear(2);
- cout << "b.clear(2):\n" << b << "\n";
- assert(b[2] == 0);
- b.set(11);
- b.invert(11,20);
- cout << "b.invert(11,20):\n" << b << "\n";
- assert(b[11] == 0);
- b.set(21,30);
- cout << "b.set(21,30):\n" << b << "\n";
- assert(b[21] == 1);
- b.clear(31,40);
- cout << "b.clear(31, 40):\n" << b << "\n";
- assert(b.test(33, 38) == 0);
-}
-
-void subtest(BitString c)
-{
- BitString k = c.at(1, 4);
- cout << "k = " << k << "\n";
- assert(c.index(k) == 1);
- assert(c.index(k, -1) != -1);
-
- cout << "c.before(k) = " << c.before(k) << "\n";
- assert(c.before(k) == c.before(1));
- cout << "c.at(k) = " << c.at(k) << "\n";
- assert(c.at(k) == k);
- cout << "c.after(k) = " << c.after(k) << "\n";
- assert(c.after(k) == c.after(4));
- c.after(k) = k;
- cout << "c.after(k)=k :" << c << "\n";
- assert(c.after(4) == k);
- c.before(k) = k;
- cout << "c.before(k)=k:" << c << "\n";
- assert(c.after(c.after(k)) == k);
-
- assert(c.contains(k, 0));
- assert(common_prefix(c, k) == k);
- assert(common_suffix(c, k) == k);
- cout << "reverse(k) = " << reverse(k) << "\n";
- k.left_trim(0);
- assert(k[0] == 1);
- cout << "k.left_trim(0) : " << k << "\n";
- k.right_trim(1);
- assert(k[k.length() - 1] == 0);
- cout << "k.right_trim(1) : " << k << "\n";
-}
-
-int main()
-{
- BitString a;
- BitString b = atoBitString("1000000001");
- BitString c = atoBitString("10101010101010101010");
- BitString d = atoBitString("00110011001100110011");
- BitString e = atoBitString("11110000111100001111");
- BitString f = b;
- BitString g = ~e;
- BitString h = d;
- BitString zz;
-
- assert(a.OK());
- assert(a.empty());
- assert(b.OK());
- assert(!b.empty());
- assert(c.OK());
- assert(c.count(1) == 10);
- assert(c.count(0) == 10);
- assert(d.OK());
- assert(c.count(1) == 10);
- assert(c.count(0) == 10);
- assert(e.OK());
- assert(e.count(1) == 12);
- assert(e.count(0) == 8);
- assert(f == b);
- assert(h == d);
- assert(g == ~e);
- assert(~g == e);
- assert(f.OK());
- assert(g.OK());
- assert(h.OK());
-
- cout << "a = " << a << "\n";
- cout << "b = " << b << "\n";
- cout << "c = " << c << "\n";
- cout << "d = " << d << "\n";
- cout << "e = " << e << "\n";
- cout << "f = b = " << f << "\n";
- cout << "g = ~e = " << g << "\n";
- cout << "h = d = " << h << "\n";
-
- for (int i = 0; i < 20; ++i)
- {
- assert(h[i] == d[i]);
- assert(g[i] != e[i]);
- assert(c[i] == !(i % 2));
- }
-
- cout << "bits in e:\n";
- for (int p = e.first(); p >= 0; p = e.next(p))
- {
- assert(e[p] == 1);
- cout << p << " ";
- }
- cout << "\n";
-
- cout << "clear bits in g (reverse order):\n";
- for (int p = g.last(0); p >= 0; p = g.prev(p, 0))
- {
- assert(g[p] == 0);
- cout << p << " ";
- }
- cout << "\n";
-
- cout << "~c = " << (~c) << "\n";
- cout << "c & d = " << (c & d) << "\n";
- cout << "c | d = " << (c | d) << "\n";
- cout << "c - d = " << (c - d) << "\n";
- cout << "c ^ d = " << (c ^ d) << "\n";
- cout << "c + d = " << (c + d) << "\n";
- cout << "c <<2 = " << (c << 2) << "\n";
- cout << "c >>2 = " << (c >> 2) << "\n";
-
- f &= c;
- cout << "f &= c = " << f << "\n";
- f |= d;
- cout << "f |= d = " << f << "\n";
- f -= d;
- cout << "f -= e = " << f << "\n";
- f ^= c;
- cout << "f ^= c = " << f << "\n";
- f += b;
- cout << "f += b = " << f << "\n";
- f <<= 5;
- cout << "f <<=5 = " << f << "\n";
- f >>= 10;
- cout << "f >>=10= " << f << "\n";
-
- assert(c != d);
- assert(!(c == d));
- assert(!(c < d));
- assert(!(c > d));
- assert(!(c <= d));
- assert(!(c >= d));
- assert(lcompare(c, d) > 0);
-
-
- BitString l = c + d + c;
- cout << "l = " << l << "\n";
- BitPattern pat(d, e);
- assert(pat.OK());
- cout << "BitPattern pat = " << pat << "\n";
- cout << "pat.pattern = " << pat.pattern << "\n";
- cout << "pat.mask = " << pat.mask << "\n";
- assert(d.matches(pat));
- cout << "l.index(pat) = " << l.index(pat) << "\n";
- cout << "l.index(pat,-1)= " << l.index(pat, -1) << "\n";
- cout << "l.before(pat) = " << l.before(pat) << "\n";
- cout << "l.at(pat) = " << l.at(pat) << "\n";
- cout << "l.after(pat) = " << l.after(pat) << "\n";
- int eind = l.index(pat);
- l.at(pat) = e;
- assert(l.index(e) == eind);
-
- identitytest(d, g, h);
- identitytest(a, a, a);
- identitytest(c, d, e);
- identitytest(e, d, c);
- identitytest(longtoBitString(0), longtoBitString((unsigned)(~(0L))),
- shorttoBitString(1025));
- identitytest(a+b+c+d+e+f+g+h, h+g+f+e+d+c+b+a, a+c+e+g+b+d+f+h);
-
- accumtest(d, g, h);
- accumtest(a, b, c);
- accumtest(c, d, e);
- accumtest(e, d, c);
- accumtest(a+b+c+d+e+f+g+h+l, f+e+d+c+b+a+pat.mask, e+g+b+d+f+h+pat.pattern);
-
- doubletest(a);
- doubletest(b);
- doubletest(c);
- doubletest(a+b+c+d+e+f+g+h);
-
- cmptest(b);
- cmptest(d);
-
- subtest(c);
- subtest(d);
-
- for (int i=0; i<64; i++) {
- zz += 1;
- }
- cout << "zz = " << zz << "\n";
-
- cout << "\nEnd of test.\n";
- return 0;
-}
diff --git a/contrib/libg++/libg++/tests/tBitString.exp b/contrib/libg++/libg++/tests/tBitString.exp
deleted file mode 100644
index 142187aa0d50..000000000000
--- a/contrib/libg++/libg++/tests/tBitString.exp
+++ /dev/null
@@ -1,79 +0,0 @@
-a =
-b = 1000000001
-c = 10101010101010101010
-d = 00110011001100110011
-e = 11110000111100001111
-f = b = 1000000001
-g = ~e = 00001111000011110000
-h = d = 00110011001100110011
-bits in e:
-0 1 2 3 8 9 10 11 16 17 18 19
-clear bits in g (reverse order):
-19 18 17 16 11 10 9 8 3 2 1 0
-~c = 01010101010101010101
-c & d = 00100010001000100010
-c | d = 10111011101110111011
-c - d = 10001000100010001000
-c ^ d = 10011001100110011001
-c + d = 1010101010101010101000110011001100110011
-c <<2 = 0010101010101010101010
-c >>2 = 101010101010101010
-f &= c = 1000000000
-f |= d = 10110011001100110011
-f -= e = 10000000000000000000
-f ^= c = 00101010101010101010
-f += b = 001010101010101010101000000001
-f <<=5 = 00000001010101010101010101000000001
-f >>=10= 0101010101010101000000001
-l = 101010101010101010100011001100110011001110101010101010101010
-BitPattern pat = 0011XXXX0011XXXX0011
-pat.pattern = 00110011001100110011
-pat.mask = 11110000111100001111
-l.index(pat) = 20
-l.index(pat,-1)= 20
-l.before(pat) = 10101010101010101010
-l.at(pat) = 00110011001100110011
-l.after(pat) = 10101010101010101010
-b.set(0) :1000000001
-b.set(65):
-100000000100000000000000000000000000000000000000000000000000000001
-b.clear(2):
-100000000100000000000000000000000000000000000000000000000000000001
-b.invert(11,20):
-100000000100111111111000000000000000000000000000000000000000000001
-b.set(21,30):
-100000000100111111111111111111100000000000000000000000000000000001
-b.clear(31, 40):
-100000000100111111111111111111100000000000000000000000000000000001
-b.set(0) :10110011001100110011
-b.set(65):
-101100110011001100110000000000000000000000000000000000000000000001
-b.clear(2):
-100100110011001100110000000000000000000000000000000000000000000001
-b.invert(11,20):
-100100110010110011001000000000000000000000000000000000000000000001
-b.set(21,30):
-100100110010110011001111111111100000000000000000000000000000000001
-b.clear(31, 40):
-100100110010110011001111111111100000000000000000000000000000000001
-k = 0101
-c.before(k) = 1
-c.at(k) = 0101
-c.after(k) = 010101010101010
-c.after(k)=k :101010101
-c.before(k)=k:010101010101
-reverse(k) = 1010
-k.left_trim(0) : 101
-k.right_trim(1) : 10
-k = 0110
-c.before(k) = 0
-c.at(k) = 0110
-c.after(k) = 011001100110011
-c.after(k)=k :001100110
-c.before(k)=k:011001100110
-reverse(k) = 0110
-k.left_trim(0) : 110
-k.right_trim(1) : 110
-zz = 1111111111111111111111111111111111111111111111111111111111111111
-
-End of test.
diff --git a/contrib/libg++/libg++/tests/tBitString.inp b/contrib/libg++/libg++/tests/tBitString.inp
deleted file mode 100644
index e69de29bb2d1..000000000000
--- a/contrib/libg++/libg++/tests/tBitString.inp
+++ /dev/null
diff --git a/contrib/libg++/libg++/tests/tCurses.cc b/contrib/libg++/libg++/tests/tCurses.cc
deleted file mode 100644
index ae635dd31459..000000000000
--- a/contrib/libg++/libg++/tests/tCurses.cc
+++ /dev/null
@@ -1,80 +0,0 @@
-#include <_G_config.h>
-#if !_G_HAVE_CURSES
-
-#include <iostream.h>
-int main ()
-{
- cerr << "(CursesWindow is not supported on this system)";
-}
-#else /* _G_HAVE_CURSES */
-
-#include <CursesW.h>
-
-// a simple test/demo for CursesWindow
-
-int main()
-{
- CursesWindow big(23, 79, 0, 0);
- CursesWindow corner(10, 10, 0, 0);
- CursesWindow small(10, 10, 5, 5);
- CursesWindow sub(big, 10, 10, (big.height()>>1)-5, (big.width()>>1)-5);
- CursesWindow sub2(big, 5, 5, big.height()-6, big.width()-6);
- CursesWindow subsub(sub, 5, 5, 1, 1, 'r');
-
- int i;
- char c='A';
-
- big.box('B','B');
-
- sub.box('|','-');
- for (i=1;i<10;++i)
- sub.mvaddch(i, i, '*');
- for (i=1;i<10;++i)
- sub.mvaddch(10-i, i, '*');
-
- big.refresh();
-
- big.mvprintw(0,0,"begx=%d,maxx=%d,begy=%d,maxy=%d,height=%d,width=%d",
- big.begx(), big.maxx(), big.begy(), big.maxy(),
- big.height(), big.width());
- big.refresh();
-
- sub2.box('2', '2');
- subsub.box('s', 's');
-
- big.refresh();
-
- i=13;
- const char * cptr = "Cstar";
-
- long l = 0xffffffff;
- double d= 3.1415926;
- float f= 10.0/d;
-
- big.mvprintw(2,2,"printw test:%d, %c, %s, %ld, %lf, %f\n",i,c,cptr,l,d,f);
- big.refresh();
-
- corner.box('c','c');
- big.mvprintw(5,20,"enter an int:");
- big.refresh();
- big.scanw("%d",&i);
- big.move(6,20);
- big.printw("number = %d\n",i);
- big.refresh();
- corner.refresh();
-
- small.box('S','S'); small.refresh();
- big.mvprintw(20,20,"enter a char:");
- big.refresh();
- big.scanw("%c",&c);
- big.move(21,20);
- big.printw("char = %c\n",c);
- small.box(c, c);
- big.refresh();
- small.refresh();
- corner.overlay(small);
- big.overwrite(corner);
- corner.refresh();
-}
-#endif /* _G_HAVE_CURSES */
-
diff --git a/contrib/libg++/libg++/tests/tCurses.inp b/contrib/libg++/libg++/tests/tCurses.inp
deleted file mode 100644
index 362478916720..000000000000
--- a/contrib/libg++/libg++/tests/tCurses.inp
+++ /dev/null
@@ -1,2 +0,0 @@
-123
-a
diff --git a/contrib/libg++/libg++/tests/tDeque.cc b/contrib/libg++/libg++/tests/tDeque.cc
deleted file mode 100644
index 0c1f561256cb..000000000000
--- a/contrib/libg++/libg++/tests/tDeque.cc
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- test of Deques
-*/
-
-#ifdef PTIMES
-const int ptimes = 1;
-#else
-const int ptimes = 0;
-#endif
-
-#include <stream.h>
-#include <assert.h>
-
-#include "iDeque.h"
-
-#define tassert(ex) {if ((ex)) cerr << #ex << "\n"; \
- else _assert(#ex, __FILE__,__LINE__); }
-
-
-int SIZE;
-
-void print(intDeque& a)
-{
- int maxprint = 20;
- cout << "[";
- int k = 0;
- while (!a.empty() && k++ < maxprint)
- cout << a.deq() << " ";
- if (k == maxprint)
- cout << "]\n";
- else
- {
- while (!a.empty()) a.del_front();
- cout << "...]\n";
- }
- assert(a.empty());
-}
-
-#include "iXPDeque.h"
-
-void XPtest ()
-{
- intXPDeque d(SIZE);
- assert(d.OK());
- for (int i = 0; i < SIZE; ++i)
- {
- if (i % 2 == 0)
- d.enq(i);
- else
- d.push(i);
- }
- assert(d.length() == SIZE);
- assert(d.front() == (SIZE-1));
- assert(d.rear() == (SIZE-2));
- assert(!d.full());
- intXPDeque d1(SIZE/2);
- for (int i = (SIZE-1); i >= 0; --i)
- {
- int x;
- if (i % 2 == 0)
- {
- x = d.rear();
- d.del_rear();
- }
- else
- {
- x = d.front();
- d.del_front();
- }
- d1.enq(x);
- }
- assert(d.empty());
- assert(d1.length() == SIZE);
- assert(d1.front() == (SIZE-1));
- assert(d1.rear() == 0);
- assert(d.OK());
- assert(d1.OK());
- intXPDeque d2 (d1);
- assert(d2.length() == SIZE);
- assert(d2.front() == (SIZE-1));
- assert(d2.OK());
- d1.clear();
- assert(d1.empty());
- d1 = d2;
- assert(d1.length() == SIZE);
- assert(d1.front() == (SIZE-1));
- cout << "d1:"; print(d1);
- assert(d.OK());
- assert(d1.OK());
- assert(d2.OK());
-}
-
-
-#include "iDLDeque.h"
-
-void DLtest ()
-{
- intDLDeque d;
- assert(d.OK());
- for (int i = 0; i < SIZE; ++i)
- {
- if (i % 2 == 0)
- d.enq(i);
- else
- d.push(i);
- }
- assert(d.length() == SIZE);
- assert(d.front() == (SIZE-1));
- assert(d.rear() == (SIZE-2));
- assert(!d.full());
- intDLDeque d1;
- for (int i = (SIZE-1); i >= 0; --i)
- {
- int x;
- if (i % 2 == 0)
- {
- x = d.rear();
- d.del_rear();
- }
- else
- {
- x = d.front();
- d.del_front();
- }
- d1.enq(x);
- }
- assert(d.empty());
- assert(d1.length() == SIZE);
- assert(d1.front() == (SIZE-1));
- assert(d1.rear() == 0);
- assert(d.OK());
- assert(d1.OK());
- intDLDeque d2 (d1);
- assert(d2.length() == SIZE);
- assert(d2.front() == (SIZE-1));
- assert(d2.OK());
- d1.clear();
- assert(d1.empty());
- d1 = d2;
- assert(d1.length() == SIZE);
- assert(d1.front() == (SIZE-1));
- cout << "d1:"; print(d1);
-
- assert(d.OK());
- assert(d1.OK());
- assert(d2.OK());
-}
-
-
-int main(int argv, char** argc)
-{
- if (argv > 1)
- {
- SIZE = abs(atoi(argc[1]));
- SIZE &= ~1;
- }
- else
- SIZE = 100;
-
- start_timer();
- cout << "XP deques:\n"; XPtest();
- if (ptimes) cout << "\ntime = " << return_elapsed_time(0.0) << "\n";
- start_timer();
- cout << "DL deques:\n"; DLtest();
- if (ptimes) cout << "\ntime = " << return_elapsed_time(0.0) << "\n";
- cout << "\nEnd of test\n";
- return 0;
-}
diff --git a/contrib/libg++/libg++/tests/tDeque.exp b/contrib/libg++/libg++/tests/tDeque.exp
deleted file mode 100644
index 2d60c350b75b..000000000000
--- a/contrib/libg++/libg++/tests/tDeque.exp
+++ /dev/null
@@ -1,6 +0,0 @@
-XP deques:
-d1:[99 98 97 96 95 94 93 92 91 90 89 88 87 86 85 84 83 82 81 80 ...]
-DL deques:
-d1:[99 98 97 96 95 94 93 92 91 90 89 88 87 86 85 84 83 82 81 80 ...]
-
-End of test
diff --git a/contrib/libg++/libg++/tests/tDeque.inp b/contrib/libg++/libg++/tests/tDeque.inp
deleted file mode 100644
index e69de29bb2d1..000000000000
--- a/contrib/libg++/libg++/tests/tDeque.inp
+++ /dev/null
diff --git a/contrib/libg++/libg++/tests/tFile.cc b/contrib/libg++/libg++/tests/tFile.cc
deleted file mode 100644
index d846f877df1c..000000000000
--- a/contrib/libg++/libg++/tests/tFile.cc
+++ /dev/null
@@ -1,371 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-
-/*
- * a few tests for streams
- *
- */
-
-#include <stream.h>
-#ifndef _OLD_STREAMS
-#include <strstream.h>
-#include "unistd.h"
-#endif
-#include <SFile.h>
-#include <PlotFile.h>
-
-#include <std.h>
-#include <assert.h>
-
-class record
-{
-public:
- char c; int i; double d;
-};
-
-ostream& operator<<(ostream& s, record& r)
-{
- return(s << "(i = " << r.i << " c = " << r.c << " d = " << r.d << ")");
-}
-
-void t1()
-{
- char ch;
-
- assert(cout.good());
- assert(cout.writable());
- assert(cout.is_open());
- cout << "Hello, world via cout\n";
- assert(cerr.good());
- assert(cerr.writable());
- assert(cerr.is_open());
- cerr << "Hello, world via cerr\n";
-
- assert(cin.good());
- assert(cin.readable());
- assert(cin.is_open());
-
- cout << "enter a char:"; cin >> ch;
- cout.put('c'); cout.put(' '); cout.put('='); cout.put(' ');
- cout.put('"'); cout.put(ch); cout << '"'; cout << char('\n');
- assert(cin.good());
- assert(cout.good());
-}
-
-void t2()
-{
- int i;
- short h;
- long l;
- float f;
- double d;
- char s[100];
-
- cout << "enter three integers (short, int, long):";
- cin >> h; cin >> i;
- // cin.scan("%ld", &l);
- cin >> l;
- cout << "first = " << h << " via dec = " << dec(h, 8) << "\n";
- cout << "second = " << i << form(" via form = %d = 0%o", i, i);
- cout.form(" via cout.form = %d = 0x%x\n", i, i);
- cout << "third = " << l << " via hex = " << hex(l) << "\n";
- assert(cin.good());
- assert(cout.good());
-
- cout << "enter a float then a double:"; cin >> f; cin >> d;
- cout << "first = " << f << "\n";
- cout << "second = " << d << "\n";
- assert(cin.good());
- assert(cout.good());
-
- cout << "enter 5 characters separated with spaces:"; cin >> s;
- cout << "first = " << s << "\n";
- cin.get(s, 100);
- cout << "rest = " << s << "\n";
-
- assert(cin.good());
- assert(cout.good());
-
-}
-
-void t3()
-{
- char ch;
- cout << "\nMaking streams sout and sin...";
-#ifdef _OLD_STREAMS
- ostream sout("streamfile", io_writeonly, a_create);
-#else
- ofstream sout("streamfile");
-#endif
- assert(sout.good());
- assert(sout.is_open());
- assert(sout.writable());
- assert(!sout.readable());
- sout << "This file has one line testing output streams.\n";
- sout.close();
- assert(!sout.is_open());
-#ifdef _OLD_STREAMS
- istream sin("streamfile", io_readonly, a_useonly);
-#else
- ifstream sin("streamfile");
-#endif
- assert(sin.good());
- assert(sin.is_open());
- assert(!sin.writable());
- assert(sin.readable());
- cout << "contents of file:\n";
- while(sin >> ch) cout << ch;
- sin.close();
- assert(!sin.is_open());
-}
-
-
-void t4()
-{
- char s[100];
- char ch;
- int i;
-
- cout << "\nMaking File tf ... ";
-#ifdef _OLD_STREAMS
- File tf("tempfile", io_readwrite, a_create);
-#else
- fstream tf("tempfile", ios::in|ios::out|ios::trunc);
-#endif
- assert(tf.good());
- assert(tf.is_open());
- assert(tf.writable());
- assert(tf.readable());
- strcpy(s, "This is the first and only line of this file.\n");
-#ifdef _OLD_STREAMS
- tf.put(s);
- tf.seek(0);
-#else
- tf << s;
- tf.rdbuf()->seekoff(0, ios::beg);
-#endif
- tf.get(s, 100);
- assert(tf.good());
- cout << "first line of file:\n" << s << "\n";
- cout << "next char = ";
- tf.get(ch);
- cout << (int)ch;
- cout.put('\n');
- assert(ch == 10);
- strcpy(s, "Now there is a second line.\n");
- cout << "reopening tempfile, appending: " << s;
-#ifdef _OLD_STREAMS
- tf.open(tf.name(), io_appendonly, a_use);
-#else
- tf.close();
- tf.open("tempfile", ios::app);
-#endif
- assert(tf.good());
- assert(tf.is_open());
- assert(tf.writable());
- assert(!tf.readable());
-#ifdef _OLD_STREAMS
- tf.put(s);
- assert(tf.good());
- tf.open(tf.name(), io_readonly, a_use);
-#else
- tf << s;
- assert(tf.good());
- tf.close();
- tf.open("tempfile", ios::in);
-#endif
- tf.raw();
- assert(tf.good());
- assert(tf.is_open());
- assert(!tf.writable());
- assert(tf.readable());
- cout << "First 10 chars via raw system read after reopen for input:\n";
- read(tf.filedesc(), s, 10);
- assert(tf.good());
- for (i = 0; i < 10; ++ i)
- cout.put(s[i]);
- lseek(tf.filedesc(), 5, 0);
- cout << "\nContents after raw lseek to pos 5:\n";
- while ( (tf.get(ch)) && (cout.put(ch)) );
-#ifdef _OLD_STREAMS
- tf.remove();
-#else
- tf.close();
- unlink("tempfile");
-#endif
- assert(!tf.is_open());
-}
-
-void t5()
-{
- record r;
- int i;
- cout << "\nMaking SFile rf...";
-#ifdef _OLD_STREAMS
- SFile rf("recfile", sizeof(record), io_readwrite, a_create);
-#else
- SFile rf("recfile", sizeof(record), ios::in|ios::out|ios::trunc);
-#endif
- assert(rf.good());
- assert(rf.is_open());
- assert(rf.writable());
- assert(rf.readable());
- for (i = 0; i < 10; ++i)
- {
- r.c = i + 'a';
- r.i = i;
- r.d = (double)(i) / 1000.0;
- rf.put(&r);
- }
- assert(rf.good());
- cout << "odd elements of file in reverse order:\n";
- for (i = 9; i >= 0; i -= 2)
- {
- rf[i].get(&r);
- assert(r.c == i + 'a');
- assert(r.i == i);
- cout << r << "\n";
- }
- assert(rf.good());
-#ifdef _OLD_STREAMS
- rf.remove();
-#else
- rf.close();
- unlink("recfile");
-#endif
- assert(!rf.is_open());
-}
-
-void t6()
-{
- cout << "\nMaking PlotFile pf ...";
- static const char plot_name[] = "plot.out";
- PlotFile pf(plot_name);
- assert(pf.good());
- assert(pf.is_open());
- assert(pf.writable());
- assert(!pf.readable());
- pf.move(10,10);
- pf.label("Test");
- pf.circle(300,300,200);
- pf.line(100, 100, 500, 500);
- assert(pf.good());
-#ifdef _OLD_STREAMS
- cout << "(You may delete or attempt to plot " << pf.name() << ")\n";
-#else
- cout << "(You may delete or attempt to plot " << plot_name << ")\n";
-#endif
-}
-
-void t7()
-{
- char ch;
- char mybuf[1000];
-#ifdef _OLD_STREAMS
- cout << "creating string-based ostream...\n";
- ostream strout(1000, mybuf);
-#else
- cout << "creating ostrstream...\n";
- ostrstream strout(mybuf, 1000);
-#endif
- assert(strout.good());
- assert(strout.writable());
- strout << "This is a string-based stream.\n";
- strout << "With two lines.\n";
- strout.put(char(0));
- assert(strout.good());
- cout << "with contents:\n";
- cout << mybuf;
-#ifdef _OLD_STREAMS
- cout << "using it to create string-based istream...\n";
- istream strin(strlen(mybuf), mybuf);
-#else
- cout << "using it to create istrstream...\n";
- istrstream strin(mybuf, strlen(mybuf));
-#endif
- assert(strin.good());
- assert(strin.readable());
- cout << "with contents:\n";
- while (strin.get(ch)) cout.put(ch);
-}
-
-void t8()
-{
-#ifdef _OLD_STREAMS
- cout << "\nThe following file open should generate error message:";
- cout.flush();
- File ef("shouldnotexist", io_readonly, a_useonly);
-#else
- ifstream ef("shouldnotexist");
-#endif
- assert(!ef.good());
- assert(!ef.is_open());
-}
-
-void t9()
-{
- char ch;
- static char ffile_name[] = "ffile";
- {
- cout << "\nMaking filebuf streams fout and fin...";
- filebuf foutbuf;
-#ifdef _OLD_STREAMS
- foutbuf.open(ffile_name, output);
-#else
- foutbuf.open(ffile_name, ios::out);
-#endif
- ostream fout(&foutbuf);
- assert(fout.good());
- assert(fout.is_open());
- assert(fout.writable());
- assert(!fout.readable());
- fout << "This file has one line testing output streams.\n";
-#ifdef _OLD_STREAMS
- fout.close();
- assert(!fout.is_open());
-#endif
- }
- filebuf finbuf;
-#ifdef _OLD_STREAMS
- finbuf.open(ffile_name, input);
-#else
- finbuf.open(ffile_name, ios::in);
-#endif
- istream fin(&finbuf);
- assert(fin.good());
- assert(fin.is_open());
- assert(!fin.writable());
- assert(fin.readable());
- cout << "contents of file:\n";
- while(fin >> ch) cout << ch;
-#ifndef _OLD_STREAMS
- cout << '\n';
-#endif
- fin.close();
- assert(!fin.is_open());
-}
-
-main()
-{
- t1();
- t2();
- t3();
- t4();
- t5();
- t6();
- t7();
- t9();
- t8();
-
- cout << "\nFinal names & states:\n";
-#ifdef _OLD_STREAMS
- cout << "cin: " << cin.name() << "\t" << cin.rdstate() << "\n";
- cout << "cout: " << cout.name() << "\t" << cout.rdstate() << "\n";
- cout << "cerr: " << cerr.name() << "\t" << cerr.rdstate() << "\n";
-#else
- cout << "cin: " << "(stdin)" << "\t" << cin.rdstate() << "\n";
- cout << "cout: " << "(stdout)" << "\t" << cout.rdstate() << "\n";
- cout << "cerr: " << "(stderr)" << "\t" << cerr.rdstate() << "\n";
-#endif
- cout << "\nend of test.\n";
- return 0;
-}
diff --git a/contrib/libg++/libg++/tests/tFile.exp b/contrib/libg++/libg++/tests/tFile.exp
deleted file mode 100644
index 6827c5cf191c..000000000000
--- a/contrib/libg++/libg++/tests/tFile.exp
+++ /dev/null
@@ -1,49 +0,0 @@
-Hello, world via cout
-Hello, world via cerr
-enter a char:c = "a"
-enter three integers (short, int, long):first = 123 via dec = 123
-second = 4567 via form = 4567 = 010727 via cout.form = 4567 = 0x11d7
-third = 89012 via hex = 15bb4
-enter a float then a double:first = 123.456
-second = -0.012
-enter 5 characters separated with spaces:first = 1
-rest = 2 3 4 5
-
-Making streams sout and sin...contents of file:
-Thisfilehasonelinetestingoutputstreams.
-Making File tf ... first line of file:
-This is the first and only line of this file.
-next char = 10
-reopening tempfile, appending: Now there is a second line.
-First 10 chars via raw system read after reopen for input:
-This is th
-Contents after raw lseek to pos 5:
-is the first and only line of this file.
-Now there is a second line.
-
-Making SFile rf...odd elements of file in reverse order:
-(i = 9 c = j d = 0.009)
-(i = 7 c = h d = 0.007)
-(i = 5 c = f d = 0.005)
-(i = 3 c = d d = 0.003)
-(i = 1 c = b d = 0.001)
-
-Making PlotFile pf ...(You may delete or attempt to plot plot.out)
-creating ostrstream...
-with contents:
-This is a string-based stream.
-With two lines.
-using it to create istrstream...
-with contents:
-This is a string-based stream.
-With two lines.
-
-Making filebuf streams fout and fin...contents of file:
-Thisfilehasonelinetestingoutputstreams.
-
-Final names & states:
-cin: (stdin) 0
-cout: (stdout) 0
-cerr: (stderr) 0
-
-end of test.
diff --git a/contrib/libg++/libg++/tests/tFile.inp b/contrib/libg++/libg++/tests/tFile.inp
deleted file mode 100644
index 436a5212c8dc..000000000000
--- a/contrib/libg++/libg++/tests/tFile.inp
+++ /dev/null
@@ -1,4 +0,0 @@
-a
-123 4567 89012
-123.456 -1.2e-2
-1 2 3 4 5
diff --git a/contrib/libg++/libg++/tests/tFix.cc b/contrib/libg++/libg++/tests/tFix.cc
deleted file mode 100644
index 96256f466dd9..000000000000
--- a/contrib/libg++/libg++/tests/tFix.cc
+++ /dev/null
@@ -1,101 +0,0 @@
-//
-// testFix.cc : test Fix (variable length) classes
-//
-
-#include <Fix.h>
-
-void check(const char* x, Fix y) { cout << x << " = " << (y) << "\n"; }
-
-void check(const char* x, int y) { cout << x << " = " << (y) << "\n"; }
-
-void check(const char* x, long y) { cout << x << " = " << (y) << "\n"; }
-
-void check(const char* x, double y) { cout << x << " = " << (y) << "\n"; }
-
-void checkb(const char* x, const Fix y)
-{
- cout << x << " = " << (y) << " [" << length(y) << "]"<< "\n";
-}
-
-
-
-int main() {
- cout << "Fix: identities should be displayed\n"
- << "[X] displays the precision of a given value\n"
- << "[*] indicates that the full precision is not used for coding reasons\n";
-
- Fix a; checkb("0 [16]",a);
- Fix b = .5; checkb(".5 [16]",b);
- Fix c(17,-.5); checkb("-.5 [17]",c);
- Fix d(33,.1); checkb(".1 [33]",d);
- Fix e = c; checkb("-.5 [17]",e);
-
- checkb(".3 [16]",a = .3);
- checkb(".5 [16]",a = b);
- checkb(".1 [16]",a = d);
- checkb(".1 [33*]",d = a);
- checkb("-.2 [17]",c = -.2);
- checkb("-.5 [17]",e);
-
- check(".1 [16] == .1 [33*]",a == d);
- d = .1;
- check(".1 [16] == .1 [33]",a == d);
- check(".1 [33] != .5 [16]",d != b);
- check(".1 [33] > .5 [16]",d > b);
- check(".1 [33] <= -.2 [17]",d <= c);
-
- e = .5;
- check("1073741824",mantissa(e).as_double());
- check(".5",value(e));
-
- checkb(".5 [17]",+e);
- checkb("-.5 [17]",-e);
-
- checkb(".1 [33] + .5 [16]",d+b);
- checkb(".1 [33] - .5 [16]",d-b);
- checkb(".1 [33] * .5 [16]",d*b);
- checkb(".1 [33] * 3",d*3);
- checkb(".1 [33] * -3",d*-3);
- checkb("-.1 [33] * 3",(-d)*3);
- checkb("-.1 [33] * -3",(-d)*-3);
- checkb(".5 [17] * -2",e*-2);
- checkb(".1 [33] % 25",d%25);
- checkb(".1 [33] % -25",d%-25);
- checkb(".1 [33] / .5 [16]",d/b);
- checkb(".1 [33] << 1",d<<1);
- checkb("-.1 [33] >> 2",(-d)>>2);
-
- checkb("abs(-.2)",abs(c));
- checkb("abs(.2)",abs(-c));
- check("sgn(-.2)",sgn(c));
- check("sgn(.2)",sgn(-c));
-
- cout << "\nshow .1 [33]\n";
- show(d);
-
- Fix g = .95;
-
- cout << "\nFix: range errors warned\n";
-
- Fix f = 1.1; checkb("1.1 [16]",f);
-
- checkb(".5 [16] / .1 [33]",b/d);
- checkb(".5 [16] / 0. [16]",b/Fix(0.));
- checkb(".5 [17] * 32768",e*32768);
-
- cout << "\nFix: overflows saturated\n";
- Fix::set_overflow_handler(Fix::overflow_saturate);
-
- checkb(".95 [16] + .1 [33]",g+d);
- checkb("-.1 [33] - .95 [16]",-d-g);
- checkb(".5 [17] * 2",e*2);
-
- cout << "\nFix: overflows generate warnings\n";
- Fix::set_overflow_handler(Fix::overflow_warning);
-
- checkb(".95 [16] + .1 [33]",g+d);
- checkb("-.1 [33] - .95 [16]",-d-g);
- checkb(".5 [17] * 2",e*2);
-
- return 0;
-}
diff --git a/contrib/libg++/libg++/tests/tFix.exp b/contrib/libg++/libg++/tests/tFix.exp
deleted file mode 100644
index 3ab0051aab2f..000000000000
--- a/contrib/libg++/libg++/tests/tFix.exp
+++ /dev/null
@@ -1,70 +0,0 @@
-Fix: identities should be displayed
-[X] displays the precision of a given value
-[*] indicates that the full precision is not used for coding reasons
-0 [16] = 0.00000 [16]
-.5 [16] = 0.50000 [16]
--.5 [17] = -0.50000 [17]
-.1 [33] = 0.10000 [33]
--.5 [17] = -0.50000 [17]
-.3 [16] = 0.29999 [16]
-.5 [16] = 0.50000 [16]
-.1 [16] = 0.09998 [16]
-.1 [33*] = 0.09998 [33]
--.2 [17] = -0.20001 [17]
--.5 [17] = -0.50000 [17]
-.1 [16] == .1 [33*] = 1
-.1 [16] == .1 [33] = 0
-.1 [33] != .5 [16] = 1
-.1 [33] > .5 [16] = 0
-.1 [33] <= -.2 [17] = 0
-1073741824 = 1.07374e+09
-.5 = 0.5
-.5 [17] = 0.50000 [17]
--.5 [17] = -0.50000 [17]
-.1 [33] + .5 [16] = 0.60000 [33]
-.1 [33] - .5 [16] = -0.40000 [33]
-.1 [33] * .5 [16] = 0.05000 [49]
-.1 [33] * 3 = 0.30000 [33]
-.1 [33] * -3 = -0.30000 [33]
--.1 [33] * 3 = -0.30000 [33]
--.1 [33] * -3 = 0.30000 [33]
-.5 [17] * -2 = -1.00000 [17]
-.1 [33] % 25 = 0.10000 [58]
-.1 [33] % -25 = 0.09375 [8]
-.1 [33] / .5 [16] = 0.20001 [33]
-.1 [33] << 1 = 0.20000 [33]
--.1 [33] >> 2 = 0.47500 [33]
-abs(-.2) = 0.20001 [17]
-abs(.2) = 0.20001 [17]
-sgn(-.2) = -1
-sgn(.2) = 1
-
-show .1 [33]
-len = 33
-siz = 3
-ref = 1
-man = ccccccc8000
-val = 0.1
-
-Fix: range errors warned
-Fix: range error in declaration
-1.1 [16] = 0.00000 [16]
-Fix: range error in division
-.5 [16] / .1 [33] = 0.00000 [16]
-Fix: range error in division -- division by zero
-.5 [16] / 0. [16] = 0.00000 [16]
-Fix: range error in multiply by int -- int too large
-.5 [17] * 32768 = -1.00000 [17]
-
-Fix: overflows saturated
-.95 [16] + .1 [33] = 1.00000 [33]
--.1 [33] - .95 [16] = -1.00000 [33]
-.5 [17] * 2 = 0.99998 [17]
-
-Fix: overflows generate warnings
-Fix: overflow warning
-.95 [16] + .1 [33] = -0.94999 [33]
-Fix: overflow warning
--.1 [33] - .95 [16] = 0.94999 [33]
-Fix: overflow warning
-.5 [17] * 2 = -0.49994 [17]
diff --git a/contrib/libg++/libg++/tests/tFix.inp b/contrib/libg++/libg++/tests/tFix.inp
deleted file mode 100644
index e69de29bb2d1..000000000000
--- a/contrib/libg++/libg++/tests/tFix.inp
+++ /dev/null
diff --git a/contrib/libg++/libg++/tests/tFix16.cc b/contrib/libg++/libg++/tests/tFix16.cc
deleted file mode 100644
index beedc463fafc..000000000000
--- a/contrib/libg++/libg++/tests/tFix16.cc
+++ /dev/null
@@ -1,110 +0,0 @@
-//
-// testFix16.cc : test Fix16/32 classes
-//
-
-#include <Fix16.h>
-
-// This set of inlines (instead of a macro) is to force the side effects
-// of evaluating y to happen before x is printed.
-
-inline void check(char *x, int y) { cout << x << " = " << (y) << "\n"; }
-inline void check(char *x, long y) { cout << x << " = " << (y) << "\n"; }
-inline void check(char *x, double y) { cout << x << " = " << (y) << "\n"; }
-inline void check(char *x, Fix16 y) { cout << x << " = " << (y) << "\n"; }
-inline void check(char *x, Fix32 y) { cout << x << " = " << (y) << "\n"; }
-
-void test16() {
- cout << "Fix16: identities should be displayed\n";
-
- Fix16 a; check("0",a);
- Fix16 b = .5; check(".5",b);
- Fix16 c = -.5; check("-.5",c);
- Fix16 d = .1; check(".1",d);
- Fix16 e = b; check(".5",e);
-
- check(".5",a = b);
- check(".25",a = .25);
- check("8192",mantissa(a));
- mantissa(a)=8192;
- check(".25",a);
- check(".25",value(a));
-
- check(".25",+a);
- check("-.25",-a);
-
- check(".1 + .5",d+b);
- check(".1 - .5",d-b);
- check(".1 * .5",d*b);
- check(".1 * 3",d*3);
- check(".1 * -3",d*-3);
- check(".1 / .5",d/b);
- check(".1 << 1",d<<1);
- check("-.5 >> 2",c>>2);
-
- check(".1 == .5",d == b);
- check(".1 != .5",d != b);
- check(".1 > .5",d > b);
- check(".5 <= -.5",b <= c);
-
- cout << "Fix16: range errors ignored and overflows saturated\n";
- set_Fix16_overflow_handler(Fix16_overflow_saturate);
- set_Fix16_range_error_handler(Fix16_ignore);
-
- Fix16 f = 1.1; check("1.1",f);
-
- Fix16 g = .7;
- check(".7 + .5",g+b);
- check("-.5 - .7",c-g);
- check(".5 / .1",b/d);
-}
-
-void test32() {
- cout << "Fix32: identities should be displayed\n";
-
- Fix32 a; check("0",a);
- Fix32 b = .5; check(".5",b);
- Fix32 c = -.5; check("-.5",c);
- Fix32 d = .1; check(".1",d);
- Fix32 e = b; check(".5",e);
-
- check(".5",a = b);
- check(".25",a = .25);
- check("536870912",mantissa(a));
- mantissa(a)=536870912;
- check(".25",a);
- check(".25",value(a));
-
- check(".25",+a);
- check("-.25",-a);
-
- check(".1 + .5",d+b);
- check(".1 - .5",d-b);
- check(".1 * .5",d*b);
- check(".1 * 3",d*3);
- check(".1 * -3",d*-3);
- check(".1 / .5",d/b);
- check(".1 << 1",d<<1);
- check("-.5 >> 2",c>>2);
-
- check(".1 == .5",d == b);
- check(".1 != .5",d != b);
- check(".1 > .5",d > b);
- check(".5 <= -.5",b <= c);
-
- cout << "Fix32: range errors reported and overflows reported\n";
- set_Fix32_overflow_handler(Fix32_warning);
- set_Fix32_range_error_handler(Fix32_warning);
-
- Fix32 f = 1.1; check("1.1",f);
-
- Fix32 g = .7;
- check(".7 + .5",g+b);
- check("-.5 - .7",c-g);
- check(".5 / .1",b/d);
-}
-
-int main() {
- test16();
- test32();
- return 0;
-}
diff --git a/contrib/libg++/libg++/tests/tFix16.exp b/contrib/libg++/libg++/tests/tFix16.exp
deleted file mode 100644
index be40a2aae382..000000000000
--- a/contrib/libg++/libg++/tests/tFix16.exp
+++ /dev/null
@@ -1,64 +0,0 @@
-Fix16: identities should be displayed
-0 = 0
-.5 = 0.5
--.5 = -0.5
-.1 = 0.100006
-.5 = 0.5
-.5 = 0.5
-.25 = 0.25
-8192 = 8192
-.25 = 0.25
-.25 = 0.25
-.25 = 0.25
--.25 = -0.25
-.1 + .5 = 0.600006
-.1 - .5 = -0.399994
-.1 * .5 = 0.0500031
-.1 * 3 = 0.300018
-.1 * -3 = -0.300018
-.1 / .5 = 0.200012
-.1 << 1 = 0.200012
--.5 >> 2 = -0.125
-.1 == .5 = 0
-.1 != .5 = 1
-.1 > .5 = 0
-.5 <= -.5 = 0
-Fix16: range errors ignored and overflows saturated
-1.1 = 0.999969
-.7 + .5 = 0.999969
--.5 - .7 = -1
-.5 / .1 = 0.999969
-Fix32: identities should be displayed
-0 = 0
-.5 = 0.5
--.5 = -0.5
-.1 = 0.1
-.5 = 0.5
-.5 = 0.5
-.25 = 0.25
-536870912 = 536870912
-.25 = 0.25
-.25 = 0.25
-.25 = 0.25
--.25 = -0.25
-.1 + .5 = 0.6
-.1 - .5 = -0.4
-.1 * .5 = 0.05
-.1 * 3 = 0.3
-.1 * -3 = -0.3
-.1 / .5 = 0.2
-.1 << 1 = 0.2
--.5 >> 2 = -0.125
-.1 == .5 = 0
-.1 != .5 = 1
-.1 > .5 = 0
-.5 <= -.5 = 0
-Fix32: range errors reported and overflows reported
-warning: Fix32 result out of range
-1.1 = 1
-warning: Fix32 result out of range
-.7 + .5 = -0.8
-warning: Fix32 result out of range
--.5 - .7 = 0.8
-warning: Fix32 result out of range
-.5 / .1 = 1
diff --git a/contrib/libg++/libg++/tests/tFix16.inp b/contrib/libg++/libg++/tests/tFix16.inp
deleted file mode 100644
index e69de29bb2d1..000000000000
--- a/contrib/libg++/libg++/tests/tFix16.inp
+++ /dev/null
diff --git a/contrib/libg++/libg++/tests/tFix24.cc b/contrib/libg++/libg++/tests/tFix24.cc
deleted file mode 100644
index 08bd00994cbd..000000000000
--- a/contrib/libg++/libg++/tests/tFix24.cc
+++ /dev/null
@@ -1,113 +0,0 @@
-//
-// testFix24.cc : test Fix24/48 classes
-//
-
-#include <Fix24.h>
-
-// This a set of inlines instead of a macro to force the side effects
-// of evaluating y to happen before x is printed.
-
-inline void check(char *x, int y) { cout << x << " = " << (y) << "\n"; }
-inline void check(char *x, unsigned int y) { cout << x << " = " << (y) << "\n"; }
-inline void check(char *x, long y) { cout << x << " = " << (y) << "\n"; }
-inline void check(char *x, unsigned long y) { cout << x << " = " << (y) << "\n"; }
-inline void check(char *x, double y) { cout << x << " = " << (y) << "\n"; }
-inline void check(char *x, Fix24 y) { cout << x << " = " << (y) << "\n"; }
-inline void check(char *x, Fix48 y) { cout << x << " = " << (y) << "\n"; }
-
-void test24() {
- cout << "Fix24: identities should be displayed\n";
-
- Fix24 a; check("0",a);
- Fix24 b = .5; check(".5",b);
- Fix24 c = -.5; check("-.5",c);
- Fix24 d = .1; check(".1",d);
- Fix24 e = b; check(".5",e);
-
- check(".5",a = b);
- check(".25",a = .25);
- check("536870912",mantissa(a));
- mantissa(a)=536870912;
- check(".25",a);
- check(".25",value(a));
-
- check(".25",+a);
- check("-.25",-a);
-
- check(".1 + .5",d+b);
- check(".1 - .5",d-b);
- check(".1 * .5",d*b);
- check(".1 * 3",d*3);
- check(".1 * -3",d*-3);
- check(".1 / .5",d/b);
- check(".1 << 1",d<<1);
- check("-.5 >> 2",c>>2);
-
- check(".1 == .5",d == b);
- check(".1 != .5",d != b);
- check(".1 > .5",d > b);
- check(".5 <= -.5",b <= c);
-
- cout << "Fix24: range errors ignored and overflows saturated\n";
- set_Fix24_overflow_handler(Fix24_overflow_saturate);
- set_Fix24_range_error_handler(Fix24_ignore);
-
- Fix24 f = 1.1; check("1.1",f);
-
- Fix24 g = .7;
- check(".7 + .5",g+b);
- check("-.5 - .7",c-g);
- check(".5 / .1",b/d);
-}
-
-void test48() {
- cout << "Fix48: identities should be displayed\n";
-
- Fix48 a; check("0",a);
- Fix48 b = .5; check(".5",b);
- Fix48 c = -.5; check("-.5",c);
- Fix48 d = .1; check(".1",d);
- Fix48 e = b; check(".5",e);
-
- check(".5",a = b);
- check(".25",a = .25);
- twolongs t;
- t = mantissa(a);
- check("536870912",t.u);
- check("0",t.l);
- mantissa(a)=t;
- check(".25",a);
- check(".25",value(a));
-
- check(".25",+a);
- check("-.25",-a);
-
- check(".1 + .5",d+b);
- check(".1 - .5",d-b);
- check(".1 * 3",d*3);
- check(".1 * -3",d*-3);
- check(".1 << 1",d<<1);
- check("-.5 >> 2",c>>2);
-
- check(".1 == .5",d == b);
- check(".1 != .5",d != b);
- check(".1 > .5",d > b);
- check(".5 <= -.5",b <= c);
-
- cout << "Fix48: range errors reported and overflows reported\n";
- set_Fix48_overflow_handler(Fix48_warning);
- set_Fix48_range_error_handler(Fix48_warning);
-
- Fix48 f = 1.1; check("1.1",f);
-
- Fix48 g = .7;
- check(".7 + .5",g+b);
- check("-.5 - .7",c-g);
-}
-
-int main() {
- test24();
- test48();
- return 0;
-}
-
diff --git a/contrib/libg++/libg++/tests/tFix24.exp b/contrib/libg++/libg++/tests/tFix24.exp
deleted file mode 100644
index 598f8054e699..000000000000
--- a/contrib/libg++/libg++/tests/tFix24.exp
+++ /dev/null
@@ -1,61 +0,0 @@
-Fix24: identities should be displayed
-0 = 0
-.5 = 0.5
--.5 = -0.5
-.1 = 0.1
-.5 = 0.5
-.5 = 0.5
-.25 = 0.25
-536870912 = 536870912
-.25 = 0.25
-.25 = 0.25
-.25 = 0.25
--.25 = -0.25
-.1 + .5 = 0.6
-.1 - .5 = -0.4
-.1 * .5 = 0.05
-.1 * 3 = 0.3
-.1 * -3 = -0.3
-.1 / .5 = 0.2
-.1 << 1 = 0.2
--.5 >> 2 = -0.125
-.1 == .5 = 0
-.1 != .5 = 1
-.1 > .5 = 0
-.5 <= -.5 = 0
-Fix24: range errors ignored and overflows saturated
-1.1 = 1
-.7 + .5 = 1
--.5 - .7 = -1
-.5 / .1 = 1
-Fix48: identities should be displayed
-0 = 0
-.5 = 0.5
--.5 = -0.5
-.1 = 0.1
-.5 = 0.5
-.5 = 0.5
-.25 = 0.25
-536870912 = 536870912
-0 = 0
-.25 = 0.25
-.25 = 0.25
-.25 = 0.25
--.25 = -0.25
-.1 + .5 = 0.6
-.1 - .5 = -0.4
-.1 * 3 = 0.3
-.1 * -3 = -0.3
-.1 << 1 = 0.2
--.5 >> 2 = -0.125
-.1 == .5 = 0
-.1 != .5 = 1
-.1 > .5 = 0
-.5 <= -.5 = 0
-Fix48: range errors reported and overflows reported
-warning: Fix48 result out of range
-1.1 = 1
-warning: Fix48 result out of range
-.7 + .5 = -0.8
-warning: Fix48 result out of range
--.5 - .7 = 0.8
diff --git a/contrib/libg++/libg++/tests/tFix24.inp b/contrib/libg++/libg++/tests/tFix24.inp
deleted file mode 100644
index e69de29bb2d1..000000000000
--- a/contrib/libg++/libg++/tests/tFix24.inp
+++ /dev/null
diff --git a/contrib/libg++/libg++/tests/tGetOpt.cc b/contrib/libg++/libg++/tests/tGetOpt.cc
deleted file mode 100644
index c9eb7e7d1ce2..000000000000
--- a/contrib/libg++/libg++/tests/tGetOpt.cc
+++ /dev/null
@@ -1,65 +0,0 @@
-
-#include <GetOpt.h>
-
-int
-main (int argc, char **argv)
-{
- int digit_optind = 0;
- GetOpt getopt (argc, argv, "abc:d:0123456789");
-
- while (1)
- {
- int this_option_optind = getopt.optind;
- int ch;
- if ((ch = getopt ()) == EOF)
- break;
- char c = char(ch);
- switch (c)
- {
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- if (digit_optind != 0 && digit_optind != this_option_optind)
- printf ("digits occur in two different argv-elements.\n");
- digit_optind = this_option_optind;
- printf ("option %c\n", c);
- break;
-
- case 'a':
- printf ("option a\n");
- break;
-
- case 'b':
- printf ("option b\n");
- break;
-
- case 'c':
- printf ("option c with value `%s'\n", getopt.optarg);
- break;
-
- case '?':
- break;
-
- default:
- printf ("?? getopt returned character code 0%o ??\n", c);
- }
- }
-
- if (getopt.optind < argc)
- {
- printf ("non-option ARGV-elements: ");
- while (getopt.optind < argc)
- printf ("%s ", argv[getopt.optind++]);
- printf ("\n");
- }
-
- return 0;
-}
-
diff --git a/contrib/libg++/libg++/tests/tGetOpt.exp b/contrib/libg++/libg++/tests/tGetOpt.exp
deleted file mode 100644
index 827bb56abc28..000000000000
--- a/contrib/libg++/libg++/tests/tGetOpt.exp
+++ /dev/null
@@ -1,11 +0,0 @@
-./tGetOpt: unrecognized option `-h'
-./tGetOpt: unrecognized option `-i'
-option a
-option b
-option c with value `-de10'
-option 2
-option 0
-option 0
-option 0
-digits occur in two different argv-elements.
-option 3
diff --git a/contrib/libg++/libg++/tests/tGetOpt.inp b/contrib/libg++/libg++/tests/tGetOpt.inp
deleted file mode 100644
index e69de29bb2d1..000000000000
--- a/contrib/libg++/libg++/tests/tGetOpt.inp
+++ /dev/null
diff --git a/contrib/libg++/libg++/tests/tInteger.cc b/contrib/libg++/libg++/tests/tInteger.cc
deleted file mode 100644
index f0c335e5ac3a..000000000000
--- a/contrib/libg++/libg++/tests/tInteger.cc
+++ /dev/null
@@ -1,437 +0,0 @@
-/*
- a test file for Integer class
- */
-
-#include <Integer.h>
-#include <assert.h>
-
-#define tassert(ex) { cerr << #ex; \
- if ((ex)) cerr << " OK\n"; \
- else cerr << " Fail\n"; }
-
-
-Integer factorial(Integer n)
-{
- Integer f;
- if (n < 0)
- f = 0;
- else
- {
- f = 1;
- while (n > 0)
- {
- f *= n;
- --n;
- }
- }
- return f;
-}
-
-Integer fibonacci(long n)
-{
- Integer f;
- if (n <= 0)
- f = 0;
- else
- {
- f = 1;
- Integer prev = 0;
- Integer tmp;
- while (n > 1)
- {
- tmp = f;
- f += prev;
- prev = tmp;
- --n;
- }
- }
- return f;
-}
-
-
-void identitytest(Integer& a, Integer& b, Integer& c)
-{
- assert( -(-a) == a);
- assert( (a + b) == (b + a));
- assert( (a + (-b)) == (a - b));
- assert( (a * b) == (b * a));
- assert( (a * (-b)) == -(a * b));
- assert( (a / (-b)) == -(a / b));
- assert( (a - b) == -(b - a));
- assert( (a + (b + c)) == ((a + b) + c));
- assert( (a * (b * c)) == ((a * b) * c));
- assert( (a * (b + c)) == ((a * b) + (a * c)));
- assert( ((a - b) + b) == a);
- assert( ((a + b) - b) == a);
- assert( ((a * b) / b) == a);
- assert( ((a * b) % b) == 0);
- assert( (b * (a / b) + (a % b)) == a);
- assert( ((a + b) % c) == ((a % c) + (b % c)) % c);
-}
-
-void utiltest(Integer& a)
-{
- assert(sqrt(sqr(a)) == a);
- assert(sqr(sqrt(a)) <= a);
-
- Integer x = 1;
- for (int i = 0; i < 10; ++i)
- {
- assert(pow(a, i) == x);
- x *= a;
- }
- setbit(x, 0);
- assert(testbit(x, 0));
- assert(odd(x));
- assert(!even(x));
- clearbit(x, 0);
- clearbit(x, 1);
- assert(even(x));
- assert(!odd(x));
- assert(x % 4 == 0);
-
-}
-
-void bittest(Integer& a, Integer& b, Integer& c)
-{
- assert( (a | b) == (b | a));
- assert( (a & b) == (b & a));
- assert( (a ^ b) == (b ^ a));
- assert( (a | (b | c)) == ((a | b) | c));
- assert( (a & (b & c)) == ((a & b) & c));
- assert( (a & (b | c)) == ((a & b) | (a & c)));
- assert( (a | (b & c)) == ((a | b) & (a | c)));
- assert( (a & (a | b)) == a);
- assert( (a | (a & b)) == a);
-}
-
-void accumtest(Integer& a, Integer& b, Integer& c)
-{
- Integer x = a;
- x *= b;
- assert(x == (a * b));
- x += c;
- assert(x == ((a * b) + c));
- x -= a;
- assert(x == (((a * b) + c) - a));
- x /= b;
- assert(x == ((((a * b) + c) - a) / b));
- x %= c;
- assert(x == (((((a * b) + c) - a) / b) % c));
- x &= a;
- assert(x == ((((((a * b) + c) - a) / b) % c) & a));
- x |= b;
- assert(x == (((((((a * b) + c) - a) / b) % c) & a) | b));
- x ^= c;
- assert(x == ((((((((a * b) + c) - a) / b) % c) & a) | b) ^ c));
-
- assert(x.OK());
-}
-
-void longidentitytest(Integer& a, long b, long c)
-{
- assert( (a + b) == (b + a));
- assert( (a + (-b)) == (a - b));
- assert( (a * b) == (b * a));
- assert( (a * (-b)) == -(a * b));
- assert( (a / (-b)) == -(a / b));
- assert( (a - b) == -(b - a));
- assert( (a + (b + c)) == ((a + b) + c));
- assert( (a * (b * c)) == ((a * b) * c));
- assert( (a * (b + c)) == ((a * b) + (a * c)));
- assert( ((a - b) + b) == a);
- assert( ((a + b) - b) == a);
- assert( ((a * b) / b) == a);
- assert( ((a * b) % b) == 0);
- assert( (b * (a / b) + (a % b)) == a);
- assert( ((a + b) % c) == ((a % c) + (b % c)) % c);
-}
-
-void longbittest(Integer& a, long b, long c)
-{
- assert( (a | b) == (b | a));
- assert( (a & b) == (b & a));
- assert( (a ^ b) == (b ^ a));
- assert( (a | (b | c)) == ((a | b) | c));
- assert( (a & (b & c)) == ((a & b) & c));
- assert( (a & (b | c)) == ((a & b) | (a & c)));
- assert( (a | (b & c)) == ((a | b) & (a | c)));
- assert( (a & (a | b)) == a);
- assert( (a | (a & b)) == a);
-}
-
-void longaccumtest(Integer& a, long b, long c)
-{
- Integer x = a;
- x *= b;
- assert(x == (a * b));
- x += c;
- assert(x == ((a * b) + c));
- x -= a;
- assert(x == (((a * b) + c) - a));
- x /= b;
- assert(x == ((((a * b) + c) - a) / b));
- x %= c;
- assert(x == (((((a * b) + c) - a) / b) % c));
- x &= a;
- assert(x == ((((((a * b) + c) - a) / b) % c) & a));
- x |= b;
- assert(x == (((((((a * b) + c) - a) / b) % c) & a) | b));
- x ^= c;
- assert(x == ((((((((a * b) + c) - a) / b) % c) & a) | b) ^ c));
-
- assert(x.OK());
-}
-
-void anothertest()
-{
- Integer pow64 = Ipow(2, 64);
- cout << "pow64 = Ipow(2, 64) = " << pow64 << "\n";
- assert(pow64.OK());
- cout << "lg(pow64) = " << lg(pow64) << "\n";
- assert(lg(pow64) == 64);
- int k;
- for (k = 0; k < 64; ++k) assert(testbit(pow64, k) == 0);
- assert(testbit(pow64, k) != 0);
-
- Integer s64 = 1;
- s64 <<= 64;
- cout << "s64 = 1 << 64 = " << s64 << "\n";
- assert(s64.OK());
-
- assert(s64 == pow64);
- assert(s64 >= pow64);
- assert(s64 <= pow64);
- assert(!(s64 != pow64));
- assert(!(s64 > pow64));
- assert(!(s64 < pow64));
-
- Integer s32 = s64 >> 32;
- cout << "s32 = s64 >> 32 = " << s32 << "\n";
- assert(s32.OK());
- assert(lg(s32) == 32);
- assert(!(pow64 == s32));
- assert(!(pow64 < s32));
- assert(!(pow64 <= s32));
- assert(pow64 != s32);
- assert(pow64 >= s32);
- assert(pow64 > s32);
-
- Integer comps64 = ~s64;
- cout << "comps64 = ~s64 = " << comps64 << "\n";
- for (k = 0; k < 64; ++k) assert(testbit(comps64, k) == !testbit(s64, k));
- Integer result = (comps64 & s32);
- cout << "comps64 & s32 = " << result << "\n";
- assert(result.OK());
- result = (comps64 | s32);
- cout << "comps64 | s32 = " << result << "\n";
- assert(result.OK());
- result = (comps64 ^ s32);
- cout << "comps64 ^ s32 = " << result << "\n";
- assert(result.OK());
-
- identitytest(s64, s32, comps64);
- bittest(s32, s64, comps64);
- accumtest(comps64, s32, pow64);
- utiltest(s32);
- longidentitytest(s64, 1000, 50);
- longbittest(s64, 12345, 67890);
- longaccumtest(s32, 100000, 1);
-
-}
-
-void iotest()
-{
- Integer result;
-
- cout << "\nenter an Integer: ";
- cin.setf(0, ios::basefield);
- cin >> result;
- cout << "number = " << hex << result << dec << "\n";
- assert(result.OK());
-
- cout << "enter another Integer: ";
- cin >> result;
- cout << "number = " << result << "\n";
- assert(result.OK());
-
- cout << "enter another Integer: ";
- cin >> dec >> result;
- cout << "number = " << result << "\n";
- assert(result.OK());
-
-}
-
-void fibtest()
-{
- Integer fib50 = fibonacci(50);
- cout << "fib50 = fibonacci(50) = " << fib50 << "\n";
- assert(fib50.OK());
- Integer fib48 = fibonacci(48);
- cout << "fib48 = fibonacci(48) = " << fib48 << "\n";
- assert(fib48.OK());
-
- Integer result = fib48 + fib50;
- cout << "fib48 + fib50 = " << result << "\n";
- result = fib48 - fib50;
- cout << "fib48 - fib50 = " << result << "\n";
- result = fib48 * fib50;
- cout << "fib48 * fib50 = " << result << "\n";
- result = fib48 / fib50;
- cout << "fib48 / fib50 = " << result << "\n";
- result = fib48 % fib50;
- cout << "fib48 % fib50 = " << result << "\n";
- result = gcd(fib50, fib48);
- cout << "gcd(fib50, fib48) = " << result << "\n";
- result = sqrt(fib50);
- cout << "sqrt(fib50) = " << result << "\n";
-
- identitytest(result, fib50, fib48);
- bittest(result, fib50, fib48);
- accumtest(result, fib50, fib48);
- utiltest(fib48);
- longidentitytest(fib50, 1000, 50);
- longaccumtest(fib48, 100000, 1);
-}
-
-
-void facttest(Integer& one, Integer& two)
-{
- Integer fact30(factorial(30));
- cout << "fact30 = factorial(30) = " << fact30 << "\n";
- assert(fact30.OK());
-
- Integer fact28(factorial(28));
- cout << "fact28 = factorial(28) = " << fact28 << "\n";
- assert(fact28.OK());
- assert(fact30 == fact28 * 870);
-
- Integer result = fact30 + fact28;
- cout << "fact30 + fact28 = " << result << "\n";
- result = fact30 - fact28;
- cout << "fact30 - fact28 = " << result << "\n";
- result = fact30 * fact28;
- cout << "fact30 * fact28 = " << result << "\n";
- result = fact30 / fact28;
- cout << "fact30 / fact28 = " << result << "\n";
- result = fact30 % fact28;
- cout << "fact30 % fact28 = " << result << "\n";
-
- result = -fact30;
- cout << "-fact30 = " << result << "\n";
- assert(abs(result) == fact30);
-
- cout << "lg(fact30) = " << lg(fact30) << "\n";
- assert(lg(fact30) == 107);
-
- result = gcd(fact30, fact28);
- cout << "gcd(fact30, fact28) = " << result << "\n";
- assert(result == fact28);
-
- result = sqrt(fact30);
- cout << "sqrt(fact30) = " << result << "\n";
-
- Integer negfact31 = fact30 * -31;
- Integer posfact31 = abs(negfact31);
- assert(negfact31.OK());
- assert(posfact31.OK());
- cout << "negfact31 = " << negfact31 << "\n";
- result = fact30 + negfact31;
- cout << "fact30 + negfact31 = " << result << "\n";
- result = fact30 - negfact31;
- cout << "fact30 - negfact31 = " << result << "\n";
- result = fact30 * negfact31;
- cout << "fact30 * negfact31 = " << result << "\n";
- result = fact30 / negfact31;
- cout << "fact30 / negfact31 = " << result << "\n";
- result = fact30 % negfact31;
- cout << "fact30 % negfact31 = " << result << "\n";
- result = gcd(fact30, negfact31);
- cout << "gcd(fact30, negfact31) = " << result << "\n";
- assert(result == fact30);
-
- identitytest(one, one, one);
- identitytest(one, one, one);
- identitytest(one, two, fact30);
- identitytest(fact30, posfact31, fact28);
- identitytest(fact30, negfact31, fact28);
- identitytest(negfact31, posfact31, fact28);
-
- bittest(one, one, one);
- bittest(one, one, one);
- bittest(one, two, fact30);
- bittest(fact30, posfact31, fact28);
-
- accumtest(one, one, one);
- accumtest(one, one, one);
- accumtest(one, two, fact30);
- accumtest(fact30, posfact31, fact28);
-
- utiltest(one);
- utiltest(fact30);
- utiltest(posfact31);
-
- longidentitytest(one, 1, 1);
- longidentitytest(one, 2, 3);
- longidentitytest(fact30, 3, -20);
- longidentitytest(fact30, 4, 20000);
- longidentitytest(negfact31, -100, 20000);
-
- longbittest(one, 1, 1);
- longbittest(one, 2, 3);
- longbittest(fact30, 4, 20000);
- longbittest(fact28, 1000, 50);
-
- longaccumtest(one, 1, 1);
- longaccumtest(one, 2, 3);
- longaccumtest(fact30, 4, 20000);
- longaccumtest(fact30, 1000, 50);
- longaccumtest(fact28, 10000000, 100000000);
-}
-
-void modtest()
-{
- Integer b, e, m;
-
- m = 1; m <<= 32;
- b = m + 1;
-
- e = Ipow( 2, 32 );
- b = Ipow( 2, 32 ); // use b as a comparison
- cout << "2^32 = " << e << "\n";
-
- e %= (e-1); // do same op two ways...
- b = b % (b - 1);
-
- cout << "2^32 % (2^32-1) = " << e << "\n"; // e is incorrect here
- cout << "2^32 % (2^32-1) = " << b << "\n"; // but b is ok
-}
-
-int main()
-{
- Integer one = 1;
- cout << "one = " << one << "\n";
- assert(one.OK());
- assert(one == 1);
- cout << "one + 1 = " << (one + 1) << "\n";
-
- Integer two = 2;
- cout << "two = " << two << "\n";
- assert(two.OK());
- assert(two == 2);
-
-/* inbox/1782 */
- Integer n (0);
- setbit (n, 8);
- clearbit (n, 16);
- cout << "twofiftysix = " << n << '\n';
-
- facttest(one, two);
- fibtest();
- anothertest();
- iotest();
- modtest();
-
- cout << "\nEnd of test\n";
- return 0;
-}
diff --git a/contrib/libg++/libg++/tests/tInteger.exp b/contrib/libg++/libg++/tests/tInteger.exp
deleted file mode 100644
index 6a0d7e61fb80..000000000000
--- a/contrib/libg++/libg++/tests/tInteger.exp
+++ /dev/null
@@ -1,48 +0,0 @@
-one = 1
-one + 1 = 2
-two = 2
-twofiftysix = 256
-fact30 = factorial(30) = 265252859812191058636308480000000
-fact28 = factorial(28) = 304888344611713860501504000000
-fact30 + fact28 = 265557748156802772496809984000000
-fact30 - fact28 = 264947971467579344775806976000000
-fact30 * fact28 = 80872505331661933764010628483512781121876047953920000000000000
-fact30 / fact28 = 870
-fact30 % fact28 = 0
--fact30 = -265252859812191058636308480000000
-lg(fact30) = 107
-gcd(fact30, fact28) = 304888344611713860501504000000
-sqrt(fact30) = 16286585271694955
-negfact31 = -8222838654177922817725562880000000
-fact30 + negfact31 = -7957585794365731759089254400000000
-fact30 - negfact31 = 8488091513990113876361871360000000
-fact30 * negfact31 = -2181131468794922353615366650200339706856997013317222400000000000000
-fact30 / negfact31 = 0
-fact30 % negfact31 = 265252859812191058636308480000000
-gcd(fact30, negfact31) = 265252859812191058636308480000000
-fib50 = fibonacci(50) = 12586269025
-fib48 = fibonacci(48) = 4807526976
-fib48 + fib50 = 17393796001
-fib48 - fib50 = -7778742049
-fib48 * fib50 = 60508827864880718400
-fib48 / fib50 = 0
-fib48 % fib50 = 4807526976
-gcd(fib50, fib48) = 1
-sqrt(fib50) = 112188
-pow64 = Ipow(2, 64) = 18446744073709551616
-lg(pow64) = 64
-s64 = 1 << 64 = 18446744073709551616
-s32 = s64 >> 32 = 4294967296
-comps64 = ~s64 = 18446744073709551615
-comps64 & s32 = 4294967296
-comps64 | s32 = 18446744073709551615
-comps64 ^ s32 = 18446744069414584319
-
-enter an Integer: number = 1234abdecf99fed123
-enter another Integer: number = 0
-enter another Integer: number = -12345678901234567890
-2^32 = 4294967296
-2^32 % (2^32-1) = 1
-2^32 % (2^32-1) = 1
-
-End of test
diff --git a/contrib/libg++/libg++/tests/tInteger.inp b/contrib/libg++/libg++/tests/tInteger.inp
deleted file mode 100644
index 3dee0b82c9aa..000000000000
--- a/contrib/libg++/libg++/tests/tInteger.inp
+++ /dev/null
@@ -1,3 +0,0 @@
-0x1234abdecf99FED123
-0
--012345678901234567890
diff --git a/contrib/libg++/libg++/tests/tLList.cc b/contrib/libg++/libg++/tests/tLList.cc
deleted file mode 100644
index b491438a2645..000000000000
--- a/contrib/libg++/libg++/tests/tLList.cc
+++ /dev/null
@@ -1,236 +0,0 @@
-/*
- test/demo of linked structures
-*/
-
-
-#include <assert.h>
-
-#define tassert(ex) {if ((ex)) cerr << #ex << "\n"; \
- else _assert(#ex, __FILE__,__LINE__); }
-
-#include <stream.h>
-#include "iSLList.h"
-
-
-void printlist(intSLList& l)
-{
- for (Pix p = l.first(); p != 0; l.next(p)) cout << l(p) << " ";
- cout << "\n";
-}
-
-
-void SLtest()
-{
- int i;
- intSLList a;
- assert(a.OK());
- assert(a.empty());
- cout << "prepending...\n";
- for (i = 0; i < 10; ++i)
- {
- assert(a.length() == i);
- a.prepend(i);
- assert(a.front() == i);
- }
- cout << "a: "; printlist(a);
- cout << "appending...\n";
- for (i = 0; i < 10; ++i)
- {
- assert(a.length() == 10 + i);
- a.append(i);
- assert(a.rear() == i);
- }
- cout << "a: "; printlist(a);
- intSLList b = a;
- cout << "b = a: " << "\n"; printlist(b);
- assert(b.OK());
- assert(b.length() == a.length());
- assert(b.front() == a.front());
- assert(b.rear() == a.rear());
- cout << "remove_front of first 10 elements:\n";
- for (i = 0; i < 10; ++i)
- {
- assert(b.length() == 20 - i);
- assert(b.front() == 9 - i);
- b.remove_front();
- }
- assert(b.length() == 10);
- cout << "b: "; printlist(b);
-
- cout << "inserting 100 after sixth element...\n";
- Pix bp = b.first();
- for (i = 0; i < 5; ++i) b.next(bp);
- b.ins_after(bp, 100);
- assert(b.length() == 11);
- cout << "b: "; printlist(b);
- a.join(b);
- cout << "after a.join(b)\n"; printlist(a);
- assert(b.empty());
- assert(a.length() == 31);
- cout << "b: " << "\n"; printlist(b);
- b.prepend(999);
- cout << "b: " << "\n"; printlist(b);
- assert(b.length() == 1);
- assert(b.front() == 999);
- assert(b.rear() == 999);
- assert(b.OK());
- intSLList bb = b;
- cout << "bb: " << "\n"; printlist(bb);
- assert(bb.OK());
- assert(bb.length() == 1);
- assert(bb.front() == 999);
- assert(bb.rear() == 999);
- assert(bb.remove_front() == 999);
- b.prepend(1234);
- assert(b.length() == 2);
- b.del_after(b.first());
- assert(b.rear() == 1234);
- assert(b.length() == 1);
- b.del_after(0);
- assert(b.length() == 0);
-
- assert(a.OK());
- assert(b.OK());
- assert(bb.OK());
-}
-
-#include "iDLList.h"
-
-void printDlist(intDLList& l)
-{
- for (Pix p = l.first(); p != 0; l.next(p)) cout << l(p) << " ";
- cout << "\n";
-}
-
-void DLtest()
-{
- int i;
- intDLList a;
- assert(a.OK());
- assert(a.empty());
- assert(a.length() == 0);
- cout << "prepending...\n";
- for (i = 0; i < 10; ++i)
- {
- assert(a.length() == i);
- a.prepend(i);
- assert(a.front() == i);
- }
- cout << "a: " << "\n"; printDlist(a);
- cout << "appending...\n";
- for (i = 0; i < 10; ++i)
- {
- assert(a.length() == 10 + i);
- a.append(i);
- assert(a.rear() == i);
- }
- cout << "a: "; printDlist(a);
- intDLList b = a;
- assert(b.OK());
- assert(b.length() == a.length());
- assert(b.front() == a.front());
- assert(b.rear() == a.rear());
- cout << "b = a: "; printDlist(b);
- cout << "remove_front of first 10 elements:\n";
- for (i = 0; i < 10; ++i)
- {
- assert(b.length() == 20 - i);
- assert(b.front() == 9 - i);
- b.remove_front();
- }
- assert(b.length() == 10);
- cout << "b: "; printDlist(b);
-
- cout << "inserting 100 after sixth element...\n";
- Pix bp = b.first();
- for (i = 0; i < 5; ++i) b.next(bp);
- b.ins_after(bp, 100);
- assert(b.length() == 11);
- cout << "b: "; printDlist(b);
- intDLList aa = a;
- aa.join(b);
- cout << "after aa = a; aa.join(b)\n"; printDlist(aa);
- assert(aa.length() == 31);
- assert(b.empty());
- cout << "b: " << "\n"; printDlist(b);
- b.prepend(999);
- cout << "b: " << "\n"; printDlist(b);
- assert(b.length() == 1);
- assert(b.front() == 999);
- assert(b.rear() == 999);
- assert(b.OK());
- intDLList bb = b;
- cout << "bb: " << "\n"; printDlist(bb);
- assert(bb.OK());
- assert(bb.length() == 1);
- assert(bb.front() == 999);
- assert(bb.rear() == 999);
- assert(bb.remove_front() == 999);
- assert(bb.OK());
- b.prepend(1234);
- assert(b.length() == 2);
- bp = b.first();
- b.next(bp);
- b.del(bp, -1);
- assert(b.rear() == 1234);
- assert(b.length() == 1);
- b.del(bp);
- assert(b.length() == 0);
-
- intDLList z = a;
- cout << "z = a: "; printDlist(z);
- assert(z.OK());
- assert(z.length() == 20);
- cout << "remove_rear of last 10 elements:\n";
- for (i = 0; i < 10; ++i)
- {
- assert(z.length() == 20 - i);
- assert(z.rear() == 9 - i);
- z.remove_rear();
- }
- assert(z.length() == 10);
-
- cout << "z: "; printDlist(z);
-
- cout << "inserting 100 before alternate elements...\n";
- Pix zp;
- for (zp = z.first(); zp; z.next(zp))
- {
- z.ins_before(zp, 100);
- }
- assert(z.length() == 20);
- cout << "z: "; printDlist(z);
-
- cout << "inserting 200 after sixth element...\n";
- zp = z.first();
- for (i = 0; i < 5; ++i) z.next(zp);
- z.ins_after(zp, 200);
- assert(z.length() == 21);
- cout << "z: "; printDlist(z);
-
- cout << "deleting alternate elements of z...";
- for (zp = z.first(); zp; z.next(zp))
- {
- cout << z(zp) << " ";
- z.del(zp);
- }
- cout << "\n";
- assert(z.length() == 10);
- cout << "z: "; printDlist(z);
-
- cout << "z in reverse order:\n";
- for (zp = z.last(); zp; z.prev(zp)) cout << z(zp) << " ";
- cout << "\n";
- z.clear();
- assert(z.OK());
- assert(z.empty());
- assert(a.OK());
- assert(b.OK());
-}
-
-main()
-{
- SLtest();
- DLtest();
- cout << "\nEnd of test\n";
-}
diff --git a/contrib/libg++/libg++/tests/tLList.exp b/contrib/libg++/libg++/tests/tLList.exp
deleted file mode 100644
index 727f9b538c75..000000000000
--- a/contrib/libg++/libg++/tests/tLList.exp
+++ /dev/null
@@ -1,49 +0,0 @@
-prepending...
-a: 9 8 7 6 5 4 3 2 1 0
-appending...
-a: 9 8 7 6 5 4 3 2 1 0 0 1 2 3 4 5 6 7 8 9
-b = a:
-9 8 7 6 5 4 3 2 1 0 0 1 2 3 4 5 6 7 8 9
-remove_front of first 10 elements:
-b: 0 1 2 3 4 5 6 7 8 9
-inserting 100 after sixth element...
-b: 0 1 2 3 4 5 100 6 7 8 9
-after a.join(b)
-9 8 7 6 5 4 3 2 1 0 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 100 6 7 8 9
-b:
-
-b:
-999
-bb:
-999
-prepending...
-a:
-9 8 7 6 5 4 3 2 1 0
-appending...
-a: 9 8 7 6 5 4 3 2 1 0 0 1 2 3 4 5 6 7 8 9
-b = a: 9 8 7 6 5 4 3 2 1 0 0 1 2 3 4 5 6 7 8 9
-remove_front of first 10 elements:
-b: 0 1 2 3 4 5 6 7 8 9
-inserting 100 after sixth element...
-b: 0 1 2 3 4 5 100 6 7 8 9
-after aa = a; aa.join(b)
-9 8 7 6 5 4 3 2 1 0 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 100 6 7 8 9
-b:
-
-b:
-999
-bb:
-999
-z = a: 9 8 7 6 5 4 3 2 1 0 0 1 2 3 4 5 6 7 8 9
-remove_rear of last 10 elements:
-z: 9 8 7 6 5 4 3 2 1 0
-inserting 100 before alternate elements...
-z: 100 9 100 8 100 7 100 6 100 5 100 4 100 3 100 2 100 1 100 0
-inserting 200 after sixth element...
-z: 100 9 100 8 100 7 200 100 6 100 5 100 4 100 3 100 2 100 1 100 0
-deleting alternate elements of z...100 100 100 200 6 5 4 3 2 1 0
-z: 9 8 7 100 100 100 100 100 100 100
-z in reverse order:
-100 100 100 100 100 100 100 7 8 9
-
-End of test
diff --git a/contrib/libg++/libg++/tests/tLList.inp b/contrib/libg++/libg++/tests/tLList.inp
deleted file mode 100644
index e69de29bb2d1..000000000000
--- a/contrib/libg++/libg++/tests/tLList.inp
+++ /dev/null
diff --git a/contrib/libg++/libg++/tests/tList.cc b/contrib/libg++/libg++/tests/tList.cc
deleted file mode 100644
index b508b5526d90..000000000000
--- a/contrib/libg++/libg++/tests/tList.cc
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- test/demo of generic lists
-*/
-
-#include <assert.h>
-
-#define tassert(ex) {if ((ex)) cerr << #ex << "\n"; \
- else _assert(#ex, __FILE__,__LINE__); }
-
-#include <iostream.h>
-#include "iList.h"
-
-int int_compare(int a, int b)
-{
- return a - b;
-}
-
-int inc(int x)
-{
- return x + 1;
-}
-
-int plus(int x, int y)
-{
- return x + y;
-}
-
-void printint(int x)
-{
- cout << x << " ";
-}
-
-void print(intList& l)
-{
- l.apply(printint);
- cout << "\n";
-}
-
-int is_odd(int x)
-{
- return x & 1;
-}
-
-int is_even(int x)
-{
- return (x & 1) == 0;
-}
-
-intList sequence(int lo, int hi)
-{
- if (lo > hi)
- return intList();
- else
- return intList(lo, sequence(lo+1, hi));
-}
-
-int old_rand = 9999;
-
-int get_rand()
-{
- old_rand = ((long)old_rand * (long)1243) % (long)971;
- return old_rand;
-}
-
-intList randseq(int n)
-{
- if (n <= 0)
- return intList();
- int value = get_rand() % 50;
- return intList(value, randseq(--n));
-}
-
-main()
-{
- intList a = sequence(1, 20);
- cout << "\nintList a = sequence(1, 20);\n"; print(a);
- assert(a.OK());
- for (int i = 0; i < 20; ++i) assert(a[i] == i + 1);
- assert(a.position(2) == 1);
- intList b = randseq(20);
- cout << "\nintList b = randseq(20);\n"; print(b);
- intList c = concat(a, b);
- cout << "\nintList c = concat(a, b);\n"; print(c);
- assert(c.contains(a));
- assert(c.contains(b));
- assert(!(c.find(a).null()));
- assert(c.find(b) == b);
- intList d = map(inc, a);
- for (int i = 0; i < 20; ++i) assert(d[i] == a[i] + 1);
- cout << "\nintList d = map(inc, a);\n"; print(d);
- intList e = reverse(a);
- cout << "\nintList e = reverse(a);\n"; print(e);
- for (int i = 0; i < 20; ++i) assert(e[i] == a[19 - i]);
- intList f = select(is_odd, a);
- cout << "\nintList f = select(is_odd, a);\n"; print(f);
- intList ff = select(is_even, f);
- assert(ff.null());
- int red = a.reduce(plus, 0);
- cout << "\nint red = a.reduce(plus, 0);\n"; cout << red;
- int second = a[2];
- cout << "\nint second = a[2];\n"; cout << second;
- intList g = combine(plus, a, b);
- cout << "\nintList g = combine(plus, a, b);\n"; print(g);
- for (int i = 0; i < 20; ++i) assert(g[i] == a[i] + b[i]);
- g.del((intPredicate)is_odd);
- cout << "\ng.del(is_odd);\n"; print(g);
- ff = select(is_odd, g);
- assert(ff.null());
- b.sort(int_compare);
- for (int i = 1; i < 20; ++i) assert(b[i] >= b[i-1]);
- cout << "\nb.sort(int_compare);\n"; print(b);
- intList h = merge(a, b, int_compare);
- cout << "\nintList h = merge(a, b, int_compare);\n"; print(h);
- for (int i = 1; i < 40; ++i) assert(h[i] >= h[i-1]);
- for (Pix p = a.first(); p; a.next(p)) assert(h.contains(a(p)));
- for (Pix p = b.first(); p; b.next(p)) assert(h.contains(b(p)));
- cout << "\nh via Pix:\n";
- for (Pix p = h.first(); p; h.next(p)) cout << h(p) << ", ";
- cout << "\n";
- assert(a.OK());
- assert(b.OK());
- assert(c.OK());
- assert(d.OK());
- assert(e.OK());
- assert(f.OK());
- assert(g.OK());
- assert(h.OK());
- cout << "\ndone\n";
-}
diff --git a/contrib/libg++/libg++/tests/tList.exp b/contrib/libg++/libg++/tests/tList.exp
deleted file mode 100644
index 989137f1b92e..000000000000
--- a/contrib/libg++/libg++/tests/tList.exp
+++ /dev/null
@@ -1,39 +0,0 @@
-
-intList a = sequence(1, 20);
-1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
-
-intList b = randseq(20);
-28 27 5 17 44 6 9 40 15 26 49 35 15 48 13 27 25 25 9 6
-
-intList c = concat(a, b);
-1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 28 27 5 17 44 6 9 40 15 26 49 35 15 48 13 27 25 25 9 6
-
-intList d = map(inc, a);
-2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
-
-intList e = reverse(a);
-20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
-
-intList f = select(is_odd, a);
-1 3 5 7 9 11 13 15 17 19
-
-int red = a.reduce(plus, 0);
-210
-int second = a[2];
-3
-intList g = combine(plus, a, b);
-29 29 8 21 49 12 16 48 24 36 60 47 28 62 28 43 42 43 28 26
-
-g.del(is_odd);
-8 12 16 48 24 36 60 28 62 28 42 28 26
-
-b.sort(int_compare);
-5 6 6 9 9 13 15 15 17 25 25 26 27 27 28 35 40 44 48 49
-
-intList h = merge(a, b, int_compare);
-1 2 3 4 5 5 6 6 6 7 8 9 9 9 10 11 12 13 13 14 15 15 15 16 17 17 18 19 20 25 25 26 27 27 28 35 40 44 48 49
-
-h via Pix:
-1, 2, 3, 4, 5, 5, 6, 6, 6, 7, 8, 9, 9, 9, 10, 11, 12, 13, 13, 14, 15, 15, 15, 16, 17, 17, 18, 19, 20, 25, 25, 26, 27, 27, 28, 35, 40, 44, 48, 49,
-
-done
diff --git a/contrib/libg++/libg++/tests/tList.inp b/contrib/libg++/libg++/tests/tList.inp
deleted file mode 100644
index e69de29bb2d1..000000000000
--- a/contrib/libg++/libg++/tests/tList.inp
+++ /dev/null
diff --git a/contrib/libg++/libg++/tests/tMap.cc b/contrib/libg++/libg++/tests/tMap.cc
deleted file mode 100644
index ad03d4a1b1d4..000000000000
--- a/contrib/libg++/libg++/tests/tMap.cc
+++ /dev/null
@@ -1,339 +0,0 @@
-/*
- a test file for Maps
-*/
-
-#ifdef PTIMES
-const int ptimes = 1;
-#else
-const int ptimes = 0;
-#endif
-
-#include <stream.h>
-#include <assert.h>
-#include <builtin.h>
-
-
-#define tassert(ex) { cerr << #ex; \
- if ((ex)) cerr << " OK\n"; \
- else cerr << " Fail\n"; }
-
-#include "iMap.h"
-
-unsigned int hash(int x) { return multiplicativehash(x) ; }
-
-int SIZE;
-
-int *nums;
-int *odds;
-int *perm;
-
-void add(int x[], int y[], intintMap& a)
-{
- for (int i = 0; i < SIZE; ++i) a[x[i]] = y[i];
-}
-
-#include <MLCG.h>
-
-MLCG randgen;
-
-void permute(int x[])
-{
- for (int i = 1; i < SIZE; ++i)
- {
- int j = randgen.asLong() % (i + 1);
- int tmp = x[i]; x[i] = x[j]; x[j] = tmp;
- }
-}
-
-void makenums()
-{
- for (int i = 0; i < SIZE; ++i) nums[i] = i + 1;
-}
-
-void makeodds()
-{
- for (int i = 0; i < SIZE; ++i) odds[i] = 2 * i + 1;
- permute(odds);
-}
-
-void makeperm()
-{
- for (int i = 0; i < SIZE; ++i) perm[i] = i + 1;
- permute(perm);
-}
-
-void printMap(intintMap& a)
-{
- int maxprint = 20;
- cout << "[";
- int k = 0;
- Pix i;
- for (i = a.first(); i != 0 && k < maxprint; a.next(i),++k)
- cout << "(" << a.key(i) << ", " << a.contents(i) << ") ";
- if (i != 0) cout << "...]\n";
- else cout << "]\n";
-}
-
-#include "iSplayMap.h"
-
-void Splaytest()
-{
- intintSplayMap a(-1);
- add(nums, perm, a);
- intintSplayMap b(-1);
- add(perm, nums, b);
- intintSplayMap c(-1);
- add(perm, odds, c);
- intintSplayMap d(a);
- add(nums, nums, d);
- cout << "a: "; printMap(a);
- cout << "b: "; printMap(b);
- cout << "c: "; printMap(c);
- cout << "d: "; printMap(d);
- assert(a.length() == SIZE);
- assert(b.length() == SIZE);
- assert(c.length() == SIZE);
- assert(d.length() == SIZE);
- int j;
- for (j = 1; j <= SIZE; ++j) assert(a.contains(j));
- assert(a[SIZE+1] = -1);
-
- for (j = 1; j <= SIZE; ++j) assert(b.contains(j));
-
- for (j = 1; j <= SIZE; ++j) assert(b[a[j]] == j);
- for (j = 1; j <= SIZE; ++j) assert(a[b[j]] == j);
-
- for (j = 1; j <= SIZE; ++j) assert((c[j] & 1) != 0);
-
- for (j = 1; j <= SIZE; ++j) assert(d[j] == j);
-
- d.del(1);
- assert(!d.contains(1));
- for (j = 1; j <= SIZE; ++j) d.del(j);
- assert(d.empty());
-
- assert(a.OK());
- assert(b.OK());
- assert(c.OK());
- assert(d.OK());
-
-}
-
-#include "iVHMap.h"
-
-void VHtest()
-{
- intintVHMap a(-1, SIZE);
- add(nums, perm, a);
- intintVHMap b(-1, SIZE);
- add(perm, nums, b);
- intintVHMap c(-1, SIZE);
- add(perm, odds, c);
- intintVHMap d(a);
- add(nums, nums, d);
- cout << "a: "; printMap(a);
- cout << "b: "; printMap(b);
- cout << "c: "; printMap(c);
- cout << "d: "; printMap(d);
- assert(a.length() == SIZE);
- assert(b.length() == SIZE);
- assert(c.length() == SIZE);
- assert(d.length() == SIZE);
- int j;
- for (j = 1; j <= SIZE; ++j) assert(a.contains(j));
- assert(a[SIZE+1] = -1);
-
- for (j = 1; j <= SIZE; ++j) assert(b.contains(j));
-
- for (j = 1; j <= SIZE; ++j) assert(b[a[j]] == j);
- for (j = 1; j <= SIZE; ++j) assert(a[b[j]] == j);
-
- for (j = 1; j <= SIZE; ++j) assert((c[j] & 1) != 0);
-
- for (j = 1; j <= SIZE; ++j) assert(d[j] == j);
-
- d.del(1);
- assert(!d.contains(1));
- for (j = 1; j <= SIZE; ++j) d.del(j);
- assert(d.empty());
-
- assert(a.OK());
- assert(b.OK());
- assert(c.OK());
- assert(d.OK());
-
-}
-
-#include "iCHMap.h"
-
-void CHtest()
-{
- intintCHMap a(-1, SIZE);
- add(nums, perm, a);
- intintCHMap b(-1, SIZE);
- add(perm, nums, b);
- intintCHMap c(-1, SIZE);
- add(perm, odds, c);
- intintCHMap d(a);
- add(nums, nums, d);
- cout << "a: "; printMap(a);
- cout << "b: "; printMap(b);
- cout << "c: "; printMap(c);
- cout << "d: "; printMap(d);
- assert(a.length() == SIZE);
- assert(b.length() == SIZE);
- assert(c.length() == SIZE);
- assert(d.length() == SIZE);
- int j;
- for (j = 1; j <= SIZE; ++j) assert(a.contains(j));
- assert(a[SIZE+1] = -1);
-
- for (j = 1; j <= SIZE; ++j) assert(b.contains(j));
-
- for (j = 1; j <= SIZE; ++j) assert(b[a[j]] == j);
- for (j = 1; j <= SIZE; ++j) assert(a[b[j]] == j);
-
- for (j = 1; j <= SIZE; ++j) assert((c[j] & 1) != 0);
-
- for (j = 1; j <= SIZE; ++j) assert(d[j] == j);
-
- d.del(1);
- assert(!d.contains(1));
- for (j = 1; j <= SIZE; ++j) d.del(j);
- assert(d.empty());
-
- assert(a.OK());
- assert(b.OK());
- assert(c.OK());
- assert(d.OK());
-
-}
-
-#include "iAVLMap.h"
-
-void AVLtest()
-{
- intintAVLMap a(-1);
- add(nums, perm, a);
- intintAVLMap b(-1);
- add(perm, nums, b);
- intintAVLMap c(-1);
- add(perm, odds, c);
- intintAVLMap d(a);
- add(nums, nums, d);
- cout << "a: "; printMap(a);
- cout << "b: "; printMap(b);
- cout << "c: "; printMap(c);
- cout << "d: "; printMap(d);
- assert(a.length() == SIZE);
- assert(b.length() == SIZE);
- assert(c.length() == SIZE);
- assert(d.length() == SIZE);
- int j;
- for (j = 1; j <= SIZE; ++j) assert(a.contains(j));
- assert(a[SIZE+1] = -1);
-
- for (j = 1; j <= SIZE; ++j) assert(b.contains(j));
-
- for (j = 1; j <= SIZE; ++j) assert(b[a[j]] == j);
- for (j = 1; j <= SIZE; ++j) assert(a[b[j]] == j);
-
- for (j = 1; j <= SIZE; ++j) assert((c[j] & 1) != 0);
-
- for (j = 1; j <= SIZE; ++j) assert(d[j] == j);
-
- d.del(1);
- assert(!d.contains(1));
- for (j = 1; j <= SIZE; ++j) d.del(j);
- assert(d.empty());
-
- assert(a.OK());
- assert(b.OK());
- assert(c.OK());
- assert(d.OK());
-
-}
-
-#include "iRAVLMap.h"
-
-void RAVLtest()
-{
- intintRAVLMap a(-1);
- add(nums, perm, a);
- intintRAVLMap b(-1);
- add(perm, nums, b);
- intintRAVLMap c(-1);
- add(perm, odds, c);
- intintRAVLMap d(a);
- add(nums, nums, d);
- cout << "a: "; printMap(a);
- cout << "b: "; printMap(b);
- cout << "c: "; printMap(c);
- cout << "d: "; printMap(d);
- assert(a.length() == SIZE);
- assert(b.length() == SIZE);
- assert(c.length() == SIZE);
- assert(d.length() == SIZE);
- int j;
- for (j = 1; j <= SIZE; ++j) assert(a.contains(j));
- for (j = 1; j <= a.length(); ++j) assert(a.rankof(j) == j);
- for (j = 1; j <= a.length(); ++j) assert(a.key(a.ranktoPix(j)) == j);
- assert(a[SIZE+1] = -1);
-
- for (j = 1; j <= SIZE; ++j) assert(b.contains(j));
-
- for (j = 1; j <= SIZE; ++j) assert(b[a[j]] == j);
- for (j = 1; j <= SIZE; ++j) assert(a[b[j]] == j);
-
- for (j = 1; j <= SIZE; ++j) assert((c[j] & 1) != 0);
-
- for (j = 1; j <= SIZE; ++j) assert(d[j] == j);
-
- d.del(1);
- assert(!d.contains(1));
- for (j = 1; j <= SIZE; ++j) d.del(j);
- assert(d.empty());
-
- assert(a.OK());
- assert(b.OK());
- assert(c.OK());
- assert(d.OK());
-
-}
-
-double return_elapsed_time ( double );
-double start_timer ( );
-
-int main(int argv, char** argc)
-{
- if (argv > 1)
- {
- SIZE = abs(atoi(argc[1]));
- SIZE &= ~1;
- }
- else
- SIZE = 100;
- nums = new int[SIZE];
- odds = new int[SIZE];
- perm = new int[SIZE];
- makenums();
- makeodds();
- makeperm();
- start_timer();
- cout << "Splaytest\n"; Splaytest();
- if (ptimes) cout << "\ntime = " << return_elapsed_time(0.0) << "\n";
- start_timer();
- cout << "VHtest\n"; VHtest();
- if (ptimes) cout << "\ntime = " << return_elapsed_time(0.0) << "\n";
- start_timer();
- cout << "CHtest\n"; CHtest();
- if (ptimes) cout << "\ntime = " << return_elapsed_time(0.0) << "\n";
- start_timer();
- cout << "AVLtest\n"; AVLtest();
- if (ptimes) cout << "\ntime = " << return_elapsed_time(0.0) << "\n";
- start_timer();
- cout << "RAVLtest\n"; RAVLtest();
- if (ptimes) cout << "\ntime = " << return_elapsed_time(0.0) << "\n";
-
- return 0;
-}
diff --git a/contrib/libg++/libg++/tests/tMap.exp b/contrib/libg++/libg++/tests/tMap.exp
deleted file mode 100644
index 2d745ee0fa3e..000000000000
--- a/contrib/libg++/libg++/tests/tMap.exp
+++ /dev/null
@@ -1,25 +0,0 @@
-Splaytest
-a: [(1, 65) (2, 3) (3, 96) (4, 36) (5, 74) (6, 9) (7, 70) (8, 97) (9, 1) (10, 24) (11, 100) (12, 17) (13, 61) (14, 52) (15, 19) (16, 84) (17, 73) (18, 34) (19, 26) (20, 22) ...]
-b: [(1, 9) (2, 31) (3, 2) (4, 32) (5, 62) (6, 30) (7, 87) (8, 98) (9, 6) (10, 49) (11, 44) (12, 47) (13, 50) (14, 76) (15, 56) (16, 57) (17, 12) (18, 54) (19, 15) (20, 83) ...]
-c: [(1, 189) (2, 195) (3, 197) (4, 57) (5, 125) (6, 135) (7, 149) (8, 129) (9, 69) (10, 9) (11, 163) (12, 59) (13, 171) (14, 137) (15, 141) (16, 35) (17, 75) (18, 49) (19, 173) (20, 93) ...]
-d: [(1, 1) (2, 2) (3, 3) (4, 4) (5, 5) (6, 6) (7, 7) (8, 8) (9, 9) (10, 10) (11, 11) (12, 12) (13, 13) (14, 14) (15, 15) (16, 16) (17, 17) (18, 18) (19, 19) (20, 20) ...]
-VHtest
-a: [(72, 66) (77, 99) (13, 61) (3, 96) (26, 63) (16, 84) (39, 54) (29, 50) (52, 32) (42, 94) (65, 47) (55, 45) (78, 91) (91, 55) (9, 1) (22, 57) (35, 90) (48, 67) (61, 71) (74, 89) ...]
-b: [(72, 41) (77, 43) (85, 38) (3, 2) (26, 19) (16, 57) (39, 23) (29, 53) (52, 14) (42, 21) (65, 1) (55, 91) (78, 95) (91, 78) (9, 6) (22, 20) (35, 27) (48, 33) (61, 13) (13, 50) ...]
-c: [(72, 53) (77, 133) (85, 45) (3, 197) (26, 101) (16, 35) (39, 77) (29, 83) (52, 117) (42, 121) (65, 3) (55, 89) (78, 97) (91, 31) (9, 69) (22, 105) (35, 63) (48, 167) (61, 181) (13, 171) ...]
-d: [(72, 72) (13, 13) (3, 3) (26, 26) (16, 16) (39, 39) (29, 29) (52, 52) (42, 42) (65, 65) (55, 55) (78, 78) (91, 91) (12, 12) (9, 9) (22, 22) (35, 35) (48, 48) (61, 61) (74, 74) ...]
-CHtest
-a: [(72, 66) (36, 25) (85, 92) (49, 10) (13, 61) (3, 96) (98, 8) (62, 5) (26, 63) (16, 84) (75, 51) (39, 54) (29, 50) (88, 81) (52, 32) (42, 94) (6, 9) (65, 47) (55, 45) (19, 26) ...]
-b: [(72, 41) (36, 4) (49, 64) (13, 50) (85, 38) (3, 2) (62, 90) (98, 82) (26, 19) (16, 57) (75, 80) (39, 23) (29, 53) (88, 100) (52, 14) (6, 30) (42, 21) (65, 1) (55, 91) (19, 15) ...]
-c: [(72, 53) (36, 161) (49, 67) (13, 171) (85, 45) (3, 197) (62, 177) (98, 95) (26, 101) (16, 35) (75, 25) (39, 77) (29, 83) (88, 47) (52, 117) (6, 135) (42, 121) (65, 3) (55, 89) (19, 173) ...]
-d: [(36, 36) (72, 72) (13, 13) (49, 49) (85, 85) (3, 3) (26, 26) (62, 62) (98, 98) (16, 16) (39, 39) (75, 75) (29, 29) (52, 52) (88, 88) (6, 6) (42, 42) (65, 65) (19, 19) (55, 55) ...]
-AVLtest
-a: [(1, 65) (2, 3) (3, 96) (4, 36) (5, 74) (6, 9) (7, 70) (8, 97) (9, 1) (10, 24) (11, 100) (12, 17) (13, 61) (14, 52) (15, 19) (16, 84) (17, 73) (18, 34) (19, 26) (20, 22) ...]
-b: [(1, 9) (2, 31) (3, 2) (4, 32) (5, 62) (6, 30) (7, 87) (8, 98) (9, 6) (10, 49) (11, 44) (12, 47) (13, 50) (14, 76) (15, 56) (16, 57) (17, 12) (18, 54) (19, 15) (20, 83) ...]
-c: [(1, 189) (2, 195) (3, 197) (4, 57) (5, 125) (6, 135) (7, 149) (8, 129) (9, 69) (10, 9) (11, 163) (12, 59) (13, 171) (14, 137) (15, 141) (16, 35) (17, 75) (18, 49) (19, 173) (20, 93) ...]
-d: [(1, 1) (2, 2) (3, 3) (4, 4) (5, 5) (6, 6) (7, 7) (8, 8) (9, 9) (10, 10) (11, 11) (12, 12) (13, 13) (14, 14) (15, 15) (16, 16) (17, 17) (18, 18) (19, 19) (20, 20) ...]
-RAVLtest
-a: [(1, 65) (2, 3) (3, 96) (4, 36) (5, 74) (6, 9) (7, 70) (8, 97) (9, 1) (10, 24) (11, 100) (12, 17) (13, 61) (14, 52) (15, 19) (16, 84) (17, 73) (18, 34) (19, 26) (20, 22) ...]
-b: [(1, 9) (2, 31) (3, 2) (4, 32) (5, 62) (6, 30) (7, 87) (8, 98) (9, 6) (10, 49) (11, 44) (12, 47) (13, 50) (14, 76) (15, 56) (16, 57) (17, 12) (18, 54) (19, 15) (20, 83) ...]
-c: [(1, 189) (2, 195) (3, 197) (4, 57) (5, 125) (6, 135) (7, 149) (8, 129) (9, 69) (10, 9) (11, 163) (12, 59) (13, 171) (14, 137) (15, 141) (16, 35) (17, 75) (18, 49) (19, 173) (20, 93) ...]
-d: [(1, 1) (2, 2) (3, 3) (4, 4) (5, 5) (6, 6) (7, 7) (8, 8) (9, 9) (10, 10) (11, 11) (12, 12) (13, 13) (14, 14) (15, 15) (16, 16) (17, 17) (18, 18) (19, 19) (20, 20) ...]
diff --git a/contrib/libg++/libg++/tests/tMap.inp b/contrib/libg++/libg++/tests/tMap.inp
deleted file mode 100644
index e69de29bb2d1..000000000000
--- a/contrib/libg++/libg++/tests/tMap.inp
+++ /dev/null
diff --git a/contrib/libg++/libg++/tests/tObstack.cc b/contrib/libg++/libg++/tests/tObstack.cc
deleted file mode 100644
index f1914021404d..000000000000
--- a/contrib/libg++/libg++/tests/tObstack.cc
+++ /dev/null
@@ -1,80 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-
-/*
- a little test of Obstacks
- Thu Feb 18 11:16:28 1988 Doug Lea (dl at rocky.oswego.edu)
-*/
-
-#include <assert.h>
-
-#define tassert(ex) {if ((ex)) cerr << #ex << "\n"; \
- else _assert(#ex, __FILE__,__LINE__); }
-
-#include <stream.h>
-#include <Obstack.h>
-#include <stddef.h>
-#include <ctype.h>
-
-int
-main()
-{
- char* s[10000];
- int n = 0;
- int got_one = 0;
- Obstack os;
- char c;
-
- s[n++] = (char *)os.copy("\nunique words:");
- assert(os.OK());
- assert(os.contains(s[0]));
-
- cout << "enter anything at all, end with an EOF(^D)\n";
-
- while (cin.good() && n < 10000)
- {
- if (cin.get(c) && isalnum(c))
- {
- got_one = 1;
- os.grow(c);
- }
- else if (got_one)
- {
- char* current = (char *)os.finish(0);
- for (int i = 0; i < n; ++i) // stupid, but this is only a test.
- {
- if (strcmp(s[i], current) == 0)
- {
- os.free(current);
- current = 0;
- break;
- }
- }
- if (current != 0)
- s[n++] = current;
- got_one = 0;
- }
- }
- assert(os.OK());
-
- cout << s[0] << "\n";
-
- for (int i = n - 1; i > 0; -- i)
- {
- assert(os.contains(s[i]));
- cout << s[i] << "\n";
- os.free(s[i]);
- }
-
- assert(os.OK());
- assert(os.contains(s[0]));
-
- cout << "\n\nObstack vars:\n";
- cout << "alignment_mask = " << os.alignment_mask() << "\n";
- cout << "chunk_size = " << os.chunk_size() << "\n";
- cout << "size = " << os.size() << "\n";
- cout << "room + chunk overhead = " << os.room() + 2*sizeof (char*) << "\n";
-
- cout << "\nend of test\n";
-
- return 0;
-}
diff --git a/contrib/libg++/libg++/tests/tObstack.exp b/contrib/libg++/libg++/tests/tObstack.exp
deleted file mode 100644
index 32114e82b74f..000000000000
--- a/contrib/libg++/libg++/tests/tObstack.exp
+++ /dev/null
@@ -1,32 +0,0 @@
-enter anything at all, end with an EOF(^D)
-
-unique words:
-deleted
-redundant
-with
-this
-in
-words
-the
-list
-simply
-should
-program
-The
-Obstacks
-for
-file
-test
-simple
-a
-is
-This
-
-
-Obstack vars:
-alignment_mask = 3
-chunk_size = 4080
-size = 0
-room + chunk overhead = 4064
-
-end of test
diff --git a/contrib/libg++/libg++/tests/tObstack.inp b/contrib/libg++/libg++/tests/tObstack.inp
deleted file mode 100644
index 32dea332140c..000000000000
--- a/contrib/libg++/libg++/tests/tObstack.inp
+++ /dev/null
@@ -1,5 +0,0 @@
-This is a simple test file for Obstacks The test program should
-simply list the words in this file with redundant words deleted
-This is a simple test file for Obstacks The test program should
-simply list the words in this file with redundant words deleted
-
diff --git a/contrib/libg++/libg++/tests/tPQ.cc b/contrib/libg++/libg++/tests/tPQ.cc
deleted file mode 100644
index 4cd144136ea4..000000000000
--- a/contrib/libg++/libg++/tests/tPQ.cc
+++ /dev/null
@@ -1,275 +0,0 @@
-/*
- a test file for PQs
-*/
-
-#ifdef PTIMES
-const int ptimes = 1;
-#else
-const int ptimes = 0;
-#endif
-
-#include <stream.h>
-#include <assert.h>
-#include <builtin.h>
-
-#define tassert(ex) { cerr << #ex; \
- if ((ex)) cerr << " OK\n"; \
- else cerr << " Fail\n"; }
-
-#include "iPQ.h"
-
-
-int SIZE;
-
-int *nums;
-int *odds;
-int *dups;
-
-void add(int x[], intPQ& a)
-{
- for (int i = 0; i < SIZE; ++i) a.enq(x[i]);
-}
-
-#include <MLCG.h>
-
-MLCG randgen;
-
-void permute(int x[])
-{
- for (int i = 1; i < SIZE; ++i)
- {
- int j = randgen.asLong() % (i + 1);
- int tmp = x[i]; x[i] = x[j]; x[j] = tmp;
- }
-}
-
-void makenums()
-{
- for (int i = 0; i < SIZE; ++i) nums[i] = i + 1;
- permute(nums);
-}
-
-void makeodds()
-{
- for (int i = 0; i < SIZE; ++i) odds[i] = 2 * i + 1;
- permute(odds);
-}
-
-void makedups()
-{
- for (int i = 0; i < SIZE; i += 2) dups[i] = dups[i+1] = i/2 + 1;
- permute(dups);
-}
-
-void printPQ(intPQ& a)
-{
- int maxprint = 20;
- cout << "[";
- int k = 0;
- Pix i;
- for (i = a.first(); i != 0 && k < maxprint; a.next(i),++k)
- cout << a(i) << " ";
- if (i != 0) cout << "...]\n";
- else cout << "]\n";
-}
-
-#include "iXPPQ.h"
-
-void XPtest()
-{
- intXPPQ a(SIZE);
- add(nums, a);
- intXPPQ b(SIZE);
- add(odds, b);
- intXPPQ c(SIZE);
- add(dups, c);
- intXPPQ d(a);
- add(nums, d);
- cout << "a: "; printPQ(a);
- cout << "b: "; printPQ(b);
- cout << "c: "; printPQ(c);
- cout << "d: "; printPQ(d);
- assert(a.length() == SIZE);
- assert(b.length() == SIZE);
- assert(c.length() == SIZE);
- assert(d.length() == SIZE*2);
- assert(a.front() == 1);
- assert(b.front() == 1);
- assert(c.front() == 1);
- assert(d.front() == 1);
- int j;
- for (j = 1; j <= SIZE; ++j) assert(a.contains(j));
- d.del_front();
- assert(d.front() == 1);
- for (j = 1; j <= SIZE; ++j) assert(a.deq() == j);
- assert(a.empty());
- for (j = 1; j <= SIZE*2; j+=2) assert(b.deq() == j);
- assert(b.empty());
- Pix* indices = new Pix [SIZE];
- int m = 0;
- for (Pix i = c.first(); i != 0; c.next(i), c.next(i)) indices[m++] = i;
- assert(m == SIZE/2);
- while (--m >= 0) c.del(indices[m]);
- assert(c.length() == SIZE/2);
- int last = -1;
- j = 0;
- while (!c.empty())
- {
- int current = c.deq();
- assert(last <= current);
- last = current;
- ++j;
- }
- assert(j == SIZE/2);
-
- delete [] indices;
- d.clear();
- assert(d.empty());
- assert(a.OK());
- assert(b.OK());
- assert(c.OK());
- assert(d.OK());
-}
-
-#include "iPHPQ.h"
-
-void PHtest()
-{
- intPHPQ a(SIZE);
- add(nums, a);
- intPHPQ b(SIZE);
- add(odds, b);
- intPHPQ c(SIZE);
- add(dups, c);
- intPHPQ d(a);
- add(nums, d);
- cout << "a: "; printPQ(a);
- cout << "b: "; printPQ(b);
- cout << "c: "; printPQ(c);
- cout << "d: "; printPQ(d);
- assert(a.length() == SIZE);
- assert(b.length() == SIZE);
- assert(c.length() == SIZE);
- assert(d.length() == SIZE*2);
- assert(a.front() == 1);
- assert(b.front() == 1);
- assert(c.front() == 1);
- assert(d.front() == 1);
- int j;
- for (j = 1; j <= SIZE; ++j) assert(a.contains(j));
- d.del_front();
- assert(d.front() == 1);
- for (j = 1; j <= SIZE; ++j) assert(a.deq() == j);
- assert(a.empty());
- for (j = 1; j <= SIZE*2; j+=2) assert(b.deq() == j);
- assert(b.empty());
- Pix* indices = new Pix [SIZE];
- int m = 0;
- for (Pix i = c.first(); i != 0; c.next(i), c.next(i)) indices[m++] = i;
- assert(m == SIZE/2);
- while (--m >= 0) c.del(indices[m]);
- assert(c.length() == SIZE/2);
- int last = -1;
- j = 0;
- while (!c.empty())
- {
- int current = c.deq();
- assert(last <= current);
- last = current;
- ++j;
- }
- assert(j == SIZE/2);
- delete [] indices;
- d.clear();
- assert(d.empty());
- assert(a.OK());
- assert(b.OK());
- assert(c.OK());
- assert(d.OK());
-}
-
-#include "iSplayPQ.h"
-
-void Splaytest()
-{
- intSplayPQ a;
- add(nums, a);
- intSplayPQ b;
- add(odds, b);
- intSplayPQ c;
- add(dups, c);
- intSplayPQ d(a);
- add(nums, d);
- cout << "a: "; printPQ(a);
- cout << "b: "; printPQ(b);
- cout << "c: "; printPQ(c);
- cout << "d: "; printPQ(d);
- assert(a.length() == SIZE);
- assert(b.length() == SIZE);
- assert(c.length() == SIZE);
- assert(d.length() == SIZE*2);
- assert(a.front() == 1);
- assert(b.front() == 1);
- assert(c.front() == 1);
- assert(d.front() == 1);
- int j;
- for (j = 1; j <= SIZE; ++j) assert(a.contains(j));
- d.del_front();
- assert(d.front() == 1);
- for (j = 1; j <= SIZE; ++j) assert(a.deq() == j);
- assert(a.empty());
- for (j = 1; j <= SIZE*2; j+=2) assert(b.deq() == j);
- assert(b.empty());
- Pix* indices = new Pix[SIZE];
- int m = 0;
- for (Pix i = c.first(); i != 0; c.next(i), c.next(i)) indices[m++] = i;
- assert(m == SIZE/2);
- while (--m >= 0) c.del(indices[m]);
- assert(c.length() == SIZE/2);
- int last = -1;
- j = 0;
- while (!c.empty())
- {
- int current = c.deq();
- assert(last <= current);
- last = current;
- ++j;
- }
- assert(j == SIZE/2);
- delete [] indices;
- d.clear();
- assert(d.empty());
- assert(a.OK());
- assert(b.OK());
- assert(c.OK());
- assert(d.OK());
-}
-
-
-
-int main(int argv, char** argc)
-{
- if (argv > 1)
- {
- SIZE = abs(atoi(argc[1]));
- SIZE &= ~1;
- }
- else
- SIZE = 100;
- nums = new int[SIZE];
- odds = new int[SIZE];
- dups = new int[SIZE];
- makenums();
- makeodds();
- makedups();
- start_timer();
- cout << "Splaytest\n"; Splaytest();
- if (ptimes) cout << "\ntime = " << return_elapsed_time(0.0) << "\n";
- start_timer();
- cout << "PHtest\n"; PHtest();
- if (ptimes) cout << "\ntime = " << return_elapsed_time(0.0) << "\n";
- start_timer();
- cout << "XPtest\n"; XPtest();
- if (ptimes) cout << "\ntime = " << return_elapsed_time(0.0) << "\n";
- return 0;
-}
diff --git a/contrib/libg++/libg++/tests/tPQ.exp b/contrib/libg++/libg++/tests/tPQ.exp
deleted file mode 100644
index f2d8e1156e00..000000000000
--- a/contrib/libg++/libg++/tests/tPQ.exp
+++ /dev/null
@@ -1,15 +0,0 @@
-Splaytest
-a: [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...]
-b: [1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 ...]
-c: [1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 ...]
-d: [1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 ...]
-PHtest
-a: [2 99 76 81 41 35 14 19 95 74 7 38 91 59 87 6 96 93 51 53 ...]
-b: [129 5 191 71 147 17 139 193 1 47 199 33 121 103 37 167 145 67 51 43 ...]
-c: [47 27 20 28 31 15 50 46 39 29 1 1 4 43 11 8 2 7 9 26 ...]
-d: [2 99 76 81 41 35 14 19 95 74 7 38 91 59 87 6 96 93 51 53 ...]
-XPtest
-a: [1 3 2 7 4 5 18 29 12 6 10 8 17 21 26 34 36 15 16 19 ...]
-b: [1 5 3 7 13 15 9 41 27 21 23 19 35 29 11 85 51 65 49 47 ...]
-c: [1 2 1 3 5 2 8 4 5 6 14 3 9 11 10 7 15 12 6 28 ...]
-d: [1 1 2 3 3 2 6 9 5 6 4 5 7 18 8 29 15 7 16 19 ...]
diff --git a/contrib/libg++/libg++/tests/tPQ.inp b/contrib/libg++/libg++/tests/tPQ.inp
deleted file mode 100644
index e69de29bb2d1..000000000000
--- a/contrib/libg++/libg++/tests/tPQ.inp
+++ /dev/null
diff --git a/contrib/libg++/libg++/tests/tPlex.cc b/contrib/libg++/libg++/tests/tPlex.cc
deleted file mode 100644
index cd3f90ad6843..000000000000
--- a/contrib/libg++/libg++/tests/tPlex.cc
+++ /dev/null
@@ -1,719 +0,0 @@
-/*
- test of Plexes
-*/
-
-#include <stream.h>
-#include <assert.h>
-#include "iPlex.h"
-
-#define tassert(ex) {if ((ex)) cerr << #ex << "\n"; \
- else _assert(#ex, __FILE__,__LINE__); }
-
-
-void printplex(intPlex& a)
-{
- cout << "[";
- int maxprint = 20;
- int k = 0;
- int i;
- for (i = a.low(); i < a.fence() && k < maxprint; ++i, ++k)
- cout << a[i] << " ";
- if (i < a.fence()) cout << "]\n";
- else cout << "...]\n";
-}
-
-#include "iFPlex.h"
-
-void FPtest ()
-{
- intFPlex p(50);
- assert(p.OK());
- assert (p.empty());
-
- p.add_high (1000);
- Pix px = p.index_to_Pix(0);
- assert (p.length() == 1);
- assert(p.owns(px));
- assert(p(px) == 1000);
- assert(p.Pix_to_index(px) == 0);
-
- p.reset_low (10);
- assert (p.length() == 1);
- assert (p.low() == 10);
- assert (p[10] == 1000);
- assert(p(px) == 1000);
- assert(p.Pix_to_index(px) == 10);
- assert(p.index_to_Pix(10) == px);
- assert(p.OK());
-
- int h = p.high_element();
- int l = p.low_element();
- assert ( (h==l) && (h==1000));
- p.fill(222);
- assert(p(px) == 222);
-
- p.del_high();
- assert(p.empty());
- assert(!p.owns(px));
-
- intFPlex q(10, -50);
- q.add_low (-1000);
- assert (q[9] == -1000);
- q[9] = 21;
- assert(!q.valid(10));
- assert(q.OK());
-
- q.del_low();
- assert (q.empty());
-
- p.reset_low (0);
- q.reset_low (0);
-
- int i;
- for (i = 0; i < 50; i++)
- {
- if (i % 2 == 0)
- {
- p.add_high (i);
- assert (p.high() == i/2);
- p[i/2] = p[i/4];
- assert (p.high_element() == i/4);
- p[i/2] = i/2;
- }
- else
- {
- q.add_low (-i);
- int ii = - (i/2) -1;
- assert (q.low() == ii);
- q.low_element() = ii;
- assert (q[ii] == ii);
- }
- }
-
- cout << "q:"; printplex(q);
- assert (p.length() == 25);
- assert (q.length() == 25);
-
- assert(p.valid(0));
- assert(p.owns(px));
-
- px = p.first();
- i = 0;
- for (int it1 = p.low(); it1 < p.fence(); p.next(it1))
- {
- assert (p[it1] == it1);
- assert(p(px) == p[it1]);
- p.next(px);
- ++i;
- }
- assert(px == 0);
- px = q.last();
- for (int it1 = q.high(); it1 > q.ecnef(); q.prev(it1))
- {
- assert (q[it1] == it1);
- assert(p(px) == q[it1]);
- q.prev(px);
- ++i;
- }
- assert(i == 50);
- q.reset_low (0);
- assert (p.high() == q.high());
- assert(p.low() == 0);
-
- intFPlex p1 = p;
- intFPlex p2 (p);
- intFPlex p3 = p2;
- assert (p1.length() == 25);
- assert (p1.high() == 24);
- assert(p1.low() == 0);
- assert(p.OK());
- assert(p1.OK());
- assert(p2.OK());
- assert(p3.OK());
-
- i = 0;
- for (int it5 = p.low(); it5 < p.fence(); p.next(it5))
- {
- assert(p1.low() == it5);
- p1.del_low();
- assert(!p1.valid(it5));
- p2.del_high ();
- p3 [it5] = -it5;
- ++i;
- }
- assert(i == 25);
-
- assert(p.OK());
- assert(p1.OK());
- assert(p2.OK());
- assert(p3.OK());
- assert (p1.empty());
- assert (p2.empty());
-
- p3.append (p);
- assert(p3.OK());
-
- p1.prepend (p);
- p2.append (p);
- assert(p1.length() == p.length());
- assert(p1.length() == p2.length());
- assert(p1.OK());
- assert(p2.OK());
-
- p2.clear();
- assert(p2.OK());
- assert(p2.empty());
- p2 = p1;
- assert(p2.OK());
-
- p1 = p;
- assert(p1.OK());
- p1.reset_low (p1.low_element());
- for (int it6 = p1.low(); it6 < p1.fence(); it6++)
- {
- assert (p1[it6] == it6);
- }
- p1[13] = 1313;
- p1[7] = -7777;
- p1[24] = 24242424;
- assert(!p1.valid(25));
- assert(!p1.valid(-1));
- assert(p1.OK());
-
-}
-
-#include "iXPlex.h"
-
-void XPtest ()
-{
- intXPlex p(3);
- assert(p.OK());
- assert (p.empty());
-
- p.add_high (1000);
- Pix px = p.index_to_Pix(0);
- assert(p.Pix_to_index(px) == 0);
- assert (p.length() == 1);
- assert(p.owns(px));
- assert(p(px) == 1000);
-
- p.reset_low(10);
- assert (p.length() == 1);
- assert (p.low() == 10);
- assert (p[10] == 1000);
- assert(p(px) == 1000);
- assert(p.Pix_to_index(px) == 10);
- assert(p.index_to_Pix(10) == px);
- assert(p.OK());
-
- int h = p.high_element();
- int l = p.low_element();
- assert ( (h==l) && (h==1000));
- p.fill(222);
- assert(p(px) == 222);
-
- p.del_high();
- assert(p.empty());
- assert(!p.owns(px));
-
- p.add_low(-1000);
- assert (p[9] == -1000);
- p[9] = 21;
- assert(!p.valid(10));
- assert(p.OK());
-
- p.del_low();
- assert (p.empty());
- p.reset_low (0);
-
- int i;
- for (i = 0; i < 50; i++)
- {
- if (i % 2 == 0)
- {
- p.add_high (i);
- assert (p.high() == i/2);
- p[i/2] = p[i/4];
- assert (p.high_element() == i/4);
- p[i/2] = i/2;
- }
- else
- {
- p.add_low (-i);
- int ii = - (i/2) -1;
- assert (p.low() == ii);
- p.low_element() = ii;
- assert (p[ii] == ii);
- }
- }
-
- assert (p.length() == 50);
- cout << "p:"; printplex(p);
-
- assert(p.valid(0));
- assert(p.owns(px));
-
- px = p.first();
- i = 0;
- for (int it1 = p.low(); it1 < p.fence(); p.next(it1))
- {
- assert (p[it1] == it1);
- assert(p(px) == p[it1]);
- p.next(px);
- ++i;
- }
- assert(i == 50);
- assert(px == 0);
- p.reset_low (0);
- assert (p.high() == 49);
- assert(p.low() == 0);
-
- i = 0;
- for (int it2 = p.high(); it2 > p.ecnef(); p.prev(it2))
- {
- assert ( p[it2] == it2-25 );
- ++i;
- }
- assert(i == 50);
- assert(p.OK());
-
- intXPlex p1 = p;
- intXPlex p2 (p);
- intXPlex p3 = p2;
- assert (p1.length() == 50);
- assert (p1.high() == 49);
- assert(p1.low() == 0);
- assert(p.OK());
- assert(p1.OK());
- assert(p2.OK());
- assert(p3.OK());
-
- i = 0;
- for (int it5 = p.low(); it5 < p.fence(); p.next(it5))
- {
- assert(p1.low() == it5);
- p1.del_low();
- assert(!p1.valid(it5));
- p2.del_high ();
- p3 [it5] = -it5;
- ++i;
- }
- assert(i == 50);
-
- assert(p.OK());
- assert(p1.OK());
- assert(p2.OK());
- assert(p3.OK());
- assert (p1.empty());
- assert (p2.empty());
-
- p3.append (p);
- assert(p3.OK());
-
- p1.prepend (p);
- p2.append (p);
- assert(p1.length() == p.length());
- assert(p1.length() == p2.length());
- assert(p1.OK());
- assert(p2.OK());
-
- p2.clear();
- assert(p2.OK());
- assert(p2.empty());
- p2 = p1;
- assert(p2.OK());
-
-
- p1 = p;
- assert(p1.OK());
- p1.reset_low(p1.low_element());
- p1 [13] = 1313;
- p1 [-7] = -7777;
- p1 [-25] = -252525;
- p1 [24] = 24242424;
- assert(!p1.valid(25));
- assert(!p1.valid(-26));
- assert(p1.OK());
-
- p1 = p;
- p1.reset_low (p1.low_element());
- for (int it6 = p1.low(); it6 < p1.fence(); it6++)
- {
- assert (p1[it6] == it6);
- }
- p1.reverse();
- i = p1.high();
- for (int it6 = p1.low(); it6 < p1.fence(); it6++)
- {
- assert (p1[it6] == i);
- --i;
- }
- assert(p1.OK());
-
-}
-
-#include "iMPlex.h"
-
-void MPtest ()
-{
- intMPlex p(3);
- assert(p.OK());
- assert (p.empty());
-
- p.add_high (1000);
- Pix px = p.index_to_Pix(0);
- assert (p.length() == 1);
- assert(p.owns(px));
- assert(p(px) == 1000);
- assert(p.Pix_to_index(px) == 0);
-
- p.reset_low (10);
- assert (p.length() == 1);
- assert (p.low() == 10);
- assert (p[10] == 1000);
- assert(p(px) == 1000);
- assert(p.Pix_to_index(px) == 10);
- assert(p.index_to_Pix(10) == px);
- assert(p.OK());
-
- int h = p.high_element();
- int l = p.low_element();
- assert ( (h==l) && (h==1000));
- p.fill(222);
- assert(p(px) == 222);
-
- p.del_high();
- assert(p.empty());
- assert(!p.owns(px));
-
- p.add_low (-1000);
- assert (p[9] == -1000);
- p[9] = 21;
- assert(!p.valid(10));
- assert(p.OK());
-
- p.del_low();
- assert (p.empty());
- p.reset_low (0);
-
- int i;
- for (i = 0; i < 50; i++)
- {
- if (i % 2 == 0)
- {
- p.add_high (i);
- assert (p.high() == i/2);
- p[i/2] = p[i/4];
- assert (p.high_element() == i/4);
- p[i/2] = i/2;
- }
- else
- {
- p.add_low (-i);
- int ii = - (i/2) -1;
- assert (p.low() == ii);
- p.low_element() = ii;
- assert (p[ii] == ii);
- }
- }
-
- cout << "p:"; printplex(p);
- assert (p.length() == 50);
- assert (p.count() == 50);
-
- assert(p.available() == 0);
- assert(p.valid(0));
- px = &p[0];
- assert(p.owns(px));
- p.del_index(0);
- assert(p.count() == 49);
- assert(p.available() == 1);
- assert(p.unused_index() == 0);
- assert(!p.valid(0));
- assert(!p.owns(px));
- p.undel_index(0);
- p[0] = 0;
- assert(p.count() == 50);
- assert(p.available() == 0);
- assert(p.valid(0));
- assert(p.owns(px));
- assert(p.OK());
-
- p.del_index(0);
-
- px = p.first();
- i = 0;
- for (int it1 = p.low(); it1 < p.fence(); p.next(it1))
- {
- assert (p[it1] == it1);
- assert(p(px) == p[it1]);
- p.next(px);
- ++i;
- }
- assert(i == 49);
- assert(px == 0);
- p.reset_low (0);
- assert (p.high() == 49);
- assert(p.low() == 0);
-
- i = 0;
- for (int it2 = p.high(); it2 > p.ecnef(); p.prev(it2))
- {
- assert ( p[it2] == it2-25 );
- assert(px != &p[it2]);
- ++i;
- }
- assert(i == 49);
- assert(p.OK());
-
- p.del_index(1);
- p.del_index(2);
- assert (p.OK());
- assert (p.count() == 47);
-
- intMPlex p1 = p;
- intMPlex p2 (p);
- intMPlex p3 = p2;
- assert (p1.length() == 50);
- assert (p1.count() == 47);
- assert (p1.high() == 49);
- assert(p1.low() == 0);
- assert(p.OK());
- assert(p1.OK());
- assert(p2.OK());
- assert(p3.OK());
-
- i = 0;
- for (int it5 = p.low(); it5 < p.fence(); p.next(it5))
- {
- assert(p1.low() == it5);
- p1.del_low();
- assert(!p1.valid(it5));
- p2.del_high ();
- p3 [it5] = -it5;
- ++i;
- }
- assert(i == 47);
-
- assert(p.OK());
- assert(p1.OK());
- assert(p2.OK());
- assert(p3.OK());
- assert (p1.empty());
- assert (p2.empty());
-
- p3.append (p);
- assert(p3.OK());
-
- p1.prepend (p);
- p2.append (p);
- assert(p1.count() == p.count());
- assert(p1.count() == p2.count());
- assert(p1.OK());
- assert(p2.OK());
-
- p2.clear();
- assert(p2.OK());
- assert(p2.empty());
- p2 = p1;
- assert(p2.OK());
-
- p1 = p;
- p1.del_index(3);
- p1.del_index(4);
- p1.del_index(5);
- p1.del_index(6);
- p1.del_index(7);
- p1.del_index(8);
- p1.undel_index(6);
- p1[6] = 6666;
- p1[9] = 9999;
- p1[0] = 0;
- assert(p1[6] == 6666);
- assert(!p1.valid(5));
- assert(!p1.valid(7));
- p1.del_low();
- assert(p1.low() == 6);
- assert(p1.OK());
-
-}
-
-#include "iRPlex.h"
-
-void RPtest ()
-{
- intRPlex p(3);
- assert(p.OK());
- assert (p.empty());
-
- p.add_high (1000);
- Pix px = p.index_to_Pix(0);
- assert(p.Pix_to_index(px) == 0);
- assert (p.length() == 1);
- assert(p.owns(px));
- assert(p(px) == 1000);
-
- p.reset_low(10);
- assert (p.length() == 1);
- assert (p.low() == 10);
- assert (p[10] == 1000);
- assert(p(px) == 1000);
- assert(p.Pix_to_index(px) == 10);
- assert(p.index_to_Pix(10) == px);
- assert(p.OK());
-
- int h = p.high_element();
- int l = p.low_element();
- assert ( (h==l) && (h==1000));
- p.fill(222);
- assert(p(px) == 222);
-
- p.del_high();
- assert(p.empty());
- assert(!p.owns(px));
-
- p.add_low(-1000);
- assert (p[9] == -1000);
- p[9] = 21;
- assert(!p.valid(10));
- assert(p.OK());
-
- p.del_low();
- assert (p.empty());
- p.reset_low (0);
-
- int i;
- for (i = 0; i < 50; i++)
- {
- if (i % 2 == 0)
- {
- p.add_high (i);
- assert (p.high() == i/2);
- p[i/2] = p[i/4];
- assert (p.high_element() == i/4);
- p[i/2] = i/2;
- }
- else
- {
- p.add_low (-i);
- int ii = - (i/2) -1;
- assert (p.low() == ii);
- p.low_element() = ii;
- assert (p[ii] == ii);
- }
- }
-
- assert (p.length() == 50);
- cout << "p:"; printplex(p);
-
- assert(p.valid(0));
- assert(p.owns(px));
-
- px = p.first();
- i = 0;
- for (int it1 = p.low(); it1 < p.fence(); p.next(it1))
- {
- assert (p[it1] == it1);
- assert(p(px) == p[it1]);
- p.next(px);
- ++i;
- }
- assert(i == 50);
- assert(px == 0);
- p.reset_low (0);
- assert (p.high() == 49);
- assert(p.low() == 0);
-
- i = 0;
- for (int it2 = p.high(); it2 > p.ecnef(); p.prev(it2))
- {
- assert ( p[it2] == it2-25 );
- ++i;
- }
- assert(i == 50);
- assert(p.OK());
-
- intRPlex p1 = p;
- intRPlex p2 (p);
- intRPlex p3 = p2;
- assert (p1.length() == 50);
- assert (p1.high() == 49);
- assert(p1.low() == 0);
- assert(p.OK());
- assert(p1.OK());
- assert(p2.OK());
- assert(p3.OK());
-
- i = 0;
- for (int it5 = p.low(); it5 < p.fence(); p.next(it5))
- {
- assert(p1.low() == it5);
- p1.del_low();
- assert(!p1.valid(it5));
- p2.del_high ();
- p3 [it5] = -it5;
- ++i;
- }
- assert(i == 50);
-
- assert(p.OK());
- assert(p1.OK());
- assert(p2.OK());
- assert(p3.OK());
- assert (p1.empty());
- assert (p2.empty());
-
- p3.append (p);
- assert(p3.OK());
-
- p1.prepend (p);
- p2.append (p);
- assert(p1.length() == p.length());
- assert(p1.length() == p2.length());
- assert(p1.OK());
- assert(p2.OK());
-
- p2.clear();
- assert(p2.OK());
- assert(p2.empty());
- p2 = p1;
- assert(p2.OK());
-
-
- p1 = p;
- assert(p1.OK());
- p1.reset_low(p1.low_element());
- p1 [13] = 1313;
- p1 [-7] = -7777;
- p1 [-25] = -252525;
- p1 [24] = 24242424;
- assert(!p1.valid(25));
- assert(!p1.valid(-26));
- assert(p1.OK());
-
- p1 = p;
- p1.reset_low (p1.low_element());
- for (int it6 = p1.low(); it6 < p1.fence(); it6++)
- {
- assert (p1[it6] == it6);
- }
- p1.reverse();
- i = p1.high();
- for (int it6 = p1.low(); it6 < p1.fence(); it6++)
- {
- assert (p1[it6] == i);
- --i;
- }
- assert(p1.OK());
-
-}
-
-
-main()
-{
- cout << "FPtest\n"; FPtest();
- cout << "XPtest\n"; XPtest();
- cout << "MPtest\n"; MPtest();
- cout << "RPtest\n"; RPtest();
- cout << "\nend of tests\n";
-}
diff --git a/contrib/libg++/libg++/tests/tPlex.exp b/contrib/libg++/libg++/tests/tPlex.exp
deleted file mode 100644
index 42f939f94208..000000000000
--- a/contrib/libg++/libg++/tests/tPlex.exp
+++ /dev/null
@@ -1,10 +0,0 @@
-FPtest
-q:[-25 -24 -23 -22 -21 -20 -19 -18 -17 -16 -15 -14 -13 -12 -11 -10 -9 -8 -7 -6 ]
-XPtest
-p:[-25 -24 -23 -22 -21 -20 -19 -18 -17 -16 -15 -14 -13 -12 -11 -10 -9 -8 -7 -6 ]
-MPtest
-p:[-25 -24 -23 -22 -21 -20 -19 -18 -17 -16 -15 -14 -13 -12 -11 -10 -9 -8 -7 -6 ]
-RPtest
-p:[-25 -24 -23 -22 -21 -20 -19 -18 -17 -16 -15 -14 -13 -12 -11 -10 -9 -8 -7 -6 ]
-
-end of tests
diff --git a/contrib/libg++/libg++/tests/tPlex.inp b/contrib/libg++/libg++/tests/tPlex.inp
deleted file mode 100644
index e69de29bb2d1..000000000000
--- a/contrib/libg++/libg++/tests/tPlex.inp
+++ /dev/null
diff --git a/contrib/libg++/libg++/tests/tQueue.cc b/contrib/libg++/libg++/tests/tQueue.cc
deleted file mode 100644
index 51615da020f7..000000000000
--- a/contrib/libg++/libg++/tests/tQueue.cc
+++ /dev/null
@@ -1,209 +0,0 @@
-/*
- test of Queues
-*/
-
-#ifdef PTIMES
-const int ptimes = 1;
-#else
-const int ptimes = 0;
-#endif
-
-#include <stream.h>
-#include <assert.h>
-#include "iQueue.h"
-
-#define tassert(ex) {if ((ex)) cerr << #ex << "\n"; \
- else _assert(#ex, __FILE__,__LINE__); }
-
-
-int SIZE;
-
-void print(intQueue& a)
-{
- int maxprint = 20;
- cout << "[";
- int k = 0;
- while (!a.empty() && k++ < maxprint)
- cout << a.deq() << " ";
- if (k == maxprint)
- cout << "]\n";
- else
- {
- while (!a.empty()) a.del_front();
- cout << "...]\n";
- }
- assert(a.empty());
-}
-
-#include "iXPQueue.h"
-
-void XPtest ()
-{
- intXPQueue q(SIZE/2);
- assert(q.OK());
- for (int i = 0; i < SIZE; ++i)
- q.enq(i);
- assert(q.length() == SIZE);
- assert(q.front() == 0);
- assert(!q.full());
- intXPQueue q1(SIZE*2);
- for (int i = 0; i < SIZE; ++i)
- {
- int x = q.deq();
- assert(x == i);
- q1.enq(x);
- }
- assert(q.empty());
- assert(q1.length() == SIZE);
- assert(q1.front() == 0);
- assert(q.OK());
- assert(q1.OK());
- intXPQueue q2 (q1);
- assert(q2.length() == SIZE);
- assert(q2.front() == 0);
- assert(q2.OK());
- q1.clear();
- assert(q1.empty());
- q1 = q2;
- assert(q1.length() == SIZE);
- assert(q1.front() == 0);
- assert(q1.OK());
- q1.del_front();
- assert(q1.length() == (SIZE-1));
- assert(q1.front() == 1);
- cout << "q1:"; print(q1);
- assert(q.OK());
- assert(q1.OK());
- assert(q2.OK());
-}
-
-#include "iVQueue.h"
-
-void Vtest ()
-{
- intVQueue q(SIZE);
- assert(q.OK());
- for (int i = 0; i < SIZE; ++i)
- q.enq(i);
- assert(q.length() == SIZE);
- assert(q.front() == 0);
- assert(q.full());
- intVQueue q1(SIZE);
- for (int i = 0; i < SIZE; ++i)
- {
- int x = q.deq();
- assert(x == i);
- q1.enq(x);
- }
- assert(q.empty());
- assert(q1.length() == SIZE);
- assert(q1.front() == 0);
- assert(q.OK());
- assert(q1.OK());
- intVQueue q2 (q1);
- assert(q2.length() == SIZE);
- assert(q2.front() == 0);
- assert(q2.OK());
- q1.clear();
- assert(q1.empty());
- q1 = q2;
- assert(q1.length() == SIZE);
- assert(q1.front() == 0);
- assert(q1.OK());
- q1.del_front();
- assert(q1.length() == (SIZE-1));
- assert(q1.front() == 1);
- cout << "q1:"; print(q1);
- assert(q.OK());
- assert(q1.OK());
- assert(q2.OK());
-}
-
-#include "iSLQueue.h"
-
-void SLtest ()
-{
- intXPQueue q;
- assert(q.OK());
- for (int i = 0; i < SIZE; ++i)
- q.enq(i);
- assert(q.length() == SIZE);
- assert(q.front() == 0);
- assert(!q.full());
- intXPQueue q1;
- for (int i = 0; i < SIZE; ++i)
- {
- int x = q.deq();
- assert(x == i);
- q1.enq(x);
- }
- assert(q.empty());
- assert(q1.length() == SIZE);
- assert(q1.front() == 0);
- assert(q.OK());
- assert(q1.OK());
- intXPQueue q2 (q1);
- assert(q2.length() == SIZE);
- assert(q2.front() == 0);
- assert(q2.OK());
- q1.clear();
- assert(q1.empty());
- q1 = q2;
- assert(q1.length() == SIZE);
- assert(q1.front() == 0);
- assert(q1.OK());
- q1.del_front();
- assert(q1.length() == (SIZE-1));
- assert(q1.front() == 1);
- cout << "q1:"; print(q1);
- assert(q.OK());
- assert(q1.OK());
- assert(q2.OK());
-}
-
-/* Test case from Jocelyn Serot <jserot@alize.univ-bpclermont.fr> */
-void
-test_resize ()
-{
- intVQueue Q(4);
- Q.enq(1);
- Q.enq(2);
- cout << Q.deq() << endl;
- Q.enq(3);
- Q.enq(4);
- cout << Q.deq() << endl;
- Q.enq(5);
- Q.enq(6);
- cout << Q.deq() << endl;
- Q.enq(7); // Q is now full
- Q.resize(8); // Lets grow it
- Q.enq(8); // *** bug manifest at this point
- cout << Q.deq() << endl;
- cout << Q.deq() << endl;
- cout << Q.deq() << endl;
- cout << Q.deq() << endl; // Q is now empty
-}
-
-int main(int argv, char** argc)
-{
- if (argv > 1)
- {
- SIZE = abs(atoi(argc[1]));
- SIZE &= ~1;
- }
- else
- SIZE = 100;
- start_timer();
- cout << "XP queues:\n"; XPtest();
- if (ptimes) cout << "\ntime = " << return_elapsed_time(0.0) << "\n";
- start_timer();
- cout << "V queues:\n"; Vtest();
- if (ptimes) cout << "\ntime = " << return_elapsed_time(0.0) << "\n";
- start_timer();
- cout << "SL queues:\n"; SLtest();
- if (ptimes) cout << "\ntime = " << return_elapsed_time(0.0) << "\n";
-
- test_resize ();
- cout << "\nEnd of test\n";
- return 0;
-}
diff --git a/contrib/libg++/libg++/tests/tQueue.exp b/contrib/libg++/libg++/tests/tQueue.exp
deleted file mode 100644
index 5571e7580a2a..000000000000
--- a/contrib/libg++/libg++/tests/tQueue.exp
+++ /dev/null
@@ -1,15 +0,0 @@
-XP queues:
-q1:[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...]
-V queues:
-q1:[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...]
-SL queues:
-q1:[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...]
-1
-2
-3
-4
-5
-6
-7
-
-End of test
diff --git a/contrib/libg++/libg++/tests/tQueue.inp b/contrib/libg++/libg++/tests/tQueue.inp
deleted file mode 100644
index e69de29bb2d1..000000000000
--- a/contrib/libg++/libg++/tests/tQueue.inp
+++ /dev/null
diff --git a/contrib/libg++/libg++/tests/tRandom.cc b/contrib/libg++/libg++/tests/tRandom.cc
deleted file mode 100644
index e41e4bf4df64..000000000000
--- a/contrib/libg++/libg++/tests/tRandom.cc
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- a test file for Random classes
-*/
-
-#include <assert.h>
-#include <ACG.h>
-#include <MLCG.h>
-#include <SmplStat.h>
-#include <SmplHist.h>
-#include <Binomial.h>
-#include <Erlang.h>
-#include <Geom.h>
-#include <HypGeom.h>
-#include <NegExp.h>
-#include <Normal.h>
-#include <LogNorm.h>
-#include <Poisson.h>
-#include <Uniform.h>
-#include <DiscUnif.h>
-#include <Weibull.h>
-
-void demo(Random& r)
-{
- SampleStatistic s;
- cout << "five samples:\n";
- for (int i = 0; i < 5; ++i)
- {
- double x = r();
- cout << x << " ";
- s += x;
- }
- cout << "\nStatistics for 100 samples:\n";
- for (; i < 100; ++i)
- {
- double x = r();
- s += x;
- }
- cout << "samples: " << s.samples() << " ";
- cout << "min: " << s.min() << " ";
- cout << "max: " << s.max() << "\n";
- cout << "mean: " << s.mean() << " ";
- cout << "stdDev: " << s.stdDev() << " ";
- cout << "var: " << s.var() << " ";
- cout << "confidence(95): " << s.confidence(95) << "\n";
-}
-
-main()
-{
- int i;
- ACG gen1;
- cout << "five random ACG integers:\n";
- for (i = 0; i < 5; ++i)
- cout << gen1.asLong() << " ";
- cout << "\n";
-
- MLCG gen2;
- cout << "five random MLCG integers:\n";
- for (i = 0; i < 5; ++i)
- cout << gen2.asLong() << " ";
- cout << "\n";
-
- Binomial r1( 100, 0.5, &gen1);
- cout << "Binomial r1( 100, 0.50, &gen1) ...\n";
- demo(r1);
- Erlang r2( 2.0, 0.5, &gen1);
- cout << "Erlang r2( 2.0, 0.5, &gen1) ...\n";
- demo(r2);
- Geometric r3( 0.5, &gen1);
- cout << "Geometric r3(&gen1, 0.5)...\n";
- demo(r3);
- HyperGeometric r4( 10.0, 150.0, &gen1);
- cout << "HyperGeometric r4( 10.0, 150.0, &gen1)...\n";
- demo(r4);
- NegativeExpntl r5( 1.0, &gen1);
- cout << "NegativeExpntl r5( 1.0, &gen1)...\n";
- demo(r5);
- Normal r6( 0.0, 1.0, &gen1);
- cout << "Normal r6( 0.0, 1.0, &gen1)...\n";
- demo(r6);
- LogNormal r7( 1.0, 1.0, &gen1);
- cout << "LogNormal r7( 1.0, 1.0, &gen1)...\n";
- demo(r7);
- Poisson r8( 2.0, &gen1);
- cout << "Poisson r8( 2.0, &gen1)...\n";
- demo(r8);
- DiscreteUniform r9( 0, 1, &gen1);
- cout << "DiscreteUniform r9( 0.0, 1.0, &gen1)...\n";
- demo(r9);
- Uniform r10( 0.0, 1.0, &gen1);
- cout << "Uniform r10( 0.0, 1.0, &gen1)...\n";
- demo(r10);
- Weibull r11( 0.5, 1.0, &gen1);
- cout << "Weibull r11( 0.5, 1.0, &gen1)...\n";
- demo(r11);
-
- cout << "SampleHistogram for 100 Normal samples\n";
- SampleHistogram h(-4.0, 4.0);
- for (i = 0; i < 100; ++i)
- h += r6();
- h.printBuckets(cout);
- cout << "\nEnd of test\n";
- return 0;
-}
diff --git a/contrib/libg++/libg++/tests/tRandom.exp b/contrib/libg++/libg++/tests/tRandom.exp
deleted file mode 100644
index 9906721b030f..000000000000
--- a/contrib/libg++/libg++/tests/tRandom.exp
+++ /dev/null
@@ -1,85 +0,0 @@
-five random ACG integers:
-1525072166 1954057046 3406008937 226879594 4107049426
-five random MLCG integers:
-1341853672 83475514 936613571 888739672 2097844081
-Binomial r1( 100, 0.50, &gen1) ...
-five samples:
-45 52 59 49 60
-Statistics for 100 samples:
-samples: 100 min: 40 max: 64
-mean: 50.78 stdDev: 4.42577 var: 19.5875 confidence(95): 0.878369
-Erlang r2( 2.0, 0.5, &gen1) ...
-five samples:
-1.79909 1.92989 2.50816 2.31409 1.48158
-Statistics for 100 samples:
-samples: 100 min: 0.592645 max: 3.81874
-mean: 1.96664 stdDev: 0.696406 var: 0.484981 confidence(95): 0.138213
-Geometric r3(&gen1, 0.5)...
-five samples:
-3 2 2 2 3
-Statistics for 100 samples:
-samples: 100 min: 1 max: 7
-mean: 1.9 stdDev: 1.28315 var: 1.64646 confidence(95): 0.254662
-HyperGeometric r4( 10.0, 150.0, &gen1)...
-five samples:
-15.0752 5.25802 7.82211 20.4995 7.08199
-Statistics for 100 samples:
-samples: 100 min: 0.0446068 max: 131.508
-mean: 12.6763 stdDev: 16.7567 var: 280.786 confidence(95): 3.32564
-NegativeExpntl r5( 1.0, &gen1)...
-five samples:
-1.90665 0.0921974 0.219318 1.79202 0.566202
-Statistics for 100 samples:
-samples: 100 min: 0.00794624 max: 4.23124
-mean: 0.927343 stdDev: 0.8869 var: 0.786592 confidence(95): 0.17602
-Normal r6( 0.0, 1.0, &gen1)...
-five samples:
--0.174892 0.148871 -0.479753 0.65432 -0.92688
-Statistics for 100 samples:
-samples: 100 min: -2.22325 max: 2.61771
-mean: 0.141292 stdDev: 0.972041 var: 0.944864 confidence(95): 0.192918
-LogNormal r7( 1.0, 1.0, &gen1)...
-five samples:
-2.15572 0.985688 0.340019 0.959144 1.06052
-Statistics for 100 samples:
-samples: 100 min: 0.0393323 max: 6.16358
-mean: 1.03547 stdDev: 0.963892 var: 0.929088 confidence(95): 0.191301
-Poisson r8( 2.0, &gen1)...
-five samples:
-0 2 1 2 1
-Statistics for 100 samples:
-samples: 100 min: 0 max: 5
-mean: 2 stdDev: 1.31041 var: 1.71717 confidence(95): 0.260073
-DiscreteUniform r9( 0.0, 1.0, &gen1)...
-five samples:
-1 1 0 0 0
-Statistics for 100 samples:
-samples: 100 min: 0 max: 1
-mean: 0.45 stdDev: 0.5 var: 0.25 confidence(95): 0.0992334
-Uniform r10( 0.0, 1.0, &gen1)...
-five samples:
-0.557314 0.529968 0.997197 0.25163 0.947497
-Statistics for 100 samples:
-samples: 100 min: 0.00205286 max: 0.997197
-mean: 0.518789 stdDev: 0.321429 var: 0.103317 confidence(95): 0.0637931
-Weibull r11( 0.5, 1.0, &gen1)...
-five samples:
-10.4918 0.295112 0.184577 2.14799 0.10053
-Statistics for 100 samples:
-samples: 100 min: 0.000236481 max: 15.4934
-mean: 1.96369 stdDev: 2.97642 var: 8.85906 confidence(95): 0.59072
-SampleHistogram for 100 Normal samples
-< -4 : 0
-< -3.2 : 0
-< -2.4 : 0
-< -1.6 : 7
-< -0.8 : 15
-< -2.22045e-16 : 36
-< 0.8 : 15
-< 1.6 : 19
-< 2.4 : 7
-< 3.2 : 1
-< 4 : 0
-< max : 0
-
-End of test
diff --git a/contrib/libg++/libg++/tests/tRandom.inp b/contrib/libg++/libg++/tests/tRandom.inp
deleted file mode 100644
index e69de29bb2d1..000000000000
--- a/contrib/libg++/libg++/tests/tRandom.inp
+++ /dev/null
diff --git a/contrib/libg++/libg++/tests/tRational.cc b/contrib/libg++/libg++/tests/tRational.cc
deleted file mode 100644
index 2c49a814dea2..000000000000
--- a/contrib/libg++/libg++/tests/tRational.cc
+++ /dev/null
@@ -1,194 +0,0 @@
-/*
- a test file for Rational class
- */
-
-#include <Rational.h>
-
-#include <assert.h>
-
-#define tassert(ex) {if ((ex)) cerr << #ex << "\n"; \
- else _assert(#ex, __FILE__,__LINE__); }
-
-
-void identtest(Rational& a, Rational& b, Rational& c)
-{
- Rational one(1, 1);
-
- assert(-(-a) == a);
- assert((a + b) == (b + a));
- assert((a + (-b)) == (a - b));
- assert((a * b) == (b * a));
- assert((a * (-b)) == -(a * b));
- assert((a / (-b)) == -(a / b));
- assert((a / b) == (a * (one / b)));
- assert((a / b) == (one / (b / a)));
- assert((a - b) == -(b - a));
- assert((a + (b + c)) == ((a + b) + c));
- assert((a * (b * c)) == ((a * b) * c));
- assert((a * (b + c)) == ((a * b) + (a * c)));
- assert(((a - b) + b) == a);
- assert(((a + b) - b) == a);
- assert(((a * b) / b) == a);
- assert(((a / b) * b) == a);
-
- Rational x = a;
- x *= b;
- assert(x == (a * b));
- x += c;
- assert(x == ((a * b) + c));
- x -= a;
- assert(x == (((a * b) + c) - a));
- x /= b;
- assert(x == ((((a * b) + c) - a) / b));
-
- assert(x.OK());
-}
-
-
-
-void simpletest()
-{
- Rational one = 1;
- assert(one.OK());
- Rational third(1, 3);
- assert(third.OK());
- Rational half(1, 2);
- assert(half.OK());
-
- Rational two(2);
- Rational zero(0);
- Rational r;
- r = two+zero;
-
- cout << "one = " << one << "\n";
- cout << "two = " << r << "\n";
- cout << "third = " << third << "\n";
- cout << "half = " << half << "\n";
-
- cout << "third + half = " << third + half << "\n";
- cout << "third - half = " << third - half << "\n";
- cout << "third * half = " << third * half << "\n";
- cout << "third / half = " << third / half << "\n";
-
- Rational onePointTwo = 1.2;
- cout << "onePointTwo = " << onePointTwo << "\n";
- cout << "double(onePointTwo) = " << double(onePointTwo) << "\n";
-
- Rational a = one;
- cout << "a = " << a << "\n";
- assert(a.OK());
- a += half;
- cout << "a += half = " << a << "\n";
- assert(a == Rational(3, 2));
- a -= half;
- cout << "a -= half = " << a << "\n";
- assert(a == Rational(1));
- a *= half;
- cout << "a *= half = " << a << "\n";
- assert(a == half);
- a /= half;
- cout << "a /= half = " << a << "\n";
- assert(a == Rational(1));
- assert(a.OK());
-
- identtest(one, one, one);
- identtest(one, third, half);
- identtest(third, half, one);
- identtest(onePointTwo, half, a);
-}
-
-void pitest()
-{
- Rational half(1, 2);
- Rational approxpi(355, 113);
- assert(approxpi.OK());
- cout << "approxpi = " << approxpi << "\n";
- cout << "double(approxpi) = " << double(approxpi) << "\n";
-
-#ifndef M_PI
-#define M_PI 3.14159265358979323846
-#endif
- Rational rpi = Rational(M_PI);
- cout << "rpi = Rational(PI) = " << rpi << "\n";
- assert(rpi.OK());
- cout << "double(rpi) = " << double(rpi) << "\n";
-
- cout << "approxpi + rpi = " << approxpi + rpi << "\n";
- cout << "approxpi - rpi = " << approxpi - rpi << "\n";
- cout << "approxpi * rpi = " << approxpi * rpi << "\n";
- cout << "approxpi / rpi = " << approxpi / rpi << "\n";
-
- Rational negapproxpi = -approxpi;
-
- cout << "-approxpi = " << negapproxpi << "\n";
- assert(sign(negapproxpi) < 0);
- cout << "abs(negapproxpi) = " << abs(negapproxpi) << "\n";
- assert(abs(negapproxpi) == approxpi);
-
- assert(approxpi != rpi);
- assert(approxpi >= rpi);
- assert(approxpi > rpi);
- assert(!(approxpi == rpi));
- assert(!(approxpi <= rpi));
- assert(!(approxpi < rpi));
-#if defined (__GNUC__) && ! defined (__STRICT_ANSI__)
- assert((approxpi >? rpi) == approxpi);
- assert((approxpi <? rpi) == rpi);
-#endif
-
- assert(floor(approxpi) == 3);
- assert(ceil(approxpi) == 4);
- assert(trunc(approxpi) == 3);
- assert(round(approxpi) == 3);
-
- assert(floor(negapproxpi + half) == -3);
- assert(ceil(negapproxpi + half) == -2);
- assert(trunc(negapproxpi + half) == -2);
- assert(round(negapproxpi + half) == -3);
-
- identtest(approxpi, rpi, negapproxpi);
- identtest(rpi, approxpi, rpi);
- identtest(negapproxpi, half, rpi);
-}
-
-
-
-void IOtest()
-{
- Rational a;
- cout << "\nenter a Rational in form a/b or a: ";
- cin >> a;
- cout << "number = " << a << "\n";
- assert(a.OK());
-}
-
-// as a fct just to test Rational fcts
-Rational estimate_e(long n)
-{
- Rational x = Rational(n + 1, n);
- Rational e = pow(x, n);
- return e;
-}
-
-void etest(long n)
-{
- cout << "approximating e as pow(1+1/n),n) for n =" << n << "\n";
- Rational approxe = estimate_e(n);
- assert(approxe.OK());
- cout << "double(approxe) = " << double(approxe) << "\n";
- cout << "log(approxe) = " << log(approxe) << "\n";
- assert(log(approxe) <= 1.0);
- cout << "approxe = " << approxe << "\n";
-}
-
-int main()
-{
- simpletest();
- pitest();
- IOtest();
- etest(10);
- etest(100);
- etest(1000);
- cout << "\nEnd of test\n";
- return 0;
-}
diff --git a/contrib/libg++/libg++/tests/tRational.exp b/contrib/libg++/libg++/tests/tRational.exp
deleted file mode 100644
index 743aadd88627..000000000000
--- a/contrib/libg++/libg++/tests/tRational.exp
+++ /dev/null
@@ -1,41 +0,0 @@
-one = 1
-two = 2
-third = 1/3
-half = 1/2
-third + half = 5/6
-third - half = -1/6
-third * half = 1/6
-third / half = 2/3
-onePointTwo = 5404319552844595/4503599627370496
-double(onePointTwo) = 1.2
-a = 1
-a += half = 3/2
-a -= half = 1
-a *= half = 1/2
-a /= half = 1
-approxpi = 355/113
-double(approxpi) = 3.14159
-rpi = Rational(PI) = 884279719003555/281474976710656
-double(rpi) = 3.14159
-approxpi + rpi = 199847224979684595/31806672368304128
-approxpi - rpi = 8484881165/31806672368304128
-approxpi * rpi = 313919300246262025/31806672368304128
-approxpi / rpi = 19984723346456576/19984721649480343
--approxpi = -355/113
-abs(negapproxpi) = 355/113
-
-enter a Rational in form a/b or a: number = 61727839/49382716
-approximating e as pow(1+1/n),n) for n =10
-double(approxe) = 2.59374
-log(approxe) = 0.953102
-approxe = 25937424601/10000000000
-approximating e as pow(1+1/n),n) for n =100
-double(approxe) = 2.70481
-log(approxe) = 0.995033
-approxe = 270481382942152609326719471080753083367793838278100277689020104911710151430673927943945601434674459097335651375483564268312519281766832427980496322329650055217977882315938008175933291885667484249510001/100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-approximating e as pow(1+1/n),n) for n =1000
-double(approxe) = 2.71692
-log(approxe) = 0.9995
-approxe = 2716923932235892457383088121947577188964315018836572803722354774868894945523768158997885697298661429053421034015406256924859461187617653889457753593083386399572063538500432650176144488046171044844121805479607648086607018742077798375087855857012278053105042704758822511824867218226931719410407150364389665913091822576819072281835735365786202176167228686198158460724641052407506305826211156964723064441295969498221919251479211700941935114755531972677360157561485144237786816579422141378066423317811515462669946309306263409027388915931082226854264858661420878279983534424128672461206356847463821364630504359665171573635397346037274752410368174877433941234543153511100471651472869116068528478976916600585383497180172395573924789047989563714318957536493108041591460911612078698461739084741934442448701416575483263891529095158013233115648534154086009312190489168546024398834243847135102411661996020129557921444666343641039137906807591342742464200991933722791531063202677650581946360422027765645970182463780273161113009717582155489902677095053354207944772439271656447869921825959042801322775729022491402012084605367784456090892987682547811360481731795980637847551788259384243997341190753089343387201753821360405430310320564488741142120089460368986590136324737459372963666586532443570474179352656517635333744783401695951969936296323256525034685525470426185224036844803487442831639483152362831735350269624668701702424450940840884555271325190876102665277858154695092765613639718577127438538649414492678358762110235621776218781360881010654696273264706319088453035858355052988808507775439561385232652305316287705653436727647681405618323757201022946801118770148072424021385261829594248369890171583993147934044232792517118743393217276416179842097554494269012251329134783596037733973478306188255291484352384699871420472711423079586319041837563678498472779422282261024744394844558738378027105699691260086532632930941478779680554645850778168703661423819000515895232903243738763481571999080702098369316199601942246247887808385073821861517636839926907458184604648942036355256683219218129910422822177336785268627274482037476294341444562207197209503659518266210432791078248321015453218019586608696207295299183111963158564162419152742807437346241667671688466998244424726765837682151606230638111654756595917019206453978024157097042546937345673337179165242325399648121877178987723999503839197328183925340949191821443698275476295245249466361817367207248089144718808572152781037112209285944844021186534832159964297181970584453756163204297111185823467744743465840230098261424789313315093951766314459027947176701489215746884363426961577348384651887153140609616362927338107686794499974902581579897076172716541504294334300741444106749994715713419630688719451362658288812132056854807330827050505064714442618243101018812153563795539024370219967801515099970721926240625418512417940854760415566229746248973756297569452302821563467574313259066016089521122779204844875998864114930516063910324359331903843040069467324167490917499501000001/1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-
-End of test
diff --git a/contrib/libg++/libg++/tests/tRational.inp b/contrib/libg++/libg++/tests/tRational.inp
deleted file mode 100644
index c6aff5c42011..000000000000
--- a/contrib/libg++/libg++/tests/tRational.inp
+++ /dev/null
@@ -1 +0,0 @@
-123455678/98765432
diff --git a/contrib/libg++/libg++/tests/tSet.cc b/contrib/libg++/libg++/tests/tSet.cc
deleted file mode 100644
index f05ca34086a7..000000000000
--- a/contrib/libg++/libg++/tests/tSet.cc
+++ /dev/null
@@ -1,744 +0,0 @@
-/*
- a test file for sets
-*/
-
-#ifdef PTIMES
-const int ptimes = 1;
-#else
-const int ptimes = 0;
-#endif
-
-#include <stream.h>
-#include <assert.h>
-#include <builtin.h>
-
-#define tassert(ex) { cerr << #ex; \
- if ((ex)) cerr << " OK\n"; \
- else cerr << " Fail\n"; }
-
-unsigned int hash(int x) { return multiplicativehash(x) ; }
-
-#include "iSet.h"
-
-int SIZE;
-
-int *nums;
-int *odds;
-int *dups;
-
-void printset(intSet& a)
-{
- int maxprint = 20;
- cout << "[";
- int k = 0;
- Pix i;
- for (i = a.first(); i != 0 && k < maxprint; a.next(i),++k)
- cout << a(i) << " ";
- if (i != 0) cout << "...]\n";
- else cout << "]\n";
-}
-
-void add(int x[], intSet& a)
-{
- for (int i = 0; i < SIZE; ++i) a.add(x[i]);
-}
-
-#include <MLCG.h>
-
-MLCG randgen;
-
-void permute(int x[])
-{
- for (int i = 1; i < SIZE; ++i)
- {
- int j = randgen.asLong() % (i + 1);
- int tmp = x[i]; x[i] = x[j]; x[j] = tmp;
- }
-}
-
-
-void makenums()
-{
- for (int i = 0; i < SIZE; ++i) nums[i] = i + 1;
-}
-
-void makeodds()
-{
- for (int i = 0; i < SIZE; ++i) odds[i] = 2 * i + 1;
- permute(odds);
-}
-
-void makedups()
-{
- for (int i = 0; i < SIZE; i += 2) dups[i] = dups[i+1] = i/2 + 1;
- permute(dups);
-}
-
-
-void generictest(intSet& a, intSet& b, intSet& c)
-{
- c.clear();
- assert(c.empty());
- c |= a;
- assert(c == a);
- assert(c <= a);
- c.del(a(a.first()));
- assert(c <= a);
- assert(c != a);
- Pix i = a.first();
- assert(!c.contains(a(i)));
- for (a.next(i); i != 0; a.next(i)) assert(c.contains(a(i)));
- c.add(a(a.first()));
- for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));
- c |= b;
- assert(b <= c);
- for (i = b.first(); i != 0; b.next(i)) assert(c.contains(b(i)));
- for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));
- c &= a;
- for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));
- c -= a;
- assert(!(a <= c));
- for (i = a.first(); i != 0; a.next(i)) assert(!c.contains(a(i)));
- for (i = b.first(); i != 0; b.next(i)) c.del(b(i));
- assert(c.empty());
- assert(a.OK());
- assert(b.OK());
- assert(c.OK());
-}
-
-#include "iXPSet.h"
-
-void XPtest()
-{
- intXPSet a(SIZE);
- add(nums, a);
- assert(a.length() == SIZE);
- for (int j = 1; j <= SIZE; ++j) assert(a.contains(j));
- intXPSet b(SIZE);
- add(odds, b);
- assert(b.length() == SIZE);
- intXPSet c(SIZE);
- add(dups, c);
- assert(c.length() == SIZE/2);
- assert(c <= a);
- intXPSet d(a);
- d &= b;
- cout << "a: "; printset(a);
- cout << "b: "; printset(b);
- cout << "c: "; printset(c);
- cout << "d: "; printset(d);
- assert(d.length() == SIZE/2);
- for (Pix p = d.first(); p; d.next(p)) assert((d(p) & 1) != 0);
- a.del(1);
- assert(a.length() == SIZE-1);
- assert(!a.contains(1));
-
- c.clear();
- assert(c.empty());
- c |= a;
- assert(c == a);
- assert(c <= a);
- c.del(a(a.first()));
- assert(c <= a);
- assert(c != a);
- Pix i = a.first();
- assert(!c.contains(a(i)));
- for (a.next(i); i != 0; a.next(i)) assert(c.contains(a(i)));
- c.add(a(a.first()));
- for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));
- c |= b;
- assert(b <= c);
- for (i = b.first(); i != 0; b.next(i)) assert(c.contains(b(i)));
- for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));
- c &= a;
- for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));
- c -= a;
- assert(!(a <= c));
- for (i = a.first(); i != 0; a.next(i)) assert(!c.contains(a(i)));
- for (i = b.first(); i != 0; b.next(i)) c.del(b(i));
- assert(c.empty());
- assert(a.OK());
- assert(b.OK());
- assert(c.OK());
-
- generictest(a, b, c);
-}
-
-
-#include "iSLSet.h"
-
-void SLtest()
-{
- intSLSet a;
- add(nums, a);
- assert(a.length() == SIZE);
- for (int j = 1; j <= SIZE; ++j) assert(a.contains(j));
- intSLSet b;
- add(odds, b);
- assert(b.length() == SIZE);
- intSLSet c;
- add(dups, c);
- assert(c.length() == SIZE/2);
- assert(c <= a);
- intSLSet d(a);
- d &= b;
- cout << "a: "; printset(a);
- cout << "b: "; printset(b);
- cout << "c: "; printset(c);
- cout << "d: "; printset(d);
- assert(d.length() == SIZE/2);
- for (Pix p = d.first(); p; d.next(p)) assert((d(p) & 1) != 0);
- a.del(1);
- assert(a.length() == SIZE-1);
- assert(!a.contains(1));
-
- c.clear();
- assert(c.empty());
- c |= a;
- assert(c == a);
- assert(c <= a);
- c.del(a(a.first()));
- assert(c <= a);
- assert(c != a);
- Pix i = a.first();
- assert(!c.contains(a(i)));
- for (a.next(i); i != 0; a.next(i)) assert(c.contains(a(i)));
- c.add(a(a.first()));
- for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));
- c |= b;
- assert(b <= c);
- for (i = b.first(); i != 0; b.next(i)) assert(c.contains(b(i)));
- for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));
- c &= a;
- for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));
- c -= a;
- assert(!(a <= c));
- for (i = a.first(); i != 0; a.next(i)) assert(!c.contains(a(i)));
- for (i = b.first(); i != 0; b.next(i)) c.del(b(i));
- assert(c.empty());
- assert(a.OK());
- assert(b.OK());
- assert(c.OK());
-
- generictest(a, b, c);
-}
-
-
-#include "iVHSet.h"
-
-void VHtest()
-{
- intVHSet a(SIZE);
- add(nums, a);
- assert(a.length() == SIZE);
- for (int j = 1; j <= SIZE; ++j) assert(a.contains(j));
- intVHSet b(SIZE);
- add(odds, b);
- assert(b.length() == SIZE);
- intVHSet c(SIZE);
- add(dups, c);
- assert(c.length() == SIZE/2);
- assert(c <= a);
- intVHSet d(a);
- d &= b;
- cout << "a: "; printset(a);
- cout << "b: "; printset(b);
- cout << "c: "; printset(c);
- cout << "d: "; printset(d);
- assert(d.length() == SIZE/2);
- for (Pix p = d.first(); p; d.next(p)) assert((d(p) & 1) != 0);
- a.del(1);
- assert(a.length() == SIZE-1);
- assert(!a.contains(1));
-
- c.clear();
- assert(c.empty());
- c |= a;
- assert(c == a);
- assert(c <= a);
- c.del(a(a.first()));
- assert(c <= a);
- assert(c != a);
- Pix i = a.first();
- assert(!c.contains(a(i)));
- for (a.next(i); i != 0; a.next(i)) assert(c.contains(a(i)));
- c.add(a(a.first()));
- for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));
- c |= b;
- assert(b <= c);
- for (i = b.first(); i != 0; b.next(i)) assert(c.contains(b(i)));
- for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));
- c &= a;
- for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));
- c -= a;
- assert(!(a <= c));
- for (i = a.first(); i != 0; a.next(i)) assert(!c.contains(a(i)));
- for (i = b.first(); i != 0; b.next(i)) c.del(b(i));
- assert(c.empty());
- assert(a.OK());
- assert(b.OK());
- assert(c.OK());
-
- generictest(a, b, c);
-}
-
-#include "iVOHSet.h"
-
-void VOHtest()
-{
- intVOHSet a(SIZE);
- add(nums, a);
- assert(a.length() == SIZE);
- for (int j = 1; j <= SIZE; ++j) assert(a.contains(j));
- intVOHSet b(SIZE);
- add(odds, b);
- assert(b.length() == SIZE);
- intVOHSet c(SIZE);
- add(dups, c);
- assert(c.length() == SIZE/2);
- assert(c <= a);
- intVOHSet d(a);
- d &= b;
- cout << "a: "; printset(a);
- cout << "b: "; printset(b);
- cout << "c: "; printset(c);
- cout << "d: "; printset(d);
- assert(d.length() == SIZE/2);
- for (Pix p = d.first(); p; d.next(p)) assert((d(p) & 1) != 0);
- a.del(1);
- assert(a.length() == SIZE-1);
- assert(!a.contains(1));
-
- c.clear();
- assert(c.empty());
- c |= a;
- assert(c == a);
- assert(c <= a);
- c.del(a(a.first()));
- assert(c <= a);
- assert(c != a);
- Pix i = a.first();
- assert(!c.contains(a(i)));
- for (a.next(i); i != 0; a.next(i)) assert(c.contains(a(i)));
- c.add(a(a.first()));
- for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));
- c |= b;
- assert(b <= c);
- for (i = b.first(); i != 0; b.next(i)) assert(c.contains(b(i)));
- for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));
- c &= a;
- for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));
- c -= a;
- assert(!(a <= c));
- for (i = a.first(); i != 0; a.next(i)) assert(!c.contains(a(i)));
- for (i = b.first(); i != 0; b.next(i)) c.del(b(i));
- assert(c.empty());
- assert(a.OK());
- assert(b.OK());
- assert(c.OK());
-
- generictest(a, b, c);
-}
-
-#include "iCHSet.h"
-
-void CHtest()
-{
- intCHSet a(SIZE);
- add(nums, a);
- assert(a.length() == SIZE);
- for (int j = 1; j <= SIZE; ++j) assert(a.contains(j));
- intCHSet b(SIZE);
- add(odds, b);
- assert(b.length() == SIZE);
- intCHSet c(SIZE);
- add(dups, c);
- assert(c.length() == SIZE/2);
- assert(c <= a);
- intCHSet d(a);
- d &= b;
- cout << "a: "; printset(a);
- cout << "b: "; printset(b);
- cout << "c: "; printset(c);
- cout << "d: "; printset(d);
- assert(d.length() == SIZE/2);
- for (Pix p = d.first(); p; d.next(p)) assert((d(p) & 1) != 0);
- a.del(1);
- assert(a.length() == SIZE-1);
- assert(!a.contains(1));
-
- c.clear();
- assert(c.empty());
- c |= a;
- assert(c == a);
- assert(c <= a);
- c.del(a(a.first()));
- assert(c <= a);
- assert(c != a);
- Pix i = a.first();
- assert(!c.contains(a(i)));
- for (a.next(i); i != 0; a.next(i)) assert(c.contains(a(i)));
- c.add(a(a.first()));
- for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));
- c |= b;
- assert(b <= c);
- for (i = b.first(); i != 0; b.next(i)) assert(c.contains(b(i)));
- for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));
- c &= a;
- for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));
- c -= a;
- assert(!(a <= c));
- for (i = a.first(); i != 0; a.next(i)) assert(!c.contains(a(i)));
- for (i = b.first(); i != 0; b.next(i)) c.del(b(i));
- assert(c.empty());
- assert(a.OK());
- assert(b.OK());
- assert(c.OK());
-
- generictest(a, b, c);
-}
-
-#include "iOXPSet.h"
-
-void OXPtest()
-{
- intOXPSet a(SIZE);
- add(nums, a);
- assert(a.length() == SIZE);
- for (int j = 1; j <= SIZE; ++j) assert(a.contains(j));
- intOXPSet b(SIZE);
- add(odds, b);
- assert(b.length() == SIZE);
- intOXPSet c(SIZE);
- add(dups, c);
- assert(c.length() == SIZE/2);
- assert(c <= a);
- intOXPSet d(a);
- d &= b;
- cout << "a: "; printset(a);
- cout << "b: "; printset(b);
- cout << "c: "; printset(c);
- cout << "d: "; printset(d);
- assert(d.length() == SIZE/2);
- for (Pix p = d.first(); p; d.next(p)) assert((d(p) & 1) != 0);
- a.del(1);
- assert(a.length() == SIZE-1);
- assert(!a.contains(1));
-
- c.clear();
- assert(c.empty());
- c |= a;
- assert(c == a);
- assert(c <= a);
- c.del(a(a.first()));
- assert(c <= a);
- assert(c != a);
- Pix i = a.first();
- assert(!c.contains(a(i)));
- for (a.next(i); i != 0; a.next(i)) assert(c.contains(a(i)));
- c.add(a(a.first()));
- for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));
- c |= b;
- assert(b <= c);
- for (i = b.first(); i != 0; b.next(i)) assert(c.contains(b(i)));
- for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));
- c &= a;
- for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));
- c -= a;
- assert(!(a <= c));
- for (i = a.first(); i != 0; a.next(i)) assert(!c.contains(a(i)));
- for (i = b.first(); i != 0; b.next(i)) c.del(b(i));
- assert(c.empty());
- assert(a.OK());
- assert(b.OK());
- assert(c.OK());
-
- generictest(a, b, c);
-}
-
-
-
-#include "iOSLSet.h"
-
-void OSLtest()
-{
- intOSLSet a;
- add(nums, a);
- assert(a.length() == SIZE);
- for (int j = 1; j <= SIZE; ++j) assert(a.contains(j));
- intOSLSet b;
- add(odds, b);
- assert(b.length() == SIZE);
- intOSLSet c;
- add(dups, c);
- assert(c.length() == SIZE/2);
- assert(c <= a);
- intOSLSet d(a);
- d &= b;
- cout << "a: "; printset(a);
- cout << "b: "; printset(b);
- cout << "c: "; printset(c);
- cout << "d: "; printset(d);
- assert(d.length() == SIZE/2);
- for (Pix p = d.first(); p; d.next(p)) assert((d(p) & 1) != 0);
- a.del(1);
- assert(a.length() == SIZE-1);
- assert(!a.contains(1));
-
- c.clear();
- assert(c.empty());
- c |= a;
- assert(c == a);
- assert(c <= a);
- c.del(a(a.first()));
- assert(c <= a);
- assert(c != a);
- Pix i = a.first();
- assert(!c.contains(a(i)));
- for (a.next(i); i != 0; a.next(i)) assert(c.contains(a(i)));
- c.add(a(a.first()));
- for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));
- c |= b;
- assert(b <= c);
- for (i = b.first(); i != 0; b.next(i)) assert(c.contains(b(i)));
- for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));
- c &= a;
- for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));
- c -= a;
- assert(!(a <= c));
- for (i = a.first(); i != 0; a.next(i)) assert(!c.contains(a(i)));
- for (i = b.first(); i != 0; b.next(i)) c.del(b(i));
- assert(c.empty());
- assert(a.OK());
- assert(b.OK());
- assert(c.OK());
-
- generictest(a, b, c);
-}
-
-#include "iBSTSet.h"
-
-void BSTtest()
-{
- intBSTSet a;
- add(nums, a);
- assert(a.length() == SIZE);
- for (int j = 1; j <= SIZE; ++j) assert(a.contains(j));
- a.balance();
- assert(a.OK());
- for (int j = 1; j <= SIZE; ++j) assert(a.contains(j));
- intBSTSet b;
- add(odds, b);
- assert(b.length() == SIZE);
- intBSTSet c;
- add(dups, c);
- assert(c.length() == SIZE/2);
- assert(c <= a);
- intBSTSet d(a);
- d &= b;
- cout << "a: "; printset(a);
- cout << "b: "; printset(b);
- cout << "c: "; printset(c);
- cout << "d: "; printset(d);
- assert(d.length() == SIZE/2);
- for (Pix p = d.first(); p; d.next(p)) assert((d(p) & 1) != 0);
- a.del(1);
- assert(a.length() == SIZE-1);
- assert(!a.contains(1));
-
- c.clear();
- assert(c.empty());
- c |= a;
- assert(c == a);
- assert(c <= a);
- c.del(a(a.first()));
- assert(c <= a);
- assert(c != a);
- Pix i = a.first();
- assert(!c.contains(a(i)));
- for (a.next(i); i != 0; a.next(i)) assert(c.contains(a(i)));
- c.add(a(a.first()));
- for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));
- c |= b;
- assert(b <= c);
- for (i = b.first(); i != 0; b.next(i)) assert(c.contains(b(i)));
- for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));
- c &= a;
- for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));
- c -= a;
- assert(!(a <= c));
- for (i = a.first(); i != 0; a.next(i)) assert(!c.contains(a(i)));
- for (i = b.first(); i != 0; b.next(i)) c.del(b(i));
- assert(c.empty());
- assert(a.OK());
- assert(b.OK());
- assert(c.OK());
-
- generictest(a, b, c);
-}
-
-#include "iAVLSet.h"
-
-void AVLtest()
-{
- intAVLSet a;
- add(nums, a);
- assert(a.length() == SIZE);
- for (int j = 1; j <= SIZE; ++j) assert(a.contains(j));
- intAVLSet b;
- add(odds, b);
- assert(b.length() == SIZE);
- intAVLSet c;
- add(dups, c);
- assert(c.length() == SIZE/2);
- assert(c <= a);
- intAVLSet d(a);
- d &= b;
- cout << "a: "; printset(a);
- cout << "b: "; printset(b);
- cout << "c: "; printset(c);
- cout << "d: "; printset(d);
- assert(d.length() == SIZE/2);
- for (Pix p = d.first(); p; d.next(p)) assert((d(p) & 1) != 0);
- a.del(1);
- assert(a.length() == SIZE-1);
- assert(!a.contains(1));
-
- c.clear();
- assert(c.empty());
- c |= a;
- assert(c == a);
- assert(c <= a);
- c.del(a(a.first()));
- assert(c <= a);
- assert(c != a);
- Pix i = a.first();
- assert(!c.contains(a(i)));
- for (a.next(i); i != 0; a.next(i)) assert(c.contains(a(i)));
- c.add(a(a.first()));
- for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));
- c |= b;
- assert(b <= c);
- for (i = b.first(); i != 0; b.next(i)) assert(c.contains(b(i)));
- for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));
- c &= a;
- for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));
- c -= a;
- assert(!(a <= c));
- for (i = a.first(); i != 0; a.next(i)) assert(!c.contains(a(i)));
- for (i = b.first(); i != 0; b.next(i)) c.del(b(i));
- assert(c.empty());
- assert(a.OK());
- assert(b.OK());
- assert(c.OK());
-
- generictest(a, b, c);
-}
-
-#include "iSplaySet.h"
-
-void Splaytest()
-{
- intSplaySet a;
- add(nums, a);
- assert(a.length() == SIZE);
- for (int j = 1; j <= SIZE; ++j) assert(a.contains(j));
- intSplaySet b;
- add(odds, b);
- assert(b.length() == SIZE);
- intSplaySet c;
- add(dups, c);
- assert(c.length() == SIZE/2);
- assert(c <= a);
- intSplaySet d(a);
- d &= b;
- cout << "a: "; printset(a);
- cout << "b: "; printset(b);
- cout << "c: "; printset(c);
- cout << "d: "; printset(d);
- assert(d.length() == SIZE/2);
- for (Pix p = d.first(); p; d.next(p)) assert((d(p) & 1) != 0);
- a.del(1);
- assert(a.length() == SIZE-1);
- assert(!a.contains(1));
-
- c.clear();
- assert(c.empty());
- c |= a;
- assert(c == a);
- assert(c <= a);
- c.del(a(a.first()));
- assert(c <= a);
- assert(c != a);
- Pix i = a.first();
- assert(!c.contains(a(i)));
- for (a.next(i); i != 0; a.next(i)) assert(c.contains(a(i)));
- c.add(a(a.first()));
- for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));
- c |= b;
- assert(b <= c);
- for (i = b.first(); i != 0; b.next(i)) assert(c.contains(b(i)));
- for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));
- c &= a;
- for (i = a.first(); i != 0; a.next(i)) assert(c.contains(a(i)));
- c -= a;
- assert(!(a <= c));
- for (i = a.first(); i != 0; a.next(i)) assert(!c.contains(a(i)));
- for (i = b.first(); i != 0; b.next(i)) c.del(b(i));
- assert(c.empty());
- assert(a.OK());
- assert(b.OK());
- assert(c.OK());
-
- generictest(a, b, c);
-}
-
-
-int main(int argc, char** argv)
-{
- if (argc > 1)
- {
- SIZE = abs(atoi(argv[1]));
- SIZE &= ~1;
- }
- else
- SIZE = 100;
- nums = new int[SIZE];
- odds = new int[SIZE];
- dups = new int[SIZE];
- makenums();
- makeodds();
- makedups();
- start_timer();
- cout << "VHtest\n"; VHtest();
- if (ptimes) cout << "\ntime = " << return_elapsed_time(0.0) << "\n";
- start_timer();
- cout << "VOHtest\n"; VOHtest();
- if (ptimes) cout << "\ntime = " << return_elapsed_time(0.0) << "\n";
- start_timer();
- cout << "CHtest\n"; CHtest();
- if (ptimes) cout << "\ntime = " << return_elapsed_time(0.0) << "\n";
- start_timer();
- cout << "SLtest\n"; SLtest();
- if (ptimes) cout << "\ntime = " << return_elapsed_time(0.0) << "\n";
- start_timer();
- cout << "XPtest\n"; XPtest();
- if (ptimes) cout << "\ntime = " << return_elapsed_time(0.0) << "\n";
- start_timer();
- cout << "OXPtest\n"; OXPtest();
- if (ptimes) cout << "\ntime = " << return_elapsed_time(0.0) << "\n";
- start_timer();
- cout << "OSLtest\n"; OSLtest();
- if (ptimes) cout << "\ntime = " << return_elapsed_time(0.0) << "\n";
- start_timer();
- cout << "BSTtest\n"; BSTtest();
- if (ptimes) cout << "\ntime = " << return_elapsed_time(0.0) << "\n";
- start_timer();
- cout << "AVLtest\n"; AVLtest();
- if (ptimes) cout << "\ntime = " << return_elapsed_time(0.0) << "\n";
- start_timer();
- cout << "Splaytest\n"; Splaytest();
- if (ptimes) cout << "\ntime = " << return_elapsed_time(0.0) << "\n";
-
- return 0;
-}
diff --git a/contrib/libg++/libg++/tests/tSet.exp b/contrib/libg++/libg++/tests/tSet.exp
deleted file mode 100644
index f014df48ec6e..000000000000
--- a/contrib/libg++/libg++/tests/tSet.exp
+++ /dev/null
@@ -1,50 +0,0 @@
-VHtest
-a: [72 77 13 3 26 16 39 29 52 42 65 55 78 91 9 22 35 48 61 74 ...]
-b: [167 77 13 3 193 39 139 29 93 47 65 55 155 109 91 9 117 171 35 143 ...]
-c: [36 49 46 3 26 16 39 29 12 42 19 32 9 1 22 35 48 25 2 15 ...]
-d: [13 3 39 29 65 55 91 9 35 61 15 41 67 25 93 11 47 87 37 73 ...]
-VOHtest
-a: [7 14 21 28 35 42 49 56 63 70 77 84 91 98 5 12 19 26 33 40 ...]
-b: [7 163 21 133 35 49 63 199 77 129 91 181 105 119 5 155 19 187 33 193 ...]
-c: [7 14 21 28 35 42 49 5 12 19 26 33 40 47 3 10 17 24 31 38 ...]
-d: [7 21 35 49 63 77 91 5 19 33 47 61 75 89 3 17 31 45 59 73 ...]
-CHtest
-a: [72 36 85 49 13 3 98 62 26 16 75 39 29 88 52 42 6 65 55 19 ...]
-b: [167 49 85 121 13 3 157 193 111 39 75 147 29 183 137 65 101 173 55 19 ...]
-c: [36 13 49 3 26 16 39 29 6 42 19 32 45 9 22 35 12 48 25 38 ...]
-d: [13 49 85 3 39 75 29 65 19 55 91 9 45 81 35 71 25 61 97 15 ...]
-SLtest
-a: [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...]
-b: [3 197 151 161 81 69 27 37 189 147 13 75 181 117 173 11 191 185 101 105 ...]
-c: [33 2 48 18 37 5 35 49 1 12 50 9 31 26 10 42 17 13 11 21 ...]
-d: [1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 ...]
-XPtest
-a: [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...]
-b: [3 197 151 161 81 69 27 37 189 147 13 75 181 117 173 11 191 185 101 105 ...]
-c: [33 2 48 18 37 5 35 49 1 12 50 9 31 26 10 42 17 13 11 21 ...]
-d: [51 13 53 27 55 7 57 29 59 15 61 31 63 1 65 33 67 17 69 35 ...]
-OXPtest
-a: [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...]
-b: [1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 ...]
-c: [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...]
-d: [1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 ...]
-OSLtest
-a: [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...]
-b: [1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 ...]
-c: [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...]
-d: [1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 ...]
-BSTtest
-a: [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...]
-b: [1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 ...]
-c: [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...]
-d: [1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 ...]
-AVLtest
-a: [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...]
-b: [1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 ...]
-c: [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...]
-d: [1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 ...]
-Splaytest
-a: [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...]
-b: [1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 ...]
-c: [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...]
-d: [1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 ...]
diff --git a/contrib/libg++/libg++/tests/tSet.inp b/contrib/libg++/libg++/tests/tSet.inp
deleted file mode 100644
index e69de29bb2d1..000000000000
--- a/contrib/libg++/libg++/tests/tSet.inp
+++ /dev/null
diff --git a/contrib/libg++/libg++/tests/tStack.cc b/contrib/libg++/libg++/tests/tStack.cc
deleted file mode 100644
index 7435ec1d0ff6..000000000000
--- a/contrib/libg++/libg++/tests/tStack.cc
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
- test of stacks
-*/
-
-#ifdef PTIMES
-const int ptimes = 1;
-#else
-const int ptimes = 0;
-#endif
-
-#include <stream.h>
-#include <assert.h>
-#include "iStack.h"
-
-#define tassert(ex) {if ((ex)) cerr << #ex << "\n"; \
- else _assert(#ex, __FILE__,__LINE__); }
-
-
-int SIZE;
-
-void print(intStack& a)
-{
- int maxprint = 20;
- cout << "[";
- int k = 0;
- while (!a.empty() && k++ < maxprint)
- cout << a.pop() << " ";
- if (k == maxprint)
- cout << "]\n";
- else
- {
- while (!a.empty()) a.del_top();
- cout << "...]\n";
- }
- assert(a.empty());
-}
-
-#include "iXPStack.h"
-
-void XPtest ()
-{
- intXPStack s(SIZE/2);
- assert(s.OK());
- for (int i = 0; i < SIZE; ++i)
- s.push(i);
- assert(s.length() == SIZE);
- assert(s.top() == (SIZE-1));
- assert(!s.full());
- intXPStack s1(SIZE*2);
- for (int i = 0; i < SIZE; ++i)
- {
- int x = s.pop();
- assert(x == (SIZE-1) - i);
- s1.push(x);
- }
- assert(s.empty());
- assert(s1.length() == SIZE);
- assert(s1.top() == 0);
- assert(s.OK());
- assert(s1.OK());
- intXPStack s2 (s1);
- assert(s2.length() == SIZE);
- assert(s2.top() == 0);
- assert(s2.OK());
- s1.clear();
- assert(s1.empty());
- s1 = s2;
- assert(s1.length() == SIZE);
- assert(s1.top() == 0);
- assert(s1.OK());
- s1.del_top();
- assert(s1.length() == (SIZE-1));
- assert(s1.top() == 1);
- cout << "s1:"; print(s1);
- assert(s.OK());
- assert(s1.OK());
- assert(s2.OK());
-}
-
-#include "iVStack.h"
-
-
-void Vtest ()
-{
- intVStack s(SIZE);
- assert(s.OK());
- for (int i = 0; i < SIZE; ++i)
- s.push(i);
- assert(s.length() == SIZE);
- assert(s.top() == (SIZE-1));
- assert(s.full());
- intVStack s1(SIZE);
- for (int i = 0; i < SIZE; ++i)
- {
- int x = s.pop();
- assert(x == (SIZE-1) - i);
- s1.push(x);
- }
- assert(s.empty());
- assert(s1.length() == SIZE);
- assert(s1.top() == 0);
- assert(s.OK());
- assert(s1.OK());
- intVStack s2 (s1);
- assert(s2.length() == SIZE);
- assert(s2.top() == 0);
- assert(s2.OK());
- s1.clear();
- assert(s1.empty());
- s1 = s2;
- assert(s1.length() == SIZE);
- assert(s1.top() == 0);
- assert(s1.OK());
- s1.del_top();
- assert(s1.length() == (SIZE-1));
- assert(s1.top() == 1);
- cout << "s1:"; print(s1);
-
- assert(s.OK());
- assert(s1.OK());
- assert(s2.OK());
-}
-
-#include "iSLStack.h"
-
-void SLtest ()
-{
- intSLStack s;
- assert(s.OK());
- for (int i = 0; i < SIZE; ++i)
- s.push(i);
- assert(s.length() == SIZE);
- assert(s.top() == (SIZE-1));
- assert(!s.full());
- intSLStack s1;
- for (int i = 0; i < SIZE; ++i)
- {
- int x = s.pop();
- assert(x == (SIZE-1) - i);
- s1.push(x);
- }
- assert(s.empty());
- assert(s1.length() == SIZE);
- assert(s1.top() == 0);
- assert(s.OK());
- assert(s1.OK());
- intSLStack s2 (s1);
- assert(s2.length() == SIZE);
- assert(s2.top() == 0);
- assert(s2.OK());
- s1.clear();
- assert(s1.empty());
- s1 = s2;
- assert(s1.length() == SIZE);
- assert(s1.top() == 0);
- assert(s1.OK());
- s1.del_top();
- assert(s1.length() == (SIZE-1));
- assert(s1.top() == 1);
-
- cout << "s1:"; print(s1);
- assert(s.OK());
- assert(s1.OK());
- assert(s2.OK());
-}
-
-
-int main(int argv, char** argc)
-{
- if (argv > 1)
- {
- SIZE = abs(atoi(argc[1]));
- SIZE &= ~1;
- }
- else
- SIZE = 100;
- start_timer();
- cout << "XP stacks:\n"; XPtest();
- if (ptimes) cout << "\ntime = " << return_elapsed_time(0.0) << "\n";
- start_timer();
- cout << "V stacks:\n"; Vtest();
- if (ptimes) cout << "\ntime = " << return_elapsed_time(0.0) << "\n";
- start_timer();
- cout << "SL stacks:\n"; SLtest();
- if (ptimes) cout << "\ntime = " << return_elapsed_time(0.0) << "\n";
- cout << "\nEnd of test\n";
- return 0;
-}
diff --git a/contrib/libg++/libg++/tests/tStack.exp b/contrib/libg++/libg++/tests/tStack.exp
deleted file mode 100644
index a7a937abe850..000000000000
--- a/contrib/libg++/libg++/tests/tStack.exp
+++ /dev/null
@@ -1,8 +0,0 @@
-XP stacks:
-s1:[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...]
-V stacks:
-s1:[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...]
-SL stacks:
-s1:[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...]
-
-End of test
diff --git a/contrib/libg++/libg++/tests/tStack.inp b/contrib/libg++/libg++/tests/tStack.inp
deleted file mode 100644
index e69de29bb2d1..000000000000
--- a/contrib/libg++/libg++/tests/tStack.inp
+++ /dev/null
diff --git a/contrib/libg++/libg++/tests/tString.cc b/contrib/libg++/libg++/tests/tString.cc
deleted file mode 100644
index e3499bf39c7b..000000000000
--- a/contrib/libg++/libg++/tests/tString.cc
+++ /dev/null
@@ -1,416 +0,0 @@
-// This may look like C code, but it is really -*- C++ -*-
-
-/*
- A test file for Strings
-*/
-
-#include <String.h>
-#include <stream.h> // see note below on `dec(20)' about why this will go away
-#include <std.h>
-#include <assert.h>
-
-// can't nicely echo assertions because they contain quotes
-
-#define tassert(ex) {if (!(ex)) \
- { cerr << "failed assertion at " << __LINE__ << "\n"; \
- abort(); } }
-
- String X = "Hello";
- String Y = "world";
- String N = "123";
- String c;
- char* s = ",";
- Regex r = "e[a-z]*o";
-
-void decltest()
-{
- String x;
- cout << "an empty String:" << x << "\n";
- assert(x.OK());
- assert(x == "");
-
- String y = "Hello";
- cout << "A string initialized to Hello:" << y << "\n";
- assert(y.OK());
- assert(y == "Hello");
-
- if (y[y.length()-1] == 'o')
- y = y + '\n';
- assert(y == "Hello\n");
- y = "Hello";
-
- String a = y;
- cout << "A string initialized to previous string:" << a << "\n";
- assert(a.OK());
- assert(a == "Hello");
- assert(a == y);
-
- String b (a.at(1, 2));
- cout << "A string initialized to previous string.at(1, 2):" << b << "\n";
- assert(b.OK());
- assert(b == "el");
-
- char ch = '@';
- String z(ch);
- cout << "A string initialized to @:" << z << "\n";
- assert(z.OK());
- assert(z == "@");
-
- // XXX: `dec' is obsolete. Since String.h includes iostream.h, and not
- // stream.h, we include stream.h in this file for the time being. This
- // test will be rewritten to be done the "right" way, but for now, let's
- // save some time and go the easy route.
- String n = dec(20);
- cout << "A string initialized to dec(20):" << n << "\n";
- assert(n.OK());
- assert(n == "20");
-
- int i = atoi(n);
- double f = atof(n);
- cout << "n = " << n << " atoi(n) = " << i << " atof(n) = " << f << "\n";
- assert(i == 20);
- assert(f == 20);
-
- assert(X.OK());
- assert(Y.OK());
- assert(x.OK());
- assert(y.OK());
- assert(z.OK());
- assert(n.OK());
- assert(r.OK());
-}
-
-void cattest()
-{
- String x = X;
- String y = Y;
- String z = x + y;
- cout << "z = x + y = " << z << "\n";
- assert(x.OK());
- assert(y.OK());
- assert(z.OK());
- assert(z == "Helloworld");
-
- x += y;
- cout << "x += y; x = " << x << "\n";
- assert(x.OK());
- assert(y.OK());
- assert(x == "Helloworld");
-
- y = Y;
- x = X;
- y.prepend(x);
- cout << "y.prepend(x); y = " << y << "\n";
- assert(y == "Helloworld");
-
- y = Y;
- x = X;
- cat(x, y, x, x);
- cout << "cat(x, y, x, x); x = " << x << "\n";
- assert(x == "HelloworldHello");
-
- y = Y;
- x = X;
- cat(y, x, x, x);
- cout << "cat(y, x, x, x); x = " << x << "\n";
- assert(x == "worldHelloHello");
-
- x = X;
- y = Y;
- z = x + s + ' ' + y.at("w") + y.after("w") + ".";
- cout << "z = x + s + + y.at(w) + y.after(w) + . = " << z << "\n";
- assert(z.OK());
- assert(z == "Hello, world.");
-
-}
-
-void comparetest()
-{
- String x = X;
- String y = Y;
- String n = N;
- String z = x + y;
-
- assert(x != y);
- assert(x == "Hello");
- assert(x != z.at(0, 4));
- assert (x < y);
- assert(!(x >= z.at(0, 6)));
- assert(x.contains("He"));
- assert (z.contains(x));
- assert(x.contains(r));
-
- assert(!(x.matches(r)));
- assert(x.matches(RXalpha));
- assert(!(n.matches(RXalpha)));
- assert(n.matches(RXint));
- assert(n.matches(RXdouble));
-
- assert(x.index("lo") == 3);
- assert(x.index("l", 2) == 2);
- assert(x.index("l", -1) == 3);
- assert(x.index(r) == 1);
- assert(x.index(r, -2) == 1);
-
- assert(x.contains("el", 1));
- assert(x.contains("el"));
-
- assert(common_prefix(x, "Help") == "Hel");
- assert(common_suffix(x, "to") == "o");
-
- assert(fcompare(x, "hELlo") == 0);
- assert(fcompare(x, "hElp") < 0);
-}
-
-void substrtest()
-{
- String x = X;
-
- char ch = x[0];
- cout << "ch = x[0] = " << ch << "\n";
- assert(ch == 'H');
-
- String z = x.at(2, 3);
- cout << "z = x.at(2, 3) = " << z << "\n";
- assert(z.OK());
- assert(z == "llo");
-
- x.at(2, 2) = "r";
- cout << "x.at(2, 2) = r; x = " << x << "\n";
- assert(x.OK());
- assert(x.at(2,2).OK());
- assert(x == "Hero");
-
- x = X;
- x.at(0, 1) = "j";
- cout << "x.at(0, 1) = j; x = " << x << "\n";
- assert(x.OK());
- assert(x == "jello");
-
- x = X;
- x.at("He") = "je";
- cout << "x.at(He) = je; x = " << x << "\n";
- assert(x.OK());
- assert(x == "jello");
-
- x = X;
- x.at("l", -1) = "i";
- cout << "x.at(l, -1) = i; x = " << x << "\n";
- assert(x.OK());
- assert(x == "Helio");
-
- x = X;
- z = x.at(r);
- cout << "z = x.at(r) = " << z << "\n";
- assert(z.OK());
- assert(z == "ello");
-
- z = x.before("o");
- cout << "z = x.before(o) = " << z << "\n";
- assert(z.OK());
- assert(z == "Hell");
-
- x.before("ll") = "Bri";
- cout << "x.before(ll) = Bri; x = " << x << "\n";
- assert(x.OK());
- assert(x == "Brillo");
-
- x = X;
- z = x.before(2);
- cout << "z = x.before(2) = " << z << "\n";
- assert(z.OK());
- assert(z == "He");
-
- z = x.after("Hel");
- cout << "z = x.after(Hel) = " << z << "\n";
- assert(z.OK());
- assert(z == "lo");
-
- x.after("Hel") = "p";
- cout << "x.after(Hel) = p; x = " << x << "\n";
- assert(x.OK());
- assert(x == "Help");
-
- x = X;
- z = x.after(3);
- cout << "z = x.after(3) = " << z << "\n";
- assert(z.OK());
- assert(z == "o");
-
- z = " a bc";
- z = z.after(RXwhite);
- cout << "z = a bc; z = z.after(RXwhite); z =" << z << "\n";
- assert(z.OK());
- assert(z == "a bc");
-}
-
-
-void utiltest()
-{
- String x = X;
- int matches = x.gsub("l", "ll");
- cout << "x.gsub(l, ll); x = " << x << "\n";
- assert(x.OK());
- assert(matches == 2);
- assert(x == "Hellllo");
-
- x = X;
- assert(x.OK());
- matches = x.gsub(r, "ello should have been replaced by this string");
- assert(x.OK());
- cout << "x.gsub(r, ...); x = " << x << "\n";
- assert(x.OK());
- assert(matches == 1);
- assert(x == "Hello should have been replaced by this string");
-
- matches = x.gsub(RXwhite, "#");
- cout << "x.gsub(RXwhite, #); x = " << x << "\n";
- assert(matches == 7);
- assert(x.OK());
-
- String z = X + Y;
- z.del("loworl");
- cout << "z = x+y; z.del(loworl); z = " << z << "\n";
- assert(z.OK());
- assert(z == "Held");
-
- x = X;
- z = reverse(x);
- cout << "reverse(x) = " << z << "\n";
- assert(z.OK());
- assert(z == "olleH");
-
- x.reverse();
- cout << "x.reverse() = " << x << "\n";
- assert(x.OK());
- assert(x == z);
-
- x = X;
- z = upcase(x);
- cout << "upcase(x) = " << z << "\n";
- assert(z.OK());
- assert(z == "HELLO");
-
- z = downcase(x);
- cout << "downcase(x) = " << z << "\n";
- assert(z.OK());
- assert(z == "hello");
-
- z = capitalize(x);
- cout << "capitalize(x) = " << z << "\n";
- assert(z.OK());
- assert(z == "Hello");
-
- /* Let's see how apostrophe is handled. */
- z = "he asked:'this is nathan's book?'. 'no, it's not',i said.";
- cout << "capitalize(z) = " << capitalize (z) << "\n";
-
- z = replicate('*', 10);
- cout << "z = replicate(*, 10) = " << z << "\n";
- assert(z.OK());
- assert(z == "**********");
- assert(z.length() == 10);
-}
-
-void splittest()
-{
- String z = "This string\thas\nfive words";
- cout << "z = " << z << "\n";
- String w[10];
- int nw = split(z, w, 10, RXwhite);
- assert(nw == 5);
- cout << "from split(z, RXwhite, w, 10), n words = " << nw << ":\n";
- for (int i = 0; i < nw; ++i)
- {
- assert(w[i].OK());
- cout << w[i] << "\n";
- }
- assert(w[0] == "This");
- assert(w[1] == "string");
- assert(w[2] == "has");
- assert(w[3] == "five");
- assert(w[4] == "words");
- assert(w[5] == (char*)0);
-
- z = join(w, nw, "/");
- cout << "z = join(w, nw, /); z =" << z << "\n";
- assert(z.OK());
- assert(z == "This/string/has/five/words");
-}
-
-
-void iotest()
-{
- String z;
- cout << "enter a word:";
- cin >> z;
- cout << "word =" << z << " ";
- cout << "length = " << z.length() << "\n";
-}
-
-void identitytest(String a, String b)
-{
- String x = a;
- String y = b;
- x += b;
- y.prepend(a);
- assert((a + b) == x);
- assert((a + b) == y);
- assert(x == y);
- assert(x.after(a) == b);
- assert(x.before(b, -1) == a);
- assert(x.from(a) == x);
- assert(x.through(b, -1) == x);
- assert(x.at(a) == a);
- assert(x.at(b) == b);
-
- assert(reverse(x) == reverse(b) + reverse(a));
-
- assert((a + b + a) == (a + (b + a)));
-
- x.del(b, -1);
- assert(x == a);
-
- y.before(b, -1) = b;
- assert(y == (b + b));
- y.at(b) = a;
- assert(y == (a + b));
-
- x = a + reverse(a);
- for (int i = 0; i < 7; ++i)
- {
- y = x;
- x += x;
- assert(x.OK());
- assert(x == reverse(x));
- assert(x.index(y) == 0);
- assert(x.index(y, -1) == x.length() / 2);
- }
-}
-
-void freqtest()
-{
- String x = "Hello World";
- SubString y = x.at(0,5);
- assert(x.freq('l') == 3); // char
- assert(x.freq("lo") == 1); // char*
- assert(x.freq(x) == 1); // String
- assert(x.freq(y) == 1); // SubString
-}
-
-int main()
-{
- decltest();
- cattest();
- comparetest();
- substrtest();
- utiltest();
- splittest();
- freqtest();
- identitytest(X, X);
- identitytest(X, Y);
- identitytest(X+Y+N+X+Y+N, "A string that will be used in identitytest but is otherwise just another useless string.");
- iotest();
- cout << "\nEnd of test\n";
- return 0;
-}
diff --git a/contrib/libg++/libg++/tests/tString.exp b/contrib/libg++/libg++/tests/tString.exp
deleted file mode 100644
index 4f06ffacb667..000000000000
--- a/contrib/libg++/libg++/tests/tString.exp
+++ /dev/null
@@ -1,50 +0,0 @@
-an empty String:
-A string initialized to Hello:Hello
-A string initialized to previous string:Hello
-A string initialized to previous string.at(1, 2):el
-A string initialized to @:@
-A string initialized to dec(20):20
-n = 20 atoi(n) = 20 atof(n) = 20
-z = x + y = Helloworld
-x += y; x = Helloworld
-y.prepend(x); y = Helloworld
-cat(x, y, x, x); x = HelloworldHello
-cat(y, x, x, x); x = worldHelloHello
-z = x + s + + y.at(w) + y.after(w) + . = Hello, world.
-ch = x[0] = H
-z = x.at(2, 3) = llo
-x.at(2, 2) = r; x = Hero
-x.at(0, 1) = j; x = jello
-x.at(He) = je; x = jello
-x.at(l, -1) = i; x = Helio
-z = x.at(r) = ello
-z = x.before(o) = Hell
-x.before(ll) = Bri; x = Brillo
-z = x.before(2) = He
-z = x.after(Hel) = lo
-x.after(Hel) = p; x = Help
-z = x.after(3) = o
-z = a bc; z = z.after(RXwhite); z =a bc
-x.gsub(l, ll); x = Hellllo
-x.gsub(r, ...); x = Hello should have been replaced by this string
-x.gsub(RXwhite, #); x = Hello#should#have#been#replaced#by#this#string
-z = x+y; z.del(loworl); z = Held
-reverse(x) = olleH
-x.reverse() = olleH
-upcase(x) = HELLO
-downcase(x) = hello
-capitalize(x) = Hello
-capitalize(z) = He Asked:'This Is Nathan's Book?'. 'No, It's Not',I Said.
-z = replicate(*, 10) = **********
-z = This string has
-five words
-from split(z, RXwhite, w, 10), n words = 5:
-This
-string
-has
-five
-words
-z = join(w, nw, /); z =This/string/has/five/words
-enter a word:word =abcdefghijklmnopqrstuvwxyz length = 26
-
-End of test
diff --git a/contrib/libg++/libg++/tests/tString.inp b/contrib/libg++/libg++/tests/tString.inp
deleted file mode 100644
index b0883f382e1a..000000000000
--- a/contrib/libg++/libg++/tests/tString.inp
+++ /dev/null
@@ -1 +0,0 @@
-abcdefghijklmnopqrstuvwxyz
diff --git a/contrib/libg++/libg++/tests/tVec.cc b/contrib/libg++/libg++/tests/tVec.cc
deleted file mode 100644
index 54b27564a91b..000000000000
--- a/contrib/libg++/libg++/tests/tVec.cc
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- test/demo of Vecs, AVecs
-*/
-
-#include <stream.h>
-#include "iVec.h"
-#include "iAVec.h"
-
-int int_compare(int a, int b)
-{
- return a - b;
-}
-
-int plus(int a, int b)
-{
- return a + b;
-}
-
-int inc(int a)
-{
- return a + 1;
-}
-
-void printint(int a)
-{
- cout << a << " ";
-}
-
-void print(intVec a)
-{
- a.apply(printint);
- cout << "\n";
-}
-
-#include <MLCG.h>
-
-MLCG randgen;
-
-int main()
-{
- intVec a(20);
- int i;
- for (i = 0; i < a.capacity(); ++i) a[i] = randgen.asLong() % 100;
- cout << "a: "; print(a);
- a.sort(int_compare);
- cout << "a.sort():"; print(a);
- intVec b = map(inc, a);
- cout << "b = map(inc, a): "; print(b);
- intVec c = merge(a, b, int_compare);
- cout << "c = merge(a, b): "; print(c);
- intVec d = concat(a, b);
- cout << "d = concat(a, b): "; print(d);
- d.resize(10);
- cout << "d.resize(10): "; print(d);
- d.reverse();
- cout << "d.reverse(): "; print(d);
- d.fill(0, 4, 4);
- cout << "d.fill(0, 4, 4): "; print(d);
- cout << "d.reduce(plus, 0) = " << d.reduce(plus, 0) << "\n";
- intVec e = d.at(2, 5);
- cout << "e = d.at(2, 5): "; print(e);
-
- intAVec x(20);
- for (i = 0; i < x.capacity(); ++i) x[i] = i;
- cout << "x: "; print(x);
- intAVec y(20);
- for (i = 0; i < y.capacity(); ++i) y[i] = randgen.asLong() % 100 + 1;
- cout << "y: "; print(y);
-
- cout << "x + y: "; print(x + y);
- cout << "x - y: "; print(x - y);
- cout << "product(x, y): "; print(product(x,y));
- cout << "quotient(x, y): "; print(quotient(x,y));
- cout << "x * y: " << (x * y) << "\n";
-
- cout << "x + 2: "; print(x + 2);
- cout << "x - 2: "; print(x - 2);
- cout << "x * 2: "; print(x * 2);
- cout << "x / 2: "; print(x / 2);
-
- intAVec z(20, 1);
- cout << "z(20, 1): "; print(z);
- cout << "z = -z: "; print(z = -z);
- cout << "z += x: "; print(z += x);
- cout << "z -= x: "; print(z -= x);
-
- cout << "x.sum(): " << x.sum() << "\n";
- cout << "x.sumsq(): " << x.sumsq() << "\n";
- cout << "x.min(): " << x.min() << "\n";
- cout << "x.max(): " << x.max() << "\n";
- cout << "x.min_index(): " << x.min_index() << "\n";
- cout << "x.max_index(): " << x.max_index() << "\n";
-
- cout << "\nEnd of test\n";
- return 0;
-}
diff --git a/contrib/libg++/libg++/tests/tVec.exp b/contrib/libg++/libg++/tests/tVec.exp
deleted file mode 100644
index 9a65566e9537..000000000000
--- a/contrib/libg++/libg++/tests/tVec.exp
+++ /dev/null
@@ -1,33 +0,0 @@
-a: 72 14 71 72 81 29 86 49 59 84 69 10 94 41 69 95 57 78 62 82
-a.sort():10 14 29 41 49 57 59 62 69 69 71 72 72 78 81 82 84 86 94 95
-b = map(inc, a): 11 15 30 42 50 58 60 63 70 70 72 73 73 79 82 83 85 87 95 96
-c = merge(a, b): 10 11 14 15 29 30 41 42 49 50 57 58 59 60 62 63 69 69 70 70 71 72 72 72 73 73 78 79 81 82 82 83 84 85 86 87 94 95 95 96
-d = concat(a, b): 10 14 29 41 49 57 59 62 69 69 71 72 72 78 81 82 84 86 94 95 11 15 30 42 50 58 60 63 70 70 72 73 73 79 82 83 85 87 95 96
-d.resize(10): 10 14 29 41 49 57 59 62 69 69
-d.reverse(): 69 69 62 59 57 49 41 29 14 10
-d.fill(0, 4, 4): 69 69 62 59 0 0 0 0 14 10
-d.reduce(plus, 0) = 283
-e = d.at(2, 5): 62 59 0 0 0
-x: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
-y: 93 96 14 74 87 41 65 6 38 17 63 37 73 46 34 50 38 55 15 76
-x + y: 93 97 16 77 91 46 71 13 46 26 73 48 85 59 48 65 54 72 33 95
-x - y: -93 -95 -12 -71 -83 -36 -59 1 -30 -8 -53 -26 -61 -33 -20 -35 -22 -38 3 -57
-product(x, y): 0 96 28 222 348 205 390 42 304 153 630 407 876 598 476 750 608 935 270 1444
-quotient(x, y): 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0
-x * y: 8782
-x + 2: 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
-x - 2: -2 -1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
-x * 2: 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38
-x / 2: 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9
-z(20, 1): 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
-z = -z: -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-z += x: -1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
-z -= x: -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-x.sum(): 190
-x.sumsq(): 2470
-x.min(): 0
-x.max(): 19
-x.min_index(): 0
-x.max_index(): 19
-
-End of test
diff --git a/contrib/libg++/libg++/tests/tVec.inp b/contrib/libg++/libg++/tests/tVec.inp
deleted file mode 100644
index e69de29bb2d1..000000000000
--- a/contrib/libg++/libg++/tests/tVec.inp
+++ /dev/null
diff --git a/contrib/libg++/libg++/tests/test_h.cc b/contrib/libg++/libg++/tests/test_h.cc
deleted file mode 100644
index 10cac9b90900..000000000000
--- a/contrib/libg++/libg++/tests/test_h.cc
+++ /dev/null
@@ -1,102 +0,0 @@
-// Use all the g++ headerfiles
-
-// $Author: jason $
-// $Revision: 1.17 $
-// $Date: 1995/06/11 19:23:13 $
-
-#include <_G_config.h>
-// If we have the old iostream library, it defines _OLD_STREAMS
-#include <stream.h>
-
-#include <std.h>
-
-#include <sys/types.h>
-#include <sys/time.h>
-#include <sys/file.h>
-#if _G_HAVE_SYS_WAIT
-#include <sys/wait.h>
-#endif
-#include <sys/signal.h>
-#include <sys/stat.h>
-#include <sys/times.h>
-
-#ifdef _OLD_STREAMS
-#include <PlotFile.h>
-#include <File.h>
-#include <Filebuf.h>
-#include <Fmodes.h>
-#include <filebuf.h>
-#include <SFile.h>
-#endif
-
-#include <ACG.h>
-#include <Fix.h>
-#include <MLCG.h>
-#include <AllocRing.h>
-#include <Binomial.h>
-#include <BitSet.h>
-#include <BitString.h>
-#include <Complex.h>
-#include <DiscUnif.h>
-#include <Erlang.h>
-#include <GetOpt.h>
-#include <Fix16.h>
-#include <Fix24.h>
-#include <Geom.h>
-#include <Rational.h>
-#include <HypGeom.h>
-#include <Integer.h>
-#include <Incremental.h>
-#include <LogNorm.h>
-#include <NegExp.h>
-#include <Normal.h>
-#include <Obstack.h>
-#include <Pix.h>
-#include <SmplHist.h>
-#include <Poisson.h>
-#include <RNG.h>
-#include <Random.h>
-#include <SmplStat.h>
-#include <Regex.h>
-#include <RndInt.h>
-#include <builtin.h>
-#include <String.h>
-#include <Uniform.h>
-#include <Weibull.h>
-
-#include <assert.h>
-#include <libc.h>
-#include <compare.h>
-#include <ctype.h>
-#include <errno.h>
-#include <generic.h>
-#include <grp.h>
-#include <getpagesize.h>
-#include <time.h>
-#include <math.h>
-#include <minmax.h>
-#include <new.h>
-#include <osfcn.h>
-#include <pwd.h>
-#include <setjmp.h>
-#include <signal.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <strclass.h>
-#include <string.h>
-#include <swap.h>
-#include <unistd.h>
-#include <limits.h>
-#ifdef _IO_MAGIC
-#include <istream.h>
-#include <streambuf.h>
-#include <ostream.h>
-#endif
-
-main()
-{
- cout << "Could include all g++-include files\n";
- exit (0);
-}
diff --git a/contrib/libg++/libg++/tests/tiLList.cc b/contrib/libg++/libg++/tests/tiLList.cc
deleted file mode 100644
index d9f43ca7e81d..000000000000
--- a/contrib/libg++/libg++/tests/tiLList.cc
+++ /dev/null
@@ -1,271 +0,0 @@
-#include <_G_config.h>
-
-#ifdef _G_NO_TEMPLATESS
-
-main()
-{
- fprintf(stderr, "(template-based classes not available)\n");
- return 0;
-}
-#else
-
-/*
- test/demo of linked structures
-*/
-
-
-#include <assert.h>
-
-#define tassert(ex) {if ((ex)) cerr << #ex << "\n"; \
- else _assert(#ex, __FILE__,__LINE__); }
-
-#include <iostream.h>
-#include "SLList.h"
-#include "DLList.h"
-
-void printlist(SLList<int>& l)
-{
- for (Pix p = l.first(); p != 0; l.next(p)) cout << l(p) << " ";
- cout << "\n";
-}
-
-
-void SLtest()
-{
- int i;
- SLList<int> a;
- assert(a.OK());
- assert(a.empty());
- cout << "prepending...\n";
- for (i = 0; i < 10; ++i)
- {
- assert(a.length() == i);
- a.prepend(i);
- assert(a.front() == i);
- }
- cout << "a: "; printlist(a);
- cout << "appending...\n";
- for (i = 0; i < 10; ++i)
- {
- assert(a.length() == 10 + i);
- a.append(i);
- assert(a.rear() == i);
- }
- cout << "a: "; printlist(a);
- SLList<int> b = a;
- cout << "b = a: " << "\n"; printlist(b);
- assert(b.OK());
- assert(b.length() == a.length());
- assert(b.front() == a.front());
- assert(b.rear() == a.rear());
- cout << "remove_front of first 10 elements:\n";
- for (i = 0; i < 10; ++i)
- {
- assert(b.length() == 20 - i);
- assert(b.front() == 9 - i);
- b.remove_front();
- }
- assert(b.length() == 10);
- cout << "b: "; printlist(b);
-
- cout << "inserting 100 after sixth element...\n";
- Pix bp = b.first();
- for (i = 0; i < 5; ++i) b.next(bp);
- b.ins_after(bp, 100);
- assert(b.length() == 11);
- cout << "b: "; printlist(b);
- a.join(b);
- cout << "after a.join(b)\n"; printlist(a);
- assert(b.empty());
- assert(a.length() == 31);
- cout << "b: " << "\n"; printlist(b);
- b.prepend(999);
- cout << "b: " << "\n"; printlist(b);
- assert(b.length() == 1);
- assert(b.front() == 999);
- assert(b.rear() == 999);
- assert(b.OK());
- SLList<int> bb = b;
- cout << "bb: " << "\n"; printlist(bb);
- assert(bb.OK());
- assert(bb.length() == 1);
- assert(bb.front() == 999);
- assert(bb.rear() == 999);
- assert(bb.remove_front() == 999);
- b.prepend(1234);
- assert(b.length() == 2);
- b.del_after(b.first());
- assert(b.rear() == 1234);
- assert(b.length() == 1);
- b.del_after(0);
- assert(b.length() == 0);
-
- assert(a.OK());
- assert(b.OK());
- assert(bb.OK());
-}
-
-void printDlist(DLList<int>& l)
-{
- for (Pix p = l.first(); p != 0; l.next(p)) cout << l(p) << " ";
- cout << "\n";
-}
-
-void DLtest()
-{
- int i;
- DLList<int> a;
- assert(a.OK());
- assert(a.empty());
- assert(a.length() == 0);
- cout << "prepending...\n";
- for (i = 0; i < 10; ++i)
- {
- assert(a.length() == i);
- a.prepend(i);
- assert(a.front() == i);
- }
- cout << "a: " << "\n"; printDlist(a);
- cout << "appending...\n";
- for (i = 0; i < 10; ++i)
- {
- assert(a.length() == 10 + i);
- a.append(i);
- assert(a.rear() == i);
- }
- cout << "a: "; printDlist(a);
- DLList<int> b = a;
- assert(b.OK());
- assert(b.length() == a.length());
- assert(b.front() == a.front());
- assert(b.rear() == a.rear());
- cout << "b = a: "; printDlist(b);
- cout << "remove_front of first 10 elements:\n";
- for (i = 0; i < 10; ++i)
- {
- assert(b.length() == 20 - i);
- assert(b.front() == 9 - i);
- b.remove_front();
- }
- assert(b.length() == 10);
- cout << "b: "; printDlist(b);
-
- cout << "inserting 100 after sixth element...\n";
- Pix bp = b.first();
- for (i = 0; i < 5; ++i) b.next(bp);
- b.ins_after(bp, 100);
- assert(b.length() == 11);
- cout << "b: "; printDlist(b);
- DLList<int> aa = a;
- aa.join(b);
- cout << "after aa = a; aa.join(b)\n"; printDlist(aa);
- assert(aa.length() == 31);
- assert(b.empty());
- cout << "b: " << "\n"; printDlist(b);
- b.prepend(999);
- cout << "b: " << "\n"; printDlist(b);
- assert(b.length() == 1);
- assert(b.front() == 999);
- assert(b.rear() == 999);
- assert(b.OK());
- DLList<int> bb = b;
- cout << "bb: " << "\n"; printDlist(bb);
- assert(bb.OK());
- assert(bb.length() == 1);
- assert(bb.front() == 999);
- assert(bb.rear() == 999);
- assert(bb.remove_front() == 999);
- assert(bb.OK());
- b.prepend(1234);
- assert(b.length() == 2);
- bp = b.first();
- b.next(bp);
- b.del(bp, -1);
- assert(b.rear() == 1234);
- assert(b.length() == 1);
- b.del(bp);
- assert(b.length() == 0);
-
- DLList<int> z = a;
- cout << "z = a: "; printDlist(z);
- assert(z.OK());
- assert(z.length() == 20);
- cout << "remove_rear of last 10 elements:\n";
- for (i = 0; i < 10; ++i)
- {
- assert(z.length() == 20 - i);
- assert(z.rear() == 9 - i);
- z.remove_rear();
- }
- assert(z.length() == 10);
-
- cout << "z: "; printDlist(z);
-
- cout << "inserting 100 before alternate elements...\n";
- Pix zp;
- for (zp = z.first(); zp; z.next(zp))
- {
- z.ins_before(zp, 100);
- }
- assert(z.length() == 20);
- cout << "z: "; printDlist(z);
-
- cout << "inserting 200 after sixth element...\n";
- zp = z.first();
- for (i = 0; i < 5; ++i) z.next(zp);
- z.ins_after(zp, 200);
- assert(z.length() == 21);
- cout << "z: "; printDlist(z);
-
- cout << "deleting alternate elements of z...";
- for (zp = z.first(); zp; z.next(zp))
- {
- cout << z(zp) << " ";
- z.del(zp);
- }
- cout << "\n";
- assert(z.length() == 10);
- cout << "z: "; printDlist(z);
-
- cout << "z in reverse order:\n";
- for (zp = z.last(); zp; z.prev(zp)) cout << z(zp) << " ";
- cout << "\n";
- z.clear();
- assert(z.OK());
- assert(z.empty());
- assert(a.OK());
- assert(b.OK());
-}
-
-class X
-{
-public:
- X() { cout << "default ctor called\n"; }
- X(const X&) { cout << "copy ctor called\n"; }
- ~X() { cout << "dtor called\n"; }
-};
-
-main()
-{
- SLtest();
- DLtest();
-
- cout << "\n";
- /* Test case from Magnus Nordborg <magnus@mimer.cap.ed.ac.uk> */
- DLList<X> l;
- l.append(X());
- Pix f = l.first();
- l.del(f);
-
- cout << "\nEnd of test\n";
- return 0;
-}
-
-template class SLNode<int>;
-template class SLList<int>;
-template class DLNode<int>;
-template class DLList<int>;
-
-template class DLNode<X>;
-template class DLList<X>;
-#endif
diff --git a/contrib/libg++/libg++/tests/tiLList.exp b/contrib/libg++/libg++/tests/tiLList.exp
deleted file mode 100644
index 2e7646e5c04b..000000000000
--- a/contrib/libg++/libg++/tests/tiLList.exp
+++ /dev/null
@@ -1,54 +0,0 @@
-prepending...
-a: 9 8 7 6 5 4 3 2 1 0
-appending...
-a: 9 8 7 6 5 4 3 2 1 0 0 1 2 3 4 5 6 7 8 9
-b = a:
-9 8 7 6 5 4 3 2 1 0 0 1 2 3 4 5 6 7 8 9
-remove_front of first 10 elements:
-b: 0 1 2 3 4 5 6 7 8 9
-inserting 100 after sixth element...
-b: 0 1 2 3 4 5 100 6 7 8 9
-after a.join(b)
-9 8 7 6 5 4 3 2 1 0 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 100 6 7 8 9
-b:
-
-b:
-999
-bb:
-999
-prepending...
-a:
-9 8 7 6 5 4 3 2 1 0
-appending...
-a: 9 8 7 6 5 4 3 2 1 0 0 1 2 3 4 5 6 7 8 9
-b = a: 9 8 7 6 5 4 3 2 1 0 0 1 2 3 4 5 6 7 8 9
-remove_front of first 10 elements:
-b: 0 1 2 3 4 5 6 7 8 9
-inserting 100 after sixth element...
-b: 0 1 2 3 4 5 100 6 7 8 9
-after aa = a; aa.join(b)
-9 8 7 6 5 4 3 2 1 0 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 100 6 7 8 9
-b:
-
-b:
-999
-bb:
-999
-z = a: 9 8 7 6 5 4 3 2 1 0 0 1 2 3 4 5 6 7 8 9
-remove_rear of last 10 elements:
-z: 9 8 7 6 5 4 3 2 1 0
-inserting 100 before alternate elements...
-z: 100 9 100 8 100 7 100 6 100 5 100 4 100 3 100 2 100 1 100 0
-inserting 200 after sixth element...
-z: 100 9 100 8 100 7 200 100 6 100 5 100 4 100 3 100 2 100 1 100 0
-deleting alternate elements of z...100 100 100 200 6 5 4 3 2 1 0
-z: 9 8 7 100 100 100 100 100 100 100
-z in reverse order:
-100 100 100 100 100 100 100 7 8 9
-
-default ctor called
-copy ctor called
-dtor called
-dtor called
-
-End of test
diff --git a/contrib/libg++/libiberty/ChangeLog b/contrib/libg++/libiberty/ChangeLog
deleted file mode 100644
index ec5098021bca..000000000000
--- a/contrib/libg++/libiberty/ChangeLog
+++ /dev/null
@@ -1,1872 +0,0 @@
-Mon Jun 10 13:17:17 1996 Doug Evans <dje@canuck.cygnus.com>
-
- * pexecute.c: New file.
-
-Wed Jun 5 16:57:45 1996 Richard Henderson <rth@tamu.edu>
-
- * xmalloc.c: Declare sbrk.
-
-Sat May 4 05:08:45 1996 Peter Schauer (pes@regent.e-technik.tu-muenchen.de)
-
- * alloca-norm.h: Add SPARCworks cc compatible __builtin_alloca
- declaration.
-
-Mon Apr 22 18:41:49 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * xstrerror.c: Include <stdio.h>.
-
-Sun Apr 21 11:55:12 1996 Doug Evans <dje@canuck.cygnus.com>
-
- * Makefile.in (CFILES): Add atexit.c.
-
-Sun Apr 21 09:50:09 1996 Stephen L Moshier (moshier@world.std.com)
-
- * choose-temp.c: Include sys/types.h before sys/file.h for sco3.2v5.
-
-Wed Apr 17 11:17:55 1996 Doug Evans <dje@canuck.cygnus.com>
-
- * choose-temp.c: Don't #include sys/file.h ifdef NO_SYS_FILE_H.
- #include <stdio.h>
- * config/mt-vxworks5 (HDEFINES): Define NO_SYS_FILE_H.
-
-Tue Apr 16 11:27:16 1996 Jeffrey A Law (law@cygnus.com)
-
- * Makefile.in (lneeded-list): If alloca.o is needed, so is xmalloc.o.
- Reverts Feb 8, 1995 change.
-
-Mon Apr 15 12:53:26 1996 Doug Evans <dje@canuck.cygnus.com>
-
- * choose-temp.c: New file.
- * Makefile.in (CFILES): Add choose-temp.c.
- (REQUIRED_OFILES): Add choose-temp.o.
-
-Sat Apr 13 14:19:30 1996 Stu Grossman (grossman@critters.cygnus.com)
-
- * floatformat.c (floatformat_to_double): Don't bias exponent when
- handling zero's, denorms or NaNs.
-
-Thu Apr 11 13:36:56 1996 Stu Grossman (grossman@critters.cygnus.com)
-
- * floatformat.c (floatformat_to_double): Fix bugs with handling
- numbers with fractions < 32 bits.
-
-Mon Apr 8 14:48:34 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * config.table: Permit --enable-shared to specify a list of
- directories.
-
-Tue Mar 19 22:02:07 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * cplus-dem.c (demangle_template): Fix for non-mangled pointer
- arguments.
-
-Fri Mar 8 17:24:18 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * configure.in: If srcdir is `.' and with_target_subdir is not
- `.', then set MULTISRCTOP before calling config-ml.in.
-
-Thu Mar 7 13:37:10 1996 Stan Shebs <shebs@andros.cygnus.com>
-
- * mpw.c (mpw_open): Add debugging output option.
-
-Wed Mar 6 17:36:03 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * cplus-dem.c (demangle_template): Fix for address-of-extern arguments.
-
-Tue Feb 27 12:00:50 1996 Raymond Jou <rjou@mexican.cygnus.com>
-
- * mpw.c (mpwify_filename): Change 6 to 5 in
- strncmp (unixname, "/tmp/", 5).
-
-Tue Feb 20 10:55:53 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * cplus-dem.c (demangle_template): Initialize is_bool. Correctly
- handle 0 as a pointer value parameter.
-
-Mon Feb 5 16:41:44 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * Makefile.in (all): Depend upon required-list.
- (required-list): New target.
- (clean): Remove required-list.
-
-Wed Jan 31 10:19:41 1996 Steve Chamberlain <sac@slash.cygnus.com>
-
- * win32.c: Deleted.
- * config.table (i386-*-win32): Deleted.
- * config/mh-i386win32: Deleted.
-
-Thu Jan 18 11:34:17 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * cplus-dem.c (cplus_demangle_opname): Change opname parameter to
- const char *.
- (cplus_mangle_opname): Change return type and opname parameter to
- const char *. Don't cast return value.
-
-Tue Jan 16 12:13:11 1996 Stan Shebs <shebs@andros.cygnus.com>
-
- * mpw.c: Include Timer.h, in order to get m68k Microseconds trap
- definition.
-
-Wed Jan 3 13:15:04 1996 Fred Fish <fnf@cygnus.com>
-
- * obstack.c: Update copyright to 1996.
- (_obstack_memory_used): Define new function. Called via
- obstack_memory_used macro.
-
-Thu Dec 28 11:39:40 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * xstrdup.c: New file.
- * Makefile.in (CFILES): Add xstrdup.c.
- (REQUIRED_OFILES): Add xstrdup.o.
- (xstrdup.o): New target.
-
-Mon Dec 11 18:18:52 1995 Mike Stump <mrs@cygnus.com>
-
- * atexit.c: New stub to provide atexit on systems that have
- on_exit, like SunOS 4.1.x systems.
- * functions.def (on_exit, atexit): Ditto.
-
-Mon Dec 11 15:42:14 1995 Stan Shebs <shebs@andros.cygnus.com>
-
- * mpw.c (mpw_abort): Remove decl.
- (mpw_access): Move debugging printf.
-
-Sat Dec 2 01:25:23 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * config.table: Consistently use ${host} rather than ${xhost} or
- ${target}.
- * configure.in: Don't bother to set ${xhost} before calling
- config.table.
-
-Tue Nov 28 14:16:57 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * Makefile.in (.c.o): Use test instead of the left bracket, to
- avoid problems with some versions of make.
-
-Tue Nov 28 11:45:17 1995 Stan Shebs <shebs@andros.cygnus.com>
-
- * mpw-make.sed: Fix INCDIR edit to work with Nov 14 change.
-
-Tue Nov 21 11:26:34 1995 Fred Fish <fnf@rtl.cygnus.com>
-
- * config/mh-hpux: Remove. It was only used to define EXTRA_OFILES,
- which was set to just alloca.o, which is now automatically marked
- as needed by the autoconfiguration process.
-
-Tue Nov 21 14:15:06 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * config.table: Check ${with_cross_host} rather than comparing
- ${host} and ${target}.
-
-Thu Nov 16 14:34:42 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * configure.in: If with_target_subdir is empty, set xhost to
- ${host} rather than ${target} before calling config.table.
-
-Tue Nov 14 01:38:30 1995 Doug Evans <dje@canuck.cygnus.com>
-
- * Makefile.in (MULTITOP): Deleted.
- (MULTISRCTOP, MULTIBUILDTOP): New.
- (FLAGS_TO_PASS): Delete INCDIR.
- (INCDIR): Add $(MULTISRCTOP).
- (install_to_libdir): Add $(MULTISUBDIR). Call $(MULTIDO).
- * configure.in: Delete call to cfg-ml-com.in. Call config-ml.in
- instead of cfg-ml-pos.in.
- (cross-compile check): Change to test for with_target_subdir.
- (EXTRA_LINKS): Delete.
-
-Sun Nov 12 12:13:04 1995 Stan Shebs <shebs@andros.cygnus.com>
-
- * mpw-make.sed: Add getpagesize.c.o to needed-list.
- * mpw.c [USE_MW_HEADERS]: Conditionalize compiling of
- functions that are supplied by Metrowerks libraries.
- (fstat): Clean up descriptor->pointer conversion code.
- (InstallConsole, etc): Empty definitions, for when linking
- with SIOUX.
-
-Sun Nov 5 19:25:27 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * Makefile.in (FLAGS_TO_PASS): Also pass PICFLAGS.
- (.c.o): Stylistic change.
-
-Thu Nov 2 12:06:29 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * strtol.c, strtoul.c: Don't include <stdlib.h>. From
- phdm@info.ucl.ac.be (Philippe De Muyter).
-
-Wed Nov 1 11:59:36 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * configure.in: Correct sed call.
-
-Mon Oct 30 13:03:45 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * configure.in: Clean up / simplify for native.
-
- * configure.in: Merge in stuff from ../xiberty/configure.in.
- * Makefile.in (CC): Add definition (so it can be overrridden
- by ../configure).
-
-Tue Oct 24 17:57:27 1995 Stan Shebs <shebs@andros.cygnus.com>
-
- * mpw-make.sed: Leave strerror.c.o in standard list of functions.
- * mpw.c (R_OK, ENOENT, EACCESS, ENOSYS): Remove.
- (link): Remove useless definition with error return.
- (last_microseconds, warn_if_spin_delay, record_for_spin_delay):
- Use UnsignedWide type for microsecond counts.
-
-Thu Oct 19 10:52:07 1995 Michael Meissner <meissner@wogglebug.tiac.net>
-
- * memcmp.c (memcmp): Argument types are const void *, not void
- *const.
-
- * strncasecmp.c (strncasecmp): Include ansidecl.h/stdarg.h, not
- sys/types.h.
- * strcasecmp.c (strcasecmp): Ditto.
-
-Tue Oct 10 11:03:24 1995 Fred Fish <fnf@cygnus.com>
-
- * Makefile.in (BISON): Remove macro.
-
-Tue Sep 26 15:06:46 1995 Stan Shebs <shebs@andros.cygnus.com>
-
- * Makefile.in (HFILES): Add default empty definition.
- * mpw-config.in (config.h): Only update if changed.
- * mpw-make.in: Remove.
- * mpw-make.sed: New file, edits Makefile.in into MPW makefile.
- * mpw.c: Remove semi-clone of strerror code.
- (sys_nerr, sys_errlist): Define here.
- (Microseconds): Only define as A-line trap if m68k Mac.
-
-Wed Sep 20 12:53:32 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * Makefile.in (maintainer-clean): New synonym for distclean.
-
-Mon Aug 28 19:47:52 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * config.table: For host, generalize rs6000-ibm-aix*
- to *-ibm-aix* so we also include powerpc.
-
-Tue Aug 22 03:18:05 1995 Ken Raeburn <raeburn@kr-laptop.cygnus.com>
-
- Fri Jun 16 18:35:40 1995 Pat Rankin (rankin@eql.caltech.edu)
-
- * xstrerror.c: New file.
- * Makefile.in, vmsbuild.com: Compile it.
-
-Mon Jul 31 12:16:32 1995 steve chamberlain <sac@slash.cygnus.com>
-
- * config.table (i386-*-win32): New.
-
-Fri Jul 21 11:35:52 1995 Doug Evans <dje@canuck.cygnus.com>
-
- * Makefile.in (MULTITOP): New variable.
- (MULTIDIRS, MULTISUBDIR, MULTIDO, MULTICLEAN): Likewise.
- (all): Add multilib support.
- (install_to_tooldir, *clean): Likewise.
-
-Mon Jul 10 11:47:27 1995 Ken Raeburn <raeburn@cygnus.com>
-
- * makefile.dos (OBJS): Add hex.o. From DJ Delorie.
-
-Fri Jun 30 17:28:59 1995 Pat Rankin (rankin@eql.caltech.edu)
-
- * vmsbuild.com: create "new-lib.olb", build libiberty under that
- name, and then make it become "liberty.olb" when done, so that an
- incomplete build attempt never leaves behind something which looks
- like a complete library.
-
-Thu Jun 29 00:22:02 1995 Steve Chamberlain <sac@slash.cygnus.com>
-
- * config/mh-i386pe: New file for PE hosts.
- * config.table: Understand PE hosts.
-
-Wed Jun 28 19:13:23 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * cplus-dem.c: Update from gcc.
-
- * argv.c, dummy.c: If __STDC__, #include "alloca-conf.h" after
- <stddef.h>.
- * alloca-norm.h: If __STDC__, declare alloca with its parameter.
-
-Thu Jun 22 18:57:47 1995 Stan Shebs <shebs@andros.cygnus.com>
-
- * mpw-make.in (ALL_CFLAGS): Define NEED_basename.
- * mpw.c: Only test DebugPI once whenever printing debug info.
- (mpwify_filename): If filename is /tmp/foo, change it into :_foo,
- also fix to not write on input filename buffer.
- (mpw_access): Use stat() instead of open(), works for directories
- as well as files.
-
-Mon Jun 19 00:33:22 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * Makefile.in: Massage broken shells that require 'else true'.
-
-Sat Jun 17 23:21:58 1995 Fred Fish <fnf@cygnus.com>
-
- * alloca-norm.h: Declare alloca as type "PTR" to match functions.def.
- Declare __builtin_alloca in the sparc case, as argv.c did.
- * argv.c: Replace inline version of alloca-norm.h at start of file with
- a #include of alloca-conf.h. Precede it with an include of ansidecl.h
- because alloca-norm.h needs to declare alloca as "PTR".
-
-Mon Jun 12 14:24:26 1995 Steve Chamberlain <sac@slash.cygnus.com>
-
- * win32.c: New file.
-
-Fri Jun 9 15:16:14 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * dummy.c: #include "alloca-conf.h".
-
-Wed Jun 7 11:46:23 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * Makefile.in (mostlyclean): Remove stamp-picdir.
- (clean): Don't.
-
-Mon Jun 5 18:46:06 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * config.table (frags): Use toplevel pic frags.
-
- * Makefile.in (PICFLAG): New macro.
- (all): Depend on stamp-picdir.
- (needed-list): Ditto.
- (.c.o): Also build pic object.
- (stamp-picdir): New rule.
- (mostlyclean): Remove pic.
- (clean): Remove stamp-picdir.
-
-Fri Mar 24 16:55:48 1995 Pat Rankin (rankin@eql.caltech.edu)
-
- * vmsbuild.com (config.h): Add `#define NEED_basename'.
-
-Tue May 23 10:12:46 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * clock.c, getopt.c, strtod.c, vsprintf.c: Change from using LGPL
- to libio-style copyright.
- * getpagesize.c: Remove FSF copyright.
-
-Sat May 20 12:30:23 1995 Ken Raeburn <raeburn@kr-laptop.cygnus.com>
-
- Added improved VMS support from Pat Rankin:
-
- Fri Mar 17 18:40:36 1995 Pat Rankin (rankin@eql.caltech.edu)
-
- * vmsbuild.com: new file.
-
- * getpagesize.c (getpagesize): implement for VMS;
- * strerror.c (strerror, strerrno, strtoerrno): add rudimentary
- support for EVMSERR.
-
-Thu May 18 17:01:42 1995 Ken Raeburn <raeburn@kr-laptop.cygnus.com>
-
- Wed May 10 14:28:16 1995 Richard Earnshaw (rearnsha@armltd.co.uk)
-
- * floatformat.c (floatformat_arm_ext): Define.
-
-Tue May 16 13:30:59 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * basename.c, bcmp.c, getcwd.c, insque.c, rename.c, sigsetmask.c,
- strerror.c, strsignal.c: Remove FSF copyright.
- * sigsetmask.c: #include <sys/types.h> - seems to be needed by ISC.
-
-Mon May 15 19:53:17 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * bcopy.c, bzero.c, memcmp.c, memcpy.c, memset.c, strchr.c,
- strrchr.c, strstr.c, vfork.c: Remove FSF Copyright, because this
- might contaminate libstdc++ with the LGPL. (OK'd by RMS 11 Oct 94.)
- * strchr.c, strrchr.c: Add cast to suppress const warning.
-
-Thu May 4 14:36:42 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * cplus-dem.c: Use const instead of CONST. Don't include
- ansidecl.h directly.
-
-Wed Apr 19 01:30:27 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * cplus-dem.c: Don't include libiberty.h. Do declare xmalloc and
- xrealloc.
- (-DMAIN): Don't rely on an externally-defined version number;
- instead, require the version number to be defined as a
- preprocessor macro. Handle the RS/6000 leading dot. Define
- xmalloc, xrealloc and fatal. Don't strip a leading underscore
- if we couldn't demangle the word.
-
-Tue Apr 4 13:03:51 1995 Stan Shebs <shebs@andros.cygnus.com>
-
- (Old mpw.c change descriptions retained for informational value.)
- * mpw.c (warning_threshold): Default to .4 sec.
- (overflow_count, current_progress): New globals.
- (warn_if_spin_delay): Include current progress type,
- such as program name, in message.
- (mpw_start_progress): Set current_progress variable from arg.
- (mpw_end_progress): Report spin delays by power-of-two-size
- buckets instead of constant-size buckets.
-
- * mpw.c: Clean up formatting, types, returns, etc.
- (ENOSYS): Define.
- (mpw_fread, mpw_fwrite): Define.
- (sleep): Define correctly.
-
- * mpw.c: New code to implement cursor spinning support.
- (umask): New function.
- (mpw_fopen, mpw_fseek, stat, fstat): Call PROGRESS.
-
- * mpw.c (mpw_basename, mpw_mixed_basename): New functions, find
- basenames for MPW and MPW/Unix filenames.
- (mpw_special_init): New function, calls Macsbug if desired.
-
- * mpw.c: Add GPL notice.
- (mpwify_filename): Add more transformations.
- (mpw_fopen): Call mpwify_filename on file names.
- (rename): Remove.
- (chdir, getcwd): Add simple definitions.
-
- * mpw.c: Random cleanups, remove unused code bits.
- Added copy of strerror.c for gcc's use.
- (stat, fstat, _stat): New versions based on Guido van Rossum code.
-
- * mpw.c (mpw_fseek): Make it work correctly when doing SEEK_CUR.
-
- * mpw.c (stat): Remove hack definition, get from sys/stat.h.
- (fork, vfork, etc): Print error messages if called.
- (getrusage, sbrk, environ, isatty, link, utime, mkdir, rmdir,
- rename, chown): Define.
-
- * mpw-config.in: New file, MPW version of configure.in.
- * mpw-make.in: New file, MPW version of Makefile.in.
- * mpw.c: New file, MPW compatibility routines.
-
-Fri Mar 24 14:10:30 1995 Jim Kingdon (kingdon@lioth.cygnus.com)
-
- * basename.c: Include config.h before checking for NEED_basename.
-
-Thu Mar 23 19:09:54 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * functions.def: Add DEFFUNC for basename.
-
- * basename.c: Only define basename if NEED_basename.
-
-Thu Mar 16 13:36:05 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * config.table: Fix --enable-shared logic for native builds.
-
-Mon Mar 13 11:05:11 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * cplus-dem.c (demangle_template): Demangle bool literals properly.
-
-Mon Mar 6 23:57:28 1995 Stu Grossman (grossman@cygnus.com)
-
- * strtol.c strtoul.c: Replace these with less buggy versions from
- NetBSD. (strtoul in particular couldn't handle base 16.)
-
-Wed Mar 1 15:59:01 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * config/mt-vxworks5 (HDEFINES): Define NO_SYS_PARAM_H.
-
- * clock.c: If NO_SYS_PARAM_H is defined, don't include
- <sys/param.h>.
- * getcwd.c, getpagesize.c, getruntime.c: Likewise.
-
-Fri Feb 17 15:40:55 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * getruntime.c (get_run_time): Don't assume that CLOCKS_PER_SEC is
- a number; ANSI appears to permit any expression, including a
- function call.
-
- * config.table (*-*-vxworks5*): Use mt-vxworks5 when configuring
- xiberty.
- * config/mt-vxworks5: New file.
-
-Thu Feb 9 14:19:45 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * basename.c (basename): Change argument to be const.
-
-Wed Feb 8 18:06:52 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * Makefile.in (lneeded-list): Don't worry about xmalloc.
-
-Sun Jan 15 00:40:36 1995 Jeff Law (law@snake.cs.utah.edu)
-
- * Makefile.in (distclean): Delete xhost-mkfrag.
-
-Thu Jan 12 16:54:18 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * Makefile.in (lneeded-list): If alloca.o is needed, so is xmalloc.o.
-
-Wed Jan 11 22:39:56 1995 Ken Raeburn <raeburn@cujo.cygnus.com>
-
- * hex.c: New file.
- * Makefile.in (REQUIRED_OFILES, CFILES): List it.
- (hex.o): Add dependencies.
-
- * cplus-dem.c (demangle_prefix): For GNU style constructor and
- destructor names, try demangling the remainder of the string.
-
-Wed Dec 28 00:49:15 1994 Ian Lance Taylor <ian@tweedledumb.cygnus.com>
-
- * vasprintf.c (int_vasprintf): New static function.
- (vasprintf): Use int_vasprintf. Removes assumption that va_list
- is assignment compatible.
-
-Sat Nov 5 19:29:12 1994 Jason Merrill (jason@phydeaux.cygnus.com)
-
- * Makefile.in (LIBCFLAGS): New variable.
- (FLAGS_TO_PASS): Pass it.
- (.c.o): Use it.
-
-Thu Nov 3 19:09:47 1994 Ken Raeburn <raeburn@cujo.cygnus.com>
-
- * getopt.c, getopt1.c: Do compile these functions under Linux,
- since many native versions are based on glibc but are buggy.
-
-Mon Oct 24 15:16:46 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * vasprintf.c: Make 'format' arg be const, to avoid a mismatch
- with prototype in GNU libc. Support stdarg.h as well as varargs.h.
-
-Tue Oct 11 17:48:27 1994 Jason Merrill (jason@phydeaux.cygnus.com)
-
- * Makefile.in (REQUIRED_OFILES): Add vasprintf.o.
- * functions.def: Remove vasprintf.
-
-Wed Sep 14 17:04:55 1994 Ian Lance Taylor (ian@sanguine.cygnus.com)
-
- * xmalloc.c (first_break): New static variable.
- (xmalloc_set_program_name): Record sbrk (0) in first_break.
- (xmalloc): If memory allocation fails, try to report how much
- memory was allocated by the program up to this point.
- (xrealloc): Likewise.
-
-Sun Sep 04 17:58:10 1994 Richard Earnshaw (rwe@pegasus.esprit.ec.org)
-
- * Makefile.in (ERRORS_CC): New variable, defaulted to $(CC). Use it
- when linking dummy.
- * config.table: Add host RISCiX Makefile frag.
- * config/mh-riscix: New file.
-
-Thu Aug 25 17:29:44 1994 Ian Lance Taylor (ian@sanguine.cygnus.com)
-
- * Makefile.in (FLAGS_TO_PASS): Define.
- ($(RULE1)): Use $(FLAGS_TO_PASS).
-
-Wed Aug 24 17:08:47 1994 Ian Lance Taylor (ian@sanguine.cygnus.com)
-
- * vasprintf.c: Include <string.h>.
- (vasprintf): Add casts to void for va_arg to avoid gcc warnings.
- * xatexit.c: Declare malloc.
-
-Fri Aug 19 15:29:12 1994 Kung Hsu (kung@mexican.cygnus.com)
-
- * cplus-dem.c (demangle_args): Fix a bug in previous patch (the
- one below).
-
-Thu Aug 18 14:37:14 1994 Kung Hsu (kung@mexican.cygnus.com)
-
- * cplus-dem.c (demangle args): Handle ARM repeat encoding where
- the type index is greater than 9.
-
-Wed Aug 17 16:13:49 1994 Kung Hsu (kung@mexican.cygnus.com)
-
- * cplus-dem.c (demangle_qualified): accept optional '_' between
- qualified name. This is baecause the template name may end with
- numeric and can mixed up with the length of next qualified name.
-
-Wed Aug 3 05:52:14 1994 D. V. Henkel-Wallace (gumby@cygnus.com)
-
- * config/mt-sunos4: Use our standard location for cross-includes
- and cross-libs when the target is also a "host" environment (ie no
- newlib; includes and such don't belong to us). This is specific
- to the Cygnus Support environment.
-
-Tue Aug 2 15:25:12 1994 Kung Hsu (kung@mexican.cygnus.com)
-
- * cplus-dem.c (demangle_template): demangle as xxx<'Q'> not
- xxx<ch=81>.
-
-Mon Aug 1 17:02:48 1994 Kung Hsu (kung@mexican.cygnus.com)
-
- * cplus-dem.c (main): flush stdout to make pipe work.
-
-Sat Jul 16 12:56:32 1994 Stan Shebs (shebs@andros.cygnus.com)
-
- * config.table (*-*-cxux7*): Recognize.
- * floatformat.c (floatformat_m88110_ext) [HARRIS_FLOAT_FORMAT]:
- Harris-specific float format.
- * config/mh-cxux7: New file.
-
-Wed Jun 29 00:26:17 1994 Peter Schauer (pes@regent.e-technik.tu-muenchen.de)
-
- * cplus-dem.c (demangle_template): Make sure that the result of
- consume_count doesn't index beyond the end of the string.
-
-Mon Jun 20 23:54:37 1994 Peter Schauer (pes@regent.e-technik.tu-muenchen.de)
-
- * cplus-dem.c (gnu_special): Handle vtable mangling of gcc-2.4.5 and
- earlier. Improve test for new vtable mangling. Change output back
- to `virtual table'.
-
-Mon Jun 20 11:37:30 1994 Ian Lance Taylor (ian@sanguine.cygnus.com)
-
- * obstack.c: Always compile this code, even if using the GNU
- library. Avoids problems with relatively recent binary
- incompatibility.
-
-Thu Jun 16 17:54:01 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * cplus-dem.c: Include libiberty.h.
- (xmalloc, xrealloc, free): Don't declare.
- (strstr): Don't declare parameters.
- (xmalloc, xrealloc): Don't define.
- (long_options): Add no-strip-underscores.
- (main): Call xmalloc_set_program_name. Pass n in short options to
- getopt_long. Handle option 'n' to not strip underscores.
- (usage): Mention -n and --no-strip-underscores.
-
-Sun Jun 12 01:37:09 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * cplus-dem.c (demangle_template): Separate consecutive >'s with a
- space.
- (gnu_special): Demangle template and qualified names in a vtable name.
-
-Fri May 27 12:27:52 1994 Ken Raeburn (raeburn@cujo.cygnus.com)
-
- From gas-2.3 and binutils-2.4 net releases:
-
- Wed May 11 22:32:00 1994 DJ Delorie (dj@ctron.com)
-
- * makefile.dos: [new] Makefile for dos/go32
- * configure.bat: update for latest files
- * msdos.c: remove some functions now in libc.a
-
-Fri May 20 18:53:32 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * cplus-dem.c (gnu_special): Recognize thunks, as well as
- the new naming style for vtables (when -fvtable-thunks).
-
-Wed May 18 13:34:06 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * Makefile.in (XTRAFLAGS): Don't define.
- (.c.o, dummy.o): Don't use XTRAFLAGS.
- ($(RULE1)): Don't pass XTRAFLAGS down in recursive call.
-
-Fri May 13 16:02:12 1994 Jim Kingdon (kingdon@lioth.cygnus.com)
-
- * vasprintf.c: New file.
- * Makefile.in, functions.def: Add it.
-
-Fri May 13 16:20:28 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * cplus-dem.c (demangle_fund_type): Grok bool.
-
-Fri May 6 14:44:21 1994 Steve Chamberlain (sac@cygnus.com)
-
- * config.table: Add go32
- * config/mh-go32: New template.
-
-Fri May 6 11:01:59 1994 D. V. Henkel-Wallace (gumby@rtl.cygnus.com)
-
- * config.table, config/mt-sunos4: config for when sun4 is cross target.
-
-Mon Apr 11 00:54:33 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu)
-
- * getopt.c [not __GNU_LIBRARY__] [__GCC__] [not __STDC__]:
- Declare strlen to return int. Don't include stddef.h.
-
-Fri Apr 1 00:38:17 1994 Jim Wilson (wilson@mole.gnu.ai.mit.edu)
-
- * getopt.c: Delete use of IN_GCC to control whether
- stddef.h or gstddef.h is included.
-
-Thu Apr 14 14:00:56 1994 Kung Hsu (kung@mexican.cygnus.com)
-
- * cplus-dem.c (demangle_signature): Fix a bug in template function
- type numbering.
-
-Wed Apr 13 17:23:03 1994 Kung Hsu (kung@mexican.cygnus.com)
-
- * cplus-dem.c (demangle_signature): Fix template function with arm
- style argument type number, Tn.
-
-Wed Apr 13 17:11:15 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * cplus-dem.c (optable): Add new[] and delete[].
-
-Fri Apr 8 11:21:42 1994 Jim Kingdon (kingdon@deneb.cygnus.com)
-
- * argv.c (buildargv): Don't produce empty argument just because
- there is trailing whitespace.
-
-Wed Apr 6 11:42:14 1994 Kung Hsu (kung@mexican.cygnus.com)
-
- * cplus-dem.c (demangle_template): fix 'Q' qualified name bug.
- Handle 'p' same as 'P'.
- * cplus-dem.c (do_type): Handle 'p' same as 'P'.
-
-Sat Mar 26 12:00:13 1994 Peter Schauer (pes@regent.e-technik.tu-muenchen.de)
-
- * floatformat.c (get_field, put_field): Fix off by one error in
- little endian case.
-
-Thu Mar 24 10:40:19 1994 Jim Kingdon (kingdon@lioth.cygnus.com)
-
- * floatformat.c (floatformat_from_double): Pass unsigned char *,
- not char *, to put_field.
-
-Fri Mar 18 12:34:33 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * memmove.c: Re-wrote; placed in public domain.
-
-Wed Mar 16 10:33:07 1994 Jim Kingdon (kingdon@lioth.cygnus.com)
-
- * cplus-dem.c (demangle_prefix): If ARM demangling, don't treat
- __Q* as a constructor.
-
-Mon Mar 14 12:26:02 1994 Ian Lance Taylor (ian@cygnus.com)
-
- * ieee-float.c: Removed; no longer used.
- * Makefile.in: Changed accordingly.
-
-Mon Mar 7 12:28:17 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * floatformat.c (get_field): Removed unused local variable i.
- (put_field): Removed unused local variable i.
-
-Sun Feb 27 21:50:11 1994 Jim Kingdon (kingdon@deneb.cygnus.com)
-
- * floatformat.c: New file, intended to replace ieee-float.c.
- * Makefile.in: Change accordingly.
-
-Thu Feb 24 11:51:12 1994 David J. Mackenzie (djm@rtl.cygnus.com)
-
- * getopt.c: Remove #ifdef GETOPT_COMPAT and #if 0 code.
- (_getopt_initialize): New function, broken out of _getopt_internal.
- (_getopt_internal):
- If long_only and the ARGV-element has the form "-f", where f is
- a valid short option, don't consider it an abbreviated form of
- a long option that starts with f. Otherwise there would be no
- way to give the -f short option.
-
-Thu Feb 10 14:44:16 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu)
-
- * getopt.c [not __GNU_LIBRARY__] [__GNUC__] [not IN_GCC]:
- Test just __STDC__, not emacs.
-
-Wed Feb 9 00:14:00 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu)
-
- * getopt.c [not __GNU_LIBRARY__] [__GNUC__] [not IN_GCC]
- [emacs] [not __STDC__]: Don't include stddef.h. Don't declare strlen.
-
-Fri Dec 24 19:43:00 1993 Noah Friedman (friedman@nutrimat.gnu.ai.mit.edu)
-
- * getopt.c (_NO_PROTO): Define before config.h is included.
-
-Mon Sep 20 15:59:03 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
-
- * getopt.c, getopt1.c [emacs || CONFIG_BROKETS]: Include
- <config.h> only under these, else "config.h".
-
-Thu Aug 12 18:16:49 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
-
- * getopt.c, getopt1.c [HAVE_CONFIG_H]: Include
- <config.h> instead of "config.h".
-
-Sun Feb 20 17:17:01 1994 Ian Lance Taylor (ian@lisa.cygnus.com)
-
- * concat.c: Check ANSI_PROTOTYPES rather than __STDC__ to decide
- whether to use prototypes or not.
- * strerror.c (const): Never undefine; let ansidecl.h handle it.
- * strsignal.c (const): Likewise.
-
-Thu Feb 17 13:27:35 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * xatexit.c (_xexit_cleanup): Declare as extern; don't initialize.
- Merging common and initialized variables need not be supported by
- ANSI C compilers.
- (xatexit): Initialize _xexit_cleanup if not already set.
- * xexit.c: Comment fix.
-
-Wed Feb 16 01:15:36 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * xmalloc.c: Don't declare xexit; it's declared in libiberty.h.
- (xrealloc): If oldmem is NULL, allocate with malloc, rather than
- assuming that realloc works correctly.
-
-Tue Feb 15 09:26:16 1994 Peter Schauer (pes@regent.e-technik.tu-muenchen.de)
-
- * concat.c, ieee-float.c: Replace inclusion of <string.h>
- with explicit function declarations, as recommended by Ian Taylor.
-
-Sat Feb 12 10:31:11 1994 David J. Mackenzie (djm@rtl.cygnus.com)
-
- * xmalloc.c (xmalloc, xrealloc): Use PTR and size_t throughout.
- (malloc, realloc): Declare.
-
-Thu Feb 10 17:08:19 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * argv.c, basename.c: Include ansidecl.h and libiberty.h.
- * concat.c, fdmatch.c, getruntime.c, spaces.c: Likewise.
- * strerror.c, strsignal.c, xatexit.c, xexit.c: Likewise.
- * xmalloc.c: Likewise.
- * concat.c: Don't declare xmalloc. If __STDC__, use <stdarg.h>
- macros, not <varargs.h> macros.
- * spaces.c (spaces): Make return type const. Don't crash if
- malloc returns NULL.
- * strerror.c (struct error_info): Make name and msg fields const.
- (error_names): Make const.
- (strerrno): Make const.
- (strtoerrno): Make argument const.
- * strsignal.c (struct signal_info): Make name and msg fields
- const.
- (signal_names, sys_siglist): Make const.
- (strsignal, strsigno): Make const.
- (strtosigno): Make argument const.
- * xatexit.c: Declare parameter types.
- * xmalloc.c (name): Make const.
- (xmalloc_set_program_name): Make argument const.
- * Makefile.in (INCDIR): Define.
- (.c.o): Use $(INCDIR).
- (dummy.o): Likewise.
- (argv.o, basename.o): New targets; depend on libiberty.h.
- (concat.o, fdmatch.o, getruntime.o, spaces.o): Likewise.
- (strerror.o, strsignal.o, xatexit.o, xexit.o): Likewise.
- (xmalloc.o): Likewise.
- (cplus-dem.o): New target; depend on demangle.h.
- (getopt.o, getopt1.o): New targets; depend on getopt.h.
- (ieee-float.o): New target; depend on ieee-float.h.
- (obstack.o): New target; depend on obstack.h.
-
-Tue Feb 8 05:29:08 1994 David J. Mackenzie (djm@thepub.cygnus.com)
-
- Handle obstack_chunk_alloc returning NULL. This allows
- obstacks to be used by libraries, without forcing them
- to call exit or longjmp.
- * obstack.c (_obstack_begin, _obstack_begin_1, _obstack_newchunk):
- If CALL_CHUNKFUN returns NULL, set alloc_failed, else clear it.
- (_obstack_begin, _obstack_begin_1): Return 1 if successful, 0 if not.
-
-Tue Feb 8 00:32:28 1994 Peter Schauer (pes@regent.e-technik.tu-muenchen.de)
-
- * concat.c, ieee-float.c: Include <string.h>.
-
-Sun Feb 6 21:28:46 1994 David J. Mackenzie (djm@thepub.cygnus.com)
-
- * xmalloc.c (xmalloc_set_program_name): New function.
- (xmalloc, xrealloc): Include the name in the error message, if set.
-
- * Replace atexit.c with xatexit.c.
- * Makefile.in (CFILES), functions.def: Change references.
-
-Sat Feb 5 14:02:32 1994 Stan Shebs (shebs@andros.cygnus.com)
-
- * getruntime.c (get_run_time): Use getrusage or times if
- HAVE_GETRUSAGE or HAVE_TIMES are defined.
-
-Fri Feb 4 15:49:38 1994 David J. Mackenzie (djm@thepub.cygnus.com)
-
- * atexit.c: New file.
- * Makefile.in (CFILES), functions.def: Add it.
- * xexit.c: New file.
- * Makefile.in (CFILES, REQUIRED_OFILES): Add it.
- * xmalloc.c (xmalloc, xrealloc): Call xexit instead of exit.
- Change request for 0 bytes into request for 1 byte.
-
-Wed Feb 2 11:36:49 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * xmalloc.c (xmalloc, xrealloc): Print size using %lu, and cast to
- unsigned long, to avoid warnings.
-
-Fri Jan 28 17:49:06 1994 Ken Raeburn (raeburn@cujo.cygnus.com)
-
- * dummy.c: Don't include time.h ever; always define clock_t as
- "unsigned long". Until gcc/fixincludes ensures that clock_t
- exists, __STDC__ isn't a sufficient test. And if clock() doesn't
- exist, clock_t probably doesn't either.
-
-Mon Jan 24 11:52:31 1994 Stan Shebs (shebs@andros.cygnus.com)
-
- * clock.c, getruntime.c: New files.
- * Makefile.in: Add to file lists.
- * functions.def (clock): Add to list.
- * dummy.c (time.h): Add if __STDC__.
- (clock_t): #define as "unsigned long" if not __STDC__.
-
-Tue Jan 11 11:27:44 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * strtod.c: Declare atof. From edler@jan.ultra.nyu.edu (Jan
- Edler).
-
-Tue Dec 28 14:17:30 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * Makefile.in (errors): Use CFLAGS as well as LDFLAGS when
- linking.
-
-Fri Dec 17 12:26:07 1993 Kung Hsu (kung@cirdan.cygnus.com)
-
- * cplus-dem.c (demangle_arm_pt): New function. Common code
- for ARM template demangling.
- * cplus-dem.c (demangle_class_name): Use demangle_arm_pt.
- * cplus-dem.c (demangle_prefix): Likewise.
-
-Tue Nov 30 15:47:48 1993 Jason Merrill (jason@deneb.cygnus.com)
-
- * cplus-dem.c (cplus_demangle_opname): Add CONST to please gcc.
-
-Sat Nov 27 11:05:50 1993 Fred Fish (fnf@cygnus.com)
-
- Merge changes from tom@basil.icce.rug.nl (Tom R.Hageman)
- * strerror.c, strsignal.c: As a small space optimization, don't
- include messages when they aren't actually used.
-
- Merge changes from takefive.co.at!joe (Josef Leherbauer)
- * cplus-dem.c (demangle_prefix, demangle_function_name,
- cplus_demangle_opname): Fixes for systems where cplus_marker
- is something other than '$'.
-
-Fri Nov 26 13:51:11 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * waitpid.c: Simple-minded approcimation to waitpid
- using vanilla wait.
- * functions.def, Makefile.in: Update accordingly,
-
-Thu Nov 18 18:01:15 1993 Kung Hsu (kung@cirdan.cygnus.com)
-
- * cplus-dem.c(demangle_template): fix bug template instantiation
- with value of user defined type.
-
-Wed Nov 17 18:30:21 1993 Kung Hsu (kung@cirdan.cygnus.com)
-
- * cplus-dem.c(cplus_demangle_opname): add the subject new function
- to support unified search of operator in class.
-
-Wed Nov 10 09:47:22 1993 Jim Kingdon (kingdon@lioth.cygnus.com)
-
- gcc -Wall lint:
- * strtoul.c (strtoul): use "(digit = *s) != '\0'" not just
- "digit = *s" as condition in while loop.
-
-Tue Nov 9 15:52:22 1993 Mark Eichin (eichin@cygnus.com)
-
- * Makefile.in: pass SHELL to recursive make
-
-Thu Nov 4 12:09:26 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * vfprintf.c, vprintf.c, vsprintf.c: Make format arg
- be (const char*), for ANSI (and gcc w/fixproto) consistency.
-
-Thu Nov 4 08:29:04 1993 Jim Kingdon (kingdon@lioth.cygnus.com)
-
- * config.table: Make *-*-hiux* use mh-hpux.
-
-Fri Oct 22 07:53:15 1993 Jim Kingdon (kingdon@lioth.cygnus.com)
-
- * config.table: Add * to end of all OS names.
-
-Tue Oct 19 17:12:01 1993 david d `zoo' zuhn (zoo@rtl.cygnus.com)
-
- * Makefile.in (lneeded-list): ensure that object file names are
- not duplicated, as multiple instances of the same object file in
- a library causes problems on some machines
-
-Mon Oct 18 21:59:28 1993 Jim Kingdon (kingdon@lioth.cygnus.com)
-
- * strcasecmp.c, strncasecmp.c: Change u_char to unsigned char.
-
-Fri Oct 15 22:17:11 1993 david d `zoo' zuhn (zoo@rtl.cygnus.com)
-
- * strncasecmp.c: new file, implements strncasecmp
- * strcasecmp.c: new file, implement strcasecmp
-
- * Makefile.in (CFILES): list these two new source files
-
- * functions.def: add strcasecmp and strncasecmp entries
-
-Fri Oct 15 14:53:05 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * strtoul.c (strtoul), strtol.c (strtol): Handle overflow
- according to ANSI C.
-
-Thu Oct 14 16:34:19 1993 Kung Hsu (kung@cirdan.cygnus.com)
-
- * cplus-dem.c: add support of ARM global constructor/destructor,
- and 'G' for passing record or union in parameter.
-
-Wed Oct 13 13:36:19 1993 Jim Kingdon (kingdon@lioth.cygnus.com)
-
- * Makefile.in: Fix comment to clarify that stuff in REQUIRED_OFILES
- should not be in functions.def.
-
-Wed Oct 13 13:13:38 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * functions.def: Removed xmalloc. Stuff in REQUIRED_OFILES should
- not be in functions.def.
-
-Mon Oct 4 18:26:39 1993 Kung Hsu (kung@cirdan.cygnus.com)
-
- * cplus-dem.c: change globl constructor/destructor to proper name
-
-Tue Sep 28 18:11:07 1993 Kung Hsu (kung@cirdan.cygnus.com)
-
- * cplus-dem.c: fix bug in constructor/destructor
-
-Tue Sep 28 16:20:49 1993 Kung Hsu (kung@cirdan.cygnus.com)
-
- * cplus-dem.c: support both old and new _vt$... vtbl mangled names
-
-Fri Sep 24 19:07:16 1993 Jason Merrill (jason@deneb.cygnus.com)
-
- * cplus-dem.c: Fix demangle_template prototype
-
-Fri Sep 24 17:32:55 1993 Kung Hsu (kung@cirdan.cygnus.com)
-
- * cplus-dem.c: fix template demangling
- * cplus-dem.c: fix const type demangling
- * cplus-dem.c: fix constructor/destructor, virtual table,
- qualifier, global constructor/destructor demangling
-
-Wed Sep 1 23:13:11 1993 Jim Kingdon (kingdon@lioth.cygnus.com)
-
- * strsignal.c, strerror.c: Use fully-bracketed initializer to
- keep gcc -Wall happy.
-
-Fri Aug 27 10:30:09 1993 Jason Merrill (jason@deneb.cygnus.com)
-
- * cplus-dem.c (do_type): Add CONSTS to make gcc happy with last
- patch.
-
-Fri Aug 27 11:24:54 1993 Jim Kingdon (kingdon@lioth.cygnus.com)
-
- Patch from Paul Flinders:
- * cplus-dem.c (do_type): Deal with arrays.
-
-Tue Aug 24 14:23:50 1993 Jim Kingdon (kingdon@lioth.cygnus.com)
-
- * cplus-dem.c (demangle_qualified: Deal with GNU format for more
- than 9 classes.
-
-Wed Aug 18 19:50:29 1993 Jason Merrill (jason@deneb.cygnus.com)
-
- * Makefile.in (dummy.o): Redirect to /dev/null to avoid "variable
- not initialized" warnings under HP/UX
-
-Sun Aug 15 20:42:40 1993 Jim Kingdon (kingdon@lioth.cygnus.com)
-
- * strerror.c: Move include of stdio.h after sys_errlist #define.
- Also remove NULL definition (stdio.h always defines NULL, so it
- never did anything but clutter up the code).
-
-Sat Aug 14 14:21:49 1993 david d `zoo' zuhn (zoo@rtl.cygnus.com)
-
- * Makefile.in, functions.def: handle xmalloc.c
-
- * xmalloc.c: provide xmalloc and xrealloc functions
-
-Thu Aug 12 17:38:57 1993 David J. Mackenzie (djm@thepub.cygnus.com)
-
- * cplus-dem.c: Fix a comment.
-
-Sat Aug 7 13:56:35 1993 David J. Mackenzie (djm@thepub.cygnus.com)
-
- * getopt1.c: Declare const the way getopt.c does.
-
-Fri Aug 6 17:03:13 1993 David J. Mackenzie (djm@thepub.cygnus.com)
-
- * obstack.c, alloca.c: Update from FSF.
- * getopt.c, getopt1.c: Update to current FSF version, which
- doesn't use alloca.
-
-Tue Jul 27 14:03:57 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
-
- * Makefile.in (demangle): Add the target with a message saying
- where demangle went.
-
-Mon Jul 26 15:49:54 1993 Jim Kingdon (kingdon@lioth.cygnus.com)
-
- * Makefile.in: Remove obsolete `demangle' target.
-
-Thu Jul 22 08:31:01 1993 Fred Fish (fnf@deneb.cygnus.com)
-
- * cplus-dem.c (arm_special): Apply patch from arg@lucid.com to
- avoid infinite loop on vtbl symbols with disambiguating "junk"
- tacked on the end.
-
-Mon Jul 19 14:10:37 1993 david d `zoo' zuhn (zoo@rtl.cygnus.com)
-
- * strsignal.c: work around some systems losing definitions of
- sys_siglist
-
- * config/mh-lynxos: this system has a losing definition of
- sys_siglist
-
- * config.table: use mh-lynxos for *-*-lynxos
-
-Mon Jul 19 17:08:52 1993 Ken Raeburn (raeburn@rtl.cygnus.com)
-
- * config.table: Add support for HPPA BSD hosts.
-
- * config/mh-hpbsd: New file.
-
-Mon Jul 12 18:00:40 1993 K. Richard Pixley (rich@cygnus.com)
-
- * Makefile.in (TAGS): make work when srcdir != objdir.
-
-Sun Jun 27 15:35:31 1993 David J. Mackenzie (djm@thepub.cygnus.com)
-
- * cplus-dem.c (main): Add long options, including --help and
- --version.
- (usage): New function from code in main.
-
-Tue Jun 22 11:37:38 1993 Per Bothner (bothner@deneb.cygnus.com)
-
- * config.table: New shell scipt, sourced by both ./configure,in
- and ../xiberty/configure.in, to avoid maintainance lossages.
- * configure.in and ../xiberty/configure.in: Use config.table.
-
- * configure.in: Don't use mh-aix for AIX 3.2, only for 3.1.
- * configure.in: Map *-*-irix* (except irix4) to mh-sysv.
- * ../xiberty/configure.in: Update from ./configure.in.
-
-Tue Jun 15 17:05:31 1993 david d `zoo' zuhn (zoo at cirdan.cygnus.com)
-
- * Makefile.in: remove parentdir support
-
-Wed May 26 12:59:09 1993 Peter Schauer (pes@regent.e-technik.tu-muenchen.de)
-
- * cplus-dem.c (xrealloc): Match definition with prototype.
-
-Tue May 25 14:27:51 1993 Peter Schauer (pes@regent.e-technik.tu-muenchen.de)
-
- * cplus-dem.c (demangle_prefix): Demangle cfront
- local variables as an extension to ARM demangling.
-
-Fri May 21 09:53:57 1993 Jim Kingdon (kingdon@lioth.cygnus.com)
-
- * ieee-float.c: Don't require pointers to double to be aligned.
-
-Tue May 18 17:12:10 1993 Fred Fish (fnf@cygnus.com)
-
- (merge changes from dlong@cse.ucsc.edu)
- * cplus-dem.c (consume_count): Simplify.
- * cplus-dem.c (arm_pt, demangle_class_name): New functions.
- * cplus-dem.c (various): Calls to arm_pt, demangle_class_name.
-
- * cplus-dem.c (xmalloc, xrealloc, strstr): Make extern decls into
- full prototypes.
- * cplus-dem.c (free): Add prototype.
- * cplus-dem.c (optable): Fully bracketize initializer.
-
-Fri May 14 17:13:05 1993 Per Bothner (bothner@cygnus.com)
-
- * cplus-dem.c: Whether initial underscores are stripped
- depends on the external variable prepends_underscore
- (which is generated by the binutils Makefile).
-
-Fri May 14 07:32:20 1993 Ken Raeburn (raeburn@deneb.cygnus.com)
-
- * cplus-dem.c (mop_up, arm_special): Remove some unused variables.
-
-Tue May 4 20:31:59 1993 Fred Fish (fnf@cygnus.com)
-
- * cplus-dem.c (consume_count): Return zero if arg does not
- start with digit, and don't consume any input.
-
-Tue May 4 08:10:28 1993 Jim Kingdon (kingdon@cygnus.com)
-
- * Makefile.in (demangle): Use ${srcdir} not $^.
-
- * strtod.c: New file, needed at least for BSD 4.3.
-
-Sun May 2 11:30:42 1993 Fred Fish (fnf@cygnus.com)
-
- * strsignal.c (sys_siglist): For ANSI compilations, type is
- "const char *const". Also remove conditionalization on __STDC__
- since const is defined away for non-ANSI.
-
-Wed Apr 28 19:29:55 1993 Ken Raeburn (raeburn@deneb.cygnus.com)
-
- * configure.in: Recognize *-*-hpux.
- * config/mh-hpux: New file.
-
-Tue Apr 27 15:22:19 1993 Per Bothner (bothner@cygnus.com)
-
- * tmpnam.c: Added ANSI tmpnam() function.
- * functions.def, Makefile.in: Update accordingly.
-
-Tue Apr 27 13:38:38 1993 Peter Schauer (pes@regent.e-technik.tu-muenchen.de)
-
- * cplus-dem.c (demangle_function_name): Get the demangling of
- stop__1A right.
-
-Fri Apr 16 23:48:24 1993 Jim Kingdon (kingdon at calvin)
-
- * cplus-dem.c: Declare strstr return type.
-
-Fri Mar 26 12:01:26 1993 Jim Kingdon (kingdon@cygnus.com)
-
- * strsignal.c: Add some AIX signals.
-
-Thu Mar 25 15:17:23 1993 Ian Lance Taylor (ian@cygnus.com)
-
- * Makefile.in (MAKEOVERRIDES): Define to be empty.
-
-Wed Mar 24 01:59:25 1993 david d `zoo' zuhn (zoo at poseidon.cygnus.com)
-
- * Makefile.in: add installcheck & dvi targets
-
-Thu Mar 18 14:05:44 1993 Per Bothner (bothner@rtl.cygnus.com)
-
- * ieee-float.c: New file, moved from ../gdb (since it is
- needed by ../opcode/m68k-dis.c).
-
-Tue Mar 2 17:47:31 1993 Fred Fish (fnf@cygnus.com)
-
- * cplus-dem.c: Replace all references to cfront with ARM.
-
-Fri Feb 26 00:17:07 1993 Per Bothner (bothner@rtl.cygnus.com)
-
- * cplus-dem.c: Fix main program (when compiled with -DMAIN)
- to be more useful as a filter.
-
-Sat Feb 20 21:41:39 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
-
- * Makefile.in (install_to_libdir, install_to_tooldir): Go into the
- destination directory before running $(RANLIB), in case that
- program tries to create a file in the current directory as part of
- its work.
-
-Thu Feb 18 23:00:19 1993 John Gilmore (gnu@cygnus.com)
-
- * strsignal.c (sys_siglist): Remove yet another *%^&%&$# "const"
- because BSD 4.4 lacks one. Isn't this fun?
-
-Thu Feb 18 11:24:25 1993 Fred Fish (fnf@cygnus.com)
-
- * cplus-dem.c (demangle_signature): Set func_done after
- demangling a template.
- * cplus-dem.c (demangle_template): Fix several small bugs
- in demangling GNU style templates.
- * cplus-dem.c (demangle_prefix): Fix for templates in GNU
- style constructors.
- * cplus-dem.c (gnu_special): Fix for templates in GNU style
- static data members.
-
-Tue Feb 16 17:28:35 1993 Fred Fish (fnf@cygnus.com)
-
- * cplus-dem.c (demangle_signature): Modify to include type
- modifiers like static and const in remembered types.
-
-Thu Feb 11 22:20:47 1993 Fred Fish (fnf@cygnus.com)
-
- * cplus-dem.c (demangled_qualified): Add new parameter that tells
- whether to prepend or append the qualifiers.
- * cplus-dem.c (string_prepends): Used now, remove #if 0.
- * cplus-dem.c (demangle_signature): Call demangle_qualified
- with prepending.
- * cplus_dem.c (gnu_special): Recognize static data members that
- use qualified names.
- * cplus-dem.c (demangle_qualified): Accumulate qualifiers in a
- temporary buffer and the prepend or append them to the result,
- as specified by the new "append" flag.
- * cplus-dem.c (do_type): Call demangled_qualified with
- appending.
-
-Mon Dec 28 10:47:19 1992 Ken Raeburn (raeburn@cygnus.com)
-
- * strsignal.c (signal_table): Now const.
- (init_signal_tables): Variable eip now points to const.
-
- * strerror.c (error_table): Now const.
- (init_error_tables): Variable eip now points to const.
-
-Tue Dec 15 15:36:50 1992 Per Bothner (bothner@cygnus.com)
-
- * memchr.c (memchr): New (ANSI standard) function.
- * Makefile.in, functions.def: Added memchr.
- * Makefile.in (AR_FLAGS): Use rc instad of non-standard cq.
-
-Wed Dec 2 22:49:10 1992 david d `zoo' zuhn (zoo at cirdan.cygnus.com)
-
- * getopt.c: remove use of USG around <alloca.h>, which never meant
- anything anyway
-
- * config/mh-{aix,apollo68,ncr3000,sysv,sysv4}: removed definitions
- of USG and USGr4
-
-Thu Nov 19 03:09:33 1992 Brendan Kehoe (brendan@lisa.cygnus.com)
-
- * cplus-dem.c (demangle_fund_type): Recognize `w', a wide character;
- it's now a type according to the ANSI X3J16 working paper; output
- "wchar_t" for it.
- (demangle_template): Accept `w' as an integral type.
- (xmalloc, xrealloc): Use `char *', not `PTR'. Cast calls to their
- counterparts malloc and realloc to `char *'.
- (main): Exit with a 0 status.
- * Makefile.in (demangle): Don't expect the user to define
- DEMANGLE, instead force to be cplus-dem.c. Look in $(srcdir)/../include
- for demangle.h. Pass it any HDEFINES or XTRAFLAGS.
-
-Wed Nov 18 18:56:20 1992 John Gilmore (gnu@cygnus.com)
-
- * Makefile.in (AR_FLAGS): Avoid verbosity.
- * config/mh-sysv4: Remove AR_FLAGS override, use INSTALL=cp,
- replace USGr4 with HAVE_SYSCONF.
- * config/mh-solaris: Remove; mh-sysv4 works now.
- * getpagesize.c: Replace USGr4 with HAVE_SYSCONF.
- * configure.in: Simplify host matching table, remove separate
- solaris config file.
-
-Sun Nov 15 09:35:16 1992 Fred Fish (fnf@cygnus.com)
-
- * configure.in (i[34]86-*-solaris2*): Add, use mh-sysv4.
-
-Tue Nov 3 21:27:03 1992 Brendan Kehoe (brendan@cygnus.com)
-
- * cplus-dem.c (xmalloc, xrealloc): Add decls.
- (remember_type): Don't cast xmalloc.
- (string_need): Likewise; don't cast xrealloc either.
-
-Fri Oct 23 08:52:01 1992 Ian Lance Taylor (ian@cygnus.com)
-
- * Makefile.in, functions.defs, rename.c: added simple
- implementation of rename, since some binutils programs use it.
-
-Thu Oct 15 15:18:22 1992 Per Bothner (bothner@cygnus.com)
-
- * strsignal.c: Add appropriate 'const' to sys_siglist
- extern declaration (if __STDC__). (Needed for Linux.)
- * strsignal.c (strsignal): Add cast to remove const-ness.
-
-Fri Oct 9 03:22:55 1992 John Gilmore (gnu@cygnus.com)
-
- * Makefile.in (needed.awk, needed2.awk): Remove erroneous \'s
- before "'s, diagnosed by BSD 4.4 awk.
-
-Thu Oct 8 15:25:12 1992 Ian Lance Taylor (ian@cygnus.com)
-
- * Makefile.in: create config.h and needed-list through $(CONFIG_H)
- and $(NEEDED_LIST), to give some hooks for xiberty.
-
-Thu Oct 1 23:31:42 1992 david d `zoo' zuhn (zoo at cirdan.cygnus.com)
-
- * configure.in: use cpu-vendor-triple instead of nested cases
-
-Wed Sep 30 11:26:59 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * Makefile.in, argv.c, basename.c, bcmp.c, bcopy.c, bzero.c,
- concat.c, cplus-dem.c, fdmatch.c, getcwd.c, getopt.c, getopt1.c,
- getpagesize.c, insque.c, memcmp.c, memcpy.c, memmove.c, memset.c,
- obstack.c, sigsetmask.c, spaces.c, strchr.c, strerror.c,
- strrchr.c, strsignal.c, strstr.c, vfork.c, vsprintf.c:
- Convert from using GPL to LGPL.
-
-Sat Sep 26 04:01:30 1992 John Gilmore (gnu@cygnus.com)
-
- * Makefile.in (errors): Leave dummy.o and dummy around so that
- we can see how the needed list was generated (it's sometimes wrong).
- (mostlyclean): Remove them.
-
-Mon Sep 21 14:50:42 1992 Ian Lance Taylor (ian@cygnus.com)
-
- * getcwd.c: supply a default if MAXPATHLEN is not defined.
-
- * config/mh-irix4: set EXTRA_OFILES to alloca.o, from WRS.
-
-Wed Sep 9 12:41:48 1992 Ian Lance Taylor (ian@cygnus.com)
-
- * Makefile.in: Use XTRAFLAGS when compiling, so that xiberty works
- when cross-compiling.
-
-Thu Sep 3 13:29:39 1992 K. Richard Pixley (rich@sendai.cygnus.com)
-
- * cplus-dem.c: (demangle_prefix): reduction in strength of strstr
- as a time optimization.
-
- * cplus-dem.c (cplus_demangle): remove strpbrk test. Appears to
- be more expensive than simply demangling.
-
- * cplus-dem.c (cplus_match): new function.
-
-Tue Sep 1 15:24:04 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * cplus-dem.c: #include <stdio.h>, to define NULL.
- Define current_demangling_style.
-
-Sun Aug 30 17:58:19 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * cplus-dem.c: New file, moved from ../gdb.
- * cplus-dem.c (set_cplus_marker_for_demangling): New exported
- function, to avoid compiling in target-dependency for CPLUS_MARKER.
- * cplus-dem.c (cplus_demangle): Allow demangling style option
- to be passed as a parameter, but using the global variable
- current_demangling_style as a default.
- * Makefile.in: Update for cplus-dem.c
-
-Sat Aug 29 10:44:09 1992 Fred Fish (fnf@cygnus.com)
-
- * obstack.c: Merge in comment changes from FSF version. Now
- matches the FSF version exactly.
-
-Fri Aug 28 18:39:08 1992 John Gilmore (gnu@cygnus.com)
-
- * obstack.c (CALL_FREEFUN): Can't use ?: with void values (at
- least on losing DECstations!); use if-then-else instead.
-
-Wed Aug 19 14:40:34 1992 Ian Lance Taylor (ian@cygnus.com)
-
- * Makefile.in: always create installation directories.
-
-Mon Aug 10 17:33:40 1992 david d `zoo' zuhn (zoo at cirdan.cygnus.com)
-
- * Makefile.in: clean up definition of CFILES, more comments
-
-Sat Aug 8 23:10:59 1992 Fred Fish (fnf@cygnus.com)
-
- * getopt.c (my_index): Make first arg const to match strchr,
- which it sometimes is remapped to.
-
-Sat Aug 1 13:48:50 1992 Fred Fish (fnf@cygnus.com)
-
- * obstack.c (DEFAULT_ALIGNMENT): Update to match FSF version.
- * obstack.c (_obstack_begin): Initialize use_extra_arg.
- * obstack.c (_obstack_begin_1): New, from FSF version.
-
-Mon Jul 20 21:07:58 1992 Fred Fish (fnf@cygnus.com)
-
- * obstack.c (CALL_CHECKFUN, CALL_FREEFUN): Use use_extra_arg and
- extra_arg.
- * obstack.c (_obstack_begin): Remove area_id and flags arguments
- (previously added for mmalloc support, interface has changed).
- Also convert flags usage to use use_extra_arg and maybe_empty_object.
-
-Fri Jul 10 00:41:53 1992 Fred Fish (fnf@cygnus.com)
-
- * argv.c: Move expandargv inline and eliminate static variables.
- Rewrite to always allocate in powers of two. Fix to return an
- argv with a single null string arg if passed a null string.
-
-Fri Jul 3 20:27:29 1992 Fred Fish (fnf@cygnus.com)
-
- * random.c, sigsetmask.c, strerror.c, strsignal.c: Remove
- "(void)" casts from function calls where the return value is
- ignored, in accordance with GNU coding standards.
-
-Mon Jun 29 10:54:19 1992 Fred Fish (fnf at cygnus.com)
-
- * bcopy.c, strerror.c, strsignal.c: Lint.
-
-Thu Jun 25 09:18:41 1992 K. Richard Pixley (rich@rtl.cygnus.com)
-
- * getopt.c: merge changes from make.
-
-Thu Jun 25 04:43:22 1992 John Gilmore (gnu at cygnus.com)
-
- * alloca.c: Incorporate fixes from gdb/alloca.c.
- FIXME: Eventually move gdb's alloca configuration files here,
- and remove gdb/alloca.c and its Makefile.in support.
-
-Tue Jun 23 21:56:30 1992 Fred Fish (fnf@cygnus.com)
-
- * dummy.c: Define NOTHING to /*nothing*/, change return type
- of main to int and return zero.
- * functions.def: Supply NOTHING as the fourth arg to macros
- that don't have an explicit arg, to satisfy picky preprocessors.
-
-Wed Jun 17 18:13:58 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * Makefile.in: Clean up *clean rules, as per standards.texi.
-
-Tue Jun 16 16:11:59 1992 K. Richard Pixley (rich@rtl.cygnus.com)
-
- * getopt.c, getopt1.c: merged largely gratuitous, mostly
- whitespace diffs from other prep distributions.
-
-Mon Jun 15 12:25:46 1992 Fred Fish (fnf@cygnus.com)
-
- * config/mh-ncr3000 (INSTALL): Don't use /usr/ucb/install,
- it is broken on ncr 3000's.
-
-Mon Jun 15 01:03:26 1992 John Gilmore (gnu at cygnus.com)
-
- * sigsetmask.c: Rewrite. Old one was very confused about its
- arguments and result. New one can't do much, but at least knows
- what it can't do, and it's good enough for GDB's use.
-
-Sun Jun 14 15:17:40 1992 Stu Grossman (grossman at cygnus.com)
-
- * functions.def: Use proper prototype for strtoul.
-
-Fri Jun 12 19:22:40 1992 John Gilmore (gnu at cygnus.com)
-
- * Makefile.in: Add random.c.
- * config/mh-*: Use "true" rather than "echo >/dev/null" for ranlib.
- * configure.in: update solaris2 config.
-
-Wed Jun 10 16:31:29 1992 Fred Fish (fnf@cygnus.com)
-
- * random.c: Add for random() and srandom().
- * functions.def: Add random
-
-Tue Jun 9 17:27:18 1992 Fred Fish (fnf@cygnus.com)
-
- * config/{mh-ncr3000, mh-sysv4}: Add definition for INSTALL
- using /usr/ucb/install.
-
-Mon Jun 1 13:20:17 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * strerror.c: Kludge to guard against a conflict with
- possible declaration of sys_errlist in errno.h.
-
-Sun May 31 15:07:47 1992 Mark Eichin (eichin at cygnus.com)
-
- * configure.in, config/mh-solaris: add solaris2 config support.
-
-Fri May 29 17:23:23 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * sigsetmask.c: #ifdef out sigsetmask if SIG_SETMASK
- is not defined (should be defined in signal.h, says Posix.).
-
-Mon May 18 17:35:04 1992 K. Richard Pixley (rich@cygnus.com)
-
- * getopt.c: merged changes from make-3.62.11.
-
-Fri May 8 14:53:07 1992 K. Richard Pixley (rich@cygnus.com)
-
- * getopt.c: merged changes from bison-1.18.
-
-Tue May 5 11:51:40 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * Makefile.in: Don't have $(EXTRA_OFILES) depend on config.h,
- since that introduces a circular dependency.
- ($(EXTRA_OFILES) are used to build config.h.)
-
- * strtoul.c: Fixes to handle non-decimal bases better.
-
-Wed Apr 22 09:27:51 1992 Fred Fish (fnf@cygnus.com)
-
- * config/mh-ncr3000: Replace MINUS_G with CFLAGS.
- * Makefile.dos: Finish MINUS_G eradication.
- * Makefile.in (CFILES): Add strsignal.c.
- * Makefile.in (REQUIRED_OFILES): Add strerror.o strsignal.o
- * Makefile.in (needed-list): Split creation of errors file to
- separate make target.
- * Makefile.in (config.h, needed2.awk, errors): New targets.
- * Makefile.in (clean): Split to multiple lines, add needed2.awk
- and config.h.
- * dummy.c (DEFFUNC, DEFVAR): Add defines and undefs.
- * functions.def (strerror): Remove from optional list.
- * functions.def (sys_nerr, sys_errlist, sys_siglist): DEFVAR's
- * functions.def (strerror, psignal): DEFFUNC's
- * strerror.c: Rewrite from scratch to use sys_errlist only if
- available, add errno_max(), add strerrno(), add strtoerrno(),
- add test driver.
- * strsignal.c: New file, signal equivalent to strerror.c.
- Uses sys_siglist if available, defines signo_max(), strsignal(),
- strsigno(), strtosigno(), psignal(), and test driver.
-
-Mon Apr 20 20:49:32 1992 K. Richard Pixley (rich@cygnus.com)
-
- * Makefile.in: do not print recursion line.
-
- * Makefile.in: allow CFLAGS to be passed in from command line.
- Removed MINUS_G. Default CFLAGS to -g.
-
-Mon Apr 20 12:57:46 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * config/mh-aix: New. EXTRA_OFILES lists copysign.o,
- so libg++ users don't have to be inconvenienced by a
- libc.a bug (libc.a needs copysign, but doesn't define it!).
- * configure.in: Use config/mh-aix.
- * strtoul.c: Handle '-' as required by ANSI.
- Clean up radix handling.
- * strstr.c: Fix buggy algorithm.
- * Makefile.in: Change so that ${EXTRA_OFILES} is
- appended to needed-list (which is used by libg++).
-
-Fri Apr 10 22:51:41 1992 Fred Fish (fnf@cygnus.com)
-
- * configure.in: Recognize new ncr3000 config.
- * config/mh-ncr3000: New config file.
-
-Wed Apr 1 23:31:43 1992 John Gilmore (gnu at cygnus.com)
-
- * argv.c, dummy.c: Lint.
-
-Tue Mar 31 18:46:44 1992 Fred Fish (fnf@cygnus.com)
-
- * config/mh-sysv4: New config file.
- * configure.in (host_makefile_frag): Set to config/mh-sysv4 for
- host_os == sysv4.
- * getpagesize.c: For SVR4, use sysconf(_SC_PAGESIZE) to get
- pagesize.
-
-Sun Mar 29 12:26:42 1992 John Gilmore (gnu at cygnus.com)
-
- * getopt.c: Lint.
-
-Fri Mar 27 08:32:55 1992 Fred Fish (fnf@cygnus.com)
-
- * functions.def (alloca): Fix return type and args to avoid
- type clash with gcc's builtin alloca.
-
-Tue Mar 24 23:33:42 1992 K. Richard Pixley (rich@cygnus.com)
-
- * configure.in, config/mh-irix4: irix4 support.
-
- * Makefile.in, functions.def, alloca.c: added alloca.
-
-Tue Mar 24 17:34:46 1992 Stu Grossman (grossman at cygnus.com)
-
- * obstack.c (CALL_FREEFUN): Make it compile on DECstations.
-
-Thu Mar 19 13:57:42 1992 Fred Fish (fnf@cygnus.com)
-
- * argv.c: Fix various external function definitions to be
- correct in an ANSI compilation environment.
-
-Sat Mar 14 17:28:17 1992 Fred Fish (fnf@cygnus.com)
-
- * obstack.c: Changes to support calling mmalloc functions,
- which take an additional argument over malloc functions.
-
-Fri Mar 6 22:01:10 1992 K. Richard Pixley (rich@cygnus.com)
-
- * added check target.
-
-Thu Feb 27 22:19:39 1992 Per Bothner (bothner@cygnus.com)
-
- * argv.c: #include alloca-conf.h (needed by AIX).
-
-Wed Feb 26 18:04:40 1992 K. Richard Pixley (rich@cygnus.com)
-
- * Makefile.in, configure.in: removed traces of namesubdir,
- -subdirs, $(subdir), $(unsubdir), some rcs triggers. Forced
- copyrights to '92, changed some from Cygnus to FSF.
-
-Sat Feb 22 01:09:21 1992 Stu Grossman (grossman at cygnus.com)
-
- * argv.c: Check in Fred's version which fixes problems with
- alloca().
-
-Fri Feb 7 21:46:08 1992 Stu Grossman (grossman at cygnus.com)
-
- * makefile.dos: Remove NUL to keep patch from failing.
-
-Thu Jan 30 22:48:41 1992 Stu Grossman (grossman at cygnus.com)
-
- * getopt.c (_getopt_internal): Fix usage of enum has_arg.
-
-Mon Jan 20 18:53:23 1992 Stu Grossman (grossman at cygnus.com)
-
- * getopt.c, getopt1.c, ../include/getopt.h: Get latest versions.
-
-Sat Jan 18 16:53:01 1992 Fred Fish (fnf at cygnus.com)
-
- * argv.c: New file to build and destroy standard argument
- vectors from a command string.
-
- * Makefile.in: Add argv.c and argv.o to appropriate macros.
-
-Fri Dec 20 12:12:57 1991 Fred Fish (fnf at cygnus.com)
-
- * configure.in: Change svr4 references to sysv4.
-
- * rindex.c: Declare return type of externally used function
- strrchr().
-
-Thu Dec 19 18:35:03 1991 John Gilmore (gnu at cygnus.com)
-
- * Makefile.in: Remove "***" in normal output, since Make produces
- this on errors, and it's convenient to search for.
-
-Tue Dec 17 23:21:30 1991 Per Bothner (bothner at cygnus.com)
-
- * memcmp.c, memcpy.c, memmove.c, memset.c, strchr.c, strrchr.c:
- New ANSI functions. The old non-ANSI functions (such as bcopy)
- should be avoided.
- * bcopy.c: Fix to correctly handle overlapping regions.
- * index.c, rindex.c: Re-write in terms of strchr() and strrchr().
- * functions.def: Add the new functions.
- * functions.def: Add 4th parameter to DEF macro,
- an ansidecl.h-style prototype.
- * dummy.c: Use expanded DEF macro to create a dummy function
- call, with correct parameter types. (This avoids some
- complaints from gcc about predefined builtins.)
-
- Move the functionality of config/mh-default into Makefile.in.
- This avoid duplication, and simplifies things slightly.
- * Makefile.in: Tweak so we don't need config/mh-default.
- * README: Update.
- * configure.in: No longer need config/mh-default.
- * config/mh-default: Deleted.
- * config/mh-sysv: Remove lines copied from old mh-default.
-
-Tue Dec 17 05:46:46 1991 John Gilmore (gnu at cygnus.com)
-
- * fdmatch.c (fdmatch): Don't compare st_rdev, which is for
- 'mknod' device numbers.
-
-Mon Dec 16 12:25:34 1991 Fred Fish (fnf at cygnus.com)
-
- * fdmatch.c, Makefile.in: Add new function that takes two
- open file descriptors and returns nonzero if they refer to
- the same file, zero otherwise. (used in gdb)
-
-Wed Dec 11 17:40:39 1991 Steve Chamberlain (sac at rtl.cygnus.com)
- From DJ:
- * msdos.c: stub functions for dos.
- * makefile.dos, configdj.bat: new.
- * getopt.c: Don't include alloca-conf.h in a GO32 world.
-
-
-Tue Dec 10 04:14:49 1991 K. Richard Pixley (rich at rtl.cygnus.com)
-
- * Makefile.in: infodir belongs in datadir.
-
-Fri Dec 6 23:26:45 1991 K. Richard Pixley (rich at rtl.cygnus.com)
-
- * Makefile.in: remove spaces following hyphens because bsd make
- can't cope. added standards.text support. install using
- INSTALL_DATA.
-
- * configure.in: remove commontargets as it is no longer a
- recognized hook.
-
-Thu Dec 5 22:46:46 1991 K. Richard Pixley (rich at rtl.cygnus.com)
-
- * Makefile.in: idestdir and ddestdir go away. Added copyrights
- and shift gpl to v2. Added ChangeLog if it didn't exist. docdir
- and mandir now keyed off datadir by default.
-
-Fri Nov 22 19:15:29 1991 John Gilmore (gnu at cygnus.com)
-
- * Makefile.in: find-needed.awk does not fit in 14 chars.
-
- * Makefile.in: Suppress error checking when compiling the test
- program, because Ultrix make/sh aborts there due to a bug.
-
-Fri Nov 22 12:23:17 1991 Per Bothner (bothner at cygnus.com)
-
- * Makefile.in: Re-did how EXTRA_OFILES is used to be more useful.
- * README: Explained how the auto-configuration works,
- and how to add new files and/or configurations.
-
-Fri Nov 22 09:45:23 1991 John Gilmore (gnu at cygnus.com)
-
- * strtoul.c: Avoid defining ULONG_MAX if already defined;
- cast a const char * to char * for pedants.
-
- * getopt.c: Only define "const" after local include files get to,
- and only if they haven't defined it.
-
-Thu Nov 21 16:58:53 1991 John Gilmore (gnu at cygnus.com)
-
- * getcwd.c (remove getwd.c): GNU code should call getcwd(). We
- emulate it with getwd() if available. This avoids callers having
- to find a MAXPATHLEN or PATH_MAX value from somewhere.
- * Makefile.in, functions.def: getwd->getcwd.
- * configure.in: Use generic case for every system.
- * config/mh-{delta88,mach,rs6000,svr4}: Remove.
- * config/mh-sysv: Use default handling, just add -DUSG.
-
-Thu Nov 14 10:58:05 1991 Per Bothner (bothner at cygnus.com)
-
- * Makefile.in, config/mh-default: Re-do make magic
- so that for the default ("automatic") mode we only
- compile the files we actually need. Do this using
- a recursive make: The top-level generates the list
- of needed files (loosely, the ones missing in libc),
- and then passes that list to the recursive make.
- * config/mh-mach: Remove obsolete STRERROR-{C,O} macros.
-
-Tue Nov 12 19:10:57 1991 John Gilmore (gnu at cygnus.com)
-
- RS/6000 host support (grumble).
-
- * configure.in: Build alloca-conf.h file from alloca-norm.h
- (everything else) or alloca-botch.h (rs/6000).
- * Makefile.in: Include . on the include path.
- * getopt.c: Use alloca-conf.h.
- * alloca-norm.h: How to declare alloca on reasonable machines.
- * alloca-botch.h: How to declare alloca on braindead machines.
-
-Tue Nov 12 09:21:48 1991 Fred Fish (fnf at cygnus.com)
-
- * concat.c : New file, like concat() in gdb but can take a
- variable number of arguments rather than fixed at 3 args. For
- now, client applications must supply an xmalloc(), which is a
- front end function to malloc() that deals with out-of-memory
- conditions.
-
- * Makefile.in: Add concat.c and concat.o to appropriate macros.
-
-Sat Nov 9 13:29:59 1991 Fred Fish (fnf at cygnus.com)
-
- * config/mh-svr4: Add sigsetmask to list of required functions.
-
-Sun Nov 3 11:57:56 1991 Per Bothner (bothner at cygnus.com)
-
- * vsprintf.c: New file.
- * functions.def, Makefile.in: Add vsprintf.
-
-Sun Oct 27 16:31:22 1991 John Gilmore (gnu at cygnus.com)
-
- * configure.in, config/mh-rs6000: Add rs/6000 host support.
- * Makefile.in: Compile with debug info.
-
-Fri Oct 25 17:01:12 1991 Per Bothner (bothner at cygnus.com)
-
- * Makefile.in, configure.in, and new files: dummy.c, functions.def,
- config/mf-default: Added a default configuration mode,
- which includes into libiberty.a functions that are "missing" in libc.
- * strdup.c, vprintf.c, vfprintf.c: New files.
-
-Thu Oct 24 02:29:26 1991 Fred Fish (fnf at cygnus.com)
-
- * config/hmake-svr4: New file.
-
- * config/hmake-sysv: Add HOST_CFILES and HOST_OFILES.
-
- * basename.c, bcmp.c, bcopy.c, bzero.c, getpagesize.c getwd.c,
- index.c, insque.c, rindex.c, spaces.c, strstr.c, vfork.c: New
- files containing either portable C versions or emulations using
- native library calls.
-
- * strerror.c: Add copyright, internal documentation, etc.
-
- * strtol.c: Replace hardwired hex constants with some more
- portable macros. Remove illegal (according to gcc) cast.
-
- * strtoul.c: Replace hardwired hex constant with more portable
- macro.
-
- * Makefile.in: Move TARGETLIB and CFLAGS where makefile fragments
- can override them. Add new source and object file names to CFILES
- and OFILES respectively.
-
- * configure.in: Add support for SVR4 makefile fragments.
-
-Tue Oct 22 19:00:23 1991 Steve Chamberlain (steve at cygnus.com)
-
- * Makefile.in: Move RANLIB, AR and AR_FLAGS to where they can be
- over-ridden by config/hmake-*
- * configure.in: added m88kcvs to sysv list
-
-Fri Oct 4 01:29:08 1991 John Gilmore (gnu at cygnus.com)
-
- * Makefile.in: Most hosts need strerror, but one or two don't,
- and they override these definitions in the host-dependent makefile
- fragment.
- * config/hmake-mach: The odd man out on strerror -- it's supplied.
- * strerror.c: New file.
-
- * strtol.c, strtoul.c: Add strtol to libiberty, since Mach lacks
- it and bfd uses it.
- * configure.in, Makefile.in, config/hmake-mach: Only configure
- strtol & strotoul in on Mach.
-
-Tue Sep 3 06:36:23 1991 John Gilmore (gnu at cygint.cygnus.com)
-
- * obstack.c: Merge with latest FSF version.
-
-
-Local Variables:
-version-control: never
-End:
diff --git a/contrib/libg++/libiberty/insque.c b/contrib/libg++/libiberty/insque.c
deleted file mode 100644
index 775019f8fffc..000000000000
--- a/contrib/libg++/libiberty/insque.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/* insque(3C) routines
- This file is in the public domain. */
-
-/*
-NAME
- insque, remque -- insert, remove an element from a queue
-
-SYNOPSIS
- struct qelem {
- struct qelem *q_forw;
- struct qelem *q_back;
- char q_data[];
- };
-
- void insque (struct qelem *elem, struct qelem *pred)
-
- void remque (struct qelem *elem)
-
-DESCRIPTION
- Routines to manipulate queues built from doubly linked lists.
- The insque routine inserts ELEM in the queue immediately after
- PRED. The remque routine removes ELEM from its containing queue.
-*/
-
-
-struct qelem {
- struct qelem *q_forw;
- struct qelem *q_back;
-};
-
-
-void
-insque (elem, pred)
- struct qelem *elem;
- struct qelem *pred;
-{
- elem -> q_forw = pred -> q_forw;
- pred -> q_forw -> q_back = elem;
- elem -> q_back = pred;
- pred -> q_forw = elem;
-}
-
-
-void
-remque (elem)
- struct qelem *elem;
-{
- elem -> q_forw -> q_back = elem -> q_back;
- elem -> q_back -> q_forw = elem -> q_forw;
-}
diff --git a/contrib/libg++/libiberty/strerror.c b/contrib/libg++/libiberty/strerror.c
deleted file mode 100644
index 9f3f92b3d1a7..000000000000
--- a/contrib/libg++/libiberty/strerror.c
+++ /dev/null
@@ -1,829 +0,0 @@
-/* Extended support for using errno values.
- Written by Fred Fish. fnf@cygnus.com
- This file is in the public domain. --Per Bothner. */
-
-#include "ansidecl.h"
-#include "libiberty.h"
-
-#include "config.h"
-
-#ifndef NEED_sys_errlist
-/* Note that errno.h (not sure what OS) or stdio.h (BSD 4.4, at least)
- might declare sys_errlist in a way that the compiler might consider
- incompatible with our later declaration, perhaps by using const
- attributes. So we hide the declaration in errno.h (if any) using a
- macro. */
-#define sys_errlist sys_errlist__
-#endif
-
-#include <stdio.h>
-#include <errno.h>
-
-#ifndef NEED_sys_errlist
-#undef sys_errlist
-#endif
-
-/* Routines imported from standard C runtime libraries. */
-
-#ifdef __STDC__
-#include <stddef.h>
-extern void *malloc (size_t size); /* 4.10.3.3 */
-extern void *memset (void *s, int c, size_t n); /* 4.11.6.1 */
-#else /* !__STDC__ */
-extern char *malloc (); /* Standard memory allocater */
-extern char *memset ();
-#endif /* __STDC__ */
-
-#ifndef MAX
-# define MAX(a,b) ((a) > (b) ? (a) : (b))
-#endif
-
-/* Translation table for errno values. See intro(2) in most UNIX systems
- Programmers Reference Manuals.
-
- Note that this table is generally only accessed when it is used at runtime
- to initialize errno name and message tables that are indexed by errno
- value.
-
- Not all of these errnos will exist on all systems. This table is the only
- thing that should have to be updated as new error numbers are introduced.
- It's sort of ugly, but at least its portable. */
-
-struct error_info
-{
- int value; /* The numeric value from <errno.h> */
- const char *name; /* The equivalent symbolic value */
-#ifdef NEED_sys_errlist
- const char *msg; /* Short message about this value */
-#endif
-};
-
-#ifdef NEED_sys_errlist
-# define ENTRY(value, name, msg) {value, name, msg}
-#else
-# define ENTRY(value, name, msg) {value, name}
-#endif
-
-static const struct error_info error_table[] =
-{
-#if defined (EPERM)
- ENTRY(EPERM, "EPERM", "Not owner"),
-#endif
-#if defined (ENOENT)
- ENTRY(ENOENT, "ENOENT", "No such file or directory"),
-#endif
-#if defined (ESRCH)
- ENTRY(ESRCH, "ESRCH", "No such process"),
-#endif
-#if defined (EINTR)
- ENTRY(EINTR, "EINTR", "Interrupted system call"),
-#endif
-#if defined (EIO)
- ENTRY(EIO, "EIO", "I/O error"),
-#endif
-#if defined (ENXIO)
- ENTRY(ENXIO, "ENXIO", "No such device or address"),
-#endif
-#if defined (E2BIG)
- ENTRY(E2BIG, "E2BIG", "Arg list too long"),
-#endif
-#if defined (ENOEXEC)
- ENTRY(ENOEXEC, "ENOEXEC", "Exec format error"),
-#endif
-#if defined (EBADF)
- ENTRY(EBADF, "EBADF", "Bad file number"),
-#endif
-#if defined (ECHILD)
- ENTRY(ECHILD, "ECHILD", "No child processes"),
-#endif
-#if defined (EWOULDBLOCK) /* Put before EAGAIN, sometimes aliased */
- ENTRY(EWOULDBLOCK, "EWOULDBLOCK", "Operation would block"),
-#endif
-#if defined (EAGAIN)
- ENTRY(EAGAIN, "EAGAIN", "No more processes"),
-#endif
-#if defined (ENOMEM)
- ENTRY(ENOMEM, "ENOMEM", "Not enough space"),
-#endif
-#if defined (EACCES)
- ENTRY(EACCES, "EACCES", "Permission denied"),
-#endif
-#if defined (EFAULT)
- ENTRY(EFAULT, "EFAULT", "Bad address"),
-#endif
-#if defined (ENOTBLK)
- ENTRY(ENOTBLK, "ENOTBLK", "Block device required"),
-#endif
-#if defined (EBUSY)
- ENTRY(EBUSY, "EBUSY", "Device busy"),
-#endif
-#if defined (EEXIST)
- ENTRY(EEXIST, "EEXIST", "File exists"),
-#endif
-#if defined (EXDEV)
- ENTRY(EXDEV, "EXDEV", "Cross-device link"),
-#endif
-#if defined (ENODEV)
- ENTRY(ENODEV, "ENODEV", "No such device"),
-#endif
-#if defined (ENOTDIR)
- ENTRY(ENOTDIR, "ENOTDIR", "Not a directory"),
-#endif
-#if defined (EISDIR)
- ENTRY(EISDIR, "EISDIR", "Is a directory"),
-#endif
-#if defined (EINVAL)
- ENTRY(EINVAL, "EINVAL", "Invalid argument"),
-#endif
-#if defined (ENFILE)
- ENTRY(ENFILE, "ENFILE", "File table overflow"),
-#endif
-#if defined (EMFILE)
- ENTRY(EMFILE, "EMFILE", "Too many open files"),
-#endif
-#if defined (ENOTTY)
- ENTRY(ENOTTY, "ENOTTY", "Not a typewriter"),
-#endif
-#if defined (ETXTBSY)
- ENTRY(ETXTBSY, "ETXTBSY", "Text file busy"),
-#endif
-#if defined (EFBIG)
- ENTRY(EFBIG, "EFBIG", "File too large"),
-#endif
-#if defined (ENOSPC)
- ENTRY(ENOSPC, "ENOSPC", "No space left on device"),
-#endif
-#if defined (ESPIPE)
- ENTRY(ESPIPE, "ESPIPE", "Illegal seek"),
-#endif
-#if defined (EROFS)
- ENTRY(EROFS, "EROFS", "Read-only file system"),
-#endif
-#if defined (EMLINK)
- ENTRY(EMLINK, "EMLINK", "Too many links"),
-#endif
-#if defined (EPIPE)
- ENTRY(EPIPE, "EPIPE", "Broken pipe"),
-#endif
-#if defined (EDOM)
- ENTRY(EDOM, "EDOM", "Math argument out of domain of func"),
-#endif
-#if defined (ERANGE)
- ENTRY(ERANGE, "ERANGE", "Math result not representable"),
-#endif
-#if defined (ENOMSG)
- ENTRY(ENOMSG, "ENOMSG", "No message of desired type"),
-#endif
-#if defined (EIDRM)
- ENTRY(EIDRM, "EIDRM", "Identifier removed"),
-#endif
-#if defined (ECHRNG)
- ENTRY(ECHRNG, "ECHRNG", "Channel number out of range"),
-#endif
-#if defined (EL2NSYNC)
- ENTRY(EL2NSYNC, "EL2NSYNC", "Level 2 not synchronized"),
-#endif
-#if defined (EL3HLT)
- ENTRY(EL3HLT, "EL3HLT", "Level 3 halted"),
-#endif
-#if defined (EL3RST)
- ENTRY(EL3RST, "EL3RST", "Level 3 reset"),
-#endif
-#if defined (ELNRNG)
- ENTRY(ELNRNG, "ELNRNG", "Link number out of range"),
-#endif
-#if defined (EUNATCH)
- ENTRY(EUNATCH, "EUNATCH", "Protocol driver not attached"),
-#endif
-#if defined (ENOCSI)
- ENTRY(ENOCSI, "ENOCSI", "No CSI structure available"),
-#endif
-#if defined (EL2HLT)
- ENTRY(EL2HLT, "EL2HLT", "Level 2 halted"),
-#endif
-#if defined (EDEADLK)
- ENTRY(EDEADLK, "EDEADLK", "Deadlock condition"),
-#endif
-#if defined (ENOLCK)
- ENTRY(ENOLCK, "ENOLCK", "No record locks available"),
-#endif
-#if defined (EBADE)
- ENTRY(EBADE, "EBADE", "Invalid exchange"),
-#endif
-#if defined (EBADR)
- ENTRY(EBADR, "EBADR", "Invalid request descriptor"),
-#endif
-#if defined (EXFULL)
- ENTRY(EXFULL, "EXFULL", "Exchange full"),
-#endif
-#if defined (ENOANO)
- ENTRY(ENOANO, "ENOANO", "No anode"),
-#endif
-#if defined (EBADRQC)
- ENTRY(EBADRQC, "EBADRQC", "Invalid request code"),
-#endif
-#if defined (EBADSLT)
- ENTRY(EBADSLT, "EBADSLT", "Invalid slot"),
-#endif
-#if defined (EDEADLOCK)
- ENTRY(EDEADLOCK, "EDEADLOCK", "File locking deadlock error"),
-#endif
-#if defined (EBFONT)
- ENTRY(EBFONT, "EBFONT", "Bad font file format"),
-#endif
-#if defined (ENOSTR)
- ENTRY(ENOSTR, "ENOSTR", "Device not a stream"),
-#endif
-#if defined (ENODATA)
- ENTRY(ENODATA, "ENODATA", "No data available"),
-#endif
-#if defined (ETIME)
- ENTRY(ETIME, "ETIME", "Timer expired"),
-#endif
-#if defined (ENOSR)
- ENTRY(ENOSR, "ENOSR", "Out of streams resources"),
-#endif
-#if defined (ENONET)
- ENTRY(ENONET, "ENONET", "Machine is not on the network"),
-#endif
-#if defined (ENOPKG)
- ENTRY(ENOPKG, "ENOPKG", "Package not installed"),
-#endif
-#if defined (EREMOTE)
- ENTRY(EREMOTE, "EREMOTE", "Object is remote"),
-#endif
-#if defined (ENOLINK)
- ENTRY(ENOLINK, "ENOLINK", "Link has been severed"),
-#endif
-#if defined (EADV)
- ENTRY(EADV, "EADV", "Advertise error"),
-#endif
-#if defined (ESRMNT)
- ENTRY(ESRMNT, "ESRMNT", "Srmount error"),
-#endif
-#if defined (ECOMM)
- ENTRY(ECOMM, "ECOMM", "Communication error on send"),
-#endif
-#if defined (EPROTO)
- ENTRY(EPROTO, "EPROTO", "Protocol error"),
-#endif
-#if defined (EMULTIHOP)
- ENTRY(EMULTIHOP, "EMULTIHOP", "Multihop attempted"),
-#endif
-#if defined (EDOTDOT)
- ENTRY(EDOTDOT, "EDOTDOT", "RFS specific error"),
-#endif
-#if defined (EBADMSG)
- ENTRY(EBADMSG, "EBADMSG", "Not a data message"),
-#endif
-#if defined (ENAMETOOLONG)
- ENTRY(ENAMETOOLONG, "ENAMETOOLONG", "File name too long"),
-#endif
-#if defined (EOVERFLOW)
- ENTRY(EOVERFLOW, "EOVERFLOW", "Value too large for defined data type"),
-#endif
-#if defined (ENOTUNIQ)
- ENTRY(ENOTUNIQ, "ENOTUNIQ", "Name not unique on network"),
-#endif
-#if defined (EBADFD)
- ENTRY(EBADFD, "EBADFD", "File descriptor in bad state"),
-#endif
-#if defined (EREMCHG)
- ENTRY(EREMCHG, "EREMCHG", "Remote address changed"),
-#endif
-#if defined (ELIBACC)
- ENTRY(ELIBACC, "ELIBACC", "Can not access a needed shared library"),
-#endif
-#if defined (ELIBBAD)
- ENTRY(ELIBBAD, "ELIBBAD", "Accessing a corrupted shared library"),
-#endif
-#if defined (ELIBSCN)
- ENTRY(ELIBSCN, "ELIBSCN", ".lib section in a.out corrupted"),
-#endif
-#if defined (ELIBMAX)
- ENTRY(ELIBMAX, "ELIBMAX", "Attempting to link in too many shared libraries"),
-#endif
-#if defined (ELIBEXEC)
- ENTRY(ELIBEXEC, "ELIBEXEC", "Cannot exec a shared library directly"),
-#endif
-#if defined (EILSEQ)
- ENTRY(EILSEQ, "EILSEQ", "Illegal byte sequence"),
-#endif
-#if defined (ENOSYS)
- ENTRY(ENOSYS, "ENOSYS", "Operation not applicable"),
-#endif
-#if defined (ELOOP)
- ENTRY(ELOOP, "ELOOP", "Too many symbolic links encountered"),
-#endif
-#if defined (ERESTART)
- ENTRY(ERESTART, "ERESTART", "Interrupted system call should be restarted"),
-#endif
-#if defined (ESTRPIPE)
- ENTRY(ESTRPIPE, "ESTRPIPE", "Streams pipe error"),
-#endif
-#if defined (ENOTEMPTY)
- ENTRY(ENOTEMPTY, "ENOTEMPTY", "Directory not empty"),
-#endif
-#if defined (EUSERS)
- ENTRY(EUSERS, "EUSERS", "Too many users"),
-#endif
-#if defined (ENOTSOCK)
- ENTRY(ENOTSOCK, "ENOTSOCK", "Socket operation on non-socket"),
-#endif
-#if defined (EDESTADDRREQ)
- ENTRY(EDESTADDRREQ, "EDESTADDRREQ", "Destination address required"),
-#endif
-#if defined (EMSGSIZE)
- ENTRY(EMSGSIZE, "EMSGSIZE", "Message too long"),
-#endif
-#if defined (EPROTOTYPE)
- ENTRY(EPROTOTYPE, "EPROTOTYPE", "Protocol wrong type for socket"),
-#endif
-#if defined (ENOPROTOOPT)
- ENTRY(ENOPROTOOPT, "ENOPROTOOPT", "Protocol not available"),
-#endif
-#if defined (EPROTONOSUPPORT)
- ENTRY(EPROTONOSUPPORT, "EPROTONOSUPPORT", "Protocol not supported"),
-#endif
-#if defined (ESOCKTNOSUPPORT)
- ENTRY(ESOCKTNOSUPPORT, "ESOCKTNOSUPPORT", "Socket type not supported"),
-#endif
-#if defined (EOPNOTSUPP)
- ENTRY(EOPNOTSUPP, "EOPNOTSUPP", "Operation not supported on transport endpoint"),
-#endif
-#if defined (EPFNOSUPPORT)
- ENTRY(EPFNOSUPPORT, "EPFNOSUPPORT", "Protocol family not supported"),
-#endif
-#if defined (EAFNOSUPPORT)
- ENTRY(EAFNOSUPPORT, "EAFNOSUPPORT", "Address family not supported by protocol"),
-#endif
-#if defined (EADDRINUSE)
- ENTRY(EADDRINUSE, "EADDRINUSE", "Address already in use"),
-#endif
-#if defined (EADDRNOTAVAIL)
- ENTRY(EADDRNOTAVAIL, "EADDRNOTAVAIL","Cannot assign requested address"),
-#endif
-#if defined (ENETDOWN)
- ENTRY(ENETDOWN, "ENETDOWN", "Network is down"),
-#endif
-#if defined (ENETUNREACH)
- ENTRY(ENETUNREACH, "ENETUNREACH", "Network is unreachable"),
-#endif
-#if defined (ENETRESET)
- ENTRY(ENETRESET, "ENETRESET", "Network dropped connection because of reset"),
-#endif
-#if defined (ECONNABORTED)
- ENTRY(ECONNABORTED, "ECONNABORTED", "Software caused connection abort"),
-#endif
-#if defined (ECONNRESET)
- ENTRY(ECONNRESET, "ECONNRESET", "Connection reset by peer"),
-#endif
-#if defined (ENOBUFS)
- ENTRY(ENOBUFS, "ENOBUFS", "No buffer space available"),
-#endif
-#if defined (EISCONN)
- ENTRY(EISCONN, "EISCONN", "Transport endpoint is already connected"),
-#endif
-#if defined (ENOTCONN)
- ENTRY(ENOTCONN, "ENOTCONN", "Transport endpoint is not connected"),
-#endif
-#if defined (ESHUTDOWN)
- ENTRY(ESHUTDOWN, "ESHUTDOWN", "Cannot send after transport endpoint shutdown"),
-#endif
-#if defined (ETOOMANYREFS)
- ENTRY(ETOOMANYREFS, "ETOOMANYREFS", "Too many references: cannot splice"),
-#endif
-#if defined (ETIMEDOUT)
- ENTRY(ETIMEDOUT, "ETIMEDOUT", "Connection timed out"),
-#endif
-#if defined (ECONNREFUSED)
- ENTRY(ECONNREFUSED, "ECONNREFUSED", "Connection refused"),
-#endif
-#if defined (EHOSTDOWN)
- ENTRY(EHOSTDOWN, "EHOSTDOWN", "Host is down"),
-#endif
-#if defined (EHOSTUNREACH)
- ENTRY(EHOSTUNREACH, "EHOSTUNREACH", "No route to host"),
-#endif
-#if defined (EALREADY)
- ENTRY(EALREADY, "EALREADY", "Operation already in progress"),
-#endif
-#if defined (EINPROGRESS)
- ENTRY(EINPROGRESS, "EINPROGRESS", "Operation now in progress"),
-#endif
-#if defined (ESTALE)
- ENTRY(ESTALE, "ESTALE", "Stale NFS file handle"),
-#endif
-#if defined (EUCLEAN)
- ENTRY(EUCLEAN, "EUCLEAN", "Structure needs cleaning"),
-#endif
-#if defined (ENOTNAM)
- ENTRY(ENOTNAM, "ENOTNAM", "Not a XENIX named type file"),
-#endif
-#if defined (ENAVAIL)
- ENTRY(ENAVAIL, "ENAVAIL", "No XENIX semaphores available"),
-#endif
-#if defined (EISNAM)
- ENTRY(EISNAM, "EISNAM", "Is a named type file"),
-#endif
-#if defined (EREMOTEIO)
- ENTRY(EREMOTEIO, "EREMOTEIO", "Remote I/O error"),
-#endif
- ENTRY(0, NULL, NULL)
-};
-
-#ifdef EVMSERR
-/* This is not in the table, because the numeric value of EVMSERR (32767)
- lies outside the range of sys_errlist[]. */
-static struct { int value; const char *name, *msg; }
- evmserr = { EVMSERR, "EVMSERR", "VMS-specific error" };
-#endif
-
-/* Translation table allocated and initialized at runtime. Indexed by the
- errno value to find the equivalent symbolic value. */
-
-static const char **error_names;
-static int num_error_names = 0;
-
-/* Translation table allocated and initialized at runtime, if it does not
- already exist in the host environment. Indexed by the errno value to find
- the descriptive string.
-
- We don't export it for use in other modules because even though it has the
- same name, it differs from other implementations in that it is dynamically
- initialized rather than statically initialized. */
-
-#ifdef NEED_sys_errlist
-
-static int sys_nerr;
-static const char **sys_errlist;
-
-#else
-
-extern int sys_nerr;
-extern char *sys_errlist[];
-
-#endif
-
-
-/*
-
-NAME
-
- init_error_tables -- initialize the name and message tables
-
-SYNOPSIS
-
- static void init_error_tables ();
-
-DESCRIPTION
-
- Using the error_table, which is initialized at compile time, generate
- the error_names and the sys_errlist (if needed) tables, which are
- indexed at runtime by a specific errno value.
-
-BUGS
-
- The initialization of the tables may fail under low memory conditions,
- in which case we don't do anything particularly useful, but we don't
- bomb either. Who knows, it might succeed at a later point if we free
- some memory in the meantime. In any case, the other routines know
- how to deal with lack of a table after trying to initialize it. This
- may or may not be considered to be a bug, that we don't specifically
- warn about this particular failure mode.
-
-*/
-
-static void
-init_error_tables ()
-{
- const struct error_info *eip;
- int nbytes;
-
- /* If we haven't already scanned the error_table once to find the maximum
- errno value, then go find it now. */
-
- if (num_error_names == 0)
- {
- for (eip = error_table; eip -> name != NULL; eip++)
- {
- if (eip -> value >= num_error_names)
- {
- num_error_names = eip -> value + 1;
- }
- }
- }
-
- /* Now attempt to allocate the error_names table, zero it out, and then
- initialize it from the statically initialized error_table. */
-
- if (error_names == NULL)
- {
- nbytes = num_error_names * sizeof (char *);
- if ((error_names = (const char **) malloc (nbytes)) != NULL)
- {
- memset (error_names, 0, nbytes);
- for (eip = error_table; eip -> name != NULL; eip++)
- {
- error_names[eip -> value] = eip -> name;
- }
- }
- }
-
-#ifdef NEED_sys_errlist
-
- /* Now attempt to allocate the sys_errlist table, zero it out, and then
- initialize it from the statically initialized error_table. */
-
- if (sys_errlist == NULL)
- {
- nbytes = num_error_names * sizeof (char *);
- if ((sys_errlist = (const char **) malloc (nbytes)) != NULL)
- {
- memset (sys_errlist, 0, nbytes);
- sys_nerr = num_error_names;
- for (eip = error_table; eip -> name != NULL; eip++)
- {
- sys_errlist[eip -> value] = eip -> msg;
- }
- }
- }
-
-#endif
-
-}
-
-/*
-
-NAME
-
- errno_max -- return the max errno value
-
-SYNOPSIS
-
- int errno_max ();
-
-DESCRIPTION
-
- Returns the maximum errno value for which a corresponding symbolic
- name or message is available. Note that in the case where
- we use the sys_errlist supplied by the system, it is possible for
- there to be more symbolic names than messages, or vice versa.
- In fact, the manual page for perror(3C) explicitly warns that one
- should check the size of the table (sys_nerr) before indexing it,
- since new error codes may be added to the system before they are
- added to the table. Thus sys_nerr might be smaller than value
- implied by the largest errno value defined in <errno.h>.
-
- We return the maximum value that can be used to obtain a meaningful
- symbolic name or message.
-
-*/
-
-int
-errno_max ()
-{
- int maxsize;
-
- if (error_names == NULL)
- {
- init_error_tables ();
- }
- maxsize = MAX (sys_nerr, num_error_names);
- return (maxsize - 1);
-}
-
-#ifdef NEED_strerror
-
-/*
-
-NAME
-
- strerror -- map an error number to an error message string
-
-SYNOPSIS
-
- char *strerror (int errnoval)
-
-DESCRIPTION
-
- Maps an errno number to an error message string, the contents of
- which are implementation defined. On systems which have the external
- variables sys_nerr and sys_errlist, these strings will be the same
- as the ones used by perror().
-
- If the supplied error number is within the valid range of indices
- for the sys_errlist, but no message is available for the particular
- error number, then returns the string "Error NUM", where NUM is the
- error number.
-
- If the supplied error number is not a valid index into sys_errlist,
- returns NULL.
-
- The returned string is only guaranteed to be valid only until the
- next call to strerror.
-
-*/
-
-char *
-strerror (errnoval)
- int errnoval;
-{
- char *msg;
- static char buf[32];
-
-#ifdef NEED_sys_errlist
-
- if (error_names == NULL)
- {
- init_error_tables ();
- }
-
-#endif
-
- if ((errnoval < 0) || (errnoval >= sys_nerr))
- {
-#ifdef EVMSERR
- if (errnoval == evmserr.value)
- msg = evmserr.msg;
- else
-#endif
- /* Out of range, just return NULL */
- msg = NULL;
- }
- else if ((sys_errlist == NULL) || (sys_errlist[errnoval] == NULL))
- {
- /* In range, but no sys_errlist or no entry at this index. */
- sprintf (buf, "Error %d", errnoval);
- msg = buf;
- }
- else
- {
- /* In range, and a valid message. Just return the message. */
- msg = (char *) sys_errlist[errnoval];
- }
-
- return (msg);
-}
-
-#endif /* NEED_strerror */
-
-
-/*
-
-NAME
-
- strerrno -- map an error number to a symbolic name string
-
-SYNOPSIS
-
- const char *strerrno (int errnoval)
-
-DESCRIPTION
-
- Given an error number returned from a system call (typically
- returned in errno), returns a pointer to a string containing the
- symbolic name of that error number, as found in <errno.h>.
-
- If the supplied error number is within the valid range of indices
- for symbolic names, but no name is available for the particular
- error number, then returns the string "Error NUM", where NUM is
- the error number.
-
- If the supplied error number is not within the range of valid
- indices, then returns NULL.
-
-BUGS
-
- The contents of the location pointed to are only guaranteed to be
- valid until the next call to strerrno.
-
-*/
-
-const char *
-strerrno (errnoval)
- int errnoval;
-{
- const char *name;
- static char buf[32];
-
- if (error_names == NULL)
- {
- init_error_tables ();
- }
-
- if ((errnoval < 0) || (errnoval >= num_error_names))
- {
-#ifdef EVMSERR
- if (errnoval == evmserr.value)
- name = evmserr.name;
- else
-#endif
- /* Out of range, just return NULL */
- name = NULL;
- }
- else if ((error_names == NULL) || (error_names[errnoval] == NULL))
- {
- /* In range, but no error_names or no entry at this index. */
- sprintf (buf, "Error %d", errnoval);
- name = (const char *) buf;
- }
- else
- {
- /* In range, and a valid name. Just return the name. */
- name = error_names[errnoval];
- }
-
- return (name);
-}
-
-/*
-
-NAME
-
- strtoerrno -- map a symbolic errno name to a numeric value
-
-SYNOPSIS
-
- int strtoerrno (char *name)
-
-DESCRIPTION
-
- Given the symbolic name of a error number, map it to an errno value.
- If no translation is found, returns 0.
-
-*/
-
-int
-strtoerrno (name)
- const char *name;
-{
- int errnoval = 0;
-
- if (name != NULL)
- {
- if (error_names == NULL)
- {
- init_error_tables ();
- }
- for (errnoval = 0; errnoval < num_error_names; errnoval++)
- {
- if ((error_names[errnoval] != NULL) &&
- (strcmp (name, error_names[errnoval]) == 0))
- {
- break;
- }
- }
- if (errnoval == num_error_names)
- {
-#ifdef EVMSERR
- if (strcmp (name, evmserr.name) == 0)
- errnoval = evmserr.value;
- else
-#endif
- errnoval = 0;
- }
- }
- return (errnoval);
-}
-
-
-/* A simple little main that does nothing but print all the errno translations
- if MAIN is defined and this file is compiled and linked. */
-
-#ifdef MAIN
-
-#include <stdio.h>
-
-int
-main ()
-{
- int errn;
- int errnmax;
- const char *name;
- char *msg;
- char *strerror ();
-
- errnmax = errno_max ();
- printf ("%d entries in names table.\n", num_error_names);
- printf ("%d entries in messages table.\n", sys_nerr);
- printf ("%d is max useful index.\n", errnmax);
-
- /* Keep printing values until we get to the end of *both* tables, not
- *either* table. Note that knowing the maximum useful index does *not*
- relieve us of the responsibility of testing the return pointer for
- NULL. */
-
- for (errn = 0; errn <= errnmax; errn++)
- {
- name = strerrno (errn);
- name = (name == NULL) ? "<NULL>" : name;
- msg = strerror (errn);
- msg = (msg == NULL) ? "<NULL>" : msg;
- printf ("%-4d%-18s%s\n", errn, name, msg);
- }
-
- return 0;
-}
-
-#endif
diff --git a/contrib/libg++/libio/ChangeLog b/contrib/libg++/libio/ChangeLog
deleted file mode 100644
index d7d6f14aa377..000000000000
--- a/contrib/libg++/libio/ChangeLog
+++ /dev/null
@@ -1,1799 +0,0 @@
-Tue Jun 18 18:36:58 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * Version 2.7.2.
-
-Tue Jun 18 18:24:21 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * fstream.h (fstreambase): Make __my_fb mutable.
- From Joe Buck.
-
-Tue Jun 18 11:03:53 1996 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * dbz/fake.c (main): Set return type to int.
- * dbz/dbzmain.c (main): Likewise.
- * dbz/byteflip.c (main): Likewise.
-
-Mon Jun 17 14:05:36 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * gen-params: Check if clog conflicts with system libraries.
- * stdstreams.cc: If it does, use __IO_clog.
- * iostream.h: Likewise.
-
-Tue Jun 11 13:39:31 1996 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * stdiostream.h (istdiostream (FILE*)): Put istream base
- initializer before init for __f.
- (ostdiostream (FILE*)): Likewise for ostream base init.
-
-Tue May 14 11:47:21 1996 Per Bothner <bothner@andros.cygnus.com>
-
- * strfile.h (_IO_str_fields): Removed _len field.
- (_IO_STR_DYNAMIC, _IO_STR_FROZEN): new macros.
- * strstream.h (strstreambuf::is_static): Removed.
- (strstreambuf::frozen): Use _IO_STR_DYNAMIC instead of is_static.
- * strstream.h, strstream.cc: Remove support for !_IO_NEW_STREAMS.
- * strstream.cc (strstreambuf::init_dynamic): Don't set _s._len.
- * strops.c (_IO_str_init_static): Better handling of the
- negative (== unbounded) size case.
- (_IO_str_overflow, _IO_str_underflow, _IO_str_count): Re-write
- to not use _s._len, and otherwise cleanup/fix.
- * strstream.h, strstream.cc (strstreambase::strstreambase()): Call
- ios::init here.
- (other constructors): Simplify - init already called.
-
-Tue May 14 10:55:21 1996 Per Bothner <bothner@deneb.cygnus.com>
-
- Change so that strstreambuf default constructor does no allocation.
- * strstream.h (strstreambuf::init_dynamic): Default initial size = 0.
- * strstream.cc (strstreambuf::init_dynamic): Don't allocate a
- buffer (yet) if initial_size is 0.
- * strops.c (_IO_str_overflow): Add 100 to size of re-allocated
- buffer, to handle case when initial size is 0.
-
- * iostdio.h (remove, rename, tmpfile, tempnam): Comment out.
-
-Mon May 13 23:19:39 1996 Per Bothner <bothner@deneb.cygnus.com>
-
- * fileops.c (_IO_file_close_it): Just call _IO_do_flush rather
- than _IO_file_sync, to avoid useless lseek.
-
-Tue May 14 10:48:48 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * floatconv.c (_IO_strtod): Force rv into the stack.
-
-Sat Apr 27 02:37:49 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * libioP.h (JUMP*): Implement for thunks.
- (_IO_jump_t): Add second dummy field for thunks.
-
-Thu Apr 25 13:20:00 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * config.shared (CXX): Use gcc, not g++.
-
-Wed Apr 24 10:29:50 1996 Doug Evans <dje@blues.cygnus.com>
-
- * config.shared (depend.new): Delete $(srcdir)/ from foo.{c,cc}
- for SunOS VPATH.
- * depend: Regenerated.
-
-Fri Apr 19 17:24:51 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * Version 2.8.0b3.
-
-Wed Apr 10 17:16:01 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * configure.in (ALL): Don't build iostream.a.
-
-Mon Apr 8 14:44:11 1996 Per Bothner <bothner@kalessin.cygnus.com>
-
- * iosetvbuf.c (_IO_setvbuf): Clear _IO_UNBUFFERED unless _IONBF.
-
-Mon Apr 8 15:08:23 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * configure.in: Permit --enable-shared to specify a list of
- directories.
-
-Fri Apr 5 17:48:56 1996 Per Bothner <bothner@kalessin.cygnus.com>
-
- * config.shared (MOSTLYCLEAN): Also remove ${EXTRA_MOSTLYCLEAN}.
-
-Fri Mar 22 23:25:00 1996 Ulrich Drepper <drepepr@gnu.ai.mit.edu>
-
- * genops.c (_IO_sputbackc, _IO_sungetc): Clear EOF flag if putsh
- back was successful.
-
-Wed Mar 27 11:54:08 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * Version 2.8.0b2.
-
-Fri Mar 22 15:39:36 1996 Per Bothner <bothner@kalessin.cygnus.com>
-
- * fileops.c (_IO_do_write): Revert previous fix. (It fails to
- handle the case that fp->_IO_read_end != fp->_IO_write_base.)
- (_IO_file_overflow): Instead, if _IO_read_ptr is at the end of
- the buffer, reset all the read pointers to _IO_buf_base.
-
-Tue Mar 12 12:03:17 1996 Per Bothner <bothner@kalessin.cygnus.com>
-
- * fileops.c (_IO_do_write): Even if to_do==0, must re-set buffer
- pointers. Bug and solution from Luke Blanshard <luke@cs.wisc.edu>.
-
-Wed Feb 28 10:00:24 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * Version 2.8.0b1.
-
-Tue Feb 27 18:08:16 1996 Per Bothner <bothner@kalessin.cygnus.com>
-
- * iopopen.c (_IO_proc_open): Use (char*)0 rather than imprecise NULL.
-
- * streambuf.h (ios): Add ios::binary; deprecate ios::bin.
- * filebuf.cc (filebuf::open): Handle ios::binary.
-
-Fri Feb 9 12:40:19 1996 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * cleanup.c (_IO_cleanup_registration_needed) [!_G_HAVE_ATEXIT]: Init
- to NULL.
- * filedoalloc.c (_IO_cleanup_registration_needed): Remove decl.
-
-Thu Feb 8 08:12:50 1996 Brendan Kehoe <brendan@cygnus.com>
-
- * filedoalloc.c (_IO_cleanup_registration_needed): Revert previous
- change, since cleanup.c only defines it if _G_HAVE_ATEXIT.
-
-Wed Feb 7 15:10:17 1996 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * filedoalloc.c (_IO_cleanup_registration_needed): Declare as extern.
-
-Tue Dec 12 17:21:13 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * indstream.h, instream.cc (indirectbuf::uflow): New method.
- * indstream.cc (indirectbuf::underflow): Fix to use sgetc, not sbumpc.
- Fixes bug reported by Kevin Beyer <beyer@cs.wisc.edu>.
-
- * indstream.cc (indirectbuf::seekpos): Add paranoia test.
-
-Fri Dec 8 14:55:34 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * stream.h: Add warning to not use these functions.
- * stream.cc (str, chr): Re-implement here (from libg++).
-
-Tue Nov 28 15:07:01 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * config.shared: Use test instead of [ to avoid DEC Unix lossage.
-
-Thu Nov 23 14:51:43 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * iopopen.c: Move #include <sys/types.h> ahead of #include <signal.h>
- to deal with BSDI's literal implementation of Posix.
-
-Sat Nov 25 11:21:55 1995 Doug Evans <dje@canuck.cygnus.com>
-
- * Makefile.in (install): Set rootme.
- * config.shared (TOPDIR): Set with ${foo-...} rather than ${foo=...}.
- (INSTALL): Handle absolute, dot, relative-not-dot values of srcdir.
- (TEXIDIR): Likewise.
-
-Tue Nov 21 14:12:05 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * configure.in: Check ${with_cross_host} rather than comparing
- ${host} and ${target}.
-
-Mon Nov 20 13:55:29 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * configure.in: Match *-sco3.2v[45]*.
-
-Wed Nov 15 20:19:31 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * config.shared (FLAGS_TO_PASS): Also pass SHLIB and SHCURSES.
-
-Tue Nov 14 01:41:08 1995 Doug Evans <dje@canuck.cygnus.com>
-
- * config.shared (TO_REAL_TOPDIR): Define.
- (MULTITOP): Deleted.
- (MULTISRCTOP, MULTIBUILDTOP): New.
- (TOPDIR): Change MULTITOP to MULTIBUILDTOP, and use TO_REAL_TOPDIR.
- (INSTALL): Add with_multisrctop, TO_REAL_TOPDIR.
- (TEXIDIR): Use TO_REAL_TOPDIR.
- (LIBS): Delete MULTITOP.
- (FLAGS_TO_PASS): Add NM.
- (CXXINCLUDES): Delete MULTITOP.
- (depend.new): Delete adding MULTITOP to ../ build tree references.
- Add MULTISRCTOP to ../ source tree references.
- * configure.in: Delete call to cfg-ml-com.in. Call config-ml.in
- instead of cfg-ml-pos.in.
-
-Sun Nov 12 16:30:48 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * Makefile.in (VERSION): Set to 2.7.1.
- * configure.in: Add warning for Linux.
- * config.shared (DISTCLEAN): Add EXTRA_DISTCLEAN.
-
- * editbuf.h (edit_mark::index_in_buffer): Avoid unused param warning.
-
- * iostream.cc (istream::operator>> (char*)): Improve ANSI compliance.
-
-Fri Nov 10 08:41:37 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * config.shared (check): Add missing semicolon.
-
-Thu Nov 9 17:27:22 1995 Jason Merrill <jason@yorick.cygnus.com>
-
- * configure.in (ALL): Remove $(OSPRIM_OBJECTS).
- * config.shared (check): Set LD_LIBRARY_PATH.
- * NEWS: Fix typo.
- * iogetdelim.c (_IO_getdelim): Index *lineptr, rather than lineptr.
- From alan@spri.levels.unisa.edu.au (Alan Modra).
-
-Mon Nov 6 15:03:33 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * streambuf.cc, editbuf.cc, isgetline.cc, parsestream.cc:
- Fixes to avoid -Wall warnings.
-
-Fri Nov 3 16:41:41 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * gen-params [!__STDC__]: Include varargs.h instead of stdarg.h.
-
-Thu Nov 2 15:04:03 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * config.shared: Re-write if X then Y else true fi to (not X) || Y.
-
-Wed Nov 1 13:26:44 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * iostream.h (istream::ipfx): Add default argument value.
- Reported by Yotam Medini <yotam_medini@tmai.com>.
-
- * libioP.h (_IO_blen): Fix typo.
- Reported by Bryan T. Vold <btv@ldl.healthpartners.com>.
-
-Fri Oct 27 19:26:20 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * Makefile.in (_G_config.h): Set CC to $(CC) rather than to $(CXX),
- now that CXX defaults to g++ and CC default to gcc (when found).
- * config.shared: Simplify CXX and CC, since they get overridden
- by ../configure anyway.
-
-Wed Oct 25 19:45:50 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * iostdio.h: Wrap including the file with #ifndef _IOSTDIO_H.
-
-Wed Oct 25 11:14:25 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * libio.h (_IO_seekoff, _IO_seekpos): New declarations.
- * libioP.h (_IO_seekoff, _IO_seekpos): Remove declarations.
- * libioP.h: Cleanup; remove old !_IO_UNIFIED_JUMPTABLES stuff.
-
- * filebuf.cc (filebuf::~filebuf): Only call SYSYCLOSE if currently
- open. Bug found by Martin Gerbershagen <ger@ezis-ulm.de>.
-
- * streambuf.h (streambuf::pubseekoff, streambuf::pubseekpos):
- Added, from ANSI draft.
- * filebuf.cc (filebuf::open), iostream.cc (variables places), SFile.cc:
- Use pubseekoff/pubseekpos rather than sseekoff/sseekpos.
-
- * Makefile.in (install): Don't install libiostream.a.
-
- * filedoalloc.c: Also #include <unistd.h>.
-
-Mon Oct 9 18:09:54 1995 Jason Molenda <crash@phydeaux.cygnus.com>
-
- * config.shared (SUFFIXES): add .c.
-
-Tue Sep 26 16:08:01 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * procbuf.cc: Move #pragma implementation to beginning.
-
-Wed Sep 20 17:53:33 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * procbuf.h, procbuf.cc: Add #pragma interface/implementation stuff.
-
-Wed Sep 20 18:59:00 1995 John Eaton <jwe@bevo.che.wisc.edu>
-
- * procbuf.h: Protect from being included multiple times.
-
-Wed Sep 20 15:47:14 1995 John Eaton <jwe@bevo.che.wisc.edu>
-
- * procbuf.h (procbuf): Add '_next' pointer field for compatibility
- with _IO_proc_file.
-
-Wed Sep 20 13:54:02 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * config.shared: Add support for maintainer-clean target as a
- synonym for realclean.
- * dbz/Makefile.in: Likewise.
-
-Mon Sep 11 12:11:19 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * iopopen.c: #include <sys/types.h> before <sys/wait.h>.
- This is in accordance with Posix, and needed for ISC.
-
-Fri Sep 8 00:11:55 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * gen-params: Use double quotes in the eval setting $TYPE to
- $VALUE, to preserve any single quotes in $VALUE.
-
-Mon Aug 21 11:39:09 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * gen-params: Test for an appropriate version of gcc before using
- mode attributes.
-
- * config.shared: Add $(PICDIR) to $ALL.
-
-Mon Aug 7 17:51:40 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * gen-params: Generate new macro _G_HAVE_SYS_CDEFS.
- * libio.h: If _G_HAVE_SYS_CDEFS, get __P from <sys/cdefs.h>.
-
-Fri Aug 4 23:21:17 1995 Paul Eggert <eggert@twinsun.com>
-
- * gen-params: When following typedef changes, allow typedefs
- that do not have a space before the defined type name,
- e.g. `typedef void *__gnuc_va_list;' as in Linux. Also,
- not require a space in the definiens, e.g. `typedef void*foo;'.
-
-Thu Aug 3 17:54:15 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * iostream.h, iostream.cc (istream::sync): Added missing method.
-
-Thu Aug 3 17:49:34 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * configure.in: Remove netbsd special case.
- * config/netbsd.mt: Removed; no longer used.
-
-Tue Jun 20 16:07:12 1995 Paul Eggert <eggert@twinsun.com>
-
- * gen-params: Take transitive closure of `typedef' relation.
- This is needed for BSD/OS 2.0, which has
- fpos_t -> off_t -> quad_t -> long long.
-
-Mon Jul 24 18:28:10 1995 Doug Evans <dje@canuck.cygnus.com>
-
- * config.shared (TOPDIR): Delete extra '/', $rootme may be empty.
-
-Sat Jul 22 13:27:45 1995 Doug Evans <dje@canuck.cygnus.com>
-
- * config.shared (depend.new): Fix quoting in DO NOT EDIT line.
-
- * Makefile.in (_G_config.h): Add multilib support.
- (install): Likewise.
- * config.shared: Likewise.
- * configure.in: Likewise.
-
-Wed Jun 28 17:40:25 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * PlotFile.h, SFile.h, builtinbuf.h, editbuf.h, fstream.h,
- indstream.h, iomanip.h, iostream.h, parsestream.h, pfstream.h,
- procbuf.h, stdiostream.h, stream.h, streambuf.h, strstream.h: Wrap
- with extern "C++".
-
-Thu Jun 22 04:34:01 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * gen-params: Surround attributes with __.
-
-Mon Jun 19 00:33:22 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * config.shared (SUBDIRS): Massage broken shells that require
- 'else true'.
-
-Sat Jun 17 11:25:38 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * streambuf.h: Declare inline members inline in class.
-
-Thu Jun 15 20:45:13 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * Makefile.in (VERSION): Update to version 2.7.0.
-
-Wed Jun 14 21:41:11 1995 Jason Merrill <jason@python.cygnus.com>
-
- * Makefile.in (STDIO_WRAP_OBJECTS): Remove stdfiles.o.
- (LIBIO_OBJECTS): Add stdfiles.o.
-
-Wed Jun 7 16:11:36 1995 Jason Merrill <jason@python.cygnus.com>
-
- * config.shared (all): Appease bash.
-
-Wed Jun 7 11:16:38 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * configure.in (MOSTLYCLEAN): Remove stamp-picdir.
-
- * config.shared (MOSTLYCLEAN): Ditto.
- (CLEAN): Don't.
-
-Mon Jun 5 18:29:39 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * config/mh-*pic: Removed.
-
- * configure.in (MOSTLYCLEAN): Remove pic objects.
- (frags): Use toplevel pic fragments.
-
- * config.shared (CXXFLAGS): Use -O3.
- (PICFLAG, PICDIR): New macros.
- (all): Depend on $(PICDIR).
- (FLAGS_TO_PASS): Pass PICFLAG.
- (.x.o): Also build pic object.
- (stamp-picdir): Create directory for pic objects.
- (MOSTLYCLEAN): Remove pic objects.
- (CLEAN): Remove stamp-picdir.
-
- * Makefile.in (iostream.list): Depend on stamp-picdir.
- (c++clean): Don't remove _G_config.h.
-
-Mon Jun 5 15:03:47 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * strstream.h, strstream.cc (strstream::strstream()): Re-implement to
- be like ostrstream::ostrestream(), and not leak memory.
-
- * streambuf.h: Use #if !_IO_UNIFIED_JUMPTABLES instead of #ifndef.
-
- * iolibio.h (_IO_rewind): Add missing flags when calling _IO_seekoff.
-
-Thu May 25 22:30:21 1995 J.T. Conklin <jtc@rtl.cygnus.com>
-
- * config/netbsd.mt (G_CONFIG_ARGS): Add defn for off_t. Another
- layer of typedefs has been added and the gen-params script can
- not handle it.
-
-Wed May 10 03:02:58 1995 Jason Merrill <jason@python.cygnus.com>
-
- * iolibio.h (_IO_rewind): Add new argument to _IO_seekoff.
-
- * config/linux.mt (LIBIOSTREAM_OBJECTS): Include $(STDIO_WRAP_OBJECTS).
- (LIBIOSTREAM_DEP): Include stdio.list.
- (LIBIOSTREAM_USE): Include `cat stdio.list`.
-
- * Makefile.in (LIBIOSTREAM_DEP): New variable.
- (LIBIOSTREAM_USE): Ditto.
- (libiostream.a): Use them.
- (iostream.list): Ditto.
- (stdio.list): New rule.
- (stdio/stdio.list): Ditto.
-
-Tue May 9 18:29:38 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * libioP.h (_IO_jump_t): Change TYPE for __dummy from int to
- _G_size_t.
-
-Sat May 6 13:50:37 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * libio.h (_IO_UNIFIED_JUMPTABLES): #define as true.
- (_IO_FILE): Remove _jumps field (#if _IO_UNIFIED_JUMPTABLES).
-
- * libioP.h (enum _IO_seekflags_): Removed.
-
- * libioP.h (_IO_setbuf_t): Change return value of setpos jumptable
- function to match C++ streambuf::setpos. (Return NULL on failure.)
- * fileops.c (_IO_file_setbuf), genops.c (_IO_default_setbuf),
- filebuf.cc, iosetvbuf.c: Update to use new setbuf conventions.
-
- * streambuf.h (streambuf): Re-order virtual functions more logically.
- * streambuf.cc (streambuf::uflow), streambuf.h: New virtual.
- * libioP.h (struct _IO_jump_t): Define using new JUMP_FIELD macro.
- And re-order in more logical order consistent with streambuf vtable.
- * fileops.c (_IO_file_jumps), iopopen.c (_IO_proc_jumps), iovfprintf.c
- (_IO_helper_jumps), streambuf.cc (_IO_streambuf_jumps), strops.c
- (_IO_str_jumps): Update accordingly, using JUMP_INIT macro.
- * stdfiles.c: Set vtable to point to _IO_file_jumps.
- * filebuf.cc, iopopen.c, iovfprintf.c (helper_vfprintf), iovsprintf.c,
- iovsscanf.c: Use macros and #if to set jumptables.
-
- * streambuf.c: _IO_streambuf_jumps and the _IO_sb_* methods are not
- needed #if _IO_UNIFIED_JUMPTABLES.
- * filebuf.cc (filebuf::__new): Also no longer needed.
- * fstream.cc (fstreambase::__fb_init, fstreambase::fstreambase): Fix.
- * stdstrbufs.c: Use filebuf vtable instead of builtinbuf's.
- * builtinbuf.h, builtinbuf.cc (builtinbuf): Commented out #if
- _IO_UNIFIED_JUMPTABLES - no longer needed.
- * strstream.cc (SET_STR_JUMPS): Does nothing now.
-
- * builtinbuf.cc, fileops.c, genops.c, iofgetpos.c, iofsetpos.c,
- ioftell.c, iopopen.c, ioseekoff.c, ioseekpos.c, iosetvbuf.c,
- iovfprintf.c, iovfscanf.c, strops.c: Use DEFUN and DEFUN_VOID.
- * filebuf.cc, fileops.c, genops.c, iopopen.c, ioseekoff.c, ioseekpos.c,
- iosetvbuf.c, iovfscanf.c: Use new JUMP_* and IO_OVERFLOW/... macros.
-
- * libioP.h (_IO_seekpos_t): Third arg is now an int (using _IOS_INPUT
- and _IOS_OUTPUT), not an enum _IO_seekflags_. Flags values are
- changed, and their sense inverted (to match streambuf::seekpos).
- * libioP.h (_IO_seekoff_t): Similarly match streambuf::seekoff.
- * filebuf.cc, fileops.c (_IO_file_fopen, _IO_file_seekoff), genops.c
- (_IO_default_seekpos, _IO_default_seekpos), iofgetpos.c, iofsetpos.c,
- iolibio.h (_IO_fseek), ioftell.c, ioseekoff.c, ioseekpos.c,
- iostream.cc, streambuf.cc, strops.c (_IO_str_seekoff), strstream.cc:
- New seekpos/seekoff conventions.
- * iostreamP.h (convert_to_seekflags): Removed - no longer needed.
-
- * iolibio.h (_IO_fread): New declaration.
-
- * dbz/Makefile.in: Re-arrange for cleaner dependencies.
-
-Fri May 5 15:55:22 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * libioP.h (_IO_JUMPS. JUMP_FIELD, JUMP0, JUMP1, JUMP2, JUMP3,
- JUMP_INIT, _IO_FINISH, _IO_OVERFLOW, ... _IO_SYSSTAT): New macros
- in preparation for new unified jumptable/vtable implementation.
- * cleanup.c, filedoalloc.c, iofclose.c, iofflush.c, iofiledoalloc.c,
- ioprims.c, iosetbuffer.c, iostrerror.c, ioungetc.c: Use DEFUN.
- * filedoalloc.c, iofclose, iofflush, iosetbuffer.c: Use new macros.
-
- * iofopen.c, iofdopen.c: Use macros and #if for new jumptables.
-
- * gen-params: Do not #include <sys/types.h>.
- Add missing quote in 'eval'.
- Do add #include <sys/types.h> in test for <sys/resource.h>.
- * config/netbsd.mt: New file, defining _G_CONFIG_ARGS (for fpos_t).
- * configure.in: Use netbsd.mt for NetBSD.
-
-Wed May 3 15:03:47 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * libioP.h (DEFUN, DEFUN_VOID, AND): New macros, from ansidecl.h.
- * iofdopen.c, iofgets.c, iofopen.c, iofputs.c, iofread.c, iofwrite.c,
- iogetdelim.c, iogetline.c, iogets.c, ioignore.c, iopadn.c, ioperror.c,
- ioputs.c, iovsprintf.c, iovsscanf.c, outfloat.c: Use DEFUN.
-
-Mon May 1 16:22:30 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * gen-params: #include <sys/types.h>. Don't use __WCHAR_TYPE__ in
- definition of _G_wchar_t. Use __attribute__ ((mode)) to get
- specific-sized ints under gcc, don't worry about int8 or int64
- otherwise. Provide defaults if deduction fails.
-
-Thu Apr 27 18:27:53 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * streambuf.h (ios::~ios): Delete _arrays.
- (_IO_NEW_STREAMS): Turn on.
- * libio.h (__adjust_column): Remove bogus declaration.
- * genops.c (_IO_set_column): Fix typo (in commented-out code).
-
-Tue Apr 25 17:14:29 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * config.shared (CXXINCLUDES): Use a shell variable with a
- different name from the make variable.
- * configure.in: Update accordingly.
-
-Mon Apr 17 17:19:40 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * streambuf.h (__adjust_column): Remove redundant declaration.
-
-Sat Apr 15 11:39:25 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * config.shared (do-clean-dvi): Also remove *.cps.
-
- * gen-params: Use ${SED} instead of sed.
-
- * libio.h: Remove #if'd out stuff (confuses makedepend).
-
- * stdstreams.cc (STD_STR): Standard streams start with ios::dec set.
-
-Fri Apr 14 23:46:31 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * iostream.h, iostream.cc (istream::read, ostream::write):
- Use streamsize for the length parameter.
-
- * streambuf.h: Removed redundant __overflow and __underflow.
-
- * fstream.h, fstream.cc: Add void fstreambase::attach(int).
-
- * iosscanf.c (_IO_sscanf): Fix non-__STDC__ missing declaration.
-
-Mon Apr 3 15:40:55 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * indstream.*: Fix prototypes of xsputn and xsgetn.
-
- * fileops.c: Avoid ??? trigraph.
-
-Mon Mar 27 16:16:38 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * iomanip.h (operator<< (ostream&, const omanip<TP>&): Define
- separately.
- (operator>> (istream&, const imanip<TP>&): Ditto.
-
-Mon Mar 27 08:56:00 1995 Brendan Kehoe (brendan@lisa.cygnus.com)
-
- * builtinbuf.cc (builtinbuf::setbuf): Cast NULL to streambuf*, to
- avoid warning/error about conversion from void*.
- * indstream.cc (indirectbuf::seekoff): Likewise.
- (indirectbuf::seekpos): Likewise.
- * filebuf.cc (filebuf::setbuf): Likewise.
- (filebuf::close): Cast NULL to filebuf*.
-
-Wed Mar 1 14:23:18 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * configure.in (DISTCLEAN): Add, with target-mkfrag.
-
-Fri Feb 24 01:01:08 1995 Jason Merrill <jason@python.cygnus.com>
-
- * configure.in (frags): Don't require so many dashes in the
- canonical target name.
-
-Sat Feb 18 13:18:30 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * streambuf.cc (streambuf::sync): Always return 0, even for
- non-flushed output. This is required by the ANSI/ISO draft.
- * genops.c (_IO_sync): Likewise always return 0.
-
-Fri Feb 17 16:33:28 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * fileops.c (_IO_file_close_it): Call _IO_file_sync, rather
- than _IO_do_flush, because we want to adjust the file pointer
- if reading and not at end (as in SVR4, and as in fflush).
- Also, make sure to return error indication if sync fails.
- (_IO_file_sync): Ignore seek error if it is ESPIPE.
- (_IO_file_seekoff): If not readable, do dumb lseek.
- * iofclose.c (_IO_fclose): If closing a non-filebuf, return -1
- if _IO_ERR_SEEN.
-
-Fri Feb 17 19:31:00 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * gen-params: Check for struct tms in <sys/times.h>, defining
- HAVE_SYS_TIMES accordingly.
-
-Wed Feb 15 21:05:11 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * strops.c (_IO_str_count): Use LEN macro.
- (_IO_str_seekoff): Update _len field.
-
-Mon Feb 6 19:29:00 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * gen-params: Default to short, long and long long for 16, 32 and
- 64 bit types, in case detection fails.
-
-Wed Jan 25 18:07:30 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * gen-params (_G_wint_t): Allow for broken promotions.
-
-Tue Jan 24 16:15:40 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * stdstrbufs.cc (_IO_fake_stdiobufs): Add an extra layer of struct,
- to force correct alignment on i960s.
- (DEF_STDIOBUF, _IO_{stdin,stdout,stderr}_buf): Update accordingly.
-
-Thu Jan 19 18:30:53 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * config.shared (CXXINCLUDES): Add libstdc++ to includes for
- building libg++.
- (LIBS): Also link with libstdc++ when building libg++ toys.
- Don't set EXPORT_ALL_VARIABLES; users will have to set
- LD_LIBRARY_PATH themselves.
-
-Fri Dec 30 16:38:13 1994 Mike Stump <mrs@cygnus.com>
-
- * config/linux.mt: Fix build problem on linux 1.0.8.
-
-Thu Dec 22 11:49:45 1994 J.T. Conklin (jtc@phishhead.cygnus.com)
-
- * config/netware.mt: Use gcc to pre-link iostream.nlm's objects
- instead of using nlmconv, so that references to functions in
- libgcc.a are resolved.
-
- * configure.in: Append .mt to target makefile fragment file names.
-
- * floatconv.c (tens, tinytens, bigtens): Added const qualifier.
-
-Tue Dec 20 09:59:50 1994 Mike Stump <mrs@cygnus.com>
-
- * gen-params (VTABLE_LABEL_PREFIX): Since some systems have GNU nm
- as nm, and they demangle by default, we have to notice this, and
- try --no-cplus (linux) or --no-demangle when running nm.
-
-Wed Dec 14 18:13:58 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * gen-params: To determine vt-name-mangling using dummy.C add
- #include and #prama interface/implementation to avoid problem with
- assemblers that don't emit local symbols. Reported under HPUX 8
- by Thomas Arend <arend@blasius.Chemietechnik.Uni-Dortmund.DE>.
-
- * streambuf.h (ios::ios): Move inline definition after
- that of ios::init (which ios::ios calls).
-
-Sun Dec 4 19:50:32 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * fileops.c (_IO_file_init, _IO_file_close_it, _IO_file_sync):
- Set _offset to _IO_pos_BAD, to support applications that follow
- POSIX.1 rules on mixing file handles.
-
- * fileops.c (_IO_file_overflow): Handle case that buffer was
- allocated (perhaps by setvbuf) but _IO_write_base is still 0.
-
- * iostdio.h (setbuffer): #define as _IO_setbuffer.
- * streambuf.h, filebuf.cc: Removed filebuf::do_write.
-
-Tue Nov 29 23:38:57 1994 Per Bothner (bothner@rtl.cygnus.com)
-
- * floatconv.c (setword0, setword1): Fix typo.
-
-Tue Nov 29 15:37:29 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * config.shared: Move -fno-implicit-template from CXXFLAGS
- to LIBCXXFLAGS. Tests are better run without it.
-
- * floatconv.c (word0, word1): Re-place/re-implement using unions
- instead of casts to avoid optimizer problems.
-
- * dbz/dbzmain.c: Renamed dirname -> dir_name to avoid OSF
- header file braindamage.
-
-Sat Nov 5 19:44:00 1994 Jason Merrill (jason@phydeaux.cygnus.com)
-
- * config.shared (LIBCFLAGS): Define.
- (LIBCXXFLAGS): Define.
- (DOING_LIBGXX): Define TOLIBGXX. Change LIBS to use -lg++. Add
- LD_LIBRARY_PATH and .EXPORT_ALL_VARIABLES:.
- (FLAGS_TO_PASS): Add LIBC{,XX}FLAGS.
- (XC{,XX}FLAGS): Set to LIBCFLAGS or CFLAGS depending on $LIBDIR.
- (COMPILE.c): Define, use in .c.o rule.
- (COMPILE.cc): Define, use in .cc.o rule.
-
-Sat Nov 5 15:12:12 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * Makefile.in (VERSION): Update to 0.67.
-
- * streambuf.h (ios::dont_close): Is now set by default.
- * fstream.h, fstream.cc (__fb_init): New function. Clears
- ios::dont_close. Change fstreambase constructors to call it.
- * strstream.cc: *strstream constructors must clear ios::dont_close.
- * iostream.cc: Simplify - don't need to set ios::dont_close.
- * ioassign.cc: Simplify - assume ios::dont_close is always set.
-
- * fstream.h, fstream.cc: If _IO_NEW_STREAMS, put the
- filebuf as a member __my_fb.
- * strstream.{h,cc}: Likewile use a strstreambuf member __my_sb.
- * streambuf.h, stdstreams.cc, ioextend.cc:
- Fix if _IO_NEW_STREAMS to not use ios::dont_close.
-
- * streambuf.h (class ios): Move rdbuf later, to avoid
- inability of g++ to inline.
- * filebuf.cc (filebuf::~filebuf): Call _IO_do_flush.
-
- * config.shared: Emit rules to make depend.
- * depend: New file.
-
-Fri Nov 4 17:19:11 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * README: Fix typos.
- * libio.h: Add comment. Update Copyright notice.
-
-Fri Nov 4 21:46:30 1994 Paul Eggert <eggert@twinsun.com>
-
- * libio.h (__P): Change argument name spelling from
- `paramlist' to `protos' for compatibility with BSDI 1.1.
-
-Thu Nov 3 00:45:16 1994 Jason Merrill (jason@phydeaux.cygnus.com)
-
- * config.shared (CXXFLAGS): Add -fno-implicit-templates.
-
-Mon Oct 24 15:57:35 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * config.shared: Define NOSTDIC and use it for libio too.
-
-Thu Oct 20 19:45:35 1994 Jason Merrill (jason@phydeaux.cygnus.com)
-
- * iogetdelim.c: #include <stdlib.h>.
-
-Thu Oct 20 17:09:52 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * iostream.h: Add classes _IO_istream_withassign and
- _IO_ostream_withassign. Re-type cin, cout, cerr, clog.
- (class iostream): Don't add extra _gcount field.
- * ioassign.cc: New file. Implement operator= for cin etc.
- * streambuf.h (class ios): Change return type of operator=.
- * Makefile.in (IOSTREAM_OBJECTS): Add ioassign.o.
-
- * Makefile.in: Re-arrange, so linux.mt overrides can work.
-
- * fileops.c (_IO_file_seekoff): Optimize seeks within buffer.
-
-Wed Oct 19 14:25:47 1994 Jason Merrill (jason@phydeaux.cygnus.com)
-
- * gen-params (wint_t): Return to using __WCHAR_TYPE__ for
- compatibility with gcc versions prior to 2.6.1.
-
-Tue Oct 18 17:08:18 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * Makefile.in: Define _G_CONFOG_H as _G_config.h for Linux. Use it.
- (IO_OBJECTS): Add iogetdelim.o.
- * config/linux.mt: New file.
- * configure.in: Select config/linux.mt if Linux.
- * iogetdelim.c: Verious cleanups, many from
- Ulrich Drepper <drepper@ipd.info.uni-karlsruhe.de>.
- * libioP.h: Add _IO_getdelim. Use (void) for no-parameter functions.
-
-Thu Oct 13 16:30:56 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * libio.h: Rename USE_DTOA to _IO_USE_DTOA for namespace reasons.
- * iostream.cc, iovfscanf.c, iovfprintf, floatconv.c:
- Update USE_DTOA -> _IO_USE_DTOA.
-
- * libio.h (_IO_feof, _IO_ferror): Move to here ...
- * iolibio: ... from here
-
- * iostream.cc (istream::get, istream::ignore, istream::read):
- Set _gcount to 0 if ipfx0 failed.
-
- * iostream.cc (flush): Do virtual function call, rather than
- going through jumptable. (To get correct method in derived class.)
- Bug and fix from John Wiegley <jw@cis.ohio-state.edu>.
-
- * iofdopen.c (O_ACCMODE): Define using O_RDWR, not O_RDWRITE.
-
- * streambuf.h (ios::rdbuf(streambuf*)): New.
- * streambuf.h (ios::operator=): Make private (i.e. dis-allow).
-
-Wed Oct 12 19:09:20 1994 Jason Merrill (jason@phydeaux.cygnus.com)
-
- * gen-params: Define _G_NO_NRV and _G_NO_EXTERN_TEMPLATES if not
- compiling with g++.
-
-Thu Oct 6 16:03:43 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * iostream.texi (ostrstream::str): Note that NUL is not written
- automatically.
-
-Wed Oct 5 17:28:29 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * iogetdelim.c (_IO_getdelim): New function.
-
-Wed Oct 5 15:40:22 1994 J.T. Conklin (jtc@phishhead.cygnus.com)
-
- * config/netware.mt: New file, first cut at Netware NLM support.
- * configure.in (*-*-netware*): Use config/netware.mt.
-
- * config.shared (NLMCONV, LD): New definition.
-
- * gen-params: check for nm in ${binutils}/nm.new.
- * config.shared: Likewise.
-
-Tue Oct 4 12:20:01 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * iomanip.h (omanip::operator<<): Make 2nd arg be const.
- Bug and fix reported by Greg McGary <gkm@magilla.cichlid.com>.
-
- * strstream.cc (strstreambuf::pcount): Simplify, to match
- ANSI/ISO specification.
-
-Mon Sep 26 15:19:52 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * gen-params: Include <wchar.h> and <wctype.h> if they exist.
-
-Thu Sep 8 14:41:41 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * iostream.h (class istream): Declare operator>>(long double&).
- (class ostream): Define operator<<(long double).
-
- * iostream.cc (istream::operator>>(long double&)): Define.
-
-Wed Sep 7 14:42:29 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * iostream.texi (Overflow): Fix bugs in example.
-
-Fri Sep 2 17:45:57 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * iostream.tex: Document a little on how to write your
- own streambuf-derived class, with an example.
-
-Tue Aug 30 13:03:57 1994 Brendan Kehoe (brendan@lisa.cygnus.com)
-
- * floatconv.c (s2b): Declare X and Y to be _G_int32_t.
- (diff, quorem): Declare BORROW, Y, and Z likewise.
- (ulp): Declare L likewise.
- (_IO_strtod): Declare L and AADJ likewise.
- (_IO_dtoa): Declare L and D likewise. Cast division of D by DS to
- _G_int32_t.
-
-Mon Aug 29 16:01:54 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * iosetvbuf.c (_IO_setvbuf): If setting _IOFBF and no
- buffer was specified, call __doallocate.
-
- * fileops.c, floatconv.c: Add a bunch of parentheses to
- shut up gcc warnings. Patch from H.J.Lu.
-
- * stdiostream.cc (stdiobuf::sys_read): Inline call to getc
- for the normal case (size==1).
-
-Sat Aug 20 12:14:52 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * Makefile.in (VERSION): Increase to 0.66.
-
-Fri Aug 19 17:28:41 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * iolibio.h: Added _IO_printf prototype.
- Added extern "C" { ... } wrappers #ifdef __cplusplus.
- Bugs reported by Neal Becker <neal@ctd.comsat.com>.
-
-Wed Aug 17 18:17:15 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * fileops.c (_IO_file_seekoff): For _IO_seek_cur, adjust for
- read-ahead before jumping to label dumb.
-
-Wed Aug 3 13:15:01 1994 H.J. Lu (hjl@nynexst.com)
-
- * libioP.h (CHECK_FILE(FILE,RET)): new, which checks for
- FILE == NULL and _IO_MAGIC_MASK.
- (COERCE_FILE(FILE)): merged into CHECK_FILE(FILE,RET)
- with typo fixes.
-
- * iofread.c, iofwrite.c: add CHECK_FILE(fp, 0);
- * iofclose.c: add CHECK_FILE(fp, EOF); remove _IO_MAGIC_MASK check.
-
- * iofflush.c, iofgetpos.c, iofputs.c, iofscanf.c,
- iofsetpos.c, iofvbuf.c, ioungetc.c:
- Add CHECK_FILE(fp, EOF) and remove COERCE_FILE(fp).
-
- * iofgets.c: add CHECK_FILE(fp, NULL) and remove COERCE_FILE(fp).
- * iofprintf.c: add CHECK_FILE(fp, -1) and remove COERCE_FILE(fp).
- * ioftell.c: add CHECK_FILE(fp, -1L) and remove COERCE_FILE(fp).
- * iosetbuffer.c: add CHECK_FILE(fp, ) and remove COERCE_FILE(fp).
-
-Fri Aug 12 15:35:39 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * iofdopen.c (_IO_fdopen): #define O_ACCMODE if it isn't.
- Still set O_APPEND if "a" is given, but don't unset it
- if it isn't. Added comment.
-
-Mon Aug 8 13:11:00 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * gen-params (VTABLE_LABEL_PREFIX): Changes in the implementation.
- For look for _*vt[$_.]7*filebuf in the nm output, because that
- matches what g++ produces and has produced. Thus it should be
- somewhat more robust.
-
-Sun Aug 7 22:52:49 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * gen-params (CC): Remove no-longer-needed -I options
- passed to xgcc (now they are implied by the -B options).
-
-Wed Jul 20 16:41:13 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * Makefile.in (tooldir): Added definition, so we can do
- 'make install' in this directory.
- Bug reported by Klamer Schutte <schutte@tpd.tno.nl>.
-
-Mon Jul 18 18:02:34 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * gen-params (VTABLE_LABEL_PREFIX): Remove filename sppearing
- by itself. Add comment explaining what is going on.
-
-Tue Dec 21 13:02:48 1993 H.J. Lu (hjl@jalod)
-
- * libio.h: define _IO_uid_t and _IO_HAVE_ST_BLKSIZE
- as _G_xxxxxxxx.
-
-Tue Dec 21 13:02:48 1993 H.J. Lu (hjl@jalod)
-
- * iopopen.c: Don't include <errno.h>. It is included in "libioP.h".
-
- * iopopen.c (_IO_proc_close) : check if fp is on the list
- before close it.
-
-Thu Jul 14 16:38:47 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * gen-params (CONFIG_NM): Make sed scripts to find vtable name
- mangling more robost for different forms of nm output.
-
-Tue Dec 21 13:02:48 1993 H.J. Lu (hjl@jalod)
-
- * iofopen.c (_IO_fopen): don't check [redundantly] fp == NULL after
- IO_file_init(&fp->_file).
-
- * iomanip.h (template<class TP> class iapp):
- change ostream to istream.
-
-Tue Jul 12 14:09:02 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * Makefile.in (VERSION): Increase to 0.65.
- * libioP.h (builtinbuf_vtable): Only define #ifdef __cplusplus.
-
- * gen-params (_G_int8_t): Only define if defined(__STDC__),
- because K&R C compilers don't have signed char.
- (_G_int64_t, _G_uint64_t): Only define if defined(__GNUC__)
- because other compilers may not have long long.
-
-Sun Mar 06 13:10:21 1994 H.J. Lu (hjl@nynexst.com)
-
- * floatconv.c (_IO_dtoa ()): fix a small memory leak, set the
- "on_stack" field to be 0 if "result" is not NULL.
-
-Sat Mar 05 13:18:20 1994 H.J. Lu (hjl@nynexst.com)
-
- * floatconv.c (_IO_dtoa ()): if the number of digits of the
- floating point number is more than the previous one, free the
- old string and allocate a new one.
- [Minor optimization to avoid Bcopy. -PB]
-
-Mon Jul 11 10:53:41 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * fileops.c (_IO_file_underflow): 'count' should be unsigned,
- since it contains the return value of read. Reported by
- Teemu Torma <tot@trema.fi>.
-
-Tue Dec 21 13:02:48 1993 H.J. Lu (hjl@nynexst.com)
-
- * floatconv.c (_IO_strtod ()): make "+" and "-" as error.
-
-Sat Jul 9 15:09:21 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- Make sure _IO_FILE::_flags is always initialized correctly, for the
- C functions (fopen, fdopen, popen), and not just the C++ functions.
- * fileops.c (_IO_file_init): Set _flags to CLOSED_FILEBUF_FLAGS.
- * fileops.c (_IO_file_fopen): Remove bogus assignment.
- * filebuf.cc (filebuf constructors): Don't pass CLOSED_FILEBUF_FLAGS
- to streambuf constructor - _IO_file_init does it instead.
- * filebuf.cc (CLOSED_FILEBUF_FLAGS): Removed.
- * iopopen.c (_IO_proc_open): Use _IO_mask_flags.
-
-Thu Jun 30 08:49:53 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * dbz/Makefile.in (mostlyclean): Add target.
-
-Wed Jun 29 09:30:12 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * gen-params: Woops, can't run a C program to determine target
- characteristics. Sigh.
-
-Tue Jun 28 03:11:33 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * gen-params: Add _G_{,u}int{8,16,64}_t, use a short C program to
- determine what all these should be rather than trying to compare
- the MAX numbers in the shell.
-
-Sun Jun 26 21:04:24 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * stdiostream.h, stdiostream.cc (stdiobuf::xsgetn): Removed.
- Too hairy. If we want to optimize it, we should do so in
- filebuf::xsgetn (or rather _IO_file_xsgetn).
-
- * stdiostream.h (class stdiobuf), stdiostream.cc: Fix parameter
- and return types of virtual function to matcher base types (Oops!).
- * streamstream.cc (stdiobuf::xsgetn, stdiobuf::xsputn):
- Optimize to call fread.fwrite directly if !buffered.
- * fileops.c: Fix comment.
-
-Fri Jun 24 11:28:18 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * stdiostream.h (istdiostream, ostdiostream): New classes.
-
- More robust final cleanup.
- * cleanup.c (_IO_register_cleanup): Register _IO_cleanup,
- rather than _IO_flush_all.
- * filedoalloc.c: Update comment.
- * genops.c (_IO_unbuffer_all): New. Makes all files unbuffered.
- * genops.c (_IO_cleanup), libioP.h: New function. Call
- _IO_flush_all, and then _IO_unbuffer_all. This is in case C++
- destructors try to do output *after* _IO_cleanup is called.
-
- Construct standard stdiobufs statically (using type punning).
- * stdstrbufs.c; Unless _STDIO_USES_IOSTREAM declare standard
- stdiobufs (for stdin, stdout, and stderr), using type punning
- (struct _IO_fake_stdiobuf). This avoids constructor-time problems.
- * stdstreams.cc: Remove the declarations of the stdiobufs.
- Instead use the new (fake) ones in stdstrbufs.cc. We no longer
- have to call ios::sync_with_stdio at constructor time.
-
- Preliminary support for new ANSI streambuf::uflow virtual.
- * libioP.h (struct _IO_jump_t): Add __uflow field.
- * genops.c (_IO_default_uflow), libioP.h: New function.
- * fileops.c (_IO_file_jumps), iopopen.c (IO_proc_jumps),
- iovfprintf.c (_IO_helper_jumps), strops.c (_IO_str_jumps),
- streambuf.cc (_IO_streambuf_jumps): Add _IO_default_uflow.
- * genops.c (__uflow): New function.
- (save_for_backup): New function. Some code shared by
- __underflow and __uflow, moved out from the former.
- (_IO_default_uflow): New function.
- * libio.h (_IO_getc): Call __uflow, not __underflow.
-
-Wed Jun 22 20:22:49 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- Make sure that the vtable of a streambuf is always valid,
- which makes ios::rdbuf simpler and faster.
- * gen-params: Add code to determine _G_VTABLE_LABEL_HAS_LENGTH,
- _G_VTABLE_LABEL_PREFIX, _G_VTABLE_LABEL_PREFIX_ID, and
- _G_USING_THUNKS, which describe how virtual function tables are named.
- * stdfiles.c (FILEBUF_LITERAL): Moved to libioP.h.
- * libioP.h (builtinbuf_vtable): New (complicated) declaration.
- * filebuf.cc (filebuf::__new), strstream.cc (SET_STR_JUMPS):
- Initialize vtable to builtinbuf_vtable, not NULL.
- * stdstrbufs.cc: New file. Same as stdfiles.c, except that
- vtable is initialized to builtinbuf_vtable, not NULL.
- * streambuf.h (ios::rdbuf): Can now simplify/optimize, due to
- above changes. Always, just return _strbuf.
- * builtinbuf.h, builtinbuf.cc (builtinbuf::vtable,
- builtinbuf::get_builtin_vtable): Removed. No longer needed.
- * streambuf.h, builtinbuf.cc (ios::_IO_fix_vtable): No longer needed.
- Only defined #ifdef _STREAM_COMPAT, for binary compatibility.
- * Makefile.in: Move stdfiles.o from IO_OBJECTS to STDIO_WRAP_OBJECTS.
- (IOSTREAM_OBJECT): Add stdstrbufs.o.
- * Makefile.in (_G_config.h): Pass $(CXXFLAGS) as part of $(CXX).
-
-Fri Feb 11 11:08:01 1994 SBPM Marc GINGOLD (marc@david.saclay.cea.fr)
-
- * iovfprintf.c (helper_vfprintf): add
- hp->_IO_file_flags = _IO_MAGIC|(_IO_IS_FILEBUF+_IO_NO_READS);
- [This is needed because _IO_vfprintf checks for _IO_UNBUFFERED. -PB]
- [Actually: don't set _IO_IS_FILEBUF. -PB]
-
-Wed Jun 22 13:49:22 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * stdiostream.cc, stdiostream.h (stdiobuf::buffered): New methods.
-
- * iofdopen.c (_IO_fdopen): Various minor improvements.
-
- * iovfscanf.c: Don't return EOF on control_failure.
-
-Tue Dec 21 13:02:48 1993 H.J. Lu (hjl@nynexst.com)
-
- * iovfscanf.c: Enforce the sequence of the conversion specifications.
-
-Fri Jun 17 20:57:22 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * iofdopen.c: Use fcntl to check that requested access mode is
- compatible with existing access mode, and to change the
- O_APPEND file status flag if need be.
-
-Thu Jun 16 17:33:50 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * streambuf.h (ios::init): Initialize all the fields.
- This may be overkill, but the current ANSI working paper requires it.
- * streambuf.h (ios::ios): Reimplement in terms of ios::init.
- * iostream.cc (Non-default constructors istream::istream,
- ostream::ostream, iostream::iostream): Cannot use a mem-initializer,
- because it is ignored if initializing a derived class. Instead,
- call ios::init.
-
-Wed Jun 15 13:35:37 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * stdstreams.cc (ISTREAM_DEF): Fix typo (it's a _fake_istream, not
- a _fake_ostream). Reported by Jason Shirk <jshirk@gomez.intel.com>.
-
- * stdiostream.h, stdiostream.cc (stdiobuf::~stdiobuf): New.
- Call _IO_do_flush.
- * stdiostream.cc (stdiobuf::sync): Call _IO_do_flush rather
- than filebuf::sync (to avoid bad seeks).
-
- * libioP.h (_IO_do_flush): Add missing parentheses.
-
-Fri Jun 3 19:16:57 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * config.shared (CXXFLAGS): Remove -fno-implicit-templates.
-
- * iomanip.h: Add explicit external instantiations.
-
-Wed Jun 1 14:14:44 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * libio.h (struct _IO_FILE_plus): Move definition from here ...
- * libioP.h (struct _IO_FILE_plus): ... to here. Since this
- file is private to the implementation, we can rename the fields
- from the implementor's to the user's name anme space.
- (This avoids a lossage on SCO, whose stdio.h has a #define _file.)
- * iofdopen.c, iofopen.c, stdfiles.c: Fix field references accordingly.
- * iopopen.c (struct_IO_proc_file): Rename fields from
- implementor's name space to user's, and update usages.
- * streambuf.h (streambuf::_vtable): Re-implement to not need
- struct _IO_FILE_plus.
- * strfile.h (struct _IO_strfile_): Likewise.
-
-Wed Jun 1 13:57:48 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * config.shared (CXXFLAGS): Use -fno-implicit-templates instead of
- -fexternal-templates.
-
-Tue May 31 08:49:28 1994 Mike Stump (mrs@cygnus.com)
-
- * genops.c, iofclose.c, iofdopen.c, iofopen.c, iopopen.c: Be
- consistent about protecting #include <stdlib.h>.
-
- * ioputs.c: Add #include <string.h>, to avoid warning on alpha.
-
- * iofdopen.c: Add #include <stdlib.h>, so that malloc works on
- machines where sizeof(int) != sizeof(void *).
-
-Mon May 30 17:26:49 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * pfstream.cc (ipfstream::ipfstream, opfstream::opfstream):
- Reverse sense of test of return value of procbuf::open.
- (It returns NULL on failure.)
-
- * filedoalloc.c (_IO_file_doallocate): Remove dead code for
- USE_MALLOC_BUF. Add code to return EOF if ALLOC_BUF fails.
-
-Sat May 28 13:47:47 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * iomanip.cc: Explicitly instantiate smanip<int> and
- smanip<ios::fmtflags>.
-
-Wed May 25 16:04:12 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * strfile.h: Use __P instead of _PARAMS.
-
-Fri May 20 11:42:17 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * libio.h: Rename _PARAMS macro to __P for better glibc and BSD
- compatibility. (Also define _PARAMS for backwards compatibility.)
- * cleanup.c, iolibio.h, ioperror.c, iovfprintf.c, iovfscanf.c,
- libioP.h: Use __P instead of _PARAMS.
- * iostdio.h: Use __P instead of _ARGS.
-
- * fileops.c (_IO_file_read): Minor stylistic tweak. (It is
- preferable to test errno *after* the error return.)
-
-Fri May 13 15:25:36 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * iostream.*: Add insertor and extractor for bool (just pretend
- it's an int).
-
-Fri May 13 14:12:03 1994 Mike Stump (mrs@cygnus.com)
-
- * gen-params: Check for builtin bool support.
-
-Wed May 11 00:48:35 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- Make libg++ build with gcc -ansi -pedantic-errors
- * gen-params: #ifdef __STRICT_ANSI__, #define _G_NO_NRV.
- * pfstream.cc (ipfstream::ipfstream): Wrap use of variable-size
- array in #ifndef __STRICT_ANSI__.
-
-Fri May 6 12:42:21 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * Makefile.in (VERSION): Increase to 0.64.
-
- * isgetline.cc (istream::getline): The delimiter should *not*
- be included in the gcount().
-
- * filedoalloc.c: #include <stdlib.h> (If __STDC__) to get malloc.
- * iostream.h (ostream::put): Remove overloaded versions, to match
- new working paper. (Actually just put inside _STREAM_COMPAT, for now.)
-
-Tue May 3 14:14:57 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * genops.c (_IO_default_finish): Make robust when called
- multiple times on the same _IO_FILE*. (One way this can
- happen is by the builtinbuf destructor being followed by the
- streambuf destructor.)
-
-Mon May 2 13:55:26 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * gen-params: Actually determine wint_t rather than depending on
- cpp to provide it or defaulting to the underlying type for
- wchar_t.
-
-Sat Apr 30 14:47:30 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * gen-params: Add _G_wint_t, allow __*_TYPE__ to override values
- at compile time, fix definition of _G_ARGS.
-
-Fri Apr 29 16:55:37 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * libio.h: Remove #pragma interface. (There is no implementation.)
-
-Mon Mar 28 14:22:26 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * iostream.cc (ostream::operator<<(double)): Add/fix support
- for printing '+' when ios::showpos is set.
- (Fixes bug reported by Doug Moore <dougm@cs.rice.edu>.)
- * iostream.cc (istream::read): Set eofbit as well as failbit on eof.
- * iostream.cc (ostream::operator<<(int)): Fix conversion
- to unsigned (used to lose on INT_MIN).
- * iostream.cc (ostream::operator<<(long)): Use (unsigned long),
- rather than (unsigned) for temporary.
-
- * config.shared, Makefile.in: Remove definitions and uses
- of XTRAFLAGS. It is no longer needed, since it is
- now implied by the -B flag.
-
-Fri Mar 25 00:31:22 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * builtinbuf.h: Add put /**/ around comment on trailing #endif.
-
- * Makefile.in (c++clean): Make clean in tests subdir, too.
-
-Wed Mar 23 16:42:09 1994 Doug Evans (dje@canuck.cygnus.com)
-
- * configure.in: Remove Makefile.tem before creating it.
- Needed when configuring from read-only source trees.
-
-Wed Mar 16 14:06:42 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * stdstreams.cc: Fix so that stdiobuf are used for cin/cout/cerr,
- unless _STDIO_USES_IOSTREAM is defined.
- * filebuf.cc (filebuf::setbuf): Fix confusion about return
- value from _IO_file_setbuf.
-
-Sun Mar 13 00:54:12 1994 Paul Eggert (eggert@twinsun.com)
-
- * config.shared: Ensure that `all' precedes `.PHONY';
- BSDI 1.1 needs this.
-
-Sat Mar 12 03:58:00 1994 Paul Eggert (eggert@twinsun.com)
-
- * config.shared: Output a definition of INSTALL that uses
- $${rootme}, not ${rootme}. Most `make's don't care, but BSDI
- 1.1 `make' does.
-
-Fri Mar 4 17:33:01 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * iopopen.c: #define _POSIX_SOURCE.
- * isgetline.c (istream::getline): Various fixes.
-
-Thu Mar 3 17:58:20 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * iostream.cc (write_int): Fix test for when to add initial '0'
- when ios::oct and ios::showbase are set.
- For hex, showbase adds initial 0x (or 0X) regardless of val==0.
- Bugs reported by Phil Roth <proth@cs.uiuc.edu>.
-
-Mon Feb 21 13:18:20 1994 H.J. Lu (hjl@nynexst.com)
-
- * libio.h (_IO_PENDING_OUTPUT_COUNT(_fp)): return the
- pending output count in _fp.
-
-Fri Feb 25 09:26:57 1994 Ian Lance Taylor (ian@cygnus.com)
-
- * gen-params: For HAVE_SYS_WAIT, compile dummy.c, not dummy.C.
-
-Tue Feb 22 11:19:09 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * streambuf.h, genops.c, libioP.h: Rename references to
- _IO_FILE fields other_gbase => _IO_save_base,
- _aux_limit => _IO_backup_base, and _other_egptr => _IO_save_end.
- * libio.h: Remove no-longer needed macros _other_gbase,
- _aux_limit, and _other_egptr.
- * genops.c (__underflow, _IO_default_finishh, _IO_unsave_markers):
- Check _IO_save_base for NULL before FREEing it or calling
- _IO_free_backup_area.
-
-Thu Feb 17 15:26:59 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * gen-params: Improve deduction of _G_uint32 and _G_int32.
- Should now work for 16-bit, 32-bit, or 64-bit targets.
- * gen-params: Check for sys/wait.h using ${CC}, since it's
- now used in a C file, not a C++ file.
- * floatconv.c: Typedef _G_uint32_t as unsigned32, and use
- unsigned32 in place of unsigned long. (Needed for Alpha.)
-
-Tue Feb 8 13:40:15 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * fileops.c (_IO_file_close_it): Simplify by using _IO_do_flush.
- * fileops.c (_IO_file_finish): Don't call _IO_file_close_it -
- do it inline. Call _IO_do_flush even if _IO_DELETE_DONT_CLOSE.
- * fileops.c (_IO_file_attach): Set _IO_DELETE_DONT_CLOSE.
- * genops.c (_IO_flush_all): Only call overflow if there is
- something to write.
- * iofclose.c (_IO_fclose): Check that magic number is correct,
- and clear it when done. Avoids crashing some buggy applications.
- * iogetline.c (_IO_getline): Don't gratuitously increment old_len.
- * iogets.c (_IO_gets): Take care to get required ANSi semantics.
-
-Sun Feb 6 19:50:39 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * iomanip.cc: Explicitly instantiate operator<< and >>.
-
-Fri Feb 4 12:28:22 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * config.shared (CXXFLAGS): Use -fexternal-templates.
-
- * iomanip.h: Uncomment #pragma interface.
-
-Thu Jan 20 13:48:40 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- If no characters are read by fgets, ANSI C doesn't allow '\0' to
- be written to the buffer, but it is required by ANSI C++
- for istream::get and istream::getline. Both use _IO_getline ...
- * iogetline.c (_IO_getline): Don't write a '\0' at the end
- of the read data. The input buffer length does not include
- space for a '\0'.
- * iofgets.c, iogets.c: Change appropriately.
- Also check for _IO_ERR_SEEN, as required by ANSI.
- * isgetline.cc: Update accordingly.
-
-Mon Jan 17 13:24:26 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * Makefile.in (c++clean): Added target for compiler testing
- (i.e. make c++clean all).
-
-Mon Jan 10 11:20:42 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * libio.h (_IO_putc): Add parentheses.
- Patch from Rik Faith <faith@cs.unc.edu>.
-
-Tue Jan 4 01:32:28 1993 Hongjiu Lu (hjl@nynexst.com)
-
- * genops.c (_IO_default_xsputn):
- (_IO_default_xsgetn):
- * ioignore.c: change "_IO_size_t count" to
- "_IO_ssize_t count".
- * iogetline.c: change "_IO_size_t len" to
- "_IO_ssize_t len".
-
-Mon Dec 20 00:31:21 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * config.shared (CXXINCLUDES): Fix quoting of $(NOSTDINC).
-
-Sun Dec 19 21:03:45 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * Makefile.in (VERSION): Increase to 0.63.
-
-Fri Dec 17 13:02:44 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * iofread.c (_IO_fread): Return 0 if either size or count is 0.
- * iofwrite.c (_IO_fwrite): Return 0 if either size or count is 0.
- (This is consistent with fread, and most implementations, but not
- with a literal reading of the ANSI spec.)
- * iovfscanf.c (_IO_vfscanf): If got EOF while skipping spaces,
- set seen_eof and break (instead of returning).
- * sbscan.cc (streambuf::vscan): Set error state before returning.
- * streambuf.h: Add a forward declarations for class istream
- to work around a g++ vtable name mangling bug. (Patch from
- harry@pdsrc.hilco.com via Jeffrey A Law <law@snake.cs.utah.edu>.)
- * NEWS: New file.
-
-Sat Dec 11 16:21:08 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * iovfprintf.c (struct helper_file, _IO_helper_overflow,
- helper_vfprintf, _IO_helper_jumps): New structs and functions.
- (_IO_vfprintf): Use helper_vfprintf to make printing to
- unbuffered files more efficient.
- * genops.c (_IO_default_underflow), libioP.h: New function.
-
- * iovsscanf.c (_IO_vsscanf): The input string's length marks
- its logical end-of-file.
-
-Wed Dec 8 13:20:46 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * indstream.cc (indirectbuf::sync()): Don't crash if get_stream()
- or put_stream() are NULL; sync() both streams even if error.
-
-Sun Dec 5 19:24:29 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
-
- * iostreamP.h (convert_to_seekflags): Use _IO_seek_set instead of
- 0 inside the conditial expressions.
-
- * iofsetpos.c (_IO_fsetpos): Delete unused var `pos'.
-
-Sat Dec 4 15:57:26 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * filedoalloc.c (_IO_file_doallocate): Change type of couldbetty
- to int, and type of size to _IO_size_t, instead of size_t.
- (Change needed for Ultrix, which incorrectly deliberately doesn't
- define size_t in <sys/types.h> if _POSIX_SOURCE is defined.)
-
-Thu Dec 2 22:43:03 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * fileops.c (_IO_file_finish): Remove redundant call to _IO_un_link.
- * iofclose.c (_IO_fclose): Don't call fp->_jumps->__close; it's
- too low-level. Instead call _IO_file_close_it.
- * dbz/Makefile.in (rclean, distclean): Add some missing files.
-
-Wed Dec 1 13:19:14 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * config/hpux.mt (MATH_H_INLINES): No longer define.
- Patch from Jeffrey A Law <law@snake.cs.utah.edu>.
-
-Fri Nov 26 13:28:36 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * config.shared (CINCLUDES): Define default if libg++.
- * iofread.c: Use _IO_sgetn.c.
- * iolibio.h (_IO_clearerr): Fix typo.
- * genops.c (_IO_seekmark): Return 0 on success.
- * floactconv.c (Binit): Change to static.
- * iofclose.c (_IO_fclose): Check if file is _IO_stdin, _IO_stdout,
- or _IO_stderr; if so don't try to free it. Fix from hjl@nynexst.com.
-
- * genops.c (_IO_default_sync), libioP.h: New function.
- * libioP.h (_IO_default_close): Use _IO_default_sync -same interface.
-
- * Makefile.in: Increase version to 0.62.
- * iopopen.c (_IO_proc_close): Use waitpid (available in libibarty,
- if needed), rather than wait. Don't block/ignore SIGINT etc,
- as this is counter to Posix.2.
- * iopopen.c: Chain open proc_files, and have the child close
- the ones that are open (as required by Posix.2).
-
- * fstream.h (fstreambase::rdbuf), strstream.h (strstreambase
- ::rdbuf): Call ios::rdbuf() instead of getting _strbuf directly.
-
- * sbscan.cc (streambuf::vscan): Comment out duplicate default arg.
- * floatconv.c: Recognize Alpha and i860 as little-endian.
- * streambuf.cc: Return two bogus value returns from void functions.
- * iolibio.h, iofwrite.c: Fix buffer type to (const void*).
- * libio.h: Predefine of struct _IO_FILE to help non-g++-compilers.
- * libioP.h, pfstream.cc, stdfiles.c, iovfscanf.c: Cleanup syntax junk.
- * stdstreams.cc: Minor simplification.
- * streambuf.h, builtinbuf.cc: Add non-const ios::_IO_fix_vtable()
- for temporary binary compatibility.
-
- * filedoalloc.c, fileops.c: Add _POSIX_SOURCE.
- * fileops.c, iofopen.c, iofputs.c, iostream.cc, strops.c,
- strstream.cc, genops.c: Add some missing #includes.
- * iofopen.c, iofdopen.c: Return NULL if malloc fails.
- * iovfscanf.c: Fix return type in strtol prototype.
- * fwrite.c: Remove bogus file.
-
-Wed Nov 17 14:09:42 1993 Per Bothner (bothner@cygnus.com)
-
- * builtinbuf.cc (ios::_IO_fix_vtable), streambuf.h: Make method
- const, to reduce problems with -Wcast-qual.
-
-Tue Nov 16 19:30:42 1993 david d `zoo' zuhn (zoo@rtl.cygnus.com)
-
- * config.shared (CXXINCLUDE): use ${} instead of $() for NOSTDINC
-
-Tue Nov 16 14:15:45 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * iopopen.c (_IO_proc_close): Re-structure to avoid
- declarations after statements.
- * floatconv.c: If not __STDC__, #define DBL_MANT_DIG.
- * config/isc.mt (G_CONFIG_ARGS): Remove bogus spaces.
- Patch from David A. Avery <daa@nic.cerf.net>.
-
-Tue Nov 16 15:58:31 1993 Mark Eichin (eichin@cygnus.com)
-
- * Makefile.in (_G_config.h): explicitly use $(SHELL) to run
- gen-params, since we know it is a script (we're explicitly looking
- in ${srcdir} for it) and /bin/sh might not be good enough.
-
-Mon Nov 15 13:26:22 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * builtinbuf.cc: Don't depend on initialization of static
- variable builtinbuf::vtable, since that might happen after
- we need it (for a static constructor). Instead, initialize
- it when needed by inlining the code from get_builtin_vtable
- into ios::_IO_fix_vtable().
-
- * floatconv.c: Avoid using #elif, which some C compilers lack.
- * iogetline.c, libioP.h: Make char parameter be int, to avoid
- some default promotion anomalies.
-
-Fri Nov 5 11:49:46 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * config.shared (do-clean-dvi): Remove TeX work files.
- * iopopen.c (extern _IO_fork): Don't use parameter type void.
- * strops.c (_IO_str_init_static): Clear the allocate_buffer
- function pointer, to mark the strfile as being static.
- Bug fix from Mike Raisbeck <mike@pudding.rtr.COM>.
-
-Thu Nov 4 10:44:24 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * filebuf.cc (filebuf:): Use sseekoff rather than seekoff
- (which loses if vtable pointer is NULL).
-
- * iostream.cc (ostream::operator<<(long long n)): Fix thinko.
-
- * Makefile.in (VERSION): Increase to 0.60.
- * Makefile.in (IO_OBJECTS): Added iopopen.o.
- * config.shared (DISTCLEAN): Also remove Make.pack.
- * config.shared (CXXINCLUDES): Add $(NOSTDINC).
-
- * config.shared (INSTALL): Fix so it ues the correct install.sh
- whether $srcdir is absolute or relative.
-
- * floatconv.c (DBL_MAX_10_EXP): Fix default value.
-
-Wed Nov 3 10:20:49 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * gen-params: Make more robust to allow random junk (NeXT
- has spaces) before typedefs.
-
- * fileops.c (_IO_file_overflow): Reduce code duplication.
- * Makefile.in (IO_OBJECTS): Remove ioputs.o.
-
- * iovfscanf.c, libio.h: Extra parameter to _IO_vfscanf,
- for optionally setting an error indication..
- * iofscanf.c, ioscanf.c, iofscanf.c, iovsscanf.c: Fix calls to
- _IO_vfscanf to pass an extra NULL.
- * sbscan.cc (streambuf::vscan): If passed an extra stream,
- set its error state (using new _IO_vfscanf parameter.
-
- * filedoalloc.c, fileops.c, genops.c, iogetline.c, ioignore.c,
- libio.h, libioP.h, streambuf.cc streambuf.h, strfile.h, strops.c,
- strstream.cc: Replace macros (_base, _ebuf, _eback, _gptr, _egptr,
- _pbase, _pptr, _epptr) by field names (_IO_buf_base, _IO_buf_end,
- _IO_read_base, _IO_read_pre, IO_read_end, _IO_write_base,
- _IO_write_ptr, _IO_write_end).
- * libio.h: Remove the old macros (which fixes a conflict.
-
-Mon Nov 1 15:22:12 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * iostream.cc: Use _IO_sputn instead of sputn. _IO_sputn does
- not require a vtable pointer, and is also slightly faster.
-
- * builtinbuf.{h,cc} (builtinbuf::setbuf): Fix return and
- parameter types.
-
-Mon Oct 25 12:56:33 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- Kludge to make sure _IO_FILE buffers get flushed before exit.
- * dbz/dbzmain.c, dbz/fake.c, dbz/byteflip.c:
- Invoke DBZ_FINISH macro (if defined) before (normal) exits.
- * dbz/Makefile.in (CFLAGS): Define DBZ_FINISH to call _IO_flush_all.
-
-Sat Oct 23 22:10:53 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * Makefile.in (VERSION): Set to 0.60 for libg++ release.
- * fileops.c (_IO_file_attach): Set _offset to _IO_pos_BAD.
- * iostream.cc (ostream::flush): Fix thinkp.
- * editbuf.cc, isgetsb.cc, isscan.cc, osform.cc, parsestream.cc,
- pfstream.cc, sbform.cc, sbscan.cc, stdstreams.cc, stream.cc:
- Replace #include "ioprivate.h" by #include "libioP.h" (and
- sometimes stdarg.h, stdlib.h and/or string.h).
- * ioprivate.h: Removed.
-
-
-Thu Oct 21 19:24:02 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * PlotFile.h, SFile.h, editbuf.cc, editbuf.h, filebuf.cc,
- fstream.cc, fstream.h, indstream.cc, indstream.h, iomanip.cc,
- iomanip.h, ioprivate.h, iostream.cc, iostream.h, isgetline.cc,
- isgetsb.cc, parsestream.cc, parsestream.h, pfstream.cc,
- pfstream.h, procbuf.cc, procbuf.h, stdiostream.cc, stdiostream.h,
- stdstreams.cc, streambuf.cc, streambuf.h, strstream.cc,
- strstream.h: Remove old (duplicate) copyright notices.
-
- * iostream.cc: Fix calls to sync() to be safe in the presence
- of vtable-less streambufs.
-
-Wed Oct 20 15:22:04 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * streambuf.h (streambuf::underflow, streambuf::overflow):
- Don't make virtual functions pure.
- * streambuf.cc (streambuf::underflow, streambuf::overflow):
- Default definitions (return EOF).
- * fstream.h: Add new (int fd, char* buf, int len) constructors.
- These are deprecated, but added for AT&T compatibility.
- * fstream.cc fstreambase::fstreambase(int fd, char *p, int l): New.
-
-Thu Oct 14 14:57:01 1993 david d `zoo' zuhn (zoo@rtl.cygnus.com)
-
- * configure.in: use 'mv -f' instead of 'mv'
-
-Tue Oct 12 05:01:44 1993 Mike Stump (mrs@cygnus.com)
-
- * floatconv.c: Fix typo, change __STDC to __STDC__.
-
-Mon Oct 11 17:03:12 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * cleanup.c: It should be #if _G_HAVE_ATEXIT, not #ifdef.
-
- * floatconv.c, iostrerror.c, iovfprintf.c, iovfscanf.c, libioP.h:
- Bunch of fixes to allow use of non-ANSI (K&R) C compilers.
-
- * Makefile.in (iostream.list): Use CC=$(CXX) to force use of gcc.
- * README: New file.
-
-Fri Oct 8 16:19:58 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * Makefile.in: Move ioungetc.o from STDIO_WRAP_OBJECTS to
- IO_OBJECTS (since it is needed for iovfscanf.c).
- * iostrerror.c: Add declaration of strerror.
-
-Thu Oct 7 12:02:28 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * cleanup.c: New file, to cause flushing at exit.
- * filedoalloc.c: Cause flushing on exit.
- * Makefile.in (OSPRIM_OBJECTS): Add cleanup.o.
- * gen-params: Check for atexit.
-
-Tue Oct 5 19:11:14 1993 Mike Stump (mrs@cygnus.com)
-
- * ioperror.c (_IO_strerror): Add missing ()s in _PARAMS usage.
-
-Tue Oct 5 10:33:37 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * iofprintf.c, iofscanf.c, ioprintf.c, ioscanf.c, iosprintf.c,
- iosscanf.c: Remove bogus semi-colon after va_dcl.
- * ioperror.c: Fix typos in declaration.
-
-Mon Oct 4 17:12:22 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * configure.in (CLEAN): Define (as _G_config.h *.a).
-
- * fileops.c (_IO_file_read): Don't assume EINTR is defined.
- * iosetbuf.c: Replace by generalized ...
- * iosetbuffer.c: ... variant, derived from BSD.
- * Makefile.in (STDIO_WRAP_OBJECTS): Change correspondingly.
- * iosetvbuf.c (iosetvbuf): Minor ANSI tweak.
- * iostdio.h (setbuf, setlinebuf): New #defines.
- * iolibio.h (_IO_setbuf, _IO_setlinebuf): (Re-)define as macros.
- * Makefile.in (LIBIO_OBJECTS): New macro.
-
-Tue Sep 28 14:15:52 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * libioP.h (_IO_proc_open, _IO_proc_close): Add missing return types.
- * procbuf.cc: Belated fixes.
-
-Mon Sep 27 14:04:47 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * Makefile.in: List new files. Add STDIO_WRAP_OBJECTS macro.
- * floatconv.c (d2b): Use Exp_msk11 instead of Exp_msk1.
- * iofgetpos.c (_IO_fgetpos), iofsetpos.c (_IO_fsetpos): Clean up.
- * iolibio.h: New file. Declarations of _IO_foo, for most foo
- where foo is a stdio function. (Remove these from libio.h.)
- * iostream.h (istream::istreambuf, ostream::ostreambuf): Move
- obsolete functions inside #ifdef _STREAM_COMPAT.
- * libio.h, libioP.h, streambuf.h, parsestream.h, stdiostream.h:
- Use _IO_fpos_t rather than _IO_pos_t.
- * iopopen.c: New file type, for pipe (popen-like) streams.
- * procbuf.cc: Now just a C++ wrapper for the files in iopopen.c.
- * streambuf.h (ios::unsetf): Return complete old value of flags.
- * iogets.c (_IO_gets(), ioungetc.c (_IO_ungetc), ioperror.c
- (_IO_perror), iostrerror.c (_IO_strerror): New files and
- functions, for stdio implementation.
- * iostdio.h: Add declarations for various recently-added functions.
-
-Sun Sep 12 14:24:55 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * streambuf.h (ios::showpos):: Fix typo.
-
-Fri Aug 27 12:05:47 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * iopadn.c (_IO_padn): Change to return count of chars written.
- * outfloat.c, iovfprintf.c: Change for new _IO_padn interface.
- * iostream.cc (ostream::operator<<): Make sure to set badbit
- on a failure (many places). Use _IO_padn more.
- * iostream.cc (ostream& ostream::operator<<(const void *p): Move to
- * osform.cc: ... here, to reduce linking-in-the-world syndrome.
- * osform.cc: Use rdbuf(), instead of _strbuf directly.
-
- * genops.c (_IO_sgetn), libio.h: New function.
- * streambuf.h (streambuf.h::sgetn): Use _IO_sgetn.
- * SFile.cc (SFile::operator[]): Use sseekoff, not seekoff.
-
-Thu Aug 26 10:16:31 1993 david d `zoo' zuhn (zoo@rtl.cygnus.com)
-
- * config.shared (SUBDIRS): only recurse if the directory is configured
-
-Wed Aug 25 12:56:12 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * config/{hpux.mt, isc.mt, sco4.mt}:
- Moved from ../libg++/config (since they affect _G_config.h).
- * configure.in: Set target_make_frag to one of the above files.
-
-Fri Aug 20 00:53:14 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * iofopen.c (iofopen): Fix type passed to _IO_un_link().
- * Makefile.in (_G_config.h): Pass $CC (not $CXX) as CC.
-
- * configure.in (configdirs): Add dbz and stdio.
- * fileops.c (_IO_file_seekoff): Convert more old functionality.
- * iofdopen.c: Use mode parameter to set _flags.
- * iofscanf.c, ioputs.c, ioscanf.c, iosprintf.c: New files.
- * Makefile.in (IO_OBJECTS): Added new objects.
- * iostdio.h: Add feof. fscanf, puts, sprintf, vsprintf.
- * libio.h: Add _IO_vprintf macro.
- * iofopen.c: Invoke _IO_un_link if failure.
- * iovsprintf.c: Write terminating NUL.
-
- * libioP.h: Add COERCE_FILE macro (by default does nothing).
- * iofclose.c, iofflush.c, iofgets.c, iofprintf.c, iofputs.c,
- iofread.c, ioftell.c, iofwrite.c, iosetbuf.c, iosetvbuf.c:
- Invoke COERCE_FILE macro.
- * ioftell.c: Use _IO_seekoff.
-
-Wed Aug 18 22:49:56 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * sbform.cc (streambuf::form), sbscan.cc (streambuf::scan):
- Remove cast to _IO_va_list. (Loses if array type.)
-
- * libio.h: Handle _IO_va_list for systems that need <stdarg.h>.
- * floatconv.h: Fix typo (reported by H.J.Lu).
-
-Wed Aug 18 19:34:04 1993 david d `zoo' zuhn (zoo@rtl.cygnus.com)
-
- * configure.in (INSTALLDIR): handle native vs. cross case
-
- * Makefile.in (install): don't use $TARGETLIB, set INSTALLDIR to
- $(libdir)
-
-Wed Aug 18 12:10:03 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * Makefile.in: Rename iostream-files to iostream.list.
- * configure.in: Add iostream.list to MOSTLYCLEAN.
-
-Tue Aug 17 18:56:59 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * Makefile.in: Depend on _G_config.h where appropriate.
- * config.shared (CXXINCLUDES): If doing libg++, search ../libio.
-
-Tue Aug 17 17:34:24 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- New directory. Based on old libg++/iostream code,
- but extensively re-written.
-
-
diff --git a/contrib/libg++/libio/Makefile.in b/contrib/libg++/libio/Makefile.in
deleted file mode 100644
index c78639a3e229..000000000000
--- a/contrib/libg++/libio/Makefile.in
+++ /dev/null
@@ -1,124 +0,0 @@
-# Copyright (C) 1993, 1995 Free Software Foundation
-#
-# This file is part of the GNU IO Library. This library is free
-# software; you can redistribute it and/or modify it under the
-# terms of the GNU General Public License as published by the
-# Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this library; see the file COPYING. If not, write to the Free
-# Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-srcdir = .
-
-VERSION = 2.7.2
-# The config file (overriden by Linux).
-_G_CONFIG_H=_G_config.h
-tooldir = $(exec_prefix)/$(target)
-INSTALLDIR = $(libdir)
-
-IO_OBJECTS = filedoalloc.o floatconv.o genops.o fileops.o \
- iovfprintf.o \
- iovfscanf.o ioignore.o iopadn.o \
- iofgetpos.o iofread.o iofscanf.o \
- iofsetpos.o iogetdelim.o iogetline.o \
- ioprintf.o ioseekoff.o ioseekpos.o \
- outfloat.o strops.o iofclose.o iopopen.o ioungetc.o
-
-# These emulate stdio functionality, but with a different name (_IO_ungetc
-# instead of ungetc), and using _IO_FILE instead of FILE.
-# They are not needed for C++ iostream, nor stdio, though some stdio
-# files are build using the same source files (see stdio/configure.in).
-# They are needed for iostdio.h. They are needed under Linux to avoid
-# version incompatibility problems with the C library.
-# iofclose.o is not here, because it is needed for stdio (by pclose).
-STDIO_WRAP_OBJECTS = iofdopen.o iofflush.o iofgets.o iofopen.o iofprintf.o iofputs.o iofwrite.o \
- iogets.o ioperror.o ioputs.o ioscanf.o iosetbuffer.o iosetvbuf.o \
- iosprintf.o iosscanf.o ioftell.o iovsprintf.o iovsscanf.o
-
-IOSTREAM_OBJECTS = builtinbuf.o filebuf.o fstream.o \
- indstream.o ioassign.o ioextend.o iomanip.o iostream.o \
- isgetline.o isgetsb.o isscan.o \
- osform.o procbuf.o sbform.o sbgetline.o sbscan.o \
- stdiostream.o stdstrbufs.o stdstreams.o stream.o streambuf.o strstream.o \
- PlotFile.o SFile.o parsestream.o pfstream.o editbuf.o
-
-# These files define _IO_read etc, which are just wrappers for read(2) etc.
-# They need to be changed to use name-space-clean (e.g. __read) versions
-# for each specific libc.
-OSPRIM_OBJECTS = ioprims.o iostrerror.o cleanup.o
-
-LIBIOSTREAM_OBJECTS = $(IO_OBJECTS) $(IOSTREAM_OBJECTS) $(OSPRIM_OBJECTS)
-LIBIO_OBJECTS = $(IO_OBJECTS) $(STDIO_WRAP_OBJECTS) $(OSPRIM_OBJECTS) stdfiles.o
-
-LIBIOSTREAM_DEP = $(LIBIOSTREAM_OBJECTS)
-LIBIOSTREAM_USE = $(LIBIOSTREAM_OBJECTS)
-
-USER_INCLUDES = *.h
-
-#### package, host, target, and site dependent Makefile fragments come in here.
-##
-
-libio.a: $(_G_CONFIG_H) $(LIBIO_OBJECTS)
- -rm -rf libio.a
- $(AR) $(AR_FLAGS) libio.a $(LIBIO_OBJECTS)
- $(RANLIB) libio.a
-
-libiostream.a: $(_G_CONFIG_H) $(LIBIOSTREAM_DEP)
- -rm -rf libiostream.a
- $(AR) $(AR_FLAGS) libiostream.a $(LIBIOSTREAM_USE)
- $(RANLIB) libiostream.a
-
-test: test.o libio.a
- $(CC) -o test test.o libio.a
-tpipe: tpipe.o libio.a
- $(CC) -o tpipe tpipe.o libio.a
-
-iostream.list: stamp-picdir $(_G_CONFIG_H) $(LIBIOSTREAM_DEP)
- @echo "$(LIBIOSTREAM_USE)"> iostream.list
-
-stdio/stdio.list: force
- @rootme=`pwd`/ ; export rootme; cd stdio ; \
- $(MAKE) $(FLAGS_TO_PASS) stdio.list
-
-stdio.list: stdio/stdio.list
- rm -f tstdio.list
- sed 's,\([a-z_]*\.o\),stdio/\1,g' stdio/stdio.list > tstdio.list
- mv tstdio.list stdio.list
-
-_G_config.h: ${srcdir}/gen-params
- rootme=`pwd`/ ; export rootme; \
- CC="$(CC)"; export CC; \
- CXX="$(CXX) $(NOSTDINC) $(CXXFLAGS)"; export CXX; \
- CONFIG_NM="$(NM)"; export CONFIG_NM; \
- $(SHELL) ${srcdir}/gen-params LIB_VERSION=$(VERSION) $(G_CONFIG_ARGS) >tmp-params.h
- mv tmp-params.h _G_config.h
-
-install:
- rootme=`pwd`/ ; export rootme ; \
- if [ -z "$(MULTISUBDIR)" ]; then \
- if [ "$(_G_CONFIG_H)" != "" ]; then \
- rm -f $(tooldir)/include/_G_config.h ; \
- $(INSTALL_DATA) _G_config.h $(tooldir)/include/_G_config.h || exit 1; \
- else true; \
- fi ; \
- cd $(srcdir); \
- for FILE in $(USER_INCLUDES) ; do \
- rm -f $(gxx_includedir)/$$FILE ; \
- $(INSTALL_DATA) $$FILE $(gxx_includedir)/$$FILE ; \
- chmod a-x $(gxx_includedir)/$$FILE ; \
- done ; \
- else true; \
- fi
- @rootme=`pwd`/ ; export rootme ; \
- $(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=install
-
-c++clean:
- rm -rf $(IOSTREAM_OBJECTS)
- @$(MAKE) $(FLAGS_TO_PASS) "DODIRS=tests" DO=clean subdir_do
diff --git a/contrib/libg++/libio/NEWS b/contrib/libg++/libio/NEWS
deleted file mode 100644
index 4a4ade283704..000000000000
--- a/contrib/libg++/libio/NEWS
+++ /dev/null
@@ -1,51 +0,0 @@
-*** Major changes in libio version 2.7.0:
-
-* The data representations of _IO_FILE and streambufs have been modified.
- The layout of the jump-table table _IO_jumps_t has been re-arranged
- to match that of a virtual function table of a streambuf. Therefore,
- we no longer need a separate _IO_FILE::_jumps pointer; instead it can
- be shared with the virtual function table pointer. In addition to
- saving space, this also removes the overhead when double indirection
- was needed, and there are many simplificatons (e.g. we no longer need
- the builtinbuf class.
-
-* The streambuf::uflow virtual has been added, to match the standard.
-
-* The ifstream, ofstream, and fstream classes now include the filebuf
- as a member, rather than being pointed to it. Various related changes.
-
-* Version number changed to generally follow libg++ (and gcc).
-
-*** Major changes in libio version 0.66 (released with libg++ 2.6.1):
-
-* Some documentation and an example in iostream.texi on how to derive
- your own class from streambuf.
-
-* New functions added to stdio: getline, detdelim, snprintf, vsnprintf.
- This is for compatibility with the GNU C library.
-
-*** Major changes in libio version 0.65 (released with libg++ 2.6):
-
-* _IO_getline and streambuf::sgetline no longer write a '\0' at the end.
-
-* A number of improvements to get closer to the ANSI/ISO C++ working
-paper, such as:
-- Added (preliminary support for) new ANSI streambuf::uflow virtual.
-- Added istdiostream and ostdiostream classes.
-- Added ostream::operator<<(bool) and istream::operator>>(bool&).
-
-* More robust (and faster) initialization and cleanup of standard streambufs.
-
-* Many small bug fixes, portability improvements, and random enhancements.
-
-*** Major changes in libio version 0.63 (released with libg++ 2.5.3):
-
-* There is a g++ bug that causes inconsistent name mangling for the
-assembler name of the virtual function table for the istream class.
-A work-around has been put into streambuf.h, which will make g++
-always do the right thing. Note that this may require you to
-recompile programs that were incorrectly compiled by g++.
-
-* Functions that do printf-style formatting to the unbuffered
-streams have been optimized to write to a temporary buffer.
-
diff --git a/contrib/libg++/libio/PlotFile.cc b/contrib/libg++/libio/PlotFile.cc
deleted file mode 100644
index 98b2d839555d..000000000000
--- a/contrib/libg++/libio/PlotFile.cc
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988, 1992, 1993 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
- converted to use iostream library by Per Bothner (bothner@cygnus.com)
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with GCC to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <PlotFile.h>
-
-/*
- PlotFile implementation module
-*/
-
-
-PlotFile& PlotFile:: cmd(char c)
-{
- ofstream::put(c);
- return *this;
-}
-
-PlotFile& PlotFile:: operator<<(const int x)
-{
-#if defined(convex)
- ofstream::put((char)(x>>8));
- ofstream::put((char)(x&0377));
-#else
- ofstream::put((char)(x&0377));
- ofstream::put((char)(x>>8));
-#endif
- return *this;
-}
-
-PlotFile& PlotFile:: operator<<(const char *s)
-{
- *(ofstream*)this << s;
- return *this;
-}
-
-
-PlotFile& PlotFile:: arc(const int xi, const int yi,
- const int x0, const int y0,
- const int x1, const int y1)
-{
- return cmd('a') << xi << yi << x0 << y0 << x1 << y1;
-}
-
-
-PlotFile& PlotFile:: box(const int x0, const int y0,
- const int x1, const int y1)
-{
- line(x0, y0, x0, y1);
- line(x0, y1, x1, y1);
- line(x1, y1, x1, y0);
- return line(x1, y0, x0, y0);
-}
-
-PlotFile& PlotFile:: circle(const int x, const int y, const int r)
-{
- return cmd('c') << x << y << r;
-}
-
-PlotFile& PlotFile:: cont(const int xi, const int yi)
-{
- return cmd('n') << xi << yi;
-}
-
-PlotFile& PlotFile:: dot(const int xi, const int yi, const int dx,
- int n, const int* pat)
-{
- cmd('d') << xi << yi << dx << n;
- while (n-- > 0) *this << *pat++;
- return *this;
-}
-
-PlotFile& PlotFile:: erase()
-{
- return cmd('e');
-}
-
-PlotFile& PlotFile:: label(const char* s)
-{
- return cmd('t') << s << "\n";
-}
-
-PlotFile& PlotFile:: line(const int x0, const int y0,
- const int x1, const int y1)
-{
- return cmd('l') << x0 << y0 << x1 << y1;
-}
-
-PlotFile& PlotFile:: linemod(const char* s)
-{
- return cmd('f') << s << "\n";
-}
-
-PlotFile& PlotFile:: move(const int xi, const int yi)
-{
- return cmd('m') << xi << yi;
-}
-
-PlotFile& PlotFile:: point(const int xi, const int yi)
-{
- return cmd('p') << xi << yi;
-}
-
-PlotFile& PlotFile:: space(const int x0, const int y0,
- const int x1, const int y1)
-{
- return cmd('s') << x0 << y0 << x1 << y1;
-}
diff --git a/contrib/libg++/libio/PlotFile.h b/contrib/libg++/libio/PlotFile.h
deleted file mode 100644
index 82b08bc4681c..000000000000
--- a/contrib/libg++/libio/PlotFile.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-/*
- a very simple implementation of a class to output unix "plot"
- format plotter files. See corresponding unix man pages for
- more details.
-
- written by Doug Lea (dl@rocky.oswego.edu)
- converted to use iostream library by Per Bothner (bothner@cygnus.com)
-*/
-
-#ifndef _PlotFile_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _PlotFile_h
-
-#include <fstream.h>
-
-/*
- Some plot libraries have the `box' command to draw boxes. Some don't.
- `box' is included here via moves & lines to allow both possiblilties.
-*/
-
-extern "C++" {
-class PlotFile : public ofstream
-{
-protected:
- PlotFile& cmd(char c);
- PlotFile& operator << (const int x);
- PlotFile& operator << (const char *s);
-
-public:
-
- PlotFile() : ofstream() { }
- PlotFile(int fd) : ofstream(fd) { }
- PlotFile(const char *name, int mode=ios::out, int prot=0664)
- : ofstream(name, mode, prot) { }
-
-// PlotFile& remove() { ofstream::remove(); return *this; }
-
-// int filedesc() { return ofstream::filedesc(); }
-// const char* name() { return File::name(); }
-// void setname(const char* newname) { File::setname(newname); }
-// int iocount() { return File::iocount(); }
-
- PlotFile& arc(const int xi, const int yi,
- const int x0, const int y0,
- const int x1, const int y1);
- PlotFile& box(const int x0, const int y0,
- const int x1, const int y1);
- PlotFile& circle(const int x, const int y, const int r);
- PlotFile& cont(const int xi, const int yi);
- PlotFile& dot(const int xi, const int yi, const int dx,
- int n, const int* pat);
- PlotFile& erase();
- PlotFile& label(const char* s);
- PlotFile& line(const int x0, const int y0,
- const int x1, const int y1);
- PlotFile& linemod(const char* s);
- PlotFile& move(const int xi, const int yi);
- PlotFile& point(const int xi, const int yi);
- PlotFile& space(const int x0, const int y0,
- const int x1, const int y1);
-};
-} // extern "C++"
-#endif
diff --git a/contrib/libg++/libio/README b/contrib/libg++/libio/README
deleted file mode 100644
index c2d564965ca4..000000000000
--- a/contrib/libg++/libio/README
+++ /dev/null
@@ -1,30 +0,0 @@
-This is libio, the GNU C/C++ input/output library.
-
-By default, the library is configured to build the C++ iostream
-facility (in $libdir/libiostream.a).
-
-The library can be configured to build the C stdio facility
-that is part of a C run-time library.
-
-This library is distributed with libg++; see ../libg++/README
-for installation instructions, and where to send bug reports
-and questions.
-
-* Copyright restrictions
-
-The files in this directory are generally covered by the GNU Public
-License (which is in the file ../COPYING), but modified with the
-following:
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does not cause
- the resulting executable to be covered by the GNU General Public License.
- This exception does not however invalidate any other reasons why
- the executable file might be covered by the GNU General Public License.
-
-A few source files and subroutines are covered by other (but
-less restrictive) copyright conditions. E.g. some code (such
-as iovfprintf.c) is based on software that was developed by the
-University of California, Berkeley, for the Berkeley Software
-Distribution (BSD-4.4), and bears their copyright; and one
-file (floatconv.c) is derived from ("free") code copyrighted AT&T.
diff --git a/contrib/libg++/libio/SFile.cc b/contrib/libg++/libio/SFile.cc
deleted file mode 100644
index e5daa645695e..000000000000
--- a/contrib/libg++/libio/SFile.cc
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <SFile.h>
-
-SFile::SFile(const char *filename, int size, int mode, int prot)
-: fstream(filename, mode, prot)
-{
- sz = size;
-}
-
-SFile::SFile(int fd, int size)
-: fstream(fd)
-{
- sz = size;
-}
-
-void SFile::open(const char *name, int size, int mode, int prot)
-{
- fstream::open(name, mode, prot);
- sz = size;
-}
-
-SFile& SFile::get(void* x)
-{
- read(x, sz);
- return *this;
-}
-
-SFile& SFile::put(void* x)
-{
- write(x, sz);
- return *this;
-}
-
-SFile& SFile::operator[](long i)
-{
- if (rdbuf()->pubseekoff(i * sz, ios::beg) == EOF)
- set(ios::badbit);
- return *this;
-}
diff --git a/contrib/libg++/libio/SFile.h b/contrib/libg++/libio/SFile.h
deleted file mode 100644
index f07277cee49f..000000000000
--- a/contrib/libg++/libio/SFile.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1988, 1992, 1993 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#ifndef _SFile_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _SFile_h 1
-
-#include <fstream.h>
-
-extern "C++" {
-class SFile: public fstream
-{
- protected:
- int sz; // unit size for structured binary IO
-
-public:
- SFile() : fstream() { }
- SFile(int fd, int size);
- SFile(const char *name, int size, int mode, int prot=0664);
- void open(const char *name, int size, int mode, int prot=0664);
-
- int size() { return sz; }
- int setsize(int s) { int old = sz; sz = s; return old; }
-
- SFile& get(void* x);
- SFile& put(void* x);
- SFile& operator[](long i);
-};
-} // extern "C++"
-
-#endif
diff --git a/contrib/libg++/libio/builtinbuf.cc b/contrib/libg++/libio/builtinbuf.cc
deleted file mode 100644
index 05e65a5c371b..000000000000
--- a/contrib/libg++/libio/builtinbuf.cc
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#ifdef __GNUC__
-#pragma implementation
-#endif
-#define _STREAM_COMPAT
-#include "builtinbuf.h"
-#include "iostreamP.h"
-#if !_IO_UNIFIED_JUMPTABLES
-int builtinbuf::overflow(int ch) { return _IO_OVERFLOW (this, ch); }
-
-int builtinbuf::underflow() { return _IO_UNDERFLOW (this); }
-
-streamsize builtinbuf::xsgetn(char* buf, streamsize n)
-{ return _IO_XSGETN (this, buf, n); }
-
-streamsize builtinbuf::xsputn(const char* buf, streamsize n)
-{ return _IO_XSPUTN (this, buf, n); }
-
-int builtinbuf::doallocate() { return _IO_DOALLOCATE (this); }
-
-builtinbuf::~builtinbuf() { _IO_FINISH (this); }
-
-int builtinbuf::sync() { return _IO_SYNC (this); }
-
-streambuf* builtinbuf::setbuf(char *buf, int n)
-{ return (streambuf*)_IO_SETBUF (this, buf, n); }
-
-streampos builtinbuf::seekoff(streamoff off, _seek_dir dir, int mode)
-{
- return _IO_SEEKOFF (this, off, dir, mode);
-}
-
-streampos builtinbuf::seekpos(streampos pos, int mode)
-{
- return _IO_SEEKPOS (this, pos, mode);
-}
-
-int builtinbuf::pbackfail(int c)
-{ return _IO_PBACKFAIL (this, c); }
-
-streamsize builtinbuf::sys_read(char* buf, streamsize size)
-{ return _IO_SYSREAD (this, buf, size); }
-
-streampos builtinbuf::sys_seek(streamoff off, _seek_dir dir)
-{ return _IO_SYSSEEK (this, off, dir); }
-
-streamsize builtinbuf::sys_write(const char* buf, streamsize size)
-{ return _IO_SYSWRITE (this, buf, size); }
-
-int builtinbuf::sys_stat(void* buf) // Actually, a (struct stat*)
-{ return _IO_SYSSTAT (this, buf); }
-
-int builtinbuf::sys_close()
-{ return _IO_SYSCLOSE (this); }
-#endif
diff --git a/contrib/libg++/libio/builtinbuf.h b/contrib/libg++/libio/builtinbuf.h
deleted file mode 100644
index 0e0c6e85a9ef..000000000000
--- a/contrib/libg++/libio/builtinbuf.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#ifndef _BUILTINBUF_H
-#define _BUILTINBUF_H
-
-#ifdef __GNUC__
-#pragma interface
-#endif
-
-#include <streambuf.h>
-
-#if !_IO_UNIFIED_JUMPTABLES
-// A builtinbuf a a streambuf where all the virtual operations
-// call the _IO_jump_t table.
-
-extern "C++" {
-class builtinbuf : public streambuf {
- friend ios;
- virtual int overflow(int);
- virtual int underflow();
- virtual streamsize xsgetn(char *, streamsize);
- virtual streamsize xsputn(const char *, streamsize);
- virtual streambuf* setbuf(char*, int);
- virtual int doallocate();
- virtual ~builtinbuf();
- virtual int sync();
-
- virtual streampos seekoff(streamoff, _seek_dir, int mode=ios::in|ios::out);
- virtual streampos seekpos(streampos pos, int mode = ios::in|ios::out);
- virtual int pbackfail(int c);
- virtual streamsize sys_read(char* buf, streamsize size);
- virtual streampos sys_seek(streamoff, _seek_dir);
- virtual streamsize sys_write(const char*, streamsize);
- virtual int sys_stat(void*); // Actually, a (struct stat*)
- virtual int sys_close();
-#if 0
- virtual int get_column();
- virtual int set_column(int);
-#endif
- private:
- builtinbuf() { }
-};
-} // extern "C++"
-#endif
-
-#endif /* _BUILTINBUF_H */
diff --git a/contrib/libg++/libio/cleanup.c b/contrib/libg++/libio/cleanup.c
deleted file mode 100644
index a0c5052d3958..000000000000
--- a/contrib/libg++/libio/cleanup.c
+++ /dev/null
@@ -1,17 +0,0 @@
-#include "libioP.h"
-#if _G_HAVE_ATEXIT
-#include <stdlib.h>
-
-typedef void (*voidfunc) __P((void));
-
-static void
-DEFUN_VOID(_IO_register_cleanup)
-{
- atexit ((voidfunc)_IO_cleanup);
- _IO_cleanup_registration_needed = 0;
-}
-
-void (*_IO_cleanup_registration_needed)() = _IO_register_cleanup;
-#else
-void (*_IO_cleanup_registration_needed)() = NULL;
-#endif /* _G_HAVE_ATEXIT */
diff --git a/contrib/libg++/libio/depend b/contrib/libg++/libio/depend
deleted file mode 100644
index eb4a6fc82b7d..000000000000
--- a/contrib/libg++/libio/depend
+++ /dev/null
@@ -1,327 +0,0 @@
-# AUTOMATICALLY GENERATED BY 'make depend' - DO NOT EDIT
-
-PlotFile.o: PlotFile.cc \
- $(srcdir)/PlotFile.h $(srcdir)/fstream.h \
- $(srcdir)/iostream.h $(srcdir)/streambuf.h \
- $(srcdir)/libio.h _G_config.h
-SFile.o: SFile.cc \
- $(srcdir)/SFile.h $(srcdir)/fstream.h \
- $(srcdir)/iostream.h $(srcdir)/streambuf.h \
- $(srcdir)/libio.h _G_config.h
-builtinbuf.o: builtinbuf.cc \
- $(srcdir)/builtinbuf.h \
- $(srcdir)/streambuf.h $(srcdir)/libio.h \
- _G_config.h $(srcdir)/iostreamP.h \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h
-editbuf.o: editbuf.cc \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h _G_config.h \
- $(srcdir)/editbuf.h \
- $(srcdir)/fstream.h \
- $(srcdir)/iostream.h $(srcdir)/streambuf.h
-filebuf.o: filebuf.cc \
- $(srcdir)/iostreamP.h $(srcdir)/streambuf.h \
- $(srcdir)/libio.h _G_config.h \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/builtinbuf.h
-fstream.o: fstream.cc \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h _G_config.h \
- $(srcdir)/fstream.h $(srcdir)/iostream.h \
- $(srcdir)/streambuf.h
-indstream.o: indstream.cc \
- $(srcdir)/indstream.h $(srcdir)/iostream.h \
- $(srcdir)/streambuf.h $(srcdir)/libio.h \
- _G_config.h
-ioassign.o: ioassign.cc \
- $(srcdir)/iostream.h $(srcdir)/streambuf.h \
- $(srcdir)/libio.h _G_config.h \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h
-ioextend.o: ioextend.cc \
- $(srcdir)/iostream.h $(srcdir)/streambuf.h \
- $(srcdir)/libio.h _G_config.h
-iomanip.o: iomanip.cc \
- $(srcdir)/iomanip.h $(srcdir)/iostream.h \
- $(srcdir)/streambuf.h $(srcdir)/libio.h \
- _G_config.h
-iostream.o: iostream.cc \
- $(srcdir)/iostream.h $(srcdir)/streambuf.h \
- $(srcdir)/libio.h _G_config.h \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/floatio.h
-isgetline.o: isgetline.cc \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h _G_config.h \
- $(srcdir)/iostream.h $(srcdir)/streambuf.h
-isgetsb.o: isgetsb.cc \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h _G_config.h \
- $(srcdir)/iostream.h $(srcdir)/streambuf.h
-isscan.o: isscan.cc \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h _G_config.h \
- $(srcdir)/iostream.h $(srcdir)/streambuf.h
-osform.o: osform.cc \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h _G_config.h \
- $(srcdir)/iostream.h $(srcdir)/streambuf.h
-parsestream.o: parsestream.cc \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h _G_config.h \
- $(srcdir)/parsestream.h \
- $(srcdir)/streambuf.h
-pfstream.o: pfstream.cc \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h _G_config.h \
- $(srcdir)/pfstream.h $(srcdir)/fstream.h \
- $(srcdir)/iostream.h $(srcdir)/streambuf.h \
- $(srcdir)/procbuf.h
-procbuf.o: procbuf.cc \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h _G_config.h \
- $(srcdir)/procbuf.h $(srcdir)/streambuf.h
-sbform.o: sbform.cc \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h _G_config.h \
- $(srcdir)/streambuf.h
-sbgetline.o: sbgetline.cc \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h _G_config.h \
- $(srcdir)/streambuf.h
-sbscan.o: sbscan.cc \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h _G_config.h \
- $(srcdir)/streambuf.h
-stdiostream.o: stdiostream.cc \
- $(srcdir)/stdiostream.h \
- $(srcdir)/iostream.h $(srcdir)/streambuf.h \
- $(srcdir)/libio.h _G_config.h \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h
-stdstrbufs.o: stdstrbufs.cc \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h _G_config.h \
- $(srcdir)/stdiostream.h \
- $(srcdir)/iostream.h $(srcdir)/streambuf.h
-stdstreams.o: stdstreams.cc \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h _G_config.h \
- $(srcdir)/streambuf.h \
- $(srcdir)/iostream.h
-stream.o: stream.cc \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h _G_config.h \
- $(srcdir)/stream.h $(srcdir)/iostream.h \
- $(srcdir)/streambuf.h $(srcdir)/strstream.h \
- $(srcdir)/strfile.h
-streambuf.o: streambuf.cc \
- $(srcdir)/iostreamP.h $(srcdir)/streambuf.h \
- $(srcdir)/libio.h _G_config.h \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h
-strstream.o: strstream.cc \
- $(srcdir)/iostreamP.h $(srcdir)/streambuf.h \
- $(srcdir)/libio.h _G_config.h \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/strstream.h $(srcdir)/iostream.h \
- $(srcdir)/strfile.h
-cleanup.o: cleanup.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h _G_config.h
-filedoalloc.o: filedoalloc.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h _G_config.h
-fileops.o: fileops.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h _G_config.h
-floatconv.o: floatconv.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h _G_config.h
-genops.o: genops.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h _G_config.h
-iofclose.o: iofclose.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h _G_config.h
-iofdopen.o: iofdopen.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h _G_config.h
-iofflush.o: iofflush.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h _G_config.h
-iofgetpos.o: iofgetpos.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h _G_config.h
-iofgets.o: iofgets.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h _G_config.h
-iofopen.o: iofopen.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h _G_config.h
-iofprintf.o: iofprintf.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h _G_config.h
-iofputs.o: iofputs.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h _G_config.h
-iofread.o: iofread.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h _G_config.h
-iofscanf.o: iofscanf.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h _G_config.h
-iofsetpos.o: iofsetpos.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h _G_config.h
-ioftell.o: ioftell.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h _G_config.h
-iofwrite.o: iofwrite.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h _G_config.h
-iogetdelim.o: iogetdelim.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h _G_config.h
-iogetline.o: iogetline.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h _G_config.h
-iogets.o: iogets.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h _G_config.h
-ioignore.o: ioignore.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h _G_config.h
-iopadn.o: iopadn.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h _G_config.h
-ioperror.o: ioperror.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h _G_config.h
-iopopen.o: iopopen.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h _G_config.h
-ioprims.o: ioprims.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h _G_config.h
-ioprintf.o: ioprintf.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h _G_config.h
-ioputs.o: ioputs.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h _G_config.h
-ioscanf.o: ioscanf.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h _G_config.h
-ioseekoff.o: ioseekoff.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h _G_config.h
-ioseekpos.o: ioseekpos.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h _G_config.h
-iosetbuffer.o: iosetbuffer.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h _G_config.h
-iosetvbuf.o: iosetvbuf.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h _G_config.h
-iosprintf.o: iosprintf.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h _G_config.h
-iosscanf.o: iosscanf.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h _G_config.h
-iostrerror.o: iostrerror.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h _G_config.h
-ioungetc.o: ioungetc.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h _G_config.h
-iovfprintf.o: iovfprintf.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h _G_config.h \
- $(srcdir)/floatio.h
-iovfscanf.o: iovfscanf.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h _G_config.h \
- $(srcdir)/floatio.h
-iovsprintf.o: iovsprintf.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h _G_config.h \
- $(srcdir)/strfile.h
-iovsscanf.o: iovsscanf.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h _G_config.h \
- $(srcdir)/strfile.h
-outfloat.o: outfloat.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h _G_config.h
-stdfiles.o: stdfiles.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h _G_config.h
-strops.o: strops.c \
- $(srcdir)/strfile.h $(srcdir)/libio.h \
- _G_config.h $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h
diff --git a/contrib/libg++/libio/editbuf.cc b/contrib/libg++/libio/editbuf.cc
deleted file mode 100644
index 22304820f8fd..000000000000
--- a/contrib/libg++/libio/editbuf.cc
+++ /dev/null
@@ -1,717 +0,0 @@
-/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License.
-
-Written by Per Bothner (bothner@cygnus.com). */
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include "libioP.h"
-#include "editbuf.h"
-#include <stddef.h>
-#include <stdlib.h>
-
-/* NOTE: Some of the code here is taken from GNU emacs */
-/* Hence this file falls under the GNU License! */
-
-// Invariants for edit_streambuf:
-// An edit_streambuf is associated with a specific edit_string,
-// which again is a sub-string of a specific edit_buffer.
-// An edit_streambuf is always in either get mode or put mode, never both.
-// In get mode, gptr() is the current position,
-// and pbase(), pptr(), and epptr() are all NULL.
-// In put mode, pptr() is the current position,
-// and eback(), gptr(), and egptr() are all NULL.
-// Any edit_streambuf that is actively doing insertion (as opposed to
-// replacing) // must have its pptr() pointing to the start of the gap.
-// Only one edit_streambuf can be actively inserting into a specific
-// edit_buffer; the edit_buffer's _writer field points to that edit_streambuf.
-// That edit_streambuf "owns" the gap, and the actual start of the
-// gap is the pptr() of the edit_streambuf; the edit_buffer::_gap_start pointer
-// will only be updated on an edit_streambuf::overflow().
-
-int edit_streambuf::truncate()
-{
- str->buffer->delete_range(str->buffer->tell((buf_char*)pptr()),
- str->buffer->tell(str->end));
- return 0;
-}
-
-#ifdef OLD_STDIO
-inline void disconnect_gap_from_file(edit_buffer* buffer, FILE* fp)
-{
- if (buffer->gap_start_ptr != &fp->__bufp)
- return;
- buffer->gap_start_normal = fp->__bufp;
- buffer->gap_start_ptr = &buffer->gap_start_normal;
-}
-#endif
-
-void edit_streambuf::flush_to_buffer(edit_buffer* buffer)
-{
- if (pptr() > buffer->_gap_start && pptr() < buffer->gap_end())
- buffer->_gap_start = pptr();
-}
-
-void edit_streambuf::disconnect_gap_from_file(edit_buffer* buffer)
-{
- if (buffer->_writer != this) return;
- flush_to_buffer(buffer);
- setp(pptr(),pptr());
- buffer->_writer = NULL;
-}
-
-buf_index edit_buffer::tell(buf_char *ptr)
-{
- if (ptr <= gap_start())
- return ptr - data;
- else
- return ptr - gap_end() + size1();
-}
-
-#if 0
-buf_index buf_cookie::tell()
-{
- return str->buffer->tell(file->__bufp);
-}
-#endif
-
-buf_index edit_buffer::tell(edit_mark*mark)
-{
- return tell(data + mark->index_in_buffer(this));
-}
-
-// adjust the position of the gap
-
-void edit_buffer::move_gap(buf_offset pos)
-{
- if (pos < size1())
- gap_left (pos);
- else if (pos > size1())
- gap_right (pos);
-}
-
-void edit_buffer::gap_left (int pos)
-{
- register buf_char *to, *from;
- register int i;
- int new_s1;
-
- i = size1();
- from = gap_start();
- to = from + gap_size();
- new_s1 = size1();
-
- /* Now copy the characters. To move the gap down,
- copy characters up. */
-
- for (;;)
- {
- /* I gets number of characters left to copy. */
- i = new_s1 - pos;
- if (i == 0)
- break;
-#if 0
- /* If a quit is requested, stop copying now.
- Change POS to be where we have actually moved the gap to. */
- if (QUITP)
- {
- pos = new_s1;
- break;
- }
-#endif
- /* Move at most 32000 chars before checking again for a quit. */
- if (i > 32000)
- i = 32000;
- new_s1 -= i;
- while (--i >= 0)
- *--to = *--from;
- }
-
- /* Adjust markers, and buffer data structure, to put the gap at POS.
- POS is where the loop above stopped, which may be what was specified
- or may be where a quit was detected. */
- adjust_markers (pos << 1, size1() << 1, gap_size(), data);
-#ifndef OLD_STDIO
- _gap_start = data + pos;
-#else
- if (gap_start_ptr == &gap_start_normal)
- gap_start_normal = data + pos;
-#endif
- __gap_end_pos = to - data;
-/* QUIT;*/
-}
-
-void edit_buffer::gap_right (int pos)
-{
- register buf_char *to, *from;
- register int i;
- int new_s1;
-
- i = size1();
- to = gap_start();
- from = i + gap_end();
- new_s1 = i;
-
- /* Now copy the characters. To move the gap up,
- copy characters down. */
-
- while (1)
- {
- /* I gets number of characters left to copy. */
- i = pos - new_s1;
- if (i == 0)
- break;
-#if 0
- /* If a quit is requested, stop copying now.
- Change POS to be where we have actually moved the gap to. */
- if (QUITP)
- {
- pos = new_s1;
- break;
- }
-#endif
- /* Move at most 32000 chars before checking again for a quit. */
- if (i > 32000)
- i = 32000;
- new_s1 += i;
- while (--i >= 0)
- *to++ = *from++;
- }
-
- adjust_markers ((size1() + gap_size()) << 1, (pos + gap_size()) << 1,
- - gap_size(), data);
-#ifndef OLD_STDIO
- _gap_start = data+pos;
-#else
- if (gap_start_ptr == &gap_start_normal)
- gap_start_normal = data + pos;
-#endif
- __gap_end_pos = from - data;
-/* QUIT;*/
-}
-
-/* make sure that the gap in the current buffer is at least k
- characters wide */
-
-void edit_buffer::make_gap(buf_offset k)
-{
- register buf_char *p1, *p2, *lim;
- buf_char *old_data = data;
- int s1 = size1();
-
- if (gap_size() >= k)
- return;
-
- /* Get more than just enough */
- if (buf_size > 1000) k += 2000;
- else k += /*200;*/ 20; // for testing!
-
- p1 = (buf_char *) realloc (data, s1 + size2() + k);
- if (p1 == 0)
- abort(); /*memory_full ();*/
-
- k -= gap_size(); /* Amount of increase. */
-
- /* Record new location of text */
- data = p1;
-
- /* Transfer the new free space from the end to the gap
- by shifting the second segment upward */
- p2 = data + buf_size;
- p1 = p2 + k;
- lim = p2 - size2();
- while (lim < p2)
- *--p1 = *--p2;
-
- /* Finish updating text location data */
- __gap_end_pos += k;
-
-#ifndef OLD_STDIO
- _gap_start = data + s1;
-#else
- if (gap_start_ptr == &gap_start_normal)
- gap_start_normal = data + s1;
-#endif
-
- /* adjust markers */
- adjust_markers (s1 << 1, (buf_size << 1) + 1, k, old_data);
- buf_size += k;
-}
-
-/* Add `amount' to the position of every marker in the current buffer
- whose current position is between `from' (exclusive) and `to' (inclusive).
- Also, any markers past the outside of that interval, in the direction
- of adjustment, are first moved back to the near end of the interval
- and then adjusted by `amount'. */
-
-void edit_buffer::adjust_markers(register mark_pointer low,
- register mark_pointer high,
- int amount, buf_char *old_data)
-{
- register struct edit_mark *m;
- register mark_pointer mpos;
- /* convert to mark_pointer */
- amount <<= 1;
-
- if (_writer)
- _writer->disconnect_gap_from_file(this);
-
- for (m = mark_list(); m != NULL; m = m->chain)
- {
- mpos = m->_pos;
- if (amount > 0)
- {
- if (mpos > high && mpos < high + amount)
- mpos = high + amount;
- }
- else
- {
- if (mpos > low + amount && mpos <= low)
- mpos = low + amount;
- }
- if (mpos > low && mpos <= high)
- mpos += amount;
- m->_pos = mpos;
- }
-
- // Now adjust files
- edit_streambuf *file;
-
- for (file = files; file != NULL; file = file->next) {
- mpos = file->current() - old_data;
- if (amount > 0)
- {
- if (mpos > high && mpos < high + amount)
- mpos = high + amount;
- }
- else
- {
- if (mpos > low + amount && mpos <= low)
- mpos = low + amount;
- }
- if (mpos > low && mpos <= high)
- mpos += amount;
- char* new_pos = data + mpos;
- file->set_current(new_pos, file->is_reading());
- }
-}
-
-#if 0
-stdio_
- __off == index at start of buffer (need only be valid after seek ? )
- __buf ==
-
-if read/read_delete/overwrite mode:
- __endp <= min(*gap_start_ptr, edit_string->end->ptr(buffer))
-
-if inserting:
- must have *gap_start_ptr == __bufp && *gap_start_ptr+gap == __endp
- file->edit_string->end->ptr(buffer) == *gap_start_ptr+end
-if write_mode:
- if before gap
-#endif
-
-int edit_streambuf::underflow()
-{
- if (!(_mode & ios::in))
- return EOF;
- struct edit_buffer *buffer = str->buffer;
- if (!is_reading()) { // Must switch from put to get mode.
- disconnect_gap_from_file(buffer);
- set_current(pptr(), 1);
- }
- buf_char *str_end = str->end->ptr(buffer);
- retry:
- if (gptr() < egptr()) {
- return *gptr();
- }
- if ((buf_char*)gptr() == str_end)
- return EOF;
- if (str_end <= buffer->gap_start()) {
- setg(eback(), gptr(), str_end);
- goto retry;
- }
- if (gptr() < buffer->gap_start()) {
- setg(eback(), gptr(), buffer->gap_start());
- goto retry;
- }
- if (gptr() == buffer->gap_start()) {
- disconnect_gap_from_file(buffer);
-// fp->__offset += fp->__bufp - fp->__buffer;
- setg(buffer->gap_end(), buffer->gap_end(), str_end);
- }
- else
- setg(eback(), gptr(), str_end);
- goto retry;
-}
-
-int edit_streambuf::overflow(int ch)
-{
- if (_mode == ios::in)
- return EOF;
- struct edit_buffer *buffer = str->buffer;
- flush_to_buffer(buffer);
- if (ch == EOF)
- return 0;
- if (is_reading()) { // Must switch from get to put mode.
- set_current(gptr(), 0);
- }
- buf_char *str_end = str->end->ptr(buffer);
- retry:
- if (pptr() < epptr()) {
- *pptr() = ch;
- pbump(1);
- return (unsigned char)ch;
- }
- if ((buf_char*)pptr() == str_end || inserting()) {
- /* insert instead */
- if (buffer->_writer)
- buffer->_writer->flush_to_buffer(); // Redundant?
- buffer->_writer = NULL;
- if (pptr() >= buffer->gap_end())
- buffer->move_gap(pptr() - buffer->gap_size());
- else
- buffer->move_gap(pptr());
- buffer->make_gap(1);
- setp(buffer->gap_start(), buffer->gap_end());
- buffer->_writer = this;
- *pptr() = ch;
- pbump(1);
- return (unsigned char)ch;
- }
- if (str_end <= buffer->gap_start()) {
- // Entire string is left of gap.
- setp(pptr(), str_end);
- }
- else if (pptr() < buffer->gap_start()) {
- // Current pos is left of gap.
- setp(pptr(), buffer->gap_start());
- goto retry;
- }
- else if (pptr() == buffer->gap_start()) {
- // Current pos is at start of gap; move to end of gap.
-// disconnect_gap_from_file(buffer);
- setp(buffer->gap_end(), str_end);
-// __offset += __bufp - __buffer;
- }
- else {
- // Otherwise, current pos is right of gap.
- setp(pptr(), str_end);
- }
- goto retry;
-}
-
-void edit_streambuf::set_current(char *new_pos, int reading)
-{
- if (reading) {
- setg(new_pos, new_pos, new_pos);
- setp(NULL, NULL);
- }
- else {
- setg(NULL, NULL, NULL);
- setp(new_pos, new_pos);
- }
-}
-
-// Called by fseek(fp, pos, whence) if fp is bound to a edit_buffer.
-
-streampos edit_streambuf::seekoff(streamoff offset, _seek_dir dir,
- int /* =ios::in|ios::out*/)
-{
- struct edit_buffer *buffer = str->buffer;
- disconnect_gap_from_file(buffer);
- buf_index cur_pos = buffer->tell((buf_char*)current());;
- buf_index start_pos = buffer->tell(str->start);
- buf_index end_pos = buffer->tell(str->end);
- switch (dir) {
- case ios::beg:
- offset += start_pos;
- break;
- case ios::cur:
- offset += cur_pos;
- break;
- case ios::end:
- offset += end_pos;
- break;
- }
- if (offset < start_pos || offset > end_pos)
- return EOF;
- buf_char *new_pos = buffer->data + offset;
- buf_char* gap_start = buffer->gap_start();
- if (new_pos > gap_start) {
- buf_char* gap_end = buffer->gap_end();
- new_pos += gap_end - gap_start;
- if (new_pos >= buffer->data + buffer->buf_size) abort(); // Paranoia.
- }
- set_current(new_pos, is_reading());
- return EOF;
-}
-
-#if 0
-int buf_seek(void *arg_cookie, fpos_t * pos, int whence)
-{
- struct buf_cookie *cookie = arg_cookie;
- FILE *file = cookie->file;
- struct edit_buffer *buffer = cookie->str->buffer;
- buf_char *str_start = cookie->str->start->ptr(buffer);
- disconnect_gap_from_file(buffer, cookie->file);
- fpos_t cur_pos, new_pos;
- if (file->__bufp <= *buffer->gap_start_ptr
- || str_start >= buffer->__gap_end)
- cur_pos = str_start - file->__bufp;
- else
- cur_pos =
- (*buffer->gap_start_ptr - str_start) + (file->__bufp - __gap_end);
- end_pos = ...;
- switch (whence) {
- case SEEK_SET:
- new_pos = *pos;
- break;
- case SEEK_CUR:
- new_pos = cur_pos + *pos;
- break;
- case SEEK_END:
- new_pos = end_pos + *pos;
- break;
- }
- if (new_pos > end_pos) {
- seek to end_pos;
- insert_nulls(new_pos - end_pos);
- return;
- }
- if (str_start + new_pos <= *gap_start_ptr &* *gap_start_ptr < end) {
- __buffer = str_start;
- __off = 0;
- __bufp = str_start + new_pos;
- file->__get_limit =
- *buffer->gap_start_ptr; /* what if gap_start_ptr == &bufp ??? */
- } else if () {
-
- }
- *pos = new_pos;
-}
-#endif
-
-/* Delete characters from `from' up to (but not incl) `to' */
-
-void edit_buffer::delete_range (buf_index from, buf_index to)
-{
- register int numdel;
-
- if ((numdel = to - from) <= 0)
- return;
-
- /* Make sure the gap is somewhere in or next to what we are deleting */
- if (from > size1())
- gap_right (from);
- if (to < size1())
- gap_left (to);
-
- /* Relocate all markers pointing into the new, larger gap
- to point at the end of the text before the gap. */
- adjust_markers ((to + gap_size()) << 1, (to + gap_size()) << 1,
- - numdel - gap_size(), data);
-
- __gap_end_pos = to + gap_size();
- _gap_start = data + from;
-}
-
-void edit_buffer::delete_range(struct edit_mark *start, struct edit_mark *end)
-{
- delete_range(tell(start), tell(end));
-}
-
-void buf_delete_chars(struct edit_buffer *, struct edit_mark *, size_t)
-{
- abort();
-}
-
-edit_streambuf::edit_streambuf(edit_string* bstr, int mode)
-{
- _mode = mode;
- str = bstr;
- edit_buffer* buffer = bstr->buffer;
- next = buffer->files;
- buffer->files = this;
- char* buf_ptr = bstr->start->ptr(buffer);
- _inserting = 0;
-// setb(buf_ptr, buf_ptr, 0);
- set_current(buf_ptr, !(mode & ios::out+ios::trunc+ios::app));
- if (_mode & ios::trunc)
- truncate();
- if (_mode & ios::ate)
- seekoff(0, ios::end);
-}
-
-// Called by fclose(fp) if fp is bound to a edit_buffer.
-
-#if 0
-static int buf_close(void *arg)
-{
- register struct buf_cookie *cookie = arg;
- struct edit_buffer *buffer = cookie->str->buffer;
- struct buf_cookie **ptr;
- for (ptr = &buffer->files; *ptr != cookie; ptr = &(*ptr)->next) ;
- *ptr = cookie->next;
- disconnect_gap_from_file(buffer, cookie->file);
- free (cookie);
- return 0;
-}
-#endif
-
-edit_streambuf::~edit_streambuf()
-{
- if (_mode == ios::out)
- truncate();
- // Unlink this from list of files associated with bstr->buffer.
- edit_streambuf **ptr = &str->buffer->files;
- for (; *ptr != this; ptr = &(*ptr)->next) { }
- *ptr = next;
-
- disconnect_gap_from_file(str->buffer);
-}
-
-edit_buffer::edit_buffer()
-{
- buf_size = /*200;*/ 15; /* for testing! */
- data = (buf_char*)malloc(buf_size);
- files = NULL;
-#ifndef OLD_STDIO
- _gap_start = data;
- _writer = NULL;
-#else
- gap_start_normal = data;
- gap_start_ptr = &gap_start_normal;
-#endif
- __gap_end_pos = buf_size;
- start_mark.chain = &end_mark;
- start_mark._pos = 0;
- end_mark.chain = NULL;
- end_mark._pos = 2 * buf_size + 1;
-}
-
-// Allocate a new mark, which is adjusted by 'delta' bytes from 'this'.
-// Restrict new mark to lie within 'str'.
-
-edit_mark::edit_mark(struct edit_string *str, long delta)
-{
- struct edit_buffer *buf = str->buffer;
- chain = buf->start_mark.chain;
- buf->start_mark.chain = this;
- mark_pointer size1 = buf->size1() << 1;
- int gap_size = buf->gap_size() << 1;
- delta <<= 1;
-
- // check if new and old marks are opposite sides of gap
- if (_pos <= size1 && _pos + delta > size1)
- delta += gap_size;
- else if (_pos >= size1 + gap_size && _pos + delta < size1 + gap_size)
- delta -= gap_size;
-
- _pos = _pos + delta;
- if (_pos < str->start->_pos & ~1)
- _pos = (str->start->_pos & ~ 1) + (_pos & 1);
- else if (_pos >= str->end->_pos)
- _pos = (str->end->_pos & ~ 1) + (_pos & 1);
-}
-
-// A (slow) way to find the buffer a mark belongs to.
-
-edit_buffer * edit_mark::buffer()
-{
- struct edit_mark *mark;
- for (mark = this; mark->chain != NULL; mark = mark->chain) ;
- // Assume that the last mark on the chain is the end_mark.
- return (edit_buffer *)((char*)mark - offsetof(edit_buffer, end_mark));
-}
-
-edit_mark::~edit_mark()
-{
- // Must unlink mark from chain of owning buffer
- struct edit_buffer *buf = buffer();
- if (this == &buf->start_mark || this == &buf->end_mark) abort();
- edit_mark **ptr;
- for (ptr = &buf->start_mark.chain; *ptr != this; ptr = &(*ptr)->chain) ;
- *ptr = this->chain;
-}
-
-int edit_string::length() const
-{
- ptrdiff_t delta = end->ptr(buffer) - start->ptr(buffer);
- if (end->ptr(buffer) <= buffer->gap_start() ||
- start->ptr(buffer) >= buffer->gap_end())
- return delta;
- return delta - buffer->gap_size();
-}
-
-buf_char * edit_string::copy_bytes(int *lenp) const
-{
- char *new_str;
- int len1, len2;
- buf_char *start1, *start2;
- start1 = start->ptr(buffer);
- if (end->ptr(buffer) <= buffer->gap_start()
- || start->ptr(buffer) >= buffer->gap_end()) {
- len1 = end->ptr(buffer) - start1;
- len2 = 0;
- start2 = NULL; // To avoid a warning from g++.
- }
- else {
- len1 = buffer->gap_start() - start1;
- start2 = buffer->gap_end();
- len2 = end->ptr(buffer) - start2;
- }
- new_str = (char*)malloc(len1 + len2 + 1);
- memcpy(new_str, start1, len1);
- if (len2 > 0) memcpy(new_str + len1, start2, len2);
- new_str[len1+len2] = '\0';
- *lenp = len1+len2;
- return new_str;
-}
-
-// Replace the buf_chars in 'this' with ones from 'src'.
-// Equivalent to deleting this, then inserting src, except tries
-// to leave marks in place: Marks whose offset from the start
-// of 'this' is less than 'src->length()' will still have the
-// same offset in 'this' when done.
-
-void edit_string::assign(struct edit_string *src)
-{
- edit_streambuf dst_file(this, ios::out);
- if (buffer == src->buffer /*&& ???*/) { /* overly conservative */
- int src_len;
- buf_char *new_str;
- new_str = src->copy_bytes(&src_len);
- dst_file.sputn(new_str, src_len);
- free (new_str);
- } else {
- edit_streambuf src_file(src, ios::in);
- for ( ; ; ) {
- int ch = src_file.sbumpc();
- if (ch == EOF) break;
- dst_file.sputc(ch);
- }
- }
-}
diff --git a/contrib/libg++/libio/editbuf.h b/contrib/libg++/libio/editbuf.h
deleted file mode 100644
index d15758f257ea..000000000000
--- a/contrib/libg++/libio/editbuf.h
+++ /dev/null
@@ -1,185 +0,0 @@
-/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License.
-
-Written by Per Bothner (bothner@cygnus.com). */
-
-#ifndef _EDITBUF_H
-#define _EDITBUF_H
-#ifdef __GNUG__
-#pragma interface
-#endif
-#include <stdio.h>
-#include <fstream.h>
-
-extern "C++" {
-typedef unsigned long mark_pointer;
-// At some point, it might be nice to parameterize this code
-// in terms of buf_char.
-typedef /*unsigned*/ char buf_char;
-
-// Logical pos from start of buffer (does not count gap).
-typedef long buf_index;
-
-// Pos from start of buffer, possibly including gap_size.
-typedef long buf_offset;
-
-#if 0
-struct buf_cookie {
- FILE *file;
- struct edit_string *str;
- struct buf_cookie *next;
- buf_index tell();
-};
-#endif
-
-struct edit_buffer;
-struct edit_mark;
-
-// A edit_string is defined as the region between the 'start' and 'end' marks.
-// Normally (always?) 'start->insert_before()' should be false,
-// and 'end->insert_before()' should be true.
-
-struct edit_string {
- struct edit_buffer *buffer; // buffer that 'start' and 'end' belong to
- struct edit_mark *start, *end;
- int length() const; // count of buf_chars currently in string
- edit_string(struct edit_buffer *b,
- struct edit_mark *ms, struct edit_mark *me)
- { buffer = b; start = ms; end = me; }
-/* Make a fresh, contiguous copy of the data in STR.
- Assign length of STR to *LENP.
- (Output has extra NUL at out[*LENP].) */
- buf_char *copy_bytes(int *lenp) const;
-// FILE *open_file(char *mode);
- void assign(struct edit_string *src); // copy bytes from src to this
-};
-
-struct edit_streambuf : public streambuf {
- friend edit_buffer;
- edit_string *str;
- edit_streambuf* next; // Chain of edit_streambuf's for a edit_buffer.
- short _mode;
- edit_streambuf(edit_string* bstr, int mode);
- ~edit_streambuf();
- virtual int underflow();
- virtual int overflow(int c = EOF);
- virtual streampos seekoff(streamoff, _seek_dir, int mode=ios::in|ios::out);
- void flush_to_buffer();
- void flush_to_buffer(edit_buffer* buffer);
- int _inserting;
- int inserting() { return _inserting; }
- void inserting(int i) { _inserting = i; }
-// int delete_chars(int count, char* cut_buf); Not implemented.
- int truncate();
- int is_reading() { return gptr() != NULL; }
- buf_char* current() { return is_reading() ? gptr() : pptr(); }
- void set_current(char *p, int is_reading);
- protected:
- void disconnect_gap_from_file(edit_buffer* buffer);
-};
-
-// A 'edit_mark' indicates a position in a buffer.
-// It is "attached" the text (rather than the offset).
-// There are two kinds of mark, which have different behavior
-// when text is inserted at the mark:
-// If 'insert_before()' is true the mark will be adjusted to be
-// *after* the new text.
-
-struct edit_mark {
- struct edit_mark *chain;
- mark_pointer _pos;
- inline int insert_before() { return _pos & 1; }
- inline unsigned long index_in_buffer(struct edit_buffer *)
- { return _pos >> 1; }
- inline buf_char *ptr(struct edit_buffer *buf);
- buf_index tell();
- edit_mark() { }
- edit_mark(struct edit_string *str, long delta);
- edit_buffer *buffer();
- ~edit_mark();
-};
-
-// A 'edit_buffer' consists of a sequence of buf_chars (the data),
-// a list of edit_marks pointing into the data, and a list of FILEs
-// also pointing into the data.
-// A 'edit_buffer' coerced to a edit_string is the string of
-// all the buf_chars in the buffer.
-
-// This implementation uses a conventional buffer gap (as in Emacs).
-// The gap start is defined by de-referencing a (buf_char**).
-// This is because sometimes a FILE is inserting into the buffer,
-// so rather than having each putc adjust the gap, we use indirection
-// to have the gap be defined as the write pointer of the FILE.
-// (This assumes that putc adjusts a pointer (as in GNU's libc), not an index.)
-
-struct edit_buffer {
- buf_char *data; /* == emacs buffer_text.p1+1 */
- buf_char *_gap_start;
- edit_streambuf* _writer; // If non-NULL, currently writing stream
- inline buf_char *gap_start()
- { return _writer ? _writer->pptr() : _gap_start; }
- buf_offset __gap_end_pos; // size of part 1 + size of gap
- /* int gap; implicit: buf_size - size1 - size2 */
- int buf_size;
- struct edit_streambuf *files;
- struct edit_mark start_mark;
- struct edit_mark end_mark;
- edit_buffer();
- inline buf_offset gap_end_pos() { return __gap_end_pos; }
- inline struct edit_mark *start_marker() { return &start_mark; }
- inline struct edit_mark *end_marker() { return &end_mark; }
-/* these should be protected, ultimately */
- buf_index tell(edit_mark*);
- buf_index tell(buf_char*);
- inline buf_char *gap_end() { return data + gap_end_pos(); }
- inline int gap_size() { return gap_end() - gap_start(); }
- inline int size1() { return gap_start() - data; }
- inline int size2() { return buf_size - gap_end_pos(); }
- inline struct edit_mark * mark_list() { return &start_mark; }
- void make_gap (buf_offset);
- void move_gap (buf_offset pos);
- void move_gap (buf_char *pos) { move_gap(pos - data); }
- void gap_left (int pos);
- void gap_right (int pos);
- void adjust_markers(mark_pointer low, mark_pointer high,
- int amount, buf_char *old_data);
- void delete_range(buf_index from, buf_index to);
- void delete_range(struct edit_mark *start, struct edit_mark *end);
-};
-
-extern buf_char * bstr_copy(struct edit_string *str, int *lenp);
-
-// Convert a edit_mark to a (buf_char*)
-
-inline buf_char *edit_mark::ptr(struct edit_buffer *buf)
- { return buf->data + index_in_buffer(buf); }
-
-inline void edit_streambuf::flush_to_buffer()
-{
- edit_buffer* buffer = str->buffer;
- if (buffer->_writer == this) flush_to_buffer(buffer);
-}
-} // extern "C++"
-#endif /* !_EDITBUF_H*/
-
diff --git a/contrib/libg++/libio/filebuf.cc b/contrib/libg++/libio/filebuf.cc
deleted file mode 100644
index 1e2682fbce95..000000000000
--- a/contrib/libg++/libio/filebuf.cc
+++ /dev/null
@@ -1,206 +0,0 @@
-/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1993, 1995 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License.
-
-Written by Per Bothner (bothner@cygnus.com). */
-
-#include "iostreamP.h"
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <errno.h>
-#include "builtinbuf.h"
-
-void filebuf::init()
-{
- _IO_file_init(this);
-}
-
-filebuf::filebuf()
-{
- _IO_file_init(this);
-}
-
-#if !_IO_UNIFIED_JUMPTABLES
-/* This is like "new filebuf()", but it uses the _IO_file_jump jumptable,
- for eficiency. */
-
-filebuf* filebuf::__new()
-{
- filebuf *fb = new filebuf;
- _IO_JUMPS(fb) = &_IO_file_jumps;
- fb->_vtable() = builtinbuf_vtable;
- return fb;
-}
-#endif
-
-filebuf::filebuf(int fd)
-{
- _IO_file_init(this);
- _IO_file_attach(this, fd);
-}
-
-filebuf::filebuf(int fd, char* p, int len)
-{
- _IO_file_init(this);
- _IO_file_attach(this, fd);
- setbuf(p, len);
-}
-
-filebuf::~filebuf()
-{
- if (_IO_file_is_open(this))
- {
- _IO_do_flush (this);
- if (!(xflags() & _IO_DELETE_DONT_CLOSE))
- _IO_SYSCLOSE (this);
- }
-}
-
-filebuf* filebuf::open(const char *filename, ios::openmode mode, int prot)
-{
- if (_IO_file_is_open (this))
- return NULL;
- int posix_mode;
- int read_write;
- if (mode & ios::app)
- mode |= ios::out;
- if ((mode & (ios::in|ios::out)) == (ios::in|ios::out)) {
- posix_mode = O_RDWR;
- read_write = 0;
- }
- else if (mode & ios::out)
- posix_mode = O_WRONLY, read_write = _IO_NO_READS;
- else if (mode & (int)ios::in)
- posix_mode = O_RDONLY, read_write = _IO_NO_WRITES;
- else
- posix_mode = 0, read_write = _IO_NO_READS+_IO_NO_WRITES;
- if (mode & ios::binary)
- {
- mode &= ~ios::binary;
-#ifdef O_BINARY
- /* This is a (mis-)feature of DOS/Windows C libraries. */
- posix_mode |= O_BINARY;
-#endif
- }
- if ((mode & (int)ios::trunc) || mode == (int)ios::out)
- posix_mode |= O_TRUNC;
- if (mode & ios::app)
- posix_mode |= O_APPEND, read_write |= _IO_IS_APPENDING;
- if (!(mode & (int)ios::nocreate) && mode != ios::in)
- posix_mode |= O_CREAT;
- if (mode & (int)ios::noreplace)
- posix_mode |= O_EXCL;
- int fd = ::open(filename, posix_mode, prot);
- if (fd < 0)
- return NULL;
- _fileno = fd;
- xsetflags(read_write, _IO_NO_READS+_IO_NO_WRITES+_IO_IS_APPENDING);
- if (mode & (ios::ate|ios::app)) {
- if (pubseekoff(0, ios::end) == EOF)
- return NULL;
- }
- _IO_link_in(this);
- return this;
-}
-
-filebuf* filebuf::open(const char *filename, const char *mode)
-{
- return (filebuf*)_IO_file_fopen(this, filename, mode);
-}
-
-filebuf* filebuf::attach(int fd)
-{
- return (filebuf*)_IO_file_attach(this, fd);
-}
-
-streambuf* filebuf::setbuf(char* p, int len)
-{
- return (streambuf*)_IO_file_setbuf (this, p, len);
-}
-
-int filebuf::doallocate() { return _IO_file_doallocate(this); }
-
-int filebuf::overflow(int c)
-{
- return _IO_file_overflow(this, c);
-}
-
-int filebuf::underflow()
-{
- return _IO_file_underflow(this);
-}
-
-int filebuf::sync()
-{
- return _IO_file_sync(this);
-}
-
-streampos filebuf::seekoff(streamoff offset, _seek_dir dir, int mode)
-{
- return _IO_file_seekoff (this, offset, dir, mode);
-}
-
-filebuf* filebuf::close()
-{
- return (_IO_file_close_it(this) ? (filebuf*)NULL : this);
-}
-
-streamsize filebuf::sys_read(char* buf, streamsize size)
-{
- return _IO_file_read(this, buf, size);
-}
-
-streampos filebuf::sys_seek(streamoff offset, _seek_dir dir)
-{
- return _IO_file_seek(this, offset, dir);
-}
-
-streamsize filebuf::sys_write(const char *buf, streamsize n)
-{
- return _IO_file_write (this, buf, n);
-}
-
-int filebuf::sys_stat(void* st)
-{
- return _IO_file_stat (this, st);
-}
-
-int filebuf::sys_close()
-{
- return _IO_file_close (this);
-}
-
-streamsize filebuf::xsputn(const char *s, streamsize n)
-{
- return _IO_file_xsputn(this, s, n);
-}
-
-streamsize filebuf::xsgetn(char *s, streamsize n)
-{
- // FIXME: OPTIMIZE THIS (specifically, when unbuffered()).
- return streambuf::xsgetn(s, n);
-}
-
-// Non-ANSI AT&T-ism: Default open protection.
-const int filebuf::openprot = 0644;
diff --git a/contrib/libg++/libio/filedoalloc.c b/contrib/libg++/libio/filedoalloc.c
deleted file mode 100644
index f838bb3458f7..000000000000
--- a/contrib/libg++/libio/filedoalloc.c
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-/*
- * Copyright (c) 1990 The Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms are permitted
- * provided that the above copyright notice and this paragraph are
- * duplicated in all such forms and that any documentation,
- * advertising materials, and other materials related to such
- * distribution and use acknowledge that the software was developed
- * by the University of California, Berkeley. The name of the
- * University may not be used to endorse or promote products derived
- * from this software without specific prior written permission.
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- */
-
-/* Modified for GNU iostream by Per Bothner 1991, 1992. */
-
-#define _POSIX_SOURCE
-#include "libioP.h"
-#include <sys/types.h>
-#include <sys/stat.h>
-#ifdef __STDC__
-#include <stdlib.h>
-#include <unistd.h>
-#endif
-
-/*
- * Allocate a file buffer, or switch to unbuffered I/O.
- * Per the ANSI C standard, ALL tty devices default to line buffered.
- *
- * As a side effect, we set __SOPT or __SNPT (en/dis-able fseek
- * optimisation) right after the _fstat() that finds the buffer size.
- */
-
-int
-DEFUN(_IO_file_doallocate, (fp),
- register _IO_FILE *fp)
-{
- register _IO_size_t size;
- int couldbetty;
- register char *p;
- struct stat st;
-
- /* If _IO_cleanup_registration_needed is non-zero, we should call the
- function it points to. This is to make sure _IO_cleanup gets called
- on exit. We call it from _IO_file_doallocate, since that is likely
- to get called by any program that does buffered I/O. */
- if (_IO_cleanup_registration_needed)
- (*_IO_cleanup_registration_needed)();
-
- if (fp->_fileno < 0 || _IO_SYSSTAT (fp, &st) < 0)
- {
- couldbetty = 0;
- size = _IO_BUFSIZ;
-#if 0
- /* do not try to optimise fseek() */
- fp->_flags |= __SNPT;
-#endif
- }
- else
- {
- couldbetty = S_ISCHR(st.st_mode);
-#if _IO_HAVE_ST_BLKSIZE
- size = st.st_blksize <= 0 ? _IO_BUFSIZ : st.st_blksize;
-#else
- size = _IO_BUFSIZ;
-#endif
- }
- p = ALLOC_BUF(size);
- if (p == NULL)
- return EOF;
- _IO_setb(fp, p, p+size, 1);
- if (couldbetty && isatty(fp->_fileno))
- fp->_flags |= _IO_LINE_BUF;
- return 1;
-}
diff --git a/contrib/libg++/libio/fileops.c b/contrib/libg++/libio/fileops.c
deleted file mode 100644
index 812af94d0f95..000000000000
--- a/contrib/libg++/libio/fileops.c
+++ /dev/null
@@ -1,755 +0,0 @@
-/*
-Copyright (C) 1993, 1995 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-/* written by Per Bothner (bothner@cygnus.com) */
-
-#define _POSIX_SOURCE
-#include "libioP.h"
-#include <fcntl.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <string.h>
-#include <errno.h>
-#ifndef errno
-extern int errno;
-#endif
-
-/* An fstream can be in at most one of put mode, get mode, or putback mode.
- Putback mode is a variant of get mode.
-
- In a filebuf, there is only one current position, instead of two
- separate get and put pointers. In get mode, the current posistion
- is that of gptr(); in put mode that of pptr().
-
- The position in the buffer that corresponds to the position
- in external file system is normally _IO_read_end, except in putback
- mode, when it is _IO_save_end.
- If the field _fb._offset is >= 0, it gives the offset in
- the file as a whole corresponding to eGptr(). (?)
-
- PUT MODE:
- If a filebuf is in put mode, then all of _IO_read_ptr, _IO_read_end,
- and _IO_read_base are equal to each other. These are usually equal
- to _IO_buf_base, though not necessarily if we have switched from
- get mode to put mode. (The reason is to maintain the invariant
- that _IO_read_end corresponds to the external file position.)
- _IO_write_base is non-NULL and usually equal to _IO_base_base.
- We also have _IO_write_end == _IO_buf_end, but only in fully buffered mode.
- The un-flushed character are those between _IO_write_base and _IO_write_ptr.
-
- GET MODE:
- If a filebuf is in get or putback mode, eback() != egptr().
- In get mode, the unread characters are between gptr() and egptr().
- The OS file position corresponds to that of egptr().
-
- PUTBACK MODE:
- Putback mode is used to remember "excess" characters that have
- been sputbackc'd in a separate putback buffer.
- In putback mode, the get buffer points to the special putback buffer.
- The unread characters are the characters between gptr() and egptr()
- in the putback buffer, as well as the area between save_gptr()
- and save_egptr(), which point into the original reserve buffer.
- (The pointers save_gptr() and save_egptr() are the values
- of gptr() and egptr() at the time putback mode was entered.)
- The OS position corresponds to that of save_egptr().
-
- LINE BUFFERED OUTPUT:
- During line buffered output, _IO_write_base==base() && epptr()==base().
- However, ptr() may be anywhere between base() and ebuf().
- This forces a call to filebuf::overflow(int C) on every put.
- If there is more space in the buffer, and C is not a '\n',
- then C is inserted, and pptr() incremented.
-
- UNBUFFERED STREAMS:
- If a filebuf is unbuffered(), the _shortbuf[1] is used as the buffer.
-*/
-
-#define CLOSED_FILEBUF_FLAGS \
- (_IO_IS_FILEBUF+_IO_NO_READS+_IO_NO_WRITES+_IO_TIED_PUT_GET)
-
-
-void
-DEFUN(_IO_file_init, (fp),
- register _IO_FILE *fp)
-{
- /* POSIX.1 allows another file handle to be used to change the position
- of our file descriptor. Hence we actually don't know the actual
- position before we do the first fseek (and until a following fflush). */
- fp->_offset = _IO_pos_BAD;
- fp->_IO_file_flags |= CLOSED_FILEBUF_FLAGS;
-
- _IO_link_in(fp);
- fp->_fileno = -1;
-}
-
-int
-DEFUN(_IO_file_close_it, (fp),
- register _IO_FILE* fp)
-{
- int write_status, close_status;
- if (!_IO_file_is_open(fp))
- return EOF;
-
- write_status = _IO_do_flush (fp);
-
- _IO_unsave_markers(fp);
-
- close_status = _IO_SYSCLOSE (fp);
-
- /* Free buffer. */
- _IO_setb(fp, NULL, NULL, 0);
- _IO_setg(fp, NULL, NULL, NULL);
- _IO_setp(fp, NULL, NULL);
-
- _IO_un_link(fp);
- fp->_flags = _IO_MAGIC|CLOSED_FILEBUF_FLAGS;
- fp->_fileno = EOF;
- fp->_offset = _IO_pos_BAD;
-
- return close_status ? close_status : write_status;
-}
-
-void
-DEFUN(_IO_file_finish, (fp),
- register _IO_FILE* fp)
-{
- if (_IO_file_is_open(fp))
- {
- _IO_do_flush (fp);
- if (!(fp->_flags & _IO_DELETE_DONT_CLOSE))
- _IO_SYSCLOSE (fp);
- }
- _IO_default_finish(fp);
-}
-
-_IO_FILE *
-DEFUN(_IO_file_fopen, (fp, filename, mode),
- register _IO_FILE *fp AND const char *filename AND const char *mode)
-{
- int oflags = 0, omode;
- int read_write, fdesc;
- int oprot = 0666;
- if (_IO_file_is_open (fp))
- return 0;
- switch (*mode++) {
- case 'r':
- omode = O_RDONLY;
- read_write = _IO_NO_WRITES;
- break;
- case 'w':
- omode = O_WRONLY;
- oflags = O_CREAT|O_TRUNC;
- read_write = _IO_NO_READS;
- break;
- case 'a':
- omode = O_WRONLY;
- oflags = O_CREAT|O_APPEND;
- read_write = _IO_NO_READS|_IO_IS_APPENDING;
- break;
- default:
- errno = EINVAL;
- return NULL;
- }
- if (mode[0] == '+' || (mode[0] == 'b' && mode[1] == '+')) {
- omode = O_RDWR;
- read_write &= _IO_IS_APPENDING;
- }
- fdesc = open(filename, omode|oflags, oprot);
- if (fdesc < 0)
- return NULL;
- fp->_fileno = fdesc;
- _IO_mask_flags(fp, read_write,_IO_NO_READS+_IO_NO_WRITES+_IO_IS_APPENDING);
- if (read_write & _IO_IS_APPENDING)
- if (_IO_SEEKOFF (fp, (_IO_off_t)0, _IO_seek_end, _IOS_INPUT|_IOS_OUTPUT)
- == _IO_pos_BAD)
- return NULL;
- _IO_link_in(fp);
- return fp;
-}
-
-_IO_FILE*
-DEFUN(_IO_file_attach, (fp, fd),
- _IO_FILE *fp AND int fd)
-{
- if (_IO_file_is_open(fp))
- return NULL;
- fp->_fileno = fd;
- fp->_flags &= ~(_IO_NO_READS+_IO_NO_WRITES);
- fp->_flags |= _IO_DELETE_DONT_CLOSE;
- fp->_offset = _IO_pos_BAD;
- return fp;
-}
-
-_IO_FILE*
-DEFUN(_IO_file_setbuf, (fp, p, len),
- register _IO_FILE *fp AND char* p AND _IO_ssize_t len)
-{
- if (_IO_default_setbuf(fp, p, len) == NULL)
- return NULL;
-
- fp->_IO_write_base = fp->_IO_write_ptr = fp->_IO_write_end
- = fp->_IO_buf_base;
- _IO_setg(fp, fp->_IO_buf_base, fp->_IO_buf_base, fp->_IO_buf_base);
-
- return fp;
-}
-
-/* Write TO_DO bytes from DATA to FP.
- Then mark FP as having empty buffers. */
-
-int
-DEFUN(_IO_do_write, (fp, data, to_do),
- register _IO_FILE *fp AND const char* data AND _IO_size_t to_do)
-{
- _IO_size_t count;
- if (to_do == 0)
- return 0;
- else
- {
- if (fp->_flags & _IO_IS_APPENDING)
- /* On a system without a proper O_APPEND implementation,
- you would need to sys_seek(0, SEEK_END) here, but is
- is not needed nor desirable for Unix- or Posix-like systems.
- Instead, just indicate that offset (before and after) is
- unpredictable. */
- fp->_offset = _IO_pos_BAD;
- else if (fp->_IO_read_end != fp->_IO_write_base)
- {
- _IO_pos_t new_pos
- = _IO_SYSSEEK(fp, fp->_IO_write_base - fp->_IO_read_end, 1);
- if (new_pos == _IO_pos_BAD)
- return EOF;
- fp->_offset = new_pos;
- }
- count = _IO_SYSWRITE (fp, data, to_do);
- if (fp->_cur_column)
- fp->_cur_column
- = _IO_adjust_column (fp->_cur_column - 1, data, to_do) + 1;
- }
- _IO_setg(fp, fp->_IO_buf_base, fp->_IO_buf_base, fp->_IO_buf_base);
- fp->_IO_write_base = fp->_IO_write_ptr = fp->_IO_buf_base;
- fp->_IO_write_end = (fp->_flags & (_IO_LINE_BUF+_IO_UNBUFFERED)) ? fp->_IO_buf_base
- : fp->_IO_buf_end;
- return count != to_do ? EOF : 0;
-}
-
-int
-DEFUN(_IO_file_underflow, (fp),
- register _IO_FILE *fp)
-{
- _IO_ssize_t count;
-#if 0
- /* SysV does not make this test; take it out for compatibility */
- if (fp->_flags & _IO_EOF_SEEN)
- return (EOF);
-#endif
-
- if (fp->_flags & _IO_NO_READS)
- return EOF;
- if (fp->_IO_read_ptr < fp->_IO_read_end)
- return *(unsigned char*)fp->_IO_read_ptr;
-
- if (fp->_IO_buf_base == NULL)
- _IO_doallocbuf(fp);
-
- /* Flush all line buffered files before reading. */
- /* FIXME This can/should be moved to genops ?? */
- if (fp->_flags & (_IO_LINE_BUF|_IO_UNBUFFERED))
- _IO_flush_all_linebuffered();
-
- _IO_switch_to_get_mode(fp);
-
- count = _IO_SYSREAD (fp, fp->_IO_buf_base,
- fp->_IO_buf_end - fp->_IO_buf_base);
- if (count <= 0)
- {
- if (count == 0)
- fp->_flags |= _IO_EOF_SEEN;
- else
- fp->_flags |= _IO_ERR_SEEN, count = 0;
- }
- fp->_IO_read_base = fp->_IO_read_ptr = fp->_IO_buf_base;
- fp->_IO_read_end = fp->_IO_buf_base + count;
- fp->_IO_write_base = fp->_IO_write_ptr = fp->_IO_write_end
- = fp->_IO_buf_base;
- if (count == 0)
- return EOF;
- if (fp->_offset != _IO_pos_BAD)
- _IO_pos_adjust(fp->_offset, count);
- return *(unsigned char*)fp->_IO_read_ptr;
-}
-
-int
-DEFUN(_IO_file_overflow, (f, ch),
- register _IO_FILE* f AND int ch)
-{
- if (f->_flags & _IO_NO_WRITES) /* SET ERROR */
- return EOF;
- /* If currently reading or no buffer allocated. */
- if ((f->_flags & _IO_CURRENTLY_PUTTING) == 0)
- {
- /* Allocate a buffer if needed. */
- if (f->_IO_write_base == 0)
- {
- _IO_doallocbuf(f);
- _IO_setg (f, f->_IO_buf_base, f->_IO_buf_base, f->_IO_buf_base);
- }
- /* Otherwise must be currently reading.
- If _IO_read_ptr (and hence also _IO_read_end) is at the buffer end,
- logically slide the buffer forwards one block (by setting the
- read pointers to all point at the beginning of the block). This
- makes room for subsequent output.
- Otherwise, set the read pointers to _IO_read_end (leaving that
- alone, so it can continue to correspond to the external position). */
- if (f->_IO_read_ptr == f->_IO_buf_end)
- f->_IO_read_end = f->_IO_read_ptr = f->_IO_buf_base;
- f->_IO_write_ptr = f->_IO_read_ptr;
- f->_IO_write_base = f->_IO_write_ptr;
- f->_IO_write_end = f->_IO_buf_end;
- f->_IO_read_base = f->_IO_read_ptr = f->_IO_read_end;
-
- if (f->_flags & (_IO_LINE_BUF+_IO_UNBUFFERED))
- f->_IO_write_end = f->_IO_write_ptr;
- f->_flags |= _IO_CURRENTLY_PUTTING;
- }
- if (ch == EOF)
- return _IO_do_flush(f);
- if (f->_IO_write_ptr == f->_IO_buf_end ) /* Buffer is really full */
- if (_IO_do_flush(f) == EOF)
- return EOF;
- *f->_IO_write_ptr++ = ch;
- if ((f->_flags & _IO_UNBUFFERED)
- || ((f->_flags & _IO_LINE_BUF) && ch == '\n'))
- if (_IO_do_flush(f) == EOF)
- return EOF;
- return (unsigned char)ch;
-}
-
-int
-DEFUN(_IO_file_sync, (fp),
- register _IO_FILE* fp)
-{
- _IO_size_t delta;
- /* char* ptr = cur_ptr(); */
- if (fp->_IO_write_ptr > fp->_IO_write_base)
- if (_IO_do_flush(fp)) return EOF;
- delta = fp->_IO_read_ptr - fp->_IO_read_end;
- if (delta != 0)
- {
-#ifdef TODO
- if (_IO_in_backup(fp))
- delta -= eGptr() - Gbase();
-#endif
- _IO_off_t new_pos = _IO_SYSSEEK (fp, delta, 1);
- if (new_pos != (_IO_off_t)EOF)
- fp->_IO_read_end = fp->_IO_read_ptr;
-#ifdef ESPIPE
- else if (errno == ESPIPE)
- ; /* Ignore error from unseekable devices. */
-#endif
- else
- return EOF;
- }
- fp->_offset = _IO_pos_BAD;
- /* FIXME: Cleanup - can this be shared? */
- /* setg(base(), ptr, ptr); */
- return 0;
-}
-
-_IO_pos_t
-DEFUN(_IO_file_seekoff, (fp, offset, dir, mode),
- register _IO_FILE *fp AND _IO_off_t offset AND int dir AND int mode)
-{
- _IO_pos_t result;
- _IO_off_t delta, new_offset;
- long count;
-
- if (mode == 0)
- dir = _IO_seek_cur, offset = 0; /* Don't move any pointers. */
-
- /* Flush unwritten characters.
- (This may do an unneeded write if we seek within the buffer.
- But to be able to switch to reading, we would need to set
- egptr to ptr. That can't be done in the current design,
- which assumes file_ptr() is eGptr. Anyway, since we probably
- end up flushing when we close(), it doesn't make much difference.)
- FIXME: simulate mem-papped files. */
-
- if (fp->_IO_write_ptr > fp->_IO_write_base || _IO_in_put_mode(fp))
- if (_IO_switch_to_get_mode(fp)) return EOF;
-
- if (fp->_IO_buf_base == NULL)
- {
- _IO_doallocbuf(fp);
- _IO_setp(fp, fp->_IO_buf_base, fp->_IO_buf_base);
- _IO_setg(fp, fp->_IO_buf_base, fp->_IO_buf_base, fp->_IO_buf_base);
- }
-
- switch (dir)
- {
- case _IO_seek_cur:
- /* Adjust for read-ahead (bytes is buffer). */
- offset -= fp->_IO_read_end - fp->_IO_read_ptr;
- if (fp->_offset == _IO_pos_BAD)
- goto dumb;
- /* Make offset absolute, assuming current pointer is file_ptr(). */
- offset += _IO_pos_as_off(fp->_offset);
-
- dir = _IO_seek_set;
- break;
- case _IO_seek_set:
- break;
- case _IO_seek_end:
- {
- struct stat st;
- if (_IO_SYSSTAT (fp, &st) == 0 && S_ISREG(st.st_mode))
- {
- offset += st.st_size;
- dir = _IO_seek_set;
- }
- else
- goto dumb;
- }
- }
- /* At this point, dir==_IO_seek_set. */
-
- /* If destination is within current buffer, optimize: */
- if (fp->_offset != _IO_pos_BAD && fp->_IO_read_base != NULL
- && !_IO_in_backup (fp))
- {
- /* Offset relative to start of main get area. */
- _IO_pos_t rel_offset = offset - fp->_offset
- + (fp->_IO_read_end - fp->_IO_read_base);
- if (rel_offset >= 0)
- {
-#if 0
- if (_IO_in_backup(fp))
- _IO_switch_to_main_get_area(fp);
-#endif
- if (rel_offset <= fp->_IO_read_end - fp->_IO_read_base)
- {
- _IO_setg(fp, fp->_IO_buf_base, fp->_IO_buf_base + rel_offset,
- fp->_IO_read_end);
- _IO_setp(fp, fp->_IO_buf_base, fp->_IO_buf_base);
- return offset;
- }
-#ifdef TODO
- /* If we have streammarkers, seek forward by reading ahead. */
- if (_IO_have_markers(fp))
- {
- int to_skip = rel_offset
- - (fp->_IO_read_ptr - fp->_IO_read_base);
- if (ignore(to_skip) != to_skip)
- goto dumb;
- return offset;
- }
-#endif
- }
-#ifdef TODO
- if (rel_offset < 0 && rel_offset >= Bbase() - Bptr())
- {
- if (!_IO_in_backup(fp))
- _IO_switch_to_backup_area(fp);
- gbump(fp->_IO_read_end + rel_offset - fp->_IO_read_ptr);
- return offset;
- }
-#endif
- }
-
-#ifdef TODO
- _IO_unsave_markers(fp);
-#endif
-
- if (fp->_flags & _IO_NO_READS)
- goto dumb;
-
- /* Try to seek to a block boundary, to improve kernel page management. */
- new_offset = offset & ~(fp->_IO_buf_end - fp->_IO_buf_base - 1);
- delta = offset - new_offset;
- if (delta > fp->_IO_buf_end - fp->_IO_buf_base)
- {
- new_offset = offset;
- delta = 0;
- }
- result = _IO_SYSSEEK (fp, new_offset, 0);
- if (result < 0)
- return EOF;
- if (delta == 0)
- count = 0;
- else
- {
- count = _IO_SYSREAD (fp, fp->_IO_buf_base,
- fp->_IO_buf_end - fp->_IO_buf_base);
- if (count < delta)
- {
- /* We weren't allowed to read, but try to seek the remainder. */
- offset = count == EOF ? delta : delta-count;
- dir = _IO_seek_cur;
- goto dumb;
- }
- }
- _IO_setg(fp, fp->_IO_buf_base, fp->_IO_buf_base+delta, fp->_IO_buf_base+count);
- _IO_setp(fp, fp->_IO_buf_base, fp->_IO_buf_base);
- fp->_offset = result + count;
- _IO_mask_flags(fp, 0, _IO_EOF_SEEN);
- return offset;
- dumb:
-
- _IO_unsave_markers(fp);
- result = _IO_SYSSEEK (fp, offset, dir);
- if (result != EOF)
- _IO_mask_flags(fp, 0, _IO_EOF_SEEN);
- fp->_offset = result;
- _IO_setg(fp, fp->_IO_buf_base, fp->_IO_buf_base, fp->_IO_buf_base);
- _IO_setp(fp, fp->_IO_buf_base, fp->_IO_buf_base);
- return result;
-}
-
-_IO_ssize_t
-DEFUN(_IO_file_read, (fp, buf, size),
- register _IO_FILE* fp AND void* buf AND _IO_ssize_t size)
-{
- for (;;)
- {
- _IO_ssize_t count = _IO_read(fp->_fileno, buf, size);
-#ifdef EINTR
- if (count == -1 && errno == EINTR)
- continue;
-#endif
- return count;
- }
-}
-
-_IO_pos_t
-DEFUN(_IO_file_seek, (fp, offset, dir),
- _IO_FILE *fp AND _IO_off_t offset AND int dir)
-{
- return _IO_lseek(fp->_fileno, offset, dir);
-}
-
-int
-DEFUN(_IO_file_stat, (fp, st),
- _IO_FILE *fp AND void* st)
-{
- return _IO_fstat(fp->_fileno, (struct stat*)st);
-}
-
-int
-DEFUN(_IO_file_close, (fp),
- _IO_FILE* fp)
-{
- return _IO_close(fp->_fileno);
-}
-
-_IO_ssize_t
-DEFUN(_IO_file_write, (f, data, n),
- register _IO_FILE* f AND const void* data AND _IO_ssize_t n)
-{
- _IO_ssize_t to_do = n;
- while (to_do > 0)
- {
- _IO_ssize_t count = _IO_write(f->_fileno, data, to_do);
- if (count == EOF)
- {
-#ifdef EINTR
- if (errno == EINTR)
- continue;
- else
-#endif
- {
- f->_flags |= _IO_ERR_SEEN;
- break;
- }
- }
- to_do -= count;
- data = (void*)((char*)data + count);
- }
- n -= to_do;
- if (f->_offset >= 0)
- f->_offset += n;
- return n;
-}
-
-_IO_size_t
-DEFUN(_IO_file_xsputn, (f, data, n),
- _IO_FILE *f AND const void *data AND _IO_size_t n)
-{
- register const char *s = (char*) data;
- _IO_size_t to_do = n;
- int must_flush = 0;
- _IO_size_t count;
-
- if (n <= 0)
- return 0;
- /* This is an optimized implementation.
- If the amount to be written straddles a block boundary
- (or the filebuf is unbuffered), use sys_write directly. */
-
- /* First figure out how much space is available in the buffer. */
- count = f->_IO_write_end - f->_IO_write_ptr; /* Space available. */
- if ((f->_flags & _IO_LINE_BUF) && (f->_flags & _IO_CURRENTLY_PUTTING))
- {
- count = f->_IO_buf_end - f->_IO_write_ptr;
- if (count >= n)
- { register const char *p;
- for (p = s + n; p > s; )
- {
- if (*--p == '\n') {
- count = p - s + 1;
- must_flush = 1;
- break;
- }
- }
- }
- }
- /* Then fill the buffer. */
- if (count > 0)
- {
- if (count > to_do)
- count = to_do;
- if (count > 20) {
- memcpy(f->_IO_write_ptr, s, count);
- s += count;
- }
- else
- {
- register char *p = f->_IO_write_ptr;
- register int i = (int)count;
- while (--i >= 0) *p++ = *s++;
- }
- f->_IO_write_ptr += count;
- to_do -= count;
- }
- if (to_do + must_flush > 0)
- { _IO_size_t block_size, dont_write;
- /* Next flush the (full) buffer. */
- if (__overflow(f, EOF) == EOF)
- return n - to_do;
-
- /* Try to maintain alignment: write a whole number of blocks.
- dont_write is what gets left over. */
- block_size = f->_IO_buf_end - f->_IO_buf_base;
- dont_write = block_size >= 128 ? to_do % block_size : 0;
-
- count = to_do - dont_write;
- if (_IO_do_write(f, s, count) == EOF)
- return n - to_do;
- to_do = dont_write;
-
- /* Now write out the remainder. Normally, this will fit in the
- buffer, but it's somewhat messier for line-buffered files,
- so we let _IO_default_xsputn handle the general case. */
- if (dont_write)
- to_do -= _IO_default_xsputn(f, s+count, dont_write);
- }
- return n - to_do;
-}
-
-#if 0
-/* Work in progress */
-_IO_size_t
-DEFUN(_IO_file_xsgetn, (fp, data, n),
- _IO_FILE *fp AND void *data AND _IO_size_t n)
-{
- register _IO_size_t more = n;
- register char *s = data;
- for (;;)
- {
- _IO_ssize_t count = fp->_IO_read_end - fp->_IO_read_ptr; /* Data available. */
- if (count > 0)
- {
- if (count > more)
- count = more;
- if (count > 20)
- {
- memcpy(s, fp->_IO_read_ptr, count);
- s += count;
- fp->_IO_read_ptr += count;
- }
- else if (count <= 0)
- count = 0;
- else
- {
- register char *p = fp->_IO_read_ptr;
- register int i = (int)count;
- while (--i >= 0) *s++ = *p++;
- fp->_IO_read_ptr = p;
- }
- more -= count;
- }
-#if 0
- if (! _IO_in put_mode (fp)
- && ! _IO_have_markers (fp) && ! IO_have_backup (fp))
- {
- /* This is an optimization of _IO_file_underflow */
- if (fp->_flags & _IO_NO_READS)
- break;
- /* If we're reading a lot of data, don't bother allocating
- a buffer. But if we're only reading a bit, perhaps we should ??*/
- if (count <= 512 && fp->_IO_buf_base == NULL)
- _IO_doallocbuf(fp);
- if (fp->_flags & (_IO_LINE_BUF|_IO_UNBUFFERED))
- _IO_flush_all_linebuffered();
-
- _IO_switch_to_get_mode(fp); ???;
- count = _IO_SYSREAD (fp, s, more);
- if (count <= 0)
- {
- if (count == 0)
- fp->_flags |= _IO_EOF_SEEN;
- else
- fp->_flags |= _IO_ERR_SEEN, count = 0;
- }
-
- s += count;
- more -= count;
- }
-#endif
- if (more == 0 || __underflow(fp) == EOF)
- break;
- }
- return n - more;
-}
-#endif
-
-struct _IO_jump_t _IO_file_jumps = {
- JUMP_INIT_DUMMY,
- JUMP_INIT(finish, _IO_file_finish),
- JUMP_INIT(overflow, _IO_file_overflow),
- JUMP_INIT(underflow, _IO_file_underflow),
- JUMP_INIT(uflow, _IO_default_uflow),
- JUMP_INIT(pbackfail, _IO_default_pbackfail),
- JUMP_INIT(xsputn, _IO_file_xsputn),
- JUMP_INIT(xsgetn, _IO_default_xsgetn),
- JUMP_INIT(seekoff, _IO_file_seekoff),
- JUMP_INIT(seekpos, _IO_default_seekpos),
- JUMP_INIT(setbuf, _IO_file_setbuf),
- JUMP_INIT(sync, _IO_file_sync),
- JUMP_INIT(doallocate, _IO_file_doallocate),
- JUMP_INIT(read, _IO_file_read),
- JUMP_INIT(write, _IO_file_write),
- JUMP_INIT(seek, _IO_file_seek),
- JUMP_INIT(close, _IO_file_close),
- JUMP_INIT(stat, _IO_file_stat)
-};
diff --git a/contrib/libg++/libio/floatconv.c b/contrib/libg++/libio/floatconv.c
deleted file mode 100644
index def7269d97f1..000000000000
--- a/contrib/libg++/libio/floatconv.c
+++ /dev/null
@@ -1,2350 +0,0 @@
-/*
-Copyright (C) 1993, 1994 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include <libioP.h>
-#ifdef _IO_USE_DTOA
-/****************************************************************
- *
- * The author of this software is David M. Gay.
- *
- * Copyright (c) 1991 by AT&T.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose without fee is hereby granted, provided that this entire notice
- * is included in all copies of any software which is or includes a copy
- * or modification of this software and in all copies of the supporting
- * documentation for such software.
- *
- * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTY. IN PARTICULAR, NEITHER THE AUTHOR NOR AT&T MAKES ANY
- * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
- * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
- *
- ***************************************************************/
-
-/* Some cleaning up by Per Bothner, bothner@cygnus.com, 1992, 1993.
- Re-written to not need static variables
- (except result, result_k, HIWORD, LOWORD). */
-
-/* Please send bug reports to
- David M. Gay
- AT&T Bell Laboratories, Room 2C-463
- 600 Mountain Avenue
- Murray Hill, NJ 07974-2070
- U.S.A.
- dmg@research.att.com or research!dmg
- */
-
-/* strtod for IEEE-, VAX-, and IBM-arithmetic machines.
- *
- * This strtod returns a nearest machine number to the input decimal
- * string (or sets errno to ERANGE). With IEEE arithmetic, ties are
- * broken by the IEEE round-even rule. Otherwise ties are broken by
- * biased rounding (add half and chop).
- *
- * Inspired loosely by William D. Clinger's paper "How to Read Floating
- * Point Numbers Accurately" [Proc. ACM SIGPLAN '90, pp. 92-101].
- *
- * Modifications:
- *
- * 1. We only require IEEE, IBM, or VAX double-precision
- * arithmetic (not IEEE double-extended).
- * 2. We get by with floating-point arithmetic in a case that
- * Clinger missed -- when we're computing d * 10^n
- * for a small integer d and the integer n is not too
- * much larger than 22 (the maximum integer k for which
- * we can represent 10^k exactly), we may be able to
- * compute (d*10^k) * 10^(e-k) with just one roundoff.
- * 3. Rather than a bit-at-a-time adjustment of the binary
- * result in the hard case, we use floating-point
- * arithmetic to determine the adjustment to within
- * one bit; only in really hard cases do we need to
- * compute a second residual.
- * 4. Because of 3., we don't need a large table of powers of 10
- * for ten-to-e (just some small tables, e.g. of 10^k
- * for 0 <= k <= 22).
- */
-
-/*
- * #define IEEE_8087 for IEEE-arithmetic machines where the least
- * significant byte has the lowest address.
- * #define IEEE_MC68k for IEEE-arithmetic machines where the most
- * significant byte has the lowest address.
- * #define Sudden_Underflow for IEEE-format machines without gradual
- * underflow (i.e., that flush to zero on underflow).
- * #define IBM for IBM mainframe-style floating-point arithmetic.
- * #define VAX for VAX-style floating-point arithmetic.
- * #define Unsigned_Shifts if >> does treats its left operand as unsigned.
- * #define No_leftright to omit left-right logic in fast floating-point
- * computation of dtoa.
- * #define Check_FLT_ROUNDS if FLT_ROUNDS can assume the values 2 or 3.
- * #define RND_PRODQUOT to use rnd_prod and rnd_quot (assembly routines
- * that use extended-precision instructions to compute rounded
- * products and quotients) with IBM.
- * #define ROUND_BIASED for IEEE-format with biased rounding.
- * #define Inaccurate_Divide for IEEE-format with correctly rounded
- * products but inaccurate quotients, e.g., for Intel i860.
- * #define KR_headers for old-style C function headers.
- */
-
-#ifdef DEBUG
-#include <stdio.h>
-#define Bug(x) {fprintf(stderr, "%s\n", x); exit(1);}
-#endif
-
-#ifdef __STDC__
-#include <stdlib.h>
-#include <string.h>
-#include <float.h>
-#define CONST const
-#else
-#define CONST
-#define KR_headers
-
-/* In this case, we assume IEEE floats. */
-#define FLT_ROUNDS 1
-#define FLT_RADIX 2
-#define DBL_MANT_DIG 53
-#define DBL_DIG 15
-#define DBL_MAX_10_EXP 308
-#define DBL_MAX_EXP 1024
-#endif
-
-#include <errno.h>
-#ifndef __MATH_H__
-#include <math.h>
-#endif
-
-#ifdef Unsigned_Shifts
-#define Sign_Extend(a,b) if (b < 0) a |= 0xffff0000;
-#else
-#define Sign_Extend(a,b) /*no-op*/
-#endif
-
-#if defined(__i386__) || defined(__i860__) || defined(clipper)
-#define IEEE_8087
-#endif
-#if defined(MIPSEL) || defined(__alpha__)
-#define IEEE_8087
-#endif
-#if defined(__sparc__) || defined(sparc) || defined(MIPSEB)
-#define IEEE_MC68k
-#endif
-
-#if defined(IEEE_8087) + defined(IEEE_MC68k) + defined(VAX) + defined(IBM) != 1
-
-#if FLT_RADIX==16
-#define IBM
-#else
-#if DBL_MANT_DIG==56
-#define VAX
-#else
-#if DBL_MANT_DIG==53 && DBL_MAX_10_EXP==308
-#define IEEE_Unknown
-#else
-Exactly one of IEEE_8087, IEEE_MC68k, VAX, or IBM should be defined.
-#endif
-#endif
-#endif
-#endif
-
-typedef _G_uint32_t unsigned32;
-
-union doubleword {
- double d;
- unsigned32 u[2];
-};
-
-#ifdef IEEE_8087
-#define HIWORD 1
-#define LOWORD 0
-#define TEST_ENDIANNESS /* nothing */
-#else
-#if defined(IEEE_MC68k)
-#define HIWORD 0
-#define LOWORD 1
-#define TEST_ENDIANNESS /* nothing */
-#else
-static int HIWORD = -1, LOWORD;
-static void test_endianness()
-{
- union doubleword dw;
- dw.d = 10;
- if (dw.u[0] != 0) /* big-endian */
- HIWORD=0, LOWORD=1;
- else
- HIWORD=1, LOWORD=0;
-}
-#define TEST_ENDIANNESS if (HIWORD<0) test_endianness();
-#endif
-#endif
-
-#if 0
-union doubleword _temp;
-#endif
-#ifdef __GNUC__
-#define word0(x) ({ union doubleword _du; _du.d = (x); _du.u[HIWORD]; })
-#define word1(x) ({ union doubleword _du; _du.d = (x); _du.u[LOWORD]; })
-#define setword0(D,W) \
- ({ union doubleword _du; _du.d = (D); _du.u[HIWORD]=(W); (D)=_du.d; })
-#define setword1(D,W) \
- ({ union doubleword _du; _du.d = (D); _du.u[LOWORD]=(W); (D)=_du.d; })
-#define setwords(D,W0,W1) ({ union doubleword _du; \
- _du.u[HIWORD]=(W0); _du.u[LOWORD]=(W1); (D)=_du.d; })
-#define addword0(D,W) \
- ({ union doubleword _du; _du.d = (D); _du.u[HIWORD]+=(W); (D)=_du.d; })
-#else
-#define word0(x) ((unsigned32 *)&x)[HIWORD]
-#define word1(x) ((unsigned32 *)&x)[LOWORD]
-#define setword0(D,W) word0(D) = (W)
-#define setword1(D,W) word1(D) = (W)
-#define setwords(D,W0,W1) (setword0(D,W0),setword1(D,W1))
-#define addword0(D,X) (word0(D) += (X))
-#endif
-
-/* The following definition of Storeinc is appropriate for MIPS processors. */
-#if defined(IEEE_8087) + defined(VAX)
-#define Storeinc(a,b,c) (((unsigned short *)a)[1] = (unsigned short)b, \
-((unsigned short *)a)[0] = (unsigned short)c, a++)
-#else
-#if defined(IEEE_MC68k)
-#define Storeinc(a,b,c) (((unsigned short *)a)[0] = (unsigned short)b, \
-((unsigned short *)a)[1] = (unsigned short)c, a++)
-#else
-#define Storeinc(a,b,c) (*a++ = b << 16 | c & 0xffff)
-#endif
-#endif
-
-/* #define P DBL_MANT_DIG */
-/* Ten_pmax = floor(P*log(2)/log(5)) */
-/* Bletch = (highest power of 2 < DBL_MAX_10_EXP) / 16 */
-/* Quick_max = floor((P-1)*log(FLT_RADIX)/log(10) - 1) */
-/* Int_max = floor(P*log(FLT_RADIX)/log(10) - 1) */
-
-#if defined(IEEE_8087) + defined(IEEE_MC68k) + defined(IEEE_Unknown)
-#define Exp_shift 20
-#define Exp_shift1 20
-#define Exp_msk1 0x100000
-#define Exp_msk11 0x100000
-#define Exp_mask 0x7ff00000
-#define P 53
-#define Bias 1023
-#define IEEE_Arith
-#define Emin (-1022)
-#define Exp_1 0x3ff00000
-#define Exp_11 0x3ff00000
-#define Ebits 11
-#define Frac_mask 0xfffff
-#define Frac_mask1 0xfffff
-#define Ten_pmax 22
-#define Bletch 0x10
-#define Bndry_mask 0xfffff
-#define Bndry_mask1 0xfffff
-#define LSB 1
-#define Sign_bit 0x80000000
-#define Log2P 1
-#define Tiny0 0
-#define Tiny1 1
-#define Quick_max 14
-#define Int_max 14
-#define Infinite(x) (word0(x) == 0x7ff00000) /* sufficient test for here */
-#else
-#undef Sudden_Underflow
-#define Sudden_Underflow
-#ifdef IBM
-#define Exp_shift 24
-#define Exp_shift1 24
-#define Exp_msk1 0x1000000
-#define Exp_msk11 0x1000000
-#define Exp_mask 0x7f000000
-#define P 14
-#define Bias 65
-#define Exp_1 0x41000000
-#define Exp_11 0x41000000
-#define Ebits 8 /* exponent has 7 bits, but 8 is the right value in b2d */
-#define Frac_mask 0xffffff
-#define Frac_mask1 0xffffff
-#define Bletch 4
-#define Ten_pmax 22
-#define Bndry_mask 0xefffff
-#define Bndry_mask1 0xffffff
-#define LSB 1
-#define Sign_bit 0x80000000
-#define Log2P 4
-#define Tiny0 0x100000
-#define Tiny1 0
-#define Quick_max 14
-#define Int_max 15
-#else /* VAX */
-#define Exp_shift 23
-#define Exp_shift1 7
-#define Exp_msk1 0x80
-#define Exp_msk11 0x800000
-#define Exp_mask 0x7f80
-#define P 56
-#define Bias 129
-#define Exp_1 0x40800000
-#define Exp_11 0x4080
-#define Ebits 8
-#define Frac_mask 0x7fffff
-#define Frac_mask1 0xffff007f
-#define Ten_pmax 24
-#define Bletch 2
-#define Bndry_mask 0xffff007f
-#define Bndry_mask1 0xffff007f
-#define LSB 0x10000
-#define Sign_bit 0x8000
-#define Log2P 1
-#define Tiny0 0x80
-#define Tiny1 0
-#define Quick_max 15
-#define Int_max 15
-#endif
-#endif
-
-#ifndef IEEE_Arith
-#define ROUND_BIASED
-#endif
-
-#ifdef RND_PRODQUOT
-#define rounded_product(a,b) a = rnd_prod(a, b)
-#define rounded_quotient(a,b) a = rnd_quot(a, b)
-extern double rnd_prod(double, double), rnd_quot(double, double);
-#else
-#define rounded_product(a,b) a *= b
-#define rounded_quotient(a,b) a /= b
-#endif
-
-#define Big0 (Frac_mask1 | Exp_msk1*(DBL_MAX_EXP+Bias-1))
-#define Big1 0xffffffff
-
-#define Kmax 15
-
-/* (1<<BIGINT_MINIMUM_K) is the minimum number of words to allocate
- in a Bigint. dtoa usually manages with 1<<2, and has not been
- known to need more than 1<<3. */
-
-#define BIGINT_MINIMUM_K 3
-
-struct Bigint {
- struct Bigint *next;
- int k; /* Parameter given to Balloc(k) */
- int maxwds; /* Allocated space: equals 1<<k. */
- short on_stack; /* 1 if stack-allocated. */
- short sign; /* 0 if value is positive or zero; 1 if negative. */
- int wds; /* Current length. */
- unsigned32 x[1<<BIGINT_MINIMUM_K]; /* Actually: x[maxwds] */
-};
-
-#define BIGINT_HEADER_SIZE \
- (sizeof(Bigint) - (1<<BIGINT_MINIMUM_K) * sizeof(unsigned32))
-
-typedef struct Bigint Bigint;
-
-/* Initialize a stack-allocated Bigint. */
-
-static Bigint *
-Binit
-#ifdef KR_headers
- (v) Bigint *v;
-#else
- (Bigint *v)
-#endif
-{
- v->on_stack = 1;
- v->k = BIGINT_MINIMUM_K;
- v->maxwds = 1 << BIGINT_MINIMUM_K;
- v->sign = v->wds = 0;
- return v;
-}
-
-/* Allocate a Bigint with '1<<k' big digits. */
-
-static Bigint *
-Balloc
-#ifdef KR_headers
- (k) int k;
-#else
- (int k)
-#endif
-{
- int x;
- Bigint *rv;
-
- if (k < BIGINT_MINIMUM_K)
- k = BIGINT_MINIMUM_K;
-
- x = 1 << k;
- rv = (Bigint *)
- malloc(BIGINT_HEADER_SIZE + x * sizeof(unsigned32));
- rv->k = k;
- rv->maxwds = x;
- rv->sign = rv->wds = 0;
- rv->on_stack = 0;
- return rv;
-}
-
-static void
-Bfree
-#ifdef KR_headers
- (v) Bigint *v;
-#else
- (Bigint *v)
-#endif
-{
- if (v && !v->on_stack)
- free (v);
-}
-
-static void
-Bcopy
-#ifdef KR_headers
- (x, y) Bigint *x, *y;
-#else
- (Bigint *x, Bigint *y)
-#endif
-{
- register unsigned32 *xp, *yp;
- register int i = y->wds;
- x->sign = y->sign;
- x->wds = i;
- for (xp = x->x, yp = y->x; --i >= 0; )
- *xp++ = *yp++;
-}
-
-/* Make sure b has room for at least 1<<k big digits. */
-
-static Bigint *
-Brealloc
-#ifdef KR_headers
- (b, k) Bigint *b; int k;
-#else
- (Bigint * b, int k)
-#endif
-{
- if (b == NULL)
- return Balloc(k);
- if (b->k >= k)
- return b;
- else
- {
- Bigint *rv = Balloc (k);
- Bcopy(rv, b);
- Bfree(b);
- return rv;
- }
-}
-
-/* Return b*m+a. b is modified.
- Assumption: 0xFFFF*m+a fits in 32 bits. */
-
-static Bigint *
-multadd
-#ifdef KR_headers
- (b, m, a) Bigint *b; int m, a;
-#else
- (Bigint *b, int m, int a)
-#endif
-{
- int i, wds;
- unsigned32 *x, y;
- unsigned32 xi, z;
-
- wds = b->wds;
- x = b->x;
- i = 0;
- do {
- xi = *x;
- y = (xi & 0xffff) * m + a;
- z = (xi >> 16) * m + (y >> 16);
- a = (int)(z >> 16);
- *x++ = (z << 16) + (y & 0xffff);
- }
- while(++i < wds);
- if (a) {
- if (wds >= b->maxwds)
- b = Brealloc(b, b->k+1);
- b->x[wds++] = a;
- b->wds = wds;
- }
- return b;
- }
-
-static Bigint *
-s2b
-#ifdef KR_headers
- (result, s, nd0, nd, y9)
- Bigint *result; CONST char *s; int nd0, nd; unsigned32 y9;
-#else
- (Bigint *result, CONST char *s, int nd0, int nd, unsigned32 y9)
-#endif
-{
- int i, k;
- _G_int32_t x, y;
-
- x = (nd + 8) / 9;
- for(k = 0, y = 1; x > y; y <<= 1, k++) ;
- result = Brealloc(result, k);
- result->x[0] = y9;
- result->wds = 1;
-
- i = 9;
- if (9 < nd0)
- {
- s += 9;
- do
- result = multadd(result, 10, *s++ - '0');
- while (++i < nd0);
- s++;
- }
- else
- s += 10;
- for(; i < nd; i++)
- result = multadd(result, 10, *s++ - '0');
- return result;
-}
-
-static int
-hi0bits
-#ifdef KR_headers
- (x) register unsigned32 x;
-#else
- (register unsigned32 x)
-#endif
-{
- register int k = 0;
-
- if (!(x & 0xffff0000)) {
- k = 16;
- x <<= 16;
- }
- if (!(x & 0xff000000)) {
- k += 8;
- x <<= 8;
- }
- if (!(x & 0xf0000000)) {
- k += 4;
- x <<= 4;
- }
- if (!(x & 0xc0000000)) {
- k += 2;
- x <<= 2;
- }
- if (!(x & 0x80000000)) {
- k++;
- if (!(x & 0x40000000))
- return 32;
- }
- return k;
- }
-
-static int
-lo0bits
-#ifdef KR_headers
- (y) unsigned32 *y;
-#else
- (unsigned32 *y)
-#endif
-{
- register int k;
- register unsigned32 x = *y;
-
- if (x & 7) {
- if (x & 1)
- return 0;
- if (x & 2) {
- *y = x >> 1;
- return 1;
- }
- *y = x >> 2;
- return 2;
- }
- k = 0;
- if (!(x & 0xffff)) {
- k = 16;
- x >>= 16;
- }
- if (!(x & 0xff)) {
- k += 8;
- x >>= 8;
- }
- if (!(x & 0xf)) {
- k += 4;
- x >>= 4;
- }
- if (!(x & 0x3)) {
- k += 2;
- x >>= 2;
- }
- if (!(x & 1)) {
- k++;
- x >>= 1;
- if (!x & 1)
- return 32;
- }
- *y = x;
- return k;
- }
-
-static Bigint *
-i2b
-#ifdef KR_headers
- (result, i) Bigint *result; int i;
-#else
- (Bigint* result, int i)
-#endif
-{
- result = Brealloc(result, 1);
- result->x[0] = i;
- result->wds = 1;
- return result;
-}
-
-/* Do: c = a * b. */
-
-static Bigint *
-mult
-#ifdef KR_headers
- (c, a, b) Bigint *a, *b, *c;
-#else
- (Bigint *c, Bigint *a, Bigint *b)
-#endif
-{
- int k, wa, wb, wc;
- unsigned32 carry, y, z;
- unsigned32 *x, *xa, *xae, *xb, *xbe, *xc, *xc0;
- unsigned32 z2;
- if (a->wds < b->wds) {
- Bigint *tmp = a;
- a = b;
- b = tmp;
- }
- k = a->k;
- wa = a->wds;
- wb = b->wds;
- wc = wa + wb;
- if (wc > a->maxwds)
- k++;
- c = Brealloc(c, k);
- for(x = c->x, xa = x + wc; x < xa; x++)
- *x = 0;
- xa = a->x;
- xae = xa + wa;
- xb = b->x;
- xbe = xb + wb;
- xc0 = c->x;
- for(; xb < xbe; xb++, xc0++) {
- if ((y = *xb & 0xffff)) {
- x = xa;
- xc = xc0;
- carry = 0;
- do {
- z = (*x & 0xffff) * y + (*xc & 0xffff) + carry;
- carry = z >> 16;
- z2 = (*x++ >> 16) * y + (*xc >> 16) + carry;
- carry = z2 >> 16;
- Storeinc(xc, z2, z);
- }
- while(x < xae);
- *xc = carry;
- }
- if ((y = *xb >> 16)) {
- x = xa;
- xc = xc0;
- carry = 0;
- z2 = *xc;
- do {
- z = (*x & 0xffff) * y + (*xc >> 16) + carry;
- carry = z >> 16;
- Storeinc(xc, z, z2);
- z2 = (*x++ >> 16) * y + (*xc & 0xffff) + carry;
- carry = z2 >> 16;
- }
- while(x < xae);
- *xc = z2;
- }
- }
- for(xc0 = c->x, xc = xc0 + wc; wc > 0 && !*--xc; --wc) ;
- c->wds = wc;
- return c;
- }
-
-/* Returns b*(5**k). b is modified. */
-/* Re-written by Per Bothner to not need a static list. */
-
-static Bigint *
-pow5mult
-#ifdef KR_headers
- (b, k) Bigint *b; int k;
-#else
- (Bigint *b, int k)
-#endif
-{
- static int p05[6] = { 5, 25, 125, 625, 3125, 15625 };
-
- for (; k > 6; k -= 6)
- b = multadd(b, 15625, 0); /* b *= 5**6 */
- if (k == 0)
- return b;
- else
- return multadd(b, p05[k-1], 0);
-}
-
-/* Re-written by Per Bothner so shift can be in place. */
-
-static Bigint *
-lshift
-#ifdef KR_headers
- (b, k) Bigint *b; int k;
-#else
- (Bigint *b, int k)
-#endif
-{
- int i;
- unsigned32 *x, *x1, *xe;
- int old_wds = b->wds;
- int n = k >> 5;
- int k1 = b->k;
- int n1 = n + old_wds + 1;
-
- if (k == 0)
- return b;
-
- for(i = b->maxwds; n1 > i; i <<= 1)
- k1++;
- b = Brealloc(b, k1);
-
- xe = b->x; /* Source limit */
- x = xe + old_wds; /* Source pointer */
- x1 = x + n; /* Destination pointer */
- if (k &= 0x1f) {
- int k1 = 32 - k;
- unsigned32 z = *--x;
- if ((*x1 = (z >> k1)) != 0) {
- ++n1;
- }
- while (x > xe) {
- unsigned32 w = *--x;
- *--x1 = (z << k) | (w >> k1);
- z = w;
- }
- *--x1 = z << k;
- }
- else
- do {
- *--x1 = *--x;
- } while(x > xe);
- while (x1 > xe)
- *--x1 = 0;
- b->wds = n1 - 1;
- return b;
-}
-
-static int
-cmp
-#ifdef KR_headers
- (a, b) Bigint *a, *b;
-#else
- (Bigint *a, Bigint *b)
-#endif
-{
- unsigned32 *xa, *xa0, *xb, *xb0;
- int i, j;
-
- i = a->wds;
- j = b->wds;
-#ifdef DEBUG
- if (i > 1 && !a->x[i-1])
- Bug("cmp called with a->x[a->wds-1] == 0");
- if (j > 1 && !b->x[j-1])
- Bug("cmp called with b->x[b->wds-1] == 0");
-#endif
- if (i -= j)
- return i;
- xa0 = a->x;
- xa = xa0 + j;
- xb0 = b->x;
- xb = xb0 + j;
- for(;;) {
- if (*--xa != *--xb)
- return *xa < *xb ? -1 : 1;
- if (xa <= xa0)
- break;
- }
- return 0;
- }
-
-/* Do: c = a-b. */
-
-static Bigint *
-diff
-#ifdef KR_headers
- (c, a, b) Bigint *c, *a, *b;
-#else
- (Bigint *c, Bigint *a, Bigint *b)
-#endif
-{
- int i, wa, wb;
- _G_int32_t borrow, y; /* We need signed shifts here. */
- unsigned32 *xa, *xae, *xb, *xbe, *xc;
- _G_int32_t z;
-
- i = cmp(a,b);
- if (!i) {
- c = Brealloc(c, 0);
- c->wds = 1;
- c->x[0] = 0;
- return c;
- }
- if (i < 0) {
- Bigint *tmp = a;
- a = b;
- b = tmp;
- i = 1;
- }
- else
- i = 0;
- c = Brealloc(c, a->k);
- c->sign = i;
- wa = a->wds;
- xa = a->x;
- xae = xa + wa;
- wb = b->wds;
- xb = b->x;
- xbe = xb + wb;
- xc = c->x;
- borrow = 0;
- do {
- y = (*xa & 0xffff) - (*xb & 0xffff) + borrow;
- borrow = y >> 16;
- Sign_Extend(borrow, y);
- z = (*xa++ >> 16) - (*xb++ >> 16) + borrow;
- borrow = z >> 16;
- Sign_Extend(borrow, z);
- Storeinc(xc, z, y);
- }
- while(xb < xbe);
- while(xa < xae) {
- y = (*xa & 0xffff) + borrow;
- borrow = y >> 16;
- Sign_Extend(borrow, y);
- z = (*xa++ >> 16) + borrow;
- borrow = z >> 16;
- Sign_Extend(borrow, z);
- Storeinc(xc, z, y);
- }
- while(!*--xc)
- wa--;
- c->wds = wa;
- return c;
- }
-
-static double
-ulp
-#ifdef KR_headers
- (x) double x;
-#else
- (double x)
-#endif
-{
- register _G_int32_t L;
- double a;
-
- L = (word0(x) & Exp_mask) - (P-1)*Exp_msk1;
-#ifndef Sudden_Underflow
- if (L > 0) {
-#endif
-#ifdef IBM
- L |= Exp_msk1 >> 4;
-#endif
- setwords(a, L, 0);
-#ifndef Sudden_Underflow
- }
- else {
- L = -L >> Exp_shift;
- if (L < Exp_shift)
- setwords(a, 0x80000 >> L, 0);
- else {
- L -= Exp_shift;
- setwords(a, 0, L >= 31 ? 1 : 1 << (31 - L));
- }
- }
-#endif
- return a;
- }
-
-static double
-b2d
-#ifdef KR_headers
- (a, e) Bigint *a; int *e;
-#else
- (Bigint *a, int *e)
-#endif
-{
- unsigned32 *xa, *xa0, w, y, z;
- int k;
- double d;
- unsigned32 d0, d1;
-
- xa0 = a->x;
- xa = xa0 + a->wds;
- y = *--xa;
-#ifdef DEBUG
- if (!y) Bug("zero y in b2d");
-#endif
- k = hi0bits(y);
- *e = 32 - k;
- if (k < Ebits) {
- d0 = Exp_1 | y >> (Ebits - k);
- w = xa > xa0 ? *--xa : 0;
- d1 = y << ((32-Ebits) + k) | w >> (Ebits - k);
- goto ret_d;
- }
- z = xa > xa0 ? *--xa : 0;
- if (k -= Ebits) {
- d0 = Exp_1 | y << k | z >> (32 - k);
- y = xa > xa0 ? *--xa : 0;
- d1 = z << k | y >> (32 - k);
- }
- else {
- d0 = Exp_1 | y;
- d1 = z;
- }
- ret_d:
-#ifdef VAX
- setwords(d, d0 >> 16 | d0 << 16, d1 >> 16 | d1 << 16);
-#else
- setwords (d, d0, d1);
-#endif
- return d;
- }
-
-static Bigint *
-d2b
-#ifdef KR_headers
- (result, d, e, bits) Bigint *result; double d; int *e, *bits;
-#else
- (Bigint *result, double d, int *e, int *bits)
-#endif
-{
- int de, i, k;
- unsigned32 *x, y, z;
- unsigned32 d0, d1;
-#ifdef VAX
- d0 = word0(d) >> 16 | word0(d) << 16;
- d1 = word1(d) >> 16 | word1(d) << 16;
-#else
- d0 = word0(d);
- d1 = word1(d);
-#endif
-
- result = Brealloc(result, 1);
- x = result->x;
-
- z = d0 & Frac_mask;
- d0 &= 0x7fffffff; /* clear sign bit, which we ignore */
-
- de = (int)(d0 >> Exp_shift); /* The exponent part of d. */
-
- /* Put back the suppressed high-order bit, if normalized. */
-#ifndef IBM
-#ifndef Sudden_Underflow
- if (de)
-#endif
- z |= Exp_msk11;
-#endif
-
- if ((y = d1)) {
- if ((k = lo0bits(&y))) {
- x[0] = y | z << (32 - k);
- z >>= k;
- }
- else
- x[0] = y;
- i = result->wds = (x[1] = z) ? 2 : 1;
- }
- else {
-#ifdef DEBUG
- if (!z)
- Bug("Zero passed to d2b");
-#endif
- k = lo0bits(&z);
- x[0] = z;
- i = result->wds = 1;
- k += 32;
- }
-#ifndef Sudden_Underflow
- if (de) {
-#endif
-#ifdef IBM
- *e = (de - Bias - (P-1) << 2) + k;
- *bits = 4*P + 8 - k - hi0bits(word0(d) & Frac_mask);
-#else
- *e = de - Bias - (P-1) + k;
- *bits = P - k;
-#endif
-#ifndef Sudden_Underflow
- }
- else {
- *e = de - Bias - (P-1) + 1 + k;
- *bits = 32*i - hi0bits(x[i-1]);
- }
-#endif
- return result;
- }
-
-static double
-ratio
-#ifdef KR_headers
- (a, b) Bigint *a, *b;
-#else
- (Bigint *a, Bigint *b)
-#endif
-{
- double da, db;
- int k, ka, kb;
-
- da = b2d(a, &ka);
- db = b2d(b, &kb);
- k = ka - kb + 32*(a->wds - b->wds);
-#ifdef IBM
- if (k > 0) {
- addword0(da, (k >> 2)*Exp_msk1);
- if (k &= 3)
- da *= 1 << k;
- }
- else {
- k = -k;
- addword0(db,(k >> 2)*Exp_msk1);
- if (k &= 3)
- db *= 1 << k;
- }
-#else
- if (k > 0)
- addword0(da, k*Exp_msk1);
- else {
- k = -k;
- addword0(db, k*Exp_msk1);
- }
-#endif
- return da / db;
- }
-
-static CONST double
-tens[] = {
- 1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9,
- 1e10, 1e11, 1e12, 1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19,
- 1e20, 1e21, 1e22
-#ifdef VAX
- , 1e23, 1e24
-#endif
- };
-
-#ifdef IEEE_Arith
-static CONST double bigtens[] = { 1e16, 1e32, 1e64, 1e128, 1e256 };
-static CONST double tinytens[] = { 1e-16, 1e-32, 1e-64, 1e-128, 1e-256 };
-#define n_bigtens 5
-#else
-#ifdef IBM
-static CONST double bigtens[] = { 1e16, 1e32, 1e64 };
-static CONST double tinytens[] = { 1e-16, 1e-32, 1e-64 };
-#define n_bigtens 3
-#else
-static CONST double bigtens[] = { 1e16, 1e32 };
-static CONST double tinytens[] = { 1e-16, 1e-32 };
-#define n_bigtens 2
-#endif
-#endif
-
- double
-_IO_strtod
-#ifdef KR_headers
- (s00, se) CONST char *s00; char **se;
-#else
- (CONST char *s00, char **se)
-#endif
-{
- int bb2, bb5, bbe, bd2, bd5, bbbits, bs2, c, dsign,
- e, e1, esign, i, j, k, nd, nd0, nf, nz, nz0, sign;
- CONST char *s, *s0, *s1;
- double aadj, aadj1, adj, rv, rv0;
- _G_int32_t L;
- unsigned32 y, z;
- Bigint _bb, _b_avail, _bd, _bd0, _bs, _delta;
- Bigint *bb = Binit(&_bb);
- Bigint *bd = Binit(&_bd);
- Bigint *bd0 = Binit(&_bd0);
- Bigint *bs = Binit(&_bs);
- Bigint *b_avail = Binit(&_b_avail);
- Bigint *delta = Binit(&_delta);
-
- TEST_ENDIANNESS;
- sign = nz0 = nz = 0;
- rv = 0.;
- (void)&rv; /* Force rv into the stack */
- for(s = s00;;s++) switch(*s) {
- case '-':
- sign = 1;
- /* no break */
- case '+':
- if (*++s)
- goto break2;
- /* no break */
- case 0:
- /* "+" and "-" should be reported as an error? */
- sign = 0;
- s = s00;
- goto ret;
- case '\t':
- case '\n':
- case '\v':
- case '\f':
- case '\r':
- case ' ':
- continue;
- default:
- goto break2;
- }
- break2:
- if (*s == '0') {
- nz0 = 1;
- while(*++s == '0') ;
- if (!*s)
- goto ret;
- }
- s0 = s;
- y = z = 0;
- for(nd = nf = 0; (c = *s) >= '0' && c <= '9'; nd++, s++)
- if (nd < 9)
- y = 10*y + c - '0';
- else if (nd < 16)
- z = 10*z + c - '0';
- nd0 = nd;
- if (c == '.') {
- c = *++s;
- if (!nd) {
- for(; c == '0'; c = *++s)
- nz++;
- if (c > '0' && c <= '9') {
- s0 = s;
- nf += nz;
- nz = 0;
- goto have_dig;
- }
- goto dig_done;
- }
- for(; c >= '0' && c <= '9'; c = *++s) {
- have_dig:
- nz++;
- if (c -= '0') {
- nf += nz;
- for(i = 1; i < nz; i++)
- if (nd++ < 9)
- y *= 10;
- else if (nd <= DBL_DIG + 1)
- z *= 10;
- if (nd++ < 9)
- y = 10*y + c;
- else if (nd <= DBL_DIG + 1)
- z = 10*z + c;
- nz = 0;
- }
- }
- }
- dig_done:
- e = 0;
- if (c == 'e' || c == 'E') {
- if (!nd && !nz && !nz0) {
- s = s00;
- goto ret;
- }
- s00 = s;
- esign = 0;
- switch(c = *++s) {
- case '-':
- esign = 1;
- case '+':
- c = *++s;
- }
- if (c >= '0' && c <= '9') {
- while(c == '0')
- c = *++s;
- if (c > '0' && c <= '9') {
- e = c - '0';
- s1 = s;
- while((c = *++s) >= '0' && c <= '9')
- e = 10*e + c - '0';
- if (s - s1 > 8)
- /* Avoid confusion from exponents
- * so large that e might overflow.
- */
- e = 9999999;
- if (esign)
- e = -e;
- }
- else
- e = 0;
- }
- else
- s = s00;
- }
- if (!nd) {
- if (!nz && !nz0)
- s = s00;
- goto ret;
- }
- e1 = e -= nf;
-
- /* Now we have nd0 digits, starting at s0, followed by a
- * decimal point, followed by nd-nd0 digits. The number we're
- * after is the integer represented by those digits times
- * 10**e */
-
- if (!nd0)
- nd0 = nd;
- k = nd < DBL_DIG + 1 ? nd : DBL_DIG + 1;
- rv = y;
- if (k > 9)
- rv = tens[k - 9] * rv + z;
- if (nd <= DBL_DIG
-#ifndef RND_PRODQUOT
- && FLT_ROUNDS == 1
-#endif
- ) {
- if (!e)
- goto ret;
- if (e > 0) {
- if (e <= Ten_pmax) {
-#ifdef VAX
- goto vax_ovfl_check;
-#else
- /* rv = */ rounded_product(rv, tens[e]);
- goto ret;
-#endif
- }
- i = DBL_DIG - nd;
- if (e <= Ten_pmax + i) {
- /* A fancier test would sometimes let us do
- * this for larger i values.
- */
- e -= i;
- rv *= tens[i];
-#ifdef VAX
- /* VAX exponent range is so narrow we must
- * worry about overflow here...
- */
- vax_ovfl_check:
- addword0(rv, - P*Exp_msk1);
- /* rv = */ rounded_product(rv, tens[e]);
- if ((word0(rv) & Exp_mask)
- > Exp_msk1*(DBL_MAX_EXP+Bias-1-P))
- goto ovfl;
- addword0(rv, P*Exp_msk1);
-#else
- /* rv = */ rounded_product(rv, tens[e]);
-#endif
- goto ret;
- }
- }
-#ifndef Inaccurate_Divide
- else if (e >= -Ten_pmax) {
- /* rv = */ rounded_quotient(rv, tens[-e]);
- goto ret;
- }
-#endif
- }
- e1 += nd - k;
-
- /* Get starting approximation = rv * 10**e1 */
-
- if (e1 > 0) {
- if ((i = e1 & 15))
- rv *= tens[i];
- if (e1 &= ~15) {
- if (e1 > DBL_MAX_10_EXP) {
- ovfl:
- errno = ERANGE;
-#if defined(sun) && !defined(__svr4__)
-/* SunOS defines HUGE_VAL as __infinity(), which is in libm. */
-#undef HUGE_VAL
-#endif
-#ifndef HUGE_VAL
-#define HUGE_VAL 1.7976931348623157E+308
-#endif
- rv = HUGE_VAL;
- goto ret;
- }
- if (e1 >>= 4) {
- for(j = 0; e1 > 1; j++, e1 >>= 1)
- if (e1 & 1)
- rv *= bigtens[j];
- /* The last multiplication could overflow. */
- addword0(rv, -P*Exp_msk1);
- rv *= bigtens[j];
- if ((z = word0(rv) & Exp_mask)
- > Exp_msk1*(DBL_MAX_EXP+Bias-P))
- goto ovfl;
- if (z > Exp_msk1*(DBL_MAX_EXP+Bias-1-P)) {
- /* set to largest number */
- /* (Can't trust DBL_MAX) */
- setwords(rv, Big0, Big1);
- }
- else
- addword0(rv, P*Exp_msk1);
- }
-
- }
- }
- else if (e1 < 0) {
- e1 = -e1;
- if ((i = e1 & 15))
- rv /= tens[i];
- if (e1 &= ~15) {
- e1 >>= 4;
- for(j = 0; e1 > 1; j++, e1 >>= 1)
- if (e1 & 1)
- rv *= tinytens[j];
- /* The last multiplication could underflow. */
- rv0 = rv;
- rv *= tinytens[j];
- if (!rv) {
- rv = 2.*rv0;
- rv *= tinytens[j];
- if (!rv) {
- undfl:
- rv = 0.;
- errno = ERANGE;
- goto ret;
- }
- setwords(rv, Tiny0, Tiny1);
- /* The refinement below will clean
- * this approximation up.
- */
- }
- }
- }
-
- /* Now the hard part -- adjusting rv to the correct value.*/
-
- /* Put digits into bd: true value = bd * 10^e */
-
- bd0 = s2b(bd0, s0, nd0, nd, y);
- bd = Brealloc(bd, bd0->k);
-
- for(;;) {
- Bcopy(bd, bd0);
- bb = d2b(bb, rv, &bbe, &bbbits); /* rv = bb * 2^bbe */
- bs = i2b(bs, 1);
-
- if (e >= 0) {
- bb2 = bb5 = 0;
- bd2 = bd5 = e;
- }
- else {
- bb2 = bb5 = -e;
- bd2 = bd5 = 0;
- }
- if (bbe >= 0)
- bb2 += bbe;
- else
- bd2 -= bbe;
- bs2 = bb2;
-#ifdef Sudden_Underflow
-#ifdef IBM
- j = 1 + 4*P - 3 - bbbits + ((bbe + bbbits - 1) & 3);
-#else
- j = P + 1 - bbbits;
-#endif
-#else
- i = bbe + bbbits - 1; /* logb(rv) */
- if (i < Emin) /* denormal */
- j = bbe + (P-Emin);
- else
- j = P + 1 - bbbits;
-#endif
- bb2 += j;
- bd2 += j;
- i = bb2 < bd2 ? bb2 : bd2;
- if (i > bs2)
- i = bs2;
- if (i > 0) {
- bb2 -= i;
- bd2 -= i;
- bs2 -= i;
- }
- if (bb5 > 0) {
- Bigint *b_tmp;
- bs = pow5mult(bs, bb5);
- b_tmp = mult(b_avail, bs, bb);
- b_avail = bb;
- bb = b_tmp;
- }
- if (bb2 > 0)
- bb = lshift(bb, bb2);
- if (bd5 > 0)
- bd = pow5mult(bd, bd5);
- if (bd2 > 0)
- bd = lshift(bd, bd2);
- if (bs2 > 0)
- bs = lshift(bs, bs2);
- delta = diff(delta, bb, bd);
- dsign = delta->sign;
- delta->sign = 0;
- i = cmp(delta, bs);
- if (i < 0) {
- /* Error is less than half an ulp -- check for
- * special case of mantissa a power of two.
- */
- if (dsign || word1(rv) || word0(rv) & Bndry_mask)
- break;
- delta = lshift(delta,Log2P);
- if (cmp(delta, bs) > 0)
- goto drop_down;
- break;
- }
- if (i == 0) {
- /* exactly half-way between */
- if (dsign) {
- if ((word0(rv) & Bndry_mask1) == Bndry_mask1
- && word1(rv) == 0xffffffff) {
- /*boundary case -- increment exponent*/
- setword0(rv, (word0(rv) & Exp_mask)
- + Exp_msk1);
-#ifdef IBM
- setword0 (rv,
- word0(rv) | (Exp_msk1 >> 4));
-#endif
- setword1(rv, 0);
- break;
- }
- }
- else if (!(word0(rv) & Bndry_mask) && !word1(rv)) {
- drop_down:
- /* boundary case -- decrement exponent */
-#ifdef Sudden_Underflow
- L = word0(rv) & Exp_mask;
-#ifdef IBM
- if (L < Exp_msk1)
-#else
- if (L <= Exp_msk1)
-#endif
- goto undfl;
- L -= Exp_msk1;
-#else
- L = (word0(rv) & Exp_mask) - Exp_msk1;
-#endif
- setwords(rv, L | Bndry_mask1, 0xffffffff);
-#ifdef IBM
- continue;
-#else
- break;
-#endif
- }
-#ifndef ROUND_BIASED
- if (!(word1(rv) & LSB))
- break;
-#endif
- if (dsign)
- rv += ulp(rv);
-#ifndef ROUND_BIASED
- else {
- rv -= ulp(rv);
-#ifndef Sudden_Underflow
- if (!rv)
- goto undfl;
-#endif
- }
-#endif
- break;
- }
- if ((aadj = ratio(delta, bs)) <= 2.) {
- if (dsign)
- aadj = aadj1 = 1.;
- else if (word1(rv) || word0(rv) & Bndry_mask) {
-#ifndef Sudden_Underflow
- if (word1(rv) == Tiny1 && !word0(rv))
- goto undfl;
-#endif
- aadj = 1.;
- aadj1 = -1.;
- }
- else {
- /* special case -- power of FLT_RADIX to be */
- /* rounded down... */
-
- if (aadj < 2./FLT_RADIX)
- aadj = 1./FLT_RADIX;
- else
- aadj *= 0.5;
- aadj1 = -aadj;
- }
- }
- else {
- aadj *= 0.5;
- aadj1 = dsign ? aadj : -aadj;
-#ifdef Check_FLT_ROUNDS
- switch(FLT_ROUNDS) {
- case 2: /* towards +infinity */
- aadj1 -= 0.5;
- break;
- case 0: /* towards 0 */
- case 3: /* towards -infinity */
- aadj1 += 0.5;
- }
-#else
- if (FLT_ROUNDS == 0)
- aadj1 += 0.5;
-#endif
- }
- y = word0(rv) & Exp_mask;
-
- /* Check for overflow */
-
- if (y == Exp_msk1*(DBL_MAX_EXP+Bias-1)) {
- rv0 = rv;
- addword0(rv, - P*Exp_msk1);
- adj = aadj1 * ulp(rv);
- rv += adj;
- if ((word0(rv) & Exp_mask) >=
- Exp_msk1*(DBL_MAX_EXP+Bias-P)) {
- if (word0(rv0) == Big0 && word1(rv0) == Big1)
- goto ovfl;
- setwords(rv, Big0, Big1);
- continue;
- }
- else
- addword0(rv, P*Exp_msk1);
- }
- else {
-#ifdef Sudden_Underflow
- if ((word0(rv) & Exp_mask) <= P*Exp_msk1) {
- rv0 = rv;
- addword0(rv, P*Exp_msk1);
- adj = aadj1 * ulp(rv);
- rv += adj;
-#ifdef IBM
- if ((word0(rv) & Exp_mask) < P*Exp_msk1)
-#else
- if ((word0(rv) & Exp_mask) <= P*Exp_msk1)
-#endif
- {
- if (word0(rv0) == Tiny0
- && word1(rv0) == Tiny1)
- goto undfl;
- setwords(rv, Tiny0, Tiny1);
- continue;
- }
- else
- addword0(rv, -P*Exp_msk1);
- }
- else {
- adj = aadj1 * ulp(rv);
- rv += adj;
- }
-#else
- /* Compute adj so that the IEEE rounding rules will
- * correctly round rv + adj in some half-way cases.
- * If rv * ulp(rv) is denormalized (i.e.,
- * y <= (P-1)*Exp_msk1), we must adjust aadj to avoid
- * trouble from bits lost to denormalization;
- * example: 1.2e-307 .
- */
- if (y <= (P-1)*Exp_msk1 && aadj >= 1.) {
- aadj1 = (double)(int)(aadj + 0.5);
- if (!dsign)
- aadj1 = -aadj1;
- }
- adj = aadj1 * ulp(rv);
- rv += adj;
-#endif
- }
- z = word0(rv) & Exp_mask;
- if (y == z) {
- /* Can we stop now? */
- L = (_G_int32_t)aadj;
- aadj -= L;
- /* The tolerances below are conservative. */
- if (dsign || word1(rv) || word0(rv) & Bndry_mask) {
- if (aadj < .4999999 || aadj > .5000001)
- break;
- }
- else if (aadj < .4999999/FLT_RADIX)
- break;
- }
- }
- Bfree(bb);
- Bfree(bd);
- Bfree(bs);
- Bfree(bd0);
- Bfree(delta);
- Bfree(b_avail);
- ret:
- if (se)
- *se = (char *)s;
- return sign ? -rv : rv;
- }
-
-static int
-quorem
-#ifdef KR_headers
- (b, S) Bigint *b, *S;
-#else
- (Bigint *b, Bigint *S)
-#endif
-{
- int n;
- _G_int32_t borrow, y;
- unsigned32 carry, q, ys;
- unsigned32 *bx, *bxe, *sx, *sxe;
- _G_int32_t z;
- unsigned32 si, zs;
-
- n = S->wds;
-#ifdef DEBUG
- /*debug*/ if (b->wds > n)
- /*debug*/ Bug("oversize b in quorem");
-#endif
- if (b->wds < n)
- return 0;
- sx = S->x;
- sxe = sx + --n;
- bx = b->x;
- bxe = bx + n;
- q = *bxe / (*sxe + 1); /* ensure q <= true quotient */
-#ifdef DEBUG
- /*debug*/ if (q > 9)
- /*debug*/ Bug("oversized quotient in quorem");
-#endif
- if (q) {
- borrow = 0;
- carry = 0;
- do {
- si = *sx++;
- ys = (si & 0xffff) * q + carry;
- zs = (si >> 16) * q + (ys >> 16);
- carry = zs >> 16;
- y = (*bx & 0xffff) - (ys & 0xffff) + borrow;
- borrow = y >> 16;
- Sign_Extend(borrow, y);
- z = (*bx >> 16) - (zs & 0xffff) + borrow;
- borrow = z >> 16;
- Sign_Extend(borrow, z);
- Storeinc(bx, z, y);
- }
- while(sx <= sxe);
- if (!*bxe) {
- bx = b->x;
- while(--bxe > bx && !*bxe)
- --n;
- b->wds = n;
- }
- }
- if (cmp(b, S) >= 0) {
- q++;
- borrow = 0;
- carry = 0;
- bx = b->x;
- sx = S->x;
- do {
- si = *sx++;
- ys = (si & 0xffff) + carry;
- zs = (si >> 16) + (ys >> 16);
- carry = zs >> 16;
- y = (*bx & 0xffff) - (ys & 0xffff) + borrow;
- borrow = y >> 16;
- Sign_Extend(borrow, y);
- z = (*bx >> 16) - (zs & 0xffff) + borrow;
- borrow = z >> 16;
- Sign_Extend(borrow, z);
- Storeinc(bx, z, y);
- }
- while(sx <= sxe);
- bx = b->x;
- bxe = bx + n;
- if (!*bxe) {
- while(--bxe > bx && !*bxe)
- --n;
- b->wds = n;
- }
- }
- return q;
- }
-
-/* dtoa for IEEE arithmetic (dmg): convert double to ASCII string.
- *
- * Inspired by "How to Print Floating-Point Numbers Accurately" by
- * Guy L. Steele, Jr. and Jon L. White [Proc. ACM SIGPLAN '90, pp. 92-101].
- *
- * Modifications:
- * 1. Rather than iterating, we use a simple numeric overestimate
- * to determine k = floor(log10(d)). We scale relevant
- * quantities using O(log2(k)) rather than O(k) multiplications.
- * 2. For some modes > 2 (corresponding to ecvt and fcvt), we don't
- * try to generate digits strictly left to right. Instead, we
- * compute with fewer bits and propagate the carry if necessary
- * when rounding the final digit up. This is often faster.
- * 3. Under the assumption that input will be rounded nearest,
- * mode 0 renders 1e23 as 1e23 rather than 9.999999999999999e22.
- * That is, we allow equality in stopping tests when the
- * round-nearest rule will give the same floating-point value
- * as would satisfaction of the stopping test with strict
- * inequality.
- * 4. We remove common factors of powers of 2 from relevant
- * quantities.
- * 5. When converting floating-point integers less than 1e16,
- * we use floating-point arithmetic rather than resorting
- * to multiple-precision integers.
- * 6. When asked to produce fewer than 15 digits, we first try
- * to get by with floating-point arithmetic; we resort to
- * multiple-precision integer arithmetic only if we cannot
- * guarantee that the floating-point calculation has given
- * the correctly rounded result. For k requested digits and
- * "uniformly" distributed input, the probability is
- * something like 10^(k-15) that we must resort to the long
- * calculation.
- */
-
- char *
-_IO_dtoa
-#ifdef KR_headers
- (d, mode, ndigits, decpt, sign, rve)
- double d; int mode, ndigits, *decpt, *sign; char **rve;
-#else
- (double d, int mode, int ndigits, int *decpt, int *sign, char **rve)
-#endif
-{
- /* Arguments ndigits, decpt, sign are similar to those
- of ecvt and fcvt; trailing zeros are suppressed from
- the returned string. If not null, *rve is set to point
- to the end of the return value. If d is +-Infinity or NaN,
- then *decpt is set to 9999.
-
- mode:
- 0 ==> shortest string that yields d when read in
- and rounded to nearest.
- 1 ==> like 0, but with Steele & White stopping rule;
- e.g. with IEEE P754 arithmetic , mode 0 gives
- 1e23 whereas mode 1 gives 9.999999999999999e22.
- 2 ==> max(1,ndigits) significant digits. This gives a
- return value similar to that of ecvt, except
- that trailing zeros are suppressed.
- 3 ==> through ndigits past the decimal point. This
- gives a return value similar to that from fcvt,
- except that trailing zeros are suppressed, and
- ndigits can be negative.
- 4-9 should give the same return values as 2-3, i.e.,
- 4 <= mode <= 9 ==> same return as mode
- 2 + (mode & 1). These modes are mainly for
- debugging; often they run slower but sometimes
- faster than modes 2-3.
- 4,5,8,9 ==> left-to-right digit generation.
- 6-9 ==> don't try fast floating-point estimate
- (if applicable).
-
- Values of mode other than 0-9 are treated as mode 0.
-
- Sufficient space is allocated to the return value
- to hold the suppressed trailing zeros.
- */
-
- int bbits, b2, b5, be, dig, i, ieps, ilim, ilim0, ilim1,
- j, j1, k, k0, k_check, leftright, m2, m5, s2, s5,
- spec_case, try_quick;
- _G_int32_t L;
-#ifndef Sudden_Underflow
- int denorm;
-#endif
- Bigint _b_avail, _b, _mhi, _mlo, _S;
- Bigint *b_avail = Binit(&_b_avail);
- Bigint *b = Binit(&_b);
- Bigint *S = Binit(&_S);
- /* mhi and mlo are only set and used if leftright. */
- Bigint *mhi = NULL, *mlo = NULL;
- double d2, ds, eps;
- char *s, *s0;
- static Bigint *result = NULL;
- static int result_k;
-
- TEST_ENDIANNESS;
- if (result) {
- /* result is contains a string, so its fields (interpreted
- as a Bigint have been trashed. Restore them.
- This is a really ugly interface - result should
- not be static, since that is not thread-safe. FIXME. */
- result->k = result_k;
- result->maxwds = 1 << result_k;
- result->on_stack = 0;
- }
-
- if (word0(d) & Sign_bit) {
- /* set sign for everything, including 0's and NaNs */
- *sign = 1;
- setword0(d, word0(d) & ~Sign_bit); /* clear sign bit */
- }
- else
- *sign = 0;
-
-#if defined(IEEE_Arith) + defined(VAX)
-#ifdef IEEE_Arith
- if ((word0(d) & Exp_mask) == Exp_mask)
-#else
- if (word0(d) == 0x8000)
-#endif
- {
- /* Infinity or NaN */
- *decpt = 9999;
-#ifdef IEEE_Arith
- if (!word1(d) && !(word0(d) & 0xfffff))
- {
- s = "Infinity";
- if (rve)
- *rve = s + 8;
- }
- else
-#endif
- {
- s = "NaN";
- if (rve)
- *rve = s +3;
- }
- return s;
- }
-#endif
-#ifdef IBM
- d += 0; /* normalize */
-#endif
- if (!d) {
- *decpt = 1;
- s = "0";
- if (rve)
- *rve = s + 1;
- return s;
- }
-
- b = d2b(b, d, &be, &bbits);
- i = (int)(word0(d) >> Exp_shift1 & (Exp_mask>>Exp_shift1));
-#ifndef Sudden_Underflow
- if (i) {
-#endif
- d2 = d;
- setword0(d2, (word0(d2) & Frac_mask1) | Exp_11);
-#ifdef IBM
- if (j = 11 - hi0bits(word0(d2) & Frac_mask))
- d2 /= 1 << j;
-#endif
-
- i -= Bias;
-#ifdef IBM
- i <<= 2;
- i += j;
-#endif
-#ifndef Sudden_Underflow
- denorm = 0;
- }
- else {
- /* d is denormalized */
- unsigned32 x;
-
- i = bbits + be + (Bias + (P-1) - 1);
- x = i > 32 ? word0(d) << (64 - i) | word1(d) >> (i - 32)
- : word1(d) << (32 - i);
- d2 = x;
- addword0(d2, - 31*Exp_msk1); /* adjust exponent */
- i -= (Bias + (P-1) - 1) + 1;
- denorm = 1;
- }
-#endif
-
- /* Now i is the unbiased base-2 exponent. */
-
- /* log(x) ~=~ log(1.5) + (x-1.5)/1.5
- * log10(x) = log(x) / log(10)
- * ~=~ log(1.5)/log(10) + (x-1.5)/(1.5*log(10))
- * log10(d) = i*log(2)/log(10) + log10(d2)
- *
- * This suggests computing an approximation k to log10(d) by
- *
- * k = i*0.301029995663981
- * + ( (d2-1.5)*0.289529654602168 + 0.176091259055681 );
- *
- * We want k to be too large rather than too small.
- * The error in the first-order Taylor series approximation
- * is in our favor, so we just round up the constant enough
- * to compensate for any error in the multiplication of
- * (i) by 0.301029995663981; since |i| <= 1077,
- * and 1077 * 0.30103 * 2^-52 ~=~ 7.2e-14,
- * adding 1e-13 to the constant term more than suffices.
- * Hence we adjust the constant term to 0.1760912590558.
- * (We could get a more accurate k by invoking log10,
- * but this is probably not worthwhile.)
- */
-
- ds = (d2-1.5)*0.289529654602168 + 0.1760912590558 + i*0.301029995663981;
- k = (int)ds;
- if (ds < 0. && ds != k)
- k--; /* want k = floor(ds) */
- k_check = 1;
- if (k >= 0 && k <= Ten_pmax) {
- if (d < tens[k])
- k--;
- k_check = 0;
- }
- j = bbits - i - 1;
- if (j >= 0) {
- b2 = 0;
- s2 = j;
- }
- else {
- b2 = -j;
- s2 = 0;
- }
- if (k >= 0) {
- b5 = 0;
- s5 = k;
- s2 += k;
- }
- else {
- b2 -= k;
- b5 = -k;
- s5 = 0;
- }
- if (mode < 0 || mode > 9)
- mode = 0;
- try_quick = 1;
- if (mode > 5) {
- mode -= 4;
- try_quick = 0;
- }
- leftright = 1;
- switch(mode) {
- case 0:
- case 1:
- ilim = ilim1 = -1;
- i = 18;
- ndigits = 0;
- break;
- case 2:
- leftright = 0;
- /* no break */
- case 4:
- if (ndigits <= 0)
- ndigits = 1;
- ilim = ilim1 = i = ndigits;
- break;
- case 3:
- leftright = 0;
- /* no break */
- case 5:
- i = ndigits + k + 1;
- ilim = i;
- ilim1 = i - 1;
- if (i <= 0)
- i = 1;
- }
- /* i is now an upper bound of the number of digits to generate. */
- j = sizeof(unsigned32) * (1<<BIGINT_MINIMUM_K);
- /* The test is <= so as to allow room for the final '\0'. */
- for(result_k = BIGINT_MINIMUM_K; BIGINT_HEADER_SIZE + j <= i;
- j <<= 1) result_k++;
- if (!result || result_k > result->k)
- {
- Bfree (result);
- result = Balloc(result_k);
- }
- s = s0 = (char *)result;
-
- if (ilim >= 0 && ilim <= Quick_max && try_quick) {
-
- /* Try to get by with floating-point arithmetic. */
-
- i = 0;
- d2 = d;
- k0 = k;
- ilim0 = ilim;
- ieps = 2; /* conservative */
- if (k > 0) {
- ds = tens[k&0xf];
- j = k >> 4;
- if (j & Bletch) {
- /* prevent overflows */
- j &= Bletch - 1;
- d /= bigtens[n_bigtens-1];
- ieps++;
- }
- for(; j; j >>= 1, i++)
- if (j & 1) {
- ieps++;
- ds *= bigtens[i];
- }
- d /= ds;
- }
- else if ((j1 = -k)) {
- d *= tens[j1 & 0xf];
- for(j = j1 >> 4; j; j >>= 1, i++)
- if (j & 1) {
- ieps++;
- d *= bigtens[i];
- }
- }
- if (k_check && d < 1. && ilim > 0) {
- if (ilim1 <= 0)
- goto fast_failed;
- ilim = ilim1;
- k--;
- d *= 10.;
- ieps++;
- }
- eps = ieps*d + 7.;
- addword0(eps, - (P-1)*Exp_msk1);
- if (ilim == 0) {
- d -= 5.;
- if (d > eps)
- goto one_digit;
- if (d < -eps)
- goto no_digits;
- goto fast_failed;
- }
-#ifndef No_leftright
- if (leftright) {
- /* Use Steele & White method of only
- * generating digits needed.
- */
- eps = 0.5/tens[ilim-1] - eps;
- for(i = 0;;) {
- L = (_G_int32_t)d;
- d -= L;
- *s++ = '0' + (int)L;
- if (d < eps)
- goto ret1;
- if (1. - d < eps)
- goto bump_up;
- if (++i >= ilim)
- break;
- eps *= 10.;
- d *= 10.;
- }
- }
- else {
-#endif
- /* Generate ilim digits, then fix them up. */
- eps *= tens[ilim-1];
- for(i = 1;; i++, d *= 10.) {
- L = (_G_int32_t)d;
- d -= L;
- *s++ = '0' + (int)L;
- if (i == ilim) {
- if (d > 0.5 + eps)
- goto bump_up;
- else if (d < 0.5 - eps) {
- while(*--s == '0');
- s++;
- goto ret1;
- }
- break;
- }
- }
-#ifndef No_leftright
- }
-#endif
- fast_failed:
- s = s0;
- d = d2;
- k = k0;
- ilim = ilim0;
- }
-
- /* Do we have a "small" integer? */
-
- if (be >= 0 && k <= Int_max) {
- /* Yes. */
- ds = tens[k];
- if (ndigits < 0 && ilim <= 0) {
- if (ilim < 0 || d <= 5*ds)
- goto no_digits;
- goto one_digit;
- }
- for(i = 1;; i++) {
- L = (_G_int32_t)(d / ds);
- d -= L*ds;
-#ifdef Check_FLT_ROUNDS
- /* If FLT_ROUNDS == 2, L will usually be high by 1 */
- if (d < 0) {
- L--;
- d += ds;
- }
-#endif
- *s++ = '0' + (int)L;
- if (i == ilim) {
- d += d;
- if (d > ds || (d == ds && L & 1)) {
- bump_up:
- while(*--s == '9')
- if (s == s0) {
- k++;
- *s = '0';
- break;
- }
- ++*s++;
- }
- break;
- }
- if (!(d *= 10.))
- break;
- }
- goto ret1;
- }
-
- m2 = b2;
- m5 = b5;
- if (leftright) {
- if (mode < 2) {
- i =
-#ifndef Sudden_Underflow
- denorm ? be + (Bias + (P-1) - 1 + 1) :
-#endif
-#ifdef IBM
- 1 + 4*P - 3 - bbits + ((bbits + be - 1) & 3);
-#else
- 1 + P - bbits;
-#endif
- }
- else {
- j = ilim - 1;
- if (m5 >= j)
- m5 -= j;
- else {
- s5 += j -= m5;
- b5 += j;
- m5 = 0;
- }
- if ((i = ilim) < 0) {
- m2 -= i;
- i = 0;
- }
- }
- b2 += i;
- s2 += i;
- mhi = i2b(Binit(&_mhi), 1);
- }
- if (m2 > 0 && s2 > 0) {
- i = m2 < s2 ? m2 : s2;
- b2 -= i;
- m2 -= i;
- s2 -= i;
- }
- if (b5 > 0) {
- if (leftright) {
- if (m5 > 0) {
- Bigint *b_tmp;
- mhi = pow5mult(mhi, m5);
- b_tmp = mult(b_avail, mhi, b);
- b_avail = b;
- b = b_tmp;
- }
- if ((j = b5 - m5))
- b = pow5mult(b, j);
- }
- else
- b = pow5mult(b, b5);
- }
- S = i2b(S, 1);
- if (s5 > 0)
- S = pow5mult(S, s5);
-
- /* Check for special case that d is a normalized power of 2. */
-
- if (mode < 2) {
- if (!word1(d) && !(word0(d) & Bndry_mask)
-#ifndef Sudden_Underflow
- && word0(d) & Exp_mask
-#endif
- ) {
- /* The special case */
- b2 += Log2P;
- s2 += Log2P;
- spec_case = 1;
- }
- else
- spec_case = 0;
- }
-
- /* Arrange for convenient computation of quotients:
- * shift left if necessary so divisor has 4 leading 0 bits.
- *
- * Perhaps we should just compute leading 28 bits of S once
- * and for all and pass them and a shift to quorem, so it
- * can do shifts and ors to compute the numerator for q.
- */
- if ((i = ((s5 ? 32 - hi0bits(S->x[S->wds-1]) : 1) + s2) & 0x1f))
- i = 32 - i;
- if (i > 4) {
- i -= 4;
- b2 += i;
- m2 += i;
- s2 += i;
- }
- else if (i < 4) {
- i += 28;
- b2 += i;
- m2 += i;
- s2 += i;
- }
- if (b2 > 0)
- b = lshift(b, b2);
- if (s2 > 0)
- S = lshift(S, s2);
- if (k_check) {
- if (cmp(b,S) < 0) {
- k--;
- b = multadd(b, 10, 0); /* we botched the k estimate */
- if (leftright)
- mhi = multadd(mhi, 10, 0);
- ilim = ilim1;
- }
- }
- if (ilim <= 0 && mode > 2) {
- if (ilim < 0 || cmp(b,S = multadd(S,5,0)) <= 0) {
- /* no digits, fcvt style */
- no_digits:
- k = -1 - ndigits;
- goto ret;
- }
- one_digit:
- *s++ = '1';
- k++;
- goto ret;
- }
- if (leftright) {
- if (m2 > 0)
- mhi = lshift(mhi, m2);
-
- /* Compute mlo -- check for special case
- * that d is a normalized power of 2.
- */
-
- if (spec_case) {
- mlo = Brealloc(Binit(&_mlo), mhi->k);
- Bcopy(mlo, mhi);
- mhi = lshift(mhi, Log2P);
- }
- else
- mlo = mhi;
-
- for(i = 1;;i++) {
- dig = quorem(b,S) + '0';
- /* Do we yet have the shortest decimal string
- * that will round to d?
- */
- j = cmp(b, mlo);
- b_avail = diff(b_avail, S, mhi); /* b_avail = S - mi */
- j1 = b_avail->sign ? 1 : cmp(b, b_avail);
-#ifndef ROUND_BIASED
- if (j1 == 0 && !mode && !(word1(d) & 1)) {
- if (dig == '9')
- goto round_9_up;
- if (j > 0)
- dig++;
- *s++ = dig;
- goto ret;
- }
-#endif
- if (j < 0 || (j == 0 && !mode
-#ifndef ROUND_BIASED
- && !(word1(d) & 1)
-#endif
- )) {
- if (j1 > 0) {
- b = lshift(b, 1);
- j1 = cmp(b, S);
- if ((j1 > 0 || (j1 == 0 && dig & 1))
- && dig++ == '9')
- goto round_9_up;
- }
- *s++ = dig;
- goto ret;
- }
- if (j1 > 0) {
- if (dig == '9') { /* possible if i == 1 */
- round_9_up:
- *s++ = '9';
- goto roundoff;
- }
- *s++ = dig + 1;
- goto ret;
- }
- *s++ = dig;
- if (i == ilim)
- break;
- b = multadd(b, 10, 0);
- if (mlo == mhi)
- mlo = mhi = multadd(mhi, 10, 0);
- else {
- mlo = multadd(mlo, 10, 0);
- mhi = multadd(mhi, 10, 0);
- }
- }
- }
- else
- for(i = 1;; i++) {
- *s++ = dig = quorem(b,S) + '0';
- if (i >= ilim)
- break;
- b = multadd(b, 10, 0);
- }
-
- /* Round off last digit */
-
- b = lshift(b, 1);
- j = cmp(b, S);
- if (j > 0 || (j == 0 && dig & 1)) {
- roundoff:
- while(*--s == '9')
- if (s == s0) {
- k++;
- *s++ = '1';
- goto ret;
- }
- ++*s++;
- }
- else {
- while(*--s == '0');
- s++;
- }
- ret:
- Bfree(b_avail);
- Bfree(S);
- if (mhi) {
- if (mlo && mlo != mhi)
- Bfree(mlo);
- Bfree(mhi);
- }
- ret1:
- Bfree(b);
- *s = 0;
- *decpt = k + 1;
- if (rve)
- *rve = s;
- return s0;
- }
-#endif /* _IO_USE_DTOA */
diff --git a/contrib/libg++/libio/floatio.h b/contrib/libg++/libio/floatio.h
deleted file mode 100644
index 827767bde359..000000000000
--- a/contrib/libg++/libio/floatio.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-/*
- * Copyright (c) 1990 The Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms are permitted
- * provided that the above copyright notice and this paragraph are
- * duplicated in all such forms and that any documentation,
- * advertising materials, and other materials related to such
- * distribution and use acknowledge that the software was developed
- * by the University of California, Berkeley. The name of the
- * University may not be used to endorse or promote products derived
- * from this software without specific prior written permission.
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- *
- * %W% (Berkeley) %G%
- */
-
-/*
- * Floating point scanf/printf (input/output) definitions.
- */
-
-/* 11-bit exponent (VAX G floating point) is 308 decimal digits */
-#define MAXEXP 308
-/* 128 bit fraction takes up 39 decimal digits; max reasonable precision */
-#define MAXFRACT 39
diff --git a/contrib/libg++/libio/fstream.cc b/contrib/libg++/libio/fstream.cc
deleted file mode 100644
index 8930e0b9271f..000000000000
--- a/contrib/libg++/libio/fstream.cc
+++ /dev/null
@@ -1,110 +0,0 @@
-/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License.
-
-Written by Per Bothner (bothner@cygnus.com). */
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#define _STREAM_COMPAT
-extern "C" {
-#include "libioP.h"
-}
-#include <fstream.h>
-
-inline void
-fstreambase::__fb_init()
-{
-#ifdef _IO_NEW_STREAMS
-#if !_IO_UNIFIED_JUMPTABLES
- /* Uses the _IO_file_jump jumptable, for eficiency. */
- __my_fb._jumps = &_IO_file_jumps;
- __my_fb._vtable() = builtinbuf_vtable;
-#endif
- init (&__my_fb);
-#else
- init(filebuf::__new());
- _flags &= ~ios::dont_close;
-#endif
-}
-
-fstreambase::fstreambase()
-{
- __fb_init ();
-}
-
-fstreambase::fstreambase(int fd)
-{
- __fb_init ();
- _IO_file_attach(rdbuf(), fd);
-}
-
-fstreambase::fstreambase(const char *name, int mode, int prot)
-{
- __fb_init ();
- if (!rdbuf()->open(name, mode, prot))
- set(ios::badbit);
-}
-
-fstreambase::fstreambase(int fd, char *p, int l)
-{
-#ifdef _IO_NEW_STREAMS
- __fb_init ();
-#else
- init(filebuf::__new());
-#endif
- _IO_file_attach(rdbuf(), fd);
- _IO_file_setbuf(rdbuf(), p, l);
-}
-
-void fstreambase::open(const char *name, int mode, int prot)
-{
- clear();
- if (!rdbuf()->open(name, mode, prot))
- set(ios::badbit);
-}
-
-void fstreambase::close()
-{
- if (!rdbuf()->close())
- set(ios::failbit);
-}
-
-void fstreambase::attach(int fd)
-{
- if (!rdbuf()->attach(fd))
- set(ios::failbit);
-}
-
-#if 0
-static int mode_to_sys(enum open_mode mode)
-{
- return O_WRONLY;
-}
-
-static char* fopen_cmd_arg(io_mode i)
-{
- return "w";
-}
-#endif
diff --git a/contrib/libg++/libio/fstream.h b/contrib/libg++/libio/fstream.h
deleted file mode 100644
index ea98f5caed05..000000000000
--- a/contrib/libg++/libio/fstream.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#ifndef _FSTREAM_H
-#define _FSTREAM_H
-#ifdef __GNUG__
-#pragma interface
-#endif
-#include <iostream.h>
-
-extern "C++" {
-class fstreambase : virtual public ios {
-#ifdef _IO_NEW_STREAMS
- mutable filebuf __my_fb; // mutable so rdbuf() can be const
-#endif
- void __fb_init ();
- public:
- fstreambase();
- fstreambase(int fd);
- fstreambase(int fd, char *p, int l); /* Deprecated */
- fstreambase(const char *name, int mode, int prot=0664);
- void close();
-#ifdef _IO_NEW_STREAMS
- filebuf* rdbuf() const { return &__my_fb; }
-#else
- filebuf* rdbuf() const { return (filebuf*) ios::rdbuf(); }
-#endif
- void open(const char *name, int mode, int prot=0664);
- int is_open() const { return rdbuf()->is_open(); }
- void setbuf(char *ptr, int len) { rdbuf()->setbuf(ptr, len); }
- void attach(int fd);
-#ifdef _STREAM_COMPAT
- int filedesc() { return rdbuf()->fd(); }
- fstreambase& raw() { rdbuf()->setbuf(NULL, 0); return *this; }
-#endif
-};
-
-class ifstream : public fstreambase, public istream {
- public:
- ifstream() : fstreambase() { }
- ifstream(int fd) : fstreambase(fd) { }
- ifstream(int fd, char *p, int l) : fstreambase(fd, p, l) { } /*Deprecated*/
- ifstream(const char *name, int mode=ios::in, int prot=0664)
- : fstreambase(name, mode, prot) { }
- void open(const char *name, int mode=ios::in, int prot=0664)
- { fstreambase::open(name, mode, prot); }
-};
-
-class ofstream : public fstreambase, public ostream {
- public:
- ofstream() : fstreambase() { }
- ofstream(int fd) : fstreambase(fd) { }
- ofstream(int fd, char *p, int l) : fstreambase(fd, p, l) { } /*Deprecated*/
- ofstream(const char *name, int mode=ios::out, int prot=0664)
- : fstreambase(name, mode, prot) { }
- void open(const char *name, int mode=ios::out, int prot=0664)
- { fstreambase::open(name, mode, prot); }
-};
-
-class fstream : public fstreambase, public iostream {
- public:
- fstream() : fstreambase() { }
- fstream(int fd) : fstreambase(fd) { }
- fstream(const char *name, int mode, int prot=0664)
- : fstreambase(name, mode, prot) { }
- fstream(int fd, char *p, int l) : fstreambase(fd, p, l) { } /*Deprecated*/
- void open(const char *name, int mode, int prot=0664)
- { fstreambase::open(name, mode, prot); }
-};
-} // extern "C++"
-#endif /*!_FSTREAM_H*/
diff --git a/contrib/libg++/libio/gen-params b/contrib/libg++/libio/gen-params
deleted file mode 100755
index b6e51b042dd9..000000000000
--- a/contrib/libg++/libio/gen-params
+++ /dev/null
@@ -1,692 +0,0 @@
-#!/bin/sh
-# Copyright (C) 1992, 1993, 1994 Free Software Foundation
-#
-# This file is part of the GNU IO Library. This library is free
-# software; you can redistribute it and/or modify it under the
-# terms of the GNU General Public License as published by the
-# Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this library; see the file COPYING. If not, write to the Free
-# Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-# Written by Per Bothner (bothner@cygnus.com)
-
-# This is a shell-script that figures out various things about a
-# system, and writes (to stdout) a C-style include files with
-# suitable definitions, including all the standard Posix types.
-# It works by compiling various test programs -- some are run through
-# the C pre-processor, and the output examined.
-# The test programs are only compiled, not executed, so the script
-# should even if you're cross-compiling.
-# It uses $CC (which defaults to cc) to compile C programs (extension .c),
-# and $CXX (which defaults to gcc) to compile C++ programs (extension .C).
-# The shell-script is written for libg++.a.
-
-# Usage: gen-params [NAME1=name1 ...]
-# - where an assignment (such as size_t="unsigned int" means to
-# use that value, instead of trying to figure it out.
-
-# Uncomment following line for debugging
-# set -x
-
-SED=sed
-
-# Evaluate the arguments (which should be assignments):
-for arg in "$@"; do
- # Quote arg (i.e. FOO=bar => FOO='bar'), then eval it.
- eval `echo "$arg" | ${SED} -e "s|^\(.*\)=\(.*\)|\1='\2'|"`
-done
-
-macro_prefix=${macro_prefix-"_G_"}
-rootdir=`pwd`/..
-gccdir=${gccdir-${rootdir}/gcc}
-binutilsdir=${binutilsdir-${rootdir}/binutils}
-CC=${CC-`if [ -f ${gccdir}/xgcc ] ; \
- then echo ${gccdir}/xgcc -B${gccdir}/ ; \
- else echo cc ; fi`}
-CXX=${CXX-`if [ -f ${gccdir}/xgcc ] ; \
- then echo ${gccdir}/xgcc -B${gccdir}/ ; \
- else echo gcc ; fi`}
-CPP=${CPP-`echo ${CC} -E`}
-CONFIG_NM=${CONFIG_NM-`if [ -f ${binutilsdir}/nm.new ] ; \
- then echo ${binutilsdir}/nm.new ; \
- else echo nm ; fi`}
-
-cat <<!EOF!
-/* AUTOMATICALLY GENERATED; DO NOT EDIT! */
-#ifndef ${macro_prefix}config_h
-#define ${macro_prefix}config_h
-!EOF!
-
-if [ x"${LIB_VERSION}" != "x" ] ; then
- echo "#define ${macro_prefix}LIB_VERSION" '"'${LIB_VERSION}'"'
-fi
-
-# This program is used to test if the compiler prepends '_' before identifiers.
-# It is also used to check the g++ uses '$' or '.' various places.
-
-if test -z "${NAMES_HAVE_UNDERSCORE}" -o -z "${DOLLAR_IN_LABEL}" \
- -o -z "${VTABLE_LABEL_PREFIX}"; then
- cat >dummy.h <<!EOF!
-#ifdef __GNUG__
-#pragma interface
-#endif
- struct filebuf {
- virtual int foo();
- };
-!EOF!
- cat >dummy.C <<!EOF!
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include "dummy.h"
- int filebuf::foo() { return 0; }
- extern "C" int FUNC(int);
- int FUNC(int i) { return i+10; }
-!EOF!
-
- if ${CXX} -O -c dummy.C ; then
- if test -z "${NAMES_HAVE_UNDERSCORE}" ; then
- if test "`${CONFIG_NM} dummy.o | grep _FUNC`" != ""; then
- NAMES_HAVE_UNDERSCORE=1
- elif test "`${CONFIG_NM} dummy.o | grep FUNC`" != ""; then
- NAMES_HAVE_UNDERSCORE=0
- else
- echo "${CONFIG_NM} failed to find FUNC in dummy.o!" 1>&2; exit -1;
- fi
- fi
- echo "#define ${macro_prefix}NAMES_HAVE_UNDERSCORE ${NAMES_HAVE_UNDERSCORE}"
-
- if test -z "${VTABLE_LABEL_PREFIX}" ; then
- # Determine how virtual function tables are named. This is fragile,
- # because different nm's produce output in different formats.
- ${CONFIG_NM} dummy.o >TMP
- if [ -n "`${SED} -n -e 's/ virtual table/nope/p' <TMP`" ] ; then
- ${CONFIG_NM} --no-cplus dummy.o >TMP 2>/dev/null ||
- ${CONFIG_NM} --no-demangle dummy.o >TMP 2>/dev/null ||
- ${CONFIG_NM} dummy.o >TMP 2>/dev/null
- fi
- # First we look for a pattern that matches historical output from g++.
- # We surround the actual label name by <> to separate it from
- # other nm junk.
- ${SED} -n -e 's/_*vt[$_.]7*filebuf/<&>/p' <TMP >dummy.out
- # For paranoia's sake (e.g. if we're using some other C++ compiler)
- # we try a more general pattern, and append the result.
- grep -v foo <TMP \
- | ${SED} -n -e 's/[a-zA-Z0-9_.$]*filebuf[a-zA-Z0-9_.$]*/<&>/p' \
- >>dummy.out
- # Now we get rid of the <>, and any other junk on the nm output line.
- # (We get rid of <filebuf> in case nm included debugging output for
- # class filebuf itself.) Finally, we select the first line of
- # the result, and hope that's what we wanted!
- vtab_name=`${SED} -n -e '/<filebuf>/d' -e 's/^.*<\(.*\)>.*$/\1/p' \
- <dummy.out | ${SED} -n -e '1p'`
- case "${vtab_name}" in
- *7filebuf) echo "#define ${macro_prefix}VTABLE_LABEL_HAS_LENGTH 1" ;;
- *) echo "#define ${macro_prefix}VTABLE_LABEL_HAS_LENGTH 0" ;;
- esac
- VTABLE_LABEL_PREFIX=`echo $vtab_name | ${SED} -e 's/7*filebuf//'`
- fi
- echo "#define ${macro_prefix}VTABLE_LABEL_PREFIX" '"'"${VTABLE_LABEL_PREFIX}"'"'
- if [ "${VTABLE_LABEL_PREFIX}" = "__vt_" -o \
- "${VTABLE_LABEL_PREFIX}" = "___vt_" ] ; then
- echo "#define ${macro_prefix}USING_THUNKS"
- fi
-
- # VTABLE_LABEL_PREFIX_ID is the same as VTABLE_LABEL_PREFIX,
- # but the former is a C identifier, while the latter is a quoted
- # st
- if [ -z ""`echo ${VTABLE_LABEL_PREFIX} | ${SED} -e 's/[a-zA-Z0-9_]//g'` ] ; then
- if [ "${NAMES_HAVE_UNDERSCORE}" = "1" ] ; then
- VTABLE_LABEL_PREFIX=`echo ${VTABLE_LABEL_PREFIX} | ${SED} -e 's/^_//'`
- fi
- echo "#define ${macro_prefix}VTABLE_LABEL_PREFIX_ID ${VTABLE_LABEL_PREFIX}"
- fi
-
-# if test -n "${DOLLAR_IN_LABEL}" ; then
-# echo "#define ${macro_prefix}DOLLAR_IN_LABEL ${DOLLAR_IN_LABEL}"
-# elif test "`${CONFIG_NM} dummy.o | grep 'vt[$$]7filebuf'`" != ""; then
-# echo "#define ${macro_prefix}DOLLAR_IN_LABEL 1"
-# elif test "`${CONFIG_NM} dummy.o | grep 'vt[.]7filebuf'`" != ""; then
-# echo "#define ${macro_prefix}DOLLAR_IN_LABEL 0"
-# elif test "`${CONFIG_NM} dummy.o | grep 'vtbl__7filebuf'`" != ""; then
-# echo "#define ${macro_prefix}DOLLAR_IN_LABEL 0"
-# else
-# echo "gen-params: ${CONFIG_NM} failed to find vt[.\$]filebuf in dummy.o!" 1>&2; exit 1
-# fi
- else
- # The compile failed for some reason (no C++?)
- echo "gen-params: could not compile dummy.C with ${CXX}" 1>&2; exit 1;
- fi
-fi
-
-# A little test program to check if struct stat has st_blksize.
-cat >dummy.c <<!EOF!
-#include <sys/types.h>
-#include <sys/stat.h>
-int BLKSIZE(struct stat *st)
-{
- return st->st_blksize;
-}
-!EOF!
-
-if ${CC} -c dummy.c >/dev/null 2>&1 ; then
- echo "#define ${macro_prefix}HAVE_ST_BLKSIZE 1"
-else
- echo "#define ${macro_prefix}HAVE_ST_BLKSIZE 0"
-fi
-
-# A little test program to check if the name 'clog' is defined in libm,
-# as it is under DEC UNIX.
-cat >dummy.c <<!EOF!
-int clog;
-main () {}
-!EOF!
-
-if ${CC} dummy.c -lm 2>&1 >/dev/null | grep clog >/dev/null; then
- echo "#define ${macro_prefix}CLOG_CONFLICT 1"
-fi
-
-# Next, generate definitions for the standard types (such as mode_t)
-# compatible with those in the standard C header files.
-# It works by a dummy program through the C pre-processor, and then
-# using sed to search for typedefs in the output.
-
-for hdr in wchar wctype; do
- eval $hdr=0
- cat >dummy.c <<EOF
-#include <${hdr}.h>
-EOF
- if ${CPP} dummy.c >/dev/null 2>&1 ; then eval $hdr=1; fi
-done
-
-cat >dummy.c <<!EOF!
-#include <sys/types.h>
-#include <stddef.h>
-#ifdef __STDC__
-#include <stdarg.h>
-#else /* !__STDC__ */
-#include <varargs.h>
-#endif /* __STDC__ */
-#include <stdio.h>
-#include <time.h>
-#include <signal.h>
-#ifdef __STDC__
-#include <limits.h>
-#endif
-#if WCHAR == 1
-#include <wchar.h>
-#endif
-#if WCTYPE == 1
-#include <wctype.h>
-#endif
-#ifdef size_t
-typedef size_t Xsize_t;
-#elif defined(__SIZE_TYPE__)
-typedef __SIZE_TYPE__ Xsize_t;
-#endif
-#ifdef ptrdiff_t
-typedef ptrdiff_t Xptrdiff_t;
-#elif defined(__PTRDIFF_TYPE__)
-typedef __PTRDIFF_TYPE__ Xptrdiff_t;
-#endif
-#ifdef wchar_t
-typedef wchar_t Xwchar_t;
-#elif defined(__WCHAR_TYPE__)
-typedef __WCHAR_TYPE__ Xwchar_t;
-#endif
-#ifdef va_list
-typedef va_list XXXva_list;
-#endif
-#ifdef BUFSIZ
-long XBUFSIZ=BUFSIZ;
-#endif
-#ifdef FOPEN_MAX
-long XFOPEN_MAX=FOPEN_MAX;
-#endif
-#ifdef FILENAME_MAX
-long XFILENAME_MAX=FILENAME_MAX;
-#endif
-#ifdef SHRT_MAX
-long XSHRT_MAX=SHRT_MAX;
-#endif
-#ifdef INT_MAX
-long XINT_MAX=INT_MAX;
-#endif
-#ifdef LONG_MAX
-long XLONG_MAX=LONG_MAX;
-#endif
-#ifdef LONG_LONG_MAX
-long XLONG_LONG_MAX=LONG_LONG_MAX;
-#endif
-!EOF!
-
-if ${CPP} dummy.c -DWCHAR=$wchar -DWCTYPE=$wctype >TMP ; then true
-else
- echo "gen-params: could not invoke ${CPP} on dummy.c" 1>&2 ; exit 1
-fi
-tr ' ' ' ' <TMP >dummy.out
-
-for TYPE in dev_t clock_t fpos_t gid_t ino_t mode_t nlink_t off_t pid_t ptrdiff_t sigset_t size_t ssize_t time_t uid_t va_list wchar_t wint_t int16_t uint16_t int32_t uint_32_t u_int16_t u_int32_t; do
- IMPORTED=`eval 'echo $'"$TYPE"`
- if [ -n "${IMPORTED}" ] ; then
- eval "$TYPE='$IMPORTED'"
- else
- t=$TYPE
- VALUE=''
-
- # Follow `typedef VALUE TYPE' chains, but don't loop indefinitely.
- for iteration in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20; do
- # Search dummy.out for a typedef for X*$t.
- sed_script="
- /.*typedef *\\(.*[^ ]\\) *X*$t *;.*/{s||\1|;p;q;}
- /.*typedef *\\(.*[^ a-zA-Z0-9_]\\)X*$t *;.*/{s||\1|;p;q;}
- "
- t=`${SED} -n "$sed_script" <dummy.out`
- case "$t" in
- '')
- break;;
- *)
- # Found a type $t; save it in VALUE.
- VALUE=$t
- # If it won't cause problems in matching,
- # look for a typedef for it in turn.
- case "$VALUE" in
- *.* | */* | *\ * | *\** | *\[* | *\\*) break;;
- esac;;
- esac
- done
-
- case "$VALUE" in
- ?*) eval "$TYPE=\"$VALUE\""
- esac
- fi
-done
-
-cat <<!EOF!
-typedef ${clock_t-int /* default */} ${macro_prefix}clock_t;
-typedef ${dev_t-int /* default */} ${macro_prefix}dev_t;
-typedef ${fpos_t-long /* default */} ${macro_prefix}fpos_t;
-typedef ${gid_t-int /* default */} ${macro_prefix}gid_t;
-typedef ${ino_t-int /* default */} ${macro_prefix}ino_t;
-typedef ${mode_t-int /* default */} ${macro_prefix}mode_t;
-typedef ${nlink_t-int /* default */} ${macro_prefix}nlink_t;
-typedef ${off_t-long /* default */} ${macro_prefix}off_t;
-typedef ${pid_t-int /* default */} ${macro_prefix}pid_t;
-#ifndef __PTRDIFF_TYPE__
-#define __PTRDIFF_TYPE__ ${ptrdiff_t-long int /* default */}
-#endif
-typedef __PTRDIFF_TYPE__ ${macro_prefix}ptrdiff_t;
-typedef ${sigset_t-int /* default */} ${macro_prefix}sigset_t;
-#ifndef __SIZE_TYPE__
-#define __SIZE_TYPE__ ${size_t-unsigned long /* default */}
-#endif
-typedef __SIZE_TYPE__ ${macro_prefix}size_t;
-typedef ${time_t-int /* default */} ${macro_prefix}time_t;
-typedef ${uid_t-int /* default */} ${macro_prefix}uid_t;
-typedef ${wchar_t-int /* default */} ${macro_prefix}wchar_t;
-!EOF!
-
-
-# ssize_t is the signed version of size_t
-if [ -n "${ssize_t}" ] ; then
- echo "typedef ${ssize_t} ${macro_prefix}ssize_t;"
-elif [ -z "${size_t}" ] ; then
- echo "typedef long ${macro_prefix}ssize_t;"
-else
- # Remove "unsigned" from ${size_t} to get ${ssize_t}.
- tmp="`echo ${size_t} | ${SED} -e 's|unsigned||g' -e 's| | |g'`"
- if [ -z "$tmp" ] ; then
- tmp=int
- else
- # check $tmp doesn't conflict with <unistd.h>
- echo "#include <unistd.h>
- extern $tmp read();" >dummy.c
- ${CC} -c dummy.c >/dev/null 2>&1 || tmp=int
- fi
- echo "typedef $tmp /* default */ ${macro_prefix}ssize_t;"
-fi
-
-# wint_t is often the integral type to which wchar_t promotes.
-if [ -z "${wint_t}" ] ; then
- for TYPE in int 'unsigned int' 'long int' 'long unsigned int'; do
- cat >dummy.C <<!EOF!
-#ifndef __WCHAR_TYPE__
-#define __WCHAR_TYPE__ ${wchar_t-int /* default */}
-#endif
-typedef __WCHAR_TYPE__ ${macro_prefix}wchar_t;
-void foo ($TYPE);
-void foo (double);
-void bar (${macro_prefix}wchar_t w)
-{
- foo (w);
-}
-!EOF!
- if ${CXX} -c dummy.C >/dev/null 2>&1 ; then
- wint_t="$TYPE /* default */"
- break
- fi
- done
-fi
-echo "typedef ${wint_t-int /* wchar_t is broken */} ${macro_prefix}wint_t;"
-
-# va_list can cause problems (e.g. some systems have va_list as a struct).
-# Check to see if ${va_list-char*} really is compatible with stdarg.h.
-cat >dummy.C <<!EOF!
-#define X_va_list ${va_list-char* /* default */}
-extern long foo(X_va_list ap); /* Check that X_va_list compiles on its own */
-extern "C" {
-#include <stdarg.h>
-}
-long foo(X_va_list ap) { return va_arg(ap, long); }
-long bar(int i, ...)
-{ va_list ap; long j; va_start(ap, i); j = foo(ap); va_end(ap); return j; }
-!EOF!
-if ${CXX} -c dummy.C >/dev/null 2>&1 ; then
- # Ok: We have something that works.
- echo "typedef ${va_list-char* /* default */} ${macro_prefix}va_list;"
-else
- # No, it breaks. Indicate that <stdarg.h> must be included.
- echo "#define ${macro_prefix}NEED_STDARG_H
-#define ${macro_prefix}va_list va_list"
-fi
-
-cat >dummy.c <<!EOF!
-#include <signal.h>
-extern int (*signal())();
-extern int dummy (int);
-main()
-{
- int (*oldsig)(int) = signal (1, dummy);
- (void) signal (2, oldsig);
- return 0;
-}
-!EOF!
-if ${CC} -c dummy.c >/dev/null 2>&1 ; then
- echo "#define ${macro_prefix}signal_return_type int"
-else
- echo "#define ${macro_prefix}signal_return_type void"
-fi
-
-# check sprintf return type
-
-cat >dummy.c <<!EOF!
-#include <stdio.h>
-extern int sprintf(); char buf[100];
-int main() { return sprintf(buf, "%d", 34); }
-!EOF!
-if ${CC} -c dummy.c >/dev/null 2>&1 ; then
- echo "#define ${macro_prefix}sprintf_return_type int"
-else
- echo "#define ${macro_prefix}sprintf_return_type char*"
-fi
-
-# Look for some standard macros.
-for NAME in BUFSIZ FOPEN_MAX FILENAME_MAX NULL; do
- IMPORTED=`eval 'echo $'"$NAME"`
- if [ -n "${IMPORTED}" ] ; then
- eval "$NAME='$IMPORTED /* specified */"
- else
- rm -f TMP
- ${SED} -n -e 's| *;|;|g' -e "s|long X${NAME}= *\(.*\);|\1|w TMP" \
- <dummy.out>/dev/null
- # Now select the first definition.
- if [ -s TMP ]; then
- eval "$NAME='"`${SED} -e '2,$d' <TMP`"'"
- fi
- fi
-done
-
-# These macros must be numerical constants; strip any trailing 'L's.
-for NAME in SHRT_MAX INT_MAX LONG_MAX LONG_LONG_MAX; do
- IMPORTED=`eval 'echo $'"$NAME"`
- if [ -n "${IMPORTED}" ] ; then
- eval "$NAME='$IMPORTED /* specified */"
- else
- rm -f TMP
- ${SED} -n -e 's| *;|;|g' -e "s|long X${NAME}= *\([0-9]*\)L* *;|\1|w TMP" \
- <dummy.out>/dev/null
- # Now select the first definition.
- if [ -s TMP ]; then
- eval "$NAME='"`${SED} -e '2,$d' <TMP`"'"
- fi
- fi
-done
-
-# Figure out integral type sizes.
-
-default_int16='short /* deduction failed */'
-default_int32='long /* deduction failed */'
-INT16=32767
-INT32=2147483647
-
-if [ "${SHRT_MAX}" = $INT16 ] ; then
- default_int16='short /* deduced */'
- if [ "${LONG_MAX}" = $INT32 ] ; then
- default_int32='long /* deduced */'
- elif [ "${INT_MAX}" = $INT32 ] ; then
- default_int32='int /* deduced */'
- fi
-fi
-
-[ -n "$u_int16_t" ] && uint16_t="$u_int16_t"
-[ -n "$u_int32_t" ] && uint32_t="$u_int32_t"
-
-[ -z "$int16_t" ] && int16_t="$default_int16"
-[ -z "$uint16_t" ] && uint16_t="unsigned $int16_t"
-[ -z "$int32_t" ] && int32_t="$default_int32"
-[ -z "$uint32_t" ] && uint32_t="unsigned $int32_t"
-
-cat <<!EOF!
-
-#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
-typedef int ${macro_prefix}int8_t __attribute__((__mode__(__QI__)));
-typedef unsigned int ${macro_prefix}uint8_t __attribute__((__mode__(__QI__)));
-typedef int ${macro_prefix}int16_t __attribute__((__mode__(__HI__)));
-typedef unsigned int ${macro_prefix}uint16_t __attribute__((__mode__(__HI__)));
-typedef int ${macro_prefix}int32_t __attribute__((__mode__(__SI__)));
-typedef unsigned int ${macro_prefix}uint32_t __attribute__((__mode__(__SI__)));
-typedef int ${macro_prefix}int64_t __attribute__((__mode__(__DI__)));
-typedef unsigned int ${macro_prefix}uint64_t __attribute__((__mode__(__DI__)));
-#else
-typedef $int16_t ${macro_prefix}int16_t;
-typedef $uint16_t ${macro_prefix}uint16_t;
-typedef $int32_t ${macro_prefix}int32_t;
-typedef $uint32_t ${macro_prefix}uint32_t;
-#endif
-
-#define ${macro_prefix}BUFSIZ ${BUFSIZ-1024 /* default */}
-#define ${macro_prefix}FOPEN_MAX ${FOPEN_MAX-32 /* default */}
-#define ${macro_prefix}FILENAME_MAX ${FILENAME_MAX-1024 /* default */}
-#define ${macro_prefix}NULL ${NULL-0 /* default */}
-#if defined (__cplusplus) || defined (__STDC__)
-#define ${macro_prefix}ARGS(ARGLIST) ARGLIST
-#else
-#define ${macro_prefix}ARGS(ARGLIST) ()
-#endif
-#if !defined (__GNUG__) || defined (__STRICT_ANSI__)
-#define ${macro_prefix}NO_NRV
-#endif
-#if !defined (__GNUG__)
-#define _G_NO_EXTERN_TEMPLATES
-#endif
-!EOF!
-
-rm -f dummy.c dummy.o dummy.h
-
-if test -n "${HAVE_ATEXIT}" ; then
- echo "#define ${macro_prefix}HAVE_ATEXIT ${HAVE_ATEXIT}"
-else
- cat >dummy.c <<!EOF!
-#include <stdlib.h>
-int main()
-{
- atexit (0);
-}
-!EOF!
- if ${CC} dummy.c >/dev/null 2>&1 ; then
- echo "#define ${macro_prefix}HAVE_ATEXIT 1"
- else
- echo "#define ${macro_prefix}HAVE_ATEXIT 0"
- fi
-fi
-
-
-# *** Check for presence of certain include files ***
-
-# check for sys/resource.h
-
-if test -n "${HAVE_SYS_RESOURCE}" ; then
- echo "#define ${macro_prefix}HAVE_SYS_RESOURCE ${HAVE_SYS_RESOURCE}"
-else
- cat >dummy.c <<!EOF!
-#include <sys/types.h>
-#include <sys/time.h>
-#include <sys/resource.h>
- int main()
- {
- struct rusage res;
- getrusage(RUSAGE_SELF, &res);
- return (int)(res.ru_utime.tv_sec + (res.ru_utime.tv_usec / 1000000.0));
- }
-!EOF!
- # Note: We link because some systems have sys/resource, but not getrusage().
- if ${CC} dummy.c >/dev/null 2>&1 ; then
- echo "#define ${macro_prefix}HAVE_SYS_RESOURCE 1"
- else
- echo "#define ${macro_prefix}HAVE_SYS_RESOURCE 0"
- fi
-fi
-
-# check for struct tms in sys/times.h
-
-if test -n "${HAVE_SYS_TIMES}" ; then
- echo "#define ${macro_prefix}HAVE_SYS_TIMES ${HAVE_SYS_TIMES}"
-else
- cat >dummy.c <<!EOF!
-#include <sys/types.h>
-#include <sys/times.h>
- int main()
- {
- struct tms s;
- return s.tms_utime;
- }
-!EOF!
- if ${CC} -c dummy.c >/dev/null 2>&1 ; then
- echo "#define ${macro_prefix}HAVE_SYS_TIMES 1"
- else
- echo "#define ${macro_prefix}HAVE_SYS_TIMES 0"
- fi
-fi
-
-# check for sys/socket.h
-
-if test -n "${HAVE_SYS_SOCKET}" ; then
- echo "#define ${macro_prefix}HAVE_SYS_SOCKET ${HAVE_SYS_SOCKET}"
-else
- echo '#include <sys/types.h>' >dummy.c
- echo '#include <sys/socket.h>' >>dummy.c
- if ${CC} -c dummy.c >/dev/null 2>&1 ; then
- echo "#define ${macro_prefix}HAVE_SYS_SOCKET 1"
- else
- echo "#define ${macro_prefix}HAVE_SYS_SOCKET 0"
- fi
-fi
-
-# check for sys/cdefs.h
-
-if test -n "${HAVE_SYS_CDEFS}" ; then
- echo "#define ${macro_prefix}HAVE_SYS_CDEFS ${HAVE_SYS_CDEFS}"
-else
- echo '#include <sys/cdefs.h>' >dummy.c
- echo 'extern int myfunc __P((int, int));' >>dummy.c
- if ${CC} -c dummy.c >/dev/null 2>&1 ; then
- echo "#define ${macro_prefix}HAVE_SYS_CDEFS 1"
- else
- echo "#define ${macro_prefix}HAVE_SYS_CDEFS 0"
- fi
-fi
-
-# Check for a (Posix-compatible) sys/wait.h */
-
-if test -n "${HAVE_SYS_WAIT}" ; then
- echo "#define ${macro_prefix}HAVE_SYS_WAIT ${HAVE_SYS_WAIT}"
-else
- cat >dummy.c <<!EOF!
-#include <sys/types.h>
-#include <sys/wait.h>
- int f() { int i; wait(&i); return i; }
-!EOF!
- if ${CC} -c dummy.c >/dev/null 2>&1 ; then
- echo "#define ${macro_prefix}HAVE_SYS_WAIT 1"
- else
- echo "#define ${macro_prefix}HAVE_SYS_WAIT 0"
- fi
-fi
-
-if test -n "${HAVE_UNISTD}" ; then
- echo "#define ${macro_prefix}HAVE_UNISTD ${HAVE_UNISTD}"
-else
- echo '#include <unistd.h>' >dummy.c
- if ${CC} -c dummy.c >/dev/null 2>&1 ; then
- echo "#define ${macro_prefix}HAVE_UNISTD 1"
- else
- echo "#define ${macro_prefix}HAVE_UNISTD 0"
- fi
-fi
-
-if test -n "${HAVE_DIRENT}" ; then
- echo "#define ${macro_prefix}HAVE_DIRENT ${HAVE_DIRENT}"
-else
- echo '#include <sys/types.h>
-#include <dirent.h>' >dummy.c
- if ${CC} -c dummy.c >/dev/null 2>&1 ; then
- echo "#define ${macro_prefix}HAVE_DIRENT 1"
- else
- echo "#define ${macro_prefix}HAVE_DIRENT 0"
- fi
-fi
-
-if test -n "${HAVE_CURSES}" ; then
- echo "#define ${macro_prefix}HAVE_CURSES ${HAVE_CURSES}"
-else
- echo '#include <curses.h>' >dummy.c
- if ${CC} -c dummy.c >/dev/null 2>&1 ; then
- echo "#define ${macro_prefix}HAVE_CURSES 1"
- else
- echo "#define ${macro_prefix}HAVE_CURSES 0"
- fi
-fi
-
-# There is no test for this at the moment; it is just set by the
-# configuration files.
-if test -n "${MATH_H_INLINES}" ; then
- echo "#define ${macro_prefix}MATH_H_INLINES ${MATH_H_INLINES}"
-else
- echo "#define ${macro_prefix}MATH_H_INLINES 0"
-fi
-
-if test -n "${HAVE_BOOL}" ; then
- echo "#define ${macro_prefix}HAVE_BOOL ${HAVE_BOOL}"
-else
- echo 'bool i=true,j=false;' >dummy.C
- if ${CXX} -c dummy.C >/dev/null 2>&1 ; then
- echo "#define ${macro_prefix}HAVE_BOOL 1"
- else
- echo "#define ${macro_prefix}HAVE_BOOL 0"
- fi
-fi
-
-# Uncomment the following line if you don't have working templates.
-# echo "#define ${macro_prefix}NO_TEMPLATES"
-
-rm -f dummy.C dummy.o dummy.c dummy.out TMP core a.out
-
-echo "#endif /* !${macro_prefix}config_h */"
diff --git a/contrib/libg++/libio/genops.c b/contrib/libg++/libio/genops.c
deleted file mode 100644
index 23a6fdeaeac7..000000000000
--- a/contrib/libg++/libio/genops.c
+++ /dev/null
@@ -1,852 +0,0 @@
-/*
-Copyright (C) 1993, 1995 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-/* Generic or default I/O operations. */
-
-#include "libioP.h"
-#ifdef __STDC__
-#include <stdlib.h>
-#endif
-#include <string.h>
-
-void
-DEFUN(_IO_un_link, (fp),
- _IO_FILE *fp)
-{
- if (fp->_flags & _IO_LINKED) {
- _IO_FILE **f;
- for (f = &_IO_list_all; *f != NULL; f = &(*f)->_chain) {
- if (*f == fp) {
- *f = fp->_chain;
- break;
- }
- }
- fp->_flags &= ~_IO_LINKED;
- }
-}
-
-void
-DEFUN(_IO_link_in, (fp),
- _IO_FILE *fp)
-{
- if ((fp->_flags & _IO_LINKED) == 0) {
- fp->_flags |= _IO_LINKED;
- fp->_chain = _IO_list_all;
- _IO_list_all = fp;
- }
-}
-
-/* Return minimum _pos markers
- Assumes the current get area is the main get area. */
-
-_IO_size_t
-DEFUN(_IO_least_marker, (fp),
- register _IO_FILE *fp)
-{
- _IO_ssize_t least_so_far = fp->_IO_read_end - fp->_IO_read_base;
- register struct _IO_marker *mark;
- for (mark = fp->_markers; mark != NULL; mark = mark->_next)
- if (mark->_pos < least_so_far)
- least_so_far = mark->_pos;
- return least_so_far;
-}
-
-/* Switch current get area from backup buffer to (start of) main get area. */
-
-void
-DEFUN(_IO_switch_to_main_get_area, (fp),
- _IO_FILE *fp)
-{
- char *tmp;
- fp->_flags &= ~_IO_IN_BACKUP;
- /* Swap _IO_read_end and _IO_save_end. */
- tmp = fp->_IO_read_end; fp->_IO_read_end= fp->_IO_save_end; fp->_IO_save_end= tmp;
- /* Swap _IO_read_base and _IO_save_base. */
- tmp = fp->_IO_read_base; fp->_IO_read_base = fp->_IO_save_base; fp->_IO_save_base = tmp;
- fp->_IO_read_ptr = fp->_IO_read_base;
-}
-
-/* Switch current get area from main get area to (end of) backup area. */
-
-void
-DEFUN(_IO_switch_to_backup_area, (fp),
- register _IO_FILE *fp)
-{
- char *tmp;
- fp->_flags |= _IO_IN_BACKUP;
- /* Swap _IO_read_end and _IO_save_end. */
- tmp = fp->_IO_read_end; fp->_IO_read_end = fp->_IO_save_end; fp->_IO_save_end = tmp;
- /* Swap _gbase and _IO_save_base. */
- tmp = fp->_IO_read_base; fp->_IO_read_base = fp->_IO_save_base; fp->_IO_save_base = tmp;
- fp->_IO_read_ptr = fp->_IO_read_end;
-}
-
-int
-DEFUN(_IO_switch_to_get_mode, (fp),
- register _IO_FILE *fp)
-{
- if (fp->_IO_write_ptr > fp->_IO_write_base)
- if (_IO_OVERFLOW (fp, EOF) == EOF)
- return EOF;
- if (_IO_in_backup(fp))
- fp->_IO_read_base = fp->_IO_backup_base;
- else
- {
- fp->_IO_read_base = fp->_IO_buf_base;
- if (fp->_IO_write_ptr > fp->_IO_read_end)
- fp->_IO_read_end = fp->_IO_write_ptr;
- }
- fp->_IO_read_ptr = fp->_IO_write_ptr;
-
- fp->_IO_write_base = fp->_IO_write_ptr = fp->_IO_write_end = fp->_IO_read_ptr;
-
- fp->_flags &= ~_IO_CURRENTLY_PUTTING;
- return 0;
-}
-
-void
-DEFUN(_IO_free_backup_area, (fp),
- register _IO_FILE *fp)
-{
- if (_IO_in_backup (fp))
- _IO_switch_to_main_get_area(fp); /* Just in case. */
- free (fp->_IO_save_base);
- fp->_IO_save_base = NULL;
- fp->_IO_save_end = NULL;
- fp->_IO_backup_base = NULL;
-}
-
-#if 0
-int
-DEFUN(_IO_switch_to_put_mode, (fp),
- register _IO_FILE *fp)
-{
- fp->_IO_write_base = fp->_IO_read_ptr;
- fp->_IO_write_ptr = fp->_IO_read_ptr;
- /* Following is wrong if line- or un-buffered? */
- fp->_IO_write_end = fp->_flags & _IO_IN_BACKUP ? fp->_IO_read_end : fp->_IO_buf_end;
-
- fp->_IO_read_ptr = fp->_IO_read_end;
- fp->_IO_read_base = fp->_IO_read_end;
-
- fp->_flags |= _IO_CURRENTLY_PUTTING;
- return 0;
-}
-#endif
-
-int
-DEFUN(__overflow, (f, ch),
- _IO_FILE *f AND int ch)
-{
- return _IO_OVERFLOW (f, ch);
-}
-
-static int
-DEFUN(save_for_backup, (fp),
- _IO_FILE *fp)
-{
- /* Append [_IO_read_base.._IO_read_end] to backup area. */
- int least_mark = _IO_least_marker(fp);
- /* needed_size is how much space we need in the backup area. */
- int needed_size = (fp->_IO_read_end - fp->_IO_read_base) - least_mark;
- int current_Bsize = fp->_IO_save_end - fp->_IO_save_base;
- int avail; /* Extra space available for future expansion. */
- int delta;
- struct _IO_marker *mark;
- if (needed_size > current_Bsize)
- {
- char *new_buffer;
- avail = 100;
- new_buffer = (char*)malloc(avail+needed_size);
- if (new_buffer == NULL)
- return EOF; /* FIXME */
- if (least_mark < 0)
- {
- memcpy(new_buffer + avail,
- fp->_IO_save_end + least_mark,
- -least_mark);
- memcpy(new_buffer +avail - least_mark,
- fp->_IO_read_base,
- fp->_IO_read_end - fp->_IO_read_base);
- }
- else
- memcpy(new_buffer + avail,
- fp->_IO_read_base + least_mark,
- needed_size);
- if (fp->_IO_save_base)
- free (fp->_IO_save_base);
- fp->_IO_save_base = new_buffer;
- fp->_IO_save_end = new_buffer + avail + needed_size;
- }
- else
- {
- avail = current_Bsize - needed_size;
- if (least_mark < 0)
- {
- memmove(fp->_IO_save_base + avail,
- fp->_IO_save_end + least_mark,
- -least_mark);
- memcpy(fp->_IO_save_base + avail - least_mark,
- fp->_IO_read_base,
- fp->_IO_read_end - fp->_IO_read_base);
- }
- else if (needed_size > 0)
- memcpy(fp->_IO_save_base + avail,
- fp->_IO_read_base + least_mark,
- needed_size);
- }
- /* FIXME: Dubious arithmetic if pointers are NULL */
- fp->_IO_backup_base = fp->_IO_save_base + avail;
- /* Adjust all the streammarkers. */
- delta = fp->_IO_read_end - fp->_IO_read_base;
- for (mark = fp->_markers; mark != NULL; mark = mark->_next)
- mark->_pos -= delta;
- return 0;
-}
-
-int
-DEFUN(__underflow, (fp),
- _IO_FILE *fp)
-{
- if (_IO_in_put_mode(fp))
- if (_IO_switch_to_get_mode(fp) == EOF) return EOF;
- if (fp->_IO_read_ptr < fp->_IO_read_end)
- return *(unsigned char*)fp->_IO_read_ptr;
- if (_IO_in_backup(fp))
- {
- _IO_switch_to_main_get_area(fp);
- if (fp->_IO_read_ptr < fp->_IO_read_end)
- return *fp->_IO_read_ptr;
- }
- if (_IO_have_markers(fp))
- {
- if (save_for_backup (fp))
- return EOF;
- }
- else if (_IO_have_backup(fp))
- _IO_free_backup_area(fp);
- return _IO_UNDERFLOW (fp);
-}
-
-int
-DEFUN(__uflow, (fp),
- _IO_FILE *fp)
-{
- if (_IO_in_put_mode(fp))
- if (_IO_switch_to_get_mode(fp) == EOF) return EOF;
- if (fp->_IO_read_ptr < fp->_IO_read_end)
- return *(unsigned char*)fp->_IO_read_ptr++;
- if (_IO_in_backup(fp))
- {
- _IO_switch_to_main_get_area(fp);
- if (fp->_IO_read_ptr < fp->_IO_read_end)
- return *fp->_IO_read_ptr++;
- }
- if (_IO_have_markers(fp))
- {
- if (save_for_backup (fp))
- return EOF;
- }
- else if (_IO_have_backup(fp))
- _IO_free_backup_area(fp);
- return _IO_UFLOW (fp);
-}
-
-void
-DEFUN(_IO_setb, (f, b, eb, a),
- _IO_FILE *f AND char *b AND char *eb AND int a)
-{
- if (f->_IO_buf_base && !(f->_flags & _IO_USER_BUF))
- FREE_BUF(f->_IO_buf_base);
- f->_IO_buf_base = b;
- f->_IO_buf_end = eb;
- if (a)
- f->_flags &= ~_IO_USER_BUF;
- else
- f->_flags |= _IO_USER_BUF;
-}
-
-void
-DEFUN(_IO_doallocbuf, (fp),
- register _IO_FILE *fp)
-{
- if (fp->_IO_buf_base)
- return;
- if (!(fp->_flags & _IO_UNBUFFERED))
- if (_IO_DOALLOCATE (fp) != EOF)
- return;
- _IO_setb(fp, fp->_shortbuf, fp->_shortbuf+1, 0);
-}
-
-int
-DEFUN(_IO_default_underflow, (fp),
- _IO_FILE *fp)
-{
- return EOF;
-}
-
-int
-DEFUN(_IO_default_uflow, (fp),
- _IO_FILE *fp)
-{
- int ch = _IO_UNDERFLOW (fp);
- if (ch == EOF)
- return EOF;
- return *(unsigned char*)fp->_IO_read_ptr++;
-}
-
-_IO_size_t
-DEFUN(_IO_default_xsputn, (f, data, n),
- register _IO_FILE *f AND const void *data AND _IO_size_t n)
-{
- register const char *s = (char*) data;
- register _IO_size_t more = n;
- if (more <= 0)
- return 0;
- for (;;)
- {
- _IO_ssize_t count = f->_IO_write_end - f->_IO_write_ptr; /* Space available. */
- if (count > 0)
- {
- if (count > more)
- count = more;
- if (count > 20)
- {
- memcpy(f->_IO_write_ptr, s, count);
- s += count;
- f->_IO_write_ptr += count;
- }
- else if (count <= 0)
- count = 0;
- else
- {
- register char *p = f->_IO_write_ptr;
- register _IO_ssize_t i;
- for (i = count; --i >= 0; ) *p++ = *s++;
- f->_IO_write_ptr = p;
- }
- more -= count;
- }
- if (more == 0 || __overflow(f, (unsigned char)*s++) == EOF)
- break;
- more--;
- }
- return n - more;
-}
-
-_IO_size_t
-DEFUN(_IO_sgetn, (fp, data, n),
- _IO_FILE *fp AND void *data AND _IO_size_t n)
-{
- /* FIXME handle putback buffer here! */
- return _IO_XSGETN (fp, data, n);
-}
-
-_IO_size_t
-DEFUN(_IO_default_xsgetn, (fp, data, n),
- _IO_FILE *fp AND void *data AND _IO_size_t n)
-{
- register _IO_size_t more = n;
- register char *s = (char*) data;
- for (;;)
- {
- _IO_ssize_t count = fp->_IO_read_end - fp->_IO_read_ptr; /* Data available. */
- if (count > 0)
- {
- if (count > more)
- count = more;
- if (count > 20)
- {
- memcpy(s, fp->_IO_read_ptr, count);
- s += count;
- fp->_IO_read_ptr += count;
- }
- else if (count <= 0)
- count = 0;
- else
- {
- register char *p = fp->_IO_read_ptr;
- register int i = (int)count;
- while (--i >= 0) *s++ = *p++;
- fp->_IO_read_ptr = p;
- }
- more -= count;
- }
- if (more == 0 || __underflow(fp) == EOF)
- break;
- }
- return n - more;
-}
-
-int
-DEFUN(_IO_sync, (fp),
- register _IO_FILE *fp)
-{
- return 0;
-}
-
-_IO_FILE*
-DEFUN(_IO_default_setbuf, (fp, p, len),
- register _IO_FILE *fp AND char* p AND _IO_ssize_t len)
-{
- if (_IO_SYNC (fp) == EOF)
- return NULL;
- if (p == NULL || len == 0)
- {
- fp->_flags |= _IO_UNBUFFERED;
- _IO_setb(fp, fp->_shortbuf, fp->_shortbuf+1, 0);
- }
- else
- {
- fp->_flags &= ~_IO_UNBUFFERED;
- _IO_setb(fp, p, p+len, 0);
- }
- fp->_IO_write_base = fp->_IO_write_ptr = fp->_IO_write_end = 0;
- fp->_IO_read_base = fp->_IO_read_ptr = fp->_IO_read_end = 0;
- return fp;
-}
-
-_IO_pos_t
-DEFUN(_IO_default_seekpos, (fp, pos, mode),
- _IO_FILE *fp AND _IO_pos_t pos AND int mode)
-{
- return _IO_SEEKOFF (fp, _IO_pos_as_off(pos), 0, mode);
-}
-
-int
-DEFUN(_IO_default_doallocate, (fp),
- _IO_FILE *fp)
-{
- char *buf = ALLOC_BUF(_IO_BUFSIZ);
- if (buf == NULL)
- return EOF;
- _IO_setb(fp, buf, buf+_IO_BUFSIZ, 1);
- return 1;
-}
-
-void
-DEFUN(_IO_init, (fp, flags),
- register _IO_FILE *fp AND int flags)
-{
- fp->_flags = _IO_MAGIC|flags;
- fp->_IO_buf_base = NULL;
- fp->_IO_buf_end = NULL;
- fp->_IO_read_base = NULL;
- fp->_IO_read_ptr = NULL;
- fp->_IO_read_end = NULL;
- fp->_IO_write_base = NULL;
- fp->_IO_write_ptr = NULL;
- fp->_IO_write_end = NULL;
- fp->_chain = NULL; /* Not necessary. */
-
- fp->_IO_save_base = NULL;
- fp->_IO_backup_base = NULL;
- fp->_IO_save_end = NULL;
- fp->_markers = NULL;
- fp->_cur_column = 0;
-}
-
-int
-DEFUN(_IO_default_sync, (fp),
- _IO_FILE *fp)
-{
- return 0;
-}
-
-/* The way the C++ classes are mapped into the C functions in the
- current implementation, this function can get called twice! */
-
-void
-DEFUN(_IO_default_finish, (fp),
- _IO_FILE *fp)
-{
- struct _IO_marker *mark;
- if (fp->_IO_buf_base && !(fp->_flags & _IO_USER_BUF))
- {
- FREE_BUF(fp->_IO_buf_base);
- fp->_IO_buf_base = fp->_IO_buf_end = NULL;
- }
-
- for (mark = fp->_markers; mark != NULL; mark = mark->_next)
- mark->_sbuf = NULL;
-
- if (fp->_IO_save_base)
- {
- free (fp->_IO_save_base);
- fp->_IO_save_base = NULL;
- }
-
- _IO_un_link(fp);
-}
-
-_IO_pos_t
-DEFUN(_IO_default_seekoff, (fp, offset, dir, mode),
- register _IO_FILE *fp AND _IO_off_t offset AND int dir AND int mode)
-{
- return _IO_pos_BAD;
-}
-
-int
-DEFUN(_IO_sputbackc, (fp, c),
- register _IO_FILE *fp AND int c)
-{
- int result;
-
- if (fp->_IO_read_ptr > fp->_IO_read_base
- && (unsigned char)fp->_IO_read_ptr[-1] == (unsigned char)c)
- {
- fp->_IO_read_ptr--;
- result = (unsigned char)c;
- }
- else
- result = _IO_PBACKFAIL (fp, c);
-
- if (result != EOF)
- fp->_flags &= ~_IO_EOF_SEEN;
-
- return result;
-}
-
-int
-DEFUN(_IO_sungetc, (fp),
- register _IO_FILE *fp)
-{
- int result;
-
- if (fp->_IO_read_ptr > fp->_IO_read_base)
- {
- fp->_IO_read_ptr--;
- result = (unsigned char)*fp->_IO_read_ptr;
- }
- else
- result = _IO_PBACKFAIL (fp, EOF);
-
- if (result != EOF)
- fp->_flags &= ~_IO_EOF_SEEN;
-
- return result;
-}
-
-#if 0 /* Work in progress */
-void
-DEFUN(_IO_set_column, (fp, c),
- register _IO_FILE *fp AND int c)
-{
- if (c == -1)
- fp->_column = -1;
- else
- fp->_column = c - (fp->_IO_write_ptr - fp->_IO_write_base);
-}
-#else
-int
-DEFUN(_IO_set_column, (fp, i),
- register _IO_FILE *fp AND int i)
-{
- fp->_cur_column = i+1;
- return 0;
-}
-#endif
-
-
-unsigned
-DEFUN(_IO_adjust_column, (start, line, count),
- unsigned start AND const char *line AND int count)
-{
- register const char *ptr = line + count;
- while (ptr > line)
- if (*--ptr == '\n')
- return line + count - ptr - 1;
- return start + count;
-}
-
-int
-DEFUN(_IO_get_column, (fp),
- register _IO_FILE *fp)
-{
- if (fp->_cur_column)
- return _IO_adjust_column(fp->_cur_column - 1,
- fp->_IO_write_base,
- fp->_IO_write_ptr - fp->_IO_write_base);
- return -1;
-}
-
-int
-DEFUN_VOID(_IO_flush_all)
-{
- int result = 0;
- _IO_FILE *fp;
- for (fp = _IO_list_all; fp != NULL; fp = fp->_chain)
- if (fp->_IO_write_ptr > fp->_IO_write_base
- && _IO_OVERFLOW (fp, EOF) == EOF)
- result = EOF;
- return result;
-}
-
-void
-DEFUN_VOID(_IO_flush_all_linebuffered)
-{
- _IO_FILE *fp;
- for (fp = _IO_list_all; fp != NULL; fp = fp->_chain)
- if (fp->_flags & _IO_LINE_BUF)
- _IO_OVERFLOW (fp, EOF);
-}
-
-void
-DEFUN_VOID(_IO_unbuffer_all)
-{
- _IO_FILE *fp;
- for (fp = _IO_list_all; fp != NULL; fp = fp->_chain)
- if (! (fp->_flags & _IO_UNBUFFERED))
- _IO_SETBUF (fp, NULL, 0);
-}
-
-void
-DEFUN_VOID(_IO_cleanup)
-{
- _IO_flush_all ();
-
- /* We currently don't have a reliable mechanism for making sure that
- C++ static destructors are executed in the correct order.
- So it is possible that other static destructord might want to
- write to cout - and they're supposed to be able to do so.
-
- The following will make the standard streambufs be unbuffered,
- which forces any output from late destructors to be written out. */
- _IO_unbuffer_all ();
-}
-
-void
-DEFUN(_IO_init_marker, (marker, fp),
- struct _IO_marker *marker AND _IO_FILE *fp)
-{
- marker->_sbuf = fp;
- if (_IO_in_put_mode(fp))
- _IO_switch_to_get_mode(fp);
- if (_IO_in_backup(fp))
- marker->_pos = fp->_IO_read_ptr - fp->_IO_read_end;
- else
- marker->_pos = fp->_IO_read_ptr - fp->_IO_read_base;
-
- /* Should perhaps sort the chain? */
- marker->_next = fp->_markers;
- fp->_markers = marker;
-}
-
-void
-DEFUN(_IO_remove_marker, (marker),
- register struct _IO_marker *marker)
-{
- /* Unlink from sb's chain. */
- register struct _IO_marker **ptr = &marker->_sbuf->_markers;
- for (; ; ptr = &(*ptr)->_next)
- {
- if (*ptr == NULL)
- break;
- else if (*ptr == marker)
- {
- *ptr = marker->_next;
- return;
- }
- }
-#if 0
- if _sbuf has a backup area that is no longer needed, should we delete
- it now, or wait until the next underflow?
-#endif
-}
-
-#define BAD_DELTA EOF
-
-int
-DEFUN(_IO_marker_difference, (mark1, mark2),
- struct _IO_marker *mark1 AND struct _IO_marker *mark2)
-{
- return mark1->_pos - mark2->_pos;
-}
-
-/* Return difference between MARK and current posistion of MARK's stream. */
-int
-DEFUN(_IO_marker_delta, (mark),
- struct _IO_marker *mark)
-{
- int cur_pos;
- if (mark->_sbuf == NULL)
- return BAD_DELTA;
- if (_IO_in_backup(mark->_sbuf))
- cur_pos = mark->_sbuf->_IO_read_ptr - mark->_sbuf->_IO_read_end;
- else
- cur_pos = mark->_sbuf->_IO_read_ptr - mark->_sbuf->_IO_read_base;
- return mark->_pos - cur_pos;
-}
-
-int
-DEFUN(_IO_seekmark, (fp, mark, delta),
- _IO_FILE *fp AND struct _IO_marker *mark AND int delta)
-{
- if (mark->_sbuf != fp)
- return EOF;
- if (mark->_pos >= 0)
- {
- if (_IO_in_backup(fp))
- _IO_switch_to_main_get_area(fp);
- fp->_IO_read_ptr = fp->_IO_read_base + mark->_pos;
- }
- else
- {
- if (!_IO_in_backup(fp))
- _IO_switch_to_backup_area(fp);
- fp->_IO_read_ptr = fp->_IO_read_end + mark->_pos;
- }
- return 0;
-}
-
-void
-DEFUN(_IO_unsave_markers, (fp),
- register _IO_FILE *fp)
-{
- register struct _IO_marker *mark = fp->_markers;
- if (mark)
- {
-#ifdef TODO
- streampos offset = seekoff(0, ios::cur, ios::in);
- if (offset != EOF)
- {
- offset += eGptr() - Gbase();
- for ( ; mark != NULL; mark = mark->_next)
- mark->set_streampos(mark->_pos + offset);
- }
- else
- {
- for ( ; mark != NULL; mark = mark->_next)
- mark->set_streampos(EOF);
- }
-#endif
- fp->_markers = 0;
- }
-
- if (_IO_have_backup(fp))
- _IO_free_backup_area(fp);
-}
-
-int
-DEFUN(_IO_nobackup_pbackfail, (fp, c),
- register _IO_FILE *fp AND int c)
-{
- if (fp->_IO_read_ptr > fp->_IO_read_base)
- fp->_IO_read_ptr--;
- if (c != EOF && *fp->_IO_read_ptr != c)
- *fp->_IO_read_ptr = c;
- return (unsigned char)c;
-}
-
-int
-DEFUN(_IO_default_pbackfail, (fp, c),
- register _IO_FILE *fp AND int c)
-{
- if (fp->_IO_read_ptr <= fp->_IO_read_base)
- {
- /* Need to handle a filebuf in write mode (switch to read mode). FIXME!*/
- if (_IO_have_backup(fp) && !_IO_in_backup(fp))
- _IO_switch_to_backup_area(fp);
-
- if (!_IO_have_backup(fp))
- {
- /* No backup buffer: allocate one. */
- /* Use nshort buffer, if unused? (probably not) FIXME */
- int backup_size = 128;
- char *bbuf = (char*)malloc(backup_size);
- if (bbuf == NULL)
- return EOF;
- fp->_IO_save_base = bbuf;
- fp->_IO_save_end = fp->_IO_save_base + backup_size;
- fp->_IO_backup_base = fp->_IO_save_end;
- _IO_switch_to_backup_area(fp);
- }
- else if (fp->_IO_read_ptr <= fp->_IO_read_base)
- {
- /* Increase size of existing backup buffer. */
- _IO_size_t new_size;
- _IO_size_t old_size = fp->_IO_read_end - fp->_IO_read_base;
- char *new_buf;
- new_size = 2 * old_size;
- new_buf = (char*)malloc(new_size);
- if (new_buf == NULL)
- return EOF;
- memcpy(new_buf+(new_size-old_size), fp->_IO_read_base, old_size);
- free (fp->_IO_read_base);
- _IO_setg(fp,
- new_buf, new_buf+(new_size-old_size), new_buf+new_size);
- fp->_IO_backup_base = fp->_IO_read_ptr;
- }
- }
- fp->_IO_read_ptr--;
- if (c != EOF && *fp->_IO_read_ptr != c)
- *fp->_IO_read_ptr = c;
- return (unsigned char)*fp->_IO_read_ptr;
-}
-
-_IO_pos_t
-DEFUN(_IO_default_seek, (fp, offset, dir),
- _IO_FILE *fp AND _IO_off_t offset AND int dir)
-{
- return _IO_pos_BAD;
-}
-
-int
-DEFUN(_IO_default_stat, (fp, st),
- _IO_FILE *fp AND void* st)
-{
- return EOF;
-}
-
-_IO_ssize_t
-DEFUN(_IO_default_read, (fp, data, n),
- register _IO_FILE* fp AND void* data AND _IO_ssize_t n)
-{
- return -1;
-}
-
-_IO_ssize_t
-DEFUN(_IO_default_write, (fp, data, n),
- register _IO_FILE* fp AND const void* data AND _IO_ssize_t n)
-{
- return 0;
-}
-
-
-#ifdef TODO
-#if defined(linux)
-#define IO_CLEANUP ;
-#endif
-
-#ifdef IO_CLEANUP
- IO_CLEANUP
-#else
-struct __io_defs {
- __io_defs() { }
- ~__io_defs() { _IO_cleanup(); }
-};
-__io_defs io_defs__;
-#endif
-
-#endif /* TODO */
diff --git a/contrib/libg++/libio/indstream.cc b/contrib/libg++/libio/indstream.cc
deleted file mode 100644
index 15a1bb2778d3..000000000000
--- a/contrib/libg++/libio/indstream.cc
+++ /dev/null
@@ -1,121 +0,0 @@
-/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License.
-
-Written by Per Bothner (bothner@cygnus.com). */
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-
-#include <indstream.h>
-
-indirectbuf::indirectbuf(streambuf *get, streambuf *put, int delete_mode)
-: streambuf()
-{
- _get_stream = get;
- _put_stream = put == NULL ? get : put;
- _delete_flags = delete_mode;
-}
-
-indirectbuf::~indirectbuf()
-{
- if (_delete_flags & ios::in) delete get_stream();
- if (_delete_flags & ios::out) delete put_stream();
-}
-
-streamsize indirectbuf::xsputn(const char* s, streamsize n)
-{
- return put_stream()->sputn(s, n);
-}
-
-streamsize indirectbuf::xsgetn(char* s, streamsize n)
-{
- return get_stream()->sgetn(s, n);
-}
-
-int indirectbuf::overflow(int c /* = EOF */)
-{
- if (c == EOF)
- return put_stream()->overflow(c);
- else
- return put_stream()->sputc(c);
-}
-
-int indirectbuf::underflow()
-{
- return get_stream()->sgetc();
-}
-
-int indirectbuf::uflow()
-{
- return get_stream()->sbumpc();
-}
-
-streampos indirectbuf::seekoff(streamoff off, _seek_dir dir, int mode)
-{
- int ret_val = 0;
- int select = mode == 0 ? (ios::in|ios::out) : mode;
- streambuf *gbuf = (select & ios::in) ? get_stream() : (streambuf*)NULL;
- streambuf *pbuf = (select & ios::out) ? put_stream() : (streambuf*)NULL;
- if (gbuf == pbuf)
- ret_val = gbuf->seekoff(off, dir, mode);
- else {
- if (gbuf)
- ret_val = gbuf->seekoff(off, dir, ios::in);
- if (pbuf && ret_val != EOF)
- ret_val = pbuf->seekoff(off, dir, ios::out);
- }
- return ret_val;
-}
-
-streampos indirectbuf::seekpos(streampos pos, int mode)
-{
- int ret_val = EOF;
- int select = mode == 0 ? (ios::in|ios::out) : mode;
- streambuf *gbuf = (select & ios::in) ? get_stream() : (streambuf*)NULL;
- streambuf *pbuf = (select & ios::out) ? put_stream() : (streambuf*)NULL;
- if (gbuf == pbuf && gbuf != NULL)
- ret_val = gbuf->seekpos(pos, mode);
- else {
- if (gbuf)
- ret_val = gbuf->seekpos(pos, ios::in);
- if (pbuf && ret_val != EOF)
- ret_val = pbuf->seekpos(pos, ios::out);
- }
- return ret_val;
-}
-
-int indirectbuf::sync()
-{
- streambuf *gbuf = get_stream();
- int get_ret_val = gbuf ? gbuf->sync() : 0;
- streambuf *pbuf = put_stream();
- int put_ret_val = (pbuf && pbuf != gbuf) ? pbuf->sync() : 0;
- return get_ret_val || put_ret_val;
-}
-
-int indirectbuf::pbackfail(int c)
-{
- return get_stream()->sputbackc(c);
-}
diff --git a/contrib/libg++/libio/indstream.h b/contrib/libg++/libio/indstream.h
deleted file mode 100644
index c4558623d079..000000000000
--- a/contrib/libg++/libio/indstream.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License.
-
-Written by Per Bothner (bothner@cygnus.com). */
-
-#ifndef _INDSTREAM_H
-#define _INDSTREAM_H
-
-#ifdef __GNUG__
-#pragma interface
-#endif
-
-#include <iostream.h>
-
-extern "C++" {
-// An indirectbuf is one that forwards all of its I/O requests
-// to another streambuf.
-// All get-related requests are sent to get_stream().
-// All put-related requests are sent to put_stream().
-
-// An indirectbuf can be used to implement Common Lisp
-// synonym-streams and two-way-streams.
-//
-// class synonymbuf : public indirectbuf {
-// Symbol *sym;
-// synonymbuf(Symbol *s) { sym = s; }
-// virtual streambuf *lookup_stream(int mode) {
-// return coerce_to_streambuf(lookup_value(sym)); }
-// };
-
-class indirectbuf : public streambuf {
- protected:
- streambuf *_get_stream; // Optional cache for get_stream().
- streambuf *_put_stream; // Optional cache for put_stream().
- int _delete_flags;
- public:
- streambuf *get_stream()
- { return _get_stream ? _get_stream : lookup_stream(ios::in); }
- streambuf *put_stream()
- { return _put_stream ? _put_stream : lookup_stream(ios::out); }
- virtual streambuf *lookup_stream(int/*mode*/) { return NULL; } // ERROR!
- indirectbuf(streambuf *get=NULL, streambuf *put=NULL, int delete_mode=0);
- virtual ~indirectbuf();
- virtual streamsize xsputn(const char* s, streamsize n);
- virtual streamsize xsgetn(char* s, streamsize n);
- virtual int underflow();
- virtual int uflow();
- virtual int overflow(int c = EOF);
- virtual streampos seekoff(streamoff, _seek_dir, int mode=ios::in|ios::out);
- virtual streampos seekpos(streampos pos, int mode = ios::in|ios::out);
- virtual int sync();
- virtual int pbackfail(int c);
-};
-} // extern "C++"
-
-#endif /* !_INDSTREAM_H */
diff --git a/contrib/libg++/libio/ioassign.cc b/contrib/libg++/libio/ioassign.cc
deleted file mode 100644
index 5b8e68bbf539..000000000000
--- a/contrib/libg++/libio/ioassign.cc
+++ /dev/null
@@ -1,49 +0,0 @@
-/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1994 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-/* Written by Per Bothner (bothner@cygnus.com). */
-
-#include <iostream.h>
-#include "libioP.h"
-
-// These method are provided for backward compatibility reasons.
-// It's generally poor style to use them.
-// They are not supported by the ANSI/ISO working paper.
-
-_IO_istream_withassign& _IO_istream_withassign::operator=(istream& rhs)
-{
- if (&rhs != (istream*)this)
- {
- init (rhs.rdbuf ());
- _gcount = 0;
- }
- return *this;
-}
-
-_IO_ostream_withassign& _IO_ostream_withassign::operator=(ostream& rhs)
-{
- if (&rhs != (ostream*)this)
- init (rhs.rdbuf ());
- return *this;
-}
diff --git a/contrib/libg++/libio/ioextend.cc b/contrib/libg++/libio/ioextend.cc
deleted file mode 100644
index e0ec0cb64998..000000000000
--- a/contrib/libg++/libio/ioextend.cc
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include <iostream.h>
-
-static int __xalloc = 0;
-
-int ios::xalloc()
-{
- return __xalloc++;
-}
-
-static ios::fmtflags __used_fmt_flags
-= ios::skipws | ios::left | ios::right | ios::internal
-| ios::dec | ios::oct | ios::hex | ios::showbase | ios::showpoint
-| ios::uppercase | ios::showpos | ios::scientific | ios::fixed
-#ifndef _IO_NEW_STREAMS
-| ios::dont_close
-#endif
-| ios::unitbuf | ios::stdio;
-
-ios::fmtflags ios::bitalloc()
-{
- fmtflags bit_to_try = (fmtflags)1;
- for (; bit_to_try; bit_to_try <<= 1)
- {
- if ((__used_fmt_flags & bit_to_try) == 0)
- {
- __used_fmt_flags |= bit_to_try;
- return bit_to_try;
- }
- }
- return 0;
-}
-
-// NOTE: This implementation of ios::iword and ios::pword assumes
-// that these methods are seldom used, so we want to minimize
-// the space and time overhead when NOT using these methods.
-//
-// ANSI specifies two conceptually-infinite arrays, one whose
-// elements are longs, and one whose elements are (void*)s.
-// We implement this as a single array, each of whose element is
-// a (struct ptr_and_long), which has space for both a long and a void*.
-// We also specify that (the i field of) the 0'th element of the array
-// contains the allocated length of the array (not counting that
-// initial element).
-
-struct ptr_and_long {
- void *p;
- long i;
-};
-
-static struct ptr_and_long&
-get_array_element(ios& io, int index)
-{
- if (index < 0)
- io._throw_failure();
- register struct ptr_and_long *array = (ptr_and_long*)io._arrays;
- int old_length = array == NULL ? 0 : array[0].i;
- if (index >= old_length)
- {
- register int i;
- int new_length = index + 10;
- register struct ptr_and_long *new_array
- = new ptr_and_long[1 + new_length];
- if (array != NULL)
- {
- for (i = 1; i <= old_length; i++)
- new_array[i] = array[i];
- delete [] array;
- }
- for (i = old_length + 1; i <= new_length; i++)
- {
- new_array[i].i = 0;
- new_array[i].p = (void*)0;
- }
- new_array[0].i = new_length;
- new_array[0].p = (void*)0;
- io._arrays = (void*)new_array;
- array = new_array;
- }
- return array[index+1];
-}
-
-long& ios::iword(int index)
-{
- return get_array_element(*this, index).i;
-}
-
-void*& ios::pword(int index)
-{
- return get_array_element(*this, index).p;
-}
-
-long ios::iword(int index) const
-{
- if (index < 0)
- _throw_failure();
- register struct ptr_and_long *pl_array = (ptr_and_long*)_arrays;
- int len = pl_array == NULL ? 0 : pl_array[0].i;
- return index >= len ? 0 : pl_array[index+1].i;
-}
-
-void* ios::pword(int index) const
-{
- if (index < 0)
- _throw_failure();
- register struct ptr_and_long *pl_array = (ptr_and_long*)_arrays;
- int len = pl_array == NULL ? 0 : pl_array[0].i;
- return index >= len ? 0 : pl_array[index+1].p;
-}
diff --git a/contrib/libg++/libio/iofclose.c b/contrib/libg++/libio/iofclose.c
deleted file mode 100644
index f3ae0964e826..000000000000
--- a/contrib/libg++/libio/iofclose.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include "libioP.h"
-#ifdef __STDC__
-#include <stdlib.h>
-#endif
-
-int
-DEFUN(_IO_fclose, (fp),
- register _IO_FILE *fp)
-{
- int status;
- CHECK_FILE(fp, EOF);
- if (fp->_IO_file_flags & _IO_IS_FILEBUF)
- status = _IO_file_close_it(fp);
- else
- status = fp->_flags & _IO_ERR_SEEN ? -1 : 0;
- _IO_FINISH (fp);
- if (fp != _IO_stdin && fp != _IO_stdout && fp != _IO_stderr)
- {
- fp->_IO_file_flags = 0;
- free(fp);
- }
- return status;
-}
diff --git a/contrib/libg++/libio/iofdopen.c b/contrib/libg++/libio/iofdopen.c
deleted file mode 100644
index f8bc76869ad9..000000000000
--- a/contrib/libg++/libio/iofdopen.c
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
-Copyright (C) 1993, 1994 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#ifdef __STDC__
-#include <stdlib.h>
-#endif
-#include "libioP.h"
-#include <fcntl.h>
-
-#ifndef _IO_fcntl
-#define _IO_fcntl fcntl
-#endif
-
-_IO_FILE *
-DEFUN(_IO_fdopen, (fd, mode),
- int fd AND const char *mode)
-{
- int read_write;
- int posix_mode = 0;
- struct _IO_FILE_plus *fp;
- int fd_flags;
-
- switch (*mode++)
- {
- case 'r':
- read_write = _IO_NO_WRITES;
- break;
- case 'w':
- read_write = _IO_NO_READS;
- break;
- case 'a':
- posix_mode = O_APPEND;
- read_write = _IO_NO_READS|_IO_IS_APPENDING;
- break;
- default:
-#ifdef EINVAL
- errno = EINVAL;
-#endif
- return NULL;
- }
- if (mode[0] == '+' || (mode[0] == 'b' && mode[1] == '+'))
- read_write &= _IO_IS_APPENDING;
-#ifdef F_GETFL
- fd_flags = _IO_fcntl (fd, F_GETFL);
-#ifndef O_ACCMODE
-#define O_ACCMODE (O_RDONLY|O_WRONLY|O_RDWR)
-#endif
- if (fd_flags == -1
- || ((fd_flags & O_ACCMODE) == O_RDONLY && !(read_write & _IO_NO_WRITES))
- || ((fd_flags & O_ACCMODE) == O_WRONLY && !(read_write & _IO_NO_READS)))
- return NULL;
-
- /* The May 93 draft of P1003.4/D14.1 (redesignated as 1003.1b)
- [System Application Program Interface (API) Amendment 1:
- Realtime Extensions], Rationale B.8.3.3
- Open a Stream on a File Descriptor says:
-
- Although not explicitly required by POSIX.1, a good
- implementation of append ("a") mode would cause the
- O_APPEND flag to be set.
-
- (Historical implementations [such as Solaris2] do a one-time
- seek in fdopen.)
-
- However, we do not turn O_APPEND off if the mode is "w" (even
- though that would seem consistent) because that would be more
- likely to break historical programs.
- */
- if ((posix_mode & O_APPEND) && !(fd_flags & O_APPEND))
- {
-#ifdef F_SETFL
- if (_IO_fcntl (fd, F_SETFL, fd_flags | O_APPEND) == -1)
-#endif
- return NULL;
- }
-#endif
-
- fp = (struct _IO_FILE_plus*)malloc(sizeof(struct _IO_FILE_plus));
- if (fp == NULL)
- return NULL;
- _IO_init(&fp->file, 0);
- _IO_JUMPS(&fp->file) = &_IO_file_jumps;
- _IO_file_init(&fp->file);
-#if !_IO_UNIFIED_JUMPTABLES
- fp->vtable = NULL;
-#endif
- if (_IO_file_attach(&fp->file, fd) == NULL)
- {
- _IO_un_link(&fp->file);
- free (fp);
- return NULL;
- }
- fp->file._flags &= ~_IO_DELETE_DONT_CLOSE;
-
- fp->file._IO_file_flags =
- _IO_mask_flags(&fp->file, read_write,
- _IO_NO_READS+_IO_NO_WRITES+_IO_IS_APPENDING);
-
- return (_IO_FILE*)fp;
-}
diff --git a/contrib/libg++/libio/iofflush.c b/contrib/libg++/libio/iofflush.c
deleted file mode 100644
index ecb816d41986..000000000000
--- a/contrib/libg++/libio/iofflush.c
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include "libioP.h"
-
-int
-DEFUN(_IO_fflush, (fp),
- register _IO_FILE *fp)
-{
- if (fp == NULL)
- return _IO_flush_all();
- else
- {
- CHECK_FILE(fp, EOF);
- return _IO_SYNC (fp) ? EOF : 0;
- }
-}
diff --git a/contrib/libg++/libio/iofgetpos.c b/contrib/libg++/libio/iofgetpos.c
deleted file mode 100644
index 5e7a8632102a..000000000000
--- a/contrib/libg++/libio/iofgetpos.c
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include "libioP.h"
-#include <errno.h>
-/* ANSI explicily requires setting errno to a positive value on failure. */
-
-int
-DEFUN(_IO_fgetpos, (fp, posp),
- _IO_FILE* fp AND _IO_fpos_t *posp)
-{
- _IO_fpos_t pos;
- CHECK_FILE(fp, EOF);
- pos = _IO_seekoff(fp, 0, _IO_seek_cur, 0);
- if (pos == _IO_pos_BAD)
- {
-#ifdef EIO
- if (errno == 0)
- errno = EIO;
-#endif
- return EOF;
- }
- *posp = pos;
- return 0;
-}
diff --git a/contrib/libg++/libio/iofgets.c b/contrib/libg++/libio/iofgets.c
deleted file mode 100644
index 7b0b708a2083..000000000000
--- a/contrib/libg++/libio/iofgets.c
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include "libioP.h"
-
-char*
-DEFUN(_IO_fgets, (buf, n, fp),
- char* buf AND int n AND _IO_FILE* fp)
-{
- _IO_size_t count;
- CHECK_FILE(fp, NULL);
- if (n <= 0)
- return NULL;
- count = _IO_getline(fp, buf, n - 1, '\n', 1);
- if (count == 0 || (fp->_IO_file_flags & _IO_ERR_SEEN))
- return NULL;
- buf[count] = 0;
- return buf;
-}
diff --git a/contrib/libg++/libio/iofopen.c b/contrib/libg++/libio/iofopen.c
deleted file mode 100644
index 96910520ce73..000000000000
--- a/contrib/libg++/libio/iofopen.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include "libioP.h"
-#ifdef __STDC__
-#include <stdlib.h>
-#endif
-
-_IO_FILE *
-DEFUN(_IO_fopen, (filename, mode),
- const char *filename AND const char *mode)
-{
- struct _IO_FILE_plus *fp =
- (struct _IO_FILE_plus*)malloc(sizeof(struct _IO_FILE_plus));
- if (fp == NULL)
- return NULL;
- _IO_init(&fp->file, 0);
- _IO_JUMPS(&fp->file) = &_IO_file_jumps;
- _IO_file_init(&fp->file);
-#if !_IO_UNIFIED_JUMPTABLES
- fp->vtable = NULL;
-#endif
- if (_IO_file_fopen(&fp->file, filename, mode) != NULL)
- return (_IO_FILE*)fp;
- _IO_un_link(&fp->file);
- free (fp);
- return NULL;
-}
diff --git a/contrib/libg++/libio/iofprintf.c b/contrib/libg++/libio/iofprintf.c
deleted file mode 100644
index 11c76421809f..000000000000
--- a/contrib/libg++/libio/iofprintf.c
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include "libioP.h"
-
-#ifdef __STDC__
-#include <stdarg.h>
-#else
-#include <varargs.h>
-#endif
-
-int
-_IO_fprintf
-#ifdef __STDC__
- (_IO_FILE *fp, const char* format, ...)
-#else
-(fp, format, va_alist) _IO_FILE *fp; char *format; va_dcl
-#endif
-{
- int ret;
- va_list args;
- CHECK_FILE(fp, -1);
- _IO_va_start(args, format);
- ret = _IO_vfprintf(fp, format, args);
- va_end(args);
- return ret;
-}
diff --git a/contrib/libg++/libio/iofputs.c b/contrib/libg++/libio/iofputs.c
deleted file mode 100644
index 7a2580f7e356..000000000000
--- a/contrib/libg++/libio/iofputs.c
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include "libioP.h"
-#include <string.h>
-
-int
-DEFUN(_IO_fputs, (str, fp),
- const char *str AND _IO_FILE *fp)
-{
- _IO_size_t len = strlen(str);
- CHECK_FILE(fp, EOF);
- if (_IO_sputn(fp, str, len) != len)
- return EOF;
- return 1;
-}
diff --git a/contrib/libg++/libio/iofread.c b/contrib/libg++/libio/iofread.c
deleted file mode 100644
index 8516cf30c147..000000000000
--- a/contrib/libg++/libio/iofread.c
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include "libioP.h"
-
-_IO_size_t
-DEFUN(_IO_fread, (buf, size, count, fp),
- void *buf AND _IO_size_t size AND _IO_size_t count AND _IO_FILE* fp)
-{
- _IO_size_t bytes_requested = size*count;
- _IO_size_t bytes_read;
- CHECK_FILE(fp, 0);
- if (bytes_requested == 0)
- return 0;
- bytes_read = _IO_sgetn(fp, (char *)buf, bytes_requested);
- return bytes_requested == bytes_read ? count : bytes_read / size;
-}
diff --git a/contrib/libg++/libio/iofscanf.c b/contrib/libg++/libio/iofscanf.c
deleted file mode 100644
index 3e12d9b5315c..000000000000
--- a/contrib/libg++/libio/iofscanf.c
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include "libioP.h"
-
-#ifdef __STDC__
-#include <stdarg.h>
-#else
-#include <varargs.h>
-#endif
-
-int
-_IO_fscanf
-#ifdef __STDC__
- (_IO_FILE *fp, const char* format, ...)
-#else
-(fp, format, va_alist) _IO_FILE *fp; char *format; va_dcl
-#endif
-{
- int ret;
- va_list args;
- CHECK_FILE(fp, EOF);
- _IO_va_start(args, format);
- ret = _IO_vfscanf(fp, format, args, NULL);
- va_end(args);
- return ret;
-}
diff --git a/contrib/libg++/libio/iofsetpos.c b/contrib/libg++/libio/iofsetpos.c
deleted file mode 100644
index ac8a3deb12d1..000000000000
--- a/contrib/libg++/libio/iofsetpos.c
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include <libioP.h>
-#include <errno.h>
-
-int
-DEFUN(_IO_fsetpos, (fp, posp),
- _IO_FILE* fp AND const _IO_fpos_t *posp)
-{
- CHECK_FILE(fp, EOF);
- if (_IO_seekpos(fp, *posp, _IOS_INPUT|_IOS_OUTPUT) == _IO_pos_BAD)
- {
- /*ANSI explicily requires setting errno to a positive value on failure.*/
-#ifdef EIO
- if (errno == 0)
- errno = EIO;
-#endif
- return EOF;
- }
- return 0;
-}
diff --git a/contrib/libg++/libio/ioftell.c b/contrib/libg++/libio/ioftell.c
deleted file mode 100644
index d49ddaac8213..000000000000
--- a/contrib/libg++/libio/ioftell.c
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include "libioP.h"
-#include <errno.h>
-/* ANSI explicily requires setting errno to a positive value on failure. */
-
-long int
-DEFUN(_IO_ftell, (fp),
- _IO_FILE* fp)
-{
- _IO_pos_t pos;
- CHECK_FILE(fp, -1L);
- pos = _IO_seekoff(fp, 0, _IO_seek_cur, 0);
- if (pos == _IO_pos_BAD)
- {
-#ifdef EIO
- if (errno == 0)
- errno = EIO;
-#endif
- return -1L;
- }
- return _IO_pos_as_off(pos);
-}
diff --git a/contrib/libg++/libio/iofwrite.c b/contrib/libg++/libio/iofwrite.c
deleted file mode 100644
index eb3cd32b028a..000000000000
--- a/contrib/libg++/libio/iofwrite.c
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include "libioP.h"
-
-_IO_size_t
-DEFUN(_IO_fwrite, (buf, size, count, fp),
- const void* buf AND _IO_size_t size AND _IO_size_t count
- AND _IO_FILE *fp)
-{
- _IO_size_t request = size*count;
- _IO_size_t written;
- CHECK_FILE(fp, 0);
- if (request == 0)
- return 0;
- written = _IO_sputn(fp, (const char *)buf, request);
- /* Many traditional implementations return 0 if size==0 && count > 0,
- but ANSI seems to require us to return count in this case. */
- if (written == request)
- return count;
- else
- return written/size;
-}
diff --git a/contrib/libg++/libio/iogetdelim.c b/contrib/libg++/libio/iogetdelim.c
deleted file mode 100644
index ee6c0bf1f197..000000000000
--- a/contrib/libg++/libio/iogetdelim.c
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
-Copyright (C) 1994 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#ifdef __STDC__
-#include <stdlib.h>
-#endif
-#include "libioP.h"
-#include <string.h>
-#include <errno.h>
-
-/* Read up to (and including) a TERMINATOR from FP into *LINEPTR
- (and null-terminate it). *LINEPTR is a pointer returned from malloc (or
- NULL), pointing to *N characters of space. It is realloc'ed as
- necessary. Returns the number of characters read (not including the
- null terminator), or -1 on error or EOF. */
-
-_IO_ssize_t
-DEFUN(_IO_getdelim, (lineptr, n, delimiter, fp),
- char **lineptr AND _IO_size_t *n AND int delimiter AND _IO_FILE *fp)
-{
- register _IO_ssize_t cur_len = 0;
- _IO_ssize_t len;
-
- if (lineptr == NULL || n == NULL)
- {
-#ifdef EINVAL
- errno = EINVAL;
-#endif
- return -1;
- }
- CHECK_FILE (fp, -1);
- if (_IO_ferror (fp))
- return -1;
-
- if (*lineptr == NULL || *n == 0)
- {
- *n = 120;
- *lineptr = (char *) malloc (*n);
- if (*lineptr == NULL)
- return -1;
- }
-
- len = fp->_IO_read_end - fp->_IO_read_ptr;
- if (len <= 0)
- {
- if (__underflow (fp) == EOF)
- return -1;
- len = fp->_IO_read_end - fp->_IO_read_ptr;
- }
-
- for (;;)
- {
- _IO_size_t needed;
- char *t;
- t = (char *) memchr ((void *) fp->_IO_read_ptr, delimiter, len);
- if (t != NULL)
- len = (t - fp->_IO_read_ptr) + 1;
- /* make enough space for len+1 (for final NUL) bytes. */
- needed = cur_len + len + 1;
- if (needed > *n)
- {
- if (t == NULL && needed < 2 * *n)
- needed = 2 * *n; /* Be generous. */
- *n = needed;
- *lineptr = (char *) realloc (*lineptr, needed);
- if (*lineptr == NULL)
- return -1;
- }
- memcpy (*lineptr + cur_len, (void *) fp->_IO_read_ptr, len);
- fp->_IO_read_ptr += len;
- cur_len += len;
- if (t != NULL || __underflow (fp) == EOF)
- break;
- len = fp->_IO_read_end - fp->_IO_read_ptr;
- }
- (*lineptr)[cur_len] = '\0';
- return cur_len;
-}
diff --git a/contrib/libg++/libio/iogetline.c b/contrib/libg++/libio/iogetline.c
deleted file mode 100644
index 278905d135d3..000000000000
--- a/contrib/libg++/libio/iogetline.c
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include "libioP.h"
-#include <string.h>
-
-/* Algorithm based on that used by Berkeley pre-4.4 fgets implementation.
-
- Read chars into buf (of size n), until delim is seen.
- Return number of chars read (at most n).
- Does not put a terminating '\0' in buf.
- If extract_delim < 0, leave delimiter unread.
- If extract_delim > 0, insert delim in output. */
-
-_IO_size_t
-DEFUN(_IO_getline, (fp, buf, n, delim, extract_delim),
- _IO_FILE *fp AND char* buf AND _IO_size_t n
- AND int delim AND int extract_delim)
-{
- register char *ptr = buf;
- do
- {
- _IO_ssize_t len = fp->_IO_read_end - fp->_IO_read_ptr;
- char *t;
- if (len <= 0)
- if (__underflow(fp) == EOF)
- break;
- else
- len = fp->_IO_read_end - fp->_IO_read_ptr;
- if (len >= n)
- len = n;
- t = (char*)memchr((void*)fp->_IO_read_ptr, delim, len);
- if (t != NULL)
- {
- _IO_size_t old_len = ptr-buf;
- len = t - fp->_IO_read_ptr;
- if (extract_delim >= 0)
- {
- t++;
- if (extract_delim > 0)
- len++;
- }
- memcpy((void*)ptr, (void*)fp->_IO_read_ptr, len);
- fp->_IO_read_ptr = t;
- return old_len + len;
- }
- memcpy((void*)ptr, (void*)fp->_IO_read_ptr, len);
- fp->_IO_read_ptr += len;
- ptr += len;
- n -= len;
- } while (n != 0);
- return ptr - buf;
-}
diff --git a/contrib/libg++/libio/iogets.c b/contrib/libg++/libio/iogets.c
deleted file mode 100644
index f45d9c16e3fd..000000000000
--- a/contrib/libg++/libio/iogets.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include "libioP.h"
-#include <limits.h>
-
-char*
-DEFUN(_IO_gets, (buf),
- char* buf)
-{
- _IO_size_t count;
- int ch = _IO_getc (_IO_stdin);
- if (ch == EOF)
- return NULL;
- if (ch == '\n')
- count = 0;
- else
- {
- buf[0] = (char)ch;
- count = _IO_getline(_IO_stdin, buf + 1, INT_MAX, '\n', 0) + 1;
- if (_IO_stdin->_IO_file_flags & _IO_ERR_SEEN)
- return NULL;
- }
- buf[count] = 0;
- return buf;
-}
diff --git a/contrib/libg++/libio/ioignore.c b/contrib/libg++/libio/ioignore.c
deleted file mode 100644
index a7c2f286755f..000000000000
--- a/contrib/libg++/libio/ioignore.c
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include "libioP.h"
-
-int
-DEFUN(_IO_ignore, (fp, n),
- register _IO_FILE *fp AND _IO_size_t n)
-{
- register _IO_size_t more = n;
- for (;;)
- {
- _IO_ssize_t count = fp->_IO_read_end - fp->_IO_read_ptr;
- if (count > 0)
- {
- if (count > more)
- count = more;
- fp->_IO_read_ptr += count;
- more -= count;
- }
- if (more == 0 || __underflow(fp) == EOF)
- break;
- }
- return n - more;
-}
diff --git a/contrib/libg++/libio/iolibio.h b/contrib/libg++/libio/iolibio.h
deleted file mode 100644
index e5de77ea85c3..000000000000
--- a/contrib/libg++/libio/iolibio.h
+++ /dev/null
@@ -1,53 +0,0 @@
-#include "libio.h"
-
-/* These emulate stdio functionality, but with a different name
- (_IO_ungetc instead of ungetc), and using _IO_FILE instead of FILE. */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-extern int _IO_fclose __P((_IO_FILE*));
-extern _IO_FILE *_IO_fdopen __P((int, const char*));
-extern int _IO_fflush __P((_IO_FILE*));
-extern int _IO_fgetpos __P((_IO_FILE*, _IO_fpos_t*));
-extern char* _IO_fgets __P((char*, int, _IO_FILE*));
-extern _IO_FILE *_IO_fopen __P((const char*, const char*));
-extern int _IO_fprintf __P((_IO_FILE*, const char*, ...));
-extern int _IO_fputs __P((const char*, _IO_FILE*));
-extern int _IO_fsetpos __P((_IO_FILE*, const _IO_fpos_t *));
-extern long int _IO_ftell __P((_IO_FILE*));
-extern _IO_size_t _IO_fread __P((void*, _IO_size_t, _IO_size_t, _IO_FILE*));
-extern _IO_size_t _IO_fwrite __P((const void*,
- _IO_size_t, _IO_size_t, _IO_FILE*));
-extern char* _IO_gets __P((char*));
-extern void _IO_perror __P((const char*));
-extern int _IO_printf __P((const char*, ...));
-extern int _IO_puts __P((const char*));
-extern int _IO_scanf __P((const char*, ...));
-extern void _IO_setbuffer __P((_IO_FILE *, char*, _IO_size_t));
-extern int _IO_setvbuf __P((_IO_FILE*, char*, int, _IO_size_t));
-extern int _IO_sscanf __P((const char*, const char*, ...));
-extern int _IO_sprintf __P((char *, const char*, ...));
-extern int _IO_ungetc __P((int, _IO_FILE*));
-extern int _IO_vsscanf __P((const char *, const char *, _IO_va_list));
-extern int _IO_vsprintf __P((char*, const char*, _IO_va_list));
-#ifndef _IO_pos_BAD
-#define _IO_pos_BAD ((_IO_fpos_t)(-1))
-#endif
-#define _IO_clearerr(FP) ((FP)->_flags &= ~(_IO_ERR_SEEN|_IO_EOF_SEEN))
-#define _IO_fseek(__fp, __offset, __whence) \
- (_IO_seekoff(__fp, __offset, __whence, _IOS_INPUT|_IOS_OUTPUT) == _IO_pos_BAD ? EOF : 0)
-#define _IO_rewind(FILE) (void)_IO_seekoff(FILE, 0, 0, _IOS_INPUT|_IOS_OUTPUT)
-#define _IO_vprintf(FORMAT, ARGS) _IO_vfprintf(_IO_stdout, FORMAT, ARGS)
-#define _IO_freopen(FILENAME, MODE, FP) \
- (_IO_file_close_it(FP), _IO_file_fopen(FP, FILENAME, MODE))
-#define _IO_fileno(FP) ((FP)->_fileno)
-extern _IO_FILE* _IO_popen __P((const char*, const char*));
-#define _IO_pclose _IO_fclose
-#define _IO_setbuf(_FP, _BUF) _IO_setbuffer(_FP, _BUF, _IO_BUFSIZ)
-#define _IO_setlinebuf(_FP) _IO_setvbuf(_FP, NULL, 1, 0)
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/contrib/libg++/libio/iomanip.cc b/contrib/libg++/libio/iomanip.cc
deleted file mode 100644
index fddba55a2b98..000000000000
--- a/contrib/libg++/libio/iomanip.cc
+++ /dev/null
@@ -1,90 +0,0 @@
-/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-
-#include "iomanip.h"
-
-
-// Those functions are called through a pointer,
-// thus it does not make sense, to inline them.
-
-ios & __iomanip_setbase (ios& i, int n)
-{
- ios::fmtflags b;
- switch (n)
- {
- case 8:
- b = ios::oct; break;
- case 10:
- b = ios::dec; break;
- case 16:
- b = ios::hex; break;
- default:
- b = 0;
- }
- i.setf(b, ios::basefield);
- return i;
-}
-
-ios & __iomanip_setfill (ios& i, int n)
-{
- //FIXME if ( i.flags() & ios::widechar )
- i.fill( (char) n);
- //FIXME else
- //FIXME i.fill( (wchar) n);
- return i;
-}
-
-ios & __iomanip_setprecision (ios& i, int n)
-{
- i.precision(n);
- return i;
-}
-ios & __iomanip_setw (ios& i, int n)
-{
- i.width(n);
- return i;
-}
-
-ios & __iomanip_setiosflags (ios& i, ios::fmtflags n)
-{
- i.setf(n,n);
- return i;
-}
-
-ios & __iomanip_resetiosflags (ios& i, ios::fmtflags n)
-{
- i.setf(0,n);
- return i;
-}
-
-template class smanip<int>;
-template class smanip<ios::fmtflags>;
-template istream& operator>>(istream&, const smanip<int>&);
-template istream& operator>>(istream&, const smanip<ios::fmtflags>&);
-template ostream& operator<<(ostream&, const smanip<int>&);
-template ostream& operator<<(ostream&, const smanip<ios::fmtflags>&);
diff --git a/contrib/libg++/libio/iomanip.h b/contrib/libg++/libio/iomanip.h
deleted file mode 100644
index fe1156569b47..000000000000
--- a/contrib/libg++/libio/iomanip.h
+++ /dev/null
@@ -1,165 +0,0 @@
-/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#ifndef _IOMANIP_H
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _IOMANIP_H
-
-#include <iostream.h>
-
-extern "C++" {
-//-----------------------------------------------------------------------------
-// Parametrized Manipulators as specified by ANSI draft
-//-----------------------------------------------------------------------------
-
-//-----------------------------------------------------------------------------
-// Stream Manipulators
-//-----------------------------------------------------------------------------
-//
-template<class TP> class smanip; // TP = Type Param
-
-template<class TP> class sapp {
- ios& (*_f)(ios&, TP);
-public:
- sapp(ios& (*f)(ios&, TP)) : _f(f) {}
- //
- smanip<TP> operator()(TP a)
- { return smanip<TP>(_f, a); }
-};
-
-template <class TP> class smanip {
- ios& (*_f)(ios&, TP);
- TP _a;
-public:
- smanip(ios& (*f)(ios&, TP), TP a) : _f(f), _a(a) {}
- //
- friend
- istream& operator>>(istream& i, const smanip<TP>& m);
- friend
- ostream& operator<<(ostream& o, const smanip<TP>& m);
-};
-
-#ifdef __GNUG__
-extern template class smanip<int>;
-extern template class smanip<ios::fmtflags>;
-#endif
-
-template<class TP>
-inline istream& operator>>(istream& i, const smanip<TP>& m)
-{ (*m._f)(i, m._a); return i; }
-
-template<class TP>
-inline ostream& operator<<(ostream& o, const smanip<TP>& m)
-{ (*m._f)(o, m._a); return o;}
-
-#ifdef __GNUG__
-extern template istream& operator>>(istream&, const smanip<int>&);
-extern template istream& operator>>(istream&, const smanip<ios::fmtflags>&);
-extern template ostream& operator<<(ostream&, const smanip<int>&);
-extern template ostream& operator<<(ostream&, const smanip<ios::fmtflags>&);
-#endif
-
-//-----------------------------------------------------------------------------
-// Input-Stream Manipulators
-//-----------------------------------------------------------------------------
-//
-template<class TP> class imanip;
-
-template<class TP> class iapp {
- istream& (*_f)(istream&, TP);
-public:
- iapp(istream& (*f)(istream&,TP)) : _f(f) {}
- //
- imanip<TP> operator()(TP a)
- { return imanip<TP>(_f, a); }
-};
-
-template <class TP> class imanip {
- istream& (*_f)(istream&, TP);
- TP _a;
-public:
- imanip(istream& (*f)(istream&, TP), TP a) : _f(f), _a(a) {}
- //
- friend
- istream& operator>>(istream& i, const imanip<TP>& m);
-};
-
-template <class TP>
-inline istream& operator>>(istream& i, const imanip<TP>& m)
-{ return (*m._f)( i, m._a); }
-
-//-----------------------------------------------------------------------------
-// Output-Stream Manipulators
-//-----------------------------------------------------------------------------
-//
-template<class TP> class omanip;
-
-template<class TP> class oapp {
- ostream& (*_f)(ostream&, TP);
-public:
- oapp(ostream& (*f)(ostream&,TP)) : _f(f) {}
- //
- omanip<TP> operator()(TP a)
- { return omanip<TP>(_f, a); }
-};
-
-template <class TP> class omanip {
- ostream& (*_f)(ostream&, TP);
- TP _a;
-public:
- omanip(ostream& (*f)(ostream&, TP), TP a) : _f(f), _a(a) {}
- //
- friend
- ostream& operator<<(ostream& o, const omanip<TP>& m);
-};
-
-template <class TP>
-inline ostream& operator<<(ostream& o, const omanip<TP>& m)
-{ return (*m._f)(o, m._a); }
-
-//-----------------------------------------------------------------------------
-// Available Manipulators
-//-----------------------------------------------------------------------------
-
-//
-// Macro to define an iomanip function, with one argument
-// The underlying function is `__iomanip_<name>'
-//
-#define __DEFINE_IOMANIP_FN1(type,param,function) \
- extern ios& __iomanip_##function (ios&, param); \
- inline type<param> function (param n) \
- { return type<param> (__iomanip_##function, n); }
-
-__DEFINE_IOMANIP_FN1( smanip, int, setbase)
-__DEFINE_IOMANIP_FN1( smanip, int, setfill)
-__DEFINE_IOMANIP_FN1( smanip, int, setprecision)
-__DEFINE_IOMANIP_FN1( smanip, int, setw)
-
-__DEFINE_IOMANIP_FN1( smanip, ios::fmtflags, resetiosflags)
-__DEFINE_IOMANIP_FN1( smanip, ios::fmtflags, setiosflags)
-} // extern "C++"
-
-#endif /*!_IOMANIP_H*/
diff --git a/contrib/libg++/libio/iopadn.c b/contrib/libg++/libio/iopadn.c
deleted file mode 100644
index 0e502b712c3b..000000000000
--- a/contrib/libg++/libio/iopadn.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include "libioP.h"
-
-#define PADSIZE 16
-static char const blanks[PADSIZE] =
-{' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '};
-static char const zeroes[PADSIZE] =
-{'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'};
-
-_IO_ssize_t
-DEFUN(_IO_padn, (fp, pad, count),
- _IO_FILE *fp AND int pad AND _IO_ssize_t count)
-{
- char padbuf[PADSIZE];
- const char *padptr;
- register int i;
- _IO_size_t written = 0, w;
-
- if (pad == ' ')
- padptr = blanks;
- else if (pad == '0')
- padptr = zeroes;
- else
- {
- for (i = PADSIZE; --i >= 0; ) padbuf[i] = pad;
- padptr = padbuf;
- }
- for (i = count; i >= PADSIZE; i -= PADSIZE)
- {
- w = _IO_sputn(fp, padptr, PADSIZE);
- written += w;
- if (w != PADSIZE)
- return written;
- }
-
- if (i > 0)
- {
- w = _IO_sputn(fp, padptr, i);
- written += w;
- }
- return written;
-}
diff --git a/contrib/libg++/libio/ioperror.c b/contrib/libg++/libio/ioperror.c
deleted file mode 100644
index 55d822b63a64..000000000000
--- a/contrib/libg++/libio/ioperror.c
+++ /dev/null
@@ -1,22 +0,0 @@
-#include "libioP.h"
-#include <errno.h>
-#include <string.h>
-#ifndef errno
-extern int errno;
-#endif
-
-#ifndef _IO_strerror
-extern char* _IO_strerror __P((int));
-#endif
-
-void
-DEFUN(_IO_perror, (s),
- const char *s)
-{
- char *error = _IO_strerror (errno);
-
- if (s != NULL && *s != '\0')
- _IO_fprintf (_IO_stderr, "%s:", s);
-
- _IO_fprintf (_IO_stderr, "%s\n", error ? error : "");
-}
diff --git a/contrib/libg++/libio/iopopen.c b/contrib/libg++/libio/iopopen.c
deleted file mode 100644
index ef6ad12449f1..000000000000
--- a/contrib/libg++/libio/iopopen.c
+++ /dev/null
@@ -1,222 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-/* written by Per Bothner (bothner@cygnus.com) */
-
-#define _POSIX_SOURCE
-#include "libioP.h"
-#include <sys/types.h>
-#if _IO_HAVE_SYS_WAIT
-#include <signal.h>
-#include <unistd.h>
-#ifdef __STDC__
-#include <stdlib.h>
-#endif
-#include <sys/wait.h>
-
-#ifndef _IO_fork
-#define _IO_fork vfork /* defined in libiberty, if needed */
-_IO_pid_t _IO_fork();
-#endif
-
-#endif /* _IO_HAVE_SYS_WAIT */
-
-#ifndef _IO_pipe
-#define _IO_pipe pipe
-extern int _IO_pipe();
-#endif
-
-#ifndef _IO_dup2
-#define _IO_dup2 dup2
-extern int _IO_dup2();
-#endif
-
-#ifndef _IO_waitpid
-#define _IO_waitpid waitpid
-#endif
-
-#ifndef _IO_execl
-#define _IO_execl execl
-#endif
-#ifndef _IO__exit
-#define _IO__exit _exit
-#endif
-
-struct _IO_proc_file
-{
- struct _IO_FILE_plus file;
- /* Following fields must match those in class procbuf (procbuf.h) */
- _IO_pid_t pid;
- struct _IO_proc_file *next;
-};
-typedef struct _IO_proc_file _IO_proc_file;
-
-static struct _IO_proc_file *proc_file_chain = NULL;
-
-_IO_FILE *
-DEFUN(_IO_proc_open, (fp, command, mode),
- _IO_FILE* fp AND const char *command AND const char *mode)
-{
-#if _IO_HAVE_SYS_WAIT
- int read_or_write;
- int pipe_fds[2];
- int parent_end, child_end;
- _IO_pid_t child_pid;
- if (_IO_file_is_open(fp))
- return NULL;
- if (_IO_pipe(pipe_fds) < 0)
- return NULL;
- if (mode[0] == 'r')
- {
- parent_end = pipe_fds[0];
- child_end = pipe_fds[1];
- read_or_write = _IO_NO_WRITES;
- }
- else
- {
- parent_end = pipe_fds[1];
- child_end = pipe_fds[0];
- read_or_write = _IO_NO_READS;
- }
- ((_IO_proc_file*)fp)->pid = child_pid = _IO_fork();
- if (child_pid == 0)
- {
- int child_std_end = mode[0] == 'r' ? 1 : 0;
- _IO_close(parent_end);
- if (child_end != child_std_end)
- {
- _IO_dup2(child_end, child_std_end);
- _IO_close(child_end);
- }
- /* Posix.2: "popen() shall ensure that any streams from previous
- popen() calls that remain open in the parent process are closed
- in the new child process." */
- while (proc_file_chain)
- {
- _IO_close (_IO_fileno ((_IO_FILE *) proc_file_chain));
- proc_file_chain = proc_file_chain->next;
- }
-
- _IO_execl("/bin/sh", "sh", "-c", command, (char *)0);
- _IO__exit(127);
- }
- _IO_close(child_end);
- if (child_pid < 0)
- {
- _IO_close(parent_end);
- return NULL;
- }
- _IO_fileno(fp) = parent_end;
-
- /* Link into proc_file_chain. */
- ((_IO_proc_file*)fp)->next = proc_file_chain;
- proc_file_chain = (_IO_proc_file*)fp;
-
- _IO_mask_flags (fp, read_or_write, _IO_NO_READS|_IO_NO_WRITES);
- return fp;
-#else /* !_IO_HAVE_SYS_WAIT */
- return NULL;
-#endif
-}
-
-_IO_FILE *
-DEFUN(_IO_popen, (command, mode),
- const char *command AND const char *mode)
-{
- _IO_proc_file *fpx = (_IO_proc_file*)malloc(sizeof(_IO_proc_file));
- _IO_FILE *fp = (_IO_FILE*)fpx;
- if (fp == NULL)
- return NULL;
- _IO_init(fp, 0);
- _IO_JUMPS(fp) = &_IO_proc_jumps;
- _IO_file_init(fp);
-#if !_IO_UNIFIED_JUMPTABLES
- ((struct _IO_FILE_plus*)fp)->vtable = NULL;
-#endif
- if (_IO_proc_open (fp, command, mode) != NULL)
- return fp;
- free (fpx);
- return NULL;
-}
-
-int
-DEFUN(_IO_proc_close, (fp),
- _IO_FILE *fp)
-{
- /* This is not name-space clean. FIXME! */
-#if _IO_HAVE_SYS_WAIT
- int wstatus;
- _IO_proc_file **ptr = &proc_file_chain;
- _IO_pid_t wait_pid;
- int status = -1;
-
- /* Unlink from proc_file_chain. */
- for ( ; *ptr != NULL; ptr = &(*ptr)->next)
- {
- if (*ptr == (_IO_proc_file*)fp)
- {
- *ptr = (*ptr)->next;
- status = 0;
- break;
- }
- }
-
- if (status < 0 || _IO_close(_IO_fileno(fp)) < 0)
- return -1;
- /* POSIX.2 Rationale: "Some historical implementations either block
- or ignore the signals SIGINT, SIGQUIT, and SIGHUP while waiting
- for the child process to terminate. Since this behavior is not
- described in POSIX.2, such implementations are not conforming." */
- do
- {
- wait_pid = _IO_waitpid (((_IO_proc_file*)fp)->pid, &wstatus, 0);
- } while (wait_pid == -1 && errno == EINTR);
- if (wait_pid == -1)
- return -1;
- return wstatus;
-#else /* !_IO_HAVE_SYS_WAIT */
- return -1;
-#endif
-}
-
-struct _IO_jump_t _IO_proc_jumps = {
- JUMP_INIT_DUMMY,
- JUMP_INIT(finish, _IO_file_finish),
- JUMP_INIT(overflow, _IO_file_overflow),
- JUMP_INIT(underflow, _IO_file_underflow),
- JUMP_INIT(uflow, _IO_default_uflow),
- JUMP_INIT(pbackfail, _IO_default_pbackfail),
- JUMP_INIT(xsputn, _IO_file_xsputn),
- JUMP_INIT(xsgetn, _IO_default_xsgetn),
- JUMP_INIT(seekoff, _IO_file_seekoff),
- JUMP_INIT(seekpos, _IO_default_seekpos),
- JUMP_INIT(setbuf, _IO_file_setbuf),
- JUMP_INIT(sync, _IO_file_sync),
- JUMP_INIT(doallocate, _IO_file_doallocate),
- JUMP_INIT(read, _IO_file_read),
- JUMP_INIT(write, _IO_file_write),
- JUMP_INIT(seek, _IO_file_seek),
- JUMP_INIT(close, _IO_proc_close),
- JUMP_INIT(stat, _IO_file_stat)
-};
diff --git a/contrib/libg++/libio/ioprims.c b/contrib/libg++/libio/ioprims.c
deleted file mode 100644
index faa69e0feffd..000000000000
--- a/contrib/libg++/libio/ioprims.c
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-/* I/O OS-level primitives.
- Needs to be replaced if not using Unix.
- Also needs to be replaced if avoiding name-space pollution
- (in which case read would be defined in terms of _IO_read,
- rather than vice versa). */
-
-#include "libioP.h"
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#ifdef TODO
-/* Add open, isatty */
-#endif
-
-_IO_ssize_t
-DEFUN(_IO_read, (fildes, buf, nbyte),
- int fildes AND void *buf AND _IO_size_t nbyte)
-{
- return read (fildes, buf, nbyte);
-}
-
-_IO_ssize_t
-DEFUN(_IO_write, (fildes, buf, nbyte),
- int fildes AND const void *buf AND _IO_size_t nbyte)
-{
- return write (fildes, buf, nbyte);
-}
-
-_IO_off_t
-DEFUN(_IO_lseek, (fildes, offset, whence),
- int fildes AND _IO_off_t offset AND int whence)
-{
- return lseek (fildes, offset, whence);
-}
-
-int
-DEFUN(_IO_close, (fildes),
- int fildes)
-{
- return close (fildes);
-}
-
-int
-DEFUN(_IO_fstat, (fildes, buf),
- int fildes AND struct stat *buf)
-{
- return fstat (fildes, buf);
-}
diff --git a/contrib/libg++/libio/ioprintf.c b/contrib/libg++/libio/ioprintf.c
deleted file mode 100644
index 0b99c2a6637f..000000000000
--- a/contrib/libg++/libio/ioprintf.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include "libioP.h"
-
-#ifdef __STDC__
-#include <stdarg.h>
-#else
-#include <varargs.h>
-#endif
-
-int
-_IO_printf
-#ifdef __STDC__
- (const char* format, ...)
-#else
-(format, va_alist) char *format; va_dcl
-#endif
-{
- int ret;
- va_list args;
- _IO_va_start(args, format);
- ret = _IO_vfprintf(_IO_stdout, format, args);
- va_end(args);
- return ret;
-}
diff --git a/contrib/libg++/libio/ioputs.c b/contrib/libg++/libio/ioputs.c
deleted file mode 100644
index f0a81642853d..000000000000
--- a/contrib/libg++/libio/ioputs.c
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include "libioP.h"
-#include <string.h>
-
-int
-DEFUN(_IO_puts, (str),
- const char *str)
-{
- _IO_size_t len = strlen(str);
- if (_IO_sputn(_IO_stdout, str, len) != len)
- return EOF;
- if (_IO_putc('\n', _IO_stdout) == EOF)
- return EOF;
- return len+1;
-}
diff --git a/contrib/libg++/libio/ioscanf.c b/contrib/libg++/libio/ioscanf.c
deleted file mode 100644
index 405d1e2eb0f7..000000000000
--- a/contrib/libg++/libio/ioscanf.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include "libioP.h"
-
-#ifdef __STDC__
-#include <stdarg.h>
-#else
-#include <varargs.h>
-#endif
-
-int
-_IO_scanf
-#ifdef __STDC__
- (const char* format, ...)
-#else
-(format, va_alist) char *format; va_dcl
-#endif
-{
- int ret;
- va_list args;
- _IO_va_start(args, format);
- ret = _IO_vfscanf(_IO_stdin, format, args, NULL);
- va_end(args);
- return ret;
-}
diff --git a/contrib/libg++/libio/ioseekoff.c b/contrib/libg++/libio/ioseekoff.c
deleted file mode 100644
index 06f4b9d2fe10..000000000000
--- a/contrib/libg++/libio/ioseekoff.c
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include <libioP.h>
-
-_IO_pos_t
-DEFUN(_IO_seekoff, (fp, offset, dir, mode),
- _IO_FILE* fp AND _IO_off_t offset AND int dir AND int mode)
-{
- /* If we have a backup buffer, get rid of it, since the __seekoff
- callback may not know to do the right thing about it.
- This may be over-kill, but it'll do for now. TODO */
-
- if (_IO_have_backup (fp))
- {
- if (dir == _IO_seek_cur && _IO_in_backup (fp))
- offset -= fp->_IO_read_end - fp->_IO_read_ptr;
- _IO_free_backup_area (fp);
- }
-
- return _IO_SEEKOFF (fp, offset, dir, mode);
-}
diff --git a/contrib/libg++/libio/ioseekpos.c b/contrib/libg++/libio/ioseekpos.c
deleted file mode 100644
index 1884f9df8f7c..000000000000
--- a/contrib/libg++/libio/ioseekpos.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include <libioP.h>
-
-_IO_pos_t
-DEFUN(_IO_seekpos, (fp, pos, mode),
- _IO_FILE* fp AND _IO_pos_t pos AND int mode)
-{
- /* If we have a backup buffer, get rid of it, since the __seekoff
- callback may not know to do the right thing about it.
- This may be over-kill, but it'll do for now. TODO */
-
- if (_IO_have_backup (fp))
- _IO_free_backup_area (fp);
-
- return _IO_SEEKPOS (fp, pos, mode);
-}
diff --git a/contrib/libg++/libio/iosetbuffer.c b/contrib/libg++/libio/iosetbuffer.c
deleted file mode 100644
index eb78d75d9ab2..000000000000
--- a/contrib/libg++/libio/iosetbuffer.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include "libioP.h"
-
-void
-DEFUN(_IO_setbuffer, (fp, buf, size),
- _IO_FILE *fp AND char *buf AND _IO_size_t size)
-{
- CHECK_FILE(fp, );
- fp->_flags &= ~_IO_LINE_BUF;
- if (!buf)
- size = 0;
- (void) _IO_SETBUF (fp, buf, size);
-}
diff --git a/contrib/libg++/libio/iosetvbuf.c b/contrib/libg++/libio/iosetvbuf.c
deleted file mode 100644
index 1b2da4f104c9..000000000000
--- a/contrib/libg++/libio/iosetvbuf.c
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include "libioP.h"
-
-#define _IOFBF 0 /* Fully buffered. */
-#define _IOLBF 1 /* Line buffered. */
-#define _IONBF 2 /* No buffering. */
-
-int
-DEFUN(_IO_setvbuf, (fp, buf, mode, size),
- _IO_FILE* fp AND char* buf AND int mode AND _IO_size_t size)
-{
- CHECK_FILE(fp, EOF);
- switch (mode)
- {
- case _IOFBF:
- fp->_IO_file_flags &= ~_IO_LINE_BUF|_IO_UNBUFFERED;
- if (buf == NULL)
- {
- if (fp->_IO_buf_base == NULL)
- {
- /* There is no flag to distinguish between "fully buffered
- mode has been explicitly set" as opposed to "line
- buffering has not been explicitly set". In both
- cases, _IO_LINE_BUF is off. If this is a tty, and
- _IO_filedoalloc later gets called, it cannot know if
- it should set the _IO_LINE_BUF flag (because that is
- the default), or not (because we have explicitly asked
- for fully buffered mode). So we make sure a buffer
- gets allocated now, and explicitly turn off line
- buffering.
-
- A possibly cleaner alternative would be to add an
- extra flag, but then flags are a finite resource. */
- if (_IO_DOALLOCATE (fp) < 0)
- return EOF;
- fp->_IO_file_flags &= ~_IO_LINE_BUF;
- }
- return 0;
- }
- break;
- case _IOLBF:
- fp->_IO_file_flags &= ~_IO_UNBUFFERED;
- fp->_IO_file_flags |= _IO_LINE_BUF;
- if (buf == NULL)
- return 0;
- break;
- case _IONBF:
- buf = NULL;
- size = 0;
- break;
- default:
- return EOF;
- }
- return _IO_SETBUF (fp, buf, size) == NULL ? EOF : 0;
-}
diff --git a/contrib/libg++/libio/iosprintf.c b/contrib/libg++/libio/iosprintf.c
deleted file mode 100644
index b873eb4455d5..000000000000
--- a/contrib/libg++/libio/iosprintf.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include "libioP.h"
-
-#ifdef __STDC__
-#include <stdarg.h>
-#else
-#include <varargs.h>
-#endif
-
-int
-_IO_sprintf
-#ifdef __STDC__
- (char *string, const char* format, ...)
-#else
-(string, format, va_alist) char *string; char *format; va_dcl
-#endif
-{
- int ret;
- va_list args;
- _IO_va_start(args, format);
- ret = _IO_vsprintf(string, format, args);
- va_end(args);
- return ret;
-}
diff --git a/contrib/libg++/libio/iosscanf.c b/contrib/libg++/libio/iosscanf.c
deleted file mode 100644
index 58868778c48e..000000000000
--- a/contrib/libg++/libio/iosscanf.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include "libioP.h"
-
-#ifdef __STDC__
-#include <stdarg.h>
-#else
-#include <varargs.h>
-#endif
-
-int
-_IO_sscanf
-#ifdef __STDC__
- (const char * string, const char* format, ...)
-#else
-(string, format, va_alist) char *string; char *format; va_dcl
-#endif
-{
- int ret;
- va_list args;
- _IO_va_start(args, format);
- ret = _IO_vsscanf(string, format, args);
- va_end(args);
- return ret;
-}
diff --git a/contrib/libg++/libio/iostdio.h b/contrib/libg++/libio/iostdio.h
deleted file mode 100644
index 9ed47a4654a4..000000000000
--- a/contrib/libg++/libio/iostdio.h
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-/* This file defines a stdio-like environment, except that it avoid
- link-time name clashes with an existing stdio.
- It allows for testing the libio using stdio-using programs
- with an incompatible libc.a.
- It is not predantically correct - e.g. some macros are used
- that may evaluate a stream argument more than once. */
-
-#ifndef _IOSTDIO_H
-#define _IOSTDIO_H
-
-#include "iolibio.h"
-
-typedef _IO_FILE FILE;
-#ifndef EOF
-#define EOF (-1)
-#endif
-#ifndef BUFSIZ
-#define BUFSIZ 1024
-#endif
-
-/* #define size_t, fpos_t L_tmpname TMP_MAX */
-
-#define _IOFBF 0 /* Fully buffered. */
-#define _IOLBF 1 /* Line buffered. */
-#define _IONBF 2 /* No buffering. */
-
-#define SEEK_SET 0
-#define SEEK_CUR 1
-#define SEEK_END 2
-
-#define stdin _IO_stdin
-#define stdout _IO_stdout
-#define stderr _IO_stderr
-
-#define getc(_fp) _IO_getc(_fp)
-#define putc(_ch, _fp) _IO_putc(_ch, _fp)
-
-#define clearerr _IO_clearerr
-#define fclose _IO_fclose
-#define feof _IO_feof
-#define ferror _IO_ferror
-#define fflush _IO_fflush
-#define fgetc(__fp) _IO_getc(_fp)
-#define fgetpos _IO_fgetpos
-#define fgets _IO_fgets
-#define fopen _IO_fopen
-#define fprintf _IO_fprintf
-#define fputc(_ch, _fp) _IO_putc(_ch, _fp)
-#define fputs _IO_fputs
-#define fread _IO_fread
-#define freopen _IO_freopen
-#define fscanf _IO_fscanf
-#define fseek _IO_fseek
-#define fsetpos _IO_fsetpos
-#define ftell _IO_ftell
-#define fwrite _IO_fwrite
-#define gets _IO_gets
-#define perror _IO_perror
-#define printf _IO_printf
-#define puts _IO_puts
-#define rewind _IO_rewind
-#define scanf _IO_scanf
-#define setbuf _IO_setbuf
-#define setbuffer _IO_setbuffer
-#define setvbuf _IO_setvbuf
-#define sprintf _IO_sprintf
-#define sscanf _IO_sscanf
-#define ungetc _IO_ungetc
-#define vfprintf _IO_vfprintf
-#define vprintf(__fmt, __args) vfprintf(stdout, __fmt, __args)
-#define vsprintf _IO_vsprintf
-
-#if 0
-/* We can use the libc versions of these, since they don't pass FILE*s. */
-#define remove ??? __P((const char*))
-#define rename ??? __P((const char* _old, const char* _new))
-#define tmpfile ??? __P((void))
-#define tmpnam ??? __P((char*))
-#endif
-
-#if !defined(__STRICT_ANSI__) || defined(_POSIX_SOURCE)
-#define fdopen _IO_fdopen
-#define fileno _IO_fileno
-#define popen _IO_popen
-#define pclose _IO_pclose
-#define setbuf _IO_setbuf
-#define setlinebuf _IO_setlinebuf
-#endif
-
-#endif /* _IOSTDIO_H */
diff --git a/contrib/libg++/libio/iostream.cc b/contrib/libg++/libio/iostream.cc
deleted file mode 100644
index 3bdfd59a054c..000000000000
--- a/contrib/libg++/libio/iostream.cc
+++ /dev/null
@@ -1,821 +0,0 @@
-/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-/* Written by Per Bothner (bothner@cygnus.com). */
-
-#ifdef __GNUC__
-#pragma implementation
-#endif
-#define _STREAM_COMPAT
-#include <iostream.h>
-#include "libioP.h"
-#include <stdio.h> /* Needed for sprintf */
-#include <ctype.h>
-#include <string.h>
-#include <limits.h>
-#include "floatio.h"
-
-#define BUF (MAXEXP+MAXFRACT+1) /* + decimal point */
-
-//#define isspace(ch) ((ch)==' ' || (ch)=='\t' || (ch)=='\n')
-
-istream::istream(streambuf *sb, ostream* tied)
-{
- init (sb, tied);
- _gcount = 0;
-}
-
-int skip_ws(streambuf* sb)
-{
- int ch;
- for (;;) {
- ch = sb->sbumpc();
- if (ch == EOF || !isspace(ch))
- return ch;
- }
-}
-
-istream& istream::get(char& c)
-{
- if (ipfx1()) {
- int ch = _strbuf->sbumpc();
- if (ch == EOF) {
- set(ios::eofbit|ios::failbit);
- _gcount = 0;
- }
- else {
- c = (char)ch;
- _gcount = 1;
- }
- }
- else
- _gcount = 0;
- return *this;
-}
-
-int istream::peek()
-{
- if (!good())
- return EOF;
- if (_tie && rdbuf()->in_avail() == 0)
- _tie->flush();
- int ch = _strbuf->sgetc();
- if (ch == EOF)
- set(ios::eofbit);
- return ch;
-}
-
-istream& istream::ignore(int n /* = 1 */, int delim /* = EOF */)
-{
- _gcount = 0;
- if (ipfx1()) {
- register streambuf* sb = _strbuf;
- if (delim == EOF) {
- _gcount = sb->ignore(n);
- return *this;
- }
- for (;;) {
-#if 0
- if (n != MAXINT) // FIXME
-#endif
- if (--n < 0)
- break;
- int ch = sb->sbumpc();
- if (ch == EOF) {
- set(ios::eofbit|ios::failbit);
- break;
- }
- _gcount++;
- if (ch == delim)
- break;
- }
- }
- return *this;
-}
-
-istream& istream::read(char *s, streamsize n)
-{
- if (ipfx1()) {
- _gcount = _strbuf->sgetn(s, n);
- if (_gcount != n)
- set(ios::failbit|ios::eofbit);
- }
- else
- _gcount = 0;
- return *this;
-}
-
-int
-istream::sync ()
-{
- streambuf *sb = rdbuf ();
- if (sb == NULL)
- return EOF;
- if (sb->sync ()) // Later: pubsync
- {
- setstate (ios::badbit);
- return EOF;
- }
- else
- return 0;
-}
-
-istream& istream::seekg(streampos pos)
-{
- pos = _strbuf->pubseekpos(pos, ios::in);
- if (pos == streampos(EOF))
- set(ios::badbit);
- return *this;
-}
-
-istream& istream::seekg(streamoff off, _seek_dir dir)
-{
- streampos pos = _IO_seekoff (_strbuf, off, (int) dir, _IOS_INPUT);
- if (pos == streampos(EOF))
- set(ios::badbit);
- return *this;
-}
-
-streampos istream::tellg()
-{
-#if 0
- streampos pos = _strbuf->pubseekoff(0, ios::cur, ios::in);
-#else
- streampos pos = _IO_seekoff (_strbuf, 0, _IO_seek_cur, _IOS_INPUT);
-#endif
- if (pos == streampos(EOF))
- set(ios::badbit);
- return pos;
-}
-
-istream& istream::operator>>(char& c)
-{
- if (ipfx0()) {
- int ch = _strbuf->sbumpc();
- if (ch == EOF)
- set(ios::eofbit|ios::failbit);
- else
- c = (char)ch;
- }
- return *this;
-}
-
-istream&
-istream::operator>> (char* ptr)
-{
- register char *p = ptr;
- int w = width(0);
- if (ipfx0())
- {
- register streambuf* sb = _strbuf;
- for (;;)
- {
- int ch = sb->sbumpc();
- if (ch == EOF)
- {
- set(ios::eofbit);
- break;
- }
- else if (isspace(ch) || w == 1)
- {
- sb->sputbackc(ch);
- break;
- }
- else *p++ = ch;
- w--;
- }
- if (p == ptr)
- set(ios::failbit);
- }
- *p = '\0';
- return *this;
-}
-
-#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
-#define LONGEST long long
-#else
-#define LONGEST long
-#endif
-
-static int read_int(istream& stream, unsigned LONGEST& val, int& neg)
-{
- if (!stream.ipfx0())
- return 0;
- register streambuf* sb = stream.rdbuf();
- int base = 10;
- int ndigits = 0;
- register int ch = skip_ws(sb);
- if (ch == EOF)
- goto eof_fail;
- neg = 0;
- if (ch == '+') {
- ch = skip_ws(sb);
- }
- else if (ch == '-') {
- neg = 1;
- ch = skip_ws(sb);
- }
- if (ch == EOF) goto eof_fail;
- if (!(stream.flags() & ios::basefield)) {
- if (ch == '0') {
- ch = sb->sbumpc();
- if (ch == EOF) {
- val = 0;
- return 1;
- }
- if (ch == 'x' || ch == 'X') {
- base = 16;
- ch = sb->sbumpc();
- if (ch == EOF) goto eof_fail;
- }
- else {
- sb->sputbackc(ch);
- base = 8;
- ch = '0';
- }
- }
- }
- else if ((stream.flags() & ios::basefield) == ios::hex)
- base = 16;
- else if ((stream.flags() & ios::basefield) == ios::oct)
- base = 8;
- val = 0;
- for (;;) {
- if (ch == EOF)
- break;
- int digit;
- if (ch >= '0' && ch <= '9')
- digit = ch - '0';
- else if (ch >= 'A' && ch <= 'F')
- digit = ch - 'A' + 10;
- else if (ch >= 'a' && ch <= 'f')
- digit = ch - 'a' + 10;
- else
- digit = 999;
- if (digit >= base) {
- sb->sputbackc(ch);
- if (ndigits == 0)
- goto fail;
- else
- return 1;
- }
- ndigits++;
- val = base * val + digit;
- ch = sb->sbumpc();
- }
- return 1;
- fail:
- stream.set(ios::failbit);
- return 0;
- eof_fail:
- stream.set(ios::failbit|ios::eofbit);
- return 0;
-}
-
-#define READ_INT(TYPE) \
-istream& istream::operator>>(TYPE& i)\
-{\
- unsigned LONGEST val; int neg;\
- if (read_int(*this, val, neg)) {\
- if (neg) val = -val;\
- i = (TYPE)val;\
- }\
- return *this;\
-}
-
-READ_INT(short)
-READ_INT(unsigned short)
-READ_INT(int)
-READ_INT(unsigned int)
-READ_INT(long)
-READ_INT(unsigned long)
-#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
-READ_INT(long long)
-READ_INT(unsigned long long)
-#endif
-#if _G_HAVE_BOOL
-READ_INT(bool)
-#endif
-
-istream& istream::operator>>(long double& x)
-{
- if (ipfx0())
- scan("%lg", &x);
- return *this;
-}
-
-istream& istream::operator>>(double& x)
-{
- if (ipfx0())
- scan("%lg", &x);
- return *this;
-}
-
-istream& istream::operator>>(float& x)
-{
- if (ipfx0())
- scan("%g", &x);
- return *this;
-}
-
-istream& istream::operator>>(register streambuf* sbuf)
-{
- if (ipfx0()) {
- register streambuf* inbuf = rdbuf();
- // FIXME: Should optimize!
- for (;;) {
- register int ch = inbuf->sbumpc();
- if (ch == EOF) {
- set(ios::eofbit);
- break;
- }
- if (sbuf->sputc(ch) == EOF) {
- set(ios::failbit);
- break;
- }
- }
- }
- return *this;
-}
-
-ostream& ostream::operator<<(char c)
-{
- if (opfx()) {
-#if 1
- // This is what the cfront implementation does.
- if (_strbuf->sputc(c) == EOF)
- goto failed;
-#else
- // This is what cfront documentation and current ANSI drafts say.
- int w = width(0);
- char fill_char = fill();
- register int padding = w > 0 ? w - 1 : 0;
- register streambuf *sb = _strbuf;
- if (!(flags() & ios::left) && padding) // Default adjustment.
- if (_IO_padn(sb, fill_char, padding) < padding)
- goto failed;
- if (sb->sputc(c) == EOF)
- goto failed;
- if (flags() & ios::left && padding) // Left adjustment.
- if (_IO_padn(sb, fill_char, padding) < padding)
- goto failed;
-#endif
- osfx();
- }
- return *this;
- failed:
- set(ios::badbit);
- osfx();
- return *this;
-}
-
-/* Write VAL on STREAM.
- If SIGN<0, val is the absolute value of a negative number.
- If SIGN>0, val is a signed non-negative number.
- If SIGN==0, val is unsigned. */
-
-static void write_int(ostream& stream, unsigned LONGEST val, int sign)
-{
-#define WRITE_BUF_SIZE (10 + sizeof(unsigned LONGEST) * 3)
- char buf[WRITE_BUF_SIZE];
- register char *buf_ptr = buf+WRITE_BUF_SIZE; // End of buf.
- char *show_base = "";
- int show_base_len = 0;
- int show_pos = 0; // If 1, print a '+'.
-
- // Now do the actual conversion, placing the result at the *end* of buf.
- // Note that we use separate code for decimal, octal, and hex,
- // so we can divide by optimizable constants.
- if ((stream.flags() & ios::basefield) == ios::oct) { // Octal
- do {
- *--buf_ptr = (val & 7) + '0';
- val = val >> 3;
- } while (val != 0);
- if ((stream.flags() & ios::showbase) && (*buf_ptr != '0'))
- *--buf_ptr = '0';
- }
- else if ((stream.flags() & ios::basefield) == ios::hex) { // Hex
- char *xdigs = (stream.flags() & ios::uppercase) ? "0123456789ABCDEF0X"
- : "0123456789abcdef0x";
- do {
- *--buf_ptr = xdigs[val & 15];
- val = val >> 4;
- } while (val != 0);
- if ((stream.flags() & ios::showbase)) {
- show_base = xdigs + 16; // Either "0X" or "0x".
- show_base_len = 2;
- }
- }
- else { // Decimal
-#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
- // Optimization: Only use long long when we need to.
- while (val > UINT_MAX) {
- *--buf_ptr = (val % 10) + '0';
- val /= 10;
- }
- // Use more efficient (int) arithmetic for the rest.
- register unsigned int ival = (unsigned int)val;
-#else
- register unsigned LONGEST ival = val;
-#endif
- do {
- *--buf_ptr = (ival % 10) + '0';
- ival /= 10;
- } while (ival != 0);
- if (sign > 0 && (stream.flags() & ios::showpos))
- show_pos=1;
- }
-
- int buf_len = buf+WRITE_BUF_SIZE - buf_ptr;
- int w = stream.width(0);
-
- // Calculate padding.
- int len = buf_len+show_pos;
- if (sign < 0) len++;
- len += show_base_len;
- int padding = len > w ? 0 : w - len;
-
- // Do actual output.
- register streambuf* sbuf = stream.rdbuf();
- ios::fmtflags pad_kind =
- stream.flags() & (ios::left|ios::right|ios::internal);
- char fill_char = stream.fill();
- if (padding > 0
- && pad_kind != (ios::fmtflags)ios::left
- && pad_kind != (ios::fmtflags)ios::internal) // Default (right) adjust.
- if (_IO_padn(sbuf, fill_char, padding) < padding)
- goto failed;
- if (sign < 0 || show_pos)
- {
- char ch = sign < 0 ? '-' : '+';
- if (sbuf->sputc(ch) < 0)
- goto failed;
- }
- if (show_base_len)
- if (_IO_sputn(sbuf, show_base, show_base_len) <= 0)
- goto failed;
- if (pad_kind == (ios::fmtflags)ios::internal && padding > 0)
- if (_IO_padn(sbuf, fill_char, padding) < padding)
- goto failed;
- if (_IO_sputn (sbuf, buf_ptr, buf_len) != buf_len)
- goto failed;
- if (pad_kind == (ios::fmtflags)ios::left && padding > 0) // Left adjustment
- if (_IO_padn(sbuf, fill_char, padding) < padding)
- goto failed;
- stream.osfx();
- return;
- failed:
- stream.set(ios::badbit);
- stream.osfx();
-}
-
-ostream& ostream::operator<<(int n)
-{
- if (opfx()) {
- int sign = 1;
- unsigned int abs_n = (unsigned)n;
- if (n < 0 && (flags() & (ios::oct|ios::hex)) == 0)
- abs_n = -((unsigned)n), sign = -1;
- write_int(*this, abs_n, sign);
- }
- return *this;
-}
-
-ostream& ostream::operator<<(unsigned int n)
-{
- if (opfx())
- write_int(*this, n, 0);
- return *this;
-}
-
-
-ostream& ostream::operator<<(long n)
-{
- if (opfx()) {
- int sign = 1;
- unsigned long abs_n = (unsigned long)n;
- if (n < 0 && (flags() & (ios::oct|ios::hex)) == 0)
- abs_n = -((unsigned long)n), sign = -1;
- write_int(*this, abs_n, sign);
- }
- return *this;
-}
-
-ostream& ostream::operator<<(unsigned long n)
-{
- if (opfx())
- write_int(*this, n, 0);
- return *this;
-}
-
-#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
-ostream& ostream::operator<<(long long n)
-{
- if (opfx()) {
- int sign = 1;
- unsigned long long abs_n = (unsigned long long)n;
- if (n < 0 && (flags() & (ios::oct|ios::hex)) == 0)
- abs_n = -((unsigned long long)n), sign = -1;
- write_int(*this, abs_n, sign);
- }
- return *this;
-}
-
-
-ostream& ostream::operator<<(unsigned long long n)
-{
- if (opfx())
- write_int(*this, n, 0);
- return *this;
-}
-#endif /*__GNUC__*/
-
-ostream& ostream::operator<<(double n)
-{
- if (opfx()) {
- // Uses __cvt_double (renamed from static cvt), in Chris Torek's
- // stdio implementation. The setup code uses the same logic
- // as in __vsbprintf.C (also based on Torek's code).
- int format_char;
- if ((flags() & ios::floatfield) == ios::fixed)
- format_char = 'f';
- else if ((flags() & ios::floatfield) == ios::scientific)
- format_char = flags() & ios::uppercase ? 'E' : 'e';
- else
- format_char = flags() & ios::uppercase ? 'G' : 'g';
-
- int prec = precision();
- if (prec <= 0 && !(flags() & ios::fixed))
- prec = 6; /* default */
-
- // Do actual conversion.
-#ifdef _IO_USE_DTOA
- if (_IO_outfloat(n, rdbuf(), format_char, width(0),
- prec, flags(),
- flags() & ios::showpos ? '+' : 0,
- fill()) < 0)
- set(ios::badbit|ios::failbit); // ??
-#else
- int fpprec = 0; // 'Extra' (suppressed) floating precision.
- if (prec > MAXFRACT) {
- if (flags() & (ios::fixed|ios::scientific) & ios::showpos)
- fpprec = prec - MAXFRACT;
- prec = MAXFRACT;
- }
- int negative;
- char buf[BUF];
- int sign = '\0';
- char *cp = buf;
- *cp = 0;
- int size = __cvt_double(n, prec,
- flags() & ios::showpoint ? 0x80 : 0,
- &negative,
- format_char, cp, buf + sizeof(buf));
- if (negative) sign = '-';
- else if (flags() & ios::showpos) sign = '+';
- if (*cp == 0)
- cp++;
-
- // Calculate padding.
- int fieldsize = size + fpprec;
- if (sign) fieldsize++;
- int padding = 0;
- int w = width(0);
- if (fieldsize < w)
- padding = w - fieldsize;
-
- // Do actual output.
- register streambuf* sbuf = rdbuf();
- register i;
- char fill_char = fill();
- ios::fmtflags pad_kind =
- flags() & (ios::left|ios::right|ios::internal);
- if (pad_kind != (ios::fmtflags)ios::left // Default (right) adjust.
- && pad_kind != (ios::fmtflags)ios::internal)
- for (i = padding; --i >= 0; ) sbuf->sputc(fill_char);
- if (sign)
- sbuf->sputc(sign);
- if (pad_kind == (ios::fmtflags)ios::internal)
- for (i = padding; --i >= 0; ) sbuf->sputc(fill_char);
-
- // Emit the actual concented field, followed by extra zeros.
- _IO_sputn (sbuf, cp, size);
- for (i = fpprec; --i >= 0; ) sbuf->sputc('0');
-
- if (pad_kind == (ios::fmtflags)ios::left) // Left adjustment
- for (i = padding; --i >= 0; ) sbuf->sputc(fill_char);
-#endif
- osfx();
- }
- return *this;
-}
-
-ostream& ostream::operator<<(const char *s)
-{
- if (opfx())
- {
- if (s == NULL)
- s = "(null)";
- int len = strlen(s);
- int w = width(0);
-// FIXME: Should we: if (w && len>w) len = w;
- char fill_char = fill();
- register streambuf *sbuf = rdbuf();
- register int padding = w > len ? w - len : 0;
- if (!(flags() & ios::left) && padding > 0) // Default adjustment.
- if (_IO_padn(sbuf, fill_char, padding) != padding)
- goto failed;
- if (_IO_sputn (sbuf, s, len) != len)
- goto failed;
- if (flags() & ios::left && padding > 0) // Left adjustment.
- if (_IO_padn(sbuf, fill_char, padding) != padding)
- goto failed;
- osfx();
- }
- return *this;
- failed:
- set(ios::badbit);
- osfx();
- return *this;
-}
-
-#if 0
-ostream& ostream::operator<<(const void *p)
-{ Is in osform.cc, to avoid pulling in all of _IO_vfprintf by this file. */ }
-#endif
-
-ostream& ostream::operator<<(register streambuf* sbuf)
-{
- if (opfx())
- {
- char buffer[_IO_BUFSIZ];
- register streambuf* outbuf = _strbuf;
- for (;;)
- {
- _IO_size_t count = _IO_sgetn(sbuf, buffer, _IO_BUFSIZ);
- if (count <= 0)
- break;
- if (_IO_sputn(outbuf, buffer, count) != count)
- {
- set(ios::badbit);
- break;
- }
- }
- osfx();
- }
- return *this;
-}
-
-ostream::ostream(streambuf* sb, ostream* tied)
-{
- init (sb, tied);
-}
-
-ostream& ostream::seekp(streampos pos)
-{
- pos = _strbuf->pubseekpos(pos, ios::out);
- if (pos == streampos(EOF))
- set(ios::badbit);
- return *this;
-}
-
-ostream& ostream::seekp(streamoff off, _seek_dir dir)
-{
- streampos pos = _IO_seekoff (_strbuf, off, (int) dir, _IOS_OUTPUT);
- if (pos == streampos(EOF))
- set(ios::badbit);
- return *this;
-}
-
-streampos ostream::tellp()
-{
-#if 1
- streampos pos = _IO_seekoff (_strbuf, 0, _IO_seek_cur, _IOS_OUTPUT);
-#else
- streampos pos = _strbuf->pubseekoff(0, ios::cur, ios::out);
-#endif
- if (pos == streampos(EOF))
- set(ios::badbit);
- return pos;
-}
-
-ostream& ostream::flush()
-{
- if (_strbuf->sync())
- set(ios::badbit);
- return *this;
-}
-
-ostream& flush(ostream& outs)
-{
- return outs.flush();
-}
-
-istream& ws(istream& ins)
-{
- if (ins.ipfx1()) {
- int ch = skip_ws(ins._strbuf);
- if (ch == EOF)
- ins.set(ios::eofbit);
- else
- ins._strbuf->sputbackc(ch);
- }
- return ins;
-}
-
-// Skip white-space. Return 0 on failure (EOF), or 1 on success.
-// Differs from ws() manipulator in that failbit is set on EOF.
-// Called by ipfx() and ipfx0() if needed.
-
-int istream::_skip_ws()
-{
- int ch = skip_ws(_strbuf);
- if (ch == EOF) {
- set(ios::eofbit|ios::failbit);
- return 0;
- }
- else {
- _strbuf->sputbackc(ch);
- return 1;
- }
-}
-
-ostream& ends(ostream& outs)
-{
- outs.put('\0');
- return outs;
-}
-
-ostream& endl(ostream& outs)
-{
- return flush(outs.put('\n'));
-}
-
-ostream& ostream::write(const char *s, streamsize n)
-{
- if (opfx()) {
- if (_IO_sputn(_strbuf, s, n) != n)
- set(ios::failbit);
- }
- return *this;
-}
-
-void ostream::do_osfx()
-{
- if (flags() & ios::unitbuf)
- flush();
- if (flags() & ios::stdio) {
- fflush(stdout);
- fflush(stderr);
- }
-}
-
-iostream::iostream(streambuf* sb, ostream* tied)
-{
- init (sb, tied);
-}
-
-// NOTE: extension for compatibility with old libg++.
-// Not really compatible with fistream::close().
-#ifdef _STREAM_COMPAT
-void ios::close()
-{
- if (_strbuf->_flags & _IO_IS_FILEBUF)
- ((struct filebuf*)rdbuf())->close();
- else if (_strbuf != NULL)
- rdbuf()->sync();
- _strbuf = NULL;
- _state = badbit;
-}
-
-int istream::skip(int i)
-{
- int old = (_flags & ios::skipws) != 0;
- if (i)
- _flags |= ios::skipws;
- else
- _flags &= ~ios::skipws;
- return old;
-}
-#endif
diff --git a/contrib/libg++/libio/iostream.h b/contrib/libg++/libio/iostream.h
deleted file mode 100644
index 3c20aa5b26d6..000000000000
--- a/contrib/libg++/libio/iostream.h
+++ /dev/null
@@ -1,254 +0,0 @@
-/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#ifndef _IOSTREAM_H
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _IOSTREAM_H
-
-#include <streambuf.h>
-
-extern "C++" {
-class istream; class ostream;
-typedef ios& (*__manip)(ios&);
-typedef istream& (*__imanip)(istream&);
-typedef ostream& (*__omanip)(ostream&);
-
-extern istream& ws(istream& ins);
-extern ostream& flush(ostream& outs);
-extern ostream& endl(ostream& outs);
-extern ostream& ends(ostream& outs);
-
-class ostream : virtual public ios
-{
- // NOTE: If fields are changed, you must fix _fake_ostream in stdstreams.C!
- void do_osfx();
- public:
- ostream() { }
- ostream(streambuf* sb, ostream* tied=NULL);
- int opfx() {
- if (!good()) return 0; else { if (_tie) _tie->flush(); return 1;} }
- void osfx() { if (flags() & (ios::unitbuf|ios::stdio))
- do_osfx(); }
- ostream& flush();
- ostream& put(char c) { _strbuf->sputc(c); return *this; }
-#ifdef _STREAM_COMPAT
- /* Temporary binary compatibility. REMOVE IN NEXT RELEASE. */
- ostream& put(unsigned char c) { return put((char)c); }
- ostream& put(signed char c) { return put((char)c); }
-#endif
- ostream& write(const char *s, streamsize n);
- ostream& write(const unsigned char *s, streamsize n)
- { return write((const char*)s, n);}
- ostream& write(const signed char *s, streamsize n)
- { return write((const char*)s, n);}
- ostream& write(const void *s, streamsize n)
- { return write((const char*)s, n);}
- ostream& seekp(streampos);
- ostream& seekp(streamoff, _seek_dir);
- streampos tellp();
- ostream& form(const char *format ...);
- ostream& vform(const char *format, _IO_va_list args);
-
- ostream& operator<<(char c);
- ostream& operator<<(unsigned char c) { return (*this) << (char)c; }
- ostream& operator<<(signed char c) { return (*this) << (char)c; }
- ostream& operator<<(const char *s);
- ostream& operator<<(const unsigned char *s)
- { return (*this) << (const char*)s; }
- ostream& operator<<(const signed char *s)
- { return (*this) << (const char*)s; }
- ostream& operator<<(const void *p);
- ostream& operator<<(int n);
- ostream& operator<<(unsigned int n);
- ostream& operator<<(long n);
- ostream& operator<<(unsigned long n);
-#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
- ostream& operator<<(long long n);
- ostream& operator<<(unsigned long long n);
-#endif
- ostream& operator<<(short n) {return operator<<((int)n);}
- ostream& operator<<(unsigned short n) {return operator<<((unsigned int)n);}
-#if _G_HAVE_BOOL
- ostream& operator<<(bool b) { return operator<<((int)b); }
-#endif
- ostream& operator<<(double n);
- ostream& operator<<(float n) { return operator<<((double)n); }
- ostream& operator<<(long double n) { return operator<<((double)n); }
- ostream& operator<<(__omanip func) { return (*func)(*this); }
- ostream& operator<<(__manip func) {(*func)(*this); return *this;}
- ostream& operator<<(streambuf*);
-#ifdef _STREAM_COMPAT
- streambuf* ostreambuf() const { return _strbuf; }
-#endif
-};
-
-class istream : virtual public ios
-{
- // NOTE: If fields are changed, you must fix _fake_istream in stdstreams.C!
-protected:
- _IO_size_t _gcount;
-
- int _skip_ws();
- public:
- istream() { _gcount = 0; }
- istream(streambuf* sb, ostream*tied=NULL);
- istream& get(char* ptr, int len, char delim = '\n');
- istream& get(unsigned char* ptr, int len, char delim = '\n')
- { return get((char*)ptr, len, delim); }
- istream& get(char& c);
- istream& get(unsigned char& c) { return get((char&)c); }
- istream& getline(char* ptr, int len, char delim = '\n');
- istream& getline(unsigned char* ptr, int len, char delim = '\n')
- { return getline((char*)ptr, len, delim); }
- istream& get(signed char& c) { return get((char&)c); }
- istream& get(signed char* ptr, int len, char delim = '\n')
- { return get((char*)ptr, len, delim); }
- istream& getline(signed char* ptr, int len, char delim = '\n')
- { return getline((char*)ptr, len, delim); }
- istream& read(char *ptr, streamsize n);
- istream& read(unsigned char *ptr, streamsize n)
- { return read((char*)ptr, n); }
- istream& read(signed char *ptr, streamsize n)
- { return read((char*)ptr, n); }
- istream& read(void *ptr, streamsize n)
- { return read((char*)ptr, n); }
- istream& get(streambuf& sb, char delim = '\n');
- istream& gets(char **s, char delim = '\n');
- int ipfx(int need = 0) {
- if (!good()) { set(ios::failbit); return 0; }
- else {
- if (_tie && (need == 0 || rdbuf()->in_avail() < need)) _tie->flush();
- if (!need && (flags() & ios::skipws)) return _skip_ws();
- else return 1;
- }
- }
- int ipfx0() { // Optimized version of ipfx(0).
- if (!good()) { set(ios::failbit); return 0; }
- else {
- if (_tie) _tie->flush();
- if (flags() & ios::skipws) return _skip_ws();
- else return 1;
- }
- }
- int ipfx1() { // Optimized version of ipfx(1).
- if (!good()) { set(ios::failbit); return 0; }
- else {
- if (_tie && rdbuf()->in_avail() == 0) _tie->flush();
- return 1;
- }
- }
- void isfx() { }
- int get() { if (!ipfx1()) return EOF;
- else { int ch = _strbuf->sbumpc();
- if (ch == EOF) set(ios::eofbit);
- return ch;
- } }
- int peek();
- _IO_size_t gcount() { return _gcount; }
- istream& ignore(int n=1, int delim = EOF);
- int sync ();
- istream& seekg(streampos);
- istream& seekg(streamoff, _seek_dir);
- streampos tellg();
- istream& putback(char ch) {
- if (good() && _strbuf->sputbackc(ch) == EOF) clear(ios::badbit);
- return *this;}
- istream& unget() {
- if (good() && _strbuf->sungetc() == EOF) clear(ios::badbit);
- return *this;}
- istream& scan(const char *format ...);
- istream& vscan(const char *format, _IO_va_list args);
-#ifdef _STREAM_COMPAT
- istream& unget(char ch) { return putback(ch); }
- int skip(int i);
- streambuf* istreambuf() const { return _strbuf; }
-#endif
-
- istream& operator>>(char*);
- istream& operator>>(unsigned char* p) { return operator>>((char*)p); }
- istream& operator>>(signed char*p) { return operator>>((char*)p); }
- istream& operator>>(char& c);
- istream& operator>>(unsigned char& c) {return operator>>((char&)c);}
- istream& operator>>(signed char& c) {return operator>>((char&)c);}
- istream& operator>>(int&);
- istream& operator>>(long&);
-#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
- istream& operator>>(long long&);
- istream& operator>>(unsigned long long&);
-#endif
- istream& operator>>(short&);
- istream& operator>>(unsigned int&);
- istream& operator>>(unsigned long&);
- istream& operator>>(unsigned short&);
-#if _G_HAVE_BOOL
- istream& operator>>(bool&);
-#endif
- istream& operator>>(float&);
- istream& operator>>(double&);
- istream& operator>>(long double&);
- istream& operator>>( __manip func) {(*func)(*this); return *this;}
- istream& operator>>(__imanip func) { return (*func)(*this); }
- istream& operator>>(streambuf*);
-};
-
-class iostream : public istream, public ostream
-{
- public:
- iostream() { }
- iostream(streambuf* sb, ostream*tied=NULL);
-};
-
-class _IO_istream_withassign : public istream {
-public:
- _IO_istream_withassign& operator=(istream&);
-};
-
-class _IO_ostream_withassign : public ostream {
-public:
- _IO_ostream_withassign& operator=(ostream&);
-};
-
-extern _IO_istream_withassign cin;
-// clog->rdbuf() == cerr->rdbuf()
-extern _IO_ostream_withassign cout, cerr;
-
-extern _IO_ostream_withassign clog
-#if _G_CLOG_CONFLICT
-__asm__ ("__IO_clog")
-#endif
-;
-
-struct Iostream_init { } ; // Compatibility hack for AT&T library.
-
-inline ios& dec(ios& i)
-{ i.setf(ios::dec, ios::dec|ios::hex|ios::oct); return i; }
-inline ios& hex(ios& i)
-{ i.setf(ios::hex, ios::dec|ios::hex|ios::oct); return i; }
-inline ios& oct(ios& i)
-{ i.setf(ios::oct, ios::dec|ios::hex|ios::oct); return i; }
-} // extern "C++"
-
-#endif /*!_IOSTREAM_H*/
diff --git a/contrib/libg++/libio/iostream.texi b/contrib/libg++/libio/iostream.texi
deleted file mode 100644
index 54ccced6e71b..000000000000
--- a/contrib/libg++/libio/iostream.texi
+++ /dev/null
@@ -1,1971 +0,0 @@
-\input texinfo @c -*-Texinfo-*-
-@c Copyright (c) 1993 Free Software Foundation, Inc.
-
-@c %**start of header
-@setfilename iostream.info
-@settitle The GNU C++ Iostream Library
-@setchapternewpage odd
-@c %**end of header
-
-@ifinfo
-@format
-START-INFO-DIR-ENTRY
-* iostream: (iostream). The C++ input/output facility.
-END-INFO-DIR-ENTRY
-@end format
-
-This file describes libio, the GNU library for C++ iostreams and C stdio.
-
-libio includes software developed by the University of California,
-Berkeley.
-
-Copyright (C) 1993 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-@ignore
-Permission is granted to process this file through TeX and print the
-results, provided the printed document carries copying permission
-notice identical to this one except for the removal of this paragraph
-(this paragraph not being relevant to the printed manual).
-
-@end ignore
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided also that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions.
-@end ifinfo
-
-@finalout
-@syncodeindex fn cp
-@syncodeindex vr cp
-
-@titlepage
-@title The GNU C++ Iostream Library
-@subtitle Reference Manual for @code{libio} Version 0.64
-@sp 3
-@author Per Bothner @hfill @code{bothner@@cygnus.com}
-@author Cygnus Support @hfill @code{doc@@cygnus.com}
-@page
-
-@vskip 0pt plus 1filll
-Copyright @copyright{} 1993 Free Software Foundation, Inc.
-
-@code{libio} includes software developed by the University of
-California, Berkeley.
-
-@code{libio} uses floating-point software written by David M. Gay, which
-includes the following notice:
-
-@quotation
-The author of this software is David M. Gay.
-
-Copyright (c) 1991 by AT&T.
-
-Permission to use, copy, modify, and distribute this software for any
-purpose without fee is hereby granted, provided that this entire notice
-is included in all copies of any software which is or includes a copy
-or modification of this software and in all copies of the supporting
-documentation for such software.
-
-THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
-WARRANTY. IN PARTICULAR, NEITHER THE AUTHOR NOR AT&T MAKES ANY
-REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
-OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
-@end quotation
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided also that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions.
-@end titlepage
-
-@ifinfo
-@node Top
-@top The GNU C++ Iostream Library
-
-This file provides reference information on the GNU C++ iostream library
-(@code{libio}), version 0.64.
-
-@menu
-* Introduction::
-* Operators:: Operators and default streams.
-* Streams:: Stream classes.
-* Files and Strings:: Classes for files and strings.
-* Streambuf:: Using the streambuf layer.
-* Stdio:: C input and output.
-* Index::
-@end menu
-@end ifinfo
-
-@node Introduction
-@chapter Introduction
-
-The iostream classes implement most of the features of AT&T version 2.0
-iostream library classes, and most of the features of the ANSI X3J16
-library draft (which is based on the AT&T design).
-
-This manual is meant as a reference; for tutorial material on iostreams,
-see the corresponding section of any recent popular introduction to C++.
-
-@menu
-* Copying:: Special GNU licensing terms for libio.
-* Acknowledgements:: Contributors to GNU iostream.
-@end menu
-
-@node Copying
-@section Licensing terms for @code{libio}
-
-Since the @code{iostream} classes are so fundamental to standard C++,
-the Free Software Foundation has agreed to a special exception to its
-standard license, when you link programs with @code{libio.a}:
-
-@quotation
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License.
-@end quotation
-
-The code is under the @sc{gnu} General Public License (version 2) for
-all other purposes than linking with this library; that means that you
-can modify and redistribute the code as usual, but remember that if you
-do, your modifications, and anything you link with the modified code,
-must be available to others on the same terms.
-
-These functions are also available as part of the @code{libg++}
-library; if you link with that library instead of @code{libio}, the
-@sc{gnu} Library General Public License applies.
-
-@node Acknowledgements
-@section Acknowledgements
-
-Per Bothner wrote most of the @code{iostream} library, but some portions
-have their origins elsewhere in the free software community. Heinz
-Seidl wrote the IO manipulators. The floating-point conversion software
-is by David M. Gay of AT&T. Some code was derived from parts of BSD
-4.4, which was written at the University of California, Berkeley.
-
-The iostream classes are found in the @code{libio} library. An early
-version was originally distributed in @code{libg++}, and they are still
-included there as well, for convenience if you need other @code{libg++}
-classes. Doug Lea was the original author of @code{libg++}, and some of
-the file-management code still in @code{libio} is his.
-
-Various people found bugs or offered suggestions. Hongjiu Lu worked
-hard to use the library as the default stdio implementation for Linux,
-and has provided much stress-testing of the library.
-
-@node Operators
-@chapter Operators and Default Streams
-
-The @sc{gnu} iostream library, @file{libio}, implements the standard
-input and output facilities for C++. These facilities are roughly
-analogous (in their purpose and ubiquity, at least) with those defined
-by the C @file{stdio} functions.
-
-Although these definitions come from a library, rather than being part
-of the ``core language'', they are sufficiently central to be specified
-in the latest working papers for C++.
-
-You can use two operators defined in this library for basic input and
-output operations. They are familiar from any C++ introductory
-textbook: @code{<<} for output, and @code{>>} for input. (Think of data
-flowing in the direction of the ``arrows''.)
-
-These operators are often used in conjunction with three streams that
-are open by default:
-
-@deftypevar ostream cout
-The standard output stream, analogous to the C @code{stdout}.
-@end deftypevar
-
-@deftypevar istream cin
-The standard input stream, analogous to the C @code{stdin}.
-@end deftypevar
-
-@deftypevar ostream cerr
-An alternative output stream for errors, analogous to the C
-@code{stderr}.
-@end deftypevar
-
-@noindent
-For example, this bare-bones C++ version of the traditional ``hello''
-program uses @code{<<} and @code{cout}:
-
-@example
-#include <iostream.h>
-
-int main(int argc, char **argv)
-@{
- cout << "Well, hi there.\n";
- return 0;
-@}
-@end example
-
-Casual use of these operators may be seductive, but---other than in
-writing throwaway code for your own use---it is not necessarily simpler
-than managing input and output in any other language. For example,
-robust code should check the state of the input and output streams
-between operations (for example, using the method @code{good}).
-@xref{States,,Checking the state of a stream}. You may also need to
-adjust maximum input or output field widths, using manipulators like
-@code{setw} or @code{setprecision}.
-
-@defop Operator ostream <<
-Write output to an open output stream of class @code{ostream}.
-Defined by this library on any @var{object} of a C++ primitive type, and
-on other classes of the library. You can overload the definition for any
-of your own applications' classes.
-
-Returns a reference to the implied argument @code{*this} (the open stream it
-writes on), permitting statements like
-@example
-cout << "The value of i is " << i << "\n";
-@end example
-@end defop
-
-@defop Operator istream >>
-Read input from an open input stream of class @code{istream}. Defined
-by this library on primitive numeric, pointer, and string types; you can
-extend the definition for any of your own applications' classes.
-
-Returns a reference to the implied argument @code{*this} (the open stream
-it reads), permitting multiple inputs in one statement.
-@end defop
-
-@node Streams
-@chapter Stream Classes
-
-The previous chapter referred in passing to the classes @code{ostream}
-and @code{istream}, for output and input respectively. These classes
-share certain properties, captured in their base class @code{ios}.
-
-@menu
-* Ios:: Shared properties.
-* Ostream:: Managing output streams.
-* Istream:: Managing input streams.
-* Iostream:: Input and output together.
-@end menu
-
-@node Ios
-@section Shared properties: class @code{ios}
-
-The base class @code{ios} provides methods to test and manage the state
-of input or output streams.
-
-@code{ios} delegates the job of actually reading and writing bytes to
-the abstract class @code{streambuf}, which is designed to provide
-buffered streams (compatible with C, in the @sc{gnu} implementation).
-@xref{Streambuf,,Using the @code{streambuf} layer}, for information on
-the facilities available at the @code{streambuf} level.
-
-@deftypefn Constructor {} ios::ios ([streambuf* @var{sb} @w{[, ostream*} @var{tie}])
-The @code{ios} constructor by default initializes a new @code{ios}, and
-if you supply a @code{streambuf} @var{sb} to associate with it, sets the
-state @code{good} in the new @code{ios} object. It also sets the
-default properties of the new object.
-
-@ignore
-@c FIXME--future: this (a) doesn't work, (b) is controversial at ANSI
-An @code{ios} without a @code{streambuf} has the state @code{bad} until
-you supply a @code{streambuf}; you can do that by assigning a new value
-to the @code{ios} with @samp{=}.
-@end ignore
-
-You can also supply an optional second argument @var{tie} to the
-constructor: if present, it is an initial value for @code{ios::tie}, to
-associate the new @code{ios} object with another stream.
-@end deftypefn
-
-@deftypefn Destructor {} ios::~ios ()
-The @code{ios} destructor is virtual, permitting application-specific
-behavior when a stream is closed---typically, the destructor frees any
-storage associated with the stream and releases any other associated
-objects.
-@end deftypefn
-
-@c FIXME-future: Is @deftypefn really the best way of displaying these?
-
-@c FIXME-future: Undocumented: ios::_throw_failure, ios::exceptions; things
-@c controlled by _STREAM_COMPAT; ios::Init; ios::_IO_fix_vtable.
-
-@menu
-* States:: Checking the state of a stream.
-* Format Control:: Choices in formatting.
-* Manipulators:: Convenient ways of changing stream properties.
-* Extending:: Extended data fields.
-* Synchronization:: Synchronizing related streams.
-* Streambuf from Ios:: Reaching the underlying streambuf.
-@end menu
-
-@node States
-@subsection Checking the state of a stream
-
-Use this collection of methods to test for (or signal) errors and other
-exceptional conditions of streams:
-
-@deftypefn Method {ios::operator void*} () const
-You can do a quick check on the state of the most recent operation on a
-stream by examining a pointer to the stream itself. The pointer is
-arbitrary except for its truth value; it is true if no failures have
-occurred (@code{ios::fail} is not true). For example, you might ask for
-input on @code{cin} only if all prior output operations succeeded:
-
-@example
-if (cout)
-@{
- // Everything OK so far
- cin >> new_value;
- @dots{}
-@}
-@end example
-@end deftypefn
-
-@deftypefn Method {ios::operator !} () const
-In case it is more convenient to check whether something has failed, the
-operator @code{!} returns true if @code{ios::fail} is true (an operation
-has failed). For example,
-you might issue an error message if input failed:
-
-@example
-if (!cin)
-@{
- // Oops
- cerr << "Eh?\n";
-@}
-@end example
-@end deftypefn
-
-@deftypefn Method iostate ios::rdstate () const
-Return the state flags for this stream. The value is from the
-enumeration @code{iostate}. You can test for any combination of
-
-@vtable @code
-@item goodbit
-There are no indications of exceptional states on this stream.
-
-@item eofbit
-End of file.
-
-@item failbit
-An operation has failed on this stream; this usually indicates bad
-format of input.
-
-@item badbit
-The stream is unusable.
-@end vtable
-@end deftypefn
-
-@deftypefn Method void ios::setstate (iostate @var{state})
-@findex ios::set
-Set the state flag for this stream to @var{state} @emph{in addition to}
-any state flags already set. Synonym (for upward compatibility):
-@code{ios::set}.
-
-See @code{ios::clear} to set the stream state without regard to existing
-state flags. See @code{ios::good}, @code{ios::eof}, @code{ios::fail},
-and @code{ios::bad}, to test the state.
-@end deftypefn
-
-@deftypefn Method int ios::good () const
-Test the state flags associated with this stream; true if no error
-indicators are set.
-@end deftypefn
-
-@deftypefn Method int ios::bad () const
-Test whether a stream is marked as unusable. (Whether
-@code{ios::badbit} is set.)
-@end deftypefn
-
-@deftypefn Method int ios::eof () const
-True if end of file was reached on this stream. (If @code{ios::eofbit}
-is set.)
-@end deftypefn
-
-@deftypefn Method int ios::fail () const
-Test for any kind of failure on this stream: @emph{either} some
-operation failed, @emph{or} the stream is marked as bad. (If either
-@code{ios::failbit} or @code{ios::badbit} is set.)
-@end deftypefn
-
-@deftypefn Method void ios::clear (iostate @var{state})
-@c FIXME-future: There is some complication to do with buffering and _throw_failure
-Set the state indication for this stream to the argument @var{state}.
-You may call @code{ios::clear} with no argument, in which case the state
-is set to @code{good} (no errors pending).
-
-See @code{ios::good}, @code{ios::eof}, @code{ios::fail}, and
-@code{ios::bad}, to test the state; see @code{ios::set} or
-@code{ios::setstate} for an alternative way of setting the state.
-@end deftypefn
-
-@node Format Control
-@subsection Choices in formatting
-
-These methods control (or report on) settings for some details of
-controlling streams, primarily to do with formatting output:
-
-@deftypefn Method char ios::fill () const
-Report on the padding character in use.
-@end deftypefn
-
-@deftypefn Method char ios::fill (char @var{padding})
-Set the padding character. You can also use the manipulator
-@code{setfill}. @xref{Manipulators,,Changing stream properties in
-expressions}.
-
-Default: blank.
-@end deftypefn
-
-@deftypefn Method int ios::precision () const
-Report the number of significant digits currently in use for output of
-floating point numbers.
-
-Default: @code{6}.
-@end deftypefn
-
-@deftypefn Method int ios::precision (int @var{signif})
-Set the number of significant digits (for input and output numeric
-conversions) to @var{signif}.
-
-@findex setprecision
-@cindex setting @code{ios::precision}
-You can also use the manipulator @code{setprecision} for this purpose.
-@xref{Manipulators,,Changing stream properties using manipulators}.
-@end deftypefn
-
-@deftypefn Method int ios::width () const
-Report the current output field width setting (the number of
-characters to write on the next @samp{<<} output operation).
-
-Default: @code{0}, which means to use as many characters as necessary.
-@end deftypefn
-
-@deftypefn Method int ios::width (int @var{num})
-Set the input field width setting to @var{num}. Return the
-@emph{previous} value for this stream.
-
-@findex setw
-@cindex setting @code{ios::width}
-This value resets to zero (the default) every time you use @samp{<<}; it is
-essentially an additional implicit argument to that operator. You can
-also use the manipulator @code{setw} for this purpose.
-@xref{Manipulators,,Changing stream properties using manipulators}.
-@end deftypefn
-
-@need 2000
-@deftypefn Method fmtflags ios::flags () const
-Return the current value of the complete collection of flags controlling
-the format state. These are the flags and their meanings when set:
-
-@vtable @code
-@item ios::dec
-@itemx ios::oct
-@itemx ios::hex
-What numeric base to use in converting integers from internal to display
-representation, or vice versa: decimal, octal, or hexadecimal,
-respectively. (You can change the base using the manipulator
-@code{setbase}, or any of the manipulators @code{dec}, @code{oct}, or
-@code{hex}; @pxref{Manipulators,,Changing stream properties in
-expressions}.)
-
-On input, if none of these flags is set, read numeric constants
-according to the prefix: decimal if no prefix (or a @samp{.} suffix),
-octal if a @samp{0} prefix is present, hexadecimal if a @samp{0x} prefix
-is present.
-
-Default: @code{dec}.
-
-@item ios::fixed
-Avoid scientific notation, and always show a fixed number of digits after
-the decimal point, according to the output precision in effect.
-Use @code{ios::precision} to set precision.
-
-@item ios::left
-@itemx ios::right
-@itemx ios::internal
-Where output is to appear in a fixed-width field; left-justified,
-right-justified, or with padding in the middle (e.g. between a numeric
-sign and the associated value), respectively.
-
-@item ios::scientific
-Use scientific (exponential) notation to display numbers.
-
-@item ios::showbase
-Display the conventional prefix as a visual indicator of the conversion
-base: no prefix for decimal, @samp{0} for octal, @samp{0x} for hexadecimal.
-
-@item ios::showpoint
-Display a decimal point and trailing zeros after it to fill out numeric
-fields, even when redundant.
-
-@item ios::showpos
-Display a positive sign on display of positive numbers.
-
-@item ios::skipws
-Skip white space. (On by default).
-
-@item ios::stdio
-Flush the C @code{stdio} streams @code{stdout} and @code{stderr} after
-each output operation (for programs that mix C and C++ output conventions).
-
-@item ios::unitbuf
-Flush after each output operation.
-
-@item ios::uppercase
-Use upper-case characters for the non-numeral elements in numeric
-displays; for instance, @samp{0X7A} rather than @samp{0x7a}, or
-@samp{3.14E+09} rather than @samp{3.14e+09}.
-@end vtable
-@end deftypefn
-
-@deftypefn Method fmtflags ios::flags (fmtflags @var{value})
-Set @var{value} as the complete collection of flags controlling the
-format state. The flag values are described under @samp{ios::flags ()}.
-
-Use @code{ios::setf} or @code{ios::unsetf} to change one property at a
-time.
-@end deftypefn
-
-@deftypefn Method fmtflags ios::setf (fmtflags @var{flag})
-Set one particular flag (of those described for @samp{ios::flags ()};
-return the complete collection of flags @emph{previously} in effect.
-(Use @code{ios::unsetf} to cancel.)
-@end deftypefn
-
-@deftypefn Method fmtflags ios::setf (fmtflags @var{flag}, fmtflags @var{mask})
-Clear the flag values indicated by @var{mask}, then set any of them that
-are also in @var{flag}. (Flag values are described for @samp{ios::flags
-()}.) Return the complete collection of flags @emph{previously} in
-effect. (See @code{ios::unsetf} for another way of clearing flags.)
-@end deftypefn
-
-@deftypefn Method fmtflags ios::unsetf (fmtflags @var{flag})
-Make certain @var{flag} (a combination of flag values described for
-@samp{ios::flags ()}) is not set for this stream; converse of
-@code{ios::setf}. Returns the old values of those flags.
-@c FIXME-future: should probably be fixed to give same result as setf.
-@end deftypefn
-
-@node Manipulators
-@subsection Changing stream properties using manipulators
-
-For convenience, @var{manipulators} provide a way to change certain
-properties of streams, or otherwise affect them, in the middle of
-expressions involving @samp{<<} or @samp{>>}. For example, you might
-write
-
-@example
-cout << "|" << setfill('*') << setw(5) << 234 << "|";
-@end example
-
-@noindent
-to produce @samp{|**234|} as output.
-
-@deftypefn Manipulator {} ws
-Skip whitespace.
-@end deftypefn
-
-@deftypefn Manipulator {} flush
-Flush an output stream. For example, @samp{cout << @dots{} <<flush;}
-has the same effect as @samp{cout << @dots{}; cout.flush();}.
-@end deftypefn
-
-@deftypefn Manipulator {} endl
-Write an end of line character @samp{\n}, then flushes the output stream.
-@end deftypefn
-
-@deftypefn Manipulator {} ends
-Write @samp{\0} (the string terminator character).
-@end deftypefn
-
-@deftypefn Manipulator {} setprecision (int @var{signif})
-You can change the value of @code{ios::precision} in @samp{<<}
-expressions with the manipulator @samp{setprecision(@var{signif})}; for
-example,
-
-@example
-cout << setprecision(2) << 4.567;
-@end example
-
-@noindent
-prints @samp{4.6}. Requires @file{#include <iomanip.h>}.
-@end deftypefn
-
-@deftypefn Manipulator {} setw (int @var{n})
-You can change the value of @code{ios::width} in @samp{<<} expressions
-with the manipulator @samp{setw(@var{n})}; for example,
-
-@example
-cout << setw(5) << 234;
-@end example
-
-@noindent
-prints @w{@samp{ 234}} with two leading blanks. Requires @file{#include
-<iomanip.h>}.
-@end deftypefn
-
-@deftypefn Manipulator {} setbase (int @var{base})
-Where @var{base} is one of @code{10} (decimal), @code{8} (octal), or
-@code{16} (hexadecimal), change the base value for numeric
-representations. Requires @file{#include <iomanip.h>}.
-@end deftypefn
-
-@deftypefn Manipulator {} dec
-Select decimal base; equivalent to @samp{setbase(10)}.
-@end deftypefn
-
-@deftypefn Manipulator {} hex
-Select hexadecimal base; equivalent to @samp{setbase(16)}.
-@end deftypefn
-
-@deftypefn Manipulator {} oct
-Select octal base; equivalent to @samp{setbase(8)}.
-@end deftypefn
-
-@deftypefn Manipulator {} setfill (char @var{padding})
-Set the padding character, in the same way as @code{ios::fill}.
-Requires @file{#include <iomanip.h>}.
-@end deftypefn
-
-@node Extending
-@subsection Extended data fields
-
-A related collection of methods allows you to extend this collection of
-flags and parameters for your own applications, without risk of conflict
-between them:
-
-@deftypefn Method {static fmtflags} ios::bitalloc ()
-Reserve a bit (the single bit on in the result) to use as a flag. Using
-@code{bitalloc} guards against conflict between two packages that use
-@code{ios} objects for different purposes.
-
-This method is available for upward compatibility, but is not in the
-@sc{ansi} working paper. The number of bits available is limited; a
-return value of @code{0} means no bit is available.
-@end deftypefn
-
-@deftypefn Method {static int} ios::xalloc ()
-Reserve space for a long integer or pointer parameter. The result is a
-unique nonnegative integer. You can use it as an index to
-@code{ios::iword} or @code{ios::pword}. Use @code{xalloc} to arrange
-for arbitrary special-purpose data in your @code{ios} objects, without
-risk of conflict between packages designed for different purposes.
-@end deftypefn
-
-@deftypefn Method long& ios::iword (int @var{index})
-Return a reference to arbitrary data, of long integer type, stored in an
-@code{ios} instance. @var{index}, conventionally returned from
-@code{ios::xalloc}, identifies what particular data you need.
-@end deftypefn
-
-@deftypefn Method long ios::iword (int @var{index}) const
-Return the actual value of a long integer stored in an @code{ios}.
-@end deftypefn
-
-@deftypefn Method void*& ios::pword (int @var{index})
-Return a reference to an arbitrary pointer, stored in an @code{ios}
-instance. @var{index}, originally returned from @code{ios::xalloc},
-identifies what particular pointer you need.
-@end deftypefn
-
-@deftypefn Method void* ios::pword (int @var{index}) const
-Return the actual value of a pointer stored in an @code{ios}.
-@end deftypefn
-
-@node Synchronization
-@subsection Synchronizing related streams
-
-You can use these methods to synchronize related streams with
-one another:
-
-@deftypefn Method ostream* ios::tie () const
-Report on what output stream, if any, is to be flushed before accessing
-this one. A pointer value of @code{0} means no stream is tied.
-@end deftypefn
-
-@deftypefn Method ostream* ios::tie (ostream* @var{assoc})
-Declare that output stream @var{assoc} must be flushed before accessing
-this stream.
-@end deftypefn
-
-@deftypefn Method int ios::sync_with_stdio ([int @var{switch}])
-Unless iostreams and C @code{stdio} are designed to work together, you
-may have to choose between efficient C++ streams output and output
-compatible with C @code{stdio}. Use @samp{ios::sync_with_stdio()} to
-select C compatibility.
-
-The argument @var{switch} is a @sc{gnu} extension; use @code{0} as the
-argument to choose output that is not necessarily compatible with C
-@code{stdio}. The default value for @var{switch} is @code{1}.
-
-If you install the @code{stdio} implementation that comes with @sc{gnu}
-@code{libio}, there are compatible input/output facilities for both C
-and C++. In that situation, this method is unnecessary---but you may
-still want to write programs that call it, for portability.
-@end deftypefn
-
-@node Streambuf from Ios
-@subsection Reaching the underlying @code{streambuf}
-
-Finally, you can use this method to access the underlying object:
-
-@deftypefn Method streambuf* ios::rdbuf () const
-Return a pointer to the @code{streambuf} object that underlies this
-@code{ios}.
-@end deftypefn
-
-@node Ostream
-@section Managing output streams: class @code{ostream}
-
-Objects of class @code{ostream} inherit the generic methods from
-@code{ios}, and in addition have the following methods available.
-Declarations for this class come from @file{iostream.h}.
-
-@deftypefn Constructor {} ostream::ostream ()
-The simplest form of the constructor for an @code{ostream} simply
-allocates a new @code{ios} object.
-@end deftypefn
-
-@deftypefn Constructor {} ostream::ostream (streambuf* @var{sb} @w{[, ostream} @var{tie}])
-This alternative constructor requires a first argument @var{sb} of type
-@code{streambuf*}, to use an existing open stream for output. It also
-accepts an optional second argument @var{tie}, to specify a related
-@code{ostream*} as the initial value for @code{ios::tie}.
-
-If you give the @code{ostream} a @code{streambuf} explicitly, using
-this constructor, the @var{sb} is @emph{not} destroyed (or deleted or
-closed) when the @code{ostream} is destroyed.
-@end deftypefn
-
-@menu
-* Writing:: Writing on an ostream.
-* Output Position:: Repositioning an ostream.
-* Ostream Housekeeping:: Miscellaneous ostream utilities.
-@end menu
-
-@node Writing
-@subsection Writing on an @code{ostream}
-
-These methods write on an @code{ostream} (you may also use the operator
-@code{<<}; @pxref{Operators,,Operators and Default Streams}).
-
-@deftypefn Method ostream& ostream::put (char @var{c})
-Write the single character @var{c}.
-@end deftypefn
-
-@deftypefn Method ostream& ostream::write (@var{string}, int @var{length})
-Write @var{length} characters of a string to this @code{ostream},
-beginning at the pointer @var{string}.
-
-@var{string} may have any of these types: @code{char*}, @code{unsigned
-char*}, @code{signed char*}.
-@end deftypefn
-
-@deftypefn Method ostream& ostream::form (const char *@var{format}, ...)
-A @sc{gnu} extension, similar to @code{fprintf(@var{file},
-@var{format}, ...)}.
-
-@var{format} is a @code{printf}-style format control string, which is used
-to format the (variable number of) arguments, printing the result on
-this @code{ostream}. See @code{ostream::vform} for a version that uses
-an argument list rather than a variable number of arguments.
-@end deftypefn
-
-@deftypefn Method ostream& ostream::vform (const char *@var{format}, va_list @var{args})
-A @sc{gnu} extension, similar to @code{vfprintf(@var{file},
-@var{format}, @var{args})}.
-
-@var{format} is a @code{printf}-style format control string, which is used
-to format the argument list @var{args}, printing the result on
-this @code{ostream}. See @code{ostream::form} for a version that uses a
-variable number of arguments rather than an argument list.
-@end deftypefn
-
-@node Output Position
-@subsection Repositioning an @code{ostream}
-
-You can control the output position (on output streams that actually
-support positions, typically files) with these methods:
-@c FIXME-future: sort out which classes support this and which
-@c don't; fstream, filebuf? And what is failure condition when not supported?
-
-@deftypefn Method streampos ostream::tellp ()
-Return the current write position in the stream.
-@end deftypefn
-
-@deftypefn Method ostream& ostream::seekp (streampos @var{loc})
-Reset the output position to @var{loc} (which is usually the result of a
-previous call to @code{ostream::tellp}). @var{loc} specifies an
-absolute position in the output stream.
-@end deftypefn
-
-@deftypefn Method ostream& ostream::seekp (streamoff @var{loc}, @var{rel})
-@findex ios::seekdir
-Reset the output position to @var{loc}, relative to the beginning, end,
-or current output position in the stream, as indicated by @var{rel} (a
-value from the enumeration @code{ios::seekdir}):
-
-@vtable @code
-@item beg
-Interpret @var{loc} as an absolute offset from the beginning of the
-file.
-
-@item cur
-Interpret @var{loc} as an offset relative to the current output
-position.
-
-@item end
-Interpret @var{loc} as an offset from the current end of the output
-stream.
-@end vtable
-@end deftypefn
-
-@node Ostream Housekeeping
-@subsection Miscellaneous @code{ostream} utilities
-
-You may need to use these @code{ostream} methods for housekeeping:
-
-@deftypefn Method ostream& flush ()
-Deliver any pending buffered output for this @code{ostream}.
-@end deftypefn
-
-@deftypefn Method int ostream::opfx ()
-@code{opfx} is a @dfn{prefix} method for operations on @code{ostream}
-objects; it is designed to be called before any further processing. See
-@code{ostream::osfx} for the converse.
-@c FIXME-future: specify sometime which methods start with opfx.
-
-@code{opfx} tests that the stream is in state @code{good}, and if so
-flushes any stream tied to this one.
-
-The result is @code{1} when @code{opfx} succeeds; else (if the stream state is
-not @code{good}), the result is @code{0}.
-@end deftypefn
-
-@deftypefn Method void ostream::osfx ()
-@code{osfx} is a @dfn{suffix} method for operations on @code{ostream}
-objects; it is designed to be called at the conclusion of any processing. All
-the @code{ostream} methods end by calling @code{osfx}. See
-@code{ostream::opfx} for the converse.
-
-If the @code{unitbuf} flag is set for this stream, @code{osfx} flushes
-any buffered output for it.
-
-If the @code{stdio} flag is set for this stream, @code{osfx} flushes any
-output buffered for the C output streams @file{stdout} and @file{stderr}.
-@end deftypefn
-
-@node Istream
-@section Managing input streams: class @code{istream}
-
-Class @code{istream} objects are specialized for input; as for
-@code{ostream}, they are derived from @code{ios}, so you can use any of
-the general-purpose methods from that base class. Declarations for this
-class also come from @file{iostream.h}.
-
-@deftypefn Constructor {} istream::istream ()
-When used without arguments, the @code{istream} constructor simply
-allocates a new @code{ios} object and initializes the input counter (the
-value reported by @code{istream::gcount}) to @code{0}.
-@end deftypefn
-
-@deftypefn Constructor {} istream::istream (streambuf *@var{sb} @w{[, ostream} @var{tie}])
-You can also call the constructor with one or two arguments. The first
-argument @var{sb} is a @code{streambuf*}; if you supply this pointer,
-the constructor uses that @code{streambuf} for input.
-You can use the second optional argument @var{tie} to specify a related
-output stream as the initial value for @code{ios::tie}.
-
-If you give the @code{istream} a @code{streambuf} explicitly, using
-this constructor, the @var{sb} is @emph{not} destroyed (or deleted or
-closed) when the @code{ostream} is destroyed.
-@end deftypefn
-
-@menu
-* Char Input:: Reading one character.
-* String Input:: Reading strings.
-* Input Position:: Repositioning an istream.
-* Istream Housekeeping:: Miscellaneous istream utilities.
-@end menu
-
-@node Char Input
-@subsection Reading one character
-
-Use these methods to read a single character from the input stream:
-
-@deftypefn Method int istream::get ()
-Read a single character (or @code{EOF}) from the input stream, returning
-it (coerced to an unsigned char) as the result.
-@end deftypefn
-
-@deftypefn Method istream& istream::get (char& @var{c})
-Read a single character from the input stream, into @code{&@var{c}}.
-@end deftypefn
-
-@deftypefn Method int istream::peek ()
-Return the next available input character, but @emph{without} changing
-the current input position.
-@end deftypefn
-
-@node String Input
-@subsection Reading strings
-
-Use these methods to read strings (for example, a line at a time) from
-the input stream:
-
-@deftypefn Method istream& istream::get (char* @var{c}, int @var{len} @w{[, char} @var{delim}])
-Read a string from the input stream, into the array at @var{c}.
-
-The remaining arguments limit how much to read: up to @samp{len-1}
-characters, or up to (but not including) the first occurrence in the
-input of a particular delimiter character @var{delim}---newline
-(@code{\n}) by default. (Naturally, if the stream reaches end of file
-first, that too will terminate reading.)
-
-If @var{delim} was present in the input, it remains available as if
-unread; to discard it instead, see @code{iostream::getline}.
-
-@code{get} writes @samp{\0} at the end of the string, regardless
-of which condition terminates the read.
-@end deftypefn
-
-@deftypefn Method istream& istream::get (streambuf& @var{sb} @w{[, char} @var{delim}])
-Read characters from the input stream and copy them on the
-@code{streambuf} object @var{sb}. Copying ends either just before the
-next instance of the delimiter character @var{delim} (newline @code{\n}
-by default), or when either stream ends. If @var{delim} was present in
-the input, it remains available as if unread.
-@end deftypefn
-
-@deftypefn Method istream& istream::getline (@var{charptr}, int @var{len} @w{[, char} @var{delim}])
-Read a line from the input stream, into the array at @var{charptr}.
-@var{charptr} may be any of three kinds of pointer: @code{char*},
-@code{unsigned char*}, or @code{signed char*}.
-
-The remaining arguments limit how much to read: up to (but not
-including) the first occurrence in the input of a line delimiter
-character @var{delim}---newline (@code{\n}) by default, or up to
-@samp{len-1} characters (or to end of file, if that happens sooner).
-
-If @code{getline} succeeds in reading a ``full line'', it also discards
-the trailing delimiter character from the input stream. (To preserve it
-as available input, see the similar form of @code{iostream::get}.)
-
-If @var{delim} was @emph{not} found before @var{len} characters or end
-of file, @code{getline} sets the @code{ios::fail} flag, as well as the
-@code{ios::eof} flag if appropriate.
-
-@code{getline} writes a null character at the end of the string, regardless
-of which condition terminates the read.
-@end deftypefn
-
-@deftypefn Method istream& istream::read (@var{pointer}, int @var{len})
-Read @var{len} bytes into the location at @var{pointer}, unless the
-input ends first.
-
-@var{pointer} may be of type @code{char*}, @code{void*}, @code{unsigned
-char*}, or @code{signed char*}.
-
-If the @code{istream} ends before reading @var{len} bytes, @code{read}
-sets the @code{ios::fail} flag.
-@end deftypefn
-
-@deftypefn Method istream& istream::gets (char **@var{s} @w{[, char} @var{delim}])
-A @sc{gnu} extension, to read an arbitrarily long string
-from the current input position to the next instance of the @var{delim}
-character (newline @code{\n} by default).
-
-To permit reading a string of arbitrary length, @code{gets} allocates
-whatever memory is required. Notice that the first argument @var{s} is
-an address to record a character pointer, rather than the pointer
-itself.
-@end deftypefn
-
-@deftypefn Method istream& istream::scan (const char *format ...)
-A @sc{gnu} extension, similar to @code{fscanf(@var{file},
-@var{format}, ...)}. The @var{format} is a @code{scanf}-style format
-control string, which is used to read the variables in the remainder of
-the argument list from the @code{istream}.
-@end deftypefn
-
-@deftypefn Method istream& istream::vscan (const char *format, va_list args)
-Like @code{istream::scan}, but takes a single @code{va_list} argument.
-@end deftypefn
-
-@node Input Position
-@subsection Repositioning an @code{istream}
-
-Use these methods to control the current input position:
-
-@deftypefn Method streampos istream::tellg ()
-Return the current read position, so that you can save it and return to
-it later with @code{istream::seekg}.
-@end deftypefn
-
-@deftypefn Method istream& istream::seekg (streampos @var{p})
-Reset the input pointer (if the input device permits it) to @var{p},
-usually the result of an earlier call to @code{istream::tellg}.
-@end deftypefn
-
-@deftypefn Method istream& istream::seekg (streamoff @var{offset}, ios::seek_dir @var{ref})
-Reset the input pointer (if the input device permits it) to @var{offset}
-characters from the beginning of the input, the current position, or the
-end of input. Specify how to interpret @var{offset} with one of these
-values for the second argument:
-
-@vtable @code
-@item ios::beg
-Interpret @var{loc} as an absolute offset from the beginning of the
-file.
-
-@item ios::cur
-Interpret @var{loc} as an offset relative to the current output
-position.
-
-@item ios::end
-Interpret @var{loc} as an offset from the current end of the output
-stream.
-@end vtable
-@end deftypefn
-
-@node Istream Housekeeping
-@subsection Miscellaneous @code{istream} utilities
-
-Use these methods for housekeeping on @code{istream} objects:
-
-@deftypefn Method int istream::gcount ()
-Report how many characters were read from this @code{istream} in the
-last unformatted input operation.
-@c FIXME! Define "unformatted input" somewhere...
-@end deftypefn
-
-@deftypefn Method int istream::ipfx (int @var{keepwhite})
-Ensure that the @code{istream} object is ready for reading; check for
-errors and end of file and flush any tied stream. @code{ipfx} skips
-whitespace if you specify @code{0} as the @var{keepwhite}
-argument, @emph{and} @code{ios::skipws} is set for this stream.
-
-To avoid skipping whitespace (regardless of the @code{skipws} setting on
-the stream), use @code{1} as the argument.
-
-Call @code{istream::ipfx} to simplify writing your own methods for reading
-@code{istream} objects.
-@end deftypefn
-
-@deftypefn Method void istream::isfx ()
-A placeholder for compliance with the draft @sc{ansi} standard; this
-method does nothing whatever.
-
-If you wish to write portable standard-conforming code on @code{istream}
-objects, call @code{isfx} after any operation that reads from an
-@code{istream}; if @code{istream::ipfx} has any special effects that
-must be cancelled when done, @code{istream::isfx} will cancel them.
-@end deftypefn
-
-@deftypefn Method istream& istream::ignore ([int @var{n}] @w{[, int} @var{delim}])
-Discard some number of characters pending input. The first optional
-argument @var{n} specifies how many characters to skip. The second
-optional argument @var{delim} specifies a ``boundary'' character:
-@code{ignore} returns immediately if this character appears in the
-input.
-
-By default, @var{delim} is @code{EOF}; that is, if you do not specify a
-second argument, only the count @var{n} restricts how much to ignore
-(while input is still available).
-
-If you do not specify how many characters to ignore, @code{ignore}
-returns after discarding only one character.
-@end deftypefn
-
-@deftypefn Method istream& istream::putback (char @var{ch})
-Attempts to back up one character, replacing the character backed-up
-over by @var{ch}. Returns @code{EOF} if this is not allowed. Putting
-back the most recently read character is always allowed. (This method
-corresponds to the C function @code{ungetc}.)
-@end deftypefn
-
-@deftypefn Method istream& istream::unget ()
-Attempt to back up one character.
-@end deftypefn
-
-@node Iostream
-@section Input and output together: class @code{iostream}
-
-If you need to use the same stream for input and output, you can use an
-object of the class @code{iostream}, which is derived from @emph{both}
-@code{istream} and @code{ostream}.
-
-The constructors for @code{iostream} behave just like the constructors
-for @code{istream}.
-
-@deftypefn Constructor {} iostream::iostream ()
-When used without arguments, the @code{iostream} constructor simply
-allocates a new @code{ios} object, and initializes the input counter
-(the value reported by @code{istream::gcount}) to @code{0}.
-@end deftypefn
-
-@deftypefn Constructor {} iostream::iostream (streambuf* @var{sb} @w{[, ostream*} @var{tie}])
-You can also call a constructor with one or two arguments. The first
-argument @var{sb} is a @code{streambuf*}; if you supply this pointer,
-the constructor uses that @code{streambuf} for input and output.
-
-You can use the optional second argument @var{tie} (an @code{ostream*})
-to specify a related output stream as the initial value for
-@code{ios::tie}.
-@end deftypefn
-
-@cindex @code{iostream} destructor
-@cindex destructor for @code{iostream}
-As for @code{ostream} and @code{istream}, @code{iostream} simply uses
-the @code{ios} destructor. However, an @code{iostream} is not deleted by
-its destructor.
-
-You can use all the @code{istream}, @code{ostream}, and @code{ios}
-methods with an @code{iostream} object.
-
-@node Files and Strings
-@chapter Classes for Files and Strings
-
-There are two very common special cases of input and output: using files,
-and using strings in memory.
-
-@code{libio} defines four specialized classes for these cases:
-
-@ftable @code
-@item ifstream
-Methods for reading files.
-
-@item ofstream
-Methods for writing files.
-
-@item istrstream
-Methods for reading strings from memory.
-
-@item ostrstream
-Methods for writing strings in memory.
-@end ftable
-
-@menu
-* Files:: Reading and writing files.
-* Strings:: Reading and writing strings in memory.
-@end menu
-
-@node Files
-@section Reading and writing files
-
-These methods are declared in @file{fstream.h}.
-
-@findex ifstream
-@cindex class @code{ifstream}
-You can read data from class @code{ifstream} with any operation from class
-@code{istream}. There are also a few specialized facilities:
-
-@deftypefn Constructor {} ifstream::ifstream ()
-Make an @code{ifstream} associated with a new file for input. (If you
-use this version of the constructor, you need to call
-@code{ifstream::open} before actually reading anything)
-@end deftypefn
-
-@deftypefn Constructor {} ifstream::ifstream (int @var{fd})
-Make an @code{ifstream} for reading from a file that was already open,
-using file descriptor @var{fd}. (This constructor is compatible with
-other versions of iostreams for @sc{posix} systems, but is not part of
-the @sc{ansi} working paper.)
-@end deftypefn
-
-@deftypefn Constructor {} ifstream::ifstream (const char* @var{fname} @w{[, int} @var{mode} @w{[, int} @var{prot}]])
-Open a file @code{*@var{fname}} for this @code{ifstream} object.
-
-By default, the file is opened for input (with @code{ios::in} as
-@var{mode}). If you use this constructor, the file will be closed when
-the @code{ifstream} is destroyed.
-
-You can use the optional argument @var{mode} to specify how to open the
-file, by combining these enumerated values (with @samp{|} bitwise or).
-(These values are actually defined in class @code{ios}, so that all
-file-related streams may inherit them.) Only some of these modes are
-defined in the latest draft @sc{ansi} specification; if portability is
-important, you may wish to avoid the others.
-
-@vtable @code
-@item ios::in
-Open for input. (Included in @sc{ansi} draft.)
-
-@item ios::out
-Open for output. (Included in @sc{ansi} draft.)
-
-@item ios::ate
-Set the initial input (or output) position to the end of the file.
-
-@item ios::app
-Seek to end of file before each write. (Included in @sc{ansi} draft.)
-
-@item ios::trunc
-Guarantee a fresh file; discard any contents that were previously
-associated with it.
-
-@item ios::nocreate
-Guarantee an existing file; fail if the specified file did not already
-exist.
-
-@item ios::noreplace
-Guarantee a new file; fail if the specified file already existed.
-
-@item ios::bin
-Open as a binary file (on systems where binary and text files have different
-properties, typically how @samp{\n} is mapped; included in @sc{ansi} draft).
-@end vtable
-
-@noindent
-The last optional argument @var{prot} is specific to Unix-like systems;
-it specifies the file protection (by default @samp{644}).
-@end deftypefn
-
-@deftypefn Method void ifstream::open (const char* @var{fname} @w{[, int} @var{mode} @w{[, int} @var{prot}]])
-Open a file explicitly after the associated @code{ifstream} object
-already exists (for instance, after using the default constructor). The
-arguments, options and defaults all have the same meanings as in the
-fully specified @code{ifstream} constructor.
-@end deftypefn
-
-@findex ostream
-@cindex class @code{ostream}
-You can write data to class @code{ofstream} with any operation from class
-@code{ostream}. There are also a few specialized facilities:
-
-@deftypefn Constructor {} ofstream::ofstream ()
-Make an @code{ofstream} associated with a new file for output.
-@end deftypefn
-
-@deftypefn Constructor {} ofstream::ofstream (int @var{fd})
-Make an @code{ofstream} for writing to a file that was already open,
-using file descriptor @var{fd}.
-@end deftypefn
-
-@deftypefn Constructor {} ofstream::ofstream (const char* @var{fname} @w{[, int} @var{mode} @w{[, int} @var{prot}]])
-Open a file @code{*@var{fname}} for this @code{ofstream} object.
-
-By default, the file is opened for output (with @code{ios::out} as @var{mode}).
-You can use the optional argument @var{mode} to specify how to open the
-file, just as described for @code{ifstream::ifstream}.
-
-The last optional argument @var{prot} specifies the file protection (by
-default @samp{644}).
-@end deftypefn
-
-@deftypefn Destructor {} ofstream::~ofstream ()
-The files associated with @code{ofstream} objects are closed when the
-corresponding object is destroyed.
-@end deftypefn
-
-@deftypefn Method void ofstream::open (const char* @var{fname} @w{[, int} @var{mode} @w{[, int} @var{prot}]])
-Open a file explicitly after the associated @code{ofstream} object
-already exists (for instance, after using the default constructor). The
-arguments, options and defaults all have the same meanings as in the
-fully specified @code{ofstream} constructor.
-@end deftypefn
-
-@findex fstream
-@cindex class @code{fstream}
-The class @code{fstream} combines the facilities of @code{ifstream} and
-@code{ofstream}, just as @code{iostream} combines @code{istream} and
-@code{ostream}.
-
-@c FIXME-future: say something about fstream constructor, maybe.
-
-@findex fstreambase
-@cindex class @code{fstreambase}
-The class @code{fstreambase} underlies both @code{ifstream} and
-@code{ofstream}. They both inherit this additional method:
-
-@deftypefn Method void fstreambase::close ()
-Close the file associated with this object, and set @code{ios::fail} in
-this object to mark the event.
-@end deftypefn
-
-@node Strings
-@section Reading and writing in memory
-
-@c FIXME!! Per, there's a lot of guesswork here---please check carefully!
-
-@findex istrstream
-@cindex class @code{istrstream}
-@findex ostrstream
-@cindex class @code{ostrstream}
-@findex strstream
-@cindex class @code{strstream}
-@findex strstreambase
-@cindex class @code{strstreambase}
-@findex strstreambuf
-@cindex class @code{strstreambuf}
-The classes @code{istrstream}, @code{ostrstream}, and @code{strstream}
-provide some additional features for reading and writing strings in
-memory---both static strings, and dynamically allocated strings. The
-underlying class @code{strstreambase} provides some features common to
-all three; @code{strstreambuf} underlies that in turn.
-
-@c FIXME-future: Document strstreambuf methods one day, when we document
-@c streambuf more fully.
-
-@deftypefn Constructor {} istrstream::istrstream (const char* @var{str} @w{[, int} @var{size}])
-Associate the new input string class @code{istrstream} with an existing
-static string starting at @var{str}, of size @var{size}. If you do not
-specify @var{size}, the string is treated as a @code{NUL} terminated string.
-@end deftypefn
-
-@deftypefn Constructor {} ostrstream::ostrstream ()
-Create a new stream for output to a dynamically managed string, which
-will grow as needed.
-@end deftypefn
-
-@deftypefn Constructor {} ostrstream::ostrstream (char* @var{str}, int @var{size} [,int @var{mode}])
-A new stream for output to a statically defined string of length
-@var{size}, starting at @var{str}. You may optionally specify one of
-the modes described for @code{ifstream::ifstream}; if you do not specify
-one, the new stream is simply open for output, with mode @code{ios::out}.
-@end deftypefn
-
-@deftypefn Method int ostrstream::pcount ()
-Report the current length of the string associated with this @code{ostrstream}.
-@end deftypefn
-
-@deftypefn Method char* ostrstream::str ()
-A pointer to the string managed by this @code{ostrstream}. Implies
-@samp{ostrstream::freeze()}.
-
-Note that if you want the string to be nul-terminated,
-you must do that yourself (perhaps by writing ends to the stream).
-@end deftypefn
-
-@deftypefn Method void ostrstream::freeze ([int @var{n}])
-If @var{n} is nonzero (the default), declare that the string associated
-with this @code{ostrstream} is not to change dynamically; while frozen,
-it will not be reallocated if it needs more space, and it will not be
-deallocated when the @code{ostrstream} is destroyed. Use
-@samp{freeze(1)} if you refer to the string as a pointer after creating
-it via @code{ostrstream} facilities.
-
-@samp{freeze(0)} cancels this declaration, allowing a dynamically
-allocated string to be freed when its @code{ostrstream} is destroyed.
-
-If this @code{ostrstream} is already static---that is, if it was created
-to manage an existing statically allocated string---@code{freeze} is
-unnecessary, and has no effect.
-@end deftypefn
-
-@deftypefn Method int ostrstream::frozen ()
-Test whether @code{freeze(1)} is in effect for this string.
-@end deftypefn
-
-@deftypefn Method strstreambuf* strstreambase::rdbuf ()
-A pointer to the underlying @code{strstreambuf}.
-@end deftypefn
-
-@node Streambuf
-@chapter Using the @code{streambuf} Layer
-
-The @code{istream} and @code{ostream} classes are meant to handle
-conversion between objects in your program and their textual representation.
-
-By contrast, the underlying @code{streambuf} class is for transferring
-raw bytes between your program, and input sources or output sinks.
-Different @code{streambuf} subclasses connect to different kinds of
-sources and sinks.
-
-The @sc{gnu} implementation of @code{streambuf} is still evolving; we
-describe only some of the highlights.
-
-@menu
-* Areas:: Areas in a streambuf.
-* Overflow:: Simple output re-direction
-* Formatting:: C-style formatting for streambuf objects.
-* Stdiobuf:: Wrappers for C stdio.
-* Procbuf:: Reading/writing from/to a pipe
-* Backing Up:: Marking and returning to a position.
-* Indirectbuf:: Forwarding I/O activity.
-@end menu
-
-@node Areas
-@section Areas of a @code{streambuf}
-
-Streambuf buffer management is fairly sophisticated (this is a
-nice way to say ``complicated''). The standard protocol
-has the following ``areas'':
-
-@itemize @bullet
-@item
-@cindex put area
-The @dfn{put area} contains characters waiting for output.
-
-@item
-@cindex get area
-The @dfn{get area} contains characters available for reading.
-@end itemize
-
-The @sc{gnu} @code{streambuf} design extends this, but the details are
-still evolving.
-
-The following methods are used to manipulate these areas.
-These are all protected methods, which are intended to be
-used by virtual function in classes derived from @code{streambuf}.
-They are also all ANSI/ISO-standard, and the ugly names
-are traditional.
-(Note that if a pointer points to the 'end' of an area,
-it means that it points to the character after the area.)
-
-@deftypefn Method char* streambuf::pbase () const
-Returns a pointer to the start of the put area.
-@end deftypefn
-
-@deftypefn Method char* streambuf::epptr () const
-Returns a pointer to the end of the put area.
-@end deftypefn
-
-@deftypefn Method char* streambuf::pptr () const
-If @code{pptr() < epptr ()}, the @code{pptr()}
-returns a pointer to the current put position.
-(In that case, the next write will
-overwrite @code{*pptr()}, and increment @code{pptr()}.)
-Otherwise, there is no put position available
-(and the next character written will cause @code{streambuf::overflow}
-to be called).
-@end deftypefn
-
-@deftypefn Method void streambuf::pbump (int @var{N})
-Add @var{N} to the current put pointer.
-No error checking is done.
-@end deftypefn
-
-@deftypefn Method void streambuf::setp (char* @var{P}, char* @var{E})
-Sets the start of the put area to @var{P}, the end of the put area to @var{E},
-and the current put pointer to @var{P} (also).
-@end deftypefn
-
-@deftypefn Method char* streambuf::eback () const
-Returns a pointer to the start of the get area.
-@end deftypefn
-
-@deftypefn Method char* streambuf::egptr () const
-Returns a pointer to the end of the get area.
-@end deftypefn
-
-@deftypefn Method char* streambuf::gptr () const
-If @code{gptr() < egptr ()}, then @code{gptr()}
-returns a pointer to the current get position.
-(In that case the next read will read @code{*gptr()},
-and possibly increment @code{gptr()}.)
-Otherwise, there is no read position available
-(and the next read will cause @code{streambuf::underflow}
-to be called).
-@end deftypefn
-
-@deftypefn Method void streambuf:gbump (int @var{N})
-Add @var{N} to the current get pointer.
-No error checking is done.
-@end deftypefn
-
-@deftypefn Method void streambuf::setg (char* @var{B}, char* @var{P}, char* @var{E})
-Sets the start of the get area to @var{B}, the end of the get area to @var{E},
-and the current put pointer to @var{P}.
-@end deftypefn
-
-@node Overflow
-@section Simple output re-direction by redefining @code{overflow}
-
-Suppose you have a function @code{write_to_window} that
-writes characters to a @code{window} object. If you want to use the
-ostream function to write to it, here is one (portable) way to do it.
-This depends on the default buffering (if any).
-
-@cartouche
-@smallexample
-#include <iostream.h>
-/* Returns number of characters successfully written to @var{win}. */
-extern int write_to_window (window* win, char* text, int length);
-
-class windowbuf : public streambuf @{
- window* win;
- public:
- windowbuf (window* w) @{ win = w; @}
- int sync ();
- int overflow (int ch);
- // Defining xsputn is an optional optimization.
- // (streamsize was recently added to ANSI C++, not portable yet.)
- streamsize xsputn (char* text, streamsize n);
-@};
-
-int windowbuf::sync ()
-@{ streamsize n = pptr () - pbase ();
- return (n && write_to_window (win, pbase (), n) != n) ? EOF : 0;
-@}
-
-int windowbuf::overflow (int ch)
-@{ streamsize n = pptr () - pbase ();
- if (n && sync ())
- return EOF;
- if (ch != EOF)
- @{
- char cbuf[1];
- cbuf[0] = ch;
- if (write_to_window (win, cbuf, 1) != 1)
- return EOF;
- @}
- pbump (-n); // Reset pptr().
- return 0;
-@}
-
-streamsize windowbuf::xsputn (char* text, streamsize n)
-@{ return sync () == EOF ? 0 : write_to_window (win, text, n); @}
-
-int
-main (int argc, char**argv)
-@{
- window *win = ...;
- windowbuf wbuf(win);
- ostream wstr(&wbuf);
- wstr << "Hello world!\n";
-@}
-@end smallexample
-@end cartouche
-
-
-
-@node Formatting
-@section C-style formatting for @code{streambuf} objects
-
-The @sc{gnu} @code{streambuf} class supports @code{printf}-like
-formatting and scanning.
-
-@deftypefn Method int streambuf::form (const char *@var{format}, ...)
-Similar to @code{fprintf(@var{file}, @var{format}, ...)}.
-The @var{format} is a @code{printf}-style format control string, which is used
-to format the (variable number of) arguments, printing the result on
-the @code{this} streambuf. The result is the number of characters printed.
-@end deftypefn
-
-@deftypefn Method int streambuf::vform (const char *@var{format}, va_list @var{args})
-Similar to @code{vfprintf(@var{file}, @var{format}, @var{args})}.
-The @var{format} is a @code{printf}-style format control string, which is used
-to format the argument list @var{args}, printing the result on
-the @code{this} streambuf. The result is the number of characters printed.
-@end deftypefn
-
-@deftypefn Method int streambuf::scan (const char *@var{format}, ...)
-Similar to @code{fscanf(@var{file}, @var{format}, ...)}.
-The @var{format} is a @code{scanf}-style format control string, which is used
-to read the (variable number of) arguments from the @code{this} streambuf.
-The result is the number of items assigned, or @code{EOF} in case of
-input failure before any conversion.
-@end deftypefn
-
-@deftypefn Method int streambuf::vscan (const char *@var{format}, va_list @var{args})
-Like @code{streambuf::scan}, but takes a single @code{va_list} argument.
-@end deftypefn
-
-@node Stdiobuf
-@section Wrappers for C @code{stdio}
-
-A @dfn{stdiobuf} is a @code{streambuf} object that points to
-a @code{FILE} object (as defined by @code{stdio.h}).
-All @code{streambuf} operations on the @code{stdiobuf} are forwarded
-to the @code{FILE}. Thus the @code{stdiobuf} object provides a
-wrapper around a @code{FILE}, allowing use of @code{streambuf}
-operations on a @code{FILE}. This can be useful when mixing
-C code with C++ code.
-
-The pre-defined streams @code{cin}, @code{cout}, and @code{cerr} are
-normally implemented as @code{stdiobuf} objects that point to
-respectively @code{stdin}, @code{stdout}, and @code{stderr}. This is
-convenient, but it does cost some extra overhead.
-
-If you set things up to use the implementation of @code{stdio} provided
-with this library, then @code{cin}, @code{cout}, and @code{cerr} will be
-set up to to use @code{stdiobuf} objects, since you get their benefits
-for free. @xref{Stdio,,C Input and Output}.
-
-@ignore
-@c FIXME-future: setbuf is not yet documented, hence this para is not useful.
-Note that if you use @code{setbuf} to give a buffer to a @code{stdiobuf},
-that buffer will provide intermediate buffering in addition that
-whatever is done by the @code{FILE}.
-@end ignore
-
-@node Procbuf
-@section Reading/writing from/to a pipe
-
-The @dfn{procbuf} class is a @sc{gnu} extension. It is derived from
-@code{streambuf}. A @code{procbuf} can be @dfn{closed} (in which case
-it does nothing), or @dfn{open} (in which case it allows communicating
-through a pipe with some other program).
-
-@deftypefn Constructor {} procbuf::procbuf ()
-Creates a @code{procbuf} in a @dfn{closed} state.
-@end deftypefn
-
-@deftypefn Method procbuf* procbuf::open (const char *@var{command}, int @var{mode})
-Uses the shell (@file{/bin/sh}) to run a program specified by @var{command}.
-
-If @var{mode} is @samp{ios::in}, standard output from the program is sent
-to a pipe; you can read from the pipe by reading from the
-@code{procbuf}. (This is similar to @w{@samp{popen(@var{command}, "r")}}.)
-
-If @var{mode} is @samp{ios::out}, output written written to the
-@code{procbuf} is written to a pipe; the program is set up to read its
-standard input from (the other end of) the pipe. (This is similar to
-@w{@samp{popen(@var{command}, "w")}}.)
-
-The @code{procbuf} must start out in the @dfn{closed} state.
-Returns @samp{*this} on success, and @samp{NULL} on failure.
-@end deftypefn
-
-@deftypefn Constructor {} procbuf::procbuf (const char *@var{command}, int @var{mode})
-Calls @samp{procbuf::open (@var{command}, @var{mode})}.
-@end deftypefn
-
-@deftypefn Method procbuf* procbuf::close ()
-Waits for the program to finish executing,
-and then cleans up the resources used.
-Returns @samp{*this} on success, and @samp{NULL} on failure.
-@end deftypefn
-
-@deftypefn Destructor {} procbuf::~procbuf ()
-Calls @samp{procbuf::close}.
-@end deftypefn
-
-@node Backing Up
-@section Backing up
-
-The @sc{gnu} iostream library allows you to ask a @code{streambuf} to
-remember the current position. This allows you to go back to this
-position later, after reading further. You can back up arbitrary
-amounts, even on unbuffered files or multiple buffers' worth, as long as
-you tell the library in advance. This unbounded backup is very useful
-for scanning and parsing applications. This example shows a typical
-scenario:
-
-@cartouche
-@smallexample
-// Read either "dog", "hound", or "hounddog".
-// If "dog" is found, return 1.
-// If "hound" is found, return 2.
-// If "hounddog" is found, return 3.
-// If none of these are found, return -1.
-int my_scan(streambuf* sb)
-@{
- streammarker fence(sb);
- char buffer[20];
- // Try reading "hounddog":
- if (sb->sgetn(buffer, 8) == 8
- && strncmp(buffer, "hounddog", 8) == 0)
- return 3;
- // No, no "hounddog": Back up to 'fence'
- sb->seekmark(fence); //
- // ... and try reading "dog":
- if (sb->sgetn(buffer, 3) == 3
- && strncmp(buffer, "dog", 3) == 0)
- return 1;
- // No, no "dog" either: Back up to 'fence'
- sb->seekmark(fence); //
- // ... and try reading "hound":
- if (sb->sgetn(buffer, 5) == 5
- && strncmp(buffer, "hound", 5) == 0)
- return 2;
- // No, no "hound" either: Back up and signal failure.
- sb->seekmark(fence); // Backup to 'fence'
- return -1;
-@}
-@end smallexample
-@end cartouche
-
-@deftypefn Constructor {} streammarker::streammarker (streambuf* @var{sbuf})
-Create a @code{streammarker} associated with @var{sbuf}
-that remembers the current position of the get pointer.
-@end deftypefn
-
-@deftypefn Method int streammarker::delta (streammarker& @var{mark2})
-Return the difference between the get positions corresponding
-to @code{*this} and @var{mark2} (which must point into the same
-@code{streambuffer} as @code{this}).
-@end deftypefn
-
-@deftypefn Method int streammarker::delta ()
-Return the position relative to the streambuffer's current get position.
-@end deftypefn
-
-@deftypefn Method int streambuf::seekmark (streammarker& @var{mark})
-Move the get pointer to where it (logically) was when @var{mark}
-was constructed.
-@end deftypefn
-
-@node Indirectbuf
-@section Forwarding I/O activity
-
-An @dfn{indirectbuf} is one that forwards all of its I/O requests
-to another streambuf.
-
-@ignore
-@c FIXME-future: get_stream and put_stream are so far undocumented.
-All get-related requests are sent to get_stream().
-All put-related requests are sent to put_stream().
-@end ignore
-
-An @code{indirectbuf} can be used to implement Common Lisp
-synonym-streams and two-way-streams:
-
-@example
-class synonymbuf : public indirectbuf @{
- Symbol *sym;
- synonymbuf(Symbol *s) @{ sym = s; @}
- virtual streambuf *lookup_stream(int mode) @{
- return coerce_to_streambuf(lookup_value(sym)); @}
-@};
-@end example
-
-@node Stdio
-@chapter C Input and Output
-
-@code{libio} is distributed with a complete implementation of the ANSI C
-@code{stdio} facility. It is implemented using @code{streambuf}
-objects. @xref{Stdiobuf,,Wrappers for C @code{stdio}}.
-
-The @code{stdio} package is intended as a replacement for the whatever
-@code{stdio} is in your C library.
-@ignore
-@c FIXME-future: This is not useful unless we specify what problems.
-It can co-exist with C libraries that have alternate implementations of
-stdio, but there may be some problems.
-@end ignore
-Since @code{stdio} works best when you build @code{libc} to contain it, and
-that may be inconvenient, it is not installed by default.
-
-Extensions beyond @sc{ansi}:
-
-@itemize @bullet
-@item
-A stdio @code{FILE} is identical to a streambuf.
-Hence there is no need to worry about synchronizing C and C++
-input/output---they are by definition always synchronized.
-
-@item
-If you create a new streambuf sub-class (in C++), you can use it as a
-@code{FILE} from C. Thus the system is extensible using the standard
-@code{streambuf} protocol.
-
-@item
-You can arbitrarily mix reading and writing, without having to seek
-in between.
-
-@item
-Unbounded @code{ungetc()} buffer.
-@end itemize
-
-@ignore
-@c FIXME-future: Per says this is not ready to go public at v0.5
-@node Libio buffer management
-@chapter Libio buffer management
-
-The libio user functions present an abstract sequence of characters,
-that they read and write from. A number of buffers are used to go
-between the user program and the abstract sequence. These buffers are
-concrete arrays of characters that contain some sub-sequence of the
-abstract sequence.
-
-The libio buffer management protocol is fairly complex. Its design is
-based on the C++ @code{streambuf} protocol, so that the C++
-@code{streambuf} classes can be trivially implemented on top of the
-libio protocol.
-
-The @dfn{write area} contains characters waiting for output.
-
-The @dfn{read area} contains characters available for reading.
-
-The @dfn{reserve area} is available to virtual methods.
-Usually, the get and/or put areas are part of the reserve area.
-
-The @dfn{main get area} contains characters that have
-been read in from the character source, but not yet
-read by the application.
-
-The @dfn{backup area} contains previously read data that is being saved
-because of a user request, or that have been "unread" (put back).
-@end ignore
-
-@ignore
-@c Per says this design is not finished
-@node Streambuf internals
-@chapter Streambuf internals
-
-@menu
-* Buffer management::
-* Filebuf internals::
-@end menu
-
-@node Buffer management
-@section Buffer management
-
-@subsection Areas
-
-NOTE: This chapter is due for an update.
-
-Streambuf buffer management is fairly sophisticated (this is a
-nice way to say "complicated"). The standard protocol
-has the following "areas":
-
-@itemize @bullet
-@cindex put area
-@item
-The @dfn{put area} contains characters waiting for output.
-@cindex get area
-@item
-The @dfn{get area} contains characters available for reading.
-@cindex reserve area
-@item
-The @dfn{reserve area} is available to virtual methods.
-Usually, the get and/or put areas are part of the reserve area.
-@end itemize
-
-The @sc{gnu} @code{streambuf} design extends this by supporting two
-get areas:
-@itemize @bullet
-@cindex main get area
-@item
-The @dfn{main get area} contains characters that have
-been read in from the character source, but not yet
-read by the application.
-@cindex backup area
-@item
-The @dfn{backup area} contains previously read data that is being
-saved because of a user request, or that have been "unread" (putback).
-@end itemize
-
-The backup and the main get area are logically contiguous: That is,
-the first character of the main get area follows the last character
-of the backup area.
-
-The @dfn{current get area} is whichever one of the backup or
-main get areas that is currently being read from.
-The other of the two is the @dfn{non-current get area}.
-
-@subsection Pointers
-
-The following @code{char*} pointers define the various areas.
-
-@deftypefn Method char* streambuf::base ()
-The start of the reserve area.
-@end deftypefn
-
-@deftypefn Method char* streambuf::ebuf ()
-The end of the reserve area.
-@end deftypefn
-
-@deftypefn Method char* streambuf::Gbase ()
-The start of the main get area.
-@end deftypefn
-
-@deftypefn Method char* streambuf::eGptr ()
-The end of the main get area.
-@end deftypefn
-
-@deftypefn Method char* streambuf::Bbase ()
-The start of the backup area.
-@end deftypefn
-
-@deftypefn Method char* streambuf::Bptr ()
-The start of the used part of the backup area.
-The area (@code{Bptr()} .. @code{eBptr()}) contains data that has been
-pushed back, while (@code{Bbase()} .. @code{eBptr()}) contains unused
-space available for future putbacks.
-@end deftypefn
-
-@deftypefn Method char* streambuf::eBptr ()
-The end of the backup area.
-@end deftypefn
-
-@deftypefn Method char* streambuf::Nbase ()
-The start of the non-current get area (either @code{main_gbase} or @code{backup_gbase}).
-@end deftypefn
-
-@deftypefn Method char* streambuf::eNptr ()
-The end of the non-current get area.
-@end deftypefn
-
-@node Filebuf internals
-@section Filebuf internals
-
-The @code{filebuf} is used a lot, so it is importamt that it be
-efficient. It is also supports rather complex semantics.
-so let us examine its implementation.
-
-@subsection Tied read and write pointers
-
-The streambuf model allows completely independent read and write pointers.
-However, a @code{filebuf} has only a single logical pointer used
-for both reads and writes. Since the @code{streambuf} protocol
-uses @code{gptr()} for reading and @code{pptr()} for writing,
-we map the logical file pointer into either @code{gptr()} or @code{pptr()}
-at different times.
-
-@itemize @bullet
-@item
-Reading is allowed when @code{gptr() < egptr()}, which we call get mode.
-
-@item
-Writing is allowed when @code{pptr() < epptr()}, which we call put mode.
-@end itemize
-
-@noindent
-A @code{filebuf} cannot be in get mode and put mode at the same time.
-
-We have up to two buffers:
-
-@itemize @bullet
-@item
-The backup area, defined by @code{Bbase()}, @code{Bptr()}, and @code{eBptr()}.
-This can be empty.
-
-@item
-The reserve area, which also contains the main get area.
-For an unbuffered file, the (@code{shortbuf()}..@code{shortbuf()+1}) is used,
-where @code{shortbuf()} points to a 1-byte buffer that is part of
-the @code{filebuf}.
-@end itemize
-
-@noindent
-The file system's idea of the current position is @code{eGptr()}.
-
-Characters that have been written into a buffer but not yet written
-out (flushed) to the file systems are those between @code{pbase()}
-and @code{pptr()}.
-
-The end of the valid data bytes is:
-@code{pptr() > eGptr() && pptr() < ebuf() ? pptr() : eGptr()}.
-
-If the @code{filebuf} is unbuffered or line buffered,
-the @code{eptr()} is @code{pbase()}. This forces a call
-to @code{overflow()} on each put of a character.
-The logical @code{epptr()} is @code{epptr() ? ebuf() : NULL}.
-(If the buffer is read-only, set @code{pbase()}, @code{pptr()},
-and @code{epptr()} to @code{NULL}. NOT!)
-@end ignore
-
-@node Index
-@unnumbered Index
-@printindex cp
-
-@contents
-@bye
diff --git a/contrib/libg++/libio/iostreamP.h b/contrib/libg++/libio/iostreamP.h
deleted file mode 100644
index c9c40cb6ba9a..000000000000
--- a/contrib/libg++/libio/iostreamP.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include "streambuf.h"
-#include "libioP.h"
diff --git a/contrib/libg++/libio/iostrerror.c b/contrib/libg++/libio/iostrerror.c
deleted file mode 100644
index 65aa25d5e4e6..000000000000
--- a/contrib/libg++/libio/iostrerror.c
+++ /dev/null
@@ -1,12 +0,0 @@
-/* This should be replaced by whatever namespace-clean
- version of strerror you have available. */
-
-#include "libioP.h"
-extern char *strerror __P ((int));
-
-char *
-DEFUN(_IO_strerror, (errnum),
- int errnum)
-{
- return strerror(errnum);
-}
diff --git a/contrib/libg++/libio/ioungetc.c b/contrib/libg++/libio/ioungetc.c
deleted file mode 100644
index 033f652a0670..000000000000
--- a/contrib/libg++/libio/ioungetc.c
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include "libioP.h"
-
-int
-DEFUN(_IO_ungetc, (c, fp),
- int c AND _IO_FILE *fp)
-{
- CHECK_FILE(fp, EOF);
- if (c == EOF)
- return EOF;
- return _IO_sputbackc(fp, (unsigned char)c);
-}
diff --git a/contrib/libg++/libio/iovfprintf.c b/contrib/libg++/libio/iovfprintf.c
deleted file mode 100644
index c6ba7957d719..000000000000
--- a/contrib/libg++/libio/iovfprintf.c
+++ /dev/null
@@ -1,881 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-/*
- * Copyright (c) 1990 Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms are permitted
- * provided that the above copyright notice and this paragraph are
- * duplicated in all such forms and that any documentation,
- * advertising materials, and other materials related to such
- * distribution and use acknowledge that the software was developed
- * by the University of California, Berkeley. The name of the
- * University may not be used to endorse or promote products derived
- * from this software without specific prior written permission.
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- */
-
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "%W% (Berkeley) %G%";
-#endif /* LIBC_SCCS and not lint */
-
-/*
- * Actual printf innards.
- *
- * This code is large and complicated...
- */
-
-#include <sys/types.h>
-#include "libioP.h"
-#include <string.h>
-#ifdef __STDC__
-#include <stdarg.h>
-#else
-#include <varargs.h>
-#endif
-
-/*
- * Define FLOATING_POINT to get floating point.
- */
-#ifndef NO_FLOATING_POINT
-#define FLOATING_POINT
-#endif
-
-/* end of configuration stuff */
-
-
-/*
- * Helper "class" for `fprintf to unbuffered': creates a
- * temporary buffer. */
-
-struct helper_file
-{
- struct _IO_FILE_plus _f;
- _IO_FILE *_put_stream;
-};
-
-static int
-DEFUN(_IO_helper_overflow, (fp, c),
- _IO_FILE *fp AND int c)
-{
- _IO_FILE *target = ((struct helper_file*)fp)->_put_stream;
- int used = fp->_IO_write_ptr - fp->_IO_write_base;
- if (used)
- {
- _IO_sputn(target, fp->_IO_write_base, used);
- fp->_IO_write_ptr -= used;
- }
- return _IO_putc (c, fp);
-}
-
-static struct _IO_jump_t _IO_helper_jumps = {
- JUMP_INIT_DUMMY,
- JUMP_INIT(finish, _IO_default_finish),
- JUMP_INIT(overflow, _IO_helper_overflow),
- JUMP_INIT(underflow, _IO_default_underflow),
- JUMP_INIT(uflow, _IO_default_uflow),
- JUMP_INIT(pbackfail, _IO_default_pbackfail),
- JUMP_INIT(xsputn, _IO_default_xsputn),
- JUMP_INIT(xsgetn, _IO_default_xsgetn),
- JUMP_INIT(seekoff, _IO_default_seekoff),
- JUMP_INIT(seekpos, _IO_default_seekpos),
- JUMP_INIT(setbuf, _IO_default_setbuf),
- JUMP_INIT(sync, _IO_default_sync),
- JUMP_INIT(doallocate, _IO_default_doallocate),
- JUMP_INIT(read, _IO_default_read),
- JUMP_INIT(write, _IO_default_write),
- JUMP_INIT(seek, _IO_default_seek),
- JUMP_INIT(close, _IO_default_close),
- JUMP_INIT(stat, _IO_default_stat)
-};
-
-static int
-DEFUN(helper_vfprintf, (fp, fmt0, ap),
- register _IO_FILE* fp AND char const *fmt0 AND _IO_va_list ap)
-{
- char buf[_IO_BUFSIZ];
- struct helper_file helper;
- register _IO_FILE *hp = (_IO_FILE*)&helper;
- int result, to_flush;
-
- /* initialize helper */
- helper._put_stream = fp;
- hp->_IO_write_base = buf;
- hp->_IO_write_ptr = buf;
- hp->_IO_write_end = buf+_IO_BUFSIZ;
- hp->_IO_file_flags = _IO_MAGIC|_IO_NO_READS;
- _IO_JUMPS(hp) = &_IO_helper_jumps;
-
- /* Now print to helper instead. */
- result = _IO_vfprintf(hp, fmt0, ap);
-
- /* Now flush anything from the helper to the fp. */
- if ((to_flush = hp->_IO_write_ptr - hp->_IO_write_base) > 0)
- {
- if (_IO_sputn(fp, hp->_IO_write_base, to_flush) != to_flush)
- return EOF;
- }
- return result;
-}
-
-#ifdef FLOATING_POINT
-
-#include "floatio.h"
-#define BUF (MAXEXP+MAXFRACT+1) /* + decimal point */
-#define DEFPREC 6
-extern double modf __P((double, double*));
-
-#else /* no FLOATING_POINT */
-
-#define BUF 40
-
-#endif /* FLOATING_POINT */
-
-
-/*
- * Macros for converting digits to letters and vice versa
- */
-#define to_digit(c) ((c) - '0')
-#define is_digit(c) ((unsigned)to_digit(c) <= 9)
-#define to_char(n) ((n) + '0')
-
-/*
- * Flags used during conversion.
- */
-#define LONGINT 0x01 /* long integer */
-#define LONGDBL 0x02 /* long double; unimplemented */
-#define SHORTINT 0x04 /* short integer */
-#define ALT 0x08 /* alternate form */
-#define LADJUST 0x10 /* left adjustment */
-#define ZEROPAD 0x20 /* zero (as opposed to blank) pad */
-#define HEXPREFIX 0x40 /* add 0x or 0X prefix */
-
-int
-DEFUN(_IO_vfprintf, (fp, fmt0, ap),
- register _IO_FILE* fp AND char const *fmt0 AND _IO_va_list ap)
-{
- register const char *fmt; /* format string */
- register int ch; /* character from fmt */
- register int n; /* handy integer (short term usage) */
- register char *cp; /* handy char pointer (short term usage) */
- const char *fmark; /* for remembering a place in fmt */
- register int flags; /* flags as above */
- int ret; /* return value accumulator */
- int width; /* width from format (%8d), or 0 */
- int prec; /* precision from format (%.3d), or -1 */
- char sign; /* sign prefix (' ', '+', '-', or \0) */
-#ifdef FLOATING_POINT
- int softsign; /* temporary negative sign for floats */
- double _double; /* double precision arguments %[eEfgG] */
-#ifndef _IO_USE_DTOA
- int fpprec; /* `extra' floating precision in [eEfgG] */
-#endif
-#endif
- unsigned long _ulong; /* integer arguments %[diouxX] */
- enum { OCT, DEC, HEX } base;/* base for [diouxX] conversion */
- int dprec; /* a copy of prec if [diouxX], 0 otherwise */
- int dpad; /* extra 0 padding needed for integers */
- int fieldsz; /* field size expanded by sign, dpad etc */
- /* The initialization of 'size' is to suppress a warning that
- 'size' might be used unitialized. It seems gcc can't
- quite grok this spaghetti code ... */
- int size = 0; /* size of converted field or string */
- char buf[BUF]; /* space for %c, %[diouxX], %[eEfgG] */
- char ox[2]; /* space for 0x hex-prefix */
-
- /*
- * BEWARE, these `goto error' on error, and PAD uses `n'.
- */
-#define PRINT(ptr, len) \
- do { if (_IO_sputn(fp,ptr, len) != len) goto error; } while (0)
-#define PAD_SP(howmany) if (_IO_padn(fp, ' ', howmany) < (howmany)) goto error;
-#define PAD_0(howmany) if (_IO_padn(fp, '0', howmany) < (howmany)) goto error;
-
- /*
- * To extend shorts properly, we need both signed and unsigned
- * argument extraction methods.
- */
-#define SARG() \
- (flags&LONGINT ? va_arg(ap, long) : \
- flags&SHORTINT ? (long)(short)va_arg(ap, int) : \
- (long)va_arg(ap, int))
-#define UARG() \
- (flags&LONGINT ? va_arg(ap, unsigned long) : \
- flags&SHORTINT ? (unsigned long)(unsigned short)va_arg(ap, int) : \
- (unsigned long)va_arg(ap, unsigned int))
-
- /* optimise stderr (and other unbuffered Unix files) */
- if (fp->_IO_file_flags & _IO_UNBUFFERED)
- return helper_vfprintf(fp, fmt0, ap);
-
- fmt = fmt0;
- ret = 0;
-
- /*
- * Scan the format for conversions (`%' character).
- */
- for (;;) {
- for (fmark = fmt; (ch = *fmt) != '\0' && ch != '%'; fmt++)
- /* void */;
- if ((n = fmt - fmark) != 0) {
- PRINT(fmark, n);
- ret += n;
- }
- if (ch == '\0')
- goto done;
- fmt++; /* skip over '%' */
-
- flags = 0;
- dprec = 0;
-#if defined(FLOATING_POINT) && !defined (_IO_USE_DTOA)
- fpprec = 0;
-#endif
- width = 0;
- prec = -1;
- sign = '\0';
-
-rflag: ch = *fmt++;
-reswitch: switch (ch) {
- case ' ':
- /*
- * ``If the space and + flags both appear, the space
- * flag will be ignored.''
- * -- ANSI X3J11
- */
- if (!sign)
- sign = ' ';
- goto rflag;
- case '#':
- flags |= ALT;
- goto rflag;
- case '*':
- /*
- * ``A negative field width argument is taken as a
- * - flag followed by a positive field width.''
- * -- ANSI X3J11
- * They don't exclude field widths read from args.
- */
- if ((width = va_arg(ap, int)) >= 0)
- goto rflag;
- width = -width;
- /* FALLTHROUGH */
- case '-':
- flags |= LADJUST;
- flags &= ~ZEROPAD; /* '-' disables '0' */
- goto rflag;
- case '+':
- sign = '+';
- goto rflag;
- case '.':
- if ((ch = *fmt++) == '*') {
- n = va_arg(ap, int);
- prec = n < 0 ? -1 : n;
- goto rflag;
- }
- n = 0;
- while (is_digit(ch)) {
- n = 10 * n + to_digit(ch);
- ch = *fmt++;
- }
- prec = n < 0 ? -1 : n;
- goto reswitch;
- case '0':
- /*
- * ``Note that 0 is taken as a flag, not as the
- * beginning of a field width.''
- * -- ANSI X3J11
- */
- if (!(flags & LADJUST))
- flags |= ZEROPAD; /* '-' disables '0' */
- goto rflag;
- case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
- n = 0;
- do {
- n = 10 * n + to_digit(ch);
- ch = *fmt++;
- } while (is_digit(ch));
- width = n;
- goto reswitch;
-#ifdef FLOATING_POINT
- case 'L':
- flags |= LONGDBL;
- goto rflag;
-#endif
- case 'h':
- flags |= SHORTINT;
- goto rflag;
- case 'l':
- flags |= LONGINT;
- goto rflag;
- case 'c':
- *(cp = buf) = va_arg(ap, int);
- size = 1;
- sign = '\0';
- break;
- case 'D':
- flags |= LONGINT;
- /*FALLTHROUGH*/
- case 'd':
- case 'i':
- _ulong = SARG();
- if ((long)_ulong < 0) {
- _ulong = -_ulong;
- sign = '-';
- }
- base = DEC;
- goto number;
-#ifdef FLOATING_POINT
- case 'e':
- case 'E':
- case 'f':
- case 'F':
- case 'g':
- case 'G':
- _double = va_arg(ap, double);
-#ifdef _IO_USE_DTOA
- {
- int fmt_flags = 0;
- int fill = ' ';
- if (flags & ALT)
- fmt_flags |= _IO_SHOWPOINT;
- if (flags & LADJUST)
- fmt_flags |= _IO_LEFT;
- else if (flags & ZEROPAD)
- fmt_flags |= _IO_INTERNAL, fill = '0';
- n = _IO_outfloat(_double, fp, ch, width,
- prec < 0 ? DEFPREC : prec,
- fmt_flags, sign, fill);
- if (n < 0)
- goto error;
- ret += n;
- }
- /* CHECK ERROR! */
- continue;
-#else
- /*
- * don't do unrealistic precision; just pad it with
- * zeroes later, so buffer size stays rational.
- */
- if (prec > MAXFRACT) {
- if ((ch != 'g' && ch != 'G') || (flags&ALT))
- fpprec = prec - MAXFRACT;
- prec = MAXFRACT;
- } else if (prec == -1)
- prec = DEFPREC;
- /* __cvt_double may have to round up before the
- "start" of its buffer, i.e.
- ``intf("%.2f", (double)9.999);'';
- if the first character is still NUL, it did.
- softsign avoids negative 0 if _double < 0 but
- no significant digits will be shown. */
- cp = buf;
- *cp = '\0';
- size = __cvt_double(_double, prec, flags, &softsign,
- ch, cp, buf + sizeof(buf));
- if (softsign)
- sign = '-';
- if (*cp == '\0')
- cp++;
- break;
-#endif
-#endif /* FLOATING_POINT */
- case 'n':
- if (flags & LONGINT)
- *va_arg(ap, long *) = ret;
- else if (flags & SHORTINT)
- *va_arg(ap, short *) = ret;
- else
- *va_arg(ap, int *) = ret;
- continue; /* no output */
- case 'O':
- flags |= LONGINT;
- /*FALLTHROUGH*/
- case 'o':
- _ulong = UARG();
- base = OCT;
- goto nosign;
- case 'p':
- /*
- * ``The argument shall be a pointer to void. The
- * value of the pointer is converted to a sequence
- * of printable characters, in an implementation-
- * defined manner.''
- * -- ANSI X3J11
- */
- /* NOSTRICT */
- _ulong = (unsigned long)va_arg(ap, void *);
- base = HEX;
- flags |= HEXPREFIX;
- ch = 'x';
- goto nosign;
- case 's':
- if ((cp = va_arg(ap, char *)) == NULL)
- cp = "(null)";
- if (prec >= 0) {
- /*
- * can't use strlen; can only look for the
- * NUL in the first `prec' characters, and
- * strlen() will go further.
- */
- char *p = (char*)memchr(cp, 0, prec);
-
- if (p != NULL) {
- size = p - cp;
- if (size > prec)
- size = prec;
- } else
- size = prec;
- } else
- size = strlen(cp);
- sign = '\0';
- break;
- case 'U':
- flags |= LONGINT;
- /*FALLTHROUGH*/
- case 'u':
- _ulong = UARG();
- base = DEC;
- goto nosign;
- case 'X':
- case 'x':
- _ulong = UARG();
- base = HEX;
- /* leading 0x/X only if non-zero */
- if (flags & ALT && _ulong != 0)
- flags |= HEXPREFIX;
-
- /* unsigned conversions */
-nosign: sign = '\0';
- /*
- * ``... diouXx conversions ... if a precision is
- * specified, the 0 flag will be ignored.''
- * -- ANSI X3J11
- */
-number: if ((dprec = prec) >= 0)
- flags &= ~ZEROPAD;
-
- /*
- * ``The result of converting a zero value with an
- * explicit precision of zero is no characters.''
- * -- ANSI X3J11
- */
- cp = buf + BUF;
- if (_ulong != 0 || prec != 0) {
- char *xdigs; /* digits for [xX] conversion */
- /*
- * unsigned mod is hard, and unsigned mod
- * by a constant is easier than that by
- * a variable; hence this switch.
- */
- switch (base) {
- case OCT:
- do {
- *--cp = to_char(_ulong & 7);
- _ulong >>= 3;
- } while (_ulong);
- /* handle octal leading 0 */
- if (flags & ALT && *cp != '0')
- *--cp = '0';
- break;
-
- case DEC:
- /* many numbers are 1 digit */
- while (_ulong >= 10) {
- *--cp = to_char(_ulong % 10);
- _ulong /= 10;
- }
- *--cp = to_char(_ulong);
- break;
-
- case HEX:
- if (ch == 'X')
- xdigs = "0123456789ABCDEF";
- else /* ch == 'x' || ch == 'p' */
- xdigs = "0123456789abcdef";
- do {
- *--cp = xdigs[_ulong & 15];
- _ulong >>= 4;
- } while (_ulong);
- break;
-
- default:
- cp = "bug in vform: bad base";
- goto skipsize;
- }
- }
- size = buf + BUF - cp;
- skipsize:
- break;
- default: /* "%?" prints ?, unless ? is NUL */
- if (ch == '\0')
- goto done;
- /* pretend it was %c with argument ch */
- cp = buf;
- *cp = ch;
- size = 1;
- sign = '\0';
- break;
- }
-
- /*
- * All reasonable formats wind up here. At this point,
- * `cp' points to a string which (if not flags&LADJUST)
- * should be padded out to `width' places. If
- * flags&ZEROPAD, it should first be prefixed by any
- * sign or other prefix; otherwise, it should be blank
- * padded before the prefix is emitted. After any
- * left-hand padding and prefixing, emit zeroes
- * required by a decimal [diouxX] precision, then print
- * the string proper, then emit zeroes required by any
- * leftover floating precision; finally, if LADJUST,
- * pad with blanks.
- */
-
- /*
- * compute actual size, so we know how much to pad.
- */
-#if defined(FLOATING_POINT) && !defined (_IO_USE_DTOA)
- fieldsz = size + fpprec;
-#else
- fieldsz = size;
-#endif
- dpad = dprec - size;
- if (dpad < 0)
- dpad = 0;
-
- if (sign)
- fieldsz++;
- else if (flags & HEXPREFIX)
- fieldsz += 2;
- fieldsz += dpad;
-
- /* right-adjusting blank padding */
- if ((flags & (LADJUST|ZEROPAD)) == 0)
- PAD_SP(width - fieldsz);
-
- /* prefix */
- if (sign) {
- PRINT(&sign, 1);
- } else if (flags & HEXPREFIX) {
- ox[0] = '0';
- ox[1] = ch;
- PRINT(ox, 2);
- }
-
- /* right-adjusting zero padding */
- if ((flags & (LADJUST|ZEROPAD)) == ZEROPAD)
- PAD_0(width - fieldsz);
-
- /* leading zeroes from decimal precision */
- PAD_0(dpad);
-
- /* the string or number proper */
- PRINT(cp, size);
-
-#if defined(FLOATING_POINT) && !defined (_IO_USE_DTOA)
- /* trailing f.p. zeroes */
- PAD_0(fpprec);
-#endif
-
- /* left-adjusting padding (always blank) */
- if (flags & LADJUST)
- PAD_SP(width - fieldsz);
-
- /* finally, adjust ret */
- ret += width > fieldsz ? width : fieldsz;
-
- }
-done:
- return ret;
-error:
- return EOF;
- /* NOTREACHED */
-}
-
-#if defined(FLOATING_POINT) && !defined(_IO_USE_DTOA)
-
-static char *exponent(register char *p, register int exp, int fmtch)
-{
- register char *t;
- char expbuf[MAXEXP];
-
- *p++ = fmtch;
- if (exp < 0) {
- exp = -exp;
- *p++ = '-';
- }
- else
- *p++ = '+';
- t = expbuf + MAXEXP;
- if (exp > 9) {
- do {
- *--t = to_char(exp % 10);
- } while ((exp /= 10) > 9);
- *--t = to_char(exp);
- for (; t < expbuf + MAXEXP; *p++ = *t++);
- }
- else {
- *p++ = '0';
- *p++ = to_char(exp);
- }
- return (p);
-}
-
-static char * round(double fract, int *exp,
- register char *start, register char *end,
- char ch, int *signp)
-{
- double tmp;
-
- if (fract)
- (void)modf(fract * 10, &tmp);
- else
- tmp = to_digit(ch);
- if (tmp > 4)
- for (;; --end) {
- if (*end == '.')
- --end;
- if (++*end <= '9')
- break;
- *end = '0';
- if (end == start) {
- if (exp) { /* e/E; increment exponent */
- *end = '1';
- ++*exp;
- }
- else { /* f; add extra digit */
- *--end = '1';
- --start;
- }
- break;
- }
- }
- /* ``"%.3f", (double)-0.0004'' gives you a negative 0. */
- else if (*signp == '-')
- for (;; --end) {
- if (*end == '.')
- --end;
- if (*end != '0')
- break;
- if (end == start)
- *signp = 0;
- }
- return (start);
-}
-
-int __cvt_double(double number, register int prec, int flags, int *signp,
- int fmtch, char *startp, char *endp)
-{
- register char *p, *t;
- register double fract;
- int dotrim = 0, expcnt, gformat = 0;
- double integer, tmp;
-
- expcnt = 0;
- if (number < 0) {
- number = -number;
- *signp = '-';
- } else
- *signp = 0;
-
- fract = modf(number, &integer);
-
- /* get an extra slot for rounding. */
- t = ++startp;
-
- /*
- * get integer portion of number; put into the end of the buffer; the
- * .01 is added for modf(356.0 / 10, &integer) returning .59999999...
- */
- for (p = endp - 1; integer; ++expcnt) {
- tmp = modf(integer / 10, &integer);
- *p-- = to_char((int)((tmp + .01) * 10));
- }
- switch (fmtch) {
- case 'f':
- case 'F':
- /* reverse integer into beginning of buffer */
- if (expcnt)
- for (; ++p < endp; *t++ = *p);
- else
- *t++ = '0';
- /*
- * if precision required or alternate flag set, add in a
- * decimal point.
- */
- if (prec || flags&ALT)
- *t++ = '.';
- /* if requires more precision and some fraction left */
- if (fract) {
- if (prec)
- do {
- fract = modf(fract * 10, &tmp);
- *t++ = to_char((int)tmp);
- } while (--prec && fract);
- if (fract)
- startp = round(fract, (int *)NULL, startp,
- t - 1, (char)0, signp);
- }
- for (; prec--; *t++ = '0');
- break;
- case 'e':
- case 'E':
-eformat: if (expcnt) {
- *t++ = *++p;
- if (prec || flags&ALT)
- *t++ = '.';
- /* if requires more precision and some integer left */
- for (; prec && ++p < endp; --prec)
- *t++ = *p;
- /*
- * if done precision and more of the integer component,
- * round using it; adjust fract so we don't re-round
- * later.
- */
- if (!prec && ++p < endp) {
- fract = 0;
- startp = round((double)0, &expcnt, startp,
- t - 1, *p, signp);
- }
- /* adjust expcnt for digit in front of decimal */
- --expcnt;
- }
- /* until first fractional digit, decrement exponent */
- else if (fract) {
- /* adjust expcnt for digit in front of decimal */
- for (expcnt = -1;; --expcnt) {
- fract = modf(fract * 10, &tmp);
- if (tmp)
- break;
- }
- *t++ = to_char((int)tmp);
- if (prec || flags&ALT)
- *t++ = '.';
- }
- else {
- *t++ = '0';
- if (prec || flags&ALT)
- *t++ = '.';
- }
- /* if requires more precision and some fraction left */
- if (fract) {
- if (prec)
- do {
- fract = modf(fract * 10, &tmp);
- *t++ = to_char((int)tmp);
- } while (--prec && fract);
- if (fract)
- startp = round(fract, &expcnt, startp,
- t - 1, (char)0, signp);
- }
- /* if requires more precision */
- for (; prec--; *t++ = '0');
-
- /* unless alternate flag, trim any g/G format trailing 0's */
- if (gformat && !(flags&ALT)) {
- while (t > startp && *--t == '0');
- if (*t == '.')
- --t;
- ++t;
- }
- t = exponent(t, expcnt, fmtch);
- break;
- case 'g':
- case 'G':
- /* a precision of 0 is treated as a precision of 1. */
- if (!prec)
- ++prec;
- /*
- * ``The style used depends on the value converted; style e
- * will be used only if the exponent resulting from the
- * conversion is less than -4 or greater than the precision.''
- * -- ANSI X3J11
- */
- if (expcnt > prec || (!expcnt && fract && fract < .0001)) {
- /*
- * g/G format counts "significant digits, not digits of
- * precision; for the e/E format, this just causes an
- * off-by-one problem, i.e. g/G considers the digit
- * before the decimal point significant and e/E doesn't
- * count it as precision.
- */
- --prec;
- fmtch -= 2; /* G->E, g->e */
- gformat = 1;
- goto eformat;
- }
- /*
- * reverse integer into beginning of buffer,
- * note, decrement precision
- */
- if (expcnt)
- for (; ++p < endp; *t++ = *p, --prec);
- else
- *t++ = '0';
- /*
- * if precision required or alternate flag set, add in a
- * decimal point. If no digits yet, add in leading 0.
- */
- if (prec || flags&ALT) {
- dotrim = 1;
- *t++ = '.';
- }
- else
- dotrim = 0;
- /* if requires more precision and some fraction left */
- if (fract) {
- if (prec) {
- /* If no integer part, don't count initial
- * zeros as significant digits. */
- do {
- fract = modf(fract * 10, &tmp);
- *t++ = to_char((int)tmp);
- } while(!tmp && !expcnt);
- while (--prec && fract) {
- fract = modf(fract * 10, &tmp);
- *t++ = to_char((int)tmp);
- }
- }
- if (fract)
- startp = round(fract, (int *)NULL, startp,
- t - 1, (char)0, signp);
- }
- /* alternate format, adds 0's for precision, else trim 0's */
- if (flags&ALT)
- for (; prec--; *t++ = '0');
- else if (dotrim) {
- while (t > startp && *--t == '0');
- if (*t != '.')
- ++t;
- }
- }
- return (t - startp);
-}
-
-#endif /* defined(FLOATING_POINT) && !defined(_IO_USE_DTOA) */
diff --git a/contrib/libg++/libio/iovfscanf.c b/contrib/libg++/libio/iovfscanf.c
deleted file mode 100644
index 1220e0750b7f..000000000000
--- a/contrib/libg++/libio/iovfscanf.c
+++ /dev/null
@@ -1,787 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-/*
- * Copyright (c) 1990 The Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms are permitted
- * provided that the above copyright notice and this paragraph are
- * duplicated in all such forms and that any documentation,
- * advertising materials, and other materials related to such
- * distribution and use acknowledge that the software was developed
- * by the University of California, Berkeley. The name of the
- * University may not be used to endorse or promote products derived
- * from this software without specific prior written permission.
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- */
-
-/* Extensively hacked for GNU iostream by Per Bothner 1991, 1992, 1993.
- Changes copyright Free Software Foundation 1992, 1993. */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "%W% (Berkeley) %G%";
-#endif /* LIBC_SCCS and not lint */
-
-#include <libioP.h>
-#include <ctype.h>
-#ifdef __STDC__
-#include <stdarg.h>
-#else
-#include <varargs.h>
-#endif
-
-#ifndef NO_FLOATING_POINT
-#define FLOATING_POINT
-#endif
-
-#ifdef FLOATING_POINT
-#include "floatio.h"
-#define BUF (MAXEXP+MAXFRACT+3) /* 3 = sign + decimal point + NUL */
-#else
-#define BUF 40
-#endif
-
-/*
- * Flags used during conversion.
- */
-#define LONG 0x01 /* l: long or double */
-#define LONGDBL 0x02 /* L: long double; unimplemented */
-#define SHORT 0x04 /* h: short */
-#define SUPPRESS 0x08 /* suppress assignment */
-#define POINTER 0x10 /* weird %p pointer (`fake hex') */
-#define NOSKIP 0x20 /* do not skip blanks */
-#define WIDTH 0x40 /* width */
-
-/*
- * The following are used in numeric conversions only:
- * SIGNOK, NDIGITS, DPTOK, and EXPOK are for floating point;
- * SIGNOK, NDIGITS, PFXOK, and NZDIGITS are for integral.
- */
-#define SIGNOK 0x40 /* +/- is (still) legal */
-#define NDIGITS 0x80 /* no digits detected */
-
-#define DPTOK 0x100 /* (float) decimal point is still legal */
-#define EXPOK 0x200 /* (float) exponent (e+3, etc) still legal */
-
-#define PFXOK 0x100 /* 0x prefix is (still) legal */
-#define NZDIGITS 0x200 /* no zero digits detected */
-
-/*
- * Conversion types.
- */
-#define CT_CHAR 0 /* %c conversion */
-#define CT_CCL 1 /* %[...] conversion */
-#define CT_STRING 2 /* %s conversion */
-#define CT_INT 3 /* integer, i.e., strtol or strtoul */
-#define CT_FLOAT 4 /* floating, i.e., strtod */
-
-#define u_char unsigned char
-#define u_long unsigned long
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-extern u_long strtoul __P((const char*, char**, int));
-extern long strtol __P((const char*, char**, int));
-static const u_char *__sccl __P((char *tab, const u_char *fmt));
-#ifndef _IO_USE_DTOA
-extern double atof();
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-/* If errp != NULL, *errp|=1 if we see a premature EOF;
- *errp|=2 if we an invalid character. */
-
-int
-DEFUN(_IO_vfscanf, (fp, fmt0, ap, errp),
- register _IO_FILE *fp AND char const *fmt0
- AND _IO_va_list ap AND int *errp)
-{
- register const u_char *fmt = (const u_char *)fmt0;
- register int c; /* character from format, or conversion */
- register _IO_ssize_t width; /* field width, or 0 */
- register char *p; /* points into all kinds of strings */
- register int n; /* handy integer */
- register int flags = 0; /* flags as defined above */
- register char *p0; /* saves original value of p when necessary */
- int nassigned; /* number of fields assigned */
- int nread; /* number of characters consumed from fp */
- /* Assignments to base and ccfn are just to suppress warnings from gcc.*/
- int base = 0; /* base argument to strtol/strtoul */
- typedef u_long (*strtoulfn) __P((const char*, char**, int));
- strtoulfn ccfn = 0;
- /* conversion function (strtol/strtoul) */
- char ccltab[256]; /* character class table for %[...] */
- char buf[BUF]; /* buffer for numeric conversions */
- int seen_eof = 0;
-
- /* `basefix' is used to avoid `if' tests in the integer scanner */
- static short basefix[17] =
- { 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 };
-
- nassigned = 0;
- nread = 0;
- for (;;) {
- c = *fmt++;
- if (c == 0)
- goto done;
- if (isspace(c)) {
- for (;;) {
- c = _IO_getc(fp);
- if (c == EOF) {
- seen_eof++;
- break;
- }
- if (!isspace(c)) {
- _IO_ungetc (c, fp);
- break;
- }
- nread++;
- }
- continue;
- }
- if (c != '%')
- goto literal;
- width = 0;
- flags = 0;
- /*
- * switch on the format. continue if done;
- * break once format type is derived.
- */
-again: c = *fmt++;
- switch (c) {
- case '%':
-literal:
- n = _IO_getc(fp);
- if (n == EOF)
- goto eof_failure;
- if (n != c) {
- _IO_ungetc (n, fp);
- goto match_failure;
- }
- nread++;
- continue;
-
- case '*':
- if (flags) goto control_failure;
- flags = SUPPRESS;
- goto again;
- case 'l':
- if (flags & ~(SUPPRESS | WIDTH)) goto control_failure;
- flags |= LONG;
- goto again;
- case 'L':
- if (flags & ~(SUPPRESS | WIDTH)) goto control_failure;
- flags |= LONGDBL;
- goto again;
- case 'h':
- if (flags & ~(SUPPRESS | WIDTH)) goto control_failure;
- flags |= SHORT;
- goto again;
-
- case '0': case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
- if (flags & ~(SUPPRESS | WIDTH)) goto control_failure;
- flags |= WIDTH;
- width = width * 10 + c - '0';
- goto again;
-
- /*
- * Conversions.
- * Those marked `compat' are for 4.[123]BSD compatibility.
- *
- * (According to ANSI, E and X formats are supposed
- * to the same as e and x. Sorry about that.)
- */
- case 'D': /* compat */
- flags |= LONG;
- /* FALLTHROUGH */
- case 'd':
- c = CT_INT;
- ccfn = (strtoulfn)strtol;
- base = 10;
- break;
-
- case 'i':
- c = CT_INT;
- ccfn = (strtoulfn)strtol;
- base = 0;
- break;
-
- case 'O': /* compat */
- flags |= LONG;
- /* FALLTHROUGH */
- case 'o':
- c = CT_INT;
- ccfn = strtoul;
- base = 8;
- break;
-
- case 'u':
- c = CT_INT;
- ccfn = strtoul;
- base = 10;
- break;
-
- case 'X':
- case 'x':
- flags |= PFXOK; /* enable 0x prefixing */
- c = CT_INT;
- ccfn = strtoul;
- base = 16;
- break;
-
-#ifdef FLOATING_POINT
- case 'E': case 'F':
- case 'e': case 'f': case 'g':
- c = CT_FLOAT;
- break;
-#endif
-
- case 's':
- c = CT_STRING;
- break;
-
- case '[':
- fmt = __sccl(ccltab, fmt);
- flags |= NOSKIP;
- c = CT_CCL;
- break;
-
- case 'c':
- flags |= NOSKIP;
- c = CT_CHAR;
- break;
-
- case 'p': /* pointer format is like hex */
- flags |= POINTER | PFXOK;
- c = CT_INT;
- ccfn = strtoul;
- base = 16;
- break;
-
- case 'n':
- if (flags & SUPPRESS) /* ??? */
- continue;
- if (flags & SHORT)
- *va_arg(ap, short *) = nread;
- else if (flags & LONG)
- *va_arg(ap, long *) = nread;
- else
- *va_arg(ap, int *) = nread;
- continue;
-
- /*
- * Disgusting backwards compatibility hacks. XXX
- */
- case '\0': /* compat */
- nassigned = EOF;
- goto done;
-
- default: /* compat */
- if (isupper(c))
- flags |= LONG;
- c = CT_INT;
- ccfn = (strtoulfn)strtol;
- base = 10;
- break;
- }
-
- /*
- * We have a conversion that requires input.
- */
- if (_IO_peekc(fp) == EOF)
- goto eof_failure;
-
- /*
- * Consume leading white space, except for formats
- * that suppress this.
- */
- if ((flags & NOSKIP) == 0) {
- n = (unsigned char)*fp->_IO_read_ptr;
- while (isspace(n)) {
- fp->_IO_read_ptr++;
- nread++;
- n = _IO_peekc(fp);
- if (n == EOF)
- goto eof_failure;
- }
- /* Note that there is at least one character in
- the buffer, so conversions that do not set NOSKIP
- can no longer result in an input failure. */
- }
-
- /*
- * Do the conversion.
- */
- switch (c) {
-
- case CT_CHAR:
- /* scan arbitrary characters (sets NOSKIP) */
- if (width == 0) /* FIXME! */
- width = 1;
- if (flags & SUPPRESS) {
- _IO_size_t sum = 0;
- for (;;) {
- n = fp->_IO_read_end - fp->_IO_read_ptr;
- if (n < (int)width) {
- sum += n;
- width -= n;
- fp->_IO_read_ptr += n;
- if (__underflow(fp) == EOF)
- if (sum == 0)
- goto eof_failure;
- else {
- seen_eof++;
- break;
- }
- } else {
- sum += width;
- fp->_IO_read_ptr += width;
- break;
- }
- }
- nread += sum;
- } else {
- _IO_size_t r =
-
- _IO_XSGETN (fp, (char*)va_arg(ap, char*), width);
- if (r != width)
- goto eof_failure;
- nread += r;
- nassigned++;
- }
- break;
-
- case CT_CCL:
- /* scan a (nonempty) character class (sets NOSKIP) */
- if (width == 0)
- width = ~0; /* `infinity' */
- /* take only those things in the class */
- if (flags & SUPPRESS) {
- n = 0;
- while (ccltab[(unsigned char)*fp->_IO_read_ptr]) {
- n++, fp->_IO_read_ptr++;
- if (--width == 0)
- break;
- if (_IO_peekc(fp) == EOF) {
- if (n == 0)
- goto eof_failure;
- seen_eof++;
- break;
- }
- }
- if (n == 0)
- goto match_failure;
- } else {
- p0 = p = va_arg(ap, char *);
- while (ccltab[(unsigned char)*fp->_IO_read_ptr]) {
- *p++ = *fp->_IO_read_ptr++;
- if (--width == 0)
- break;
- if (_IO_peekc(fp) == EOF) {
- if (p == p0)
- goto eof_failure;
- seen_eof++;
- break;
- }
- }
- n = p - p0;
- if (n == 0)
- goto match_failure;
- *p = 0;
- nassigned++;
- }
- nread += n;
- break;
-
- case CT_STRING:
- /* like CCL, but zero-length string OK, & no NOSKIP */
- if (width == 0)
- width = ~0;
- if (flags & SUPPRESS) {
- n = 0;
- while (!isspace((unsigned char)*fp->_IO_read_ptr)) {
- n++, fp->_IO_read_ptr++;
- if (--width == 0)
- break;
- if (_IO_peekc(fp) == EOF) {
- seen_eof++;
- break;
- }
- }
- nread += n;
- } else {
- p0 = p = va_arg(ap, char *);
- while (!isspace((unsigned char)*fp->_IO_read_ptr)) {
- *p++ = *fp->_IO_read_ptr++;
- if (--width == 0)
- break;
- if (_IO_peekc(fp) == EOF) {
- seen_eof++;
- break;
- }
- }
- *p = 0;
- nread += p - p0;
- nassigned++;
- }
- continue;
-
- case CT_INT:
- /* scan an integer as if by strtol/strtoul */
- if (width == 0 || width > sizeof(buf) - 1)
- width = sizeof(buf) - 1;
- flags |= SIGNOK | NDIGITS | NZDIGITS;
- for (p = buf; width; width--) {
- c = (unsigned char)*fp->_IO_read_ptr;
- /*
- * Switch on the character; `goto ok'
- * if we accept it as a part of number.
- */
- switch (c) {
-
- /*
- * The digit 0 is always legal, but is
- * special. For %i conversions, if no
- * digits (zero or nonzero) have been
- * scanned (only signs), we will have
- * base==0. In that case, we should set
- * it to 8 and enable 0x prefixing.
- * Also, if we have not scanned zero digits
- * before this, do not turn off prefixing
- * (someone else will turn it off if we
- * have scanned any nonzero digits).
- */
- case '0':
- if (base == 0) {
- base = 8;
- flags |= PFXOK;
- }
- if (flags & NZDIGITS)
- flags &= ~(SIGNOK|NZDIGITS|NDIGITS);
- else
- flags &= ~(SIGNOK|PFXOK|NDIGITS);
- goto ok;
-
- /* 1 through 7 always legal */
- case '1': case '2': case '3':
- case '4': case '5': case '6': case '7':
- base = basefix[base];
- flags &= ~(SIGNOK | PFXOK | NDIGITS);
- goto ok;
-
- /* digits 8 and 9 ok iff decimal or hex */
- case '8': case '9':
- base = basefix[base];
- if (base <= 8)
- break; /* not legal here */
- flags &= ~(SIGNOK | PFXOK | NDIGITS);
- goto ok;
-
- /* letters ok iff hex */
- case 'A': case 'B': case 'C':
- case 'D': case 'E': case 'F':
- case 'a': case 'b': case 'c':
- case 'd': case 'e': case 'f':
- /* no need to fix base here */
- if (base <= 10)
- break; /* not legal here */
- flags &= ~(SIGNOK | PFXOK | NDIGITS);
- goto ok;
-
- /* sign ok only as first character */
- case '+': case '-':
- if (flags & SIGNOK) {
- flags &= ~SIGNOK;
- goto ok;
- }
- break;
-
- /* x ok iff flag still set & 2nd char */
- case 'x': case 'X':
- if (flags & PFXOK && p == buf + 1) {
- base = 16; /* if %i */
- flags &= ~PFXOK;
- goto ok;
- }
- break;
- }
-
- /*
- * If we got here, c is not a legal character
- * for a number. Stop accumulating digits.
- */
- break;
- ok:
- /*
- * c is legal: store it and look at the next.
- */
- *p++ = c;
- fp->_IO_read_ptr++;
- if (_IO_peekc(fp) == EOF) {
- seen_eof++;
- break; /* EOF */
- }
- }
- /*
- * If we had only a sign, it is no good; push
- * back the sign. If the number ends in `x',
- * it was [sign] '0' 'x', so push back the x
- * and treat it as [sign] '0'.
- */
- if (flags & NDIGITS) {
- if (p > buf)
- (void) _IO_ungetc(*(u_char *)--p, fp);
- goto match_failure;
- }
- c = ((u_char *)p)[-1];
- if (c == 'x' || c == 'X') {
- --p;
- (void) _IO_ungetc (c, fp);
- }
- if ((flags & SUPPRESS) == 0) {
- u_long res;
-
- *p = 0;
- res = (*ccfn)(buf, (char **)NULL, base);
- if (flags & POINTER)
- *va_arg(ap, void **) = (void *)res;
- else if (flags & SHORT)
- *va_arg(ap, short *) = res;
- else if (flags & LONG)
- *va_arg(ap, long *) = res;
- else
- *va_arg(ap, int *) = res;
- nassigned++;
- }
- nread += p - buf;
- break;
-
-#ifdef FLOATING_POINT
- case CT_FLOAT:
- /* scan a floating point number as if by strtod */
- if (width == 0 || width > sizeof(buf) - 1)
- width = sizeof(buf) - 1;
- flags |= SIGNOK | NDIGITS | DPTOK | EXPOK;
- for (p = buf; width; width--) {
- c = (unsigned char)*fp->_IO_read_ptr;
- /*
- * This code mimicks the integer conversion
- * code, but is much simpler.
- */
- switch (c) {
-
- case '0': case '1': case '2': case '3':
- case '4': case '5': case '6': case '7':
- case '8': case '9':
- flags &= ~(SIGNOK | NDIGITS);
- goto fok;
-
- case '+': case '-':
- if (flags & SIGNOK) {
- flags &= ~SIGNOK;
- goto fok;
- }
- break;
- case '.':
- if (flags & DPTOK) {
- flags &= ~(SIGNOK | DPTOK);
- goto fok;
- }
- break;
- case 'e': case 'E':
- /* no exponent without some digits */
- if ((flags&(NDIGITS|EXPOK)) == EXPOK) {
- flags =
- (flags & ~(EXPOK|DPTOK)) |
- SIGNOK | NDIGITS;
- goto fok;
- }
- break;
- }
- break;
- fok:
- *p++ = c;
- fp->_IO_read_ptr++;
- if (_IO_peekc(fp) == EOF) {
- seen_eof++;
- break; /* EOF */
- }
- }
- /*
- * If no digits, might be missing exponent digits
- * (just give back the exponent) or might be missing
- * regular digits, but had sign and/or decimal point.
- */
- if (flags & NDIGITS) {
- if (flags & EXPOK) {
- /* no digits at all */
- while (p > buf)
- _IO_ungetc (*(u_char *)--p, fp);
- goto match_failure;
- }
- /* just a bad exponent (e and maybe sign) */
- c = *(u_char *)--p;
- if (c != 'e' && c != 'E') {
- (void) _IO_ungetc (c, fp);/* sign */
- c = *(u_char *)--p;
- }
- (void) _IO_ungetc (c, fp);
- }
- if ((flags & SUPPRESS) == 0) {
- double res;
- *p = 0;
-#ifdef _IO_USE_DTOA
- res = _IO_strtod(buf, NULL);
-#else
- res = atof(buf);
-#endif
- if (flags & LONG)
- *va_arg(ap, double *) = res;
- else
- *va_arg(ap, float *) = res;
- nassigned++;
- }
- nread += p - buf;
- break;
-#endif /* FLOATING_POINT */
- }
- }
-eof_failure:
- seen_eof++;
-input_failure:
- if (nassigned == 0)
- nassigned = -1;
-control_failure:
-match_failure:
- if (errp)
- *errp |= 2;
-done:
- if (errp && seen_eof)
- *errp |= 1;
- return (nassigned);
-}
-
-/*
- * Fill in the given table from the scanset at the given format
- * (just after `['). Return a pointer to the character past the
- * closing `]'. The table has a 1 wherever characters should be
- * considered part of the scanset.
- */
-static const u_char *
-DEFUN(__sccl, (tab, fmt),
- register char *tab AND register const u_char *fmt)
-{
- register int c, n, v;
-
- /* first `clear' the whole table */
- c = *fmt++; /* first char hat => negated scanset */
- if (c == '^') {
- v = 1; /* default => accept */
- c = *fmt++; /* get new first char */
- } else
- v = 0; /* default => reject */
- /* should probably use memset here */
- for (n = 0; n < 256; n++)
- tab[n] = v;
- if (c == 0)
- return (fmt - 1);/* format ended before closing ] */
-
- /*
- * Now set the entries corresponding to the actual scanset
- * to the opposite of the above.
- *
- * The first character may be ']' (or '-') without being special;
- * the last character may be '-'.
- */
- v = 1 - v;
- for (;;) {
- tab[c] = v; /* take character c */
-doswitch:
- n = *fmt++; /* and examine the next */
- switch (n) {
-
- case 0: /* format ended too soon */
- return (fmt - 1);
-
- case '-':
- /*
- * A scanset of the form
- * [01+-]
- * is defined as `the digit 0, the digit 1,
- * the character +, the character -', but
- * the effect of a scanset such as
- * [a-zA-Z0-9]
- * is implementation defined. The V7 Unix
- * scanf treats `a-z' as `the letters a through
- * z', but treats `a-a' as `the letter a, the
- * character -, and the letter a'.
- *
- * For compatibility, the `-' is not considerd
- * to define a range if the character following
- * it is either a close bracket (required by ANSI)
- * or is not numerically greater than the character
- * we just stored in the table (c).
- */
- n = *fmt;
- if (n == ']' || n < c) {
- c = '-';
- break; /* resume the for(;;) */
- }
- fmt++;
- do { /* fill in the range */
- tab[++c] = v;
- } while (c < n);
-#if 1 /* XXX another disgusting compatibility hack */
- /*
- * Alas, the V7 Unix scanf also treats formats
- * such as [a-c-e] as `the letters a through e'.
- * This too is permitted by the standard....
- */
- goto doswitch;
-#else
- c = *fmt++;
- if (c == 0)
- return (fmt - 1);
- if (c == ']')
- return (fmt);
-#endif
- break;
-
- case ']': /* end of scanset */
- return (fmt);
-
- default: /* just another character */
- c = n;
- break;
- }
- }
- /* NOTREACHED */
-}
diff --git a/contrib/libg++/libio/iovsprintf.c b/contrib/libg++/libio/iovsprintf.c
deleted file mode 100644
index 06d926d35903..000000000000
--- a/contrib/libg++/libio/iovsprintf.c
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include "libioP.h"
-#include "strfile.h"
-
-int
-DEFUN(_IO_vsprintf, (string, format, args),
- char *string AND const char *format AND _IO_va_list args)
-{
- _IO_strfile sf;
- int ret;
- _IO_init((_IO_FILE*)&sf, 0);
- _IO_JUMPS((_IO_FILE*)&sf) = &_IO_str_jumps;
- _IO_str_init_static ((_IO_FILE*)&sf, string, -1, string);
- ret = _IO_vfprintf((_IO_FILE*)&sf, format, args);
- _IO_putc('\0', (_IO_FILE*)&sf);
- return ret;
-}
diff --git a/contrib/libg++/libio/iovsscanf.c b/contrib/libg++/libio/iovsscanf.c
deleted file mode 100644
index 529778098a55..000000000000
--- a/contrib/libg++/libio/iovsscanf.c
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include "libioP.h"
-#include "strfile.h"
-
-int
-DEFUN(_IO_vsscanf, (string, format, args),
- const char *string AND const char *format AND _IO_va_list args)
-{
- _IO_strfile sf;
- _IO_init((_IO_FILE*)&sf, 0);
- _IO_JUMPS((_IO_FILE*)&sf) = &_IO_str_jumps;
- _IO_str_init_static ((_IO_FILE*)&sf, (char*)string, 0, NULL);
- return _IO_vfscanf((_IO_FILE*)&sf, format, args, NULL);
-}
diff --git a/contrib/libg++/libio/isgetline.cc b/contrib/libg++/libio/isgetline.cc
deleted file mode 100644
index add26638b203..000000000000
--- a/contrib/libg++/libio/isgetline.cc
+++ /dev/null
@@ -1,139 +0,0 @@
-/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include <libioP.h>
-#include "iostream.h"
-#include <string.h>
-
-istream& istream::getline(char* buf, int len, char delim)
-{
- _gcount = 0;
- if (len <= 0)
- {
- set(ios::failbit);
- return *this;
- }
- int ch;
- if (ipfx1())
- {
- streambuf *sb = rdbuf();
- _gcount = _IO_getline(sb, buf, len - 1, delim, -1);
- ch = sb->sbumpc();
- if (ch == EOF)
- set (_gcount == 0 ? (ios::failbit|ios::eofbit) : ios::eofbit);
- else if (ch != (unsigned char) delim)
- {
- set(ios::failbit);
- sb->sungetc(); // Leave delimiter unread.
- }
- }
- else
- ch = EOF;
- buf[_gcount] = '\0';
- if (ch == (unsigned char)delim)
- _gcount++; // The delimiter is counted in the gcount().
- return *this;
-}
-
-istream& istream::get(char* buf, int len, char delim)
-{
- _gcount = 0;
- if (len <= 0)
- {
- set(ios::failbit);
- return *this;
- }
- if (ipfx1())
- {
- streambuf *sbuf = rdbuf();
- long count = _IO_getline(sbuf, buf, len - 1, delim, -1);
- if (count == 0 && sbuf->sgetc() == EOF)
- set(ios::failbit|ios::eofbit);
- else
- _gcount = count;
- }
- buf[_gcount] = '\0';
- return *this;
-}
-
-
-// from Doug Schmidt
-
-#define CHUNK_SIZE 512
-
-/* Reads an arbitrarily long input line terminated by a user-specified
- TERMINATOR. Super-nifty trick using recursion avoids unnecessary calls
- to NEW! */
-
-char *_sb_readline (streambuf *sb, long& total, char terminator)
-{
- char buf[CHUNK_SIZE];
- char *ptr;
- int ch;
-
- _IO_size_t count = _IO_getline(sb, buf, CHUNK_SIZE, terminator, -1);
- ch = sb->sbumpc();
- long old_total = total;
- total += count;
- if (ch != EOF && ch != terminator) {
- total++; // Include ch in total.
- ptr = _sb_readline(sb, total, terminator);
- if (ptr) {
- memcpy(ptr + old_total, buf, count);
- ptr[old_total+count] = ch;
- }
- return ptr;
- }
-
- ptr = new char[total+1];
- if (ptr != NULL) {
- ptr[total] = '\0';
- memcpy(ptr + total - count, buf, count);
- }
- return ptr;
-}
-
-/* Reads an arbitrarily long input line terminated by TERMINATOR.
- This routine allocates its own memory, so the user should
- only supply the address of a (char *). */
-
-istream& istream::gets(char **s, char delim /* = '\n' */)
-{
- if (ipfx1()) {
- long size = 0;
- streambuf *sb = rdbuf();
- *s = _sb_readline (sb, size, delim);
- _gcount = *s ? size : 0;
- if (sb->_flags & _IO_EOF_SEEN) {
- set(ios::eofbit);
- if (_gcount == 0)
- set(ios::failbit);
- }
- }
- else {
- _gcount = 0;
- *s = NULL;
- }
- return *this;
-}
diff --git a/contrib/libg++/libio/isgetsb.cc b/contrib/libg++/libio/isgetsb.cc
deleted file mode 100644
index 55617e649a0f..000000000000
--- a/contrib/libg++/libio/isgetsb.cc
+++ /dev/null
@@ -1,59 +0,0 @@
-/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include "libioP.h"
-#include "iostream.h"
-#include <string.h>
-
-istream& istream::get(streambuf& sb, char delim /* = '\n' */)
-{
- _gcount = 0;
- if (ipfx1())
- {
- register streambuf* isb = rdbuf();
- for (;;)
- {
- streamsize len = isb->_IO_read_end - isb->_IO_read_ptr;
- if (len <= 0)
- if (__underflow(isb) == EOF)
- break;
- else
- len = isb->_IO_read_end - isb->_IO_read_ptr;
- char *delimp = (char*)memchr((void*)isb->_IO_read_ptr, delim, len);
- if (delimp != NULL)
- len = delimp - isb->_IO_read_ptr;
- int written = sb.sputn(isb->_IO_read_ptr, len);
- isb->_IO_read_ptr += written;
- _gcount += written;
- if (written != len)
- {
- set(ios::failbit);
- break;
- }
- if (delimp != NULL)
- break;
- }
- }
- return *this;
-}
diff --git a/contrib/libg++/libio/isscan.cc b/contrib/libg++/libio/isscan.cc
deleted file mode 100644
index 64d4bc682f82..000000000000
--- a/contrib/libg++/libio/isscan.cc
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include "libioP.h"
-#include <iostream.h>
-#include <stdarg.h>
-
-istream& istream::scan(const char *format ...)
-{
- if (ipfx0()) {
- va_list ap;
- va_start(ap, format);
- _strbuf->vscan(format, ap, this);
- va_end(ap);
- }
- return *this;
-}
-
-istream& istream::vscan(const char *format, _IO_va_list args)
-{
- if (ipfx0())
- _strbuf->vscan(format, args, this);
- return *this;
-}
diff --git a/contrib/libg++/libio/istream.h b/contrib/libg++/libio/istream.h
deleted file mode 100644
index f54ec1de9a1c..000000000000
--- a/contrib/libg++/libio/istream.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include <stream.h>
diff --git a/contrib/libg++/libio/libio.h b/contrib/libg++/libio/libio.h
deleted file mode 100644
index 84a8217ba495..000000000000
--- a/contrib/libg++/libio/libio.h
+++ /dev/null
@@ -1,255 +0,0 @@
-/*
-Copyright (C) 1991, 1992, 1993, 1994 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-/* This is part of the iostream library. Written by Per Bothner. */
-
-#ifndef _IO_STDIO_H
-#define _IO_STDIO_H
-
-#include <_G_config.h>
-#define _IO_pos_t _G_fpos_t /* obsolete */
-#define _IO_fpos_t _G_fpos_t
-#define _IO_size_t _G_size_t
-#define _IO_ssize_t _G_ssize_t
-#define _IO_off_t _G_off_t
-#define _IO_pid_t _G_pid_t
-#define _IO_uid_t _G_uid_t
-#define _IO_HAVE_SYS_WAIT _G_HAVE_SYS_WAIT
-#define _IO_HAVE_ST_BLKSIZE _G_HAVE_ST_BLKSIZE
-#define _IO_BUFSIZ _G_BUFSIZ
-#define _IO_va_list _G_va_list
-
-#ifdef _G_NEED_STDARG_H
-/* This define avoids name pollution if we're using GNU stdarg.h */
-#define __need___va_list
-#include <stdarg.h>
-#ifdef __GNUC_VA_LIST
-#undef _IO_va_list
-#define _IO_va_list __gnuc_va_list
-#endif /* __GNUC_VA_LIST */
-#endif
-
-#ifndef __P
-#if _G_HAVE_SYS_CDEFS
-#include <sys/cdefs.h>
-#else
-#ifdef __STDC__
-#define __P(protos) protos
-#else
-#define __P(protos) ()
-#endif
-#endif
-#endif /*!__P*/
-
-/* For backward compatibility */
-#ifndef _PARAMS
-#define _PARAMS(protos) __P(protos)
-#endif /*!_PARAMS*/
-
-#ifndef __STDC__
-#define const
-#endif
-#define _IO_USE_DTOA
-#define _IO_UNIFIED_JUMPTABLES 1
-
-#if 0
-#ifdef _IO_NEED_STDARG_H
-#include <stdarg.h>
-#endif
-#endif
-
-#ifndef EOF
-#define EOF (-1)
-#endif
-#ifndef NULL
-#if !defined(__cplusplus) || defined(__GNUC__)
-#define NULL ((void*)0)
-#else
-#define NULL (0)
-#endif
-#endif
-
-#define _IOS_INPUT 1
-#define _IOS_OUTPUT 2
-#define _IOS_ATEND 4
-#define _IOS_APPEND 8
-#define _IOS_TRUNC 16
-#define _IOS_NOCREATE 32
-#define _IOS_NOREPLACE 64
-#define _IOS_BIN 128
-
-/* Magic numbers and bits for the _flags field.
- The magic numbers use the high-order bits of _flags;
- the remaining bits are abailable for variable flags.
- Note: The magic numbers must all be negative if stdio
- emulation is desired. */
-
-#define _IO_MAGIC 0xFBAD0000 /* Magic number */
-#define _OLD_STDIO_MAGIC 0xFABC0000 /* Emulate old stdio. */
-#define _IO_MAGIC_MASK 0xFFFF0000
-#define _IO_USER_BUF 1 /* User owns buffer; don't delete it on close. */
-#define _IO_UNBUFFERED 2
-#define _IO_NO_READS 4 /* Reading not allowed */
-#define _IO_NO_WRITES 8 /* Writing not allowd */
-#define _IO_EOF_SEEN 0x10
-#define _IO_ERR_SEEN 0x20
-#define _IO_DELETE_DONT_CLOSE 0x40 /* Don't call close(_fileno) on cleanup. */
-#define _IO_LINKED 0x80 /* Set if linked (using _chain) to streambuf::_list_all.*/
-#define _IO_IN_BACKUP 0x100
-#define _IO_LINE_BUF 0x200
-#define _IO_TIED_PUT_GET 0x400 /* Set if put and get pointer logicly tied. */
-#define _IO_CURRENTLY_PUTTING 0x800
-#define _IO_IS_APPENDING 0x1000
-#define _IO_IS_FILEBUF 0x2000
-
-/* These are "formatting flags" matching the iostream fmtflags enum values. */
-#define _IO_SKIPWS 01
-#define _IO_LEFT 02
-#define _IO_RIGHT 04
-#define _IO_INTERNAL 010
-#define _IO_DEC 020
-#define _IO_OCT 040
-#define _IO_HEX 0100
-#define _IO_SHOWBASE 0200
-#define _IO_SHOWPOINT 0400
-#define _IO_UPPERCASE 01000
-#define _IO_SHOWPOS 02000
-#define _IO_SCIENTIFIC 04000
-#define _IO_FIXED 010000
-#define _IO_UNITBUF 020000
-#define _IO_STDIO 040000
-#define _IO_DONT_CLOSE 0100000
-
-/* A streammarker remembers a position in a buffer. */
-
-struct _IO_jump_t; struct _IO_FILE;
-
-struct _IO_marker {
- struct _IO_marker *_next;
- struct _IO_FILE *_sbuf;
- /* If _pos >= 0
- it points to _buf->Gbase()+_pos. FIXME comment */
- /* if _pos < 0, it points to _buf->eBptr()+_pos. FIXME comment */
- int _pos;
-#if 0
- void set_streampos(streampos sp) { _spos = sp; }
- void set_offset(int offset) { _pos = offset; _spos = (streampos)(-2); }
- public:
- streammarker(streambuf *sb);
- ~streammarker();
- int saving() { return _spos == -2; }
- int delta(streammarker&);
- int delta();
-#endif
-};
-
-struct _IO_FILE {
- int _flags; /* High-order word is _IO_MAGIC; rest is flags. */
-#define _IO_file_flags _flags
-
- /* The following pointers correspond to the C++ streambuf protocol. */
- /* Note: Tk uses the _IO_read_ptr and _IO_read_end fields directly. */
- char* _IO_read_ptr; /* Current read pointer */
- char* _IO_read_end; /* End of get area. */
- char* _IO_read_base; /* Start of putback+get area. */
- char* _IO_write_base; /* Start of put area. */
- char* _IO_write_ptr; /* Current put pointer. */
- char* _IO_write_end; /* End of put area. */
- char* _IO_buf_base; /* Start of reserve area. */
- char* _IO_buf_end; /* End of reserve area. */
- /* The following fields are used to support backing up and undo. */
- char *_IO_save_base; /* Pointer to start of non-current get area. */
- char *_IO_backup_base; /* Pointer to first valid character of backup area */
- char *_IO_save_end; /* Pointer to end of non-current get area. */
-
- struct _IO_marker *_markers;
-
- struct _IO_FILE *_chain;
-
- int _fileno;
- int _blksize;
- _IO_off_t _offset;
-
-#define __HAVE_COLUMN /* temporary */
- /* 1+column number of pbase(); 0 is unknown. */
- unsigned short _cur_column;
- char _unused;
- char _shortbuf[1];
-
- /* char* _save_gptr; char* _save_egptr; */
-};
-
-#ifndef __cplusplus
-typedef struct _IO_FILE _IO_FILE;
-#endif
-
-struct _IO_FILE_plus;
-extern struct _IO_FILE_plus _IO_stdin_, _IO_stdout_, _IO_stderr_;
-#define _IO_stdin ((_IO_FILE*)(&_IO_stdin_))
-#define _IO_stdout ((_IO_FILE*)(&_IO_stdout_))
-#define _IO_stderr ((_IO_FILE*)(&_IO_stderr_))
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-extern int __underflow __P((_IO_FILE*));
-extern int __uflow __P((_IO_FILE*));
-extern int __overflow __P((_IO_FILE*, int));
-
-#define _IO_getc(_fp) \
- ((_fp)->_IO_read_ptr >= (_fp)->_IO_read_end ? __uflow(_fp) \
- : *(unsigned char*)(_fp)->_IO_read_ptr++)
-#define _IO_peekc(_fp) \
- ((_fp)->_IO_read_ptr >= (_fp)->_IO_read_end \
- && __underflow(_fp) == EOF ? EOF \
- : *(unsigned char*)(_fp)->_IO_read_ptr)
-
-#define _IO_putc(_ch, _fp) \
- (((_fp)->_IO_write_ptr >= (_fp)->_IO_write_end) \
- ? __overflow(_fp, (unsigned char)(_ch)) \
- : (unsigned char)(*(_fp)->_IO_write_ptr++ = (_ch)))
-
-#define _IO_feof(__fp) (((__fp)->_flags & _IO_EOF_SEEN) != 0)
-#define _IO_ferror(__fp) (((__fp)->_flags & _IO_ERR_SEEN) != 0)
-
-/* This one is for Emacs. */
-#define _IO_PENDING_OUTPUT_COUNT(_fp) \
- ((_fp)->_IO_write_ptr - (_fp)->_IO_write_base)
-
-extern int _IO_vfscanf __P((_IO_FILE*, const char*, _IO_va_list, int*));
-extern int _IO_vfprintf __P((_IO_FILE*, const char*, _IO_va_list));
-extern _IO_ssize_t _IO_padn __P((_IO_FILE *, int, _IO_ssize_t));
-extern _IO_size_t _IO_sgetn __P((_IO_FILE *, void*, _IO_size_t));
-
-extern _IO_fpos_t _IO_seekoff __P((_IO_FILE*, _IO_off_t, int, int));
-extern _IO_fpos_t _IO_seekpos __P((_IO_FILE*, _IO_fpos_t, int));
-
-extern void _IO_free_backup_area __P((_IO_FILE*));
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _IO_STDIO_H */
diff --git a/contrib/libg++/libio/libioP.h b/contrib/libg++/libio/libioP.h
deleted file mode 100644
index c7bc5224cabe..000000000000
--- a/contrib/libg++/libio/libioP.h
+++ /dev/null
@@ -1,494 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include <errno.h>
-#ifndef errno
-extern int errno;
-#endif
-
-#include "iolibio.h"
-
-#if defined (__STDC__) || defined (_AIX) || (defined (__mips) && defined (_SYSTYPE_SVR4)) || defined(__cplusplus)
-/* All known AIX compilers implement these things (but don't always
- define __STDC__). The RISC/OS MIPS compiler defines these things
- in SVR4 mode, but does not define __STDC__. */
-
-#define AND ,
-#define DEFUN(name, arglist, args) name(args)
-#define DEFUN_VOID(name) name(void)
-
-#else /* Not ANSI C. */
-
-#define AND ;
-#ifndef const /* some systems define it in header files for non-ansi mode */
-#define const
-#endif
-#define DEFUN(name, arglist, args) name arglist args;
-#define DEFUN_VOID(name) name()
-#endif /* ANSI C. */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define _IO_seek_set 0
-#define _IO_seek_cur 1
-#define _IO_seek_end 2
-
-/* THE JUMPTABLE FUNCTIONS.
-
- * The _IO_FILE type is used to implement the FILE type in GNU libc,
- * as well as the streambuf class in GNU iostreams for C++.
- * These are all the same, just used differently.
- * An _IO_FILE (or FILE) object is allows followed by a pointer to
- * a jump table (of pointers to functions). The pointer is accessed
- * with the _IO_JUMPS macro. The jump table has a eccentric format,
- * so as to be compatible with the layout of a C++ virtual function table.
- * (as implemented by g++). When a pointer to a steambuf object is
- * coerced to an (_IO_FILE*), then _IO_JUMPS on the result just
- * happens to point to the virtual function table of the streambuf.
- * Thus the _IO_JUMPS function table used for C stdio/libio does
- * double duty as the virtual functiuon table for C++ streambuf.
- *
- * The entries in the _IO_JUMPS function table (and hence also the
- * virtual functions of a streambuf) are described below.
- * The first parameter of each function entry is the _IO_FILE/streambuf
- * object being acted on (i.e. the 'this' parameter).
- */
-
-#define _IO_JUMPS(THIS) ((struct _IO_FILE_plus*)(THIS))->vtable
-#ifdef _G_USING_THUNKS
-#define JUMP_FIELD(TYPE, NAME) TYPE NAME
-#define JUMP0(FUNC, THIS) _IO_JUMPS(THIS)->FUNC(THIS)
-#define JUMP1(FUNC, THIS, X1) _IO_JUMPS(THIS)->FUNC(THIS, X1)
-#define JUMP2(FUNC, THIS, X1, X2) _IO_JUMPS(THIS)->FUNC(THIS, X1, X2)
-#define JUMP3(FUNC, THIS, X1,X2,X3) _IO_JUMPS(THIS)->FUNC(THIS, X1,X2, X3)
-#define JUMP_INIT(NAME, VALUE) VALUE
-#define JUMP_INIT_DUMMY JUMP_INIT(dummy, 0), JUMP_INIT(dummy2, 0)
-#else
-/* These macros will change when we re-implement vtables to use "thunks"! */
-#define JUMP_FIELD(TYPE, NAME) struct { short delta1, delta2; TYPE pfn; } NAME
-#define JUMP0(FUNC, THIS) _IO_JUMPS(THIS)->FUNC.pfn(THIS)
-#define JUMP1(FUNC, THIS, X1) _IO_JUMPS(THIS)->FUNC.pfn(THIS, X1)
-#define JUMP2(FUNC, THIS, X1, X2) _IO_JUMPS(THIS)->FUNC.pfn(THIS, X1, X2)
-#define JUMP3(FUNC, THIS, X1,X2,X3) _IO_JUMPS(THIS)->FUNC.pfn(THIS, X1,X2, X3)
-#define JUMP_INIT(NAME, VALUE) {0, 0, VALUE}
-#define JUMP_INIT_DUMMY JUMP_INIT(dummy, 0)
-#endif
-
-/* The 'finish' function does any final cleaning up of an _IO_FILE object.
- It does not delete (free) it, but does everything else to finalize it/
- It matches the streambuf::~streambuf virtual destructor. */
-typedef void (*_IO_finish_t) __P((_IO_FILE*)); /* finalize */
-#define _IO_FINISH(FP) JUMP0(__finish, FP)
-
-/* The 'overflow' hook flushes the buffer.
- The second argument is a character, or EOF.
- It matches the streambuf::overflow virtual function. */
-typedef int (*_IO_overflow_t) __P((_IO_FILE*, int));
-#define _IO_OVERFLOW(FP, CH) JUMP1(__overflow, FP, CH)
-
-/* The 'underflow' hook tries to fills the get buffer.
- It returns the next character (as an unsigned char) or EOF. The next
- character remains in the get buffer, and the get postion is not changed.
- It matches the streambuf::underflow virtual function. */
-typedef int (*_IO_underflow_t) __P((_IO_FILE*));
-#define _IO_UNDERFLOW(FP) JUMP0(__underflow, FP)
-
-/* The 'uflow' hook returns the next character in the input stream
- (cast to unsigned char), and increments the read position;
- EOF is returned on failure.
- It matches the streambuf::uflow virtual function, which is not in the
- cfront implementation, but was added to C++ by the ANSI/ISO committee. */
-#define _IO_UFLOW(FP) JUMP0(__uflow, FP)
-
-/* The 'pbackfail' hook handles backing up.
- It matches the streambuf::pbackfail virtual function. */
-typedef int (*_IO_pbackfail_t) __P((_IO_FILE*, int));
-#define _IO_PBACKFAIL(FP, CH) JUMP1(__pbackfail, FP, CH)
-
-/* The 'xsputn' hook writes upto N characters from buffer DATA.
- Returns the number of character actually written.
- It matches the streambuf::xsputn virtual function. */
-typedef _IO_size_t (*_IO_xsputn_t)
- __P((_IO_FILE *FP, const void *DATA, _IO_size_t N));
-#define _IO_XSPUTN(FP, DATA, N) JUMP2(__xsputn, FP, DATA, N)
-
-/* The 'xsgetn' hook reads upto N characters into buffer DATA.
- Returns the number of character actually read.
- It matches the streambuf::xsgetn virtual function. */
-typedef _IO_size_t (*_IO_xsgetn_t) __P((_IO_FILE*FP, void*DATA, _IO_size_t N));
-#define _IO_XSGETN(FP, DATA, N) JUMP2(__xsgetn, FP, DATA, N)
-
-/* The 'seekoff' hook moves the stream position to a new position
- relative to the start of the file (if DIR==0), the current position
- (MODE==1), or the end of the file (MODE==2).
- It matches the streambuf::seekoff virtual function.
- It is also used for the ANSI fseek function. */
-typedef _IO_fpos_t (*_IO_seekoff_t)
- __P((_IO_FILE* FP, _IO_off_t OFF, int DIR, int MODE));
-#define _IO_SEEKOFF(FP, OFF, DIR, MODE) JUMP3(__seekoff, FP, OFF, DIR, MODE)
-
-/* The 'seekpos' hook also moves the stream position,
- but to an absolute position given by a fpos_t (seekpos).
- It matches the streambuf::seekpos virtual function.
- It is also used for the ANSI fgetpos and fsetpos functions. */
-/* The _IO_seek_cur and _IO_seek_end options are not allowed. */
-typedef _IO_fpos_t (*_IO_seekpos_t) __P((_IO_FILE*, _IO_fpos_t, int));
-#define _IO_SEEKPOS(FP, POS, FLAGS) JUMP2(__seekpos, FP, POS, FLAGS)
-
-/* The 'setbuf' hook gives a buffer to the file.
- It matches the streambuf::setbuf virtual function. */
-typedef _IO_FILE* (*_IO_setbuf_t) __P((_IO_FILE*, char *, _IO_ssize_t));
-#define _IO_SETBUF(FP, BUFFER, LENGTH) JUMP2(__setbuf, FP, BUFFER, LENGTH)
-
-/* The 'sync' hook attempts to synchronize the internal data structures
- of the file with the external state.
- It matches the streambuf::sync virtual function. */
-typedef int (*_IO_sync_t) __P((_IO_FILE*));
-#define _IO_SYNC(FP) JUMP0(__sync, FP)
-
-/* The 'doallocate' hook is used to tell the file to allocate a buffer.
- It matches the streambuf::doallocate virtual function, which is not
- in the ANSI/ISO C++ standard, but is part traditional implementations. */
-typedef int (*_IO_doallocate_t) __P((_IO_FILE*));
-#define _IO_DOALLOCATE(FP) JUMP0(__doallocate, FP)
-
-/* The following four hooks (sysread, syswrite, sysclose, sysseek, and
- sysstat) are low-level hooks specific to this implementation.
- There is no correspondance in the ANSI/ISO C++ standard library.
- The hooks basically correspond to the Unix system functions
- (read, write, close, lseek, and stat) except that a _IO_FILE*
- parameter is used instead of a integer file descriptor; the default
- implementation used for normal files just calls those functions.
- The advantage of overriding these functions instead of the higher-level
- ones (underflow, overflow etc) is that you can leave all the buffering
- higher-level functions. */
-
-/* The 'sysread' hook is used to read data from the external file into
- an existing buffer. It generalizes the Unix read(2) function.
- It matches the streambuf::sys_read virtual function, which is
- specific to this implementaion. */
-typedef _IO_ssize_t (*_IO_read_t) __P((_IO_FILE*, void*, _IO_ssize_t));
-#define _IO_SYSREAD(FP, DATA, LEN) JUMP2(__read, FP, DATA, LEN)
-
-/* The 'syswrite' hook is used to write data from an existing buffer
- to an external file. It generalizes the Unix write(2) function.
- It matches the streambuf::sys_write virtual function, which is
- specific to this implementaion. */
-typedef _IO_ssize_t (*_IO_write_t) __P((_IO_FILE*,const void*,_IO_ssize_t));
-#define _IO_SYSWRITE(FP, DATA, LEN) JUMP2(__write, FP, DATA, LEN)
-
-/* The 'sysseek' hook is used to re-position an external file.
- It generalizes the Unix lseek(2) function.
- It matches the streambuf::sys_seek virtual function, which is
- specific to this implementaion. */
-typedef _IO_fpos_t (*_IO_seek_t) __P((_IO_FILE*, _IO_off_t, int));
-#define _IO_SYSSEEK(FP, OFFSET, MODE) JUMP2(__seek, FP, OFFSET, MODE)
-
-/* The 'sysclose' hook is used to finalize (close, finish up) an
- external file. It generalizes the Unix close(2) function.
- It matches the streambuf::sys_close virtual function, which is
- specific to this implementation. */
-typedef int (*_IO_close_t) __P((_IO_FILE*)); /* finalize */
-#define _IO_SYSCLOSE(FP) JUMP0(__close, FP)
-
-/* The 'sysstat' hook is used to get information about an external file
- into a struct stat buffer. It generalizes the Unix fstat(2) call.
- It matches the streambuf::sys_stat virtual function, which is
- specific to this implementaion. */
-typedef int (*_IO_stat_t) __P((_IO_FILE*, void*));
-#define _IO_SYSSTAT(FP, BUF) JUMP1(__stat, FP, BUF)
-
-
-#define _IO_CHAR_TYPE char /* unsigned char ? */
-#define _IO_INT_TYPE int
-
-struct _IO_jump_t {
- JUMP_FIELD(_G_size_t, __dummy);
-#ifdef _G_USING_THUNKS
- JUMP_FIELD(_G_size_t, __dummy2);
-#endif
- JUMP_FIELD(_IO_finish_t, __finish);
- JUMP_FIELD(_IO_overflow_t, __overflow);
- JUMP_FIELD(_IO_underflow_t, __underflow);
- JUMP_FIELD(_IO_underflow_t, __uflow);
- JUMP_FIELD(_IO_pbackfail_t, __pbackfail);
- /* showmany */
- JUMP_FIELD(_IO_xsputn_t, __xsputn);
- JUMP_FIELD(_IO_xsgetn_t, __xsgetn);
- JUMP_FIELD(_IO_seekoff_t, __seekoff);
- JUMP_FIELD(_IO_seekpos_t, __seekpos);
- JUMP_FIELD(_IO_setbuf_t, __setbuf);
- JUMP_FIELD(_IO_sync_t, __sync);
- JUMP_FIELD(_IO_doallocate_t, __doallocate);
- JUMP_FIELD(_IO_read_t, __read);
- JUMP_FIELD(_IO_write_t, __write);
- JUMP_FIELD(_IO_seek_t, __seek);
- JUMP_FIELD(_IO_close_t, __close);
- JUMP_FIELD(_IO_stat_t, __stat);
-#if 0
- get_column;
- set_column;
-#endif
-};
-
-/* We always allocate an extra word following an _IO_FILE.
- This contains a pointer to the function jump table used.
- This is for compatibility with C++ streambuf; the word can
- be used to smash to a pointer to a virtual function table. */
-
-struct _IO_FILE_plus {
- _IO_FILE file;
- const struct _IO_jump_t *vtable;
-};
-
-/* Generic functions */
-
-extern int _IO_switch_to_get_mode __P((_IO_FILE*));
-extern void _IO_init __P((_IO_FILE*, int));
-extern int _IO_sputbackc __P((_IO_FILE*, int));
-extern int _IO_sungetc __P((_IO_FILE*));
-extern void _IO_un_link __P((_IO_FILE*));
-extern void _IO_link_in __P((_IO_FILE *));
-extern void _IO_doallocbuf __P((_IO_FILE*));
-extern void _IO_unsave_markers __P((_IO_FILE*));
-extern void _IO_setb __P((_IO_FILE*, char*, char*, int));
-extern unsigned _IO_adjust_column __P((unsigned, const char *, int));
-#define _IO_sputn(__fp, __s, __n) _IO_XSPUTN(__fp, __s, __n)
-
-/* Marker-related function. */
-
-extern void _IO_init_marker __P((struct _IO_marker *, _IO_FILE *));
-extern void _IO_remove_marker __P((struct _IO_marker*));
-extern int _IO_marker_difference __P((struct _IO_marker *, struct _IO_marker *));
-extern int _IO_marker_delta __P((struct _IO_marker *));
-extern int _IO_seekmark __P((_IO_FILE *, struct _IO_marker *, int));
-
-/* Default jumptable functions. */
-
-extern int _IO_default_underflow __P((_IO_FILE*));
-extern int _IO_default_uflow __P((_IO_FILE*));
-extern int _IO_default_doallocate __P((_IO_FILE*));
-extern void _IO_default_finish __P((_IO_FILE *));
-extern int _IO_default_pbackfail __P((_IO_FILE*, int));
-extern _IO_FILE* _IO_default_setbuf __P((_IO_FILE *, char*, _IO_ssize_t));
-extern _IO_size_t _IO_default_xsputn __P((_IO_FILE *, const void*, _IO_size_t));
-extern _IO_size_t _IO_default_xsgetn __P((_IO_FILE *, void*, _IO_size_t));
-extern _IO_fpos_t _IO_default_seekoff __P((_IO_FILE*, _IO_off_t, int, int));
-extern _IO_fpos_t _IO_default_seekpos __P((_IO_FILE*, _IO_fpos_t, int));
-extern _IO_ssize_t _IO_default_write __P((_IO_FILE*,const void*,_IO_ssize_t));
-extern _IO_ssize_t _IO_default_read __P((_IO_FILE*, void*, _IO_ssize_t));
-extern int _IO_default_stat __P((_IO_FILE*, void*));
-extern _IO_fpos_t _IO_default_seek __P((_IO_FILE*, _IO_off_t, int));
-extern int _IO_default_sync __P((_IO_FILE*));
-#define _IO_default_close ((_IO_close_t)_IO_default_sync)
-
-extern struct _IO_jump_t _IO_file_jumps;
-extern struct _IO_jump_t _IO_streambuf_jumps;
-extern struct _IO_jump_t _IO_proc_jumps;
-extern struct _IO_jump_t _IO_str_jumps;
-extern int _IO_do_write __P((_IO_FILE*, const char*, _IO_size_t));
-extern int _IO_flush_all __P((void));
-extern void _IO_cleanup __P((void));
-extern void _IO_flush_all_linebuffered __P((void));
-
-#define _IO_do_flush(_f) \
- _IO_do_write(_f, (_f)->_IO_write_base, \
- (_f)->_IO_write_ptr-(_f)->_IO_write_base)
-#define _IO_in_put_mode(_fp) ((_fp)->_flags & _IO_CURRENTLY_PUTTING)
-#define _IO_mask_flags(fp, f, mask) \
- ((fp)->_flags = ((fp)->_flags & ~(mask)) | ((f) & (mask)))
-#define _IO_setg(fp, eb, g, eg) ((fp)->_IO_read_base = (eb),\
- (fp)->_IO_read_ptr = (g), (fp)->_IO_read_end = (eg))
-#define _IO_setp(__fp, __p, __ep) \
- ((__fp)->_IO_write_base = (__fp)->_IO_write_ptr = __p, (__fp)->_IO_write_end = (__ep))
-#define _IO_have_backup(fp) ((fp)->_IO_save_base != NULL)
-#define _IO_in_backup(fp) ((fp)->_flags & _IO_IN_BACKUP)
-#define _IO_have_markers(fp) ((fp)->_markers != NULL)
-#define _IO_blen(fp) ((fp)->_IO_buf_end - (fp)->_IO_buf_base)
-
-/* Jumptable functions for files. */
-
-extern int _IO_file_doallocate __P((_IO_FILE*));
-extern _IO_FILE* _IO_file_setbuf __P((_IO_FILE *, char*, _IO_ssize_t));
-extern _IO_fpos_t _IO_file_seekoff __P((_IO_FILE*, _IO_off_t, int, int));
-extern _IO_size_t _IO_file_xsputn __P((_IO_FILE*,const void*,_IO_size_t));
-extern int _IO_file_stat __P((_IO_FILE*, void*));
-extern int _IO_file_close __P((_IO_FILE*));
-extern int _IO_file_underflow __P((_IO_FILE *));
-extern int _IO_file_overflow __P((_IO_FILE *, int));
-#define _IO_file_is_open(__fp) ((__fp)->_fileno >= 0)
-extern void _IO_file_init __P((_IO_FILE*));
-extern _IO_FILE* _IO_file_attach __P((_IO_FILE*, int));
-extern _IO_FILE* _IO_file_fopen __P((_IO_FILE*, const char*, const char*));
-extern _IO_ssize_t _IO_file_write __P((_IO_FILE*,const void*,_IO_ssize_t));
-extern _IO_ssize_t _IO_file_read __P((_IO_FILE*, void*, _IO_ssize_t));
-extern int _IO_file_sync __P((_IO_FILE*));
-extern int _IO_file_close_it __P((_IO_FILE*));
-extern _IO_fpos_t _IO_file_seek __P((_IO_FILE *, _IO_off_t, int));
-extern void _IO_file_finish __P((_IO_FILE*));
-
-/* Other file functions. */
-extern _IO_FILE* _IO_file_attach __P((_IO_FILE *, int));
-
-/* Jumptable functions for proc_files. */
-extern _IO_FILE* _IO_proc_open __P((_IO_FILE*, const char*, const char *));
-extern int _IO_proc_close __P((_IO_FILE*));
-
-/* Jumptable functions for strfiles. */
-extern int _IO_str_underflow __P((_IO_FILE*));
-extern int _IO_str_overflow __P((_IO_FILE *, int));
-extern int _IO_str_pbackfail __P((_IO_FILE*, int));
-extern _IO_fpos_t _IO_str_seekoff __P((_IO_FILE*,_IO_off_t,int,int));
-
-/* Other strfile functions */
-extern void _IO_str_init_static __P((_IO_FILE *, char*, int, char*));
-extern void _IO_str_init_readonly __P((_IO_FILE *, const char*, int));
-extern _IO_ssize_t _IO_str_count __P ((_IO_FILE*));
-
-extern _IO_size_t _IO_getline __P((_IO_FILE*,char*,_IO_size_t,int,int));
-extern _IO_ssize_t _IO_getdelim __P((char**, _IO_size_t*, int, _IO_FILE*));
-extern double _IO_strtod __P((const char *, char **));
-extern char * _IO_dtoa __P((double __d, int __mode, int __ndigits,
- int *__decpt, int *__sign, char **__rve));
-extern int _IO_outfloat __P((double __value, _IO_FILE *__sb, int __type,
- int __width, int __precision, int __flags,
- int __sign_mode, int __fill));
-
-extern _IO_FILE *_IO_list_all;
-extern void (*_IO_cleanup_registration_needed) __P ((void));
-
-#ifndef EOF
-#define EOF (-1)
-#endif
-#ifndef NULL
-#if !defined(__cplusplus) || defined(__GNUC__)
-#define NULL ((void*)0)
-#else
-#define NULL (0)
-#endif
-#endif
-
-#define FREE_BUF(_B) free(_B)
-#define ALLOC_BUF(_S) (char*)malloc(_S)
-
-#ifndef OS_FSTAT
-#define OS_FSTAT fstat
-#endif
-struct stat;
-extern _IO_ssize_t _IO_read __P((int, void*, _IO_size_t));
-extern _IO_ssize_t _IO_write __P((int, const void*, _IO_size_t));
-extern _IO_off_t _IO_lseek __P((int, _IO_off_t, int));
-extern int _IO_close __P((int));
-extern int _IO_fstat __P((int, struct stat *));
-
-/* Operations on _IO_fpos_t.
- Normally, these are trivial, but we provide hooks for configurations
- where an _IO_fpos_t is a struct.
- Note that _IO_off_t must be an integral type. */
-
-/* _IO_pos_BAD is an _IO_fpos_t value indicating error, unknown, or EOF. */
-#ifndef _IO_pos_BAD
-#define _IO_pos_BAD ((_IO_fpos_t)(-1))
-#endif
-/* _IO_pos_as_off converts an _IO_fpos_t value to an _IO_off_t value. */
-#ifndef _IO_pos_as_off
-#define _IO_pos_as_off(__pos) ((_IO_off_t)(__pos))
-#endif
-/* _IO_pos_adjust adjust an _IO_fpos_t by some number of bytes. */
-#ifndef _IO_pos_adjust
-#define _IO_pos_adjust(__pos, __delta) ((__pos) += (__delta))
-#endif
-/* _IO_pos_0 is an _IO_fpos_t value indicating beginning of file. */
-#ifndef _IO_pos_0
-#define _IO_pos_0 ((_IO_fpos_t)0)
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-/* check following! */
-#define FILEBUF_LITERAL(CHAIN, FLAGS, FD) \
- { _IO_MAGIC+_IO_LINKED+_IO_IS_FILEBUF+FLAGS, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, CHAIN, FD}
-
-/* VTABLE_LABEL defines NAME as of the CLASS class.
- CNLENGTH is strlen(#CLASS). */
-#ifdef __GNUC__
-#if _G_VTABLE_LABEL_HAS_LENGTH
-#define VTABLE_LABEL(NAME, CLASS, CNLENGTH) \
- extern char NAME[] asm (_G_VTABLE_LABEL_PREFIX #CNLENGTH #CLASS);
-#else
-#define VTABLE_LABEL(NAME, CLASS, CNLENGTH) \
- extern char NAME[] asm (_G_VTABLE_LABEL_PREFIX #CLASS);
-#endif
-#endif /* __GNUC__ */
-
-#if !defined(builtinbuf_vtable) && defined(__cplusplus)
-#ifdef __GNUC__
-VTABLE_LABEL(builtinbuf_vtable, builtinbuf, 10)
-#else
-#if _G_VTABLE_LABEL_HAS_LENGTH
-#define builtinbuf_vtable _G_VTABLE_LABEL_PREFIX_ID##10builtinbuf
-#else
-#define builtinbuf_vtable _G_VTABLE_LABEL_PREFIX_ID##builtinbuf
-#endif
-#endif
-#endif /* !defined(builtinbuf_vtable) && defined(__cplusplus) */
-
-#if defined(__STDC__) || defined(__cplusplus)
-#define _IO_va_start(args, last) va_start(args, last)
-#else
-#define _IO_va_start(args, last) va_start(args)
-#endif
-
-extern struct _IO_fake_stdiobuf _IO_stdin_buf, _IO_stdout_buf, _IO_stderr_buf;
-
-#if 1
-#define COERCE_FILE(FILE) /* Nothing */
-#else
-/* This is part of the kludge for binary compatibility with old stdio. */
-#define COERCE_FILE(FILE) \
- (((FILE)->_IO_file_flags & _IO_MAGIC_MASK) == _OLD_MAGIC_MASK \
- && (FILE) = *(FILE**)&((int*)fp)[1])
-#endif
-
-#ifdef EINVAL
-#define MAYBE_SET_EINVAL errno = EINVAL
-#else
-#define MAYBE_SET_EINVAL /* nothing */
-#endif
-
-#ifdef DEBUG
-#define CHECK_FILE(FILE,RET) \
- if ((FILE) == NULL) { MAYBE_SET_EINVAL; return RET; } \
- else { COERCE_FILE(FILE); \
- if (((FILE)->_IO_file_flags & _IO_MAGIC_MASK) != _IO_MAGIC) \
- { errno = EINVAL; return RET; }}
-#else
-#define CHECK_FILE(FILE,RET) \
- COERCE_FILE(FILE)
-#endif
diff --git a/contrib/libg++/libio/osform.cc b/contrib/libg++/libio/osform.cc
deleted file mode 100644
index 8c0011703da0..000000000000
--- a/contrib/libg++/libio/osform.cc
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include "libioP.h"
-#include <iostream.h>
-#include <stdarg.h>
-
-ostream& ostream::form(const char *format ...)
-{
- if (opfx()) {
- va_list ap;
- va_start(ap, format);
- _IO_vfprintf(rdbuf(), format, ap);
- va_end(ap);
- }
- return *this;
-}
-
-ostream& ostream::vform(const char *format, _IO_va_list args)
-{
- if (opfx())
- _IO_vfprintf(rdbuf(), format, args);
- return *this;
-}
-
-ostream& ostream::operator<<(const void *p)
-{
- if (opfx()) {
- form("%p", p);
- osfx();
- }
- return *this;
-}
diff --git a/contrib/libg++/libio/ostream.h b/contrib/libg++/libio/ostream.h
deleted file mode 100644
index f54ec1de9a1c..000000000000
--- a/contrib/libg++/libio/ostream.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include <stream.h>
diff --git a/contrib/libg++/libio/outfloat.c b/contrib/libg++/libio/outfloat.c
deleted file mode 100644
index a74b1a2c3e13..000000000000
--- a/contrib/libg++/libio/outfloat.c
+++ /dev/null
@@ -1,204 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include "libioP.h"
-
-/* Format floating-point number and print them.
- Return number of chars printed, or EOF on error.
-
- sign_mode == '+' : print "-" or "+"
- sign_mode == ' ' : print "-" or " "
- sign_mode == '\0' : print "-' or ""
-*/
-
-int
-DEFUN(_IO_outfloat, (value, sb, type, width, precision, flags,
- sign_mode, fill),
- double value AND _IO_FILE *sb AND int type AND int width
- AND int precision AND int flags AND int sign_mode AND int fill)
-{
- int count = 0;
-#define PUT(x) do {if (_IO_putc(x, sb) < 0) goto error; count++;} while (0)
-#define PUTN(p, n) \
- do {int _n=n; count+=_n; if (_IO_sputn(sb, p,_n) != _n) goto error;} while(0)
-#define PADN(fill, n) \
- do {int _n = n; count+=_n; if (_IO_padn(sb, fill, _n) != _n) goto error;} while (0)
- int pad_kind = flags & (_IO_LEFT|_IO_RIGHT|_IO_INTERNAL);
- int skip_zeroes = 0;
- int show_dot = (flags & _IO_SHOWPOINT) != 0;
- int decpt;
- int sign;
- int mode;
- int exponent_size;
- int print_sign;
- int trailing_zeroes, useful_digits;
- int padding, unpadded_width;
- char *p;
- char *exponent_start;
- register int i;
-#define EBUF_SIZE 12
-#define EBUF_END &ebuf[EBUF_SIZE]
- char ebuf[EBUF_SIZE];
- char *end;
- int exp = 0;
- switch (type)
- {
- case 'f':
- mode = 3;
- break;
- case 'e':
- case 'E':
- exp = type;
- mode = 2;
- if (precision != 999)
- precision++; /* Add one to include digit before decimal point. */
- break;
- case 'g':
- case 'G':
- exp = type == 'g' ? 'e' : 'E';
- if (precision == 0) precision = 1;
- if (!(flags & _IO_SHOWPOINT))
- skip_zeroes = 1;
- type = 'g';
- mode = 2;
- break;
- }
- /* Do the actual convension */
- if (precision == 999 && mode != 3)
- mode = 0;
- p = _IO_dtoa(value, mode, precision, &decpt, &sign, &end);
- useful_digits = end-p;
- exponent_start = EBUF_END;
- if (mode == 0)
- precision = useful_digits;
- /* Check if we need to emit an exponent. */
- if (mode != 3 && decpt != 9999)
- {
- i = decpt - 1;
- if ((type != 'g' && type != 'F') || i < -4 || i >= precision)
- {
- /* Print the exponent into ebuf.
- We write ebuf in reverse order (right-to-left). */
- char sign;
- if (i >= 0)
- sign = '+';
- else
- sign = '-', i = -i;
- /* Note: ANSI requires at least 2 exponent digits. */
- do {
- *--exponent_start = (i % 10) + '0';
- i /= 10;
- } while (i >= 10);
- *--exponent_start = i + '0';
- *--exponent_start = sign;
- *--exponent_start = exp;
- }
- }
- exponent_size = EBUF_END - exponent_start;
- if (mode == 1)
- precision = 1;
- /* If we print an exponent, always show just one digit before point. */
- if (exponent_size)
- decpt = 1;
- if (decpt == 9999)
- { /* Infinity or NaN */
- decpt = useful_digits;
- precision = 0;
- show_dot = 0;
- }
-
- /* dtoa truncates trailing zeroes. Set the variable trailing_zeroes to
- the number of 0's we have to add (after the decimal point). */
- if (skip_zeroes)
- trailing_zeroes = 0;
- else if (type == 'f')
- trailing_zeroes = useful_digits <= decpt ? precision
- : precision-(useful_digits-decpt);
- else if (exponent_size) /* 'e' 'E' or 'g' format using exponential notation*/
- trailing_zeroes = precision - useful_digits;
- else /* 'g' format not using exponential notation. */
- trailing_zeroes = useful_digits <= decpt ? precision - decpt
- : precision-useful_digits;
- if (trailing_zeroes < 0) trailing_zeroes = 0;
-
- if (trailing_zeroes != 0 || useful_digits > decpt)
- show_dot = 1;
- if (sign_mode == 0)
- print_sign = sign ? '-' : 0;
- else if (sign_mode == '+')
- print_sign = sign ? '-' : '+';
- else /* if (sign_mode == ' ') */
- print_sign = sign ? '-' : ' ';
-
- /* Calculate the width (before padding). */
- unpadded_width =
- (print_sign != 0) + trailing_zeroes + exponent_size + show_dot
- + useful_digits
- + (decpt > useful_digits ? decpt - useful_digits
- : decpt > 0 ? 0 : 1 - decpt);
-
- padding = width > unpadded_width ? width - unpadded_width : 0;
- if (padding > 0 && pad_kind != _IO_LEFT && pad_kind != _IO_INTERNAL)
- PADN(fill, padding); /* Default (right) adjust */
- if (print_sign)
- PUT(print_sign);
- if (pad_kind == _IO_INTERNAL && padding > 0)
- PADN(fill, padding);
- if (decpt > 0)
- {
- if (useful_digits >= decpt)
- PUTN(p, decpt);
- else
- {
- PUTN(p, useful_digits);
- PADN('0', decpt-useful_digits);
- }
- if (show_dot)
- {
- PUT('.');
- /* Print digits after the decimal point. */
- if (useful_digits > decpt)
- PUTN(p + decpt, useful_digits-decpt);
- }
- }
- else
- {
- PUT('0');
- if (show_dot)
- {
- PUT('.');
- PADN('0', -decpt);
- /* Print digits after the decimal point. */
- PUTN(p, useful_digits);
- }
- }
- PADN('0', trailing_zeroes);
- if (exponent_size)
- PUTN(exponent_start, exponent_size);
- if (pad_kind == _IO_LEFT && padding > 0) /* Left adjustment*/
- PADN(fill, padding);
- return count;
- error:
- return EOF;
-}
diff --git a/contrib/libg++/libio/parsestream.cc b/contrib/libg++/libio/parsestream.cc
deleted file mode 100644
index 320afd06d9be..000000000000
--- a/contrib/libg++/libio/parsestream.cc
+++ /dev/null
@@ -1,317 +0,0 @@
-/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License.
-
-Written by Per Bothner (bothner@cygnus.com). */
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include "libioP.h"
-#include "parsestream.h"
-#include <stdlib.h>
-
-streambuf* parsebuf::setbuf(char*, int)
-{
- return NULL;
-}
-
-int parsebuf::tell_in_line()
-{
- return 0;
-}
-
-int parsebuf::pbackfail(int c)
-{
- if (c == EOF)
- return 0;
- if (seekoff(-1, ios::cur) == EOF)
- return EOF;
- return (unsigned char)c;
-}
-
-char* parsebuf::current_line() { return NULL; }
-
-streampos parsebuf::seekoff(streamoff offset, _seek_dir dir, int)
-{
- // Make offset relative to line start.
- switch (dir) {
- case ios::beg:
- offset -= pos_at_line_start;
- break;
- case ios::cur:
- offset += tell_in_line();
- break;
- default:
- return EOF;
- }
- if (offset < -1)
- return EOF;
- if (offset > _line_length + 1)
- return EOF;
- return seek_in_line(offset) + pos_at_line_start;
-}
-
-// string_parsebuf invariants:
-// The reserve ares (base() .. ebuf()) is always the entire string.
-// The get area (eback() .. egptr()) is the extended current line
-// (i.e. with the '\n' at either end, if these exist).
-
-string_parsebuf::string_parsebuf(char *buf, int len,
- int delete_at_close /* = 0*/)
-: parsebuf()
-{
- setb(buf, buf+len, delete_at_close);
- register char *ptr = buf;
- while (ptr < ebuf() && *ptr != '\n') ptr++;
- _line_length = ptr - buf;
- setg(buf, buf, ptr);
-}
-
-int string_parsebuf::underflow()
-{
- register char* ptr = egptr(); // Point to end of current_line
- do {
- int i = right() - ptr;
- if (i <= 0)
- return EOF;
- ptr++; i--; // Skip '\n'.
- char *line_start = ptr;
- while (ptr < right() && *ptr == '\n') ptr++;
- setg(line_start-1, line_start, ptr + (ptr < right()));
- pos_at_line_start = line_start - left();
- _line_length = ptr - line_start;
- __line_number++;
- } while (gptr() == ptr);
- return *gptr();
-}
-
-char* string_parsebuf::current_line()
-{
- char *ptr = eback();
- if (__line_number > 0)
- ptr++; // Skip '\n' at end of previous line.
- return ptr;
-}
-
-int string_parsebuf::tell_in_line()
-{
- int offset = gptr() - eback();
- if (__line_number > 0)
- offset--;
- return offset;
-}
-
-int string_parsebuf::seek_in_line(int i)
-{
- int delta = i - tell_in_line();
- gbump(delta); // FIXME: Needs error (bounds) checking!
- return i;
-}
-
-static const char NewLine[1] = { '\n' };
-
-general_parsebuf::general_parsebuf(streambuf *buf, int delete_arg_buf)
- : parsebuf()
-{
- delete_buf = delete_arg_buf;
- sbuf = buf;
- int buf_size = 128;
- char* buffer = ALLOC_BUF(buf_size);
- setb(buffer, buffer+buf_size, 1);
-// setg(buffer, buffer, buffer);
-}
-
-general_parsebuf::~general_parsebuf()
-{
- if (delete_buf)
- delete sbuf;
-}
-
-int general_parsebuf::underflow()
-{
- register char *ptr = base();
- int has_newline = eback() < gptr() && gptr()[-1] == '\n';
- if (has_newline)
- *ptr++ = '\n';
- register streambuf *sb = sbuf;
- register int ch;
- for (;;) {
- ch = sb->sbumpc();
- if (ch == EOF)
- break;
- if (ptr == ebuf()) {
- int old_size = ebuf() - base();
- char *new_buffer = new char[old_size * 2];
- memcpy(new_buffer, base(), old_size);
- setb(new_buffer, new_buffer + 2 * old_size, 1);
- ptr = new_buffer + old_size;
- }
- *ptr++ = ch;
- if (ch == '\n')
- break;
- }
- char *cur_pos = base() + has_newline;
- pos_at_line_start += _line_length + 1;
- _line_length = ptr - cur_pos;
- if (ch != EOF || _line_length > 0)
- __line_number++;
- setg(base(), cur_pos, ptr);
- return ptr == cur_pos ? EOF : cur_pos[0];
-}
-
-char* general_parsebuf::current_line()
-{
- char* ret = base();
- if (__line_number > 1)
- ret++; // Move past '\n' from end of previous line.
- return ret;
-}
-
-int general_parsebuf::tell_in_line()
-{
- int off = gptr() - base();
- if (__line_number > 1)
- off--; // Subtract 1 for '\n' from end of previous line.
- return off;
-}
-
-int general_parsebuf::seek_in_line(int i)
-{
- if (__line_number == 0)
- (void)general_parsebuf::underflow();
- if (__line_number > 1)
- i++; // Add 1 for '\n' from end of previous line.
- if (i < 0) i = 0;
- int len = egptr() - eback();
- if (i > len) i = len;
- setg(base(), base() + i, egptr());
- return i;
-}
-
-func_parsebuf::func_parsebuf(CharReader func, void *argm) : parsebuf()
-{
- read_func = func;
- arg = argm;
- buf_start = NULL;
- buf_end = NULL;
- setb((char*)NewLine, (char*)NewLine+1, 0);
- setg((char*)NewLine, (char*)NewLine+1, (char*)NewLine+1);
- backed_up_to_newline = 0;
-}
-
-int func_parsebuf::tell_in_line()
-{
- if (buf_start == NULL)
- return 0;
- if (egptr() != (char*)NewLine+1)
- // Get buffer was line buffer.
- return gptr() - buf_start;
- if (backed_up_to_newline)
- return -1; // Get buffer is '\n' preceding current line.
- // Get buffer is '\n' following current line.
- return (buf_end - buf_start) + (gptr() - (char*)NewLine);
-}
-
-char* func_parsebuf::current_line()
-{
- return buf_start;
-}
-
-int func_parsebuf::seek_in_line(int i)
-{
- if (i < 0) {
- // Back up to preceding '\n'.
- if (i < -1) i = -1;
- backed_up_to_newline = 1;
- setg((char*)NewLine, (char*)NewLine+(i+1), (char*)NewLine+1);
- return i;
- }
- backed_up_to_newline = 0;
- int line_length = buf_end-buf_start;
- if (i <= line_length) {
- setg(buf_start, buf_start+i, buf_end);
- return i;
- }
- i -= line_length;
- if (i > 0) i = 1;
- setg((char*)NewLine, (char*)NewLine+i, (char*)NewLine+1);
- return line_length + i;
-}
-
-int func_parsebuf::underflow()
-{
- retry:
- if (gptr() < egptr())
- return *gptr();
- if (gptr() != (char*)NewLine+1) {
- // Get buffer was line buffer. Move to following '\n'.
- setg((char*)NewLine, (char*)NewLine, (char*)NewLine+1);
- return *gptr();
- }
- if (backed_up_to_newline)
- // Get buffer was '\n' preceding current line. Move to current line.
- backed_up_to_newline = 0;
- else {
- // Get buffer was '\n' following current line. Read new line.
- if (buf_start) free(buf_start);
- char *str = (*read_func)(arg);
- buf_start = str;
- if (str == NULL)
- return EOF;
- // Initially, _line_length == -1, so pos_at_line_start becomes 0.
- pos_at_line_start += _line_length + 1;
- _line_length = strlen(str);
- buf_end = str + _line_length;
- __line_number++;
- }
- setg(buf_start, buf_start, buf_end);
- goto retry;
-}
-
-#if 0
-size_t parsebuf::line_length()
-{
- if (current_line_length == (size_t)(-1)) // Initial value;
- (void)sgetc();
- return current_line_length;
-}
-#endif
-
-int parsebuf::seek_in_line(int i)
-{
-#if 1
- abort();
- return i; // Suppress warnings.
-#else
- if (i > 0) {
- size_t len = line_length();
- if ((unsigned)i > len) i = len;
- }
- else if (i < -1) i = -1;
- int new_pos = seekoff(pos_at_line_start + i, ios::beg);
- if (new_pos == EOF)
- return tell_in_line();
- else return new_pos - pos_at_line_start;
-#endif
-}
diff --git a/contrib/libg++/libio/parsestream.h b/contrib/libg++/libio/parsestream.h
deleted file mode 100644
index 326ab87a8090..000000000000
--- a/contrib/libg++/libio/parsestream.h
+++ /dev/null
@@ -1,156 +0,0 @@
-/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License.
-
-Written by Per Bothner (bothner@cygnus.com). */
-
-#ifndef PARSESTREAM_H
-#define PARSESTREAM_H
-#ifdef __GNUG__
-#pragma interface
-#endif
-#include "streambuf.h"
-
-extern "C++" {
-// A parsebuf is a streambuf optimized for scanning text files.
-// It keeps track of line and column numbers.
-// It is guaranteed to remember the entire current line,
-// as well the '\n'-s on either side of it (if they exist).
-// You can arbitrarily seek (or unget) within this extended line.
-// Other backward seeks are not supported.
-// Normal read semantics are supported (and hence istream operators like >>).
-
-class parsebuf : public streambuf {
- protected:
- _IO_fpos_t pos_at_line_start;
- long _line_length;
- unsigned long __line_number;
- char *buf_start;
- char *buf_end;
-
- public:
- parsebuf *chain;
-
- // Return column number (raw - don't handle tabs etc).
- // Retult can be -1, meaning: at '\n' before current line.
- virtual int tell_in_line();
-
- // seek to (raw) column I in current line.
- // Result is new (raw) column position - differs from I if unable to seek.
- // Seek to -1 tries to seek to before previous LF.
- virtual int seek_in_line(int i);
-
- // Note: there is no "current line" initially, until something is read.
-
- // Current line number, starting with 0.
- // If tell_in_line()==-1, then line number of next line.
- int line_number() { return __line_number; }
-
- // Length of current line, not counting either '\n'.
- int line_length() { return _line_length; }
- // Current line - not a copy, so file ops may trash it.
- virtual char* current_line();
- virtual streampos seekoff(streamoff, _seek_dir, int mode=ios::in|ios::out);
- virtual streambuf* setbuf(char* p, int len);
- protected:
- parsebuf() { chain= NULL;
- __line_number = 0; pos_at_line_start = 0; _line_length = -1; }
- virtual int pbackfail(int c);
-};
-
-// A string_parsebuf is a parsebuf whose source is a fixed string.
-
-class string_parsebuf : public parsebuf {
- public:
- int do_delete;
- string_parsebuf(char *str, int len, int delete_at_close=0);
- virtual int underflow();
- virtual char* current_line();
- virtual int seek_in_line(int i);
- virtual int tell_in_line();
- char *left() const { return base(); }
- char *right() const { return ebuf(); }
-// streampos seekoff(streamoff, _seek_dir, int);
-};
-
-// A func_parsebuf calls a given function to get new input.
-// Each call returns an entire NUL-terminated line (without the '\n').
-// That line has been allocated with malloc(), not new.
-// The interface is tailored to the GNU readline library.
-// Example:
-// char* DoReadLine(void* arg)
-// {
-// char *line = readline((char*)arg); /* 'arg' is used as prompt. */
-// if line == NULL) { putc('\n', stderr); return NULL; }
-// if (line[0] != '\0') add_history(line);
-// return line;
-// }
-// char PromptBuffer[100] = "> ";
-// func_parsebuf my_stream(DoReadLine, PromptBuffer);
-
-typedef char *(*CharReader)(void *arg);
-class istream;
-
-class func_parsebuf : public parsebuf {
- public:
- void *arg;
- CharReader read_func;
- int backed_up_to_newline;
- func_parsebuf(CharReader func, void *argm = NULL);
- int underflow();
- virtual int tell_in_line();
- virtual int seek_in_line(int i);
- virtual char* current_line();
-};
-
-// A general_parsebuf is a parsebuf which gets its input from some
-// other streambuf. It explicitly buffers up an entire line.
-
-class general_parsebuf : public parsebuf {
- public:
- streambuf *sbuf;
- int delete_buf; // Delete sbuf when destroying this.
- general_parsebuf(streambuf *buf, int delete_arg_buf = 0);
- int underflow();
- virtual int tell_in_line();
- virtual int seek_in_line(int i);
- ~general_parsebuf();
- virtual char* current_line();
-};
-
-#if 0
-class parsestream : public istream {
- streammarker marks[2];
- short _first; // of the two marks; either 0 or 1
- int _lineno;
- int first() { return _first; }
- int second() { return 1-_first; }
- int line_length() { marks[second].delta(marks[first]); }
- int line_length() { marks[second].delta(marks[first]); }
- int seek_in_line(int i);
- int tell_in_line();
- int line_number();
-};
-#endif
-} // extern "C++"
-#endif /*!defined(PARSESTREAM_H)*/
diff --git a/contrib/libg++/libio/pfstream.cc b/contrib/libg++/libio/pfstream.cc
deleted file mode 100644
index 3fa93c958f8f..000000000000
--- a/contrib/libg++/libio/pfstream.cc
+++ /dev/null
@@ -1,92 +0,0 @@
-/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-/* Written by Per Bothner (bothner@cygnus.com). */
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include "libioP.h"
-#include <pfstream.h>
-#include <procbuf.h>
-
-ipfstream::ipfstream(const char *name, int mode, int prot)
-{
- const char* p;
-
- // Look for '| command' (as used by ftp).
- for (p = name; *p == ' ' || *p == '\t'; p++) ;
- if (*p == '|') {
- procbuf *pbuf = new procbuf();
- init(pbuf);
- if (!pbuf->open(p+1, mode))
- set(ios::badbit);
- return;
- }
-
- // Look for 'command |'
- while (*p) p++; // Point to last
- while (p[-1] == ' ' || p[-1] == '\t' || p[-1] == '\n') p--;
- if (p[-1] == '|') {
- // Must remove the final '|'.
- p--;
-#if !defined (__GNUC__) || defined (__STRICT_ANSI__)
- char *command = new char[p-name+1];
-#else
- char command[p-name+1];
-#endif
- memcpy(command, name, p-name);
- command[p-name] = '\0';
-
- procbuf *pbuf = new procbuf();
- if (pbuf->open(command, mode))
- set(ios::badbit);
-#if !defined (__GNUC__) || defined (__STRICT_ANSI__)
- delete command;
-#endif
- return;
- }
-
- init(new filebuf());
- if (!rdbuf()->open(name, mode, prot))
- set(ios::badbit);
-}
-
-opfstream::opfstream(const char *name, int mode, int prot)
-{
- const char *p;
- // Look for '| command'.
- for (p = name; *p == ' ' || *p == '\t'; p++) ;
- if (*p == '|') {
- procbuf *pbuf = new procbuf();
- init(pbuf);
- if (!pbuf->open(p+1, mode))
- set(ios::badbit);
- }
- else {
- init(new filebuf());
- if (!rdbuf()->open(name, mode, prot))
- set(ios::badbit);
- }
-}
diff --git a/contrib/libg++/libio/pfstream.h b/contrib/libg++/libio/pfstream.h
deleted file mode 100644
index 3c5458baaa93..000000000000
--- a/contrib/libg++/libio/pfstream.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-/* Written by Per Bothner (bothner@cygnus.com). */
-
-#ifndef _PFSTREAM_H
-#define _PFSTREAM_H
-#ifdef __GNUG__
-#pragma interface
-#endif
-#include <fstream.h>
-
-extern "C++" {
-// ipfstream foo("NAME") is like: ifstream foo("NAME"). However,
-// if NAME starts *or ends* with a '|', the remainder of NAME is
-// evaluated as a shell command (using a procbuf), and all input
-// read from foo is whatever that shell writes to its standard output.
-// E.g. ipfstream foo("|zcat foo.Z") or ipfstream foo("zcat foo.Z|")
-// (These two forms are equivalent.)
-
-class ipfstream : public ifstream {
- public:
- ipfstream(const char *name, int mode=ios::in, int prot=0664);
-};
-
-// opfstream foo("NAME") is like: ofstream foo("NAME").
-// However, if NAME starts with a '|', the remainder of NAME is
-// evaluated as a shell command (using a procbuf), and all output
-// written to foo is piped to the standard input of that shell.
-// E.g. opfstream foo("|more");
-
-class opfstream : public ofstream {
- public:
- opfstream(const char *name, int mode=ios::out, int prot=0664);
-};
-} // extern "C++"
-#endif /*!_PFSTREAM_H*/
-
diff --git a/contrib/libg++/libio/procbuf.cc b/contrib/libg++/libio/procbuf.cc
deleted file mode 100644
index 1c79ce4ce0f7..000000000000
--- a/contrib/libg++/libio/procbuf.cc
+++ /dev/null
@@ -1,55 +0,0 @@
-/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-/* Written by Per Bothner (bothner@cygnus.com). */
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-
-#define _POSIX_SOURCE
-#include "libioP.h"
-#include "procbuf.h"
-
-procbuf::procbuf(const char *command, int mode) : filebuf()
-{
- _IO_proc_open(this, command, (mode & ios::in) ? "r" : "w");
-}
-
-procbuf *procbuf::open(const char *command, int mode)
-{
- return (procbuf*)_IO_proc_open(this, command, (mode & ios::in) ? "r" : "w");
-}
-
-/* #define USE_SIGMASK */
-
-int procbuf::sys_close()
-{
- return _IO_proc_close(this);
-}
-
-procbuf::~procbuf()
-{
- close();
-}
diff --git a/contrib/libg++/libio/procbuf.h b/contrib/libg++/libio/procbuf.h
deleted file mode 100644
index b361a6a7c844..000000000000
--- a/contrib/libg++/libio/procbuf.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-/* Written by Per Bothner (bothner@cygnus.com). */
-
-#ifndef _PROCBUF_H
-#define _PROCBUF_H
-#ifdef __GNUG__
-#pragma interface
-#endif
-
-#include <streambuf.h>
-
-extern "C++" {
-class procbuf : public filebuf {
- /* Following fields must match those in struct _IO_proc_file */
- _IO_pid_t _pid;
- procbuf *_next;
- public:
- procbuf() : filebuf() { }
- procbuf(const char *command, int mode);
- procbuf* open(const char *command, int mode);
- procbuf *close() { return (procbuf*)filebuf::close(); }
- virtual int sys_close();
- ~procbuf();
-};
-} // extern "C++"
-
-#endif /* !_PROCBUF_H */
diff --git a/contrib/libg++/libio/sbform.cc b/contrib/libg++/libio/sbform.cc
deleted file mode 100644
index c17bd08db15e..000000000000
--- a/contrib/libg++/libio/sbform.cc
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include "libioP.h"
-#include "streambuf.h"
-#include <stdarg.h>
-
-int streambuf::vform(char const *fmt0, _IO_va_list ap)
-{
- return _IO_vfprintf(this, fmt0, ap);
-}
-int streambuf::form(char const *format ...)
-{
- va_list ap;
- va_start(ap, format);
- int count = _IO_vfprintf(this, format, ap);
- va_end(ap);
- return count;
-}
diff --git a/contrib/libg++/libio/sbgetline.cc b/contrib/libg++/libio/sbgetline.cc
deleted file mode 100644
index 700e2ec7afc3..000000000000
--- a/contrib/libg++/libio/sbgetline.cc
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include "libioP.h"
-#include "streambuf.h"
-
-long streambuf::sgetline(char* buf, _IO_size_t n, char delim, int extract_delim)
-{
- return _IO_getline(this, buf, n, delim, extract_delim);
-}
diff --git a/contrib/libg++/libio/sbscan.cc b/contrib/libg++/libio/sbscan.cc
deleted file mode 100644
index c0ec35c53db6..000000000000
--- a/contrib/libg++/libio/sbscan.cc
+++ /dev/null
@@ -1,45 +0,0 @@
-
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include "libioP.h"
-#include "streambuf.h"
-#include <stdarg.h>
-
-int streambuf::vscan(char const *fmt0, _IO_va_list ap, ios* stream /* = NULL*/)
-{
- int errcode = 0;
- int count = _IO_vfscanf(this, fmt0, ap, &errcode);
- if (stream)
- stream->setstate((ios::iostate)errcode);
- return count;
-}
-int streambuf::scan(char const *format ...)
-{
- va_list ap;
- va_start(ap, format);
- int count = _IO_vfscanf(this, format, ap, NULL);
- va_end(ap);
- return count;
-}
diff --git a/contrib/libg++/libio/stdfiles.c b/contrib/libg++/libio/stdfiles.c
deleted file mode 100644
index 1d0ef85be90b..000000000000
--- a/contrib/libg++/libio/stdfiles.c
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
-Copyright (C) 1993, 1994 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-
-/* This file provides definitions of _IO_stdin, _IO_stdout, and _IO_stderr
- for C code. Compare stdstreams.cc.
- (The difference is that here the vtable field is set to 0,
- so the objects defined are not valid C++ objects. On the other
- hand, we don't need a C++ compiler to build this file.) */
-
-#include "libioP.h"
-
-
-#define DEF_STDFILE(NAME, FD, CHAIN, FLAGS) \
- struct _IO_FILE_plus NAME \
- = {FILEBUF_LITERAL(CHAIN, FLAGS, FD), &_IO_file_jumps}
-
-DEF_STDFILE(_IO_stdin_, 0, 0, _IO_NO_WRITES);
-DEF_STDFILE(_IO_stdout_, 1, &_IO_stdin_.file, _IO_NO_READS);
-DEF_STDFILE(_IO_stderr_, 2, &_IO_stdout_.file,
- _IO_NO_READS+_IO_UNBUFFERED);
-
-_IO_FILE *_IO_list_all = &_IO_stderr_.file;
diff --git a/contrib/libg++/libio/stdiostream.cc b/contrib/libg++/libio/stdiostream.cc
deleted file mode 100644
index 80db5e59bfd5..000000000000
--- a/contrib/libg++/libio/stdiostream.cc
+++ /dev/null
@@ -1,159 +0,0 @@
-/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-/* Written by Per Bothner (bothner@cygnus.com). */
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-
-#include <stdiostream.h>
-#include "libioP.h"
-
-// A stdiobuf is "tied" to a FILE object (as used by the stdio package).
-// Thus a stdiobuf is always synchronized with the corresponding FILE,
-// though at the cost of some overhead. (If you use the implementation
-// of stdio supplied with this library, you don't need stdiobufs.)
-// This implementation inherits from filebuf, but implement the virtual
-// functions sys_read/..., using the stdio functions fread/... instead
-// of the low-level read/... system calls. This has the advantage that
-// we get all of the nice filebuf semantics automatically, though
-// with some overhead.
-
-
-#ifndef SEEK_SET
-#define SEEK_SET 0
-#endif
-#ifndef SEEK_CUR
-#define SEEK_CUR 1
-#endif
-#ifndef SEEK_END
-#define SEEK_END 2
-#endif
-
-stdiobuf::stdiobuf(FILE *f) : filebuf(fileno(f))
-{
- _file = f;
- // Turn off buffer in stdiobuf. Instead, rely on buffering in (FILE).
- // Thus the stdiobuf will be synchronized with the FILE.
- setbuf(NULL, 0);
-}
-
-stdiobuf::~stdiobuf()
-{
- /* Only needed if we're buffered. Not buffered is the default. */
- _IO_do_flush((_IO_FILE*)this);
-}
-
-streamsize stdiobuf::sys_read(char* buf, streamsize size)
-{
- // A minor optimization, but it makes a noticable difference.
- // A bigger optimization would be to write stdiobuf::underflow,
- // but that has some modularity disadvantages. Re-evaluate that
- // after we have gotten rid of the double indirection. FIXME
- if (size == 1)
- {
- register ch = getc(_file);
- if (ch == EOF)
- return 0;
- *buf = (char)ch;
- return 1;
- }
- else
- return fread(buf, 1, size, _file);
-}
-
-streamsize stdiobuf::sys_write(const char *buf, streamsize n)
-{
- _IO_ssize_t count = fwrite(buf, 1, n, _file);
- if (_offset >= 0)
- _offset += n;
- return count;
-}
-
-streampos stdiobuf::sys_seek(streamoff offset, _seek_dir dir)
-{
- // Normally, equivalent to: fdir=dir
- int fdir =
- (dir == ios::beg) ? SEEK_SET :
- (dir == ios::cur) ? SEEK_CUR :
- (dir == ios::end) ? SEEK_END :
- dir;
- return fseek(_file, offset, fdir);
-}
-
-int stdiobuf::sys_close()
-{
- int status = fclose(_file);
- _file = NULL;
- return status;
-}
-
-int stdiobuf::sync()
-{
- if (_IO_do_flush((_IO_FILE*)this))
- return EOF;
- if (!(xflags() & _IO_NO_WRITES))
- if (fflush(_file))
- return EOF;
- return 0;
-}
-
-int stdiobuf::overflow(int c /* = EOF*/)
-{
- if (filebuf::overflow(c) == EOF)
- return EOF;
- if (c != EOF)
- return c;
- return fflush(_file);
-}
-
-streamsize stdiobuf::xsputn(const char* s, streamsize n)
-{
- if (buffered ())
- {
- // The filebuf implementation of sputn loses.
- return streambuf::xsputn(s, n);
- }
- else
- return fwrite (s, 1, n, _file);
-}
-
-void stdiobuf::buffered (int b)
-{
- if (b)
- {
- if (_flags & _IO_UNBUFFERED)
- { /* Was unbuffered, make it buffered. */
- _flags &= ~_IO_UNBUFFERED;
- }
- }
- else
- {
- if (!(_flags & _IO_UNBUFFERED))
- { /* Was buffered, make it unbuffered. */
- setbuf(NULL, 0);
- }
- }
-}
diff --git a/contrib/libg++/libio/stdiostream.h b/contrib/libg++/libio/stdiostream.h
deleted file mode 100644
index b973d7a39b62..000000000000
--- a/contrib/libg++/libio/stdiostream.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-/* Written by Per Bothner (bothner@cygnus.com). */
-
-#ifndef _STDIOSTREAM_H
-#define _STDIOSTREAM_H
-
-#ifdef __GNUG__
-#pragma interface
-#endif
-
-#include <iostream.h>
-#include <stdio.h>
-
-extern "C++" {
-class stdiobuf : public filebuf {
- protected:
- FILE *_file;
- public:
- FILE* stdiofile() const { return _file; }
- stdiobuf(FILE *);
- ~stdiobuf();
- int buffered () const { return _flags & _IO_UNBUFFERED ? 0 : 1; }
- void buffered (int);
- virtual streamsize sys_read(char*, streamsize);
- virtual streampos sys_seek(streamoff, _seek_dir);
- virtual streamsize sys_write(const char*, streamsize);
- virtual int sys_close();
- virtual int sync();
- virtual int overflow(int c = EOF);
- streamsize xsputn(const char* s, streamsize n);
-};
-
-class istdiostream : public istream
-{
-private:
- stdiobuf _file;
-public:
- istdiostream (FILE* __f) : istream(), _file(__f) { init(&_file); }
- stdiobuf* rdbuf()/* const */ { return &_file; }
- int buffered () const { return _file.buffered (); }
- void buffered (int _i) { _file.buffered (_i); }
-};
-
-class ostdiostream : public ostream
-{
-private:
- stdiobuf _file;
-public:
- ostdiostream (FILE* __f) : ostream(), _file(__f) { init(&_file); }
- stdiobuf* rdbuf() /* const */ { return &_file; }
- int buffered () const { return _file.buffered (); }
- void buffered (int _i) { _file.buffered (_i); }
-};
-} // extern "C++"
-
-#endif /* !_STDIOSTREAM_H */
diff --git a/contrib/libg++/libio/stdstrbufs.cc b/contrib/libg++/libio/stdstrbufs.cc
deleted file mode 100644
index 8af259988a5d..000000000000
--- a/contrib/libg++/libio/stdstrbufs.cc
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
-Copyright (C) 1994 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-
-/* This file provides definitions of _IO_stdin, _IO_stdout, and _IO_stderr
- for C++ code. Compare stdfiles.c.
- (The difference is that here the vtable field is set to
- point to builtinbuf's vtable, so the objects are effectively
- of class builtinbuf.) */
-
-#include "libioP.h"
-#include <stdio.h>
-
-#if !defined(filebuf_vtable) && defined(__cplusplus)
-#ifdef __GNUC__
-extern char filebuf_vtable[]
- asm (_G_VTABLE_LABEL_PREFIX
-#if _G_VTABLE_LABEL_HAS_LENGTH
- "7"
-#endif
- "filebuf");
-#else /* !__GNUC__ */
-#if _G_VTABLE_LABEL_HAS_LENGTH
-#define filebuf_vtable _G_VTABLE_LABEL_PREFIX_ID##7filebuf
-#else
-#define filebuf_vtable _G_VTABLE_LABEL_PREFIX_ID##filebuf
-#endif
-extern char filebuf_vtable[];
-#endif /* !__GNUC__ */
-#endif /* !defined(filebuf_vtable) && defined(__cplusplus) */
-
-#ifndef STD_VTABLE
-#define STD_VTABLE (const struct _IO_jump_t *)filebuf_vtable
-#endif
-
-#define DEF_STDFILE(NAME, FD, CHAIN, FLAGS) \
- struct _IO_FILE_plus NAME = {FILEBUF_LITERAL(CHAIN, FLAGS, FD), STD_VTABLE}
-
-DEF_STDFILE(_IO_stdin_, 0, 0, _IO_NO_WRITES);
-DEF_STDFILE(_IO_stdout_, 1, &_IO_stdin_.file, _IO_NO_READS);
-DEF_STDFILE(_IO_stderr_, 2, &_IO_stdout_.file,
- _IO_NO_READS+_IO_UNBUFFERED);
-
-#ifdef _STDIO_USES_IOSTREAM
-_IO_FILE *_IO_list_all = &_IO_stderr_.file;
-#else /* !_STDIO_USES_IOSTREAM */
-#include "stdiostream.h"
-
-struct _IO_fake_stdiobuf {
- struct {
- _IO_FILE file;
- const void *vtable;
- } s;
- FILE *stdio_file;
-};
-
-/* Define stdiobuf_vtable as a name for the virtual function table
- of the stdiobuf class. */
-#ifndef stdiobuf_vtable
-#ifdef __GNUC__
-extern struct _IO_jump_t stdiobuf_vtable
- asm (_G_VTABLE_LABEL_PREFIX
-#if _G_VTABLE_LABEL_HAS_LENGTH
- "8"
-#endif
- "stdiobuf");
-#else /* !__GNUC__ */
-#if _G_VTABLE_LABEL_HAS_LENGTH
-#define stdiobuf_vtable _G_VTABLE_LABEL_PREFIX_ID##8stdiobuf
-#else
-#define stdiobuf_vtable _G_VTABLE_LABEL_PREFIX_ID##stdiobuf
-#endif
-extern struct _IO_jump_t stdiobuf_vtable;
-#endif /* !__GNUC__ */
-#endif /* !stdiobuf_vtable */
-
-#if _IO_UNIFIED_JUMPTABLES
-#define JUMP_PTR /* Nothing */
-#else
-#define JUMP_PTR &_IO_streambuf_jumps,
-#endif
-
-#define DEF_STDIOFILE(NAME, FD, FILE, FLAGS, CHAIN) \
- struct _IO_fake_stdiobuf NAME = \
- {{{ _IO_MAGIC+_IO_LINKED+_IO_IS_FILEBUF+_IO_UNBUFFERED+FLAGS, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, CHAIN, JUMP_PTR FD},\
- &stdiobuf_vtable}, FILE}
-
-DEF_STDIOFILE(_IO_stdin_buf, 0, stdin, _IO_NO_WRITES, &_IO_stderr_.file);
-DEF_STDIOFILE(_IO_stdout_buf, 1, stdout, _IO_NO_READS, &_IO_stdin_buf.s.file);
-DEF_STDIOFILE(_IO_stderr_buf, 2, stderr, _IO_NO_READS, &_IO_stdout_buf.s.file);
-
-_IO_FILE *_IO_list_all = &_IO_stderr_buf.s.file;
-#endif /* !_STDIO_USES_IOSTREAM */
diff --git a/contrib/libg++/libio/stdstreams.cc b/contrib/libg++/libio/stdstreams.cc
deleted file mode 100644
index a5889d738e22..000000000000
--- a/contrib/libg++/libio/stdstreams.cc
+++ /dev/null
@@ -1,153 +0,0 @@
-/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-/* Written by Per Bothner (bothner@cygnus.com). */
-
-#include "libioP.h"
-#include "streambuf.h"
-#include <stdio.h>
-
-// The ANSI draft requires that operations on cin/cout/cerr can be
-// mixed with operations on stdin/stdout/stderr on a character by
-// character basis. This normally requires that the streambuf's
-// used by cin/cout/cerr be stdiostreams. However, if the stdio
-// implementation is the one that is built using this library,
-// then we don't need to, since in that case stdin/stdout/stderr
-// are identical to _IO_stdin/_IO_stdout/_IO_stderr.
-
-#include "libio.h"
-
-#ifdef _STDIO_USES_IOSTREAM
-#define CIN_SBUF _IO_stdin_
-#define COUT_SBUF _IO_stdout_
-#define CERR_SBUF _IO_stderr_
-static int use_stdiobuf = 0;
-#else
-#define CIN_SBUF _IO_stdin_buf
-#define COUT_SBUF _IO_stdout_buf
-#define CERR_SBUF _IO_stderr_buf
-static int use_stdiobuf = 1;
-#endif
-
-#define cin CIN
-#define cout COUT
-#define cerr CERR
-#define clog CLOG
-#include "iostream.h"
-#undef cin
-#undef cout
-#undef cerr
-#undef clog
-
-#ifdef __GNUG__
-#define PAD 0 /* g++ allows 0-length arrays. */
-#else
-#define PAD 1
-#endif
-struct _fake_istream {
- struct myfields {
-#ifdef __GNUC__
- _ios_fields *vb; /* pointer to virtual base class ios */
- _IO_ssize_t _gcount;
-#else
- /* This is supposedly correct for cfront. */
- _IO_ssize_t _gcount;
- void *vptr;
- _ios_fields *vb; /* pointer to virtual base class ios */
-#endif
- } mine;
- _ios_fields base;
- char filler[sizeof(struct istream)-sizeof(struct _ios_fields)+PAD];
-};
-struct _fake_ostream {
- struct myfields {
-#ifndef __GNUC__
- void *vptr;
-#endif
- _ios_fields *vb; /* pointer to virtual base class ios */
- } mine;
- _ios_fields base;
- char filler[sizeof(struct ostream)-sizeof(struct _ios_fields)+PAD];
-};
-
-
-#ifdef _IO_NEW_STREAMS
-#define STD_STR(SBUF, TIE, EXTRA_FLAGS) \
- (streambuf*)&SBUF, TIE, 0, ios::skipws|ios::dec|EXTRA_FLAGS, ' ',0,0,6
-#else
-#define STD_STR(SBUF, TIE, EXTRA_FLAGS) \
- (streambuf*)&SBUF, TIE, 0, ios::dont_close|ios::dec|ios::skipws|EXTRA_FLAGS, ' ',0,0,6
-#endif
-
-#ifdef __GNUC__
-#define OSTREAM_DEF(NAME, SBUF, TIE, EXTRA_FLAGS, ASM) \
- _fake_ostream NAME ASM = { {&NAME.base}, {STD_STR(SBUF, TIE, EXTRA_FLAGS) }};
-#define ISTREAM_DEF(NAME, SBUF, TIE, EXTRA_FLAGS) \
- _fake_istream NAME = { {&NAME.base}, {STD_STR(SBUF, TIE, EXTRA_FLAGS) }};
-#else
-#define OSTREAM_DEF(NAME, SBUF, TIE, EXTRA_FLAGS) \
- _fake_ostream NAME = { {0, &NAME.base}, {STD_STR(SBUF, TIE, EXTRA_FLAGS) }};
-#define ISTREAM_DEF(NAME, SBUF, TIE, EXTRA_FLAGS) \
- _fake_istream NAME = {{0, 0, &NAME.base}, {STD_STR(SBUF, TIE, EXTRA_FLAGS)}};
-#endif
-
-OSTREAM_DEF(cout, COUT_SBUF, NULL, 0, )
-OSTREAM_DEF(cerr, CERR_SBUF,(ostream*)&cout, ios::unitbuf, )
-ISTREAM_DEF(cin, CIN_SBUF, (ostream*)&cout, 0)
-
-/* Only for (partial) compatibility with AT&T's library. */
-#if _G_CLOG_CONFLICT
-OSTREAM_DEF(clog, CERR_SBUF, (ostream*)&cout, 0, __asm__ ("__IO_clog"))
-#else
-OSTREAM_DEF(clog, CERR_SBUF, (ostream*)&cout, 0, )
-#endif
-
-// Switches between using _IO_std{in,out,err} and __std{in,out,err}_buf
-// for standard streams. This does not normally need to be called
-// explicitly, but is provided for AT&T compatibility.
-
-int ios::sync_with_stdio(int new_state)
-{
-#ifdef _STDIO_USES_IOSTREAM
- // It is always synced.
- return 0;
-#else
- if (new_state == use_stdiobuf) // The usual case now.
- return use_stdiobuf;
- if (new_state) {
- cin.base._strbuf = (streambuf*)&_IO_stdin_buf;
- cout.base._strbuf = (streambuf*)&_IO_stdout_buf;
- cerr.base._strbuf = (streambuf*)&_IO_stderr_buf;
- clog.base._strbuf = (streambuf*)&_IO_stderr_buf;
- } else {
- cin.base._strbuf = (streambuf*)_IO_stdin;
- cout.base._strbuf = (streambuf*)_IO_stdout;
- cerr.base._strbuf = (streambuf*)_IO_stderr;
- clog.base._strbuf = (streambuf*)_IO_stderr;
- }
- int old_state = use_stdiobuf;
- use_stdiobuf = new_state;
- return old_state;
-#endif
-}
diff --git a/contrib/libg++/libio/stream.cc b/contrib/libg++/libio/stream.cc
deleted file mode 100644
index 3440a0c9bdb4..000000000000
--- a/contrib/libg++/libio/stream.cc
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include <stdarg.h>
-#include <string.h>
-#include "libioP.h"
-#include "stream.h"
-#include "strstream.h"
-
-static char Buffer[_IO_BUFSIZ];
-#define EndBuffer (Buffer+_IO_BUFSIZ)
-static char* next_chunk = Buffer; // Start of available part of Buffer.
-
-char* form(const char* format, ...)
-{
- int space_left = EndBuffer - next_chunk;
- // If less that 25% of the space is available start over.
- if (space_left < (_IO_BUFSIZ>>2))
- next_chunk = Buffer;
- char* buf = next_chunk;
-
- strstreambuf stream(buf, EndBuffer-buf-1, buf);
- va_list ap;
- va_start(ap, format);
- int count = stream.vform(format, ap);
- va_end(ap);
- stream.sputc(0);
- next_chunk = buf + stream.pcount();
- return buf;
-}
-
-#define u_long unsigned long
-
-static char* itoa(unsigned long i, int size, int neg, int base)
-{
- // Conservative estimate: If base==2, might need 8 characters
- // for each input byte, but normally 3 is plenty.
- int needed = size ? size
- : (base >= 8 ? 3 : 8) * sizeof(unsigned long) + 2;
- int space_left = EndBuffer - next_chunk;
- if (space_left <= needed)
- next_chunk = Buffer; // start over.
-
- char* buf = next_chunk;
-
- register char* ptr = buf+needed+1;
- next_chunk = ptr;
-
- if (needed < (2+neg) || ptr > EndBuffer)
- return NULL;
- *--ptr = 0;
-
- if (i == 0)
- *--ptr = '0';
- while (i != 0 && ptr > buf) {
- int ch = i % base;
- i = i / base;
- if (ch >= 10)
- ch += 'a' - 10;
- else
- ch += '0';
- *--ptr = ch;
- }
- if (neg)
- *--ptr = '-';
- if (size == 0)
- return ptr;
- while (ptr > buf)
- *--ptr = ' ';
- return buf;
-}
-
-char* dec(long i, int len /* = 0 */)
-{
- if (i >= 0) return itoa((unsigned long)i, len, 0, 10);
- else return itoa((unsigned long)(-i), len, 1, 10);
-}
-char* dec(int i, int len /* = 0 */)
-{
- if (i >= 0) return itoa((unsigned long)i, len, 0, 10);
- else return itoa((unsigned long)(-i), len, 1, 10);
-}
-char* dec(unsigned long i, int len /* = 0 */)
-{
- return itoa(i, len, 0, 10);
-}
-char* dec(unsigned int i, int len /* = 0 */)
-{
- return itoa(i, len, 0, 10);
-}
-
-char* hex(long i, int len /* = 0 */)
-{
- return itoa((unsigned long)i, len, 0, 16);
-}
-char* hex(int i, int len /* = 0 */)
-{
- return itoa((unsigned long)i, len, 0, 16);
-}
-char* hex(unsigned long i, int len /* = 0 */)
-{
- return itoa(i, len, 0, 16);
-}
-char* hex(unsigned int i, int len /* = 0 */)
-{
- return itoa(i, len, 0, 16);
-}
-
-char* oct(long i, int len /* = 0 */)
-{
- return itoa((unsigned long)i, len, 0, 8);
-}
-char* oct(int i, int len /* = 0 */)
-{
- return itoa((unsigned long)i, len, 0, 8);
-}
-char* oct(unsigned long i, int len /* = 0 */)
-{
- return itoa(i, len, 0, 8);
-}
-char* oct(unsigned int i, int len /* = 0 */)
-{
- return itoa(i, len, 0, 8);
-}
-
-static char *str(const char* s, int len, int width)
-{
- if (width < len)
- width = len;
- int space_left = EndBuffer - next_chunk;
- if (space_left <= width + 1)
- next_chunk = Buffer; // start over.
- char* buf = next_chunk;
- memset (buf, ' ', width - len);
- memcpy (buf + width - len, s, len);
- buf[width] = 0;
- return buf;
-}
-
-char* str(const char* s, int width)
-{
- return str (s, strlen (s), width);
-}
-
-char* chr(char ch, int width)
-{
- char c = ch;
- return str (&c, 1, width);
-}
diff --git a/contrib/libg++/libio/stream.h b/contrib/libg++/libio/stream.h
deleted file mode 100644
index 0859802ade69..000000000000
--- a/contrib/libg++/libio/stream.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#ifndef _COMPAT_STREAM_H
-#define _COMPAT_STREAM_H
-
-// Compatibility with old library.
-// DO NOT USE THESE FUNCTIONS IN NEW CODE!
-// They are obsolete, non-standard, and non-reentrant.
-
-#define _STREAM_COMPAT
-#include <iostream.h>
-
-extern "C++" {
-extern char* form(const char*, ...);
-
-extern char* dec(long, int=0);
-extern char* dec(int, int=0);
-extern char* dec(unsigned long, int=0);
-extern char* dec(unsigned int, int=0);
-
-extern char* hex(long, int=0);
-extern char* hex(int, int=0);
-extern char* hex(unsigned long, int=0);
-extern char* hex(unsigned int, int=0);
-
-extern char* oct(long, int=0);
-extern char* oct(int, int=0);
-extern char* oct(unsigned long, int=0);
-extern char* oct(unsigned int, int=0);
-
-char* chr(char ch, int width = 0);
-char* str(const char* s, int width = 0);
-
-inline istream& WS(istream& str) { return ws(str); }
-} // extern "C++"
-
-#endif /* !_COMPAT_STREAM_H */
diff --git a/contrib/libg++/libio/streambuf.cc b/contrib/libg++/libio/streambuf.cc
deleted file mode 100644
index d66af097aa50..000000000000
--- a/contrib/libg++/libio/streambuf.cc
+++ /dev/null
@@ -1,343 +0,0 @@
-/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1991, 1992, 1993, 1995 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-/* Written by Per Bothner (bothner@cygnus.com). */
-
-#define _STREAM_COMPAT
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include "iostreamP.h"
-#include <string.h>
-#include <stdarg.h>
-#include <errno.h>
-#ifndef errno
-extern int errno;
-#endif
-
-void streambuf::_un_link() { _IO_un_link(this); }
-
-void streambuf::_link_in() { _IO_link_in(this); }
-
-int streambuf::switch_to_get_mode()
-{ return _IO_switch_to_get_mode(this); }
-
-void streambuf::free_backup_area()
-{ _IO_free_backup_area(this); }
-
-#if 0
-int streambuf::switch_to_put_mode()
-{ return _IO_:switch_to_put_mode(this); }
-#endif
-
-int __overflow(streambuf* sb, int c)
-{
- return sb->overflow(c);
-}
-
-int streambuf::underflow()
-{ return EOF; }
-
-int streambuf::uflow()
-{ return _IO_default_uflow (this); }
-
-int streambuf::overflow(int /* = EOF */)
-{ return EOF; }
-
-streamsize streambuf::xsputn(register const char* s, streamsize n)
-{ return _IO_default_xsputn(this, s, n); }
-
-streamsize streambuf::xsgetn(char* s, streamsize n)
-{ return _IO_default_xsgetn(this, s, n); }
-
-int streambuf::ignore(int n)
-{
- register int more = n;
- for (;;) {
- int count = _IO_read_end - _IO_read_ptr; // Data available.
- if (count > 0) {
- if (count > more)
- count = more;
- _IO_read_ptr += count;
- more -= count;
- }
- if (more == 0 || __underflow(this) == EOF)
- break;
- }
- return n - more;
-}
-
-int streambuf::sync()
-{
- return 0;
-}
-
-int streambuf::pbackfail(int c)
-{
- return _IO_default_pbackfail(this, c);
-}
-
-streambuf* streambuf::setbuf(char* p, int len)
-{
- if (sync() == EOF)
- return NULL;
- if (p == NULL || len == 0) {
- unbuffered(1);
- setb(_shortbuf, _shortbuf+1, 0);
- }
- else {
- unbuffered(0);
- setb(p, p+len, 0);
- }
- setp(0, 0);
- setg(0, 0, 0);
- return this;
-}
-
-streampos streambuf::seekpos(streampos pos, int mode)
-{
- return seekoff(pos, ios::beg, mode);
-}
-
-streampos streambuf::sseekpos(streampos pos, int mode)
-{
- return _IO_seekpos (this, pos, mode);
-}
-
-void streambuf::setb(char* b, char* eb, int a)
-{ _IO_setb(this, b, eb, a); }
-
-int streambuf::doallocate() { return _IO_default_doallocate(this); }
-
-void streambuf::doallocbuf() { _IO_doallocbuf(this); }
-
-#if !_IO_UNIFIED_JUMPTABLES
-/* The following are jump table entries that just call the virtual method */
-
-static int _IO_sb_overflow(_IO_FILE *fp, int c)
-{ return ((streambuf*)fp)->overflow(c); }
-static int _IO_sb_underflow(_IO_FILE *fp)
-{ return ((streambuf*)fp)->underflow(); }
-static _IO_size_t _IO_sb_xsputn(_IO_FILE *fp, const void *s, _IO_size_t n)
-{ return ((streambuf*)fp)->xsputn((const char*)s, n); }
-static _IO_size_t _IO_sb_xsgetn(_IO_FILE *fp, void *s, _IO_size_t n)
-{ return ((streambuf*)fp)->xsgetn((char*)s, n); }
-static int _IO_sb_close(_IO_FILE *fp)
-{ return ((streambuf*)fp)->sys_close(); }
-static int _IO_sb_stat(_IO_FILE *fp, void *b)
-{ return ((streambuf*)fp)->sys_stat(b); }
-static int _IO_sb_doallocate(_IO_FILE *fp)
-{ return ((streambuf*)fp)->doallocate(); }
-
-static _IO_pos_t _IO_sb_seekoff(_IO_FILE *fp, _IO_off_t pos, int dir, int mode)
-{
- return ((streambuf*)fp)->seekoff(pos, (ios::seek_dir)dir, mode);
-}
-
-static _IO_pos_t _IO_sb_seekpos(_IO_FILE *fp, _IO_pos_t pos, int mode)
-{
- return ((streambuf*)fp)->seekpos(pos, mode);
-}
-
-static int _IO_sb_pbackfail(_IO_FILE *fp, int ch)
-{ return ((streambuf*)fp)->pbackfail(ch); }
-static void _IO_sb_finish(_IO_FILE *fp)
-{ ((streambuf*)fp)->~streambuf(); }
-static _IO_ssize_t _IO_sb_read(_IO_FILE *fp, void *buf, _IO_ssize_t n)
-{ return ((streambuf*)fp)->sys_read((char*)buf, n); }
-static _IO_ssize_t _IO_sb_write(_IO_FILE *fp, const void *buf, _IO_ssize_t n)
-{ return ((streambuf*)fp)->sys_write((const char*)buf, n); }
-static int _IO_sb_sync(_IO_FILE *fp)
-{ return ((streambuf*)fp)->sync(); }
-static _IO_pos_t _IO_sb_seek(_IO_FILE *fp, _IO_off_t off, int dir)
-{ return ((streambuf*)fp)->sys_seek(off, (_seek_dir)dir); }
-static _IO_FILE* _IO_sb_setbuf(_IO_FILE *fp, char *buf, _IO_ssize_t n)
-{ return ((streambuf*)fp)->setbuf(buf, n); }
-
-/* This callbacks in this jumptable just call the corresponding
- virtual function, so that C functions can access (potentially user-defined)
- streambuf-derived objects.
- Contrast the builtinbuf class, which does the converse: Allow
- C++ virtual calls to to be used on _IO_FILE objects that are builtin
- (or defined by C code). */
-
-
-struct _IO_jump_t _IO_streambuf_jumps = {
- JUMP_INIT_DUMMY,
- JUMP_INIT(finish, _IO_sb_finish),
- JUMP_INIT(overflow, _IO_sb_overflow),
- JUMP_INIT(underflow, _IO_sb_underflow),
- JUMP_INIT(uflow, _IO_default_uflow),
- JUMP_INIT(pbackfail, _IO_sb_pbackfail),
- JUMP_INIT(xsputn, _IO_sb_xsputn),
- JUMP_INIT(xsgetn, _IO_sb_xsgetn),
- JUMP_INIT(seekoff, _IO_sb_seekoff),
- JUMP_INIT(seekpos, _IO_sb_seekpos),
- JUMP_INIT(setbuf, _IO_sb_setbuf),
- JUMP_INIT(sync, _IO_sb_sync),
- JUMP_INIT(doallocate, _IO_sb_doallocate),
- JUMP_INIT(read, _IO_sb_read),
- JUMP_INIT(write, _IO_sb_write),
- JUMP_INIT(seek, _IO_sb_seek),
- JUMP_INIT(close, _IO_sb_close),
- JUMP_INIT(stat, _IO_sb_stat)
-};
-#endif
-
-streambuf::streambuf(int flags)
-{
- _IO_init(this, flags);
-#if !_IO_UNIFIED_JUMPTABLES
- _jumps = &_IO_streambuf_jumps;
-#endif
-}
-
-streambuf::~streambuf() { _IO_default_finish(this); }
-
-streampos
-streambuf::seekoff(streamoff, _seek_dir, int /*=ios::in|ios::out*/)
-{
- return EOF;
-}
-
-streampos
-streambuf::sseekoff(streamoff o , _seek_dir d, int m /*=ios::in|ios::out*/)
-{
- return _IO_seekoff (this, o, d, m);
-}
-
-int streambuf::sputbackc(char c)
-{
- return _IO_sputbackc(this, c);
-}
-
-int streambuf::sungetc()
-{
- return _IO_sungetc(this);
-}
-
-#if 0 /* Work in progress */
-void streambuf::collumn(int c)
-{
- if (c == -1)
- _collumn = -1;
- else
- _collumn = c - (_IO_write_ptr - _IO_write_base);
-}
-#endif
-
-
-int streambuf::get_column()
-{
- if (_cur_column)
- return _IO_adjust_column(_cur_column - 1, pbase(), pptr() - pbase());
- return -1;
-}
-
-int streambuf::set_column(int i)
-{
- _cur_column = i+1;
- return 0;
-}
-
-int streambuf::flush_all() { return _IO_flush_all (); }
-
-void streambuf::flush_all_linebuffered()
-{ _IO_flush_all_linebuffered(); }
-
-int streambuf::sys_stat(void *)
-{
-#ifdef EIO
- errno = EIO;
-#endif
- return -1;
-}
-
-streamsize streambuf::sys_read(char* /*buf*/, streamsize /*size*/)
-{
- return 0;
-}
-
-streamsize streambuf::sys_write(const char* /*buf*/, streamsize /*size*/)
-{
- return 0;
-}
-
-streampos streambuf::sys_seek(streamoff, _seek_dir)
-{
- return EOF;
-}
-
-int streambuf::sys_close() { return 0; /* Suceess; do nothing */ }
-
-streammarker::streammarker(streambuf *sb)
-{
- _IO_init_marker(this, sb);
-}
-
-streammarker::~streammarker()
-{
- _IO_remove_marker(this);
-}
-
-#define BAD_DELTA EOF
-
-int streammarker::delta(streammarker& other_mark)
-{
- return _IO_marker_difference(this, &other_mark);
-}
-
-int streammarker::delta()
-{
- return _IO_marker_delta(this);
-}
-
-int streambuf::seekmark(streammarker& mark, int delta /* = 0 */)
-{
- return _IO_seekmark(this, &mark, delta);
-}
-
-void streambuf::unsave_markers()
-{
- _IO_unsave_markers(this);
-}
-
-int ios::readable() { return !(rdbuf()->_flags & _IO_NO_READS); }
-int ios::writable() { return !(rdbuf()->_flags & _IO_NO_WRITES); }
-int ios::is_open() { return rdbuf()
- && (rdbuf()->_flags & _IO_NO_READS+_IO_NO_WRITES)
- != _IO_NO_READS+_IO_NO_WRITES; }
-
-#if defined(linux)
-#define IO_CLEANUP
-#endif
-
-#ifdef IO_CLEANUP
- IO_CLEANUP
-#else
-struct __io_defs {
- ~__io_defs() { _IO_cleanup (); }
-};
-__io_defs io_defs__;
-#endif
diff --git a/contrib/libg++/libio/streambuf.h b/contrib/libg++/libio/streambuf.h
deleted file mode 100644
index 688c891280e2..000000000000
--- a/contrib/libg++/libio/streambuf.h
+++ /dev/null
@@ -1,475 +0,0 @@
-/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#ifndef _STREAMBUF_H
-#define _STREAMBUF_H
-#ifdef __GNUG__
-#pragma interface
-#endif
-
-/* #define _G_IO_THROW */ /* Not implemented: ios::failure */
-
-#define _IO_NEW_STREAMS // new optimizated stream representation
-
-extern "C" {
-#include <libio.h>
-}
-//#include <_G_config.h>
-#ifdef _IO_NEED_STDARG_H
-#include <stdarg.h>
-#endif
-#ifndef _IO_va_list
-#define _IO_va_list char *
-#endif
-
-#ifndef EOF
-#define EOF (-1)
-#endif
-#ifndef NULL
-#ifdef __GNUC__
-#define NULL ((void*)0)
-#else
-#define NULL (0)
-#endif
-#endif
-
-#ifndef _IO_wchar_t
-#define _IO_wchar_t short
-#endif
-
-extern "C++" {
-class istream; /* Work-around for a g++ name mangling bug. Fixed in 2.6. */
-class ostream; class streambuf;
-
-// In case some header files defines these as macros.
-#undef open
-#undef close
-
-typedef _IO_off_t streamoff;
-typedef _IO_fpos_t streampos;
-typedef _IO_ssize_t streamsize;
-
-typedef unsigned long __fmtflags;
-typedef unsigned char __iostate;
-
-struct _ios_fields
-{ // The data members of an ios.
- streambuf *_strbuf;
- ostream* _tie;
- int _width;
- __fmtflags _flags;
- _IO_wchar_t _fill;
- __iostate _state;
- __iostate _exceptions;
- int _precision;
-
- void *_arrays; /* Support for ios::iword and ios::pword. */
-};
-
-#define _IOS_GOOD 0
-#define _IOS_EOF 1
-#define _IOS_FAIL 2
-#define _IOS_BAD 4
-
-#define _IO_INPUT 1
-#define _IO_OUTPUT 2
-#define _IO_ATEND 4
-#define _IO_APPEND 8
-#define _IO_TRUNC 16
-#define _IO_NOCREATE 32
-#define _IO_NOREPLACE 64
-#define _IO_BIN 128
-
-#ifdef _STREAM_COMPAT
-enum state_value {
- _good = _IOS_GOOD,
- _eof = _IOS_EOF,
- _fail = _IOS_FAIL,
- _bad = _IOS_BAD };
-enum open_mode {
- input = _IO_INPUT,
- output = _IO_OUTPUT,
- atend = _IO_ATEND,
- append = _IO_APPEND };
-#endif
-
-class ios : public _ios_fields {
- ios& operator=(ios&); /* Not allowed! */
- ios (const ios&); /* Not allowed! */
- public:
- typedef __fmtflags fmtflags;
- typedef int iostate;
- typedef int openmode;
- typedef int streamsize;
- enum io_state {
- goodbit = _IOS_GOOD,
- eofbit = _IOS_EOF,
- failbit = _IOS_FAIL,
- badbit = _IOS_BAD };
- enum open_mode {
- in = _IO_INPUT,
- out = _IO_OUTPUT,
- ate = _IO_ATEND,
- app = _IO_APPEND,
- trunc = _IO_TRUNC,
- nocreate = _IO_NOCREATE,
- noreplace = _IO_NOREPLACE,
- bin = _IOS_BIN, // Deprecated - ANSI uses ios::binary.
- binary = _IOS_BIN };
- enum seek_dir { beg, cur, end};
- // ANSI: typedef enum seek_dir seekdir; etc
- // NOTE: If adding flags here, before to update ios::bitalloc().
- enum { skipws=_IO_SKIPWS,
- left=_IO_LEFT, right=_IO_RIGHT, internal=_IO_INTERNAL,
- dec=_IO_DEC, oct=_IO_OCT, hex=_IO_HEX,
- showbase=_IO_SHOWBASE, showpoint=_IO_SHOWPOINT,
- uppercase=_IO_UPPERCASE, showpos=_IO_SHOWPOS,
- scientific=_IO_SCIENTIFIC, fixed=_IO_FIXED,
- unitbuf=_IO_UNITBUF, stdio=_IO_STDIO
-#ifndef _IO_NEW_STREAMS
- , dont_close=_IO_DONT_CLOSE // Don't delete streambuf on stream destruction
-#endif
- };
- enum { // Masks.
- basefield=dec+oct+hex,
- floatfield = scientific+fixed,
- adjustfield = left+right+internal
- };
-
-#ifdef _IO_THROW
- class failure : public xmsg {
- ios* _stream;
- public:
- failure(ios* stream) { _stream = stream; }
- failure(string cause, ios* stream) { _stream = stream; }
- ios* rdios() const { return _stream; }
- };
-#endif
-
- ostream* tie() const { return _tie; }
- ostream* tie(ostream* val) { ostream* save=_tie; _tie=val; return save; }
-
- // Methods to change the format state.
- _IO_wchar_t fill() const { return (_IO_wchar_t)_fill; }
- _IO_wchar_t fill(_IO_wchar_t newf)
- {_IO_wchar_t oldf = (_IO_wchar_t)_fill; _fill = (char)newf; return oldf;}
- fmtflags flags() const { return _flags; }
- fmtflags flags(fmtflags new_val) {
- fmtflags old_val = _flags; _flags = new_val; return old_val; }
- int precision() const { return _precision; }
- int precision(int newp) {
- unsigned short oldp = _precision; _precision = (unsigned short)newp;
- return oldp; }
- fmtflags setf(fmtflags val) {
- fmtflags oldbits = _flags;
- _flags |= val; return oldbits; }
- fmtflags setf(fmtflags val, fmtflags mask) {
- fmtflags oldbits = _flags;
- _flags = (_flags & ~mask) | (val & mask); return oldbits; }
- fmtflags unsetf(fmtflags mask) {
- fmtflags oldbits = _flags;
- _flags &= ~mask; return oldbits; }
- int width() const { return _width; }
- int width(int val) { int save = _width; _width = val; return save; }
-
-#ifdef _IO_THROW
- void _throw_failure() const { throw new ios::failure(this); }
-#else
- void _throw_failure() const { }
-#endif
- void clear(iostate state = 0) {
- _state = _strbuf ? state : state|badbit;
- if (_state & _exceptions) _throw_failure(); }
- void set(iostate flag) { _state |= flag;
- if (_state & _exceptions) _throw_failure(); }
- void setstate(iostate flag) { _state |= flag; // ANSI
- if (_state & _exceptions) _throw_failure(); }
- int good() const { return _state == 0; }
- int eof() const { return _state & ios::eofbit; }
- int fail() const { return _state & (ios::badbit|ios::failbit); }
- int bad() const { return _state & ios::badbit; }
- iostate rdstate() const { return _state; }
- operator void*() const { return fail() ? (void*)0 : (void*)(-1); }
- int operator!() const { return fail(); }
- iostate exceptions() const { return _exceptions; }
- void exceptions(iostate enable) {
- _exceptions = enable;
- if (_state & _exceptions) _throw_failure(); }
-
- streambuf* rdbuf() const { return _strbuf; }
- streambuf* rdbuf(streambuf *_s) {
- streambuf *_old = _strbuf; _strbuf = _s; clear (); return _old; }
-
- static int sync_with_stdio(int on);
- static void sync_with_stdio() { sync_with_stdio(1); }
- static fmtflags bitalloc();
- static int xalloc();
- void*& pword(int);
- void* pword(int) const;
- long& iword(int);
- long iword(int) const;
-
-#ifdef _STREAM_COMPAT
- void unset(state_value flag) { _state &= ~flag; }
- void close();
- int is_open();
- int readable();
- int writable();
-#endif
-
- // Used to initialize standard streams. Not needed in this implementation.
- class Init {
- public:
- Init () { }
- };
-
- protected:
- inline ios(streambuf* sb = 0, ostream* tie_to = 0);
- inline virtual ~ios();
- inline void init(streambuf* sb, ostream* tie = 0);
-};
-
-#if __GNUG__==1
-typedef int _seek_dir;
-#else
-typedef ios::seek_dir _seek_dir;
-#endif
-
-// Magic numbers and bits for the _flags field.
-// The magic numbers use the high-order bits of _flags;
-// the remaining bits are abailable for variable flags.
-// Note: The magic numbers must all be negative if stdio
-// emulation is desired.
-
-// A streammarker remembers a position in a buffer.
-// You are guaranteed to be able to seek back to it if it is saving().
-class streammarker : private _IO_marker {
- friend class streambuf;
- void set_offset(int offset) { _pos = offset; }
- public:
- streammarker(streambuf *sb);
- ~streammarker();
- int saving() { return 1; }
- int delta(streammarker&);
- int delta();
-};
-
-struct streambuf : public _IO_FILE { // protected??
- friend class ios;
- friend class istream;
- friend class ostream;
- friend class streammarker;
- const void *&_vtable() { return *(const void**)((_IO_FILE*)this + 1); }
- protected:
- static streambuf* _list_all; /* List of open streambufs. */
- _IO_FILE*& xchain() { return _chain; }
- void _un_link();
- void _link_in();
- char* gptr() const
- { return _IO_file_flags & _IO_IN_BACKUP ? _IO_save_base : _IO_read_ptr; }
- char* pptr() const { return _IO_write_ptr; }
- char* egptr() const
- { return _IO_file_flags & _IO_IN_BACKUP ? _IO_save_end : _IO_read_end; }
- char* epptr() const { return _IO_write_end; }
- char* pbase() const { return _IO_write_base; }
- char* eback() const
- { return _IO_file_flags & _IO_IN_BACKUP ? _IO_save_base : _IO_read_base;}
- char* base() const { return _IO_buf_base; }
- char* ebuf() const { return _IO_buf_end; }
- int blen() const { return _IO_buf_end - _IO_buf_base; }
- void xput_char(char c) { *_IO_write_ptr++ = c; }
- int xflags() { return _IO_file_flags; }
- int xflags(int f) {int fl = _IO_file_flags; _IO_file_flags = f; return fl;}
- void xsetflags(int f) { _IO_file_flags |= f; }
- void xsetflags(int f, int mask)
- { _IO_file_flags = (_IO_file_flags & ~mask) | (f & mask); }
- void gbump(int n)
- { _IO_file_flags & _IO_IN_BACKUP ? (_IO_save_base+=n):(_IO_read_ptr+=n);}
- void pbump(int n) { _IO_write_ptr += n; }
- void setb(char* b, char* eb, int a=0);
- void setp(char* p, char* ep)
- { _IO_write_base=_IO_write_ptr=p; _IO_write_end=ep; }
- void setg(char* eb, char* g, char *eg) {
- if (_IO_file_flags & _IO_IN_BACKUP) _IO_free_backup_area(this);
- _IO_read_base = eb; _IO_read_ptr = g; _IO_read_end = eg; }
- char *shortbuf() { return _shortbuf; }
-
- int in_backup() { return _flags & _IO_IN_BACKUP; }
- // The start of the main get area: FIXME: wrong for write-mode filebuf?
- char *Gbase() { return in_backup() ? _IO_save_base : _IO_read_base; }
- // The end of the main get area:
- char *eGptr() { return in_backup() ? _IO_save_end : _IO_read_end; }
- // The start of the backup area:
- char *Bbase() { return in_backup() ? _IO_read_base : _IO_save_base; }
- char *Bptr() { return _IO_backup_base; }
- // The end of the backup area:
- char *eBptr() { return in_backup() ? _IO_read_end : _IO_save_end; }
- char *Nbase() { return _IO_save_base; }
- char *eNptr() { return _IO_save_end; }
- int have_backup() { return _IO_save_base != NULL; }
- int have_markers() { return _markers != NULL; }
- void free_backup_area();
- void unsave_markers(); // Make all streammarkers !saving().
- int put_mode() { return _flags & _IO_CURRENTLY_PUTTING; }
- int switch_to_get_mode();
-
- streambuf(int flags=0);
- public:
- static int flush_all();
- static void flush_all_linebuffered(); // Flush all line buffered files.
- virtual ~streambuf();
- virtual int overflow(int c = EOF); // Leave public for now
- virtual int underflow(); // Leave public for now
- virtual int uflow(); // Leave public for now
- virtual int pbackfail(int c);
-// virtual int showmany ();
- virtual streamsize xsputn(const char* s, streamsize n);
- virtual streamsize xsgetn(char* s, streamsize n);
- virtual streampos seekoff(streamoff, _seek_dir, int mode=ios::in|ios::out);
- virtual streampos seekpos(streampos pos, int mode = ios::in|ios::out);
-
- streampos pubseekoff(streamoff o, _seek_dir d, int mode=ios::in|ios::out)
- { return _IO_seekoff (this, o, d, mode); }
- streampos pubseekpos(streampos pos, int mode = ios::in|ios::out)
- { return _IO_seekpos (this, pos, mode); }
- streampos sseekoff(streamoff, _seek_dir, int mode=ios::in|ios::out);
- streampos sseekpos(streampos pos, int mode = ios::in|ios::out);
- virtual streambuf* setbuf(char* p, int len);
- virtual int sync();
- virtual int doallocate();
-
- int seekmark(streammarker& mark, int delta = 0);
- int sputbackc(char c);
- int sungetc();
- int unbuffered() { return _flags & _IO_UNBUFFERED ? 1 : 0; }
- int linebuffered() { return _flags & _IO_LINE_BUF ? 1 : 0; }
- void unbuffered(int i)
- { if (i) _flags |= _IO_UNBUFFERED; else _flags &= ~_IO_UNBUFFERED; }
- void linebuffered(int i)
- { if (i) _flags |= _IO_LINE_BUF; else _flags &= ~_IO_LINE_BUF; }
- int allocate() { // For AT&T compatibility
- if (base() || unbuffered()) return 0;
- else return doallocate(); }
- // Allocate a buffer if needed; use _shortbuf if appropriate.
- void allocbuf() { if (base() == NULL) doallocbuf(); }
- void doallocbuf();
- int in_avail() { return _IO_read_end - _IO_read_ptr; }
- int out_waiting() { return _IO_write_ptr - _IO_write_base; }
- streamsize sputn(const char* s, streamsize n) { return xsputn(s, n); }
- streamsize padn(char pad, streamsize n) { return _IO_padn(this, pad, n); }
- streamsize sgetn(char* s, streamsize n) { return _IO_sgetn(this, s, n); }
- int ignore(int);
- int get_column();
- int set_column(int);
- long sgetline(char* buf, _IO_size_t n, char delim, int putback_delim);
- int sputc(int c) { return _IO_putc(c, this); }
- int sbumpc() { return _IO_getc(this); }
- int sgetc() { return _IO_peekc(this); }
- int snextc() {
- if (_IO_read_ptr >= _IO_read_end && __underflow(this) == EOF)
- return EOF;
- else return _IO_read_ptr++, sgetc(); }
- void stossc() { if (_IO_read_ptr < _IO_read_end) _IO_read_ptr++; }
- int vscan(char const *fmt0, _IO_va_list ap, ios* stream = NULL);
- int scan(char const *fmt0 ...);
- int vform(char const *fmt0, _IO_va_list ap);
- int form(char const *fmt0 ...);
-#if 0 /* Work in progress */
- int column(); // Current column number (of put pointer). -1 is unknown.
- void column(int c); // Set column number of put pointer to c.
-#endif
- virtual streamsize sys_read(char* buf, streamsize size);
- virtual streamsize sys_write(const char*, streamsize);
- virtual streampos sys_seek(streamoff, _seek_dir);
- virtual int sys_close();
- virtual int sys_stat(void*); // Actually, a (struct stat*)
-};
-
-// A backupbuf is a streambuf with full backup and savepoints on reading.
-// All standard streambufs in the GNU iostream library are backupbufs.
-
-class filebuf : public streambuf {
- protected:
- void init();
- public:
- static const int openprot; // Non-ANSI AT&T-ism: Default open protection.
- filebuf();
- filebuf(int fd);
- filebuf(int fd, char* p, int len);
-#if !_IO_UNIFIED_JUMPTABLES
- static filebuf *__new();
-#endif
- ~filebuf();
- filebuf* attach(int fd);
- filebuf* open(const char *filename, const char *mode);
- filebuf* open(const char *filename, ios::openmode mode, int prot = 0664);
- virtual int underflow();
- virtual int overflow(int c = EOF);
- int is_open() const { return _fileno >= 0; }
- int fd() const { return is_open() ? _fileno : EOF; }
- filebuf* close();
- virtual int doallocate();
- virtual streampos seekoff(streamoff, _seek_dir, int mode=ios::in|ios::out);
- virtual streambuf* setbuf(char* p, int len);
- streamsize xsputn(const char* s, streamsize n);
- streamsize xsgetn(char* s, streamsize n);
- virtual int sync();
- protected: // See documentation in filebuf.C.
-// virtual int pbackfail(int c);
- int is_reading() { return eback() != egptr(); }
- char* cur_ptr() { return is_reading() ? gptr() : pptr(); }
- /* System's idea of pointer */
- char* file_ptr() { return eGptr(); }
- // Low-level operations (Usually invoke system calls.)
- virtual streamsize sys_read(char* buf, streamsize size);
- virtual streampos sys_seek(streamoff, _seek_dir);
- virtual streamsize sys_write(const char*, streamsize);
- virtual int sys_stat(void*); // Actually, a (struct stat*)
- virtual int sys_close();
-#if 0
- virtual uflow;
- virtual showmany;
-#endif
-};
-
-inline void ios::init(streambuf* sb, ostream* tie_to) {
- _state = sb ? ios::goodbit : ios::badbit; _exceptions=0;
- _strbuf=sb; _tie = tie_to; _width=0; _fill=' ';
-#ifdef _IO_NEW_STREAMS
- _flags=ios::skipws|ios::dec;
-#else
- _flags=ios::skipws|ios::dec|ios::dont_close;
-#endif
- _precision=6; _arrays = 0; }
-
-inline ios::ios(streambuf* sb, ostream* tie_to) { init(sb, tie_to); }
-
-inline ios::~ios() {
-#ifndef _IO_NEW_STREAMS
- if (!(_flags & (unsigned int)ios::dont_close)) delete rdbuf();
-#endif
- if (_arrays) delete [] _arrays;
-}
-} // extern "C++"
-#endif /* _STREAMBUF_H */
diff --git a/contrib/libg++/libio/strfile.h b/contrib/libg++/libio/strfile.h
deleted file mode 100644
index d2ae4c028694..000000000000
--- a/contrib/libg++/libio/strfile.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include <libio.h>
-#ifdef TODO
-Merge into libio.h ?
-#endif
-
-typedef void *(*_IO_alloc_type) __P((_IO_size_t));
-typedef void (*_IO_free_type) __P((void*));
-
-struct _IO_str_fields
-{
- _IO_alloc_type _allocate_buffer;
- _IO_free_type _free_buffer;
-};
-
-typedef struct _IO_strfile_
-{
- struct _IO_FILE _f;
- const void *_vtable;
- struct _IO_str_fields _s;
-} _IO_strfile;
-
-/* dynamic: set when the array object is allocated (or reallocated) as
- necessary to hold a character sequence that can change in length. */
-#define _IO_STR_DYNAMIC(FP) ((FP)->_s._allocate_buffer != (_IO_alloc_type)0)
-
-/* frozen: set when the program has requested that the array object not
- be altered, reallocated, or freed. */
-#define _IO_STR_FROZEN(FP) ((FP)->_f._IO_file_flags & _IO_USER_BUF)
diff --git a/contrib/libg++/libio/strops.c b/contrib/libg++/libio/strops.c
deleted file mode 100644
index c88a1335ffd6..000000000000
--- a/contrib/libg++/libio/strops.c
+++ /dev/null
@@ -1,290 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include "strfile.h"
-#include "libioP.h"
-#include <string.h>
-
-#if 0
-/* The following definitions are for exposition only.
- They map the terminlogy used in the ANSI/ISO C++ draft standard
- to the implementation. */
-
-/* allocated: set when a dynamic array object has been allocated, and
- hence should be freed by the destructor for the strstreambuf object. */
-#define ALLOCATED(FP) ((FP)->_f._IO_buf_base && DYNAMIC(FP))
-
-/* constant: set when the array object has const elements,
- so the output sequence cannot be written. */
-#define CONSTANT(FP) ((FP)->_f._IO_file_flags & _IO_NO_WRITES)
-
-/* alsize: the suggested minimum size for a dynamic array object. */
-#define ALSIZE(FP) ??? /* not stored */
-
-/* palloc: points to the function to call to allocate a dynamic array object.*/
-#define PALLOC(FP) \
- ((FP)->_s._allocate_buffer == default_alloc ? 0 : (FP)->_s._allocate_buffer)
-
-/* pfree: points to the function to call to free a dynamic array object. */
-#define PFREE(FP) \
- ((FP)->_s._free_buffer == default_free ? 0 : (FP)->_s._free_buffer)
-
-#endif
-
-#ifdef TODO
-/* An "unbounded buffer" is when a buffer is supplied, but with no
- specified length. An example is the buffer argument to sprintf.
- */
-#endif
-
-void
-DEFUN(_IO_str_init_static, (fp, ptr, size, pstart),
- _IO_FILE *fp AND char *ptr AND int size AND char *pstart)
-{
- if (size == 0)
- size = strlen(ptr);
- else if (size < 0)
- {
- /* If size is negative 'the characters are assumed to
- continue indefinitely.' This is kind of messy ... */
- int s;
- size = 512;
- /* Try increasing powers of 2, as long as we don't wrap around. */
- for (; s = 2*size, s > 0 && ptr + s > ptr && s < 0x4000000L; )
- size = s;
- /* Try increasing size as much as we can without wrapping around. */
- for (s = size >> 1; s > 0; s >>= 1)
- {
- if (ptr + size + s > ptr)
- size += s;
- }
- }
- _IO_setb(fp, ptr, ptr+size, 0);
-
- fp->_IO_write_base = ptr;
- fp->_IO_read_base = ptr;
- fp->_IO_read_ptr = ptr;
- if (pstart)
- {
- fp->_IO_write_ptr = pstart;
- fp->_IO_write_end = ptr+size;
- fp->_IO_read_end = pstart;
- }
- else
- {
- fp->_IO_write_ptr = ptr;
- fp->_IO_write_end = ptr;
- fp->_IO_read_end = ptr+size;
- }
- /* A null _allocate_buffer function flags the strfile as being static. */
- (((_IO_strfile*)(fp))->_s._allocate_buffer) = (_IO_alloc_type)0;
-}
-
-void
-DEFUN(_IO_str_init_readonly, (fp, ptr, size),
- _IO_FILE *fp AND const char *ptr AND int size)
-{
- _IO_str_init_static (fp, (char*)ptr, size, NULL);
- fp->_IO_file_flags |= _IO_NO_WRITES;
-}
-
-int
-DEFUN(_IO_str_overflow, (fp, c),
- register _IO_FILE* fp AND int c)
-{
- int flush_only = c == EOF;
- _IO_size_t pos;
- if (fp->_flags & _IO_NO_WRITES)
- return flush_only ? 0 : EOF;
- if ((fp->_flags & _IO_TIED_PUT_GET) && !(fp->_flags & _IO_CURRENTLY_PUTTING))
- {
- fp->_flags |= _IO_CURRENTLY_PUTTING;
- fp->_IO_write_ptr = fp->_IO_read_ptr;
- fp->_IO_read_ptr = fp->_IO_read_end;
- }
- pos = fp->_IO_write_ptr - fp->_IO_write_base;
- if (pos >= _IO_blen(fp) + flush_only)
- {
- if (fp->_flags & _IO_USER_BUF) /* not allowed to enlarge */
- return EOF;
- else
- {
- char *new_buf;
- char *old_buf = fp->_IO_buf_base;
- _IO_size_t new_size = 2 * _IO_blen(fp) + 100;
- new_buf
- = (char*)(*((_IO_strfile*)fp)->_s._allocate_buffer)(new_size);
- if (new_buf == NULL)
- {
- /* __ferror(fp) = 1; */
- return EOF;
- }
- if (fp->_IO_buf_base)
- {
- memcpy(new_buf, old_buf, _IO_blen(fp));
- (*((_IO_strfile*)fp)->_s._free_buffer)(fp->_IO_buf_base);
- /* Make sure _IO_setb won't try to delete _IO_buf_base. */
- fp->_IO_buf_base = NULL;
- }
-#if 0
- if (lenp == &LEN(fp)) /* use '\0'-filling */
- memset(new_buf + pos, 0, blen() - pos);
-#endif
- _IO_setb(fp, new_buf, new_buf + new_size, 1);
- fp->_IO_read_base = new_buf + (fp->_IO_read_base - old_buf);
- fp->_IO_read_ptr = new_buf + (fp->_IO_read_ptr - old_buf);
- fp->_IO_read_end = new_buf + (fp->_IO_read_end - old_buf);
- fp->_IO_write_ptr = new_buf + (fp->_IO_write_ptr - old_buf);
-
- fp->_IO_write_base = new_buf;
- fp->_IO_write_end = fp->_IO_buf_end;
- }
- }
-
- if (!flush_only)
- *fp->_IO_write_ptr++ = (unsigned char) c;
- if (fp->_IO_write_ptr > fp->_IO_read_end)
- fp->_IO_read_end = fp->_IO_write_ptr;
- return c;
-}
-
-int
-DEFUN(_IO_str_underflow, (fp),
- register _IO_FILE* fp)
-{
- if (fp->_IO_write_ptr > fp->_IO_read_end)
- fp->_IO_read_end = fp->_IO_write_ptr;
- if ((fp->_flags & _IO_TIED_PUT_GET) && (fp->_flags & _IO_CURRENTLY_PUTTING))
- {
- fp->_flags &= ~_IO_CURRENTLY_PUTTING;
- fp->_IO_read_ptr = fp->_IO_write_ptr;
- fp->_IO_write_ptr = fp->_IO_write_end;
- }
- if (fp->_IO_read_ptr < fp->_IO_read_end)
- return *fp->_IO_read_ptr;
- else
- return EOF;
-}
-
-/* The size of the valid part of the buffer. */
-
-_IO_ssize_t
-DEFUN(_IO_str_count, (fp),
- register _IO_FILE *fp)
-{
- return (fp->_IO_write_ptr > fp->_IO_read_end ? fp->_IO_write_ptr
- : fp->_IO_read_end)
- - fp->_IO_read_base;
-}
-
-_IO_pos_t
-DEFUN(_IO_str_seekoff, (fp, offset, dir, mode),
- register _IO_FILE *fp AND _IO_off_t offset AND int dir AND int mode)
-{
- _IO_ssize_t cur_size = _IO_str_count(fp);
- _IO_pos_t new_pos = EOF;
-
- /* Move the get pointer, if requested. */
- if (mode & _IOS_INPUT)
- {
- switch (dir)
- {
- case _IO_seek_end:
- offset += cur_size;
- break;
- case _IO_seek_cur:
- offset += fp->_IO_read_ptr - fp->_IO_read_base;
- break;
- default: /* case _IO_seek_set: */
- break;
- }
- if (offset < 0 || (_IO_size_t)offset > cur_size)
- return EOF;
- fp->_IO_read_ptr = fp->_IO_read_base + offset;
- fp->_IO_read_end = fp->_IO_read_base + cur_size;
- new_pos = offset;
- }
-
- /* Move the put pointer, if requested. */
- if (mode & _IOS_OUTPUT)
- {
- switch (dir)
- {
- case _IO_seek_end:
- offset += cur_size;
- break;
- case _IO_seek_cur:
- offset += fp->_IO_write_ptr - fp->_IO_write_base;
- break;
- default: /* case _IO_seek_set: */
- break;
- }
- if (offset < 0 || (_IO_size_t)offset > cur_size)
- return EOF;
- fp->_IO_write_ptr = fp->_IO_write_base + offset;
- new_pos = offset;
- }
- return new_pos;
-}
-
-int
-DEFUN(_IO_str_pbackfail, (fp, c),
- register _IO_FILE *fp AND int c)
-{
- if ((fp->_flags & _IO_NO_WRITES) && c != EOF)
- return EOF;
- return _IO_default_pbackfail(fp, c);
-}
-
-void
-DEFUN (_IO_str_finish, (fp),
- register _IO_FILE* fp)
-{
- if (fp->_IO_buf_base && !(fp->_flags & _IO_USER_BUF))
- (((_IO_strfile*)fp)->_s._free_buffer)(fp->_IO_buf_base);
- fp->_IO_buf_base = NULL;
-
- _IO_default_finish(fp);
-}
-
-struct _IO_jump_t _IO_str_jumps = {
- JUMP_INIT_DUMMY,
- JUMP_INIT(finish, _IO_str_finish),
- JUMP_INIT(overflow, _IO_str_overflow),
- JUMP_INIT(underflow, _IO_str_underflow),
- JUMP_INIT(uflow, _IO_default_uflow),
- JUMP_INIT(pbackfail, _IO_str_pbackfail),
- JUMP_INIT(xsputn, _IO_default_xsputn),
- JUMP_INIT(xsgetn, _IO_default_xsgetn),
- JUMP_INIT(seekoff, _IO_str_seekoff),
- JUMP_INIT(seekpos, _IO_default_seekpos),
- JUMP_INIT(setbuf, _IO_default_setbuf),
- JUMP_INIT(sync, _IO_default_sync),
- JUMP_INIT(doallocate, _IO_default_doallocate),
- JUMP_INIT(read, _IO_default_read),
- JUMP_INIT(write, _IO_default_write),
- JUMP_INIT(seek, _IO_default_seek),
- JUMP_INIT(close, _IO_default_close),
- JUMP_INIT(stat, _IO_default_stat)
-};
diff --git a/contrib/libg++/libio/strstream.cc b/contrib/libg++/libio/strstream.cc
deleted file mode 100644
index a32e811c9d94..000000000000
--- a/contrib/libg++/libio/strstream.cc
+++ /dev/null
@@ -1,116 +0,0 @@
-/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-/* Written by Per Bothner (bothner@cygnus.com). */
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include "iostreamP.h"
-#include "strstream.h"
-#include <string.h>
-
-static void* default_alloc(_IO_size_t size)
-{
- return (void*)new char[size];
-}
-
-static void default_free(void* ptr)
-{
- delete [] (char*)ptr;
-}
-
-istrstream::istrstream(const char *cp, int n)
-{
- __my_sb.init_readonly (cp, n);
-}
-
-strstreambase::strstreambase(char *cp, int n, int mode)
-: __my_sb (cp, n,
- (mode == ios::app || mode == ios::ate) ? cp + strlen(cp) : cp)
-{
- init (&__my_sb);
-}
-
-char *strstreambuf::str()
-{
- freeze(1);
- return base();
-}
-
-_IO_ssize_t strstreambuf::pcount () { return _IO_write_ptr - _IO_write_base; }
-
-int strstreambuf::overflow(int c /* = EOF */)
-{
- return _IO_str_overflow (this, c);
-}
-
-int strstreambuf::underflow()
-{
- return _IO_str_underflow(this);
-}
-
-
-void strstreambuf::init_dynamic(_IO_alloc_type alloc, _IO_free_type free,
- int initial_size)
-
-{
- _s._allocate_buffer = alloc ? alloc : default_alloc;
- _s._free_buffer = free ? free : default_free;
- if (initial_size > 0)
- {
- char * buf = (char*)(*_s._allocate_buffer)(initial_size);
- setb(buf, buf + initial_size, 1);
- setp(buf, buf + initial_size);
- setg(buf, buf, buf);
- }
-}
-
-void strstreambuf::init_static(char *ptr, int size, char *pstart)
-{
- _IO_str_init_static (this, ptr, size, pstart);
-}
-
-void strstreambuf::init_readonly (const char *ptr, int size)
-{
- _IO_str_init_readonly (this, ptr, size);
-}
-
-strstreambuf::~strstreambuf()
-{
- if (_IO_buf_base && !(_flags & _IO_USER_BUF))
- (_s._free_buffer)(_IO_buf_base);
- _IO_buf_base = NULL;
-}
-
-streampos strstreambuf::seekoff(streamoff off, _seek_dir dir,
- int mode /*=ios::in|ios::out*/)
-{
- return _IO_str_seekoff (this, off, dir, mode);
-}
-
-int strstreambuf::pbackfail(int c)
-{
- return _IO_str_pbackfail (this, c);
-}
diff --git a/contrib/libg++/libio/strstream.h b/contrib/libg++/libio/strstream.h
deleted file mode 100644
index d549b4547588..000000000000
--- a/contrib/libg++/libio/strstream.h
+++ /dev/null
@@ -1,113 +0,0 @@
-/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-/* Written by Per Bothner (bothner@cygnus.com). */
-
-#ifndef __STRSTREAM_H
-#define __STRSTREAM_H
-#ifdef __GNUG__
-#pragma interface
-#endif
-#include <iostream.h>
-#include <strfile.h>
-
-extern "C++" {
-class strstreambuf : public streambuf
-{
- struct _IO_str_fields _s;
- friend class istrstream;
-
- void init_dynamic(_IO_alloc_type alloc, _IO_free_type free,
- int initial_size = 0);
- void init_static(char *ptr, int size, char *pstart);
- void init_readonly(const char *ptr, int size);
- protected:
- virtual int overflow(int = EOF);
- virtual int underflow();
- virtual int pbackfail(int c);
- public:
- virtual ~strstreambuf();
- strstreambuf() { init_dynamic(0, 0); }
- strstreambuf(int initial_size) { init_dynamic(0, 0, initial_size); }
- strstreambuf(void *(*alloc)(_IO_size_t), void (*free)(void*))
- { init_dynamic(alloc, free); }
- strstreambuf(char *ptr, int size, char *pstart = NULL)
- { init_static(ptr, size, pstart); }
- strstreambuf(unsigned char *ptr, int size, unsigned char *pstart = NULL)
- { init_static((char*)ptr, size, (char*)pstart); }
- strstreambuf(const char *ptr, int size)
- { init_readonly(ptr, size); }
- strstreambuf(const unsigned char *ptr, int size)
- { init_readonly((const char*)ptr, size); }
- strstreambuf(signed char *ptr, int size, signed char *pstart = NULL)
- { init_static((char*)ptr, size, (char*)pstart); }
- strstreambuf(const signed char *ptr, int size)
- { init_readonly((const char*)ptr, size); }
- // Note: frozen() is always true if !_IO_STR_DYNAMIC(this).
- int frozen() { return _flags & _IO_USER_BUF ? 1 : 0; }
- void freeze(int n=1)
- { if (_IO_STR_DYNAMIC(this))
- { if (n) _flags |= _IO_USER_BUF; else _flags &= ~_IO_USER_BUF; } }
- _IO_ssize_t pcount();
- char *str();
- virtual streampos seekoff(streamoff, _seek_dir, int mode=ios::in|ios::out);
-};
-
-class strstreambase : virtual public ios {
- protected:
- strstreambuf __my_sb;
- public:
- strstreambuf* rdbuf() { return &__my_sb; }
- protected:
- strstreambase() { init (&__my_sb); }
- strstreambase(char *cp, int n, int mode=ios::out);
-};
-
-class istrstream : public strstreambase, public istream {
- public:
- istrstream(const char*, int=0);
-};
-
-class ostrstream : public strstreambase, public ostream {
- public:
- ostrstream() { }
- ostrstream(char *cp, int n, int mode=ios::out) :strstreambase(cp,n,mode){}
- _IO_ssize_t pcount() { return ((strstreambuf*)_strbuf)->pcount(); }
- char *str() { return ((strstreambuf*)_strbuf)->str(); }
- void freeze(int n = 1) { ((strstreambuf*)_strbuf)->freeze(n); }
- int frozen() { return ((strstreambuf*)_strbuf)->frozen(); }
-};
-
-class strstream : public strstreambase, public iostream {
- public:
- strstream() { }
- strstream(char *cp, int n, int mode=ios::out) :strstreambase(cp,n,mode){}
- _IO_ssize_t pcount() { return ((strstreambuf*)_strbuf)->pcount(); }
- char *str() { return ((strstreambuf*)_strbuf)->str(); }
- void freeze(int n = 1) { ((strstreambuf*)_strbuf)->freeze(n); }
- int frozen() { return ((strstreambuf*)_strbuf)->frozen(); }
-};
-} // extern "C++"
-
-#endif /*!__STRSTREAM_H*/
diff --git a/contrib/libg++/libio/tests/ChangeLog b/contrib/libg++/libio/tests/ChangeLog
deleted file mode 100644
index bfd607b2ae26..000000000000
--- a/contrib/libg++/libio/tests/ChangeLog
+++ /dev/null
@@ -1,111 +0,0 @@
-Wed Apr 10 17:15:47 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * Makefile.in (IOLIBS): Link with libstdc++.
-
-Tue Mar 12 11:45:14 1996 Per Bothner <bothner@kalessin.cygnus.com>
-
- * tiomisc.cc (test_read_write_flush): New test for read/write/seek
- on block end. From Luke Blanshard <luke@cs.wisc.edu>.
-
-Thu Jul 6 17:51:30 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * tiomisc.cc (getline_test3): New function. Test reading long lines.
- * tiomisc.exp: Update for output from getline_test3.
-
-Wed May 10 03:06:51 1995 Jason Merrill <jason@python.cygnus.com>
-
- * configure.in (X*INCLUDES): Renamed.
-
-Thu Apr 27 21:05:00 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * tiomisc.cc (test_destroy), tiomisc.exp: Add support for
- _IO_NEW_STREAMS.
-
-Tue Apr 25 15:15:01 1995 Jim Wilson <wilson@chestnut.cygnus.com>
-
- * tstdiomisc.c (t2): Use N not n in last SCAN macro call.
-
-Sun Feb 12 21:23:24 1995 Brendan Kehoe (brendan@lisa.cygnus.com)
-
- * Makefile.in (JUNK_TO_CLEAN): Also delete foo.dat from tiomisc.
-
-Sat Nov 5 14:37:36 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * tiomisc.cc (test_destroy): New test case from Jason Merrill.
- * tiomisc.exp: Update.
-
- * Makefile.in (JUNK_TO_CLEAN): Add tstdiomisc.
-
-Thu Oct 13 16:47:30 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * tiomisc.cc (reread_test): Remove bogus istream assignment.
-
-Wed Aug 31 13:59:56 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * Makefile.in (CXX_FLAGS): Not used. Removed.
-
-Wed Aug 17 18:27:37 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * tiomisc.cc (getline_test1, getline_test2, flush1_test): New tests,
- * tiomisc.cc (reread_test): New tests,
-
-Wed Jun 22 13:44:19 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * tstdiomisc.c: Add some sscanf tests.
- * Makefile.in (check-tstdiomisc): Run diff with expected output.
- * tstdiomisc.exp: New file. Expected output from tstdiomisc.
- * Makefile.in (foo): New rule, for quick one-off tests.
-
-Fri May 6 14:10:24 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * tFile.cc (t7): Revert Mar 4 change - I was confused.
-
-Sat Apr 2 04:41:41 1994 Andreas Schwab (schwab@issan.informatik.uni-dortmund.de)
-
- * Makefile.in (tfformat): Fix dependency.
-
-Fri Mar 4 17:40:14 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * tFile.cc (t7): gcount after getline shouldn't include delimiter.
- * tFile.cc (show_int, t12), tFile.exp: More integer formatting tests.
-
-Tue Feb 8 18:39:09 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * tiomisc.cc, tiomisc.exp: New test case (for filebuf::attach)
- from Joe Buck.
-
-Mon Jan 31 13:24:58 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * tfformat.c (main): Fix fprintf format string (%s -> %d).
- Bug reported by Jochen Voss <voss@mathematik.uni-kl.de>.
-
-Sun Dec 19 15:29:00 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * tstdiomisc.c, Makefile.in: New tests.
-
-Thu Dec 2 22:56:21 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * Makefile.in (JUNK_TO_CLEAN), configure.in (MOSTLYCLEAN):
- Added, to cleanup after tests.
-
-Fri Nov 26 16:05:43 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * tiomisc.cc, tiomisc.exp: A (hopefully growing) collection
- of small, random tests (mainly regression tests).
- * tiomisc.cc (test1 and test2): Tests from Wilco van Hoogstraeten
- <wilco@erasmus.et.tudelft.nl> to check for (now-fixed) bugs.
-
-Mon Oct 4 17:38:27 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * Makefile.in (IOSTDIOLIB): New macro.
-
-Fri Aug 27 12:22:10 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * tFile.cc (t7): Add test for buffer overflow.
-
-Fri Aug 20 00:23:53 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- Moved various tests over from old libg++/iostream/test.
- * Makefile.in: Edit appropriately.
-
-
diff --git a/contrib/libg++/libio/tests/Makefile.in b/contrib/libg++/libio/tests/Makefile.in
deleted file mode 100644
index 230ab6834839..000000000000
--- a/contrib/libg++/libio/tests/Makefile.in
+++ /dev/null
@@ -1,195 +0,0 @@
-# Copyright (C) 1993 Free Software Foundation
-#
-# This file is part of the GNU IO Library. This library is free
-# software; you can redistribute it and/or modify it under the
-# terms of the GNU General Public License as published by the
-# Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU CC; see the file COPYING. If not, write to
-# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
-
-srcdir = .
-
-CFLAGS = -g
-C_FLAGS = $(CFLAGS) -I. -I.. -I$(srcdir) -I$(srcdir)/..
-CXXFLAGS = -g
-CC = gcc
-CXX = gcc
-
-#### package, host, target, and site dependent Makefile fragments come in here.
-##
-
-STDIO_LD_FLAGS = -u __cleanup
-
-#LIBS = ../../libg++.a
-
-#LIBSTDIO = ../stdio/libstdio++.a
-#LIBIO = ../libio.a
-
-#STDIOLIBS = $(STDIO_LD_FLAGS) $(LIBSTDIO) $(LIBIO) $(LIBS)
-STDIOLIBS = $(LIBSTDIO) $(LIBIO) $(LIBS)
-IOLIBS = -L../../libstdc++ -lstdc++
-IOSTDIOLIB = ../libio.a ../../libiberty/libiberty.a
-
-DEPEND_SOURCES = $(srcdir)/*.C
-
-.PHONY: check check-iostream check-stdio
-check: check-iostream check-iostdio
-
-
-# These are tests written in C++, that test the iostream facility.
-check-iostream: check-tFile check-tiomisc \
- check-hounddog check-putbackdog check-tiomanip
-
-# These are tests written in C, that don't need C++.
-# They test libio's emulation of stdio.
-check-iostdio: check-tiformat check-tfformat check-tstdiomisc
-
-# check-stdio runs test programs that use stdio.
-# These aren't run by default because there may be linker tricks needed
-# to build them (if libc.a contains a competing stdio implementation).
-
-check-stdio: check-tfseek check-twrseek check-trdseek check-tpopen
-
-# See ${MOSTLYCLEAN} in configure.in
-JUNK_TO_CLEAN = tFile tiomisc hounddog putbackdog tiomanip \
- t?format *.out streamfile ftmp* tstdiomisc foo.dat
-
-.PHONY: info
-info:
-.PHONY: clean-info
-clean-info:
-.PHONY: install-info
-install-info:
-
-tst: tst.o
- gcc -v -o tst tst.o $(STDIOLIBS)
-
-tgetl: tgetl.o
- $(CXX) -o tgetl tgetl.o $(IOLIBS)
-
-tFile: tFile.o
- $(CXX) -o tFile tFile.o $(IOLIBS)
-
-tiomisc: tiomisc.o
- $(CXX) -o tiomisc tiomisc.o $(IOLIBS)
-
-hounddog: hounddog.o
- $(CXX) -o hounddog hounddog.o $(IOLIBS)
-
-check-hounddog: hounddog
- ./hounddog <$(srcdir)/hounddog.inp > hounddog.out 2>&1
- diff -c hounddog.out $(srcdir)/hounddog.exp
- ./hounddog -b0 <$(srcdir)/hounddog.inp > hound-b0.out 2>&1
- diff -c hound-b0.out $(srcdir)/hounddog.exp
- ./hounddog -b2 <$(srcdir)/hounddog.inp > hound-b2.out 2>&1
- diff -c hound-b2.out $(srcdir)/hounddog.exp
-
-putbackdog: putbackdog.o
- $(CXX) -o putbackdog putbackdog.o $(IOLIBS)
-
-check-putbackdog-regular: putbackdog
- ./putbackdog <$(srcdir)/hounddog.inp > putback.out 2>&1
- diff -c putback.out $(srcdir)/hounddog.exp
-check-putbackdog-nobuf: putbackdog
- ./putbackdog -b0 <$(srcdir)/hounddog.inp > putback-b0.out 2>&1
- diff -c putback-b0.out $(srcdir)/hounddog.exp
-check-putbackdog-buf2: putbackdog
- ./putbackdog -b2 <$(srcdir)/hounddog.inp > putback-b2.out 2>&1
- diff -c putback-b2.out $(srcdir)/hounddog.exp
-check-putbackdog: \
- check-putbackdog-regular check-putbackdog-nobuf check-putbackdog-buf2
-
-tfseek: tfseek.o
- $(CC) -o tfseek tfseek.o $(STDIOLIBS)
-
-check-tfseek: tfseek
- ./tfseek SEEK_SET fopen > tfseek-set-fopen.out 2>&1
- diff -c tfseek-set-fopen.out $(srcdir)/tfseek-set.exp
- ./tfseek SEEK_SET freopen > tfseek-set-freopen.out 2>&1
- diff -c tfseek-set-freopen.out $(srcdir)/tfseek-set.exp
- ./tfseek SEEK_CUR fopen > tfseek-cur-fopen.out 2>&1
- diff -c tfseek-cur-fopen.out $(srcdir)/tfseek-cur.exp
- ./tfseek SEEK_CUR freopen > tfseek-cur-freopen.out 2>&1
- diff -c tfseek-cur-freopen.out $(srcdir)/tfseek-cur.exp
-
-twrseek: twrseek.o
- $(CC) -o twrseek twrseek.o $(STDIOLIBS)
-
-check-twrseek: twrseek
- ./twrseek > twrseek.out 2>&1
- diff -c twrseek.out $(srcdir)/twrseek.exp
-
-trdseek: trdseek.o
- $(CC) -o trdseek -v trdseek.o $(STDIOLIBS)
-
-check-trdseek: trdseek
- ./trdseek
-
-check-tFile-regular: tFile
- ./tFile < $(srcdir)/tFile.inp > tFile.out 2>&1
- diff -c tFile.out $(srcdir)/tFile.exp
-# Run tFile with cout.rdbuf() unbuffered.
-check-tFile-nobuf: tFile
- ./tFile -b0 < $(srcdir)/tFile.inp > tFile-buf0.out 2>&1
- diff -c tFile-buf0.out $(srcdir)/tFile.exp
-# Run tFile with a 3-byte buffer for cout.rdbuf().
-check-tFile-buf3: tFile
- ./tFile -b3 < $(srcdir)/tFile.inp > tFile-buf3.out 2>&1
- diff -c tFile-buf3.out $(srcdir)/tFile.exp
-check-tFile: check-tFile-regular check-tFile-nobuf check-tFile-buf3
-
-check-tiomisc: tiomisc
- ./tiomisc >tiomisc.out 2>&1
- diff -c tiomisc.out $(srcdir)/tiomisc.exp
-
-tiomanip: tiomanip.o
- $(CXX) -o tiomanip tiomanip.o $(IOLIBS)
-check-tiomanip: tiomanip
- ./tiomanip >tiomanip.out 2>&1
- diff -c tiomanip.out $(srcdir)/tiomanip.exp
-
-tfformat: $(srcdir)/tfformat.c
- $(CC) $(C_FLAGS) -DTEST_LIBIO -DTEST_EXACTNESS \
- -o tfformat $(srcdir)/tfformat.c $(IOSTDIOLIB)
-
-check-tfformat: tfformat
- ./tfformat
-
-tiformat: $(srcdir)/tiformat.c
- $(CC) $(C_FLAGS) -DTEST_LIBIO -o tiformat $(srcdir)/tiformat.c $(IOSTDIOLIB)
-
-check-tiformat: tiformat
- ./tiformat
-
-tstdiomisc: tstdiomisc.o
- $(CC) -o tstdiomisc tstdiomisc.o $(IOSTDIOLIB)
-
-check-tstdiomisc: tstdiomisc
- ./tstdiomisc >tstdiomisc.out 2>&1
- diff -c tstdiomisc.out $(srcdir)/tstdiomisc.exp
-
-tpopen: tpopen.o
- $(CC) -o tpopen tpopen.o $(STDIOLIBS)
-
-check-tpopen: tpopen
- ./tpopen > tpopen.out 2>&1
- diff -c tpopen.out $(srcdir)/tpopen.exp
-
-trwseek: trwseek.o
- $(CC) -o trwseek trwseek.o $(STDIOLIBS)
-
-check-trwseek: trwseek
- ./trwsseek TMP r+ k w o
-
-foo: foo.o
- $(CXX) -o foo foo.o $(STDIOLIBS)
-foo+: foo+.o
- $(CXX) -o foo+ foo+.o $(IOLIBS)
diff --git a/contrib/libg++/libio/tests/configure.in b/contrib/libg++/libio/tests/configure.in
deleted file mode 100644
index f832adfb2363..000000000000
--- a/contrib/libg++/libio/tests/configure.in
+++ /dev/null
@@ -1,21 +0,0 @@
-# This file is a shell script fragment that supplies the information
-# necessary for a configure script to process the program in
-# this directory. For more information, look at ../../configure.
-
-configdirs=
-srctrigger=tFile.cc
-srcname="test C++ input/output library"
-package_makefile_frag=Make.pack
-
-# per-host:
-
-# per-target:
-
-TO_TOPDIR=../../
-ALL=' '
-XCINCLUDES='-I. -I.. -I$(srcdir) -I$(srcdir)/..'
-XCXXINCLUDES='-I. -I.. -I$(srcdir) -I$(srcdir)/..'
-MOSTLYCLEAN='*.o core $(JUNK_TO_CLEAN)'
-(. ${srcdir}/../config.shared) >${package_makefile_frag}
-
-# post-target:
diff --git a/contrib/libg++/libio/tests/hounddog.cc b/contrib/libg++/libio/tests/hounddog.cc
deleted file mode 100644
index 29a923836476..000000000000
--- a/contrib/libg++/libio/tests/hounddog.cc
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include <iostream.h>
-#include <stdlib.h>
-#include <string.h>
-
-// Read either "dog", "hound", or "hounddog".
-// If "dog" is found, return 1.
-// If "hound" is found, return 2.
-// If "hounddog" is found, return 3.
-// If non of these are found, return -1.
-int my_scan(streambuf* sb)
-{
- streammarker fence(sb);
- char buffer[20];
- // Try reading "hounddog":
- if (sb->sgetn(buffer, 8) == 8 && strncmp(buffer, "hounddog", 8) == 0)
- return 3;
- // No, no "hounddog": Backup to 'fence' ...
- sb->seekmark(fence);
- // ... and try reading "dog":
- if (sb->sgetn(buffer, 3) == 3 && strncmp(buffer, "dog", 3) == 0)
- return 1;
- // No, no "dog" either: Backup to 'fence' ...
- sb->seekmark(fence);
- // ... and try reading "hound":
- if (sb->sgetn(buffer, 5) == 5 && strncmp(buffer, "hound", 5) == 0)
- return 2;
- // No, no "hound" either: Backup to 'fence' and signal failure.
- sb->seekmark(fence); // Backup to 'fence'..
- return -1;
-}
-
-int main(int argc, char **argv)
-{
- streambuf *sb = cin.rdbuf();
- if (argc > 1 && strncmp(argv[1], "-b", 2) == 0) {
- streambuf *ret;
- int buffer_size = atoi(&argv[1][2]);
- if (buffer_size == 0)
- ret = sb->setbuf(NULL, 0);
- else
- ret = sb->setbuf(new char[buffer_size], buffer_size);
- if (ret != sb)
- cerr << "Warning: cin.rdbuf()->setbuf failed!\n";
- }
- for (;;) {
- int code = my_scan(sb);
- int ch = sb->sbumpc();
- if (code == -1 && ch == EOF)
- break;
- int n = 0;
- while (ch != EOF && ch != '\n') {
- n++;
- ch = sb->sbumpc();
- };
- if (ch == EOF) {
- cout << "[Unexpected EOF]\n";
- break;
- }
- cout << "Code: " << code << " followed by " << n << " chars\n";
- }
-}
diff --git a/contrib/libg++/libio/tests/hounddog.exp b/contrib/libg++/libio/tests/hounddog.exp
deleted file mode 100644
index 2060807b4312..000000000000
--- a/contrib/libg++/libio/tests/hounddog.exp
+++ /dev/null
@@ -1,7 +0,0 @@
-Code: -1 followed by 6 chars
-Code: 1 followed by 3 chars
-Code: 2 followed by 0 chars
-Code: -1 followed by 3 chars
-Code: 3 followed by 4 chars
-Code: 1 followed by 0 chars
-Code: -1 followed by 3 chars
diff --git a/contrib/libg++/libio/tests/hounddog.inp b/contrib/libg++/libio/tests/hounddog.inp
deleted file mode 100644
index 370371bc2032..000000000000
--- a/contrib/libg++/libio/tests/hounddog.inp
+++ /dev/null
@@ -1,7 +0,0 @@
-hello!
-doggie
-hound
-cat
-hounddog rat
-dog
-foo
diff --git a/contrib/libg++/libio/tests/putbackdog.cc b/contrib/libg++/libio/tests/putbackdog.cc
deleted file mode 100644
index 0e1ed61f5598..000000000000
--- a/contrib/libg++/libio/tests/putbackdog.cc
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-// Test streambuf::sputbackc
-
-#include <iostream.h>
-#include <stdlib.h>
-#include <string.h>
-
-// Read either "dog", "hound", or "hounddog".
-// If "dog" is found, return 1.
-// If "hound" is found, return 2.
-// If "hounddog" is found, return 3.
-// If non of these are found, return -1.
-
-void unget_string(streambuf *sb, char *str, int count)
-{
- for (str += count; -- count >= 0; )
- sb->sputbackc(*--str);
-}
-
-int my_scan(streambuf* sb)
-{
- char buffer[20];
- // Try reading "hounddog":
- int count;
- count = sb->sgetn(buffer, 8);
- if (count == 8 && strncmp(buffer, "hounddog", 8) == 0)
- return 3;
- // No, no "hounddog": Backup to 'fence' ...
- unget_string(sb, buffer, count);
- // ... and try reading "dog":
- count = sb->sgetn(buffer, 3);
- if (count == 3 && strncmp(buffer, "dog", 3) == 0)
- return 1;
- // No, no "dog" either: Backup to 'fence' ...
- unget_string(sb, buffer, count);
- // ... and try reading "hound":
- count = sb->sgetn(buffer, 5);
- if (count == 5 && strncmp(buffer, "hound", 5) == 0)
- return 2;
- // No, no "hound" either: Backup to 'fence' and signal failure.
- unget_string(sb, buffer, count);
- return -1;
-}
-
-int main(int argc, char **argv)
-{
- streambuf *sb = cin.rdbuf();
- if (argc > 1 && strncmp(argv[1], "-b", 2) == 0) {
- streambuf *ret;
- int buffer_size = atoi(&argv[1][2]);
- if (buffer_size == 0)
- ret = sb->setbuf(NULL, 0);
- else
- ret = sb->setbuf(new char[buffer_size], buffer_size);
- if (ret != sb)
- cerr << "Warning: cin.rdbuf()->setbuf failed!\n";
- }
- for (;;) {
- int code = my_scan(sb);
- int ch = sb->sbumpc();
- if (code == -1 && ch == EOF)
- break;
- int n = 0;
- while (ch != EOF && ch != '\n') {
- n++;
- ch = sb->sbumpc();
- };
- if (ch == EOF) {
- cout << "[Unexpected EOF]\n";
- break;
- }
- cout << "Code: " << code << " followed by " << n << " chars\n";
- }
-}
diff --git a/contrib/libg++/libio/tests/tFile.cc b/contrib/libg++/libio/tests/tFile.cc
deleted file mode 100644
index d8a1ee301fa6..000000000000
--- a/contrib/libg++/libio/tests/tFile.cc
+++ /dev/null
@@ -1,550 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-// This may look like C code, but it is really -*- C++ -*-
-
-/*
- * a few tests for streams
- *
- */
-
-#include <stream.h>
-#include <fstream.h>
-#ifndef _OLD_STREAMS
-#include <strstream.h>
-#include "unistd.h"
-#endif
-#include <SFile.h>
-#include <PlotFile.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-
-class record
-{
-public:
- char c; int i; double d;
-};
-
-ostream& operator<<(ostream& s, record& r)
-{
- return(s << "(i = " << r.i << " c = " << r.c << " d = " << r.d << ")");
-}
-
-void t1()
-{
- char ch;
-
- assert(cout.good());
- assert(cout.writable());
- assert(cout.is_open());
- cout << "Hello, world via cout\n";
- assert(cerr.good());
- assert(cerr.writable());
- assert(cerr.is_open());
- cerr << "Hello, world via cerr\n";
-
- assert(cin.good());
- assert(cin.readable());
- assert(cin.is_open());
-
- cout << "enter a char:"; cin >> ch;
- cout.put('c'); cout.put(' '); cout.put('='); cout.put(' ');
- cout.put('"'); cout.put(ch); cout << '"'; cout << char('\n');
- assert(cin.good());
- assert(cout.good());
-}
-
-void t2()
-{
- int i;
- short h;
- long l;
- float f;
- double d;
- char s[100];
-
- cout << "enter three integers (short, int, long):";
- cin >> h; cin >> i;
- // cin.scan("%ld", &l);
- cin >> l;
- cout << "first = " << h << " via dec = " << dec(h, 8) << "\n";
- cout << "second = " << i << form(" via form = %d = 0%o", i, i);
- cout.form(" via cout.form = %d = 0x%x\n", i, i);
- cout << "third = " << l << " via hex = " << hex(l) << "\n";
- assert(cin.good());
- assert(cout.good());
-
- cout << "enter a float then a double:"; cin >> f; cin >> d;
- cout << "first = " << f << "\n";
- cout << "second = " << d << "\n";
- assert(cin.good());
- assert(cout.good());
-
- cout << "enter 5 characters separated with spaces:"; cin >> s;
- cout << "first = " << s << "\n";
- cin.get(s, 100);
- cout << "rest = " << s << "\n";
-
- assert(cin.good());
-
- cin.width(10);
- cin >> s;
- cin.clear();
- cout << "A 10-character buffer: " << s << endl;
-
- assert(cout.good());
-
-}
-
-void t3()
-{
- char ch;
- cout << "\nMaking streams sout and sin...";
-#ifdef _OLD_STREAMS
- ostream sout("streamfile", io_writeonly, a_create);
-#else
- ofstream sout("streamfile");
-#endif
- assert(sout.good());
- assert(sout.is_open());
- assert(sout.writable());
- assert(!sout.readable());
- sout << "This file has one line testing output streams.\n";
- sout.close();
- assert(!sout.is_open());
-#ifdef _OLD_STREAMS
- istream sin("streamfile", io_readonly, a_useonly);
-#else
- ifstream sin("streamfile");
-#endif
- assert(sin.good());
- assert(sin.is_open());
- assert(!sin.writable());
- assert(sin.readable());
- cout << "contents of file:\n";
- while(sin >> ch) cout << ch;
- sin.close();
- assert(!sin.is_open());
-}
-
-
-void t4()
-{
- char s[100];
- char ch;
- int i;
-
- cout << "\nMaking File tf ... ";
-#ifdef _OLD_STREAMS
- File tf("tempfile", io_readwrite, a_create);
-#else
- fstream tf("tempfile", ios::in|ios::out|ios::trunc);
-#endif
- assert(tf.good());
- assert(tf.is_open());
- assert(tf.writable());
- assert(tf.readable());
- strcpy(s, "This is the first and only line of this file.\n");
-#ifdef _OLD_STREAMS
- tf.put(s);
- tf.seek(0);
-#else
- tf << s;
- tf.rdbuf()->seekoff(0, ios::beg);
-#endif
- tf.get(s, 100);
- assert(tf.good());
- cout << "first line of file:\n" << s << "\n";
- cout << "next char = ";
- tf.get(ch);
- cout << (int)ch;
- cout.put('\n');
- assert(ch == 10);
- strcpy(s, "Now there is a second line.\n");
- cout << "reopening tempfile, appending: " << s;
-#ifdef _OLD_STREAMS
- tf.open(tf.name(), io_appendonly, a_use);
-#else
- tf.close();
- tf.open("tempfile", ios::app);
-#endif
- assert(tf.good());
- assert(tf.is_open());
- assert(tf.writable());
- assert(!tf.readable());
-#ifdef _OLD_STREAMS
- tf.put(s);
- assert(tf.good());
- tf.open(tf.name(), io_readonly, a_use);
-#else
- tf << s;
- assert(tf.good());
- tf.close();
- tf.open("tempfile", ios::in);
-#endif
- tf.raw();
- assert(tf.good());
- assert(tf.is_open());
- assert(!tf.writable());
- assert(tf.readable());
- cout << "First 10 chars via raw system read after reopen for input:\n";
- read(tf.filedesc(), s, 10);
- assert(tf.good());
- for (i = 0; i < 10; ++ i)
- cout.put(s[i]);
- lseek(tf.filedesc(), 5, 0);
- cout << "\nContents after raw lseek to pos 5:\n";
- while ( (tf.get(ch)) && (cout.put(ch)) );
-#ifdef _OLD_STREAMS
- tf.remove();
-#else
- tf.close();
- unlink("tempfile");
-#endif
- assert(!tf.is_open());
-}
-
-void t5()
-{
- record r;
- int i;
- cout << "\nMaking SFile rf...";
-#ifdef _OLD_STREAMS
- SFile rf("recfile", sizeof(record), io_readwrite, a_create);
-#else
- SFile rf("recfile", sizeof(record), ios::in|ios::out|ios::trunc);
-#endif
- assert(rf.good());
- assert(rf.is_open());
- assert(rf.writable());
- assert(rf.readable());
- for (i = 0; i < 10; ++i)
- {
- r.c = i + 'a';
- r.i = i;
- r.d = (double)(i) / 1000.0;
- rf.put(&r);
- }
- assert(rf.good());
- cout << "odd elements of file in reverse order:\n";
- for (i = 9; i >= 0; i -= 2)
- {
- rf[i].get(&r);
- assert(r.c == i + 'a');
- assert(r.i == i);
- cout << r << "\n";
- }
- assert(rf.good());
-#ifdef _OLD_STREAMS
- rf.remove();
-#else
- rf.close();
- unlink("recfile");
-#endif
- assert(!rf.is_open());
-}
-
-void t6()
-{
- cout << "\nMaking PlotFile pf ...";
- static const char plot_name[] = "plot.out";
- PlotFile pf(plot_name);
- assert(pf.good());
- assert(pf.is_open());
- assert(pf.writable());
- assert(!pf.readable());
- pf.move(10,10);
- pf.label("Test");
- pf.circle(300,300,200);
- pf.line(100, 100, 500, 500);
- assert(pf.good());
-#ifdef _OLD_STREAMS
- cout << "(You may delete or attempt to plot " << pf.name() << ")\n";
-#else
- cout << "(You may delete or attempt to plot " << plot_name << ")\n";
-#endif
-}
-
-void t7()
-{
- char ch;
- static char t7_line1[] = "This is a string-based stream.\n";
- static char t7_line2[] = "With two lines.\n";
- char mybuf[60];
- char *bufp;
-#ifdef _OLD_STREAMS
- cout << "creating string-based ostream...\n";
- ostream strout(60, mybuf);
-#else
- cout << "creating ostrstream...\n";
- ostrstream strout(mybuf, 60);
-#endif
- assert(strout.good());
- assert(strout.writable());
- strout << t7_line1 << t7_line2 << ends;
- assert(strout.good());
- cout << "with contents:\n";
- bufp = strout.str();
- assert(bufp == mybuf);
- strout.rdbuf()->freeze(0); /* Should be a no-op */
- cout << mybuf;
-#ifdef _OLD_STREAMS
- cout << "using it to create string-based istream...\n";
- istream strin(strlen(mybuf), mybuf);
-#else
- cout << "using it to create istrstream...\n";
- istrstream strin(mybuf, strlen(mybuf));
-#endif
- assert(strin.good());
- assert(strin.readable());
- cout << "with contents:\n";
-#ifndef _OLD_STREAMS
- char line[100];
- strin.getline(line, 100);
- int line1_len = strlen(t7_line1);
- assert(strin.tellg() == line1_len);
- int line_len = strin.gcount();
- assert(line_len == line1_len);
- cout.write(line, line1_len - 1);
- cout << endl;
-#endif
- while (strin.get(ch)) cout.put(ch);
-
- strstream str1;
- strstream str2;
- str1 << "Testing string-based stream using strstream.\n";
- str1.seekg(0);
- for (;;) {
- int i = str1.get();
- if (i == EOF)
- break;
- str2 << (char)i;
- }
- str2 << ends;
- cout << str2.str();
-
- // This should make it overflow.
- strout << t7_line1;
- assert (strout.bad());
-}
-
-void t8()
-{
-#ifdef _OLD_STREAMS
- cout << "\nThe following file open should generate error message:";
- cout.flush();
- File ef("shouldnotexist", io_readonly, a_useonly);
-#else
- ifstream ef("shouldnotexist");
-#endif
- assert(!ef.good());
- assert(!ef.is_open());
-}
-
-void t9()
-{
- char ch;
- static char ffile_name[] = "ftmp";
- {
- cout << "\nMaking filebuf streams fout and fin...";
- filebuf foutbuf;
-#ifdef _OLD_STREAMS
- foutbuf.open(ffile_name, output);
-#else
- foutbuf.open(ffile_name, ios::out);
-#endif
- ostream fout(&foutbuf);
- assert(fout.good());
- assert(fout.is_open());
- assert(fout.writable());
- assert(!fout.readable());
- fout << "This file has one line testing output streams.\n";
-#ifdef _OLD_STREAMS
- fout.close();
- assert(!fout.is_open());
-#endif
- }
- filebuf finbuf;
-#ifdef _OLD_STREAMS
- finbuf.open(ffile_name, input);
-#else
- finbuf.open(ffile_name, ios::in);
-#endif
- istream fin(&finbuf);
- assert(fin.good());
- assert(fin.is_open());
- assert(!fin.writable());
- assert(fin.readable());
- cout << "contents of file:\n";
- while(fin >> ch) cout << ch;
-#ifndef _OLD_STREAMS
- cout << '\n';
-#endif
- fin.close();
- assert(!fin.is_open());
-}
-
-void t10()
-{
- int fileCnt = 3;
- char *file_name_pattern = "ftmp%d";
- char current_file_name[50];
- ifstream inFile;
- ofstream outFile;
- char c;
- int i;
-
- cout << '\n';
-
- // Write some files.
- for (i=0; i < fileCnt; i++) {
- sprintf(current_file_name, file_name_pattern, i);
- outFile.open(current_file_name, ios::out);
-
- if ( outFile.fail() )
- cerr << "File " << current_file_name
- << " can't be opened for output" << endl;
- else {
- outFile << "This is line 1 of " << current_file_name << '\n';
- outFile << "This is line 2 of " << current_file_name << endl;
- outFile.close();
- }
- }
-
- // Now read the files back in, and write then out to cout.
- for (i=0; i < fileCnt; i++) {
- sprintf(current_file_name, file_name_pattern, i);
- inFile.open(current_file_name, ios::in);
-
-
- if ( inFile.fail() )
- cerr << "File " << current_file_name
- << " can't be opened for input" << endl;
- else {
- while ( inFile.get (c))
- cout << c;
- cout << endl;
- inFile.close();
- }
- }
-}
-
-// Test form
-
-void t11()
-{
- int count1, count2;
- cout.form("%.2f+%.2f = %4.3e\n%n", 5.5, 6.25, 5.5+6.25, &count1);
- char *text = "Previous line has12345";
- char text_length_to_use = strlen(text) - 5;
- count2 = cout.rdbuf()->form("%-*.*s%3g characters\n",
- text_length_to_use + 1,
- text_length_to_use,
- text,
- (double)(count1-1));
- cout.form("%-*.*s%+d characters\n%n",
- text_length_to_use + 1, text_length_to_use, text,
- count2-1, &count1);
- assert(count1 == 33);
-}
-
-static void
-show_int (long val)
-{
- cout.setf(ios::showbase);
- cout << dec; cout.width (8); cout << val << "(dec) = ";
- cout << hex; cout.width (8); cout << (0xFFFF & val) << "(hex) = ";
- cout << oct; cout.width (8);
- cout << (0xFFFF & val) << "(oct) [showbase on]\n";
- cout.unsetf(ios::showbase);
- cout << dec; cout.width (8); cout << val << "(dec) = ";
- cout << hex; cout.width (8); cout << (0xFFFF & val) << "(hex) = ";
- cout << oct; cout.width (8);
- cout << (0xFFFF & val) << "(oct) [showbase off]\n";
-}
-
-void
-t12 ()
-{
- ios::fmtflags old_flags = cout.setf(ios::showpos);
- int fill = cout.fill('_');
- cout.unsetf(ios::uppercase);
- cout.setf(ios::internal, ios::adjustfield);
- show_int(34567);
- show_int(-34567);
- cout.setf(ios::right, ios::adjustfield);
- show_int(0);
- cout.setf(ios::uppercase);
- cout.unsetf(ios::showpos);
- show_int(34567);
- cout.setf(ios::left, ios::adjustfield);
- show_int(-34567);
- cout.fill(fill);
- show_int(0);
- cout.setf(old_flags,
- ios::adjustfield|ios::basefield
- |ios::showbase|ios::showpos|ios::uppercase);
-}
-
-main(int argc, char **argv)
-{
- if (argc > 1 && strncmp(argv[1], "-b", 2) == 0) {
- streambuf *sb = cout.rdbuf();
- streambuf *ret;
- int buffer_size = atoi(&argv[1][2]);
- if (buffer_size == 0)
- ret = sb->setbuf(NULL, 0);
- else
- ret = sb->setbuf(new char[buffer_size], buffer_size);
- if (ret != sb)
- cerr << "Warning: cout.rdbuf()->setbuf failed!\n";
- }
- t1();
- t2();
- t3();
- t4();
- t5();
- t6();
- t7();
- t9();
- t8();
- t10();
- t11();
- t12();
-
- cout << "Final names & states:\n";
-#ifdef _OLD_STREAMS
- cout << "cin: " << cin.name() << "\t" << cin.rdstate() << "\n";
- cout << "cout: " << cout.name() << "\t" << cout.rdstate() << "\n";
- cout << "cerr: " << cerr.name() << "\t" << cerr.rdstate() << "\n";
-#else
- cout << "cin: " << "(stdin)" << "\t" << cin.rdstate() << "\n";
- cout << "cout: " << "(stdout)" << "\t" << cout.rdstate() << "\n";
- cout << "cerr: " << "(stderr)" << "\t" << cerr.rdstate() << "\n";
-#endif
- cout << "\nend of test.\n";
-}
diff --git a/contrib/libg++/libio/tests/tFile.exp b/contrib/libg++/libio/tests/tFile.exp
deleted file mode 100644
index 154cd24dc0bb..000000000000
--- a/contrib/libg++/libio/tests/tFile.exp
+++ /dev/null
@@ -1,75 +0,0 @@
-Hello, world via cout
-Hello, world via cerr
-enter a char:c = "a"
-enter three integers (short, int, long):first = 123 via dec = 123
-second = 4567 via form = 4567 = 010727 via cout.form = 4567 = 0x11d7
-third = 89012 via hex = 15bb4
-enter a float then a double:first = 123.456
-second = -0.012
-enter 5 characters separated with spaces:first = 1
-rest = 2 3 4 5
-A 10-character buffer: abcdefghi
-
-Making streams sout and sin...contents of file:
-Thisfilehasonelinetestingoutputstreams.
-Making File tf ... first line of file:
-This is the first and only line of this file.
-next char = 10
-reopening tempfile, appending: Now there is a second line.
-First 10 chars via raw system read after reopen for input:
-This is th
-Contents after raw lseek to pos 5:
-is the first and only line of this file.
-Now there is a second line.
-
-Making SFile rf...odd elements of file in reverse order:
-(i = 9 c = j d = 0.009)
-(i = 7 c = h d = 0.007)
-(i = 5 c = f d = 0.005)
-(i = 3 c = d d = 0.003)
-(i = 1 c = b d = 0.001)
-
-Making PlotFile pf ...(You may delete or attempt to plot plot.out)
-creating ostrstream...
-with contents:
-This is a string-based stream.
-With two lines.
-using it to create istrstream...
-with contents:
-This is a string-based stream.
-With two lines.
-Testing string-based stream using strstream.
-
-Making filebuf streams fout and fin...contents of file:
-Thisfilehasonelinetestingoutputstreams.
-
-This is line 1 of ftmp0
-This is line 2 of ftmp0
-
-This is line 1 of ftmp1
-This is line 2 of ftmp1
-
-This is line 1 of ftmp2
-This is line 2 of ftmp2
-
-5.50+6.25 = 1.175e+01
-Previous line has 21 characters
-Previous line has +32 characters
-+__34567(dec) = 0x__8707(hex) = _0103407(oct) [showbase on]
-+__34567(dec) = ____8707(hex) = __103407(oct) [showbase off]
--__34567(dec) = 0x__78f9(hex) = __074371(oct) [showbase on]
--__34567(dec) = ____78f9(hex) = ___74371(oct) [showbase off]
-______+0(dec) = _____0x0(hex) = _______0(oct) [showbase on]
-______+0(dec) = _______0(hex) = _______0(oct) [showbase off]
-___34567(dec) = __0X8707(hex) = _0103407(oct) [showbase on]
-___34567(dec) = ____8707(hex) = __103407(oct) [showbase off]
--34567__(dec) = 0X78F9__(hex) = 074371__(oct) [showbase on]
--34567__(dec) = 78F9____(hex) = 74371___(oct) [showbase off]
-0 (dec) = 0X0 (hex) = 0 (oct) [showbase on]
-0 (dec) = 0 (hex) = 0 (oct) [showbase off]
-Final names & states:
-cin: (stdin) 0
-cout: (stdout) 0
-cerr: (stderr) 0
-
-end of test.
diff --git a/contrib/libg++/libio/tests/tFile.inp b/contrib/libg++/libio/tests/tFile.inp
deleted file mode 100644
index 5b821ef072be..000000000000
--- a/contrib/libg++/libio/tests/tFile.inp
+++ /dev/null
@@ -1,5 +0,0 @@
-a
-123 4567 89012
-123.456 -1.2e-2
-1 2 3 4 5
-abcdefghijklmnop
diff --git a/contrib/libg++/libio/tests/tfformat.c b/contrib/libg++/libio/tests/tfformat.c
deleted file mode 100644
index f0f5ccf21777..000000000000
--- a/contrib/libg++/libio/tests/tfformat.c
+++ /dev/null
@@ -1,4145 +0,0 @@
-#ifdef TEST_LIBIO
-#include <iostdio.h>
-#else
-#ifdef __cplusplus
-#include <strstream.h>
-#else
-#include <stdio.h>
-#endif
-#endif /* !TEST_LIBIO */
-
-/* Tests taken from Cygnus C library. */
-
-typedef struct
-{
- int line;
- double value;
- char *result;
- char *format_string;
-} sprint_double_type;
-
-sprint_double_type sprint_doubles[] =
-{
-__LINE__, 30.3, "< +30.3>", "<%+15.10g>",
-__LINE__, 10.0, "<10.00>", "<%5.2f>",
-
-__LINE__, 1.002121970718271e+05, "100212.19707 ", "%0-15.5f",
-__LINE__, -1.002121970718271e+05, "-100212.19707 ", "%0-15.5f",
-__LINE__, 1.002121970718271e+05, "000100212.19707", "%015.5f",
-__LINE__, -1.002121970718271e+05, "-00100212.19707", "%015.5f",
-__LINE__, 1.002121970718271e+05, "+00100212.19707", "%+015.5f",
-__LINE__, -1.002121970718271e+05, "-00100212.19707", "%+015.5f",
-__LINE__, 1.002121970718271e+05, " 00100212.19707", "% 015.5f",
-__LINE__, -1.002121970718271e+05, "-00100212.19707", "% 015.5f",
-__LINE__, 1.002121970718271e+05, "+100212.19707 ", "%+-15.5f",
-__LINE__, -1.002121970718271e+05, "-100212.19707 ", "%+-15.5f",
-
-__LINE__, -1.002121970718271e+29, "-1.0E+29", "%.1E",
-__LINE__, -1.002126048612756e-02, "-1.002126E-02", "%+#E",
-__LINE__, -1.002653755271637e+00, "-1.00265", "%G",
-__LINE__, -1.003238744365917e-23, "-0.00", "%4.2f",
-__LINE__, -1.005084840877781e-29, " -0", "%4.f",
-__LINE__, -1.005362549674427e+01, "-10.0536", "%#g",
-__LINE__, -1.005915042991691e-17, "-1.00592E-17", "%G",
-__LINE__, -1.007829874228503e-18, "-1.00783e-18", "%.7g",
-__LINE__, -1.007829874228503e-18, "-1.007830e-18", "%#.7g",
-__LINE__, -1.009390937771849e+15, "-1009390937771848.628657", "%+f",
-__LINE__, -1.010679382726182e-29, "-0.0000000", "%.7f",
-__LINE__, -1.010691853346650e+13, "-10106918533466.497934", "%+f",
-__LINE__, -1.013412912122286e-22, "-1.01E-22", "%.2E",
-__LINE__, -1.019269582113858e-25, " -0", "%4.0f",
-__LINE__, -1.019886033368556e+24, "-1.019886E+24", "%+.7G",
-__LINE__, -1.021037413548719e+02, "-102.103741", "%f",
-__LINE__, -1.023833576089065e+26, "-1.023834E+26", "%+E",
-__LINE__, -1.024736652408627e+10, "-10247366524.086265", "%+f",
-__LINE__, -1.025439198495476e+09, "-1.02544e+09", "%+g",
-__LINE__, -1.027080247585776e-04, "-0.0001027", "%6.7f",
-__LINE__, -1.028096307262016e+18, "-1.0281E+18", "%3G",
-__LINE__, -1.029604290697901e-02, "-0.010296", "%g",
-__LINE__, -1.034347730570491e+16, "-10343477305704908.975059", "%+f",
-__LINE__, -1.034663325049286e+22, "-1.0E+22", "%#.1E",
-__LINE__, -1.034843152721857e-14, " -0", "%6.f",
-__LINE__, -1.036082122299529e-29, "-1.04e-29", "%4.3g",
-__LINE__, -1.037213662365954e-09, "-1e-09", "%3.e",
-__LINE__, -1.038563976775690e-12, "-0.000000", "%f",
-__LINE__, -1.040910158681323e-02, "-0.0104091", "%+G",
-__LINE__, -1.044680094714482e-20, "-1.04468E-20", "%G",
-__LINE__, -1.044990054091126e+24, "-1.044990E+24", "%+E",
-__LINE__, -1.045693871096982e+11, "-1.045694e+11", "%+e",
-__LINE__, -1.045714133591312e-04, "-0.000104571", "%+#3g",
-__LINE__, -1.046215079103016e-15, "-1.04622e-15", "%g",
-__LINE__, -1.046285293993789e-18, "-1.04629E-18", "%+4G",
-__LINE__, -1.046306092899333e-06, "-0.00", "%0.2f",
-__LINE__, -1.047308973649206e-22, "-1.05E-22", "%+1.3G",
-__LINE__, -1.047369032507755e+01, "-1.047369E+01", "%E",
-__LINE__, -1.048986365562919e-21, "-1.05E-21", "%+.2E",
-__LINE__, -1.049530193156793e-17, "-1.04953E-17", "%+G",
-__LINE__, -1.050073419263768e+25, "-1.05007e+25", "%g",
-__LINE__, -1.051739652002504e-28, "-0.000000", "%+f",
-__LINE__, -1.054493420082636e+21, "-1.0545e+21", "%#5.4e",
-__LINE__, -1.055867291029098e+18, "-1.05587e+18", "%g",
-__LINE__, -1.056514389757866e-16, "-1.05651E-16", "%5.6G",
-__LINE__, -1.057180924868704e+15, "-1057180924868704", "%4.f",
-__LINE__, -1.058455468395683e-23, "-1.05846e-23", "%g",
-__LINE__, -1.062560982393212e+08, "-1.06256e+08", "%g",
-__LINE__, -1.063365829241138e-10, "-1.063366e-10", "%+e",
-__LINE__, -1.063568908667280e-19, "-1.06357E-19", "%+G",
-__LINE__, -1.063734263253492e-13, "-0.000000", "%0f",
-__LINE__, -1.064472689765495e-13, "-1E-13", "%4.0G",
-__LINE__, -1.067192610000129e-25, "-1.06719E-25", "%G",
-__LINE__, -1.068401334996592e-12, "-0.0000000", "%+.7f",
-__LINE__, -1.069012628653724e-13, "-1.069013E-13", "%+.7G",
-__LINE__, -1.069451976810790e+16, "-10694519768107904.056365", "%f",
-__LINE__, -1.069568935323556e+17, "-1.06957e+17", "%g",
-__LINE__, -1.071351044854107e-29, "-1.07135e-29", "%g",
-__LINE__, -1.072274197526185e-21, "-1E-21", "%1.G",
-__LINE__, -1.073875921752995e+23, "-1E+23", "%5.E",
-__LINE__, -1.074835151152265e-12, "-1.0748e-12", "%1.5g",
-__LINE__, -1.075171047088241e-19, "-1.07517E-19", "%#G",
-__LINE__, -1.076258826412760e+22, "-1.076259e+22", "%+e",
-__LINE__, -1.076365103160401e+06, "-1.07637E+06", "%+4.6G",
-__LINE__, -1.076817750454633e+08, "-1e+08", "%4.g",
-__LINE__, -1.078615405755685e-30, "-1e-30", "%4.g",
-__LINE__, -1.078629622917468e-25, "-1.078630e-25", "%e",
-__LINE__, -1.079352432833170e+11, "-107935243283", "%+2.f",
-__LINE__, -1.081431147440215e+16, "-10814311474402147.439378", "%+f",
-__LINE__, -1.083042116905339e-16, "-1.083e-16", "%.5g",
-__LINE__, -1.085351710708553e-10, "-1.085e-10", "%1.4g",
-__LINE__, -1.085796045618276e+07, "-1.085796e+07", "%e",
-__LINE__, -1.087398259981007e+22, "-1.0874e+22", "%g",
-__LINE__, -1.087986044402224e-11, "-1.087986e-11", "%e",
-__LINE__, -1.090451848762709e-02, "-1.090452e-02", "%e",
-__LINE__, -1.091463236899737e+11, "-1.091463E+11", "%#E",
-__LINE__, -1.091617921737384e-29, "-1.09162e-29", "%3g",
-__LINE__, -1.092049328579047e-17, "-1.092049E-17", "%E",
-__LINE__, -1.093647615472090e+06, "-1093647.61547", "%6.5f",
-__LINE__, -1.094133175602384e-08, "-1.1E-08", "%0.1E",
-__LINE__, -1.095397916728214e-23, "-1e-23", "%6.e",
-__LINE__, -1.098958790437321e+02, "-109.895879", "%+#f",
-__LINE__, -1.100194638181594e-20, "-1.100195e-20", "%e",
-__LINE__, -1.102174253534260e+05, "-1.1e+05", "%2.3g",
-__LINE__, -1.102890180316350e-12, "-1.10289e-12", "%+g",
-__LINE__, -1.105582337418378e+00, "-1.11", "%3.3g",
-__LINE__, -1.110515122647056e+04, "-1.E+04", "%#0.G",
-__LINE__, -1.111365895262625e-18, "-1e-18", "%0.g",
-__LINE__, -1.112010622677495e+04, "-11120.1", "%g",
-__LINE__, -1.112580043156699e-23, "-1.11258e-23", "%1g",
-__LINE__, -1.112829057091303e+08, "-1.11283e+08", "%+2g",
-__LINE__, -1.115019046200472e+18, "-1.1150190e+18", "%+#.7e",
-__LINE__, -1.118078332268016e-13, "-1.12E-13", "%1.3G",
-__LINE__, -1.119113571963886e+08, "-1.119114e+08", "%e",
-__LINE__, -1.120102397563448e-15, "-1.12e-15", "%.4g",
-__LINE__, -1.120707480791434e-19, "-1.12071e-19", "%g",
-__LINE__, -1.124243676139007e-07, "-0.000000", "%f",
-__LINE__, -1.125025214608798e+15, "-1.12503E+15", "%0G",
-__LINE__, -1.126074395136447e+06, "-1E+06", "%+.0G",
-__LINE__, -1.127203019940870e-06, "-0.000001", "%+#7f",
-__LINE__, -1.130577648480677e+01, "-1.130578e+01", "%e",
-__LINE__, -1.131469694425240e-11, "-1.13147e-11", "%#0.6g",
-__LINE__, -1.132225023239752e+02, "-113.223", "%G",
-__LINE__, -1.133702113050128e+20, "-1E+20", "%+3.E",
-__LINE__, -1.135529466224404e-13, "-1.13553e-13", "%#g",
-__LINE__, -1.137587210063004e+21, "-1e+21", "%.1g",
-__LINE__, -1.140765637106361e-21, "-1.1e-21", "%+.1e",
-__LINE__, -1.141182595083699e-18, "-0.000000", "%f",
-__LINE__, -1.141695709120972e+00, "-1.1417", "%3G",
-__LINE__, -1.143199141708028e+18, "-1143199141708027833", "%2.f",
-__LINE__, -1.146712902056139e+21, "-1146712902056139071760.298975", "%f",
-__LINE__, -1.146837903839073e-02, " -0.0", "%+5.1f",
-__LINE__, -1.147363016107446e+10, "-1.14736e+10", "%+7g",
-__LINE__, -1.149575523465052e+20, "-114957552346505220697.28140", "%+.5f",
-__LINE__, -1.152748955392589e+13, "-1.15275E+13", "%G",
-__LINE__, -1.152751106015483e-17, "-1E-17", "%+3.E",
-__LINE__, -1.155539139258226e-18, "-1.2e-18", "%+.2g",
-__LINE__, -1.157089280563492e+20, "-1.15709e+20", "%g",
-__LINE__, -1.161217745859779e+19, "-1.161218E+19", "%E",
-__LINE__, -1.162293536734798e+10, "-11622935367.347980", "%f",
-__LINE__, -1.162629909468603e+20, "-1.16E+20", "%.3G",
-__LINE__, -1.164979155838631e+24, "-1.16498E+24", "%G",
-__LINE__, -1.165103052644816e-20, " -1e-20", "%+7.g",
-__LINE__, -1.166448459023264e-08, "-0.000000", "%f",
-__LINE__, -1.167694506705309e+28, "-1e+28", "%.1g",
-__LINE__, -1.169901754818745e-28, "-0.000000", "%+f",
-__LINE__, -1.170330336216446e+08, " -1e+08", "%7.g",
-__LINE__, -1.170946623214213e-17, "-1.17095E-17", "%G",
-__LINE__, -1.174581596799302e+27, "-1.174582e+27", "%+e",
-__LINE__, -1.174763473995155e-28, "-1E-28", "%.1G",
-__LINE__, -1.175885640508038e-23, "-1E-23", "%+.0E",
-__LINE__, -1.177268411775439e-05, "-0.000012", "%#2.6f",
-__LINE__, -1.177739669428001e-30, "-1.17774E-30", "%G",
-__LINE__, -1.178059639880544e-02, "-0.0117806", "%+.7G",
-__LINE__, -1.178793300854446e-13, "-1.2E-13", "%+#0.2G",
-__LINE__, -1.179629345138058e-04, "-0.000118", "%0.3g",
-__LINE__, -1.180730292213358e-25, "-1.18073e-25", "%g",
-__LINE__, -1.180766261654697e+02, "-118.077", "%3g",
-__LINE__, -1.181880261069391e-29, "-1.181880e-29", "%+#e",
-__LINE__, -1.183752810063514e-09, "-1.18375e-09", "%#g",
-__LINE__, -1.184191742443406e-21, "-1.184192e-21", "%e",
-__LINE__, -1.184859760488406e-26, "-1.18486E-26", "%G",
-__LINE__, -1.187276828720072e-29, "-1.18728E-29", "%G",
-__LINE__, -1.187992907205195e-04, "-1.187993E-04", "%E",
-__LINE__, -1.190586192763405e-28, "-1.E-28", "%#1.E",
-__LINE__, -1.192104053032086e+02, "-119.21", "%G",
-__LINE__, -1.192917884333569e+26, "-1.192918E+26", "%E",
-__LINE__, -1.195900753509801e+22, "-1.1959e+22", "%g",
-__LINE__, -1.196559413116537e-28, "-0.000000", "%6.6f",
-__LINE__, -1.197534588732952e+12, "-1.19753e+12", "%#g",
-__LINE__, -1.200279514790649e-25, "-0.0000", "%0.4f",
-__LINE__, -1.203806667944635e+10, "-1.2038067E+10", "%5.7E",
-__LINE__, -1.204344885974736e+07, "-1.204E+07", "%#2.4G",
-__LINE__, -1.205668007693083e+00, "-1.20567", "%g",
-__LINE__, -1.205898515218947e-11, "-1.2059e-11", "%+g",
-__LINE__, -1.206787414909373e-05, "-1.2e-05", "%2.2g",
-__LINE__, -1.207905830366447e+15, "-1.207906e+15", "%6.7g",
-__LINE__, -1.208067010597729e-17, "-1.208067e-17", "%5e",
-__LINE__, -1.210189135822574e+01, "-12", "%+2.0f",
-__LINE__, -1.211560695948122e+10, "-1.21156e+10", "%+g",
-__LINE__, -1.214003025273234e-18, "-1.214e-18", "%+g",
-__LINE__, -1.214096815259005e+17, "-121409681525900459.142520", "%f",
-__LINE__, -1.214699041716797e-14, "-1.2147E-14", "%G",
-__LINE__, -1.215061611919443e+14, "-121506161191944.306310", "%+#f",
-__LINE__, -1.217491221065185e+27, "-1.21749e+27", "%g",
-__LINE__, -1.218538401534388e-11, "-1.218538e-11", "%#e",
-__LINE__, -1.218810085883466e+16, "-1e+16", "%+.1g",
-__LINE__, -1.219422688169801e+08, "-1.219423e+08", "%e",
-__LINE__, -1.220473194407651e-14, "-1.2205E-14", "%1.5G",
-__LINE__, -1.220824440193375e-02, "-0.012208", "%4f",
-__LINE__, -1.221520240637007e+13, "-1.221520E+13", "%1E",
-__LINE__, -1.221894719843486e+29, "-1.22189E+29", "%G",
-__LINE__, -1.223020108610281e+25, "-1.22302E+25", "%G",
-__LINE__, -1.223203206227728e-02, "-0.012232", "%G",
-__LINE__, -1.225661737076919e-15, "-1.22566E-15", "%G",
-__LINE__, -1.228147221003795e-08, "-1.22815E-08", "%G",
-__LINE__, -1.228298534591771e+20, "-1.22830E+20", "%#G",
-__LINE__, -1.228469080229780e-02, "-0.012285", "%0f",
-__LINE__, -1.229161950699222e-09, "-1e-09", "%0.e",
-__LINE__, -1.231294820136559e-17, "-1.231295E-17", "%1.7G",
-__LINE__, -1.232588663406698e-21, "-1E-21", "%+0.G",
-__LINE__, -1.233381256982191e-26, "-0.000000", "%f",
-__LINE__, -1.233435864835578e+14, "-1.23344e+14", "%#g",
-__LINE__, -1.237409567806099e-25, "-1.23741E-25", "%#G",
-__LINE__, -1.238244697758558e-02, "-1.238245e-02", "%7e",
-__LINE__, -1.239393163123284e+26, "-1.23939e+26", "%+g",
-__LINE__, -1.240484781756132e-18, "-1E-18", "%4.E",
-__LINE__, -1.241420286838750e+23, "-1E+23", "%2.E",
-__LINE__, -1.243781122052343e-18, "-1.243781e-18", "%+e",
-__LINE__, -1.244421506844779e+07, "-1.244422E+07", "%+6E",
-__LINE__, -1.245754054764741e-21, "-1e-21", "%5.0g",
-__LINE__, -1.245992228426733e-24, "-0.000000", "%f",
-__LINE__, -1.246498277739883e-12, "-0.0000000", "%5.7f",
-__LINE__, -1.247130891343776e-18, "-1.24713E-18", "%G",
-__LINE__, -1.247309461703025e-03, "-0.0012473", "%#5.5G",
-__LINE__, -1.248139162966407e-29, "-1.e-29", "%+#6.g",
-__LINE__, -1.249756153623776e+08, "-1.249756e+08", "%e",
-__LINE__, -1.250899983565585e-10, "-1.2509e-10", "%5g",
-__LINE__, -1.250957368798327e+19, "-1.25096E+19", "%0G",
-__LINE__, -1.252630814464822e-02, "-0.012526", "%+f",
-__LINE__, -1.253076368257011e-28, "-0.000000", "%f",
-__LINE__, -1.254243507039370e+01, "-1.254244e+01", "%e",
-__LINE__, -1.257605614492298e-12, "-1.257606E-12", "%6.7G",
-__LINE__, -1.258041911573120e+06, "-1258041.911573", "%+f",
-__LINE__, -1.261670983426507e-25, "-0.00", "%.2f",
-__LINE__, -1.263216883336562e-14, "-1.26322e-14", "%g",
-__LINE__, -1.266846944498751e-15, "-1e-15", "%0.g",
-__LINE__, -1.266977908502326e+06, "-1266978", "%+1.f",
-__LINE__, -1.267006162870084e-23, "-1.267006e-23", "%e",
-__LINE__, -1.269144609375931e+01, "-1.269145e+01", "%+e",
-__LINE__, -1.269458714257904e+25, "-1.26946E+25", "%G",
-__LINE__, -1.276697325772662e-02, "-0.0128", "%7.3G",
-__LINE__, -1.278855081807602e+15, "-1278855081807601.87891", "%#0.5f",
-__LINE__, -1.278966821639612e+20, "-1.278967E+20", "%3E",
-__LINE__, -1.281942705258106e+03, "-1281.94", "%+G",
-__LINE__, -1.282331291499203e+14, "-128233129149920.266343", "%+f",
-__LINE__, -1.285125739341808e-28, "-1.28513e-28", "%g",
-__LINE__, -1.285700693704978e+11, "-1.285701E+11", "%E",
-__LINE__, -1.286574096459251e+28, "-1.287E+28", "%6.4G",
-__LINE__, -1.287967889247240e+03, "-1287.97", "%G",
-__LINE__, -1.288913808801319e-27, "-1.3e-27", "%7.1e",
-__LINE__, -1.289147517760377e-18, "-1.289148E-18", "%E",
-__LINE__, -1.289355006600107e+23, "-1.28936E+23", "%+G",
-__LINE__, -1.291232014623979e+01, "-1.29123E+01", "%+.5E",
-__LINE__, -1.293658562875966e-18, "-1.29366e-18", "%+g",
-__LINE__, -1.294982911983638e-19, "-1.29498E-19", "%#G",
-__LINE__, -1.296123363481695e-13, "-1.296123E-13", "%E",
-__LINE__, -1.296632862070602e-20, "-1.29663e-20", "%+g",
-__LINE__, -1.297801639022777e+23, "-129780163902277735132884.11777", "%#0.5f",
-__LINE__, -1.297886574534611e+16, "-1.297887e+16", "%+e",
-__LINE__, -1.300588216308401e+11, "-1.30e+11", "%.2e",
-__LINE__, -1.301296100909062e-10, "-1.3013e-10", "%+g",
-__LINE__, -1.303144244306468e-07, "-1.303144E-07", "%E",
-__LINE__, -1.304096315024042e-20, "-1.3041E-20", "%+G",
-__LINE__, -1.304817970675085e+16, "-1.304818E+16", "%+E",
-__LINE__, -1.304870304632683e-15, " -1e-15", "%7.g",
-__LINE__, -1.305213586757638e-18, "-1.30521e-18", "%g",
-__LINE__, -1.306880734910465e-22, "-1.306881E-22", "%E",
-__LINE__, -1.308964092631446e-23, "-1.30896e-23", "%g",
-__LINE__, -1.312070555198201e+26, "-131207055519820126043839537", "%+7.f",
-__LINE__, -1.312511609151056e-30, "-1.312512E-30", "%#E",
-__LINE__, -1.313087359008389e-23, "-0.000000", "%+f",
-__LINE__, -1.316948423042059e-02, "-1.316948E-02", "%+E",
-__LINE__, -1.317080882577385e+29, "-1.317E+29", "%+.4G",
-__LINE__, -1.317514598984346e+24, "-1.317515e+24", "%e",
-__LINE__, -1.317817551125923e-21, "-1.31782E-21", "%+G",
-__LINE__, -1.319603985988120e+29, "-131960398598811989856471882376.354188", "%f",
-__LINE__, -1.328850458671907e+06, "-1e+06", "%.0e",
-__LINE__, -1.328945346449817e-23, "-1.328945e-23", "%+e",
-__LINE__, -1.330146584094221e-08, "-1e-08", "%+5.g",
-__LINE__, -1.332609617892115e+00, "-1.33261", "%2.7G",
-#ifndef __PCCNECV70__
-__LINE__, -1.332751724965715e+22, "-13327517249657150344432.920974", "%f",
-__LINE__, -1.333194379353273e-19, "-0.000000", "%f",
-__LINE__, -1.334304387932777e-06, "-1.334304e-06", "%e",
-__LINE__, -1.334306581172082e-05, "-1.3e-05", "%+1.2g",
-__LINE__, -1.335283510893438e-05, " -1E-05", "%7.G",
-__LINE__, -1.337939692108373e+11, "-1.33794e+11", "%+4g",
-__LINE__, -1.339117288874809e-03, "-0.001", "%1.3f",
-__LINE__, -1.340100588141492e+27, "-1.340101E+27", "%E",
-__LINE__, -1.341953272572953e-19, "-0.000000", "%+f",
-__LINE__, -1.343058354301620e-02, "-1.343058e-02", "%e",
-__LINE__, -1.346662720871543e+22, "-1.34666E+22", "%#G",
-__LINE__, -1.354010578652210e-02, "-0.0135401", "%#g",
-__LINE__, -1.354066549307666e-12, " -0", "%+6.f",
-__LINE__, -1.355284719365947e+21, "-1.35528e+21", "%g",
-__LINE__, -1.356326532145087e+29, "-1E+29", "%4.G",
-__LINE__, -1.357278618897291e+19, "-13572786188972911780.581398", "%f",
-__LINE__, -1.357537331348202e-10, "-0.000", "%+.3f",
-__LINE__, -1.360011287595868e-10, "-0.000000", "%f",
-__LINE__, -1.360506902899232e+16, "-13605069028992320.", "%#5.f",
-__LINE__, -1.361102570277000e+10, "-1.3611E+10", "%G",
-__LINE__, -1.362601255900219e+07, "-1.363E+07", "%.4G",
-__LINE__, -1.366078182354771e+10, "-1.36608E+10", "%0G",
-__LINE__, -1.366667926615127e+08, "-136666792.661513", "%f",
-__LINE__, -1.367162823743231e-12, "-0.000000", "%#f",
-__LINE__, -1.371523037550709e+09, "-1.37152e+09", "%+g",
-__LINE__, -1.374328925986197e-17, "-1.37e-17", "%.2e",
-__LINE__, -1.374995603898421e-26, "-1.375e-26", "%+g",
-__LINE__, -1.376726539375688e+09, "-1.376727E+09", "%+E",
-__LINE__, -1.378351117694958e-13, "-0.000000", "%f",
-__LINE__, -1.378514699313619e-14, "-1.378515e-14", "%e",
-__LINE__, -1.379347588942324e-23, "-1.4e-23", "%+.1e",
-__LINE__, -1.380380583822272e-17, "-0.000000", "%+f",
-__LINE__, -1.381658659947406e+19, "-1.38166e+19", "%g",
-__LINE__, -1.382775316390237e+29, "-138277531639023653298181670834.3104", "%+#7.4f",
-__LINE__, -1.383541138922400e+00, "-1.383541E+00", "%E",
-__LINE__, -1.384625301445090e+01, "-13.8", "%+.3g",
-__LINE__, -1.386844086284027e-13, "-1.38684E-13", "%+G",
-__LINE__, -1.386930516448650e-28, "-1.386931E-28", "%E",
-__LINE__, -1.387444896054260e-07, "-1.38744E-07", "%G",
-__LINE__, -1.389685107980798e+22, "-1.38969E+22", "%G",
-__LINE__, -1.390880300369347e+03, "-1390.880300", "%f",
-__LINE__, -1.391423370198150e-17, "-1E-17", "%+2.G",
-__LINE__, -1.394441767471218e-09, "-1.394442e-09", "%e",
-__LINE__, -1.396275525062527e-20, "-1.39628E-20", "%G",
-__LINE__, -1.397045957455157e+24, "-1E+24", "%.0E",
-__LINE__, -1.397458546930799e+21, "-1397458546930798526375.383517", "%f",
-__LINE__, -1.397584578988941e-14, "-1.39758e-14", "%5g",
-__LINE__, -1.397789397300823e+09, "-1.398e+09", "%.4g",
-__LINE__, -1.398167472294874e+21, "-1.398167E+21", "%+7E",
-__LINE__, -1.398809636136688e-16, "-0.000000", "%+f",
-__LINE__, -1.399545335304119e+26, "-139954533530411872277454676.805064", "%#5f",
-__LINE__, -1.400102603335755e+20, "-140010260333575509150.705329", "%2f",
-__LINE__, -1.401212746235235e+04, "-1.401213e+04", "%e",
-__LINE__, -1.404409427681801e+07, "-1E+07", "%4.E",
-__LINE__, -1.406018114263948e-25, "-1e-25", "%3.e",
-__LINE__, -1.406245608096877e-06, "-1.4e-06", "%+.1e",
-__LINE__, -1.410697254683835e-10, "-1.410697e-10", "%e",
-__LINE__, -1.410739097553846e+25, "-1.410739E+25", "%+E",
-__LINE__, -1.410850631189577e+04, "-14108.5", "%.6g",
-__LINE__, -1.411680434455781e+28, "-14116804344557807304738616949.180141", "%f",
-__LINE__, -1.413309465660099e-27, "-1.413309E-27", "%+#E",
-__LINE__, -1.418468741386300e+09, "-1418468741.386300", "%f",
-__LINE__, -1.420277110892909e+06, "-1.42028e+06", "%1g",
-__LINE__, -1.420417889565590e-17, "-1.42E-17", "%.2E",
-__LINE__, -1.421098212056305e+08, "-1.421098e+08", "%4e",
-__LINE__, -1.421792812798986e-20, " -1E-20", "%7.G",
-__LINE__, -1.423675488122461e+18, "-1423675488122461363.360571", "%f",
-__LINE__, -1.423810545840653e+15, "-1E+15", "%3.E",
-__LINE__, -1.424242673476368e-15, "-1.424243e-15", "%e",
-__LINE__, -1.427847435688733e-01, "-1.427847E-01", "%E",
-__LINE__, -1.433897734612555e-04, "-0.0001", "%3.g",
-__LINE__, -1.434537754075696e-24, "-1.435E-24", "%+0.3E",
-__LINE__, -1.434774864809324e-24, "-1E-24", "%2.E",
-__LINE__, -1.435583851565142e-11, "-1E-11", "%.0E",
-__LINE__, -1.438791024010112e+11, "-1.43879e+11", "%#.6g",
-__LINE__, -1.439267565343777e+27, "-1.4e+27", "%2.1e",
-__LINE__, -1.439440602670449e+02, "-143.944", "%G",
-__LINE__, -1.439494412124925e+13, "-14394944121249.251268", "%f",
-__LINE__, -1.440032823245152e+10, "-14400328232.451516", "%f",
-__LINE__, -1.440174494009562e-08, "-0.000000", "%7f",
-__LINE__, -1.440827804010568e+07, "-1.E+07", "%#6.1G",
-__LINE__, -1.442760907195336e+09, "-1.44276E+09", "%+5G",
-__LINE__, -1.444655304181403e+10, "-14446553041.814035", "%7f",
-__LINE__, -1.444995766787036e+04, "-14450", "%5G",
-__LINE__, -1.445078682874535e-13, "-1E-13", "%3.E",
-__LINE__, -1.446781469662328e+01, "-14.4678", "%G",
-__LINE__, -1.447795251395321e-04, "-0.000145", "%+f",
-__LINE__, -1.448193079247108e-02, "-0.014", "%4.2G",
-__LINE__, -1.449552967961345e+14, "-1E+14", "%1.E",
-__LINE__, -1.451269763513571e+10, "-14512697635.135705", "%6f",
-__LINE__, -1.451843176990292e+12, "-1e+12", "%1.g",
-__LINE__, -1.452631405935931e+06, "-1.452631e+06", "%e",
-__LINE__, -1.452753650285897e+21, "-1452753650285897091265.496783", "%5f",
-__LINE__, -1.453811512433860e-05, "-1e-05", "%+6.g",
-__LINE__, -1.454071430557372e+13, "-1.4541E+13", "%.4E",
-__LINE__, -1.455956079562999e+03, "-1455.96", "%G",
-__LINE__, -1.459712196146602e-17, "-1.45971e-17", "%g",
-__LINE__, -1.461857733495947e-02, "-1.4619E-02", "%.4E",
-__LINE__, -1.465257069090911e-11, "-1.465257E-11", "%+E",
-__LINE__, -1.465306607257042e+05, "-146531", "%g",
-__LINE__, -1.465857076315921e+20, "-1.46586E+20", "%+G",
-__LINE__, -1.467919792051489e+16, "-1.46792e+16", "%2g",
-__LINE__, -1.469271519834567e+20, "-146927151983456720785", "%+.0f",
-__LINE__, -1.472961447442697e-28, "-1.47296e-28", "%#g",
-__LINE__, -1.473385695190456e-12, "-1.473386E-12", "%E",
-__LINE__, -1.485003089033267e-10, "-1.485E-10", "%2G",
-__LINE__, -1.490541379072390e-18, "-1.490541E-18", "%4E",
-__LINE__, -1.490683434793125e+22, "-14906834347931249951102.472551", "%#f",
-__LINE__, -1.498356837215425e+20, "-1.49836E+20", "%#G",
-__LINE__, -1.498677007818122e+14, "-1.49868E+14", "%+4G",
-__LINE__, -1.502143197677119e+23, "-150214319767711934616727.", "%#7.f",
-__LINE__, -1.503563770470753e-24, "-1.50356e-24", "%.6g",
-__LINE__, -1.504643092793197e-18, "-1.504643e-18", "%+4e",
-__LINE__, -1.507017706254022e-13, "-1.50702e-13", "%+g",
-__LINE__, -1.507054033750081e-22, "-0.000000", "%f",
-__LINE__, -1.508662346022339e+16, "-1.508662E+16", "%#E",
-__LINE__, -1.509366882438902e+08, "-2e+08", "%4.g",
-__LINE__, -1.511086567087967e+20, "-1.51109e+20", "%g",
-__LINE__, -1.514959134622707e-18, "-0.000000", "%+f",
-__LINE__, -1.515730120364204e+06, "-2E+06", "%0.G",
-__LINE__, -1.516372763118606e-09, "-1.51637e-09", "%g",
-__LINE__, -1.520610443546204e+27, "-1.52061e+27", "%g",
-__LINE__, -1.522040655642012e+11, "-1.52204E+11", "%+2G",
-__LINE__, -1.523772495014966e-24, "-2E-24", "%2.G",
-__LINE__, -1.523980825983892e-05, "-0.000", "%2.3f",
-__LINE__, -1.526696214603152e-03, "-0.0015267", "%+6.5G",
-__LINE__, -1.528680540769583e+00, "-1.5287", "%0.5G",
-__LINE__, -1.529951830525433e+08, "-1.529952e+08", "%+e",
-__LINE__, -1.533052896559935e+05, "-153305", "%4.0f",
-__LINE__, -1.533829640475152e-03, "-0.00153383", "%+#g",
-__LINE__, -1.535617804643105e-30, "-1.535618e-30", "%e",
-__LINE__, -1.537623698361821e+16, "-15376236983618207.7875719", "%4.7f",
-__LINE__, -1.544994895330616e+24, "-1.54499e+24", "%g",
-__LINE__, -1.545083356728403e+17, "-1.545083e+17", "%e",
-__LINE__, -1.545684535393879e+12, "-1.55E+12", "%3.3G",
-__LINE__, -1.545878334099427e+13, "-15458783340994.268762", "%1f",
-__LINE__, -1.547697185980564e-18, "-1.5477e-18", "%.6g",
-__LINE__, -1.548576527172579e-29, "-1.5E-29", "%2.2G",
-__LINE__, -1.549712227835891e+08, "-1.549712e+08", "%#6.7g",
-__LINE__, -1.550010819435335e-21, "-1.55001E-21", "%G",
-__LINE__, -1.551412476164257e+14, "-1.551412E+14", "%E",
-__LINE__, -1.553156638090030e+01, " -2E+01", "%7.G",
-__LINE__, -1.553733233064355e-01, "-0.2", "%3.g",
-__LINE__, -1.558391111609365e+00, "-1.558391", "%+f",
-__LINE__, -1.562004019284766e+15, "-1.562E+15", "%6.5G",
-__LINE__, -1.562195733239758e-16, "-0.000000", "%f",
-__LINE__, -1.563953339012525e-14, "-1.56395E-14", "%1G",
-__LINE__, -1.568317638534983e+18, "-1.56832E+18", "%1G",
-__LINE__, -1.568546851135348e+04, "-15685.5", "%+#G",
-__LINE__, -1.574297872228857e+18, "-1.574298e+18", "%e",
-__LINE__, -1.575696460196291e-21, "-1.5757E-21", "%G",
-__LINE__, -1.576324848379791e+25, "-1.57632E+25", "%+G",
-__LINE__, -1.577524395140843e+06, "-1.5775E+06", "%.5G",
-__LINE__, -1.585122856675091e+12, "-1585122856675.091452", "%f",
-__LINE__, -1.586734674395556e-02, "-1.586735E-02", "%E",
-__LINE__, -1.592602264315192e+22, "-1.5926E+22", "%G",
-__LINE__, -1.594121556700562e+05, "-2E+05", "%+.0G",
-__LINE__, -1.598538116193430e+22, "-1.59854e+22", "%+g",
-__LINE__, -1.605647463222382e+18, "-1.6056E+18", "%.5G",
-__LINE__, -1.610891449201191e+06, "-1.6109E+06", "%#6.4E",
-__LINE__, -1.614593168166818e-05, "-1.61459E-05", "%G",
-__LINE__, -1.615597722557325e-03, "-0.001616", "%f",
-__LINE__, -1.616038022182124e-29, "-1.61604E-29", "%1G",
-__LINE__, -1.618380771451625e-28, "-2e-28", "%+1.g",
-__LINE__, -1.620287456872150e+10, "-1.620e+10", "%#7.3e",
-__LINE__, -1.620469955611903e-29, "-0.000000", "%f",
-__LINE__, -1.622580720690927e+20, "-1.622581E+20", "%+#E",
-__LINE__, -1.622752500991079e-12, "-1.622753E-12", "%E",
-__LINE__, -1.622771933776459e+08, "-1.6228E+08", "%+4.4E",
-__LINE__, -1.623894567037391e+09, "-1.623895e+09", "%#e",
-__LINE__, -1.624021408185354e-25, "-1.624E-25", "%.5G",
-__LINE__, -1.624405320939366e-06, "-1.62441e-06", "%+#g",
-__LINE__, -1.631236208958857e-25, "-1.631236e-25", "%#e",
-__LINE__, -1.632165969536046e+20, "-1.63217E+20", "%G",
-__LINE__, -1.632859596256475e+06, "-1.63286E+06", "%G",
-__LINE__, -1.634371961703112e+06, "-1.634372E+06", "%+E",
-__LINE__, -1.637230383641845e+24, "-1.63723e+24", "%#g",
-__LINE__, -1.638081480475853e+17, "-1.63808e+17", "%+g",
-__LINE__, -1.638279690467673e+14, "-163827969046767.325523", "%#f",
-__LINE__, -1.640360249548215e-29, "-1.64036e-29", "%+6.6g",
-__LINE__, -1.645691728060833e-30, "-1.64569e-30", "%g",
-__LINE__, -1.648548965852592e-03, " -0", "%5.f",
-__LINE__, -1.650100957771182e+21, "-1650100957771182308420.065965", "%+f",
-__LINE__, -1.650957176011913e-02, "-0.016510", "%#4.5G",
-__LINE__, -1.651165108095301e+29, "-165116510809530137038336761179.380119", "%f",
-__LINE__, -1.657132845094847e-06, "-0.000002", "%f",
-__LINE__, -1.657152146172541e+12, "-1.657152E+12", "%.7G",
-__LINE__, -1.658377345516132e-06, "-0.00", "%.2f",
-__LINE__, -1.658850468902324e+20, "-1.659e+20", "%.4g",
-__LINE__, -1.661723557149830e+18, "-1.66172E+18", "%G",
-__LINE__, -1.663570885140273e+14, "-166357088514027", "%2.f",
-__LINE__, -1.665186944896906e+25, "-1.66519E+25", "%G",
-__LINE__, -1.675910137717036e+22, "-2e+22", "%5.g",
-__LINE__, -1.677447987675587e-15, "-1.67745E-15", "%G",
-__LINE__, -1.677510590697220e+06, "-1677510.590697", "%5f",
-__LINE__, -1.677658141289510e-18, "-2E-18", "%+5.G",
-__LINE__, -1.678316848066192e-03, "-1.678317E-03", "%E",
-__LINE__, -1.681506404024821e+24, "-1.68151E+24", "%G",
-__LINE__, -1.688584243722160e+12, "-1.68858E+12", "%+#G",
-__LINE__, -1.689468295411408e+28, "-1.68947E+28", "%+G",
-__LINE__, -1.690746767470207e-11, "-1.69075E-11", "%G",
-__LINE__, -1.692773960755248e-14, "-2E-14", "%4.E",
-__LINE__, -1.693349092740995e-18, "-1.69335e-18", "%g",
-__LINE__, -1.693642321808920e-26, "-1.69364E-26", "%G",
-__LINE__, -1.694579128700042e-12, "-0.000000", "%f",
-__LINE__, -1.695454897264717e-08, "-1.7E-08", "%+4.3G",
-__LINE__, -1.695733278397589e+19, "-1.695733e+19", "%4e",
-__LINE__, -1.699522534409388e-05, "-1.69952E-05", "%G",
-__LINE__, -1.701752039544919e+00, "-2", "%.0f",
-__LINE__, -1.702304998615036e+16, "-1.7023E+16", "%1G",
-__LINE__, -1.703113580904556e-25, "-1.703114e-25", "%+e",
-__LINE__, -1.705165515454546e+29, "-1.705166e+29", "%+e",
-__LINE__, -1.707392568277288e-05, "-1.70739E-05", "%G",
-__LINE__, -1.707477319256742e+09, "-1707477319.26", "%7.2f",
-__LINE__, -1.709669107513969e-03, " -0.002", "%7.g",
-__LINE__, -1.713284011412432e-24, "-1.713e-24", "%3.3e",
-__LINE__, -1.715512203951086e-28, "-1.715512E-28", "%E",
-__LINE__, -1.716880832248879e+13, "-1.71688e+13", "%+g",
-__LINE__, -1.720722835740680e-15, "-1.7E-15", "%.1E",
-__LINE__, -1.721855769574895e+07, "-17218557.695749", "%3f",
-__LINE__, -1.722449437415368e+01, "-1.722449e+01", "%e",
-__LINE__, -1.723218805116591e-29, "-2e-29", "%.0g",
-__LINE__, -1.726129004920195e-05, "-1.72613E-05", "%0G",
-__LINE__, -1.727400228037571e-28, "-0.0000000", "%2.7f",
-__LINE__, -1.730008745782339e-23, "-1.73e-23", "%.4g",
-__LINE__, -1.731875670201859e+09, "-1.73188E+09", "%G",
-__LINE__, -1.732142976428085e+10, "-2E+10", "%+6.0E",
-__LINE__, -1.732699651229194e-02, "-0.017327", "%5g",
-__LINE__, -1.734772870736446e-12, "-0.000000", "%+f",
-__LINE__, -1.738576887938331e+09, "-1.73858e+09", "%g",
-__LINE__, -1.738759937912438e-08, "-1.73876e-08", "%+2g",
-__LINE__, -1.739320154069143e-18, "-0.0000", "%1.4f",
-__LINE__, -1.739870415800800e+16, "-1.73987e+16", "%g",
-__LINE__, -1.741290506928618e+04, "-17412.9", "%G",
-__LINE__, -1.742520800031913e+29, "-1.742521e+29", "%7e",
-__LINE__, -1.747620095195231e+01, "-2e+01", "%+2.g",
-__LINE__, -1.749860675924882e-21, "-1.74986E-21", "%G",
-__LINE__, -1.752675363661431e-06, "-1.7527E-06", "%.5G",
-__LINE__, -1.752871508059699e-06, " -0", "%7.f",
-__LINE__, -1.755178530989839e+25, "-1.7551785e+25", "%1.7e",
-__LINE__, -1.755566213249512e-07, "-1.755566e-07", "%.6e",
-__LINE__, -1.756193485005071e-24, "-1.75619E-24", "%+2.6G",
-__LINE__, -1.758501410496218e+03, "-1758.501", "%.7G",
-__LINE__, -1.758795617219102e+20, "-1.75880E+20", "%#6G",
-__LINE__, -1.760538679276709e+03, "-2e+03", "%+1.e",
-__LINE__, -1.762660914833003e+27, "-1.76266E+27", "%G",
-__LINE__, -1.765122691141907e+19, "-17651226911419071186.1", "%5.1f",
-__LINE__, -1.765313277389086e-18, "-2E-18", "%+1.E",
-__LINE__, -1.765821717148734e+19, "-1.76582E+19", "%G",
-__LINE__, -1.767048687863149e-17, "-1.77E-17", "%+.3G",
-__LINE__, -1.768661645451962e+18, "-1.77E+18", "%+.3G",
-__LINE__, -1.769753257452233e+01, "-17.6975", "%G",
-__LINE__, -1.770945665065531e+28, "-1.770946E+28", "%0.7G",
-__LINE__, -1.776713865753894e-09, "-2e-09", "%1.g",
-__LINE__, -1.778424845787448e+03, "-1.7784E+03", "%.4E",
-__LINE__, -1.779060610701250e+06, "-1.779061E+06", "%E",
-__LINE__, -1.781447182110762e-27, "-1.781447E-27", "%E",
-__LINE__, -1.782655842123784e-13, "-2.E-13", "%#2.1G",
-__LINE__, -1.783071018169166e+16, "-17830710181691664.217851", "%+f",
-__LINE__, -1.784665985294415e+25, "-2E+25", "%3.G",
-__LINE__, -1.787297600658096e+25, "-2E+25", "%+5.E",
-__LINE__, -1.788200250255718e+12, "-1.7882E+12", "%2.4E",
-__LINE__, -1.792860730579114e-09, "-1.79286E-09", "%G",
-__LINE__, -1.793122797100936e+24, "-1.793123e+24", "%e",
-__LINE__, -1.793761706915029e-25, "-0.000000", "%f",
-__LINE__, -1.793947567431932e+22, "-1.79395e+22", "%g",
-__LINE__, -1.796428035404303e-18, "-1.79643e-18", "%g",
-__LINE__, -1.797113144273918e-16, "-1.79711E-16", "%.6G",
-__LINE__, -1.798796767828424e-29, "-1.7988E-29", "%G",
-__LINE__, -1.805004010633763e-11, "-1.805e-11", "%2.5g",
-__LINE__, -1.806936269752338e-26, "-1.80694e-26", "%g",
-__LINE__, -1.807122541760172e-10, "-1.80712e-10", "%g",
-__LINE__, -1.808295407815630e-06, "-1.8083E-06", "%+G",
-__LINE__, -1.813893236685959e+15, "-1813893236685959", "%0.f",
-__LINE__, -1.816201530145367e+06, "-1816202", "%+2.f",
-__LINE__, -1.822811219123512e+13, "-1.82281e+13", "%g",
-__LINE__, -1.826276499170243e-25, "-2E-25", "%+3.G",
-__LINE__, -1.832399287433839e-26, "-1.832399E-26", "%#4E",
-__LINE__, -1.833597815584463e-18, "-0.000000", "%+3f",
-__LINE__, -1.834165532712233e+28, "-1.834166E+28", "%.7G",
-__LINE__, -1.837633147831083e+28, "-1.8376331e+28", "%.7e",
-__LINE__, -1.839756716742518e-01, "-0.2", "%+0.G",
-__LINE__, -1.840101206950368e-14, "-1.840101E-14", "%+E",
-__LINE__, -1.842043645474877e+17, "-1.84204e+17", "%+g",
-__LINE__, -1.842155892969934e+17, "-1.84216e+17", "%+g",
-__LINE__, -1.843566073012842e-25, "-1.84357E-25", "%G",
-__LINE__, -1.843976321320497e-02, "-0.02", "%+4.2f",
-__LINE__, -1.845299931651554e+11, "-1.8453E+11", "%0.4E",
-__LINE__, -1.846199038659889e-06, "-1.8462e-06", "%0.5g",
-__LINE__, -1.847062180184169e-30, "-1.847062E-30", "%5E",
-__LINE__, -1.847962158722201e-16, "-0.000000", "%f",
-__LINE__, -1.849446376756582e+15, "-1.8E+15", "%2.2G",
-__LINE__, -1.853168465523878e-24, "-2E-24", "%1.E",
-__LINE__, -1.853601367230139e+10, "-1.853601e+10", "%e",
-__LINE__, -1.857367903775364e+18, "-1.86E+18", "%1.3G",
-__LINE__, -1.858332820633906e-05, "-0.000019", "%7f",
-__LINE__, -1.860243811657223e-23, "-1.860244e-23", "%e",
-__LINE__, -1.860660612539794e+08, "-1.86066e+08", "%+6.5e",
-__LINE__, -1.861160816251124e-09, "-2E-09", "%1.G",
-__LINE__, -1.862380636974688e-25, "-1.9E-25", "%.2G",
-__LINE__, -1.864168808453004e+15, "-1.86417E+15", "%G",
-__LINE__, -1.864273144411246e+07, "-1.86427e+07", "%g",
-__LINE__, -1.864929236615802e-02, "-2e-02", "%+3.e",
-__LINE__, -1.865010503480847e+19, "-2E+19", "%4.G",
-__LINE__, -1.866276374553144e+22, "-1.866276e+22", "%e",
-__LINE__, -1.870809567910649e+09, "-1.870810e+09", "%e",
-__LINE__, -1.872555495839008e-13, "-1.872555E-13", "%3E",
-__LINE__, -1.874465717110388e-22, "-1.874466E-22", "%E",
-__LINE__, -1.874916306627632e+21, "-1874916306627632422987.517202", "%f",
-__LINE__, -1.875804322194491e-23, "-0.000000", "%+f",
-__LINE__, -1.876662099198587e-04, "-0.000187666", "%G",
-__LINE__, -1.876775504795760e-25, "-1.87678e-25", "%0g",
-__LINE__, -1.879343051002554e-20, " -0.", "%#6.f",
-__LINE__, -1.881535445774717e-15, "-1.881535e-15", "%e",
-__LINE__, -1.887515901404300e+00, "-1.888", "%2.4G",
-__LINE__, -1.887730637149009e+17, "-1.887731E+17", "%E",
-__LINE__, -1.889920303480086e+17, "-1.889920e+17", "%+e",
-__LINE__, -1.891903478784091e+04, "-1.891903e+04", "%e",
-__LINE__, -1.893550084305833e+16, "-1.89355e+16", "%g",
-__LINE__, -1.894675230197676e+05, "-1.894675e+05", "%#e",
-__LINE__, -1.898389624953187e-27, "-1.898390e-27", "%+e",
-__LINE__, -1.899250044644046e+21, "-1899250044644046120367.875119", "%+4.6f",
-__LINE__, -1.904187609804679e-02, "-1.90419E-02", "%0.5E",
-__LINE__, -1.904452538421193e-04, "-2e-04", "%4.0e",
-__LINE__, -1.904615326969061e-16, "-1.904615e-16", "%1.7g",
-__LINE__, -1.907761255064750e+02, "-190.776126", "%f",
-__LINE__, -1.910727641826707e-10, " -2e-10", "%7.g",
-__LINE__, -1.913149279262051e+15, "-1.913149e+15", "%.7g",
-__LINE__, -1.913235739298009e+28, "-1.913236e+28", "%e",
-__LINE__, -1.913526822735271e+18, "-1.914e+18", "%.4g",
-__LINE__, -1.913780977515583e+17, "-191378097751558335.9150", "%5.4f",
-__LINE__, -1.917095456962182e-10, "-2E-10", "%4.G",
-__LINE__, -1.918803033972851e+23, "-191880303397285132405158.947222", "%f",
-__LINE__, -1.926420984801848e+16, "-19264209848018483.128840", "%+f",
-__LINE__, -1.931905465942639e-10, "-1.93191e-10", "%g",
-__LINE__, -1.932907105840252e+06, "-1.932907e+06", "%+#e",
-__LINE__, -1.933091601918916e+15, "-1.933092E+15", "%#E",
-__LINE__, -1.934296184983361e+09, "-1.9343e+09", "%1.6g",
-__LINE__, -1.934637311832448e+11, "-1.93464e+11", "%+g",
-__LINE__, -1.936201483262186e+12, "-2e+12", "%+6.g",
-__LINE__, -1.939114661603911e+19, "-1.93911E+19", "%G",
-__LINE__, -1.940478182124347e-13, "-0.000000", "%f",
-__LINE__, -1.943218220654923e+08, "-2E+08", "%+5.0G",
-__LINE__, -1.943526872455779e-30, "-1.9E-30", "%.1E",
-__LINE__, -1.949869164681357e+19, "-1.949869e+19", "%#3e",
-__LINE__, -1.954181060535402e+23, "-1.954181e+23", "%e",
-__LINE__, -1.961581555579142e+14, "-1.962E+14", "%.3E",
-__LINE__, -1.964535562036915e+07, "-1.96454E+07", "%G",
-__LINE__, -1.969749653575926e+04, "-19697.5", "%.6g",
-__LINE__, -1.973475369169053e+15, "-1.97348e+15", "%g",
-__LINE__, -1.975658532866600e-21, "-2e-21", "%+1.2g",
-__LINE__, -1.984050343831260e+09, "-1.984050E+09", "%E",
-__LINE__, -1.984422410018571e+12, "-1.984422e+12", "%+4.7g",
-__LINE__, -1.984878687667223e-22, "-0.000000", "%f",
-__LINE__, -1.986116930967811e-28, "-1.98612e-28", "%g",
-__LINE__, -1.986774457812683e+02, "-1.986774e+02", "%e",
-__LINE__, -1.987274814938726e-04, "-0.000198727", "%g",
-__LINE__, -1.987319200580415e+10, "-1.987319E+10", "%E",
-__LINE__, -1.987980768698114e-19, "-0.000000", "%3f",
-__LINE__, -1.994698965044602e-29, "-2E-29", "%+4.0G",
-__LINE__, -1.997833122667050e+26, "-1.99783E+26", "%G",
-__LINE__, -1.999453681184129e-10, "-0.00000", "%.5f",
-__LINE__, -1.999897345839745e-16, "-1.9999e-16", "%g",
-__LINE__, -2.003703825123989e-22, "-0.000000", "%f",
-__LINE__, -2.004569188274957e-23, "-2.00457E-23", "%G",
-__LINE__, -2.005911883189058e+07, "-2.00591E+07", "%G",
-__LINE__, -2.006438312005722e-25, "-2.006e-25", "%0.4g",
-__LINE__, -2.017322171210280e+18, "-2.01732E+18", "%+0G",
-__LINE__, -2.017718635819594e-06, "-2.01772e-06", "%5g",
-__LINE__, -2.019187445568160e-12, "-0.00", "%.2f",
-__LINE__, -2.021022665608503e+25, "-20210226656085028551501636.684", "%2.3f",
-__LINE__, -2.022720393474145e+07, "-2.02272E+07", "%#G",
-__LINE__, -2.024506694471065e+23, "-2.02451E+23", "%G",
-__LINE__, -2.024884686553821e-15, " -2e-15", "%7.g",
-__LINE__, -2.027484636128966e-23, "-2.0275E-23", "%.5G",
-__LINE__, -2.028185530467237e+21, "-2028185530467237374097.067", "%+4.3f",
-__LINE__, -2.028388905566873e-09, "-0.000000", "%f",
-__LINE__, -2.029856507431584e-17, "-2.02986E-17", "%G",
-__LINE__, -2.029891733449167e+27, "-2029891733449166846270372843.7190875", "%3.7f",
-__LINE__, -2.031933616694469e+14, "-2.031934E+14", "%#E",
-__LINE__, -2.034011738471413e-10, "-2.03401E-10", "%#G",
-__LINE__, -2.036087355975756e+29, "-203608735597575574161055556032.806635", "%+f",
-__LINE__, -2.036355025137273e+09, "-2.036355E+09", "%#.7G",
-__LINE__, -2.038423730536878e+12, "-2E+12", "%4.G",
-__LINE__, -2.045209202278810e+23, "-2.045209e+23", "%+#e",
-__LINE__, -2.046794083517423e-06, "-2.04679e-06", "%g",
-__LINE__, -2.048042459678599e-19, "-0.000000", "%f",
-__LINE__, -2.050526462096153e+18, "-2.05053e+18", "%+g",
-__LINE__, -2.053583900249402e+13, "-2.053584e+13", "%0.7g",
-__LINE__, -2.054342100957522e-23, "-2.05434E-23", "%#G",
-__LINE__, -2.054793400141025e+11, "-205479340014.1", "%+2.1f",
-__LINE__, -2.059200689196498e-11, "-0.000000", "%#f",
-__LINE__, -2.060960692728114e-16, "-0.000000", "%+f",
-__LINE__, -2.061417528654300e-30, "-2.06E-30", "%.3G",
-__LINE__, -2.061513401198340e-29, "-2.06151e-29", "%7g",
-__LINE__, -2.061846698845984e+27, "-2.061847E+27", "%E",
-__LINE__, -2.063922242876789e-19, "-2.06392e-19", "%#g",
-__LINE__, -2.065359431805529e+03, "-2065.359432", "%f",
-__LINE__, -2.065529069992156e-04, "-0.000206553", "%+G",
-__LINE__, -2.066082546490980e-25, "-2.06608e-25", "%5g",
-__LINE__, -2.068394312095200e+17, "-2.068394e+17", "%e",
-__LINE__, -2.071024178556425e-10, "-2.07102E-10", "%G",
-__LINE__, -2.074401605950382e-22, "-2.07e-22", "%1.3g",
-__LINE__, -2.074731895144874e-26, "-2.07473E-26", "%G",
-__LINE__, -2.074895800882730e+18, "-2074895800882730068.082083", "%+f",
-__LINE__, -2.077336220500764e-30, "-0", "%2.f",
-__LINE__, -2.078067878561077e+09, "-2.0781e+09", "%0.5g",
-__LINE__, -2.080497889634533e+15, "-2.080498E+15", "%4E",
-__LINE__, -2.084717279367594e-21, "-2.08472e-21", "%+g",
-__LINE__, -2.087827915301948e+29, "-2E+29", "%6.1G",
-__LINE__, -2.090268686389680e+05, "-2.090269e+05", "%1e",
-__LINE__, -2.092036176589720e+24, "-2.09204e+24", "%+g",
-__LINE__, -2.093546373938615e-21, "-2.093546e-21", "%#e",
-__LINE__, -2.101302069316682e+18, "-2.1013e+18", "%+7g",
-__LINE__, -2.103463622286002e-13, "-2.103464E-13", "%E",
-__LINE__, -2.105622845016732e+06, "-2105622.845017", "%1f",
-__LINE__, -2.109999123037767e+28, "-2.11E+28", "%.2E",
-__LINE__, -2.110317013992166e+04, "-21103.2", "%+g",
-__LINE__, -2.112226142154618e+21, "-2112226142154617569702.", "%#6.f",
-__LINE__, -2.112519484486528e+06, "-2.11252E+06", "%G",
-__LINE__, -2.113439260812000e+23, "-2E+23", "%1.G",
-__LINE__, -2.113465893194608e-15, "-2.1135E-15", "%.5G",
-__LINE__, -2.113547784669409e+20, "-2.1135e+20", "%2.5g",
-__LINE__, -2.114146001321822e+28, "-2.114146e+28", "%e",
-__LINE__, -2.114509425574444e-30, " -0", "%4.f",
-__LINE__, -2.114887421659561e-21, "-0.000000", "%+f",
-__LINE__, -2.121120215127601e+21, "-2121120215127601404958.5683097", "%.7f",
-__LINE__, -2.122555390665796e+06, "-2E+06", "%0.G",
-__LINE__, -2.123468430242052e-27, "-0.000000", "%+f",
-__LINE__, -2.123473598890635e+28, "-2.12347e+28", "%+g",
-__LINE__, -2.124328049748190e-04, "-2.124328E-04", "%E",
-__LINE__, -2.125633890999010e+28, "-2E+28", "%+5.G",
-__LINE__, -2.125697963566045e+21, "-2.1257E+21", "%0G",
-__LINE__, -2.127638109230109e+06, "-2.12764e+06", "%+6g",
-__LINE__, -2.128456114617786e+07, "-2.128456E+07", "%E",
-__LINE__, -2.128732742932824e-04, "-2.128733E-04", "%#E",
-__LINE__, -2.129654381588404e+27, "-2129654381588404365999167566.7697564", "%+.7f",
-__LINE__, -2.129792795009985e+20, "-2.12979e+20", "%g",
-__LINE__, -2.131026925664619e-20, "-2e-20", "%.0e",
-__LINE__, -2.132860730144188e-04, "-0.0002", "%5.g",
-__LINE__, -2.133620979309562e+06, "-2e+06", "%3.e",
-__LINE__, -2.133821423139120e-27, "-2.13382E-27", "%.6G",
-__LINE__, -2.134253401425940e-07, "-0.000000", "%f",
-__LINE__, -2.135469568156964e-29, "-2.135470E-29", "%+7E",
-__LINE__, -2.135723595288365e-25, "-0.0", "%.1f",
-__LINE__, -2.137642458920094e-09, "-2.13764e-09", "%g",
-__LINE__, -2.143412361116583e+12, "-2.14341e+12", "%+g",
-__LINE__, -2.144467087741129e-17, "-2.14447e-17", "%+g",
-__LINE__, -2.145726966596964e-11, "-0.000000", "%2f",
-__LINE__, -2.148318753042597e+08, "-2.14832E+08", "%5G",
-__LINE__, -2.149932310549644e-19, "-2.14993e-19", "%g",
-__LINE__, -2.150050917377646e-21, " -0", "%3.f",
-__LINE__, -2.150854313643430e-16, "-0.000000", "%.6f",
-__LINE__, -2.151071797121845e+00, "-2.15107", "%+g",
-__LINE__, -2.158728406865981e+14, "-215872840686598.088666", "%7f",
-__LINE__, -2.166062878011641e-23, "-2.166063e-23", "%e",
-__LINE__, -2.167045002060684e+12, "-2.167045E+12", "%E",
-__LINE__, -2.173752581051530e+20, "-217375258105153035259.604621", "%f",
-__LINE__, -2.175599129057555e+24, "-2.175599E+24", "%E",
-__LINE__, -2.176564454093042e-02, "-0.0217656", "%+G",
-__LINE__, -2.181270774327071e-12, "-0.000000", "%#1f",
-__LINE__, -2.184404769844158e-09, "-2.2E-09", "%+.2G",
-__LINE__, -2.184881476334310e-07, "-2.18488e-07", "%g",
-__LINE__, -2.189197211449684e-11, "-2E-11", "%.0G",
-__LINE__, -2.189451286805190e+20, "-218945128680519029984", "%3.f",
-__LINE__, -2.190642494146884e-27, " -0.", "%#4.f",
-__LINE__, -2.194727956725854e+06, "-2.19E+06", "%.3G",
-__LINE__, -2.196145868303877e+11, "-219614586830.387726", "%+5f",
-__LINE__, -2.196397972262690e-16, "-0.000000", "%3f",
-__LINE__, -2.202692843474668e-01, "-2.203e-01", "%.3e",
-__LINE__, -2.204528684782451e-21, "-2.20453E-21", "%G",
-__LINE__, -2.214926838821340e-16, "-2e-16", "%+2.g",
-__LINE__, -2.215558986352773e+18, "-2215558986352773374", "%0.f",
-__LINE__, -2.216976693056186e+27, "-2216976693056186498154147557.215765", "%f",
-__LINE__, -2.217348422793322e+13, "-2.21735E+13", "%6G",
-__LINE__, -2.217732695583920e-07, "-0", "%.0f",
-__LINE__, -2.221185494767834e-14, "-2.22119e-14", "%g",
-__LINE__, -2.224557193699609e-16, "-2.224557E-16", "%E",
-__LINE__, -2.227417758704028e-18, "-0.000000", "%0f",
-__LINE__, -2.231261655673006e-30, "-2.231262E-30", "%E",
-__LINE__, -2.233081938836160e+21, "-2233081938836160240668.960", "%+6.3f",
-__LINE__, -2.233158918439853e+05, "-223316", "%2G",
-__LINE__, -2.233802298007898e-30, "-2.2338E-30", "%2G",
-__LINE__, -2.233864858404732e+17, "-223386485840473181.241350", "%f",
-__LINE__, -2.241242805107749e+14, "-2.24124E+14", "%G",
-__LINE__, -2.244555498855249e+25, "-2.24456E+25", "%#G",
-__LINE__, -2.248170665127481e-07, "-2.248171E-07", "%E",
-__LINE__, -2.252558275567388e-13, "-2.25256e-13", "%g",
-__LINE__, -2.256190083496001e+13, "-22561900834960.0136398", "%7.7f",
-__LINE__, -2.259851596715945e+27, "-2.259852e+27", "%e",
-__LINE__, -2.260461480001174e-21, "-0.000000", "%f",
-__LINE__, -2.264128628428577e+22, "-2.26413e+22", "%1g",
-__LINE__, -2.265914518399595e-04, "-0.000226591", "%G",
-__LINE__, -2.266251557092826e+23, "-2.26625e+23", "%g",
-__LINE__, -2.268592252572450e+19, "-2.268592e+19", "%2.6e",
-__LINE__, -2.268597523847349e+11, "-2.2686e+11", "%g",
-__LINE__, -2.268963106935546e+05, "-226896", "%+g",
-__LINE__, -2.272527876808919e-24, "-0.000000", "%#f",
-__LINE__, -2.273366440479073e+02, "-227.337", "%g",
-__LINE__, -2.277858038556191e+25, "-2.28E+25", "%0.3G",
-__LINE__, -2.282019915623415e+25, "-2E+25", "%5.E",
-__LINE__, -2.283333247435650e-27, " -0", "%4.f",
-__LINE__, -2.285230610829355e+23, "-2E+23", "%2.G",
-__LINE__, -2.290900253402985e+23, "-2.2909E+23", "%G",
-__LINE__, -2.293266953268186e+08, "-2.29327e+08", "%g",
-__LINE__, -2.293489603164786e+23, "-229348960316478578391752.3076525", "%4.7f",
-__LINE__, -2.294434667605481e+15, "-2.2944E+15", "%.5G",
-__LINE__, -2.296607768466765e+21, "-2.29661E+21", "%G",
-__LINE__, -2.297449967994012e+14, "-229744996799401.23542", "%+.5f",
-__LINE__, -2.301162556466583e-01, "-0.230116", "%+#2g",
-__LINE__, -2.301676246374004e+05, "-230168.", "%#g",
-__LINE__, -2.301976724487835e-01, "-0.230198", "%5G",
-__LINE__, -2.303269770571222e-15, "-2.303270e-15", "%.6e",
-__LINE__, -2.306451480495636e+23, "-2.30645E+23", "%G",
-__LINE__, -2.307659351219690e-17, "-0.000000", "%+3f",
-__LINE__, -2.309009762339430e+16, "-2.30901E+16", "%G",
-__LINE__, -2.309261751862100e+06, "-2309261.751862", "%+f",
-__LINE__, -2.309504876918634e-26, " -2E-26", "%7.E",
-__LINE__, -2.310910348147804e-26, "-2e-26", "%5.g",
-__LINE__, -2.317173552252235e+05, "-231717.4", "%.7g",
-__LINE__, -2.319517289618469e-23, "-2.31952E-23", "%+G",
-__LINE__, -2.320103195142527e+08, "-2.320103E+08", "%+E",
-__LINE__, -2.323523032125633e+24, "-2323523032125633491773442.07419", "%.5f",
-__LINE__, -2.326279126614399e-16, "-0.000000", "%f",
-__LINE__, -2.331393688620925e-09, "-2.33139e-09", "%#g",
-__LINE__, -2.334233527512469e+01, " -23", "%6.0f",
-__LINE__, -2.337418834112767e+24, " -2E+24", "%7.E",
-__LINE__, -2.339455293612118e+12, "-2339455293612.1", "%+.1f",
-__LINE__, -2.341930318143367e-18, "-2.E-18", "%#4.E",
-__LINE__, -2.346107614950921e-17, "-0.00000", "%+2.5f",
-__LINE__, -2.348356578807972e+23, "-2.34836e+23", "%g",
-__LINE__, -2.351485855138244e+19, "-2.351486e+19", "%+e",
-__LINE__, -2.362101647639198e-15, "-2.36210e-15", "%#g",
-__LINE__, -2.369743873030115e+08, "-2e+08", "%.1g",
-__LINE__, -2.371658164739356e+25, "-23716581647393559784120498.079574", "%f",
-__LINE__, -2.372427847607163e+28, "-2.37243E+28", "%G",
-__LINE__, -2.375465465294647e+11, "-2.375465e+11", "%e",
-__LINE__, -2.377128971572195e-18, "-0.0", "%1.1f",
-__LINE__, -2.380322448568089e-13, "-2.38032E-13", "%+#0G",
-__LINE__, -2.385960728264882e+26, "-2E+26", "%.0E",
-__LINE__, -2.387345744004747e+00, "-2.38735", "%G",
-__LINE__, -2.390480023300201e+25, "-2.39048e+25", "%g",
-__LINE__, -2.395420431930886e+23, "-2E+23", "%2.E",
-__LINE__, -2.401144663870969e-10, "-2.e-10", "%#6.g",
-__LINE__, -2.402787441215039e-08, "-2.40279e-08", "%g",
-__LINE__, -2.402990830425278e+08, "-2.40299E+08", "%G",
-__LINE__, -2.404213682932215e+08, "-2.40421e+08", "%2g",
-__LINE__, -2.409385592298822e+21, "-2409385592298821876511.283335", "%7f",
-__LINE__, -2.410798267658614e+13, "-2.4108e+13", "%+g",
-__LINE__, -2.413180068271811e-24, "-0.000000", "%+f",
-__LINE__, -2.413268457113495e+26, "-2.41327E+26", "%3.6G",
-__LINE__, -2.415341832206007e-13, "-0.000000", "%+f",
-__LINE__, -2.422519577068670e-08, "-0.0000000", "%.7f",
-__LINE__, -2.422533651282808e+20, "-2.42253E+20", "%#G",
-__LINE__, -2.422795006880671e+17, "-2.4228e+17", "%g",
-__LINE__, -2.423483330202008e+20, "-2.42348e+20", "%g",
-__LINE__, -2.431756009640369e-04, "-0.000243176", "%+#3g",
-__LINE__, -2.431878622534173e-05, "-0.000024", "%f",
-__LINE__, -2.432012113077180e+24, "-2.43201e+24", "%g",
-__LINE__, -2.433843704470487e+07, "-24338437", "%4.f",
-__LINE__, -2.435475755031956e+11, "-2.435476E+11", "%1E",
-__LINE__, -2.438081888695437e-13, "-0.000000", "%f",
-__LINE__, -2.438334590462860e+10, "-2.4E+10", "%5.2G",
-__LINE__, -2.440223135334059e+17, "-2.44022e+17", "%g",
-__LINE__, -2.444107281115317e-21, "-2.44411e-21", "%+g",
-__LINE__, -2.444582273206171e-02, " -0.02", "%7.G",
-__LINE__, -2.445234676352794e+23, "-2.44523e+23", "%#g",
-__LINE__, -2.449185020984714e+08, "-2.E+08", "%#2.G",
-__LINE__, -2.450646640466020e+22, "-2.45065E+22", "%5G",
-__LINE__, -2.456840850262473e+13, "-24568408502625", "%0.f",
-__LINE__, -2.464466865714499e-10, "-2e-10", "%6.g",
-__LINE__, -2.466022088999151e+27, "-2.46602E+27", "%G",
-__LINE__, -2.484398113119779e-04, "-2.484398E-04", "%E",
-__LINE__, -2.484591850456328e+23, "-248459185045632846566832.085955", "%+f",
-__LINE__, -2.488166252162446e-11, "-2.5E-11", "%4.2G",
-__LINE__, -2.493507313049390e+24, "-2.49E+24", "%4.3G",
-__LINE__, -2.500280281988428e+28, "-2.5E+28", "%.4G",
-__LINE__, -2.500373956445372e-07, "-2.50037e-07", "%g",
-__LINE__, -2.505566434769299e-12, "-2.5E-12", "%+#0.2G",
-__LINE__, -2.508215917020758e+05, "-2.508216e+05", "%5e",
-__LINE__, -2.519368094680315e-29, "-2.51937e-29", "%#0g",
-__LINE__, -2.522266530587753e-11, "-2.52227e-11", "%+g",
-__LINE__, -2.534492886372514e-06, "-2.53449E-06", "%0G",
-__LINE__, -2.534617610955074e-02, "-0.03", "%0.2f",
-__LINE__, -2.540551642835634e+26, "-3E+26", "%4.G",
-__LINE__, -2.548210731830516e-26, "-0.000", "%2.3f",
-__LINE__, -2.558868082397931e-11, "-3E-11", "%2.E",
-__LINE__, -2.560062512991052e+11, "-2.56006E+11", "%+G",
-__LINE__, -2.561274682814428e-05, "-0.000026", "%f",
-__LINE__, -2.563424949397357e-02, " -0", "%6.f",
-__LINE__, -2.577010939931465e+17, "-2.57701E+17", "%G",
-__LINE__, -2.578224879294822e+10, "-3E+10", "%+4.1G",
-__LINE__, -2.585655636750244e+13, "-2.585656e+13", "%+0.7g",
-__LINE__, -2.585657986834408e+14, "-2.5857e+14", "%3.5g",
-__LINE__, -2.586728929368101e+02, "-258.673", "%+g",
-__LINE__, -2.591293023229468e+06, "-2591293.0232295", "%2.7f",
-__LINE__, -2.592454222603538e-06, "-2.59245E-06", "%G",
-__LINE__, -2.599399905869649e+02, "-259.939991", "%f",
-__LINE__, -2.605382860307596e+12, "-2.60538E+12", "%2G",
-__LINE__, -2.607507689402762e-01, "-0.260751", "%#.6g",
-__LINE__, -2.612933252582967e+15, "-2.61293e+15", "%g",
-__LINE__, -2.614337505491483e-14, "-2.61434E-14", "%.6G",
-__LINE__, -2.618302263333671e+14, "-2.62e+14", "%3.3g",
-__LINE__, -2.622998533972296e+00, "-3.", "%#0.g",
-__LINE__, -2.623348319869643e-15, "-2.62335E-15", "%#G",
-__LINE__, -2.626703132693163e+23, "-3E+23", "%+6.E",
-__LINE__, -2.629610853765779e+25, "-2.62961E+25", "%+#G",
-__LINE__, -2.632993880472784e+26, "-2.63299E+26", "%G",
-__LINE__, -2.635651112327873e-20, "-2.63565E-20", "%1G",
-__LINE__, -2.636003980473492e-23, "-2.636E-23", "%G",
-__LINE__, -2.639316453244009e+10, "-26393164532.440094", "%#f",
-__LINE__, -2.640517223417942e-28, "-2.641e-28", "%.3e",
-__LINE__, -2.640625797147664e-22, "-2.640626E-22", "%E",
-__LINE__, -2.644401262524378e-12, " -0.000", "%7.3f",
-__LINE__, -2.651033203243637e-14, "-2.651033e-14", "%+e",
-__LINE__, -2.652386470126594e-24, "-2.652386E-24", "%E",
-__LINE__, -2.654281018623631e-12, "-0.00000", "%6.5f",
-__LINE__, -2.655529742118827e+02, "-265.552974", "%f",
-__LINE__, -2.658550833241620e+22, "-26585508332416196708436.473273", "%+f",
-__LINE__, -2.660515890519100e+08, "-2.660516E+08", "%E",
-__LINE__, -2.665025749266086e-24, "-2.66503E-24", "%G",
-__LINE__, -2.666117105643095e-20, "-2.66612e-20", "%g",
-__LINE__, -2.667051347741259e+11, "-3e+11", "%6.g",
-__LINE__, -2.667207607243375e+04, "-26672.076072", "%+#f",
-__LINE__, -2.667631877167590e+26, "-2.667632E+26", "%E",
-__LINE__, -2.673817942962878e+13, "-2.673818e+13", "%+2.6e",
-__LINE__, -2.674972907853507e+20, "-2.674973E+20", "%E",
-__LINE__, -2.675830887404867e+14, "-2.675831E+14", "%E",
-__LINE__, -2.682749918168908e+26, "-2.682750E+26", "%E",
-__LINE__, -2.689222801942679e-03, "-0.0027", "%7.2G",
-__LINE__, -2.692245629411156e+25, "-2.69225e+25", "%g",
-__LINE__, -2.692606702464273e+11, "-2.69261e+11", "%g",
-__LINE__, -2.693070822061136e-27, "-2.69307e-27", "%+g",
-__LINE__, -2.694415515655336e-30, "-3E-30", "%+3.0E",
-__LINE__, -2.694770057384739e+15, "-2.69477e+15", "%g",
-__LINE__, -2.699998392329361e+01, "-27", "%+.2g",
-__LINE__, -2.700151952281511e+23, "-270015195228151050343968.", "%+#5.f",
-__LINE__, -2.707398527302841e-08, "-2.70740e-08", "%+#3g",
-__LINE__, -2.711404950850030e-21, "-2.71E-21", "%.2E",
-__LINE__, -2.714057739024281e-10, "-2.714e-10", "%.4g",
-__LINE__, -2.717657632815414e-10, "-2.71766e-10", "%g",
-__LINE__, -2.720875786430592e-09, "-2.7E-09", "%6.2G",
-__LINE__, -2.725886730997891e+19, "-2.72589e+19", "%g",
-__LINE__, -2.726089169748676e-09, "-2.72609E-09", "%+G",
-__LINE__, -2.732907572038661e-30, "-2.73291E-30", "%G",
-__LINE__, -2.737918050958789e+11, "-3e+11", "%1.g",
-__LINE__, -2.739024251198484e-18, "-2.73902e-18", "%+g",
-__LINE__, -2.742646144452305e+13, "-2.74265e+13", "%g",
-__LINE__, -2.742911865386719e+06, "-3E+06", "%+5.G",
-__LINE__, -2.759159275123811e-30, "-0.000000", "%+f",
-__LINE__, -2.759794813930001e-21, "-2.75979e-21", "%+g",
-__LINE__, -2.763243077558348e+20, "-2.7632E+20", "%+0.4E",
-__LINE__, -2.770348477810209e-14, "-0.000000", "%2f",
-__LINE__, -2.776074766292453e+05, "-277607", "%g",
-__LINE__, -2.776610811432007e-07, "-2.77661E-07", "%6G",
-__LINE__, -2.778673793270678e+23, "-3E+23", "%+4.E",
-__LINE__, -2.782405168708350e+08, "-278240516.87084", "%.5f",
-__LINE__, -2.783316149365198e-09, "-3E-09", "%5.0G",
-__LINE__, -2.785436703085409e-27, "-2.78544E-27", "%#G",
-__LINE__, -2.787479051660640e+21, "-2.78748e+21", "%g",
-__LINE__, -2.789445406042450e-03, "-0.002789", "%+f",
-__LINE__, -2.791104581836077e+05, "-279110.4581836", "%+7.7f",
-__LINE__, -2.802078617775784e+04, "-28020.786", "%0.3f",
-__LINE__, -2.804954315579055e+20, "-2.80495E+20", "%G",
-__LINE__, -2.806575341862696e-05, "-2.80658E-05", "%G",
-__LINE__, -2.807769556900402e-06, "-0.000003", "%+#f",
-__LINE__, -2.808882056357941e-12, "-0.0", "%.1f",
-__LINE__, -2.809386677339924e+10, "-2.8094E+10", "%6.5G",
-__LINE__, -2.818404311437694e+19, "-3E+19", "%6.G",
-__LINE__, -2.819463285551660e+01, "-28.1946", "%+G",
-__LINE__, -2.821428853207724e-16, "-3e-16", "%6.g",
-__LINE__, -2.824452750788444e+07, "-3e+07", "%+2.g",
-__LINE__, -2.825430381094971e+28, "-3e+28", "%+.0e",
-__LINE__, -2.830010928384944e-17, "-0", "%.0f",
-__LINE__, -2.832505114479680e-09, "-0.000000", "%f",
-__LINE__, -2.833246604950796e+13, "-2.83325E+13", "%G",
-__LINE__, -2.833274073265017e+13, "-28332740732650.174564", "%f",
-__LINE__, -2.835842581787797e+07, "-2.83584E+07", "%2G",
-__LINE__, -2.839758384681983e-07, "-2.83976E-07", "%.6G",
-__LINE__, -2.841077022753766e-09, "-3E-09", "%0.1G",
-__LINE__, -2.845307294930682e+00, "-2.845307e+00", "%+1e",
-__LINE__, -2.847420163874243e+19, "-2.8e+19", "%1.2g",
-__LINE__, -2.848133715109881e-25, "-2.848134E-25", "%E",
-__LINE__, -2.850208101288058e-06, "-2.8502E-06", "%+5.4E",
-__LINE__, -2.853666525870413e+04, "-28536.665259", "%f",
-__LINE__, -2.855661543202034e+21, "-2.85566e+21", "%g",
-__LINE__, -2.859528889324159e-08, "-2.859529e-08", "%3e",
-__LINE__, -2.860545310690251e+29, "-3e+29", "%.1g",
-__LINE__, -2.863576633666884e-14, "-2.863577e-14", "%+5e",
-__LINE__, -2.864115740396321e-14, "-2.86412e-14", "%g",
-__LINE__, -2.864481979037153e+20, "-2.86E+20", "%3.3G",
-__LINE__, -2.867582970177984e-18, "-0.000000", "%f",
-__LINE__, -2.868237707901564e+25, "-3E+25", "%6.E",
-__LINE__, -2.871741071402520e+13, "-3e+13", "%.1g",
-__LINE__, -2.873724610073364e+18, "-2873724610073364438.278531", "%+#f",
-__LINE__, -2.876433859770866e-25, "-2.87643e-25", "%g",
-__LINE__, -2.877458587075737e-08, "-2.877E-08", "%+.4G",
-__LINE__, -2.883349842927101e+24, "-2.883350E+24", "%2E",
-__LINE__, -2.883749925642885e+09, "-2.883750e+09", "%e",
-__LINE__, -2.883773835633003e-17, "-0.000000", "%+f",
-__LINE__, -2.890389090491409e+24, "-2890389090491409262995148.310438", "%#1f",
-__LINE__, -2.900848552225810e-11, "-0.000000", "%+f",
-__LINE__, -2.911942123176400e+25, "-29119421231764004431852300", "%0.f",
-__LINE__, -2.912904462180751e-18, "-2.9129E-18", "%6G",
-__LINE__, -2.917717875075651e+26, "-3e+26", "%0.e",
-__LINE__, -2.922293201084093e-26, "-2.922293E-26", "%E",
-__LINE__, -2.925070319932451e-30, "-0.000000", "%f",
-__LINE__, -2.926558572870874e+15, "-2.926559E+15", "%E",
-__LINE__, -2.928781435877896e+26, "-2.928781e+26", "%+e",
-__LINE__, -2.930178318110376e+28, "-2.930178E+28", "%E",
-__LINE__, -2.930984661925819e+05, "-293098.5", "%.7G",
-__LINE__, -2.932762424932762e-08, "-0.000000", "%#f",
-__LINE__, -2.933415597492494e+10, "-29334155974.924943", "%+#2f",
-__LINE__, -2.933564314850986e+29, "-2.93356E+29", "%7G",
-__LINE__, -2.943224907893795e+10, "-2.943225E+10", "%+7E",
-__LINE__, -2.945311540471221e+19, "-2.94531E+19", "%#G",
-__LINE__, -2.945812356522847e+15, "-2.94581e+15", "%+g",
-__LINE__, -2.945836999630957e+00, "-2.945837E+00", "%E",
-__LINE__, -2.947798782726622e-01, "-0.29478", "%+g",
-__LINE__, -2.948958405827917e+18, "-2.94896e+18", "%g",
-__LINE__, -2.949790871798059e-11, "-2.94979E-11", "%G",
-__LINE__, -2.950347806125225e-12, "-2.95035e-12", "%g",
-__LINE__, -2.952781884599368e-29, "-2.952782E-29", "%+E",
-__LINE__, -2.956801341442716e+06, "-2.9568E+06", "%G",
-__LINE__, -2.957469310356540e-07, "-0.000", "%1.3f",
-__LINE__, -2.960464869534870e-23, "-2.96046E-23", "%G",
-__LINE__, -2.962339381825446e-07, "-0", "%1.f",
-__LINE__, -2.971013180028710e+22, "-2.971e+22", "%3.5g",
-__LINE__, -2.975167862441254e+07, "-2.97517e+07", "%g",
-__LINE__, -2.976018424339993e+16, "-2.976018e+16", "%3e",
-__LINE__, -2.979173094835454e+29, "-2.97917E+29", "%G",
-__LINE__, -2.983135249987541e-03, "-0.00298314", "%+G",
-__LINE__, -2.985142444917919e-24, "-2.985142E-24", "%+#7E",
-__LINE__, -2.988680953635159e-14, "-0.0000000", "%2.7f",
-__LINE__, -2.989629778079379e+04, "-29896.297781", "%f",
-__LINE__, -2.991274275137276e+19, "-29912742751372762839.423558", "%+4f",
-__LINE__, -2.991286396006024e-06, "-2.99129e-06", "%4g",
-__LINE__, -2.993310397844811e+04, "-2.993310E+04", "%3.6E",
-__LINE__, -2.994669852410861e-29, "-2.99467E-29", "%G",
-__LINE__, -2.996082093034831e+27, "-2.996082e+27", "%1e",
-__LINE__, -2.999783904575110e+16, "-2.999784E+16", "%#E",
-__LINE__, -3.012019221956988e+25, "-3.012019E+25", "%E",
-__LINE__, -3.014211917706622e-25, "-0.000000", "%+f",
-__LINE__, -3.015149723683428e-19, "-3.01515E-19", "%G",
-__LINE__, -3.022158478004638e-19, "-3.02216e-19", "%6g",
-__LINE__, -3.022825518373900e-12, "-3.0228E-12", "%+.4E",
-__LINE__, -3.025108924057340e-19, "-0.000000", "%f",
-__LINE__, -3.026316824631967e+24, "-3026316824631966717618070.106255", "%1f",
-__LINE__, -3.033074643529623e-13, "-3.03307e-13", "%g",
-__LINE__, -3.035292960731141e+24, "-3035292960731141409524980.190326", "%f",
-__LINE__, -3.043291272956732e-13, "-3.04329e-13", "%#g",
-__LINE__, -3.045216723973715e-23, "-3.045e-23", "%.4g",
-__LINE__, -3.047140976048835e+09, "-3.04714E+09", "%3.5E",
-__LINE__, -3.047680278470886e+09, "-3.047680E+09", "%#E",
-__LINE__, -3.048465807963461e+05, "-304847", "%g",
-__LINE__, -3.050904753556756e+22, "-3.0509E+22", "%G",
-__LINE__, -3.052845748999047e-13, "-3.05285e-13", "%g",
-__LINE__, -3.053395231883620e-06, "-3E-06", "%2.G",
-__LINE__, -3.054894203375445e-28, "-3e-28", "%2.g",
-__LINE__, -3.055080347760755e-13, "-0", "%2.f",
-__LINE__, -3.055513037393624e-29, "-3e-29", "%3.g",
-__LINE__, -3.056198778208295e-06, "-3.0562e-06", "%g",
-__LINE__, -3.057813660266980e-21, "-3E-21", "%1.G",
-__LINE__, -3.059687036330998e-11, "-3.1E-11", "%#2.2G",
-__LINE__, -3.061450385559094e-10, "-3.06145E-10", "%G",
-__LINE__, -3.066605713361383e-27, "-0.000000", "%f",
-__LINE__, -3.071590110813156e+22, "-3.07159E+22", "%G",
-__LINE__, -3.073253864426931e+26, "-3.0733E+26", "%.5G",
-__LINE__, -3.078998328596940e+07, "-3.079e+07", "%5.4g",
-__LINE__, -3.082733887951920e+06, "-3.082734e+06", "%+6e",
-__LINE__, -3.084365358064710e+24, "-3.084365E+24", "%#E",
-__LINE__, -3.086948022123716e+25, "-30869480221237162176350921.072299", "%+f",
-__LINE__, -3.088200214218024e-10, "-0", "%0.f",
-__LINE__, -3.093442983942874e+08, "-309344298.394287", "%f",
-__LINE__, -3.103573455403534e-09, "-3.103573E-09", "%#E",
-__LINE__, -3.109178443120997e+07, "-31091784.431210", "%f",
-__LINE__, -3.111494549914917e+28, "-3e+28", "%0.g",
-__LINE__, -3.113384020517480e-17, " -0", "%+6.f",
-__LINE__, -3.121622779718055e+14, "-312162277971805.491", "%+.3f",
-__LINE__, -3.122780443843900e-01, "-0.312278", "%#g",
-__LINE__, -3.122952438335638e-25, "-3.122952E-25", "%E",
-__LINE__, -3.128970339463168e-18, "-3e-18", "%3.g",
-__LINE__, -3.130862507719335e+10, "-3.130863e+10", "%3e",
-__LINE__, -3.145960838955379e+03, "-3145.96", "%g",
-__LINE__, -3.149362645138929e+21, "-3.14936e+21", "%g",
-__LINE__, -3.150697168664913e+26, "-315069716866491322804222363.629378", "%+f",
-__LINE__, -3.157946785041287e+05, "-3.1579e+05", "%.4e",
-__LINE__, -3.158347006986809e-02, "-3.E-02", "%#.0E",
-__LINE__, -3.159542871923388e+07, "-31595429", "%2.f",
-__LINE__, -3.169997512351985e+15, "-3.169998E+15", "%6.7G",
-__LINE__, -3.170971776544746e+07, "-31709717.765447", "%f",
-__LINE__, -3.173246079104466e+19, "-3.173246E+19", "%1E",
-__LINE__, -3.173581228658553e-02, "-0.03", "%+0.G",
-__LINE__, -3.187598864929850e-07, "-3.18760E-07", "%#G",
-__LINE__, -3.190525302270244e+08, "-3.190525e+08", "%+0.7g",
-__LINE__, -3.191879884186422e+19, "-3.19E+19", "%.2E",
-__LINE__, -3.197292604744926e+02, "-3.197293e+02", "%+e",
-__LINE__, -3.203713337688838e-12, "-3.20371E-12", "%6G",
-__LINE__, -3.204416889544914e-18, "-0.000000", "%+f",
-__LINE__, -3.204494471917096e+09, "-3.20449e+09", "%g",
-__LINE__, -3.211933195516720e+11, "-3.21193E+11", "%G",
-__LINE__, -3.214544021431917e-24, "-0.000000", "%1f",
-__LINE__, -3.215501229487004e-07, "-3e-07", "%3.e",
-__LINE__, -3.232157492322707e-13, "-3.E-13", "%+#5.G",
-__LINE__, -3.239074974455177e-05, "-3.239e-05", "%2.4g",
-__LINE__, -3.243083730801156e-24, "-3.243084e-24", "%#e",
-__LINE__, -3.243128583394124e+07, "-32431285.8339", "%6.4f",
-__LINE__, -3.247997999770571e-08, "-3e-08", "%5.e",
-__LINE__, -3.258251054563991e-15, "-3.2583E-15", "%.5G",
-__LINE__, -3.259499053187446e+07, "-3.2595E+07", "%5.6G",
-__LINE__, -3.261907782031174e+20, "-3.3e+20", "%.2g",
-__LINE__, -3.263979380855122e+29, "-3.26398E+29", "%G",
-__LINE__, -3.264166546402073e+06, "-3.26417E+06", "%5G",
-__LINE__, -3.269357648926951e+01, "-3.E+01", "%#5.G",
-__LINE__, -3.273523287028019e-30, "-3.27352e-30", "%g",
-__LINE__, -3.274464331526264e-14, "-3e-14", "%.0g",
-__LINE__, -3.276647049958546e+05, "-327664.7", "%+.1f",
-__LINE__, -3.276853612008326e-04, "-3.276854e-04", "%e",
-__LINE__, -3.288077788905925e+17, "-3.28808e+17", "%g",
-__LINE__, -3.292054327509010e+21, "-3.29205e+21", "%+g",
-__LINE__, -3.292086868337041e-16, " -0", "%7.f",
-__LINE__, -3.299368070005327e-17, "-3E-17", "%5.G",
-__LINE__, -3.307165537474566e-30, "-3e-30", "%+2.g",
-__LINE__, -3.310556325973673e-17, "-3.31056E-17", "%G",
-__LINE__, -3.315407318453138e-09, "-3.315407e-09", "%+#.6e",
-__LINE__, -3.318402800998018e-09, "-3.3184E-09", "%+G",
-__LINE__, -3.324277622889107e-04, "-0.000332428", "%G",
-__LINE__, -3.326372457131185e+14, "-3.326372e+14", "%0e",
-__LINE__, -3.333300611287597e+18, "-3.3E+18", "%4.2G",
-__LINE__, -3.333608976277018e-25, "-3.33361e-25", "%g",
-__LINE__, -3.333613056182724e-24, "-3.33361e-24", "%.5e",
-__LINE__, -3.338505874378410e-26, "-0.00000", "%.5f",
-__LINE__, -3.339838772519661e+24, "-3.3398E+24", "%0.5G",
-__LINE__, -3.354802735583258e-27, "-3.3548E-27", "%G",
-__LINE__, -3.356542080644329e+15, "-3356542080644329.129058", "%#f",
-__LINE__, -3.360027692463026e-29, "-3.36003e-29", "%+g",
-__LINE__, -3.361845657814323e+06, "-3361845.657814", "%f",
-__LINE__, -3.363135493765816e-12, " -0", "%5.f",
-__LINE__, -3.367383112102258e+19, "-33673831121022579360.158034", "%f",
-__LINE__, -3.376798505037497e+03, "-3376.8", "%+3G",
-__LINE__, -3.388170639372559e+09, "-3.388171e+09", "%+e",
-__LINE__, -3.397304185715499e-12, "-3.397304e-12", "%+e",
-__LINE__, -3.401559374016378e-13, "-3.40156e-13", "%g",
-__LINE__, -3.402651870178825e+21, "-3.40265e+21", "%+g",
-__LINE__, -3.410491213537530e+12, "-3.41049E+12", "%G",
-__LINE__, -3.411695570460075e-01, "-3.411696e-01", "%e",
-__LINE__, -3.417311435719220e+29, "-3.4E+29", "%3.1E",
-__LINE__, -3.417581063208165e-23, " -0", "%+4.f",
-__LINE__, -3.424005615113663e-28, "-0.000000", "%f",
-__LINE__, -3.424793585094130e-12, "-0.000000", "%f",
-__LINE__, -3.434733077762304e-05, "-3.43473e-05", "%g",
-__LINE__, -3.436384988494743e+08, "-3.43638E+08", "%G",
-__LINE__, -3.441082995163884e-21, "-0.000000", "%f",
-__LINE__, -3.442868661576827e-23, "-3.442869e-23", "%#.7g",
-__LINE__, -3.444337521046186e+13, "-3.44434E+13", "%#G",
-__LINE__, -3.448230173418967e-28, "-3.44823E-28", "%#G",
-__LINE__, -3.448523828225326e-21, "-3.4485e-21", "%.4e",
-__LINE__, -3.449876796754720e-07, "-3.44988e-07", "%g",
-__LINE__, -3.450163790411588e+25, "-34501637904115876054333966.749255", "%2f",
-__LINE__, -3.450224454406567e-26, "-3.450224E-26", "%#1E",
-__LINE__, -3.459930768422874e-28, "-3.46E-28", "%2.3G",
-__LINE__, -3.460730505022601e-28, "-3.46073e-28", "%#g",
-__LINE__, -3.462894265593946e-10, "-3.46289e-10", "%+#g",
-__LINE__, -3.464808359229496e+05, "-346481", "%6.6G",
-__LINE__, -3.467272303652620e-03, "-0.00346727", "%g",
-__LINE__, -3.468252706910251e+10, "-3.5E+10", "%#7.2G",
-__LINE__, -3.473623965680253e+27, "-3.47362e+27", "%g",
-__LINE__, -3.474527926009729e+11, "-3.475E+11", "%.4G",
-__LINE__, -3.476489048299929e+15, "-3.47649e+15", "%g",
-__LINE__, -3.477809698895344e-09, "-0.000", "%+.3f",
-__LINE__, -3.493008398637667e-28, " -0", "%+4.f",
-__LINE__, -3.497441286691613e+07, "-3.49744e+07", "%g",
-__LINE__, -3.500904660533358e+00, "-3.500905E+00", "%+1E",
-__LINE__, -3.504996054364915e+25, "-3.505e+25", "%+g",
-__LINE__, -3.507738629125434e-24, "-0.00", "%+4.2f",
-__LINE__, -3.508557770253211e-04, "-3.508558e-04", "%#6e",
-__LINE__, -3.516056824437550e+20, "-3.516057e+20", "%#e",
-__LINE__, -3.521102917733367e+02, "-352.11", "%g",
-__LINE__, -3.523948985825251e+10, "-3.52395e+10", "%+g",
-__LINE__, -3.525281835697895e-15, "-3.525282e-15", "%e",
-__LINE__, -3.534088845494570e-26, "-0.000000", "%2f",
-__LINE__, -3.541002442741569e+01, "-35.410", "%3.3f",
-__LINE__, -3.541126630345017e-19, "-3.541127e-19", "%e",
-__LINE__, -3.545277845967514e-17, "-0.000000", "%f",
-__LINE__, -3.560935430637329e-12, "-3.56094E-12", "%G",
-__LINE__, -3.564234584447659e-23, "-3.56423E-23", "%G",
-__LINE__, -3.576040378379921e-11, "-0.000000", "%+6f",
-__LINE__, -3.578133580350674e-05, "-3.578134e-05", "%#e",
-__LINE__, -3.584484015191491e-28, "-0.0", "%+2.1f",
-__LINE__, -3.591961845146752e+27, "-3.59196E+27", "%G",
-__LINE__, -3.602508380305001e+26, "-3.60251e+26", "%g",
-__LINE__, -3.603113449808132e+04, "-36031.134498", "%+3.6f",
-__LINE__, -3.605569849504628e+25, "-4E+25", "%6.G",
-__LINE__, -3.611297754851416e+05, "-361129.775485", "%+f",
-__LINE__, -3.613177909959201e-28, "-0.000000", "%f",
-__LINE__, -3.616261225230595e-01, "-0.361626", "%3g",
-__LINE__, -3.619203521536307e+09, "-3.6192E+09", "%G",
-__LINE__, -3.619316709131723e-27, "-0.0000000", "%.7f",
-__LINE__, -3.623100583082346e+28, "-3.6231E+28", "%+G",
-__LINE__, -3.626582653589919e+21, "-3626582653589918603387.332041", "%f",
-__LINE__, -3.626667540343067e-30, "-4.E-30", "%#.0G",
-__LINE__, -3.633539220625861e-30, "-3.634E-30", "%+.3E",
-__LINE__, -3.641655782149502e-11, "-3.64166E-11", "%G",
-__LINE__, -3.644523594046571e+25, "-3.64452e+25", "%5g",
-__LINE__, -3.645977605394108e+25, "-3.646e+25", "%+0.3e",
-__LINE__, -3.647864582248812e+13, "-4E+13", "%4.G",
-__LINE__, -3.655241667633056e-25, "-3.655242E-25", "%E",
-__LINE__, -3.662603655433297e+23, "-3.662604e+23", "%e",
-__LINE__, -3.668995445134158e+22, " -4E+22", "%7.G",
-__LINE__, -3.670006666569412e-11, "-3.670007e-11", "%e",
-__LINE__, -3.670510381138509e-24, "-3.670510e-24", "%e",
-__LINE__, -3.671283003268254e-20, "-3.67128E-20", "%G",
-__LINE__, -3.687760201176777e-13, "-3.68776E-13", "%G",
-__LINE__, -3.687983982100676e-14, "-0.00", "%.2f",
-__LINE__, -3.694808382827435e-12, "-3.694808E-12", "%#E",
-__LINE__, -3.696158520838821e+28, "-3.69616E+28", "%3G",
-__LINE__, -3.700911860811323e+18, "-3.70091e+18", "%+g",
-__LINE__, -3.701328314738669e+24, "-3.70133e+24", "%g",
-__LINE__, -3.707068461822151e-19, "-3.707068E-19", "%E",
-__LINE__, -3.710679411506914e+25, "-3.71068e+25", "%g",
-__LINE__, -3.713003840923896e-23, "-3.713e-23", "%7g",
-__LINE__, -3.717028397747828e-28, "-3.71703e-28", "%g",
-__LINE__, -3.728159642236442e+14, "-3.72816E+14", "%G",
-__LINE__, -3.731956233637010e+21, "-3.73196E+21", "%G",
-__LINE__, -3.742336623322610e+07, "-3.74234e+07", "%g",
-__LINE__, -3.748328269630045e+04, "-37483.3", "%G",
-__LINE__, -3.750803081283569e-27, "-3.7508E-27", "%+7G",
-__LINE__, -3.752021500826652e-04, "-0.0004", "%.1G",
-__LINE__, -3.755942257004103e-12, "-3.75594E-12", "%G",
-__LINE__, -3.765921235889045e+03, " -4e+03", "%+7.g",
-__LINE__, -3.772453135667801e-28, "-3.77245E-28", "%G",
-__LINE__, -3.776384200230367e+27, "-3.776e+27", "%1.4g",
-__LINE__, -3.787035870684945e-25, "-4E-25", "%+3.G",
-__LINE__, -3.798616350818839e-29, "-3.7986164e-29", "%.7e",
-__LINE__, -3.807178315238428e-15, "-0.000000", "%+#6f",
-__LINE__, -3.822059837967635e+18, "-3822059837967634621.236357", "%6.6f",
-__LINE__, -3.823553096022006e+12, "-3.82355e+12", "%g",
-__LINE__, -3.839198115259428e-23, "-0.000000", "%f",
-__LINE__, -3.846953640321746e+02, "-3.846954E+02", "%E",
-__LINE__, -3.852230696542361e+08, "-3.8522e+08", "%#.5g",
-__LINE__, -3.861139362195314e-25, "-3.86114E-25", "%2G",
-__LINE__, -3.873388618099769e+09, "-3873388618", "%0.0f",
-__LINE__, -3.874161550543817e+15, "-3.874162e+15", "%+e",
-__LINE__, -3.874527935469425e+20, "-3.87E+20", "%3.3G",
-__LINE__, -3.878069577893697e-30, "-3.878070E-30", "%#E",
-__LINE__, -3.878852490397702e-20, "-3.87885e-20", "%g",
-__LINE__, -3.879688342272101e-10, "-0.00", "%#4.2f",
-__LINE__, -3.879797428399897e+03, "-3880", "%1.4g",
-__LINE__, -3.881588804766756e+00, "-3.9", "%+4.2G",
-__LINE__, -3.889377318111182e+01, "-38.8938", "%+.4f",
-__LINE__, -3.893444523430385e-03, "-0.004", "%+2.g",
-__LINE__, -3.894912141515856e+03, "-3894.91", "%+g",
-__LINE__, -3.905279115773667e+04, "-39052.791158", "%f",
-__LINE__, -3.905333955484919e-20, "-3.90533E-20", "%G",
-__LINE__, -3.906559442060730e+27, "-3906559442060730447110472596.250474", "%f",
-__LINE__, -3.909396469655334e-26, "-3.91E-26", "%.3G",
-__LINE__, -3.920132491092364e+11, "-3.92013e+11", "%g",
-__LINE__, -3.935651497471973e+27, "-3935651497471972604103029880", "%5.f",
-__LINE__, -3.939742577853889e-03, "-0.004", "%5.G",
-__LINE__, -3.943284017088198e+19, "-39432840170881981123.3", "%.1f",
-__LINE__, -3.947452186327660e+09, "-3947452186.33", "%0.2f",
-__LINE__, -3.951967237553488e+18, "-3951967237553488132.562052", "%f",
-__LINE__, -3.953673427359789e-28, "-3.954E-28", "%3.4G",
-__LINE__, -3.956044867371602e+23, "-4e+23", "%+6.1g",
-__LINE__, -3.965038994251913e-20, "-3.96504e-20", "%g",
-__LINE__, -3.970527677577937e+05, "-4.e+05", "%#0.1g",
-__LINE__, -3.970717822164395e-20, "-3.970718e-20", "%6e",
-__LINE__, -3.978063834438912e-19, "-3.97806E-19", "%G",
-__LINE__, -3.982705395472599e+27, "-3.9827e+27", "%#.5g",
-__LINE__, -3.983486821352571e-28, "-3.98349e-28", "%g",
-__LINE__, -3.985470630230926e-14, "-4e-14", "%.2g",
-__LINE__, -3.993095662863953e-16, "-3.993096e-16", "%e",
-__LINE__, -4.006984141314271e-22, " -4e-22", "%7.2g",
-__LINE__, -4.006984141314271e-22, "-4.0e-22", "%#7.2g",
-__LINE__, -4.013226099863981e+06, "-4.013226E+06", "%+E",
-__LINE__, -4.013702226581167e+00, "-4.0137022", "%+#3.7f",
-__LINE__, -4.017598274642537e+11, "-4E+11", "%5.G",
-__LINE__, -4.021385792825529e-09, " -4e-09", "%7.2g",
-__LINE__, -4.024099064819937e-20, "-4.0241E-20", "%+G",
-__LINE__, -4.026952473441366e+22, "-4.026952e+22", "%6.7g",
-__LINE__, -4.027636677087866e+12, "-4.02764E+12", "%G",
-__LINE__, -4.036506013049443e+17, "-4.03651e+17", "%0.6g",
-__LINE__, -4.063191953523012e-06, " -0.0", "%6.1f",
-__LINE__, -4.070953223475192e-23, "-4.07095E-23", "%G",
-__LINE__, -4.072425833070524e+09, "-4.072426E+09", "%E",
-__LINE__, -4.086025576759603e+12, "-4.086026e+12", "%e",
-__LINE__, -4.086627783296081e-24, "-4.087E-24", "%.3E",
-__LINE__, -4.086683676772144e+10, "-40866836767.721439", "%f",
-__LINE__, -4.087336043219081e-10, "-0.", "%+#0.f",
-__LINE__, -4.125162973336809e-26, "-4.125163E-26", "%.7G",
-__LINE__, -4.150753797717075e-10, "-4.2e-10", "%.2g",
-__LINE__, -4.152126152181912e+23, "-4.15213e+23", "%g",
-__LINE__, -4.164458223079432e-07, "-4.164458E-07", "%E",
-__LINE__, -4.170624866130099e+03, "-4170.624866", "%4.6f",
-__LINE__, -4.171137277374942e-01, " -4E-01", "%+7.E",
-__LINE__, -4.176067421901769e-25, "-4.17607E-25", "%G",
-__LINE__, -4.179514418604771e+24, "-4.1795e+24", "%3.5g",
-__LINE__, -4.196285183415621e+23, "-4.19629E+23", "%5G",
-__LINE__, -4.198600486581023e+23, "-4E+23", "%+4.G",
-__LINE__, -4.199020494598538e-16, "-0.000000", "%+f",
-__LINE__, -4.207824153501688e-01, "-0.420782", "%G",
-__LINE__, -4.219086441294006e-13, " -0", "%+4.f",
-__LINE__, -4.223689582765525e+12, "-4.22369e+12", "%g",
-__LINE__, -4.230213377391093e+04, "-42302.1", "%+2.6G",
-__LINE__, -4.232495358100605e-02, "-0.042325", "%+f",
-__LINE__, -4.235459662515940e-29, "-0.000000", "%f",
-__LINE__, -4.240807508057296e-07, "-4e-07", "%0.g",
-__LINE__, -4.248376819122346e-13, "-4.248377e-13", "%7e",
-__LINE__, -4.251361939638334e-23, "-4.251362E-23", "%E",
-__LINE__, -4.253044333568077e+24, "-4.253044e+24", "%4e",
-__LINE__, -4.255728039119772e-30, "-4.25573E-30", "%2G",
-__LINE__, -4.256502531648988e+02, "-425.65", "%G",
-__LINE__, -4.260731632612400e-04, "-0", "%2.f",
-__LINE__, -4.262037138254753e-25, "-4e-25", "%5.g",
-__LINE__, -4.270910126379393e+00, "-4.2709", "%#7.4f",
-__LINE__, -4.273844276097008e-09, " -0.", "%#4.f",
-__LINE__, -4.280424136111831e+21, "-4.280E+21", "%.3E",
-__LINE__, -4.284351940366486e-23, "-0.000000", "%+f",
-__LINE__, -4.291747881693517e-29, "-4.3e-29", "%+#.2g",
-__LINE__, -4.298346825232928e+04, "-42983.5", "%G",
-__LINE__, -4.298879924365432e+28, "-42988799243654316484253286034.800112", "%f",
-__LINE__, -4.302192665689887e-25, "-0.000000", "%f",
-__LINE__, -4.303899568112784e+06, "-4E+06", "%1.G",
-__LINE__, -4.307399960278190e-30, "-4.31e-30", "%.3g",
-__LINE__, -4.341161949359232e+01, "-43.411619", "%+f",
-__LINE__, -4.353334435604675e+17, " -4e+17", "%+7.g",
-__LINE__, -4.354760231068195e+08, "-4e+08", "%2.e",
-__LINE__, -4.363535913318519e+08, "-4.363536E+08", "%+7E",
-__LINE__, -4.365389605557404e-29, "-4.365390e-29", "%e",
-__LINE__, -4.369278570829168e-22, "-4.369279E-22", "%5E",
-__LINE__, -4.372187639240662e-11, "-4.37219e-11", "%+g",
-__LINE__, -4.374221079233858e-15, "-4.37422E-15", "%4.6G",
-__LINE__, -4.374840292001664e-13, "-0.000000", "%+f",
-__LINE__, -4.376554800103945e+16, "-43765548001039453.751559", "%f",
-__LINE__, -4.376659235899513e+07, "-4.4E+07", "%0.2G",
-__LINE__, -4.377316129868239e-06, "-4.37732E-06", "%+5G",
-__LINE__, -4.380028480226885e+21, "-4e+21", "%1.0e",
-__LINE__, -4.380434965450223e+16, "-43804349654502230.393405", "%f",
-__LINE__, -4.392477080355168e-15, "-4E-15", "%+2.G",
-__LINE__, -4.396120020536161e+17, "-439612002053616102.159594", "%#f",
-__LINE__, -4.400993154571784e+13, "-44009931545717.844159", "%f",
-__LINE__, -4.402873692051930e-26, "-4.4e-26", "%5.3g",
-__LINE__, -4.405330274903779e+24, "-4405330274903779042006135.568954", "%+5f",
-__LINE__, -4.406272291312090e+06, "-4.40627e+06", "%+g",
-__LINE__, -4.407065949816988e-13, "-0.000000", "%f",
-__LINE__, -4.408295597674563e-10, "-4.4083e-10", "%g",
-__LINE__, -4.417553815178214e-30, "-4.41755E-30", "%G",
-__LINE__, -4.428894120469459e+16, "-4.42889e+16", "%g",
-__LINE__, -4.433747825142046e+04, "-4.433748e+04", "%#e",
-__LINE__, -4.435051082856639e+11, "-4.43505E+11", "%G",
-__LINE__, -4.445045573007259e-27, "-4.445e-27", "%.5g",
-__LINE__, -4.447791368960968e-25, " -4e-25", "%+7.g",
-__LINE__, -4.449691386526521e-11, "-4.44969e-11", "%g",
-__LINE__, -4.451399093849402e+06, "-4.e+06", "%#0.e",
-__LINE__, -4.453753130320864e-22, "-4E-22", "%6.E",
-__LINE__, -4.455910780463539e+00, "-4", "%2.g",
-__LINE__, -4.464935674747308e+25, "-4.46494e+25", "%g",
-__LINE__, -4.469759565657550e-29, "-4.46976e-29", "%g",
-__LINE__, -4.473254139442931e+14, "-4E+14", "%3.1G",
-__LINE__, -4.480844704930373e-04, "-0.000448", "%5.6f",
-__LINE__, -4.484177356024563e+19, "-4.484177E+19", "%E",
-__LINE__, -4.488115678357666e-13, "-4.48812e-13", "%g",
-__LINE__, -4.491545112281561e+12, "-4.491545E+12", "%E",
-__LINE__, -4.492547433553077e-23, "-4.49255e-23", "%g",
-__LINE__, -4.492701755830813e-05, "-0.000045", "%f",
-__LINE__, -4.497405935096372e-02, "-4.497406e-02", "%e",
-__LINE__, -4.502764260212887e+21, "-4.50276E+21", "%G",
-__LINE__, -4.511984199938207e+29, "-451198419993820731832556703011.505306", "%f",
-__LINE__, -4.514517861504637e-13, "-4.51452e-13", "%g",
-__LINE__, -4.525577218881990e+24, "-4.5e+24", "%2.2g",
-__LINE__, -4.549244580903896e-26, "-5E-26", "%2.G",
-__LINE__, -4.569192488002113e-29, "-5E-29", "%3.G",
-__LINE__, -4.572011438847734e+17, "-4.57e+17", "%#.3g",
-__LINE__, -4.573010973514519e-08, "-4.57301e-08", "%+7g",
-__LINE__, -4.584534976177852e-04, "-0.000458453", "%7g",
-__LINE__, -4.584729895132228e-21, "-0.000000", "%4f",
-__LINE__, -4.585259328217483e-30, "-4.58526E-30", "%+#4.6G",
-__LINE__, -4.589603063610410e-04, "-4.589603E-04", "%+E",
-__LINE__, -4.592428795671033e+22, " -5e+22", "%7.g",
-__LINE__, -4.595683678223830e-20, " -0", "%5.f",
-__LINE__, -4.602585606100101e+05, "-4.602586E+05", "%E",
-__LINE__, -4.603375306660027e-08, "-5E-08", "%+6.G",
-__LINE__, -4.611341343728034e-18, "-4.611341e-18", "%5e",
-__LINE__, -4.613608487855863e+05, "-461361", "%6g",
-__LINE__, -4.615997775774194e-24, "-4.61600e-24", "%#g",
-__LINE__, -4.620310950564759e+23, "-462031095056475926696749", "%1.0f",
-__LINE__, -4.620645693595563e-10, "-4.6206457e-10", "%.7e",
-__LINE__, -4.621527706233292e-09, "-4.621528e-09", "%#e",
-__LINE__, -4.625215210297273e-13, "-4.62522E-13", "%G",
-__LINE__, -4.636755152220100e-29, "-0.000000", "%#f",
-__LINE__, -4.641203877508087e+23, "-4.6412e+23", "%0g",
-__LINE__, -4.648627249239175e+23, "-4.65E+23", "%+0.3G",
-__LINE__, -4.662546890623409e-10, "-4.663E-10", "%.3E",
-__LINE__, -4.664488650292317e-27, "-4.66449e-27", "%#g",
-__LINE__, -4.668715685060282e+08, "-466871568.50603", "%.5f",
-__LINE__, -4.673332851657081e-18, "-4.7e-18", "%#5.2g",
-__LINE__, -4.683361436174074e+24, "-4.68e+24", "%#.2e",
-__LINE__, -4.693748680461066e-01, "-0.469375", "%G",
-__LINE__, -4.697110010549124e+23, "-4.69711E+23", "%G",
-__LINE__, -4.710442739966989e+06, "-4.710443e+06", "%2e",
-__LINE__, -4.713427678642280e-09, "-4.71343e-09", "%g",
-__LINE__, -4.721999055940316e-04, "-4.721999e-04", "%#1e",
-__LINE__, -4.724262200578540e+17, "-472426220057853996.081576", "%+f",
-__LINE__, -4.733267644288093e+01, "-4.733268e+01", "%7e",
-__LINE__, -4.742854711396110e-11, "-0.000000", "%f",
-__LINE__, -4.757456106385936e+23, "-4.75746e+23", "%g",
-__LINE__, -4.770895495642298e+27, "-4770895495642298200777986494.358629", "%2f",
-__LINE__, -4.775073456318149e+29, "-4.775073E+29", "%#E",
-__LINE__, -4.779997387204258e+17, "-4.78e+17", "%g",
-__LINE__, -4.799264315770707e-23, "-4.799264E-23", "%+.7G",
-__LINE__, -4.814277930599660e+10, "-5e+10", "%2.1g",
-__LINE__, -4.818413387018612e+05, "-5e+05", "%.0g",
-__LINE__, -4.818827195107612e-16, "-4.818827e-16", "%e",
-__LINE__, -4.841524514024803e+21, "-4.84152E+21", "%G",
-__LINE__, -4.860585077313477e+10, "-4.86059E+10", "%+G",
-__LINE__, -4.870037451948589e+28, "-48700374519485887248038125107.996166", "%f",
-__LINE__, -4.888835952705153e-28, "-4.888836E-28", "%+E",
-__LINE__, -4.893523355754114e-19, "-4.893523e-19", "%.6e",
-__LINE__, -4.906070260482585e+17, "-490607026048258454", "%+.0f",
-__LINE__, -4.907734144101900e+25, "-5E+25", "%+.1G",
-__LINE__, -4.917899547741841e-25, "-4.917900e-25", "%e",
-__LINE__, -4.923348512538722e+25, "-49233485125387215219916470.232420", "%+.6f",
-__LINE__, -4.926052630078460e-26, "-4.926053e-26", "%e",
-__LINE__, -4.926751662051156e+14, "-4.927E+14", "%+5.3E",
-__LINE__, -4.928017952199046e-12, "-0.000000", "%f",
-__LINE__, -4.944296782981195e-21, "-4.9443E-21", "%1.5G",
-__LINE__, -4.947320427183599e-19, "-4.947320e-19", "%.6e",
-__LINE__, -4.968188938972135e+17, "-4.96819E+17", "%G",
-__LINE__, -4.968756725758674e+05, "-496876", "%G",
-__LINE__, -4.968788759793340e-26, "-4.97E-26", "%.3G",
-__LINE__, -4.983904999913364e-24, "-5E-24", "%0.G",
-__LINE__, -4.985209496522767e+23, "-4.985209e+23", "%e",
-__LINE__, -4.987363880732866e+08, "-4.98736E+08", "%G",
-__LINE__, -4.989754940144973e+05, "-498975.494014", "%f",
-__LINE__, -4.998203870733718e-25, "-4.9982e-25", "%g",
-__LINE__, -4.999153445016792e-27, "-5e-27", "%+1.e",
-__LINE__, -5.002693488258108e+06, " -5e+06", "%+7.g",
-__LINE__, -5.017958458603783e+05, "-5.0179585E+05", "%+.7E",
-__LINE__, -5.028902178573363e-12, "-5.0289e-12", "%0g",
-__LINE__, -5.032337536971444e+07, "-50323375.369714", "%f",
-__LINE__, -5.036525516370473e-24, "-5.0365e-24", "%4.5g",
-__LINE__, -5.038642321515756e+18, "-5038642321515755639.893541", "%f",
-__LINE__, -5.051003516976770e-14, "-5.051E-14", "%+G",
-__LINE__, -5.051196143816789e+27, "-5.0512e+27", "%g",
-__LINE__, -5.057372886713786e+28, "-5.057373e+28", "%#e",
-__LINE__, -5.057475029459727e+12, "-5.05748e+12", "%+g",
-__LINE__, -5.068286816124670e-17, "-5.068E-17", "%5.3E",
-__LINE__, -5.070475165759468e-12, "-0.000000", "%4.6f",
-__LINE__, -5.081352543220476e+20, "-5.081E+20", "%.3E",
-__LINE__, -5.084398319179363e+11, "-508439831917.936313", "%#f",
-__LINE__, -5.085781220648484e+05, "-5.E+05", "%+#7.G",
-__LINE__, -5.094941054632498e-24, "-5.09494E-24", "%+G",
-__LINE__, -5.100059596310871e-10, "-5.10006e-10", "%3.6g",
-__LINE__, -5.103072553594136e-01, "-0.5", "%+1.g",
-__LINE__, -5.106319890388412e+08, "-5.106320e+08", "%4e",
-__LINE__, -5.107120687977690e+09, "-5107120687.977690", "%f",
-__LINE__, -5.119910716893161e-13, "-5.11991E-13", "%6G",
-__LINE__, -5.127594569425709e-29, "-5.12759e-29", "%#g",
-__LINE__, -5.130365585632797e+29, "-5.13037e+29", "%#g",
-__LINE__, -5.131415638022112e+08, "-513141563.802211", "%0f",
-__LINE__, -5.144703216335916e-23, "-5.1447e-23", "%g",
-__LINE__, -5.152511923201882e-05, "-5.15251E-05", "%+G",
-__LINE__, -5.165484448280190e-12, " -0.0", "%5.1f",
-__LINE__, -5.179220760465737e-20, "-5e-20", "%+5.g",
-__LINE__, -5.183005119662180e-10, "-5.183005E-10", "%+E",
-__LINE__, -5.199587953258117e+13, "-5.19959e+13", "%6g",
-__LINE__, -5.202041951844580e-25, "-0.000000", "%f",
-__LINE__, -5.202836038621740e+00, "-5.20284", "%G",
-__LINE__, -5.212204099528552e-11, "-5.2122e-11", "%.6g",
-__LINE__, -5.225617726710534e+17, "-522561772671053414.995868", "%+f",
-__LINE__, -5.230162003281426e+25, "-52301620032814257754694153.84578", "%+6.5f",
-__LINE__, -5.251849429321286e-11, "-5.25185e-11", "%g",
-__LINE__, -5.265174939930368e+23, "-5.265175E+23", "%1.6E",
-__LINE__, -5.271218134351422e+21, "-5.27122e+21", "%+1g",
-__LINE__, -5.273823357545750e+17, "-527382335754575048.980541", "%f",
-__LINE__, -5.279848797214957e+11, "-527984879721.495659", "%0f",
-__LINE__, -5.281551888625290e+11, "-5e+11", "%4.g",
-__LINE__, -5.281780377142961e-24, "-5.28178e-24", "%g",
-__LINE__, -5.292125782379512e+03, "-5292.125782", "%f",
-__LINE__, -5.292401691410388e+15, "-5292401691410387.520875", "%f",
-__LINE__, -5.305120752102265e-25, "-5.30512e-25", "%+#.5e",
-__LINE__, -5.317975791704413e+16, "-5.31798e+16", "%+g",
-__LINE__, -5.336522843607233e+27, "-5.33652e+27", "%#6g",
-__LINE__, -5.342016438000917e-05, " -5e-05", "%+7.e",
-__LINE__, -5.351122291549103e+06, "-5351122.291549", "%+0f",
-__LINE__, -5.352043956303597e+00, "-5.35204", "%g",
-__LINE__, -5.353582488767747e+09, "-5.354E+09", "%7.3E",
-__LINE__, -5.383420177718380e+04, "-5e+04", "%1.e",
-__LINE__, -5.384320189791882e-10, "-5.384320e-10", "%e",
-__LINE__, -5.409487543257379e-12, "-5.40949E-12", "%G",
-__LINE__, -5.418395794776773e+23, "-5.4184e+23", "%g",
-__LINE__, -5.419918795921525e-09, "-0.000000", "%+f",
-__LINE__, -5.422374157832442e+11, "-5.42237e+11", "%3g",
-__LINE__, -5.426916951577001e-27, "-5.42692E-27", "%+G",
-__LINE__, -5.430058833461779e+28, "-5.43006E+28", "%G",
-__LINE__, -5.444433348653147e+23, "-5.444433E+23", "%E",
-__LINE__, -5.446560186537024e+09, "-5.446560E+09", "%E",
-__LINE__, -5.464243500152188e+27, "-5.46424E+27", "%G",
-__LINE__, -5.464427517531742e+20, "-546442751753174249529.365625", "%f",
-__LINE__, -5.465783705970954e+05, "-5E+05", "%1.E",
-__LINE__, -5.475138077475789e-11, "-5e-11", "%.0e",
-__LINE__, -5.475302250616576e+10, "-54753022506.1658", "%.4f",
-__LINE__, -5.488964905442472e+09, "-5.48896e+09", "%g",
-__LINE__, -5.492508526846316e-08, "-5.49251e-08", "%.6g",
-__LINE__, -5.520533408804846e-15, "-5.520533e-15", "%e",
-__LINE__, -5.532744688447266e+28, "-55327446884472664123677532188.594341", "%2.6f",
-__LINE__, -5.535834653450131e-14, "-5.5e-14", "%0.1e",
-__LINE__, -5.554344735392882e-02, "-5.554345E-02", "%+#E",
-__LINE__, -5.555497334515501e-17, "-5.5555e-17", "%g",
-__LINE__, -5.558304303221977e+14, "-555830430322197.699411", "%f",
-__LINE__, -5.562210815777694e-05, "-5.562211E-05", "%#1E",
-__LINE__, -5.564800722538402e-09, "-5.56480e-09", "%#.6g",
-__LINE__, -5.567143271590439e-01, "-5.567143e-01", "%#e",
-__LINE__, -5.568606044396186e+01, "-55.6861", "%4g",
-__LINE__, -5.592027856401721e+12, "-5.592028e+12", "%.7g",
-__LINE__, -5.592295342565443e+22, "-6.E+22", "%#3.G",
-__LINE__, -5.600007421926053e+07, "-56000074.219261", "%1f",
-__LINE__, -5.601444553155006e-12, "-5.60144E-12", "%G",
-__LINE__, -5.605128912835080e-03, "-0.005605", "%+f",
-__LINE__, -5.610950285679577e+19, "-5.61095E+19", "%G",
-__LINE__, -5.622074657679467e+11, "-562207465767.946690", "%f",
-__LINE__, -5.627358352391656e-01, "-0.6", "%1.g",
-__LINE__, -5.627974317622488e-02, "-5.627974e-02", "%+e",
-__LINE__, -5.629497696447229e+27, "-5.629E+27", "%+.4G",
-__LINE__, -5.631383567258576e-29, "-5.63138e-29", "%0g",
-__LINE__, -5.635241327177333e-18, "-5.63524E-18", "%G",
-__LINE__, -5.644819783138381e+06, "-5.644820E+06", "%#E",
-__LINE__, -5.648538459114833e+26, "-564853845911483265496144667.849876", "%+f",
-__LINE__, -5.649004865848537e+00, "-5.649", "%g",
-__LINE__, -5.653403316885170e+23, "-6E+23", "%2.0E",
-__LINE__, -5.656109962244926e-18, "-0.000000", "%f",
-__LINE__, -5.674988031695793e+22, "-5.674988E+22", "%+.7G",
-__LINE__, -5.686380226400881e-22, "-0.000000", "%f",
-__LINE__, -5.698840855829442e-14, "-5.69884E-14", "%G",
-__LINE__, -5.707036642649580e+03, "-5707.036643", "%f",
-__LINE__, -5.710344882278847e+11, "-5.71034E+11", "%+G",
-__LINE__, -5.714852196401017e+19, "-5.71485E+19", "%+G",
-__LINE__, -5.720153622156089e-22, "-5.72015E-22", "%G",
-__LINE__, -5.722366011976922e+26, "-5.72237e+26", "%+g",
-__LINE__, -5.722909928097404e+12, "-5.72291E+12", "%2G",
-__LINE__, -5.725325961787777e-25, "-5.72533e-25", "%g",
-__LINE__, -5.727138241052646e+19, "-5.72714e+19", "%+#g",
-__LINE__, -5.734025840446336e+14, "-5.73403e+14", "%+g",
-__LINE__, -5.736469106710259e-05, "-0.000057", "%.6f",
-__LINE__, -5.755099153733116e-14, "-5.7551e-14", "%+g",
-__LINE__, -5.758411844890947e-20, "-6E-20", "%+6.G",
-__LINE__, -5.760350214122813e+03, "-5760.35", "%+g",
-__LINE__, -5.768009192512392e-30, "-0", "%1.f",
-__LINE__, -5.772343286693103e+07, "-5.77234E+07", "%G",
-__LINE__, -5.776693265471852e-27, "-5.776693E-27", "%E",
-__LINE__, -5.779682861172754e-28, "-5.779683e-28", "%e",
-__LINE__, -5.789953490749936e+26, "-578995349074993637117358957.76656", "%5.5f",
-__LINE__, -5.796771264754334e+04, "-57967.7", "%g",
-__LINE__, -5.804788370597286e-02, "-5.80479E-02", "%+#1.5E",
-__LINE__, -5.805343475329215e-13, "-5.80534e-13", "%g",
-__LINE__, -5.809853913830122e+09, "-5809853914", "%+0.f",
-__LINE__, -5.817313814570609e-30, " -0", "%7.0f",
-__LINE__, -5.831708441750138e+00, "-5.83171", "%#g",
-__LINE__, -5.846914550593652e+29, "-5.846915e+29", "%e",
-__LINE__, -5.851455214762288e+04, "-58514.6", "%+G",
-__LINE__, -5.855803663871393e-23, "-6E-23", "%5.E",
-__LINE__, -5.858065129988470e+10, "-5.85807e+10", "%+g",
-__LINE__, -5.863147168075411e-14, "-5.86315e-14", "%+g",
-__LINE__, -5.878936740266680e-04, "-0.000587894", "%g",
-__LINE__, -5.887654893386630e+25, "-58876548933866299506689756.526612", "%#f",
-__LINE__, -5.889416409731902e-02, "-0.06", "%5.g",
-__LINE__, -5.897630195029892e-18, "-5.897630E-18", "%#0.7G",
-__LINE__, -5.898506808456422e-19, "-5.89851E-19", "%G",
-__LINE__, -5.901768645393515e+29, "-5.90177E+29", "%+G",
-__LINE__, -5.907529093570369e+10, "-59075290935.703695", "%f",
-__LINE__, -5.910069365260240e+13, "-59100693652602.39849", "%+#5.5f",
-__LINE__, -5.915678929676435e-07, "-0.000001", "%+f",
-__LINE__, -5.922232380131716e-01, "-0.592223", "%+3f",
-__LINE__, -5.923716473994306e+19, "-5.92372E+19", "%+#.6G",
-__LINE__, -5.929950428920404e-15, "-5.929950e-15", "%+e",
-__LINE__, -5.949552735665802e+26, "-5.94955e+26", "%#g",
-__LINE__, -5.949977081310732e-02, "-0.059500", "%f",
-__LINE__, -5.954520303889356e-07, "-5.954520E-07", "%5E",
-__LINE__, -5.978861337429145e-13, "-6E-13", "%1.G",
-__LINE__, -5.980539445081087e+15, "-5.98054E+15", "%.6G",
-__LINE__, -5.981724990853490e-03, " -0.006", "%#7.g",
-__LINE__, -5.989488907825821e+03, "-6E+03", "%.2G",
-__LINE__, -5.998272294890842e+06, "-6.00E+06", "%4.2E",
-__LINE__, -6.023775731455919e-29, "-6.023776e-29", "%e",
-__LINE__, -6.028153126666870e-05, "-6.e-05", "%+#6.e",
-__LINE__, -6.036200621484690e+25, "-6e+25", "%2.2g",
-__LINE__, -6.036400640928137e-14, "-6.036401e-14", "%e",
-__LINE__, -6.038198451098329e-20, "-6.038198e-20", "%1.7g",
-__LINE__, -6.045778975641123e-15, "-6.04578E-15", "%G",
-__LINE__, -6.046038904252073e+00, "-6.04604", "%g",
-__LINE__, -6.082158462782175e-06, "-0.000006", "%+#f",
-__LINE__, -6.106162726644904e+10, "-6.10616e+10", "%g",
-__LINE__, -6.126345215489182e+10, "-6e+10", "%+1.g",
-__LINE__, -6.131852309620571e+02, "-6e+02", "%4.e",
-__LINE__, -6.134589313243809e-01, "-0.613459", "%+#f",
-__LINE__, -6.142358153783462e-10, "-6.14236E-10", "%4G",
-__LINE__, -6.151524334856263e+27, "-6151524334856262932191839354.345575", "%+6f",
-__LINE__, -6.156818333724550e+04, "-6.e+04", "%#.1g",
-__LINE__, -6.166172551433993e+24, "-6166172551433993120895138.4178", "%5.4f",
-__LINE__, -6.169532428006014e-09, "-6.16953e-09", "%3g",
-__LINE__, -6.172019382601770e-28, "-0.000000", "%+f",
-__LINE__, -6.174496985807155e-09, "-6.1745E-09", "%G",
-__LINE__, -6.186771845105751e+04, "-61867.7", "%G",
-__LINE__, -6.200817973780066e+22, "-6.20082E+22", "%3G",
-__LINE__, -6.218004335456301e-22, "-0.000000", "%+f",
-__LINE__, -6.219009630546262e-18, "-6.22e-18", "%6.3g",
-__LINE__, -6.242532875230618e-06, "-0.000006", "%7f",
-__LINE__, -6.243612261280864e+14, "-6.24361e+14", "%.6g",
-__LINE__, -6.243689597320126e+10, "-6e+10", "%.0e",
-__LINE__, -6.244620667090527e+04, "-6e+04", "%6.e",
-__LINE__, -6.250789625572054e-09, "-0.000000", "%+f",
-__LINE__, -6.253537566219164e+01, "-63.", "%#1.f",
-__LINE__, -6.284420289484166e+21, "-6.2844203e+21", "%7.7e",
-__LINE__, -6.285939888202846e+27, "-6e+27", "%+.0g",
-__LINE__, -6.290025777678105e+13, "-6E+13", "%2.E",
-__LINE__, -6.291364254323924e+10, "-6.3E+10", "%3.2G",
-__LINE__, -6.292428812164449e+15, "-6292428812164448.714839", "%.6f",
-__LINE__, -6.292600606358002e+29, "-6.29260E+29", "%#G",
-__LINE__, -6.292739629144148e-15, "-6.292740E-15", "%E",
-__LINE__, -6.296471626465745e+28, "-6.29647E+28", "%G",
-__LINE__, -6.299575066640315e+27, "-6.300E+27", "%.3E",
-__LINE__, -6.315234679394876e-24, "-6E-24", "%2.G",
-__LINE__, -6.320883246383228e-01, "-0.632088", "%2g",
-__LINE__, -6.324938413548937e-11, "-6e-11", "%.1g",
-__LINE__, -6.336312983176250e+04, "-6.336313e+04", "%e",
-__LINE__, -6.341786787214541e+06, "-6.341787E+06", "%+7.6E",
-__LINE__, -6.360189291106185e-15, "-0.0000000", "%#.7f",
-__LINE__, -6.364818355457748e-15, "-0.0000000", "%1.7f",
-__LINE__, -6.366291103431814e+04, "-63662.9", "%#G",
-__LINE__, -6.366334042923153e-05, "-6.37e-05", "%5.3g",
-__LINE__, -6.370477455143194e-12, "-0.000000", "%f",
-__LINE__, -6.372829256546279e+23, "-6.37283E+23", "%G",
-__LINE__, -6.375208490193110e-23, "-6.37521e-23", "%4.5e",
-__LINE__, -6.382595100891736e-24, "-6.3826E-24", "%5G",
-__LINE__, -6.396882421146790e-22, "-6.39688e-22", "%+g",
-__LINE__, -6.407190354039938e+08, "-6.40719e+08", "%+g",
-__LINE__, -6.408581541430886e-10, "-6.E-10", "%#0.0G",
-__LINE__, -6.409206904981703e-03, "-0.006", "%+.0G",
-__LINE__, -6.416106714707772e+26, "-641610671470777216285341637.558304", "%f",
-__LINE__, -6.417436981761998e-04, "-0.000642", "%+#f",
-__LINE__, -6.429997249673124e+11, "-642999724967.312414", "%#f",
-__LINE__, -6.440827429825250e+16, "-6.44083E+16", "%G",
-__LINE__, -6.444869858444955e+02, "-6e+02", "%6.g",
-__LINE__, -6.471701890976228e-25, " -6e-25", "%7.1g",
-__LINE__, -6.485393161670371e-12, "-6.485393e-12", "%.6e",
-__LINE__, -6.487710907063584e+23, "-6.E+23", "%#3.E",
-__LINE__, -6.492942931343439e-08, "-0.", "%+#2.0f",
-__LINE__, -6.496010652113223e+18, "-6.49601e+18", "%g",
-__LINE__, -6.502856921840228e+22, "-6.50286e+22", "%4g",
-__LINE__, -6.523559906055000e-10, "-6.52356E-10", "%.6G",
-__LINE__, -6.525899074126662e+04, "-6.5e+04", "%+.1e",
-__LINE__, -6.532216801155521e-09, "-6.53222E-09", "%G",
-__LINE__, -6.544601787025684e-27, "-0", "%+.0f",
-__LINE__, -6.558968312132168e-01, " -1", "%+6.f",
-__LINE__, -6.559654261655786e+08, "-6.559654e+08", "%e",
-__LINE__, -6.566562622196495e-21, "-6.56656E-21", "%.6G",
-__LINE__, -6.573486832071960e+04, "-65734.9", "%G",
-__LINE__, -6.573806290918275e+13, "-6.57381E+13", "%G",
-__LINE__, -6.578113771674787e+17, "-6.57811E+17", "%+#G",
-__LINE__, -6.584106931007506e+15, "-6.584107E+15", "%E",
-__LINE__, -6.590538844308877e+07, "-65905388.443089", "%f",
-__LINE__, -6.593708834068371e-07, "-0.000001", "%f",
-__LINE__, -6.597116446195875e+08, "-6.5971164e+08", "%#1.7e",
-__LINE__, -6.605813542127091e-04, "-0.0007", "%+0.g",
-__LINE__, -6.607491403866429e+07, "-7e+07", "%3.g",
-__LINE__, -6.616499847522278e+09, "-6.61650E+09", "%+#G",
-__LINE__, -6.618619768691332e+20, "-7E+20", "%2.G",
-__LINE__, -6.626748168962331e-22, "-7.E-22", "%+#3.E",
-__LINE__, -6.639335450348280e+12, "-6.63934e+12", "%g",
-__LINE__, -6.643910144912576e-03, "-0.006644", "%f",
-__LINE__, -6.650293872031870e-18, "-6.65029e-18", "%+#g",
-__LINE__, -6.654903858656310e-21, "-0.000000", "%f",
-__LINE__, -6.665834666726511e-12, "-6.665835E-12", "%E",
-__LINE__, -6.666428729917570e-19, "-0.000000", "%+#f",
-__LINE__, -6.668415789681128e+27, "-6.66842E+27", "%+G",
-__LINE__, -6.675214676269601e-28, "-6.67521e-28", "%#g",
-__LINE__, -6.679560072732262e+01, "-66.7956", "%#g",
-__LINE__, -6.692325075457020e-19, "-0.000000", "%1f",
-__LINE__, -6.697096655164652e+00, "-6.70", "%#.3g",
-__LINE__, -6.712436135928394e-28, "-7e-28", "%0.g",
-__LINE__, -6.720769486122685e-16, "-7e-16", "%0.e",
-__LINE__, -6.727196898490600e+26, "-672719689849060031860972230.8", "%.1f",
-__LINE__, -6.744132627576416e+02, "-674.413", "%6G",
-__LINE__, -6.757705576425288e+28, "-6.7577056e+28", "%.7e",
-__LINE__, -6.760554929237173e-02, "-0.067606", "%+f",
-__LINE__, -6.763538810629361e+10, "-6.7635E+10", "%.4E",
-__LINE__, -6.764712008860796e-29, "-6.76471E-29", "%+G",
-__LINE__, -6.767299719678443e+04, "-67672.997197", "%f",
-__LINE__, -6.768326491352134e+20, "-676832649135213415547.70", "%+.2f",
-__LINE__, -6.771116968952891e+03, "-7E+03", "%3.1G",
-__LINE__, -6.775218099238350e-30, "-7.e-30", "%+#6.g",
-__LINE__, -6.782142689928918e-18, "-0.00", "%4.2f",
-__LINE__, -6.795409770512149e+08, "-7E+08", "%+5.0G",
-__LINE__, -6.820966157097271e+14, "-6.820966e+14", "%e",
-__LINE__, -6.824972990592273e-22, "-0.00", "%+#1.2f",
-__LINE__, -6.830452914741750e+29, "-6.8E+29", "%+7.2G",
-__LINE__, -6.835797187132348e+10, "-6.8358E+10", "%+5G",
-__LINE__, -6.837040829636343e-03, "-0.00683704", "%+g",
-__LINE__, -6.852956218658224e+23, "-6.85296e+23", "%3g",
-__LINE__, -6.854102607287217e-26, "-7e-26", "%5.e",
-__LINE__, -6.865065870249438e+16, "-6.86507E+16", "%#G",
-__LINE__, -6.884819522625523e-13, "-6.88482E-13", "%5G",
-__LINE__, -6.916316600148513e-12, "-0.000000", "%f",
-__LINE__, -6.925312418761560e-05, "-6.92531E-05", "%#G",
-__LINE__, -6.929518694178331e+09, "-6929518694.178", "%#.3f",
-__LINE__, -6.936008056682024e+02, "-6.936008E+02", "%E",
-__LINE__, -6.944911117352400e+26, "-6.944911E+26", "%1.6E",
-__LINE__, -6.945829492125162e+05, "-6.9e+05", "%+2.2g",
-__LINE__, -6.946603162471856e-13, "-6.94660E-13", "%#G",
-__LINE__, -6.947529440406653e+22, "-6.9475e+22", "%+6.5g",
-__LINE__, -6.950167604854856e-30, "-0.000000", "%7f",
-__LINE__, -6.958122319262799e-26, "-7E-26", "%+1.E",
-__LINE__, -6.958978258390961e+16, "-6.95898E+16", "%+5.6G",
-__LINE__, -6.963780466334008e-06, "-6.96378E-06", "%2G",
-__LINE__, -6.965570896221966e+13, "-6.965571E+13", "%5E",
-__LINE__, -6.967741871945064e-10, "-6.96774E-10", "%+#G",
-__LINE__, -6.973815739524307e+19, "-69738157395243067782.076", "%6.3f",
-__LINE__, -6.982714545008106e+13, "-6.98271e+13", "%g",
-__LINE__, -6.985955885054476e+03, "-6985.96", "%6G",
-__LINE__, -6.986415266835747e+18, "-6.98642e+18", "%#g",
-__LINE__, -6.996461529596512e-08, "-7.0E-08", "%#.1E",
-__LINE__, -7.000144914012241e-05, "-7.00014e-05", "%#g",
-__LINE__, -7.001017894492730e-03, "-0.00700102", "%+#.6G",
-__LINE__, -7.003690685875917e+20, "-7E+20", "%0.G",
-__LINE__, -7.010454163965384e+00, "-7.010454e+00", "%+e",
-__LINE__, -7.011493550018082e-26, " -0", "%7.f",
-__LINE__, -7.018018443394008e+21, "-7.0E+21", "%+#1.1E",
-__LINE__, -7.027253777387243e-05, "-7.02725E-05", "%+G",
-__LINE__, -7.043679213677740e-17, "-0", "%1.f",
-__LINE__, -7.051690489227881e-16, "-7.052e-16", "%0.4g",
-__LINE__, -7.063422475274161e-16, "-7.063422E-16", "%E",
-__LINE__, -7.065069592235558e-30, "-7.06507e-30", "%+#g",
-__LINE__, -7.068265283935834e-29, "-7e-29", "%+5.e",
-__LINE__, -7.068748224536295e-13, "-0.000000", "%f",
-__LINE__, -7.069621910708177e-04, "-0.000707", "%1.3g",
-__LINE__, -7.079725450964823e-12, "-0.000000", "%f",
-__LINE__, -7.087255464668218e+17, "-7.1e+17", "%.1e",
-__LINE__, -7.088715102009605e-09, "-7e-09", "%6.0g",
-__LINE__, -7.090414916270137e-15, "-0.00000", "%.5f",
-__LINE__, -7.091868311008428e-03, " -0.0", "%5.1f",
-__LINE__, -7.094242165237718e+21, "-7.09424e+21", "%+g",
-__LINE__, -7.094324305740325e-05, "-7E-05", "%+3.G",
-__LINE__, -7.104544752289144e+04, "-71045.4", "%#g",
-__LINE__, -7.105164644813694e-29, "-0.000000", "%+f",
-__LINE__, -7.114513164219487e-12, "-7.11451e-12", "%+g",
-__LINE__, -7.115778236604137e-12, "-7.11578E-12", "%G",
-__LINE__, -7.126217683410162e-27, "-7.126218e-27", "%e",
-__LINE__, -7.136214260967733e+28, "-71362142609677334803564008325.338364", "%f",
-__LINE__, -7.143452595522573e+19, "-7.14345e+19", "%g",
-__LINE__, -7.156042088843537e+27, "-7156042088843537207765166385.7977837", "%4.7f",
-__LINE__, -7.173687683710490e+24, "-7.17369e+24", "%6g",
-__LINE__, -7.190531162598206e+25, "-71905311625982060164119503", "%4.f",
-__LINE__, -7.201301831373747e-09, "-7.2013e-09", "%g",
-__LINE__, -7.209601436737306e+10, "-7.2096e+10", "%g",
-__LINE__, -7.211058997356655e-06, "-7.211059E-06", "%E",
-__LINE__, -7.226756177676272e-09, "-7.22676E-09", "%+G",
-__LINE__, -7.230870817566419e+19, "-72308708175664193618.1040364", "%#.7f",
-__LINE__, -7.231355992133345e-05, "-7.231356E-05", "%#E",
-__LINE__, -7.245999575278407e-12, "-7.246e-12", "%g",
-__LINE__, -7.247426403040390e-09, "-7.2474E-09", "%+4.5G",
-__LINE__, -7.257348680308567e-12, "-7.3E-12", "%1.2G",
-__LINE__, -7.258184256387366e-26, "-7.25818E-26", "%+2G",
-__LINE__, -7.262633672900126e+10, "-7.26263e+10", "%#g",
-__LINE__, -7.268887462426250e+03, "-7.268887e+03", "%+#e",
-__LINE__, -7.275284494682963e+08, "-7.27528e+08", "%g",
-__LINE__, -7.276335846256479e-07, " -0", "%4.f",
-__LINE__, -7.312556378294452e+15, "-7.31256e+15", "%+6g",
-__LINE__, -7.334763752442417e-15, "-0.0000", "%#.4f",
-__LINE__, -7.354627097325888e-18, "-7E-18", "%0.E",
-__LINE__, -7.360087573342401e-25, "-7.4E-25", "%6.2G",
-__LINE__, -7.368533563361098e-29, "-7.4E-29", "%3.1E",
-__LINE__, -7.379267723540596e-06, "-0.000007", "%f",
-__LINE__, -7.384525781709565e-19, "-0.000000", "%+#f",
-__LINE__, -7.388940868679677e-09, "-7.388941E-09", "%E",
-__LINE__, -7.391602149099698e+00, "-7.391602E+00", "%E",
-__LINE__, -7.393159340196723e+22, "-7.39316e+22", "%#2.6g",
-__LINE__, -7.399783260198277e-16, "-7.39978E-16", "%G",
-__LINE__, -7.405609590448331e-06, "-7.40561e-06", "%g",
-__LINE__, -7.407396977847794e-11, "-7.40740E-11", "%#G",
-__LINE__, -7.433716848698637e+20, "-7.43372e+20", "%+g",
-__LINE__, -7.444176062769411e-01, "-0.744418", "%#g",
-__LINE__, -7.448314697244012e+12, "-7448314697244.011739", "%f",
-__LINE__, -7.449533988369018e+08, "-7.449534e+08", "%+#7e",
-__LINE__, -7.465682839758801e-01, "-7E-01", "%4.E",
-__LINE__, -7.466517843126368e-26, "-7.5E-26", "%.1E",
-__LINE__, -7.471385785539900e+24, "-7471385785539899515583783.795591", "%f",
-__LINE__, -7.478345583780341e+00, "-7.478346e+00", "%e",
-__LINE__, -7.524759284626724e-06, "-7.52476e-06", "%2g",
-__LINE__, -7.534831049342539e-19, "-7.53483E-19", "%G",
-__LINE__, -7.540546673179273e+15, "-8e+15", "%.1g",
-__LINE__, -7.543440436184003e-08, "-7.54344E-08", "%6G",
-__LINE__, -7.558224240835564e-06, "-7.55822e-06", "%g",
-__LINE__, -7.564132915154469e+23, "-756413291515446850610260.298708", "%+f",
-__LINE__, -7.566590720355392e+15, "-7.566591e+15", "%1.6e",
-__LINE__, -7.568565927479741e-01, "-7.568566e-01", "%#6e",
-__LINE__, -7.615574141973305e-17, "-7.6156e-17", "%+.5g",
-__LINE__, -7.641297631509318e-28, "-8e-28", "%+.1g",
-__LINE__, -7.661227834163450e+09, "-7661227834.1634497", "%+#.7f",
-__LINE__, -7.665934364070126e+11, "-766593436407.0", "%.1f",
-__LINE__, -7.682500068463102e-27, "-0.000000", "%+#f",
-__LINE__, -7.709363160273798e+15, "-7.70936e+15", "%g",
-__LINE__, -7.712596019255238e+26, "-7.7e+26", "%.2g",
-__LINE__, -7.730213358437991e+25, "-7.7e+25", "%6.2g",
-__LINE__, -7.744420019068976e+05, "-7.74442E+05", "%.5E",
-__LINE__, -7.745813181942296e+11, "-7.7458132e+11", "%+.7e",
-__LINE__, -7.751004379716307e+16, "-7.751004e+16", "%e",
-__LINE__, -7.759862226564527e-28, "-7.75986e-28", "%g",
-__LINE__, -7.767838880221207e-27, "-7.76784e-27", "%g",
-__LINE__, -7.776301142157532e-19, "-0", "%2.f",
-__LINE__, -7.783944257077553e-14, "-8e-14", "%3.g",
-__LINE__, -7.801587579382377e+28, "-8e+28", "%+0.g",
-__LINE__, -7.806685979552780e+25, "-7.806686E+25", "%E",
-__LINE__, -7.825968891331719e-05, "-7.82597E-05", "%G",
-__LINE__, -7.826834158664018e+12, "-7.826834E+12", "%+#E",
-__LINE__, -7.832536798726886e+24, "-7.83254E+24", "%#1G",
-__LINE__, -7.840485340202362e-18, "-0.000000", "%.6f",
-__LINE__, -7.843236212099233e+21, "-7.84324e+21", "%g",
-__LINE__, -7.906644052019278e-13, "-7.906644E-13", "%E",
-__LINE__, -7.908090440678874e-20, "-7.90809E-20", "%#G",
-__LINE__, -7.917588593012283e+08, "-7.917589E+08", "%+E",
-__LINE__, -7.929100086742454e+29, "-792910008674245414539427656563.930213", "%f",
-__LINE__, -7.933235286034290e+26, "-7.933235E+26", "%E",
-__LINE__, -7.943431966567875e-03, "-0.0079434", "%+.5g",
-__LINE__, -7.950872643572970e-22, "-7.95087e-22", "%2g",
-__LINE__, -7.971225555313069e-01, "-0.797123", "%f",
-__LINE__, -7.978310272676090e-12, "-0.000000", "%#f",
-__LINE__, -8.006805393896414e-29, "-8.00681E-29", "%G",
-__LINE__, -8.006906303018830e+25, "-8.00691E+25", "%+G",
-__LINE__, -8.008484654476057e+18, "-8.008485e+18", "%5.6e",
-__LINE__, -8.008943512904249e+27, "-8008943512904249217854157905.0943", "%+.4f",
-__LINE__, -8.016539743121665e+27, "-8.01654E+27", "%G",
-__LINE__, -8.018247227006128e-05, " -8E-05", "%7.G",
-__LINE__, -8.044391842561705e+21, "-8.04439e+21", "%g",
-__LINE__, -8.081902305002036e-02, "-8.081902E-02", "%E",
-__LINE__, -8.084193011936438e-03, "-0.0080842", "%+5.5g",
-__LINE__, -8.105813534846529e-27, "-0.000000", "%f",
-__LINE__, -8.128116892989251e+00, "-8.12812", "%G",
-__LINE__, -8.136119035731877e+05, "-8e+05", "%+0.g",
-__LINE__, -8.140584224052606e+14, "-8E+14", "%5.G",
-__LINE__, -8.145928897003907e+13, "-8.15E+13", "%.3G",
-__LINE__, -8.164495905907508e-02, "-0.081645", "%G",
-__LINE__, -8.169602113313905e+20, "-8.16960e+20", "%#g",
-__LINE__, -8.179181640418333e+24, "-8.E+24", "%#.1G",
-__LINE__, -8.184324492264231e-18, "-8.18432E-18", "%G",
-__LINE__, -8.186480473850516e-28, "-0.000000", "%+f",
-__LINE__, -8.196858948158896e+07, "-8.1969E+07", "%.4E",
-__LINE__, -8.213138534699043e-30, "-0.000000", "%f",
-__LINE__, -8.221181368676532e-21, "-8.221181E-21", "%#1E",
-__LINE__, -8.222605734191438e+16, "-8.22261E+16", "%+G",
-__LINE__, -8.223925661091432e-14, "-8.223926e-14", "%0e",
-__LINE__, -8.232281541044777e-01, "-0.823228", "%f",
-__LINE__, -8.245536794508725e+22, "-8E+22", "%6.G",
-__LINE__, -8.270687365305925e+25, "-82706873653059247430974210.146815", "%f",
-__LINE__, -8.288978945738204e+11, "-8.28898e+11", "%5g",
-__LINE__, -8.290628698333139e+02, "-829.063", "%+G",
-__LINE__, -8.292416206056451e-16, "-8.29242e-16", "%+g",
-__LINE__, -8.296322623746486e-13, "-8.29632E-13", "%0.6G",
-__LINE__, -8.298321941376933e-16, "-0.000000", "%+f",
-__LINE__, -8.302331258878365e+29, "-8.30233E+29", "%0G",
-__LINE__, -8.309022429255061e+06, "-8309022.429255", "%+f",
-__LINE__, -8.312786829254646e-23, "-8.312787e-23", "%e",
-__LINE__, -8.313852965178063e-15, "-8.313853e-15", "%#7e",
-__LINE__, -8.317529094827869e+16, "-8.31753E+16", "%2G",
-__LINE__, -8.322847660882248e-17, "-0.000000", "%f",
-__LINE__, -8.324060602752638e-30, "-8.32406e-30", "%#g",
-__LINE__, -8.325043500735461e+27, "-8325043500735461066142306663.095951", "%#f",
-__LINE__, -8.332432016286935e-02, "-0.0833243", "%g",
-__LINE__, -8.334251670232117e-09, "-8.33425e-09", "%g",
-__LINE__, -8.338076225141778e+02, "-833.808", "%g",
-__LINE__, -8.338349587571534e-23, "-8.33835e-23", "%+2g",
-__LINE__, -8.342420812231939e+23, "-834242081223193920891390.00745", "%+0.5f",
-__LINE__, -8.347404637940894e+17, "-8.347405e+17", "%+e",
-__LINE__, -8.367002601133880e-12, "-0.000000", "%#2.6f",
-__LINE__, -8.368579538210858e-17, "-8.36858e-17", "%5g",
-__LINE__, -8.392398522472401e-10, "-0.0000", "%.4f",
-__LINE__, -8.393029677635258e-29, " -8E-29", "%7.G",
-__LINE__, -8.393843230819225e-11, "-8.393843E-11", "%E",
-__LINE__, -8.397239871789148e-11, "-8.39724e-11", "%g",
-__LINE__, -8.402316358199041e-29, "-0.000", "%3.3f",
-__LINE__, -8.402910159034304e-14, "-8.4e-14", "%+0.3g",
-__LINE__, -8.414960962391726e+09, "-8414960962.391726", "%#f",
-__LINE__, -8.417512471384889e-28, "-8.417512e-28", "%e",
-__LINE__, -8.418719240222911e+21, "-8418719240222911182058.851409", "%f",
-__LINE__, -8.421210956044195e-09, "-0.00000", "%.5f",
-__LINE__, -8.422001733529095e+24, "-8E+24", "%0.G",
-__LINE__, -8.443614453772469e+21, "-8.44361E+21", "%+G",
-__LINE__, -8.445883044175737e-19, "-0", "%+1.f",
-__LINE__, -8.460545304711022e-01, "-0.846055", "%G",
-__LINE__, -8.470462532754567e+12, "-8.47E+12", "%6.3G",
-__LINE__, -8.478488782426476e-07, "-8.478489E-07", "%E",
-__LINE__, -8.478657582923923e+09, "-8.5e+09", "%.2g",
-__LINE__, -8.482732098043366e+12, "-8482732098043", "%5.f",
-__LINE__, -8.489112373854447e+07, "-8.489e+07", "%#3.3e",
-__LINE__, -8.494153144629106e+02, "-849.415", "%+g",
-__LINE__, -8.496331191616493e+28, "-8E+28", "%+6.G",
-__LINE__, -8.503711894495339e+05, "-850371", "%g",
-__LINE__, -8.505271893964268e+14, "-8.505272E+14", "%E",
-__LINE__, -8.509873985358741e+15, "-9.e+15", "%#7.g",
-__LINE__, -8.518336897898081e-20, "-8.51834E-20", "%G",
-__LINE__, -8.529588044136128e+21, "-8.529588E+21", "%E",
-__LINE__, -8.539706586811079e-23, "-8.53971E-23", "%G",
-__LINE__, -8.545924619642008e+10, "-8.545925e+10", "%6e",
-__LINE__, -8.572893681637353e+09, "-8.57289E+09", "%G",
-__LINE__, -8.585483717692345e+29, "-8.58548E+29", "%+G",
-__LINE__, -8.586092014292309e+27, "-8.59e+27", "%.2e",
-__LINE__, -8.604716827086833e-26, "-8.60472e-26", "%g",
-__LINE__, -8.621349224186615e-04, "-0.000862", "%f",
-__LINE__, -8.626097065201103e-21, " -0", "%5.f",
-__LINE__, -8.631700514212522e-16, "-8.631701E-16", "%+E",
-__LINE__, -8.634703359975640e-09, "-0.000000", "%+5f",
-__LINE__, -8.639393025443855e-17, "-8.63939e-17", "%g",
-__LINE__, -8.640641942556812e-11, "-8.64064e-11", "%#g",
-__LINE__, -8.646260250525495e-09, "-0.000", "%.3f",
-__LINE__, -8.667322015806242e+09, "-8667322015.806242", "%+#f",
-__LINE__, -8.690705655554451e+10, "-8.690706E+10", "%#E",
-__LINE__, -8.714299893763934e-07, "-8.7143E-07", "%.5G",
-__LINE__, -8.715729756264988e+27, "-8.71573E+27", "%+.6G",
-__LINE__, -8.716518487180945e+16, "-9e+16", "%3.e",
-__LINE__, -8.744404488756237e+25, "-87444044887562366596966967.335902", "%4f",
-__LINE__, -8.754720498369242e+13, "-8.75472e+13", "%g",
-__LINE__, -8.763198097931010e-19, "-8.76320e-19", "%#g",
-__LINE__, -8.779007408852458e+28, "-8.77901E+28", "%G",
-__LINE__, -8.794576202907937e+11, "-8.79458E+11", "%#2.6G",
-__LINE__, -8.799091520612418e-11, "-8.799E-11", "%3.4G",
-__LINE__, -8.799246265524921e+11, "-8.79925E+11", "%G",
-__LINE__, -8.809010508550436e-04, "-8.8090E-04", "%.4E",
-__LINE__, -8.817389999872653e-10, "-8.81739e-10", "%g",
-__LINE__, -8.842022428985267e-28, "-8.842022E-28", "%E",
-__LINE__, -8.851265987586864e-07, "-0.000001", "%f",
-__LINE__, -8.861985131432196e+03, "-8861.985", "%+.7G",
-__LINE__, -8.874449013455113e-29, "-8.874449e-29", "%e",
-__LINE__, -8.878752609483453e+18, "-8.87875E+18", "%G",
-__LINE__, -8.882501665315313e-04, "-0.00088825", "%+G",
-__LINE__, -8.892056241505784e-14, "-8.89206E-14", "%G",
-__LINE__, -8.895327674961603e-30, "-8.89533E-30", "%G",
-__LINE__, -8.900059462213669e-30, "-8.900059E-30", "%+#E",
-__LINE__, -8.957100548759815e+18, "-9e+18", "%3.0e",
-__LINE__, -8.961352369869012e-30, "-8.961352e-30", "%+#2e",
-__LINE__, -8.962296474587800e+02, "-896", "%4.f",
-__LINE__, -8.962536469328530e-12, "-8.96254E-12", "%G",
-__LINE__, -8.963299420391932e+21, "-8.9633e+21", "%g",
-__LINE__, -8.967736672941522e-11, "-8.96774e-11", "%g",
-__LINE__, -8.994077362462679e+11, "-8.9940774e+11", "%+#.7e",
-__LINE__, -9.000452862345622e+15, "-9e+15", "%2.e",
-__LINE__, -9.007489135361462e+07, "-9.0075E+07", "%+2.4E",
-__LINE__, -9.036271805879910e+16, "-9.03627E+16", "%G",
-__LINE__, -9.036319073700248e+22, "-9.03632e+22", "%1g",
-__LINE__, -9.043207635989237e+11, "-9.043208e+11", "%#e",
-__LINE__, -9.043856598625815e-26, "-9e-26", "%+1.g",
-__LINE__, -9.052760561065698e+14, "-9.052761E+14", "%E",
-__LINE__, -9.066480297957160e-06, "-9E-06", "%+1.G",
-__LINE__, -9.070971376440752e-01, "-0.907097", "%g",
-__LINE__, -9.073301831888273e+09, "-9.07330E+09", "%#G",
-__LINE__, -9.091228662702147e+28, "-9E+28", "%4.G",
-__LINE__, -9.093652024983832e+04, "-9.093652E+04", "%7.6E",
-__LINE__, -9.098945831139295e-04, "-9.098946E-04", "%+1.6E",
-__LINE__, -9.124981449916591e+05, "-912498", "%G",
-__LINE__, -9.132038703003394e-02, "-0.0913204", "%#G",
-__LINE__, -9.138271437433964e-04, "-0.000913827", "%5g",
-__LINE__, -9.158186427463699e-04, "-0.000915819", "%g",
-__LINE__, -9.160846358172526e+16, "-9.160846E+16", "%#E",
-__LINE__, -9.160884330810163e+17, "-9E+17", "%+5.G",
-__LINE__, -9.190271387375542e+21, "-9.19027e+21", "%+g",
-__LINE__, -9.191651872412619e-04, "-9.191652E-04", "%E",
-__LINE__, -9.196426161984341e-10, "-9E-10", "%4.G",
-__LINE__, -9.201074139774962e+09, "-9E+09", "%4.G",
-__LINE__, -9.223294284802762e+09, "-9.22329E+09", "%G",
-__LINE__, -9.224740266754996e+02, "-9E+02", "%6.0G",
-__LINE__, -9.231583780512302e-01, " -0.9", "%6.g",
-__LINE__, -9.241998826543689e+07, "-92419988", "%1.f",
-__LINE__, -9.243603351372128e+27, "-9.243603e+27", "%#e",
-__LINE__, -9.255922697415071e+11, "-9.25592e+11", "%g",
-__LINE__, -9.265734968114124e-02, "-0.092657", "%f",
-__LINE__, -9.273132068521061e+11, "-9.27313E+11", "%G",
-__LINE__, -9.276017912826685e+27, "-9.E+27", "%+#5.G",
-__LINE__, -9.279781279788505e+17, "-9.27978E+17", "%7G",
-__LINE__, -9.305057549822465e-19, "-9.30506E-19", "%5G",
-__LINE__, -9.313182384508469e+18, "-9.31318E+18", "%G",
-__LINE__, -9.313350925182641e-12, "-9.31E-12", "%.3G",
-__LINE__, -9.362202657509130e+08, "-9e+08", "%.1g",
-__LINE__, -9.367344757598381e+19, "-9.36734e+19", "%g",
-__LINE__, -9.374222399774300e+26, "-9.37422e+26", "%4g",
-__LINE__, -9.385734023305105e+02, "-9.385734e+02", "%+0e",
-__LINE__, -9.392042570618909e+17, "-9.39204E+17", "%G",
-__LINE__, -9.395742939311926e+20, "-939574293931192627837.8451", "%.4f",
-__LINE__, -9.409066155962469e+09, "-9.40907E+09", "%#G",
-__LINE__, -9.412851077799790e+23, "-9.412851E+23", "%E",
-__LINE__, -9.431808019049818e+08, "-9.43181e+08", "%g",
-__LINE__, -9.465236900519924e-27, "-9.46524e-27", "%g",
-__LINE__, -9.478330386415852e+17, "-9.478330e+17", "%e",
-__LINE__, -9.510393719697428e+15, "-9.51039E+15", "%+G",
-__LINE__, -9.534229599909890e-09, "-0.000000", "%f",
-__LINE__, -9.541731189284823e-17, "-1.E-16", "%+#7.G",
-__LINE__, -9.548861908445902e+24, "-9548861908445902102471336.547751", "%f",
-__LINE__, -9.578447281451794e+14, "-957844728145179", "%5.f",
-__LINE__, -9.580512736933464e+11, "-9.58051E+11", "%G",
-__LINE__, -9.596838169770637e-28, "-1E-27", "%+6.G",
-__LINE__, -9.597528852877852e-22, "-1e-21", "%2.1g",
-__LINE__, -9.599943658427051e+02, "-9.599944E+02", "%E",
-__LINE__, -9.603227991185260e-14, "-1E-13", "%+0.E",
-__LINE__, -9.606818733892343e+08, "-960681873.389", "%1.3f",
-__LINE__, -9.617442692720937e+16, "-9.61744E+16", "%G",
-__LINE__, -9.628685516961109e+29, "-9.62869e+29", "%3g",
-__LINE__, -9.638354750455226e-11, "-0.000000", "%f",
-__LINE__, -9.644266379029137e+16, "-96442663790291369.707575", "%f",
-__LINE__, -9.645563533575482e+06, "-1E+07", "%1.G",
-__LINE__, -9.645993536742941e-29, "-9.64599e-29", "%+g",
-__LINE__, -9.647147223548563e+00, "-9.647147e+00", "%e",
-__LINE__, -9.671225879906396e-11, "-0", "%0.f",
-__LINE__, -9.675000471729906e-09, "-9.675000E-09", "%E",
-__LINE__, -9.683992878297159e-26, "-9.68e-26", "%2.2e",
-__LINE__, -9.695491325144765e+10, "-9.69549E+10", "%#G",
-__LINE__, -9.695661526907136e-24, " -0.", "%#6.f",
-__LINE__, -9.703124881970338e+07, "-9.703e+07", "%0.4g",
-__LINE__, -9.707701257031864e+26, "-970770125703186437249314622.022212", "%f",
-__LINE__, -9.709879792694702e+09, "-9.709880E+09", "%E",
-__LINE__, -9.736052226907940e+26, "-9.73605e+26", "%+#g",
-__LINE__, -9.745037157520795e+07, "-9.74504e+07", "%#5.6g",
-__LINE__, -9.757293950670832e-29, "-9.757E-29", "%0.4G",
-__LINE__, -9.762126832689880e+12, "-9.76213E+12", "%G",
-__LINE__, -9.801328150341989e-01, " -1", "%7.G",
-__LINE__, -9.837332964629669e-20, "-9.83733E-20", "%0G",
-__LINE__, -9.837790327283010e+23, "-1E+24", "%.1G",
-__LINE__, -9.839636176463729e+23, "-9.83964E+23", "%#6.5E",
-__LINE__, -9.841454250618272e+11, "-9.84E+11", "%+2.3G",
-__LINE__, -9.852920805249280e-12, "-9.852921e-12", "%.7g",
-__LINE__, -9.854092850182351e+12, "-9.85409e+12", "%0g",
-__LINE__, -9.866796026839712e+02, "-9.9E+02", "%#.1E",
-__LINE__, -9.867413260289803e-21, "-1e-20", "%.1g",
-__LINE__, -9.882136052131983e-08, "-9.88214e-08", "%g",
-__LINE__, -9.882755697941866e+20, "-9.882756E+20", "%E",
-__LINE__, -9.897275811087050e+20, "-9.9E+20", "%0.3G",
-__LINE__, -9.899860651812364e-04, "-9.899861e-04", "%e",
-__LINE__, -9.906754113555550e-11, "-9.90675e-11", "%3g",
-__LINE__, -9.926067557389940e+11, "-9.92607E+11", "%G",
-__LINE__, -9.929638609014063e+17, "-992963860901406292.214233", "%1f",
-__LINE__, -9.941214552193284e-24, "-0.000000", "%+#f",
-__LINE__, -9.942875240256573e+14, "-9.942875e+14", "%+1e",
-__LINE__, -9.944492909695798e-01, "-9.944E-01", "%.3E",
-__LINE__, -9.954710507359939e-27, "-1e-26", "%+0.2g",
-__LINE__, -9.955410507742851e+03, "-9955.41", "%+G",
-__LINE__, -9.974437672251590e+02, "-997.444", "%#G",
-__LINE__, -9.975683165288929e-26, "-9.97568E-26", "%6G",
-__LINE__, 1.003827370583415e+06, "1003827.370583", "%3f",
-__LINE__, 1.004189065268560e-27, "1.004189E-27", "%.7G",
-__LINE__, 1.005840059175462e-28, "+1.00584E-28", "%+G",
-__LINE__, 1.006586790090557e-12, "0.000000", "%#f",
-__LINE__, 1.007598594773359e+18, "1.0076E+18", "%G",
-__LINE__, 1.007902307001894e+29, "1.0079e+29", "%g",
-__LINE__, 1.008607405036580e-15, "1.00861E-15", "%6G",
-__LINE__, 1.008769102466771e+16, "+1.00877E+16", "%+G",
-__LINE__, 1.009545698372534e-08, "+1E-08", "%+0.0G",
-__LINE__, 1.010173673945099e-12, "+1.01017e-12", "%+#0g",
-__LINE__, 1.011375000606627e+09, "1011375000.606627", "%f",
-__LINE__, 1.011944652221650e+15, "1011944652221649.98", "%3.2f",
-__LINE__, 1.013057788090379e-21, "0.000000", "%#f",
-__LINE__, 1.014525729953198e+15, "1.01453e+15", "%3g",
-__LINE__, 1.016760538234615e-21, "+1.016761E-21", "%+3E",
-__LINE__, 1.017052611781237e-29, "0.000000", "%f",
-__LINE__, 1.018471223361229e+14, "1.01847E+14", "%G",
-__LINE__, 1.021646959220873e+15, "1021646959220872.6", "%4.1f",
-__LINE__, 1.022304833976590e+27, "1.0223e+27", "%g",
-__LINE__, 1.022500312067325e-12, "1.0225e-12", "%6g",
-__LINE__, 1.023019285462627e-20, "0.000000", "%f",
-__LINE__, 1.024192579400824e+06, "1.02419e+06", "%g",
-__LINE__, 1.024517953555766e-28, "1.02452E-28", "%G",
-__LINE__, 1.026673589339585e+21, "1.02667E+21", "%G",
-__LINE__, 1.027231090958880e-19, "1.E-19", "%#3.G",
-__LINE__, 1.028249904956487e-27, "1E-27", "%5.G",
-__LINE__, 1.028570144661448e-28, "+1.02857E-28", "%+G",
-__LINE__, 1.028934898454705e-13, "+1.028935E-13", "%+E",
-__LINE__, 1.029071053545906e-26, "1.029071E-26", "%E",
-__LINE__, 1.032672895881148e-30, "+1.032673E-30", "%+E",
-__LINE__, 1.033502358979511e+06, "1.0335E+06", "%.5G",
-__LINE__, 1.036790427717847e+19, "1e+19", "%4.g",
-__LINE__, 1.037022928821648e+03, "1037.02", "%5g",
-__LINE__, 1.040551683941284e+14, "1.04055E+14", "%G",
-__LINE__, 1.044499252101308e-17, "1.044499E-17", "%E",
-__LINE__, 1.045791899570889e+15, "+1.04579e+15", "%+g",
-__LINE__, 1.048730383198703e+28, "1.049e+28", "%.4g",
-__LINE__, 1.050654419882509e-18, "0.000000", "%f",
-__LINE__, 1.052600569262127e-27, "+0.000", "%+2.3f",
-__LINE__, 1.053213014784149e+15, "1E+15", "%4.G",
-__LINE__, 1.057553916225948e-15, "+0.000000", "%+4f",
-__LINE__, 1.058191244482453e+19, "1.058e+19", "%.3e",
-__LINE__, 1.058746269793972e-26, "+1.1E-26", "%+.2G",
-__LINE__, 1.058793271960762e-01, "+1.058793E-01", "%+4E",
-__LINE__, 1.058869592738370e-19, "1.05887e-19", "%3g",
-__LINE__, 1.060402312803008e+15, "1060402312803008.229025", "%f",
-__LINE__, 1.061106284763095e+00, "1.061106", "%0f",
-__LINE__, 1.061180160987467e+09, "1e+09", "%2.g",
-__LINE__, 1.061181537176067e-06, "+1.06118e-06", "%+g",
-__LINE__, 1.065021381771174e+20, "1.06502e+20", "%g",
-__LINE__, 1.065464040401130e-16, "1.065464e-16", "%e",
-__LINE__, 1.065573419819459e-05, "0.00001", "%.5f",
-__LINE__, 1.066107764306644e+13, "1.066108e+13", "%#e",
-__LINE__, 1.071318759598956e+12, "1.071319e+12", "%e",
-__LINE__, 1.071564727222321e+10, "1.072E+10", "%3.4G",
-__LINE__, 1.074652481218139e+14, "1.0747E+14", "%.4E",
-__LINE__, 1.078453684911309e-02, "0.0107845", "%g",
-__LINE__, 1.078550811446675e-05, "1.07855e-05", "%g",
-__LINE__, 1.078780494515273e-04, "0.000107878", "%4G",
-__LINE__, 1.079467488876157e-16, "+1.079467E-16", "%+E",
-__LINE__, 1.080529722917934e-20, "0.000000", "%f",
-__LINE__, 1.082169127709439e+01, "10.8217", "%#5g",
-__LINE__, 1.087241285590951e+22, "1E+22", "%4.G",
-__LINE__, 1.091049208406195e-14, "0.0000", "%.4f",
-__LINE__, 1.095316064213237e+16, "+1e+16", "%+0.g",
-__LINE__, 1.095349083237975e-04, "1.095349e-04", "%5e",
-__LINE__, 1.098002465452836e+12, "1098002465452.836205", "%f",
-__LINE__, 1.098445764138997e+13, "1.09845E+13", "%G",
-__LINE__, 1.099968047892474e-13, "1.1e-13", "%2.5g",
-__LINE__, 1.101017598311363e-04, "0.000110102", "%G",
-__LINE__, 1.102776332077817e+18, "1.103e+18", "%.3e",
-__LINE__, 1.103734053887830e-01, "0.110373", "%f",
-__LINE__, 1.105730106869006e-03, "0.00110573", "%g",
-__LINE__, 1.106366781854058e-10, "1.10637e-10", "%g",
-__LINE__, 1.107354763213839e+15, "1.107355e+15", "%6e",
-__LINE__, 1.108151709609825e-10, "+1.10815E-10", "%+G",
-__LINE__, 1.110054501993647e+21, "+1.11005E+21", "%+G",
-__LINE__, 1.111574814737873e-17, "+1.112E-17", "%+1.4G",
-__LINE__, 1.111865512360108e-15, "1E-15", "%.0G",
-__LINE__, 1.112281568330498e-03, "1.112282e-03", "%.6e",
-__LINE__, 1.112625415174238e+21, "+1.11263e+21", "%+g",
-__LINE__, 1.112744974910395e-02, "0.011127", "%f",
-__LINE__, 1.114726566979885e-10, "1.11473e-10", "%g",
-__LINE__, 1.115395843055731e-20, "+0.000000", "%+6f",
-__LINE__, 1.115983414693121e+15, "1.11598e+15", "%5.6g",
-__LINE__, 1.116118842074266e+27, "1.116119e+27", "%e",
-__LINE__, 1.118386983012328e+19, "11183869830123276400.968280", "%1f",
-__LINE__, 1.119344607892718e-22, "1.119345e-22", "%e",
-__LINE__, 1.120560837110279e-19, "0.000000", "%f",
-__LINE__, 1.123620157906291e-02, "0.0112362", "%G",
-__LINE__, 1.126804857639478e+29, "1.1268E+29", "%#0.5G",
-__LINE__, 1.128962199461581e+11, "1.12896e+11", "%g",
-__LINE__, 1.129878714246809e-16, "1E-16", "%0.0G",
-__LINE__, 1.130331982972407e-06, "+0.", "%+#1.f",
-__LINE__, 1.134167332070028e-16, "0", "%0.0f",
-__LINE__, 1.134248080053598e-28, "0.000000", "%f",
-__LINE__, 1.136023160708119e-10, "+0.000000", "%+1f",
-__LINE__, 1.136167141059036e+23, "113616714105903593434732.101741", "%f",
-__LINE__, 1.136439499920164e+10, "+1.13644E+10", "%+G",
-__LINE__, 1.136859734932182e+24, "1.13686e+24", "%g",
-__LINE__, 1.138985939448731e+09, "1.13899e+09", "%2g",
-__LINE__, 1.139287324790407e-25, "1e-25", "%.1g",
-__LINE__, 1.140559912153251e+06, "1.14056e+06", "%g",
-__LINE__, 1.141318036027086e-26, "1.14132E-26", "%G",
-__LINE__, 1.142586049368452e-20, "+1.14259E-20", "%+7.5E",
-__LINE__, 1.143283863993333e-17, "1.143284E-17", "%3E",
-__LINE__, 1.144637911632432e-28, "1.144638E-28", "%#3E",
-__LINE__, 1.145791416532065e-10, "1.14579e-10", "%g",
-__LINE__, 1.146958047315780e-17, "1.146958e-17", "%e",
-__LINE__, 1.147898346886569e-08, "1E-08", "%3.0E",
-__LINE__, 1.149724744965608e-14, "1.14972e-14", "%5g",
-__LINE__, 1.155383721940441e-10, "1e-10", "%1.g",
-__LINE__, 1.157066617729094e-02, "0", "%1.f",
-__LINE__, 1.157893614537215e+05, "1.157894E+05", "%E",
-__LINE__, 1.160476344451928e-19, "1.2e-19", "%.1e",
-__LINE__, 1.161610499315966e-26, "1.161610E-26", "%E",
-__LINE__, 1.162345042181490e+29, "116234504218148981813385489658.685401", "%5.6f",
-__LINE__, 1.162376053722862e+23, "1.16238e+23", "%g",
-__LINE__, 1.162996084782483e+18, "+1e+18", "%+0.g",
-__LINE__, 1.163544861478966e+26, "1.16354E+26", "%G",
-__LINE__, 1.167300137450931e+06, "1E+06", "%.0G",
-__LINE__, 1.168693829096401e-30, "+1.16869e-30", "%+g",
-__LINE__, 1.172791369381396e+15, "1.173E+15", "%.4G",
-__LINE__, 1.174427110782028e-29, " 1E-29", "%7.G",
-__LINE__, 1.179498322112450e+27, "1179498322112449759657692993.641831", "%f",
-__LINE__, 1.179555606293547e+27, "1.17956e+27", "%3g",
-__LINE__, 1.180815814881269e+06, "1.180816e+06", "%e",
-__LINE__, 1.181494870072805e+20, "1.181495e+20", "%5e",
-__LINE__, 1.181524119225619e+12, "+1181524119225.61917", "%+5.5f",
-__LINE__, 1.182111212289243e-20, "1e-20", "%4.g",
-__LINE__, 1.184503315019769e-27, "1.1845e-27", "%7g",
-__LINE__, 1.186413646767670e+29, "1.18641e+29", "%g",
-__LINE__, 1.186852938885004e-13, "1.18685e-13", "%4g",
-__LINE__, 1.188837612473914e+05, "1e+05", "%.0g",
-__LINE__, 1.190317482928293e-29, "1.190317e-29", "%e",
-__LINE__, 1.190527491143987e+02, "1.190527E+02", "%E",
-__LINE__, 1.191823062060233e-30, "1.2E-30", "%6.2G",
-__LINE__, 1.191926974812428e-23, "1.2e-23", "%.2g",
-__LINE__, 1.193549622366544e-25, "1E-25", "%4.1G",
-__LINE__, 1.195517368629765e-21, "1.195517e-21", "%1.7g",
-__LINE__, 1.195573061651289e-27, "1.19557e-27", "%#g",
-__LINE__, 1.195806681188325e-03, "+0.00120", "%+#.3G",
-__LINE__, 1.196842275192189e-28, "1.19684e-28", "%g",
-__LINE__, 1.197307550969576e+04, "1.1973E+04", "%.4E",
-__LINE__, 1.197608525847607e+15, "1197608525847606.8062805", "%4.7f",
-__LINE__, 1.197801338159407e+04, "11978", "%5G",
-__LINE__, 1.197813329735025e+27, "1.19781E+27", "%7G",
-__LINE__, 1.199483904123253e-12, "1.19948e-12", "%g",
-__LINE__, 1.199535292169766e-09, "1.199535e-09", "%e",
-__LINE__, 1.201478067515135e+05, "120147.806752", "%f",
-__LINE__, 1.202054662662158e+17, "1.20205E+17", "%#G",
-__LINE__, 1.202111922368321e+07, "+1.202112E+07", "%+#E",
-__LINE__, 1.202536892743791e-01, "0.120254", "%#g",
-__LINE__, 1.205698674119882e-29, "1.2057E-29", "%G",
-__LINE__, 1.208091664701942e-13, " 0.", "%#3.f",
-__LINE__, 1.208942413954872e-17, "1.20894E-17", "%G",
-__LINE__, 1.209704891496613e+10, "1.210e+10", "%2.3e",
-__LINE__, 1.211355639334831e+29, "1E+29", "%.0G",
-__LINE__, 1.211447553804203e+17, " 1E+17", "%7.E",
-__LINE__, 1.212481583429790e-16, "1.212482e-16", "%e",
-__LINE__, 1.212849001551862e+26, "121284900155186181613942153.4899157", "%6.7f",
-__LINE__, 1.213057538677801e+06, "1213057.538678", "%#.6f",
-__LINE__, 1.214609592911893e+25, "1.214610e+25", "%#e",
-__LINE__, 1.216086266251665e+01, "1e+01", "%5.e",
-__LINE__, 1.216468565931026e-22, "1.216469E-22", "%1E",
-__LINE__, 1.216503126598765e+14, "+1E+14", "%+0.E",
-__LINE__, 1.216641013695553e-14, "0.000000", "%f",
-__LINE__, 1.223142246779504e-23, "0.000000", "%f",
-__LINE__, 1.223884786443274e+08, "122388479", "%5.f",
-__LINE__, 1.224012562770076e+29, "1.22401e+29", "%0g",
-__LINE__, 1.225098157528297e+14, "1.22510e+14", "%#g",
-__LINE__, 1.226306848505242e-22, "1.22631E-22", "%G",
-__LINE__, 1.227487485547996e-08, "+1.22749e-08", "%+g",
-__LINE__, 1.237206486909689e+02, "+123.721", "%+#.6g",
-__LINE__, 1.240281126177077e-02, "+0.01", "%+3.g",
-__LINE__, 1.241197211306994e-06, "1.241197E-06", "%E",
-__LINE__, 1.241776311097410e+07, "1.241776E+07", "%E",
-__LINE__, 1.245995986024999e-03, "0.001246", "%g",
-__LINE__, 1.246082428199607e+03, "1246.082428", "%f",
-__LINE__, 1.247021567954220e+05, " 1e+05", "%7.g",
-__LINE__, 1.248140089618390e-30, "+1.24814E-30", "%+G",
-__LINE__, 1.248403361652064e-30, "+0.000000", "%+f",
-__LINE__, 1.251098538918842e-26, "+1.251099E-26", "%+E",
-__LINE__, 1.251952633022061e+25, "1.25195e+25", "%g",
-__LINE__, 1.253029705843461e-04, "+1.E-04", "%+#4.E",
-__LINE__, 1.259562132729488e-09, "1e-09", "%1.e",
-__LINE__, 1.261702205492260e-27, "0.000000", "%f",
-__LINE__, 1.265910361926660e-19, "+1.265910e-19", "%+e",
-__LINE__, 1.267411912651087e+12, "1.26741E+12", "%1G",
-__LINE__, 1.267830718285980e-10, "1.26783e-10", "%g",
-__LINE__, 1.268238378987517e-23, "1E-23", "%5.E",
-__LINE__, 1.275543253354167e+10, "1.27554E+10", "%G",
-__LINE__, 1.277255234454465e-10, "1.27726E-10", "%5G",
-__LINE__, 1.280590949834150e-21, "1.280591E-21", "%E",
-__LINE__, 1.285570453788242e-02, "1.285570E-02", "%E",
-__LINE__, 1.287712130719031e+09, "1287712130.719031", "%#f",
-__LINE__, 1.290142876187105e+29, "+1.290143E+29", "%+E",
-__LINE__, 1.293129213191961e+21, "1.29313E+21", "%G",
-__LINE__, 1.293317101334714e-23, "+0.000000", "%+f",
-__LINE__, 1.294506813069071e-13, "0.0", "%3.1f",
-__LINE__, 1.295576232685739e-22, "+0.000000", "%+f",
-__LINE__, 1.296010470431800e-19, "+0.000000", "%+6f",
-__LINE__, 1.298798231947674e+19, "1.2988E+19", "%2G",
-__LINE__, 1.299521114379381e+09, "1.29952E+09", "%G",
-__LINE__, 1.299847637892712e+24, "1.299848e+24", "%e",
-__LINE__, 1.301269777843698e+29, "130126977784369834978406288428.232074", "%f",
-__LINE__, 1.302911786437618e-15, " 0", "%6.f",
-__LINE__, 1.303863159906719e+27, "1303863159906719415559450681", "%0.f",
-__LINE__, 1.304396472326846e-12, "+1E-12", "%+1.0G",
-__LINE__, 1.306180443528427e-30, "+1e-30", "%+.1g",
-__LINE__, 1.308469138968514e+22, "1.30847E+22", "%0G",
-__LINE__, 1.312700156826057e-11, "1.3127e-11", "%g",
-__LINE__, 1.315364075120764e+21, "+1.31536E+21", "%+G",
-__LINE__, 1.320376485288444e-09, "+1.3204E-09", "%+6.5G",
-__LINE__, 1.321434154364635e-08, "1.32143e-08", "%1g",
-__LINE__, 1.322777272579176e+19, "+1e+19", "%+3.e",
-__LINE__, 1.322861663428564e+00, "1.322862E+00", "%#E",
-__LINE__, 1.323566013489230e+14, "+1.323566E+14", "%+1E",
-__LINE__, 1.327446904132973e-20, "+1.32745E-20", "%+4.6G",
-__LINE__, 1.328226362528158e+19, "1e+19", "%2.g",
-__LINE__, 1.329167460803610e+08, "1e+08", "%3.g",
-__LINE__, 1.335371420823160e+14, "1.33537E+14", "%7G",
-__LINE__, 1.336116185095935e-21, "0.000000", "%f",
-__LINE__, 1.338766774704671e-22, "+1.33877e-22", "%+g",
-__LINE__, 1.339199373014647e-12, "1E-12", "%1.E",
-__LINE__, 1.344293357481519e+26, "134429335748151945750805680.290796", "%#2f",
-__LINE__, 1.344328188122843e+29, "1.34433e+29", "%g",
-__LINE__, 1.344382581316972e-05, "1E-05", "%5.0E",
-__LINE__, 1.349835616116184e+11, "134983561611.6", "%2.1f",
-__LINE__, 1.349955669989707e+20, "134995566998970728533.890906", "%7f",
-__LINE__, 1.350230411093841e+20, "135023041109384145386.229648", "%f",
-__LINE__, 1.353391369565576e+10, " 1E+10", "%7.1G",
-__LINE__, 1.356889483699471e+22, "+1.35689E+22", "%+G",
-__LINE__, 1.358141775798243e+24, "+1358141775798242578687791.137781", "%+f",
-__LINE__, 1.358547541975523e-15, "1.35855e-15", "%g",
-__LINE__, 1.363402539800791e+11, "1.3634E+11", "%G",
-__LINE__, 1.363676837988798e+16, "+13636768379887982.4053", "%+2.4f",
-__LINE__, 1.364592026494839e-24, "1.36459e-24", "%g",
-__LINE__, 1.366664212399413e-09, "+1E-09", "%+6.G",
-__LINE__, 1.367446193117463e-17, "1.3674e-17", "%2.4e",
-__LINE__, 1.368681648785823e-18, "1.36868E-18", "%3G",
-__LINE__, 1.370635189583606e+05, "1.370635E+05", "%E",
-__LINE__, 1.371395540772186e-18, "+1.371396e-18", "%+e",
-__LINE__, 1.371945318043159e+10, "1E+10", "%0.E",
-__LINE__, 1.373780604772988e-21, "1e-21", "%3.g",
-__LINE__, 1.374244970441862e-28, "0.000000", "%7.6f",
-__LINE__, 1.375874695067149e-25, "1.37587E-25", "%#3G",
-__LINE__, 1.377165614832621e+20, "1.37717E+20", "%#G",
-__LINE__, 1.381541864946684e-09, "1.38154E-09", "%G",
-__LINE__, 1.382901694835415e+00, "1.382902E+00", "%E",
-__LINE__, 1.384250577530184e-21, "1.384e-21", "%.4g",
-__LINE__, 1.385322753374640e-03, " 1E-03", "%6.E",
-__LINE__, 1.387026156054724e+19, "1.387026E+19", "%E",
-__LINE__, 1.388726735790498e-27, "+1.388727E-27", "%+E",
-__LINE__, 1.388819105742044e+16, "1.38882e+16", "%g",
-__LINE__, 1.389941086024951e-19, "0.000000", "%f",
-__LINE__, 1.390101174785536e+25, "1.3901E+25", "%G",
-__LINE__, 1.392210785638597e+24, "+1.39221E+24", "%+G",
-__LINE__, 1.396148856283474e-26, "1.4e-26", "%7.3g",
-__LINE__, 1.398153728631994e-21, "1.39815E-21", "%G",
-__LINE__, 1.398332446762342e-14, "+1.39833E-14", "%+5G",
-__LINE__, 1.400250919607987e+10, "1.40025E+10", "%G",
-__LINE__, 1.400662469019739e+03, "1.E+03", "%#0.0E",
-__LINE__, 1.401720273747805e-12, "0.000000", "%#f",
-__LINE__, 1.402151358748719e+22, "1.402151e+22", "%e",
-__LINE__, 1.402351913752357e-28, "1.40235E-28", "%#1.6G",
-__LINE__, 1.403285877973810e+13, "+14032858779738.097255", "%+4f",
-__LINE__, 1.404540981735861e+04, "14045.409817", "%4f",
-__LINE__, 1.406420622355064e+19, "1.40642E+19", "%G",
-__LINE__, 1.412552725962301e-29, "+1e-29", "%+1.e",
-__LINE__, 1.413266982485044e+10, "1.41327e+10", "%g",
-__LINE__, 1.413627189411456e+21, "1.41363E+21", "%0G",
-__LINE__, 1.416647216002592e-25, "+0.000000", "%+#f",
-__LINE__, 1.417107155080584e-10, "1e-10", "%1.e",
-__LINE__, 1.418829895346648e+19, "14188298953466484952.912197", "%f",
-__LINE__, 1.419404559267523e-11, "1.4194e-11", "%g",
-__LINE__, 1.422421321425472e+15, "1.422421E+15", "%E",
-__LINE__, 1.424858902008998e+18, "1.42486E+18", "%2.5E",
-__LINE__, 1.428863051254205e+22, "1.428863e+22", "%e",
-__LINE__, 1.429533727936725e-02, "0.0142953", "%g",
-__LINE__, 1.430982219743369e-19, " 1E-19", "%6.G",
-__LINE__, 1.431974118434703e+17, "1E+17", "%3.G",
-__LINE__, 1.432418341970152e+16, "+1.432418e+16", "%+5e",
-__LINE__, 1.433470281650523e+04, "14334.7", "%g",
-__LINE__, 1.434446243424653e+24, " +1e+24", "%+7.g",
-__LINE__, 1.435118019241039e+24, "+1e+24", "%+4.g",
-__LINE__, 1.435691648420278e-01, "0.1435692", "%#4.7g",
-__LINE__, 1.437569598098744e+27, "1.437570E+27", "%#E",
-__LINE__, 1.437633484061726e-25, "+1.43763e-25", "%+7g",
-__LINE__, 1.437866591230707e-13, "1.43787e-13", "%g",
-__LINE__, 1.440593154445915e-01, "+0.144059", "%+1G",
-__LINE__, 1.441368205977342e+16, "1.441368E+16", "%#E",
-__LINE__, 1.441825266684367e+28, "1.44183e+28", "%g",
-__LINE__, 1.442374183199456e+20, "1.442374E+20", "%E",
-__LINE__, 1.445101893951061e-24, "0", "%0.f",
-__LINE__, 1.446037835160094e-20, "+1.44604E-20", "%+2G",
-__LINE__, 1.449245376093616e+04, "1.449245e+04", "%e",
-__LINE__, 1.454126845620100e+09, "1.45413E+09", "%G",
-__LINE__, 1.455764608801107e+09, "1.5e+09", "%6.1e",
-__LINE__, 1.457176183149955e-12, "1.45718e-12", "%#g",
-__LINE__, 1.458821535020046e-05, "1.45882e-05", "%#g",
-__LINE__, 1.460179141161202e-19, "1.460179E-19", "%#E",
-__LINE__, 1.461701055446198e-20, "1.461701e-20", "%#2.7g",
-__LINE__, 1.462408181482172e+10, "1.4624082E+10", "%3.7E",
-__LINE__, 1.463706296748154e+24, "1e+24", "%2.g",
-__LINE__, 1.464891255780761e-19, "+1.46489e-19", "%+g",
-__LINE__, 1.467903978945872e+25, "1.4679E+25", "%G",
-__LINE__, 1.468585992857062e+22, "14685859928570619281629.205943", "%f",
-__LINE__, 1.469803528668286e+29, "+1E+29", "%+6.G",
-__LINE__, 1.469883002609266e-23, "1.E-23", "%#2.E",
-__LINE__, 1.469941481858809e+08, "+146994148.185881", "%+f",
-__LINE__, 1.470744493304611e+13, "1.47074e+13", "%g",
-__LINE__, 1.471857261085004e+23, "1E+23", "%2.G",
-__LINE__, 1.474419778873037e+06, "1474419.7789", "%#.4f",
-__LINE__, 1.483134762223381e-03, "0", "%0.0f",
-__LINE__, 1.483575501240724e-13, "1.48358e-13", "%g",
-__LINE__, 1.486068112294452e+20, "1.486068e+20", "%e",
-__LINE__, 1.488665528787761e-03, " +0", "%+4.f",
-__LINE__, 1.492145267536713e+07, "14921452.675367", "%f",
-__LINE__, 1.492589762884761e-01, "0.149259", "%f",
-__LINE__, 1.494784286168215e+01, "1.494784E+01", "%E",
-__LINE__, 1.495945331501655e+04, "1.5e+04", "%.2g",
-__LINE__, 1.501383201904700e+14, "2e+14", "%1.g",
-__LINE__, 1.501387105011959e-02, "0.0150139", "%g",
-__LINE__, 1.505784488562271e+26, "1.50578e+26", "%5g",
-__LINE__, 1.506367986495534e+10, "1.50637e+10", "%2g",
-__LINE__, 1.507421710226296e+19, "1.507422E+19", "%#E",
-__LINE__, 1.507960881206134e+16, "2e+16", "%.0g",
-__LINE__, 1.508974301049424e+14, "+1.508974E+14", "%+E",
-__LINE__, 1.509204025111090e-18, "1.509204E-18", "%E",
-__LINE__, 1.511351799767759e+21, "1511351799767759462866.93397", "%.5f",
-__LINE__, 1.511712197184520e-06, "+1.51171e-06", "%+1g",
-__LINE__, 1.514703727491400e+02, "151.47", "%.5g",
-__LINE__, 1.514855355408287e+04, "15148.6", "%g",
-__LINE__, 1.516256896575301e+06, "1.516257e+06", "%.6e",
-__LINE__, 1.517712083681069e+14, "1.51771e+14", "%0g",
-__LINE__, 1.522102209167607e-18, "1.52210e-18", "%#g",
-__LINE__, 1.526264862895663e-12, "0.000000", "%f",
-__LINE__, 1.527165480858125e+10, "1.527e+10", "%.4g",
-__LINE__, 1.528363280308369e+00, "+1.52836", "%+0G",
-__LINE__, 1.529108490733420e-22, "1.529108E-22", "%E",
-__LINE__, 1.529783364474522e+19, "15297833644745216119.531506", "%7f",
-__LINE__, 1.530698363199346e-01, "0.1531", "%#.4f",
-__LINE__, 1.531520796537450e+22, "1.53152E+22", "%G",
-__LINE__, 1.533314559644813e+06, "+1533314.559645", "%+f",
-__LINE__, 1.534682791112854e+01, "+15.3468", "%+0G",
-__LINE__, 1.534714026386730e-11, "0.000000", "%f",
-__LINE__, 1.537145729498115e+00, "1.537146E+00", "%E",
-__LINE__, 1.538740040875751e-23, "1.538740E-23", "%E",
-__LINE__, 1.546248240596482e-03, "0.001546", "%f",
-__LINE__, 1.546808012239302e-09, "+1.54681E-09", "%+G",
-__LINE__, 1.546903877359107e+06, "1.5e+06", "%.2g",
-__LINE__, 1.550153973747718e-18, "2e-18", "%.0g",
-__LINE__, 1.551703460384378e+00, "+1.5517", "%+.4f",
-__LINE__, 1.553995673101369e+29, "1.554E+29", "%G",
-__LINE__, 1.555477017531899e+28, "1.55548e+28", "%g",
-__LINE__, 1.555548963448462e+12, "1555548963448.46227", "%6.5f",
-__LINE__, 1.558702451007712e+16, "2e+16", "%5.1g",
-__LINE__, 1.561641587723724e+29, "1.561642e+29", "%e",
-__LINE__, 1.561868589559509e-05, "1.56187E-05", "%G",
-__LINE__, 1.565229056438949e+13, "1.56523e+13", "%1.6g",
-__LINE__, 1.570074406600442e+14, "+1.57007E+14", "%+4G",
-__LINE__, 1.570951909913194e+13, "1.57095E+13", "%.6G",
-__LINE__, 1.572186421520727e-30, "+1.57219e-30", "%+g",
-__LINE__, 1.574374582066945e+12, "1.57e+12", "%5.2e",
-__LINE__, 1.577789404823585e+12, "1.577789E+12", "%E",
-__LINE__, 1.579641278389186e+04, "15796.413", "%7.3f",
-__LINE__, 1.581602330975388e+17, "1.5816E+17", "%#.5G",
-__LINE__, 1.587809692297490e-18, "+1.58781e-18", "%+2g",
-__LINE__, 1.588672954832388e-05, "1.58867E-05", "%G",
-__LINE__, 1.594548954259978e+25, "+1.595e+25", "%+.3e",
-__LINE__, 1.596653742160718e+10, "15966537421.6072", "%.4f",
-__LINE__, 1.597416186584641e+25, "1.59742e+25", "%g",
-__LINE__, 1.597810706039500e-04, "0.000159781", "%g",
-__LINE__, 1.601425691153542e+01, "16.0143", "%G",
-__LINE__, 1.601491150913706e-15, "+1.60149e-15", "%+g",
-__LINE__, 1.609357026469645e+02, "160.936", "%0g",
-__LINE__, 1.611064881461188e+06, "+1.611065E+06", "%+E",
-__LINE__, 1.611324319640770e-03, "0.00161132", "%G",
-__LINE__, 1.613202907940803e+19, "1.6E+19", "%#.1E",
-__LINE__, 1.613883500056636e-12, "0.000000", "%5f",
-__LINE__, 1.618254213010772e+07, "16182542.130108", "%6f",
-__LINE__, 1.620441271211248e-08, "1.62044E-08", "%0G",
-__LINE__, 1.622548435024803e-01, "+0.162255", "%+5G",
-__LINE__, 1.623740394555269e+19, "16237403945552689066.289531", "%3f",
-__LINE__, 1.625774250389937e+18, "1.625774e+18", "%1e",
-__LINE__, 1.626300864432426e-02, "0.016263", "%G",
-__LINE__, 1.626351146877694e-11, "1.6263511e-11", "%2.7e",
-__LINE__, 1.626568757587995e+25, "16265687575879949733348439.62220", "%6.5f",
-__LINE__, 1.626717482094360e-28, "+1.626717e-28", "%+3e",
-__LINE__, 1.630801585998995e-28, "1.6308e-28", "%0g",
-__LINE__, 1.631827173682962e+03, "1632", "%1.4g",
-__LINE__, 1.631907571243379e+18, "1631907571243378818.337533", "%f",
-__LINE__, 1.632058420447239e-14, " +2E-14", "%+7.G",
-__LINE__, 1.632847882621240e+18, "+1.63285E+18", "%+2G",
-__LINE__, 1.637329146233172e-09, "+1.63733e-09", "%+g",
-__LINE__, 1.638315287442427e-16, "+1.63832E-16", "%+G",
-__LINE__, 1.641284849351445e+15, "1641284849351445.096488", "%f",
-__LINE__, 1.644871927486929e+10, "2e+10", "%1.e",
-__LINE__, 1.645917293047431e-19, "1.64592e-19", "%.6g",
-__LINE__, 1.649201265647819e-07, "0.000000", "%f",
-__LINE__, 1.650169065733559e+23, "165016906573355903731226.135278", "%3f",
-__LINE__, 1.651217291298196e-30, "2E-30", "%4.G",
-__LINE__, 1.652680660160331e+08, "2.e+08", "%#3.g",
-__LINE__, 1.654171892948767e-15, "1.65417e-15", "%g",
-__LINE__, 1.655435863725412e+17, "+1.655436e+17", "%+#e",
-__LINE__, 1.656015606204101e+28, "+1.7E+28", "%+3.2G",
-__LINE__, 1.656814723110478e-21, "+0.000000", "%+f",
-__LINE__, 1.658632655199721e-19, "2.E-19", "%#4.G",
-__LINE__, 1.659915061311444e+27, "1.66E+27", "%.3G",
-__LINE__, 1.664258574522914e-29, "+1.664259E-29", "%+E",
-__LINE__, 1.667662840654469e-28, "+2e-28", "%+0.g",
-__LINE__, 1.673124993246863e-25, "+0.000000", "%+f",
-__LINE__, 1.677788498058833e-20, "1.678e-20", "%.4g",
-__LINE__, 1.681211731173386e-07, "1.68121e-07", "%0.6g",
-__LINE__, 1.686341560076196e+02, "169", "%.0f",
-__LINE__, 1.686507685287281e+08, "1.686508E+08", "%E",
-__LINE__, 1.689500448795801e+03, "+1689.500449", "%+0f",
-__LINE__, 1.690639426041009e-13, "2e-13", "%5.0g",
-__LINE__, 1.691554939595928e+16, "+1.6916e+16", "%+.5g",
-__LINE__, 1.698597126229626e-09, "1.699e-09", "%3.4g",
-__LINE__, 1.700093083173516e+16, "17000930831735159", "%5.f",
-__LINE__, 1.703653732982710e+13, "+1.70365e+13", "%+g",
-__LINE__, 1.705353380573352e-16, "0.000000", "%f",
-__LINE__, 1.705973328700179e-26, "1.70597e-26", "%5g",
-__LINE__, 1.717797289369145e+22, "+1.717797E+22", "%+7E",
-__LINE__, 1.722819196705361e-28, "1.722819E-28", "%1.7G",
-__LINE__, 1.723775772891202e+01, "17.237758", "%f",
-__LINE__, 1.723787102325353e-23, "0.000000", "%2f",
-__LINE__, 1.724551301171870e-13, "0.000000", "%f",
-__LINE__, 1.726098078655758e-20, "0.0000000", "%7.7f",
-__LINE__, 1.726302822039762e+18, "+2E+18", "%+1.G",
-__LINE__, 1.726659209108151e+18, "+1.72666E+18", "%+6G",
-__LINE__, 1.728324925097269e-25, "1.728325e-25", "%7e",
-__LINE__, 1.728357491215602e+02, "172.836", "%G",
-__LINE__, 1.729612227517587e+22, "1.729612e+22", "%e",
-__LINE__, 1.731753104740805e-06, "1.73175e-06", "%2g",
-__LINE__, 1.736066279733589e+18, "+1.736066E+18", "%+3E",
-__LINE__, 1.736626769480182e-19, "2e-19", "%.0g",
-__LINE__, 1.737445267713118e-13, " 2e-13", "%7.g",
-__LINE__, 1.739264683023077e+05, "173926.468302", "%f",
-__LINE__, 1.739423702667596e-16, "+1.73942e-16", "%+g",
-__LINE__, 1.741053616961658e-14, "1.74105E-14", "%G",
-__LINE__, 1.741085952255057e+29, "1.7e+29", "%#.1e",
-__LINE__, 1.743673705633426e+03, "2E+03", "%5.0G",
-__LINE__, 1.750940899205665e+27, "1.75094e+27", "%g",
-__LINE__, 1.753871003884151e-26, "0.", "%#.0f",
-__LINE__, 1.755237470854478e-14, "1.755237e-14", "%4e",
-__LINE__, 1.757491419837315e-03, "0.002", "%1.G",
-__LINE__, 1.758657797688126e+26, "+1.75866E+26", "%+#G",
-__LINE__, 1.760491452270889e+08, "1.76049E+08", "%G",
-__LINE__, 1.760816275862939e-10, "2e-10", "%.1g",
-__LINE__, 1.760905893493003e-22, "1.76e-22", "%.2e",
-__LINE__, 1.762101125986743e-12, "2e-12", "%.0g",
-__LINE__, 1.763855968659571e+27, "1.763856E+27", "%E",
-__LINE__, 1.764595217341348e-13, "1.764595E-13", "%E",
-__LINE__, 1.766737296048445e+08, "+1.77e+08", "%+.3g",
-__LINE__, 1.769916386969961e-05, "+1.76992e-05", "%+g",
-__LINE__, 1.773873506344176e-01, "1.773874e-01", "%e",
-__LINE__, 1.775392554371421e+03, "+1775.39", "%+3.2f",
-__LINE__, 1.776007623006870e+24, "1776007623006870161930237.372871", "%f",
-__LINE__, 1.777418921678653e-27, " 0", "%6.f",
-__LINE__, 1.780967607234234e-18, "1.780968E-18", "%E",
-__LINE__, 1.782510583486435e+24, "+2e+24", "%+3.g",
-__LINE__, 1.784002921603004e+14, "1.784E+14", "%G",
-__LINE__, 1.784231151778382e+11, "1.7842E+11", "%.5G",
-__LINE__, 1.785589091453195e+02, " 179.", "%#5.f",
-__LINE__, 1.786402639400039e+19, "2e+19", "%0.g",
-__LINE__, 1.786506485794647e-25, "2E-25", "%.1G",
-__LINE__, 1.787513971482493e-04, "+0.000178751", "%+G",
-__LINE__, 1.799765409320039e+23, "179976540932003885586710", "%6.0f",
-__LINE__, 1.800451864218989e+08, "+1.80045e+08", "%+g",
-__LINE__, 1.800743538258572e+04, " +18007", "%+7.f",
-__LINE__, 1.801583764453362e+25, "1.8016e+25", "%0.5g",
-__LINE__, 1.804502093739547e+14, "2e+14", "%2.g",
-__LINE__, 1.805600104488678e-17, "1.805600E-17", "%E",
-__LINE__, 1.811342448081048e+17, "1.811342e+17", "%.6e",
-__LINE__, 1.812252160066930e+19, "2e+19", "%0.e",
-__LINE__, 1.816287564395273e+02, "182", "%2.f",
-__LINE__, 1.817097386762552e-13, "2E-13", "%3.1G",
-__LINE__, 1.817881381387254e+06, "1.81788E+06", "%G",
-__LINE__, 1.818416380830953e-30, "1.81842E-30", "%G",
-__LINE__, 1.824788290177454e-23, "1.82479e-23", "%g",
-__LINE__, 1.827832506678437e-18, "1.82783E-18", "%G",
-__LINE__, 1.828048053242609e+01, "18.2805", "%g",
-__LINE__, 1.828939681844203e-21, "1.82894E-21", "%.6G",
-__LINE__, 1.829763900251753e+12, "1829763900251.752773", "%1f",
-__LINE__, 1.833100407114602e-05, "0.000018", "%#f",
-__LINE__, 1.833672780034284e-07, "1.833673e-07", "%e",
-__LINE__, 1.834307692387540e+21, "2E+21", "%5.G",
-__LINE__, 1.835119931666753e+14, "+1.835120e+14", "%+e",
-__LINE__, 1.835956566920861e-26, "0.000000", "%#f",
-__LINE__, 1.837784131899354e+22, "1.83778E+22", "%G",
-__LINE__, 1.842867094224664e-09, "1.84287e-09", "%g",
-__LINE__, 1.844234823805319e+28, "2E+28", "%1.G",
-__LINE__, 1.844877682008962e+12, "1.84488e+12", "%g",
-__LINE__, 1.846530424340488e-22, "1.846530e-22", "%#.7g",
-__LINE__, 1.849111603036448e-08, "0.00", "%.2f",
-__LINE__, 1.850158752678734e+04, "+18502", "%+.5G",
-__LINE__, 1.851431391104701e-06, " +2e-06", "%+7.e",
-__LINE__, 1.851487430609031e-04, "0.000185149", "%G",
-__LINE__, 1.853171650128773e+03, "1853.17", "%G",
-__LINE__, 1.854743263740068e-16, "1.854743E-16", "%6.6E",
-__LINE__, 1.864399020932753e-11, "+0.000000", "%+f",
-__LINE__, 1.865028568072397e-22, "1.86503E-22", "%.6G",
-__LINE__, 1.868128423759223e+14, "1.86813E+14", "%4G",
-__LINE__, 1.868453558435480e+21, "1.86845E+21", "%G",
-__LINE__, 1.870663011627498e-06, "1.87E-06", "%.3G",
-__LINE__, 1.873273487748907e+17, "+1.873273E+17", "%+E",
-__LINE__, 1.878885220839805e-04, "0.000187889", "%G",
-__LINE__, 1.879102515623569e+17, "1.8791e+17", "%g",
-__LINE__, 1.889343972100858e-10, "2E-10", "%2.E",
-__LINE__, 1.891833282879762e-24, "+2e-24", "%+.1g",
-__LINE__, 1.895148778941240e-07, "0.000000", "%0f",
-__LINE__, 1.896950834067578e-28, "+1.89695e-28", "%+#g",
-__LINE__, 1.898464546986629e-05, "1.898465e-05", "%.7g",
-__LINE__, 1.900851427578321e-19, "1.90085e-19", "%6g",
-__LINE__, 1.901171344577750e+27, "1.901171e+27", "%7.7g",
-__LINE__, 1.903563335316359e+02, "190.356", "%0g",
-__LINE__, 1.903817306004701e-16, "+1.90e-16", "%+#6.2e",
-__LINE__, 1.910606410246797e+21, "1.91061E+21", "%2.5E",
-__LINE__, 1.912537759564710e+29, "1.91254E+29", "%G",
-__LINE__, 1.913606675894566e+27, "1.91361E+27", "%7.6G",
-__LINE__, 1.916473734025505e-05, " 2e-05", "%7.g",
-__LINE__, 1.916507511720523e+23, "+2E+23", "%+.0E",
-__LINE__, 1.917688262248837e-28, "1.918e-28", "%.4g",
-__LINE__, 1.921375594217083e-12, "1.92138E-12", "%G",
-__LINE__, 1.923916000932815e-25, "1.92392E-25", "%G",
-__LINE__, 1.926303652776462e-01, "+0.2", "%+0.G",
-__LINE__, 1.929411084211293e+21, "1.92941E+21", "%6G",
-__LINE__, 1.929996820297491e-26, "1.93e-26", "%.6g",
-__LINE__, 1.937301472034748e-29, "1.9373E-29", "%G",
-__LINE__, 1.937301660220894e-11, "+1.9373E-11", "%+G",
-__LINE__, 1.939038538587083e-02, "0.0193904", "%g",
-__LINE__, 1.940575489112444e-09, "1.94058E-09", "%G",
-__LINE__, 1.946550455606677e-26, "1.946550E-26", "%#1E",
-__LINE__, 1.954250777559491e-14, "1.95425E-14", "%G",
-__LINE__, 1.955646327688473e-16, "1.956E-16", "%#.3E",
-__LINE__, 1.956999911995683e+20, "2E+20", "%2.G",
-__LINE__, 1.959125254298784e-21, "1.95913E-21", "%#G",
-__LINE__, 1.960330340481290e+26, "1.96033e+26", "%.6g",
-__LINE__, 1.964156478075422e+01, "+19.6416", "%+g",
-__LINE__, 1.964702507676036e+19, "2.0e+19", "%2.1e",
-__LINE__, 1.965762191674409e-30, "2E-30", "%1.G",
-__LINE__, 1.967492699686803e-29, "+1.967493E-29", "%+#E",
-__LINE__, 1.970072604062236e-11, "+1.97007E-11", "%+G",
-__LINE__, 1.975631055550387e+05, "197563.105555", "%.6f",
-__LINE__, 1.975722425389177e+28, "+1.975722e+28", "%+5.6e",
-__LINE__, 1.977938328895365e-05, " 2e-05", "%6.e",
-__LINE__, 1.981950849019640e+13, "1.981951E+13", "%E",
-__LINE__, 1.982543168856985e-26, "1.98254e-26", "%4g",
-__LINE__, 1.984873317384181e-20, "1.98487E-20", "%4G",
-__LINE__, 1.986146420877074e+02, "+1.986146e+02", "%+0e",
-__LINE__, 1.986465942785167e-28, "1.98647e-28", "%g",
-__LINE__, 1.988250323235468e-05, " +0", "%+7.f",
-__LINE__, 1.989966623080645e-09, "1.989967e-09", "%e",
-__LINE__, 1.991243122514519e+11, "199124312251", "%5.f",
-__LINE__, 1.993287894645908e+25, "+1.993288E+25", "%+E",
-__LINE__, 1.995172329888890e-30, "+1.99517e-30", "%+3g",
-__LINE__, 1.997075127236432e+05, "1.997E+05", "%#.4G",
-__LINE__, 2.000651599487290e+04, "2E+04", "%2.E",
-__LINE__, 2.001429412876339e-28, "0.000000", "%6f",
-__LINE__, 2.003535646264196e+03, " 2E+03", "%7.G",
-__LINE__, 2.011751504116246e+06, "2E+06", "%2.G",
-__LINE__, 2.016361237694652e-30, "2.01636e-30", "%4g",
-__LINE__, 2.018266414065554e-08, "0.00", "%2.2f",
-__LINE__, 2.020706780608565e+03, "2E+03", "%.0G",
-__LINE__, 2.025098418552005e-16, "+2.025098E-16", "%+2E",
-__LINE__, 2.026100592518976e-11, "2.026101e-11", "%6e",
-__LINE__, 2.026167291572980e+11, "2.02617E+11", "%G",
-__LINE__, 2.026782170272331e+07, "2.026782E+07", "%E",
-__LINE__, 2.029133469449347e-06, " 2e-06", "%6.g",
-__LINE__, 2.031191570768443e-20, "2.031192E-20", "%2.7G",
-__LINE__, 2.031884221862863e-16, "2.031884e-16", "%e",
-__LINE__, 2.032992924118323e+29, "203299292411832333016263874014.84", "%#0.2f",
-__LINE__, 2.035799610097827e+28, "+20357996100978272835391180706.2104344", "%+3.7f",
-__LINE__, 2.038008183612069e+25, "20380081836120691463065668", "%7.0f",
-__LINE__, 2.041632205119365e-22, "+2.04163e-22", "%+g",
-__LINE__, 2.042769811159352e-10, "2e-10", "%.1g",
-__LINE__, 2.043034975847005e-08, "2.043035e-08", "%e",
-__LINE__, 2.045930666285880e+26, "2.04593e+26", "%g",
-__LINE__, 2.048377276651386e-21, "0.00000", "%2.5f",
-__LINE__, 2.051785787301292e-23, "0.000000", "%f",
-__LINE__, 2.055085792048183e-10, "0.000000", "%f",
-__LINE__, 2.055783028451040e-21, "+0", "%+1.f",
-__LINE__, 2.057641607509489e-17, "+2E-17", "%+2.G",
-__LINE__, 2.058348703001600e-15, "2.05835E-15", "%#G",
-__LINE__, 2.059594758787322e+24, "2.05959E+24", "%1G",
-__LINE__, 2.062710740295018e+01, "20.6271", "%G",
-__LINE__, 2.063240676447750e-11, "0.000000", "%f",
-__LINE__, 2.063799238238917e-09, "+0.000000", "%+f",
-__LINE__, 2.064564135160425e-17, "2.06456E-17", "%G",
-__LINE__, 2.066363476927650e-05, "2.07E-05", "%.3G",
-__LINE__, 2.066871450514214e-02, "+2.066871e-02", "%+e",
-__LINE__, 2.067258256169148e+07, "2.06726e+07", "%g",
-__LINE__, 2.068466590729350e-22, "0.0000", "%.4f",
-__LINE__, 2.068779510112540e-26, "2.06878e-26", "%g",
-__LINE__, 2.069258770387493e+19, "20692587703874929516.700831", "%3f",
-__LINE__, 2.069547778447951e+26, "2.069548e+26", "%6e",
-__LINE__, 2.070479507710941e-23, "2.07048E-23", "%G",
-__LINE__, 2.071809640061785e+22, "2.071810E+22", "%E",
-__LINE__, 2.073364463564950e-06, "2.07336e-06", "%g",
-__LINE__, 2.073478953644888e-10, "+2.07E-10", "%+.3G",
-__LINE__, 2.076039194312519e+12, "2.07604E+12", "%G",
-__LINE__, 2.081490398946229e-07, "+2.08149e-07", "%+g",
-__LINE__, 2.084941170287895e-07, "2.084941E-07", "%7E",
-__LINE__, 2.087035885023382e-18, "+0.000000", "%+f",
-__LINE__, 2.091025884363342e-09, "2.09103E-09", "%G",
-__LINE__, 2.091830555397864e+08, "209183056", "%0.f",
-__LINE__, 2.091998109232084e-22, "0.000000", "%#f",
-__LINE__, 2.093406473464940e-17, "2.09341e-17", "%g",
-__LINE__, 2.094646724039720e-26, "2.094647e-26", "%0.7g",
-__LINE__, 2.095218667083208e-22, "2.09522e-22", "%.5e",
-__LINE__, 2.096932364992728e-27, "2.1E-27", "%.2G",
-__LINE__, 2.097012452732083e+17, "2.09701E+17", "%G",
-__LINE__, 2.102022216908102e-07, "0.000000", "%f",
-__LINE__, 2.104648382618938e-04, "0.00021", "%.3G",
-__LINE__, 2.109159578853690e-19, "2.10916e-19", "%6g",
-__LINE__, 2.111732624641178e-13, "+2.111733E-13", "%+7.7G",
-__LINE__, 2.112676138351330e+21, " 2e+21", "%6.g",
-__LINE__, 2.117332904051741e-09, "+0.000000", "%+f",
-__LINE__, 2.118001353767757e-14, "2.118E-14", "%4.3E",
-__LINE__, 2.119413720893955e+12, "2.119414E+12", "%.7G",
-__LINE__, 2.119610992647014e+07, "+21196109.9265", "%+.4f",
-__LINE__, 2.120504022069221e+25, "21205040220692210617414730.223", "%#.3f",
-__LINE__, 2.120634617123718e-16, "2.120635e-16", "%#e",
-__LINE__, 2.128702437175385e+12, "2128702437175.385", "%.3f",
-__LINE__, 2.131148830213536e-12, "2.131149e-12", "%e",
-__LINE__, 2.132682622145255e+04, "+21326.83", "%+#5.7G",
-__LINE__, 2.133864841676473e-01, " +0.2", "%+6.g",
-__LINE__, 2.133939058496273e+16, "2E+16", "%4.G",
-__LINE__, 2.135087006806302e-24, "0.000000", "%f",
-__LINE__, 2.138983961194584e-20, "+2.138984e-20", "%+7e",
-__LINE__, 2.146534189669224e+17, "+2.147E+17", "%+.4G",
-__LINE__, 2.147375595676503e+09, "2.147376e+09", "%e",
-__LINE__, 2.152994986418075e+02, "2E+02", "%0.E",
-__LINE__, 2.154127135896811e+06, "2.15E+06", "%2.3G",
-__LINE__, 2.154613053892588e-29, "2.1546E-29", "%.4E",
-__LINE__, 2.160830430730653e-12, "2.16083E-12", "%#G",
-__LINE__, 2.161740591663027e+28, "2.161741e+28", "%e",
-__LINE__, 2.167181665934011e-06, "2e-06", "%1.e",
-__LINE__, 2.167348761729060e-04, "2.167349e-04", "%#e",
-__LINE__, 2.170270852816708e-10, "2.17027E-10", "%0G",
-__LINE__, 2.173048229189370e-06, "2.173e-06", "%.5g",
-__LINE__, 2.175554537855024e+10, "2.17555E+10", "%G",
-__LINE__, 2.177447372527968e-30, "+0.000000", "%+.6f",
-__LINE__, 2.178591661569858e+05, "2.1786e+05", "%1.5g",
-__LINE__, 2.184700207174818e-29, "0.000000", "%f",
-__LINE__, 2.190817031437247e+03, "2.E+03", "%#3.0E",
-__LINE__, 2.191396212145558e-01, "2.191E-01", "%6.3E",
-__LINE__, 2.191786353372880e-23, "2.19179e-23", "%.5e",
-__LINE__, 2.193471126151079e+19, "2.1935E+19", "%.4E",
-__LINE__, 2.194750177630526e-15, "2.194750e-15", "%e",
-__LINE__, 2.196145170358973e+05, "+219615", "%+g",
-__LINE__, 2.199602360934320e-09, "2.19960E-09", "%#6.6G",
-__LINE__, 2.202913988776998e+17, "+2.20291e+17", "%+g",
-__LINE__, 2.207094560707703e-10, "2.207095e-10", "%e",
-__LINE__, 2.207557214621658e-13, " 0", "%4.f",
-__LINE__, 2.209428206272229e+13, "2.20943e+13", "%g",
-__LINE__, 2.212662463615175e-11, " 0", "%4.0f",
-__LINE__, 2.215732710968468e-30, "2E-30", "%.1G",
-__LINE__, 2.218490841936778e-10, "2.21849e-10", "%2g",
-__LINE__, 2.218850610567959e-01, "+0.221885", "%+G",
-__LINE__, 2.220796939261542e-03, "0.002221", "%#f",
-__LINE__, 2.221819894808024e+24, "2.2e+24", "%5.1e",
-__LINE__, 2.223804993235507e+27, "2.223805e+27", "%1e",
-__LINE__, 2.224715386046563e-17, "0.00000", "%#.5f",
-__LINE__, 2.224864709983882e-16, "+2.224865e-16", "%+e",
-__LINE__, 2.225764510969505e+16, "2.E+16", "%#4.G",
-__LINE__, 2.233229189161284e-07, "+2.23323e-07", "%+6g",
-__LINE__, 2.236522807209868e+17, "2.23652e+17", "%g",
-__LINE__, 2.236641620849775e+20, "2E+20", "%0.G",
-__LINE__, 2.237089952728626e-13, "2E-13", "%5.E",
-__LINE__, 2.238531255563381e-11, " 2E-11", "%7.1G",
-__LINE__, 2.242782296436871e+12, "2242782296436.871103", "%f",
-__LINE__, 2.249177852069393e-02, "+2.249178E-02", "%+5E",
-__LINE__, 2.250735782732076e+29, "+2.25074e+29", "%+g",
-__LINE__, 2.257455203557544e-11, "+2e-11", "%+4.0g",
-__LINE__, 2.258002527939529e+24, "2.258e+24", "%g",
-__LINE__, 2.266955929448160e+20, "226695592944815960123.6056915", "%.7f",
-__LINE__, 2.269019719123250e-23, "0.000000", "%f",
-__LINE__, 2.269022332502809e+02, "+226.902233", "%+f",
-__LINE__, 2.271165222038591e-03, "0.002", "%1.1g",
-__LINE__, 2.273965946408021e+14, "+227396594640802.085507", "%+f",
-__LINE__, 2.277221153386242e+22, "22772211533862418697538.032575", "%#f",
-__LINE__, 2.280214920187521e-01, "0.2", "%2.G",
-__LINE__, 2.280762993019740e+06, "2.28076E+06", "%G",
-__LINE__, 2.283479263040833e-24, "+0.000000", "%+f",
-__LINE__, 2.283686319235123e-07, "2.2837E-07", "%5.5G",
-__LINE__, 2.285842617231066e-26, "0.000000", "%f",
-__LINE__, 2.293145864755873e-02, "0.02", "%.0g",
-__LINE__, 2.293439381531532e+03, "+2.293439E+03", "%+#1E",
-__LINE__, 2.297972500660698e-22, "2.29797e-22", "%g",
-__LINE__, 2.298725366073681e+23, "2.29873E+23", "%G",
-__LINE__, 2.303151535483950e-29, "2.30315E-29", "%G",
-__LINE__, 2.308565313657699e-25, " 0", "%4.f",
-__LINE__, 2.309305373760733e-07, "2.309305E-07", "%E",
-__LINE__, 2.309693761334710e-19, "2.30969e-19", "%g",
-__LINE__, 2.312218220995774e-20, "+2.31222E-20", "%+.6G",
-__LINE__, 2.313115729670525e+24, "2.31312E+24", "%G",
-__LINE__, 2.315325159866773e-21, "2.315325E-21", "%E",
-__LINE__, 2.316932917620091e-19, "0.000000", "%f",
-__LINE__, 2.317548394633895e+13, "2.31755E+13", "%0G",
-__LINE__, 2.318951465093612e+02, "+2.32e+02", "%+1.2e",
-__LINE__, 2.319151794905482e-17, "+0.000000", "%+0f",
-__LINE__, 2.319708617851078e-27, "0.000000", "%f",
-__LINE__, 2.320019976591725e+20, "2e+20", "%.1g",
-__LINE__, 2.322859962551666e+06, "2.32286e+06", "%g",
-__LINE__, 2.326474568074649e-29, "2.326e-29", "%.4g",
-__LINE__, 2.328400844172053e-07, "2.3284E-07", "%G",
-__LINE__, 2.333695247698112e+16, "2.3337e+16", "%g",
-__LINE__, 2.333717120257130e-19, "+0.000000", "%+f",
-__LINE__, 2.334711793234782e-19, "2.33471E-19", "%5G",
-__LINE__, 2.335524987281242e+02, "+233.55", "%+7.5g",
-__LINE__, 2.335556767836369e-30, "2.34e-30", "%.3g",
-__LINE__, 2.337696964360052e-10, "2.3377e-10", "%1g",
-__LINE__, 2.337858249184500e-14, "2.337858E-14", "%5.6E",
-__LINE__, 2.339984354781169e-14, "2.339984E-14", "%E",
-__LINE__, 2.340849041430089e-04, "0.00023", "%0.2G",
-__LINE__, 2.342388410373363e-24, "2.34239E-24", "%G",
-__LINE__, 2.343933106737237e-22, "2.34393e-22", "%g",
-__LINE__, 2.344870855713960e-08, "0.000000", "%.6f",
-__LINE__, 2.347368965433808e+24, "2347368965433808352116785", "%4.f",
-__LINE__, 2.349417462171421e-02, "+0.0234942", "%+G",
-__LINE__, 2.351071111431207e+11, "235107111143.12", "%.2f",
-__LINE__, 2.352756222810670e+19, "+2.e+19", "%+#4.g",
-__LINE__, 2.355862529217003e-22, "2.355863e-22", "%#4e",
-__LINE__, 2.356804045401445e-30, "2.3568E-30", "%G",
-__LINE__, 2.362100710185559e-26, "2.3621e-26", "%g",
-__LINE__, 2.368330779173562e-12, " 0", "%4.f",
-__LINE__, 2.383329784369796e+22, "2.38333E+22", "%G",
-__LINE__, 2.386845229536477e+01, "+23.868452", "%+#f",
-__LINE__, 2.388207830036780e-05, "0.000024", "%f",
-__LINE__, 2.391809468802907e+21, "+2.391809e+21", "%+e",
-__LINE__, 2.395172908564692e-09, "+0.000000", "%+f",
-__LINE__, 2.395447167030886e-29, "2.39545e-29", "%g",
-__LINE__, 2.397292973389182e+16, "23972929733891823", "%6.f",
-__LINE__, 2.401749832237687e-30, "2.401750E-30", "%E",
-__LINE__, 2.403610502544347e-03, "0.00240361", "%4G",
-__LINE__, 2.404676421776132e+17, "240467642177613206", "%6.f",
-__LINE__, 2.406327689091479e+25, "2.406328e+25", "%e",
-__LINE__, 2.407341999590511e-02, "0.024073", "%f",
-__LINE__, 2.407352797581004e+05, "240735.", "%#g",
-__LINE__, 2.407903467439017e+13, "2.4079E+13", "%G",
-__LINE__, 2.407979635013539e+21, " +2E+21", "%+7.G",
-__LINE__, 2.409513517930790e+29, "240951351793079027174826478585.600853", "%f",
-__LINE__, 2.412530651221551e+10, "+2.41253E+10", "%+G",
-__LINE__, 2.419943224673811e+00, "2.41994", "%#g",
-__LINE__, 2.422474399040258e-15, "0.000000", "%f",
-__LINE__, 2.426060206689458e+18, "2.42606E+18", "%1G",
-__LINE__, 2.439982659679872e+14, "+2.439983E+14", "%+E",
-__LINE__, 2.440528851375447e+13, "24405288513754.466173", "%f",
-__LINE__, 2.441340473292679e+19, "2.44134E+19", "%G",
-__LINE__, 2.443521636943916e+19, " 2.e+19", "%#7.g",
-__LINE__, 2.445925211597624e-27, "2.445925E-27", "%E",
-__LINE__, 2.446966179060722e+25, "2.446966e+25", "%5e",
-__LINE__, 2.447714218717278e+11, "2e+11", "%1.e",
-__LINE__, 2.448339744613286e+06, "2.4483e+06", "%3.5g",
-__LINE__, 2.448772993496189e+03, "2448.77", "%G",
-__LINE__, 2.448857654325229e+22, "+2.44886e+22", "%+g",
-__LINE__, 2.450082452098890e-27, "2.4501E-27", "%#3.5G",
-__LINE__, 2.451293602221637e+05, "245129.360222", "%f",
-__LINE__, 2.454531490229426e+02, "245.453", "%G",
-__LINE__, 2.458958369944980e+14, "2.5E+14", "%6.1E",
-__LINE__, 2.463666680775038e+14, "+246366668077503.80", "%+#.2f",
-__LINE__, 2.471582990960795e+05, "2.471583e+05", "%e",
-__LINE__, 2.474107179274687e+22, "2.47411e+22", "%g",
-__LINE__, 2.474332114849132e-08, "+2.47433e-08", "%+g",
-__LINE__, 2.476956762431716e+18, "+2476956762431715919.348107", "%+#f",
-__LINE__, 2.479091221850607e-22, "0.000000", "%f",
-__LINE__, 2.479819586598431e-24, "2.47982e-24", "%g",
-__LINE__, 2.480006174601455e-05, "2.48001E-05", "%G",
-__LINE__, 2.482672677638334e-26, "+0.000000", "%+f",
-__LINE__, 2.492816492208918e-14, " 0", "%7.f",
-__LINE__, 2.492964173197140e-12, " 2e-12", "%7.g",
-__LINE__, 2.494646635961173e+02, "249.465", "%g",
-__LINE__, 2.494687818780545e+11, "249468781878.054546", "%#7f",
-__LINE__, 2.510083560147301e-13, "+2.510084e-13", "%+#e",
-__LINE__, 2.511186607989480e-30, "2.51E-30", "%.3G",
-__LINE__, 2.514164516133643e-11, "2.51416e-11", "%g",
-__LINE__, 2.517242520804735e+11, "2.517243e+11", "%e",
-__LINE__, 2.518526126400833e-26, "2.51853e-26", "%g",
-__LINE__, 2.520313416401176e+09, "2520313416.401176", "%5f",
-__LINE__, 2.521653160738683e-29, "2.52165e-29", "%#g",
-__LINE__, 2.521941342615338e-16, "2.52194e-16", "%g",
-__LINE__, 2.523554774354461e-03, "+3E-03", "%+.0E",
-__LINE__, 2.525434130825058e+06, "+2.525434E+06", "%+E",
-__LINE__, 2.527616380113364e+02, "2.527616E+02", "%E",
-__LINE__, 2.531871347913505e+09, "+2.53187E+09", "%+#G",
-__LINE__, 2.532167428661069e+06, "2532167.428661", "%f",
-__LINE__, 2.545585718405995e+14, "+2.54559E+14", "%+G",
-__LINE__, 2.546305097286406e+10, "2.546305e+10", "%e",
-__LINE__, 2.547467156069069e-30, "+0.00", "%+3.2f",
-__LINE__, 2.548728793004506e-14, "2.54873E-14", "%G",
-__LINE__, 2.560375602395090e+11, "256037560239.509032", "%0f",
-__LINE__, 2.560555687476687e+03, "2561", "%.4g",
-__LINE__, 2.561709077363443e-24, "+0.000000", "%+f",
-__LINE__, 2.563763849675242e+10, "2.5637638E+10", "%.7E",
-__LINE__, 2.567482414574355e+11, "+2.567482e+11", "%+e",
-__LINE__, 2.571575046303674e-17, "3E-17", "%2.0E",
-__LINE__, 2.572997971296986e+11, "257299797129.698593", "%f",
-__LINE__, 2.578625935900331e+22, "25786259359003311786295.853381", "%f",
-__LINE__, 2.579663282966370e+12, "2.579663e+12", "%e",
-__LINE__, 2.593141782397610e-08, "0.000000", "%f",
-__LINE__, 2.594386109584196e+04, "3.E+04", "%#6.0E",
-__LINE__, 2.598069318007816e-22, "2.59807e-22", "%g",
-__LINE__, 2.600910462290091e+09, "2.600910E+09", "%6E",
-__LINE__, 2.602580183614458e-03, "2.602580e-03", "%e",
-__LINE__, 2.606540360440264e+09, "+2606540360.4", "%+#0.1f",
-__LINE__, 2.610016419698116e-21, "+3.e-21", "%+#3.g",
-__LINE__, 2.612279323574882e-20, "2.61228E-20", "%G",
-__LINE__, 2.614157324336453e-14, "2.61416e-14", "%g",
-__LINE__, 2.614688721873993e-09, "2.61e-09", "%6.2e",
-__LINE__, 2.616661104472416e-15, " 0", "%5.f",
-__LINE__, 2.616742079283195e-09, " +3E-09", "%+7.E",
-__LINE__, 2.618075304717427e+24, "2.618075e+24", "%e",
-__LINE__, 2.624118573335769e+26, "262411857333576925555007619.550452", "%1f",
-__LINE__, 2.625718894274227e+24, "+2625718894274227110940955.753904", "%+f",
-__LINE__, 2.627081999477812e+03, "2627.081999", "%f",
-__LINE__, 2.631061062224705e+14, "263106106222470.481626", "%f",
-__LINE__, 2.631545877128814e+27, "+2.63155e+27", "%+g",
-__LINE__, 2.632694395848818e-11, "2.63269e-11", "%g",
-__LINE__, 2.636728891022008e-22, "+2.63673e-22", "%+#4g",
-__LINE__, 2.638495675008130e-28, "+2.638496e-28", "%+e",
-__LINE__, 2.639704195859799e-11, "0.", "%#.0f",
-__LINE__, 2.641645264652665e-20, "0", "%0.f",
-__LINE__, 2.642012075064497e-20, "3E-20", "%0.E",
-__LINE__, 2.648725869006487e-29, " 3E-29", "%6.G",
-__LINE__, 2.649060724417770e+12, "3E+12", "%3.G",
-__LINE__, 2.651188545120166e-17, "0.000", "%.3f",
-__LINE__, 2.652302152621621e+14, "2.7E+14", "%.2G",
-__LINE__, 2.653309718412604e-28, "0.000000", "%f",
-__LINE__, 2.658344750491858e-21, " 3e-21", "%6.g",
-__LINE__, 2.664625074612594e+15, "3e+15", "%1.g",
-__LINE__, 2.666953728270800e-15, "3e-15", "%0.e",
-__LINE__, 2.674515419678877e-11, " 3E-11", "%6.E",
-__LINE__, 2.680054917256578e+15, "2680054917256577.5", "%#2.1f",
-__LINE__, 2.680495609883415e-11, "2.68E-11", "%#.3G",
-__LINE__, 2.685757893641070e+23, "268575789364107020418259.70809", "%1.5f",
-__LINE__, 2.695551226058178e+16, "26955512260581775.407786", "%f",
-__LINE__, 2.696346377519671e+04, "+26963.5", "%+G",
-__LINE__, 2.714262310601257e+17, "+2.714262E+17", "%+E",
-__LINE__, 2.719227450016317e-01, "0.271923", "%G",
-__LINE__, 2.724135433346056e-30, "+2.72414e-30", "%+g",
-__LINE__, 2.725143224130276e+14, "272514322413027.576530", "%6f",
-__LINE__, 2.729355189648310e-03, "+0.00273", "%+.5f",
-__LINE__, 2.732872167724945e+11, "2.73287E+11", "%G",
-__LINE__, 2.737709476435412e+17, "273770947643541218.141650", "%f",
-__LINE__, 2.739299356074967e-15, "2.7E-15", "%.2G",
-__LINE__, 2.740793612304798e-27, "2.740794E-27", "%.7G",
-__LINE__, 2.742030156175960e+20, "2.74203e+20", "%2.6g",
-__LINE__, 2.744455324096085e+11, "2.74446E+11", "%G",
-__LINE__, 2.745179546531160e+07, "2.7452E+07", "%.5G",
-__LINE__, 2.747470562525333e+04, "3E+04", "%2.E",
-__LINE__, 2.750243314674629e+21, "2.75024E+21", "%#G",
-__LINE__, 2.750250224436030e+20, "+2.750250e+20", "%+0.6e",
-__LINE__, 2.752712858561084e-22, "2.752713e-22", "%e",
-__LINE__, 2.756982987656667e-03, "0.002756983", "%#.7G",
-__LINE__, 2.761841188479590e+13, "3e+13", "%1.g",
-__LINE__, 2.769498440434419e+00, "+3e+00", "%+0.e",
-__LINE__, 2.769993785786379e+10, "27699937857.863794", "%f",
-__LINE__, 2.772900256376753e-06, "+2.7729E-06", "%+7.6G",
-__LINE__, 2.774401482467457e-06, "2.8e-06", "%3.2g",
-__LINE__, 2.777691370374757e-02, "+0.027777", "%+f",
-__LINE__, 2.779836227365899e-09, "3e-09", "%5.0g",
-__LINE__, 2.780481651765741e+01, "2.780482E+01", "%E",
-__LINE__, 2.782228478714809e-26, "2.782228E-26", "%4.7G",
-__LINE__, 2.790457781719376e+13, "+2.8e+13", "%+.2g",
-__LINE__, 2.792026581166417e-30, " 3.e-30", "%#7.0g",
-__LINE__, 2.792396278299615e-08, "0.00", "%#.2f",
-__LINE__, 2.793658047689995e-10, "2.794e-10", "%#0.4g",
-__LINE__, 2.795707358229888e-25, "0.000000", "%f",
-__LINE__, 2.796253091758523e-06, "2.796E-06", "%.4G",
-__LINE__, 2.796756564788716e-24, "2.796757e-24", "%e",
-__LINE__, 2.798730444798773e-14, "2.79873e-14", "%g",
-__LINE__, 2.799108397670447e-24, "3E-24", "%.0G",
-__LINE__, 2.799389008872835e+06, "2799389.", "%#0.f",
-__LINE__, 2.800413998518039e-14, "0.000000", "%f",
-__LINE__, 2.803237602587100e+15, "+2803237602587100.418816", "%+5f",
-__LINE__, 2.803474415574551e-04, "0.0002803", "%.7f",
-__LINE__, 2.804957468647181e+25, "2.80496e+25", "%g",
-__LINE__, 2.809345112788226e+09, "2809345112.788226", "%.6f",
-__LINE__, 2.811518239408899e+10, "3e+10", "%1.g",
-__LINE__, 2.813188439967416e-16, "0.0000000", "%5.7f",
-__LINE__, 2.813497118051755e+08, "2.8135e+08", "%.5g",
-__LINE__, 2.815748256510577e-29, "0.000000", "%2f",
-__LINE__, 2.816076365485207e-01, "0.281608", "%0G",
-__LINE__, 2.816083345772131e+24, "2.8161e+24", "%6.4e",
-__LINE__, 2.818686957605178e+12, "2.8187E+12", "%.5G",
-__LINE__, 2.821903538737691e+20, "2.8219E+20", "%G",
-__LINE__, 2.823659589845680e+26, "2.82366e+26", "%2g",
-__LINE__, 2.823685630865012e+22, "2.82369E+22", "%G",
-__LINE__, 2.828826386007914e+21, "2.828826E+21", "%7E",
-__LINE__, 2.830997901034349e+04, "+3e+04", "%+0.e",
-__LINE__, 2.833886731091353e-26, "+2.833887e-26", "%+4e",
-__LINE__, 2.839965144893913e+28, "28399651448939131626048038015.1421", "%.4f",
-__LINE__, 2.840651452049947e-09, "2.841E-09", "%#.3E",
-__LINE__, 2.843388001911757e-01, "0.284339", "%g",
-__LINE__, 2.846122151080671e+14, "2.84612E+14", "%.5E",
-__LINE__, 2.851257828837595e+05, "+285126", "%+5.f",
-__LINE__, 2.853823884459520e+07, "+2.85382E+07", "%+G",
-__LINE__, 2.853870068368765e-06, "2.854E-06", "%4.3E",
-__LINE__, 2.856687358149867e+01, "+28.567", "%+6.5G",
-__LINE__, 2.858946600073752e+06, "2.8589466e+06", "%3.7e",
-__LINE__, 2.861525727138818e+24, "2.8615257e+24", "%2.7e",
-__LINE__, 2.865104175886071e-24, "0.000000", "%f",
-__LINE__, 2.870678920363198e-14, "2.87068E-14", "%G",
-__LINE__, 2.873298537233691e+09, "+2.8733e+09", "%+g",
-__LINE__, 2.877939609444375e-02, "0.028779", "%f",
-__LINE__, 2.878253985341728e+13, "2.87825E+13", "%G",
-__LINE__, 2.879299244903946e+29, "287929924490394597569320467301", "%0.f",
-__LINE__, 2.885516225515485e-26, "0.000000", "%f",
-__LINE__, 2.886013724129579e+20, "+3e+20", "%+4.g",
-__LINE__, 2.887032786975506e-30, "0.000000", "%f",
-__LINE__, 2.890415456531026e-29, "2.89042E-29", "%G",
-__LINE__, 2.893177360548214e-13, "2.893E-13", "%#6.3E",
-__LINE__, 2.895265536458195e+26, "2.89527e+26", "%5g",
-__LINE__, 2.903844533810152e+23, "290384453381015195105874.23", "%.2f",
-__LINE__, 2.909060558287504e+27, "2.90906e+27", "%g",
-__LINE__, 2.911615480973172e-05, "2.91162E-05", "%3G",
-__LINE__, 2.912692297221896e+09, "2912692297.221896", "%#f",
-__LINE__, 2.913595662485813e-24, "2.9136E-24", "%G",
-__LINE__, 2.915960840341896e-27, "0.000000", "%f",
-__LINE__, 2.920451095973991e-16, "2.92e-16", "%2.2e",
-__LINE__, 2.920528295810925e+06, "2.92053E+06", "%#G",
-__LINE__, 2.921564671017147e+20, "2.921565E+20", "%#6E",
-__LINE__, 2.921628350942189e+01, "2.921628E+01", "%E",
-__LINE__, 2.921843377455232e+20, "2.921843E+20", "%#E",
-__LINE__, 2.930156950319384e+29, "2.930E+29", "%1.3E",
-__LINE__, 2.931229858895071e-30, "2.9e-30", "%4.2g",
-__LINE__, 2.931753029689166e+20, "2.93175e+20", "%g",
-__LINE__, 2.933023693079342e+15, "3.E+15", "%#.1G",
-__LINE__, 2.933078733225520e+26, "2.93308E+26", "%G",
-__LINE__, 2.933528170896643e-14, "+2.93353e-14", "%+g",
-__LINE__, 2.938648437428148e+00, "2.938648e+00", "%e",
-__LINE__, 2.940752238221344e+26, "+2.94075E+26", "%+G",
-__LINE__, 2.942836470459675e+20, "2.9428e+20", "%6.4e",
-__LINE__, 2.943218333254941e+29, "294321833325494086608387078740.634024", "%f",
-__LINE__, 2.943690574007512e-27, "0.000000", "%f",
-__LINE__, 2.945452907046501e+09, "+2.9455E+09", "%+.5G",
-__LINE__, 2.946648725966953e+16, "29466487259669534.637396", "%4f",
-__LINE__, 2.955119322417825e+29, "2.95512E+29", "%G",
-__LINE__, 2.966481197538973e+24, "2.96648e+24", "%#g",
-__LINE__, 2.969362862661362e+08, "+2.969363e+08", "%+7e",
-__LINE__, 2.970062459990078e+21, "+2.97006E+21", "%+G",
-__LINE__, 2.971059959019791e+10, " 3E+10", "%7.G",
-__LINE__, 2.973020205606034e-29, "0.000000", "%f",
-__LINE__, 2.977223210301426e+04, "2.977223e+04", "%#e",
-__LINE__, 2.977467832772786e-26, "0.000000", "%f",
-__LINE__, 2.981433606423384e+18, "2981433606423384397.032805", "%f",
-__LINE__, 2.981615513287404e-17, "2.98162e-17", "%g",
-__LINE__, 2.983880743847276e+19, " 3e+19", "%7.e",
-__LINE__, 2.983927792297305e-28, "2.983928e-28", "%e",
-__LINE__, 2.984807359492058e-17, " 0", "%2.f",
-__LINE__, 2.985123412933032e+09, "+2.98512e+09", "%+g",
-__LINE__, 2.991132955408629e-27, "+2.99113e-27", "%+4g",
-__LINE__, 2.992345635923643e+19, "3E+19", "%4.G",
-__LINE__, 2.993024238285395e-05, "2.99302e-05", "%2g",
-__LINE__, 2.995303406756363e+16, "+2.995303E+16", "%+E",
-__LINE__, 2.995492577854335e+19, "+29954925778543346481.797016", "%+f",
-__LINE__, 2.996856271675341e-25, "+3e-25", "%+0.e",
-__LINE__, 2.997813968112619e+12, "2.99781e+12", "%#5g",
-__LINE__, 3.002097486457961e-17, "3.00210e-17", "%5.5e",
-__LINE__, 3.006538123158692e+28, "+3.00654E+28", "%+#G",
-__LINE__, 3.007293721729544e+04, "30072.937217", "%f",
-__LINE__, 3.008301791944493e-07, "3.008e-07", "%.3e",
-__LINE__, 3.011742184603817e-17, "3.011742E-17", "%#E",
-__LINE__, 3.024641547299177e-30, "3.02464e-30", "%g",
-__LINE__, 3.026525135110198e-28, "3e-28", "%.0e",
-__LINE__, 3.026768160756558e+20, "3.02677E+20", "%G",
-__LINE__, 3.031928829940975e+18, "3031928829940975234.1", "%0.1f",
-__LINE__, 3.039787705138620e+24, "+3.E+24", "%+#5.G",
-__LINE__, 3.039803824423916e-02, "0.030398", "%5f",
-__LINE__, 3.041236293199133e-26, "3.04124e-26", "%g",
-__LINE__, 3.045634954037886e+04, "30456.3", "%g",
-__LINE__, 3.047528114241850e+25, "3e+25", "%0.e",
-__LINE__, 3.047958193737501e-24, "3.04796E-24", "%#G",
-__LINE__, 3.049537324414302e-16, "3.04954E-16", "%G",
-__LINE__, 3.050500637681798e-30, "3.0505E-30", "%G",
-__LINE__, 3.051769626625307e-01, "0.305177", "%f",
-__LINE__, 3.057280201971847e+11, "+3.05728E+11", "%+.5E",
-__LINE__, 3.060046173306881e-10, "+3.060046e-10", "%+e",
-__LINE__, 3.069732667347204e+27, "+3069732667347204291274920251.453295", "%+f",
-__LINE__, 3.075060836786916e-14, "0.000000", "%f",
-__LINE__, 3.078175179670964e+13, "3.07818E+13", "%G",
-__LINE__, 3.080305344303183e-21, "3.08031e-21", "%6g",
-__LINE__, 3.088881497064043e+27, "+3.088881E+27", "%+3E",
-__LINE__, 3.089196877931209e-20, "3.089197e-20", "%e",
-__LINE__, 3.091400888880487e-08, "3e-08", "%2.e",
-__LINE__, 3.093410684178904e+16, "3.09341e+16", "%g",
-__LINE__, 3.104225344208216e-21, "0.000000", "%f",
-__LINE__, 3.105843728248599e+13, "3.e+13", "%#.0g",
-__LINE__, 3.106463071390893e-07, "0.0000", "%.4f",
-__LINE__, 3.107784123569379e+02, "+310.778", "%+G",
-__LINE__, 3.110605148983672e-20, "3.1106051E-20", "%.7E",
-__LINE__, 3.111702418162670e-04, "0.00031117", "%.5G",
-__LINE__, 3.117610675303153e-17, "3.11761e-17", "%g",
-__LINE__, 3.123620125717981e+07, "3.1236e+07", "%2.5g",
-__LINE__, 3.125648558809832e-24, "+3.125649E-24", "%+#0.6E",
-__LINE__, 3.129025163659283e+10, "31290251636.592825", "%#f",
-__LINE__, 3.130689119412709e-29, "+3.131E-29", "%+#.4G",
-__LINE__, 3.135681222132527e+13, "3.13568E+13", "%G",
-__LINE__, 3.138290485073330e-10, "3.13829E-10", "%G",
-__LINE__, 3.141255250155306e-12, "3.14126E-12", "%G",
-__LINE__, 3.143224520918429e+25, "3.14322E+25", "%#1G",
-__LINE__, 3.144746921366173e-16, " 0", "%7.f",
-__LINE__, 3.151336678241994e+19, "+3.15134E+19", "%+G",
-__LINE__, 3.161752935716549e+24, "3.2E+24", "%2.1E",
-__LINE__, 3.167106521258172e-10, "+3.167107e-10", "%+e",
-__LINE__, 3.167266522824146e-04, "3E-04", "%3.E",
-__LINE__, 3.169995217131489e+27, "3169995217131488907114089670.358226", "%f",
-__LINE__, 3.172117220467692e-21, "3.1721E-21", "%.5G",
-__LINE__, 3.173824170351611e+02, " 3e+02", "%6.e",
-__LINE__, 3.186291452544739e-28, " 0", "%2.f",
-__LINE__, 3.194750094186063e+03, "+3.194750E+03", "%+E",
-__LINE__, 3.195001037118137e-20, "0", "%0.0f",
-__LINE__, 3.199271564719560e+02, "319.927", "%g",
-__LINE__, 3.212803450638544e+20, "3.2128e+20", "%.6g",
-__LINE__, 3.214502877263883e+24, "3214502877263882840708220", "%2.f",
-__LINE__, 3.214658414074286e-01, "+0.321466", "%+#g",
-__LINE__, 3.217627975823673e+00, "3.217628", "%f",
-__LINE__, 3.218257328710536e-07, "3.21826e-07", "%6.5e",
-__LINE__, 3.221949479347008e+02, "322.194948", "%f",
-__LINE__, 3.222862935507443e-14, "3.222863E-14", "%E",
-__LINE__, 3.223750247261608e+19, "3.22375e+19", "%g",
-__LINE__, 3.236030335782375e+05, "3.236030e+05", "%e",
-__LINE__, 3.241078803072735e+19, "3.24108e+19", "%g",
-__LINE__, 3.248069569167045e-06, "0.000003", "%#f",
-__LINE__, 3.248148973717269e-15, "3.24815E-15", "%G",
-__LINE__, 3.251150704311790e+25, "+3.25115e+25", "%+5g",
-__LINE__, 3.254498593372140e+15, "+3.2545e+15", "%+g",
-__LINE__, 3.254949399612861e-13, "+3.255E-13", "%+7.3E",
-__LINE__, 3.255490928554106e-17, "3.255491e-17", "%e",
-__LINE__, 3.262333894422112e+17, "326233389442211185.738074", "%0f",
-__LINE__, 3.263923577545217e-24, "0.0000000", "%.7f",
-__LINE__, 3.267125289609703e+23, "3.26713e+23", "%#.5e",
-__LINE__, 3.267906049108331e+27, "3.267906E+27", "%6E",
-__LINE__, 3.269885039157328e+14, "326988503915732.797722", "%f",
-__LINE__, 3.296011393609953e-27, " 3E-27", "%7.E",
-__LINE__, 3.296452164568996e+29, "3.296452E+29", "%E",
-__LINE__, 3.296544736555325e+10, "+3.29654E+10", "%+.6G",
-__LINE__, 3.301861835798572e+03, "3301.862", "%4.7g",
-__LINE__, 3.311292283423002e+21, " 3E+21", "%6.G",
-__LINE__, 3.314868440076262e-10, "3.3149E-10", "%.5G",
-__LINE__, 3.318057982247451e-13, "3.3181e-13", "%0.5g",
-__LINE__, 3.318139218410071e-22, "0.000000", "%f",
-__LINE__, 3.326769904839351e-11, "+3.3268e-11", "%+0.4e",
-__LINE__, 3.327483659787219e+27, "+3.32748e+27", "%+g",
-__LINE__, 3.332666889640198e+17, "333266688964019763.830038", "%f",
-__LINE__, 3.333807449377253e+10, "+3.33e+10", "%+.3g",
-__LINE__, 3.334572302792625e-09, "3.334572E-09", "%E",
-__LINE__, 3.337567126586765e-17, "0.0000000", "%#3.7f",
-__LINE__, 3.340512607683786e-04, "+3E-04", "%+1.E",
-__LINE__, 3.344911557516870e+04, "33449.1", "%G",
-__LINE__, 3.346464302017296e+26, "+3.E+26", "%+#3.G",
-__LINE__, 3.348503166628953e+00, "+3.348503e+00", "%+e",
-__LINE__, 3.350025157778138e-19, "3.35003e-19", "%6g",
-__LINE__, 3.352826233035342e+11, "335282623303.534200", "%7f",
-__LINE__, 3.357174089765502e+10, "3.35717E+10", "%G",
-__LINE__, 3.369253166475501e+03, "+3369.25", "%+G",
-__LINE__, 3.371385975046735e+02, "337.", "%#.0f",
-__LINE__, 3.372532650462104e-04, "+0.000", "%+.3f",
-__LINE__, 3.376498162710442e-26, "3.376498e-26", "%e",
-__LINE__, 3.383510307689135e-12, " 3e-12", "%7.0e",
-__LINE__, 3.388427914080631e-04, "0.0003", "%2.4f",
-__LINE__, 3.390757423408097e+29, "3.3908E+29", "%.4E",
-__LINE__, 3.393963140962879e-11, "3.39396e-11", "%g",
-__LINE__, 3.399245742994444e+24, "3.399246E+24", "%E",
-__LINE__, 3.417690405546708e-26, "0.00000", "%4.5f",
-__LINE__, 3.421159360472045e-30, "3.42116E-30", "%G",
-__LINE__, 3.421973947898887e-06, "3.42197E-06", "%4G",
-__LINE__, 3.425949002482817e-10, "+3.42595E-10", "%+G",
-__LINE__, 3.428355150377972e+08, "3.42836E+08", "%G",
-__LINE__, 3.445035158951526e+15, "3445035158951526.454985", "%f",
-__LINE__, 3.447363996077534e+28, "+3e+28", "%+2.e",
-__LINE__, 3.451571062654907e-03, "0.00345157", "%G",
-__LINE__, 3.452787236877688e+09, "3.45279e+09", "%g",
-__LINE__, 3.454114826574939e-22, "3.e-22", "%#3.e",
-__LINE__, 3.455241965974631e-03, "0.003455", "%#f",
-__LINE__, 3.456190496554365e-18, "3.E-18", "%#5.E",
-__LINE__, 3.456804565717233e-19, "+0.000", "%+2.3f",
-__LINE__, 3.457077651539715e-28, "3.457078E-28", "%E",
-__LINE__, 3.472025705376229e+22, "3.472e+22", "%7.4g",
-__LINE__, 3.473308270919079e+03, "3.473308e+03", "%e",
-__LINE__, 3.474468013243007e-30, "3.47447e-30", "%g",
-__LINE__, 3.477976957097698e+22, "3.47798e+22", "%g",
-__LINE__, 3.501174631980057e-06, "4e-06", "%4.g",
-__LINE__, 3.501808481702140e+20, "3.50181E+20", "%G",
-__LINE__, 3.511760000705324e+14, "351176000070532.357000", "%f",
-__LINE__, 3.511870226306087e+29, "3.51187e+29", "%.5e",
-__LINE__, 3.518846859147841e+02, "+351.885", "%+G",
-__LINE__, 3.521659149753418e+25, "35216591497534182053641416", "%5.f",
-__LINE__, 3.521721228178747e+21, "4e+21", "%2.e",
-__LINE__, 3.526696007281458e+22, "3.5267e+22", "%g",
-__LINE__, 3.535631031379084e-11, "4e-11", "%5.0g",
-__LINE__, 3.537219665456759e-01, "0.353722", "%f",
-__LINE__, 3.537252728287785e-09, "3.537253E-09", "%E",
-__LINE__, 3.542561277796815e-19, "3.542561E-19", "%E",
-__LINE__, 3.548942336915745e+13, "3.54894E+13", "%.5E",
-__LINE__, 3.574385715121768e-24, "3.57439E-24", "%#G",
-__LINE__, 3.578068067760211e-13, "3.578068E-13", "%E",
-__LINE__, 3.583296432862266e-13, "3.5833e-13", "%g",
-__LINE__, 3.591567367115590e+19, "3.59157e+19", "%1g",
-__LINE__, 3.594902312287635e-24, "3.5949E-24", "%G",
-__LINE__, 3.602929486764515e+12, "3602929486764.514522", "%#f",
-__LINE__, 3.606699462631472e-01, "+0.360670", "%+f",
-__LINE__, 3.608605968319811e+17, "3.60861e+17", "%g",
-__LINE__, 3.608780761567885e+24, "4e+24", "%0.e",
-__LINE__, 3.623857274715022e-15, "3.62386E-15", "%1G",
-__LINE__, 3.627346251764432e-22, "3.627e-22", "%.4g",
-__LINE__, 3.652610391698086e-16, "0.000000", "%3f",
-__LINE__, 3.657463146689917e-19, " 0", "%4.0f",
-__LINE__, 3.658538858712938e-15, "4E-15", "%5.G",
-__LINE__, 3.660337267266058e+16, "+36603372672660579.034698", "%+f",
-__LINE__, 3.661588742065142e-01, "0.366159", "%g",
-__LINE__, 3.662296387211376e-25, "0.000000", "%f",
-__LINE__, 3.668511100303393e-29, "0.000000", "%7f",
-__LINE__, 3.669499303661920e+06, "3.6695e+06", "%1.5g",
-__LINE__, 3.676856420121343e-23, "3.6769e-23", "%0.4e",
-__LINE__, 3.677197473476901e-19, "+3.6772e-19", "%+g",
-__LINE__, 3.677281754506453e+12, "+3677281754506.452671", "%+f",
-__LINE__, 3.678420802401506e-19, "3.67842E-19", "%G",
-__LINE__, 3.679970245325769e+07, "3.67997e+07", "%g",
-__LINE__, 3.682528947621349e+05, "4.e+05", "%#5.e",
-__LINE__, 3.688257471304210e+22, "36882574713042104441740.320908", "%f",
-__LINE__, 3.689129734472166e-01, "0.368913", "%0.6G",
-__LINE__, 3.693483801463324e+12, "4E+12", "%3.E",
-__LINE__, 3.694612396584729e-21, "+3.69461E-21", "%+G",
-__LINE__, 3.706150073392112e-19, "0.000000", "%2f",
-__LINE__, 3.706824819530577e+21, "3706824819530576853310.321894", "%f",
-__LINE__, 3.709583789659276e+19, "+3.709584E+19", "%+#E",
-__LINE__, 3.711137503697284e+22, "3.7111E+22", "%.5G",
-__LINE__, 3.717307412969522e-22, "3.717307E-22", "%#E",
-__LINE__, 3.717434999853808e+24, " 4E+24", "%6.G",
-__LINE__, 3.720761662524312e+14, "+372076166252431.2285", "%+1.4f",
-__LINE__, 3.721613815237707e-10, "3.72161e-10", "%g",
-__LINE__, 3.725086467464346e+14, "3.72509E+14", "%G",
-__LINE__, 3.727427083626536e-15, "+4E-15", "%+.0G",
-__LINE__, 3.731138322599465e-13, "3.73114e-13", "%5g",
-__LINE__, 3.732248129614146e-04, " 4E-04", "%7.E",
-__LINE__, 3.744422223926118e-24, "3.744422E-24", "%E",
-__LINE__, 3.745595428897916e+21, "+3745595428897916079336.027906", "%+f",
-__LINE__, 3.751308304055989e-08, "+3.751308e-08", "%+e",
-__LINE__, 3.755395417696132e-02, "0.037554", "%f",
-__LINE__, 3.769103881505159e+09, "3.7691e+09", "%g",
-__LINE__, 3.769535572757430e+00, "3.769536", "%6.7G",
-__LINE__, 3.770823872348274e-28, "+0.000000", "%+f",
-__LINE__, 3.771160653578178e+29, "3.77116e+29", "%g",
-__LINE__, 3.776563752716444e-12, "4E-12", "%.0E",
-__LINE__, 3.777953798674786e-28, "3.77795e-28", "%g",
-__LINE__, 3.785994690686598e+28, "4E+28", "%5.G",
-__LINE__, 3.787487488835162e+01, "+37.874875", "%+5f",
-__LINE__, 3.788249311173359e-18, "3.788249E-18", "%E",
-__LINE__, 3.798728360791314e-08, "3.798728E-08", "%2E",
-__LINE__, 3.799038238867092e+05, "3.79904E+05", "%.5E",
-__LINE__, 3.799822564549600e+06, "3.79982E+06", "%.5E",
-__LINE__, 3.804862840499834e-16, "0", "%1.f",
-__LINE__, 3.805375156822481e+12, "3805375156822.4814861", "%.7f",
-__LINE__, 3.821612790153376e-17, "3.821613e-17", "%e",
-__LINE__, 3.825193659558693e+14, "3.82519E+14", "%#G",
-__LINE__, 3.834180638680996e+17, "+383418063868099565.638659", "%+f",
-__LINE__, 3.834759760605814e-12, "3.83476E-12", "%G",
-__LINE__, 3.839786235582770e+16, "+3.84e+16", "%+0.3g",
-__LINE__, 3.843164462248778e+28, "3.84316e+28", "%#g",
-__LINE__, 3.845599697858050e+22, "3.8456E+22", "%G",
-__LINE__, 3.850147271017228e-21, "3.85e-21", "%.4g",
-__LINE__, 3.850283557812101e+07, "3.85028E+07", "%G",
-__LINE__, 3.854235609725703e+03, "3854.24", "%G",
-__LINE__, 3.864901885489405e-15, "3.8649E-15", "%G",
-__LINE__, 3.868630187629983e-24, "3.868630e-24", "%e",
-__LINE__, 3.876764606134972e-03, "+3.8767646e-03", "%+#0.7e",
-__LINE__, 3.884553592855422e+08, "+3.8845536e+08", "%+4.7e",
-__LINE__, 3.887417494351062e+03, "3887.42", "%0g",
-__LINE__, 3.887561018972304e+03, "3887.56", "%G",
-__LINE__, 3.888554801724658e-24, "3.888555e-24", "%e",
-__LINE__, 3.892806891909861e-01, "0.389281", "%f",
-__LINE__, 3.914459791345755e+15, "+3.914460E+15", "%+E",
-__LINE__, 3.918383209642759e+01, "39.1838", "%#G",
-__LINE__, 3.923970658741865e-10, "3.92397E-10", "%G",
-__LINE__, 3.928163650272335e+18, "3928163650272335161.162118", "%f",
-__LINE__, 3.933053127721002e-20, "3.933053e-20", "%e",
-__LINE__, 3.939306552155218e-29, "3.93931E-29", "%G",
-__LINE__, 3.953007066379472e+07, "3.953007E+07", "%E",
-__LINE__, 3.954924824986267e-01, "3.954925E-01", "%E",
-__LINE__, 3.956156072067987e+15, "3.956E+15", "%0.4G",
-__LINE__, 3.957756196797224e+22, "4.0E+22", "%4.1E",
-__LINE__, 3.960011413261009e+27, "+3960011413261008783592842519.283295", "%+f",
-__LINE__, 3.961789076323378e+20, "396178907632337828914.614875", "%f",
-__LINE__, 3.961985468081708e-28, "3.96199E-28", "%1G",
-__LINE__, 3.975007582283812e-27, "0.000000", "%0.6f",
-__LINE__, 3.987586813142132e+15, "+3.98759e+15", "%+g",
-__LINE__, 3.992250836957379e+21, "3.99225E+21", "%0G",
-__LINE__, 3.992985048620057e+00, "3.9930", "%.4f",
-__LINE__, 4.000000000000000e+02, "400.00", "%.2f",
-__LINE__, 4.000145414240556e+14, "4.00015e+14", "%#6g",
-__LINE__, 4.000774453529974e-25, "4E-25", "%.0E",
-__LINE__, 4.002041494804383e+17, "4.002041E+17", "%E",
-__LINE__, 4.005505415013214e+17, " 4E+17", "%6.2G",
-__LINE__, 4.008960306876491e-28, "0.000", "%.3f",
-__LINE__, 4.032337828117640e+16, "4.03234E+16", "%G",
-__LINE__, 4.035414597530057e+26, "403541459753005682387083652.429283", "%f",
-__LINE__, 4.037065874793069e-01, "0.403707", "%f",
-__LINE__, 4.047856284449970e-14, "4.04786E-14", "%#G",
-__LINE__, 4.049037221323070e-04, "4.049037e-04", "%e",
-__LINE__, 4.053458853142009e-07, "4E-07", "%2.0E",
-__LINE__, 4.056455443275955e-22, "4.056455e-22", "%e",
-__LINE__, 4.058158020771355e-22, "4.05816e-22", "%#2g",
-__LINE__, 4.067283508945137e+02, "+4.07e+02", "%+5.2e",
-__LINE__, 4.072155715199509e+11, "4.072e+11", "%.4g",
-__LINE__, 4.074643403755990e-22, "4e-22", "%0.g",
-__LINE__, 4.077450352325251e+08, "4.1e+08", "%3.2g",
-__LINE__, 4.081492619284916e-08, "4.081493E-08", "%E",
-__LINE__, 4.083271801996951e-10, "4.083272E-10", "%#E",
-__LINE__, 4.090188547940879e-15, "4.090189E-15", "%#E",
-__LINE__, 4.091167728938537e-11, "4e-11", "%1.g",
-__LINE__, 4.091916745541154e+15, "4091916745541153.588306", "%f",
-__LINE__, 4.092366122921161e+23, "4E+23", "%0.E",
-__LINE__, 4.094638368212577e-11, "4.09464E-11", "%#G",
-__LINE__, 4.097148443124199e-16, "0.000000", "%f",
-__LINE__, 4.101057893946401e+06, "4e+06", "%4.g",
-__LINE__, 4.101209521231476e+28, "41012095212314756409455185348.633677", "%f",
-__LINE__, 4.105683659045903e+05, "+4.E+05", "%+#1.G",
-__LINE__, 4.111553717385758e-16, "4.11155e-16", "%g",
-__LINE__, 4.112186409918593e+14, "+4.11219e+14", "%+g",
-__LINE__, 4.117782144860865e+25, "4.117782E+25", "%5E",
-__LINE__, 4.119420921722146e-27, "4.11942e-27", "%g",
-__LINE__, 4.134953783635018e+14, "+4.1349538e+14", "%+.7e",
-__LINE__, 4.136990822648468e+11, "4.136991E+11", "%E",
-__LINE__, 4.140475788523046e+14, "+4E+14", "%+5.G",
-__LINE__, 4.149589679915584e+24, "4.14959E+24", "%2G",
-__LINE__, 4.151240342256744e-22, " 0", "%2.f",
-__LINE__, 4.155533104307272e-04, "+0.000416", "%+f",
-__LINE__, 4.155890511880097e+25, "4.155891e+25", "%e",
-__LINE__, 4.159907901074450e-19, "4.159908E-19", "%7E",
-__LINE__, 4.171899783464252e+18, "4E+18", "%.0E",
-__LINE__, 4.177920266276382e-17, "+0.0000", "%+1.4f",
-__LINE__, 4.181728014477237e-20, "4.18173e-20", "%.6g",
-__LINE__, 4.203600495086497e-30, " 4E-30", "%6.G",
-__LINE__, 4.211166112605717e-08, "4E-08", "%5.1G",
-__LINE__, 4.219513437404614e+18, "+4E+18", "%+.0E",
-__LINE__, 4.221426315236785e+08, "4.221426E+08", "%#E",
-__LINE__, 4.226224756005934e-13, " 4.e-13", "%#7.g",
-__LINE__, 4.226979046489921e-01, "4.226979e-01", "%#.6e",
-__LINE__, 4.236283521629158e-08, "+4.23628E-08", "%+G",
-__LINE__, 4.239850628514233e-07, "4.23985E-07", "%.6G",
-__LINE__, 4.241177358638621e+04, "42411.773586", "%2f",
-__LINE__, 4.245306724398964e-13, "0.000000", "%#f",
-__LINE__, 4.246194290300334e+16, "42461942903003340.177293", "%2f",
-__LINE__, 4.251238996137952e-05, "4.25124E-05", "%3G",
-__LINE__, 4.262432542017438e+13, "42624325420174.375978", "%1f",
-__LINE__, 4.266383084300715e+16, "4E+16", "%4.G",
-__LINE__, 4.292963398931474e-11, "4.292963E-11", "%E",
-__LINE__, 4.296530271399131e-29, "0.000000", "%6f",
-__LINE__, 4.303753949741171e+19, "4.30375E+19", "%2G",
-__LINE__, 4.303767633827431e-28, "4.30377e-28", "%g",
-__LINE__, 4.316181911403991e-30, "4.3162e-30", "%#7.5g",
-__LINE__, 4.318654697213126e-18, "4.31865e-18", "%g",
-__LINE__, 4.320618603119499e+05, "432061.860312", "%3f",
-__LINE__, 4.322443609118441e+21, "4.32244E+21", "%7.5E",
-__LINE__, 4.322522446810708e-15, "4.32252e-15", "%.6g",
-__LINE__, 4.334728493589115e-18, "0.000000", "%f",
-__LINE__, 4.335342531476346e-19, "4.33534E-19", "%G",
-__LINE__, 4.340579325084176e-30, "4.34058e-30", "%#0.6g",
-__LINE__, 4.340775659883185e+04, "43407.756599", "%6f",
-__LINE__, 4.361131891528634e-14, " 4E-14", "%6.G",
-__LINE__, 4.366662624371249e-02, "+0.04", "%+4.g",
-__LINE__, 4.369919308458348e+28, "+4.36992e+28", "%+2g",
-__LINE__, 4.369930393192433e-24, "4.369930e-24", "%e",
-__LINE__, 4.376283118322521e-01, "0.437628", "%g",
-__LINE__, 4.386868840825930e+19, "4.3869E+19", "%.5G",
-__LINE__, 4.389349113395235e+05, "+4.389349e+05", "%+e",
-__LINE__, 4.392447466753053e-08, "+4.392E-08", "%+.4G",
-__LINE__, 4.394068619246889e-13, "4.39407e-13", "%6g",
-__LINE__, 4.404889573700147e-09, "4.404890E-09", "%E",
-__LINE__, 4.410531039373014e+05, "+4.41e+05", "%+.2e",
-__LINE__, 4.412466606726400e-08, " 0.0", "%6.1f",
-__LINE__, 4.414693719279123e+17, "4.414694e+17", "%e",
-__LINE__, 4.417050329080679e-01, "+0.441705", "%+g",
-__LINE__, 4.419509841929196e-10, "4.4195098E-10", "%.7E",
-__LINE__, 4.421012777695611e+07, "+4.42101E+07", "%+0.6G",
-__LINE__, 4.426387732151208e+11, "4.42639e+11", "%g",
-__LINE__, 4.439567017550398e+26, "4.439567E+26", "%E",
-__LINE__, 4.446479816166258e-21, "4.446480e-21", "%0e",
-__LINE__, 4.453486178424380e+05, "445348.617842", "%f",
-__LINE__, 4.455733696043438e+06, "4.45573e+06", "%3g",
-__LINE__, 4.455870606312063e+16, "4.45587e+16", "%g",
-__LINE__, 4.458776435431700e+22, "4e+22", "%1.g",
-__LINE__, 4.466448605584151e-30, "0.000000", "%f",
-__LINE__, 4.471063097005706e+16, "4.47106E+16", "%G",
-__LINE__, 4.482001890035190e-22, "+4.482E-22", "%+G",
-__LINE__, 4.493246870093631e+05, "449325", "%1G",
-__LINE__, 4.496089639281023e+17, "4.49609e+17", "%g",
-__LINE__, 4.515066070117557e+15, "4.51507e+15", "%g",
-__LINE__, 4.518296460916194e+24, "+4.5183E+24", "%+G",
-__LINE__, 4.526548719445596e+02, "452.655", "%6.3f",
-__LINE__, 4.532756455106440e-26, "4.53e-26", "%4.2e",
-__LINE__, 4.534466782633055e-14, "4.53447E-14", "%G",
-__LINE__, 4.541313061854649e-14, "4.54131E-14", "%G",
-__LINE__, 4.541848265404338e+02, " 5E+02", "%7.G",
-__LINE__, 4.546603085406363e-26, "5E-26", "%3.G",
-__LINE__, 4.557349604829375e+28, "+45573496048293753446500886639.", "%+#1.f",
-__LINE__, 4.560736449944898e-27, "4.56074e-27", "%g",
-__LINE__, 4.563726230559341e-15, "+0.0", "%+2.1f",
-__LINE__, 4.572650965532532e-26, "+5E-26", "%+4.G",
-__LINE__, 4.574369572115099e-10, "+0.000000", "%+2.6f",
-__LINE__, 4.576480601519729e+28, "+4.576481e+28", "%+e",
-__LINE__, 4.587487640650499e+02, "+458.75", "%+3.2f",
-__LINE__, 4.598365231538559e-27, "4.59837E-27", "%G",
-__LINE__, 4.599348244725009e-28, "+4.5993482e-28", "%+#3.7e",
-__LINE__, 4.599897524047587e+22, "45998975240475870052136.997401", "%#f",
-__LINE__, 4.605415604725077e-25, "0.000000", "%f",
-__LINE__, 4.613055015797716e+28, "4.613055E+28", "%E",
-__LINE__, 4.618715275814238e-10, "4.618715E-10", "%E",
-__LINE__, 4.619044579489540e-14, "0.00", "%.2f",
-__LINE__, 4.633693310095410e-20, "+0.000000", "%+f",
-__LINE__, 4.648505395281916e-28, "0.000000", "%f",
-__LINE__, 4.651232770446398e+21, "4.65e+21", "%.2e",
-__LINE__, 4.659743589975352e+28, "+4.65974e+28", "%+g",
-__LINE__, 4.660181457075208e-13, "4.66018e-13", "%g",
-__LINE__, 4.669787018529686e+20, "4.66979e+20", "%g",
-__LINE__, 4.672649286126732e-21, "4.6726E-21", "%4.5G",
-__LINE__, 4.675431901120643e-11, " 0", "%3.f",
-__LINE__, 4.684404068169945e+26, "468440406816994503458317922.2", "%6.1f",
-__LINE__, 4.685438834234642e+19, "5.E+19", "%#6.G",
-__LINE__, 4.688915890732712e+00, "+5e+00", "%+2.e",
-__LINE__, 4.692999432046297e+00, "4.692999E+00", "%E",
-__LINE__, 4.708690772584701e+11, "4.70869e+11", "%g",
-__LINE__, 4.711821455782105e-11, "+4.71182e-11", "%+1g",
-__LINE__, 4.712413965116830e-01, "4.712414E-01", "%E",
-__LINE__, 4.719504715401049e-08, "0.000000", "%f",
-__LINE__, 4.719767896031655e+27, "4.71977e+27", "%#g",
-__LINE__, 4.722493017411588e-05, "0.000047", "%4f",
-__LINE__, 4.729482386761477e+08, "4.72948e+08", "%1g",
-__LINE__, 4.730102169800602e-06, "0.000005", "%f",
-__LINE__, 4.743951614209393e+24, "4.743952E+24", "%#E",
-__LINE__, 4.746077075605921e-16, "4.746E-16", "%.3E",
-__LINE__, 4.747802537919248e+24, "4747802537919247889419694", "%4.f",
-__LINE__, 4.754727690703025e-26, "0", "%0.f",
-__LINE__, 4.756952432926979e-29, " 0.", "%#3.f",
-__LINE__, 4.758335147956709e+03, "4758.335148", "%f",
-__LINE__, 4.760141880810268e-25, "4.760142e-25", "%e",
-__LINE__, 4.767079423650815e-07, "5.E-07", "%#0.G",
-__LINE__, 4.785662728343338e-28, "4.78566e-28", "%g",
-__LINE__, 4.787146245774150e-13, "+4.78715E-13", "%+G",
-__LINE__, 4.787415449888824e-17, "4.78742e-17", "%3g",
-__LINE__, 4.794589807429657e-05, "4.79459E-05", "%6G",
-__LINE__, 4.794948299666205e+08, "4.79495e+08", "%g",
-__LINE__, 4.802292865915992e-04, "4.802293e-04", "%e",
-__LINE__, 4.802513688198601e+07, "+4.8e+07", "%+2.3g",
-__LINE__, 4.810456746192536e+06, "5E+06", "%0.0G",
-__LINE__, 4.820631660081696e+20, "+4.82063E+20", "%+G",
-__LINE__, 4.827865857270075e-20, "4.82787e-20", "%g",
-__LINE__, 4.835054268490970e+21, "4835054268490970308391.752042", "%#f",
-__LINE__, 4.838136770808465e-18, "4.83814E-18", "%G",
-__LINE__, 4.839342397882353e-26, "4.839342E-26", "%E",
-__LINE__, 4.845130210072029e-16, "0", "%1.f",
-__LINE__, 4.845161043167169e-12, "+4.845e-12", "%+.4g",
-__LINE__, 4.857425142494964e+01, "48.574251", "%f",
-__LINE__, 4.858118337285513e-10, "+4.8581e-10", "%+.5g",
-__LINE__, 4.867478343525339e-15, "+4.867478E-15", "%+E",
-__LINE__, 4.886137001331278e-11, "0.000000", "%f",
-__LINE__, 4.886835850687998e-20, " 0", "%6.0f",
-__LINE__, 4.886880737482383e+26, "488688073748238327453918827.814050", "%4f",
-__LINE__, 4.888812049144075e-22, "4.888812E-22", "%E",
-__LINE__, 4.895869618002905e+02, "+489.587", "%+.7g",
-__LINE__, 4.902046593298549e+09, " 5e+09", "%7.g",
-__LINE__, 4.907918627564751e-05, "4.91e-05", "%.3g",
-__LINE__, 4.916048355579009e+19, "49160483555790088772", "%2.f",
-__LINE__, 4.917197806128638e+14, "+5e+14", "%+5.g",
-__LINE__, 4.918303274189911e+13, "4.918303e+13", "%e",
-__LINE__, 4.922687970321108e+26, "492268797032110771993984599.2485", "%0.4f",
-__LINE__, 4.929263362431195e+14, "4.92926e+14", "%g",
-__LINE__, 4.933385398543267e-17, "0.000000", "%#f",
-__LINE__, 4.942367126455025e+00, " +5", "%+6.f",
-__LINE__, 4.947687486717652e-04, "0.000495", "%.6f",
-__LINE__, 4.960855200003128e-08, "+4.960855e-08", "%+e",
-__LINE__, 4.968485435774085e-21, "0.0000", "%#2.4f",
-__LINE__, 4.972088381506133e+01, "49.7", "%.1f",
-__LINE__, 4.977561524480392e-15, "4.977562E-15", "%7E",
-__LINE__, 4.984592111249502e-13, "5.0e-13", "%.1e",
-__LINE__, 4.997502335602838e-14, "4.998e-14", "%6.4g",
-__LINE__, 5.001731554335935e-09, "5.00173e-09", "%g",
-__LINE__, 5.006231697107042e-17, "5.0062e-17", "%1.5g",
-__LINE__, 5.008035801093423e+24, "5.008036E+24", "%#E",
-__LINE__, 5.008756965733827e-28, "5.009E-28", "%.4G",
-__LINE__, 5.009774027622812e+20, "+5.00977E+20", "%+G",
-__LINE__, 5.010576312346293e+29, "5.01058E+29", "%G",
-__LINE__, 5.012335250996786e+29, "5.012335e+29", "%.7g",
-__LINE__, 5.012404365186907e+20, "5E+20", "%3.2G",
-__LINE__, 5.024670103250229e-01, "+5.024670E-01", "%+E",
-__LINE__, 5.025765369164560e+03, "5025.77", "%g",
-__LINE__, 5.027173841003918e+11, "+5.02717E+11", "%+G",
-__LINE__, 5.032093817639893e-26, "5e-26", "%3.e",
-__LINE__, 5.039636818525848e-02, "0.050396", "%#f",
-__LINE__, 5.040626671307691e+23, "5.040627E+23", "%E",
-__LINE__, 5.040788233368296e-11, "+5.04079e-11", "%+g",
-__LINE__, 5.040903321336150e-28, "5.0409E-28", "%G",
-__LINE__, 5.042078512958994e+12, "5.04208E+12", "%G",
-__LINE__, 5.045957900223303e+15, "5045957900223303", "%0.f",
-__LINE__, 5.048298764352134e-14, "5.048299e-14", "%1e",
-__LINE__, 5.048827326763192e+28, "50488273267631917917697137454.524636", "%f",
-__LINE__, 5.049714558347361e-23, "5e-23", "%5.0g",
-__LINE__, 5.051509904923853e+16, "50515099049238534", "%5.f",
-__LINE__, 5.052789863743305e-10, "5.05279E-10", "%6G",
-__LINE__, 5.057429728861999e-29, "0.000", "%#1.3f",
-__LINE__, 5.075313093968501e-13, "+5.07531e-13", "%+g",
-__LINE__, 5.075874503501582e+29, "5e+29", "%2.e",
-__LINE__, 5.079468079020803e+01, "50.795", "%.5G",
-__LINE__, 5.086214826494080e-28, " 0.0", "%4.1f",
-__LINE__, 5.096054881114421e+13, "5.096e+13", "%.4g",
-__LINE__, 5.099045274853458e-23, "5.09905E-23", "%0G",
-__LINE__, 5.100248195124433e+00, "5.100248", "%f",
-__LINE__, 5.101016114276598e-20, "5e-20", "%4.1g",
-__LINE__, 5.103213528670269e+07, "51032135.286703", "%6f",
-__LINE__, 5.108373625126768e+08, "+510837362.512677", "%+f",
-__LINE__, 5.113097157183416e+07, "5.1131E+07", "%#.4E",
-__LINE__, 5.114452611789777e+08, "+5.11445E+08", "%+G",
-__LINE__, 5.117099184715288e-16, "5.1171E-16", "%G",
-__LINE__, 5.119910534665511e-13, "+5.11991E-13", "%+G",
-__LINE__, 5.121320931953720e+23, "+5.121321e+23", "%+#e",
-__LINE__, 5.121900318443998e+06, "5.121900e+06", "%e",
-__LINE__, 5.135698679084286e+00, "5.1357", "%2g",
-__LINE__, 5.146355903104154e-10, "+5.14636E-10", "%+.6G",
-__LINE__, 5.148754210958986e-24, "+5.148754e-24", "%+e",
-__LINE__, 5.156238368448428e+26, "5e+26", "%5.g",
-__LINE__, 5.159924520667922e-19, "+5E-19", "%+0.1G",
-__LINE__, 5.159938266135425e-27, "0.000000", "%f",
-__LINE__, 5.165915205175676e-01, "5.165915e-01", "%e",
-__LINE__, 5.190205499401547e-11, "5e-11", "%2.1g",
-__LINE__, 5.193260005542003e+26, "5.19326e+26", "%#g",
-__LINE__, 5.194732077318269e+08, "519473207.731827", "%f",
-__LINE__, 5.196394616633798e-19, "0", "%.0f",
-__LINE__, 5.206753628035638e+19, "5.20675e+19", "%6.6g",
-__LINE__, 5.207364136540851e-23, " 0.000", "%6.3f",
-__LINE__, 5.210672737132108e-09, "5.21067E-09", "%G",
-__LINE__, 5.211423933057123e-20, "+5.21142E-20", "%+G",
-__LINE__, 5.219749528363367e-27, "5.219750e-27", "%e",
-__LINE__, 5.228031587478653e-06, "+5.2E-06", "%+3.1E",
-__LINE__, 5.229303095005359e-25, "+0.000000", "%+#f",
-__LINE__, 5.234703511938320e-06, " 0", "%7.f",
-__LINE__, 5.235655046937822e-20, "5.235655E-20", "%.6E",
-__LINE__, 5.237924986002288e-01, "+0.52379", "%+.5f",
-__LINE__, 5.249148093603826e+20, "5.24915E+20", "%0G",
-__LINE__, 5.262680920244596e+16, "5.26268E+16", "%G",
-__LINE__, 5.267944704715845e-06, "5.e-06", "%#3.g",
-__LINE__, 5.268543533730505e-08, "5.26854E-08", "%G",
-__LINE__, 5.275727269515247e-02, "0.0527573", "%.6g",
-__LINE__, 5.279215316873723e+24, "5279215316873722585455652.733799", "%f",
-__LINE__, 5.284326985680811e+16, "52843269856808108.286828", "%6f",
-__LINE__, 5.286192957344040e-10, "5.3E-10", "%.1E",
-__LINE__, 5.289451976001091e-23, "5.28945E-23", "%G",
-__LINE__, 5.289512908209300e+09, "+5.289513e+09", "%+e",
-__LINE__, 5.295696957972123e+11, "5.296E+11", "%#.3E",
-__LINE__, 5.303584684011050e+16, "53035846840110503.208621", "%f",
-__LINE__, 5.310315581980172e+23, "531031558198017172855998", "%4.f",
-__LINE__, 5.317492728410062e-14, "5.31749e-14", "%7g",
-__LINE__, 5.324506949499409e+18, "5.3245E+18", "%.5G",
-__LINE__, 5.329238068668336e-20, "5e-20", "%4.g",
-__LINE__, 5.336050125161774e+14, "5.33605e+14", "%g",
-__LINE__, 5.349921315003169e-17, "5.34992E-17", "%.6G",
-__LINE__, 5.355648481782587e-20, "5.355648e-20", "%e",
-__LINE__, 5.358945557589489e-26, "+5e-26", "%+0.g",
-__LINE__, 5.359638846465574e+21, "5.359639E+21", "%E",
-__LINE__, 5.377048469393900e+14, "5.377E+14", "%.5G",
-__LINE__, 5.387471194156434e+23, "5.387471E+23", "%.7G",
-__LINE__, 5.401622578962497e-03, "+0.0054", "%+5.2g",
-__LINE__, 5.406882732497444e-16, "5.406883E-16", "%E",
-__LINE__, 5.421474560523198e-11, "+5.42147e-11", "%+g",
-__LINE__, 5.440249323479418e-26, "5.44025E-26", "%7G",
-__LINE__, 5.440922682921101e-05, "5e-05", "%.1g",
-__LINE__, 5.444400103673185e-01, "0.54444", "%G",
-__LINE__, 5.449339470916152e+09, "5449339470.9162", "%.4f",
-__LINE__, 5.451583259558706e-15, "5.e-15", "%#4.e",
-__LINE__, 5.460153018660573e+26, "+546015301866057267687892817.775719", "%+f",
-__LINE__, 5.477591210511918e+08, "+5.47759E+08", "%+0.5E",
-__LINE__, 5.481665401407188e-02, "5.481665e-02", "%e",
-__LINE__, 5.482670784411319e-16, "5E-16", "%4.G",
-__LINE__, 5.487494580636099e+12, "5.48749e+12", "%g",
-__LINE__, 5.508630369473937e-10, "5.508630e-10", "%e",
-__LINE__, 5.528898001438273e+20, "6e+20", "%4.g",
-__LINE__, 5.530331734443152e-24, " 6e-24", "%6.g",
-__LINE__, 5.531704398969656e-24, "0.000000", "%f",
-__LINE__, 5.539906569043238e+05, "+553990.656904", "%+f",
-__LINE__, 5.554571854756323e-08, "+0.00000", "%+4.5f",
-__LINE__, 5.555155069925145e-28, "5.55516e-28", "%g",
-__LINE__, 5.555302705075539e-08, "+5.5553e-08", "%+g",
-__LINE__, 5.563805076159055e-05, "5.563805e-05", "%e",
-__LINE__, 5.565063508995002e+07, "5.565E+07", "%.3E",
-__LINE__, 5.566281664807526e-08, "5.56628E-08", "%G",
-__LINE__, 5.575245679736338e-08, "5.575246e-08", "%e",
-__LINE__, 5.578254777281501e-21, "0.", "%#.0f",
-__LINE__, 5.582389275770848e-01, " 0.6", "%5.G",
-__LINE__, 5.592215029176133e-04, "0.00056", "%.2g",
-__LINE__, 5.593536789867047e-25, "5.59354e-25", "%g",
-__LINE__, 5.605652054074862e-03, " 0.006", "%8.G",
-__LINE__, 5.606982382643258e+20, "+5.60698E+20", "%+G",
-__LINE__, 5.614646821116853e-18, "5.6E-18", "%.2G",
-__LINE__, 5.625586848606565e-11, "+5.62559E-11", "%+G",
-__LINE__, 5.626300428046732e+26, " 6e+26", "%7.g",
-__LINE__, 5.638236626881086e-17, " 6E-17", "%6.G",
-__LINE__, 5.645744817075691e+04, "5.645745E+04", "%E",
-__LINE__, 5.651410004691736e+06, "6.E+06", "%#3.E",
-__LINE__, 5.659582345929256e-11, "+0.000000", "%+f",
-__LINE__, 5.670968861413510e+16, "+5.67097E+16", "%+G",
-__LINE__, 5.672476851235796e+01, "+56.724769", "%+0f",
-__LINE__, 5.674563779921248e+28, " 6E+28", "%6.0G",
-__LINE__, 5.675558529939025e+19, "5.67556e+19", "%3g",
-__LINE__, 5.676326888314589e-08, " 6e-08", "%7.g",
-__LINE__, 5.677928507840897e-30, "5.67793e-30", "%0g",
-__LINE__, 5.686622552402630e-15, "5.69E-15", "%1.3G",
-__LINE__, 5.710441686922142e-14, "5.710442E-14", "%E",
-__LINE__, 5.713234603280163e-21, "0.00000", "%0.5f",
-__LINE__, 5.714968959046963e+12, "5.71497e+12", "%g",
-__LINE__, 5.722025141555638e-23, "5.72e-23", "%.2e",
-__LINE__, 5.725398571007033e-09, "5.7254E-09", "%.6G",
-__LINE__, 5.751604813862738e+18, "6E+18", "%.1G",
-__LINE__, 5.761025444751985e+20, "5.76103e+20", "%g",
-__LINE__, 5.762315767948593e+15, "5.76232e+15", "%4g",
-__LINE__, 5.764528858586032e-15, "5.764529E-15", "%6.7G",
-__LINE__, 5.766408541535810e-07, " 6E-07", "%6.1G",
-__LINE__, 5.771831571087174e-01, "0.577183", "%f",
-__LINE__, 5.790102497364865e-15, "+5.790102e-15", "%+e",
-__LINE__, 5.790222335547785e-08, "5.79022e-08", "%0.6g",
-__LINE__, 5.794082127091130e+21, "5794082127091130018925.468903", "%f",
-__LINE__, 5.804568463644165e+28, "5.80457e+28", "%g",
-__LINE__, 5.827356651901066e+20, "582735665190106555400.006982", "%f",
-__LINE__, 5.837553387436408e+18, "5.837553E+18", "%3E",
-__LINE__, 5.844458110907209e+22, "5.84446e+22", "%g",
-__LINE__, 5.851672125746866e-19, "5.85167e-19", "%g",
-__LINE__, 5.868843476784172e-12, "5.868843e-12", "%1.7g",
-__LINE__, 5.870854146748864e-04, "0.000587", "%2.3g",
-__LINE__, 5.877787821470433e+01, "+58.77788", "%+#3.5f",
-__LINE__, 5.881333514866498e+04, "5.881334E+04", "%E",
-__LINE__, 5.908427816128965e+28, "+5.908428E+28", "%+E",
-__LINE__, 5.918139800007388e+07, "59181398.000074", "%f",
-__LINE__, 5.925587467475260e+21, "5925587467475259551008.548442", "%f",
-__LINE__, 5.930403502679683e-22, "5.9304E-22", "%.6G",
-__LINE__, 5.961572644847521e+02, "+596.157", "%+G",
-__LINE__, 5.968917715225198e-21, "5.96892e-21", "%4g",
-__LINE__, 5.982184454670110e-08, "0", "%0.f",
-__LINE__, 5.988414319040855e+09, "6E+09", "%0.G",
-__LINE__, 5.996263783103995e-10, "5.996264e-10", "%e",
-__LINE__, 6.004634162276014e-18, "6.00463e-18", "%g",
-__LINE__, 6.018734975519166e-08, "6.01873E-08", "%G",
-__LINE__, 6.029071822986717e-14, "0.0000000", "%.7f",
-__LINE__, 6.030392278117406e+23, "6.030392e+23", "%e",
-__LINE__, 6.034553399237175e-27, "+6.03455e-27", "%+g",
-__LINE__, 6.034938873443862e+24, "6034938873443861595546877.651941", "%f",
-__LINE__, 6.038929148003457e-16, "6.03893e-16", "%g",
-__LINE__, 6.039149626573702e-13, "6.0391E-13", "%3.5G",
-__LINE__, 6.041247664739301e+29, "6.041248E+29", "%3E",
-__LINE__, 6.044220746789781e+20, "+6.04422e+20", "%+g",
-__LINE__, 6.045775647107433e+19, "6E+19", "%2.G",
-__LINE__, 6.051917010461611e-05, "6.05192E-05", "%G",
-__LINE__, 6.059773181566425e+17, "+605977318156642486", "%+5.f",
-__LINE__, 6.082239575475813e+01, "+6E+01", "%+.1G",
-__LINE__, 6.093984174629151e+18, "6.093984e+18", "%e",
-__LINE__, 6.102368380479137e+22, "6.1E+22", "%.2G",
-__LINE__, 6.103097446204007e+25, "61030974462040070704915706.301108", "%#0f",
-__LINE__, 6.105244994410556e-24, "0.0000000", "%2.7f",
-__LINE__, 6.110828906801633e-14, "+6.110829e-14", "%+3e",
-__LINE__, 6.124439072468681e-30, "6.12444e-30", "%g",
-__LINE__, 6.127714703273447e-15, "0", "%0.f",
-__LINE__, 6.128539582408870e-15, "6.12854e-15", "%g",
-__LINE__, 6.145470264744349e+24, "6145470264744348654062378.045637", "%f",
-__LINE__, 6.159177701667455e+26, "615917770166745537352426254.074089", "%#f",
-__LINE__, 6.159348213337442e+17, "6.15935e+17", "%g",
-__LINE__, 6.161953891020492e-21, "0.000000", "%f",
-__LINE__, 6.169474192777305e+29, "+6.169E+29", "%+.4G",
-__LINE__, 6.198519761010651e-15, "+0", "%+1.f",
-__LINE__, 6.201381824304919e-27, " 0", "%5.f",
-__LINE__, 6.204387065736372e-18, "6.204387E-18", "%7E",
-__LINE__, 6.209270088144063e-24, "0.000000", "%f",
-__LINE__, 6.209871738353546e-20, "6.20987E-20", "%G",
-__LINE__, 6.222733191871026e+14, "+6.22273e+14", "%+g",
-__LINE__, 6.234670085354310e+04, "+62346.700854", "%+f",
-__LINE__, 6.258389346602224e-09, "6E-09", "%.0G",
-__LINE__, 6.263326582587503e+12, "6263326582588.", "%#5.f",
-__LINE__, 6.272768026763922e+03, "+6272.77", "%+g",
-__LINE__, 6.287747868625765e+00, "6E+00", "%.0E",
-__LINE__, 6.297724027388795e-17, "+6E-17", "%+3.G",
-__LINE__, 6.309940679156400e+27, "6.30994e+27", "%6.5e",
-__LINE__, 6.312960327030170e+06, "+6.312960E+06", "%+E",
-__LINE__, 6.317658179632976e+02, "+631.766", "%+g",
-__LINE__, 6.321255960699571e-27, "0.000000", "%f",
-__LINE__, 6.323069932833900e+03, "6323", "%.4G",
-__LINE__, 6.337027835933034e+21, "6.33703e+21", "%#g",
-__LINE__, 6.343583177899838e-03, "0.00634358", "%7G",
-__LINE__, 6.347464241733904e-03, "6.e-03", "%#0.e",
-__LINE__, 6.352038720353924e+07, "63520387.203539", "%f",
-__LINE__, 6.355292378565109e+23, "+635529237856510942350496.407016", "%+f",
-__LINE__, 6.377901944439164e-29, "0.000", "%2.3f",
-__LINE__, 6.378660255554053e-04, "6.37866E-04", "%.5E",
-__LINE__, 6.382838195255167e-18, "0.000000", "%f",
-__LINE__, 6.391046303581911e+22, "6E+22", "%.0G",
-__LINE__, 6.404812348309621e+22, "6.404812E+22", "%.7G",
-__LINE__, 6.406154091357119e+16, "6.40615E+16", "%G",
-__LINE__, 6.419414726557980e+21, "+6.41941e+21", "%+g",
-__LINE__, 6.432166563008504e+10, " +6e+10", "%+7.g",
-__LINE__, 6.438463704193190e+19, "6.438464e+19", "%e",
-__LINE__, 6.445270237908565e+15, "+6.445270E+15", "%+E",
-__LINE__, 6.445536770502964e+09, "6.446e+09", "%.3e",
-__LINE__, 6.446614224811444e+28, "64466142248114444157636171439.662576", "%f",
-__LINE__, 6.457046289718297e+18, "6457046289718297416.015957", "%4f",
-__LINE__, 6.457682856890173e+01, "6.457683E+01", "%2E",
-__LINE__, 6.471026352792729e-16, "+6.47103e-16", "%+g",
-__LINE__, 6.474527749567342e+19, "6E+19", "%.1G",
-__LINE__, 6.481178401781131e-24, "+6.48E-24", "%+6.3G",
-__LINE__, 6.490736647261461e-15, "+6.49074e-15", "%+g",
-__LINE__, 6.493196535069719e+23, "+6.4932E+23", "%+G",
-__LINE__, 6.500296992935538e-20, "+0.0", "%+.1f",
-__LINE__, 6.502867735895890e-19, "+0.000000", "%+6f",
-__LINE__, 6.506627529164683e+14, "650662752916468", "%5.f",
-__LINE__, 6.511909298966434e-15, "+6.51191E-15", "%+G",
-__LINE__, 6.514463062693312e+01, "65.1446", "%G",
-__LINE__, 6.520721469484543e+16, "6.52072E+16", "%G",
-__LINE__, 6.528064508731680e-05, "6.528065E-05", "%7E",
-__LINE__, 6.529007214194039e-24, "0.000000", "%f",
-__LINE__, 6.537822760557410e-23, "0.000000", "%f",
-__LINE__, 6.552222096390805e+29, "+6.55222E+29", "%+G",
-__LINE__, 6.554569862717104e+12, "6.55457E+12", "%G",
-__LINE__, 6.563440840359989e-30, "7E-30", "%4.G",
-__LINE__, 6.586246985535526e+17, "6.58625E+17", "%#4G",
-__LINE__, 6.593339522442827e+16, "6.6E+16", "%#4.1E",
-__LINE__, 6.611179030024350e+02, "7E+02", "%4.E",
-__LINE__, 6.617541638586767e-10, "6.617542E-10", "%E",
-__LINE__, 6.619147920886991e-28, "7e-28", "%.1g",
-__LINE__, 6.622304444772819e-21, "6.62230E-21", "%#4G",
-__LINE__, 6.634766655157910e+12, "6634766655158", "%2.f",
-__LINE__, 6.635639771921218e+25, "+6.63564E+25", "%+G",
-__LINE__, 6.644575305929087e+17, "+6.64458e+17", "%+g",
-__LINE__, 6.648697591328432e+04, "6.648698E+04", "%3E",
-__LINE__, 6.665426012448100e+09, "6.66543E+09", "%G",
-__LINE__, 6.675222780441723e-23, "6.67522e-23", "%1g",
-__LINE__, 6.689765053880623e+00, "6.6898", "%.5g",
-__LINE__, 6.693874943680238e+25, "7.e+25", "%#1.g",
-__LINE__, 6.695033453546435e+19, "6.695033E+19", "%E",
-__LINE__, 6.720131534244976e+03, "+6720.132", "%+.3f",
-__LINE__, 6.725287004784564e+19, "+6.72529e+19", "%+g",
-__LINE__, 6.743599626906313e-18, "0.0000000", "%7.7f",
-__LINE__, 6.755534260704152e+29, "7.e+29", "%#5.e",
-__LINE__, 6.761855244766418e-18, "6.8E-18", "%.2G",
-__LINE__, 6.764974143681080e-02, "6.765E-02", "%2.3E",
-__LINE__, 6.766924477711975e-17, "0.000000", "%4f",
-__LINE__, 6.772195434106330e-19, "6.7722E-19", "%G",
-__LINE__, 6.779433073319225e-23, "0.00", "%.2f",
-__LINE__, 6.790317710068964e+05, "6.8e+05", "%.1e",
-__LINE__, 6.791378160292960e+02, "679.137816", "%f",
-__LINE__, 6.798381262104190e-27, "0.000000", "%f",
-__LINE__, 6.804165939424860e-14, "7e-14", "%4.g",
-__LINE__, 6.810668670623699e+11, "681066867062.369852", "%f",
-__LINE__, 6.838942637635821e-17, "+6.84e-17", "%+.2e",
-__LINE__, 6.868523988329111e-09, "+6.868524e-09", "%+e",
-__LINE__, 6.873228061403223e-15, "6.873228E-15", "%3E",
-__LINE__, 6.879370500093334e-12, "+0.000000", "%+f",
-__LINE__, 6.891525498686674e-10, "7e-10", "%0.g",
-__LINE__, 6.923027319286220e+21, "7.e+21", "%#1.g",
-__LINE__, 6.923565533024560e-11, "+6.92357e-11", "%+g",
-__LINE__, 6.931415640770737e-24, "+6.93142e-24", "%+g",
-__LINE__, 6.936582619246057e+09, "6.936583e+09", "%7e",
-__LINE__, 6.938661496670582e+05, "693866.1496671", "%2.7f",
-__LINE__, 6.946115378286550e-25, "0.000000", "%f",
-__LINE__, 6.955823211921219e-09, "6.95582e-09", "%g",
-__LINE__, 6.962365243425770e+29, "696236524342577034474288666388.019919", "%7f",
-__LINE__, 6.970432274812882e+05, "+7e+05", "%+1.0e",
-__LINE__, 6.975784942897122e-13, "6.975785e-13", "%e",
-__LINE__, 6.976786489904214e-07, "6.97679E-07", "%3G",
-__LINE__, 6.985245976357042e-05, "0.00", "%.2f",
-__LINE__, 6.993402879410720e-21, "6.9934e-21", "%g",
-__LINE__, 7.012183985341519e+28, "+70121839853415188770213717362", "%+2.f",
-__LINE__, 7.028670648856025e-15, "7.028671e-15", "%.7g",
-__LINE__, 7.034042985683665e-03, " 0", "%2.f",
-__LINE__, 7.044054273278726e+18, "7.044e+18", "%7.4g",
-__LINE__, 7.049706744250734e-06, "7E-06", "%0.E",
-__LINE__, 7.061982657056197e+13, "+7.061983e+13", "%+e",
-__LINE__, 7.066873668945899e+21, "7.06687E+21", "%G",
-__LINE__, 7.087941418633258e+26, "7.08794E+26", "%G",
-__LINE__, 7.108268134631547e+22, "7.108268E+22", "%E",
-__LINE__, 7.112095848565475e-19, "7.1121e-19", "%g",
-__LINE__, 7.116326241291862e+16, "7.116326e+16", "%e",
-__LINE__, 7.118854843597607e-22, "0.000000", "%f",
-__LINE__, 7.121423043456375e-27, "0.000000", "%f",
-__LINE__, 7.131415427096460e-03, "0.007131", "%3f",
-__LINE__, 7.132023279679892e+22, "7.e+22", "%#3.e",
-__LINE__, 7.146250280189992e-18, "0.000000", "%f",
-__LINE__, 7.150059058390724e+03, "7150.06", "%g",
-__LINE__, 7.161081578177381e-02, "+0.0716108", "%+G",
-__LINE__, 7.164935125149336e-27, "7.2E-27", "%#6.2G",
-__LINE__, 7.173125717489549e-10, "7.173126e-10", "%e",
-__LINE__, 7.174199549624193e+00, "7.1741995", "%.7f",
-__LINE__, 7.192493588077649e+27, "7.19249e+27", "%g",
-__LINE__, 7.215209568601445e-06, "7.215210e-06", "%e",
-__LINE__, 7.238322284100497e+03, "7238.3", "%.1f",
-__LINE__, 7.239203871123613e+06, "7239204", "%4.f",
-__LINE__, 7.245809072577019e-09, "+7.245809E-09", "%+E",
-__LINE__, 7.256275686433336e+03, "7.256276e+03", "%e",
-__LINE__, 7.265774291605193e+27, "+7.26577E+27", "%+G",
-__LINE__, 7.287968172227119e-21, "+7.287968e-21", "%+e",
-__LINE__, 7.306020169678527e+12, "7E+12", "%2.E",
-__LINE__, 7.315587463572568e-04, "0.", "%#.0f",
-__LINE__, 7.324627764547963e+09, "7.324628E+09", "%#E",
-__LINE__, 7.331904966719081e-06, "+7.3319E-06", "%+G",
-__LINE__, 7.334448152798243e-02, "0.07", "%0.g",
-__LINE__, 7.334487195961240e-01, "+0.733449", "%+#g",
-__LINE__, 7.381283575515707e+13, "7.381284E+13", "%E",
-__LINE__, 7.394854567245476e-11, "0.000000", "%7f",
-__LINE__, 7.401950211415377e-08, " 7e-08", "%6.e",
-__LINE__, 7.409023867864680e+03, "7409.023868", "%#3f",
-__LINE__, 7.411912956257733e-20, "7e-20", "%0.g",
-__LINE__, 7.445275019272160e+11, "744527501927.2159511", "%.7f",
-__LINE__, 7.450279765616891e-16, "7.45028e-16", "%.6g",
-__LINE__, 7.467047411334495e+14, "7.46705E+14", "%G",
-__LINE__, 7.485628870972725e+28, "7E+28", "%.0G",
-__LINE__, 7.495391782588563e+11, "749539178258.856253", "%f",
-__LINE__, 7.495824101611911e+06, "7.49582e+06", "%.6g",
-__LINE__, 7.499759867592402e+20, "+749975986759240154100.3", "%+.1f",
-__LINE__, 7.508983397140368e+04, "75089.8", "%g",
-__LINE__, 7.512585199581016e-27, "7.512585E-27", "%.6E",
-__LINE__, 7.516831372212545e-29, "+7.516831e-29", "%+e",
-__LINE__, 7.525789465978582e+00, "7.52579", "%G",
-__LINE__, 7.528655653725963e+06, "7.5287e+06", "%3.4e",
-__LINE__, 7.533217421035612e+28, "75332174210356122046050586504.861712", "%f",
-__LINE__, 7.534147071756384e+03, "7534.15", "%g",
-__LINE__, 7.542648637430919e-25, "+0.000000", "%+#f",
-__LINE__, 7.554380140947798e-15, " 8e-15", "%7.g",
-__LINE__, 7.557366996007743e+25, " 8E+25", "%7.G",
-__LINE__, 7.579228950138068e+08, "8e+08", "%3.e",
-__LINE__, 7.579773904052487e-13, "0.000000", "%3f",
-__LINE__, 7.580377544554059e+27, "7.58038e+27", "%#g",
-__LINE__, 7.589615147875915e-15, "7.59E-15", "%.3G",
-__LINE__, 7.593317194045158e-12, "+0.", "%+#1.f",
-__LINE__, 7.605535657484387e-07, "7.60554E-07", "%G",
-__LINE__, 7.609171121278006e-08, " 0", "%5.f",
-__LINE__, 7.612033900317304e-14, "7.61203e-14", "%g",
-__LINE__, 7.628040858080326e+23, "+7.62804e+23", "%+g",
-__LINE__, 7.632109382948695e-01, "0.763211", "%#f",
-__LINE__, 7.633415922627254e+28, "76334159226272539910951309138.908982", "%#f",
-__LINE__, 7.636190400774419e+22, "+7.636190E+22", "%+E",
-__LINE__, 7.636228368661314e-23, "0.000000", "%f",
-__LINE__, 7.653292362739654e-17, "7.65329E-17", "%#G",
-__LINE__, 7.664044705231460e+03, "7.664045E+03", "%5E",
-__LINE__, 7.664257283149626e-05, "7.66426E-05", "%0G",
-__LINE__, 7.668996632821614e-19, " 0.0", "%4.1f",
-__LINE__, 7.674502669497263e-24, "7.6745e-24", "%g",
-__LINE__, 7.681870119755193e+12, "+7.68187e+12", "%+#g",
-__LINE__, 7.693453198401315e+02, "769.3453198", "%5.7f",
-__LINE__, 7.705080073293603e-29, "7.705080E-29", "%1E",
-__LINE__, 7.707244083934683e-07, "7.71E-07", "%2.3G",
-__LINE__, 7.749445584970652e-17, "7.75E-17", "%6.3G",
-__LINE__, 7.755369447889403e+09, "7.8e+09", "%#4.2g",
-__LINE__, 7.760378169707072e-06, "7.76038e-06", "%g",
-__LINE__, 7.763518882114968e-10, "0.000000", "%f",
-__LINE__, 7.764720069569677e-18, "0.000000", "%0f",
-__LINE__, 7.768821339438552e-03, "0.00776882", "%g",
-__LINE__, 7.774767835990679e-29, "7.774768E-29", "%7E",
-__LINE__, 7.805567188246987e-04, "0.000780557", "%2G",
-__LINE__, 7.825157442935941e-26, "0.000000", "%f",
-__LINE__, 7.833373563161910e+29, "+783337356316190991378789476584.643126", "%+f",
-__LINE__, 7.875872661746674e-16, "7.875873E-16", "%E",
-__LINE__, 7.880664458920439e-28, "7.881E-28", "%#0.3E",
-__LINE__, 7.893084198630288e+18, "7893084198630288206", "%1.f",
-__LINE__, 7.912222737877417e+04, "79122.2", "%G",
-__LINE__, 7.913004582748724e-26, "0.000000", "%f",
-__LINE__, 7.913749944463836e+17, "791374994446383617.230367", "%f",
-__LINE__, 7.923881665760883e-24, "0.000000", "%f",
-__LINE__, 7.926699779993694e-03, "0.007927", "%5.6f",
-__LINE__, 7.941991860623354e-20, "7.941992e-20", "%e",
-__LINE__, 7.942700358097138e+17, "794270035809713803.587329", "%2f",
-__LINE__, 7.945451569935757e-16, "7.94545E-16", "%#4.6G",
-__LINE__, 7.948277588625241e-04, "0", "%.0f",
-__LINE__, 7.952265062569124e+21, "+7.95227e+21", "%+#g",
-__LINE__, 7.959953534668040e+11, "8e+11", "%2.e",
-__LINE__, 7.962059154424500e-22, "7.96206E-22", "%G",
-__LINE__, 7.962856142535673e-26, "7.9629E-26", "%#.5G",
-__LINE__, 7.966528574505771e+12, "7.96653e+12", "%g",
-__LINE__, 8.006496880305429e-21, "8.0065E-21", "%G",
-__LINE__, 8.023374861440542e+06, "+8023375", "%+6.f",
-__LINE__, 8.041139717082990e-20, "8.04114e-20", "%g",
-__LINE__, 8.044201752824126e+15, "8.04420E+15", "%.5E",
-__LINE__, 8.044262927409321e-10, "+8E-10", "%+2.2G",
-__LINE__, 8.058285708061202e+02, "+8.058286e+02", "%+e",
-__LINE__, 8.104422320765144e+10, "8.10442e+10", "%#4g",
-__LINE__, 8.104572628022330e-11, "0.000000", "%f",
-__LINE__, 8.112156369917432e+15, "+8.11216E+15", "%+G",
-__LINE__, 8.114566569709531e-18, "8.11457E-18", "%G",
-__LINE__, 8.114795069552519e+13, "8.114795E+13", "%E",
-__LINE__, 8.121382719830660e+03, "8121.382720", "%f",
-__LINE__, 8.125179335533733e-12, "+8.125179e-12", "%+e",
-__LINE__, 8.126383949107055e+19, "81263839491070548604.056967", "%f",
-__LINE__, 8.129961701307842e-04, "+0.00081", "%+5.2g",
-__LINE__, 8.143780077390936e+15, "8.14378E+15", "%G",
-__LINE__, 8.149891507777399e+16, "+8E+16", "%+1.G",
-__LINE__, 8.167395708830107e+03, "8167", "%3.f",
-__LINE__, 8.167703619221975e+01, "81.677", "%G",
-__LINE__, 8.178463030771759e+06, "+8.17846E+06", "%+G",
-__LINE__, 8.188188531273697e+12, "8.18819E+12", "%G",
-__LINE__, 8.189094866416537e+11, "+8E+11", "%+.1G",
-__LINE__, 8.205086844365809e-18, "+8.205087E-18", "%+#E",
-__LINE__, 8.205762333408320e-26, "0.000000", "%f",
-__LINE__, 8.212370598174696e-10, "8.2124E-10", "%.5G",
-__LINE__, 8.228054316085489e-14, "0.000000", "%3f",
-__LINE__, 8.244313484402404e-16, "8.24431e-16", "%g",
-__LINE__, 8.244472235472472e+19, "8.24447E+19", "%G",
-__LINE__, 8.245421473302411e-09, "+8.2454e-09", "%+1.5g",
-__LINE__, 8.252286626634840e-22, "8E-22", "%3.G",
-__LINE__, 8.259969177912707e-19, "0.000000", "%f",
-__LINE__, 8.265769991725211e+18, "8.26577e+18", "%.5e",
-__LINE__, 8.293986939496488e+25, "8.3E+25", "%.1E",
-__LINE__, 8.310348813512608e-23, "+8.31035e-23", "%+g",
-__LINE__, 8.316951996533247e-20, "0.000000", "%f",
-__LINE__, 8.318818016883803e+05, " 8e+05", "%6.1g",
-__LINE__, 8.324896920131877e-13, "+8.324897e-13", "%+e",
-__LINE__, 8.325228630004624e-03, "0.0083252", "%5.7f",
-__LINE__, 8.332538660129034e+14, "8.3e+14", "%5.2g",
-__LINE__, 8.343325212751775e+07, "8.34333e+07", "%#4g",
-__LINE__, 8.363117398136236e+20, "+8.36e+20", "%+.3g",
-__LINE__, 8.364181324448165e+27, "8.36418e+27", "%#g",
-__LINE__, 8.372159259848738e+10, "8.37216e+10", "%4g",
-__LINE__, 8.379252006152759e-26, "8.37925e-26", "%g",
-__LINE__, 8.392670395720252e+09, "8392670395.720252", "%f",
-__LINE__, 8.423360059147756e+05, "+842336.", "%+#G",
-__LINE__, 8.425921213167943e+09, "8.425921e+09", "%1.7g",
-__LINE__, 8.431664412515776e-16, "8.43166E-16", "%#G",
-__LINE__, 8.448608859842500e+02, "844.861", "%1.3f",
-__LINE__, 8.456292247478771e-14, "8.45629E-14", "%G",
-__LINE__, 8.460077225296853e-04, "0.000846008", "%G",
-__LINE__, 8.478635925746218e-10, "0.000000", "%f",
-__LINE__, 8.492455774427448e+06, "8.49246e+06", "%g",
-__LINE__, 8.494450528380746e-07, "8.494451e-07", "%e",
-__LINE__, 8.516435842947605e-23, "+0.000000", "%+1f",
-__LINE__, 8.519057789029134e-18, "0.000000", "%0f",
-__LINE__, 8.522602111109066e+18, " 9.e+18", "%#7.g",
-__LINE__, 8.529176788022152e-24, "8.529E-24", "%0.4G",
-__LINE__, 8.534979605642793e-07, "0.000001", "%f",
-__LINE__, 8.546859563634342e-07, "8.546860E-07", "%E",
-__LINE__, 8.552370027054106e+12, "9e+12", "%.0g",
-__LINE__, 8.561781328234041e+10, "8.56178e+10", "%4g",
-__LINE__, 8.562688793145107e-20, "8.562689e-20", "%1.7g",
-__LINE__, 8.573130147270046e-07, " 9E-07", "%7.G",
-__LINE__, 8.584571984387802e-18, "8.5846e-18", "%.5g",
-__LINE__, 8.596407996491291e+11, "8.596408E+11", "%#E",
-__LINE__, 8.604843726850381e+10, " 9E+10", "%6.G",
-__LINE__, 8.626884271938994e-23, "8.62688e-23", "%g",
-__LINE__, 8.631140282429168e+24, "8631140282429168308908629.", "%#.0f",
-__LINE__, 8.635194331917948e-16, "8.63519E-16", "%G",
-__LINE__, 8.641417311588688e-24, "+0.000000", "%+f",
-__LINE__, 8.649120264278466e+26, "8.65E+26", "%1.3G",
-__LINE__, 8.649745523383894e+06, "8.649746e+06", "%e",
-__LINE__, 8.654720740091021e+16, "8.65472e+16", "%g",
-__LINE__, 8.655445556834509e-08, "9e-08", "%4.g",
-__LINE__, 8.658954696751902e+06, "8.65895E+06", "%G",
-__LINE__, 8.665712368800818e-10, "+8.66571E-10", "%+G",
-__LINE__, 8.666937057116442e-10, "8.666937e-10", "%e",
-__LINE__, 8.670981239765155e+05, "867098", "%G",
-__LINE__, 8.679631934294932e-25, "+9.E-25", "%+#0.G",
-__LINE__, 8.683595173050962e-21, "8.68360E-21", "%#G",
-__LINE__, 8.684938704958039e+25, "8.684939E+25", "%E",
-__LINE__, 8.686745463281227e-12, "8.686745E-12", "%5.7G",
-__LINE__, 8.700227628706534e-12, "8.700228e-12", "%#e",
-__LINE__, 8.705101179577200e+04, "87051.011796", "%#2f",
-__LINE__, 8.707824829984700e-24, "9e-24", "%.1g",
-__LINE__, 8.717654041009233e+21, "+9E+21", "%+6.0E",
-__LINE__, 8.741736299906572e-11, "8.74174E-11", "%#0G",
-__LINE__, 8.742228350419966e+18, "+8742228350419965821.060941", "%+f",
-__LINE__, 8.743045146087558e-17, "+8.74305E-17", "%+2G",
-__LINE__, 8.747820269457588e+18, "8.74782E+18", "%G",
-__LINE__, 8.756274717008537e-28, "8.756275E-28", "%E",
-__LINE__, 8.769782309254687e-24, "+8.769782E-24", "%+2.6E",
-__LINE__, 8.788151659193398e-16, " 9E-16", "%6.E",
-__LINE__, 8.789514812202340e-07, "9E-07", "%0.G",
-__LINE__, 8.792657843164822e-07, "8.79266e-07", "%0g",
-__LINE__, 8.810976223440985e+05, "881097.622344", "%f",
-__LINE__, 8.822553973113614e+10, "8.82255E+10", "%G",
-__LINE__, 8.839440421530611e-04, "0.000883944", "%G",
-__LINE__, 8.842539073558434e-12, "0", "%1.f",
-__LINE__, 8.882818021261782e-13, "+8.9e-13", "%+4.2g",
-__LINE__, 8.899833909201039e+05, "8.8998E+05", "%.5G",
-__LINE__, 8.903167498000181e-13, "9e-13", "%0.g",
-__LINE__, 8.933727737932164e+09, "+8933727738", "%+4.f",
-__LINE__, 8.946226267100711e+06, "8.946E+06", "%1.4G",
-__LINE__, 8.953203780849794e-21, "8.9532E-21", "%G",
-__LINE__, 8.959934262635649e+28, "+8.959934e+28", "%+e",
-__LINE__, 8.969485341781558e-25, "0.000000", "%#f",
-__LINE__, 8.970058187654221e+02, "897.005819", "%f",
-__LINE__, 8.979846508565979e+02, "8.979847E+02", "%E",
-__LINE__, 8.984561117901212e+01, "8.984561E+01", "%E",
-__LINE__, 8.992157765875611e-12, "8.99216e-12", "%g",
-__LINE__, 9.004487016708012e+01, "9.004487e+01", "%#e",
-__LINE__, 9.007306978283218e-24, "9.007307e-24", "%e",
-__LINE__, 9.014546375043562e+17, "901454637504356171.007203", "%#3f",
-__LINE__, 9.028177786002161e-12, "9.02818E-12", "%G",
-__LINE__, 9.029635986381795e-02, "0.09", "%.1g",
-__LINE__, 9.032389962233431e-07, "+0.000001", "%+f",
-__LINE__, 9.038466945070887e+10, "+9.038467E+10", "%+E",
-__LINE__, 9.040166964322772e-27, "9.04017e-27", "%g",
-__LINE__, 9.044627673694681e-11, "9.04463E-11", "%G",
-__LINE__, 9.045906217628948e+17, "904590621762894819.823941", "%1f",
-__LINE__, 9.051764975661710e+11, "9.05176e+11", "%#g",
-__LINE__, 9.053142913711405e+29, "9.053143e+29", "%#e",
-__LINE__, 9.073185209160657e-19, "+9.07319e-19", "%+g",
-__LINE__, 9.074372574441451e+02, "907.437", "%g",
-__LINE__, 9.084624602048136e+08, "9.084625E+08", "%E",
-__LINE__, 9.088839346363631e+18, "9.09e+18", "%.2e",
-__LINE__, 9.091945159170871e-15, "9.09195e-15", "%5g",
-__LINE__, 9.115304318083716e+10, "9.115304e+10", "%e",
-__LINE__, 9.115978352902710e+28, "9.11598E+28", "%G",
-__LINE__, 9.121415008221017e-17, "9.E-17", "%#6.G",
-__LINE__, 9.127270978060388e+18, "9.E+18", "%#5.G",
-__LINE__, 9.143941729069086e+08, "9.143942E+08", "%#E",
-__LINE__, 9.162740105978580e-19, " 9.E-19", "%#7.G",
-__LINE__, 9.221509957559626e-18, "9.22151e-18", "%g",
-__LINE__, 9.227419774250317e-28, " 0.", "%#3.f",
-__LINE__, 9.230846660807540e-21, "0.000000", "%f",
-__LINE__, 9.238091727277130e-06, "+0.00001", "%+.5f",
-__LINE__, 9.244337357684406e+10, "9E+10", "%5.G",
-__LINE__, 9.259179793993285e-19, " 9E-19", "%7.0G",
-__LINE__, 9.274068541525759e-17, "9.274069e-17", "%e",
-__LINE__, 9.283833535882367e+16, "9.28383e+16", "%#g",
-__LINE__, 9.295693096364605e+11, "+9.295693E+11", "%+E",
-__LINE__, 9.301820438602407e+05, "930182", "%G",
-__LINE__, 9.322805251555376e-29, "9e-29", "%1.e",
-__LINE__, 9.358443042421307e-27, "9.35844e-27", "%g",
-__LINE__, 9.372658444745124e-23, "9.372658e-23", "%e",
-__LINE__, 9.380302971355292e+05, "938030.3", "%.7g",
-__LINE__, 9.381976354968076e-26, "+9.382E-26", "%+5.4G",
-__LINE__, 9.391072061980585e-15, "9.391072E-15", "%E",
-__LINE__, 9.403554117166546e-06, "0.000009", "%f",
-__LINE__, 9.403712900426614e-28, "9.40371e-28", "%g",
-__LINE__, 9.419046629820578e+03, "9419.046630", "%f",
-__LINE__, 9.422344695378412e+22, "94223446953784115720509.362291", "%f",
-__LINE__, 9.433327680467576e+01, "9.433328e+01", "%e",
-__LINE__, 9.443975205260596e+20, "9.44398e+20", "%g",
-__LINE__, 9.445134851965593e-04, "+9.445135E-04", "%+E",
-__LINE__, 9.448403585149890e+24, "9e+24", "%0.g",
-__LINE__, 9.463149430113036e+18, "9.46315e+18", "%g",
-__LINE__, 9.465735160722534e+27, "+9465735160722534402566452627.070248", "%+f",
-__LINE__, 9.495210794344892e-04, "0.000950", "%f",
-__LINE__, 9.501916506373814e-25, "9.50192E-25", "%#G",
-__LINE__, 9.514641335897739e+29, "9.51464E+29", "%G",
-__LINE__, 9.524633436992819e-04, " 0.001", "%6.G",
-__LINE__, 9.530925101873022e-18, "9.530925e-18", "%2e",
-__LINE__, 9.557903833216979e-22, "9.557904E-22", "%E",
-__LINE__, 9.587709102390903e-01, " 1", "%2.f",
-__LINE__, 9.592723000828453e-02, "9.592723E-02", "%5E",
-__LINE__, 9.603430008794172e+27, "9.60343e+27", "%g",
-__LINE__, 9.622648414989433e-18, "9.622648e-18", "%1e",
-__LINE__, 9.633326171289319e-23, "9.633326e-23", "%e",
-__LINE__, 9.662064616152408e+19, "96620646161524081918.5146393", "%1.7f",
-__LINE__, 9.668544846563163e-23, "9.668545e-23", "%e",
-__LINE__, 9.691014191346685e+28, "9.69101E+28", "%G",
-__LINE__, 9.693075414840598e+02, "+969.308", "%+G",
-__LINE__, 9.695013453291907e-30, "9.695013e-30", "%5e",
-__LINE__, 9.705983477801926e-24, "9.70598e-24", "%g",
-__LINE__, 9.709022568030226e-17, "0.000000", "%f",
-__LINE__, 9.715194901854826e+20, "9.715195e+20", "%e",
-__LINE__, 9.721011821337717e+16, "1E+17", "%0.G",
-__LINE__, 9.734895542899672e+14, "9.734896e+14", "%e",
-__LINE__, 9.741486438769710e-29, " 1e-28", "%6.g",
-__LINE__, 9.766657482315475e-24, "9.76666E-24", "%7G",
-__LINE__, 9.767283293054552e-02, "0.09767", "%5.5f",
-__LINE__, 9.769553159146005e-20, "9.76955E-20", "%G",
-__LINE__, 9.777220880605434e-10, "0.00", "%4.2f",
-__LINE__, 9.790290569034575e+20, "979029056903457473027.", "%#6.f",
-__LINE__, 9.793128245822718e-01, "0.979313", "%G",
-__LINE__, 9.804758536498200e+08, "980475853.650", "%.3f",
-__LINE__, 9.816883664191066e-02, "0.1", "%.0g",
-__LINE__, 9.836109821010300e+25, "9.83611e+25", "%g",
-__LINE__, 9.846197559631225e+03, "1E+04", "%2.G",
-__LINE__, 9.863289416819924e+12, "9.86329e+12", "%g",
-__LINE__, 9.865893798657353e+12, "9.866e+12", "%0.4g",
-__LINE__, 9.868248446640862e-15, "0.000000", "%#f",
-__LINE__, 9.869973080775134e+04, "98699.7", "%G",
-__LINE__, 9.899444006312953e+20, "1E+21", "%.1G",
-__LINE__, 9.904083146074285e-08, "9.904083e-08", "%6e",
-__LINE__, 9.909790408255471e+15, "9909790408255471.305665", "%f",
-__LINE__, 9.930297455798394e-13, "+9.930297E-13", "%+5.6E",
-__LINE__, 9.933314448709083e-15, "9.93331E-15", "%#.6G",
-__LINE__, 9.938714530509870e+29, "9.938715e+29", "%e",
-__LINE__, 9.953892603540162e+07, "9.95389E+07", "%G",
-__LINE__, 9.962084643867200e+14, "+996208464386720.038419", "%+f",
-__LINE__, 9.977706708809947e-09, "9.9777E-09", "%#.4E",
-#endif
-__LINE__, 9.978034352999867e+15, "9.978034e+15", "%2.6e",
-__LINE__, 9.998315286730175e-30, "9.998315e-30", "%6e",
-
-0
-};
-
-/* matches(s1, s2) is true if s1 is "approximately" equal to s2.
- Any digits after the first required_precision digits do not have to match.
- */
-
-int required_precision = 13;
-
-#if defined(__STDC__) || defined(__cplusplus)
-int matches(register char *result, register char *desired)
-#else
-int matches(result, desired)
- register char *result; register char *desired;
-#endif
-{
- int digits_seen = 0;
- for (;; result++, desired++) {
- if (*result == *desired) {
- if (*result == 0)
- return 1;
- else if (*result >= '0' && *result <= '9')
- digits_seen++;
- }
- else if (digits_seen >= required_precision
- && *result >= '0' && *result <= '9'
- && *desired >= '0' && *desired <= '9')
- continue;
- else
- return 0;
- }
-}
-
-extern void dump_stats();
-
-int main()
-{
- int errcount = 0;
- int testcount = 0;
- double d;
-#define BSIZE 1024
- char buffer[BSIZE];
- sprint_double_type *dptr;
-#if defined(__cplusplus) && !defined(TEST_LIBIO)
-
- strstream sstr(buffer, BSIZE, ios::in|ios::out);
-
- for (dptr = sprint_doubles; dptr->line; dptr++)
- {
- sstr.seekp(0);
- sstr.form(dptr->format_string, dptr->value);
- sstr << ends;
- if (!matches(buffer, dptr->result))
- {
- errcount++;
- cerr << "Error in line " << dptr->line;
- cerr << " using \"" << dptr->format_string;
- cerr << "\". Result is \"" << buffer << "\"; should be: \"";
- cerr << dptr->result << "\".\n";
- }
-
-#ifdef TEST_EXACTNESS
- sstr.seekp(0);
- sstr.form("%.999g", dptr->value);
- sstr << ends;
-
- sstr.seekg(0);
- sstr.scan("%lg", &d);
-
- if (dptr->value != d)
- {
- errcount++;
- cerr << "Error in line " << dptr->line;
- cerr << ". String is \"" << buffer << "\", value is " << d << ".\n";
- }
-#endif
- testcount++;
- }
-
- if (errcount == 0)
- {
- cerr << "Encountered no errors in " << testcount << " tests.\n";
- return 0;
- }
- else
- {
- cerr << "Encountered " << errcount << " errors in "
- << testcount << " tests.\n";
- return 1;
- }
-#else
- for (dptr = sprint_doubles; dptr->line; dptr++)
- {
- sprintf (buffer, dptr->format_string, dptr->value);
- if (!matches(buffer, dptr->result))
- {
- errcount++;
- fprintf(stderr,
- "Error in line %d using \"%s\". Result is \"%s\"; should be: \"%s\".\n",
- dptr->line, dptr->format_string, buffer, dptr->result);
- }
-
-#ifdef TEST_EXACTNESS
- sprintf (buffer, "%.999g", dptr->value);
- sscanf (buffer, "%lg", &d);
- if (dptr->value != d)
- {
- errcount++;
- fprintf (stderr,
- "Error in line %d. String is \"%s\", value is %g.\n",
- dptr->line, buffer, d);
- }
-#endif
- testcount++;
- }
-
- if (errcount == 0)
- {
- fprintf(stderr, "Encountered no errors in %d tests.\n", testcount);
- return 0;
- }
- else
- {
- fprintf(stderr, "Encountered %d errors in %d tests.\n",
- errcount, testcount);
- return 1;
- }
-#endif
-}
diff --git a/contrib/libg++/libio/tests/tiformat.c b/contrib/libg++/libio/tests/tiformat.c
deleted file mode 100644
index f28d646d72e8..000000000000
--- a/contrib/libg++/libio/tests/tiformat.c
+++ /dev/null
@@ -1,5093 +0,0 @@
-#ifdef TEST_LIBIO
-#include <iostdio.h>
-#else
-#ifdef __cplusplus
-#include <strstream.h>
-#else
-#include <stdio.h>
-#endif
-#endif /* !TEST_LIBIO */
-#include <string.h>
-
-/* Tests taken from Cygnus C library. */
-typedef struct {
- int line;
- long value;
- char *result;
- char *format_string;
-} sprint_int_type;
-
-sprint_int_type sprint_ints[] =
-{
-__LINE__, 0x000838d2, "838d2", "%.4x",
-__LINE__, 0x0063be46, "63BE46", "%-6X",
-__LINE__, -0x1b236c0, "-28456640", "%#0.d",
-__LINE__, -0x0000003, "-3", "% 0d",
-__LINE__, 0x0000ed51, "ed51", "%2.x",
-__LINE__, -0x00001f2, "-498", "%1ld",
-__LINE__, 0x0ea3e927, "EA3E927", "%+X",
-__LINE__, 0xffbef8da, "FFBEF8DA", "%5X",
-__LINE__, 0x62ff9f56, "62ff9f56", "%0x",
-__LINE__, 0x00000ad2, "AD2", "%.0X",
-__LINE__, 0x00000000, " ", "% 6.ld",
-__LINE__, 0xffffffff, "FFFFFFFF", "%1.4X",
-__LINE__, 0x0000208c, " 208C", "%5X",
-__LINE__, 0x0000003c, "3c", "%x",
-__LINE__, 0xffff6177, "0xffff6177", "%+#x",
-__LINE__, 0xffffdc8d, "ffffdc8d", "%+x",
-__LINE__, 0x00000000, "0", "%X",
-__LINE__, 0x00002434, "9268", "%0d",
-__LINE__, 0xd2c72cdb, "d2c72cdb", "%-x",
-__LINE__, 0xfe38012b, "0xfe38012b", "%+#7x",
-__LINE__, 0x00000001, "0001", "%#.4d",
-__LINE__, -0x008525a, "-0545370", "%06.7ld",
-__LINE__, 0xffffffac, "ffffffac", "%3.7x",
-__LINE__, 0x007424d2, "+7611602", "%+ld",
-__LINE__, 0x00001a85, "1A85", "%.4X",
-__LINE__, -0x0000019, "-25", "%3.d",
-__LINE__, 0xfffffffe, "fffffffe", "%-x",
-__LINE__, -0x34473b2, "-54817714", "% d",
-__LINE__, 0x000000ea, "234", "%1.ld",
-__LINE__, -0x0000004, "-4 ", "%-7.ld",
-__LINE__, 0x00006c94, "27796", "%0d",
-__LINE__, 0x00000001, "1", "%ld",
-__LINE__, 0x00000619, "619", "%1x",
-__LINE__, 0x0000209c, "8348", "%ld",
-__LINE__, -0x327f8ff, "-52951295", "%-0ld",
-__LINE__, 0xffffff0b, "FFFFFF0B", "%2.X",
-__LINE__, 0xf199d6ae, "F199D6AE", "%X",
-__LINE__, 0x3ca5602e, "1017471022", "%-1.ld",
-__LINE__, -0xfb2080b, "-263325707", "%3.5d",
-__LINE__, 0x00001cb8, "7352", "%d",
-__LINE__, 0x00000000, "0000000", "%3.7d",
-__LINE__, 0xffffff40, "FFFFFF40", "%+X",
-__LINE__, 0x14664450, "0x14664450", "%#x",
-__LINE__, 0x0000002e, "2e", "%1x",
-__LINE__, 0xffffffff, "ffffffff", "%x",
-__LINE__, 0xffff606a, "0XFFFF606A", "%#X",
-__LINE__, 0xffffff33, "0XFFFFFF33", "%#X",
-__LINE__, 0x00000000, "0", "%d",
-__LINE__, -0x0000012, "-00018", "%-2.5d",
-__LINE__, 0x0001fbe6, "130022", "%1.d",
-__LINE__, 0xfff59dd9, "fff59dd9", "%+x",
-__LINE__, 0x00000002, "2", "%0.0d",
-__LINE__, 0x00000fe1, "fe1 ", "%-7.x",
-__LINE__, 0x001f8f6a, "1F8F6A", "%1.X",
-__LINE__, 0x0000001b, "000001B", "%04.7X",
-__LINE__, 0x126a2609, " 308946441", "% 4d",
-__LINE__, 0xffffffe3, "0XFFFFFFE3", "%+#.1X",
-__LINE__, 0x1858f1c9, "1858f1c9", "%.3x",
-__LINE__, 0x003fc672, "3fc672", "%1x",
-__LINE__, 0x00c0bddc, "12631516", "%#d",
-__LINE__, 0x000006d6, "1750", "%#d",
-__LINE__, 0x000006a0, "6A0", "%X",
-__LINE__, 0x000007be, "7BE", "%X",
-__LINE__, -0x1c7cd1a, "-29871386", "%ld",
-__LINE__, 0x000000cc, "204", "%ld",
-__LINE__, 0x000002db, "731 ", "%-#5d",
-__LINE__, 0xffff67ad, "FFFF67AD", "% X",
-__LINE__, 0x00000008, "8", "%d",
-__LINE__, 0xffe07007, "FFE07007", "%5X",
-__LINE__, -0x0000001, " -1", "% 7d",
-__LINE__, 0xfffffffe, "fffffffe", "%x",
-__LINE__, 0x00027b68, "+162664", "%+ld",
-__LINE__, 0x0a7c1997, "+175905175", "%+2ld",
-__LINE__, 0xfe300896, "fe300896", "%.4x",
-__LINE__, 0x00000537, "537", "%-0.x",
-__LINE__, 0x3e981779, "3e981779", "%.6x",
-__LINE__, 0xfffff05e, "FFFFF05E", "%1.0X",
-__LINE__, -0x07bc0cf, "-8110287", "%-7d",
-__LINE__, -0x01371bc, "-1274300", "%.7ld",
-__LINE__, -0x0000013, "-19", "%.2ld",
-__LINE__, 0x000000d1, "0xd1", "%#x",
-__LINE__, -0x0000003, "-3", "%-ld",
-__LINE__, 0xfffffffc, "FFFFFFFC", "%4.1X",
-__LINE__, 0x00000000, "0", "%ld",
-__LINE__, 0x0001c8af, "116911", "%d",
-__LINE__, 0x000048c3, "48C3", "%X",
-__LINE__, 0x00000079, "0x0000079", "%-#0.7x",
-__LINE__, 0x0000615a, " 24922", "% d",
-__LINE__, 0xfffffff5, "fffffff5", "%x",
-__LINE__, 0x00000308, "0000308", "%+07.7x",
-__LINE__, 0xfcadc983, "fcadc983", "%x",
-__LINE__, 0x00000097, "151", "%#d",
-__LINE__, 0x000001c5, "453", "%0.2ld",
-__LINE__, 0x00000000, "00", "%-1.2x",
-__LINE__, 0x00000001, "+1", "%+02.d",
-__LINE__, 0x01eb4354, "1EB4354", "% X",
-__LINE__, 0xffffa7d1, "ffffa7d1", "%5.x",
-__LINE__, 0x0003170e, "0x3170e", "%#x",
-__LINE__, 0x000001ce, "1CE", "% .2X",
-__LINE__, 0x3a2991fb, "975802875", "%d",
-__LINE__, -0xcdad8e2, "-215668962", "%-d",
-__LINE__, 0xfe0261c3, "fe0261c3", "%x",
-__LINE__, -0x0006ea7, "-28327", "% ld",
-__LINE__, 0x032854a3, "0X32854A3", "% #6X",
-__LINE__, 0x0000004b, "4b", "%x",
-__LINE__, 0xffff6ca3, "FFFF6CA3", "%4.X",
-__LINE__, 0x00000000, "0", "%X",
-__LINE__, 0x00611f04, "611F04", "%.1X",
-__LINE__, 0x00000000, " 0", "%#6d",
-__LINE__, 0x0002c711, "2c711", "%-02.x",
-__LINE__, -0x07a2fe4, "-8007652", "%d",
-__LINE__, -0x0000547, "-1351", "%ld",
-__LINE__, 0x00013954, "0x13954", "%#x",
-__LINE__, -0x00523b7, "-336823", "%ld",
-__LINE__, -0x00f6c6e, "-1010798", "%6.ld",
-__LINE__, 0xffea6427, "FFEA6427", "%3X",
-__LINE__, -0x0000005, "-5", "%d",
-__LINE__, -0x04fe618, "-5236248", "% .7d",
-__LINE__, 0xffa80a28, "ffa80a28", "%-0x",
-__LINE__, 0x00000047, "71", "%ld",
-__LINE__, 0x001dc6bb, "1951419", "%#4ld",
-__LINE__, 0x00000868, " 2152", "%#6d",
-__LINE__, 0x000002fb, "2fb", "%x",
-__LINE__, 0x00607fa0, "6324128", "%4d",
-__LINE__, 0xfffed161, "fffed161", "%x",
-__LINE__, 0x0001c6e4, " 116452", "% 2.5d",
-__LINE__, 0x0003dda8, "3DDA8", "%4X",
-__LINE__, 0xfffffff8, "fffffff8", "%x",
-__LINE__, 0xfacf664a, "facf664a", "%x",
-__LINE__, 0x000000c1, "C1", "% 1X",
-__LINE__, 0x0000839c, " 839C", "%6X",
-__LINE__, 0xfffff69a, "FFFFF69A", "%X",
-__LINE__, 0x000e5c2e, "+941102", "%+d",
-__LINE__, -0x0000004, "-4", "%#d",
-__LINE__, 0x00000000, "00000", "%#.5ld",
-__LINE__, 0xfffffffe, "fffffffe", "%3.1x",
-__LINE__, 0x0010ed68, "1109352", "%-ld",
-__LINE__, 0xffffffe9, "ffffffe9", "%.6x",
-__LINE__, 0x00000007, " 7", "% 4.ld",
-__LINE__, 0x0000caba, "51898", "%ld",
-__LINE__, -0x0000119, "-281", "% d",
-__LINE__, 0x0c3012a9, "204477097", "%03.6ld",
-__LINE__, -0x001c98f, "-117135", "%ld",
-__LINE__, 0x000017b1, "+6065", "%+d",
-__LINE__, 0x00000001, "1", "%ld",
-__LINE__, -0x0000019, "-25", "% .2d",
-__LINE__, 0x0009ae28, "9AE28", "%X",
-__LINE__, 0xe861c4fe, "e861c4fe", "%7.x",
-__LINE__, 0xffac88d3, "FFAC88D3", "%X",
-__LINE__, -0x00005df, "-01503", "%-5.5ld",
-__LINE__, 0x0000013e, "318", "%-0d",
-__LINE__, 0x04b6f58f, "4b6f58f", "%x",
-__LINE__, 0xfffe3978, "fffe3978", "%+0.6x",
-__LINE__, 0x57ee5244, "57ee5244", "%+7.4x",
-__LINE__, 0xfffb5610, "fffb5610", "% 6x",
-__LINE__, 0x00000006, " 6", "%#7d",
-__LINE__, 0x0000000c, "0x0000c", "%#.5x",
-__LINE__, -0xec59362, "-247829346", "%1.7d",
-__LINE__, -0x0000001, "-1", "%ld",
-__LINE__, -0x0007e4b, "-32331", "% d",
-__LINE__, 0x0ececa6f, "248433263", "%0d",
-__LINE__, 0x00000578, " 578", "%+6.x",
-__LINE__, -0x0000003, "-3", "%ld",
-__LINE__, 0x000002bb, "2bb", "% 0x",
-__LINE__, -0x0000006, "-6", "%-ld",
-__LINE__, 0x000002f9, "761", "%d",
-__LINE__, 0xffffd736, "ffffd736", "%3.4x",
-__LINE__, 0x0010ba79, "1096313", "%7.4d",
-__LINE__, -0x0001244, "-4676", "%#.1d",
-__LINE__, 0x00000dbe, "DBE", "%1X",
-__LINE__, -0x0000015, "-21", "%-0.d",
-__LINE__, 0xffffffff, "0xffffffff", "%#x",
-__LINE__, -0x6cdf4a3, "-114160803", "%ld",
-__LINE__, 0x00008ac9, "8AC9", "%1X",
-__LINE__, 0x00000000, "00", "%.2X",
-__LINE__, -0x2263dba, "-36060602", "%5.5d",
-__LINE__, 0x00007da9, "32169", "%0d",
-__LINE__, 0xfffffff7, "FFFFFFF7", "% 4.X",
-__LINE__, 0xfbf36cca, "FBF36CCA", "%.1X",
-__LINE__, 0x00000040, "64", "%.0ld",
-__LINE__, 0x0000001c, " 28", "% d",
-__LINE__, 0xfffffadb, "0xfffffadb", "%#.5x",
-__LINE__, 0x0eb95847, "247027783", "%d",
-__LINE__, 0xfffd7030, "FFFD7030", "%+02X",
-__LINE__, 0x00000005, "00005", "%.5x",
-__LINE__, 0xfffffffd, "FFFFFFFD", "%X",
-__LINE__, 0x98975b15, "98975B15", "%02X",
-__LINE__, -0x0000034, " -52", "%6ld",
-__LINE__, 0xffd7d0cc, "ffd7d0cc", "% 5.6x",
-__LINE__, 0xffffffa6, "FFFFFFA6", "%X",
-__LINE__, 0xfff27132, "fff27132", "%x",
-__LINE__, -0x065b74d, "-6666061", "%+6ld",
-__LINE__, 0xf6ac99d6, "0XF6AC99D6", "%#X",
-__LINE__, 0xfffff4bd, "FFFFF4BD", "%X",
-__LINE__, 0xfffffb62, "FFFFFB62", "%6X",
-__LINE__, 0xf8434543, "f8434543", "%-0x",
-__LINE__, 0x0002b374, "0x2b374", "%-#6x",
-__LINE__, 0x00000000, "0", "%x",
-__LINE__, 0xffb5751d, "ffb5751d", "%-3.x",
-__LINE__, 0x34ea7347, "887780167", "%d",
-__LINE__, -0x008f457, "-586839", "%0ld",
-__LINE__, 0x00000001, " 1", "%#4d",
-__LINE__, 0xc32d7ad4, "c32d7ad4", "%0x",
-__LINE__, 0xfffffb80, "FFFFFB80", "%-.2X",
-__LINE__, 0x00000756, "756 ", "%-6x",
-__LINE__, 0xfffb020f, "FFFB020F", "%+.2X",
-__LINE__, -0xe68619f, "-241721759", "%#1.6ld",
-__LINE__, 0x180166cd, "402745037", "%3.7ld",
-__LINE__, -0x0000001, "-1", "%+00d",
-__LINE__, 0xfdbc3611, "fdbc3611", "%x",
-__LINE__, -0x000005b, "-91", "%d",
-__LINE__, 0xffffe77f, "ffffe77f", "%x",
-__LINE__, -0x0000019, "-25", "%ld",
-__LINE__, 0x00000016, "22", "%#d",
-__LINE__, -0x0000025, "-37", "%ld",
-__LINE__, 0xffffe43f, "ffffe43f", "%x",
-__LINE__, 0x000050a5, "00050a5", "%.7x",
-__LINE__, 0x0000000c, " 12", "% 5.ld",
-__LINE__, -0x001faff, "-129791", "%4d",
-__LINE__, 0x239d7cf2, "597523698", "%0.7ld",
-__LINE__, 0x04092183, "4092183", "% 7X",
-__LINE__, -0x0043498, "-275608", "%-ld",
-__LINE__, -0x0018dbe, "-101822", "%d",
-__LINE__, 0xff3e09c3, "FF3E09C3", "%X",
-__LINE__, 0x00000000, "0", "%d",
-__LINE__, -0x15d57558, "-366310744", "%+0.7ld",
-__LINE__, 0x0004fb06, "326406", "%0.0d",
-__LINE__, 0x00000119, "0X119", "%#X",
-__LINE__, -0x14c53e19, "-348470809", "%d",
-__LINE__, 0x00000019, "0000019", "% .7X",
-__LINE__, -0x0000654, "-1620", "%0.4ld",
-__LINE__, -0xde5899b, "-233146779", "%#.1d",
-__LINE__, 0x0013c1f0, "1294832", "%4.ld",
-__LINE__, 0x0a9fe761, "A9FE761", "%X",
-__LINE__, -0x00000e5, "-229", "%1ld",
-__LINE__, 0x00000161, "000353", "%.6ld",
-__LINE__, 0x6b04e4bd, "0x6b04e4bd", "%#7.0x",
-__LINE__, -0x0000ef0, "-3824 ", "%-6.ld",
-__LINE__, -0x026306e, "-2502766", "%ld",
-__LINE__, 0x00000000, "0", "%-X",
-__LINE__, 0xfffffe1f, "fffffe1f", "%-x",
-__LINE__, 0x0003aecf, " 241359", "% 2.1ld",
-__LINE__, -0x0000014, "-20", "%d",
-__LINE__, 0x00000002, "0002", "%-.4ld",
-__LINE__, 0xfffff662, "0XFFFFF662", "% #.6X",
-__LINE__, 0x00000006, "6", "%0x",
-__LINE__, 0x0001f4c4, " 128196", "% 0d",
-__LINE__, 0xffffffff, "FFFFFFFF", "%5X",
-__LINE__, 0x05605e38, "90201656", "%ld",
-__LINE__, 0xffffffde, "0XFFFFFFDE", "% #X",
-__LINE__, 0x000001e0, " 1e0", "%7.x",
-__LINE__, 0x00000007, "7", "%X",
-__LINE__, 0x00000001, "+1", "%+d",
-__LINE__, 0xffffffe0, "FFFFFFE0", "% X",
-__LINE__, 0xffd7f77a, "FFD7F77A", "%+00.1X",
-__LINE__, 0xfffffffe, "0xfffffffe", "%-#x",
-__LINE__, 0x01b0a63b, "1b0a63b", "%x",
-__LINE__, -0x06554b7, "-6640823", "%d",
-__LINE__, 0xfffffff8, "fffffff8", "%x",
-__LINE__, 0x00000b2d, "b2d", "%x",
-__LINE__, -0x2664ba2, "-40258466", "%-d",
-__LINE__, 0xfffffffe, "FFFFFFFE", "%X",
-__LINE__, -0x0000552, " -1362", "%6.2ld",
-__LINE__, 0x00000009, " 00009", "%6.5x",
-__LINE__, 0x00035c72, "220274", "%05.ld",
-__LINE__, -0x014d09d, "-1364125", "%d",
-__LINE__, -0x0000002, " -2", "% 4d",
-__LINE__, 0x00000001, "1", "%+X",
-__LINE__, 0x00000028, "28", "%X",
-__LINE__, 0xf25c9eb2, "F25C9EB2", "%7.X",
-__LINE__, -0x7ae4b62, "-128863074", "%d",
-__LINE__, 0x00630d87, "630D87", "%2X",
-__LINE__, 0x000000f8, "F8", "%-X",
-__LINE__, 0xfffffff9, "FFFFFFF9", "%X",
-__LINE__, -0x0000007, "-7", "%0d",
-__LINE__, -0x2518fcd, "-38899661", "% 3ld",
-__LINE__, 0xfffff4b4, "FFFFF4B4", "%-5X",
-__LINE__, 0x01cc36c8, "30160584", "%ld",
-__LINE__, 0xffffffff, "ffffffff", "%-x",
-__LINE__, 0x0000000b, " 11", "%6.ld",
-__LINE__, 0x00010d55, " 68949", "% d",
-__LINE__, -0x0c01306, "-12587782", "% 6.1ld",
-__LINE__, 0x001719d7, "1513943", "%.1ld",
-__LINE__, -0x0000002, " -2", "%+3.ld",
-__LINE__, 0x0000018e, "398", "%d",
-__LINE__, 0x000000a6, "0xa6", "%-#3x",
-__LINE__, 0x00006f66, " 28518", "% #d",
-__LINE__, 0x0000032a, "32A", "%X",
-__LINE__, -0x0000145, "-325", "%0d",
-__LINE__, 0xffffffff, "ffffffff", "%2.x",
-__LINE__, 0x00287171, "2650481", "%ld",
-__LINE__, 0x0000004b, "+75", "%+02.ld",
-__LINE__, 0xfffffff8, "fffffff8", "%-0x",
-__LINE__, 0x00000064, "64", "% X",
-__LINE__, 0xfffffca2, "fffffca2", "%0x",
-__LINE__, 0x000010b6, "10b6", "% .0x",
-__LINE__, -0x003806f, "-229487", "%7d",
-__LINE__, -0x00000b7, "-183", "%3ld",
-__LINE__, 0xffffe5ba, "FFFFE5BA", "%0X",
-__LINE__, 0x001f0da8, "1f0da8", "%+x",
-__LINE__, 0x000ce185, "844165", "%0ld",
-__LINE__, 0x00000c96, "3222", "%0d",
-__LINE__, -0x0013099, "-77977", "%1.ld",
-__LINE__, -0x5f3c47a, "-99861626", "%.6ld",
-__LINE__, 0x00000cbf, " CBF", "%+5.X",
-__LINE__, -0x0000001, "-1", "%+ld",
-__LINE__, 0x0d793bc3, "d793bc3", "%6.x",
-__LINE__, 0xfffffffd, "0xfffffffd", "%+#x",
-__LINE__, -0x0000070, " -112", "%6.d",
-__LINE__, 0xfffffb3f, "FFFFFB3F", "%.7X",
-__LINE__, 0x037dfc78, "0X37DFC78", "%#X",
-__LINE__, 0x00009ba5, "39845", "%3ld",
-__LINE__, 0x0000004a, "4a", "%0x",
-__LINE__, 0xffffff81, "ffffff81", "%5.5x",
-__LINE__, -0x86ef222, "-141488674", "%ld",
-__LINE__, -0xac5531e, "-180704030", "% 4ld",
-__LINE__, 0x00002493, "2493", "%+X",
-__LINE__, 0xffffffff, "FFFFFFFF", "%1.3X",
-__LINE__, 0x0005c875, "378997", "%.0ld",
-__LINE__, 0x0301d345, "50451269", "%d",
-__LINE__, 0xfff6b589, "fff6b589", "%2.4x",
-__LINE__, -0x00001db, "-475 ", "%-7.0d",
-__LINE__, 0x0000d1e7, "0x000d1e7", "%#2.7x",
-__LINE__, 0xf4c4d2bb, "f4c4d2bb", "%.6x",
-__LINE__, 0x00c89f54, "13147988", "%ld",
-__LINE__, -0x6599253c, "-1704535356", "%+ld",
-__LINE__, 0xab7d61ea, "ab7d61ea", "% x",
-__LINE__, 0x00000006, "6", "%1ld",
-__LINE__, 0xffff5ab7, "ffff5ab7", "%0x",
-__LINE__, -0x1cfeca5b, "-486459995", "%#ld",
-__LINE__, 0x000000f3, " f3", "% 6.x",
-__LINE__, -0x0000021, "-33", "%d",
-__LINE__, 0xfe7246ac, "fe7246ac", "%-5.x",
-__LINE__, 0x00000017, "00017", "%-.5X",
-__LINE__, -0x0cc250a, "-13378826", "%0.0d",
-__LINE__, -0x00010ae, "-04270", "%#.5ld",
-__LINE__, -0x7952c8b, "-127216779", "% ld",
-__LINE__, 0x0002a53e, "173374", "%4.0d",
-__LINE__, 0x03801bbf, "3801BBF", "%0X",
-__LINE__, 0x0368645f, "+57173087", "%+#0.6ld",
-__LINE__, 0x0000002f, "47", "%d",
-__LINE__, 0x00000003, "3", "%x",
-__LINE__, 0x000005f7, "5F7", "%0X",
-__LINE__, -0x06e5e76, "-7233142", "% 0.1ld",
-__LINE__, 0x053da936, "53da936", "%1.4x",
-__LINE__, -0x0df0c2f, "-14617647", "%.5ld",
-__LINE__, 0xfffffffd, "FFFFFFFD", "%-0X",
-__LINE__, 0x000104bf, "104BF", "%X",
-__LINE__, 0x000353fc, "353FC", "%X",
-__LINE__, 0x182a18dc, "+405412060", "%+ld",
-__LINE__, 0x0000000e, " 14", "% 2d",
-__LINE__, -0x0000091, "-145", "%+ld",
-__LINE__, 0x0029a9d6, "2730454", "%d",
-__LINE__, 0x00009d57, "009d57", "% .6x",
-__LINE__, 0x4c4d4f79, "1280135033", "%5.ld",
-__LINE__, -0x000075b, "-1883", "% 03d",
-__LINE__, -0x001b718, "-112408", "%+d",
-__LINE__, 0xfffaaf57, "FFFAAF57", "%+1X",
-__LINE__, 0x00f44e52, "F44E52", "% 4X",
-__LINE__, 0x00000002, "0X2", "%#X",
-__LINE__, 0x000a85e9, "A85E9", "%+0X",
-__LINE__, 0xffff70bb, "ffff70bb", "%6x",
-__LINE__, 0x00004e15, "4e15", "%x",
-__LINE__, 0x000eeb60, " 977760", "% ld",
-__LINE__, 0xfffffff1, "fffffff1", "%0x",
-__LINE__, -0x294d7e2, "-43309026", "% 02.d",
-__LINE__, 0x0001aaeb, "0109291", "%02.7ld",
-__LINE__, 0x000a01fc, "0xa01fc", "%-#.5x",
-__LINE__, 0x002c3c30, "+2898992", "%+#d",
-__LINE__, 0x015667ae, "+22439854", "%+5ld",
-__LINE__, -0x05af42b, "-5960747", "%+d",
-__LINE__, 0x0000be36, "be36", "%+2x",
-__LINE__, 0x005e3f67, "5e3f67", "% x",
-__LINE__, -0x0000020, "-32", "% ld",
-__LINE__, -0x0003617, "-13847", "% d",
-__LINE__, 0x00000014, "14 ", "%-4.X",
-__LINE__, 0x00000001, "001", "%0.3d",
-__LINE__, 0xfffffea9, "fffffea9", "%3.x",
-__LINE__, 0xe447099e, "E447099E", "%0X",
-__LINE__, 0x00049c71, "302193", "%d",
-__LINE__, 0x76356ed3, "0x76356ed3", "%#4.1x",
-__LINE__, 0x00000005, " 0X5", "%#5X",
-__LINE__, 0x00004da2, "0x004da2", "%#1.6x",
-__LINE__, 0xffdfb36c, "FFDFB36C", "%4X",
-__LINE__, 0xffffe3c5, "FFFFE3C5", "%+4.X",
-__LINE__, 0x00000006, "6", "%0x",
-__LINE__, -0x914ff17, "-152370967", "% .5ld",
-__LINE__, -0x0000002, "-2", "%0ld",
-__LINE__, 0xffffff36, "FFFFFF36", "% 2X",
-__LINE__, -0x0bb1598, "-12260760", "%-ld",
-__LINE__, 0x00006db5, "28085", "%0.5ld",
-__LINE__, 0xffffffff, "ffffffff", "%x",
-__LINE__, -0x0000001, "-1", "%0ld",
-__LINE__, 0x0fa37e79, "FA37E79", "%1.X",
-__LINE__, -0x00000ac, "-172", "%.2d",
-__LINE__, 0xffffffd8, "ffffffd8", "%.7x",
-__LINE__, -0x000a513, "-42259", "%ld",
-__LINE__, 0x00001294, "4756", "%2ld",
-__LINE__, -0x56bae0b4, "-1455087796", "%.1ld",
-__LINE__, 0x3b26d5fa, "3b26d5fa", "%x",
-__LINE__, 0xff657013, "ff657013", "%x",
-__LINE__, -0x00005f5, "-1525", "%0.0ld",
-__LINE__, -0x0000001, " -1", "% 7d",
-__LINE__, -0x02396b2, "-2332338", "%d",
-__LINE__, -0x0000003, "-000003", "%+7.6d",
-__LINE__, 0xfd3ec7c1, "fd3ec7c1", "% 3.4x",
-__LINE__, -0x076e338, "-7791416", "%0.d",
-__LINE__, -0x000015e, "-350", "%3ld",
-__LINE__, 0x0a0f0b71, "a0f0b71", "%x",
-__LINE__, 0xfffe00ba, "FFFE00BA", "%X",
-__LINE__, 0x00036bd8, " 36bd8", "% 06.x",
-__LINE__, 0xfffff2df, "0XFFFFF2DF", "%#2.6X",
-__LINE__, 0x004687fb, "4622331", "%ld",
-__LINE__, -0x0000331, " -817", "%+6.d",
-__LINE__, 0xfcd5b090, "fcd5b090", "%+0x",
-__LINE__, 0x0334f94c, "334F94C", "%.6X",
-__LINE__, 0x00000bce, "3022", "%.3ld",
-__LINE__, 0xf28d9ddd, "f28d9ddd", "%x",
-__LINE__, 0x00003a79, " 14969", "% ld",
-__LINE__, 0xfffffffe, "FFFFFFFE", "%.7X",
-__LINE__, 0x0043d7fe, "43D7FE", "%X",
-__LINE__, -0x0000b82, "-2946", "%-ld",
-__LINE__, -0x00e29d8, "-928216", "%d",
-__LINE__, 0xffffffec, "ffffffec", "%-x",
-__LINE__, 0x0aeaf557, "0xaeaf557", "%-#x",
-__LINE__, 0x00c07fe6, "C07FE6", "%X",
-__LINE__, 0x307414d8, "307414d8", "% 0x",
-__LINE__, -0x045ef67, "-4583271", "%d",
-__LINE__, 0x0000024a, " 0000586", "% .7d",
-__LINE__, 0xfffffc42, "fffffc42", "%x",
-__LINE__, 0xfc38c249, "fc38c249", "%5.x",
-__LINE__, -0x000d096, "-53398", "%-d",
-__LINE__, -0x213a345, "-34841413", "%ld",
-__LINE__, -0x0000130, "-304", "%ld",
-__LINE__, -0x000efd1, "-61393", "%ld",
-__LINE__, 0xfffff867, "FFFFF867", "%2X",
-__LINE__, 0x00113ed0, "0x113ed0", "%-#7x",
-__LINE__, 0x00000677, " 1655", "% 3.ld",
-__LINE__, 0x0000002f, "2f", "%x",
-__LINE__, 0xfffffd38, "fffffd38", "%-4x",
-__LINE__, -0x000b3cc, "-46028", "%1.2d",
-__LINE__, 0x45da719b, "45DA719B", "%+0X",
-__LINE__, -0x000a454, " -42068", "%7.3ld",
-__LINE__, 0x01cc7c30, " 30178352", "% d",
-__LINE__, -0x05ae80e, "-5957646", "%#.4ld",
-__LINE__, 0x000000b9, "185", "%d",
-__LINE__, 0x003fcaf4, "4180724", "%1.ld",
-__LINE__, 0x02da1b74, "2DA1B74", "%X",
-__LINE__, 0xffffffd9, "FFFFFFD9", "%X",
-__LINE__, 0x00064359, "64359 ", "%-6X",
-__LINE__, 0x000000f0, "240", "%ld",
-__LINE__, -0x01715e5, "-1512933", "%ld",
-__LINE__, 0xc8f6e118, "0XC8F6E118", "%#X",
-__LINE__, 0xfffffd8f, "FFFFFD8F", "%X",
-__LINE__, 0x0000176d, "5997 ", "%-6d",
-__LINE__, 0x00003cab, "0x3cab", "%#0.3x",
-__LINE__, 0x00000001, " 1", "% d",
-__LINE__, 0xfffff610, "0XFFFFF610", "%#X",
-__LINE__, 0xfffffffe, "FFFFFFFE", "%5.7X",
-__LINE__, 0x00000001, "1", "%0x",
-__LINE__, 0x00000001, "00001", "%.5ld",
-__LINE__, -0x0000d51, "-3409", "%d",
-__LINE__, -0x08639ee, "-8796654", "%ld",
-__LINE__, 0x00003121, "12577", "%#1.2ld",
-__LINE__, 0x0000004e, "78", "%d",
-__LINE__, 0xfffff64f, "fffff64f", "%-x",
-__LINE__, 0x0000002a, "2a", "%0x",
-__LINE__, 0x00000020, "20", "%x",
-__LINE__, -0x00000b8, "-184", "%#ld",
-__LINE__, 0x0000000a, "10", "%-#d",
-__LINE__, 0x00000364, "868", "%.1ld",
-__LINE__, 0x00d1f9b6, "D1F9B6", "%0.X",
-__LINE__, 0x008cfda1, "8CFDA1", "% 6.X",
-__LINE__, 0xffd58cce, "FFD58CCE", "%X",
-__LINE__, 0x00000008, "0000008", "%6.7ld",
-__LINE__, 0x00000318, " 318", "%4X",
-__LINE__, 0x000172d8, "94936", "%2ld",
-__LINE__, -0x056ccbf, "-5688511", "%ld",
-__LINE__, 0x000000c7, "+000199", "%+0.6d",
-__LINE__, 0x00000002, "0X2", "%-#X",
-__LINE__, 0xfffff634, "FFFFF634", "%.1X",
-__LINE__, -0x00001f3, "-499", "%-ld",
-__LINE__, -0x000081b, "-2075", "%-d",
-__LINE__, 0x000000b5, "181", "%0d",
-__LINE__, 0xfe961ee8, "fe961ee8", "%0x",
-__LINE__, 0x000028a2, "10402", "%d",
-__LINE__, 0xffffffff, "FFFFFFFF", "%.4X",
-__LINE__, -0x000058a, "-1418", "%.3ld",
-__LINE__, 0x00001ceb, "1CEB", "%X",
-__LINE__, 0x00000021, "21", "% X",
-__LINE__, 0x00000002, "2", "%0d",
-__LINE__, -0x2f9bbf5, "-49921013", "%.4ld",
-__LINE__, 0x00000e91, "03729", "%#.5ld",
-__LINE__, 0xf1116740, "f1116740", "%2x",
-__LINE__, 0x00014f72, "14F72", "%X",
-__LINE__, 0xfffffced, "FFFFFCED", "%X",
-__LINE__, 0xffffffff, "ffffffff", "%.5x",
-__LINE__, 0x0017cf0c, " 1560332", "% 0ld",
-__LINE__, 0x0000000a, "A", "% X",
-__LINE__, 0xff3a39d4, "ff3a39d4", "%x",
-__LINE__, 0xfffef05f, "FFFEF05F", "%X",
-__LINE__, 0xfedfe708, "fedfe708", "%03.0x",
-__LINE__, 0x000345a0, "345A0", "% X",
-__LINE__, -0x1ed5b6f7, "-517322487", "%d",
-__LINE__, 0xd2d56c22, "D2D56C22", "%0.X",
-__LINE__, 0x00002cbf, "2CBF", "%.2X",
-__LINE__, 0x00000db4, "db4", "%3x",
-__LINE__, -0x000b154, "-45396", "%d",
-__LINE__, 0x002bf4c7, "2BF4C7", "%X",
-__LINE__, 0x6954abf4, "+1767156724", "%+d",
-__LINE__, 0xfffffffb, "fffffffb", "%x",
-__LINE__, -0x29e0050e, "-702547214", "%-0ld",
-__LINE__, -0x0014989, "-84361", "%-#0.3ld",
-__LINE__, 0x001a557c, "+1725820", "%+6.5d",
-__LINE__, -0x56689a81, "-1449695873", "%.2d",
-__LINE__, 0x00000016, " 16", "%05.X",
-__LINE__, 0x0001da1e, " 121374", "% d",
-__LINE__, -0x04deac7, "-5106375", "%03.4d",
-__LINE__, 0x000012b1, "4785", "%d",
-__LINE__, 0x0009a116, "9a116", "%-x",
-__LINE__, -0x0000003, "-000003", "%4.6ld",
-__LINE__, 0x00000000, "", "%.0x",
-__LINE__, 0x0000000a, " A", "% 3X",
-__LINE__, 0xfffffff0, "0xfffffff0", "%-#0.1x",
-__LINE__, 0x00000086, "86", "%0X",
-__LINE__, 0x0000001f, "31", "%-d",
-__LINE__, 0x0386f706, "59176710", "%3.6ld",
-__LINE__, 0xffe437ae, "0XFFE437AE", "%#X",
-__LINE__, 0x0e5405c6, "e5405c6", "%-x",
-__LINE__, 0xfffdee46, "FFFDEE46", "%+X",
-__LINE__, 0xff861e9d, "FF861E9D", "%5.X",
-__LINE__, 0xfffff570, "FFFFF570", "%-X",
-__LINE__, 0x045c90bd, "45c90bd", "%0x",
-__LINE__, 0x000000aa, "AA", "%+X",
-__LINE__, -0x747262e, "-122103342", "%0ld",
-__LINE__, 0xffffad89, "FFFFAD89", "%X",
-__LINE__, 0x00000018, "18", "%0.2X",
-__LINE__, 0x00057a2d, " 358957", "% #7.d",
-__LINE__, 0x73a0e21d, "1939923485", "%ld",
-__LINE__, -0x00021e1, "-8673", "%0d",
-__LINE__, 0x000000e9, " 233", "% 06.3ld",
-__LINE__, 0xffffcc0d, "ffffcc0d", "%x",
-__LINE__, 0x00000052, "52", "%x",
-__LINE__, 0x01c155af, "1C155AF", "%.5X",
-__LINE__, 0xffffffff, "ffffffff", "%0.x",
-__LINE__, -0x00400a4, "-262308", "%-d",
-__LINE__, -0x0000001, "-0000001", "%#.7ld",
-__LINE__, 0x01fb9c99, "1fb9c99", "% 03.5x",
-__LINE__, 0xffffffff, "ffffffff", "%6.x",
-__LINE__, 0xff5e5eea, "FF5E5EEA", "%X",
-__LINE__, 0x0000000f, "F", "%+0X",
-__LINE__, 0xfffffe3a, "fffffe3a", "% x",
-__LINE__, 0xfffffffe, "FFFFFFFE", "%-X",
-__LINE__, -0x0000007, "-7", "%0ld",
-__LINE__, -0x002f635, "-194101", "%d",
-__LINE__, -0x0000005, "-5", "%ld",
-__LINE__, -0x0000059, "-89", "%0ld",
-__LINE__, -0x1ccda96, "-30202518", "%d",
-__LINE__, -0x0000002, "-2", "%-d",
-__LINE__, 0xffffffda, "0XFFFFFFDA", "%#X",
-__LINE__, 0x00036cc5, "224453", "%#d",
-__LINE__, 0x00000010, "+16", "%+ld",
-__LINE__, 0x0b6039c7, "190855623", "%d",
-__LINE__, -0x0000002, "-002", "%#.3d",
-__LINE__, 0xfff3e746, "FFF3E746", "%-4X",
-__LINE__, 0x0361b3de, "361B3DE", "% 04X",
-__LINE__, 0xffffe6a2, "ffffe6a2", "%-x",
-__LINE__, 0x00032790, "0x0032790", "%#7.7x",
-__LINE__, 0xffe33b4e, "ffe33b4e", "%-0x",
-__LINE__, -0x0094663, "-607843", "%.3ld",
-__LINE__, -0x00a3efa, "-671482", "%4d",
-__LINE__, 0x000000e6, " 00E6", "%7.4X",
-__LINE__, 0x000125cb, "125CB", "%+X",
-__LINE__, 0x0000b97e, "b97e", "%x",
-__LINE__, -0x0000039, "-57", "%+ld",
-__LINE__, 0xffffe39a, "ffffe39a", "%5.4x",
-__LINE__, 0xffffffff, "ffffffff", "%6.1x",
-__LINE__, -0xdee910c, "-233738508", "%-#2d",
-__LINE__, -0x14044930, "-335825200", "%6.ld",
-__LINE__, 0x00a81259, "a81259", "%x",
-__LINE__, 0x020e74c6, "20E74C6", "%X",
-__LINE__, -0x00000fb, "-251", "%01.d",
-__LINE__, 0x034ceb45, "34CEB45", "%5.X",
-__LINE__, 0xfeacb66a, "feacb66a", "% x",
-__LINE__, 0x00003eb6, "3EB6", "% X",
-__LINE__, 0x000009ef, "9ef", "% x",
-__LINE__, 0xf9d9dd07, "F9D9DD07", "%0X",
-#ifndef __PCCNECV70__
-
-__LINE__, 0x000154d7, "087255", "%.6ld",
-__LINE__, -0x000036e, "-878", "%-ld",
-__LINE__, -0x0007dcc, "-32204", "% d",
-__LINE__, 0x000019dc, "6620", "%d",
-__LINE__, 0xffffff6e, "FFFFFF6E", "%2X",
-__LINE__, 0x00000016, "0x16", "%-#x",
-__LINE__, 0xffdb3e96, "ffdb3e96", "%+.5x",
-__LINE__, 0xffffffef, "FFFFFFEF", "% 04.X",
-__LINE__, 0xffffffff, "FFFFFFFF", "%5X",
-__LINE__, 0x000c08cd, "C08CD", "%-X",
-__LINE__, 0x18de71ee, "18de71ee", "%x",
-__LINE__, 0xffffffff, "ffffffff", "% x",
-__LINE__, -0x00025bd, "-009661", "%#.6d",
-__LINE__, 0x2f05de14, " 788913684", "% 6.4ld",
-__LINE__, 0x0c99cf86, "211406726", "%.5d",
-__LINE__, 0x09e6a21d, " 166109725", "% 0d",
-__LINE__, -0x013da65, "-1301093", "%+ld",
-__LINE__, 0x000003d0, " 976", "% 4.2d",
-__LINE__, -0xef9e3cc, "-251257804", "%-7.0d",
-__LINE__, 0x0000000c, "+12", "%+00ld",
-__LINE__, 0xffffffe2, "ffffffe2", "%x",
-__LINE__, 0x000000fe, "fe", "%-x",
-__LINE__, 0xfffffc5f, "fffffc5f", "%x",
-__LINE__, -0x0005c55, "-23637", "%d",
-__LINE__, -0x0111ff2, "-1122290", "% 7.d",
-__LINE__, -0x1a1746e5, "-437733093", "%.4ld",
-__LINE__, 0x00001007, "004103", "%00.6d",
-__LINE__, 0xffffffe1, "ffffffe1", "%x",
-__LINE__, 0x0000d80f, "55311", "%d",
-__LINE__, 0x00000004, "4", "%+X",
-__LINE__, 0xfffffffd, "fffffffd", "%6x",
-__LINE__, -0x2afbcc3c, "-721144892", "%4.6ld",
-__LINE__, 0x00377f96, "377F96", "%6.X",
-__LINE__, 0xffffffc8, "FFFFFFC8", "%0X",
-__LINE__, 0x007ed9d1, "8313297", "%-3d",
-__LINE__, 0x00000000, "0", "%-X",
-__LINE__, 0x001e122d, "1970733", "%01.d",
-__LINE__, -0x000029b, "-667", "%ld",
-__LINE__, -0x002f563, "-193891", "% 2.5d",
-__LINE__, 0xfffffffe, "fffffffe", "%+3.7x",
-__LINE__, 0xfff7658c, "fff7658c", "%x",
-__LINE__, -0x0006d08, "-0027912", "%7.7ld",
-__LINE__, 0x00000080, "80", "%X",
-__LINE__, 0x0000078f, " 1935", "% 6ld",
-__LINE__, 0xfffffffb, "FFFFFFFB", "% X",
-__LINE__, 0x000000ae, " AE", "%7.X",
-__LINE__, -0x000d6aa, "-54954", "%-ld",
-__LINE__, 0xfffffffe, "FFFFFFFE", "%6.X",
-__LINE__, 0x000003bf, "+959", "%+d",
-__LINE__, -0x7242d04b, "-1916981323", "% ld",
-__LINE__, 0xf0e6546f, "F0E6546F", "% .7X",
-__LINE__, 0x047e196a, "75372906", "%ld",
-__LINE__, 0x0240174e, "240174E", "%+0X",
-__LINE__, -0x0000006, "-006", "%.3ld",
-__LINE__, 0x00068aac, "428716", "%#ld",
-__LINE__, 0xffffffa1, "ffffffa1", "%0x",
-__LINE__, 0x000adab3, "adab3", "%x",
-__LINE__, -0x00000ae, "-0000174", "%7.7ld",
-__LINE__, 0x0f0a8f4b, "f0a8f4b", "% x",
-__LINE__, 0xfee229bc, "fee229bc", "%x",
-__LINE__, -0x275b8455, "-660309077", "%.2ld",
-__LINE__, -0xca4b2a5, "-212120229", "%d",
-__LINE__, 0x000000b5, " 181", "%04.d",
-__LINE__, 0xfff213f2, "FFF213F2", "%X",
-__LINE__, 0x00000003, "3", "%-X",
-__LINE__, 0x0ebb978b, "247175051", "%.6ld",
-__LINE__, 0xffffffca, "FFFFFFCA", "%X",
-__LINE__, -0x0000003, "-03", "%+0.2d",
-__LINE__, -0x178ff86, "-24706950", "%+d",
-__LINE__, 0x0000003c, " 60", "%7.ld",
-__LINE__, -0x001012d, "-65837", "%.5d",
-__LINE__, 0x03673fd2, "3673fd2", "%.5x",
-__LINE__, -0x001fe74, "-130676", "%#0.6ld",
-__LINE__, 0x004f6226, "4f6226", "%-0x",
-__LINE__, 0xfffffa0f, "fffffa0f", "%7x",
-__LINE__, 0xfffffff8, "fffffff8", "%-.6x",
-__LINE__, -0x0000001, "-1", "%#d",
-__LINE__, 0xffffe43d, "ffffe43d", "%7x",
-__LINE__, 0x00009d47, "0040263", "%7.7ld",
-__LINE__, 0xff0fc79f, "FF0FC79F", "%-4.X",
-__LINE__, 0x2d610907, "2d610907", "%x",
-__LINE__, -0x00002de, "-734", "%04d",
-__LINE__, 0x0000036b, " 36B", "%7.1X",
-__LINE__, 0x00000002, "2", "%.0x",
-__LINE__, -0x1f577b3e, "-525826878", "%d",
-__LINE__, 0x0000002d, "45", "%#ld",
-__LINE__, 0xfffffffb, "fffffffb", "%x",
-__LINE__, -0x0000004, "-4", "%-.0d",
-__LINE__, 0x00016ba4, "16ba4", "%x",
-__LINE__, -0x1ad853d5, "-450384853", "% 0ld",
-__LINE__, 0x00366899, "366899", "%2.x",
-__LINE__, 0x1659158b, "1659158B", "%X",
-__LINE__, 0x000076c7, "76c7", "%x",
-__LINE__, 0x00000674, "674", "%0x",
-__LINE__, 0x016c9d8a, "+23895434", "%+ld",
-__LINE__, 0xfffffc43, "FFFFFC43", "%0X",
-__LINE__, 0xfff249d2, "fff249d2", "%-2.x",
-__LINE__, 0xffffffdd, "ffffffdd", "%5x",
-__LINE__, 0xffffa7ef, "FFFFA7EF", "%0.3X",
-__LINE__, 0x030d4d06, "30d4d06", "%x",
-__LINE__, -0x0e4694b, "-14969163", "%d",
-__LINE__, 0x00000078, "120", "%.3ld",
-__LINE__, -0x16c1273e, "-381757246", "%0d",
-__LINE__, 0xffffd183, "FFFFD183", "% 0X",
-__LINE__, -0x2dfdadd, "-48224989", "%ld",
-__LINE__, -0x5767fe5c, "-1466433116", "%ld",
-__LINE__, 0x01bea036, "29270070", "%#4.3d",
-__LINE__, 0x00000027, "27", "%-x",
-__LINE__, 0x0004d183, "4D183", "%X",
-__LINE__, 0xffdaf9c8, "FFDAF9C8", "%.7X",
-__LINE__, 0xfffffd95, "fffffd95", "%x",
-__LINE__, -0x0059acb, "-367307", "%00.d",
-__LINE__, 0x017d8db4, "17d8db4", "% 05.x",
-__LINE__, 0x0001f084, "001F084", "%5.7X",
-__LINE__, 0x00000006, " 6", "% ld",
-__LINE__, 0x011b0802, "18548738", "%.3ld",
-__LINE__, 0x00000006, " 6", "%#3.d",
-__LINE__, 0xffffffff, "ffffffff", "%6x",
-__LINE__, 0x00000001, "1", "% x",
-__LINE__, 0x00000750, " 01872", "% .5d",
-__LINE__, 0xfffffff9, "fffffff9", "%x",
-__LINE__, -0x00f842c, "-1016876", "%+d",
-__LINE__, -0x001dcf0, "-122096", "%-0d",
-__LINE__, 0x000000c9, "0XC9", "% #3X",
-__LINE__, 0x1e368e86, "1e368e86", "%7x",
-__LINE__, -0x0001157, "-4439", "% 03.4d",
-__LINE__, 0xfff91e87, "FFF91E87", "%3.5X",
-__LINE__, 0x00000006, "6", "%x",
-__LINE__, 0x00000bca, "3018", "%ld",
-__LINE__, 0x00495ff6, "495ff6", "%01.0x",
-__LINE__, -0x0267f7a, "-2523002", "% #5d",
-__LINE__, 0x00000060, "96", "%-d",
-__LINE__, 0x000850c6, "544966", "%#.1d",
-__LINE__, 0x00231457, "231457", "%-6.4X",
-__LINE__, 0x0000000b, "11", "%-d",
-__LINE__, 0x000003bd, "957", "%#d",
-__LINE__, 0xfd51d970, "FD51D970", "%+.7X",
-__LINE__, 0x000007bf, "1983", "%-ld",
-__LINE__, 0x000034b2, "34B2", "%0.X",
-__LINE__, 0x0000c18d, "C18D", "%0.X",
-__LINE__, 0xffffbb83, "ffffbb83", "% 3x",
-__LINE__, 0x000001d0, "0x1d0", "%#x",
-__LINE__, -0x003c784, "-247684", "%#ld",
-__LINE__, 0x0210cffa, "210CFFA", "%X",
-__LINE__, -0x33093a1, "-53515169", "% 0d",
-__LINE__, 0x00000001, " 1", "% #ld",
-__LINE__, 0xffffaa53, "ffffaa53", "%-4.5x",
-__LINE__, 0x2935c056, "691388502", "%1.d",
-__LINE__, -0x0000001, "-1", "%ld",
-__LINE__, 0x000013d1, "0X013D1", "%+#2.5X",
-__LINE__, -0x000035c, "-860", "%-.2d",
-__LINE__, 0x00000000, " ", "%-4.X",
-__LINE__, -0x0000147, "-327", "%d",
-__LINE__, 0x0a317eb0, "171015856", "%.7d",
-__LINE__, 0x00000003, "3", "%ld",
-__LINE__, 0x000001d6, "1d6", "%-x",
-__LINE__, 0x18185214, "404247060", "%-.2ld",
-__LINE__, 0x00574140, "0574140", "%.7X",
-__LINE__, 0x00002ea5, "02ea5", "%.5x",
-__LINE__, 0x00000005, "5", "% x",
-__LINE__, 0xffc47ed6, "ffc47ed6", "%-x",
-__LINE__, 0x0001f5da, "0X1F5DA", "%#X",
-__LINE__, 0xfffffcc9, "fffffcc9", "% x",
-__LINE__, 0x02586c98, "2586C98", "%X",
-__LINE__, -0x0000036, "-54", "% ld",
-__LINE__, 0x00064b57, "412503", "%1.5d",
-__LINE__, -0x0000007, "-7", "%#0.0ld",
-__LINE__, 0x00023a03, "145923", "%ld",
-__LINE__, -0x0000065, "-101", "%+#d",
-__LINE__, 0x00000208, "208", "%X",
-__LINE__, 0x00e97728, "15300392", "%-ld",
-__LINE__, 0x0000030a, "+778", "%+d",
-__LINE__, 0xf4d7deee, "F4D7DEEE", "%+X",
-__LINE__, -0x000009a, "-154", "%+.3ld",
-__LINE__, 0x000002c0, "+704", "%+ld",
-__LINE__, 0x0067ec23, "67ec23", "%x",
-__LINE__, 0x005ca7fc, "+6072316", "%+d",
-__LINE__, 0xfffff5f1, "fffff5f1", "%x",
-__LINE__, 0x00000601, " 0X601", "%#7.2X",
-__LINE__, -0x0000057, "-87", "% ld",
-__LINE__, -0x0000078, " -120", "%7.d",
-__LINE__, -0x000001f, "-31 ", "%-6d",
-__LINE__, 0x0160c000, "23117824", "%ld",
-__LINE__, -0x0000007, "-7", "%0ld",
-__LINE__, 0xfffffffe, "fffffffe", "%+x",
-__LINE__, 0x5b6ef898, "5b6ef898", "%+0x",
-__LINE__, 0x0009bfb6, "638902", "%d",
-__LINE__, -0x0000145, " -325", "%#6.0d",
-__LINE__, -0x508c048, "-84459592", "%-5.ld",
-__LINE__, 0x00000002, " 0x2", "% #4x",
-__LINE__, 0x0001486e, "84078", "%#d",
-__LINE__, 0x006ac76a, "6997866", "%.6d",
-__LINE__, 0xffffff98, "FFFFFF98", "%X",
-__LINE__, 0xfffffe08, "fffffe08", "%6.x",
-__LINE__, -0x24ef47e, "-38728830", "%1.6ld",
-__LINE__, 0x39d1b2db, "39D1B2DB", "% X",
-__LINE__, 0xfffc9ce2, "0xfffc9ce2", "%#x",
-__LINE__, 0x59485e14, "1497914900", "%#4ld",
-__LINE__, 0x000022eb, "22EB", "%3.X",
-__LINE__, 0xfa410352, "FA410352", "%-X",
-__LINE__, -0x4a342f0, "-77808368", "% ld",
-__LINE__, 0xef5825a4, "EF5825A4", "%.6X",
-__LINE__, 0x01b0185a, "0x1b0185a", "% #x",
-__LINE__, -0x0004290, "-17040", "%.3d",
-__LINE__, -0x10f88659, "-284722777", "%+6.2ld",
-__LINE__, 0x00003216, "12822", "%-d",
-__LINE__, 0x4a31a219, "1244766745", "%d",
-__LINE__, 0xffffffb5, "FFFFFFB5", "%-X",
-__LINE__, 0x0000d586, "D586", "%-2.X",
-__LINE__, 0x00008496, "33942", "%1.d",
-__LINE__, -0x0000011, "-17", "%1ld",
-__LINE__, 0x0000003c, "3C", "%2.X",
-__LINE__, 0xfffffffe, "FFFFFFFE", "%.3X",
-__LINE__, 0x0000152a, "152A", "%X",
-__LINE__, 0xfffe876e, "FFFE876E", "%X",
-__LINE__, -0x0003874, "-14452", "%-ld",
-__LINE__, -0x004918a, "-299402", "%#.6d",
-__LINE__, -0x000000c, "-12", "%-d",
-__LINE__, 0xffffd812, "FFFFD812", "%+X",
-__LINE__, -0x000000c, "-12", "%0d",
-__LINE__, -0x0000229, "-553", "%0d",
-__LINE__, 0x00002ab8, "2AB8", "%4.X",
-__LINE__, 0x0000004b, "+75", "%+ld",
-__LINE__, 0x001c3178, " 1847672", "% ld",
-__LINE__, -0x0000006, "-6", "%.0ld",
-__LINE__, 0x0003be65, "245349", "%ld",
-__LINE__, -0x0000001, "-1", "%#1ld",
-__LINE__, 0x0000007f, "+127", "%+ld",
-__LINE__, 0x0000020e, "526 ", "%-5ld",
-__LINE__, 0x00000002, "2", "%d",
-__LINE__, 0x03bd0873, "0X3BD0873", "%#X",
-__LINE__, 0x00093a52, "604754", "%-2d",
-__LINE__, -0x00823fc, "-0533500", "%+.7ld",
-__LINE__, 0x00000000, " ", "%4.X",
-__LINE__, -0x0000001, "-1", "%ld",
-__LINE__, 0xfff09ede, "fff09ede", "%-x",
-__LINE__, 0x01e28c24, "31624228", "%ld",
-__LINE__, 0x00001dcc, "1DCC", "%X",
-__LINE__, -0x0f0ea0d, "-15788557", "%-00.ld",
-__LINE__, 0xffff73a1, "FFFF73A1", "%X",
-__LINE__, -0x0004040, "-16448", "%+#d",
-__LINE__, 0x0073b158, "0x73b158", "%#7x",
-__LINE__, 0xfffff8ff, "FFFFF8FF", "% 5X",
-__LINE__, -0x0000004, "-4", "%0d",
-__LINE__, 0xffff56a3, "ffff56a3", "%1.6x",
-__LINE__, -0x0000041, "-65", "%0d",
-__LINE__, 0x00000009, "+0000009", "%+2.7d",
-__LINE__, 0xffffe13d, "0XFFFFE13D", "%+#2.X",
-__LINE__, -0x00002ce, "-00718", "%.5ld",
-__LINE__, 0xffc53e28, "ffc53e28", "%03.4x",
-__LINE__, 0x00000005, "0X5", "%#X",
-__LINE__, 0x00000004, "4", "%x",
-__LINE__, 0xe21b35eb, "e21b35eb", "%-x",
-__LINE__, -0x0000098, "-152", "%-ld",
-__LINE__, 0xffffff81, "FFFFFF81", "%2X",
-__LINE__, 0x00000003, "00003", "%.5ld",
-__LINE__, 0xfffffffc, "fffffffc", "%+x",
-__LINE__, 0x000491f5, "299509", "%1.ld",
-__LINE__, 0xf06bfd7d, "F06BFD7D", "%X",
-__LINE__, -0x0000006, "-6", "%0d",
-__LINE__, -0x0a4af7d, "-10792829", "%-0d",
-__LINE__, -0x11a74ef, "-18511087", "%ld",
-__LINE__, 0x2dc95e17, "768171543", "%-1.d",
-__LINE__, -0x0000001, "-1", "%#ld",
-__LINE__, 0x00000033, "51", "%-#d",
-__LINE__, 0x002d0219, "2949657", "%ld",
-__LINE__, 0xfffffffd, "FFFFFFFD", "%2.4X",
-__LINE__, 0x00000f20, "+3872", "%+ld",
-__LINE__, -0x0000047, "-071", "%4.3ld",
-__LINE__, 0x00000010, " 16", "%6d",
-__LINE__, 0x00000000, "0", "%0d",
-__LINE__, 0xffffff57, "FFFFFF57", "%X",
-__LINE__, -0x0000700, "-1792", "%-#d",
-__LINE__, -0x0000064, "-100", "%-ld",
-__LINE__, 0xff26d49a, "FF26D49A", "%-0X",
-__LINE__, -0x0000006, "-6", "%.1ld",
-__LINE__, 0x1391edc5, "1391edc5", "%.1x",
-__LINE__, 0x0000014a, "330", "%-#ld",
-__LINE__, 0x07ecd1e1, "7ecd1e1", "%6x",
-__LINE__, -0xa2b8898, "-170625176", "%3.d",
-__LINE__, 0x00035287, "0x35287", "%#.0x",
-__LINE__, 0x00000000, "00000", "%0.5X",
-__LINE__, -0x0000153, "-339", "%d",
-__LINE__, 0x0000ad6e, " 44398", "% 0.d",
-__LINE__, 0x00000001, "1", "%-X",
-__LINE__, -0x000000d, "-13 ", "%-6.2d",
-__LINE__, -0x01bff8a, "-1834890", "%d",
-__LINE__, 0x000a0fa8, "+659368", "%+ld",
-__LINE__, 0xac044dc0, "ac044dc0", "%.0x",
-__LINE__, 0x0003a729, "239401", "%ld",
-__LINE__, -0x00004f0, "-1264", "%+ld",
-__LINE__, 0x00000000, "0", "%x",
-__LINE__, 0x00000012, "12", "% x",
-__LINE__, 0xffff770b, "ffff770b", "%7.1x",
-__LINE__, 0xd7458572, "d7458572", "%x",
-__LINE__, 0x01f1b4f9, "1f1b4f9", "% 0x",
-__LINE__, 0xfffb2198, "0XFFFB2198", "% #1.X",
-__LINE__, 0x00ef6189, " 15688073", "% ld",
-__LINE__, -0x3f0ae63, "-66104931", "% #d",
-__LINE__, -0x0006075, "-24693", "%ld",
-__LINE__, 0x000000a1, "161", "%d",
-__LINE__, 0xfffffffc, "fffffffc", "%3.2x",
-__LINE__, 0xff6b4125, "FF6B4125", "%+5.X",
-__LINE__, 0x00000001, " 1", "%6.d",
-__LINE__, -0x0000001, "-1", "%+0d",
-__LINE__, -0x000096c, "-2412", "%0.4d",
-__LINE__, 0x00039c6f, "236655", "%.0d",
-__LINE__, 0x3625286c, "908404844", "%.1d",
-__LINE__, 0xfffffffa, "fffffffa", "%x",
-__LINE__, 0x00000000, "0", "%X",
-__LINE__, 0x00c34353, "12796755", "%#.4d",
-__LINE__, 0x000002df, "735", "%ld",
-__LINE__, 0xffff38fa, "FFFF38FA", "%5.1X",
-__LINE__, -0x000002a, "-42", "%0.d",
-__LINE__, 0x0000077e, "1918", "%ld",
-__LINE__, 0x000001f7, "503", "%ld",
-__LINE__, 0x00000004, "4", "%ld",
-__LINE__, 0x0021fb02, "2226946", "%d",
-__LINE__, 0x007c858d, "8160653", "%-0d",
-__LINE__, -0x0000109, "-265", "%.0d",
-__LINE__, 0xfffffffa, "fffffffa", "% x",
-__LINE__, 0x0097932d, "97932d", "%+x",
-__LINE__, 0xfffbbd03, "fffbbd03", "%-.5x",
-__LINE__, -0x0000005, "-5", "%0d",
-__LINE__, 0x03ee3a95, "65944213", "%ld",
-__LINE__, -0x0000002, " -00002", "%7.5d",
-__LINE__, 0xea1a4e54, "EA1A4E54", "%X",
-__LINE__, -0x000a9d6, "-43478", "%+d",
-__LINE__, -0x0fd8d65, "-16616805", "%5ld",
-__LINE__, 0x00000001, "1", "%-d",
-__LINE__, 0x00000072, "72", "%2.X",
-__LINE__, 0xffffff94, "FFFFFF94", "%X",
-__LINE__, 0x00000d2a, "D2A", "%+X",
-__LINE__, 0xffff614f, "ffff614f", "%x",
-__LINE__, -0x0000018, "-24", "%ld",
-__LINE__, 0x0000003b, "059", "%2.3d",
-__LINE__, 0x0000001a, "1A", "%0X",
-__LINE__, -0x0000109, "-265", "%02ld",
-__LINE__, 0x00000f9d, "3997", "%#1d",
-__LINE__, 0x0000001b, "1b", "%x",
-__LINE__, 0xffffff07, "ffffff07", "%x",
-__LINE__, 0xfff1a425, "0xfff1a425", "%#x",
-__LINE__, 0x00000005, "5", "%-1d",
-__LINE__, -0x53a6efd, "-87715581", "%ld",
-__LINE__, 0x042f37db, "42F37DB", "%6.X",
-__LINE__, 0x00053bd5, "+342997", "%+5ld",
-__LINE__, 0xffffffff, "ffffffff", "% x",
-__LINE__, 0xffffffef, "FFFFFFEF", "%6.X",
-__LINE__, -0x10ec29a, "-17744538", "%+2.d",
-__LINE__, 0x01dcc901, "1dcc901", "%x",
-__LINE__, 0x0007dc68, "515176", "%-3.d",
-__LINE__, -0x0000062, "-0098", "%#2.4d",
-__LINE__, 0x00000000, " ", "%3.0X",
-__LINE__, -0x00000de, "-222", "%ld",
-__LINE__, 0x000c1fb8, "C1FB8", "%0X",
-__LINE__, 0x0005bf58, "5BF58", "%X",
-__LINE__, -0x000dd1b, "-56603", "%-03.1d",
-__LINE__, 0x00000b14, "B14", "%+3.X",
-__LINE__, 0x00000799, "799", "%-x",
-__LINE__, 0xfffffffa, "fffffffa", "%x",
-__LINE__, 0x00000003, "0x00003", "% #7.5x",
-__LINE__, -0x002b9f1, "-178673", "%+d",
-__LINE__, -0x001b817, "-112663", "%0d",
-__LINE__, 0xf6f98533, "f6f98533", "%.1x",
-__LINE__, 0x00338ffc, "3379196", "%d",
-__LINE__, 0x0409e9b5, "0X409E9B5", "%#X",
-__LINE__, 0x00b8e98e, " 12118414", "% 0d",
-__LINE__, -0x002a8f6, "-174326", "%ld",
-__LINE__, 0x13bb9722, "331061026", "%0d",
-__LINE__, 0x00063c71, "63c71", "%x",
-__LINE__, 0xfffffe37, "FFFFFE37", "%.1X",
-__LINE__, 0xffff7b3e, "ffff7b3e", "%+.1x",
-__LINE__, 0x005eeab1, "5eeab1", "%+x",
-__LINE__, 0xffc69e99, "ffc69e99", "%x",
-__LINE__, -0x000005c, " -92", "%5ld",
-__LINE__, 0x07d8fa8a, "7d8fa8a", "%x",
-__LINE__, 0x00030e0a, "200202", "%-4.1d",
-__LINE__, 0x00001dc1, "1DC1", "%.0X",
-__LINE__, 0x00000008, "8", "%0ld",
-__LINE__, -0x01b5397, "-1790871", "%3.d",
-__LINE__, 0x27fbb4b5, "27fbb4b5", "%x",
-__LINE__, -0xe3fdcfc, "-239066364", "%4ld",
-__LINE__, 0x0008bcb1, "8bcb1", "%0x",
-__LINE__, 0xffff039e, "ffff039e", "%.6x",
-__LINE__, 0x000d0bd4, "d0bd4", "%-x",
-__LINE__, 0x00000000, "+0", "%+d",
-__LINE__, -0x2a49ea4, "-44342948", "%1d",
-__LINE__, -0x0000055, "-85", "%0d",
-__LINE__, -0x0000a05, "-2565", "%3.3ld",
-__LINE__, -0x000000b, "-11 ", "%-4d",
-__LINE__, 0xfff30444, "FFF30444", "%7.X",
-__LINE__, 0x0000003f, "63", "%-0d",
-__LINE__, 0x00046779, "46779", "%X",
-__LINE__, 0x000028d7, " 0X28D7", "%#7.X",
-__LINE__, 0x00000019, " 19", "%5x",
-__LINE__, 0x0032291d, "3287325", "%2.ld",
-__LINE__, 0x00057afa, "57AFA", "%X",
-__LINE__, 0xfffe8c64, "fffe8c64", "%3.4x",
-__LINE__, -0x624110d6, "-1648431318", "%+6d",
-__LINE__, 0x0000001a, " 26", "% 5.d",
-__LINE__, 0xfffffffd, "FFFFFFFD", "%6.X",
-__LINE__, 0x00199490, "1676432", "%-1d",
-__LINE__, -0xfff8265, "-268403301", "%-0ld",
-__LINE__, 0x0000000e, "e", "%-x",
-__LINE__, 0x00c38aec, "c38aec", "%x",
-__LINE__, -0x00658f4, "-415988", "%#ld",
-__LINE__, 0x0066ac4e, "6728782", "%0d",
-__LINE__, 0xc4a808d5, "c4a808d5", "%x",
-__LINE__, 0x00000000, " 0", "%6.1x",
-__LINE__, 0x00066d24, "66d24", "%x",
-__LINE__, 0x00002117, "2117", "%X",
-__LINE__, 0xfe06fdf4, "FE06FDF4", "%0X",
-__LINE__, 0xfffffff9, "fffffff9", "%x",
-__LINE__, 0x1c6bb795, "+476821397", "%+d",
-__LINE__, 0xfffffba4, "FFFFFBA4", "%X",
-__LINE__, 0xfffd7d44, "fffd7d44", "%0x",
-__LINE__, 0x0019dd17, "1694999", "%d",
-__LINE__, 0x6475851e, "0x6475851e", "% #7.x",
-__LINE__, -0x00330d5, "-209109", "%0ld",
-__LINE__, 0x009f53f7, "09F53F7", "%+6.7X",
-__LINE__, -0x00172f9, " -94969", "%7.5ld",
-__LINE__, 0xffffffdc, "FFFFFFDC", "%X",
-__LINE__, -0x013bdec, "-1293804", "%+#2ld",
-__LINE__, 0xfff845c0, "fff845c0", "%+7.x",
-__LINE__, -0x0fbe712, "-16508690", "%.7d",
-__LINE__, 0xffffe13f, "ffffe13f", "%x",
-__LINE__, 0xbbc19951, "BBC19951", "%-4X",
-__LINE__, -0x28d6d1b, "-42822939", "%#d",
-__LINE__, -0x93cda6b, "-154983019", "%-d",
-__LINE__, 0xffc93342, "FFC93342", "%7.X",
-__LINE__, 0x072ac8b3, " 120244403", "% ld",
-__LINE__, 0xfff8d17b, "FFF8D17B", "% X",
-__LINE__, 0x00000da5, "DA5", "%0.X",
-__LINE__, 0x055ad3ac, "0x55ad3ac", "%#1x",
-__LINE__, 0x00000e5a, " 3674", "% .4ld",
-__LINE__, 0xffffff79, "FFFFFF79", "%+X",
-__LINE__, 0xffffe167, "ffffe167", "%+5x",
-__LINE__, 0x0000fa50, "0064080", "%.7ld",
-__LINE__, 0x00000001, "1", "%-d",
-__LINE__, 0xfffffffe, "fffffffe", "%x",
-__LINE__, 0x000009ac, " 2476", "% #2.ld",
-__LINE__, 0x00000e78, "0003704", "%.7ld",
-__LINE__, -0x000dfc3, "-57283", "%6.d",
-__LINE__, 0x00000ee0, "EE0", "%0X",
-__LINE__, -0x293703b3, "-691471283", "%ld",
-__LINE__, 0x000073e8, " 73e8", "%6x",
-__LINE__, 0xffffdffd, "ffffdffd", "%5.5x",
-__LINE__, 0x00000004, "4", "%+00.x",
-__LINE__, 0x00000008, "0X8", "%#X",
-__LINE__, 0x0003044c, "3044c", "%0x",
-__LINE__, 0xffc2095e, "FFC2095E", "%0X",
-__LINE__, 0x00000aac, "0002732", "%-.7ld",
-__LINE__, 0xffffff79, "FFFFFF79", "%+1.X",
-__LINE__, 0x53a0f94a, " 1403058506", "% 2.4ld",
-__LINE__, 0x000e928d, "e928d", "%x",
-__LINE__, 0x0024127a, "2364026", "%5.d",
-__LINE__, 0x000f7c1c, " 1014812", "% 2.d",
-__LINE__, -0x000003d, "-61 ", "%-#4ld",
-__LINE__, -0x0000122, "-290", "%+ld",
-__LINE__, 0x00000006, "+6", "%+0d",
-__LINE__, 0x00000129, " 000129", "%7.6X",
-__LINE__, 0x15d873e5, " 366506981", "% 5.7d",
-__LINE__, 0x00000001, "1", "%d",
-__LINE__, 0x038d6110, "+59597072", "%+d",
-__LINE__, 0x0f46ccc3, "256298179", "%-1.4d",
-__LINE__, 0xfe434d21, "fe434d21", "%x",
-__LINE__, -0x179797d7, "-395810775", "%d",
-__LINE__, 0xe35807bf, "e35807bf", "%x",
-__LINE__, 0x00000003, " +3", "%+7d",
-__LINE__, 0x017e699e, "25061790", "%#ld",
-__LINE__, -0x0000029, "-41", "%d",
-__LINE__, 0xffffff11, "ffffff11", "%1.x",
-__LINE__, -0x0001bf6, "-7158", "%+0ld",
-__LINE__, 0xffffff4b, "FFFFFF4B", "%4X",
-__LINE__, -0x0000040, "-64", "%ld",
-__LINE__, 0x000034d6, "+13526", "%+ld",
-__LINE__, 0xffffffa7, "ffffffa7", "%x",
-__LINE__, 0xfffffe8e, "fffffe8e", "%+.3x",
-__LINE__, 0x00000000, "0", "%0.1d",
-__LINE__, -0x007cdf1, "-511473", "%ld",
-__LINE__, 0xfffffeef, "FFFFFEEF", "%-X",
-__LINE__, 0x00002d91, "2d91", "%x",
-__LINE__, -0x000025b, "-603", "%#ld",
-__LINE__, -0x000001b, "-27", "%-ld",
-__LINE__, 0x042b6752, "42B6752", "%+X",
-__LINE__, -0x75afb0a6, "-1974448294", "% ld",
-__LINE__, -0x0000001, "-1", "%ld",
-__LINE__, 0x00000542, " 1346", "%6d",
-__LINE__, -0x0000010, "-16", "%+0d",
-__LINE__, 0xfffed8f7, "FFFED8F7", "%5.X",
-__LINE__, 0x0541852e, "541852e", "% 2.x",
-__LINE__, 0xff22aec3, "ff22aec3", "% .1x",
-__LINE__, 0x5e34b745, "1580513093", "%ld",
-__LINE__, 0xfffffff3, "fffffff3", "%x",
-__LINE__, 0x0eda7b86, "+249199494", "%+.3d",
-__LINE__, 0xffffe40f, "ffffe40f", "%+x",
-__LINE__, -0x0003484, "-13444", "%-1.5ld",
-__LINE__, 0x0000334b, " 13131", "%6.ld",
-__LINE__, -0x0000149, "-329", "%ld",
-__LINE__, 0x00000001, " 001", "% 5.3x",
-__LINE__, 0xffeaa035, "ffeaa035", "%+3.5x",
-__LINE__, 0x00211dff, "2170367", "%ld",
-__LINE__, 0x007e91f4, "7e91f4", "%x",
-__LINE__, 0xfffffffc, "0xfffffffc", "%+#5x",
-__LINE__, 0xfffffffc, "FFFFFFFC", "%6.X",
-__LINE__, 0x0156a9b5, "156a9b5", "%x",
-__LINE__, 0xfffffe58, "fffffe58", "%+x",
-__LINE__, 0xffff8c66, "FFFF8C66", "%.0X",
-__LINE__, 0x00000000, "0", "%d",
-__LINE__, 0x00000005, " 5", "%7.d",
-__LINE__, -0x0000002, "-2", "%ld",
-__LINE__, 0x000076b9, " 30393", "% ld",
-__LINE__, 0x00003824, "3824", "%4X",
-__LINE__, 0x00000cdf, " CDF", "% 7X",
-__LINE__, 0x017c9e8f, "17C9E8F", "%-X",
-__LINE__, -0x20f582d, "-34560045", "%-.5d",
-__LINE__, 0x0000732e, " 29486", "% 7.ld",
-__LINE__, 0xffffffff, "FFFFFFFF", "%+0X",
-__LINE__, 0xf379a4a2, "F379A4A2", "% .7X",
-__LINE__, -0x0000028, "-40", "%-d",
-__LINE__, 0xe73cf79e, "e73cf79e", "%x",
-__LINE__, 0x00000002, " 2", "%7ld",
-__LINE__, -0x00029b1, "-10673", "%-#1.ld",
-__LINE__, -0x0002a58, "-10840", "%3.d",
-__LINE__, 0x00000002, "2", "%-X",
-__LINE__, 0xfffffffc, "FFFFFFFC", "%X",
-__LINE__, -0x000003a, " -58", "%5ld",
-__LINE__, 0x0245ef3b, "245ef3b", "%.3x",
-__LINE__, 0x00026cca, "158922", "%-06.3ld",
-__LINE__, 0x01016fd3, "16871379", "%-d",
-__LINE__, 0x000016fc, "5884", "%0ld",
-__LINE__, -0x00007fb, " -2043", "%7.3d",
-__LINE__, 0xfff73d3c, "fff73d3c", "%0x",
-__LINE__, -0x0000110, "-272", "% 04.3d",
-__LINE__, 0x0000000e, " 014", "% 04ld",
-__LINE__, -0x0000039, "-57", "%.0ld",
-__LINE__, 0x00000c95, "c95", "%0x",
-__LINE__, 0xffff3b2e, "ffff3b2e", "%x",
-__LINE__, 0xfffffffe, "FFFFFFFE", "%X",
-__LINE__, 0x00000015, "21", "%.1d",
-__LINE__, 0x0000000c, "+12", "%+ld",
-__LINE__, 0x00000000, "0", "%+X",
-__LINE__, 0xfffc9a14, "fffc9a14", "%-.5x",
-__LINE__, 0x0000003c, "60", "%.2ld",
-__LINE__, -0x0000023, " -35", "%6.d",
-__LINE__, 0x00000740, "1856", "%ld",
-__LINE__, 0x00000160, "160", "% 3.X",
-__LINE__, 0x00000006, " 6", "%5.X",
-__LINE__, -0x0000677, "-1655", "%.3ld",
-__LINE__, 0x12709c7e, "12709C7E", "%.7X",
-__LINE__, 0x0000090f, "+2319", "%+#d",
-__LINE__, 0xffffffe0, "0xffffffe0", "%#4.1x",
-__LINE__, 0x00132ce0, "1256672", "%ld",
-__LINE__, 0x00000059, "59", "%+X",
-__LINE__, -0x0000017, "-23", "%0d",
-__LINE__, -0x01fade6, "-2076134", "%-4.3ld",
-__LINE__, 0x000df3fa, "914426", "%.5ld",
-__LINE__, 0xfffffd0f, "fffffd0f", "%7x",
-__LINE__, -0x000c212, "-49682", "%0.1ld",
-__LINE__, 0xffff8bcb, "FFFF8BCB", "%.3X",
-__LINE__, 0x0000000a, "a", "% x",
-__LINE__, 0x00000021, "21", "%x",
-__LINE__, -0x0000040, "-64", "% 1ld",
-__LINE__, 0x00000009, " 9", "%6.ld",
-__LINE__, -0x0000d67, "-3431", "% 5.3d",
-__LINE__, 0x03a85f1b, "61366043", "%ld",
-__LINE__, 0x00000035, "000053", "%0.6d",
-__LINE__, 0xfffda5cb, "fffda5cb", "%+x",
-__LINE__, 0xffffff78, "FFFFFF78", "%-7.0X",
-__LINE__, 0xfffffd6d, "fffffd6d", "%7.x",
-__LINE__, 0xfffffc08, "fffffc08", "%7.3x",
-__LINE__, 0x00003335, " 13109", "% #d",
-__LINE__, -0x0000002, " -2", "%5.d",
-__LINE__, -0x13767a48, "-326531656", "%+ld",
-__LINE__, 0x00000be5, "3045", "%4.0ld",
-__LINE__, 0xfffdb28c, "FFFDB28C", "%X",
-__LINE__, 0x00127118, "1208600", "%ld",
-__LINE__, 0x00000086, " 134", "% ld",
-__LINE__, 0x0002214c, "2214c", "%+x",
-__LINE__, 0x0000a0c2, " a0c2", "%5.0x",
-__LINE__, -0x000007c, "-124", "%ld",
-__LINE__, 0x0000012a, "00298", "%3.5d",
-__LINE__, 0xfd4f1257, "FD4F1257", "%+2.X",
-__LINE__, 0xffffd8aa, "ffffd8aa", "%5x",
-__LINE__, -0x00000a7, "-167", "%+ld",
-__LINE__, -0x0009c69, "-40041", "%0.0ld",
-__LINE__, 0x02230418, "35849240", "%-0.6ld",
-__LINE__, 0x00000000, " 0", "%6x",
-__LINE__, 0xfffff184, "fffff184", "%02.5x",
-__LINE__, -0x0ae967b, "-11441787", "%d",
-__LINE__, 0x0015de3a, "1433146", "%-5.3d",
-__LINE__, -0x0071e93, "-466579", "%1.ld",
-__LINE__, 0xfffff8bd, "fffff8bd", "%+x",
-__LINE__, -0x00000e4, "-228", "%+ld",
-__LINE__, 0x000001d8, " 472", "% .3ld",
-__LINE__, 0x00315faa, "315faa", "%-0x",
-__LINE__, 0x00000e59, "e59", "%0x",
-__LINE__, -0x0000005, "-5", "%ld",
-__LINE__, 0x000018ec, "6380", "%ld",
-__LINE__, 0xfffffff9, "fffffff9", "%5.2x",
-__LINE__, -0xe7cfd39, "-243072313", "%-d",
-__LINE__, 0x0002c30b, "2C30B", "%1.2X",
-__LINE__, 0x0000007a, "7A", "%X",
-__LINE__, 0xf604ecb2, "F604ECB2", "%2X",
-__LINE__, -0x05f602c, "-6250540", "%d",
-__LINE__, 0xffff9c86, "ffff9c86", "%2.x",
-__LINE__, -0x00d7f55, "-884565", "%#d",
-__LINE__, 0xd2a37824, "D2A37824", "%4X",
-__LINE__, 0x00000000, "", "%-.0x",
-__LINE__, 0x000d4b51, "0d4b51", "%3.6x",
-__LINE__, 0x000ecd97, "ecd97", "% x",
-__LINE__, -0x0000018, "-024", "%+04ld",
-__LINE__, -0x009f292, "-651922", "%ld",
-__LINE__, -0x0002da9, "-11689", "%-0ld",
-__LINE__, -0x000a218, "-41496", "%4.5d",
-__LINE__, 0xffff85ac, "FFFF85AC", "% 04.X",
-__LINE__, -0x0d9ffbe, "-14286782", "%0d",
-__LINE__, 0xfb18cc8e, "fb18cc8e", "%x",
-__LINE__, 0xffffe5d3, "FFFFE5D3", "%-X",
-__LINE__, 0x00000000, "0", "%x",
-__LINE__, -0x0000006, "-6", "% d",
-__LINE__, 0x0002fc62, "2fc62", "% 03.x",
-__LINE__, 0x00000000, "00", "%.2d",
-__LINE__, -0x00000fd, " -253", "%6ld",
-__LINE__, -0x000000b, "-11", "%d",
-__LINE__, -0x00042a3, "-17059", "% 6d",
-__LINE__, 0x00000002, "2", "% X",
-__LINE__, -0x61ead93e, "-1642780990", "%-0d",
-__LINE__, 0xf2e61f6d, "f2e61f6d", "%-.4x",
-__LINE__, 0xffd31b93, "ffd31b93", "%x",
-__LINE__, -0x0000008, "-8", "%ld",
-__LINE__, 0xffffffff, "ffffffff", "%00x",
-__LINE__, 0x000000fb, "+000251", "%+2.6d",
-__LINE__, 0x00000015, " 15", "%4.X",
-__LINE__, 0x06ec6d96, "6EC6D96", "%+2.X",
-__LINE__, 0xffff1df7, "0xffff1df7", "% #1x",
-__LINE__, -0x000004b, "-75", "%-ld",
-__LINE__, 0x00000008, "8", "%#.0d",
-__LINE__, 0x00001355, "4949", "%3.4ld",
-__LINE__, -0x00000f7, "-247", "%d",
-__LINE__, 0x0000001f, "31", "%.2ld",
-__LINE__, 0x0000d556, "D556", "%-X",
-__LINE__, 0xffffd5a5, "ffffd5a5", "% x",
-__LINE__, -0x0000e34, "-3636", "%#d",
-__LINE__, -0x0000007, "-7", "%d",
-__LINE__, 0x01ba10a4, "1ba10a4", "%x",
-__LINE__, 0xfffff759, "FFFFF759", "% X",
-__LINE__, -0x80d0adb, "-135072475", "%d",
-__LINE__, 0x0002bf61, "2bf61", "%x",
-__LINE__, 0xffff008b, "FFFF008B", "%-7X",
-__LINE__, 0x00000e72, "E72", "%X",
-__LINE__, -0x00000ea, "-234", "%0ld",
-__LINE__, -0x0007b9d, "-0031645", "%0.7ld",
-__LINE__, 0x0001baaa, "0X1BAAA", "%#4X",
-__LINE__, 0x0000a57f, " a57f", "%6.x",
-__LINE__, -0x21a73726, "-564606758", "%ld",
-__LINE__, 0x06f45c9f, "0x6f45c9f", "%#.3x",
-__LINE__, 0x00018e5d, "101981", "%-d",
-__LINE__, 0x0001e69a, "124570", "%-d",
-__LINE__, -0x0000d26, " -3366", "% 07.d",
-__LINE__, 0x00000000, "+", "%+0.ld",
-__LINE__, 0x00003916, "14614", "%ld",
-__LINE__, 0xfffffd8f, "fffffd8f", "%-3.x",
-__LINE__, 0x00000011, "11", "%x",
-__LINE__, 0x000000e7, "E7", "%X",
-__LINE__, 0xfdf9d89b, "FDF9D89B", "%X",
-__LINE__, 0x00000a7c, "a7c", "%x",
-__LINE__, 0x0000003f, "00003F", "%.6X",
-__LINE__, 0xffffe729, "FFFFE729", "%X",
-__LINE__, 0xfffffffe, "fffffffe", "% .6x",
-__LINE__, -0x0000a4b, "-2635", "%+d",
-__LINE__, 0xffffff50, "ffffff50", "%0.7x",
-__LINE__, 0xfaf57e8b, "faf57e8b", "% 4.x",
-__LINE__, -0x0000056, "-86", "%ld",
-__LINE__, 0x08ed2a4d, "8ed2a4d", "%4x",
-__LINE__, 0xff8d9081, "FF8D9081", "%+0.X",
-__LINE__, 0x002730a1, "2568353", "%4d",
-__LINE__, 0xffff9564, "ffff9564", "%x",
-__LINE__, -0x0000006, " -6", "%4ld",
-__LINE__, -0x19890310, "-428409616", "%0ld",
-__LINE__, 0xd2ce636c, "d2ce636c", "%+x",
-__LINE__, -0x00001fe, "-510", "%d",
-__LINE__, 0x00000006, "0000006", "%+0.7x",
-__LINE__, 0xffffffc2, "0XFFFFFFC2", "%-#.5X",
-__LINE__, -0x00000fd, "-253", "%+d",
-__LINE__, 0x000216aa, "0x216aa", "%#x",
-__LINE__, 0xffe36c66, "ffe36c66", "%x",
-__LINE__, 0x00000002, "2", "%x",
-__LINE__, -0x0000025, "-37", "% d",
-__LINE__, 0x0000007e, "126", "%d",
-__LINE__, 0x0003c1f9, "+246265", "%+ld",
-__LINE__, 0x00000001, "1", "%ld",
-__LINE__, -0x0000001, "-1", "%ld",
-__LINE__, -0x00539e7, "-342503", "%06.ld",
-__LINE__, 0x00000d42, " 3394", "%#6.ld",
-__LINE__, 0xf73b7c4e, "F73B7C4E", "%X",
-__LINE__, 0x00000022, "22", "%.1x",
-__LINE__, 0xffffa883, "FFFFA883", "%X",
-__LINE__, 0x016ec247, "16ec247", "%x",
-__LINE__, 0x00000019, "19", "%+X",
-__LINE__, 0x0000665a, "665A", "% 2.X",
-__LINE__, 0xfffffffc, "FFFFFFFC", "%-5.X",
-__LINE__, 0x008e3fbc, "8E3FBC", "%X",
-__LINE__, 0xfffffffa, "FFFFFFFA", "%X",
-__LINE__, 0x1b806597, "461399447", "%.2d",
-__LINE__, 0x00000366, "0000870", "%#1.7ld",
-__LINE__, 0x0001d92e, "1d92e", "%x",
-__LINE__, 0x000104ce, "104CE", "%-X",
-__LINE__, 0xfffffe4c, "fffffe4c", "%x",
-__LINE__, 0x000000e9, "E9", "%X",
-__LINE__, 0x000a855c, " 689500", "% d",
-__LINE__, 0x00000075, "75", "% X",
-__LINE__, -0x0000026, "-38", "%ld",
-__LINE__, 0xfffff169, "fffff169", "%-04.2x",
-__LINE__, 0xffffff6f, "ffffff6f", "%x",
-__LINE__, 0x00000003, "0x3", "%#x",
-__LINE__, 0x00623bab, "6437803", "%.0d",
-__LINE__, -0x2260224c, "-576725580", "%ld",
-__LINE__, 0xe7e7a998, "E7E7A998", "%.1X",
-__LINE__, 0x00000005, "5", "%X",
-__LINE__, 0x0000b560, "0xb560", "%#x",
-__LINE__, 0xfe11854d, "fe11854d", "%-.5x",
-__LINE__, 0x00190014, "1638420", "%ld",
-__LINE__, 0x0001d22a, "0X1D22A", "%-#X",
-__LINE__, 0x00000c16, "c16", "%2x",
-__LINE__, 0x00000d1a, "3354", "%#d",
-__LINE__, 0x000165f6, "91638", "%d",
-__LINE__, 0xfffff557, "0XFFFFF557", "%#X",
-__LINE__, 0x00000588, " 588", "%07.X",
-__LINE__, 0xf4a72708, "f4a72708", "%x",
-__LINE__, 0xfff1cba9, "0xfff1cba9", "% #2.5x",
-__LINE__, 0x000333a4, "209828", "%d",
-__LINE__, 0x0000179b, "179B", "% 2.X",
-__LINE__, 0x00000460, "1120", "%0ld",
-__LINE__, 0xffffff89, "FFFFFF89", "%X",
-__LINE__, -0x0000012, "-18", "%ld",
-__LINE__, 0x00004fe0, "20448", "%0.d",
-__LINE__, 0x00532e77, "532e77", "%00.x",
-__LINE__, 0xf7b92efe, "f7b92efe", "%0x",
-__LINE__, -0x0000243, "-579", "%+1.d",
-__LINE__, 0x34894bb7, "+881413047", "%+d",
-__LINE__, 0xfffaa189, "FFFAA189", "% 6X",
-__LINE__, -0x0000579, "-1401", "%+ld",
-__LINE__, 0x005acb12, "5acb12", "%5.0x",
-__LINE__, 0xffff890a, "FFFF890A", "%X",
-__LINE__, 0x010dff2f, "10DFF2F", "%.7X",
-__LINE__, 0x00005a7f, "23167", "%#ld",
-__LINE__, 0x000005e3, "1507", "%#3d",
-__LINE__, -0xa815bcb, "-176249803", "%d",
-__LINE__, 0xffffffff, "ffffffff", "%+x",
-__LINE__, 0xfffe0ff7, "fffe0ff7", "%3x",
-__LINE__, 0xffffffff, "0XFFFFFFFF", "%#2.1X",
-__LINE__, -0x1cc5ea52, "-482732626", "%6.d",
-__LINE__, 0x000425ed, "+0271853", "%+.7d",
-__LINE__, 0x00000001, "1", "%+x",
-__LINE__, -0x48f2a72, "-76491378", "%7.0d",
-__LINE__, 0xfffffff7, "FFFFFFF7", "% 0X",
-__LINE__, 0xfd8ffc0a, "fd8ffc0a", "%.1x",
-__LINE__, 0x0001f56d, " 1F56D", "%+7.2X",
-__LINE__, 0x000000db, " DB", "%6.X",
-__LINE__, 0xffffffc2, "ffffffc2", "%x",
-__LINE__, 0x00000001, "001", "%03ld",
-__LINE__, 0xffd89f58, "ffd89f58", "% 0.x",
-__LINE__, 0xfe1a72fc, "fe1a72fc", "%x",
-__LINE__, 0xfffff9b6, "FFFFF9B6", "%X",
-__LINE__, 0x00243633, "243633", "%X",
-__LINE__, 0x00821bc7, "+8526791", "%+#0ld",
-__LINE__, 0xfe63f348, "0XFE63F348", "%#3X",
-__LINE__, 0xff729f19, "ff729f19", "%4x",
-__LINE__, 0xffff570f, "FFFF570F", "%+X",
-__LINE__, 0x00a57a42, "10844738", "%6.3d",
-__LINE__, 0xfe4a3ed0, "FE4A3ED0", "%6.X",
-__LINE__, 0x00000000, "0", "%d",
-__LINE__, 0x000001bb, "01bb", "% .4x",
-__LINE__, 0x02b4a1e9, "2b4a1e9", "%-7.x",
-__LINE__, 0x31750683, "31750683", "%x",
-__LINE__, 0x00001cd7, "7383", "%#ld",
-__LINE__, 0x0000079d, "1949", "%d",
-__LINE__, 0xffb8ff3b, "FFB8FF3B", "%X",
-__LINE__, 0x00a768b6, "0A768B6", "%-6.7X",
-__LINE__, 0x1c665b48, "0X1C665B48", "% #X",
-__LINE__, -0x000037d, "-000893", "%3.6d",
-__LINE__, 0x29890443, "29890443", "%+0x",
-__LINE__, 0x000000e5, "e5 ", "%-4x",
-__LINE__, 0xfff2b5fa, "FFF2B5FA", "%X",
-__LINE__, -0x5d32c2b, "-97725483", "%05ld",
-__LINE__, -0x00016c5, " -05829", "%+#7.5ld",
-__LINE__, 0x00000644, "644", "%X",
-__LINE__, -0x018c027, "-1622055", "%+.1d",
-__LINE__, 0x0000013c, "0x13c", "%#x",
-__LINE__, 0x00000009, "+9", "%+#ld",
-__LINE__, 0x00000000, "0", "%ld",
-__LINE__, -0x018eb19, "-1633049", "%4.3ld",
-__LINE__, 0xfffff429, "FFFFF429", "% X",
-__LINE__, 0x0032de67, "32DE67", "%X",
-__LINE__, 0x0016bdfa, " 1490426", "% .2ld",
-__LINE__, 0x00000065, "65", "%+.0X",
-__LINE__, 0x00000072, " 72", "%+4.2X",
-__LINE__, 0x00075119, "75119", "%2x",
-__LINE__, 0x000000b8, "b8", "%x",
-__LINE__, 0x000000d0, "d0", "%x",
-__LINE__, 0x000000b9, "b9", "%x",
-__LINE__, 0x003fda9d, " 4184733", "% #3.d",
-__LINE__, 0x00029a24, "170532", "%4.d",
-__LINE__, -0x132a337d, "-321532797", "% ld",
-__LINE__, 0x0000047a, "0X47A", "%-#X",
-__LINE__, 0x00000000, "0", "%-ld",
-__LINE__, -0x0d9750b, "-14251275", "% ld",
-__LINE__, 0x00029d6c, "29d6c", "%x",
-__LINE__, 0xfb060cc0, "fb060cc0", "%x",
-__LINE__, 0xffffd524, "0XFFFFD524", "%#X",
-__LINE__, 0xffffff30, "ffffff30", "%-5x",
-__LINE__, 0x00001650, "0005712", "%#0.7d",
-__LINE__, 0x0000b702, "0B702", "%03.5X",
-__LINE__, 0x000003c1, "3c1", "% .1x",
-__LINE__, -0x0290412, "-2688018", "%d",
-__LINE__, -0x00008bf, "-2239", "%#d",
-__LINE__, -0x0000001, "-1", "%d",
-__LINE__, 0x0001d750, "1D750", "%-X",
-__LINE__, 0x006eee92, "6EEE92", "%-X",
-__LINE__, 0xff812b02, "ff812b02", "%0x",
-__LINE__, 0xfffffeac, "FFFFFEAC", "%+0X",
-__LINE__, 0x000003a5, "3a5", "%x",
-__LINE__, -0x15270cee, "-354880750", "%2.ld",
-__LINE__, 0x06b686d2, "6b686d2", "%0x",
-__LINE__, 0xffe9cdcc, "ffe9cdcc", "%x",
-__LINE__, 0x0ecb168e, "ecb168e", "%x",
-__LINE__, 0x00000051, "51", "%-X",
-__LINE__, -0x0018860, "-100448", "%-0d",
-__LINE__, 0x8f08b82b, "0x8f08b82b", "%-#.5x",
-__LINE__, 0xffffffff, "ffffffff", "%x",
-__LINE__, 0x0000000e, "e", "%+01x",
-__LINE__, 0x04cf15bc, " 80680380", "% #ld",
-__LINE__, 0x50006e8a, "50006e8a", "%x",
-__LINE__, 0x0002f669, "194153", "%0d",
-__LINE__, 0x000000a6, " 166", "% 5.ld",
-__LINE__, -0x04036bb, "-4208315", "%7.5d",
-__LINE__, 0x00070dea, "70DEA", "%+X",
-__LINE__, 0x00000964, "0x964", "%#x",
-__LINE__, 0x0000004d, "0x4d", "% #3.x",
-__LINE__, -0x0000001, "-1", "%-0d",
-__LINE__, 0x0000043e, "1086", "%ld",
-__LINE__, -0x0000001, "-1", "%-d",
-__LINE__, 0x00000000, "+0", "%+d",
-__LINE__, 0xfffe68d9, "FFFE68D9", "%7.X",
-__LINE__, -0x0169199, "-1479065", "%#.5ld",
-__LINE__, -0x000003d, "-61", "%ld",
-__LINE__, 0x00000001, "+1", "%+.1d",
-__LINE__, 0x0001a65d, "1a65d", "%.5x",
-__LINE__, 0x00000141, "+000321", "%+#5.6ld",
-__LINE__, 0x00000000, " 0", "%4x",
-__LINE__, 0x00000408, "1032", "%-2.3ld",
-__LINE__, 0xffffffed, "FFFFFFED", "%-X",
-__LINE__, 0xfe832351, "FE832351", "% .4X",
-__LINE__, 0x003a421b, "3A421B", "%-X",
-__LINE__, -0x53ed7f25, "-1408073509", "%ld",
-__LINE__, -0x0000003, "-0003", "%-5.4ld",
-__LINE__, 0x00000ad0, " 2768", "%7d",
-__LINE__, 0xfffaf30b, "FFFAF30B", "%X",
-__LINE__, 0x006349d3, " 6506963", "% 6.2ld",
-__LINE__, 0x07f0146a, "7f0146a", "%+3.4x",
-__LINE__, -0x0000002, " -2", "% 3.ld",
-__LINE__, -0x26e94f3, "-40801523", "%-#ld",
-__LINE__, -0x0000004, " -004", "%7.3d",
-__LINE__, 0xfffe8cc9, "FFFE8CC9", "%0X",
-__LINE__, 0x00000018, " 18", "%5.x",
-__LINE__, -0x4941de83, "-1229053571", "% 0.5ld",
-__LINE__, 0x00000000, " 0", "%6ld",
-__LINE__, 0xfffffffe, "0XFFFFFFFE", "%-#X",
-__LINE__, -0x0142ae1, "-1321697", "%4.ld",
-__LINE__, -0x0319e7f, "-3251839", "%0ld",
-__LINE__, 0x000004ff, " 4FF", "%7.2X",
-__LINE__, -0x0001c3e, "-7230", "%#.2ld",
-__LINE__, 0xffffe522, "ffffe522", "%x",
-__LINE__, 0x0001d1cb, "+119243", "%+.3ld",
-__LINE__, 0xfad19d52, "FAD19D52", "%+X",
-__LINE__, 0x00002a7c, " 10876", "% 0.ld",
-__LINE__, 0x00001449, "1449", "%X",
-__LINE__, 0x000732b8, "471736", "%d",
-__LINE__, -0x211a496e, "-555370862", "%ld",
-__LINE__, -0x0000004, "-4", "%1.d",
-__LINE__, 0x0295c03d, "43368509", "%5.ld",
-__LINE__, 0x01fa5722, "33183522", "%0ld",
-__LINE__, 0xfffbff62, "0xfffbff62", "%#x",
-__LINE__, 0x000000f5, " 245", "% 2.d",
-__LINE__, 0x000000a0, "160", "%-d",
-__LINE__, 0x0000000f, "15", "%.2ld",
-__LINE__, 0x0bf5f077, "+200667255", "%+ld",
-__LINE__, -0x14d3e5a, "-21839450", "%#2.3d",
-__LINE__, -0x21cbe656, "-567010902", "%ld",
-__LINE__, 0x000002b9, "697", "%ld",
-__LINE__, 0xfffff9b0, "FFFFF9B0", "%X",
-__LINE__, 0x007fd9c7, "8378823", "%3.4d",
-__LINE__, 0x00036d06, "36d06", "%x",
-__LINE__, 0xffde8052, "FFDE8052", "%4.6X",
-__LINE__, 0x0000000d, "13", "%#d",
-__LINE__, 0x68157d93, "68157d93", "%x",
-__LINE__, 0x00000005, "5", "%1x",
-__LINE__, 0xfffffff4, "FFFFFFF4", "%X",
-__LINE__, 0xf5bbf7e9, "f5bbf7e9", "%+.1x",
-__LINE__, 0x0be98f98, "BE98F98", "%X",
-__LINE__, 0x00000122, "00122", "%.5X",
-__LINE__, -0x0000936, "-2358", "%+#3.0ld",
-__LINE__, 0xfd230f09, "FD230F09", "%-7X",
-__LINE__, 0x00000089, "137", "%ld",
-__LINE__, 0x00000078, " 120", "%7d",
-__LINE__, -0x68ef2b6b, "-1760504683", "%-ld",
-__LINE__, 0xc24480bb, "C24480BB", "%+4X",
-__LINE__, 0xfefe36a2, "FEFE36A2", "%0X",
-__LINE__, -0x35344ba, "-55788730", "%7.d",
-__LINE__, 0xffffffff, "FFFFFFFF", "%+.6X",
-__LINE__, -0x0000f40, "-3904", "% ld",
-__LINE__, 0xfffffffb, "FFFFFFFB", "%X",
-__LINE__, 0x58b37c4b, "58b37c4b", "%2.2x",
-__LINE__, 0x000000e2, "226", "%#ld",
-__LINE__, 0xfff5ebde, "fff5ebde", "%-7.1x",
-__LINE__, 0x0c6ea9be, "208579006", "%-ld",
-__LINE__, 0xff708c74, "FF708C74", "% 4.X",
-__LINE__, 0x00000000, " 0", "% 3X",
-__LINE__, 0x00000004, " 4", "%03.d",
-__LINE__, 0x0919be7c, "+152682108", "%+6.d",
-__LINE__, 0x00d4fd1e, "13958430", "%0d",
-__LINE__, 0xfe77a69e, "fe77a69e", "%-7.x",
-__LINE__, 0x284ded44, "676195652", "%-#2ld",
-__LINE__, -0x00006e6, "-1766", "% ld",
-__LINE__, -0x7dac7ea, "-131778538", "%.0ld",
-__LINE__, 0x0003c50f, "247055", "%#d",
-__LINE__, 0xfffffffc, "fffffffc", "%-x",
-__LINE__, 0xfe0f0d1f, "fe0f0d1f", "% 5.1x",
-__LINE__, 0x00000009, "9", "%0ld",
-__LINE__, -0x0175cc1, "-1531073", "%-04.d",
-__LINE__, 0x000e4da2, " 937378", "% 4.ld",
-__LINE__, 0x00000762, "762", "%-0.X",
-__LINE__, 0x005211bf, "5211bf", "%-x",
-__LINE__, 0xfffffffb, "fffffffb", "%+2.6x",
-__LINE__, 0x00008862, "34914", "%ld",
-__LINE__, 0xfffc9754, "fffc9754", "%+x",
-__LINE__, 0x0000716e, "716E", "%X",
-__LINE__, 0x000000a8, "a8", "%x",
-__LINE__, 0xffff84f5, "ffff84f5", "%0x",
-__LINE__, 0x00005032, "5032", "%x",
-__LINE__, 0xffe242b4, "ffe242b4", "%6x",
-__LINE__, 0x002df9bd, "3013053", "%ld",
-__LINE__, 0xffffe267, "FFFFE267", "%.5X",
-__LINE__, 0xffffffc7, "0xffffffc7", "%#x",
-__LINE__, -0x1727c38, "-24280120", "%d",
-__LINE__, 0x01308072, "1308072", "%x",
-__LINE__, -0x5883c7c, "-92814460", "%+ld",
-__LINE__, 0x000030ad, "30ad", "%x",
-__LINE__, 0xffffffff, "FFFFFFFF", "%X",
-__LINE__, -0x2090a708, "-546350856", "% d",
-__LINE__, 0x0024e6b4, "2418356", "%#ld",
-__LINE__, 0x02db71ac, "2DB71AC", "% 6.3X",
-__LINE__, 0xfffffffc, "FFFFFFFC", "%2.7X",
-__LINE__, -0x000074e, " -1870", "%7.ld",
-__LINE__, -0x0011d84, "-73092", "%d",
-__LINE__, 0x00160723, "160723", "%1.3x",
-__LINE__, 0x00412929, "4270377", "%-d",
-__LINE__, -0x0008fc6, "-36806", "% d",
-__LINE__, 0x00000002, "2", "%d",
-__LINE__, 0x0eb67ffa, "eb67ffa", "%.4x",
-__LINE__, 0x05b86c3c, "95972412", "%4.4d",
-__LINE__, 0xffffca9c, "FFFFCA9C", "% 4.X",
-__LINE__, 0x0007d571, "7d571", "%-0x",
-__LINE__, -0x000239b, "-09115", "%5.5d",
-__LINE__, -0x0000155, " -341", "%5.3ld",
-__LINE__, 0x00000034, "34", "%x",
-__LINE__, -0x0000051, "-81", "%.1ld",
-__LINE__, 0x309bbbe0, "309bbbe0", "%x",
-__LINE__, 0x0075be1e, " 7716382", "% #ld",
-__LINE__, 0x000002d5, "2d5", "%x",
-__LINE__, 0x006b466d, "6B466D", "%-0X",
-__LINE__, 0x01d6c30f, "1D6C30F", "%4.X",
-__LINE__, 0x00000003, " 3", "%07.x",
-__LINE__, 0xfffcc102, "FFFCC102", "%6.X",
-__LINE__, 0xffffffff, "0XFFFFFFFF", "%#X",
-__LINE__, 0xfffffffe, "fffffffe", "%+x",
-__LINE__, 0x00000005, "5", "%ld",
-__LINE__, 0xff060284, "ff060284", "%x",
-__LINE__, 0x007a3325, "7A3325", "%-X",
-__LINE__, 0xf5f595bd, "F5F595BD", "%0X",
-__LINE__, 0xfffa3a10, "FFFA3A10", "%0X",
-__LINE__, 0x00000000, "0", "%x",
-__LINE__, -0x15078f9, "-22051065", "%7d",
-__LINE__, -0x0000002, "-000002", "%.6d",
-__LINE__, 0x00000036, "54", "%1.1ld",
-__LINE__, -0xbbecf6a, "-197054314", "%ld",
-__LINE__, 0x0000043d, "43D", "%X",
-__LINE__, 0xfffffffa, "0xfffffffa", "% #6.x",
-__LINE__, 0x016759f8, "23550456", "%0.ld",
-__LINE__, 0x000052d2, "+21202", "%+6.2d",
-__LINE__, -0x007d232, "-512562", "%ld",
-__LINE__, 0x00240be0, "2362336", "%.1d",
-__LINE__, -0x0000001, "-1", "%0d",
-__LINE__, 0xfffffffa, "FFFFFFFA", "%X",
-__LINE__, -0x0000e88, "-3720", "%ld",
-__LINE__, 0xfffffa9b, "FFFFFA9B", "%.5X",
-__LINE__, 0x09296eeb, "153710315", "%-1.0d",
-__LINE__, 0x001f46fc, "0X1F46FC", "%#X",
-__LINE__, 0x00000006, "6", "%X",
-__LINE__, 0xffffff87, "0XFFFFFF87", "%+#X",
-__LINE__, 0x00000469, "0469", "%04X",
-__LINE__, -0x0000001, "-1", "%ld",
-__LINE__, 0x00000000, "", "%.0ld",
-__LINE__, -0x52bc137, "-86753591", "%-#3ld",
-__LINE__, -0x2bddb08, "-45996808", "%-3.d",
-__LINE__, 0x041367f7, "41367F7", "%+X",
-__LINE__, -0x0018eb5, "-102069", "%+ld",
-__LINE__, -0x0000537, "-1335", "%#ld",
-__LINE__, -0x6f159ff4, "-1863688180", "%+1.d",
-__LINE__, 0x00112ac8, "0X112AC8", "%#6.3X",
-__LINE__, 0x00000000, " ", "%3.d",
-__LINE__, 0x0008afe8, "08afe8", "%+3.6x",
-__LINE__, 0x00000015, "21", "%ld",
-__LINE__, -0x02b7130, "-2847024", "% #2.4d",
-__LINE__, 0xffffffd0, "FFFFFFD0", "%X",
-__LINE__, -0x6970fa1, "-110563233", "%+#.4ld",
-__LINE__, 0x06387dcc, "0X6387DCC", "%-#X",
-__LINE__, 0xffffd506, "ffffd506", "%+6x",
-__LINE__, -0x00fe5cd, "-1041869", "%-#7d",
-__LINE__, -0x0c35bf6, "-12803062", "%-03d",
-__LINE__, -0x0020d89, "-134537", "%#d",
-__LINE__, -0x0c7aed3, "-13086419", "%-ld",
-__LINE__, -0x000362a, "-13866", "%#.4ld",
-__LINE__, -0x02d05f0, "-2950640", "%#ld",
-__LINE__, 0x02de1321, "0x2de1321", "%#7.x",
-__LINE__, 0xffb56428, "0xffb56428", "%#x",
-__LINE__, 0xfffffffe, "FFFFFFFE", "%X",
-__LINE__, 0xf072292d, "F072292D", "%.5X",
-__LINE__, -0x0f4b0f2, "-16036082", "%.5ld",
-__LINE__, 0x01b81885, "28842117", "%5d",
-__LINE__, -0x009cfa6, "-642982", "%d",
-__LINE__, 0xfffffffd, "0XFFFFFFFD", "%-#.5X",
-__LINE__, 0x0dc97a66, "DC97A66", "%2.X",
-__LINE__, 0x000000be, "190", "%.0d",
-__LINE__, 0xffffe1c7, "FFFFE1C7", "% X",
-__LINE__, 0x01883b9a, "1883b9a", "%3x",
-__LINE__, 0xffffdde1, "ffffdde1", "%+x",
-__LINE__, 0x2f1b4e32, "+790318642", "%+ld",
-__LINE__, 0x000129aa, "129aa", "%x",
-__LINE__, -0x00092c2, "-37570", "%d",
-__LINE__, 0x00070fbd, "70fbd", "%x",
-__LINE__, -0x00000ea, "-234", "%+4ld",
-__LINE__, 0xfffffffe, "fffffffe", "%x",
-__LINE__, 0x0091c7f7, "91C7F7", "% .3X",
-__LINE__, -0x0c14fe2, "-12668898", "%d",
-__LINE__, -0x0017c15, "-97301", "%d",
-__LINE__, -0x00005d0, "-0001488", "%5.7d",
-__LINE__, 0x0114c36e, "18137966", "%0d",
-__LINE__, 0xffffffff, "ffffffff", "%+x",
-__LINE__, 0x0ac76e78, "180842104", "%d",
-__LINE__, 0x001976cd, " 1668813", "% 4.ld",
-__LINE__, -0x0642319, "-6562585", "% d",
-__LINE__, 0xffffffff, "FFFFFFFF", "%X",
-__LINE__, -0x035019d, "-3473821", "%.7d",
-__LINE__, -0x0000061, "-97", "%#3.d",
-__LINE__, 0x0000001f, " 31", "% 6.1ld",
-__LINE__, -0x0000024, "-36", "%d",
-__LINE__, 0x000b3785, "735109", "%ld",
-__LINE__, 0xfffffda9, "fffffda9", "%-x",
-__LINE__, 0x00254832, "2443314", "%-ld",
-__LINE__, 0xfffffd40, "FFFFFD40", "%0X",
-__LINE__, -0x0006105, "-24837", "%+#d",
-__LINE__, 0x00000006, "+6", "%+d",
-__LINE__, 0xffd40fd8, "ffd40fd8", "%3.x",
-__LINE__, -0x000988e, "-39054", "%03d",
-__LINE__, 0x0005ad8b, "5AD8B", "%0.0X",
-__LINE__, 0x00000001, "1", "%d",
-__LINE__, 0xfe1f59b7, "fe1f59b7", "%4.x",
-__LINE__, -0x0000022, "-34", "%#d",
-__LINE__, 0x0018e3e9, "18E3E9", "% X",
-__LINE__, 0xffffff25, "FFFFFF25", "%2.X",
-__LINE__, -0x00002c6, "-710", "%1.ld",
-__LINE__, 0x00009765, "38757", "%5ld",
-__LINE__, 0xfe197646, "FE197646", "%-X",
-__LINE__, 0x00000001, " 1", "%+5.x",
-__LINE__, -0x0000002, "-2", "%#ld",
-__LINE__, 0x0072f6be, "72F6BE", "%1X",
-__LINE__, -0x000f06d, "-61549", "%-d",
-__LINE__, 0x00000001, " 1", "%5X",
-__LINE__, 0x328cba28, " 848083496", "% 2.ld",
-__LINE__, 0x0000cddc, "cddc", "%.1x",
-__LINE__, 0xfffffff9, "fffffff9", "%7x",
-__LINE__, 0x00baf511, "BAF511", "%-5.6X",
-__LINE__, 0x00000001, " 1", "%4.ld",
-__LINE__, 0x0001e4b0, "+124080", "%+ld",
-__LINE__, -0x07548f3, "-7686387", "% 6.d",
-__LINE__, -0x01b14ea, "-1774826", "% #0d",
-__LINE__, -0x000005c, "-92 ", "%-04ld",
-__LINE__, -0x00000ae, "-174", "%+.3ld",
-__LINE__, 0x0000008c, "0X8C", "%+#X",
-__LINE__, 0x14c02360, "14C02360", "%.6X",
-__LINE__, 0xfffffff6, "FFFFFFF6", "%X",
-__LINE__, 0x009f4ee5, "9f4ee5", "%x",
-__LINE__, 0x00000035, "35", "%X",
-__LINE__, -0x00000eb, "-235", "%ld",
-__LINE__, 0x1552ced8, "1552CED8", "%04X",
-__LINE__, 0x0000002a, " 2A", "%5X",
-__LINE__, 0xffffffff, "ffffffff", "% x",
-__LINE__, -0xdec0db2, "-233573810", "%d",
-__LINE__, 0x001e2ef0, "1978096", "%2.d",
-__LINE__, 0xffffef24, "ffffef24", "%.5x",
-__LINE__, 0xfffe6a6c, "fffe6a6c", "%+x",
-__LINE__, -0x0000004, "-4", "% ld",
-__LINE__, 0xfe3c6743, "fe3c6743", "%.1x",
-__LINE__, 0x0000033d, "829", "%0ld",
-__LINE__, -0x00006a0, " -1696", "% 7.ld",
-__LINE__, 0xffffffdb, "ffffffdb", "%0.0x",
-__LINE__, 0xfffffffc, "FFFFFFFC", "%3.3X",
-__LINE__, -0x0000004, "-4", "%#ld",
-__LINE__, 0x00b32b56, "B32B56", "%X",
-__LINE__, 0xffffffff, "0xffffffff", "%+#x",
-__LINE__, 0x01cd1a48, "1cd1a48", "%+7x",
-__LINE__, 0xffffffda, "ffffffda", "%x",
-__LINE__, 0x1886509e, "1886509E", "% X",
-__LINE__, 0x000000eb, "235", "%0d",
-__LINE__, 0xfffffff4, "fffffff4", "%0x",
-__LINE__, 0x00000547, "547", "% X",
-__LINE__, 0x000017e6, "17e6", "%-2.x",
-__LINE__, 0x00001dc4, "7620", "%d",
-__LINE__, 0xffffffff, "FFFFFFFF", "%3.0X",
-__LINE__, 0xffff93fa, "0XFFFF93FA", "%#X",
-__LINE__, 0xfffffe1c, "FFFFFE1C", "%-X",
-__LINE__, 0x00000000, "", "% .0x",
-__LINE__, 0x000000a1, "A1", "%X",
-__LINE__, 0xffffffff, "0xffffffff", "%#x",
-__LINE__, -0x0001460, "-05216", "%+#.5d",
-__LINE__, 0x00000001, "1 ", "%-6.x",
-__LINE__, 0xfffd5324, "FFFD5324", "%+2.6X",
-__LINE__, 0x00000007, " 07", "%06.2d",
-__LINE__, 0x00000003, "3", "%-X",
-__LINE__, 0xfffffdb7, "0XFFFFFDB7", "%+#X",
-__LINE__, 0xfffff4cc, "fffff4cc", "%0x",
-__LINE__, 0x00000000, "0 ", "%-5X",
-__LINE__, 0x00758c96, "758C96", "%X",
-__LINE__, -0x0000001, "-1", "%-ld",
-__LINE__, 0x00000001, "1", "%ld",
-__LINE__, 0x03f03caf, "66075823", "%.2ld",
-__LINE__, 0x0000a87c, "a87c", "%1.x",
-__LINE__, 0x00000034, "34", "%X",
-__LINE__, 0x00000000, "0", "%x",
-__LINE__, 0x00010167, "10167", "%x",
-__LINE__, -0x00007ce, "-1998 ", "%-6ld",
-__LINE__, 0x00000001, "1", "%.0d",
-__LINE__, 0x00d94cee, "14241006", "%ld",
-__LINE__, -0x0000008, "-8", "% d",
-__LINE__, -0x71520839, "-1901201465", "%+0d",
-__LINE__, 0x0000035a, "35a", "%-x",
-__LINE__, 0xfffd2f68, "FFFD2F68", "%-X",
-__LINE__, 0x0006ea53, "453203", "%1d",
-__LINE__, 0x000000df, "DF", "% 1X",
-__LINE__, 0xfffffffe, "fffffffe", "% 7x",
-__LINE__, 0x00000156, "156", "% X",
-__LINE__, 0x00037ac9, " 228041", "% ld",
-__LINE__, 0xffffffde, "FFFFFFDE", "%0.5X",
-__LINE__, 0x00000025, "37", "%-0.ld",
-__LINE__, -0x4133686, "-68368006", "%2ld",
-__LINE__, -0x000003b, "-59", "%.2ld",
-__LINE__, 0xfffff910, "fffff910", "% 00.0x",
-__LINE__, 0xff9ec802, "FF9EC802", "%2.6X",
-__LINE__, 0x00000008, "0X8", "%#1X",
-__LINE__, 0xfffffff7, "FFFFFFF7", "%-X",
-__LINE__, 0x0029a4da, "2729178", "%04.ld",
-__LINE__, 0x007d1588, "8197512", "%#d",
-__LINE__, 0x0007e86d, "518253", "%0d",
-__LINE__, 0xfffffff9, "fffffff9", "%x",
-__LINE__, 0x00000002, "002", "%.3d",
-__LINE__, 0x00006ec1, "6EC1", "%2X",
-__LINE__, 0x0000300c, "12300", "%-d",
-__LINE__, -0x0000002, "-2", "%+ld",
-__LINE__, -0x0000002, "-2", "%ld",
-__LINE__, -0x00015d5, "-005589", "%#.6ld",
-__LINE__, 0x00000041, "65", "%d",
-__LINE__, 0x00000229, "0000229", "% 0.7x",
-__LINE__, 0xfffffffb, "fffffffb", "%03.x",
-__LINE__, 0x00093262, "0602722", "%.7d",
-__LINE__, -0x00037b4, "-14260", "%-0ld",
-__LINE__, 0xfffffffc, "fffffffc", "%-x",
-__LINE__, 0xf24cb3e6, "f24cb3e6", "%1x",
-__LINE__, 0x00000000, "0", "%x",
-__LINE__, 0xfffffffb, "FFFFFFFB", "%0X",
-__LINE__, 0x00000031, "0000049", "%00.7ld",
-__LINE__, 0x00000bb3, "BB3", "%.1X",
-__LINE__, -0x0000001, "-0001", "%+#4.4ld",
-__LINE__, -0x0000001, "-1", "% d",
-__LINE__, 0x00022c0c, "22c0c", "%-x",
-__LINE__, 0xffffffd4, "ffffffd4", "%x",
-__LINE__, 0x000729c6, "469446", "%3.d",
-__LINE__, 0xb180feae, "b180feae", "%3.x",
-__LINE__, 0x124fac15, "307211285", "%-0ld",
-__LINE__, -0x0000004, "-4", "%ld",
-__LINE__, 0x0000006a, "106", "%#d",
-__LINE__, 0x0000297f, "297F", "%+3X",
-__LINE__, 0x0000000e, "14", "%0ld",
-__LINE__, 0x00000027, "27", "%0.1X",
-__LINE__, 0xffeb98eb, "ffeb98eb", "% 05.2x",
-__LINE__, 0xfffff19b, "FFFFF19B", "%+X",
-__LINE__, 0x00025992, "154002", "%6.6d",
-__LINE__, 0x00000040, " 040", "%6.3X",
-__LINE__, 0x00000a9e, " 0a9e", "%5.4x",
-__LINE__, 0x00c7f2cc, "c7f2cc", "%x",
-__LINE__, 0x000325e6, " 325E6", "%6.X",
-__LINE__, -0x69faad3, "-111127251", "%d",
-__LINE__, -0x059a307, "-5874439", "% ld",
-__LINE__, 0xfffffff6, "0xfffffff6", "%#0.0x",
-__LINE__, 0x0030fdf3, "30fdf3", "%x",
-__LINE__, 0x00007343, "+29507", "%+#2d",
-__LINE__, 0x0003cf4b, "0X3CF4B", "% #.2X",
-__LINE__, 0x00000433, "+1075", "%+0ld",
-__LINE__, 0xfffffffd, "fffffffd", "%+.3x",
-__LINE__, 0x0ae30c4e, "ae30c4e", "%+00x",
-__LINE__, 0x0002540f, "02540f", "%-.6x",
-__LINE__, -0x0000001, " -01", "% #5.2ld",
-__LINE__, 0xffffffe7, "0xffffffe7", "% #5.x",
-__LINE__, 0x0000005b, "91", "%d",
-__LINE__, 0x00001f9b, "8091", "%.4ld",
-__LINE__, 0xfffff315, "fffff315", "%4.x",
-__LINE__, -0x130eec41, "-319745089", "% ld",
-__LINE__, 0xfff8fe13, "FFF8FE13", "%X",
-__LINE__, -0x0000004, "-00004", "%5.5d",
-__LINE__, 0x00000669, "669", "%0X",
-__LINE__, -0x0000004, "-4", "%d",
-__LINE__, 0xf5e81496, "F5E81496", "% 6X",
-__LINE__, -0x0000001, "-1", "% 0d",
-__LINE__, 0xfffffff7, "fffffff7", "%x",
-__LINE__, 0x000001de, "478", "%d",
-__LINE__, 0x0000623e, "25150", "%5.0d",
-__LINE__, 0xffffffa8, "FFFFFFA8", "%+X",
-__LINE__, -0x0000117, "-279", "% ld",
-__LINE__, -0x0000517, "-1303", "%d",
-__LINE__, 0xfffff9d5, "fffff9d5", "% x",
-__LINE__, 0x000001cc, "1CC", "%-X",
-__LINE__, 0x0000019a, "0000410", "%.7d",
-__LINE__, 0x00000003, "3 ", "%-06X",
-__LINE__, 0x00000009, "0x9", "%#0x",
-__LINE__, 0xfd544610, "0XFD544610", "% #X",
-__LINE__, 0xfffffffc, "fffffffc", "%+x",
-__LINE__, 0x00009437, "37943", "%ld",
-__LINE__, -0x00b5ea6, "-745126", "%d",
-__LINE__, 0xffffffd8, "ffffffd8", "%6x",
-__LINE__, 0x00002a2d, "10797", "%.3ld",
-__LINE__, 0x00275238, "2576952", "%0ld",
-__LINE__, 0xfff90a34, "FFF90A34", "%-7X",
-__LINE__, 0xfffffffe, "FFFFFFFE", "% .7X",
-__LINE__, -0xb3b673e, "-188442430", "% ld",
-__LINE__, 0xfffff67a, "0xfffff67a", "%#0.x",
-__LINE__, 0x0000dff6, " dff6", "%+7.x",
-__LINE__, 0xffee46e3, "ffee46e3", "%x",
-__LINE__, 0x00001a66, " 0006758", "% 7.7d",
-__LINE__, 0x0002b475, "2B475", "%.4X",
-__LINE__, 0x0002090d, "002090d", "%.7x",
-__LINE__, -0x0057838, "-358456", "%#ld",
-__LINE__, 0x00000004, "0x4", "%#x",
-__LINE__, 0x0574cb62, "91540322", "%#7d",
-__LINE__, -0x0054388, "-344968", "% #d",
-__LINE__, 0x000421c2, "421C2", "% X",
-__LINE__, 0x00000003, "3", "%0d",
-__LINE__, 0xffffe2e2, "ffffe2e2", "% 5.x",
-__LINE__, 0x00000021, "+33", "%+d",
-__LINE__, -0x0020033, "-131123", "%ld",
-__LINE__, -0x0000001, " -1", "%4.ld",
-__LINE__, 0x000000fd, "000fd", "%3.5x",
-__LINE__, 0x023e4337, "37634871", "%1d",
-__LINE__, 0x6e823d96, "6E823D96", "% X",
-__LINE__, 0xfff0e133, "fff0e133", "%x",
-__LINE__, -0x000decc, "-57036", "%3d",
-__LINE__, 0x004397b8, "4429752", "%0d",
-__LINE__, -0x0000023, " -35", "%6d",
-__LINE__, 0xffe701ca, "FFE701CA", "%3X",
-__LINE__, 0x000c0319, "+787225", "%+.6d",
-__LINE__, 0x00000000, "0", "%x",
-__LINE__, 0xfffffe1d, "FFFFFE1D", "%X",
-__LINE__, 0xfffffb33, "fffffb33", "%x",
-__LINE__, 0x02b5e30a, "45474570", "%d",
-__LINE__, 0x000074eb, "29931", "%03.ld",
-__LINE__, -0x4e42e310, "-1313006352", "%-0.d",
-__LINE__, -0x000007b, "-123", "%d",
-__LINE__, 0x00000160, " 352", "% d",
-__LINE__, -0x16af31ec, "-380580332", "%#ld",
-__LINE__, -0x000006e, "-000110", "%07ld",
-__LINE__, 0x232699a0, "232699a0", "%7.x",
-__LINE__, 0x00f9b8e5, "+16365797", "%+0d",
-__LINE__, 0x0000000c, "C", "%X",
-__LINE__, 0xfffffd4f, "FFFFFD4F", "%X",
-__LINE__, 0xffffe7bb, "FFFFE7BB", "%.7X",
-__LINE__, -0x0000163, "-355", "%d",
-__LINE__, 0x00070315, " 459541", "% #2.d",
-__LINE__, -0x7d5c12a, "-131449130", "% 6.ld",
-__LINE__, 0xffffffb2, "FFFFFFB2", "%X",
-__LINE__, -0x0004aad, "-19117", "%+6.4ld",
-__LINE__, 0x00115586, "1136006", "%0d",
-__LINE__, -0x0000021, "-33", "%d",
-__LINE__, 0x093ce01e, "93ce01e", "% 5x",
-__LINE__, 0x00672135, "672135", "% x",
-__LINE__, 0x05f4abd5, "0x5f4abd5", "%+#6.x",
-__LINE__, -0x0448b03, "-4492035", "%-0.2ld",
-__LINE__, 0x00000000, "0", "%#x",
-__LINE__, 0x1987217e, "428286334", "%d",
-__LINE__, 0x000010f6, "10f6", "%-x",
-__LINE__, 0x0000177a, "177a", "%1x",
-__LINE__, 0xfffffefd, "FFFFFEFD", "%7X",
-__LINE__, -0x095cbf8, "-9817080", "%-5ld",
-__LINE__, 0x0000008a, "138", "%2.0ld",
-__LINE__, 0xfffe80ad, "fffe80ad", "%0x",
-__LINE__, -0x1a4c8f7, "-27576567", "%d",
-__LINE__, 0x00000000, "0", "%-x",
-__LINE__, 0x0000a82b, "43051", "%-ld",
-__LINE__, 0x000000eb, "235", "%2.3ld",
-__LINE__, -0x0002747, "-10055", "%d",
-__LINE__, 0x00000319, "0X319", "%#X",
-__LINE__, 0xfffffcfe, "FFFFFCFE", "% X",
-__LINE__, 0x00050f0e, "50f0e", "%-1x",
-__LINE__, -0x398e09e, "-60350622", "%0.7ld",
-__LINE__, 0x00000000, " ", "%2.ld",
-__LINE__, 0x00000049, "00049", "% .5X",
-__LINE__, -0x00000dd, " -221", "%+#5ld",
-__LINE__, 0xf6db2fac, "f6db2fac", "%-07x",
-__LINE__, 0x0000004f, "4F", "% .0X",
-__LINE__, 0x00000000, "0", "%x",
-__LINE__, 0xfd07f692, "fd07f692", "%x",
-__LINE__, 0xdb98bde0, "db98bde0", "%x",
-__LINE__, 0x00000271, "0271", "% 3.4x",
-__LINE__, -0x000115a, "-4442", "%#1.ld",
-__LINE__, 0x0002f5f2, "194034", "%ld",
-__LINE__, -0x0000152, " -338", "%+7ld",
-__LINE__, 0x00059336, "365366", "%d",
-__LINE__, 0xfffffff6, "fffffff6", "%-7x",
-__LINE__, 0xfb916c51, "fb916c51", "%-x",
-__LINE__, 0xffff413d, "FFFF413D", "%-X",
-__LINE__, 0xf2576910, "F2576910", "%-4.X",
-__LINE__, 0xfffc7730, "fffc7730", "%5.x",
-__LINE__, 0x000002e6, "+742", "%+1d",
-__LINE__, -0x00001bf, "-447", "%3d",
-__LINE__, 0x000002e1, "2E1", "%-X",
-__LINE__, 0x00000096, "150", "%#0ld",
-__LINE__, 0x000002bd, "701", "%d",
-__LINE__, -0x0053386, "-340870", "%#d",
-__LINE__, 0xfffdb076, "FFFDB076", "%X",
-__LINE__, 0x00004dc5, " +19909", "%+07.ld",
-__LINE__, 0x00000f7a, " F7A", "%4X",
-__LINE__, 0x02405000, " 37769216", "% ld",
-__LINE__, 0xfffce68d, "fffce68d", "%0x",
-__LINE__, -0x35b3af2, "-56310514", "%-ld",
-__LINE__, -0x0238631, "-2328113", "%.4d",
-__LINE__, -0x000001e, "-030", "%.3ld",
-__LINE__, 0xffffffdd, "FFFFFFDD", "%.4X",
-__LINE__, 0x0013f6ac, "13f6ac", "%02.x",
-__LINE__, 0xfffffffa, "fffffffa", "%+07.x",
-__LINE__, -0x000192b, " -6443", "%6.d",
-__LINE__, 0x0000058b, "+1419", "%+d",
-__LINE__, 0x00001391, "5009", "%ld",
-__LINE__, -0x0041a57, "-268887", "%1ld",
-__LINE__, 0xfffff266, "0xfffff266", "%+#6.6x",
-__LINE__, 0x0000018b, " 395", "%6.ld",
-__LINE__, 0x009ae24d, "+10150477", "%+ld",
-__LINE__, 0x0000007e, "7E", "%X",
-__LINE__, 0xfffffd53, "FFFFFD53", "% 0X",
-__LINE__, 0x000002fa, "2FA", "%-1.3X",
-__LINE__, 0x000000a4, "164", "%0d",
-__LINE__, 0x00001833, "6195", "%ld",
-__LINE__, -0x0000001, "-1", "%d",
-__LINE__, 0xf2fcbd9b, "F2FCBD9B", "%+0.2X",
-__LINE__, 0x00004a8a, "4A8A", "%X",
-__LINE__, -0x10695cda, "-275340506", "%d",
-__LINE__, 0x00000037, "37", "%X",
-__LINE__, 0x00082d5c, "82D5C", "%+0.5X",
-__LINE__, 0xfffffe01, "fffffe01", "% 5.3x",
-__LINE__, 0x000005ea, "05EA", "% 1.4X",
-__LINE__, 0x0e0b8826, "e0b8826", "%2x",
-__LINE__, -0x0000161, "-353", "%+d",
-__LINE__, 0x19e3014a, "19E3014A", "%+5X",
-__LINE__, 0x00000140, "140", "%x",
-__LINE__, 0xffff84b9, "FFFF84B9", "%X",
-__LINE__, -0x0005776, "-22390", "%+5ld",
-__LINE__, 0x0162ad61, "162AD61", "% X",
-__LINE__, 0x00002395, "2395", "%X",
-__LINE__, 0x003702ec, "3605228", "%5.2d",
-__LINE__, 0xffffffff, "FFFFFFFF", "%7X",
-__LINE__, 0x00001778, "0x1778", "%#5.x",
-__LINE__, 0xc52bef7f, "C52BEF7F", "%X",
-__LINE__, 0xfffffec4, "FFFFFEC4", "%X",
-__LINE__, 0x00000006, "6", "%X",
-__LINE__, 0x00000000, "000", "%03.3x",
-__LINE__, 0x00000000, "0", "%x",
-__LINE__, 0xffff6c46, "FFFF6C46", "% 2.2X",
-__LINE__, -0x1506098, "-22044824", "%01.d",
-__LINE__, 0x03415caf, "3415caf", "%x",
-__LINE__, -0x00007b4, "-1972", "%#4.4d",
-__LINE__, -0x00158c9, "-88265", "%03.4d",
-__LINE__, 0x6947c336, "1766310710", "%.6d",
-__LINE__, 0x0000017c, "17C", "% 0X",
-__LINE__, -0x00001b7, "-439", "% 0ld",
-__LINE__, 0x06a7575a, "6A7575A", "%-.0X",
-__LINE__, 0x000b3459, "734297", "%ld",
-__LINE__, -0x395d8dd, "-60152029", "%ld",
-__LINE__, 0x00036bb3, "224179", "%-6.d",
-__LINE__, 0xffff14ff, "FFFF14FF", "%X",
-__LINE__, -0x15910e4f, "-361827919", "%-0d",
-__LINE__, -0x0000004, "-4", "%#d",
-__LINE__, 0xf7f7adac, "F7F7ADAC", "% 3.X",
-__LINE__, 0xffffff74, "FFFFFF74", "%0X",
-__LINE__, 0x00000000, "0", "%d",
-__LINE__, -0x000007b, "-123 ", "%-7.d",
-__LINE__, -0x000002c, "-44", "%d",
-__LINE__, -0x000002b, " -43", "%5d",
-__LINE__, 0x0000ae5f, "44639", "%d",
-__LINE__, 0x003cbc63, "3CBC63", "%X",
-__LINE__, 0xfffffffc, "0XFFFFFFFC", "%#5.7X",
-__LINE__, 0x0003e044, "3E044", "%X",
-__LINE__, -0x0000c46, "-3142", "%.1d",
-__LINE__, 0xff18f4bb, "FF18F4BB", "%0X",
-__LINE__, 0xfffffffd, "FFFFFFFD", "%.1X",
-__LINE__, -0x01c0f27, "-1838887", "%0d",
-__LINE__, -0x1242901f, "-306352159", "%.4ld",
-__LINE__, 0x1775c10a, "393593098", "%6.ld",
-__LINE__, 0x00000001, " 1", "%03.d",
-__LINE__, 0xfff1fd30, "0xfff1fd30", "%#x",
-__LINE__, 0x00000191, "191", "%0.X",
-__LINE__, 0x2e597178, "777613688", "%2.ld",
-__LINE__, -0x4ef0cf3, "-82775283", "%+.6ld",
-__LINE__, -0x0000085, " -133", "%6.d",
-__LINE__, 0x0000014d, "333 ", "%-5ld",
-__LINE__, -0xc03bd74, "-201571700", "%07.6ld",
-__LINE__, -0x000000a, "-10", "%d",
-__LINE__, 0x01f5e86e, "32893038", "%#2.ld",
-__LINE__, 0x00000033, "0X33", "% #X",
-__LINE__, 0x0087c797, " 8898455", "% 7.d",
-__LINE__, -0x0001205, "-4613", "%5d",
-__LINE__, 0x00000192, " 192", "%7.X",
-__LINE__, 0x000e6c00, "945152", "%6.1ld",
-__LINE__, 0x00018629, " 99881", "% d",
-__LINE__, -0x04739c6, "-4667846", "%-01.3ld",
-__LINE__, 0x00001f42, "8002", "%d",
-__LINE__, 0x00000caf, "3247", "%d",
-__LINE__, -0x4992e24, "-77147684", "%#.6d",
-__LINE__, 0x0000001d, "1d", "%-0x",
-__LINE__, 0x14d79f03, "349675267", "%0ld",
-__LINE__, 0x00000dd4, " 03540", "%#6.5ld",
-__LINE__, 0x0005f30e, "0X5F30E", "%#X",
-__LINE__, 0x00000157, "157", "%X",
-__LINE__, -0x9281698, "-153622168", "%d",
-__LINE__, -0x000004a, "-74", "%d",
-__LINE__, -0x0010c9e, "-68766", "%-0d",
-__LINE__, 0x00000059, "00089", "%.5ld",
-__LINE__, -0x06959e3, "-6904291", "% 4.d",
-__LINE__, 0xfbea12b1, "0XFBEA12B1", "%+#X",
-__LINE__, 0xffffdfb1, "FFFFDFB1", "%2.6X",
-__LINE__, 0x0434faac, "434faac", "%.5x",
-__LINE__, 0xffffffff, "ffffffff", "% x",
-__LINE__, 0x00000b32, "B32", "%0X",
-__LINE__, 0x00000047, "71", "%.1d",
-__LINE__, 0x00070bef, " 0461807", "% .7d",
-__LINE__, 0x00000038, "38", "% 0x",
-__LINE__, 0x00000000, " 0", "%6X",
-__LINE__, 0xfff9c011, "FFF9C011", "%2X",
-__LINE__, 0xfffffffe, "fffffffe", "%7x",
-__LINE__, 0xfffffff9, "FFFFFFF9", "%X",
-__LINE__, -0x016a095, "-1482901", "%4.0ld",
-__LINE__, -0x000001c, "-28", "% ld",
-__LINE__, 0xfffd6133, "0xfffd6133", "%#x",
-__LINE__, 0x000004a4, "0x4a4", "%#x",
-__LINE__, 0x000003c2, "0962", "%.4d",
-__LINE__, -0x000323b, "-12859", "%+#d",
-__LINE__, 0x0f620237, "F620237", "%X",
-__LINE__, 0x00007863, "007863", "%.6X",
-__LINE__, 0x0000002c, " 44", "% #ld",
-__LINE__, 0xfffffff0, "fffffff0", "%03.6x",
-__LINE__, 0xffff6346, "FFFF6346", "%1.X",
-__LINE__, 0x00063188, "63188", "% x",
-__LINE__, 0xfffff91c, "fffff91c", "%-.3x",
-__LINE__, 0x004cd0b4, "4CD0B4", "%-2.X",
-__LINE__, 0x06b4d739, "112514873", "%0.1d",
-__LINE__, -0x0009beb, "-39915", "%.2d",
-__LINE__, 0x0000831b, "33563", "%d",
-__LINE__, 0x00000001, "1", "%X",
-__LINE__, -0x942d76b, "-155375467", "% #0ld",
-__LINE__, 0xffff2a95, "FFFF2A95", "%2X",
-__LINE__, 0x00548d5e, "5541214", "%.3ld",
-__LINE__, 0x0b5e1a01, "B5E1A01", "% .7X",
-__LINE__, 0xfffffc22, "fffffc22", "%6x",
-__LINE__, -0x0000dd7, "-3543", "%-.3ld",
-__LINE__, 0xfffff834, "FFFFF834", "%X",
-__LINE__, 0x0365f762, "57014114", "%ld",
-__LINE__, -0x0000003, "-3", "%d",
-__LINE__, 0x3bd998a3, "1004116131", "%d",
-__LINE__, 0xfffff6c9, "FFFFF6C9", "%+X",
-__LINE__, 0xffffded9, "FFFFDED9", "%-.1X",
-__LINE__, -0x00fbb5a, "-1031002", "% 1.0d",
-__LINE__, 0xffffffb7, "ffffffb7", "%6.x",
-__LINE__, 0xff1b8ac3, "FF1B8AC3", "%-X",
-__LINE__, 0xfffffff2, "FFFFFFF2", "%00.X",
-__LINE__, -0x000013d, " -317", "%05.d",
-__LINE__, 0x0000f5e2, "+62946", "%+0.2ld",
-__LINE__, 0x16ac6358, "16ac6358", "%x",
-__LINE__, 0xffff8728, "FFFF8728", "%+X",
-__LINE__, -0x0014a6d, "-084589", "%0.6ld",
-__LINE__, 0xfc904514, "FC904514", "%+0X",
-__LINE__, 0x00000004, "4", "%ld",
-__LINE__, 0xffffffe0, "ffffffe0", "%+x",
-__LINE__, -0x0a0ffdd, "-10551261", "%+02d",
-__LINE__, -0x0000bbc, "-3004", "%+d",
-__LINE__, 0x00000006, " +6", "%+7ld",
-__LINE__, 0x17afa6e5, "397387493", "%ld",
-__LINE__, 0xfffff6bf, "fffff6bf", "%+04.4x",
-__LINE__, 0x000001dc, "01dc", "% 02.4x",
-__LINE__, 0x0000000e, " 14", "% d",
-__LINE__, 0xfffffff9, "0XFFFFFFF9", "%#4.X",
-__LINE__, 0x0000005d, "93", "%0d",
-__LINE__, -0x004fa05, "-0326149", "%.7d",
-__LINE__, -0x0000018, "-24", "%ld",
-__LINE__, 0xfffff7eb, "FFFFF7EB", "%X",
-__LINE__, 0x0072b044, " 7516228", "% .7ld",
-__LINE__, 0xffffffed, "0xffffffed", "%#x",
-__LINE__, 0x0010364d, "10364D", "%X",
-__LINE__, 0xfff90469, "0XFFF90469", "%#X",
-__LINE__, 0x000001b4, " 436", "% 0d",
-__LINE__, 0x00000000, "0", "% X",
-__LINE__, 0xfffffff3, "fffffff3", "%x",
-__LINE__, 0x19335d40, "19335d40", "%6x",
-__LINE__, 0x00039c24, "236580", "%ld",
-__LINE__, 0x000021f7, "8695", "%0.4ld",
-__LINE__, -0x057b406, "-5747718", "%d",
-__LINE__, -0x017b371, "-1553265", "%#ld",
-__LINE__, 0x0003e405, "254981", "%2.d",
-__LINE__, 0x00000001, "1", "%-.1x",
-__LINE__, 0x000000ae, "AE", "%.1X",
-__LINE__, 0xffd85825, "ffd85825", "%-7.x",
-__LINE__, 0xfffad763, "fffad763", "%x",
-__LINE__, 0x002431d4, "2372052", "%6.ld",
-__LINE__, 0x00000003, "000003", "%-05.6d",
-__LINE__, 0xffffffeb, "0xffffffeb", "%#x",
-__LINE__, 0xff8cf3b0, "ff8cf3b0", "%x",
-__LINE__, 0xfe88d2ff, "0xfe88d2ff", "%+#.2x",
-__LINE__, 0xffffff6b, "ffffff6b", "%6.3x",
-__LINE__, 0xfffffffe, "fffffffe", "%-x",
-__LINE__, 0xe998945a, "e998945a", "%2.x",
-__LINE__, 0x03b9c50f, "3B9C50F", "%+X",
-__LINE__, 0xffffffff, "FFFFFFFF", "%3.7X",
-__LINE__, 0x000024ef, "24ef", "%+x",
-__LINE__, 0xfffffc04, "FFFFFC04", "%X",
-__LINE__, 0x0d4bef7c, " 223080316", "% .1ld",
-__LINE__, -0xc33f3bc, "-204731324", "%.5ld",
-__LINE__, 0xffffffff, "0XFFFFFFFF", "%#2X",
-__LINE__, 0x0000e493, "e493", "%x",
-__LINE__, 0x000001b4, "1b4", "%x",
-__LINE__, 0xffffffd6, "0xffffffd6", "% #1x",
-__LINE__, 0x00000001, "1", "%d",
-__LINE__, -0x0000f28, "-3880", "%ld",
-__LINE__, 0x00000277, "631", "%-1ld",
-__LINE__, 0x00000001, " 1", "%2x",
-__LINE__, -0x0ff4d2c, "-16731436", "%#ld",
-__LINE__, 0x0bb80344, "196608836", "%00ld",
-__LINE__, 0xffffffdc, "FFFFFFDC", "%X",
-__LINE__, 0x00000484, "1156", "%ld",
-__LINE__, 0x00000341, "341", "%-.2x",
-__LINE__, 0x0000ee62, "ee62", "%x",
-__LINE__, 0xfffffe20, "fffffe20", "%+x",
-__LINE__, -0x00076eb, "-30443", "%.2d",
-__LINE__, 0x2c4a7407, "2c4a7407", "% x",
-__LINE__, 0x00000000, " ", "%3.X",
-__LINE__, 0xffffff60, "ffffff60", "% 4.x",
-__LINE__, 0x000e4cf2, "+937202", "%+.5ld",
-__LINE__, 0x00000008, " 00008", "%06.5X",
-__LINE__, 0x0002f612, "194066", "%d",
-__LINE__, 0xfffffc96, "fffffc96", "%-3.3x",
-__LINE__, -0x0000001, "-1", "% ld",
-__LINE__, 0x00000000, " ", "% 6.0X",
-__LINE__, 0xfffffff5, "fffffff5", "%3.x",
-__LINE__, 0x0bfd63a1, "201155489", "%d",
-__LINE__, -0x1547c214, "-357024276", "%ld",
-__LINE__, 0x00000004, "4", "%#0.d",
-__LINE__, -0x000f2f3, "-62195", "%.2d",
-__LINE__, 0xfff843dd, "FFF843DD", "%X",
-__LINE__, 0x00966e36, "9858614", "%.0ld",
-__LINE__, 0x0000782e, "0X782E", "% #X",
-__LINE__, 0x00bd36c0, "12400320", "%ld",
-__LINE__, 0x00000000, "00", "% .2X",
-__LINE__, 0x00000000, "0", "%1X",
-__LINE__, 0x0003f416, "3f416 ", "%-6.x",
-__LINE__, -0x00b74bd, "-750781", "% ld",
-__LINE__, 0x0000138a, "138a", "% x",
-__LINE__, 0x024df7f0, "24DF7F0", "% 0.6X",
-__LINE__, 0xfffffffc, "FFFFFFFC", "%X",
-__LINE__, -0x0003284, "-12932 ", "%-07.ld",
-__LINE__, 0x000094d3, "94d3", "%x",
-__LINE__, 0x000000bf, "bf", "%.2x",
-__LINE__, 0x00000000, "00000", "%-1.5X",
-__LINE__, -0x04899b8, "-4757944", "%d",
-__LINE__, 0x2b51bf20, "+726777632", "%+d",
-__LINE__, -0x000000d, "-13", "%.2d",
-__LINE__, 0x04f78fbd, "4F78FBD", "% 7.X",
-__LINE__, 0x00011684, "71300", "%5.d",
-__LINE__, 0x0000539d, "21405", "%0d",
-__LINE__, 0x00000008, "000008", "%-3.6X",
-__LINE__, 0xfc7a2cdc, "fc7a2cdc", "%2.3x",
-__LINE__, 0xffc21da1, "ffc21da1", "%x",
-__LINE__, 0x00000273, "273", "%x",
-__LINE__, 0x00000000, "0", "%#X",
-__LINE__, -0x31cd6b9, "-52221625", "% d",
-__LINE__, 0xfffffff8, "FFFFFFF8", "%.0X",
-__LINE__, 0x00000002, "2", "%#ld",
-__LINE__, 0x00e8922c, "15241772", "%d",
-__LINE__, 0xfeb19ea7, "FEB19EA7", "%0.1X",
-__LINE__, 0x00003931, "014641", "%06ld",
-__LINE__, 0x00000015, "0X00015", "%#.5X",
-__LINE__, 0xfffffffe, "FFFFFFFE", "%1.X",
-__LINE__, 0xfff17103, "0XFFF17103", "% #X",
-__LINE__, 0xfffffffc, "FFFFFFFC", "%+X",
-__LINE__, 0x00000002, "00002", "%.5x",
-__LINE__, 0x00001617, " 5655", "% 7.d",
-__LINE__, -0x0000010, "-000016", "%00.6d",
-__LINE__, 0x000000b0, "B0", "% X",
-__LINE__, 0xfc9362b2, "FC9362B2", "%-X",
-__LINE__, 0xfc3d8276, "fc3d8276", "% 1x",
-__LINE__, 0x00001405, "5125", "%#d",
-__LINE__, 0x02250183, " 35979651", "% ld",
-__LINE__, 0xffc9b007, "ffc9b007", "% 4.x",
-__LINE__, 0x00000311, "785", "%0d",
-__LINE__, 0x0004d273, " 316019", "% d",
-__LINE__, 0x00000001, "1", "%1.x",
-__LINE__, 0xffff240f, "FFFF240F", "%4.X",
-__LINE__, 0x0049cfda, "+4837338", "%+ld",
-__LINE__, 0x012f6dd5, "12F6DD5", "% 6.2X",
-__LINE__, 0x00000002, "0x2", "%#2.0x",
-__LINE__, 0xfffd834a, "FFFD834A", "%.6X",
-__LINE__, 0xfe2a40f8, "0XFE2A40F8", "%#X",
-__LINE__, 0xffffffeb, "ffffffeb", "%x",
-__LINE__, -0x00ac5cb, "-705995", "%d",
-__LINE__, -0x3021108c, "-807473292", "% .4d",
-__LINE__, -0x0000035, "-53", "%-ld",
-__LINE__, -0x1a36475, "-27485301", "% d",
-__LINE__, -0x0000011, "-17", "%d",
-__LINE__, 0x000001a3, "000419", "%.6ld",
-__LINE__, 0x0030a0a8, "3186856", "%.5ld",
-__LINE__, 0x00000019, "25", "%d",
-__LINE__, 0xf32deac1, "F32DEAC1", "%06.2X",
-__LINE__, -0x0000004, " -00004", "%7.5ld",
-__LINE__, 0x00000000, "0", "%ld",
-__LINE__, 0x0006bf19, "442137", "%#0.d",
-__LINE__, 0x566f6c44, "1450142788", "%1.6d",
-__LINE__, 0xfffffc10, "fffffc10", "%.2x",
-__LINE__, -0x000e04d, "-57421", "%+0d",
-__LINE__, 0x00000000, "0000000", "%+.7X",
-__LINE__, 0x00b5c74d, " 11913037", "% ld",
-__LINE__, -0x028dfe2, "-2678754", "%05.1d",
-__LINE__, 0xfffffee0, "fffffee0", "%0x",
-__LINE__, -0x030c077, "-3194999", "%-.6d",
-__LINE__, 0x00055ca1, "055ca1", "%-.6x",
-__LINE__, 0x00000000, " ", "%7.X",
-__LINE__, 0xfffffe3b, "FFFFFE3B", "%X",
-__LINE__, 0xffffffff, "FFFFFFFF", "% 3X",
-__LINE__, 0x00000857, "2135", "%-#1.d",
-__LINE__, -0x00546a2, "-345762", "%0.5d",
-__LINE__, 0x0000000b, "0xb ", "%-#6x",
-__LINE__, 0x00000d2b, "d2b ", "%-4.0x",
-__LINE__, 0x0ae02b9e, "AE02B9E", "%X",
-__LINE__, 0xfffffa7b, "fffffa7b", "%-2.x",
-__LINE__, 0x00000001, "1", "%X",
-__LINE__, 0x000006ad, "01709", "%05.5ld",
-__LINE__, -0x0000102, "-258", "%-0.ld",
-__LINE__, 0x00000000, "0", "%.1X",
-__LINE__, -0x01daa95, "-1944213", "%-1ld",
-__LINE__, 0x02b99040, "2B99040", "%2.X",
-__LINE__, 0x1b3d5621, "1B3D5621", "%X",
-__LINE__, 0x0312d16b, "51564907", "%-1.7ld",
-__LINE__, 0x000aa76c, " 698220", "% 2d",
-__LINE__, 0x00000000, "0", "%ld",
-__LINE__, 0xfff8a4ec, "FFF8A4EC", "%-X",
-__LINE__, 0xffffe06d, "ffffe06d", "%x",
-__LINE__, 0x00000003, "3", "% x",
-__LINE__, 0x00000000, "0", "%x",
-__LINE__, 0xd3e244dd, "D3E244DD", "%+5X",
-__LINE__, 0x000028b3, " 28b3", "% 5.x",
-__LINE__, 0x0001aceb, "109803", "%6d",
-__LINE__, 0xfffbc5ca, "0xfffbc5ca", "%-#5x",
-__LINE__, 0x00000097, " 151", "% 7ld",
-__LINE__, 0x00001fcc, "+8140", "%+d",
-__LINE__, 0xffffffff, "ffffffff", "%0x",
-__LINE__, -0x00052a9, "-21161", "%ld",
-__LINE__, 0xfffffc76, "FFFFFC76", "%.1X",
-__LINE__, -0x2acb012, "-44871698", "%0.1ld",
-__LINE__, 0xffffff81, "ffffff81", "%x",
-__LINE__, -0x0018394, "-99220", "%-ld",
-__LINE__, 0x0000001b, "1B", "%X",
-__LINE__, 0x00000033, "51", "%1d",
-__LINE__, 0xffec37e5, "FFEC37E5", "%-1X",
-__LINE__, -0x000000a, " -10", "%#5.d",
-__LINE__, -0x0000412, "-1042", "%ld",
-__LINE__, 0x000cd0b1, "cd0b1 ", "%-7.5x",
-__LINE__, 0x0b445370, "B445370", "%+2.0X",
-__LINE__, 0xfffffff3, "0XFFFFFFF3", "%-#X",
-__LINE__, 0xffff9f33, "FFFF9F33", "%5.X",
-__LINE__, 0x00010a1e, "10A1E", "%-2X",
-__LINE__, -0xede156f, "-249435503", "% 7.1ld",
-__LINE__, 0xfc6d63aa, "fc6d63aa", "% .6x",
-__LINE__, 0x0000311c, " 12572", "% ld",
-__LINE__, 0x00001f8a, "8074", "%00.d",
-__LINE__, 0x00000199, "199", "%-X",
-__LINE__, 0xfffffc60, "FFFFFC60", "%+3X",
-__LINE__, -0x000022c, "-556", "%+0ld",
-__LINE__, 0x021d8407, "35488775", "%-#.7ld",
-__LINE__, 0x0000020f, "527", "%d",
-__LINE__, -0x000064b, "-1611", "%#ld",
-__LINE__, -0x0c15aef, "-12671727", "%d",
-__LINE__, -0x1f1a6881, "-521824385", "%ld",
-__LINE__, 0xffffc115, "ffffc115", "% x",
-__LINE__, 0x00000017, " 23", "% #ld",
-__LINE__, 0x00000dc1, "DC1 ", "%-4X",
-__LINE__, 0x000002ca, "2CA", "%X",
-__LINE__, 0x000f052c, " 984364", "%7.d",
-__LINE__, 0x0000005a, "0090", "%0.4d",
-__LINE__, -0x001e463, "-124003", "% 4.ld",
-__LINE__, 0x00000001, "0000001", "%+.7X",
-__LINE__, 0x00000bfb, "0000bfb", "%5.7x",
-__LINE__, 0x0002484b, "149579", "%#1d",
-__LINE__, 0x0043ba18, "4438552", "%-ld",
-__LINE__, 0x000078f8, "0X78F8", "%#X",
-__LINE__, 0x00000001, " 1", "%4d",
-__LINE__, 0x0cedaeed, "CEDAEED", "%X",
-__LINE__, 0x00000003, "+3", "%+ld",
-__LINE__, 0xfffffffb, "FFFFFFFB", "%7.4X",
-__LINE__, 0x00000169, "361", "%ld",
-__LINE__, 0x00003c7a, "+15482", "%+ld",
-__LINE__, -0x0159d93, "-1416595", "% 0.0d",
-__LINE__, 0x0000775c, "+30556", "%+3.d",
-__LINE__, 0x10284768, "+271075176", "%+0.0ld",
-__LINE__, -0xf8b610e, "-260792590", "%0d",
-__LINE__, 0xfdd8d369, "fdd8d369", "%-.3x",
-__LINE__, 0x000c9495, "+824469", "%+ld",
-__LINE__, -0x000003f, " -063", "%7.3d",
-__LINE__, -0x000073b, "-1851", "%+03.ld",
-__LINE__, 0xfffe4e23, "0xfffe4e23", "%#.5x",
-__LINE__, 0x0081788c, "81788c", "%5x",
-__LINE__, -0x015f888, "-1439880", "%+1d",
-__LINE__, -0x31d64b4, "-52257972", "%0.2d",
-__LINE__, 0xffffffff, "FFFFFFFF", "%6.5X",
-__LINE__, -0x0000072, "-114", "%+.1d",
-__LINE__, -0x00000e1, "-225", "%ld",
-__LINE__, 0x000006a8, "0x6a8", "%+#x",
-__LINE__, 0xfffe673a, "fffe673a", "%01.x",
-__LINE__, 0xfff2ee0d, "FFF2EE0D", "%-X",
-__LINE__, 0x0290320a, "43004426", "%0ld",
-__LINE__, -0xeb7a832, "-246917170", "% ld",
-__LINE__, 0x02ae9265, "2ae9265", "%1.x",
-__LINE__, 0xffffffd2, "ffffffd2", "%+2.x",
-__LINE__, 0x00e6e858, "0xe6e858", "%#0.x",
-__LINE__, 0x00000c4a, "+3146", "%+3.1d",
-__LINE__, -0x6943c1a, "-110378010", "% 0ld",
-__LINE__, 0x0167b119, "167b119", "%0x",
-__LINE__, 0xfffffffe, "fffffffe", "%+x",
-__LINE__, 0xfffffffe, "FFFFFFFE", "%X",
-__LINE__, 0x000b861e, "755230", "%ld",
-__LINE__, 0x0000015b, "347", "%-#ld",
-__LINE__, 0xfffffffa, "0XFFFFFFFA", "%#X",
-__LINE__, 0x000de9e5, "911845", "%d",
-__LINE__, 0x00000001, "01", "%.2d",
-__LINE__, 0x000007a5, "1957", "%0d",
-__LINE__, 0x0000000f, "f", "%x",
-__LINE__, 0x00c38cbf, " 12815551", "% .2d",
-__LINE__, -0x7bd1b6e, "-129833838", "% d",
-__LINE__, -0x000013c, "-316", "%0d",
-__LINE__, 0x00001aad, "1AAD", "%-0X",
-__LINE__, 0x0034f903, "3471619", "%00d",
-__LINE__, 0xff925717, "ff925717", "%4x",
-__LINE__, 0x00000002, "02", "%.2d",
-__LINE__, 0x00000f34, "F34", "%+X",
-__LINE__, 0xffffeefe, "FFFFEEFE", "%X",
-__LINE__, 0xfffeecb4, "FFFEECB4", "% 2.X",
-__LINE__, 0x00034421, "214049", "%0ld",
-__LINE__, 0x00000000, " 0", "%+6X",
-__LINE__, -0x0000062, "-98", "%-#2d",
-__LINE__, -0x0000557, "-1367", "%-4.4d",
-__LINE__, 0xffffe17c, "FFFFE17C", "%X",
-__LINE__, 0x00000097, "00097", "%.5X",
-__LINE__, 0xfffcb278, "FFFCB278", "%0.7X",
-__LINE__, -0x0000001, "-0001 ", "%-7.4d",
-__LINE__, -0x0000001, "-1", "%ld",
-__LINE__, 0x000002c4, "708", "%d",
-__LINE__, 0x04946f45, "4946F45", "%-2.X",
-__LINE__, 0x000000ff, "00ff", "% 2.4x",
-__LINE__, 0x00073307, "471815", "%3ld",
-__LINE__, 0x0085b7b6, "+8763318", "%+ld",
-__LINE__, -0x0000002, "-2", "%1ld",
-__LINE__, -0x0000001, "-1", "%-2d",
-__LINE__, -0x00000b5, " -181", "%7ld",
-__LINE__, -0x0412486, "-4269190", "%+2.1ld",
-__LINE__, 0xffffffff, "ffffffff", "%0x",
-__LINE__, 0x0000006d, "6d", "%x",
-__LINE__, 0x000000da, "218", "%-.3ld",
-__LINE__, 0xfffffcfe, "fffffcfe", "%x",
-__LINE__, 0x652e60c7, "652E60C7", "%7.7X",
-__LINE__, 0x00000035, " 53", "% #2d",
-__LINE__, 0x000000fc, "FC", "%-X",
-__LINE__, 0x00000019, " 25", "% ld",
-__LINE__, 0xfffffcf4, "fffffcf4", "%6x",
-__LINE__, 0xffffff41, "ffffff41", "%x",
-__LINE__, 0x00000034, " 52", "%3.ld",
-__LINE__, 0xffffffb2, "ffffffb2", "%-x",
-__LINE__, -0x6dc43e7c, "-1841577596", "% .2ld",
-__LINE__, 0x00000004, "4", "%d",
-__LINE__, -0x000023b, "-571", "%ld",
-__LINE__, -0x000004d, "-77", "%ld",
-__LINE__, 0x0000e3ba, "58298", "%.0ld",
-__LINE__, 0xfffffff2, "fffffff2", "%0.0x",
-__LINE__, -0x0000020, "-32", "%ld",
-__LINE__, 0xffffb33e, "0XFFFFB33E", "%-#X",
-__LINE__, 0x00000000, " ", "% 4.x",
-__LINE__, 0xffd96f92, "FFD96F92", "%X",
-__LINE__, 0x0000002e, " 46", "% 0ld",
-__LINE__, 0xffffffff, "ffffffff", "%x",
-__LINE__, -0x5008ba3, "-83921827", "%+d",
-__LINE__, 0xfdc1df3d, "FDC1DF3D", "%0X",
-__LINE__, 0xfc7410e5, "fc7410e5", "%7x",
-__LINE__, 0xfffffffa, "FFFFFFFA", "% 6.X",
-__LINE__, 0x00000000, "0", "%X",
-__LINE__, -0x040fd4e, "-4259150", "% 05.d",
-__LINE__, 0x0000003b, " 59", "%3.2d",
-__LINE__, 0xff776dd8, "ff776dd8", "%x",
-__LINE__, 0x0000055b, "+1371", "%+#2d",
-__LINE__, 0x00004841, "4841", "%.1x",
-__LINE__, 0x0229d710, "36296464", "%-.2ld",
-__LINE__, 0x00000000, "0", "%x",
-__LINE__, 0xfffe8376, "fffe8376", "%0x",
-__LINE__, 0x000a7b83, "a7b83", "%x",
-__LINE__, 0x0000000d, " 013", "%#7.3d",
-__LINE__, 0xffffffff, "FFFFFFFF", "%5.0X",
-__LINE__, 0x00000704, " 0x704", "%#7.0x",
-__LINE__, 0xfff970b9, "FFF970B9", "%.1X",
-__LINE__, -0x000b60a, "-46602", "%+d",
-__LINE__, 0x00000000, " 00000", "%6.5x",
-__LINE__, 0x00000003, "3", "%X",
-__LINE__, 0x0000c14b, "c14b", "%0x",
-__LINE__, 0x066d7860, "107837536", "%-d",
-__LINE__, 0x00000013, " 13", "%4.x",
-__LINE__, 0xfff96f18, "FFF96F18", "%4X",
-__LINE__, 0xffffff30, "FFFFFF30", "%X",
-__LINE__, 0xffffffff, "FFFFFFFF", "% .7X",
-__LINE__, -0x72a9e985, "-1923737989", "%2.d",
-__LINE__, 0x00000002, "0x2", "%#x",
-__LINE__, 0x0000050e, "50e", "%2.3x",
-__LINE__, 0x0000605c, "24668", "%4.1d",
-__LINE__, 0xffffff3e, "ffffff3e", "%x",
-__LINE__, -0x0000010, "-16", "%-2d",
-__LINE__, 0x000061aa, "61AA", "%X",
-__LINE__, 0x000c2ec3, "C2EC3", "%0X",
-__LINE__, -0x0000001, "-1", "%-0d",
-__LINE__, 0x00130e17, "+1248791", "%+.6ld",
-__LINE__, 0x000000ef, "EF", "%-X",
-__LINE__, -0x0000001, " -1", "%+5ld",
-__LINE__, 0x0000989d, "39069", "%d",
-__LINE__, 0x00000000, "0", "%-x",
-__LINE__, 0x00000417, "417", "%X",
-__LINE__, 0x00005e86, "5E86", "%+X",
-__LINE__, -0x0007c08, "-31752", "%ld",
-__LINE__, 0x00da8e0f, "DA8E0F", "%2.2X",
-__LINE__, -0x3ee095ec, "-1054905836", "% 0d",
-__LINE__, 0xfffdb5a3, "fffdb5a3", "%x",
-__LINE__, 0xffffff83, "FFFFFF83", "%X",
-__LINE__, 0xfff8efd7, "0xfff8efd7", "%#x",
-__LINE__, 0x00000020, " 32", "% d",
-__LINE__, 0xfff7c002, "fff7c002", "%.7x",
-__LINE__, -0x0000001, "-1", "%ld",
-__LINE__, 0x00000000, " 000", "%05.3X",
-__LINE__, 0xfff190ee, "FFF190EE", "%X",
-__LINE__, 0x00000a6c, " 2668", "%#6.ld",
-__LINE__, 0x00037024, "37024", "%x",
-__LINE__, 0xfffec37f, "FFFEC37F", "%X",
-__LINE__, 0x007ee9bb, "8317371", "%#0.ld",
-__LINE__, 0x00000122, "290", "%ld",
-__LINE__, -0x0013b5f, "-80735", "%ld",
-__LINE__, 0xfffffff6, "FFFFFFF6", "%X",
-__LINE__, -0x0000c16, "-0003094", "%-00.7d",
-__LINE__, -0x00010ed, "-4333", "%ld",
-__LINE__, 0x00000007, " 0X007", "%#6.3X",
-__LINE__, 0x0053781e, " 5470238", "% 2d",
-__LINE__, 0xffff03e9, "0XFFFF03E9", "%+#7.3X",
-__LINE__, 0xfffffdc2, "0xfffffdc2", "% #4.x",
-__LINE__, -0x00018e1, "-6369", "%d",
-__LINE__, 0xf3a4abc6, "F3A4ABC6", "%-.2X",
-__LINE__, 0xfff64a27, "FFF64A27", "%7.7X",
-__LINE__, 0x00195ae5, "195AE5", "%+03.X",
-__LINE__, 0xfff8849a, "fff8849a", "%.1x",
-__LINE__, -0x001b045, "-110661", "%+ld",
-__LINE__, 0x01e8a106, "32022790", "%7.ld",
-__LINE__, 0x0008ee94, "8EE94", "%X",
-__LINE__, 0xfffcdabc, "FFFCDABC", "%X",
-__LINE__, 0xfda75cd2, "fda75cd2", "%x",
-__LINE__, 0x00fd505a, "fd505a", "%x",
-__LINE__, 0x00003748, "3748", "%+x",
-__LINE__, 0xffffffe5, "ffffffe5", "% 3.6x",
-__LINE__, -0x1d1c4045, "-488390725", "%d",
-__LINE__, 0xfffffff9, "0xfffffff9", "%#x",
-__LINE__, -0x0000001, "-1", "%-#ld",
-__LINE__, 0x00000191, "191", "%X",
-__LINE__, 0xfffffffe, "FFFFFFFE", "%-X",
-__LINE__, -0x0000006, "-6", "%ld",
-__LINE__, 0x00000033, " 33", "% 4x",
-__LINE__, -0x0159a14, "-1415700", "% ld",
-__LINE__, 0x000001c3, "00001c3", "%07x",
-__LINE__, 0xffffe9e2, "ffffe9e2", "%-x",
-__LINE__, 0x5b19abd9, "0x5b19abd9", "%-#x",
-__LINE__, 0xffff1bae, "0xffff1bae", "%#x",
-__LINE__, 0x00000001, "+1", "%+d",
-__LINE__, 0x006a23c7, "6A23C7", "%2.X",
-__LINE__, 0x000008a4, " 8a4", "% 4.1x",
-__LINE__, 0xfffffcd9, "fffffcd9", "%.1x",
-__LINE__, 0x0000121b, "121B", "%X",
-__LINE__, 0x001231aa, "1192362", "%7.d",
-__LINE__, -0x008026d, "-524909", "%4.2d",
-__LINE__, 0x192ea594, "422487444", "%ld",
-__LINE__, 0x0001a800, "108544", "%0d",
-__LINE__, 0x000062f1, "62f1", "%.4x",
-__LINE__, 0xff8b39b0, "ff8b39b0", "% x",
-__LINE__, 0x00000001, "0x1", "%+#x",
-__LINE__, 0x0000144a, "5194", "%ld",
-__LINE__, 0x00002599, "9625", "%d",
-__LINE__, 0xffa0a2ef, "ffa0a2ef", "%0x",
-__LINE__, 0xff6712e1, "FF6712E1", "%0X",
-__LINE__, 0x0007ebb3, "519091", "%1ld",
-__LINE__, 0x0000000f, "15 ", "%-4.ld",
-__LINE__, -0x0000096, "-150", "%2.ld",
-__LINE__, 0x0000004f, "4F", "%.2X",
-__LINE__, 0xfffffc29, "fffffc29", "%-4.x",
-__LINE__, 0x00000019, "19", "%x",
-__LINE__, 0x00000c4e, "c4e", "%x",
-__LINE__, 0x0000006b, " 0006B", "%6.5X",
-__LINE__, 0x00c8d2c6, "c8d2c6", "%.0x",
-__LINE__, -0x256fb8de, "-628078814", "%ld",
-__LINE__, 0x4f51fcf4, "4F51FCF4", "%+X",
-__LINE__, 0x000f000e, "983054", "%1.ld",
-__LINE__, 0xfffff03f, "fffff03f", "%x",
-__LINE__, 0x0000001d, " 1D", "%05.X",
-__LINE__, 0x0072ea14, "72ea14", "%x",
-__LINE__, -0xc6098b9, "-207657145", "%-7d",
-__LINE__, 0x00000a76, "2678", "%3ld",
-__LINE__, 0xfff84db3, "FFF84DB3", "%X",
-__LINE__, 0x0fb52870, "fb52870", "%+x",
-__LINE__, 0x08bc170a, "0x8bc170a", "%#x",
-__LINE__, 0xfffeeb00, "fffeeb00", "%0.5x",
-__LINE__, 0x000ece95, "970389", "%d",
-__LINE__, 0x00000000, "0", "%0X",
-__LINE__, 0x07f98e8a, "7f98e8a", "% x",
-__LINE__, 0x000499eb, " 499eb", "% 6.x",
-__LINE__, 0xffffffff, "FFFFFFFF", "%-X",
-__LINE__, 0x0aa45e86, "178544262", "%#.2d",
-__LINE__, 0xff73387d, "FF73387D", "%03.X",
-__LINE__, 0xfffffb51, "FFFFFB51", "%.3X",
-__LINE__, 0xffffffdc, "ffffffdc", "%6.x",
-__LINE__, 0xffffffed, "FFFFFFED", "%-X",
-__LINE__, 0x0001c4c2, "1c4c2", "%0.3x",
-__LINE__, -0x0000001, "-0000001", "%-#.7d",
-__LINE__, 0x00000007, "7", "%0.x",
-__LINE__, 0x00000001, "1", "%ld",
-__LINE__, 0xffffd000, "ffffd000", "%4.3x",
-__LINE__, 0x00000030, "48", "%2.d",
-__LINE__, -0x6c121ce, "-113320398", "%.5ld",
-__LINE__, 0x000001ed, "1ED", "% 3.X",
-__LINE__, 0xfffff0f3, "FFFFF0F3", "%+.6X",
-__LINE__, 0xffffffec, "ffffffec", "%x",
-__LINE__, 0x002d5ab8, "0x2d5ab8", "%-#x",
-__LINE__, 0x0026acff, "2534655", "%0ld",
-__LINE__, 0x01d90cd7, "+31001815", "%+.2ld",
-__LINE__, -0x1f7abc0, "-33008576", "%7.6d",
-__LINE__, 0xfc5babcc, "fc5babcc", "%x",
-__LINE__, -0x9b74892, "-163006610", "% .6d",
-__LINE__, 0x03931d84, "59972996", "%0.d",
-__LINE__, 0x07d261ce, "131228110", "%#ld",
-__LINE__, 0x00000000, "0", "%x",
-__LINE__, 0x00000002, "2", "%+X",
-__LINE__, -0x0000604, "-1540", "%+d",
-__LINE__, 0x00000000, " ", "%7.x",
-__LINE__, 0x00000001, "1", "%.0X",
-__LINE__, -0x0005a8e, "-23182", "% d",
-__LINE__, 0x03fb2730, "3fb2730", "%7.x",
-__LINE__, 0xffffff03, "ffffff03", "%x",
-__LINE__, 0x00000000, " ", "%-#3.d",
-__LINE__, 0x04025a4b, "0X4025A4B", "%+#X",
-__LINE__, -0x0000001, " -1", "%4.d",
-__LINE__, 0xfffe00a3, "FFFE00A3", "%+X",
-__LINE__, -0x1b26e3c8, "-455533512", "% ld",
-__LINE__, 0x000017e5, "6117", "%d",
-__LINE__, -0x0e4f3b6, "-15004598", "%0ld",
-__LINE__, 0x00000034, "52", "%ld",
-__LINE__, 0x0000024c, " 24C", "%4X",
-__LINE__, 0xfffedf65, "FFFEDF65", "%-0X",
-__LINE__, -0x000ff1f, "-65311", "%+#d",
-__LINE__, 0x00000007, " 7", "%7.x",
-__LINE__, 0x018656ae, "18656ae", "%3.7x",
-__LINE__, -0x0000004, "-4", "%d",
-__LINE__, 0x7081292d, "1887512877", "%d",
-__LINE__, 0x87d3e48c, "87d3e48c", "%-x",
-__LINE__, 0xf99c516e, "0xf99c516e", "% #7.4x",
-__LINE__, 0xfffffffa, "FFFFFFFA", "%-1X",
-__LINE__, -0x000001d, "-29", "%#ld",
-__LINE__, -0x0000001, "-1", "%+ld",
-__LINE__, 0x28ab3350, " 682308432", "% 1d",
-__LINE__, -0x0000006, "-6", "%ld",
-__LINE__, 0xfffffffb, "FFFFFFFB", "%.5X",
-__LINE__, -0x0000007, "-7", "%#d",
-__LINE__, -0x0000328, " -808", "%6.ld",
-__LINE__, -0x29386f00, "-691564288", "%.3d",
-__LINE__, -0x059f38a, "-5895050", "%.4ld",
-__LINE__, 0xfffff888, "FFFFF888", "%3X",
-__LINE__, 0xffffffdf, "ffffffdf", "%0.0x",
-__LINE__, -0xb4fc354, "-189776724", "%2d",
-__LINE__, 0x00058c07, "363527", "%1.d",
-__LINE__, 0x0a256162, "a256162", "%x",
-__LINE__, -0x05c87b0, "-6064048", "%0ld",
-__LINE__, 0xfffffda1, "fffffda1", "%x",
-__LINE__, 0x000034b7, "13495", "%d",
-__LINE__, -0x6d1a8918, "-1830455576", "%.1d",
-__LINE__, 0x00022290, "139920", "%05ld",
-__LINE__, 0x00000000, "0", "%-x",
-__LINE__, -0x1f8eafce, "-529444814", "%4.d",
-__LINE__, -0x7bf32808, "-2079533064", "% ld",
-__LINE__, 0x0000023c, "23c", "% x",
-__LINE__, 0x00000039, "39", "%X",
-__LINE__, -0x000556d, "-21869", "%ld",
-__LINE__, -0x00000ca, "-202", "%ld",
-__LINE__, 0x00002e28, "11816", "%-d",
-__LINE__, 0x00000011, "17", "%-ld",
-__LINE__, 0xfffffffb, "FFFFFFFB", "%-X",
-__LINE__, 0xfffdd67f, "0XFFFDD67F", "%#X",
-__LINE__, -0x000003d, "-61", "%d",
-__LINE__, 0x0000bfce, "0XBFCE", "%-#5.2X",
-__LINE__, 0xfffffffc, "fffffffc", "%x",
-__LINE__, -0x00aea17, "-715287", "%.5d",
-__LINE__, -0x02fce89, "-3133065", "%0d",
-__LINE__, 0x007f6ed1, "7F6ED1", "%6X",
-__LINE__, 0xffffffff, "FFFFFFFF", "%X",
-__LINE__, -0x0002761, "-10081", "%#6.2d",
-__LINE__, 0x003be8d8, "3BE8D8", "%-X",
-__LINE__, 0x00000901, " 2305", "%6.d",
-__LINE__, 0x00049916, "0301334", "%3.7ld",
-__LINE__, 0x0678ffea, "0X678FFEA", "%#4X",
-__LINE__, 0xffffffff, "ffffffff", "%+.0x",
-__LINE__, -0x31d2ec61, "-835906657", "%.0d",
-__LINE__, 0xfffffffc, "FFFFFFFC", "%0X",
-__LINE__, -0x0015588, "-87432", "%d",
-__LINE__, 0xffffff3e, "ffffff3e", "%.4x",
-__LINE__, 0x0000000a, "10", "%d",
-__LINE__, -0x0000003, "-3", "%2.1ld",
-__LINE__, -0x000d29a, "-53914", "%ld",
-__LINE__, -0x04ccbe0, "-5032928", "%2.2ld",
-__LINE__, 0x0357c2a5, "357c2a5", "% 7.x",
-__LINE__, 0x00000009, " 9", "% 1.ld",
-__LINE__, -0x005908d, "-364685", "%0d",
-__LINE__, -0x0000de6, "-3558", "%0ld",
-__LINE__, 0x2d395e6b, "+758734443", "%+6d",
-__LINE__, 0x001aba58, "1ABA58", "% X",
-__LINE__, 0x0ceba5ab, "0XCEBA5AB", "%#.1X",
-__LINE__, -0x01a8575, "-1738101", "% 2ld",
-__LINE__, 0x0000000d, "13", "%#ld",
-__LINE__, 0x00000000, "0", "%d",
-__LINE__, 0x4b856407, "4b856407", "%5x",
-__LINE__, 0x006f333c, "6F333C", "%-X",
-__LINE__, 0x000000d0, "d0", "%x",
-__LINE__, 0x2ecf0d4e, "2ecf0d4e", "%0x",
-__LINE__, -0x0000188, "-0000392", "%#1.7ld",
-__LINE__, -0x0000037, "-55", "%d",
-__LINE__, 0xfffffff1, "FFFFFFF1", "% .1X",
-__LINE__, 0x00000001, "0x1", "%#3x",
-__LINE__, 0x000005ed, "5ED", "%3X",
-__LINE__, 0x031183a3, "31183A3", "%X",
-__LINE__, 0xffffffff, "ffffffff", "%x",
-__LINE__, -0x0018695, "-99989", "%-0.5ld",
-__LINE__, -0x0000001, "-01", "%0.2ld",
-__LINE__, 0x00007822, "7822", "%+x",
-__LINE__, 0x00000000, "0", "% x",
-__LINE__, 0xfda2461a, "FDA2461A", "%X",
-__LINE__, 0x065c50ef, "106713327", "%2.ld",
-__LINE__, 0x00000a81, "a81", "% 0x",
-__LINE__, -0x000022e, "-558", "%.0ld",
-__LINE__, 0x00013d2f, "81199", "%.2ld",
-__LINE__, 0xfffffffe, "FFFFFFFE", "%+X",
-__LINE__, 0x000015f9, "5625", "%04.ld",
-__LINE__, 0x0ab575a2, "179664290", "%0d",
-__LINE__, 0x0024d07f, "0X24D07F", "%#X",
-__LINE__, 0x07ee35e1, "7EE35E1", "%+X",
-__LINE__, -0x00c114c, "-790860", "%#ld",
-__LINE__, 0x00003be3, " 15331", "%07.d",
-__LINE__, 0xfff87570, "FFF87570", "%4.0X",
-__LINE__, -0x14eab419, "-350925849", "%-ld",
-__LINE__, -0x000001b, "-27", "%ld",
-__LINE__, 0x167ce2ea, "0x167ce2ea", "%#0.x",
-__LINE__, -0x00009bc, "-002492", "% 3.6d",
-__LINE__, 0xfffffdb9, "0XFFFFFDB9", "%#7.X",
-__LINE__, 0x008b2b9d, "8B2B9D", "% X",
-__LINE__, 0x000cfec3, "CFEC3", "% 05X",
-__LINE__, 0x05970be6, "5970be6", "%x",
-__LINE__, 0x00002780, "010112", "%2.6d",
-__LINE__, 0x00000005, "+5", "%+d",
-__LINE__, 0xfffffffb, "0xfffffffb", "%#3.x",
-__LINE__, 0x00000001, "1 ", "%-#5.ld",
-__LINE__, -0x0000017, "-23", "%ld",
-__LINE__, -0x023b943, "-2341187", "%d",
-__LINE__, 0x0000000d, "13", "%ld",
-__LINE__, 0x00025a03, "25a03", "% .5x",
-__LINE__, 0x3e1ebe24, "3e1ebe24", "% x",
-__LINE__, 0x0000013a, "0x13a", "%#5.0x",
-__LINE__, 0xfff6f5b3, "FFF6F5B3", "%4.X",
-__LINE__, -0x0000a8a, "-2698", "%.3d",
-__LINE__, 0x0009dd5f, "9dd5f", "%x",
-__LINE__, 0x000003c7, " 3C7", "%04.2X",
-__LINE__, 0x1bcfa2f2, "1bcfa2f2", "%+1.x",
-__LINE__, 0x0001b4f4, "1b4f4", "%+1.x",
-__LINE__, 0x1bc19a90, "465672848", "%#d",
-__LINE__, 0xffffffff, "ffffffff", "%+06x",
-__LINE__, -0x0000a88, "-2696", "%3.d",
-__LINE__, 0x00084a19, "84A19", "%-X",
-__LINE__, 0xffe1fc8f, "FFE1FC8F", "%0.1X",
-__LINE__, -0x0000a3a, "-2618", "%5d",
-__LINE__, -0x0000001, "-1", "%ld",
-__LINE__, -0x5c6183d, "-96868413", "%+ld",
-__LINE__, -0x0000001, "-1", "%-d",
-__LINE__, 0x0000faa8, "64168", "%05.d",
-__LINE__, 0x003913ef, "3740655", "%ld",
-__LINE__, 0x0dde330a, "232665866", "%#ld",
-__LINE__, 0xfcfb1a7b, "FCFB1A7B", "%+X",
-__LINE__, 0x07b1a81f, " 129083423", "% 0d",
-__LINE__, 0x00000001, "1", "%d",
-__LINE__, 0x00000070, " 112", "%5ld",
-__LINE__, 0xffff74d9, "ffff74d9", "%x",
-__LINE__, -0x001ab93, "-109459", "%03.d",
-__LINE__, 0x0eb6b497, "EB6B497", "%+X",
-__LINE__, 0x07adbac2, "128826050", "%#0.4d",
-__LINE__, 0xff747068, "FF747068", "%6.X",
-__LINE__, -0x190ce98f, "-420276623", "%06.6ld",
-__LINE__, -0x0000007, "-7", "%.0d",
-__LINE__, 0x0001240f, "1240f", "% 3x",
-__LINE__, 0x267ae4a0, "645588128", "%-#ld",
-__LINE__, -0x0000001, "-1", "% ld",
-__LINE__, -0x0000066, "-00102", "%.5ld",
-__LINE__, 0x868fa035, "868fa035", "%x",
-__LINE__, 0x00000000, " ", "%-4.ld",
-__LINE__, 0xfffffe72, "FFFFFE72", "%4.4X",
-__LINE__, 0x00a6b4f4, "10925300", "%#ld",
-__LINE__, -0x0000002, "-2", "%00.1d",
-__LINE__, -0x00000a3, "-163", "%ld",
-__LINE__, 0xfffffffe, "fffffffe", "% 3.x",
-__LINE__, 0xffe25941, "ffe25941", "% x",
-__LINE__, 0x0000a20f, "41487", "%ld",
-__LINE__, -0x000009b, "-155", "%#.3ld",
-__LINE__, 0x000c5dc1, "810433", "%4.ld",
-__LINE__, 0x00003ec4, "16068", "%ld",
-__LINE__, 0x000002f3, "0755", "%04ld",
-__LINE__, 0xffffff28, "FFFFFF28", "%.5X",
-__LINE__, -0x08450ff, "-8671487", "%-3.0ld",
-__LINE__, 0x00000092, "92", "%x",
-__LINE__, -0x0000317, "-791", "%d",
-__LINE__, 0x0000000d, "d", "%x",
-__LINE__, 0x00000036, "36", "%x",
-__LINE__, -0x112693f, "-17983807", "%ld",
-__LINE__, 0x00004226, "16934", "%0.d",
-__LINE__, 0x000001ba, " 442", "% ld",
-__LINE__, 0xfffffffc, "0XFFFFFFFC", "%#4X",
-__LINE__, 0xffdb3d23, "0xffdb3d23", "% #x",
-__LINE__, 0x039eb84d, "39EB84D", "%+.6X",
-__LINE__, 0xffffc7da, "ffffc7da", "%0x",
-__LINE__, 0xfffffdb6, "FFFFFDB6", "%6X",
-__LINE__, 0x001b75b0, "1799600", "%ld",
-__LINE__, 0xfffffca2, "FFFFFCA2", "%-X",
-__LINE__, 0xffffffba, "ffffffba", "%7.4x",
-__LINE__, -0x000124e, "-4686", "%3.ld",
-__LINE__, -0x000bec0, "-48832", "% 0d",
-__LINE__, 0xfffffca0, "fffffca0", "%2.x",
-__LINE__, 0x00b2a462, "11707490", "%ld",
-__LINE__, 0x0745a647, "745a647", "%+4.x",
-__LINE__, 0xfffffbac, "0XFFFFFBAC", "%#3.X",
-__LINE__, -0x0000002, "-2", "%-0.1d",
-__LINE__, 0x0006cfdb, "446427", "%#5.d",
-__LINE__, -0x0000001, "-1", "%d",
-__LINE__, 0x043b134e, "43B134E", "%X",
-__LINE__, -0x0000015, "-21", "%ld",
-__LINE__, -0x0000114, "-276", "%0d",
-__LINE__, -0x0004d4a, "-19786", "%-d",
-__LINE__, -0x000001c, "-28", "%ld",
-__LINE__, -0x0cb89fc, "-13339132", "%ld",
-__LINE__, 0xffffffcf, "ffffffcf", "%x",
-__LINE__, 0xf6d2387a, "f6d2387a", "%-x",
-__LINE__, -0x00000cd, "-205", "%#ld",
-__LINE__, 0x00000000, "0", "%#x",
-__LINE__, 0xfffffc81, "fffffc81", "%x",
-__LINE__, 0x00000000, " 0", "% ld",
-__LINE__, 0x00024fb5, "24fb5", "%x",
-__LINE__, 0x000012fa, "12FA", "%X",
-__LINE__, 0x0318ce7c, "51957372", "%0d",
-__LINE__, 0x02280a99, "2280a99", "%-x",
-__LINE__, 0xffffff5c, "FFFFFF5C", "%2.X",
-__LINE__, -0x000002e, " -46", "%7ld",
-__LINE__, -0x04a73e8, "-4879336", "%4ld",
-__LINE__, 0x000007f3, "7f3", "% 1.3x",
-__LINE__, 0x00000114, "0x114", "%#x",
-__LINE__, 0x0000030c, "30c", "%-x",
-__LINE__, 0x001dd0dd, "0x1dd0dd", "%+#5.5x",
-__LINE__, 0xfff23de3, "fff23de3", "%-x",
-__LINE__, -0x0178f9c, "-1544092", "%d",
-__LINE__, 0x02ded8da, "2DED8DA", "%X",
-__LINE__, -0x0991672, "-10032754", "%3.d",
-__LINE__, 0x6943c150, "6943c150", "%x",
-__LINE__, 0xffffc25d, "FFFFC25D", "%4X",
-__LINE__, 0x00000c9c, " 0003228", "% .7d",
-__LINE__, 0xffffffdf, "FFFFFFDF", "% 6.X",
-__LINE__, 0x0001a145, " 1a145", "%6.0x",
-__LINE__, 0xffdc832f, "0xffdc832f", "%#.1x",
-__LINE__, 0x00699f7b, "699f7b", "%x",
-__LINE__, 0xf9575268, "F9575268", "%+0X",
-__LINE__, 0x04eb4783, "82528131", "%-ld",
-__LINE__, -0x0000023, "-35", "%0ld",
-__LINE__, -0x012b08a, "-1224842", "%0d",
-__LINE__, 0xffffb587, "FFFFB587", "%X",
-__LINE__, 0xffffffe9, "ffffffe9", "%x",
-__LINE__, 0x006b5596, " 7034262", "% 0d",
-__LINE__, 0x004d0d2a, "+5049642", "%+ld",
-__LINE__, -0x002a099, "-172185", "%d",
-__LINE__, 0x00000224, "548", "%ld",
-__LINE__, 0x03e0cca8, "65064104", "%d",
-__LINE__, -0x7bb389d, "-129710237", "%.3ld",
-__LINE__, 0xffc630f5, "ffc630f5", "%-07.0x",
-__LINE__, 0xfffffff8, "FFFFFFF8", "%X",
-__LINE__, 0x0030225b, "3154523", "%#d",
-__LINE__, 0xff7f4e28, "ff7f4e28", "%+4.x",
-__LINE__, 0x14ee154d, "+351147341", "%+ld",
-__LINE__, 0x00000003, "03", "%.2d",
-__LINE__, 0xfe0359d6, "fe0359d6", "%x",
-__LINE__, 0x002b71c3, "2847171", "%d",
-__LINE__, 0x055c4d4a, "55C4D4A", "%-X",
-__LINE__, 0xfffb17d2, "fffb17d2", "% .0x",
-__LINE__, 0x00000002, "2", "%x",
-__LINE__, 0x000018e1, "18E1", "%1.1X",
-__LINE__, 0x00000331, "817", "%0d",
-__LINE__, -0x0000982, "-2434 ", "%-06.ld",
-__LINE__, -0x0000168, "-0000360", "%.7ld",
-__LINE__, 0xffffffe9, "FFFFFFE9", "%-0.4X",
-__LINE__, 0xe42084ef, "E42084EF", "%X",
-__LINE__, 0x000000aa, "aa", "%x",
-__LINE__, -0xe8b98b5, "-244029621", "%+d",
-__LINE__, -0x00000d9, "-217", "%+2.d",
-__LINE__, 0x0000027b, "27B", "%+.0X",
-__LINE__, 0x002e52db, "3035867", "%-ld",
-__LINE__, -0x00e2ba8, "-928680", "%0.2ld",
-__LINE__, 0x003b74d8, "3B74D8", "%X",
-__LINE__, -0x000006f, "-111", "%+ld",
-__LINE__, 0xf8507e22, "0XF8507E22", "%-#X",
-__LINE__, 0x0629f4c0, "103412928", "%-ld",
-__LINE__, -0x000002d, "-45", "%0d",
-__LINE__, -0x0001db0, "-7600", "%d",
-__LINE__, -0x00001bb, " -443", "%5.ld",
-__LINE__, 0xffffd2b9, "ffffd2b9", "%+x",
-__LINE__, 0xffffe685, "0XFFFFE685", "%#0.7X",
-__LINE__, 0x0000a4ce, "A4CE", "% X",
-__LINE__, 0xffffffff, "FFFFFFFF", "%X",
-__LINE__, 0x0000000c, "C", "% X",
-__LINE__, 0xfff59369, "FFF59369", "%7X",
-__LINE__, 0x00000156, " 156", "%5.X",
-__LINE__, 0x02833aa9, "+42154665", "%+2d",
-__LINE__, 0x0004a8f3, "+305395", "%+d",
-__LINE__, 0x01a09267, "1A09267", "%0.3X",
-__LINE__, 0x000004f1, "4f1", "%x",
-__LINE__, 0x00000005, "5", "%x",
-__LINE__, 0x00000119, " 0281", "% #2.4ld",
-__LINE__, -0x0001a2a, "-6698", "%ld",
-__LINE__, 0xa3633a57, "A3633A57", "%7X",
-__LINE__, -0x10bd2970, "-280832368", "%-d",
-__LINE__, 0xffff9c38, "ffff9c38", "%x",
-__LINE__, 0xffdbe81e, "ffdbe81e", "%+6.7x",
-__LINE__, 0xffffffe7, "FFFFFFE7", "%-3.0X",
-__LINE__, 0x0002f6d6, "2f6d6", "%5.x",
-__LINE__, 0xffffffff, "ffffffff", "% x",
-__LINE__, 0xffc2c07a, "ffc2c07a", "%0.x",
-__LINE__, 0xfcc0e13a, "FCC0E13A", "%X",
-__LINE__, 0x0000000d, "d", "% x",
-__LINE__, 0x0016cac8, "16CAC8", "%-0.3X",
-__LINE__, 0x00945dc1, "9723329", "%2d",
-__LINE__, 0xf19a1cd1, "F19A1CD1", "%-X",
-__LINE__, 0x00000003, "+3", "%+ld",
-__LINE__, 0x00000773, "1907", "%ld",
-__LINE__, 0x000263e6, "263e6", "%-x",
-__LINE__, -0x0238b55, "-2329429", "%d",
-__LINE__, 0x00006c56, "6C56", "%X",
-__LINE__, 0x0000f34b, "62283", "%#.0ld",
-__LINE__, -0x1620e21, "-23203361", "%0ld",
-__LINE__, 0xf9257d6a, "f9257d6a", "%2x",
-__LINE__, -0x00ed463, "-971875", "%03.d",
-__LINE__, 0x02bb94c6, "45847750", "%d",
-__LINE__, 0xffffd20c, "0XFFFFD20C", "%#X",
-__LINE__, 0x000087d8, "34776", "%.0d",
-__LINE__, 0xfffffffc, "FFFFFFFC", "%+7.X",
-__LINE__, -0x0009cd5, "-40149", "%-ld",
-__LINE__, 0xfffff85e, "FFFFF85E", "% 0.7X",
-__LINE__, -0x0000006, " -6", "%+#6.ld",
-__LINE__, 0x007ff453, "0x7ff453", "%-#1.x",
-__LINE__, 0xffffffe6, "FFFFFFE6", "%2X",
-__LINE__, 0x0000001f, "0X1F", "%#4X",
-__LINE__, -0x001c157, "-115031", "%.3ld",
-__LINE__, 0x00096e06, "617990", "%3.1ld",
-__LINE__, 0x0f77271d, "259467037", "%d",
-__LINE__, -0x0001403, "-5123", "%d",
-__LINE__, 0xffffff8a, "ffffff8a", "%x",
-__LINE__, -0x000010f, "-271", "%1.ld",
-__LINE__, 0xe573cc4a, "E573CC4A", "%0X",
-__LINE__, -0x0000d88, "-3464", "%-d",
-__LINE__, 0x0000000e, "14", "%#ld",
-__LINE__, -0x000345b, "-13403", "%#d",
-__LINE__, 0x00000602, "602", "%+x",
-__LINE__, 0x00000011, "17", "%#d",
-__LINE__, -0x0000002, "-2", "%+d",
-__LINE__, 0x030fe6e6, "51373798", "%d",
-__LINE__, 0x00000007, "007", "%.3X",
-__LINE__, 0x0001abe0, "0X1ABE0", "%+#.4X",
-__LINE__, 0xfffffdb7, "fffffdb7", "%-6x",
-__LINE__, 0xffffff8d, "FFFFFF8D", "% 02.2X",
-__LINE__, 0xfff12126, "FFF12126", "%X",
-__LINE__, 0x0208e32d, "34136877", "%.2d",
-__LINE__, 0x11c04b55, "297814869", "%ld",
-__LINE__, 0xff1e5ca3, "0xff1e5ca3", "%#x",
-__LINE__, 0xf9643f09, "f9643f09", "%x",
-__LINE__, -0x003c6da, "-247514", "%4d",
-__LINE__, 0xff69d0e7, "FF69D0E7", "%-X",
-__LINE__, 0x00006ae9, "0x6ae9", "%#x",
-__LINE__, -0x005aefe, "-372478", "%d",
-__LINE__, 0x0000000d, "00013", "%3.5ld",
-__LINE__, 0x00cc185c, "CC185C", "%X",
-__LINE__, 0x3dd14d9f, "3DD14D9F", "%1.4X",
-__LINE__, -0x4cc2ad3, "-80489171", "%1.d",
-__LINE__, 0xfffff79e, "fffff79e", "%x",
-__LINE__, 0xfffeeb03, "fffeeb03", "%-1x",
-__LINE__, -0x0b1b15c, "-11645276", "%0ld",
-__LINE__, -0x06b558d, "-7034253", "%ld",
-__LINE__, 0xfffffe61, "fffffe61", "%x",
-__LINE__, -0x0000002, "-2", "%d",
-__LINE__, -0x0000162, "-000354", "%-5.6d",
-__LINE__, 0x01a23780, "27408256", "%d",
-__LINE__, 0xffff3a9b, "ffff3a9b", "% x",
-__LINE__, 0xfffffdc7, "0xfffffdc7", "%#4.5x",
-__LINE__, 0x00000000, "00", "%.2X",
-__LINE__, -0x0000006, "-6", "%0ld",
-__LINE__, -0x16072c6, "-23098054", "%#5ld",
-__LINE__, -0x07152b8, "-7426744", "%01ld",
-__LINE__, 0x0000d6c6, "0x0d6c6", "%#1.5x",
-__LINE__, 0x00000f7c, "000f7c", "%+04.6x",
-__LINE__, 0x00000bd0, "3024", "%4ld",
-__LINE__, 0x0000295e, "0x295e", "%#x",
-__LINE__, 0x00002e38, "11832", "%.5d",
-__LINE__, -0xa2f5de4, "-170876388", "%#d",
-__LINE__, -0x001aa36, "-109110", "%-#d",
-__LINE__, 0x03012091, "3012091", "%+2.5X",
-__LINE__, -0x00009ed, "-002541", "%-0.6ld",
-__LINE__, 0x0000001d, "1d", "%x",
-__LINE__, 0xffffe315, "FFFFE315", "%+4X",
-__LINE__, 0x0000716b, "716B", "%X",
-__LINE__, 0xfffb8315, "0xfffb8315", "%+#x",
-__LINE__, 0x00000132, "132 ", "%-7.3x",
-__LINE__, 0x00000000, "+0000000", "%+1.7d",
-__LINE__, 0xe16d27ab, "E16D27AB", "%X",
-__LINE__, 0xffffffe5, "ffffffe5", "%+x",
-__LINE__, -0x000ab9d, "-43933", "%ld",
-__LINE__, 0xffd042d6, "ffd042d6", "%2x",
-__LINE__, 0xffffff9b, "ffffff9b", "%x",
-__LINE__, 0x000000fb, "0xfb", "% #1.x",
-__LINE__, 0x0000000f, " 15", "%#3ld",
-__LINE__, 0xfffba2d8, "0XFFFBA2D8", "%-#0.X",
-__LINE__, 0xfffffff8, "0XFFFFFFF8", "% #X",
-__LINE__, 0x00000000, " ", "%4.ld",
-__LINE__, 0x00000002, "2", "%+x",
-__LINE__, 0xfffff314, "FFFFF314", "%-X",
-__LINE__, 0x00000000, " 0", "% ld",
-__LINE__, -0x0000007, "-07", "%3.2ld",
-__LINE__, 0xffffdd80, "FFFFDD80", "%.6X",
-__LINE__, -0x000001b, "-27", "%-ld",
-__LINE__, -0x0000258, "-600", "%-0d",
-__LINE__, 0x00016377, "16377", "%3X",
-__LINE__, 0x00000001, "1", "%X",
-__LINE__, -0xac5d314, "-180736788", "%d",
-__LINE__, -0x000036e, "-878", "% ld",
-__LINE__, 0xfe346af4, "fe346af4", "%.5x",
-__LINE__, 0xffffffe1, "ffffffe1", "%-7.6x",
-__LINE__, -0x0a1df07, "-10608391", "%#.5d",
-__LINE__, 0x000000c9, " 0XC9", "%+#5.X",
-__LINE__, 0xfffffffe, "fffffffe", "%x",
-__LINE__, 0xfffffff8, "fffffff8", "%+x",
-__LINE__, -0x4517255, "-72446549", "%.6ld",
-__LINE__, 0xfffa3670, "FFFA3670", "%-6X",
-__LINE__, 0xffffffe0, "ffffffe0", "%2.x",
-__LINE__, 0xffffffff, "ffffffff", "%0x",
-__LINE__, 0x0000230d, "8973", "%#.1d",
-__LINE__, 0x00000238, "238", "%0X",
-__LINE__, 0xfffce5ab, "FFFCE5AB", "%-X",
-__LINE__, 0x0000002c, "2C", "%X",
-__LINE__, 0x00000001, " 1", "%4.ld",
-__LINE__, 0xffffff8d, "FFFFFF8D", "%-X",
-__LINE__, 0x00069c69, "433257", "%06d",
-__LINE__, 0xfffffb8d, "0xfffffb8d", "%#x",
-__LINE__, 0x000d6a2d, "879149", "%5.5d",
-__LINE__, -0x0001fcb, " -8139", "%7.ld",
-__LINE__, 0xfff86937, "fff86937", "%-0x",
-__LINE__, 0x00059cf9, "367865", "%#.0ld",
-__LINE__, 0x02c5d87a, "46520442", "%3.ld",
-__LINE__, 0x00000571, "1393", "%ld",
-__LINE__, 0x0003c73f, "+247615", "%+4ld",
-__LINE__, 0x0000004f, "4f", "% 0x",
-__LINE__, 0x00000000, "0", "%-ld",
-__LINE__, -0x0e5850f, "-15041807", "% ld",
-__LINE__, -0x0000002, " -0002", "%7.4d",
-__LINE__, 0xfffffd1b, "fffffd1b", "%05x",
-__LINE__, 0x0000041c, " 1052", "% #0.ld",
-__LINE__, -0x0000030, "-48", "%d",
-__LINE__, -0x0013593, "-79251", "% #d",
-__LINE__, 0x00000001, "1", "%+X",
-__LINE__, 0x0000056b, " 56b", "%4.x",
-__LINE__, -0x0000004, "-4 ", "%-3d",
-__LINE__, -0x0000003, "-3", "% ld",
-__LINE__, 0xffff7c14, "0XFFFF7C14", "%#X",
-__LINE__, 0x02f63dd8, "49692120", "%.7ld",
-__LINE__, -0x03c51c9, "-3953097", "%+d",
-__LINE__, 0x00ded685, "14603909", "%5.ld",
-__LINE__, 0xffffffba, "ffffffba", "%x",
-__LINE__, 0x000370e8, "225512", "%#ld",
-__LINE__, 0x00000003, "3", "%X",
-__LINE__, -0x0024a64, "-150116", "%7.d",
-__LINE__, 0xff486ca1, "ff486ca1", "%x",
-__LINE__, 0x000001cf, "1CF", "% X",
-__LINE__, -0x0002d7e, "-11646", "%-0d",
-__LINE__, 0x0a594c65, "a594c65", "%.4x",
-__LINE__, -0x0000002, "-0002", "%-5.4ld",
-__LINE__, 0x00000000, "", "%00.ld",
-__LINE__, 0x00058bc4, "58BC4", "%3X",
-__LINE__, 0x0002cf8e, " 184206", "% 0ld",
-__LINE__, 0x000009c7, "+2503", "%+4.ld",
-__LINE__, 0xed0c984d, "ED0C984D", "%X",
-__LINE__, -0x0000058, "-088", "%#.3ld",
-__LINE__, 0x0076083d, "0X76083D", "%#6X",
-__LINE__, -0x0000001, "-1", "%#d",
-__LINE__, -0x6bf1777, "-113186679", "%#ld",
-__LINE__, -0x000011f, "-287", "%ld",
-__LINE__, 0x001b0e7d, "1B0E7D", "%-4X",
-__LINE__, 0x000007ac, " 1964", "%5.ld",
-__LINE__, 0x00000005, "5", "%0.d",
-__LINE__, -0x00003ba, "-954", "%4.0ld",
-__LINE__, 0xfffffffe, "FFFFFFFE", "%X",
-__LINE__, 0x00000019, "19", "%x",
-__LINE__, 0xffffffe0, "ffffffe0", "%-.6x",
-__LINE__, 0x0000012a, " 298", "% d",
-__LINE__, 0x00002c74, "2c74", "% 4.3x",
-__LINE__, 0x000002d5, "725", "%d",
-__LINE__, 0x0001c9a9, "1c9a9", "%-02x",
-__LINE__, 0xffc928c8, "ffc928c8", "%x",
-__LINE__, -0x03ae51f, "-3859743", "% #ld",
-__LINE__, 0x0000526d, "526d", "%x",
-__LINE__, -0x00028f0, "-10480", "%5ld",
-__LINE__, -0x49b4262, "-77283938", "%+02.0d",
-__LINE__, 0x028d37f0, "0x28d37f0", "%+#x",
-__LINE__, 0xd66e0af9, "D66E0AF9", "%03.X",
-__LINE__, -0x00c7707, "-816903", "%0d",
-__LINE__, -0x00000d0, "-208", "%-.1ld",
-__LINE__, 0x0000c328, "49960", "%d",
-__LINE__, 0x34cb86f1, "34CB86F1", "%X",
-__LINE__, 0x000000f6, "F6", "%+X",
-__LINE__, 0x0a3407ec, "0xa3407ec", "%-#x",
-__LINE__, 0x00007ebc, "32444", "%#3.d",
-__LINE__, 0xfffd3d65, "fffd3d65", "%x",
-__LINE__, 0x0007bc82, "0507010", "%0.7d",
-__LINE__, 0x0005bb93, "375699", "%ld",
-__LINE__, 0x0ec11cc8, "0XEC11CC8", "%+#6.2X",
-__LINE__, 0xfffff9c6, "fffff9c6", "%.5x",
-__LINE__, 0xff05ab70, "0XFF05AB70", "%-#.3X",
-__LINE__, 0x2328b716, "589870870", "%d",
-__LINE__, 0x00001a79, "6777", "%.1d",
-__LINE__, 0xfffee573, "fffee573", "%0.1x",
-__LINE__, -0x0000929, " -2345", "%7.d",
-__LINE__, 0xffffff9a, "FFFFFF9A", "%2.X",
-__LINE__, 0xfffffe60, "fffffe60", "%.5x",
-__LINE__, 0xfffffcd2, "fffffcd2", "%.7x",
-__LINE__, 0x00000001, " 001", "%6.3X",
-__LINE__, 0x00011e9c, "+73372", "%+0ld",
-__LINE__, 0x0000002a, "2a", "% x",
-__LINE__, 0xffffffff, "ffffffff", "%.7x",
-__LINE__, -0x0008ee8, "-36584", "%ld",
-__LINE__, 0x0000001c, "28", "%-d",
-__LINE__, 0x000abeda, "704218", "%d",
-__LINE__, 0x001347f7, "1347f7", "%3.0x",
-__LINE__, 0x0000023e, "574", "%3.3ld",
-__LINE__, 0x00000000, "0", "%-ld",
-__LINE__, -0x0016de0, "-93664", "%0ld",
-__LINE__, 0xffffff45, "FFFFFF45", "% X",
-__LINE__, 0x02dfb08c, "48214156", "%#ld",
-__LINE__, 0x003d73a2, "3d73a2", "%6.x",
-__LINE__, 0x00147da7, "1342887", "%#d",
-__LINE__, -0x5ff0f1e, "-100601630", "%-01ld",
-__LINE__, -0x000000b, "-11", "%ld",
-__LINE__, 0x00000168, " 168", "%+6.x",
-__LINE__, 0xffffc28e, "ffffc28e", "%0x",
-__LINE__, -0x00003a2, "-930", "%ld",
-__LINE__, 0x0002e56f, " 189807", "% 1.ld",
-__LINE__, 0x51abf44f, "0x51abf44f", "%#.7x",
-__LINE__, 0x00000000, "0", "%d",
-__LINE__, 0x9581268f, "9581268F", "%+X",
-__LINE__, 0xffffff3b, "FFFFFF3B", "%X",
-__LINE__, 0x000083d4, " 33748", "% #d",
-__LINE__, 0x00000001, "1", "%x",
-__LINE__, -0x000e51f, "-58655", "%.0ld",
-__LINE__, 0x0003eacb, "256715", "%6ld",
-__LINE__, 0x02be09db, " 46008795", "% 0.ld",
-__LINE__, 0xfffffffb, "FFFFFFFB", "% X",
-__LINE__, 0x000084f5, " 34037", "%6ld",
-__LINE__, -0x1127f99, "-17989529", "%#d",
-__LINE__, 0x5f6512de, "5f6512de", "%.7x",
-__LINE__, 0x00000001, "1", "%x",
-__LINE__, 0xfff74ab5, "fff74ab5", "%x",
-__LINE__, 0x0eebeb94, "250342292", "%4.ld",
-__LINE__, 0x0001b846, "0x1b846", "%#1x",
-__LINE__, 0x001e8c32, "1E8C32", "%2X",
-__LINE__, -0x0dae932, "-14346546", "%5.1d",
-__LINE__, 0x00000001, "1", "%ld",
-__LINE__, -0x0000042, "-66", "%ld",
-__LINE__, 0xffffff51, "FFFFFF51", "%0.1X",
-__LINE__, 0x00000043, "43", "%x",
-__LINE__, 0x04c21f39, " 79830841", "% 0ld",
-__LINE__, 0x0000061e, "1566", "%03.3d",
-__LINE__, -0x0000003, "-3", "%+d",
-__LINE__, 0x015b32db, " 22754011", "% .4d",
-__LINE__, 0xfffff181, "FFFFF181", "%-X",
-__LINE__, 0x000017ec, "0X17EC", "%#X",
-__LINE__, 0x000d703e, "880702", "%#ld",
-__LINE__, -0x6d7533a0, "-1836397472", "%ld",
-__LINE__, 0x0000008a, " 138", "% d",
-__LINE__, -0x7368794b, "-1936226635", "%+#d",
-__LINE__, 0x0000000d, "0XD", "%#X",
-__LINE__, 0x0000030d, "30D", "% X",
-__LINE__, 0xfffff9fe, "FFFFF9FE", "%5X",
-__LINE__, 0x00001bb2, "7090", "%d",
-__LINE__, 0x041d2a0c, "41D2A0C", "%0X",
-__LINE__, 0x00012aee, " 76526", "% d",
-__LINE__, 0x0000055f, "55f", "%.1x",
-__LINE__, 0xffffffff, "0XFFFFFFFF", "%#1X",
-__LINE__, 0x07b0a971, "+129018225", "%+.2ld",
-__LINE__, 0xfffffff8, "FFFFFFF8", "%4X",
-__LINE__, 0x00000001, "1", "%d",
-__LINE__, 0x00000038, "+56", "%+2ld",
-__LINE__, 0xfffffc2f, "fffffc2f", "%+7.x",
-__LINE__, 0x00004477, "0x4477", "% #x",
-__LINE__, 0x0000000d, "0XD", "%+#3X",
-__LINE__, 0xf5bf37b1, "F5BF37B1", "%1.X",
-__LINE__, 0x1a96f431, "446100529", "%d",
-__LINE__, 0x0037edf3, "+3665395", "%+#4.5ld",
-__LINE__, 0x0007f2aa, "520874", "%0ld",
-__LINE__, -0x00051a3, "-20899", "%+#1.ld",
-__LINE__, 0x0000037f, "37F", "%0X",
-__LINE__, 0xffffffb4, "ffffffb4", "%x",
-__LINE__, -0xd984c00, "-228084736", "%+06ld",
-__LINE__, 0xffffe1be, "FFFFE1BE", "%X",
-__LINE__, 0xfff20d48, "FFF20D48", "%+6.0X",
-__LINE__, 0x000028b7, "0x028b7", "%-#7.5x",
-__LINE__, -0x0000001, "-1", "%ld",
-__LINE__, 0x03f37945, "66287941", "%d",
-__LINE__, 0xffffffed, "0XFFFFFFED", "%+#6.4X",
-__LINE__, 0x0000f046, "f046", "%x",
-__LINE__, 0xe9772b51, "E9772B51", "%-1.X",
-__LINE__, 0xfffffffe, "fffffffe", "% x",
-__LINE__, 0xfffffffa, "0xfffffffa", "%#x",
-__LINE__, 0x00000015, "15", "%-X",
-__LINE__, 0x0000003c, "60", "%#ld",
-__LINE__, 0x3103952d, "822318381", "%0.ld",
-__LINE__, 0x17ba68bb, "398092475", "%2d",
-__LINE__, 0x000006c4, "+1732", "%+.2d",
-__LINE__, 0x00000043, "67", "%#d",
-__LINE__, 0x0043fb55, "4455253", "%.1ld",
-__LINE__, 0x00004b76, "4b76", "% 0x",
-__LINE__, 0xfff4c56b, "FFF4C56B", "%7X",
-__LINE__, 0x00766055, "766055", "%+5x",
-__LINE__, -0x000009f, "-159", "%+d",
-__LINE__, 0xffff063f, "ffff063f", "%-2x",
-__LINE__, 0x00808fc8, "808fc8", "%x",
-__LINE__, 0xffffffff, "ffffffff", "%x",
-__LINE__, 0x000000f1, "00000f1", "%+02.7x",
-__LINE__, 0x00000002, "2", "%X",
-__LINE__, 0x00000000, "000", "%03d",
-__LINE__, 0xe63f73b2, "E63F73B2", "% 1X",
-__LINE__, 0xfffffffe, "FFFFFFFE", "%5.1X",
-__LINE__, 0x0d3fa38b, "222274443", "%1d",
-__LINE__, 0x00000000, "0", "% X",
-__LINE__, 0x00000001, " 1", "%04.ld",
-__LINE__, 0x00000046, "46", "%0X",
-__LINE__, 0x0000761f, " 30239", "% ld",
-__LINE__, -0x0002517, "-9495", "%+d",
-__LINE__, 0x00000156, "156", "% 0x",
-__LINE__, 0x1c55eba2, "1c55eba2", "%.6x",
-__LINE__, 0x005af80d, "5af80d", "%.6x",
-__LINE__, 0x0000002e, "46", "%d",
-__LINE__, -0x0007c0f, "-31759", "%ld",
-__LINE__, 0xffffe924, "FFFFE924", "%7X",
-__LINE__, 0x00000174, "372", "%ld",
-__LINE__, 0xffffffc9, "0xffffffc9", "%-#x",
-__LINE__, 0x00000020, "+000032", "%+07d",
-__LINE__, 0xffffe5d9, "FFFFE5D9", "%4.5X",
-__LINE__, 0xffffffa3, "FFFFFFA3", "%+.3X",
-__LINE__, 0x00000a03, "+2563", "%+2d",
-__LINE__, 0x001b58ca, "+1792202", "%+4d",
-__LINE__, 0xffffffc9, "0xffffffc9", "%+#5x",
-__LINE__, -0x0000003, "-3", "% d",
-__LINE__, 0xfffffffc, "fffffffc", "%+0x",
-__LINE__, -0x0000002, "-02", "%.2d",
-__LINE__, 0x000243fb, "148475", "%-ld",
-__LINE__, 0x00000001, "1", "%0d",
-__LINE__, -0x0000672, "-1650", "%ld",
-__LINE__, -0x0005413, "-0021523", "% 7.7d",
-__LINE__, 0x00000017, "0X17", "%#X",
-__LINE__, 0x00000e48, "3656", "%0d",
-__LINE__, 0xffe79b38, "ffe79b38", "%-x",
-__LINE__, 0xffffff15, "FFFFFF15", "%+6.1X",
-__LINE__, 0xfff0272c, "fff0272c", "%-.5x",
-__LINE__, -0x00b706f, "-749679", "%1.ld",
-__LINE__, 0x0176aeec, "176AEEC", "%.1X",
-__LINE__, -0x00005a1, "-1441", "% 0ld",
-__LINE__, -0x0000002, "-00002", "%.5d",
-__LINE__, -0xd2e6f5d, "-221146973", "%1ld",
-__LINE__, -0x0000001, " -001", "%5.3ld",
-__LINE__, 0x00000001, " 1", "%05.ld",
-__LINE__, 0x0000749e, "+29854", "%+#d",
-__LINE__, 0x00000005, "5", "%d",
-__LINE__, 0xfa7128b0, "fa7128b0", "%1.x",
-__LINE__, 0xffffbbb4, "0XFFFFBBB4", "%#.1X",
-__LINE__, 0x0006862f, "427567", "%d",
-__LINE__, 0x00000002, "2", "%X",
-__LINE__, 0x000005d4, "5d4", "% x",
-__LINE__, 0x001387e1, "1279969", "%-05.0ld",
-__LINE__, -0x0035a56, "-219734", "%ld",
-__LINE__, -0x4064ecc6, "-1080356038", "%ld",
-__LINE__, 0x0000360d, "13837", "%0ld",
-__LINE__, -0xea1a85b, "-245475419", "%-.2ld",
-__LINE__, 0xffffff2d, "FFFFFF2D", "%X",
-__LINE__, 0x00000004, " 0004", "%7.4x",
-__LINE__, 0x00f72ffd, "F72FFD", "%-X",
-__LINE__, 0x00000fa2, "fa2 ", "%-5x",
-__LINE__, 0x05ae1f9a, "95297434", "%#ld",
-__LINE__, 0x0000bf2e, "48942", "%3.d",
-__LINE__, 0x00000000, " ", "%1.X",
-__LINE__, 0x01bcb097, "29143191", "%ld",
-__LINE__, 0x0000009c, "156 ", "%-4.0d",
-__LINE__, 0xfffffffe, "fffffffe", "% x",
-__LINE__, 0x00000001, "1 ", "%-6.d",
-__LINE__, 0xffffffef, "ffffffef", "%7.x",
-__LINE__, 0xfffffec1, "fffffec1", "%.5x",
-__LINE__, -0x000000f, "-15", "%-1d",
-__LINE__, -0x0008426, "-33830", "%0ld",
-__LINE__, 0x005be0ae, "5BE0AE", "% X",
-__LINE__, 0x00000009, " 9", "%+7X",
-__LINE__, -0x0007e18, "-32280", "%+0.d",
-__LINE__, 0x01697ba1, " 23690145", "% 5.ld",
-__LINE__, -0x0012042, "-073794", "%7.6d",
-__LINE__, 0x04e9bd0d, "4e9bd0d", "%-2x",
-__LINE__, 0xffffffd9, "FFFFFFD9", "%.2X",
-__LINE__, -0x01b9632, "-1807922", "%.6ld",
-__LINE__, 0x000000cd, "205", "%1.ld",
-__LINE__, 0x00000000, " ", "% .0d",
-__LINE__, 0xff17bbb1, "ff17bbb1", "%x",
-__LINE__, -0x00146d7, "-83671", "%+1.ld",
-__LINE__, 0xfffff144, "fffff144", "%x",
-__LINE__, 0x000f8dbe, "F8DBE", "%3.X",
-__LINE__, -0x000381c, "-14364", "%d",
-__LINE__, 0x0000001e, " 30", "%4.1d",
-__LINE__, 0x00000016, "22", "%-0d",
-__LINE__, 0x00000002, "+02", "%+1.2ld",
-__LINE__, 0x0000e803, "59395", "%d",
-__LINE__, 0xb4c2448d, "b4c2448d", "%-7x",
-__LINE__, 0x000e697d, "944509", "%ld",
-__LINE__, 0xfffe6e32, "0XFFFE6E32", "%#X",
-__LINE__, 0x00000190, " 190", "%+5.X",
-__LINE__, -0x03a2219, "-3809817", "%#6.ld",
-__LINE__, -0x000003c, "-60 ", "%-#4.ld",
-__LINE__, 0x00000000, " ", "% 03.ld",
-__LINE__, -0x074f922, "-7665954", "%ld",
-__LINE__, -0x00000f0, "-240", "%-ld",
-__LINE__, 0xfffe42d2, "0XFFFE42D2", "%#X",
-__LINE__, 0x000000dd, "DD", "%X",
-__LINE__, 0x00359abe, "359ABE", "%.1X",
-__LINE__, 0xffec7bdf, "FFEC7BDF", "%0.1X",
-__LINE__, 0x0ecddcba, "248372410", "%-#3.d",
-__LINE__, 0x00ad0dbc, "11341244", "%ld",
-__LINE__, -0x0000001, "-1", "%-d",
-__LINE__, 0x00050841, "50841", "% .5x",
-__LINE__, 0x01d359e7, "1d359e7", "%1.x",
-__LINE__, 0xff9efaa3, "FF9EFAA3", "%X",
-__LINE__, 0x0007ea10, "+518672", "%+ld",
-__LINE__, -0x000671c, "-26396", "%1d",
-__LINE__, 0xffffff91, "0xffffff91", "%#4.4x",
-__LINE__, 0x00000000, "+", "%+0.0ld",
-__LINE__, -0x002c53e, "-181566", "%3.d",
-__LINE__, 0xffffff56, "ffffff56", "%x",
-__LINE__, 0xfffff589, "FFFFF589", "%+X",
-__LINE__, 0x00024d13, "24D13", "%-5.2X",
-__LINE__, 0x00000000, " 0", "%6.1d",
-__LINE__, 0x00a64f33, "A64F33", "%4.4X",
-__LINE__, 0xffebb57a, "FFEBB57A", "%5.4X",
-__LINE__, 0xfff3b4a0, "fff3b4a0", "%2.x",
-__LINE__, 0xffffffd9, "FFFFFFD9", "%.2X",
-__LINE__, 0x00d37b84, "13859716", "%d",
-__LINE__, 0x00001e85, "0001E85", "%0.7X",
-__LINE__, -0x756148f, "-123081871", "% 7.d",
-__LINE__, -0x0319339, "-3248953", "%+#.4d",
-__LINE__, -0x00798b8, "-497848", "%#5ld",
-__LINE__, -0x0000039, "-57", "%0d",
-__LINE__, -0x000b1d7, "-45527", "%+0.ld",
-__LINE__, 0xff811fba, "FF811FBA", "%+X",
-__LINE__, 0x00000042, " 66", "% ld",
-__LINE__, 0xfffffe31, "0XFFFFFE31", "%#X",
-__LINE__, 0x00000073, "115", "%ld",
-__LINE__, 0x45091a39, "0x45091a39", "%+#3.x",
-__LINE__, 0x001270f5, "1270f5", "%-5.6x",
-__LINE__, 0xfffd91fd, "fffd91fd", "%x",
-__LINE__, -0x0817bad, "-8485805", "%#ld",
-__LINE__, -0x32ad55f, "-53138783", "%0d",
-__LINE__, 0x00003e57, "15959", "%0ld",
-__LINE__, -0x0048756, "-296790", "%2.6d",
-__LINE__, 0xff90f45f, "FF90F45F", "% X",
-__LINE__, 0x0000e454, "0e454", "% .5x",
-__LINE__, 0xfffffffc, "fffffffc", "%x",
-__LINE__, 0xfffffff7, "FFFFFFF7", "%-2X",
-__LINE__, 0xffdabf0e, "FFDABF0E", "%+X",
-__LINE__, 0xffffffff, "0XFFFFFFFF", "%#1X",
-__LINE__, 0x01516650, "1516650", "% x",
-__LINE__, 0xffffff51, "FFFFFF51", "%X",
-__LINE__, 0x000000ea, "234", "%00.d",
-__LINE__, 0x06db60ca, "115040458", "%5.d",
-__LINE__, 0x00000f01, " 3841", "% d",
-__LINE__, 0x00000009, "9", "%x",
-__LINE__, 0x299b3ba0, "299b3ba0", "%6.7x",
-__LINE__, 0x0067f298, "67f298", "%-2.6x",
-__LINE__, 0xfffffff5, "FFFFFFF5", "% 2X",
-__LINE__, 0x00102ff9, "102FF9", "%-.0X",
-__LINE__, 0xffc22393, "0xffc22393", "% #6x",
-__LINE__, 0x00007db5, "32181", "%-2ld",
-__LINE__, 0x0000b0a3, "0xb0a3", "%#0x",
-__LINE__, 0x001ceebb, "1CEEBB", "%-3.4X",
-__LINE__, 0x00025101, "0x25101", "%#x",
-__LINE__, -0x0000001, "-1", "%0ld",
-__LINE__, 0xffffd846, "FFFFD846", "%+2.3X",
-__LINE__, 0x00001d79, " 7545", "% 0.1ld",
-__LINE__, -0x0000002, " -2", "%5d",
-__LINE__, 0xf93b9fdc, "f93b9fdc", "%5x",
-__LINE__, 0xffff0021, "FFFF0021", "%6X",
-__LINE__, 0x00007cf9, "7cf9", "%3.1x",
-__LINE__, -0x0000002, "-2", "%d",
-__LINE__, 0x00001d84, "1d84", "%0x",
-__LINE__, -0x033201e, "-3350558", "%-2.0d",
-__LINE__, 0xfff8a6fb, "FFF8A6FB", "%+.7X",
-__LINE__, 0x00006fff, " 28671", "% ld",
-__LINE__, -0x02a274a, "-2762570", "%d",
-__LINE__, -0x0006628, "-26152", "%00ld",
-__LINE__, 0x00000011, "11", "%-x",
-__LINE__, -0x0000ed9, "-3801", "%0.ld",
-__LINE__, 0xfc5b725d, "FC5B725D", "%X",
-__LINE__, 0x3530bd4e, "892386638", "%7.d",
-__LINE__, 0x03bb4ff7, "62607351", "%#4.7ld",
-__LINE__, 0x00009f86, "9f86", "%x",
-__LINE__, 0x0000e727, "59175", "%1d",
-__LINE__, 0xfffffdf2, "0XFFFFFDF2", "%#X",
-__LINE__, 0x00e60dbf, "0XE60DBF", "% #1.X",
-__LINE__, 0xffffffff, "FFFFFFFF", "%+X",
-__LINE__, 0x0a16f44e, "0XA16F44E", "%#.0X",
-__LINE__, 0x0001f97c, "1f97c", "% x",
-__LINE__, 0x0000000d, "13", "%#0ld",
-__LINE__, 0x0000002a, "42", "%0ld",
-__LINE__, 0x00000007, " +7", "%+5ld",
-__LINE__, 0xffffff7f, "FFFFFF7F", "%-X",
-__LINE__, 0x000006a6, "1702", "%ld",
-__LINE__, 0xfaff2fb1, "faff2fb1", "% x",
-__LINE__, 0xffff94ab, "ffff94ab", "%x",
-__LINE__, 0x011d611b, "0X11D611B", "%#2.3X",
-__LINE__, 0x00000000, " +000", "%+#5.3ld",
-__LINE__, -0x87fcc37, "-142593079", "%+d",
-__LINE__, -0x0417424, "-4289572", "%+d",
-__LINE__, 0x03fabc0c, "3fabc0c", "%x",
-__LINE__, 0xfffff880, "fffff880", "%-x",
-__LINE__, 0x000002d7, "2d7", "%-02.x",
-__LINE__, 0x00003e82, "16002", "%#d",
-__LINE__, -0x0003713, "-14099", "% 5d",
-__LINE__, -0x0000027, "-39", "%ld",
-__LINE__, 0x00013098, "0077976", "%01.7d",
-__LINE__, -0x000000c, "-12", "%ld",
-__LINE__, -0x00000c0, "-192", "% ld",
-__LINE__, 0xffbe9285, "FFBE9285", "%3.X",
-__LINE__, 0x00000046, "46", "%x",
-__LINE__, 0x00000000, " ", "%+4.x",
-__LINE__, 0x00011e72, "73330", "%2.3d",
-__LINE__, -0x5276dd7, "-86470103", "%d",
-__LINE__, 0x00000013, "19", "%-02.ld",
-__LINE__, 0x384118a7, "0X384118A7", "%-#X",
-__LINE__, 0x00000000, "0", "% #X",
-__LINE__, 0x00000009, "9", "%#ld",
-__LINE__, 0x00021145, "135493", "%-ld",
-__LINE__, 0xff188a0c, "FF188A0C", "%1.X",
-__LINE__, 0xffffffd5, "ffffffd5", "%0x",
-__LINE__, 0xfffffffe, "FFFFFFFE", "% 0X",
-__LINE__, 0xffff74a3, "ffff74a3", "%x",
-__LINE__, 0x01d5a2f8, "1d5a2f8", "%-0.x",
-__LINE__, 0xfffffef6, "fffffef6", "%+06.x",
-__LINE__, 0x00000001, "1", "%ld",
-__LINE__, 0x00000000, "+0", "%+ld",
-__LINE__, 0xfffffffc, "fffffffc", "%4.x",
-__LINE__, -0x0000344, "-0836", "% .4d",
-__LINE__, 0xfffffffd, "FFFFFFFD", "%0X",
-__LINE__, 0x000a3121, "667937", "%#4.4ld",
-__LINE__, 0x0001e211, "0X1E211", "%#X",
-__LINE__, 0x00000c8b, "00C8B", "%05X",
-__LINE__, 0xfffffffe, "fffffffe", "%+0x",
-__LINE__, 0x001a53ce, "1725390", "%d",
-__LINE__, 0x0000057f, "57f ", "%-7.x",
-__LINE__, -0x0073e4d, "-474701", "%#ld",
-__LINE__, -0x0000002, " -2", "% 3.d",
-__LINE__, 0x482dc404, "482DC404", "%X",
-__LINE__, 0x0000011c, "11c", "%-.1x",
-__LINE__, 0x00000c12, " 3090", "%5.3ld",
-__LINE__, 0xfffe1068, "FFFE1068", "%-.4X",
-__LINE__, -0x0055e88, "-351880", "%ld",
-__LINE__, 0x000c9cef, "+826607", "%+d",
-__LINE__, 0xffffffe3, "ffffffe3", "%0x",
-__LINE__, -0x0000ee9, "-3817", "%#ld",
-__LINE__, 0xff1f6daa, "FF1F6DAA", "%X",
-__LINE__, 0xfffffc4e, "FFFFFC4E", "%5.2X",
-__LINE__, -0x000040a, "-1034", "%d",
-__LINE__, -0x0000085, "-00133", "% 01.5d",
-__LINE__, -0x126c797c, "-309098876", "%5.ld",
-__LINE__, 0x00000039, " 57", "% d",
-__LINE__, 0xfffffff6, "0xfffffff6", "%#5.x",
-__LINE__, 0xfffffff4, "fffffff4", "%7.6x",
-__LINE__, 0x00000003, "3", "%ld",
-__LINE__, 0x0000f8ae, "f8ae", "%.0x",
-__LINE__, 0x003ca1cf, "3973583", "%#3.7d",
-__LINE__, 0x14687009, "0x14687009", "%+#3x",
-__LINE__, 0xfffff1f7, "0xfffff1f7", "%#4.5x",
-__LINE__, 0xfffff17a, "fffff17a", "%3.x",
-__LINE__, 0x0011ea18, "1174040", "%ld",
-__LINE__, -0x0000019, "-25", "%03.d",
-__LINE__, 0x00015d72, "0X15D72", "%-#X",
-__LINE__, 0xffde4a41, "ffde4a41", "%x",
-__LINE__, 0x00006f1f, "28447", "%d",
-__LINE__, 0xffffffbd, "0xffffffbd", "%#.1x",
-__LINE__, 0x000013b9, "13B9", "%0X",
-__LINE__, -0x00001b9, "-00441", "%1.5d",
-__LINE__, 0x00000001, "000001", "%-.6d",
-__LINE__, 0x7b602d8f, "+2069900687", "%+0ld",
-__LINE__, 0x0005e323, "+385827", "%+ld",
-__LINE__, 0x00002fce, "2FCE", "%+0X",
-__LINE__, 0x0000000e, "0014", "%.4d",
-__LINE__, 0xffffffd6, "0XFFFFFFD6", "%#4.X",
-__LINE__, 0x037bf361, "58454881", "%5.ld",
-__LINE__, 0xffffffff, "FFFFFFFF", "%-7.5X",
-__LINE__, -0x016d4dc, "-1496284", "%6ld",
-__LINE__, 0x0005be9a, "0x5be9a", "%-#.5x",
-__LINE__, 0xffffffff, "ffffffff", "%1x",
-__LINE__, 0x00000055, " 85", "% 7.d",
-__LINE__, 0xffffffff, "ffffffff", "%x",
-__LINE__, -0x0135392, "-1266578", "% ld",
-__LINE__, 0x00850f26, "8720166", "%d",
-__LINE__, 0xffffee39, "ffffee39", "%0x",
-__LINE__, 0x000000dd, "221", "%ld",
-__LINE__, 0x00000000, " ", "%6.d",
-__LINE__, 0x000000d8, "d8", "%x",
-__LINE__, 0x000007ec, "002028", "%4.6ld",
-__LINE__, 0x0dab4e67, "0XDAB4E67", "%#X",
-__LINE__, 0xfffd7c95, "FFFD7C95", "% 4X",
-__LINE__, 0x0009302d, "9302D", "%3.1X",
-__LINE__, 0x00000003, " 3", "% d",
-__LINE__, 0x0000082f, "82f", "%-x",
-__LINE__, 0x0652517f, "652517F", "%-.2X",
-__LINE__, -0x1fd8f4e3, "-534312163", "%d",
-__LINE__, 0x00000176, "176", "%-x",
-__LINE__, 0x00000001, "1", "%ld",
-__LINE__, 0x0000001a, "1A", "%X",
-__LINE__, -0x0005740, "-22336", "% 0ld",
-__LINE__, 0xffffffff, "ffffffff", "%6x",
-__LINE__, 0x1b273b80, "0x1b273b80", "%#x",
-__LINE__, 0x00000065, "65", "%X",
-__LINE__, 0x6a62138a, "1784812426", "%2ld",
-__LINE__, 0x000001a2, "1A2", "%X",
-__LINE__, -0x002aafd, "-174845", "%02.ld",
-__LINE__, 0x00000014, "20", "%d",
-__LINE__, -0x00000c7, " -199", "%7.0ld",
-__LINE__, 0xff545bfd, "ff545bfd", "%-x",
-__LINE__, -0x002beb9, "-179897", "%02.2ld",
-__LINE__, -0x00000df, "-223", "% 02.d",
-__LINE__, -0x000d569, "-54633", "%1.ld",
-__LINE__, 0x0000000e, "14", "%d",
-__LINE__, -0x0077407, "-488455", "% ld",
-__LINE__, 0x0001be09, "114185", "%ld",
-__LINE__, -0x0000514, "-01300", "%+05.5d",
-__LINE__, 0xf1fb397f, "f1fb397f", "%+x",
-__LINE__, 0xfdb6707c, "FDB6707C", "%X",
-__LINE__, 0x03cad111, "3cad111", "%5.x",
-__LINE__, -0x022e72f, "-2287407", "%d",
-__LINE__, -0xda35f48, "-228810568", "%d",
-__LINE__, -0x02d1fd4, "-2957268", "%1.3d",
-__LINE__, 0x0000005f, "+95", "%+2d",
-__LINE__, 0xfffbf8a1, "FFFBF8A1", "%4.2X",
-__LINE__, 0x0000071e, " 71e", "%6.x",
-__LINE__, 0x000cc8a5, "+837797", "%+03ld",
-__LINE__, 0x000eebe9, " EEBE9", "%6.X",
-__LINE__, -0x2896b204, "-680964612", "%d",
-__LINE__, -0x09553f8, "-9786360", "%d",
-__LINE__, 0x000015d3, "5587", "%0d",
-__LINE__, 0x0000056d, " 56d", "%+4.x",
-__LINE__, -0x00624ad, "-402605", "% ld",
-__LINE__, 0xfea64ba5, "0xfea64ba5", "%#1x",
-__LINE__, 0x004f35c6, "5191110", "%-ld",
-__LINE__, -0x1441fe4, "-21241828", "%d",
-__LINE__, 0xffffff95, "FFFFFF95", "%X",
-__LINE__, 0xfffecf81, "FFFECF81", "%-2.X",
-__LINE__, -0x00002bb, "-699", "%-d",
-__LINE__, -0x0000c29, "-3113", "% 02ld",
-__LINE__, 0x000026a3, " 9891", "% .4d",
-__LINE__, 0x00000003, "3", "%-x",
-__LINE__, 0x000007db, "+02011", "%+.5ld",
-__LINE__, 0xfff99558, "FFF99558", "%.1X",
-__LINE__, 0x0000fce6, "64742", "%4.0d",
-__LINE__, 0x000b7ea2, "753314", "%ld",
-__LINE__, 0x13e5df30, "0X13E5DF30", "%#2.X",
-__LINE__, 0x006761c4, "06761C4", "%6.7X",
-__LINE__, 0xffffff78, "FFFFFF78", "%0.X",
-__LINE__, 0xfffff1c0, "0xfffff1c0", "% #x",
-__LINE__, -0x034af1c, "-3452700", "% 06.1d",
-__LINE__, 0x000000de, "0000222", "%2.7ld",
-__LINE__, 0x000003d8, "0x3d8", "%#4.x",
-__LINE__, -0x001a1d1, "-106961", "%3.1d",
-__LINE__, -0x0000002, "-2", "% d",
-__LINE__, 0x00001de6, "+7654", "%+0ld",
-__LINE__, 0x00000001, "001", "%#.3d",
-__LINE__, -0x53dacf9f, "-1406848927", "%ld",
-__LINE__, 0xfffffffc, "fffffffc", "%3.3x",
-__LINE__, -0x00950e8, "-610536", "%3.6ld",
-__LINE__, 0xff14ade9, "FF14ADE9", "%6X",
-__LINE__, 0x012f5284, "0X12F5284", "% #5X",
-__LINE__, 0x00005a21, " 5a21", "%5x",
-__LINE__, 0x00000638, "1592", "%2.4ld",
-__LINE__, -0x063017b, "-6488443", "%ld",
-__LINE__, 0x00000000, "0", "% X",
-__LINE__, 0xfffe8ef2, "FFFE8EF2", "%+0X",
-__LINE__, -0x0001c96, "-7318", "%.3d",
-__LINE__, 0x0000ca7d, "51837", "%ld",
-__LINE__, 0x00000001, "1", "%+1x",
-__LINE__, 0xfffff7bc, "FFFFF7BC", "%X",
-__LINE__, -0x03d15e2, "-4003298", "%ld",
-__LINE__, 0xfffffffe, "fffffffe", "% x",
-__LINE__, 0x00066183, "+418179", "%+7.1ld",
-__LINE__, 0xffffef2e, "ffffef2e", "%-2.x",
-__LINE__, 0x00000000, " 000", "%04.3x",
-__LINE__, -0x000000f, "-15", "% d",
-__LINE__, -0x00001f5, "-501", "%d",
-__LINE__, 0x0c67f159, "c67f159", "%6.2x",
-__LINE__, -0x0000006, "-6", "%.1d",
-__LINE__, 0x00000005, "0X5", "%+#1X",
-__LINE__, -0x0000002, " -2", "%6.ld",
-__LINE__, 0xeb2183ec, "eb2183ec", "% x",
-__LINE__, -0x5e12a322, "-1578279714", "%d",
-__LINE__, 0x00000001, "0x1", "%#x",
-__LINE__, -0x0001ea4, "-7844", "%0d",
-__LINE__, -0x19955a3, "-26826147", "%d",
-__LINE__, 0x000002a6, "2A6", "%2.X",
-__LINE__, 0x00000002, "2", "%X",
-__LINE__, 0xfffffeec, "fffffeec", "%0.4x",
-__LINE__, 0xfffffffc, "fffffffc", "%0x",
-__LINE__, 0xffdfe740, "FFDFE740", "% X",
-__LINE__, -0x0b0b3e7, "-11580391", "%.1d",
-__LINE__, 0x8e01077c, "8E01077C", "%5.7X",
-__LINE__, 0x3b6b6d55, "996896085", "%1.1d",
-__LINE__, 0x000016af, "5807", "%ld",
-__LINE__, -0x0004900, "-18688", "%d",
-__LINE__, 0xfffd77bc, "FFFD77BC", "%X",
-__LINE__, 0x004cbd74, "5029236", "%0d",
-__LINE__, 0x00000003, " 00003", "%6.5d",
-__LINE__, 0x0004720f, "4720f", "% x",
-__LINE__, 0x0e44535d, "e44535d", "%4x",
-__LINE__, 0xfffffff9, "FFFFFFF9", "%3.3X",
-__LINE__, -0x0000005, "-5", "%-d",
-__LINE__, 0x000001a6, "00001A6", "%1.7X",
-__LINE__, 0x0000004a, "4A", "%-2.X",
-__LINE__, 0xfffff249, "FFFFF249", "%X",
-__LINE__, 0x00004345, "4345", "%x",
-__LINE__, 0x0197041d, "197041d", "%+0x",
-__LINE__, 0x0000019a, " 19a", "% 6.x",
-__LINE__, 0xfff98376, "FFF98376", "%X",
-__LINE__, 0xfc536c41, "FC536C41", "%X",
-__LINE__, -0x0008d91, "-36241", "% d",
-__LINE__, 0xf058d69d, "f058d69d", "%4.x",
-__LINE__, -0x00013ef, "-5103", "%d",
-__LINE__, -0x0000003, "-3", "%00ld",
-__LINE__, -0x09e80f0, "-10387696", "%+07ld",
-__LINE__, -0x0222c15, "-2239509", "%#0.4ld",
-__LINE__, 0x00000004, "4", "%0ld",
-__LINE__, -0x02c6b0d, "-2910989", "% 0ld",
-__LINE__, 0xfffffffe, "FFFFFFFE", "%-4X",
-__LINE__, 0xffffff3d, "FFFFFF3D", "%-.0X",
-__LINE__, -0x0000015, "-21", "%0d",
-__LINE__, 0x131dfc90, "+320732304", "%+d",
-__LINE__, 0xffffffff, "ffffffff", "%+x",
-__LINE__, 0x000035c8, "13768", "%0ld",
-__LINE__, 0x00000033, "0x0033", "%#.4x",
-__LINE__, 0x0ce7e8c1, "0xce7e8c1", "%#.7x",
-__LINE__, 0xfc18b5d2, "FC18B5D2", "%+.3X",
-__LINE__, 0x00000015, "21", "%d",
-__LINE__, 0x001a5e7c, "1a5e7c", "%05x",
-__LINE__, -0x000fbf0, "-64496", "%ld",
-__LINE__, -0x000a4f7, "-042231", "%+2.6d",
-__LINE__, -0x0000002, "-002", "%3.3ld",
-__LINE__, 0x00728878, "728878", "%0X",
-__LINE__, -0x0000002, "-2", "%#.1ld",
-__LINE__, -0x00002ef, "-751", "%-0ld",
-__LINE__, 0xfffffff7, "fffffff7", "%.3x",
-__LINE__, 0x00491867, "0491867", "%.7X",
-__LINE__, 0x00000d4d, "3405", "%-ld",
-__LINE__, 0x00234e86, "234E86", "%0X",
-__LINE__, -0x000001b, "-27", "%ld",
-__LINE__, 0x00275255, "2576981", "%.5ld",
-__LINE__, 0xfeacc214, "0XFEACC214", "%-#3.X",
-__LINE__, -0x0001ce5, "-7397", "%+#2.2ld",
-__LINE__, 0x089ddb6a, "144563050", "%d",
-__LINE__, 0x003d5a95, "3D5A95", "%1X",
-__LINE__, 0x002f0b6d, "3083117", "%d",
-__LINE__, 0x1e79e228, "511304232", "%ld",
-__LINE__, 0xfffffe6b, "FFFFFE6B", "%+0X",
-__LINE__, -0x5104ff3, "-84955123", "%.4ld",
-__LINE__, 0xfffff1de, "FFFFF1DE", "%X",
-__LINE__, 0x000000cf, "+207", "%+.1ld",
-__LINE__, -0x16ad0164, "-380436836", "%+5.d",
-__LINE__, 0x001fefa6, "2092966", "%ld",
-__LINE__, 0x00000000, "00", "%-.2d",
-__LINE__, 0x00195f45, "195f45", "%+0x",
-__LINE__, 0x00000001, " 1", "%3.ld",
-__LINE__, -0x00001c9, "-457", "% ld",
-__LINE__, 0x0002479e, "149406", "%#ld",
-__LINE__, 0x001ab18b, "1749387", "%04d",
-__LINE__, 0x00000045, "69", "%ld",
-__LINE__, 0xfbb13f7d, "fbb13f7d", "%.2x",
-__LINE__, 0x03ddc208, "3ddc208", "%x",
-__LINE__, 0x00000007, "000007", "%#.6d",
-__LINE__, 0x00000000, "0", "%01X",
-__LINE__, -0x0023110, "-143632", "%+0.3d",
-__LINE__, 0x00000006, "06", "%#.2d",
-__LINE__, 0xffff9ec9, "ffff9ec9", "%7x",
-__LINE__, -0x08afb12, "-9108242", "% #0.ld",
-__LINE__, 0x00000004, "4", "%X",
-__LINE__, 0x00059684, "59684", "%x",
-__LINE__, 0xfff8d8f5, "FFF8D8F5", "%X",
-__LINE__, 0x00b7027d, "+11993725", "%+0.7ld",
-__LINE__, 0x0000d814, "55316", "%0ld",
-__LINE__, 0x03c95a08, "3c95a08", "%3x",
-__LINE__, -0x0b65f9a, "-11952026", "%d",
-__LINE__, 0xfd956021, "fd956021", "%0x",
-__LINE__, 0x000000ed, "ed", "%0x",
-__LINE__, -0x006a80c, "-436236", "%.6ld",
-__LINE__, 0xfedb109d, "fedb109d", "%x",
-__LINE__, 0x00000001, "1", "%X",
-__LINE__, 0x00b3eb71, " 11791217", "% d",
-__LINE__, 0x00000016, "16", "%0X",
-__LINE__, 0x000001db, " 475", "% ld",
-__LINE__, 0x00465eaf, "4611759", "%0d",
-__LINE__, 0x0001b423, "1B423", "%0X",
-__LINE__, 0x05df95ea, "5df95ea", "%+.5x",
-__LINE__, 0x0000000e, " 14", "%7ld",
-__LINE__, 0xffffb89e, "ffffb89e", "%+x",
-__LINE__, 0x01259918, " 19241240", "% d",
-__LINE__, -0x0000f8d, "-003981", "%+#.6d",
-__LINE__, 0x00054ae0, "54AE0", "%X",
-__LINE__, -0x4589ed4, "-72916692", "% ld",
-__LINE__, 0x01017516, "1017516", "%6X",
-__LINE__, 0xfffb9f15, "FFFB9F15", "%.2X",
-__LINE__, 0x005f8394, "5F8394", "%.2X",
-__LINE__, 0xffffffff, "ffffffff", "%x",
-__LINE__, -0x0000001, " -1", "%7.1ld",
-__LINE__, 0x004367af, "4417455", "%4.ld",
-__LINE__, 0xffffff86, "ffffff86", "%4.5x",
-__LINE__, -0x0000d17, "-3351", "%2.0ld",
-__LINE__, 0xffffff31, "ffffff31", "%.6x",
-__LINE__, -0x0000001, "-1", "%ld",
-__LINE__, -0x3d785fab, "-1031298987", "%d",
-__LINE__, -0x0000002, "-2", "%-0ld",
-__LINE__, 0x0000019c, "412", "%d",
-__LINE__, -0x0006f54, "-28500", "%d",
-__LINE__, 0xfffe3524, "FFFE3524", "% 6.2X",
-__LINE__, -0x128d3c00, "-311245824", "%2d",
-__LINE__, -0x3be71293, "-1004999315", "%d",
-__LINE__, 0x0000659d, "26013", "%d",
-__LINE__, 0x2d947538, "+764704056", "%+5d",
-__LINE__, 0xffa2a420, "FFA2A420", "%0X",
-__LINE__, 0x00000001, "1", "%d",
-__LINE__, 0x04477c14, "4477c14", "%.6x",
-__LINE__, -0x06e145b, "-7214171", "%d",
-__LINE__, 0x00009c01, "39937", "%-.1d",
-__LINE__, 0xffde174b, "ffde174b", "% 0x",
-__LINE__, 0x0001fbae, "1FBAE", "%01.X",
-__LINE__, -0x06b8406, "-7046150", "%d",
-__LINE__, 0x000005b8, "005b8", "%05x",
-__LINE__, -0x02d780b, "-2979851", "%1d",
-__LINE__, 0x00209e26, "2137638", "%2d",
-__LINE__, 0x0000041a, "41A", "%0X",
-__LINE__, 0x2a77f42c, "2A77F42C", "%02X",
-__LINE__, 0x13b6ee14, "+330755604", "%+0d",
-__LINE__, -0x0000002, "-2 ", "%-6.d",
-__LINE__, -0x0001eee, "-7918", "% #2.ld",
-__LINE__, 0xffffffff, "FFFFFFFF", "% .5X",
-__LINE__, 0x20d11927, "20d11927", "% 0.x",
-__LINE__, -0x0018690, "-99984", "% ld",
-__LINE__, 0x000002a0, "2A0", "%-0X",
-__LINE__, -0x0000511, "-1297", "%+d",
-__LINE__, 0x0e782f31, "242757425", "%-0.ld",
-__LINE__, 0x2ce06da0, "752905632", "%#0ld",
-__LINE__, 0x00000062, "62 ", "%-07x",
-__LINE__, -0x015d9d8, "-1432024", "% 7d",
-__LINE__, 0xc9125ea8, "c9125ea8", "%x",
-__LINE__, 0x00000006, "6", "%.0ld",
-__LINE__, 0x0000019c, "19c", "%x",
-__LINE__, 0x00000000, " ", "%6.d",
-__LINE__, 0x00043e89, "278153", "%0ld",
-__LINE__, 0x3e422abd, "1044523709", "%ld",
-__LINE__, 0x0220a75d, "35694429", "%#7.6d",
-__LINE__, 0x0000c21c, "C21C", "% X",
-__LINE__, 0x000074ab, "29867", "%d",
-__LINE__, 0x056b22aa, "56B22AA", "%+0.X",
-__LINE__, 0xfffffff9, "FFFFFFF9", "%X",
-__LINE__, 0x00000000, "0", "%X",
-__LINE__, 0xf094a4f4, "f094a4f4", "%+4.x",
-__LINE__, -0x1dad0244, "-497877572", "%d",
-__LINE__, 0xffffffff, "FFFFFFFF", "%.1X",
-__LINE__, 0xfffffe2d, "fffffe2d", "%7.x",
-__LINE__, 0x0000042b, "0x42b", "%#x",
-__LINE__, -0x0000001, "-1", "% d",
-__LINE__, 0x00e77ef5, " 15171317", "% 7.ld",
-__LINE__, 0x00006210, " 25104", "% 06d",
-__LINE__, 0x0011187a, "1120378", "%-ld",
-__LINE__, -0x000000b, "-11", "% #ld",
-__LINE__, 0x14cfaff0, "14cfaff0", "%-2.3x",
-__LINE__, 0xffff74ea, "FFFF74EA", "%3.X",
-__LINE__, 0x000bfb9d, "bfb9d", "%x",
-__LINE__, 0xfffffffe, "FFFFFFFE", "%X",
-__LINE__, 0x00014500, "0X14500", "%#4.X",
-__LINE__, -0x0000001, "-1", "%#1d",
-__LINE__, -0x0000024, "-36", "%-0d",
-__LINE__, -0x6528828, "-106072104", "%d",
-__LINE__, 0x00000075, " 117", "% #d",
-__LINE__, 0xff027d67, "ff027d67", "%0x",
-__LINE__, 0x0012b8b3, "12b8b3", "%0.1x",
-__LINE__, 0x1070147b, "275780731", "%.6ld",
-__LINE__, 0xffffe88e, "FFFFE88E", "%1.3X",
-__LINE__, 0xfffffc0d, "fffffc0d", "%00.6x",
-__LINE__, 0xffd889f5, "ffd889f5", "%x",
-__LINE__, 0x00000470, "1136", "%0ld",
-__LINE__, 0x000297f8, "169976", "%ld",
-__LINE__, 0xfffffffe, "fffffffe", "%+1x",
-__LINE__, 0x0000064a, "64a", "%x",
-__LINE__, -0x3d71e43b, "-1030874171", "%1.d",
-__LINE__, -0x0000004, "-4 ", "%-3.d",
-__LINE__, 0xfffff132, "FFFFF132", "%0.0X",
-__LINE__, 0x37b6356f, "37b6356f", "%-x",
-__LINE__, 0xffffff7a, "FFFFFF7A", "%.0X",
-__LINE__, 0x00023553, "23553", "%x",
-__LINE__, 0x39a4c29f, "39a4c29f", "%+5.x",
-__LINE__, 0xffffffcc, "ffffffcc", "%x",
-__LINE__, 0x0003a83b, "239675", "%#6ld",
-__LINE__, 0x00000002, "2", "%0x",
-__LINE__, -0x09b4e8c, "-10178188", "%+03.ld",
-__LINE__, 0x00000002, "0000002", "%-#.7ld",
-__LINE__, 0x00000b5e, "2910", "%-04ld",
-__LINE__, -0x0000254, "-596", "%+0d",
-__LINE__, 0x00000001, "1", "%+1.x",
-__LINE__, 0xf8290d3e, "0XF8290D3E", "% #X",
-__LINE__, 0x00000035, "035", "%3.3X",
-__LINE__, 0x00131d7d, "131D7D ", "%-7.6X",
-__LINE__, 0xffdbb36a, "0xffdbb36a", "%#.6x",
-__LINE__, 0xc7275816, "c7275816", "%04.x",
-__LINE__, 0x00bae994, "12249492", "%0ld",
-__LINE__, 0x00000002, "+2", "%+0.0ld",
-__LINE__, 0xffffffff, "ffffffff", "%0x",
-__LINE__, 0xffffffe0, "ffffffe0", "%x",
-__LINE__, 0x00000036, "36", "%.0X",
-__LINE__, 0xfffffffd, "FFFFFFFD", "%1X",
-__LINE__, 0xffffffc8, "ffffffc8", "%+x",
-__LINE__, 0xe71c3689, "e71c3689", "%x",
-__LINE__, 0x00000007, "7 ", "%-3.ld",
-__LINE__, 0xffffffff, "ffffffff", "%x",
-__LINE__, 0x00030400, "030400", "%-4.6x",
-__LINE__, 0xbd8c6fa7, "BD8C6FA7", "%-6X",
-__LINE__, 0x00000233, "0000563", "%.7ld",
-__LINE__, 0xfef92e35, "fef92e35", "%x",
-__LINE__, 0xffff2172, "ffff2172", "%3x",
-__LINE__, 0x00001233, "1233", "% X",
-__LINE__, -0x000d2e1, "-53985", "%-0d",
-__LINE__, -0x3ba8cb5b, "-1000917851", "%0d",
-__LINE__, -0x4fefb9a, "-83819418", "%5.ld",
-__LINE__, 0xffffe9eb, "FFFFE9EB", "%X",
-__LINE__, 0x1e472dc3, "507981251", "%ld",
-__LINE__, -0x0077046, "-487494", "%0d",
-__LINE__, 0x0002c4c9, "+181449", "%+7.d",
-__LINE__, 0xfffffe63, "fffffe63", "%x",
-__LINE__, 0xfff5a6db, "FFF5A6DB", "%X",
-__LINE__, 0x00174442, "174442", "%-5.0X",
-__LINE__, 0x017891d9, "17891D9", "%+5.X",
-__LINE__, 0x0261966b, "261966B", "%-X",
-__LINE__, -0x3e58614d, "-1045979469", "%ld",
-__LINE__, 0x002c4c41, "+2903105", "%+01ld",
-__LINE__, 0x0000000c, "012", "%#.3d",
-__LINE__, 0x0380f73a, "58783546", "%ld",
-__LINE__, 0x000002c7, "0000711", "%2.7ld",
-__LINE__, 0x00000002, " 002", "% 04ld",
-__LINE__, 0x00687ca0, "687CA0", "%X",
-__LINE__, 0x0000058a, "1418", "%0ld",
-__LINE__, -0x0000642, "-1602", "% ld",
-__LINE__, 0x0001f4f1, "1F4F1", "%X",
-__LINE__, 0x0026d6fc, "+2545404", "%+4.ld",
-__LINE__, 0x05dd423c, "+98386492", "%+#ld",
-__LINE__, 0x0000782c, "0782C", "%3.5X",
-__LINE__, 0xf67d91f8, "f67d91f8", "%-x",
-__LINE__, 0xffffcf2d, "ffffcf2d", "%+0x",
-__LINE__, -0x00af8a6, "-719014", "%0ld",
-__LINE__, -0xe606ef9, "-241200889", "%ld",
-__LINE__, 0xfe9d87f7, "fe9d87f7", "%+x",
-__LINE__, 0x00000d44, "d44", "% 1.x",
-__LINE__, 0x008716f5, "8716f5", "%2x",
-__LINE__, 0x000027d4, "27D4", "% X",
-__LINE__, 0xfdfd92ea, "FDFD92EA", "%-.4X",
-__LINE__, 0xfffe764f, "FFFE764F", "%X",
-__LINE__, 0xff699032, "ff699032", "%3.x",
-__LINE__, 0xffffffff, "FFFFFFFF", "%-3X",
-__LINE__, -0x368ba995, "-915122581", "%+#.6ld",
-__LINE__, 0xffffffff, "ffffffff", "%0x",
-__LINE__, 0x0000035e, " 862", "% 1d",
-__LINE__, 0xfe703e67, "fe703e67", "%07.0x",
-__LINE__, 0xfffffffe, "fffffffe", "%4.x",
-__LINE__, 0x000e20cf, "e20cf", "%0x",
-__LINE__, 0x000063b5, "0X63B5", "%-#X",
-__LINE__, 0xfffffffa, "fffffffa", "%+2.x",
-__LINE__, 0xffffffff, "FFFFFFFF", "%2.X",
-__LINE__, 0xfdfd69da, "FDFD69DA", "%.0X",
-__LINE__, 0x00002f61, "0x2f61", "%#3.x",
-__LINE__, 0x00000009, "9", "%x",
-__LINE__, 0xffffff86, "ffffff86", "%6x",
-__LINE__, 0xffffffe4, "ffffffe4", "%0x",
-__LINE__, 0x0062e73b, "+6481723", "%+0ld",
-__LINE__, -0x2b059130, "-721785136", "%+d",
-__LINE__, -0x0000073, "-115", "%d",
-__LINE__, 0xf596efcf, "f596efcf", "%x",
-__LINE__, 0x0002f1cb, "2F1CB", "%0X",
-__LINE__, -0x0000635, "-01589", "%.5ld",
-__LINE__, 0xfffa011a, "FFFA011A", "%0X",
-__LINE__, 0x00000047, " 47", "%4X",
-__LINE__, 0xfffffbc0, "FFFFFBC0", "%5.2X",
-__LINE__, 0x00000015, "15", "% X",
-__LINE__, 0x002a87a6, "2a87a6", "%.1x",
-__LINE__, -0x000069c, "-1692", "%+ld",
-__LINE__, 0xfffffffd, "fffffffd", "%+x",
-__LINE__, 0xfeda51f5, "FEDA51F5", "%0X",
-__LINE__, 0x001781a4, "1781a4", "%-0x",
-__LINE__, 0xe77358d4, "e77358d4", "%+0x",
-__LINE__, 0x00000084, " 84", "%3.x",
-__LINE__, 0xffff0cb2, "FFFF0CB2", "%+5.X",
-__LINE__, 0x0009fa17, "653847", "%0.0ld",
-__LINE__, -0x0000c92, "-3218", "%d",
-__LINE__, 0x0004ebbb, "4ebbb", "%x",
-__LINE__, 0x2e72568c, "+779245196", "%+#ld",
-__LINE__, 0xffae86a7, "ffae86a7", "%.7x",
-__LINE__, 0xffdf3f04, "ffdf3f04", "%x",
-__LINE__, 0x000000c7, "199", "%2.d",
-__LINE__, -0x0004a55, "-19029", "%ld",
-__LINE__, 0x00564ef9, "5656313", "%.6ld",
-__LINE__, 0xffffc205, "ffffc205", "%+.0x",
-__LINE__, -0x135085d0, "-324044240", "%#.5d",
-__LINE__, 0xfffffffe, "fffffffe", "%-7x",
-__LINE__, -0x0000003, "-3", "%.1ld",
-__LINE__, 0xffda9e0b, "ffda9e0b", "%+0x",
-__LINE__, 0x00000001, "1", "%d",
-__LINE__, 0xffffffda, "ffffffda", "%.6x",
-__LINE__, 0x5efdb3d1, "+1593684945", "%+0d",
-__LINE__, -0x00000ca, "-202", "% 4.d",
-__LINE__, -0x0014433, "-82995", "%.3d",
-__LINE__, -0x0000002, "-000002", "% .6ld",
-__LINE__, 0x24aac879, "615172217", "%.7d",
-__LINE__, -0x1db3c1d, "-31144989", "%+#4ld",
-__LINE__, 0x000945ad, "0x945ad", "%#1x",
-__LINE__, 0x0000000a, "10", "%#.1ld",
-__LINE__, -0x002a2e5, "-172773", "%d",
-__LINE__, 0xfffffff3, "FFFFFFF3", "%5X",
-__LINE__, 0x0000000e, "e", "%+x",
-__LINE__, 0x335333dc, "861090780", "%6.d",
-__LINE__, 0xfffa16f4, "FFFA16F4", "%6X",
-__LINE__, 0xffffc727, "ffffc727", "%+2.x",
-__LINE__, 0x00000273, "273", "%x",
-__LINE__, -0x000000f, "-15", "%-0d",
-__LINE__, 0x00065fbd, "417725", "%5.1d",
-__LINE__, 0x00000ed5, "3797", "%d",
-__LINE__, 0x30a40024, "30A40024", "%3.7X",
-__LINE__, 0x00000054, "84", "%ld",
-__LINE__, 0x00000515, "01301", "%.5ld",
-__LINE__, 0x00000897, "+02199", "%+.5d",
-__LINE__, -0x0001bcc, "-7116", "% ld",
-__LINE__, 0xfffffffe, "FFFFFFFE", "%7X",
-__LINE__, 0x00000013, "0X13", "%#X",
-__LINE__, 0xffffffff, "0xffffffff", "% #x",
-__LINE__, 0x00000006, "6", "%ld",
-__LINE__, -0x00000c3, "-195", "%1.ld",
-__LINE__, -0x005291e, "-338206", "%+d",
-__LINE__, 0xffb437a7, "FFB437A7", "%-0X",
-__LINE__, 0xff8335cb, "ff8335cb", "%x",
-__LINE__, 0x0000006a, "6A", "%2X",
-__LINE__, -0x004f629, "-325161", "% .4d",
-__LINE__, 0x003698ef, "3578095", "%0ld",
-__LINE__, 0x6b5cdf3a, "6b5cdf3a", "%-x",
-__LINE__, 0xe9bc5c21, "e9bc5c21", "%+x",
-__LINE__, -0x0000001, " -1", "%+6.ld",
-__LINE__, 0xfffeffc8, "FFFEFFC8", "%6.X",
-__LINE__, 0xff070a73, "ff070a73", "%+.7x",
-__LINE__, 0x0023f8ae, "2357422", "%07.4ld",
-__LINE__, 0x00000000, "0", "%X",
-__LINE__, 0x00000016, "16", "%0X",
-__LINE__, -0x000005a, " -90", "%4d",
-__LINE__, 0x00000116, "116", "% .3x",
-__LINE__, 0xfffed024, "fffed024", "%-x",
-__LINE__, 0xfb907950, "fb907950", "%.0x",
-__LINE__, 0x0101a1e5, "101a1e5", "%x",
-__LINE__, -0x09e7684, "-10385028", "%-#ld",
-__LINE__, 0xffffffff, "ffffffff", "%1x",
-__LINE__, 0xfffffff6, "fffffff6", "%x",
-__LINE__, 0x00000078, "78", "%x",
-__LINE__, 0xe6bca9c9, "0XE6BCA9C9", "%#.5X",
-__LINE__, -0x0000010, "-16", "%d",
-__LINE__, -0x1348f685, "-323548805", "%d",
-__LINE__, 0x4dd85797, "1306023831", "%ld",
-__LINE__, -0x0000080, "-128", "%.2d",
-__LINE__, -0xaed13a7, "-183309223", "%+ld",
-__LINE__, -0x000002f, "-47", "% d",
-__LINE__, -0x679911f, "-108630303", "%ld",
-__LINE__, 0xfffff221, "FFFFF221", "% .7X",
-__LINE__, 0x0007476c, "7476c", "%x",
-__LINE__, 0xffffe02a, "0xffffe02a", "%#7x",
-__LINE__, 0x00000ebb, "0XEBB", "%#X",
-__LINE__, 0xffffffff, "0XFFFFFFFF", "%-#X",
-__LINE__, 0x00281896, "281896", "%+1.x",
-__LINE__, 0x0000085d, " 0X85D", "%#6.3X",
-__LINE__, 0x000112bf, "112BF", "%X",
-__LINE__, 0xf5518fbf, "F5518FBF", "% X",
-__LINE__, -0x00c945b, "-824411", "%ld",
-__LINE__, 0x00001b43, "0x1b43", "%-#x",
-__LINE__, -0x5872a246, "-1483907654", "%#7.7ld",
-__LINE__, 0x00001f96, "8086", "%#d",
-__LINE__, 0xfffffff9, "FFFFFFF9", "%X",
-__LINE__, -0x006e244, "-451140", "% .3d",
-__LINE__, -0x0382188, "-3678600", "%0.2ld",
-__LINE__, 0x00000006, "6", "%-x",
-__LINE__, 0x00000036, "54 ", "%-5.d",
-__LINE__, -0x0000439, " -1081", "%#6.3ld",
-__LINE__, 0xfff911c6, "FFF911C6", "%X",
-__LINE__, -0x03454dc, "-3429596", "%d",
-__LINE__, -0x0363e8d, "-3554957", "%-.2ld",
-__LINE__, 0x00000000, "000", "%.3X",
-__LINE__, -0x59bb030f, "-1505428239", "%0ld",
-__LINE__, 0x073c94d8, "121410776", "%-d",
-__LINE__, -0x001ef94, "-126868", "%5.1ld",
-__LINE__, 0xfff65fc5, "FFF65FC5", "%0X",
-__LINE__, 0xfffffff4, "fffffff4", "%-x",
-__LINE__, 0x00001d83, "07555", "%5.5d",
-__LINE__, 0x0012b40a, "1225738", "%ld",
-__LINE__, -0x0000006, "-6", "%0ld",
-__LINE__, 0xfffffffc, "fffffffc", "%06.0x",
-__LINE__, -0x0000002, "-00002", "%#.5ld",
-__LINE__, 0xf9932c1d, "f9932c1d", "%-x",
-__LINE__, -0x46a31d9, "-74068441", "%.3ld",
-__LINE__, 0x000987e9, "987E9", "%1X",
-__LINE__, 0x0000000f, "15", "%-ld",
-__LINE__, -0x0001c4d, "-7245", "%ld",
-__LINE__, -0x007deee, "-515822", "%2.6d",
-__LINE__, 0xffffffa2, "FFFFFFA2", "%.6X",
-__LINE__, 0x00000001, "1", "%-ld",
-__LINE__, 0xfc106bde, "fc106bde", "%.4x",
-__LINE__, 0x0002f1f8, "0x2f1f8", "%#7.x",
-__LINE__, -0x06a290b, "-6957323", "%-ld",
-__LINE__, -0x0000037, " -55", "%4ld",
-__LINE__, 0x0000152e, "5422", "%2.d",
-__LINE__, 0xfffffcb2, "0XFFFFFCB2", "%#3.X",
-__LINE__, 0x1b7ca086, "1b7ca086", "%+x",
-__LINE__, 0x00000001, "1", "%ld",
-__LINE__, 0x006775fc, "6775fc", "%3.2x",
-__LINE__, 0x0000000e, "0XE", "%#3.X",
-__LINE__, 0xffffffff, "0xffffffff", "%+#4.x",
-__LINE__, 0x00001246, "1246", "%X",
-__LINE__, 0xffffaed6, "ffffaed6", "%2x",
-__LINE__, -0x3a2dec78, "-976088184", "% 0ld",
-__LINE__, 0x0001423b, "1423b", "%01x",
-__LINE__, 0x00000007, " 0X7", "%#4.X",
-__LINE__, 0x01a7ff5a, "27787098", "%.4ld",
-__LINE__, -0x0020d05, "-134405", "%-d",
-__LINE__, 0xffffff9a, "ffffff9a", "%-.1x",
-__LINE__, 0xffff3557, "ffff3557", "%x",
-__LINE__, 0x08828e35, "8828e35", "%+.1x",
-__LINE__, 0x000006b2, "001714", "%04.6ld",
-__LINE__, 0x00000013, "19", "%.0ld",
-__LINE__, -0x00341a5, "-213413", "%#d",
-__LINE__, -0x0000043, "-67", "%d",
-__LINE__, -0x074dce3, "-7658723", "%.1d",
-__LINE__, -0x16de2df3, "-383659507", "% ld",
-__LINE__, 0x00000000, "0", "%x",
-__LINE__, 0x00000ce7, "ce7", "% 2.1x",
-__LINE__, 0xffecd377, "ffecd377", "% 0x",
-__LINE__, 0xa4e8465c, "a4e8465c", "% x",
-__LINE__, 0x000005e8, "1512", "%d",
-__LINE__, 0x00000513, "1299", "%d",
-__LINE__, 0xffffffb8, "FFFFFFB8", "%X",
-__LINE__, 0x00000003, "00003", "%3.5x",
-__LINE__, -0x0000003, "-3 ", "%-3.ld",
-__LINE__, 0xad53f01d, "ad53f01d", "%0x",
-__LINE__, 0x0f1c1dae, "253500846", "%-#.0d",
-__LINE__, 0xff1753c0, "0xff1753c0", "%#3.x",
-__LINE__, -0x00389c5, "-231877", "%d",
-__LINE__, 0x0000016e, "00016E", "%.6X",
-__LINE__, -0x54d3310f, "-1423126799", "%-d",
-__LINE__, 0x00000005, "0X5", "%#.1X",
-__LINE__, 0xfffffffd, "0XFFFFFFFD", "%#5.3X",
-__LINE__, 0xfffffe0e, "fffffe0e", "%-x",
-__LINE__, 0xa3c02157, "a3c02157", "%.5x",
-__LINE__, 0x00005765, "22373", "%d",
-__LINE__, -0x12668cd, "-19294413", "%+ld",
-__LINE__, -0x66544da, "-107300058", "%2d",
-__LINE__, 0x8646c605, "0X8646C605", "% #X",
-__LINE__, 0x000001f5, "1F5", "%X",
-__LINE__, 0x01b33ae4, "28523236", "%5ld",
-__LINE__, 0x000007ce, "7ce", "%3.x",
-__LINE__, 0x00000355, "355", "%X",
-__LINE__, 0x000001ce, "1CE", "% X",
-__LINE__, 0xfffffccd, "fffffccd", "%7.0x",
-__LINE__, -0x0000001, "-1", "%0ld",
-__LINE__, 0x000640b6, "640b6", "%5.x",
-__LINE__, 0x0038c4ec, "3720428", "%5.4d",
-__LINE__, -0x0f10b5e, "-15797086", "%2ld",
-__LINE__, 0x256c815f, "256c815f", "%4.x",
-__LINE__, 0x00000682, " 1666", "%6ld",
-__LINE__, -0x00000ab, "-171", "%2ld",
-__LINE__, 0x00000003, "3", "%0d",
-__LINE__, 0x063f5075, "63F5075", "%X",
-__LINE__, 0xff83b5d0, "FF83B5D0", "%7.X",
-__LINE__, 0xffffffec, "ffffffec", "%x",
-__LINE__, 0xffb551c4, "0XFFB551C4", "% #4.X",
-__LINE__, -0x071f057, "-7467095", "%3.7d",
-__LINE__, 0x00634879, "6506617", "%#ld",
-__LINE__, 0x000001d7, "471", "%d",
-__LINE__, 0x00a7da92, "A7DA92", "% .4X",
-__LINE__, 0x00000003, "3 ", "%-2.ld",
-__LINE__, -0x0000004, "-0004", "%.4d",
-__LINE__, -0x01dea32, "-1960498", "% #7.d",
-__LINE__, 0x53c4159f, "53C4159F", "%1.7X",
-__LINE__, -0x1ad7904, "-28145924", "%#d",
-__LINE__, -0x0000a85, "-2693", "%ld",
-__LINE__, -0x0000c7d, "-3197", "%d",
-__LINE__, 0xfffffffc, "FFFFFFFC", "%+0X",
-__LINE__, 0x00000004, "00004", "%1.5d",
-__LINE__, 0x0000b761, "46945", "%5ld",
-__LINE__, -0x0ee3b2c, "-15612716", "%.6d",
-__LINE__, 0x0677a73d, "677a73d", "% x",
-__LINE__, -0x5f96020, "-100229152", "% d",
-__LINE__, 0x00000000, " 0", "%#7X",
-__LINE__, -0x5d1cb5b, "-97635163", "% ld",
-__LINE__, -0x00a8d8b, "-691595", "%-0ld",
-__LINE__, 0xffffffa2, "FFFFFFA2", "%X",
-__LINE__, 0xffffffc9, "FFFFFFC9", "%X",
-__LINE__, 0x0b180d35, "B180D35", "%X",
-__LINE__, 0xfc0b94ce, "fc0b94ce", "%.1x",
-__LINE__, 0x0012cd7b, "12CD7B", "% X",
-__LINE__, -0x02f1da8, "-3087784", "%ld",
-__LINE__, -0x000a6f9, "-42745", "%-ld",
-__LINE__, -0x000006d, "-109 ", "%-6d",
-__LINE__, 0x00000001, "+1", "%+0d",
-__LINE__, 0x00000001, "1", "%1d",
-__LINE__, 0xfffffff8, "fffffff8", "%5.x",
-__LINE__, -0x00fc4d7, "-1033431", "%+0.5ld",
-__LINE__, 0xffff41b4, "0xffff41b4", "%#x",
-__LINE__, -0x0000d37, "-3383", "%ld",
-__LINE__, 0xffc4e405, "ffc4e405", "%7x",
-__LINE__, 0xffffffb0, "FFFFFFB0", "%04X",
-__LINE__, -0x0054477, "-345207", "%01.ld",
-__LINE__, 0x00512778, "0x512778", "%#3.0x",
-__LINE__, 0x00000007, " 7", "%7.d",
-__LINE__, 0x00000008, " 00008", "% .5ld",
-__LINE__, 0x000053fd, "21501", "%.4ld",
-__LINE__, 0x0000370c, "370c", "%2x",
-__LINE__, -0x44670a7, "-71725223", "%3d",
-__LINE__, 0x00000064, " 64", "%+5x",
-__LINE__, 0xfffffffc, "FFFFFFFC", "%X",
-__LINE__, 0xf7bbf094, "f7bbf094", "%3x",
-__LINE__, 0xfffeb268, "FFFEB268", "%X",
-__LINE__, 0x00001ef0, "1ef0", "%4.x",
-__LINE__, 0x05ad9aa4, " 95263396", "% 0.ld",
-__LINE__, 0xf294dca7, "F294DCA7", "% 4.X",
-__LINE__, -0x0000003, "-000003", "%.6d",
-__LINE__, 0xfff57471, "fff57471", "% x",
-__LINE__, 0x0a848cfd, "176459005", "%d",
-__LINE__, -0x000002e, "-46", "%.0d",
-__LINE__, 0x00000051, " +81", "%+5d",
-__LINE__, -0x000072b, "-0001835", "%06.7d",
-__LINE__, -0x0000002, " -2", "%+#6ld",
-__LINE__, 0x00000003, "3", "%x",
-__LINE__, 0xfffd1799, "FFFD1799", "%6.X",
-__LINE__, 0x00000005, "5", "%ld",
-__LINE__, 0x0052138b, "5378955", "%#7.7ld",
-__LINE__, 0x000000c0, " 192", "% 7ld",
-__LINE__, 0x005b26cd, "5B26CD", "%X",
-__LINE__, -0x008df17, "-581399", "%.4ld",
-__LINE__, 0xfffffad8, "fffffad8", "%-x",
-__LINE__, 0x000006a9, "6a9", "%.0x",
-__LINE__, -0x003b7f9, "-243705", "%+0ld",
-__LINE__, 0x005d7ea4, "6127268", "%ld",
-__LINE__, -0x003ccea, "-249066", "%+.0ld",
-__LINE__, 0x0000846f, "846F", "%X",
-__LINE__, 0x00004f79, "4F79", "%4.X",
-__LINE__, 0xe3e1409c, "E3E1409C", "%-X",
-__LINE__, 0x07cce2f4, "7CCE2F4", "%2.X",
-__LINE__, 0x004bcc8b, "4967563", "%-.5ld",
-__LINE__, 0x7d49665e, "2101962334", "%ld",
-__LINE__, 0xfffffffc, "FFFFFFFC", "%.5X",
-__LINE__, 0x0000019e, "+000414", "%+.6d",
-__LINE__, 0x000027ef, "10223", "%d",
-__LINE__, -0x0000261, "-609", "%3ld",
-__LINE__, -0x000000e, "-14", "% 2.ld",
-__LINE__, 0xff3ba3c7, "ff3ba3c7", "%+5.7x",
-__LINE__, 0xffffffc4, "FFFFFFC4", "%-1.X",
-__LINE__, 0xfffc5a70, "0xfffc5a70", "%#4.4x",
-__LINE__, 0x0000d156, " 53590", "% d",
-__LINE__, -0x0486258, "-4743768", "%0ld",
-__LINE__, 0x00000000, " ", "% 2.d",
-__LINE__, 0x04a0ef9f, "77655967", "%0.6ld",
-__LINE__, 0xffffffff, "FFFFFFFF", "%X",
-__LINE__, 0x00000019, "0000019", "%.7x",
-__LINE__, -0x0058d3a, "-363834", "%ld",
-__LINE__, 0xfffff6b3, "fffff6b3", "%x",
-__LINE__, 0xfffffff5, "FFFFFFF5", "%.0X",
-__LINE__, 0x005e1fcb, "5E1FCB", "%+6X",
-__LINE__, 0xffc3c866, "0xffc3c866", "%-#.4x",
-__LINE__, 0x00000003, "3", "%X",
-__LINE__, 0xffa2e961, "FFA2E961", "%7.4X",
-__LINE__, 0x00000029, "41", "%d",
-__LINE__, -0x0000035, "-53", "%d",
-__LINE__, 0x0001b033, "110643", "%ld",
-__LINE__, 0x004dd51b, "5100827", "%-2ld",
-__LINE__, -0x000252d, "-9517", "% d",
-__LINE__, 0xffffdeb2, "ffffdeb2", "%4.x",
-__LINE__, 0xffe94eab, "0xffe94eab", "%#x",
-__LINE__, 0xf921edf6, "f921edf6", "%4.2x",
-__LINE__, 0x0007df97, "515991", "%4.ld",
-__LINE__, 0x00709bc5, "709BC5", "%0X",
-__LINE__, -0x0000001, "-1", "%d",
-__LINE__, 0xfffffffb, "FFFFFFFB", "%7.3X",
-__LINE__, -0x0063f74, "-409460", "%+05.0d",
-__LINE__, 0xfffffe9a, "FFFFFE9A", "%.2X",
-__LINE__, -0x0001ce2, "-7394", "%.4d",
-__LINE__, 0x000038c5, "14533", "%ld",
-__LINE__, 0x000000ad, "000ad", "% 5.5x",
-__LINE__, 0xffffbcc4, "ffffbcc4", "%-5x",
-__LINE__, 0x00000000, "0", "% X",
-__LINE__, 0x00372877, "372877", "%.6X",
-__LINE__, 0xffffffd7, "FFFFFFD7", "%1.X",
-__LINE__, 0xfa58b14b, "fa58b14b", "%x",
-__LINE__, 0xfffffd9f, "FFFFFD9F", "%0.7X",
-__LINE__, 0x00000710, "+1808", "%+#.2ld",
-__LINE__, 0x00000006, " 6", "%5.0ld",
-__LINE__, 0x0fba9706, "263886598", "%-6.3d",
-__LINE__, 0xffff420a, "ffff420a", "%-2x",
-__LINE__, 0x14b9a825, "14b9a825", "%x",
-__LINE__, 0x0077ffe4, "77FFE4", "%+.2X",
-__LINE__, 0x00067108, "422152 ", "%-7.ld",
-__LINE__, 0x00000001, " 00001", "%6.5X",
-__LINE__, 0x00000000, "0", "%ld",
-__LINE__, -0x0000001, " -1", "% 7ld",
-__LINE__, 0x01ddc7a3, "31311779", "%d",
-__LINE__, -0x2a92f9b, "-44642203", "% 3ld",
-__LINE__, 0xfffffff9, "fffffff9", "%4.6x",
-__LINE__, 0x0279a274, "279a274", "%x",
-__LINE__, 0x2e37ed8e, "775417230", "%d",
-__LINE__, 0x5ba59f58, "1537580888", "%-ld",
-__LINE__, 0xffffffe0, "ffffffe0", "%x",
-__LINE__, 0x3110ae47, "0X3110AE47", "%+#X",
-__LINE__, 0x000e00b9, "917689", "%d",
-__LINE__, 0x0000002e, " 0046", "% 7.4d",
-__LINE__, 0x00000363, " 867", "%7.d",
-__LINE__, -0x000000b, "-0011", "% 0.4d",
-__LINE__, 0x000349c8, " 349C8", "% 7.X",
-__LINE__, -0x01358f1, "-1267953", "%d",
-__LINE__, -0x0039d3c, "-236860", "%-.3d",
-__LINE__, 0xffd6de19, "ffd6de19", "%04.0x",
-__LINE__, -0x0003c54, "-0015444", "%1.7d",
-__LINE__, -0x0000e17, "-3607", "%d",
-__LINE__, 0xff0fa3a9, "ff0fa3a9", "%+3x",
-__LINE__, 0x00000009, "0000009", "%1.7x",
-__LINE__, 0xfffffc81, "FFFFFC81", "% X",
-__LINE__, -0x4ef2df5, "-82783733", "%ld",
-__LINE__, 0x00000013, "19", "%-ld",
-__LINE__, 0x00000000, " 0", "%#7x",
-__LINE__, -0x3b9485fd, "-999589373", "%1.d",
-__LINE__, -0x0000006, "-00006", "%6.5d",
-__LINE__, 0x0000003f, "+63", "%+ld",
-__LINE__, 0x000004c5, "1221", "%1.d",
-__LINE__, 0x003f8a8c, "4164236", "%d",
-__LINE__, -0x000001e, "-30", "%-#3d",
-__LINE__, 0xfff9d230, "FFF9D230", "%+07.3X",
-__LINE__, 0x0147cf17, "147cf17", "% x",
-__LINE__, 0xffffffeb, "ffffffeb", "%x",
-__LINE__, 0x0000007d, "00125", "%.5ld",
-__LINE__, 0x000fff56, "1048406", "%#3d",
-__LINE__, 0x064307a0, " 105056160", "% 0.3ld",
-__LINE__, 0x007d2860, "8202336", "%-.2d",
-__LINE__, 0x00a05711, "a05711", "%x",
-__LINE__, 0x179a7f9e, "0x179a7f9e", "%+#.3x",
-__LINE__, 0x00000003, "3", "%X",
-__LINE__, -0x0001d7d, "-7549", "%#5d",
-__LINE__, 0x0025d3f2, "+2479090", "%+2.d",
-__LINE__, -0x0000001, "-1", "%#ld",
-__LINE__, 0xfffffdd5, "fffffdd5", "%.7x",
-__LINE__, 0x003462b9, "3433145", "%d",
-__LINE__, 0x00005a81, "23169", "%d",
-__LINE__, 0xfffffcdb, "fffffcdb", "%-x",
-__LINE__, 0x00000000, "0", "%d",
-__LINE__, 0xfff22085, "fff22085", "%x",
-__LINE__, 0x00016d72, " 93554", "% d",
-__LINE__, -0x0000002, "-2", "%0ld",
-__LINE__, 0xfffffd21, "fffffd21", "% 0x",
-__LINE__, 0x00000931, "2353", "%ld",
-__LINE__, 0x00010021, "10021", "%5.1X",
-__LINE__, -0x000007e, "-126", "%1.0ld",
-__LINE__, 0xfffffff8, "fffffff8", "%01.x",
-__LINE__, -0x001d148, "-119112", "%d",
-__LINE__, -0x0000008, "-8", "%ld",
-__LINE__, -0x000038e, "-910", "% ld",
-__LINE__, 0x0039e3e5, "3793893", "%0.1d",
-__LINE__, 0x0038fb8e, "38FB8E", "%.2X",
-__LINE__, -0x002dafa, "-187130", "%ld",
-__LINE__, -0xbec275b, "-200025947", "%ld",
-__LINE__, 0x1a32f999, "1A32F999", "%05.4X",
-__LINE__, 0x0000002f, "2f", "%x",
-__LINE__, -0x0001a5b, "-6747", "%+3.ld",
-__LINE__, 0x00000762, " 1890", "%7.ld",
-__LINE__, 0x000000c2, "000194", "%0.6ld",
-__LINE__, 0xffff002b, "FFFF002B", "%.4X",
-__LINE__, -0x0019dae, "-105902", "% .2d",
-__LINE__, 0x0000125f, "125f", "%+1x",
-__LINE__, -0x000b688, " -46728", "%#7.d",
-__LINE__, 0x000401ca, "401ca", "%0x",
-__LINE__, 0x00000192, "402", "%#ld",
-__LINE__, 0xffffffff, "ffffffff", "%x",
-__LINE__, 0x1e505a0c, "0X1E505A0C", "%#1.3X",
-__LINE__, 0x000f8f6c, "1019756", "%d",
-__LINE__, 0x0004a296, "4a296", "%5.2x",
-__LINE__, 0x00000003, "3", "% x",
-__LINE__, -0x000d44c, "-54348", "%#ld",
-__LINE__, 0x00009ae2, "39650", "%-d",
-__LINE__, 0xffffff3a, "FFFFFF3A", "% .7X",
-__LINE__, 0x0042350b, "4338955", "%d",
-__LINE__, 0x000071af, "71af", "%+.4x",
-__LINE__, 0x00000001, "0x1", "%#0x",
-__LINE__, 0x00000033, "00051", "%3.5d",
-__LINE__, 0x00000001, "1", "%X",
-__LINE__, -0xebfb0e7, "-247443687", "%+3ld",
-__LINE__, 0x00000027, "27 ", "%-07.X",
-__LINE__, -0x0004837, "-18487", "%01d",
-__LINE__, 0x1a8c53da, "1A8C53DA", "%X",
-__LINE__, -0x0bdb8a9, "-12433577", "%d",
-__LINE__, -0x0000098, "-152", "%#ld",
-__LINE__, -0x003b554, "-243028", "%d",
-__LINE__, 0x000000cb, "00000CB", "%+.7X",
-__LINE__, 0xfffffeda, "FFFFFEDA", "%X",
-__LINE__, -0x0000010, "-16", "%-#d",
-__LINE__, 0x00000006, "+6", "%+d",
-__LINE__, 0x003c294a, "+3942730", "%+4.ld",
-__LINE__, 0x00000009, "9", "%ld",
-__LINE__, 0xfbbdd2bc, "FBBDD2BC", "% X",
-__LINE__, 0x71c86678, "+1908958840", "%+0.6ld",
-__LINE__, -0x0b49bff, "-11836415", "% 6.ld",
-__LINE__, 0xfff416be, "fff416be", "%3.x",
-__LINE__, 0x00000077, "+119", "%+d",
-__LINE__, 0xfff1cfaa, "FFF1CFAA", "% 0.2X",
-__LINE__, 0xfffffffb, "fffffffb", "% x",
-__LINE__, 0x0000127e, "4734", "%d",
-__LINE__, 0x00107ad2, "107ad2", "%+2.6x",
-__LINE__, 0x0006b8e9, "440553", "%-#d",
-__LINE__, 0x0000eb6f, "eb6f", "% x",
-__LINE__, 0x00001f18, "7960", "%0d",
-__LINE__, 0xfffff225, "fffff225", "%1.5x",
-__LINE__, 0xfffffff9, "fffffff9", "%+6.x",
-__LINE__, 0x000005b9, "01465", "%.5ld",
-__LINE__, 0xfffc26b8, "FFFC26B8", "% X",
-__LINE__, 0x540d580d, "0X540D580D", "%+#X",
-__LINE__, 0x05ad7094, "5AD7094", "% 4.7X",
-__LINE__, -0x000019b, "-411", "% d",
-__LINE__, 0x00000006, "000006", "%6.6ld",
-__LINE__, 0x0000026a, "+618", "%+ld",
-__LINE__, 0x0000000b, "11", "%ld",
-__LINE__, -0x26985d5, "-40469973", "%#.0ld",
-__LINE__, 0x0000007d, "7D", "%+02.0X",
-__LINE__, -0x0079ddf, "-0499167", "%+.7ld",
-__LINE__, 0x0000375f, "14175", "%0d",
-__LINE__, -0x18de7f99, "-417234841", "%ld",
-__LINE__, -0x00507cc, "-329676", "%.0d",
-__LINE__, 0x000029d5, "29D5", "%-2.1X",
-__LINE__, 0x0000328c, "328C", "%-3.X",
-__LINE__, 0x016f6234, "24076852", "%3.ld",
-__LINE__, 0xfffffffc, "0XFFFFFFFC", "%#.5X",
-__LINE__, 0xfe6163ca, "FE6163CA", "%5.X",
-__LINE__, 0xffffffc2, "FFFFFFC2", "%X",
-__LINE__, 0x00000087, "+135", "%+ld",
-__LINE__, 0x00310166, "310166", "% x",
-__LINE__, 0x00e8c871, "15255665", "%d",
-__LINE__, 0x000005ee, "1518", "%ld",
-__LINE__, 0xfcb24306, "FCB24306", "%X",
-__LINE__, 0x0000000b, " 11", "%5ld",
-__LINE__, 0x006d11d0, "0x6d11d0", "%#.0x",
-__LINE__, 0x0010d416, "1102870", "%#6.5d",
-__LINE__, -0x0047cb3, "-294067", "%.3d",
-__LINE__, 0x000000c0, "c0", "%x",
-__LINE__, 0xffffffff, "FFFFFFFF", "%+X",
-__LINE__, -0x000000a, "-10", "%d",
-__LINE__, -0x0000007, "-7", "% ld",
-__LINE__, 0xfffffffe, "FFFFFFFE", "%-X",
-__LINE__, 0x00000014, "0x14", "%-#3.1x",
-__LINE__, 0x00003319, "3319", "% x",
-__LINE__, 0x00000000, "00", "%+#.2X",
-__LINE__, -0x0000009, "-9", "% ld",
-__LINE__, -0x0000001, "-1 ", "%-3ld",
-__LINE__, 0x00262909, "2500873", "%.5ld",
-__LINE__, 0x33e76560, "33e76560", "%7.0x",
-__LINE__, -0x0000002, "-2", "%ld",
-__LINE__, 0x00035ee9, "35EE9", "%-3.X",
-__LINE__, -0x0000235, "-565", "%+4.ld",
-__LINE__, -0x3ea63c5, "-65692613", "%d",
-__LINE__, 0x00000003, "3", "%ld",
-__LINE__, -0x003362f, "-210479", "% d",
-__LINE__, -0x1a819f8a, "-444702602", "%.7d",
-__LINE__, 0x027a4668, "41567848", "%d",
-__LINE__, 0x0002b025, "2b025", "%x",
-__LINE__, -0x0000001, "-001", "%.3ld",
-__LINE__, 0xfffffff0, "fffffff0", "%-0x",
-__LINE__, -0x0000d4f, "-3407", "%-ld",
-__LINE__, 0x00000146, " 326", "% 1.d",
-__LINE__, -0x0000006, "-6", "%d",
-__LINE__, 0xffffffff, "FFFFFFFF", "%06.4X",
-__LINE__, 0x376fddae, "+930078126", "%+#0ld",
-__LINE__, 0x006d9da3, "6d9da3", "%1.x",
-__LINE__, -0x0000f28, "-3880", "%3.2ld",
-__LINE__, 0x0006962c, " 431660", "% 5d",
-__LINE__, 0x000011db, " 4571", "%6.ld",
-__LINE__, 0xffffffa8, "ffffffa8", "%+x",
-__LINE__, 0x0d886db3, "D886DB3", "%.7X",
-__LINE__, 0x00000000, "000000", "%2.6ld",
-__LINE__, 0xfffff6b6, "FFFFF6B6", "% X",
-__LINE__, -0x0739068, "-7573608", "%+6.ld",
-__LINE__, 0xfba62553, "0XFBA62553", "%#X",
-__LINE__, -0x4474bc5, "-71781317", "%-2ld",
-__LINE__, 0xffffff95, "FFFFFF95", "% 2.X",
-__LINE__, -0x1d0e1ca, "-30466506", "%+.0d",
-__LINE__, -0x000f3aa, "-62378", "%ld",
-__LINE__, 0x00000026, "26", "%1x",
-__LINE__, 0x001c5400, "1856512", "%-#d",
-__LINE__, 0x03808442, "3808442", "%X",
-__LINE__, -0x0000081, "-129", "%+#ld",
-__LINE__, 0x000004ae, " 1198", "% 3.4d",
-__LINE__, -0x7f4ed54, "-133492052", "%d",
-__LINE__, 0x00000000, "+0", "%+ld",
-__LINE__, 0x00000000, "0", "%+x",
-__LINE__, 0x004c7e46, "5013062", "%.0d",
-__LINE__, -0x647d7a65, "-1685944933", "%0.2d",
-__LINE__, 0x00003b59, "15193", "%-#1d",
-__LINE__, 0xfff3e64d, "FFF3E64D", "%-X",
-__LINE__, 0x00007022, "28706", "%-d",
-__LINE__, 0xc28d0ad8, "c28d0ad8", "%+x",
-__LINE__, -0x005c208, "-377352", "% ld",
-__LINE__, 0x00cfbadc, "13613788", "%d",
-__LINE__, 0x000016ea, "5866", "%0d",
-__LINE__, 0x00000029, "29", "%X",
-__LINE__, 0xffe16813, "0XFFE16813", "%+#X",
-__LINE__, 0x00000004, "4", "%0X",
-__LINE__, -0x0000096, " -150", "%5d",
-__LINE__, 0x00027ac7, "162503", "%ld",
-__LINE__, -0x0075de0, "-482784", "%d",
-__LINE__, 0x005fcff6, "6279158", "%d",
-__LINE__, 0xffffffef, "FFFFFFEF", "%3X",
-__LINE__, 0x267b05ec, "645596652", "%4ld",
-__LINE__, 0xa487b724, "a487b724", "%x",
-__LINE__, 0x01da2a11, "31074833", "%-.0ld",
-__LINE__, 0xffffffff, "FFFFFFFF", "%X",
-__LINE__, 0x0000037a, "37a", "%x",
-__LINE__, 0x003d0314, "+3998484", "%+#1d",
-__LINE__, 0x0000011b, " 283", "%5.2d",
-__LINE__, 0x094f6066, "94f6066", "%x",
-__LINE__, 0x00000004, "4", "%X",
-__LINE__, -0x102e14bd, "-271455421", "% 7.ld",
-__LINE__, 0x000048da, "0018650", "%07ld",
-__LINE__, -0x24ae0390, "-615383952", "%0.6d",
-__LINE__, 0xffff5159, "0XFFFF5159", "%#0X",
-__LINE__, 0xfffd38c3, "fffd38c3", "%x",
-__LINE__, 0xfffff9ea, "FFFFF9EA", "%-X",
-__LINE__, -0x000fd28, "-64808", "% ld",
-__LINE__, 0x002c1bf4, "2890740", "%-.1d",
-__LINE__, 0x00d00ee7, "D00EE7", "%0.4X",
-__LINE__, 0x00000cf9, "3321", "%0d",
-__LINE__, -0x0000001, "-1", "%-#ld",
-__LINE__, 0xfffffd75, "FFFFFD75", "%.2X",
-__LINE__, 0x00000012, "18", "%-d",
-__LINE__, 0xfd44b4b2, "fd44b4b2", "%+5.x",
-__LINE__, -0x001c53f, "-116031", "%-#6.d",
-__LINE__, 0x000ff6fd, "ff6fd", "%2x",
-__LINE__, 0x00000001, "1", "%0d",
-__LINE__, 0x0120b478, "120B478", "%.7X",
-__LINE__, 0x0145591e, "145591E", "%1.4X",
-__LINE__, 0x001f99b9, "1F99B9", "%.1X",
-__LINE__, 0xffffd078, "ffffd078", "%-1.5x",
-__LINE__, 0xffffff1a, "FFFFFF1A", "%-4.6X",
-__LINE__, 0xfffffffa, "fffffffa", "%x",
-__LINE__, -0x00000b9, "-185", "%3ld",
-__LINE__, 0x00001cf0, "7408", "%-ld",
-__LINE__, 0xffffffff, "FFFFFFFF", "%X",
-__LINE__, 0x00151f30, "151F30", "%X",
-__LINE__, -0x0000103, "-259", "%d",
-__LINE__, -0x000303f, "-12351", "%d",
-__LINE__, 0x000002ca, "714", "%ld",
-__LINE__, -0x0000c55, "-3157", "%1d",
-__LINE__, 0x00000691, "01681", "%#.5ld",
-__LINE__, 0x00230537, "2295095", "%#d",
-__LINE__, 0x032a1faa, "53092266", "%.4d",
-__LINE__, 0x000050d7, "20695", "%d",
-__LINE__, -0x0c7ad4c, "-13086028", "%#.4ld",
-__LINE__, -0x00009d9, "-2521", "%+d",
-__LINE__, 0xfffffffe, "fffffffe", "%0x",
-__LINE__, 0xffdec2d9, "FFDEC2D9", "%5.1X",
-__LINE__, -0x000563c, "-22076", "%-.2ld",
-__LINE__, 0x0073b36a, "0x73b36a", "%-#x",
-__LINE__, 0xfffffffd, "fffffffd", "%x",
-__LINE__, 0x0193ba5a, "193ba5a", "%1.x",
-__LINE__, 0x00d147b5, "13715381", "%2.d",
-__LINE__, 0xffffff10, "ffffff10", "%4x",
-__LINE__, 0x000648d5, "648d5", "%1.3x",
-__LINE__, 0x00000011, "11", "%X",
-__LINE__, 0xff259f5b, "0xff259f5b", "% #.1x",
-__LINE__, 0x00000175, "175", "%x",
-__LINE__, 0x00000000, "0", "%ld",
-__LINE__, 0x00000015, "21", "%#ld",
-__LINE__, 0xfffffffe, "fffffffe", "%-x",
-__LINE__, 0x00000013, " 19", "% 0ld",
-__LINE__, -0x0000001, "-0000001", "% 5.7ld",
-__LINE__, 0x0000139d, "139D", "%X",
-__LINE__, 0x0041ad18, "41ad18", "%-.6x",
-__LINE__, -0x00000f9, "-249", "% 3.d",
-__LINE__, 0x00000076, "118", "%ld",
-__LINE__, 0x000006f8, "1784", "%d",
-__LINE__, -0x0000005, "-5", "%ld",
-__LINE__, -0x00008e7, "-2279", "%+ld",
-__LINE__, 0x00003f77, "3F77", "%+0X",
-__LINE__, 0x000ca3f8, "0XCA3F8", "%+#X",
-__LINE__, -0x00004bf, "-001215", "%#5.6ld",
-__LINE__, 0x319129ab, "0x319129ab", "%+#x",
-__LINE__, -0x0000002, "-2", "%ld",
-__LINE__, -0x0f6686e, "-16148590", "%.6ld",
-__LINE__, 0x0329576b, "53041003", "%2.d",
-__LINE__, -0x000179e, "-6046", "%d",
-__LINE__, 0x000002cc, "+716", "%+1.3ld",
-__LINE__, 0xfffffff7, "0xfffffff7", "% #x",
-__LINE__, 0x0016eb40, "1502016", "%ld",
-__LINE__, 0x00000003, "3", "%-0ld",
-__LINE__, 0x0023e0d6, "23E0D6", "%-05.X",
-__LINE__, 0xffffa6a4, "0XFFFFA6A4", "%#X",
-__LINE__, 0x00087664, "87664", "% .2x",
-__LINE__, -0x0000002, " -2", "%3.ld",
-__LINE__, 0x003ad85d, "3AD85D", "%X",
-__LINE__, 0x00002f20, "12064", "%ld",
-__LINE__, 0x02030bfc, "2030BFC", "%02.3X",
-__LINE__, 0xfffff36a, "FFFFF36A", "%X",
-__LINE__, 0xfe0729ff, "0xfe0729ff", "% #.0x",
-__LINE__, 0xfec15164, "FEC15164", "%0.2X",
-__LINE__, -0x00169ec, "-92652", "%+d",
-__LINE__, 0x006d7990, "0x6d7990", "%#x",
-__LINE__, 0xffcc89e6, "ffcc89e6", "%x",
-__LINE__, 0x002d7cca, "2981066", "%7.7ld",
-__LINE__, -0x1649692b, "-373909803", "%#ld",
-__LINE__, 0x00664f47, "664f47", "%+6.x",
-__LINE__, 0x00000000, "0", "% X",
-__LINE__, 0x00000047, "000047", "%.6X",
-__LINE__, 0x00000007, "0000007", "%.7ld",
-__LINE__, 0x00000030, "30", "%-x",
-__LINE__, -0x25bcbabb, "-633125563", "% ld",
-__LINE__, 0xfe11c031, "FE11C031", "%4.6X",
-__LINE__, -0x0000001, "-0000001", "%.7d",
-__LINE__, 0x00b56d84, "11890052", "%ld",
-__LINE__, -0x0000b01, "-0002817", "%+07.7ld",
-__LINE__, 0xffffe4ad, "ffffe4ad", "% 0.0x",
-__LINE__, 0x007760fc, "7760fc", "%+x",
-__LINE__, 0xffef44d8, "FFEF44D8", "%X",
-__LINE__, 0xfcb6862e, "fcb6862e", "%+x",
-__LINE__, -0x0000001, "-1", "%0d",
-__LINE__, 0xffffffe6, "FFFFFFE6", "%3.1X",
-__LINE__, 0xff816e27, "FF816E27", "% 6.X",
-__LINE__, 0x00006415, "25621", "%ld",
-__LINE__, -0xfae5449, "-263083081", "%0ld",
-__LINE__, 0x00000001, " 1", "% 0d",
-__LINE__, 0x00000009, " 9", "%2.X",
-__LINE__, 0x002d7e18, "2981400", "%7d",
-__LINE__, -0x00000fc, "-0000252", "%-#.7d",
-__LINE__, 0x00000003, "3", "%0x",
-__LINE__, 0x0d46e47f, "222749823", "%ld",
-__LINE__, 0xfffcbc52, "FFFCBC52", "%+X",
-__LINE__, 0x00000000, "0", "%-X",
-__LINE__, 0xfffff0e5, "fffff0e5", "%x",
-__LINE__, 0xffffffd9, "FFFFFFD9", "%07X",
-__LINE__, 0x000004ee, "4ee", "%0x",
-__LINE__, 0xffffffff, "ffffffff", "%0x",
-__LINE__, -0x0008cb4, "-036020", "%+3.6ld",
-__LINE__, 0x0000dada, "0xdada", "%#0.x",
-__LINE__, 0x0000001a, "26 ", "%-4d",
-__LINE__, -0x000000c, " -12", "%04.d",
-__LINE__, 0x0000025c, " 25c", "%7.x",
-__LINE__, 0xfe9b091e, "FE9B091E", "%X",
-__LINE__, 0x00000002, " 2", "%07.ld",
-__LINE__, -0x0004930, "-18736", "% 6.d",
-__LINE__, 0xffffffe9, "FFFFFFE9", "%X",
-__LINE__, 0x00000003, " 3", "%2.ld",
-__LINE__, 0x00000e00, "3584", "%.4d",
-__LINE__, 0xffff38c2, "ffff38c2", "%0.x",
-__LINE__, 0xffffffff, "FFFFFFFF", "% .3X",
-__LINE__, 0xff7c1b2f, "FF7C1B2F", "%-3.2X",
-__LINE__, -0x0000005, "-5", "%2d",
-__LINE__, 0x00098775, "98775", "%x",
-__LINE__, 0x000015ff, " 15FF", "%6.X",
-__LINE__, 0xfffbe3ef, "FFFBE3EF", "%0.3X",
-__LINE__, -0x0000048, "-72", "%ld",
-__LINE__, 0x0001488a, "84106", "%d",
-__LINE__, 0x00000001, "1", "%x",
-__LINE__, -0x0000002, "-2", "%-0.0ld",
-__LINE__, -0x0000001, "-1", "%-d",
-__LINE__, 0x0006616f, "6616f", "%x",
-__LINE__, 0x3657856d, "911705453", "%6.d",
-__LINE__, -0x0007222, "-0029218", "%.7d",
-__LINE__, 0x00041606, "267782", "%04.5d",
-__LINE__, 0x00000001, " 1", "%2.ld",
-__LINE__, 0x00000219, "219", "%0x",
-__LINE__, 0x0ae0184c, "ae0184c", "%x",
-__LINE__, 0x00003a7d, " 14973", "%7.ld",
-__LINE__, 0xffffffff, "0XFFFFFFFF", "%#X",
-__LINE__, -0x0000002, "-2", "%0ld",
-__LINE__, 0x00002cdf, "11487", "%0ld",
-__LINE__, -0x000000c, "-12", "%d",
-__LINE__, -0x000000e, "-14", "%-#2d",
-__LINE__, 0x00000371, "881", "%#ld",
-__LINE__, 0x000015be, " 5566", "%5.ld",
-__LINE__, 0x01525b91, "22174609", "%#0.0ld",
-__LINE__, 0xff8fc22f, "FF8FC22F", "% X",
-__LINE__, -0x0007f7b, "-32635", "%4.ld",
-__LINE__, 0x00007bca, "7bca", "%x",
-__LINE__, -0x0000582, "-1410", "%ld",
-__LINE__, 0x00000047, " +71", "%+04.2d",
-__LINE__, 0xf8a8dce2, "f8a8dce2", "%+.6x",
-__LINE__, -0x000de2e, "-56878", "%.0d",
-__LINE__, 0x019c03c1, "0X19C03C1", "%#X",
-__LINE__, -0x0f3a43e, "-15967294", "%ld",
-__LINE__, 0x00009e87, "40583", "%#5.1d",
-__LINE__, 0x000000b8, "184", "%0ld",
-__LINE__, -0x000befe, "-48894", "%2ld",
-__LINE__, -0x002ee1a, "-192026", "%.2d",
-__LINE__, 0x00004fd8, "4fd8", "%x",
-__LINE__, 0x0006d57b, "447867", "%2d",
-__LINE__, 0xfffffa9c, "FFFFFA9C", "%-X",
-__LINE__, 0x0000000f, "15", "%ld",
-__LINE__, 0x0005deb2, "5DEB2", "% X",
-__LINE__, 0x00000007, "7", "%X",
-__LINE__, 0xffffffc8, "0XFFFFFFC8", "% #.1X",
-__LINE__, 0xfffff62f, "FFFFF62F", "%X",
-__LINE__, -0x1a935bba, "-445864890", "% 3.5d",
-__LINE__, 0x000b34b4, "0x0b34b4", "%-#3.6x",
-__LINE__, 0xfffff430, "FFFFF430", "%X",
-__LINE__, 0x00000b5f, "+0002911", "%+#.7d",
-__LINE__, 0x00000007, " 7", "%3ld",
-__LINE__, 0xffffffd8, "FFFFFFD8", "% .7X",
-__LINE__, 0xfffff544, "FFFFF544", "%0X",
-__LINE__, -0x353667b9, "-892757945", "%d",
-__LINE__, 0x00000058, "0x00058", "%+#.5x",
-__LINE__, 0x39dbcc4a, "+970705994", "%+0.6ld",
-__LINE__, 0xfffffffd, "fffffffd", "% 01x",
-__LINE__, 0x00b1c28e, "+11649678", "%+0ld",
-__LINE__, 0x000066c2, "0X66C2", "%-#4X",
-__LINE__, 0x007171a2, "+7434658", "%+07.ld",
-__LINE__, -0x0000001, "-1", "%-d",
-__LINE__, 0x00000ae0, "+2784", "%+0d",
-__LINE__, 0x13786a57, "326658647", "%#5d",
-__LINE__, -0x0000001, "-1", "%2.ld",
-__LINE__, -0x0168a16, "-1477142", "%d",
-__LINE__, 0x12df7dd6, "316636630", "%ld",
-__LINE__, 0x00000000, "000000", "%1.6d",
-__LINE__, 0x266da2a9, "644719273", "%ld",
-__LINE__, 0x0000004a, "74", "%d",
-__LINE__, 0x000102ff, "00102FF", "%+06.7X",
-__LINE__, 0x17916237, "0x17916237", "%#5x",
-__LINE__, -0x0003cbb, "-0015547", "%-.7d",
-__LINE__, 0xe7da2010, "e7da2010", "%2.4x",
-__LINE__, 0xfffffff3, "fffffff3", "% .7x",
-__LINE__, 0xfc9b64f8, "FC9B64F8", "% 7.X",
-__LINE__, 0x000001af, "431", "%0d",
-__LINE__, 0xffc81796, "0xffc81796", "%#.5x",
-__LINE__, 0x057a1fbc, "+91889596", "%+04d",
-__LINE__, 0x00001ae1, "6881", "%ld",
-__LINE__, 0xfffffff6, "fffffff6", "%3.0x",
-__LINE__, -0x6b7d5db, "-112711131", "%-06.1d",
-__LINE__, 0x008e8a5c, " 8e8a5c", "%7.0x",
-__LINE__, 0xfe07a9bd, "fe07a9bd", "%.1x",
-__LINE__, -0x00278e6, "-162022", "%0ld",
-__LINE__, 0xf98709f5, "F98709F5", "%X",
-__LINE__, -0x00000c9, "-201", "% 1.d",
-__LINE__, -0x000001d, "-00029", "%+2.5ld",
-__LINE__, 0x00000030, " 48", "% d",
-__LINE__, 0xffd753f4, "FFD753F4", "%0X",
-__LINE__, 0xfffffffd, "FFFFFFFD", "%X",
-__LINE__, 0x0000a765, "a765", "%x",
-__LINE__, 0x0026e2c8, "26E2C8", "%-0X",
-__LINE__, -0x00003eb, "-1003", "%3.1ld",
-__LINE__, 0x015d53ca, "22893514", "%0ld",
-__LINE__, -0x0000020, "-32", "%ld",
-__LINE__, -0x03558dd, "-3496157", "%1.0ld",
-__LINE__, -0x000007f, "-127", "%1.d",
-__LINE__, 0xffffc737, "0xffffc737", "%+#x",
-__LINE__, 0x0000a70d, " a70d", "%6.x",
-__LINE__, 0x01ea0e31, "0X1EA0E31", "% #1.X",
-__LINE__, 0x00b5f406, "0X0B5F406", "%-#.7X",
-__LINE__, 0x0e58fa9a, "240712346", "%.2d",
-__LINE__, 0xf43ff8a9, "f43ff8a9", "%+0.6x",
-__LINE__, -0x5d0d3d3, "-97571795", "%.3ld",
-__LINE__, -0x000027a, "-634", "%0d",
-__LINE__, 0xffcef248, "FFCEF248", "%07.X",
-__LINE__, 0x000002dc, "2dc", "%0x",
-__LINE__, -0x31fa6c1, "-52405953", "%.2d",
-__LINE__, 0x00000014, "14", "%X",
-__LINE__, -0x0282f98, "-2633624", "%ld",
-__LINE__, 0x00005f55, "24405", "%#d",
-__LINE__, -0x0000004, "-4", "%d",
-__LINE__, 0x00000001, "1", "%+x",
-__LINE__, 0x013f47ce, "13f47ce", "%0.x",
-__LINE__, 0x00143fce, "1327054", "%.3d",
-__LINE__, 0x00000000, "0", "%d",
-__LINE__, 0x00001f9a, "1F9A", "% X",
-__LINE__, 0x00000cf5, "cf5", "%x",
-__LINE__, 0xffea9c24, "ffea9c24", "%x",
-__LINE__, 0xf09f85a7, "F09F85A7", "%X",
-__LINE__, 0x00001e04, "7684", "%ld",
-__LINE__, 0xffffc82a, "ffffc82a", "%7x",
-__LINE__, -0x0000a77, "-2679", "% d",
-__LINE__, 0x0019a859, "+1681497", "%+2.6ld",
-__LINE__, -0x00002d7, "-727", "%ld",
-__LINE__, 0x00011b82, "72578", "%-#ld",
-__LINE__, 0x00000c32, "3122", "%ld",
-__LINE__, -0x0000337, "-823", "%1.d",
-__LINE__, 0x00000004, "4", "%1ld",
-__LINE__, 0x0000062c, "1580", "%.1ld",
-__LINE__, 0xffffffd3, "FFFFFFD3", "% X",
-__LINE__, -0x07b1bf8, "-8068088", "%#d",
-__LINE__, 0xfffffff9, "fffffff9", "%x",
-__LINE__, 0x159e6cfb, "159e6cfb", "%0.x",
-__LINE__, 0x0001148d, "1148d", "%-.1x",
-__LINE__, 0x003373b7, "3371959", "%#.0d",
-__LINE__, 0x00001af2, "1af2", "%.4x",
-__LINE__, -0x0000001, "-000001", "%+.6ld",
-__LINE__, -0x00001a3, "-419", "%d",
-__LINE__, 0xfdb232e7, "fdb232e7", "%5.4x",
-__LINE__, -0x000000d, "-13", "%d",
-__LINE__, 0x98ec1c74, "98ec1c74", "% 3x",
-__LINE__, 0xfffffff8, "fffffff8", "%+1.4x",
-__LINE__, -0x0000d58, "-3416", "%+#0ld",
-__LINE__, -0x65d1973, "-106764659", "%.6d",
-__LINE__, -0x0737641, "-7566913", "%-d",
-__LINE__, 0x0000037c, "37c", "%+0x",
-__LINE__, 0x0000012c, "0000300", "%#3.7d",
-__LINE__, 0x00c12d9b, "12660123", "%1.5ld",
-__LINE__, 0xe7e5e77d, "e7e5e77d", "%6x",
-__LINE__, 0x1fe0e820, "1FE0E820", "%-4X",
-__LINE__, 0xc85a793a, "C85A793A", "%X",
-__LINE__, 0x05f9fe2c, "100269612", "%#ld",
-__LINE__, 0x00000032, "0X32", "%+#4.1X",
-__LINE__, 0xfab4ce81, "fab4ce81", "%3.x",
-__LINE__, -0x0000009, "-9", "%2.d",
-__LINE__, 0xffff8d2e, "ffff8d2e", "% 6x",
-__LINE__, 0xfffffffe, "0xfffffffe", "%#x",
-__LINE__, 0x02960f60, "2960f60", "%1.x",
-__LINE__, 0x34cf3cbc, " 885996732", "% 5ld",
-__LINE__, -0x000006e, "-110", "% d",
-__LINE__, -0x0000001, "-1", "%-.0d",
-__LINE__, 0x000000b1, " B1", "%+7X",
-__LINE__, 0xfffff5b4, "FFFFF5B4", "%01.7X",
-__LINE__, 0x00000086, "86", "%0X",
-__LINE__, 0x00074367, " 74367", "% 6x",
-__LINE__, 0x001000d7, "+1048791", "%+ld",
-__LINE__, 0x00000f35, " 3893", "% d",
-__LINE__, -0x00000e1, "-225", "%d",
-__LINE__, 0xffff6694, "FFFF6694", "%6.X",
-__LINE__, 0x00019cf7, "19cf7", "%0.x",
-__LINE__, 0x00000046, "0046", "%+.4X",
-__LINE__, -0x000001f, "-31", "%ld",
-__LINE__, 0xfff25859, "fff25859", "%6x",
-__LINE__, 0x21884061, "562577505", "%#ld",
-__LINE__, 0x01448b7a, "1448B7A", "%0.1X",
-__LINE__, 0xffffffc0, "ffffffc0", "%x",
-__LINE__, 0xfffffed5, "fffffed5", "% 1.0x",
-__LINE__, 0x0e349767, "E349767", "%.5X",
-__LINE__, 0x00000330, "816", "%0d",
-__LINE__, -0x0000016, "-22", "%d",
-__LINE__, 0xffff9bab, "FFFF9BAB", "%X",
-__LINE__, 0xffffee4e, "ffffee4e", "%x",
-__LINE__, 0x0026beeb, "2539243", "%6.d",
-__LINE__, 0x00002c6c, "11372", "%.2d",
-__LINE__, -0x000002c, "-44", "%ld",
-__LINE__, -0x001dcfa, "-122106", "% d",
-__LINE__, 0x0001683c, "92220", "%#4.ld",
-__LINE__, 0x09b51fc9, "9b51fc9", "%+.7x",
-__LINE__, 0x0000001d, "29", "%0ld",
-__LINE__, -0x83f17e5, "-138352613", "%ld",
-__LINE__, 0xfa4e2c1b, "fa4e2c1b", "%x",
-__LINE__, 0x000001f3, "499", "%0ld",
-__LINE__, 0xffff03e4, "ffff03e4", "%x",
-__LINE__, 0x000000ac, "+0172", "%+.4ld",
-__LINE__, 0x03c3903b, "63148091", "%00d",
-__LINE__, 0x0000000d, "13", "%#d",
-__LINE__, 0x0000002e, "0X2E", "%#X",
-__LINE__, 0x00006b2d, "6B2D", "%X",
-__LINE__, 0x0000010b, " 0010b", "%7.5x",
-__LINE__, 0x0000017a, " 17a", "%4x",
-__LINE__, 0xfffffffb, "fffffffb", "%+x",
-__LINE__, 0xffffac6a, "ffffac6a", "%-.3x",
-__LINE__, -0x0005870, "-22640", "%0d",
-__LINE__, 0x189c17bc, "189c17bc", "%x",
-__LINE__, -0x01bbc38, "-1817656", "%#6.ld",
-__LINE__, -0x3382b55, "-54012757", "%d",
-__LINE__, -0x0000007, "-7", "%-ld",
-__LINE__, -0x000c74b, "-51019", "%ld",
-__LINE__, 0x0001a6f2, "+108274", "%+#1.ld",
-__LINE__, 0x00077448, "77448", "%x",
-__LINE__, 0x00000000, "0", "%x",
-__LINE__, 0xfffff056, "FFFFF056", "%.3X",
-__LINE__, -0x6f3f9451, "-1866437713", "%-#3.0ld",
-__LINE__, 0x000000ac, "AC", "%X",
-__LINE__, 0xffc8752f, "ffc8752f", "%-x",
-__LINE__, 0xfffffe6d, "FFFFFE6D", "%2.X",
-__LINE__, -0x377f1a5, "-58192293", "% .2d",
-__LINE__, -0x0000294, "-660", "%d",
-__LINE__, 0xfffffffe, "fffffffe", "%-x",
-__LINE__, 0xfffcbbe8, "0xfffcbbe8", "%-#4.x",
-__LINE__, 0x0022e510, "+2286864", "%+ld",
-__LINE__, 0xfffffe2a, "FFFFFE2A", "%0.3X",
-__LINE__, 0xfe29f7c0, "fe29f7c0", "%x",
-__LINE__, 0xfffe957e, "FFFE957E", "%X",
-__LINE__, 0x000080f8, "33016", "%ld",
-__LINE__, 0x0003ee2c, " 257580", "%7d",
-__LINE__, 0x000003a1, "929", "%d",
-__LINE__, 0x0000021f, "21f", "%+x",
-__LINE__, 0xffffffff, "ffffffff", "%.5x",
-__LINE__, -0x040a988, "-4237704", "%-d",
-__LINE__, 0x027c8b69, "41716585", "%ld",
-__LINE__, 0x00000003, "3", "%-X",
-__LINE__, -0x0000368, " -872", "%7.d",
-__LINE__, 0x00000d3c, "3388", "%0.2d",
-__LINE__, -0x33734cc, "-53949644", "%2ld",
-__LINE__, 0x000003db, "3DB", "%X",
-__LINE__, -0x00f154d, "-988493", "%5d",
-__LINE__, 0x0000000b, " 11", "%4.ld",
-__LINE__, 0x00000067, "103", "%-ld",
-__LINE__, -0x0199fce, "-1679310", "%4d",
-__LINE__, 0x02b6266b, "2b6266b", "% x",
-__LINE__, -0x006b39d, "-439197", "%+d",
-__LINE__, 0x00000007, "7", "%ld",
-__LINE__, 0x0141fc98, "21101720", "%0ld",
-__LINE__, -0x0008420, "-33824", "%d",
-__LINE__, 0x0011622b, "1139243", "%6ld",
-__LINE__, 0x0000001b, "27", "%-d",
-__LINE__, -0x0030935, "-198965", "%3d",
-__LINE__, 0x0000001f, " 1f", "%4.x",
-__LINE__, -0x10782a19, "-276310553", "%#ld",
-__LINE__, -0x007eac4, "-518852", "%06.ld",
-__LINE__, 0x0bc4c681, "197445249", "%6ld",
-__LINE__, 0x000000f5, "245", "%.3ld",
-__LINE__, 0x00000197, "197", "%X",
-__LINE__, 0xfffffeab, "FFFFFEAB", "% X",
-__LINE__, 0x00000f05, "F05", "%+X",
-__LINE__, 0xffe1b785, "0xffe1b785", "%#x",
-__LINE__, -0x02d3581, "-2962817", "%05d",
-__LINE__, 0xffffb994, "FFFFB994", "%X",
-__LINE__, 0x03d139a3, "64043427", "%ld",
-__LINE__, -0x0000002, " -2", "%+4.d",
-__LINE__, -0x043da83, "-4446851", "%#ld",
-__LINE__, -0x6aad891, "-111859857", "%7.ld",
-__LINE__, 0x00003e68, "15976", "%-4.5ld",
-__LINE__, 0xffe4d3ee, "FFE4D3EE", "%X",
-__LINE__, 0x00000002, "000002", "%4.6ld",
-__LINE__, 0xffffee32, "ffffee32", "%4x",
-__LINE__, 0x0cb7dd25, "cb7dd25", "%3x",
-__LINE__, 0xf773d422, "F773D422", "%X",
-__LINE__, -0x0b590f7, "-11899127", "%#d",
-__LINE__, -0x0002c45, "-11333", "%-#5ld",
-__LINE__, -0x1efc9e4, "-32492004", "%ld",
-__LINE__, -0x0003b9c, "-15260", "%d",
-__LINE__, 0x000001b6, "0X1B6", "%#4X",
-__LINE__, 0x3ce93ec3, "1021918915", "%.6d",
-__LINE__, 0xffffffff, "ffffffff", "%-x",
-__LINE__, 0xfffaf0e4, "fffaf0e4", "%2.x",
-__LINE__, 0x00000002, "0x2", "%#x",
-__LINE__, 0x0000e806, "e806", "%4x",
-__LINE__, 0xfffffff0, "fffffff0", "% 2.x",
-__LINE__, 0xfffffc0e, "fffffc0e", "%+.4x",
-__LINE__, 0xfd45716e, "FD45716E", "%.4X",
-__LINE__, 0xfff96fda, "FFF96FDA", "%-X",
-__LINE__, 0xff99d08a, "FF99D08A", "%.5X",
-__LINE__, 0x00000002, "2", "%-00.d",
-__LINE__, -0x000000f, " -15", "%6.ld",
-__LINE__, -0x00d321c, "-864796", "%#1ld",
-__LINE__, 0xff19ff8d, "ff19ff8d", "%1.5x",
-__LINE__, 0x00000000, "0000000", "%-.7x",
-__LINE__, 0x0000f50d, " F50D", "%5X",
-__LINE__, 0x00001688, " 5768", "%7.ld",
-__LINE__, 0x00000157, "343", "%2ld",
-__LINE__, 0xfffffffd, "0xfffffffd", "%+#3x",
-__LINE__, 0x00000d52, "3410", "%ld",
-__LINE__, 0x00000003, "3", "%d",
-__LINE__, 0x0001c6d2, "01c6d2", "%.6x",
-__LINE__, 0x242d65d2, "606954962", "%#7.ld",
-__LINE__, 0x00000e9f, "0000E9F", "%5.7X",
-__LINE__, 0x0002d785, "2D785", "%0X",
-__LINE__, 0x00000167, "167", "%0X",
-__LINE__, 0xfffff5e5, "fffff5e5", "% x",
-__LINE__, 0xffb69a04, "0xffb69a04", "%#0.x",
-__LINE__, 0xfffa012e, "FFFA012E", "%X",
-__LINE__, 0x0000001a, "0x1a", "% #x",
-__LINE__, 0xfffb26d3, "fffb26d3", "%+x",
-__LINE__, -0x00003e6, " -998", "%7ld",
-__LINE__, 0x00000004, "4", "%-d",
-__LINE__, 0xfffffd76, "0XFFFFFD76", "%#7X",
-__LINE__, 0x00000035, "53", "%ld",
-__LINE__, 0xffc6c190, "0XFFC6C190", "%#X",
-__LINE__, 0xffffffe2, "ffffffe2", "%7.0x",
-__LINE__, 0x03ff1b87, "67050375", "%2.d",
-__LINE__, 0x00020c47, "0X20C47", "%#X",
-__LINE__, 0x00000000, "0", "%d",
-__LINE__, 0x0000000e, "0X000E", "% #.4X",
-__LINE__, -0x00035cd, "-13773", "%+2.d",
-__LINE__, 0x00005eec, "5eec", "%1x",
-__LINE__, 0x001da0ff, "1941759", "%0d",
-__LINE__, 0xf8a9e96a, "f8a9e96a", "%+x",
-__LINE__, -0x0000120, "-288 ", "%-#6.d",
-__LINE__, 0x00000000, "0", "%-X",
-__LINE__, 0x0000152e, "152E", "%+X",
-__LINE__, -0x0001077, "-4215", "% 0d",
-__LINE__, 0xffffffd7, "FFFFFFD7", "%0X",
-__LINE__, 0xfffe097d, "FFFE097D", "%2X",
-__LINE__, 0xcb982712, "cb982712", "%x",
-__LINE__, 0xfff39f2e, "FFF39F2E", "%.5X",
-__LINE__, -0x0058cae, "-363694", "%+.1d",
-__LINE__, -0x000002b, "-043", "%#1.3d",
-__LINE__, -0x001e989, "-125321", "%1d",
-__LINE__, 0x00959ecd, "9805517", "%d",
-__LINE__, 0xf49df846, "F49DF846", "%+3X",
-__LINE__, 0xfffffffd, "fffffffd", "%+.5x",
-__LINE__, -0x000ac76, "-44150", "%3.ld",
-__LINE__, 0x00000028, " 0028", "%06.4x",
-__LINE__, 0x000003e8, "3E8", "%-02X",
-__LINE__, 0x00000012, "012", "%.3X",
-__LINE__, 0x00000006, "0X6", "%#X",
-__LINE__, 0x00ef8479, "+15697017", "%+0.6d",
-__LINE__, 0xffffffe8, "FFFFFFE8", "%-X",
-__LINE__, 0x773a90f7, "773a90f7", "%3.5x",
-__LINE__, 0x00096d44, "96D44", "%-X",
-__LINE__, -0x08a3d96, "-9059734", "%ld",
-__LINE__, -0x000001a, "-26", "%00.ld",
-__LINE__, 0x32f57585, "32f57585", "% x",
-__LINE__, 0x2825f175, "2825F175", "%X",
-__LINE__, 0x000054ff, "21759", "%-2d",
-__LINE__, -0x0266cdc, "-2518236", "%ld",
-__LINE__, 0x0000031d, "0X31D", "%+#4X",
-__LINE__, 0x0003fc99, "3fc99", "%x",
-__LINE__, -0x0064624, "-411172", "%-#d",
-__LINE__, 0x0001b2d9, "111321", "%-ld",
-__LINE__, -0x000007c, "-124", "%#d",
-__LINE__, 0xfffffffa, "FFFFFFFA", "%+X",
-__LINE__, -0x007a5b8, "-501176", "%+ld",
-__LINE__, 0x0213b583, "213B583", "%2.X",
-__LINE__, 0xfff12e51, "FFF12E51", "%+X",
-__LINE__, 0x00052403, "0336899", "%-0.7d",
-__LINE__, 0xffffffff, "ffffffff", "%-04.4x",
-__LINE__, 0x00000010, "0010", "%0.4X",
-__LINE__, 0xffffffb5, "FFFFFFB5", "%-1.3X",
-__LINE__, -0x0000001, "-1", "%d",
-__LINE__, 0x0003a2d1, "3a2d1", "% x",
-__LINE__, 0x00000424, "1060", "%0ld",
-__LINE__, -0x0000078, "-120", "%1d",
-__LINE__, 0x00000000, "0", "%ld",
-__LINE__, 0x00000414, "1044", "%ld",
-__LINE__, 0x00000072, "0x072", "%#5.3x",
-__LINE__, 0x0000007a, "7A", "% X",
-__LINE__, 0x081542a3, "135611043", "%0d",
-__LINE__, 0xfffb4ce6, "fffb4ce6", "%4.6x",
-__LINE__, 0x00002ab2, "2ab2", "%-1x",
-__LINE__, 0x00000000, " 0", "% 2x",
-__LINE__, 0xfffffa59, "FFFFFA59", "%2.X",
-__LINE__, 0xffffe22b, "ffffe22b", "%-x",
-__LINE__, 0xfffffd52, "FFFFFD52", "%+.2X",
-__LINE__, 0x0000039f, "927", "%-d",
-__LINE__, 0x0002dea6, "2dea6", "%0x",
-__LINE__, 0x000216db, "136923", "%ld",
-__LINE__, 0x00000013, "19", "%0d",
-__LINE__, 0x000047cc, "18380", "%2.2ld",
-__LINE__, -0x0007d10, "-32016", "%d",
-__LINE__, 0xff9af906, "FF9AF906", "%0X",
-__LINE__, 0x02cfa224, "+47161892", "%+0.7d",
-__LINE__, -0x0000022, "-34", "%1.d",
-__LINE__, 0xfffffff0, "FFFFFFF0", "%-4X",
-__LINE__, 0x00000029, " 41", "%6.ld",
-__LINE__, 0xffffff76, "ffffff76", "%x",
-__LINE__, 0x00000000, "0", "%+X",
-__LINE__, 0x00000001, "1", "%d",
-__LINE__, 0xfff6de5a, "FFF6DE5A", "%X",
-__LINE__, 0x00000002, "2", "%ld",
-__LINE__, 0x00000025, "25", "%+x",
-__LINE__, 0xfffffffb, "FFFFFFFB", "%5.0X",
-__LINE__, 0x0011bbb5, "1162165", "%0.0ld",
-__LINE__, 0xfffcdc96, "0XFFFCDC96", "%#X",
-__LINE__, 0x00008f5f, "8f5f", "%3.1x",
-__LINE__, 0xffa0fa5d, "0XFFA0FA5D", "%#X",
-__LINE__, 0x00004534, "4534", "% 0X",
-__LINE__, 0xfffffff9, "fffffff9", "%.2x",
-__LINE__, 0xffeeae50, "ffeeae50", "%-x",
-__LINE__, 0x00002964, " 0010596", "% 0.7d",
-__LINE__, 0x000021c9, " 21c9", "%6x",
-__LINE__, 0x00000001, " 1", "% d",
-__LINE__, 0x0002abd8, "+175064", "%+d",
-__LINE__, 0xffffffad, "FFFFFFAD", "%+0X",
-__LINE__, 0x00000003, "3", "%ld",
-__LINE__, 0x0c036da3, " 201551267", "% .3d",
-__LINE__, -0x004343c, "-275516", "%+ld",
-__LINE__, 0x00000003, "003", "% .3x",
-__LINE__, 0xffffe34e, "ffffe34e", "%x",
-__LINE__, 0x0000e118, "e118", "%x",
-__LINE__, -0x007d945, "-514373", "%+#0ld",
-__LINE__, 0x277f1cc5, "277f1cc5", "% x",
-__LINE__, 0x00003bef, "03bef", "% 0.5x",
-__LINE__, 0xfffffcb9, "fffffcb9", "%x",
-__LINE__, 0x0003311a, "209178", "%ld",
-__LINE__, 0x00000000, " ", "%3.ld",
-__LINE__, 0x05942225, "5942225", "%x",
-__LINE__, 0xfffceb4c, "FFFCEB4C", "%-X",
-__LINE__, 0xffd08633, "ffd08633", "%2.x",
-__LINE__, -0x0000001, " -1", "%6d",
-__LINE__, 0x000fdb12, "1039122", "%d",
-__LINE__, 0x00000003, "3", "% 0X",
-__LINE__, -0x2fd5bf1, "-50158577", "% 5.ld",
-__LINE__, -0x0089a03, "-563715", "%-d",
-__LINE__, 0xfffffffe, "FFFFFFFE", "% X",
-__LINE__, 0x29fdb2ba, "29fdb2ba", "% 0x",
-__LINE__, 0x0000008f, "8F", "% X",
-__LINE__, 0x00000003, "3", "%ld",
-__LINE__, 0xffc58445, "FFC58445", "%.2X",
-__LINE__, -0x00023f6, "-9206", "%+d",
-__LINE__, 0x00000011, "11", "%X",
-__LINE__, -0x0000003, "-0000003", "%-.7d",
-__LINE__, -0x0000003, "-3", "%#ld",
-__LINE__, 0x001242d9, "1242D9", "%X",
-__LINE__, -0x48d0c81, "-76352641", "%7.d",
-__LINE__, -0x001b675, "-112245", "%#ld",
-__LINE__, 0x00000003, "3", "%-d",
-__LINE__, 0xfff93fdf, "0XFFF93FDF", "% #X",
-__LINE__, 0x001a9414, "1741844", "%#ld",
-__LINE__, 0x0001fd86, "130438", "%ld",
-__LINE__, 0x010f37a8, "17774504", "%4.7d",
-__LINE__, 0x00382838, "0382838", "%3.7X",
-__LINE__, -0x47fd56c2, "-1207785154", "%ld",
-__LINE__, 0x001981dd, "1981dd", "%x",
-__LINE__, 0xffffefba, "ffffefba", "% 06.x",
-__LINE__, -0x3f402b29, "-1061169961", "%+#ld",
-__LINE__, -0x395aae44, "-962244164", "%-1d",
-__LINE__, 0x1fa39f42, "530816834", "%#d",
-__LINE__, -0x000358d, "-13709", "%d",
-__LINE__, -0xdc17b8f, "-230783887", "%ld",
-__LINE__, -0x23c41583, "-600053123", "%+3.d",
-__LINE__, 0xfffffc16, "fffffc16", "%x",
-__LINE__, 0x003f1364, "4133732", "%7.ld",
-__LINE__, 0xffffe691, "FFFFE691", "%07X",
-__LINE__, 0x07b31d71, "129178993", "%.7d",
-__LINE__, -0x0019732, "-104242", "% ld",
-__LINE__, 0x02428167, "0x2428167", "%#x",
-__LINE__, -0x06c1ecd, "-7085773", "%.7ld",
-__LINE__, 0xfb01cb4e, "fb01cb4e", "%x",
-__LINE__, 0x00005a41, "+23105", "%+ld",
-__LINE__, 0xfffffff4, "FFFFFFF4", "%-5.X",
-__LINE__, 0x00000005, " 5", "%4.ld",
-__LINE__, 0xf4ab4b2d, "F4AB4B2D", "%0.X",
-__LINE__, -0x000fce3, "-64739", "%+#3.ld",
-__LINE__, 0x000076ea, " 30442", "%6.2ld",
-__LINE__, 0x00000cb9, " cb9", "%4.x",
-__LINE__, 0x002f43ef, "3097583", "%1.1ld",
-__LINE__, 0xf5bd0105, "F5BD0105", "%+X",
-__LINE__, 0x0037954a, "3642698", "%d",
-__LINE__, 0xfffffff7, "0XFFFFFFF7", "%-#X",
-__LINE__, 0xffffcedf, "0xffffcedf", "%#6.7x",
-__LINE__, 0xfffffde4, "FFFFFDE4", "%2.4X",
-__LINE__, 0x01a6f103, "1a6f103", "%5.x",
-__LINE__, 0x00000191, " 191", "%7.0X",
-__LINE__, 0x00000003, "03", "% .2X",
-__LINE__, -0xd4e3219, "-223228441", "%6.ld",
-__LINE__, 0x00b0efbd, "11595709", "%d",
-__LINE__, -0x00000ea, "-234", "%#3d",
-__LINE__, 0x00000be8, "BE8 ", "%-5X",
-__LINE__, 0xffffffff, "ffffffff", "%5.3x",
-__LINE__, -0x267f8c6, "-40368326", "%d",
-__LINE__, 0x000006ed, "6ED", "%X",
-__LINE__, 0xfdd6c9b6, "FDD6C9B6", "%X",
-__LINE__, 0x0007ac29, "7ac29", "%-x",
-__LINE__, 0x00000014, "14", "%2x",
-__LINE__, 0x123ca563, "+305964387", "%+ld",
-__LINE__, 0x00000004, " 4", "%5.d",
-__LINE__, 0xffff877a, "ffff877a", "%x",
-__LINE__, -0x00003e7, "-999", "%+0.3d",
-__LINE__, 0x0a68ba6e, "a68ba6e", "%3.1x",
-__LINE__, 0xfe29c810, "FE29C810", "%+X",
-#endif
-
-__LINE__, 0x00000000, "0", "%o",
-__LINE__, 0000000123, "123", "%o",
-__LINE__, 0000123456, "0123456", "%#o",
-__LINE__, 0000123456, "00123456", "%#.8o",
-__LINE__, 0000123456, " 00123456", "%#10.8o",
-__LINE__, 0x00000123, "0x00123", "%#07x",
-
-0,
-};
-
-int main()
-{
- int errcount = 0;
- int testcount = 0;
-#define BSIZE 1024
- char buffer[BSIZE];
- sprint_int_type *iptr;
-#if defined(__cplusplus) && !defined(TEST_LIBIO)
-
- ostrstream sstr(buffer, BSIZE);
-
- for (iptr = sprint_ints; iptr->line; iptr++) {
- sstr.seekp(0);
- sstr.form(iptr->format_string, iptr->value);
- sstr << ends;
- if (strcmp(buffer, iptr->result) != 0) {
- errcount++;
- cerr << "Error in line " << iptr->line;
- cerr << " using \"" << iptr->format_string;
- cerr << "\". Result is \"" << buffer << "\"; should be: \"";
- cerr << iptr->result << "\".\n";
- }
- testcount++;
- }
-
-
- if (errcount == 0) {
- cerr << "Encountered no errors in " << testcount << " tests.\n";
- return 0;
- }
- else {
- cerr << "Encountered " << errcount << " errors in "
- << testcount << " tests.\n";
- return 1;
- }
-#else
- for (iptr = sprint_ints; iptr->line; iptr++) {
- sprintf(buffer, iptr->format_string, iptr->value);
- if (strcmp(buffer, iptr->result) != 0) {
- errcount++;
- fprintf(stderr,
- "Error in line %d using \"%s\". Result is \"%s\"; should be: \"%s\".\n",
- iptr->line, iptr->format_string, buffer, iptr->result);
- }
- testcount++;
- }
-
- if (errcount == 0) {
- fprintf(stderr, "Encountered no errors in %d tests.\n", testcount);
- return 0;
- }
- else {
- fprintf(stderr, "Encountered %d errors in %d tests.\n",
- errcount, testcount);
- return 1;
- }
-#endif
-}
diff --git a/contrib/libg++/libio/tests/tiomanip.cc b/contrib/libg++/libio/tests/tiomanip.cc
deleted file mode 100644
index b7dd08a4618e..000000000000
--- a/contrib/libg++/libio/tests/tiomanip.cc
+++ /dev/null
@@ -1,35 +0,0 @@
-// test the parametrized manipulators
-
-#include <stdlib.h>
-#include <iomanip.h>
-
-main()
-{
-#ifdef _G_NO_TEMPLATES
- cerr << "(IO manipulators are not supported with this compiler)\n");
- exit(-1);
-#else
-
- cout << dec << 1234 << ' '
- << hex << 1234 << ' '
- << oct << 1234 << endl;
-
- //SMANIP<int> x = setw(4);
- //operator<<(cout, x);
-
- cout
- << "("
- << dec << setw(4) << setfill('*')
- << 12 << ")\n";
-
- cout << "(" << 12 << ")\n";
-
- cout << setiosflags(ios::internal);
- cout << "(" << setw(6) << -12 << ")\n";
-
- exit(0);
-#endif
-}
-
-
-
diff --git a/contrib/libg++/libio/tests/tiomanip.exp b/contrib/libg++/libio/tests/tiomanip.exp
deleted file mode 100644
index 7a0a7ea5cb21..000000000000
--- a/contrib/libg++/libio/tests/tiomanip.exp
+++ /dev/null
@@ -1,4 +0,0 @@
-1234 4d2 2322
-(**12)
-(12)
-(-***12)
diff --git a/contrib/libg++/libio/tests/tiomisc.cc b/contrib/libg++/libio/tests/tiomisc.cc
deleted file mode 100644
index 3351e4d88145..000000000000
--- a/contrib/libg++/libio/tests/tiomisc.cc
+++ /dev/null
@@ -1,236 +0,0 @@
-/* Random regression tests etc. */
-
-#include <fstream.h>
-#include <stdio.h>
-#include <strstream.h>
-#include <string.h>
-#include <fcntl.h>
-#include <stdlib.h>
-#include <assert.h>
-
-#define BUF_SIZE 4096
-
-void
-test1 ()
-{
- fstream f;
- char buf[BUF_SIZE];
-
- f.setbuf( buf, BUF_SIZE );
-}
-
-void
-test2 ( )
-{
- char string[BUF_SIZE];
- ostrstream s( string, BUF_SIZE );
-
- s << "Bla bla bla " << 55 << ' ' << 3.23 << '\0' << endl;
- cout << "Test2: " << string << endl;
-}
-
-
-/* Test case from Joe Buck <jbuck@Synopsys.COM>. */
-
-class special_ofstream : public ofstream {
-public:
- special_ofstream() : ofstream() {}
- special_ofstream(int fd) : ofstream(fd) {}
- special_ofstream(const char *name, int mode=ios::out, int prot=0664) {
- open(name,mode,prot);
- }
- void open(const char *name, int mode=ios::out, int prot=0664);
-};
-
-void special_ofstream::open(const char* name, int mode, int prot) {
- if (strcmp(name, "<cout>") == 0) {
- rdbuf()->attach(1);
- }
- else if (strcmp(name, "<cerr>") == 0) {
- rdbuf()->attach(2);
- setf(unitbuf);
- }
- else ofstream::open(name,mode,prot);
-}
-
-void
-test3 ()
-{
- {
- special_ofstream o("<cout>");
- o << "Hello\n";
- // o is destructed now. This should not close cout
- }
- {
- special_ofstream o("<cout>");
- o << "Line 2\n";
- }
-}
-
-void
-getline_test1 ()
-{
- char buf[1000];
- char data[] = "#include <iostream.h>\n#include <fstream.h>\n";
- istrstream infile(data, strlen(data));
- infile.getline(buf,1000);
- infile.getline(buf,1000);
-
- cout << buf << '\n';
-}
-
-// test istream::getline on readng overlong lines.
-void
-getline_test2 ()
-{
- char data[] = "Line one.\nline 2.\n";
- char line[100];
- istrstream strin(data, strlen(data));
- strin.getline(line, 10);
- cout << "line: " << line << ", count: " << strin.gcount () << "\n";
-}
-
-void
-getline_test3 ()
-{
- char data[] = "123456789\nabcdefghijkl.\n";
- char line[10];
- istrstream strin(data, strlen(data));
- strin.getline(line, 10);
- cout << "line: " << line << ", count: " << strin.gcount () << "\n";
- strin.getline(line, 10);
- cout << "line: " << line << ", count: " << strin.gcount () << "\n";
- assert (!strin.good());
- strin.clear ();
- strin.getline(line, 10);
- cout << "line: " << line << ", count: " << strin.gcount () << "\n";
-}
-
-class A : private ostream
-{
-public:
- A(streambuf* s);
- ostream::flush;
-};
-A::A(streambuf* s)
-: ostream(s)
-{
-}
-
-void
-flush1_test()
-{
- A os(cout.rdbuf());
- os.flush();
-}
-
-void
-reread_test ()
-{ // This is PR 5486.
- int tag_char;
- char *fname = "Makefile";
- int mode = O_RDONLY;
- filebuf file_p;
-
- int fd = ::open(fname, mode, 0666);
- file_p.attach(fd);
-
- istream d_istream(&file_p);
-
- // Read a character from the stream, save it and put it back.
- tag_char = d_istream.get();
- int save_char = tag_char;
- d_istream.putback((char) tag_char);
-
- // Uncomment then next statement and the next get will be EOF.
- streampos pos = d_istream.tellg();
-
- // Re-read the first character
- tag_char = d_istream.get();
-
- cout << "reread_test: " << (char)save_char << " " << (char)tag_char << "\n";
- cout.flush();
-
-}
-
-void *danger_pointer;
-void operator delete (void *p)
-{
- if (p)
- {
- if (p == danger_pointer)
- fprintf (stderr, "maybe deleted\n");
-
- free (p);
- }
-}
-
-struct my_ostream: virtual public ios, public ostream
-{
- my_ostream (ostream &s): ios (s.rdbuf()) { }
-};
-
-void
-test_destroy ()
-{
- ofstream fstr ("foo.dat");
- my_ostream wa (fstr);
-
- /* Check that sure wa.rdbuf() is only freed once. */
- danger_pointer = wa.rdbuf ();
-
- wa << "Hi there" << endl;
-#ifdef _IO_NEW_STREAMS
- fprintf (stderr, "maybe deleted\n");
-#endif
-}
-
-/* Submitted by Luke Blanshard <luke@cs.wisc.edu>.
-
- In certain circumstances, the library will write past the end of the
- buffer it has allocated for a file: You must read from the file,
- exactly enough bytes that the read pointer is at the end of the
- buffer. Then you must write to the file, at the same place you just
- finished reading from.
-
- "Your patch looks great, and you're welcome to use the test code for any
- purpose whatever. I hereby renounce my implicit copyright on it." */
-
-void
-test_read_write_flush ()
-{
- fstream f;
- char buf[8192];
-
- for ( int index=0; index < sizeof buf; ++index )
- buf[index] = (index+1)&63? 'x' : '\n';
-
- f.open( "foo.dat", ios::in|ios::out|ios::trunc );
- f.write( buf, sizeof buf );
-
- f.seekg( 0, ios::beg );
- f.read( buf, sizeof buf );
-
-// f.seekp( sizeof buf, ios::beg ); // Present or absent, bug still happens.
- f.write( "a", 1 );
-
- if ( f.rdbuf()->_IO_write_ptr > f.rdbuf()->_IO_buf_end )
- cerr << "test_read_write_flush: it's broken.\n";
- else
- cout << "test_read_write_flush: the problem isn't showing itself.\n";
-}
-
-int main( )
-{
- test1 ();
- test2 ();
- test3 ();
- getline_test1 ();
- getline_test2 ();
- getline_test3 ();
- flush1_test ();
- reread_test ();
- test_destroy ();
- test_read_write_flush ();
- return 0;
-}
diff --git a/contrib/libg++/libio/tests/tiomisc.exp b/contrib/libg++/libio/tests/tiomisc.exp
deleted file mode 100644
index 26a3acd33fb1..000000000000
--- a/contrib/libg++/libio/tests/tiomisc.exp
+++ /dev/null
@@ -1,11 +0,0 @@
-Test2: Bla bla bla 55 3.23
-Hello
-Line 2
-#include <fstream.h>
-line: Line one., count: 10
-line: 123456789, count: 10
-line: abcdefghi, count: 9
-line: jkl., count: 5
-reread_test: # #
-maybe deleted
-test_read_write_flush: the problem isn't showing itself.
diff --git a/contrib/libg++/libio/tests/tstdiomisc.c b/contrib/libg++/libio/tests/tstdiomisc.c
deleted file mode 100644
index 1c15b75a7095..000000000000
--- a/contrib/libg++/libio/tests/tstdiomisc.c
+++ /dev/null
@@ -1,43 +0,0 @@
-#ifndef STDIO_H
-#define STDIO_H <iostdio.h>
-#endif
-#include STDIO_H
-
-void
-t1 ()
-{
- int n = -1;
- sscanf ("abc ", "abc %n", &n);
- printf ("t1: count=%d\n", n);
-}
-
-void
-t2 ()
-{
- int n;
- long N;
- int retval;
-#define SCAN(INPUT, FORMAT, VAR) \
- VAR = -1; \
- retval = sscanf (INPUT, FORMAT, &VAR); \
- printf ("sscanf (\"%s\", \"%s\", &x) => %d, x = %ld\n", \
- INPUT, FORMAT, retval, VAR);
-
- SCAN ("12345", "%ld", N);
- SCAN ("12345", "%llllld", N);
- SCAN ("12345", "%LLLLLd", N);
- SCAN ("test ", "%*s%n", n);
- SCAN ("test ", "%2*s%n", n);
- SCAN ("12 ", "%l2d", n);
- SCAN ("12 ", "%2ld", N);
-}
-
-int
-main ()
-{
- t1 ();
- t2 ();
-
- fflush (stdout);
- return 0;
-}
diff --git a/contrib/libg++/libio/tests/tstdiomisc.exp b/contrib/libg++/libio/tests/tstdiomisc.exp
deleted file mode 100644
index b8ee02dcd6a3..000000000000
--- a/contrib/libg++/libio/tests/tstdiomisc.exp
+++ /dev/null
@@ -1,8 +0,0 @@
-t1: count=5
-sscanf ("12345", "%ld", &x) => 1, x = 12345
-sscanf ("12345", "%llllld", &x) => 0, x = -1
-sscanf ("12345", "%LLLLLd", &x) => 0, x = -1
-sscanf ("test ", "%*s%n", &x) => 0, x = 4
-sscanf ("test ", "%2*s%n", &x) => 0, x = -1
-sscanf ("12 ", "%l2d", &x) => 0, x = -1
-sscanf ("12 ", "%2ld", &x) => 1, x = 12
diff --git a/contrib/libg++/librx/ChangeLog b/contrib/libg++/librx/ChangeLog
deleted file mode 100644
index dbeccf8682c7..000000000000
--- a/contrib/libg++/librx/ChangeLog
+++ /dev/null
@@ -1,302 +0,0 @@
-Mon Apr 8 15:17:13 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * configure.in: Add AC_ARG_ENABLE for --enable-shared. Permit it
- to specify a list of directories.
- * configure: Rebuild with autoconf 2.8.
-
-Tue Nov 14 01:49:21 1995 Doug Evans <dje@canuck.cygnus.com>
-
- * configure.in (AC_CONFIG_AUX_DIR): Define.
- (AC_OUTPUT): Call config-ml.in.
- * configure: Regenerated.
-
-Mon Nov 13 13:40:15 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * configure.in: Use AC_MSG_CHECKING and AC_MSG_RESULT, rather than
- pre-expanding them.
- * configure: Rebuild.
-
-Wed Oct 4 12:10:39 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * configure.in: If using GCC, assume we always have alloca. This
- works around problems with broken cross setups. Use
- AC_FUNC_ALLOCA rather than AC_ALLOCA.
- * configure: Rebuild.
-
-Wed Sep 20 13:55:42 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * Makefile.in (maintainer-clean): New synonym for realclean.
-
-Mon Jun 19 00:33:22 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * Makefile.in: Massage broken shells that require 'else true'.
-
-Sun Jun 18 23:24:00 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * Makefile.in (distclean): Also remove config.cache and config.log.
-
-Thu Jun 8 22:42:58 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * configure.in: Add support for PIC flag configuration.
- * configure: Regenerate.
- * Makefile.in: Adjust accordingly.
-
-Mon Jun 5 18:46:06 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * Makefile.in (PICFLAG): New macro.
- (rx.o): Depend on stamp-picdir.
- (.c.o): Also build pic object.
- (stamp-picdir): New rule.
- (clean): Remove pic and stamp-picdir.
-
-Tue May 23 12:11:28 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * rx.c (regcomp and other POSX.2 functions): Leave them out for
- now, because they conflict with Motif on HPUX.
-
- * rx.c (re_syntax_table): Only declare #ifndef RX_WANT_RX_DEFS;
- otherwise we duplicate the declaration in rx.h.
- * rx.c (re_search_2_fetch_char): Add missing cast.
-
-Sun Apr 2 23:24:52 1995 Tom Lord <lord@x1.cygnus.com>
-
- * rx.h (rx_search): check for and propogate internal
- errors correctly (bogus check sometimes mistook ok returns
- for internal errors).
-
-Sun Feb 12 19:28:22 1995 Tom Lord (lord@x1.cygnus.com)
-
- * rx.h (rx_search):
- From: hankedr@duc.auburn.edu (Darrel Hankerson)
- 2. I have some problems understanding the code which sets
- search_state.free_chunks=0. It appears to me that since this is used
- to track alloca'd mem, that it should be done once at the top of
- rx_search(). Indeed, this also fixes the problem in the tests I'm
- running, but I don't have confidence in this "solution".
- [looks right to me. -tl]
-
-
- * rx.c: Two reported by kwzh.
-
- (re_search_2_get_burst): in the two string case,
- when computing `inset', add in pos->offset.
-
- (re_search_2_fetch_char): watch for the case when
- pos is just to the left of the second string, pos refers
- to the second string, but the first string is provided.
- This can happen at the very beginning of a match when the
- first thing after matching the priming character is a side
- effect like re_se_wordend.
-
- * rx.h (rx_search): patches (marked by /*|*/)
- from From: hjl@nynexst.com (H.J. Lu). One fixes a clear
- bug in a loop termination test. The other i'm not sure about
- yet, but it doesn't break the sed tests.
-
- * rx.c (re_compile_pattern):
- Initialize buf.rx.cset_size.
- (Fixes problem report from Kayvan Sylvan <kayvan@satyr.Sylvan.COM>)
-
- * rx.c (#define RX_DECL): cleaned up handling of this macro.
-
- * rx.c (re_comp):
- From hjl@nynexst.com
- Define _GNU_SOURCE.
- Test for USE_BSD_REGEX around teh BSD entry points.
- Under BSD, treat the empty-string pattern like the NULL pattern.
- Also under BSD, rx_syntax_options --> re_syntax_options.
- Also, rx_exec --> re_exec and rx_registers --> re_registers.
-
-
- * rx.c (rx_compile):
- From: kwzh@gnu.ai.mit.edu (Karl Heuer)
- The `\sX' handler ends with `goto append_node' but without setting
- the `append' variable first. This patch should fix it.
-
-
- * rx.c (regcomp): explicitly zero the field syntax_parens.
- Reported/fix suggested by Morten Holmqvist <netrom@find2.denet.dk>.
-
- * rx.h (changes under and around ifdef emacs):
- From: kwzh@gnu.ai.mit.edu (Karl Heuer)
- Here's a patch (for 0.06) to fix most of the other problems I
- mentioned. Some of the cpp conditionals in rx.h were ending at
- the wrong place and/or were incorrectly commented; fixing these
- took care of some of the missing declarations.
-
- (fastmap_search): unnecessary defaults to switch statements
- to shut-up "gcc -Wall".
-
-Thu Nov 24 18:39:42 1994 Tom Lord (lord@x1.cygnus.com)
- These fixes let's rx pass the spencer.tests from grep.
-
- * rx.h (rx_search): moved slightly out of date debugging
- code from RX_DEBUG to RX_DEBUG_0.
-
- * rx.h (rx_search): in the outer loop, if get_burst returns
- that there are no more characters, consider the possibility
- of an empty match before failing.
-
- * rx.h (rx_search): when computing search_end, don't waste
- time computing MIN and MAX of values already forced into range.
-
- * rx.h (rx_search): when making RANGE fit within TOTAL_SIZE,
- don't forget to allow the possible empty match at the end of
- string.
-
- * rx.c (is_anchored): the equations solving side-effect
- anchoring were wrong for the r_alternate case. The interesting
- thing about this bug is that it disguises itself as a precedent
- bug between | and ^ because of an optimization in the search
- function that checks rxb->begbuf_only (a return value of is_anchored).
-
- * rx.c: Fix the print-name rx_se_win (missing comma).
- Fix the function print_cset to print non-printable characters
- as octal.
-
-Sat Nov 5 20:01:46 1994 Jason Merrill (jason@phydeaux.cygnus.com)
-
- * Makefile.in (LIBCFLAGS): New variable.
- (.c.o): Use it.
-
-Thu Sep 1 16:23:21 1994 Tom Lord (lord@x1.cygnus.com)
-
- * rx.c: applied patches from H J Lu to unrot BSD compatibility
- code.
-
-Mon Aug 29 16:48:57 1994 Ian Lance Taylor (ian@sanguine.cygnus.com)
-
- * Makefile.in (AR_FLAGS): Define.
- (librx.a): Use $(AR) and $(AR_FLAGS).
-
-Fri Aug 26 11:37:36 1994 Ian Lance Taylor (ian@cygnus.com)
-
- * configure.in: Call AC_PROG_CPP explicitly.
- * configure: Rebuilt.
-
-Thu Aug 25 18:19:47 1994 Tom Lord (lord@x1.cygnus.com)
-
- * rx.[ch], configure.in: use __const__ instead of
- AC_CONST. Only include stdio once. Don't check
- for memory.h.
-
-Tue Aug 16 12:12:01 1994 Tom Lord (lord@x1.cygnus.com)
-
- * rx.[ch]: LGPL instead of GPL
-
-Mon Aug 15 16:24:16 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * rx.h (rx_search): When checking if we've gotten to the end,
- handle the case that we're searching backwards.
-
-Tue Jun 21 12:40:50 1994 Jim Kingdon (kingdon@lioth.cygnus.com)
-
- * rx.c (re_rx_search): New function, exports rx_search.
-
- * Makefile.in (clean): Also remove librx.a.
-
-Fri Jun 3 12:16:45 1994 Tom Lord (lord@x1.cygnus.com)
-
- * rx.c(re_search_2_fetch_char): fixed a bug that caused it to
- ignore OFFSET.
-
-Thu May 26 14:05:17 1994 Tom Lord (lord@x1.cygnus.com)
-
- * rx.[ch]: From: Michael Rendell <michael@maple.cs.mun.ca>
-
- ``The problem seems to lie in the casting between pointers and
- integers (pointers on the alpha are 64 bits, ints 32 bits, longs
- 64 bits). The core dump happens in rx_compactify_nfa(), in the
- first for loop in the while(eclose) loop -- rx_hash_find() returns
- 0, which is dereferenced.''
-
- The patch changed the type of rx_hash_masks to long and
- also a use of `int' to hold a side effect in rx_search.
-
-Sat May 14 00:45:14 1994 Tom Lord (lord@x1.cygnus.com)
-
- * rx.c, rx.h: rearranged all the code
- so that all the rx functions can be exported
- or hidden (define RX_WANT_RX_DEFS when compiling
- and when including rx.h).
-
-Wed May 11 01:15:56 1994 Tom Lord (lord@rtl.cygnus.com)
-
- * rx.c, rx.h: added rx_search -- searching in
- arbitrarily fragmented strings, continuation support.
-
-Wed May 4 13:56:55 1994 Tom Lord (lord@rtl.cygnus.com)
-
- * rx.c, rx.h: Started independent maintainence
- of these.
-
------- version 0.04 ------
-
-Fri May 13 02:31:13 1994 Tom Lord (lord@x1.cygnus.com)
-
- * rx.c: eliminated the weirdo custom allocators.
- Fixed some bugs (but lost the ChangeLog entries).
-
-Wed May 11 06:09:31 1994 Chip Salzenberg (chip@fin.uucp)
-
- * rx.c (rx_superstate_eclosure_union): Always return a value.
-
------- version 0.03 ------
-Fri Aug 6 01:57:28 1993 Tom Lord (lord@unix1.andrew.cmu.edu)
-
- * rx.c (re_search_2): sped up the fastmap search a little
- to as to not be slower than regex.c on simple patterns.
- Rx will still lose by a couple instructions in some degenerate
- cases but mostly will win.
-
-Thu Aug 5 11:39:57 1993 Tom Lord (lord@thisbe.weh.andrew.cmu.edu)
-
- * rx.c (re_search_2 & compilation front-ends): cache the starting
- superset of super-nfa's so that it isn't necessary to do an
- eclosure union for every call to re_search_2.
-
- * rx.c (re_search_2): (from Eric Backus) arrange to call
- alloca(0) from a shallower stack frame than re_search_2
- if callling it at all.
-
- This could use a better cpp test. Right now, an extra function
- call is added to re_search_2 unles __GNUC__ is defined. If
- there were something like _HAVE_LOSER_ALLOCA_....
-
- * rx.c (rx_compile, re_search_2, several new fns):
- changed the order of side effect lists so that possible
- futures that begin with complex effects more to the right
- are explored after futures more to the left. Added
- a noop complex effect to alts and stars to guarantee
- they are explored in the right order. An optimization
- after the parse removes some from the alts (and not all
- stars get them in the first place). Changed the `best
- match' criterea -- now that possible futures are ordered
- posixly, we only want to check the length of the match.
- For a given length, the best subexpression partitioning
- is the first one found.
-
- A side effect of this is that Rx will always return the
- same register assignements for a given regexp/input text.
- Bummer :-) / 2.
-
-
------- version 0.02 ------
-
-ed Jul 21 13:10:56 1993 Tom Lord (lord@unix8.andrew.cmu.edu)
-
- * rx.c (re_search_2): elaborated on the rule for picking the
- best match so that the lengths of subexpressions are taken
- into account. This is for Posix compatability.
-
-
------- version 0.01 ------
-
-Sun Jun 13 17:20:35 1993 Tom Lord (lord@tsunami.ucc.andrew.cmu.edu)
-
- * This is the first release of rx.c. Although some of the code
- is derived from regex.c, there is not much continuity between
- the two implementations.
-
-
-
diff --git a/contrib/libg++/librx/DOC b/contrib/libg++/librx/DOC
deleted file mode 100644
index dce6e2e10a4b..000000000000
--- a/contrib/libg++/librx/DOC
+++ /dev/null
@@ -1,179 +0,0 @@
-Most of the interfaces are covered by the documentation for GNU regex.
-
-This file will accumulate factoids about other interfaces until
-somebody writes a manual.
-
-
-* Don't Pass Registers Gratuitously
-
-Search and match functions take an optional parameter which is a
-pointer to "registers" or "match positions". This parameter points
-to a structure which during the match is filled in with the offset locations
-of parenthesized subexpressions.
-
-Unless you specificly need the values that would be stored in that
-structure, you should pass NULL for this parameter. Usually Rx will
-do less backtracking (and so run much faster) if subexpression
-positions are not being measured.
-
-
-* Use syntax_parens
-
-Sometimes you need to know the positions of *some* parenthesized
-subexpressions, but not others. You can still help Rx to avoid
-backtracking by telling it specificly which subexpressions you are interested
-in. You do this by filling in the rxb.syntax_parens field of
-a pattern buffer.
-
- /* If this is a valid pointer, it tells rx not to store the extents of
- * certain subexpressions (those corresponding to non-zero entries).
- * Passing 0x1 is the same as passing an array of all ones. Passing 0x0
- * is the same as passing an array of all zeros.
- * The array should contain as many entries as their are subexps in the
- * regexp.
- */
- char * syntax_parens;
-
-
-* RX_SEARCH
-
-For an example of how to use rx_search, you can look at how
-re_search_2 is defined (in rx.c). Basicly you need to define three
-functions. These are GET_BURST, FETCH_CHAR, and BACK_REF. They each
-operate on `struct rx_string_position' and a closure of your design
-passed as void *.
-
- struct rx_string_position
- {
- const unsigned char * pos; /* The current pos. */
- const unsigned char * string; /* The current string burst. */
- const unsigned char * end; /* First invalid position >= POS. */
- int offset; /* Integer address of current burst */
- int size; /* Current string's size. */
- int search_direction; /* 1 or -1 */
- int search_end; /* First position to not try. */
- };
-
-On entry to GET_BURST, all these fields are set, but POS may be >=
-END. In fact, STRING and END might both be 0.
-
-The function of GET_BURST is to make all the fields valid without
-changing the logical position in the string. SEARCH_DIRECTION is a
-hint about which way the matcher will move next. It is usually 1, and
-is -1 only when fastmapping during a reverse search. SEARCH_END
-terminates the burst.
-
- typedef enum rx_get_burst_return
- (*rx_get_burst_fn) (struct rx_string_position * pos,
- void * app_closure,
- int stop);
-
-
-The closure is whatever you pass to rx_search. STOP is an argument to
-rx_search that bounds the search. You should never return a string
-position from with SEARCH_END set beyond the position indicated by
-STOP.
-
-
- enum rx_get_burst_return
- {
- rx_get_burst_continuation,
- rx_get_burst_error,
- rx_get_burst_ok,
- rx_get_burst_no_more
- };
-
-Those are the possible return values of get_burst. Normally, you only
-ever care about the last two. An error return indicates something
-like trouble reading a file. A continuation return means suspend the
-search and resume by retrying GET_BURST if the search is restarted.
-
-GET_BURST is not quite as trivial as you might hope. If you have a
-fragmented string, you really have to keep two adjacent fragments at
-all times, even though the GET_BURST interface looks like you only
-need one. This is because of operators like `word-boundary' that try
-to look at two adjacent characters. Such operators are implemented
-with FETCH_CHAR.
-
- typedef int (*rx_fetch_char_fn) (struct rx_string_position * pos,
- int offset,
- void * app_closure,
- int stop);
-
-That takes the same closure passed to GET_BURST. It returns the
-character at POS or at one past POS according to whether OFFSET is 0
-or 1.
-
-It is guaranteed that POS + OFFSET is within the string being searched.
-
-
-
-The last function compares characters at one position with characters
-previously matched by a parenthesized subexpression.
-
- enum rx_back_check_return
- {
- rx_back_check_continuation,
- rx_back_check_error,
- rx_back_check_pass,
- rx_back_check_fail
- };
-
- typedef enum rx_back_check_return
- (*rx_back_check_fn) (struct rx_string_position * pos,
- int lparen,
- int rparen,
- unsigned char * translate,
- void * app_closure,
- int stop);
-
-LPAREN and RPAREN are the integer indexes of the previously matched
-characters. The comparison should translate both characters being
-compared by mapping them through TRANSLATE. POS is the point at which
-to begin comparing. It should be advanced to the last character
-matched during backreferencing.
-
-* Compilation Stages
-
-In rx_compile, a string is compiled into a pattern buffer.
-Compilation proceeds in these stages:
-
- 1. Make a syntax tree for the regexp.
- 2. Duplicate the syntax tree and make both trees nodes
- in a single unifying tree.
- 3. In one of the two trees, remove all side effects that
- aren't needed to test for the possibility of a match.
- Such side effects include the filling in of output registers
- for subexpressions that are not backreferenced.
- 4. Optimize the unifying tree.
- 5. Translate the tree to an NFA.
- 6. Analyze and optimize the NFA.
- 7. Copy the NFA into a contiguous region of memory.
-
-
-* Cache Size
-
-During a search or match, the NFA is translated into a "super NFA".
-A super NFA can match the patterns of the corresponding NFA in no more
-and often fewer steps.
-
-The catch is that the super NFA may be costly to construct in its entirety;
-it may not even fit in memory. So, states of the NFA are constructed
-on demand and discarded after a period of non-use. They are kept in a cache
-so that time is not wasted constructing existing nodes twice.
-
-The size of the super state NFA cache is a contributing factor the performance
-of Rx. The larger the cache (to a point) the faster Rx can run. The
-variable rx_cache_bound is an upper limit on the number of superstates
-that can exist in the cache.
-
-The defaulting setting is 128. GNU sed uses 4096. Neither setting
-has much justification although sed's is after a small number of quick
-and dirty experiments. The memory consumed by one superstate is
-between 4k and 8k. The cache only grows to its bounded size if there
-is actual demand for that many states. Sed's setting, for example,
-may appear quite high but in practice that much memory is hardly ever
-used. The default setting was chosen based on the heuristic that a
-megabyte is the upper limit on what a good citizen library can
-allocate without special arrangement.
-
diff --git a/contrib/libg++/librx/rx.c b/contrib/libg++/librx/rx.c
deleted file mode 100644
index 6a93834f55d4..000000000000
--- a/contrib/libg++/librx/rx.c
+++ /dev/null
@@ -1,7193 +0,0 @@
-/* Copyright (C) 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
-
-This file is part of the librx library.
-
-Librx is free software; you can redistribute it and/or modify it under
-the terms of the GNU Library General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-Librx is distributed in the hope that it will be useful, but WITHOUT
-ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with this software; see the file COPYING.LIB. If not,
-write to the Free Software Foundation, 675 Mass Ave, Cambridge, MA
-02139, USA. */
-
-/* NOTE!!! AIX is so losing it requires this to be the first thing in the
- * file.
- * Do not put ANYTHING before it!
- */
-#if !defined (__GNUC__) && defined (_AIX)
- #pragma alloca
-#endif
-
-/* To make linux happy? */
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE
-#endif
-
-
-char rx_version_string[] = "GNU Rx version 0.07.2";
-
- /* ``Too hard!''
- * -- anon.
- */
-
-
-#include <stdio.h>
-#include <ctype.h>
-#ifndef isgraph
-#define isgraph(c) (isprint (c) && !isspace (c))
-#endif
-#ifndef isblank
-#define isblank(c) ((c) == ' ' || (c) == '\t')
-#endif
-
-#include <sys/types.h>
-
-#undef MAX
-#undef MIN
-#define MAX(a, b) ((a) > (b) ? (a) : (b))
-#define MIN(a, b) ((a) < (b) ? (a) : (b))
-
-typedef char boolean;
-#define false 0
-#define true 1
-
-#ifndef __GCC__
-#undef __inline__
-#define __inline__
-#endif
-
-/* Emacs already defines alloca, sometimes. */
-#ifndef alloca
-
-/* Make alloca work the best possible way. */
-#ifdef __GNUC__
-#define alloca __builtin_alloca
-#else /* not __GNUC__ */
-#if HAVE_ALLOCA_H
-#include <alloca.h>
-#else /* not __GNUC__ or HAVE_ALLOCA_H */
-#ifndef _AIX /* Already did AIX, up at the top. */
-char *alloca ();
-#endif /* not _AIX */
-#endif /* not HAVE_ALLOCA_H */
-#endif /* not __GNUC__ */
-
-#endif /* not alloca */
-
-/* Memory management and stuff for emacs. */
-
-#define CHARBITS 8
-#define remalloc(M, S) (M ? realloc (M, S) : malloc (S))
-
-
-/* Should we use malloc or alloca? If REGEX_MALLOC is not defined, we
- * use `alloca' instead of `malloc' for the backtracking stack.
- *
- * Emacs will die miserably if we don't do this.
- */
-
-#ifdef REGEX_MALLOC
-#define REGEX_ALLOCATE malloc
-#else /* not REGEX_MALLOC */
-#define REGEX_ALLOCATE alloca
-#endif /* not REGEX_MALLOC */
-
-
-#ifdef RX_WANT_RX_DEFS
-#define RX_DECL extern
-#define RX_DEF_QUAL
-#else
-#define RX_WANT_RX_DEFS
-#define RX_DECL static
-#define RX_DEF_QUAL static
-#endif
-#include "rx.h"
-#undef RX_DECL
-#define RX_DECL RX_DEF_QUAL
-
-
-#ifndef emacs
-
-#ifdef SYNTAX_TABLE
-extern char *re_syntax_table;
-#else /* not SYNTAX_TABLE */
-
-#ifndef RX_WANT_RX_DEFS
-RX_DECL char re_syntax_table[CHAR_SET_SIZE];
-#endif
-
-#ifdef __STDC__
-static void
-init_syntax_once (void)
-#else
-static void
-init_syntax_once ()
-#endif
-{
- register int c;
- static int done = 0;
-
- if (done)
- return;
-
- bzero (re_syntax_table, sizeof re_syntax_table);
-
- for (c = 'a'; c <= 'z'; c++)
- re_syntax_table[c] = Sword;
-
- for (c = 'A'; c <= 'Z'; c++)
- re_syntax_table[c] = Sword;
-
- for (c = '0'; c <= '9'; c++)
- re_syntax_table[c] = Sword;
-
- re_syntax_table['_'] = Sword;
-
- done = 1;
-}
-#endif /* not SYNTAX_TABLE */
-#endif /* not emacs */
-
-/* Compile with `-DRX_DEBUG' and use the following flags.
- *
- * Debugging flags:
- * rx_debug - print information as a regexp is compiled
- * rx_debug_trace - print information as a regexp is executed
- */
-
-#ifdef RX_DEBUG
-
-int rx_debug_compile = 0;
-int rx_debug_trace = 0;
-static struct re_pattern_buffer * dbug_rxb = 0;
-
-#ifdef __STDC__
-typedef void (*side_effect_printer) (struct rx *, void *, FILE *);
-#else
-typedef void (*side_effect_printer) ();
-#endif
-
-#ifdef __STDC__
-static void print_cset (struct rx *rx, rx_Bitset cset, FILE * fp);
-#else
-static void print_cset ();
-#endif
-
-#ifdef __STDC__
-static void
-print_rexp (struct rx *rx,
- struct rexp_node *node, int depth,
- side_effect_printer seprint, FILE * fp)
-#else
-static void
-print_rexp (rx, node, depth, seprint, fp)
- struct rx *rx;
- struct rexp_node *node;
- int depth;
- side_effect_printer seprint;
- FILE * fp;
-#endif
-{
- if (!node)
- return;
- else
- {
- switch (node->type)
- {
- case r_cset:
- {
- fprintf (fp, "%*s", depth, "");
- print_cset (rx, node->params.cset, fp);
- fputc ('\n', fp);
- break;
- }
-
- case r_opt:
- case r_star:
- fprintf (fp, "%*s%s\n", depth, "",
- node->type == r_opt ? "opt" : "star");
- print_rexp (rx, node->params.pair.left, depth + 3, seprint, fp);
- break;
-
- case r_2phase_star:
- fprintf (fp, "%*s2phase star\n", depth, "");
- print_rexp (rx, node->params.pair.right, depth + 3, seprint, fp);
- print_rexp (rx, node->params.pair.left, depth + 3, seprint, fp);
- break;
-
-
- case r_alternate:
- case r_concat:
- fprintf (fp, "%*s%s\n", depth, "",
- node->type == r_alternate ? "alt" : "concat");
- print_rexp (rx, node->params.pair.left, depth + 3, seprint, fp);
- print_rexp (rx, node->params.pair.right, depth + 3, seprint, fp);
- break;
- case r_side_effect:
- fprintf (fp, "%*sSide effect: ", depth, "");
- seprint (rx, node->params.side_effect, fp);
- fputc ('\n', fp);
- }
- }
-}
-
-#ifdef __STDC__
-static void
-print_nfa (struct rx * rx,
- struct rx_nfa_state * n,
- side_effect_printer seprint, FILE * fp)
-#else
-static void
-print_nfa (rx, n, seprint, fp)
- struct rx * rx;
- struct rx_nfa_state * n;
- side_effect_printer seprint;
- FILE * fp;
-#endif
-{
- while (n)
- {
- struct rx_nfa_edge *e = n->edges;
- struct rx_possible_future *ec = n->futures;
- fprintf (fp, "node %d %s\n", n->id,
- n->is_final ? "final" : (n->is_start ? "start" : ""));
- while (e)
- {
- fprintf (fp, " edge to %d, ", e->dest->id);
- switch (e->type)
- {
- case ne_epsilon:
- fprintf (fp, "epsilon\n");
- break;
- case ne_side_effect:
- fprintf (fp, "side effect ");
- seprint (rx, e->params.side_effect, fp);
- fputc ('\n', fp);
- break;
- case ne_cset:
- fprintf (fp, "cset ");
- print_cset (rx, e->params.cset, fp);
- fputc ('\n', fp);
- break;
- }
- e = e->next;
- }
-
- while (ec)
- {
- int x;
- struct rx_nfa_state_set * s;
- struct rx_se_list * l;
- fprintf (fp, " eclosure to {");
- for (s = ec->destset; s; s = s->cdr)
- fprintf (fp, "%d ", s->car->id);
- fprintf (fp, "} (");
- for (l = ec->effects; l; l = l->cdr)
- {
- seprint (rx, l->car, fp);
- fputc (' ', fp);
- }
- fprintf (fp, ")\n");
- ec = ec->next;
- }
- n = n->next;
- }
-}
-
-static char * efnames [] =
-{
- "bogon",
- "re_se_try",
- "re_se_pushback",
- "re_se_push0",
- "re_se_pushpos",
- "re_se_chkpos",
- "re_se_poppos",
- "re_se_at_dot",
- "re_se_syntax",
- "re_se_not_syntax",
- "re_se_begbuf",
- "re_se_hat",
- "re_se_wordbeg",
- "re_se_wordbound",
- "re_se_notwordbound",
- "re_se_wordend",
- "re_se_endbuf",
- "re_se_dollar",
- "re_se_fail",
-};
-
-static char * efnames2[] =
-{
- "re_se_win",
- "re_se_lparen",
- "re_se_rparen",
- "re_se_backref",
- "re_se_iter",
- "re_se_end_iter",
- "re_se_tv"
-};
-
-static char * inx_names[] =
-{
- "rx_backtrack_point",
- "rx_do_side_effects",
- "rx_cache_miss",
- "rx_next_char",
- "rx_backtrack",
- "rx_error_inx",
- "rx_num_instructions"
-};
-
-
-#ifdef __STDC__
-static void
-re_seprint (struct rx * rx, void * effect, FILE * fp)
-#else
-static void
-re_seprint (rx, effect, fp)
- struct rx * rx;
- void * effect;
- FILE * fp;
-#endif
-{
- if ((int)effect < 0)
- fputs (efnames[-(int)effect], fp);
- else if (dbug_rxb)
- {
- struct re_se_params * p = &dbug_rxb->se_params[(int)effect];
- fprintf (fp, "%s(%d,%d)", efnames2[p->se], p->op1, p->op2);
- }
- else
- fprintf (fp, "[complex op # %d]", (int)effect);
-}
-
-
-/* These are so the regex.c regression tests will compile. */
-void
-print_compiled_pattern (rxb)
- struct re_pattern_buffer * rxb;
-{
-}
-
-void
-print_fastmap (fm)
- char * fm;
-{
-}
-
-#endif /* RX_DEBUG */
-
-
-
-/* This page: Bitsets. Completely unintersting. */
-
-#ifdef __STDC__
-RX_DECL int
-rx_bitset_is_equal (int size, rx_Bitset a, rx_Bitset b)
-#else
-RX_DECL int
-rx_bitset_is_equal (size, a, b)
- int size;
- rx_Bitset a;
- rx_Bitset b;
-#endif
-{
- int x;
- RX_subset s = b[0];
- b[0] = ~a[0];
-
- for (x = rx_bitset_numb_subsets(size) - 1; a[x] == b[x]; --x)
- ;
-
- b[0] = s;
- return !x && s == a[0];
-}
-
-#ifdef __STDC__
-RX_DECL int
-rx_bitset_is_subset (int size, rx_Bitset a, rx_Bitset b)
-#else
-RX_DECL int
-rx_bitset_is_subset (size, a, b)
- int size;
- rx_Bitset a;
- rx_Bitset b;
-#endif
-{
- int x = rx_bitset_numb_subsets(size) - 1;
- while (x-- && (a[x] & b[x]) == a[x]);
- return x == -1;
-}
-
-
-#ifdef __STDC__
-RX_DECL int
-rx_bitset_empty (int size, rx_Bitset set)
-#else
-RX_DECL int
-rx_bitset_empty (size, set)
- int size;
- rx_Bitset set;
-#endif
-{
- int x;
- RX_subset s = set[0];
- set[0] = 1;
- for (x = rx_bitset_numb_subsets(size) - 1; !set[x]; --x)
- ;
- set[0] = s;
- return !s;
-}
-
-#ifdef __STDC__
-RX_DECL void
-rx_bitset_null (int size, rx_Bitset b)
-#else
-RX_DECL void
-rx_bitset_null (size, b)
- int size;
- rx_Bitset b;
-#endif
-{
- bzero (b, rx_sizeof_bitset(size));
-}
-
-
-#ifdef __STDC__
-RX_DECL void
-rx_bitset_universe (int size, rx_Bitset b)
-#else
-RX_DECL void
-rx_bitset_universe (size, b)
- int size;
- rx_Bitset b;
-#endif
-{
- int x = rx_bitset_numb_subsets (size);
- while (x--)
- *b++ = ~(RX_subset)0;
-}
-
-
-#ifdef __STDC__
-RX_DECL void
-rx_bitset_complement (int size, rx_Bitset b)
-#else
-RX_DECL void
-rx_bitset_complement (size, b)
- int size;
- rx_Bitset b;
-#endif
-{
- int x = rx_bitset_numb_subsets (size);
- while (x--)
- {
- *b = ~*b;
- ++b;
- }
-}
-
-
-#ifdef __STDC__
-RX_DECL void
-rx_bitset_assign (int size, rx_Bitset a, rx_Bitset b)
-#else
-RX_DECL void
-rx_bitset_assign (size, a, b)
- int size;
- rx_Bitset a;
- rx_Bitset b;
-#endif
-{
- int x;
- for (x = rx_bitset_numb_subsets(size) - 1; x >=0; --x)
- a[x] = b[x];
-}
-
-
-#ifdef __STDC__
-RX_DECL void
-rx_bitset_union (int size, rx_Bitset a, rx_Bitset b)
-#else
-RX_DECL void
-rx_bitset_union (size, a, b)
- int size;
- rx_Bitset a;
- rx_Bitset b;
-#endif
-{
- int x;
- for (x = rx_bitset_numb_subsets(size) - 1; x >=0; --x)
- a[x] |= b[x];
-}
-
-
-#ifdef __STDC__
-RX_DECL void
-rx_bitset_intersection (int size,
- rx_Bitset a, rx_Bitset b)
-#else
-RX_DECL void
-rx_bitset_intersection (size, a, b)
- int size;
- rx_Bitset a;
- rx_Bitset b;
-#endif
-{
- int x;
- for (x = rx_bitset_numb_subsets(size) - 1; x >=0; --x)
- a[x] &= b[x];
-}
-
-
-#ifdef __STDC__
-RX_DECL void
-rx_bitset_difference (int size, rx_Bitset a, rx_Bitset b)
-#else
-RX_DECL void
-rx_bitset_difference (size, a, b)
- int size;
- rx_Bitset a;
- rx_Bitset b;
-#endif
-{
- int x;
- for (x = rx_bitset_numb_subsets(size) - 1; x >=0; --x)
- a[x] &= ~ b[x];
-}
-
-
-#ifdef __STDC__
-RX_DECL void
-rx_bitset_revdifference (int size,
- rx_Bitset a, rx_Bitset b)
-#else
-RX_DECL void
-rx_bitset_revdifference (size, a, b)
- int size;
- rx_Bitset a;
- rx_Bitset b;
-#endif
-{
- int x;
- for (x = rx_bitset_numb_subsets(size) - 1; x >=0; --x)
- a[x] = ~a[x] & b[x];
-}
-
-#ifdef __STDC__
-RX_DECL void
-rx_bitset_xor (int size, rx_Bitset a, rx_Bitset b)
-#else
-RX_DECL void
-rx_bitset_xor (size, a, b)
- int size;
- rx_Bitset a;
- rx_Bitset b;
-#endif
-{
- int x;
- for (x = rx_bitset_numb_subsets(size) - 1; x >=0; --x)
- a[x] ^= b[x];
-}
-
-
-#ifdef __STDC__
-RX_DECL unsigned long
-rx_bitset_hash (int size, rx_Bitset b)
-#else
-RX_DECL unsigned long
-rx_bitset_hash (size, b)
- int size;
- rx_Bitset b;
-#endif
-{
- int x;
- unsigned long hash = (unsigned long)rx_bitset_hash;
-
- for (x = rx_bitset_numb_subsets(size) - 1; x >= 0; --x)
- hash ^= rx_bitset_subset_val(b, x);
-
- return hash;
-}
-
-
-RX_DECL RX_subset rx_subset_singletons [RX_subset_bits] =
-{
- 0x1,
- 0x2,
- 0x4,
- 0x8,
- 0x10,
- 0x20,
- 0x40,
- 0x80,
- 0x100,
- 0x200,
- 0x400,
- 0x800,
- 0x1000,
- 0x2000,
- 0x4000,
- 0x8000,
- 0x10000,
- 0x20000,
- 0x40000,
- 0x80000,
- 0x100000,
- 0x200000,
- 0x400000,
- 0x800000,
- 0x1000000,
- 0x2000000,
- 0x4000000,
- 0x8000000,
- 0x10000000,
- 0x20000000,
- 0x40000000,
- 0x80000000
-};
-
-#ifdef RX_DEBUG
-
-#ifdef __STDC__
-static void
-print_cset (struct rx *rx, rx_Bitset cset, FILE * fp)
-#else
-static void
-print_cset (rx, cset, fp)
- struct rx *rx;
- rx_Bitset cset;
- FILE * fp;
-#endif
-{
- int x;
- fputc ('[', fp);
- for (x = 0; x < rx->local_cset_size; ++x)
- if (RX_bitset_member (cset, x))
- {
- if (isprint(x))
- fputc (x, fp);
- else
- fprintf (fp, "\\0%o ", x);
- }
- fputc (']', fp);
-}
-
-#endif /* RX_DEBUG */
-
-
-
-static unsigned long rx_hash_masks[4] =
-{
- 0x12488421,
- 0x96699669,
- 0xbe7dd7eb,
- 0xffffffff
-};
-
-
-/* Hash tables */
-#ifdef __STDC__
-RX_DECL struct rx_hash_item *
-rx_hash_find (struct rx_hash * table,
- unsigned long hash,
- void * value,
- struct rx_hash_rules * rules)
-#else
-RX_DECL struct rx_hash_item *
-rx_hash_find (table, hash, value, rules)
- struct rx_hash * table;
- unsigned long hash;
- void * value;
- struct rx_hash_rules * rules;
-#endif
-{
- rx_hash_eq eq = rules->eq;
- int maskc = 0;
- long mask = rx_hash_masks [0];
- int bucket = (hash & mask) % 13;
-
- while (table->children [bucket])
- {
- table = table->children [bucket];
- ++maskc;
- mask = rx_hash_masks[maskc];
- bucket = (hash & mask) % 13;
- }
-
- {
- struct rx_hash_item * it = table->buckets[bucket];
- while (it)
- if (eq (it->data, value))
- return it;
- else
- it = it->next_same_hash;
- }
-
- return 0;
-}
-
-
-#ifdef __STDC__
-RX_DECL struct rx_hash_item *
-rx_hash_store (struct rx_hash * table,
- unsigned long hash,
- void * value,
- struct rx_hash_rules * rules)
-#else
-RX_DECL struct rx_hash_item *
-rx_hash_store (table, hash, value, rules)
- struct rx_hash * table;
- unsigned long hash;
- void * value;
- struct rx_hash_rules * rules;
-#endif
-{
- rx_hash_eq eq = rules->eq;
- int maskc = 0;
- long mask = rx_hash_masks[0];
- int bucket = (hash & mask) % 13;
- int depth = 0;
-
- while (table->children [bucket])
- {
- table = table->children [bucket];
- ++maskc;
- mask = rx_hash_masks[maskc];
- bucket = (hash & mask) % 13;
- ++depth;
- }
-
- {
- struct rx_hash_item * it = table->buckets[bucket];
- while (it)
- if (eq (it->data, value))
- return it;
- else
- it = it->next_same_hash;
- }
-
- {
- if ( (depth < 3)
- && (table->bucket_size [bucket] >= 4))
- {
- struct rx_hash * newtab = ((struct rx_hash *)
- rules->hash_alloc (rules));
- if (!newtab)
- goto add_to_bucket;
- bzero (newtab, sizeof (*newtab));
- newtab->parent = table;
- {
- struct rx_hash_item * them = table->buckets[bucket];
- unsigned long newmask = rx_hash_masks[maskc + 1];
- while (them)
- {
- struct rx_hash_item * save = them->next_same_hash;
- int new_buck = (them->hash & newmask) % 13;
- them->next_same_hash = newtab->buckets[new_buck];
- newtab->buckets[new_buck] = them;
- them->table = newtab;
- them = save;
- ++newtab->bucket_size[new_buck];
- ++newtab->refs;
- }
- table->refs = (table->refs - table->bucket_size[bucket] + 1);
- table->bucket_size[bucket] = 0;
- table->buckets[bucket] = 0;
- table->children[bucket] = newtab;
- table = newtab;
- bucket = (hash & newmask) % 13;
- }
- }
- }
- add_to_bucket:
- {
- struct rx_hash_item * it = ((struct rx_hash_item *)
- rules->hash_item_alloc (rules, value));
- if (!it)
- return 0;
- it->hash = hash;
- it->table = table;
- /* DATA and BINDING are to be set in hash_item_alloc */
- it->next_same_hash = table->buckets [bucket];
- table->buckets[bucket] = it;
- ++table->bucket_size [bucket];
- ++table->refs;
- return it;
- }
-}
-
-
-#ifdef __STDC__
-RX_DECL void
-rx_hash_free (struct rx_hash_item * it, struct rx_hash_rules * rules)
-#else
-RX_DECL void
-rx_hash_free (it, rules)
- struct rx_hash_item * it;
- struct rx_hash_rules * rules;
-#endif
-{
- if (it)
- {
- struct rx_hash * table = it->table;
- unsigned long hash = it->hash;
- int depth = (table->parent
- ? (table->parent->parent
- ? (table->parent->parent->parent
- ? 3
- : 2)
- : 1)
- : 0);
- int bucket = (hash & rx_hash_masks [depth]) % 13;
- struct rx_hash_item ** pos = &table->buckets [bucket];
-
- while (*pos != it)
- pos = &(*pos)->next_same_hash;
- *pos = it->next_same_hash;
- rules->free_hash_item (it, rules);
- --table->bucket_size[bucket];
- --table->refs;
- while (!table->refs && depth)
- {
- struct rx_hash * save = table;
- table = table->parent;
- --depth;
- bucket = (hash & rx_hash_masks [depth]) % 13;
- --table->refs;
- table->children[bucket] = 0;
- rules->free_hash (save, rules);
- }
- }
-}
-
-#ifdef __STDC__
-RX_DECL void
-rx_free_hash_table (struct rx_hash * tab, rx_hash_freefn freefn,
- struct rx_hash_rules * rules)
-#else
-RX_DECL void
-rx_free_hash_table (tab, freefn, rules)
- struct rx_hash * tab;
- rx_hash_freefn freefn;
- struct rx_hash_rules * rules;
-#endif
-{
- int x;
-
- for (x = 0; x < 13; ++x)
- if (tab->children[x])
- {
- rx_free_hash_table (tab->children[x], freefn, rules);
- rules->free_hash (tab->children[x], rules);
- }
- else
- {
- struct rx_hash_item * them = tab->buckets[x];
- while (them)
- {
- struct rx_hash_item * that = them;
- them = that->next_same_hash;
- freefn (that);
- rules->free_hash_item (that, rules);
- }
- }
-}
-
-
-
-/* Utilities for manipulating bitset represntations of characters sets. */
-
-#ifdef __STDC__
-RX_DECL rx_Bitset
-rx_cset (struct rx *rx)
-#else
-RX_DECL rx_Bitset
-rx_cset (rx)
- struct rx *rx;
-#endif
-{
- rx_Bitset b = (rx_Bitset) malloc (rx_sizeof_bitset (rx->local_cset_size));
- if (b)
- rx_bitset_null (rx->local_cset_size, b);
- return b;
-}
-
-
-#ifdef __STDC__
-RX_DECL rx_Bitset
-rx_copy_cset (struct rx *rx, rx_Bitset a)
-#else
-RX_DECL rx_Bitset
-rx_copy_cset (rx, a)
- struct rx *rx;
- rx_Bitset a;
-#endif
-{
- rx_Bitset cs = rx_cset (rx);
-
- if (cs)
- rx_bitset_union (rx->local_cset_size, cs, a);
-
- return cs;
-}
-
-
-#ifdef __STDC__
-RX_DECL void
-rx_free_cset (struct rx * rx, rx_Bitset c)
-#else
-RX_DECL void
-rx_free_cset (rx, c)
- struct rx * rx;
- rx_Bitset c;
-#endif
-{
- if (c)
- free ((char *)c);
-}
-
-
-/* Hash table memory allocation policy for the regexp compiler */
-
-#ifdef __STDC__
-static struct rx_hash *
-compiler_hash_alloc (struct rx_hash_rules * rules)
-#else
-static struct rx_hash *
-compiler_hash_alloc (rules)
- struct rx_hash_rules * rules;
-#endif
-{
- return (struct rx_hash *)malloc (sizeof (struct rx_hash));
-}
-
-
-#ifdef __STDC__
-static struct rx_hash_item *
-compiler_hash_item_alloc (struct rx_hash_rules * rules, void * value)
-#else
-static struct rx_hash_item *
-compiler_hash_item_alloc (rules, value)
- struct rx_hash_rules * rules;
- void * value;
-#endif
-{
- struct rx_hash_item * it;
- it = (struct rx_hash_item *)malloc (sizeof (*it));
- if (it)
- {
- it->data = value;
- it->binding = 0;
- }
- return it;
-}
-
-
-#ifdef __STDC__
-static void
-compiler_free_hash (struct rx_hash * tab,
- struct rx_hash_rules * rules)
-#else
-static void
-compiler_free_hash (tab, rules)
- struct rx_hash * tab;
- struct rx_hash_rules * rules;
-#endif
-{
- free ((char *)tab);
-}
-
-
-#ifdef __STDC__
-static void
-compiler_free_hash_item (struct rx_hash_item * item,
- struct rx_hash_rules * rules)
-#else
-static void
-compiler_free_hash_item (item, rules)
- struct rx_hash_item * item;
- struct rx_hash_rules * rules;
-#endif
-{
- free ((char *)item);
-}
-
-
-/* This page: REXP_NODE (expression tree) structures. */
-
-#ifdef __STDC__
-RX_DECL struct rexp_node *
-rexp_node (struct rx *rx,
- enum rexp_node_type type)
-#else
-RX_DECL struct rexp_node *
-rexp_node (rx, type)
- struct rx *rx;
- enum rexp_node_type type;
-#endif
-{
- struct rexp_node *n;
-
- n = (struct rexp_node *)malloc (sizeof (*n));
- bzero (n, sizeof (*n));
- if (n)
- n->type = type;
- return n;
-}
-
-
-/* free_rexp_node assumes that the bitset passed to rx_mk_r_cset
- * can be freed using rx_free_cset.
- */
-#ifdef __STDC__
-RX_DECL struct rexp_node *
-rx_mk_r_cset (struct rx * rx,
- rx_Bitset b)
-#else
-RX_DECL struct rexp_node *
-rx_mk_r_cset (rx, b)
- struct rx * rx;
- rx_Bitset b;
-#endif
-{
- struct rexp_node * n = rexp_node (rx, r_cset);
- if (n)
- n->params.cset = b;
- return n;
-}
-
-
-#ifdef __STDC__
-RX_DECL struct rexp_node *
-rx_mk_r_concat (struct rx * rx,
- struct rexp_node * a,
- struct rexp_node * b)
-#else
-RX_DECL struct rexp_node *
-rx_mk_r_concat (rx, a, b)
- struct rx * rx;
- struct rexp_node * a;
- struct rexp_node * b;
-#endif
-{
- struct rexp_node * n = rexp_node (rx, r_concat);
- if (n)
- {
- n->params.pair.left = a;
- n->params.pair.right = b;
- }
- return n;
-}
-
-
-#ifdef __STDC__
-RX_DECL struct rexp_node *
-rx_mk_r_alternate (struct rx * rx,
- struct rexp_node * a,
- struct rexp_node * b)
-#else
-RX_DECL struct rexp_node *
-rx_mk_r_alternate (rx, a, b)
- struct rx * rx;
- struct rexp_node * a;
- struct rexp_node * b;
-#endif
-{
- struct rexp_node * n = rexp_node (rx, r_alternate);
- if (n)
- {
- n->params.pair.left = a;
- n->params.pair.right = b;
- }
- return n;
-}
-
-
-#ifdef __STDC__
-RX_DECL struct rexp_node *
-rx_mk_r_opt (struct rx * rx,
- struct rexp_node * a)
-#else
-RX_DECL struct rexp_node *
-rx_mk_r_opt (rx, a)
- struct rx * rx;
- struct rexp_node * a;
-#endif
-{
- struct rexp_node * n = rexp_node (rx, r_opt);
- if (n)
- {
- n->params.pair.left = a;
- n->params.pair.right = 0;
- }
- return n;
-}
-
-
-#ifdef __STDC__
-RX_DECL struct rexp_node *
-rx_mk_r_star (struct rx * rx,
- struct rexp_node * a)
-#else
-RX_DECL struct rexp_node *
-rx_mk_r_star (rx, a)
- struct rx * rx;
- struct rexp_node * a;
-#endif
-{
- struct rexp_node * n = rexp_node (rx, r_star);
- if (n)
- {
- n->params.pair.left = a;
- n->params.pair.right = 0;
- }
- return n;
-}
-
-
-#ifdef __STDC__
-RX_DECL struct rexp_node *
-rx_mk_r_2phase_star (struct rx * rx,
- struct rexp_node * a,
- struct rexp_node * b)
-#else
-RX_DECL struct rexp_node *
-rx_mk_r_2phase_star (rx, a, b)
- struct rx * rx;
- struct rexp_node * a;
- struct rexp_node * b;
-#endif
-{
- struct rexp_node * n = rexp_node (rx, r_2phase_star);
- if (n)
- {
- n->params.pair.left = a;
- n->params.pair.right = b;
- }
- return n;
-}
-
-
-#ifdef __STDC__
-RX_DECL struct rexp_node *
-rx_mk_r_side_effect (struct rx * rx,
- rx_side_effect a)
-#else
-RX_DECL struct rexp_node *
-rx_mk_r_side_effect (rx, a)
- struct rx * rx;
- rx_side_effect a;
-#endif
-{
- struct rexp_node * n = rexp_node (rx, r_side_effect);
- if (n)
- {
- n->params.side_effect = a;
- n->params.pair.right = 0;
- }
- return n;
-}
-
-
-#ifdef __STDC__
-RX_DECL struct rexp_node *
-rx_mk_r_data (struct rx * rx,
- void * a)
-#else
-RX_DECL struct rexp_node *
-rx_mk_r_data (rx, a)
- struct rx * rx;
- void * a;
-#endif
-{
- struct rexp_node * n = rexp_node (rx, r_data);
- if (n)
- {
- n->params.pair.left = a;
- n->params.pair.right = 0;
- }
- return n;
-}
-
-
-#ifdef __STDC__
-RX_DECL void
-rx_free_rexp (struct rx * rx, struct rexp_node * node)
-#else
-RX_DECL void
-rx_free_rexp (rx, node)
- struct rx * rx;
- struct rexp_node * node;
-#endif
-{
- if (node)
- {
- switch (node->type)
- {
- case r_cset:
- if (node->params.cset)
- rx_free_cset (rx, node->params.cset);
-
- case r_side_effect:
- break;
-
- case r_concat:
- case r_alternate:
- case r_2phase_star:
- case r_opt:
- case r_star:
- rx_free_rexp (rx, node->params.pair.left);
- rx_free_rexp (rx, node->params.pair.right);
- break;
-
- case r_data:
- /* This shouldn't occur. */
- break;
- }
- free ((char *)node);
- }
-}
-
-
-#ifdef __STDC__
-RX_DECL struct rexp_node *
-rx_copy_rexp (struct rx *rx,
- struct rexp_node *node)
-#else
-RX_DECL struct rexp_node *
-rx_copy_rexp (rx, node)
- struct rx *rx;
- struct rexp_node *node;
-#endif
-{
- if (!node)
- return 0;
- else
- {
- struct rexp_node *n = rexp_node (rx, node->type);
- if (!n)
- return 0;
- switch (node->type)
- {
- case r_cset:
- n->params.cset = rx_copy_cset (rx, node->params.cset);
- if (!n->params.cset)
- {
- rx_free_rexp (rx, n);
- return 0;
- }
- break;
-
- case r_side_effect:
- n->params.side_effect = node->params.side_effect;
- break;
-
- case r_concat:
- case r_alternate:
- case r_opt:
- case r_2phase_star:
- case r_star:
- n->params.pair.left =
- rx_copy_rexp (rx, node->params.pair.left);
- n->params.pair.right =
- rx_copy_rexp (rx, node->params.pair.right);
- if ( (node->params.pair.left && !n->params.pair.left)
- || (node->params.pair.right && !n->params.pair.right))
- {
- rx_free_rexp (rx, n);
- return 0;
- }
- break;
- case r_data:
- /* shouldn't happen */
- break;
- }
- return n;
- }
-}
-
-
-
-/* This page: functions to build and destroy graphs that describe nfa's */
-
-/* Constructs a new nfa node. */
-#ifdef __STDC__
-RX_DECL struct rx_nfa_state *
-rx_nfa_state (struct rx *rx)
-#else
-RX_DECL struct rx_nfa_state *
-rx_nfa_state (rx)
- struct rx *rx;
-#endif
-{
- struct rx_nfa_state * n = (struct rx_nfa_state *)malloc (sizeof (*n));
- if (!n)
- return 0;
- bzero (n, sizeof (*n));
- n->next = rx->nfa_states;
- rx->nfa_states = n;
- return n;
-}
-
-
-#ifdef __STDC__
-RX_DECL void
-rx_free_nfa_state (struct rx_nfa_state * n)
-#else
-RX_DECL void
-rx_free_nfa_state (n)
- struct rx_nfa_state * n;
-#endif
-{
- free ((char *)n);
-}
-
-
-/* This looks up an nfa node, given a numeric id. Numeric id's are
- * assigned after the nfa has been built.
- */
-#ifdef __STDC__
-RX_DECL struct rx_nfa_state *
-rx_id_to_nfa_state (struct rx * rx,
- int id)
-#else
-RX_DECL struct rx_nfa_state *
-rx_id_to_nfa_state (rx, id)
- struct rx * rx;
- int id;
-#endif
-{
- struct rx_nfa_state * n;
- for (n = rx->nfa_states; n; n = n->next)
- if (n->id == id)
- return n;
- return 0;
-}
-
-
-/* This adds an edge between two nodes, but doesn't initialize the
- * edge label.
- */
-
-#ifdef __STDC__
-RX_DECL struct rx_nfa_edge *
-rx_nfa_edge (struct rx *rx,
- enum rx_nfa_etype type,
- struct rx_nfa_state *start,
- struct rx_nfa_state *dest)
-#else
-RX_DECL struct rx_nfa_edge *
-rx_nfa_edge (rx, type, start, dest)
- struct rx *rx;
- enum rx_nfa_etype type;
- struct rx_nfa_state *start;
- struct rx_nfa_state *dest;
-#endif
-{
- struct rx_nfa_edge *e;
- e = (struct rx_nfa_edge *)malloc (sizeof (*e));
- if (!e)
- return 0;
- e->next = start->edges;
- start->edges = e;
- e->type = type;
- e->dest = dest;
- return e;
-}
-
-
-#ifdef __STDC__
-RX_DECL void
-rx_free_nfa_edge (struct rx_nfa_edge * e)
-#else
-RX_DECL void
-rx_free_nfa_edge (e)
- struct rx_nfa_edge * e;
-#endif
-{
- free ((char *)e);
-}
-
-
-/* This constructs a POSSIBLE_FUTURE, which is a kind epsilon-closure
- * of an NFA. These are added to an nfa automaticly by eclose_nfa.
- */
-
-#ifdef __STDC__
-static struct rx_possible_future *
-rx_possible_future (struct rx * rx,
- struct rx_se_list * effects)
-#else
-static struct rx_possible_future *
-rx_possible_future (rx, effects)
- struct rx * rx;
- struct rx_se_list * effects;
-#endif
-{
- struct rx_possible_future *ec;
- ec = (struct rx_possible_future *) malloc (sizeof (*ec));
- if (!ec)
- return 0;
- ec->destset = 0;
- ec->next = 0;
- ec->effects = effects;
- return ec;
-}
-
-
-#ifdef __STDC__
-static void
-rx_free_possible_future (struct rx_possible_future * pf)
-#else
-static void
-rx_free_possible_future (pf)
- struct rx_possible_future * pf;
-#endif
-{
- free ((char *)pf);
-}
-
-
-#ifdef __STDC__
-RX_DECL void
-rx_free_nfa (struct rx *rx)
-#else
-RX_DECL void
-rx_free_nfa (rx)
- struct rx *rx;
-#endif
-{
- while (rx->nfa_states)
- {
- while (rx->nfa_states->edges)
- {
- switch (rx->nfa_states->edges->type)
- {
- case ne_cset:
- rx_free_cset (rx, rx->nfa_states->edges->params.cset);
- break;
- default:
- break;
- }
- {
- struct rx_nfa_edge * e;
- e = rx->nfa_states->edges;
- rx->nfa_states->edges = rx->nfa_states->edges->next;
- rx_free_nfa_edge (e);
- }
- } /* while (rx->nfa_states->edges) */
- {
- /* Iterate over the partial epsilon closures of rx->nfa_states */
- struct rx_possible_future * pf = rx->nfa_states->futures;
- while (pf)
- {
- struct rx_possible_future * pft = pf;
- pf = pf->next;
- rx_free_possible_future (pft);
- }
- }
- {
- struct rx_nfa_state *n;
- n = rx->nfa_states;
- rx->nfa_states = rx->nfa_states->next;
- rx_free_nfa_state (n);
- }
- }
-}
-
-
-
-/* This page: translating a pattern expression into an nfa and doing the
- * static part of the nfa->super-nfa translation.
- */
-
-/* This is the thompson regexp->nfa algorithm.
- * It is modified to allow for `side-effect epsilons.' Those are
- * edges that are taken whenever a similar epsilon edge would be,
- * but which imply that some side effect occurs when the edge
- * is taken.
- *
- * Side effects are used to model parts of the pattern langauge
- * that are not regular (in the formal sense).
- */
-
-#ifdef __STDC__
-RX_DECL int
-rx_build_nfa (struct rx *rx,
- struct rexp_node *rexp,
- struct rx_nfa_state **start,
- struct rx_nfa_state **end)
-#else
-RX_DECL int
-rx_build_nfa (rx, rexp, start, end)
- struct rx *rx;
- struct rexp_node *rexp;
- struct rx_nfa_state **start;
- struct rx_nfa_state **end;
-#endif
-{
- struct rx_nfa_edge *edge;
-
- /* Start & end nodes may have been allocated by the caller. */
- *start = *start ? *start : rx_nfa_state (rx);
-
- if (!*start)
- return 0;
-
- if (!rexp)
- {
- *end = *start;
- return 1;
- }
-
- *end = *end ? *end : rx_nfa_state (rx);
-
- if (!*end)
- {
- rx_free_nfa_state (*start);
- return 0;
- }
-
- switch (rexp->type)
- {
- case r_data:
- return 0;
-
- case r_cset:
- edge = rx_nfa_edge (rx, ne_cset, *start, *end);
- if (!edge)
- return 0;
- edge->params.cset = rx_copy_cset (rx, rexp->params.cset);
- if (!edge->params.cset)
- {
- rx_free_nfa_edge (edge);
- return 0;
- }
- return 1;
-
- case r_opt:
- return (rx_build_nfa (rx, rexp->params.pair.left, start, end)
- && rx_nfa_edge (rx, ne_epsilon, *start, *end));
-
- case r_star:
- {
- struct rx_nfa_state * star_start = 0;
- struct rx_nfa_state * star_end = 0;
- return (rx_build_nfa (rx, rexp->params.pair.left,
- &star_start, &star_end)
- && star_start
- && star_end
- && rx_nfa_edge (rx, ne_epsilon, star_start, star_end)
- && rx_nfa_edge (rx, ne_epsilon, *start, star_start)
- && rx_nfa_edge (rx, ne_epsilon, star_end, *end)
-
- && rx_nfa_edge (rx, ne_epsilon, star_end, star_start));
- }
-
- case r_2phase_star:
- {
- struct rx_nfa_state * star_start = 0;
- struct rx_nfa_state * star_end = 0;
- struct rx_nfa_state * loop_exp_start = 0;
- struct rx_nfa_state * loop_exp_end = 0;
-
- return (rx_build_nfa (rx, rexp->params.pair.left,
- &star_start, &star_end)
- && rx_build_nfa (rx, rexp->params.pair.right,
- &loop_exp_start, &loop_exp_end)
- && star_start
- && star_end
- && loop_exp_end
- && loop_exp_start
- && rx_nfa_edge (rx, ne_epsilon, star_start, *end)
- && rx_nfa_edge (rx, ne_epsilon, *start, star_start)
- && rx_nfa_edge (rx, ne_epsilon, star_end, *end)
-
- && rx_nfa_edge (rx, ne_epsilon, star_end, loop_exp_start)
- && rx_nfa_edge (rx, ne_epsilon, loop_exp_end, star_start));
- }
-
-
- case r_concat:
- {
- struct rx_nfa_state *shared = 0;
- return
- (rx_build_nfa (rx, rexp->params.pair.left, start, &shared)
- && rx_build_nfa (rx, rexp->params.pair.right, &shared, end));
- }
-
- case r_alternate:
- {
- struct rx_nfa_state *ls = 0;
- struct rx_nfa_state *le = 0;
- struct rx_nfa_state *rs = 0;
- struct rx_nfa_state *re = 0;
- return (rx_build_nfa (rx, rexp->params.pair.left, &ls, &le)
- && rx_build_nfa (rx, rexp->params.pair.right, &rs, &re)
- && rx_nfa_edge (rx, ne_epsilon, *start, ls)
- && rx_nfa_edge (rx, ne_epsilon, *start, rs)
- && rx_nfa_edge (rx, ne_epsilon, le, *end)
- && rx_nfa_edge (rx, ne_epsilon, re, *end));
- }
-
- case r_side_effect:
- edge = rx_nfa_edge (rx, ne_side_effect, *start, *end);
- if (!edge)
- return 0;
- edge->params.side_effect = rexp->params.side_effect;
- return 1;
- }
-
- /* this should never happen */
- return 0;
-}
-
-
-/* RX_NAME_NFA_STATES identifies all nodes with outgoing non-epsilon
- * transitions. Only these nodes can occur in super-states.
- * All nodes are given an integer id.
- * The id is non-negative if the node has non-epsilon out-transitions, negative
- * otherwise (this is because we want the non-negative ids to be used as
- * array indexes in a few places).
- */
-
-#ifdef __STDC__
-RX_DECL void
-rx_name_nfa_states (struct rx *rx)
-#else
-RX_DECL void
-rx_name_nfa_states (rx)
- struct rx *rx;
-#endif
-{
- struct rx_nfa_state *n = rx->nfa_states;
-
- rx->nodec = 0;
- rx->epsnodec = -1;
-
- while (n)
- {
- struct rx_nfa_edge *e = n->edges;
-
- if (n->is_start)
- n->eclosure_needed = 1;
-
- while (e)
- {
- switch (e->type)
- {
- case ne_epsilon:
- case ne_side_effect:
- break;
-
- case ne_cset:
- n->id = rx->nodec++;
- {
- struct rx_nfa_edge *from_n = n->edges;
- while (from_n)
- {
- from_n->dest->eclosure_needed = 1;
- from_n = from_n->next;
- }
- }
- goto cont;
- }
- e = e->next;
- }
- n->id = rx->epsnodec--;
- cont:
- n = n->next;
- }
- rx->epsnodec = -rx->epsnodec;
-}
-
-
-/* This page: data structures for the static part of the nfa->supernfa
- * translation.
- *
- * There are side effect lists -- lists of side effects occuring
- * along an uninterrupted, acyclic path of side-effect epsilon edges.
- * Such paths are collapsed to single edges in the course of computing
- * epsilon closures. Such single edges are labled with a list of all
- * the side effects entailed in crossing them. Like lists of side
- * effects are made == by the constructors below.
- *
- * There are also nfa state sets. These are used to hold a list of all
- * states reachable from a starting state for a given type of transition
- * and side effect list. These are also hash-consed.
- */
-
-/* The next several functions compare, construct, etc. lists of side
- * effects. See ECLOSE_NFA (below) for details.
- */
-
-/* Ordering of rx_se_list
- * (-1, 0, 1 return value convention).
- */
-
-#ifdef __STDC__
-static int
-se_list_cmp (void * va, void * vb)
-#else
-static int
-se_list_cmp (va, vb)
- void * va;
- void * vb;
-#endif
-{
- struct rx_se_list * a = (struct rx_se_list *)va;
- struct rx_se_list * b = (struct rx_se_list *)vb;
-
- return ((va == vb)
- ? 0
- : (!va
- ? -1
- : (!vb
- ? 1
- : ((long)a->car < (long)b->car
- ? 1
- : ((long)a->car > (long)b->car
- ? -1
- : se_list_cmp ((void *)a->cdr, (void *)b->cdr))))));
-}
-
-
-#ifdef __STDC__
-static int
-se_list_equal (void * va, void * vb)
-#else
-static int
-se_list_equal (va, vb)
- void * va;
- void * vb;
-#endif
-{
- return !(se_list_cmp (va, vb));
-}
-
-static struct rx_hash_rules se_list_hash_rules =
-{
- se_list_equal,
- compiler_hash_alloc,
- compiler_free_hash,
- compiler_hash_item_alloc,
- compiler_free_hash_item
-};
-
-
-#ifdef __STDC__
-static struct rx_se_list *
-side_effect_cons (struct rx * rx,
- void * se, struct rx_se_list * list)
-#else
-static struct rx_se_list *
-side_effect_cons (rx, se, list)
- struct rx * rx;
- void * se;
- struct rx_se_list * list;
-#endif
-{
- struct rx_se_list * l;
- l = ((struct rx_se_list *) malloc (sizeof (*l)));
- if (!l)
- return 0;
- l->car = se;
- l->cdr = list;
- return l;
-}
-
-
-#ifdef __STDC__
-static struct rx_se_list *
-hash_cons_se_prog (struct rx * rx,
- struct rx_hash * memo,
- void * car, struct rx_se_list * cdr)
-#else
-static struct rx_se_list *
-hash_cons_se_prog (rx, memo, car, cdr)
- struct rx * rx;
- struct rx_hash * memo;
- void * car;
- struct rx_se_list * cdr;
-#endif
-{
- long hash = (long)car ^ (long)cdr;
- struct rx_se_list template;
-
- template.car = car;
- template.cdr = cdr;
- {
- struct rx_hash_item * it = rx_hash_store (memo, hash,
- (void *)&template,
- &se_list_hash_rules);
- if (!it)
- return 0;
- if (it->data == (void *)&template)
- {
- struct rx_se_list * consed;
- consed = (struct rx_se_list *) malloc (sizeof (*consed));
- *consed = template;
- it->data = (void *)consed;
- }
- return (struct rx_se_list *)it->data;
- }
-}
-
-
-#ifdef __STDC__
-static struct rx_se_list *
-hash_se_prog (struct rx * rx, struct rx_hash * memo, struct rx_se_list * prog)
-#else
-static struct rx_se_list *
-hash_se_prog (rx, memo, prog)
- struct rx * rx;
- struct rx_hash * memo;
- struct rx_se_list * prog;
-#endif
-{
- struct rx_se_list * answer = 0;
- while (prog)
- {
- answer = hash_cons_se_prog (rx, memo, prog->car, answer);
- if (!answer)
- return 0;
- prog = prog->cdr;
- }
- return answer;
-}
-
-#ifdef __STDC__
-static int
-nfa_set_cmp (void * va, void * vb)
-#else
-static int
-nfa_set_cmp (va, vb)
- void * va;
- void * vb;
-#endif
-{
- struct rx_nfa_state_set * a = (struct rx_nfa_state_set *)va;
- struct rx_nfa_state_set * b = (struct rx_nfa_state_set *)vb;
-
- return ((va == vb)
- ? 0
- : (!va
- ? -1
- : (!vb
- ? 1
- : (a->car->id < b->car->id
- ? 1
- : (a->car->id > b->car->id
- ? -1
- : nfa_set_cmp ((void *)a->cdr, (void *)b->cdr))))));
-}
-
-#ifdef __STDC__
-static int
-nfa_set_equal (void * va, void * vb)
-#else
-static int
-nfa_set_equal (va, vb)
- void * va;
- void * vb;
-#endif
-{
- return !nfa_set_cmp (va, vb);
-}
-
-static struct rx_hash_rules nfa_set_hash_rules =
-{
- nfa_set_equal,
- compiler_hash_alloc,
- compiler_free_hash,
- compiler_hash_item_alloc,
- compiler_free_hash_item
-};
-
-
-#ifdef __STDC__
-static struct rx_nfa_state_set *
-nfa_set_cons (struct rx * rx,
- struct rx_hash * memo, struct rx_nfa_state * state,
- struct rx_nfa_state_set * set)
-#else
-static struct rx_nfa_state_set *
-nfa_set_cons (rx, memo, state, set)
- struct rx * rx;
- struct rx_hash * memo;
- struct rx_nfa_state * state;
- struct rx_nfa_state_set * set;
-#endif
-{
- struct rx_nfa_state_set template;
- struct rx_hash_item * node;
- template.car = state;
- template.cdr = set;
- node = rx_hash_store (memo,
- (((long)state) >> 8) ^ (long)set,
- &template, &nfa_set_hash_rules);
- if (!node)
- return 0;
- if (node->data == &template)
- {
- struct rx_nfa_state_set * l;
- l = (struct rx_nfa_state_set *) malloc (sizeof (*l));
- node->data = (void *) l;
- if (!l)
- return 0;
- *l = template;
- }
- return (struct rx_nfa_state_set *)node->data;
-}
-
-
-#ifdef __STDC__
-static struct rx_nfa_state_set *
-nfa_set_enjoin (struct rx * rx,
- struct rx_hash * memo, struct rx_nfa_state * state,
- struct rx_nfa_state_set * set)
-#else
-static struct rx_nfa_state_set *
-nfa_set_enjoin (rx, memo, state, set)
- struct rx * rx;
- struct rx_hash * memo;
- struct rx_nfa_state * state;
- struct rx_nfa_state_set * set;
-#endif
-{
- if (!set || state->id < set->car->id)
- return nfa_set_cons (rx, memo, state, set);
- if (state->id == set->car->id)
- return set;
- else
- {
- struct rx_nfa_state_set * newcdr
- = nfa_set_enjoin (rx, memo, state, set->cdr);
- if (newcdr != set->cdr)
- set = nfa_set_cons (rx, memo, set->car, newcdr);
- return set;
- }
-}
-
-
-
-/* This page: computing epsilon closures. The closures aren't total.
- * Each node's closures are partitioned according to the side effects entailed
- * along the epsilon edges. Return true on success.
- */
-
-struct eclose_frame
-{
- struct rx_se_list *prog_backwards;
-};
-
-
-#ifdef __STDC__
-static int
-eclose_node (struct rx *rx, struct rx_nfa_state *outnode,
- struct rx_nfa_state *node, struct eclose_frame *frame)
-#else
-static int
-eclose_node (rx, outnode, node, frame)
- struct rx *rx;
- struct rx_nfa_state *outnode;
- struct rx_nfa_state *node;
- struct eclose_frame *frame;
-#endif
-{
- struct rx_nfa_edge *e = node->edges;
-
- /* For each node, we follow all epsilon paths to build the closure.
- * The closure omits nodes that have only epsilon edges.
- * The closure is split into partial closures -- all the states in
- * a partial closure are reached by crossing the same list of
- * of side effects (though not necessarily the same path).
- */
- if (node->mark)
- return 1;
- node->mark = 1;
-
- if (node->id >= 0 || node->is_final)
- {
- struct rx_possible_future **ec;
- struct rx_se_list * prog_in_order
- = ((struct rx_se_list *)hash_se_prog (rx,
- &rx->se_list_memo,
- frame->prog_backwards));
- int cmp;
-
- ec = &outnode->futures;
-
- while (*ec)
- {
- cmp = se_list_cmp ((void *)(*ec)->effects, (void *)prog_in_order);
- if (cmp <= 0)
- break;
- ec = &(*ec)->next;
- }
- if (!*ec || (cmp < 0))
- {
- struct rx_possible_future * saved = *ec;
- *ec = rx_possible_future (rx, prog_in_order);
- (*ec)->next = saved;
- if (!*ec)
- return 0;
- }
- if (node->id >= 0)
- {
- (*ec)->destset = nfa_set_enjoin (rx, &rx->set_list_memo,
- node, (*ec)->destset);
- if (!(*ec)->destset)
- return 0;
- }
- }
-
- while (e)
- {
- switch (e->type)
- {
- case ne_epsilon:
- if (!eclose_node (rx, outnode, e->dest, frame))
- return 0;
- break;
- case ne_side_effect:
- {
- frame->prog_backwards = side_effect_cons (rx,
- e->params.side_effect,
- frame->prog_backwards);
- if (!frame->prog_backwards)
- return 0;
- if (!eclose_node (rx, outnode, e->dest, frame))
- return 0;
- {
- struct rx_se_list * dying = frame->prog_backwards;
- frame->prog_backwards = frame->prog_backwards->cdr;
- free ((char *)dying);
- }
- break;
- }
- default:
- break;
- }
- e = e->next;
- }
- node->mark = 0;
- return 1;
-}
-
-
-#ifdef __STDC__
-RX_DECL int
-rx_eclose_nfa (struct rx *rx)
-#else
-RX_DECL int
-rx_eclose_nfa (rx)
- struct rx *rx;
-#endif
-{
- struct rx_nfa_state *n = rx->nfa_states;
- struct eclose_frame frame;
- static int rx_id = 0;
-
- frame.prog_backwards = 0;
- rx->rx_id = rx_id++;
- bzero (&rx->se_list_memo, sizeof (rx->se_list_memo));
- bzero (&rx->set_list_memo, sizeof (rx->set_list_memo));
- while (n)
- {
- n->futures = 0;
- if (n->eclosure_needed && !eclose_node (rx, n, n, &frame))
- return 0;
- /* clear_marks (rx); */
- n = n->next;
- }
- return 1;
-}
-
-
-/* This deletes epsilon edges from an NFA. After running eclose_node,
- * we have no more need for these edges. They are removed to simplify
- * further operations on the NFA.
- */
-
-#ifdef __STDC__
-RX_DECL void
-rx_delete_epsilon_transitions (struct rx *rx)
-#else
-RX_DECL void
-rx_delete_epsilon_transitions (rx)
- struct rx *rx;
-#endif
-{
- struct rx_nfa_state *n = rx->nfa_states;
- struct rx_nfa_edge **e;
-
- while (n)
- {
- e = &n->edges;
- while (*e)
- {
- struct rx_nfa_edge *t;
- switch ((*e)->type)
- {
- case ne_epsilon:
- case ne_side_effect:
- t = *e;
- *e = t->next;
- rx_free_nfa_edge (t);
- break;
-
- default:
- e = &(*e)->next;
- break;
- }
- }
- n = n->next;
- }
-}
-
-
-/* This page: storing the nfa in a contiguous region of memory for
- * subsequent conversion to a super-nfa.
- */
-
-/* This is for qsort on an array of nfa_states. The order
- * is based on state ids and goes
- * [0...MAX][MIN..-1] where (MAX>=0) and (MIN<0)
- * This way, positive ids double as array indices.
- */
-
-#ifdef __STDC__
-static int
-nfacmp (void * va, void * vb)
-#else
-static int
-nfacmp (va, vb)
- void * va;
- void * vb;
-#endif
-{
- struct rx_nfa_state **a = (struct rx_nfa_state **)va;
- struct rx_nfa_state **b = (struct rx_nfa_state **)vb;
- return (*a == *b /* &&&& 3.18 */
- ? 0
- : (((*a)->id < 0) == ((*b)->id < 0)
- ? (((*a)->id < (*b)->id) ? -1 : 1)
- : (((*a)->id < 0)
- ? 1 : -1)));
-}
-
-#ifdef __STDC__
-static int
-count_hash_nodes (struct rx_hash * st)
-#else
-static int
-count_hash_nodes (st)
- struct rx_hash * st;
-#endif
-{
- int x;
- int count = 0;
- for (x = 0; x < 13; ++x)
- count += ((st->children[x])
- ? count_hash_nodes (st->children[x])
- : st->bucket_size[x]);
-
- return count;
-}
-
-
-#ifdef __STDC__
-static void
-se_memo_freer (struct rx_hash_item * node)
-#else
-static void
-se_memo_freer (node)
- struct rx_hash_item * node;
-#endif
-{
- free ((char *)node->data);
-}
-
-
-#ifdef __STDC__
-static void
-nfa_set_freer (struct rx_hash_item * node)
-#else
-static void
-nfa_set_freer (node)
- struct rx_hash_item * node;
-#endif
-{
- free ((char *)node->data);
-}
-
-
-/* This copies an entire NFA into a single malloced block of memory.
- * Mostly this is for compatability with regex.c, though it is convenient
- * to have the nfa nodes in an array.
- */
-
-#ifdef __STDC__
-RX_DECL int
-rx_compactify_nfa (struct rx *rx,
- void **mem, unsigned long *size)
-#else
-RX_DECL int
-rx_compactify_nfa (rx, mem, size)
- struct rx *rx;
- void **mem;
- unsigned long *size;
-#endif
-{
- int total_nodec;
- struct rx_nfa_state *n;
- int edgec = 0;
- int eclosec = 0;
- int se_list_consc = count_hash_nodes (&rx->se_list_memo);
- int nfa_setc = count_hash_nodes (&rx->set_list_memo);
- unsigned long total_size;
-
- /* This takes place in two stages. First, the total size of the
- * nfa is computed, then structures are copied.
- */
- n = rx->nfa_states;
- total_nodec = 0;
- while (n)
- {
- struct rx_nfa_edge *e = n->edges;
- struct rx_possible_future *ec = n->futures;
- ++total_nodec;
- while (e)
- {
- ++edgec;
- e = e->next;
- }
- while (ec)
- {
- ++eclosec;
- ec = ec->next;
- }
- n = n->next;
- }
-
- total_size = (total_nodec * sizeof (struct rx_nfa_state)
- + edgec * rx_sizeof_bitset (rx->local_cset_size)
- + edgec * sizeof (struct rx_nfa_edge)
- + nfa_setc * sizeof (struct rx_nfa_state_set)
- + eclosec * sizeof (struct rx_possible_future)
- + se_list_consc * sizeof (struct rx_se_list)
- + rx->reserved);
-
- if (total_size > *size)
- {
- *mem = remalloc (*mem, total_size);
- if (*mem)
- *size = total_size;
- else
- return 0;
- }
- /* Now we've allocated the memory; this copies the NFA. */
- {
- static struct rx_nfa_state **scratch = 0;
- static int scratch_alloc = 0;
- struct rx_nfa_state *state_base = (struct rx_nfa_state *) * mem;
- struct rx_nfa_state *new_state = state_base;
- struct rx_nfa_edge *new_edge =
- (struct rx_nfa_edge *)
- ((char *) state_base + total_nodec * sizeof (struct rx_nfa_state));
- struct rx_se_list * new_se_list =
- (struct rx_se_list *)
- ((char *)new_edge + edgec * sizeof (struct rx_nfa_edge));
- struct rx_possible_future *new_close =
- ((struct rx_possible_future *)
- ((char *) new_se_list
- + se_list_consc * sizeof (struct rx_se_list)));
- struct rx_nfa_state_set * new_nfa_set =
- ((struct rx_nfa_state_set *)
- ((char *)new_close + eclosec * sizeof (struct rx_possible_future)));
- char *new_bitset =
- ((char *) new_nfa_set + nfa_setc * sizeof (struct rx_nfa_state_set));
- int x;
- struct rx_nfa_state *n;
-
- if (scratch_alloc < total_nodec)
- {
- scratch = ((struct rx_nfa_state **)
- remalloc (scratch, total_nodec * sizeof (*scratch)));
- if (scratch)
- scratch_alloc = total_nodec;
- else
- {
- scratch_alloc = 0;
- return 0;
- }
- }
-
- for (x = 0, n = rx->nfa_states; n; n = n->next)
- scratch[x++] = n;
-
- qsort (scratch, total_nodec,
- sizeof (struct rx_nfa_state *), (int (*)())nfacmp);
-
- for (x = 0; x < total_nodec; ++x)
- {
- struct rx_possible_future *eclose = scratch[x]->futures;
- struct rx_nfa_edge *edge = scratch[x]->edges;
- struct rx_nfa_state *cn = new_state++;
- cn->futures = 0;
- cn->edges = 0;
- cn->next = (x == total_nodec - 1) ? 0 : (cn + 1);
- cn->id = scratch[x]->id;
- cn->is_final = scratch[x]->is_final;
- cn->is_start = scratch[x]->is_start;
- cn->mark = 0;
- while (edge)
- {
- int indx = (edge->dest->id < 0
- ? (total_nodec + edge->dest->id)
- : edge->dest->id);
- struct rx_nfa_edge *e = new_edge++;
- rx_Bitset cset = (rx_Bitset) new_bitset;
- new_bitset += rx_sizeof_bitset (rx->local_cset_size);
- rx_bitset_null (rx->local_cset_size, cset);
- rx_bitset_union (rx->local_cset_size, cset, edge->params.cset);
- e->next = cn->edges;
- cn->edges = e;
- e->type = edge->type;
- e->dest = state_base + indx;
- e->params.cset = cset;
- edge = edge->next;
- }
- while (eclose)
- {
- struct rx_possible_future *ec = new_close++;
- struct rx_hash_item * sp;
- struct rx_se_list ** sepos;
- struct rx_se_list * sesrc;
- struct rx_nfa_state_set * destlst;
- struct rx_nfa_state_set ** destpos;
- ec->next = cn->futures;
- cn->futures = ec;
- for (sepos = &ec->effects, sesrc = eclose->effects;
- sesrc;
- sesrc = sesrc->cdr, sepos = &(*sepos)->cdr)
- {
- sp = rx_hash_find (&rx->se_list_memo,
- (long)sesrc->car ^ (long)sesrc->cdr,
- sesrc, &se_list_hash_rules);
- if (sp->binding)
- {
- sesrc = (struct rx_se_list *)sp->binding;
- break;
- }
- *new_se_list = *sesrc;
- sp->binding = (void *)new_se_list;
- *sepos = new_se_list;
- ++new_se_list;
- }
- *sepos = sesrc;
- for (destpos = &ec->destset, destlst = eclose->destset;
- destlst;
- destpos = &(*destpos)->cdr, destlst = destlst->cdr)
- {
- sp = rx_hash_find (&rx->set_list_memo,
- ((((long)destlst->car) >> 8)
- ^ (long)destlst->cdr),
- destlst, &nfa_set_hash_rules);
- if (sp->binding)
- {
- destlst = (struct rx_nfa_state_set *)sp->binding;
- break;
- }
- *new_nfa_set = *destlst;
- new_nfa_set->car = state_base + destlst->car->id;
- sp->binding = (void *)new_nfa_set;
- *destpos = new_nfa_set;
- ++new_nfa_set;
- }
- *destpos = destlst;
- eclose = eclose->next;
- }
- }
- }
- rx_free_hash_table (&rx->se_list_memo, se_memo_freer, &se_list_hash_rules);
- bzero (&rx->se_list_memo, sizeof (rx->se_list_memo));
- rx_free_hash_table (&rx->set_list_memo, nfa_set_freer, &nfa_set_hash_rules);
- bzero (&rx->set_list_memo, sizeof (rx->set_list_memo));
-
- rx_free_nfa (rx);
- rx->nfa_states = (struct rx_nfa_state *)*mem;
- return 1;
-}
-
-
-/* The functions in the next several pages define the lazy-NFA-conversion used
- * by matchers. The input to this construction is an NFA such as
- * is built by compactify_nfa (rx.c). The output is the superNFA.
- */
-
-/* Match engines can use arbitrary values for opcodes. So, the parse tree
- * is built using instructions names (enum rx_opcode), but the superstate
- * nfa is populated with mystery opcodes (void *).
- *
- * For convenience, here is an id table. The opcodes are == to their inxs
- *
- * The lables in re_search_2 would make good values for instructions.
- */
-
-void * rx_id_instruction_table[rx_num_instructions] =
-{
- (void *) rx_backtrack_point,
- (void *) rx_do_side_effects,
- (void *) rx_cache_miss,
- (void *) rx_next_char,
- (void *) rx_backtrack,
- (void *) rx_error_inx
-};
-
-
-
-/* Memory mgt. for superstate graphs. */
-
-#ifdef __STDC__
-static char *
-rx_cache_malloc (struct rx_cache * cache, int bytes)
-#else
-static char *
-rx_cache_malloc (cache, bytes)
- struct rx_cache * cache;
- int bytes;
-#endif
-{
- while (cache->bytes_left < bytes)
- {
- if (cache->memory_pos)
- cache->memory_pos = cache->memory_pos->next;
- if (!cache->memory_pos)
- {
- cache->morecore (cache);
- if (!cache->memory_pos)
- return 0;
- }
- cache->bytes_left = cache->memory_pos->bytes;
- cache->memory_addr = ((char *)cache->memory_pos
- + sizeof (struct rx_blocklist));
- }
- cache->bytes_left -= bytes;
- {
- char * addr = cache->memory_addr;
- cache->memory_addr += bytes;
- return addr;
- }
-}
-
-#ifdef __STDC__
-static void
-rx_cache_free (struct rx_cache * cache,
- struct rx_freelist ** freelist, char * mem)
-#else
-static void
-rx_cache_free (cache, freelist, mem)
- struct rx_cache * cache;
- struct rx_freelist ** freelist;
- char * mem;
-#endif
-{
- struct rx_freelist * it = (struct rx_freelist *)mem;
- it->next = *freelist;
- *freelist = it;
-}
-
-
-/* The partially instantiated superstate graph has a transition
- * table at every node. There is one entry for every character.
- * This fills in the transition for a set.
- */
-#ifdef __STDC__
-static void
-install_transition (struct rx_superstate *super,
- struct rx_inx *answer, rx_Bitset trcset)
-#else
-static void
-install_transition (super, answer, trcset)
- struct rx_superstate *super;
- struct rx_inx *answer;
- rx_Bitset trcset;
-#endif
-{
- struct rx_inx * transitions = super->transitions;
- int chr;
- for (chr = 0; chr < 256; )
- if (!*trcset)
- {
- ++trcset;
- chr += 32;
- }
- else
- {
- RX_subset sub = *trcset;
- RX_subset mask = 1;
- int bound = chr + 32;
- while (chr < bound)
- {
- if (sub & mask)
- transitions [chr] = *answer;
- ++chr;
- mask <<= 1;
- }
- ++trcset;
- }
-}
-
-
-#ifdef __STDC__
-static int
-qlen (struct rx_superstate * q)
-#else
-static int
-qlen (q)
- struct rx_superstate * q;
-#endif
-{
- int count = 1;
- struct rx_superstate * it;
- if (!q)
- return 0;
- for (it = q->next_recyclable; it != q; it = it->next_recyclable)
- ++count;
- return count;
-}
-
-#ifdef __STDC__
-static void
-check_cache (struct rx_cache * cache)
-#else
-static void
-check_cache (cache)
- struct rx_cache * cache;
-#endif
-{
- struct rx_cache * you_fucked_up = 0;
- int total = cache->superstates;
- int semi = cache->semifree_superstates;
- if (semi != qlen (cache->semifree_superstate))
- check_cache (you_fucked_up);
- if ((total - semi) != qlen (cache->lru_superstate))
- check_cache (you_fucked_up);
-}
-
-/* When a superstate is old and neglected, it can enter a
- * semi-free state. A semi-free state is slated to die.
- * Incoming transitions to a semi-free state are re-written
- * to cause an (interpreted) fault when they are taken.
- * The fault handler revives the semi-free state, patches
- * incoming transitions back to normal, and continues.
- *
- * The idea is basicly to free in two stages, aborting
- * between the two if the state turns out to be useful again.
- * When a free is aborted, the rescued superstate is placed
- * in the most-favored slot to maximize the time until it
- * is next semi-freed.
- */
-
-#ifdef __STDC__
-static void
-semifree_superstate (struct rx_cache * cache)
-#else
-static void
-semifree_superstate (cache)
- struct rx_cache * cache;
-#endif
-{
- int disqualified = cache->semifree_superstates;
- if (disqualified == cache->superstates)
- return;
- while (cache->lru_superstate->locks)
- {
- cache->lru_superstate = cache->lru_superstate->next_recyclable;
- ++disqualified;
- if (disqualified == cache->superstates)
- return;
- }
- {
- struct rx_superstate * it = cache->lru_superstate;
- it->next_recyclable->prev_recyclable = it->prev_recyclable;
- it->prev_recyclable->next_recyclable = it->next_recyclable;
- cache->lru_superstate = (it == it->next_recyclable
- ? 0
- : it->next_recyclable);
- if (!cache->semifree_superstate)
- {
- cache->semifree_superstate = it;
- it->next_recyclable = it;
- it->prev_recyclable = it;
- }
- else
- {
- it->prev_recyclable = cache->semifree_superstate->prev_recyclable;
- it->next_recyclable = cache->semifree_superstate;
- it->prev_recyclable->next_recyclable = it;
- it->next_recyclable->prev_recyclable = it;
- }
- {
- struct rx_distinct_future *df;
- it->is_semifree = 1;
- ++cache->semifree_superstates;
- df = it->transition_refs;
- if (df)
- {
- df->prev_same_dest->next_same_dest = 0;
- for (df = it->transition_refs; df; df = df->next_same_dest)
- {
- df->future_frame.inx = cache->instruction_table[rx_cache_miss];
- df->future_frame.data = 0;
- df->future_frame.data_2 = (void *) df;
- /* If there are any NEXT-CHAR instruction frames that
- * refer to this state, we convert them to CACHE-MISS frames.
- */
- if (!df->effects
- && (df->edge->options->next_same_super_edge[0]
- == df->edge->options))
- install_transition (df->present, &df->future_frame,
- df->edge->cset);
- }
- df = it->transition_refs;
- df->prev_same_dest->next_same_dest = df;
- }
- }
- }
-}
-
-
-#ifdef __STDC__
-static void
-refresh_semifree_superstate (struct rx_cache * cache,
- struct rx_superstate * super)
-#else
-static void
-refresh_semifree_superstate (cache, super)
- struct rx_cache * cache;
- struct rx_superstate * super;
-#endif
-{
- struct rx_distinct_future *df;
-
- if (super->transition_refs)
- {
- super->transition_refs->prev_same_dest->next_same_dest = 0;
- for (df = super->transition_refs; df; df = df->next_same_dest)
- {
- df->future_frame.inx = cache->instruction_table[rx_next_char];
- df->future_frame.data = (void *) super->transitions;
- /* CACHE-MISS instruction frames that refer to this state,
- * must be converted to NEXT-CHAR frames.
- */
- if (!df->effects
- && (df->edge->options->next_same_super_edge[0]
- == df->edge->options))
- install_transition (df->present, &df->future_frame,
- df->edge->cset);
- }
- super->transition_refs->prev_same_dest->next_same_dest
- = super->transition_refs;
- }
- if (cache->semifree_superstate == super)
- cache->semifree_superstate = (super->prev_recyclable == super
- ? 0
- : super->prev_recyclable);
- super->next_recyclable->prev_recyclable = super->prev_recyclable;
- super->prev_recyclable->next_recyclable = super->next_recyclable;
-
- if (!cache->lru_superstate)
- (cache->lru_superstate
- = super->next_recyclable
- = super->prev_recyclable
- = super);
- else
- {
- super->next_recyclable = cache->lru_superstate;
- super->prev_recyclable = cache->lru_superstate->prev_recyclable;
- super->next_recyclable->prev_recyclable = super;
- super->prev_recyclable->next_recyclable = super;
- }
- super->is_semifree = 0;
- --cache->semifree_superstates;
-}
-
-#ifdef __STDC__
-static void
-rx_refresh_this_superstate (struct rx_cache * cache, struct rx_superstate * superstate)
-#else
-static void
-rx_refresh_this_superstate (cache, superstate)
- struct rx_cache * cache;
- struct rx_superstate * superstate;
-#endif
-{
- if (superstate->is_semifree)
- refresh_semifree_superstate (cache, superstate);
- else if (cache->lru_superstate == superstate)
- cache->lru_superstate = superstate->next_recyclable;
- else if (superstate != cache->lru_superstate->prev_recyclable)
- {
- superstate->next_recyclable->prev_recyclable
- = superstate->prev_recyclable;
- superstate->prev_recyclable->next_recyclable
- = superstate->next_recyclable;
- superstate->next_recyclable = cache->lru_superstate;
- superstate->prev_recyclable = cache->lru_superstate->prev_recyclable;
- superstate->next_recyclable->prev_recyclable = superstate;
- superstate->prev_recyclable->next_recyclable = superstate;
- }
-}
-
-#ifdef __STDC__
-static void
-release_superset_low (struct rx_cache * cache,
- struct rx_superset *set)
-#else
-static void
-release_superset_low (cache, set)
- struct rx_cache * cache;
- struct rx_superset *set;
-#endif
-{
- if (!--set->refs)
- {
- if (set->cdr)
- release_superset_low (cache, set->cdr);
-
- set->starts_for = 0;
-
- rx_hash_free
- (rx_hash_find
- (&cache->superset_table,
- (unsigned long)set->car ^ set->id ^ (unsigned long)set->cdr,
- (void *)set,
- &cache->superset_hash_rules),
- &cache->superset_hash_rules);
- rx_cache_free (cache, &cache->free_supersets, (char *)set);
- }
-}
-
-#ifdef __STDC__
-RX_DECL void
-rx_release_superset (struct rx *rx,
- struct rx_superset *set)
-#else
-RX_DECL void
-rx_release_superset (rx, set)
- struct rx *rx;
- struct rx_superset *set;
-#endif
-{
- release_superset_low (rx->cache, set);
-}
-
-/* This tries to add a new superstate to the superstate freelist.
- * It might, as a result, free some edge pieces or hash tables.
- * If nothing can be freed because too many locks are being held, fail.
- */
-
-#ifdef __STDC__
-static int
-rx_really_free_superstate (struct rx_cache * cache)
-#else
-static int
-rx_really_free_superstate (cache)
- struct rx_cache * cache;
-#endif
-{
- int locked_superstates = 0;
- struct rx_superstate * it;
-
- if (!cache->superstates)
- return 0;
-
- {
- /* This is a total guess. The idea is that we should expect as
- * many misses as we've recently experienced. I.e., cache->misses
- * should be the same as cache->semifree_superstates.
- */
- while ((cache->hits + cache->misses) > cache->superstates_allowed)
- {
- cache->hits >>= 1;
- cache->misses >>= 1;
- }
- if ( ((cache->hits + cache->misses) * cache->semifree_superstates)
- < (cache->superstates * cache->misses))
- {
- semifree_superstate (cache);
- semifree_superstate (cache);
- }
- }
-
- while (cache->semifree_superstate && cache->semifree_superstate->locks)
- {
- refresh_semifree_superstate (cache, cache->semifree_superstate);
- ++locked_superstates;
- if (locked_superstates == cache->superstates)
- return 0;
- }
-
- if (cache->semifree_superstate)
- {
- it = cache->semifree_superstate;
- it->next_recyclable->prev_recyclable = it->prev_recyclable;
- it->prev_recyclable->next_recyclable = it->next_recyclable;
- cache->semifree_superstate = ((it == it->next_recyclable)
- ? 0
- : it->next_recyclable);
- --cache->semifree_superstates;
- }
- else
- {
- while (cache->lru_superstate->locks)
- {
- cache->lru_superstate = cache->lru_superstate->next_recyclable;
- ++locked_superstates;
- if (locked_superstates == cache->superstates)
- return 0;
- }
- it = cache->lru_superstate;
- it->next_recyclable->prev_recyclable = it->prev_recyclable;
- it->prev_recyclable->next_recyclable = it->next_recyclable;
- cache->lru_superstate = ((it == it->next_recyclable)
- ? 0
- : it->next_recyclable);
- }
-
- if (it->transition_refs)
- {
- struct rx_distinct_future *df;
- for (df = it->transition_refs,
- df->prev_same_dest->next_same_dest = 0;
- df;
- df = df->next_same_dest)
- {
- df->future_frame.inx = cache->instruction_table[rx_cache_miss];
- df->future_frame.data = 0;
- df->future_frame.data_2 = (void *) df;
- df->future = 0;
- }
- it->transition_refs->prev_same_dest->next_same_dest =
- it->transition_refs;
- }
- {
- struct rx_super_edge *tc = it->edges;
- while (tc)
- {
- struct rx_distinct_future * df;
- struct rx_super_edge *tct = tc->next;
- df = tc->options;
- df->next_same_super_edge[1]->next_same_super_edge[0] = 0;
- while (df)
- {
- struct rx_distinct_future *dft = df;
- df = df->next_same_super_edge[0];
-
-
- if (dft->future && dft->future->transition_refs == dft)
- {
- dft->future->transition_refs = dft->next_same_dest;
- if (dft->future->transition_refs == dft)
- dft->future->transition_refs = 0;
- }
- dft->next_same_dest->prev_same_dest = dft->prev_same_dest;
- dft->prev_same_dest->next_same_dest = dft->next_same_dest;
- rx_cache_free (cache, &cache->free_discernable_futures,
- (char *)dft);
- }
- rx_cache_free (cache, &cache->free_transition_classes, (char *)tc);
- tc = tct;
- }
- }
-
- if (it->contents->superstate == it)
- it->contents->superstate = 0;
- release_superset_low (cache, it->contents);
- rx_cache_free (cache, &cache->free_superstates, (char *)it);
- --cache->superstates;
- return 1;
-}
-
-#ifdef __STDC__
-static char *
-rx_cache_get (struct rx_cache * cache,
- struct rx_freelist ** freelist)
-#else
-static char *
-rx_cache_get (cache, freelist)
- struct rx_cache * cache;
- struct rx_freelist ** freelist;
-#endif
-{
- while (!*freelist && rx_really_free_superstate (cache))
- ;
- if (!*freelist)
- return 0;
- {
- struct rx_freelist * it = *freelist;
- *freelist = it->next;
- return (char *)it;
- }
-}
-
-#ifdef __STDC__
-static char *
-rx_cache_malloc_or_get (struct rx_cache * cache,
- struct rx_freelist ** freelist, int bytes)
-#else
-static char *
-rx_cache_malloc_or_get (cache, freelist, bytes)
- struct rx_cache * cache;
- struct rx_freelist ** freelist;
- int bytes;
-#endif
-{
- if (!*freelist)
- {
- char * answer = rx_cache_malloc (cache, bytes);
- if (answer)
- return answer;
- }
-
- return rx_cache_get (cache, freelist);
-}
-
-#ifdef __STDC__
-static char *
-rx_cache_get_superstate (struct rx_cache * cache)
-#else
-static char *
-rx_cache_get_superstate (cache)
- struct rx_cache * cache;
-#endif
-{
- char * answer;
- int bytes = ( sizeof (struct rx_superstate)
- + cache->local_cset_size * sizeof (struct rx_inx));
- if (!cache->free_superstates
- && (cache->superstates < cache->superstates_allowed))
- {
- answer = rx_cache_malloc (cache, bytes);
- if (answer)
- {
- ++cache->superstates;
- return answer;
- }
- }
- answer = rx_cache_get (cache, &cache->free_superstates);
- if (!answer)
- {
- answer = rx_cache_malloc (cache, bytes);
- if (answer)
- ++cache->superstates_allowed;
- }
- ++cache->superstates;
- return answer;
-}
-
-
-
-#ifdef __STDC__
-static int
-supersetcmp (void * va, void * vb)
-#else
-static int
-supersetcmp (va, vb)
- void * va;
- void * vb;
-#endif
-{
- struct rx_superset * a = (struct rx_superset *)va;
- struct rx_superset * b = (struct rx_superset *)vb;
- return ( (a == b)
- || (a && b && (a->car == b->car) && (a->cdr == b->cdr)));
-}
-
-#ifdef __STDC__
-static struct rx_hash_item *
-superset_allocator (struct rx_hash_rules * rules, void * val)
-#else
-static struct rx_hash_item *
-superset_allocator (rules, val)
- struct rx_hash_rules * rules;
- void * val;
-#endif
-{
- struct rx_cache * cache
- = ((struct rx_cache *)
- ((char *)rules
- - (unsigned long)(&((struct rx_cache *)0)->superset_hash_rules)));
- struct rx_superset * template = (struct rx_superset *)val;
- struct rx_superset * newset
- = ((struct rx_superset *)
- rx_cache_malloc_or_get (cache,
- &cache->free_supersets,
- sizeof (*template)));
- if (!newset)
- return 0;
- newset->refs = 0;
- newset->car = template->car;
- newset->id = template->car->id;
- newset->cdr = template->cdr;
- newset->superstate = 0;
- rx_protect_superset (rx, template->cdr);
- newset->hash_item.data = (void *)newset;
- newset->hash_item.binding = 0;
- return &newset->hash_item;
-}
-
-#ifdef __STDC__
-static struct rx_hash *
-super_hash_allocator (struct rx_hash_rules * rules)
-#else
-static struct rx_hash *
-super_hash_allocator (rules)
- struct rx_hash_rules * rules;
-#endif
-{
- struct rx_cache * cache
- = ((struct rx_cache *)
- ((char *)rules
- - (unsigned long)(&((struct rx_cache *)0)->superset_hash_rules)));
- return ((struct rx_hash *)
- rx_cache_malloc_or_get (cache,
- &cache->free_hash, sizeof (struct rx_hash)));
-}
-
-
-#ifdef __STDC__
-static void
-super_hash_liberator (struct rx_hash * hash, struct rx_hash_rules * rules)
-#else
-static void
-super_hash_liberator (hash, rules)
- struct rx_hash * hash;
- struct rx_hash_rules * rules;
-#endif
-{
- struct rx_cache * cache
- = ((struct rx_cache *)
- (char *)rules - (long)(&((struct rx_cache *)0)->superset_hash_rules));
- rx_cache_free (cache, &cache->free_hash, (char *)hash);
-}
-
-#ifdef __STDC__
-static void
-superset_hash_item_liberator (struct rx_hash_item * it,
- struct rx_hash_rules * rules)
-#else
-static void
-superset_hash_item_liberator (it, rules) /* Well, it does ya know. */
- struct rx_hash_item * it;
- struct rx_hash_rules * rules;
-#endif
-{
-}
-
-int rx_cache_bound = 128;
-static int rx_default_cache_got = 0;
-
-#ifdef __STDC__
-static int
-bytes_for_cache_size (int supers, int cset_size)
-#else
-static int
-bytes_for_cache_size (supers, cset_size)
- int supers;
- int cset_size;
-#endif
-{
- /* What the hell is this? !!!*/
- return (int)
- ((float)supers *
- ( (1.03 * (float) ( rx_sizeof_bitset (cset_size)
- + sizeof (struct rx_super_edge)))
- + (1.80 * (float) sizeof (struct rx_possible_future))
- + (float) ( sizeof (struct rx_superstate)
- + cset_size * sizeof (struct rx_inx))));
-}
-
-#ifdef __STDC__
-static void
-rx_morecore (struct rx_cache * cache)
-#else
-static void
-rx_morecore (cache)
- struct rx_cache * cache;
-#endif
-{
- if (rx_default_cache_got >= rx_cache_bound)
- return;
-
- rx_default_cache_got += 16;
- cache->superstates_allowed = rx_cache_bound;
- {
- struct rx_blocklist ** pos = &cache->memory;
- int size = bytes_for_cache_size (16, cache->local_cset_size);
- while (*pos)
- pos = &(*pos)->next;
- *pos = ((struct rx_blocklist *)
- malloc (size + sizeof (struct rx_blocklist)));
- if (!*pos)
- return;
-
- (*pos)->next = 0;
- (*pos)->bytes = size;
- cache->memory_pos = *pos;
- cache->memory_addr = (char *)*pos + sizeof (**pos);
- cache->bytes_left = size;
- }
-}
-
-static struct rx_cache default_cache =
-{
- {
- supersetcmp,
- super_hash_allocator,
- super_hash_liberator,
- superset_allocator,
- superset_hash_item_liberator,
- },
- 0,
- 0,
- 0,
- 0,
- rx_morecore,
-
- 0,
- 0,
- 0,
- 0,
- 0,
-
- 0,
- 0,
-
- 0,
-
- 0,
- 0,
- 0,
- 0,
- 128,
-
- 256,
- rx_id_instruction_table,
-
- {
- 0,
- 0,
- {0},
- {0},
- {0}
- }
-};
-
-/* This adds an element to a superstate set. These sets are lists, such
- * that lists with == elements are ==. The empty set is returned by
- * superset_cons (rx, 0, 0) and is NOT equivelent to
- * (struct rx_superset)0.
- */
-
-#ifdef __STDC__
-RX_DECL struct rx_superset *
-rx_superset_cons (struct rx * rx,
- struct rx_nfa_state *car, struct rx_superset *cdr)
-#else
-RX_DECL struct rx_superset *
-rx_superset_cons (rx, car, cdr)
- struct rx * rx;
- struct rx_nfa_state *car;
- struct rx_superset *cdr;
-#endif
-{
- struct rx_cache * cache = rx->cache;
- if (!car && !cdr)
- {
- if (!cache->empty_superset)
- {
- cache->empty_superset
- = ((struct rx_superset *)
- rx_cache_malloc_or_get (cache, &cache->free_supersets,
- sizeof (struct rx_superset)));
- if (!cache->empty_superset)
- return 0;
- bzero (cache->empty_superset, sizeof (struct rx_superset));
- cache->empty_superset->refs = 1000;
- }
- return cache->empty_superset;
- }
- {
- struct rx_superset template;
- struct rx_hash_item * hit;
- template.car = car;
- template.cdr = cdr;
- template.id = car->id;
- hit = rx_hash_store (&cache->superset_table,
- (unsigned long)car ^ car->id ^ (unsigned long)cdr,
- (void *)&template,
- &cache->superset_hash_rules);
- return (hit
- ? (struct rx_superset *)hit->data
- : 0);
- }
-}
-
-/* This computes a union of two NFA state sets. The sets do not have the
- * same representation though. One is a RX_SUPERSET structure (part
- * of the superstate NFA) and the other is an NFA_STATE_SET (part of the NFA).
- */
-
-#ifdef __STDC__
-RX_DECL struct rx_superset *
-rx_superstate_eclosure_union
- (struct rx * rx, struct rx_superset *set, struct rx_nfa_state_set *ecl)
-#else
-RX_DECL struct rx_superset *
-rx_superstate_eclosure_union (rx, set, ecl)
- struct rx * rx;
- struct rx_superset *set;
- struct rx_nfa_state_set *ecl;
-#endif
-{
- if (!ecl)
- return set;
-
- if (!set->car)
- return rx_superset_cons (rx, ecl->car,
- rx_superstate_eclosure_union (rx, set, ecl->cdr));
- if (set->car == ecl->car)
- return rx_superstate_eclosure_union (rx, set, ecl->cdr);
-
- {
- struct rx_superset * tail;
- struct rx_nfa_state * first;
-
- if (set->car > ecl->car)
- {
- tail = rx_superstate_eclosure_union (rx, set->cdr, ecl);
- first = set->car;
- }
- else
- {
- tail = rx_superstate_eclosure_union (rx, set, ecl->cdr);
- first = ecl->car;
- }
- if (!tail)
- return 0;
- else
- {
- struct rx_superset * answer;
- answer = rx_superset_cons (rx, first, tail);
- if (!answer)
- {
- rx_protect_superset (rx, tail);
- rx_release_superset (rx, tail);
- return 0;
- }
- else
- return answer;
- }
- }
-}
-
-
-
-
-/*
- * This makes sure that a list of rx_distinct_futures contains
- * a future for each possible set of side effects in the eclosure
- * of a given state. This is some of the work of filling in a
- * superstate transition.
- */
-
-#ifdef __STDC__
-static struct rx_distinct_future *
-include_futures (struct rx *rx,
- struct rx_distinct_future *df, struct rx_nfa_state
- *state, struct rx_superstate *superstate)
-#else
-static struct rx_distinct_future *
-include_futures (rx, df, state, superstate)
- struct rx *rx;
- struct rx_distinct_future *df;
- struct rx_nfa_state *state;
- struct rx_superstate *superstate;
-#endif
-{
- struct rx_possible_future *future;
- struct rx_cache * cache = rx->cache;
- for (future = state->futures; future; future = future->next)
- {
- struct rx_distinct_future *dfp;
- struct rx_distinct_future *insert_before = 0;
- if (df)
- df->next_same_super_edge[1]->next_same_super_edge[0] = 0;
- for (dfp = df; dfp; dfp = dfp->next_same_super_edge[0])
- if (dfp->effects == future->effects)
- break;
- else
- {
- int order = rx->se_list_cmp (rx, dfp->effects, future->effects);
- if (order > 0)
- {
- insert_before = dfp;
- dfp = 0;
- break;
- }
- }
- if (df)
- df->next_same_super_edge[1]->next_same_super_edge[0] = df;
- if (!dfp)
- {
- dfp
- = ((struct rx_distinct_future *)
- rx_cache_malloc_or_get (cache, &cache->free_discernable_futures,
- sizeof (struct rx_distinct_future)));
- if (!dfp)
- return 0;
- if (!df)
- {
- df = insert_before = dfp;
- df->next_same_super_edge[0] = df->next_same_super_edge[1] = df;
- }
- else if (!insert_before)
- insert_before = df;
- else if (insert_before == df)
- df = dfp;
-
- dfp->next_same_super_edge[0] = insert_before;
- dfp->next_same_super_edge[1]
- = insert_before->next_same_super_edge[1];
- dfp->next_same_super_edge[1]->next_same_super_edge[0] = dfp;
- dfp->next_same_super_edge[0]->next_same_super_edge[1] = dfp;
- dfp->next_same_dest = dfp->prev_same_dest = dfp;
- dfp->future = 0;
- dfp->present = superstate;
- dfp->future_frame.inx = rx->instruction_table[rx_cache_miss];
- dfp->future_frame.data = 0;
- dfp->future_frame.data_2 = (void *) dfp;
- dfp->side_effects_frame.inx
- = rx->instruction_table[rx_do_side_effects];
- dfp->side_effects_frame.data = 0;
- dfp->side_effects_frame.data_2 = (void *) dfp;
- dfp->effects = future->effects;
- }
- }
- return df;
-}
-
-
-
-/* This constructs a new superstate from its state set. The only
- * complexity here is memory management.
- */
-#ifdef __STDC__
-RX_DECL struct rx_superstate *
-rx_superstate (struct rx *rx,
- struct rx_superset *set)
-#else
-RX_DECL struct rx_superstate *
-rx_superstate (rx, set)
- struct rx *rx;
- struct rx_superset *set;
-#endif
-{
- struct rx_cache * cache = rx->cache;
- struct rx_superstate * superstate = 0;
-
- /* Does the superstate already exist in the cache? */
- if (set->superstate)
- {
- if (set->superstate->rx_id != rx->rx_id)
- {
- /* Aha. It is in the cache, but belongs to a superstate
- * that refers to an NFA that no longer exists.
- * (We know it no longer exists because it was evidently
- * stored in the same region of memory as the current nfa
- * yet it has a different id.)
- */
- superstate = set->superstate;
- if (!superstate->is_semifree)
- {
- if (cache->lru_superstate == superstate)
- {
- cache->lru_superstate = superstate->next_recyclable;
- if (cache->lru_superstate == superstate)
- cache->lru_superstate = 0;
- }
- {
- superstate->next_recyclable->prev_recyclable
- = superstate->prev_recyclable;
- superstate->prev_recyclable->next_recyclable
- = superstate->next_recyclable;
- if (!cache->semifree_superstate)
- {
- (cache->semifree_superstate
- = superstate->next_recyclable
- = superstate->prev_recyclable
- = superstate);
- }
- else
- {
- superstate->next_recyclable = cache->semifree_superstate;
- superstate->prev_recyclable
- = cache->semifree_superstate->prev_recyclable;
- superstate->next_recyclable->prev_recyclable
- = superstate;
- superstate->prev_recyclable->next_recyclable
- = superstate;
- cache->semifree_superstate = superstate;
- }
- ++cache->semifree_superstates;
- }
- }
- set->superstate = 0;
- goto handle_cache_miss;
- }
- ++cache->hits;
- superstate = set->superstate;
-
- rx_refresh_this_superstate (cache, superstate);
- return superstate;
- }
-
- handle_cache_miss:
-
- /* This point reached only for cache misses. */
- ++cache->misses;
-#if RX_DEBUG
- if (rx_debug_trace > 1)
- {
- struct rx_superset * setp = set;
- fprintf (stderr, "Building a superstet %d(%d): ", rx->rx_id, set);
- while (setp)
- {
- fprintf (stderr, "%d ", setp->id);
- setp = setp->cdr;
- }
- fprintf (stderr, "(%d)\n", set);
- }
-#endif
- superstate = (struct rx_superstate *)rx_cache_get_superstate (cache);
- if (!superstate)
- return 0;
-
- if (!cache->lru_superstate)
- (cache->lru_superstate
- = superstate->next_recyclable
- = superstate->prev_recyclable
- = superstate);
- else
- {
- superstate->next_recyclable = cache->lru_superstate;
- superstate->prev_recyclable = cache->lru_superstate->prev_recyclable;
- ( superstate->prev_recyclable->next_recyclable
- = superstate->next_recyclable->prev_recyclable
- = superstate);
- }
- superstate->rx_id = rx->rx_id;
- superstate->transition_refs = 0;
- superstate->locks = 0;
- superstate->is_semifree = 0;
- set->superstate = superstate;
- superstate->contents = set;
- rx_protect_superset (rx, set);
- superstate->edges = 0;
- {
- int x;
- /* None of the transitions from this superstate are known yet. */
- for (x = 0; x < rx->local_cset_size; ++x) /* &&&&& 3.8 % */
- {
- struct rx_inx * ifr = &superstate->transitions[x];
- ifr->inx = rx->instruction_table [rx_cache_miss];
- ifr->data = ifr->data_2 = 0;
- }
- }
- return superstate;
-}
-
-
-/* This computes the destination set of one edge of the superstate NFA.
- * Note that a RX_DISTINCT_FUTURE is a superstate edge.
- * Returns 0 on an allocation failure.
- */
-
-#ifdef __STDC__
-static int
-solve_destination (struct rx *rx, struct rx_distinct_future *df)
-#else
-static int
-solve_destination (rx, df)
- struct rx *rx;
- struct rx_distinct_future *df;
-#endif
-{
- struct rx_super_edge *tc = df->edge;
- struct rx_superset *nfa_state;
- struct rx_superset *nil_set = rx_superset_cons (rx, 0, 0);
- struct rx_superset *solution = nil_set;
- struct rx_superstate *dest;
-
- rx_protect_superset (rx, solution);
- /* Iterate over all NFA states in the state set of this superstate. */
- for (nfa_state = df->present->contents;
- nfa_state->car;
- nfa_state = nfa_state->cdr)
- {
- struct rx_nfa_edge *e;
- /* Iterate over all edges of each NFA state. */
- for (e = nfa_state->car->edges; e; e = e->next)
- /* If we find an edge that is labeled with
- * the characters we are solving for.....
- */
- if (rx_bitset_is_subset (rx->local_cset_size,
- tc->cset, e->params.cset))
- {
- struct rx_nfa_state *n = e->dest;
- struct rx_possible_future *pf;
- /* ....search the partial epsilon closures of the destination
- * of that edge for a path that involves the same set of
- * side effects we are solving for.
- * If we find such a RX_POSSIBLE_FUTURE, we add members to the
- * stateset we are computing.
- */
- for (pf = n->futures; pf; pf = pf->next)
- if (pf->effects == df->effects)
- {
- struct rx_superset * old_sol;
- old_sol = solution;
- solution = rx_superstate_eclosure_union (rx, solution,
- pf->destset);
- if (!solution)
- return 0;
- rx_protect_superset (rx, solution);
- rx_release_superset (rx, old_sol);
- }
- }
- }
- /* It is possible that the RX_DISTINCT_FUTURE we are working on has
- * the empty set of NFA states as its definition. In that case, this
- * is a failure point.
- */
- if (solution == nil_set)
- {
- df->future_frame.inx = (void *) rx_backtrack;
- df->future_frame.data = 0;
- df->future_frame.data_2 = 0;
- return 1;
- }
- dest = rx_superstate (rx, solution);
- rx_release_superset (rx, solution);
- if (!dest)
- return 0;
-
- {
- struct rx_distinct_future *dft;
- dft = df;
- df->prev_same_dest->next_same_dest = 0;
- while (dft)
- {
- dft->future = dest;
- dft->future_frame.inx = rx->instruction_table[rx_next_char];
- dft->future_frame.data = (void *) dest->transitions;
- dft = dft->next_same_dest;
- }
- df->prev_same_dest->next_same_dest = df;
- }
- if (!dest->transition_refs)
- dest->transition_refs = df;
- else
- {
- struct rx_distinct_future *dft = dest->transition_refs->next_same_dest;
- dest->transition_refs->next_same_dest = df->next_same_dest;
- df->next_same_dest->prev_same_dest = dest->transition_refs;
- df->next_same_dest = dft;
- dft->prev_same_dest = df;
- }
- return 1;
-}
-
-
-/* This takes a superstate and a character, and computes some edges
- * from the superstate NFA. In particular, this computes all edges
- * that lead from SUPERSTATE given CHR. This function also
- * computes the set of characters that share this edge set.
- * This returns 0 on allocation error.
- * The character set and list of edges are returned through
- * the paramters CSETOUT and DFOUT.
-} */
-
-#ifdef __STDC__
-static int
-compute_super_edge (struct rx *rx, struct rx_distinct_future **dfout,
- rx_Bitset csetout, struct rx_superstate *superstate,
- unsigned char chr)
-#else
-static int
-compute_super_edge (rx, dfout, csetout, superstate, chr)
- struct rx *rx;
- struct rx_distinct_future **dfout;
- rx_Bitset csetout;
- struct rx_superstate *superstate;
- unsigned char chr;
-#endif
-{
- struct rx_superset *stateset = superstate->contents;
-
- /* To compute the set of characters that share edges with CHR,
- * we start with the full character set, and subtract.
- */
- rx_bitset_universe (rx->local_cset_size, csetout);
- *dfout = 0;
-
- /* Iterate over the NFA states in the superstate state-set. */
- while (stateset->car)
- {
- struct rx_nfa_edge *e;
- for (e = stateset->car->edges; e; e = e->next)
- if (RX_bitset_member (e->params.cset, chr))
- {
- /* If we find an NFA edge that applies, we make sure there
- * are corresponding edges in the superstate NFA.
- */
- {
- struct rx_distinct_future * saved;
- saved = *dfout;
- *dfout = include_futures (rx, *dfout, e->dest, superstate);
- if (!*dfout)
- {
- struct rx_distinct_future * df;
- df = saved;
- if (df)
- df->next_same_super_edge[1]->next_same_super_edge[0] = 0;
- while (df)
- {
- struct rx_distinct_future *dft;
- dft = df;
- df = df->next_same_super_edge[0];
-
- if (dft->future && dft->future->transition_refs == dft)
- {
- dft->future->transition_refs = dft->next_same_dest;
- if (dft->future->transition_refs == dft)
- dft->future->transition_refs = 0;
- }
- dft->next_same_dest->prev_same_dest = dft->prev_same_dest;
- dft->prev_same_dest->next_same_dest = dft->next_same_dest;
- rx_cache_free (rx->cache,
- &rx->cache->free_discernable_futures,
- (char *)dft);
- }
- return 0;
- }
- }
- /* We also trim the character set a bit. */
- rx_bitset_intersection (rx->local_cset_size,
- csetout, e->params.cset);
- }
- else
- /* An edge that doesn't apply at least tells us some characters
- * that don't share the same edge set as CHR.
- */
- rx_bitset_difference (rx->local_cset_size, csetout, e->params.cset);
- stateset = stateset->cdr;
- }
- return 1;
-}
-
-
-/* This is a constructor for RX_SUPER_EDGE structures. These are
- * wrappers for lists of superstate NFA edges that share character sets labels.
- * If a transition class contains more than one rx_distinct_future (superstate
- * edge), then it represents a non-determinism in the superstate NFA.
- */
-
-#ifdef __STDC__
-static struct rx_super_edge *
-rx_super_edge (struct rx *rx,
- struct rx_superstate *super, rx_Bitset cset,
- struct rx_distinct_future *df)
-#else
-static struct rx_super_edge *
-rx_super_edge (rx, super, cset, df)
- struct rx *rx;
- struct rx_superstate *super;
- rx_Bitset cset;
- struct rx_distinct_future *df;
-#endif
-{
- struct rx_super_edge *tc =
- (struct rx_super_edge *)rx_cache_malloc_or_get
- (rx->cache, &rx->cache->free_transition_classes,
- sizeof (struct rx_super_edge) + rx_sizeof_bitset (rx->local_cset_size));
-
- if (!tc)
- return 0;
- tc->next = super->edges;
- super->edges = tc;
- tc->rx_backtrack_frame.inx = rx->instruction_table[rx_backtrack_point];
- tc->rx_backtrack_frame.data = 0;
- tc->rx_backtrack_frame.data_2 = (void *) tc;
- tc->options = df;
- tc->cset = (rx_Bitset) ((char *) tc + sizeof (*tc));
- rx_bitset_assign (rx->local_cset_size, tc->cset, cset);
- if (df)
- {
- struct rx_distinct_future * dfp = df;
- df->next_same_super_edge[1]->next_same_super_edge[0] = 0;
- while (dfp)
- {
- dfp->edge = tc;
- dfp = dfp->next_same_super_edge[0];
- }
- df->next_same_super_edge[1]->next_same_super_edge[0] = df;
- }
- return tc;
-}
-
-
-/* There are three kinds of cache miss. The first occurs when a
- * transition is taken that has never been computed during the
- * lifetime of the source superstate. That cache miss is handled by
- * calling COMPUTE_SUPER_EDGE. The second kind of cache miss
- * occurs when the destination superstate of a transition doesn't
- * exist. SOLVE_DESTINATION is used to construct the destination superstate.
- * Finally, the third kind of cache miss occurs when the destination
- * superstate of a transition is in a `semi-free state'. That case is
- * handled by UNFREE_SUPERSTATE.
- *
- * The function of HANDLE_CACHE_MISS is to figure out which of these
- * cases applies.
- */
-
-#ifdef __STDC__
-static void
-install_partial_transition (struct rx_superstate *super,
- struct rx_inx *answer,
- RX_subset set, int offset)
-#else
-static void
-install_partial_transition (super, answer, set, offset)
- struct rx_superstate *super;
- struct rx_inx *answer;
- RX_subset set;
- int offset;
-#endif
-{
- int start = offset;
- int end = start + 32;
- RX_subset pos = 1;
- struct rx_inx * transitions = super->transitions;
-
- while (start < end)
- {
- if (set & pos)
- transitions[start] = *answer;
- pos <<= 1;
- ++start;
- }
-}
-
-
-#ifdef __STDC__
-RX_DECL struct rx_inx *
-rx_handle_cache_miss
- (struct rx *rx, struct rx_superstate *super, unsigned char chr, void *data)
-#else
-RX_DECL struct rx_inx *
-rx_handle_cache_miss (rx, super, chr, data)
- struct rx *rx;
- struct rx_superstate *super;
- unsigned char chr;
- void *data;
-#endif
-{
- int offset = chr / RX_subset_bits;
- struct rx_distinct_future *df = data;
-
- if (!df) /* must be the shared_cache_miss_frame */
- {
- /* Perhaps this is just a transition waiting to be filled. */
- struct rx_super_edge *tc;
- RX_subset mask = rx_subset_singletons [chr % RX_subset_bits];
-
- for (tc = super->edges; tc; tc = tc->next)
- if (tc->cset[offset] & mask)
- {
- struct rx_inx * answer;
- df = tc->options;
- answer = ((tc->options->next_same_super_edge[0] != tc->options)
- ? &tc->rx_backtrack_frame
- : (df->effects
- ? &df->side_effects_frame
- : &df->future_frame));
- install_partial_transition (super, answer,
- tc->cset [offset], offset * 32);
- return answer;
- }
- /* Otherwise, it's a flushed or newly encountered edge. */
- {
- char cset_space[1024]; /* this limit is far from unreasonable */
- rx_Bitset trcset;
- struct rx_inx *answer;
-
- if (rx_sizeof_bitset (rx->local_cset_size) > sizeof (cset_space))
- return 0; /* If the arbitrary limit is hit, always fail */
- /* cleanly. */
- trcset = (rx_Bitset)cset_space;
- rx_lock_superstate (rx, super);
- if (!compute_super_edge (rx, &df, trcset, super, chr))
- {
- rx_unlock_superstate (rx, super);
- return 0;
- }
- if (!df) /* We just computed the fail transition. */
- {
- static struct rx_inx
- shared_fail_frame = { 0, 0, (void *)rx_backtrack, 0 };
- answer = &shared_fail_frame;
- }
- else
- {
- tc = rx_super_edge (rx, super, trcset, df);
- if (!tc)
- {
- rx_unlock_superstate (rx, super);
- return 0;
- }
- answer = ((tc->options->next_same_super_edge[0] != tc->options)
- ? &tc->rx_backtrack_frame
- : (df->effects
- ? &df->side_effects_frame
- : &df->future_frame));
- }
- install_partial_transition (super, answer,
- trcset[offset], offset * 32);
- rx_unlock_superstate (rx, super);
- return answer;
- }
- }
- else if (df->future) /* A cache miss on an edge with a future? Must be
- * a semi-free destination. */
- {
- if (df->future->is_semifree)
- refresh_semifree_superstate (rx->cache, df->future);
- return &df->future_frame;
- }
- else
- /* no future superstate on an existing edge */
- {
- rx_lock_superstate (rx, super);
- if (!solve_destination (rx, df))
- {
- rx_unlock_superstate (rx, super);
- return 0;
- }
- if (!df->effects
- && (df->edge->options->next_same_super_edge[0] == df->edge->options))
- install_partial_transition (super, &df->future_frame,
- df->edge->cset[offset], offset * 32);
- rx_unlock_superstate (rx, super);
- return &df->future_frame;
- }
-}
-
-
-
-
-/* The rest of the code provides a regex.c compatable interface. */
-
-
-__const__ char *re_error_msg[] =
-{
- 0, /* REG_NOUT */
- "No match", /* REG_NOMATCH */
- "Invalid regular expression", /* REG_BADPAT */
- "Invalid collation character", /* REG_ECOLLATE */
- "Invalid character class name", /* REG_ECTYPE */
- "Trailing backslash", /* REG_EESCAPE */
- "Invalid back reference", /* REG_ESUBREG */
- "Unmatched [ or [^", /* REG_EBRACK */
- "Unmatched ( or \\(", /* REG_EPAREN */
- "Unmatched \\{", /* REG_EBRACE */
- "Invalid content of \\{\\}", /* REG_BADBR */
- "Invalid range end", /* REG_ERANGE */
- "Memory exhausted", /* REG_ESPACE */
- "Invalid preceding regular expression", /* REG_BADRPT */
- "Premature end of regular expression", /* REG_EEND */
- "Regular expression too big", /* REG_ESIZE */
- "Unmatched ) or \\)", /* REG_ERPAREN */
-};
-
-
-
-/*
- * Macros used while compiling patterns.
- *
- * By convention, PEND points just past the end of the uncompiled pattern,
- * P points to the read position in the pattern. `translate' is the name
- * of the translation table (`TRANSLATE' is the name of a macro that looks
- * things up in `translate').
- */
-
-
-/*
- * Fetch the next character in the uncompiled pattern---translating it
- * if necessary. *Also cast from a signed character in the constant
- * string passed to us by the user to an unsigned char that we can use
- * as an array index (in, e.g., `translate').
- */
-#define PATFETCH(c) \
- do {if (p == pend) return REG_EEND; \
- c = (unsigned char) *p++; \
- c = translate[c]; \
- } while (0)
-
-/*
- * Fetch the next character in the uncompiled pattern, with no
- * translation.
- */
-#define PATFETCH_RAW(c) \
- do {if (p == pend) return REG_EEND; \
- c = (unsigned char) *p++; \
- } while (0)
-
-/* Go backwards one character in the pattern. */
-#define PATUNFETCH p--
-
-
-#define TRANSLATE(d) translate[(unsigned char) (d)]
-
-typedef unsigned regnum_t;
-
-/* Since offsets can go either forwards or backwards, this type needs to
- * be able to hold values from -(MAX_BUF_SIZE - 1) to MAX_BUF_SIZE - 1.
- */
-typedef int pattern_offset_t;
-
-typedef struct
-{
- struct rexp_node ** top_expression; /* was begalt */
- struct rexp_node ** last_expression; /* was laststart */
- pattern_offset_t inner_group_offset;
- regnum_t regnum;
-} compile_stack_elt_t;
-
-typedef struct
-{
- compile_stack_elt_t *stack;
- unsigned size;
- unsigned avail; /* Offset of next open position. */
-} compile_stack_type;
-
-
-#define INIT_COMPILE_STACK_SIZE 32
-
-#define COMPILE_STACK_EMPTY (compile_stack.avail == 0)
-#define COMPILE_STACK_FULL (compile_stack.avail == compile_stack.size)
-
-/* The next available element. */
-#define COMPILE_STACK_TOP (compile_stack.stack[compile_stack.avail])
-
-
-/* Set the bit for character C in a list. */
-#define SET_LIST_BIT(c) \
- (b[((unsigned char) (c)) / CHARBITS] \
- |= 1 << (((unsigned char) c) % CHARBITS))
-
-/* Get the next unsigned number in the uncompiled pattern. */
-#define GET_UNSIGNED_NUMBER(num) \
- { if (p != pend) \
- { \
- PATFETCH (c); \
- while (isdigit (c)) \
- { \
- if (num < 0) \
- num = 0; \
- num = num * 10 + c - '0'; \
- if (p == pend) \
- break; \
- PATFETCH (c); \
- } \
- } \
- }
-
-#define CHAR_CLASS_MAX_LENGTH 6 /* Namely, `xdigit'. */
-
-#define IS_CHAR_CLASS(string) \
- (!strcmp (string, "alpha") || !strcmp (string, "upper") \
- || !strcmp (string, "lower") || !strcmp (string, "digit") \
- || !strcmp (string, "alnum") || !strcmp (string, "xdigit") \
- || !strcmp (string, "space") || !strcmp (string, "print") \
- || !strcmp (string, "punct") || !strcmp (string, "graph") \
- || !strcmp (string, "cntrl") || !strcmp (string, "blank"))
-
-
-/* These predicates are used in regex_compile. */
-
-/* P points to just after a ^ in PATTERN. Return true if that ^ comes
- * after an alternative or a begin-subexpression. We assume there is at
- * least one character before the ^.
- */
-
-#ifdef __STDC__
-static boolean
-at_begline_loc_p (__const__ char *pattern, __const__ char * p, reg_syntax_t syntax)
-#else
-static boolean
-at_begline_loc_p (pattern, p, syntax)
- __const__ char *pattern;
- __const__ char * p;
- reg_syntax_t syntax;
-#endif
-{
- __const__ char *prev = p - 2;
- boolean prev_prev_backslash = ((prev > pattern) && (prev[-1] == '\\'));
-
- return
-
- (/* After a subexpression? */
- ((*prev == '(') && ((syntax & RE_NO_BK_PARENS) || prev_prev_backslash))
- ||
- /* After an alternative? */
- ((*prev == '|') && ((syntax & RE_NO_BK_VBAR) || prev_prev_backslash))
- );
-}
-
-/* The dual of at_begline_loc_p. This one is for $. We assume there is
- * at least one character after the $, i.e., `P < PEND'.
- */
-
-#ifdef __STDC__
-static boolean
-at_endline_loc_p (__const__ char *p, __const__ char *pend, int syntax)
-#else
-static boolean
-at_endline_loc_p (p, pend, syntax)
- __const__ char *p;
- __const__ char *pend;
- int syntax;
-#endif
-{
- __const__ char *next = p;
- boolean next_backslash = (*next == '\\');
- __const__ char *next_next = (p + 1 < pend) ? (p + 1) : 0;
-
- return
- (
- /* Before a subexpression? */
- ((syntax & RE_NO_BK_PARENS)
- ? (*next == ')')
- : (next_backslash && next_next && (*next_next == ')')))
- ||
- /* Before an alternative? */
- ((syntax & RE_NO_BK_VBAR)
- ? (*next == '|')
- : (next_backslash && next_next && (*next_next == '|')))
- );
-}
-
-
-unsigned char rx_id_translation[256] =
-{
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
- 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
- 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
- 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
- 40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
- 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
- 60, 61, 62, 63, 64, 65, 66, 67, 68, 69,
- 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
- 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
- 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,
-
- 100, 101, 102, 103, 104, 105, 106, 107, 108, 109,
- 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
- 120, 121, 122, 123, 124, 125, 126, 127, 128, 129,
- 130, 131, 132, 133, 134, 135, 136, 137, 138, 139,
- 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
- 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
- 160, 161, 162, 163, 164, 165, 166, 167, 168, 169,
- 170, 171, 172, 173, 174, 175, 176, 177, 178, 179,
- 180, 181, 182, 183, 184, 185, 186, 187, 188, 189,
- 190, 191, 192, 193, 194, 195, 196, 197, 198, 199,
-
- 200, 201, 202, 203, 204, 205, 206, 207, 208, 209,
- 210, 211, 212, 213, 214, 215, 216, 217, 218, 219,
- 220, 221, 222, 223, 224, 225, 226, 227, 228, 229,
- 230, 231, 232, 233, 234, 235, 236, 237, 238, 239,
- 240, 241, 242, 243, 244, 245, 246, 247, 248, 249,
- 250, 251, 252, 253, 254, 255
-};
-
-/* The compiler keeps an inverted translation table.
- * This looks up/inititalize elements.
- * VALID is an array of booleans that validate CACHE.
- */
-
-#ifdef __STDC__
-static rx_Bitset
-inverse_translation (struct re_pattern_buffer * rxb,
- char * valid, rx_Bitset cache,
- unsigned char * translate, int c)
-#else
-static rx_Bitset
-inverse_translation (rxb, valid, cache, translate, c)
- struct re_pattern_buffer * rxb;
- char * valid;
- rx_Bitset cache;
- unsigned char * translate;
- int c;
-#endif
-{
- rx_Bitset cs
- = cache + c * rx_bitset_numb_subsets (rxb->rx.local_cset_size);
-
- if (!valid[c])
- {
- int x;
- int c_tr = TRANSLATE(c);
- rx_bitset_null (rxb->rx.local_cset_size, cs);
- for (x = 0; x < 256; ++x) /* &&&& 13.37 */
- if (TRANSLATE(x) == c_tr)
- RX_bitset_enjoin (cs, x);
- valid[c] = 1;
- }
- return cs;
-}
-
-
-
-
-/* More subroutine declarations and macros for regex_compile. */
-
-/* Returns true if REGNUM is in one of COMPILE_STACK's elements and
- false if it's not. */
-
-#ifdef __STDC__
-static boolean
-group_in_compile_stack (compile_stack_type compile_stack, regnum_t regnum)
-#else
-static boolean
-group_in_compile_stack (compile_stack, regnum)
- compile_stack_type compile_stack;
- regnum_t regnum;
-#endif
-{
- int this_element;
-
- for (this_element = compile_stack.avail - 1;
- this_element >= 0;
- this_element--)
- if (compile_stack.stack[this_element].regnum == regnum)
- return true;
-
- return false;
-}
-
-
-/*
- * Read the ending character of a range (in a bracket expression) from the
- * uncompiled pattern *P_PTR (which ends at PEND). We assume the
- * starting character is in `P[-2]'. (`P[-1]' is the character `-'.)
- * Then we set the translation of all bits between the starting and
- * ending characters (inclusive) in the compiled pattern B.
- *
- * Return an error code.
- *
- * We use these short variable names so we can use the same macros as
- * `regex_compile' itself.
- */
-
-#ifdef __STDC__
-static reg_errcode_t
-compile_range (struct re_pattern_buffer * rxb, rx_Bitset cs,
- __const__ char ** p_ptr, __const__ char * pend,
- unsigned char * translate, reg_syntax_t syntax,
- rx_Bitset inv_tr, char * valid_inv_tr)
-#else
-static reg_errcode_t
-compile_range (rxb, cs, p_ptr, pend, translate, syntax, inv_tr, valid_inv_tr)
- struct re_pattern_buffer * rxb;
- rx_Bitset cs;
- __const__ char ** p_ptr;
- __const__ char * pend;
- unsigned char * translate;
- reg_syntax_t syntax;
- rx_Bitset inv_tr;
- char * valid_inv_tr;
-#endif
-{
- unsigned this_char;
-
- __const__ char *p = *p_ptr;
-
- unsigned char range_end;
- unsigned char range_start = TRANSLATE(p[-2]);
-
- if (p == pend)
- return REG_ERANGE;
-
- PATFETCH (range_end);
-
- (*p_ptr)++;
-
- if (range_start > range_end)
- return syntax & RE_NO_EMPTY_RANGES ? REG_ERANGE : REG_NOERROR;
-
- for (this_char = range_start; this_char <= range_end; this_char++)
- {
- rx_Bitset it =
- inverse_translation (rxb, valid_inv_tr, inv_tr, translate, this_char);
- rx_bitset_union (rxb->rx.local_cset_size, cs, it);
- }
-
- return REG_NOERROR;
-}
-
-
-/* This searches a regexp for backreference side effects.
- * It fills in the array OUT with 1 at the index of every register pair
- * referenced by a backreference.
- *
- * This is used to help optimize patterns for searching. The information is
- * useful because, if the caller doesn't want register values, backreferenced
- * registers are the only registers for which we need rx_backtrack.
- */
-
-#ifdef __STDC__
-static void
-find_backrefs (char * out, struct rexp_node * rexp,
- struct re_se_params * params)
-#else
-static void
-find_backrefs (out, rexp, params)
- char * out;
- struct rexp_node * rexp;
- struct re_se_params * params;
-#endif
-{
- if (rexp)
- switch (rexp->type)
- {
- case r_cset:
- case r_data:
- return;
- case r_alternate:
- case r_concat:
- case r_opt:
- case r_star:
- case r_2phase_star:
- find_backrefs (out, rexp->params.pair.left, params);
- find_backrefs (out, rexp->params.pair.right, params);
- return;
- case r_side_effect:
- if ( ((long)rexp->params.side_effect >= 0)
- && (params [(long)rexp->params.side_effect].se == re_se_backref))
- out[ params [(long)rexp->params.side_effect].op1] = 1;
- return;
- }
-}
-
-
-
-/* Returns 0 unless the pattern can match the empty string. */
-
-#ifdef __STDC__
-static int
-compute_fastset (struct re_pattern_buffer * rxb, struct rexp_node * rexp)
-#else
-static int
-compute_fastset (rxb, rexp)
- struct re_pattern_buffer * rxb;
- struct rexp_node * rexp;
-#endif
-{
- if (!rexp)
- return 1;
- switch (rexp->type)
- {
- case r_data:
- return 1;
- case r_cset:
- {
- rx_bitset_union (rxb->rx.local_cset_size,
- rxb->fastset, rexp->params.cset);
- }
- return 0;
- case r_concat:
- return (compute_fastset (rxb, rexp->params.pair.left)
- && compute_fastset (rxb, rexp->params.pair.right));
- case r_2phase_star:
- compute_fastset (rxb, rexp->params.pair.left);
- /* compute_fastset (rxb, rexp->params.pair.right); nope... */
- return 1;
- case r_alternate:
- return !!(compute_fastset (rxb, rexp->params.pair.left)
- + compute_fastset (rxb, rexp->params.pair.right));
- case r_opt:
- case r_star:
- compute_fastset (rxb, rexp->params.pair.left);
- return 1;
- case r_side_effect:
- return 1;
- }
-
- /* this should never happen */
- return 0;
-}
-
-
-/* returns
- * 1 -- yes, definately anchored by the given side effect.
- * 2 -- maybe anchored, maybe the empty string.
- * 0 -- definately not anchored
- * There is simply no other possibility.
- */
-
-#ifdef __STDC__
-static int
-is_anchored (struct rexp_node * rexp, rx_side_effect se)
-#else
-static int
-is_anchored (rexp, se)
- struct rexp_node * rexp;
- rx_side_effect se;
-#endif
-{
- if (!rexp)
- return 2;
- switch (rexp->type)
- {
- case r_cset:
- case r_data:
- return 0;
- case r_concat:
- case r_2phase_star:
- {
- int l = is_anchored (rexp->params.pair.left, se);
- return (l == 2 ? is_anchored (rexp->params.pair.right, se) : l);
- }
- case r_alternate:
- {
- int l = is_anchored (rexp->params.pair.left, se);
- int r = l ? is_anchored (rexp->params.pair.right, se) : 0;
-
- if (l == r)
- return l;
- else if ((l == 0) || (r == 0))
- return 0;
- else
- return 2;
- }
- case r_opt:
- case r_star:
- return is_anchored (rexp->params.pair.left, se) ? 2 : 0;
-
- case r_side_effect:
- return ((rexp->params.side_effect == se)
- ? 1 : 2);
- }
-
- /* this should never happen */
- return 0;
-}
-
-
-/* This removes register assignments that aren't required by backreferencing.
- * This can speed up explore_future, especially if it eliminates
- * non-determinism in the superstate NFA.
- *
- * NEEDED is an array of characters, presumably filled in by FIND_BACKREFS.
- * The non-zero elements of the array indicate which register assignments
- * can NOT be removed from the expression.
- */
-
-#ifdef __STDC__
-static struct rexp_node *
-remove_unecessary_side_effects (struct rx * rx, char * needed,
- struct rexp_node * rexp,
- struct re_se_params * params)
-#else
-static struct rexp_node *
-remove_unecessary_side_effects (rx, needed, rexp, params)
- struct rx * rx;
- char * needed;
- struct rexp_node * rexp;
- struct re_se_params * params;
-#endif
-{
- struct rexp_node * l;
- struct rexp_node * r;
- if (!rexp)
- return 0;
- else
- switch (rexp->type)
- {
- case r_cset:
- case r_data:
- return rexp;
- case r_alternate:
- case r_concat:
- case r_2phase_star:
- l = remove_unecessary_side_effects (rx, needed,
- rexp->params.pair.left, params);
- r = remove_unecessary_side_effects (rx, needed,
- rexp->params.pair.right, params);
- if ((l && r) || (rexp->type != r_concat))
- {
- rexp->params.pair.left = l;
- rexp->params.pair.right = r;
- return rexp;
- }
- else
- {
- rexp->params.pair.left = rexp->params.pair.right = 0;
- rx_free_rexp (rx, rexp);
- return l ? l : r;
- }
- case r_opt:
- case r_star:
- l = remove_unecessary_side_effects (rx, needed,
- rexp->params.pair.left, params);
- if (l)
- {
- rexp->params.pair.left = l;
- return rexp;
- }
- else
- {
- rexp->params.pair.left = 0;
- rx_free_rexp (rx, rexp);
- return 0;
- }
- case r_side_effect:
- {
- int se = (long)rexp->params.side_effect;
- if ( (se >= 0)
- && ( ((enum re_side_effects)params[se].se == re_se_lparen)
- || ((enum re_side_effects)params[se].se == re_se_rparen))
- && (params [se].op1 > 0)
- && (!needed [params [se].op1]))
- {
- rx_free_rexp (rx, rexp);
- return 0;
- }
- else
- return rexp;
- }
- }
-
- /* this should never happen */
- return 0;
-}
-
-
-
-#ifdef __STDC__
-static int
-pointless_if_repeated (struct rexp_node * node, struct re_se_params * params)
-#else
-static int
-pointless_if_repeated (node, params)
- struct rexp_node * node;
- struct re_se_params * params;
-#endif
-{
- if (!node)
- return 1;
- switch (node->type)
- {
- case r_cset:
- return 0;
- case r_alternate:
- case r_concat:
- case r_2phase_star:
- return (pointless_if_repeated (node->params.pair.left, params)
- && pointless_if_repeated (node->params.pair.right, params));
- case r_opt:
- case r_star:
- return pointless_if_repeated (node->params.pair.left, params);
- case r_side_effect:
- switch (((long)node->params.side_effect < 0)
- ? (enum re_side_effects)node->params.side_effect
- : (enum re_side_effects)params[(long)node->params.side_effect].se)
- {
- case re_se_try:
- case re_se_at_dot:
- case re_se_begbuf:
- case re_se_hat:
- case re_se_wordbeg:
- case re_se_wordbound:
- case re_se_notwordbound:
- case re_se_wordend:
- case re_se_endbuf:
- case re_se_dollar:
- case re_se_fail:
- case re_se_win:
- return 1;
- case re_se_lparen:
- case re_se_rparen:
- case re_se_iter:
- case re_se_end_iter:
- case re_se_syntax:
- case re_se_not_syntax:
- case re_se_backref:
- return 0;
- }
- case r_data:
- default:
- return 0;
- }
-}
-
-
-
-#ifdef __STDC__
-static int
-registers_on_stack (struct re_pattern_buffer * rxb,
- struct rexp_node * rexp, int in_danger,
- struct re_se_params * params)
-#else
-static int
-registers_on_stack (rxb, rexp, in_danger, params)
- struct re_pattern_buffer * rxb;
- struct rexp_node * rexp;
- int in_danger;
- struct re_se_params * params;
-#endif
-{
- if (!rexp)
- return 0;
- else
- switch (rexp->type)
- {
- case r_cset:
- case r_data:
- return 0;
- case r_alternate:
- case r_concat:
- return ( registers_on_stack (rxb, rexp->params.pair.left,
- in_danger, params)
- || (registers_on_stack
- (rxb, rexp->params.pair.right,
- in_danger, params)));
- case r_opt:
- return registers_on_stack (rxb, rexp->params.pair.left, 0, params);
- case r_star:
- return registers_on_stack (rxb, rexp->params.pair.left, 1, params);
- case r_2phase_star:
- return
- ( registers_on_stack (rxb, rexp->params.pair.left, 1, params)
- || registers_on_stack (rxb, rexp->params.pair.right, 1, params));
- case r_side_effect:
- {
- int se = (long)rexp->params.side_effect;
- if ( in_danger
- && (se >= 0)
- && (params [se].op1 > 0)
- && ( ((enum re_side_effects)params[se].se == re_se_lparen)
- || ((enum re_side_effects)params[se].se == re_se_rparen)))
- return 1;
- else
- return 0;
- }
- }
-
- /* this should never happen */
- return 0;
-}
-
-
-
-static char idempotent_complex_se[] =
-{
-#define RX_WANT_SE_DEFS 1
-#undef RX_DEF_SE
-#undef RX_DEF_CPLX_SE
-#define RX_DEF_SE(IDEM, NAME, VALUE)
-#define RX_DEF_CPLX_SE(IDEM, NAME, VALUE) IDEM,
-#include "rx.h"
-#undef RX_DEF_SE
-#undef RX_DEF_CPLX_SE
-#undef RX_WANT_SE_DEFS
- 23
-};
-
-static char idempotent_se[] =
-{
- 13,
-#define RX_WANT_SE_DEFS 1
-#undef RX_DEF_SE
-#undef RX_DEF_CPLX_SE
-#define RX_DEF_SE(IDEM, NAME, VALUE) IDEM,
-#define RX_DEF_CPLX_SE(IDEM, NAME, VALUE)
-#include "rx.h"
-#undef RX_DEF_SE
-#undef RX_DEF_CPLX_SE
-#undef RX_WANT_SE_DEFS
- 42
-};
-
-
-
-
-#ifdef __STDC__
-static int
-has_any_se (struct rx * rx,
- struct rexp_node * rexp)
-#else
-static int
-has_any_se (rx, rexp)
- struct rx * rx;
- struct rexp_node * rexp;
-#endif
-{
- if (!rexp)
- return 0;
-
- switch (rexp->type)
- {
- case r_cset:
- case r_data:
- return 0;
-
- case r_side_effect:
- return 1;
-
- case r_2phase_star:
- case r_concat:
- case r_alternate:
- return
- ( has_any_se (rx, rexp->params.pair.left)
- || has_any_se (rx, rexp->params.pair.right));
-
- case r_opt:
- case r_star:
- return has_any_se (rx, rexp->params.pair.left);
- }
-
- /* this should never happen */
- return 0;
-}
-
-
-
-/* This must be called AFTER `convert_hard_loops' for a given REXP. */
-#ifdef __STDC__
-static int
-has_non_idempotent_epsilon_path (struct rx * rx,
- struct rexp_node * rexp,
- struct re_se_params * params)
-#else
-static int
-has_non_idempotent_epsilon_path (rx, rexp, params)
- struct rx * rx;
- struct rexp_node * rexp;
- struct re_se_params * params;
-#endif
-{
- if (!rexp)
- return 0;
-
- switch (rexp->type)
- {
- case r_cset:
- case r_data:
- case r_star:
- return 0;
-
- case r_side_effect:
- return
- !((long)rexp->params.side_effect > 0
- ? idempotent_complex_se [ params [(long)rexp->params.side_effect].se ]
- : idempotent_se [-(long)rexp->params.side_effect]);
-
- case r_alternate:
- return
- ( has_non_idempotent_epsilon_path (rx,
- rexp->params.pair.left, params)
- || has_non_idempotent_epsilon_path (rx,
- rexp->params.pair.right, params));
-
- case r_2phase_star:
- case r_concat:
- return
- ( has_non_idempotent_epsilon_path (rx,
- rexp->params.pair.left, params)
- && has_non_idempotent_epsilon_path (rx,
- rexp->params.pair.right, params));
-
- case r_opt:
- return has_non_idempotent_epsilon_path (rx,
- rexp->params.pair.left, params);
- }
-
- /* this should never happen */
- return 0;
-}
-
-
-
-/* This computes rougly what it's name suggests. It can (and does) go wrong
- * in the direction of returning spurious 0 without causing disasters.
- */
-#ifdef __STDC__
-static int
-begins_with_complex_se (struct rx * rx, struct rexp_node * rexp)
-#else
-static int
-begins_with_complex_se (rx, rexp)
- struct rx * rx;
- struct rexp_node * rexp;
-#endif
-{
- if (!rexp)
- return 0;
-
- switch (rexp->type)
- {
- case r_cset:
- case r_data:
- return 0;
-
- case r_side_effect:
- return ((long)rexp->params.side_effect >= 0);
-
- case r_alternate:
- return
- ( begins_with_complex_se (rx, rexp->params.pair.left)
- && begins_with_complex_se (rx, rexp->params.pair.right));
-
-
- case r_concat:
- return has_any_se (rx, rexp->params.pair.left);
- case r_opt:
- case r_star:
- case r_2phase_star:
- return 0;
- }
-
- /* this should never happen */
- return 0;
-}
-
-
-/* This destructively removes some of the re_se_tv side effects from
- * a rexp tree. In particular, during parsing re_se_tv was inserted on the
- * right half of every | to guarantee that posix path preference could be
- * honored. This function removes some which it can be determined aren't
- * needed.
- */
-
-#ifdef __STDC__
-static void
-speed_up_alt (struct rx * rx,
- struct rexp_node * rexp,
- int unposix)
-#else
-static void
-speed_up_alt (rx, rexp, unposix)
- struct rx * rx;
- struct rexp_node * rexp;
- int unposix;
-#endif
-{
- if (!rexp)
- return;
-
- switch (rexp->type)
- {
- case r_cset:
- case r_data:
- case r_side_effect:
- return;
-
- case r_opt:
- case r_star:
- speed_up_alt (rx, rexp->params.pair.left, unposix);
- return;
-
- case r_2phase_star:
- case r_concat:
- speed_up_alt (rx, rexp->params.pair.left, unposix);
- speed_up_alt (rx, rexp->params.pair.right, unposix);
- return;
-
- case r_alternate:
- /* the right child is guaranteed to be (concat re_se_tv <subexp>) */
-
- speed_up_alt (rx, rexp->params.pair.left, unposix);
- speed_up_alt (rx, rexp->params.pair.right->params.pair.right, unposix);
-
- if ( unposix
- || (begins_with_complex_se
- (rx, rexp->params.pair.right->params.pair.right))
- || !( has_any_se (rx, rexp->params.pair.right->params.pair.right)
- || has_any_se (rx, rexp->params.pair.left)))
- {
- struct rexp_node * conc = rexp->params.pair.right;
- rexp->params.pair.right = conc->params.pair.right;
- conc->params.pair.right = 0;
- rx_free_rexp (rx, conc);
- }
- }
-}
-
-
-
-
-
-/* `regex_compile' compiles PATTERN (of length SIZE) according to SYNTAX.
- Returns one of error codes defined in `regex.h', or zero for success.
-
- Assumes the `allocated' (and perhaps `buffer') and `translate'
- fields are set in BUFP on entry.
-
- If it succeeds, results are put in BUFP (if it returns an error, the
- contents of BUFP are undefined):
- `buffer' is the compiled pattern;
- `syntax' is set to SYNTAX;
- `used' is set to the length of the compiled pattern;
- `fastmap_accurate' is set to zero;
- `re_nsub' is set to the number of groups in PATTERN;
- `not_bol' and `not_eol' are set to zero.
-
- The `fastmap' and `newline_anchor' fields are neither
- examined nor set. */
-
-
-
-#ifdef __STDC__
-RX_DECL reg_errcode_t
-rx_compile (__const__ char *pattern, int size,
- reg_syntax_t syntax,
- struct re_pattern_buffer * rxb)
-#else
-RX_DECL reg_errcode_t
-rx_compile (pattern, size, syntax, rxb)
- __const__ char *pattern;
- int size;
- reg_syntax_t syntax;
- struct re_pattern_buffer * rxb;
-#endif
-{
- RX_subset
- inverse_translate [CHAR_SET_SIZE * rx_bitset_numb_subsets(CHAR_SET_SIZE)];
- char
- validate_inv_tr [CHAR_SET_SIZE * rx_bitset_numb_subsets(CHAR_SET_SIZE)];
-
- /* We fetch characters from PATTERN here. Even though PATTERN is
- `char *' (i.e., signed), we declare these variables as unsigned, so
- they can be reliably used as array indices. */
- register unsigned char c, c1;
-
- /* A random tempory spot in PATTERN. */
- __const__ char *p1;
-
- /* Keeps track of unclosed groups. */
- compile_stack_type compile_stack;
-
- /* Points to the current (ending) position in the pattern. */
- __const__ char *p = pattern;
- __const__ char *pend = pattern + size;
-
- /* How to translate the characters in the pattern. */
- unsigned char *translate = (rxb->translate
- ? rxb->translate
- : rx_id_translation);
-
- /* When parsing is done, this will hold the expression tree. */
- struct rexp_node * rexp = 0;
-
- /* In the midst of compilation, this holds onto the regexp
- * first parst while rexp goes on to aquire additional constructs.
- */
- struct rexp_node * orig_rexp = 0;
- struct rexp_node * fewer_side_effects = 0;
-
- /* This and top_expression are saved on the compile stack. */
- struct rexp_node ** top_expression = &rexp;
- struct rexp_node ** last_expression = top_expression;
-
- /* Parameter to `goto append_node' */
- struct rexp_node * append;
-
- /* Counts open-groups as they are encountered. This is the index of the
- * innermost group being compiled.
- */
- regnum_t regnum = 0;
-
- /* Place in the uncompiled pattern (i.e., the {) to
- * which to go back if the interval is invalid.
- */
- __const__ char *beg_interval;
-
- struct re_se_params * params = 0;
- int paramc = 0; /* How many complex side effects so far? */
-
- rx_side_effect side; /* param to `goto add_side_effect' */
-
- bzero (validate_inv_tr, sizeof (validate_inv_tr));
-
- rxb->rx.instruction_table = rx_id_instruction_table;
-
-
- /* Initialize the compile stack. */
- compile_stack.stack = (( compile_stack_elt_t *) malloc ((INIT_COMPILE_STACK_SIZE) * sizeof ( compile_stack_elt_t)));
- if (compile_stack.stack == 0)
- return REG_ESPACE;
-
- compile_stack.size = INIT_COMPILE_STACK_SIZE;
- compile_stack.avail = 0;
-
- /* Initialize the pattern buffer. */
- rxb->rx.cache = &default_cache;
- rxb->syntax = syntax;
- rxb->fastmap_accurate = 0;
- rxb->not_bol = rxb->not_eol = 0;
- rxb->least_subs = 0;
-
- /* Always count groups, whether or not rxb->no_sub is set.
- * The whole pattern is implicitly group 0, so counting begins
- * with 1.
- */
- rxb->re_nsub = 0;
-
-#if !defined (emacs) && !defined (SYNTAX_TABLE)
- /* Initialize the syntax table. */
- init_syntax_once ();
-#endif
-
- /* Loop through the uncompiled pattern until we're at the end. */
- while (p != pend)
- {
- PATFETCH (c);
-
- switch (c)
- {
- case '^':
- {
- if ( /* If at start of pattern, it's an operator. */
- p == pattern + 1
- /* If context independent, it's an operator. */
- || syntax & RE_CONTEXT_INDEP_ANCHORS
- /* Otherwise, depends on what's come before. */
- || at_begline_loc_p (pattern, p, syntax))
- {
- struct rexp_node * n
- = rx_mk_r_side_effect (&rxb->rx, (rx_side_effect)re_se_hat);
- if (!n)
- return REG_ESPACE;
- append = n;
- goto append_node;
- }
- else
- goto normal_char;
- }
- break;
-
-
- case '$':
- {
- if ( /* If at end of pattern, it's an operator. */
- p == pend
- /* If context independent, it's an operator. */
- || syntax & RE_CONTEXT_INDEP_ANCHORS
- /* Otherwise, depends on what's next. */
- || at_endline_loc_p (p, pend, syntax))
- {
- struct rexp_node * n
- = rx_mk_r_side_effect (&rxb->rx, (rx_side_effect)re_se_dollar);
- if (!n)
- return REG_ESPACE;
- append = n;
- goto append_node;
- }
- else
- goto normal_char;
- }
- break;
-
-
- case '+':
- case '?':
- if ((syntax & RE_BK_PLUS_QM)
- || (syntax & RE_LIMITED_OPS))
- goto normal_char;
-
- handle_plus:
- case '*':
- /* If there is no previous pattern... */
- if (pointless_if_repeated (*last_expression, params))
- {
- if (syntax & RE_CONTEXT_INVALID_OPS)
- return REG_BADRPT;
- else if (!(syntax & RE_CONTEXT_INDEP_OPS))
- goto normal_char;
- }
-
- {
- /* 1 means zero (many) matches is allowed. */
- char zero_times_ok = 0, many_times_ok = 0;
-
- /* If there is a sequence of repetition chars, collapse it
- down to just one (the right one). We can't combine
- interval operators with these because of, e.g., `a{2}*',
- which should only match an even number of `a's. */
-
- for (;;)
- {
- zero_times_ok |= c != '+';
- many_times_ok |= c != '?';
-
- if (p == pend)
- break;
-
- PATFETCH (c);
-
- if (c == '*'
- || (!(syntax & RE_BK_PLUS_QM) && (c == '+' || c == '?')))
- ;
-
- else if (syntax & RE_BK_PLUS_QM && c == '\\')
- {
- if (p == pend) return REG_EESCAPE;
-
- PATFETCH (c1);
- if (!(c1 == '+' || c1 == '?'))
- {
- PATUNFETCH;
- PATUNFETCH;
- break;
- }
-
- c = c1;
- }
- else
- {
- PATUNFETCH;
- break;
- }
-
- /* If we get here, we found another repeat character. */
- }
-
- /* Star, etc. applied to an empty pattern is equivalent
- to an empty pattern. */
- if (!last_expression)
- break;
-
- /* Now we know whether or not zero matches is allowed
- * and also whether or not two or more matches is allowed.
- */
-
- {
- struct rexp_node * inner_exp = *last_expression;
- int need_sync = 0;
-
- if (many_times_ok
- && has_non_idempotent_epsilon_path (&rxb->rx,
- inner_exp, params))
- {
- struct rexp_node * pusher
- = rx_mk_r_side_effect (&rxb->rx,
- (rx_side_effect)re_se_pushpos);
- struct rexp_node * checker
- = rx_mk_r_side_effect (&rxb->rx,
- (rx_side_effect)re_se_chkpos);
- struct rexp_node * pushback
- = rx_mk_r_side_effect (&rxb->rx,
- (rx_side_effect)re_se_pushback);
- rx_Bitset cs = rx_cset (&rxb->rx);
- struct rexp_node * lit_t = rx_mk_r_cset (&rxb->rx, cs);
- struct rexp_node * fake_state
- = rx_mk_r_concat (&rxb->rx, pushback, lit_t);
- struct rexp_node * phase2
- = rx_mk_r_concat (&rxb->rx, checker, fake_state);
- struct rexp_node * popper
- = rx_mk_r_side_effect (&rxb->rx,
- (rx_side_effect)re_se_poppos);
- struct rexp_node * star
- = rx_mk_r_2phase_star (&rxb->rx, inner_exp, phase2);
- struct rexp_node * a
- = rx_mk_r_concat (&rxb->rx, pusher, star);
- struct rexp_node * whole_thing
- = rx_mk_r_concat (&rxb->rx, a, popper);
- if (!(pusher && star && pushback && lit_t && fake_state
- && lit_t && phase2 && checker && popper
- && a && whole_thing))
- return REG_ESPACE;
- RX_bitset_enjoin (cs, 't');
- *last_expression = whole_thing;
- }
- else
- {
- struct rexp_node * star =
- (many_times_ok ? rx_mk_r_star : rx_mk_r_opt)
- (&rxb->rx, *last_expression);
- if (!star)
- return REG_ESPACE;
- *last_expression = star;
- need_sync = has_any_se (&rxb->rx, *last_expression);
- }
- if (!zero_times_ok)
- {
- struct rexp_node * concat
- = rx_mk_r_concat (&rxb->rx,
- rx_copy_rexp (&rxb->rx,
- inner_exp),
- *last_expression);
- if (!concat)
- return REG_ESPACE;
- *last_expression = concat;
- }
- if (need_sync)
- {
- int sync_se = paramc;
- params = (params
- ? ((struct re_se_params *)
- realloc (params,
- sizeof (*params) * (1 + paramc)))
- : ((struct re_se_params *)
- malloc (sizeof (*params))));
- if (!params)
- return REG_ESPACE;
- ++paramc;
- params [sync_se].se = re_se_tv;
- side = (rx_side_effect)sync_se;
- goto add_side_effect;
- }
- }
- /* The old regex.c used to optimize `.*\n'.
- * Maybe rx should too?
- */
- }
- break;
-
-
- case '.':
- {
- rx_Bitset cs = rx_cset (&rxb->rx);
- struct rexp_node * n = rx_mk_r_cset (&rxb->rx, cs);
- if (!(cs && n))
- return REG_ESPACE;
-
- rx_bitset_universe (rxb->rx.local_cset_size, cs);
- if (!(rxb->syntax & RE_DOT_NEWLINE))
- RX_bitset_remove (cs, '\n');
- if (!(rxb->syntax & RE_DOT_NOT_NULL))
- RX_bitset_remove (cs, 0);
-
- append = n;
- goto append_node;
- break;
- }
-
-
- case '[':
- if (p == pend) return REG_EBRACK;
- {
- boolean had_char_class = false;
- rx_Bitset cs = rx_cset (&rxb->rx);
- struct rexp_node * node = rx_mk_r_cset (&rxb->rx, cs);
- int is_inverted = *p == '^';
-
- if (!(node && cs))
- return REG_ESPACE;
-
- /* This branch of the switch is normally exited with
- *`goto append_node'
- */
- append = node;
-
- if (is_inverted)
- p++;
-
- /* Remember the first position in the bracket expression. */
- p1 = p;
-
- /* Read in characters and ranges, setting map bits. */
- for (;;)
- {
- if (p == pend) return REG_EBRACK;
-
- PATFETCH (c);
-
- /* \ might escape characters inside [...] and [^...]. */
- if ((syntax & RE_BACKSLASH_ESCAPE_IN_LISTS) && c == '\\')
- {
- if (p == pend) return REG_EESCAPE;
-
- PATFETCH (c1);
- {
- rx_Bitset it = inverse_translation (rxb,
- validate_inv_tr,
- inverse_translate,
- translate,
- c1);
- rx_bitset_union (rxb->rx.local_cset_size, cs, it);
- }
- continue;
- }
-
- /* Could be the end of the bracket expression. If it's
- not (i.e., when the bracket expression is `[]' so
- far), the ']' character bit gets set way below. */
- if (c == ']' && p != p1 + 1)
- goto finalize_class_and_append;
-
- /* Look ahead to see if it's a range when the last thing
- was a character class. */
- if (had_char_class && c == '-' && *p != ']')
- return REG_ERANGE;
-
- /* Look ahead to see if it's a range when the last thing
- was a character: if this is a hyphen not at the
- beginning or the end of a list, then it's the range
- operator. */
- if (c == '-'
- && !(p - 2 >= pattern && p[-2] == '[')
- && !(p - 3 >= pattern && p[-3] == '[' && p[-2] == '^')
- && *p != ']')
- {
- reg_errcode_t ret
- = compile_range (rxb, cs, &p, pend, translate, syntax,
- inverse_translate, validate_inv_tr);
- if (ret != REG_NOERROR) return ret;
- }
-
- else if (p[0] == '-' && p[1] != ']')
- { /* This handles ranges made up of characters only. */
- reg_errcode_t ret;
-
- /* Move past the `-'. */
- PATFETCH (c1);
-
- ret = compile_range (rxb, cs, &p, pend, translate, syntax,
- inverse_translate, validate_inv_tr);
- if (ret != REG_NOERROR) return ret;
- }
-
- /* See if we're at the beginning of a possible character
- class. */
-
- else if ((syntax & RE_CHAR_CLASSES)
- && (c == '[') && (*p == ':'))
- {
- char str[CHAR_CLASS_MAX_LENGTH + 1];
-
- PATFETCH (c);
- c1 = 0;
-
- /* If pattern is `[[:'. */
- if (p == pend) return REG_EBRACK;
-
- for (;;)
- {
- PATFETCH (c);
- if (c == ':' || c == ']' || p == pend
- || c1 == CHAR_CLASS_MAX_LENGTH)
- break;
- str[c1++] = c;
- }
- str[c1] = '\0';
-
- /* If isn't a word bracketed by `[:' and:`]':
- undo the ending character, the letters, and leave
- the leading `:' and `[' (but set bits for them). */
- if (c == ':' && *p == ']')
- {
- int ch;
- boolean is_alnum = !strcmp (str, "alnum");
- boolean is_alpha = !strcmp (str, "alpha");
- boolean is_blank = !strcmp (str, "blank");
- boolean is_cntrl = !strcmp (str, "cntrl");
- boolean is_digit = !strcmp (str, "digit");
- boolean is_graph = !strcmp (str, "graph");
- boolean is_lower = !strcmp (str, "lower");
- boolean is_print = !strcmp (str, "print");
- boolean is_punct = !strcmp (str, "punct");
- boolean is_space = !strcmp (str, "space");
- boolean is_upper = !strcmp (str, "upper");
- boolean is_xdigit = !strcmp (str, "xdigit");
-
- if (!IS_CHAR_CLASS (str)) return REG_ECTYPE;
-
- /* Throw away the ] at the end of the character
- class. */
- PATFETCH (c);
-
- if (p == pend) return REG_EBRACK;
-
- for (ch = 0; ch < 1 << CHARBITS; ch++)
- {
- if ( (is_alnum && isalnum (ch))
- || (is_alpha && isalpha (ch))
- || (is_blank && isblank (ch))
- || (is_cntrl && iscntrl (ch))
- || (is_digit && isdigit (ch))
- || (is_graph && isgraph (ch))
- || (is_lower && islower (ch))
- || (is_print && isprint (ch))
- || (is_punct && ispunct (ch))
- || (is_space && isspace (ch))
- || (is_upper && isupper (ch))
- || (is_xdigit && isxdigit (ch)))
- {
- rx_Bitset it =
- inverse_translation (rxb,
- validate_inv_tr,
- inverse_translate,
- translate,
- ch);
- rx_bitset_union (rxb->rx.local_cset_size,
- cs, it);
- }
- }
- had_char_class = true;
- }
- else
- {
- c1++;
- while (c1--)
- PATUNFETCH;
- {
- rx_Bitset it =
- inverse_translation (rxb,
- validate_inv_tr,
- inverse_translate,
- translate,
- '[');
- rx_bitset_union (rxb->rx.local_cset_size,
- cs, it);
- }
- {
- rx_Bitset it =
- inverse_translation (rxb,
- validate_inv_tr,
- inverse_translate,
- translate,
- ':');
- rx_bitset_union (rxb->rx.local_cset_size,
- cs, it);
- }
- had_char_class = false;
- }
- }
- else
- {
- had_char_class = false;
- {
- rx_Bitset it = inverse_translation (rxb,
- validate_inv_tr,
- inverse_translate,
- translate,
- c);
- rx_bitset_union (rxb->rx.local_cset_size, cs, it);
- }
- }
- }
-
- finalize_class_and_append:
- if (is_inverted)
- {
- rx_bitset_complement (rxb->rx.local_cset_size, cs);
- if (syntax & RE_HAT_LISTS_NOT_NEWLINE)
- RX_bitset_remove (cs, '\n');
- }
- goto append_node;
- }
- break;
-
-
- case '(':
- if (syntax & RE_NO_BK_PARENS)
- goto handle_open;
- else
- goto normal_char;
-
-
- case ')':
- if (syntax & RE_NO_BK_PARENS)
- goto handle_close;
- else
- goto normal_char;
-
-
- case '\n':
- if (syntax & RE_NEWLINE_ALT)
- goto handle_alt;
- else
- goto normal_char;
-
-
- case '|':
- if (syntax & RE_NO_BK_VBAR)
- goto handle_alt;
- else
- goto normal_char;
-
-
- case '{':
- if ((syntax & RE_INTERVALS) && (syntax & RE_NO_BK_BRACES))
- goto handle_interval;
- else
- goto normal_char;
-
-
- case '\\':
- if (p == pend) return REG_EESCAPE;
-
- /* Do not translate the character after the \, so that we can
- distinguish, e.g., \B from \b, even if we normally would
- translate, e.g., B to b. */
- PATFETCH_RAW (c);
-
- switch (c)
- {
- case '(':
- if (syntax & RE_NO_BK_PARENS)
- goto normal_backslash;
-
- handle_open:
- rxb->re_nsub++;
- regnum++;
- if (COMPILE_STACK_FULL)
- {
- ((compile_stack.stack) =
- (compile_stack_elt_t *) realloc (compile_stack.stack, ( compile_stack.size << 1) * sizeof (
- compile_stack_elt_t)));
- if (compile_stack.stack == 0) return REG_ESPACE;
-
- compile_stack.size <<= 1;
- }
-
- if (*last_expression)
- {
- struct rexp_node * concat
- = rx_mk_r_concat (&rxb->rx, *last_expression, 0);
- if (!concat)
- return REG_ESPACE;
- *last_expression = concat;
- last_expression = &concat->params.pair.right;
- }
-
- /*
- * These are the values to restore when we hit end of this
- * group.
- */
- COMPILE_STACK_TOP.top_expression = top_expression;
- COMPILE_STACK_TOP.last_expression = last_expression;
- COMPILE_STACK_TOP.regnum = regnum;
-
- compile_stack.avail++;
-
- top_expression = last_expression;
- break;
-
-
- case ')':
- if (syntax & RE_NO_BK_PARENS) goto normal_backslash;
-
- handle_close:
- /* See similar code for backslashed left paren above. */
- if (COMPILE_STACK_EMPTY)
- if (syntax & RE_UNMATCHED_RIGHT_PAREN_ORD)
- goto normal_char;
- else
- return REG_ERPAREN;
-
- /* Since we just checked for an empty stack above, this
- ``can't happen''. */
-
- {
- /* We don't just want to restore into `regnum', because
- later groups should continue to be numbered higher,
- as in `(ab)c(de)' -- the second group is #2. */
- regnum_t this_group_regnum;
- struct rexp_node ** inner = top_expression;
-
- compile_stack.avail--;
- top_expression = COMPILE_STACK_TOP.top_expression;
- last_expression = COMPILE_STACK_TOP.last_expression;
- this_group_regnum = COMPILE_STACK_TOP.regnum;
- {
- int left_se = paramc;
- int right_se = paramc + 1;
-
- params = (params
- ? ((struct re_se_params *)
- realloc (params,
- (paramc + 2) * sizeof (params[0])))
- : ((struct re_se_params *)
- malloc (2 * sizeof (params[0]))));
- if (!params)
- return REG_ESPACE;
- paramc += 2;
-
- params[left_se].se = re_se_lparen;
- params[left_se].op1 = this_group_regnum;
- params[right_se].se = re_se_rparen;
- params[right_se].op1 = this_group_regnum;
- {
- struct rexp_node * left
- = rx_mk_r_side_effect (&rxb->rx,
- (rx_side_effect)left_se);
- struct rexp_node * right
- = rx_mk_r_side_effect (&rxb->rx,
- (rx_side_effect)right_se);
- struct rexp_node * c1
- = (*inner
- ? rx_mk_r_concat (&rxb->rx, left, *inner) : left);
- struct rexp_node * c2
- = rx_mk_r_concat (&rxb->rx, c1, right);
- if (!(left && right && c1 && c2))
- return REG_ESPACE;
- *inner = c2;
- }
- }
- break;
- }
-
- case '|': /* `\|'. */
- if ((syntax & RE_LIMITED_OPS) || (syntax & RE_NO_BK_VBAR))
- goto normal_backslash;
- handle_alt:
- if (syntax & RE_LIMITED_OPS)
- goto normal_char;
-
- {
- struct rexp_node * alt
- = rx_mk_r_alternate (&rxb->rx, *top_expression, 0);
- if (!alt)
- return REG_ESPACE;
- *top_expression = alt;
- last_expression = &alt->params.pair.right;
- {
- int sync_se = paramc;
-
- params = (params
- ? ((struct re_se_params *)
- realloc (params,
- (paramc + 1) * sizeof (params[0])))
- : ((struct re_se_params *)
- malloc (sizeof (params[0]))));
- if (!params)
- return REG_ESPACE;
- ++paramc;
-
- params[sync_se].se = re_se_tv;
- {
- struct rexp_node * sync
- = rx_mk_r_side_effect (&rxb->rx,
- (rx_side_effect)sync_se);
- struct rexp_node * conc
- = rx_mk_r_concat (&rxb->rx, sync, 0);
-
- if (!sync || !conc)
- return REG_ESPACE;
-
- *last_expression = conc;
- last_expression = &conc->params.pair.right;
- }
- }
- }
- break;
-
-
- case '{':
- /* If \{ is a literal. */
- if (!(syntax & RE_INTERVALS)
- /* If we're at `\{' and it's not the open-interval
- operator. */
- || ((syntax & RE_INTERVALS) && (syntax & RE_NO_BK_BRACES))
- || (p - 2 == pattern && p == pend))
- goto normal_backslash;
-
- handle_interval:
- {
- /* If got here, then the syntax allows intervals. */
-
- /* At least (most) this many matches must be made. */
- int lower_bound = -1, upper_bound = -1;
-
- beg_interval = p - 1;
-
- if (p == pend)
- {
- if (syntax & RE_NO_BK_BRACES)
- goto unfetch_interval;
- else
- return REG_EBRACE;
- }
-
- GET_UNSIGNED_NUMBER (lower_bound);
-
- if (c == ',')
- {
- GET_UNSIGNED_NUMBER (upper_bound);
- if (upper_bound < 0) upper_bound = RE_DUP_MAX;
- }
- else
- /* Interval such as `{1}' => match exactly once. */
- upper_bound = lower_bound;
-
- if (lower_bound < 0 || upper_bound > RE_DUP_MAX
- || lower_bound > upper_bound)
- {
- if (syntax & RE_NO_BK_BRACES)
- goto unfetch_interval;
- else
- return REG_BADBR;
- }
-
- if (!(syntax & RE_NO_BK_BRACES))
- {
- if (c != '\\') return REG_EBRACE;
- PATFETCH (c);
- }
-
- if (c != '}')
- {
- if (syntax & RE_NO_BK_BRACES)
- goto unfetch_interval;
- else
- return REG_BADBR;
- }
-
- /* We just parsed a valid interval. */
-
- /* If it's invalid to have no preceding re. */
- if (pointless_if_repeated (*last_expression, params))
- {
- if (syntax & RE_CONTEXT_INVALID_OPS)
- return REG_BADRPT;
- else if (!(syntax & RE_CONTEXT_INDEP_OPS))
- goto unfetch_interval;
- /* was: else laststart = b; */
- }
-
- /* If the upper bound is zero, don't want to iterate
- * at all.
- */
- if (upper_bound == 0)
- {
- if (*last_expression)
- {
- rx_free_rexp (&rxb->rx, *last_expression);
- *last_expression = 0;
- }
- }
- else
- /* Otherwise, we have a nontrivial interval. */
- {
- int iter_se = paramc;
- int end_se = paramc + 1;
- params = (params
- ? ((struct re_se_params *)
- realloc (params,
- sizeof (*params) * (2 + paramc)))
- : ((struct re_se_params *)
- malloc (2 * sizeof (*params))));
- if (!params)
- return REG_ESPACE;
- paramc += 2;
- params [iter_se].se = re_se_iter;
- params [iter_se].op1 = lower_bound;
- params[iter_se].op2 = upper_bound;
-
- params[end_se].se = re_se_end_iter;
- params[end_se].op1 = lower_bound;
- params[end_se].op2 = upper_bound;
- {
- struct rexp_node * push0
- = rx_mk_r_side_effect (&rxb->rx,
- (rx_side_effect)re_se_push0);
- struct rexp_node * start_one_iter
- = rx_mk_r_side_effect (&rxb->rx,
- (rx_side_effect)iter_se);
- struct rexp_node * phase1
- = rx_mk_r_concat (&rxb->rx, start_one_iter,
- *last_expression);
- struct rexp_node * pushback
- = rx_mk_r_side_effect (&rxb->rx,
- (rx_side_effect)re_se_pushback);
- rx_Bitset cs = rx_cset (&rxb->rx);
- struct rexp_node * lit_t
- = rx_mk_r_cset (&rxb->rx, cs);
- struct rexp_node * phase2
- = rx_mk_r_concat (&rxb->rx, pushback, lit_t);
- struct rexp_node * loop
- = rx_mk_r_2phase_star (&rxb->rx, phase1, phase2);
- struct rexp_node * push_n_loop
- = rx_mk_r_concat (&rxb->rx, push0, loop);
- struct rexp_node * final_test
- = rx_mk_r_side_effect (&rxb->rx,
- (rx_side_effect)end_se);
- struct rexp_node * full_exp
- = rx_mk_r_concat (&rxb->rx, push_n_loop, final_test);
-
- if (!(push0 && start_one_iter && phase1
- && pushback && lit_t && phase2
- && loop && push_n_loop && final_test && full_exp))
- return REG_ESPACE;
-
- RX_bitset_enjoin(cs, 't');
-
- *last_expression = full_exp;
- }
- }
- beg_interval = 0;
- }
- break;
-
- unfetch_interval:
- /* If an invalid interval, match the characters as literals. */
- p = beg_interval;
- beg_interval = 0;
-
- /* normal_char and normal_backslash need `c'. */
- PATFETCH (c);
-
- if (!(syntax & RE_NO_BK_BRACES))
- {
- if (p > pattern && p[-1] == '\\')
- goto normal_backslash;
- }
- goto normal_char;
-
-#ifdef emacs
- /* There is no way to specify the before_dot and after_dot
- operators. rms says this is ok. --karl */
- case '=':
- side = (rx_side_effect)rx_se_at_dot;
- goto add_side_effect;
- break;
-
- case 's':
- case 'S':
- {
- rx_Bitset cs = rx_cset (&rxb->rx);
- struct rexp_node * set = rx_mk_r_cset (&rxb->rx, cs);
- if (!(cs && set))
- return REG_ESPACE;
- if (c == 'S')
- rx_bitset_universe (rxb->rx.local_cset_size, cs);
-
- PATFETCH (c);
- {
- int x;
- enum syntaxcode code = syntax_spec_code [c];
- for (x = 0; x < 256; ++x)
- {
-
- if (SYNTAX (x) == code)
- {
- rx_Bitset it =
- inverse_translation (rxb, validate_inv_tr,
- inverse_translate,
- translate, x);
- rx_bitset_xor (rxb->rx.local_cset_size, cs, it);
- }
- }
- }
- append = set;
- goto append_node;
- }
- break;
-#endif /* emacs */
-
-
- case 'w':
- case 'W':
- {
- rx_Bitset cs = rx_cset (&rxb->rx);
- struct rexp_node * n = (cs ? rx_mk_r_cset (&rxb->rx, cs) : 0);
- if (!(cs && n))
- return REG_ESPACE;
- if (c == 'W')
- rx_bitset_universe (rxb->rx.local_cset_size ,cs);
- {
- int x;
- for (x = rxb->rx.local_cset_size - 1; x > 0; --x)
- if (SYNTAX(x) & Sword)
- RX_bitset_toggle (cs, x);
- }
- append = n;
- goto append_node;
- }
- break;
-
-/* With a little extra work, some of these side effects could be optimized
- * away (basicly by looking at what we already know about the surrounding
- * chars).
- */
- case '<':
- side = (rx_side_effect)re_se_wordbeg;
- goto add_side_effect;
- break;
-
- case '>':
- side = (rx_side_effect)re_se_wordend;
- goto add_side_effect;
- break;
-
- case 'b':
- side = (rx_side_effect)re_se_wordbound;
- goto add_side_effect;
- break;
-
- case 'B':
- side = (rx_side_effect)re_se_notwordbound;
- goto add_side_effect;
- break;
-
- case '`':
- side = (rx_side_effect)re_se_begbuf;
- goto add_side_effect;
- break;
-
- case '\'':
- side = (rx_side_effect)re_se_endbuf;
- goto add_side_effect;
- break;
-
- add_side_effect:
- {
- struct rexp_node * se
- = rx_mk_r_side_effect (&rxb->rx, side);
- if (!se)
- return REG_ESPACE;
- append = se;
- goto append_node;
- }
- break;
-
- case '1': case '2': case '3': case '4': case '5':
- case '6': case '7': case '8': case '9':
- if (syntax & RE_NO_BK_REFS)
- goto normal_char;
-
- c1 = c - '0';
-
- if (c1 > regnum)
- return REG_ESUBREG;
-
- /* Can't back reference to a subexpression if inside of it. */
- if (group_in_compile_stack (compile_stack, c1))
- return REG_ESUBREG;
-
- {
- int backref_se = paramc;
- params = (params
- ? ((struct re_se_params *)
- realloc (params,
- sizeof (*params) * (1 + paramc)))
- : ((struct re_se_params *)
- malloc (sizeof (*params))));
- if (!params)
- return REG_ESPACE;
- ++paramc;
- params[backref_se].se = re_se_backref;
- params[backref_se].op1 = c1;
- side = (rx_side_effect)backref_se;
- goto add_side_effect;
- }
- break;
-
- case '+':
- case '?':
- if (syntax & RE_BK_PLUS_QM)
- goto handle_plus;
- else
- goto normal_backslash;
-
- default:
- normal_backslash:
- /* You might think it would be useful for \ to mean
- not to translate; but if we don't translate it
- it will never match anything. */
- c = TRANSLATE (c);
- goto normal_char;
- }
- break;
-
-
- default:
- /* Expects the character in `c'. */
- normal_char:
- {
- rx_Bitset cs = rx_cset(&rxb->rx);
- struct rexp_node * match = rx_mk_r_cset (&rxb->rx, cs);
- rx_Bitset it;
- if (!(cs && match))
- return REG_ESPACE;
- it = inverse_translation (rxb, validate_inv_tr,
- inverse_translate, translate, c);
- rx_bitset_union (CHAR_SET_SIZE, cs, it);
- append = match;
-
- append_node:
- /* This genericly appends the rexp APPEND to *LAST_EXPRESSION
- * and then parses the next character normally.
- */
- if (*last_expression)
- {
- struct rexp_node * concat
- = rx_mk_r_concat (&rxb->rx, *last_expression, append);
- if (!concat)
- return REG_ESPACE;
- *last_expression = concat;
- last_expression = &concat->params.pair.right;
- }
- else
- *last_expression = append;
- }
- } /* switch (c) */
- } /* while p != pend */
-
-
- {
- int win_se = paramc;
- params = (params
- ? ((struct re_se_params *)
- realloc (params,
- sizeof (*params) * (1 + paramc)))
- : ((struct re_se_params *)
- malloc (sizeof (*params))));
- if (!params)
- return REG_ESPACE;
- ++paramc;
- params[win_se].se = re_se_win;
- {
- struct rexp_node * se
- = rx_mk_r_side_effect (&rxb->rx, (rx_side_effect)win_se);
- struct rexp_node * concat
- = rx_mk_r_concat (&rxb->rx, rexp, se);
- if (!(se && concat))
- return REG_ESPACE;
- rexp = concat;
- }
- }
-
-
- /* Through the pattern now. */
-
- if (!COMPILE_STACK_EMPTY)
- return REG_EPAREN;
-
- free (compile_stack.stack);
-
- orig_rexp = rexp;
-#ifdef RX_DEBUG
- if (rx_debug_compile)
- {
- dbug_rxb = rxb;
- fputs ("\n\nCompiling ", stdout);
- fwrite (pattern, 1, size, stdout);
- fputs (":\n", stdout);
- rxb->se_params = params;
- print_rexp (&rxb->rx, orig_rexp, 2, re_seprint, stdout);
- }
-#endif
- {
- rx_Bitset cs = rx_cset(&rxb->rx);
- rx_Bitset cs2 = rx_cset(&rxb->rx);
- char * se_map = (char *) alloca (paramc);
- struct rexp_node * new_rexp = 0;
-
-
- bzero (se_map, paramc);
- find_backrefs (se_map, rexp, params);
- fewer_side_effects =
- remove_unecessary_side_effects (&rxb->rx, se_map,
- rx_copy_rexp (&rxb->rx, rexp), params);
-
- speed_up_alt (&rxb->rx, rexp, 0);
- speed_up_alt (&rxb->rx, fewer_side_effects, 1);
-
- {
- char * syntax_parens = rxb->syntax_parens;
- if (syntax_parens == (char *)0x1)
- rexp = remove_unecessary_side_effects
- (&rxb->rx, se_map, rexp, params);
- else if (syntax_parens)
- {
- int x;
- for (x = 0; x < paramc; ++x)
- if (( (params[x].se == re_se_lparen)
- || (params[x].se == re_se_rparen))
- && (!syntax_parens [params[x].op1]))
- se_map [x] = 1;
- rexp = remove_unecessary_side_effects
- (&rxb->rx, se_map, rexp, params);
- }
- }
-
- /* At least one more optimization would be nice to have here but i ran out
- * of time. The idea would be to delay side effects.
- * For examle, `(abc)' is the same thing as `abc()' except that the
- * left paren is offset by 3 (which we know at compile time).
- * (In this comment, write that second pattern `abc(:3:)'
- * where `(:3:' is a syntactic unit.)
- *
- * Trickier: `(abc|defg)' is the same as `(abc(:3:|defg(:4:))'
- * (The paren nesting may be hard to follow -- that's an alternation
- * of `abc(:3:' and `defg(:4:' inside (purely syntactic) parens
- * followed by the closing paren from the original expression.)
- *
- * Neither the expression tree representation nor the the nfa make
- * this very easy to write. :(
- */
-
- /* What we compile is different than what the parser returns.
- * Suppose the parser returns expression R.
- * Let R' be R with unnecessary register assignments removed
- * (see REMOVE_UNECESSARY_SIDE_EFFECTS, above).
- *
- * What we will compile is the expression:
- *
- * m{try}R{win}\|s{try}R'{win}
- *
- * {try} and {win} denote side effect epsilons (see EXPLORE_FUTURE).
- *
- * When trying a match, we insert an `m' at the beginning of the
- * string if the user wants registers to be filled, `s' if not.
- */
- new_rexp =
- rx_mk_r_alternate
- (&rxb->rx,
- rx_mk_r_concat (&rxb->rx, rx_mk_r_cset (&rxb->rx, cs2), rexp),
- rx_mk_r_concat (&rxb->rx,
- rx_mk_r_cset (&rxb->rx, cs), fewer_side_effects));
-
- if (!(new_rexp && cs && cs2))
- return REG_ESPACE;
- RX_bitset_enjoin (cs2, '\0'); /* prefixed to the rexp used for matching. */
- RX_bitset_enjoin (cs, '\1'); /* prefixed to the rexp used for searching. */
- rexp = new_rexp;
- }
-
-#ifdef RX_DEBUG
- if (rx_debug_compile)
- {
- fputs ("\n...which is compiled as:\n", stdout);
- print_rexp (&rxb->rx, rexp, 2, re_seprint, stdout);
- }
-#endif
- {
- struct rx_nfa_state *start = 0;
- struct rx_nfa_state *end = 0;
-
- if (!rx_build_nfa (&rxb->rx, rexp, &start, &end))
- return REG_ESPACE; /* */
- else
- {
- void * mem = (void *)rxb->buffer;
- unsigned long size = rxb->allocated;
- int start_id;
- char * perm_mem;
- int iterator_size = paramc * sizeof (params[0]);
-
- end->is_final = 1;
- start->is_start = 1;
- rx_name_nfa_states (&rxb->rx);
- start_id = start->id;
-#ifdef RX_DEBUG
- if (rx_debug_compile)
- {
- fputs ("...giving the NFA: \n", stdout);
- dbug_rxb = rxb;
- print_nfa (&rxb->rx, rxb->rx.nfa_states, re_seprint, stdout);
- }
-#endif
- if (!rx_eclose_nfa (&rxb->rx))
- return REG_ESPACE;
- else
- {
- rx_delete_epsilon_transitions (&rxb->rx);
-
- /* For compatability reasons, we need to shove the
- * compiled nfa into one chunk of malloced memory.
- */
- rxb->rx.reserved = ( sizeof (params[0]) * paramc
- + rx_sizeof_bitset (rxb->rx.local_cset_size));
-#ifdef RX_DEBUG
- if (rx_debug_compile)
- {
- dbug_rxb = rxb;
- fputs ("...which cooks down (uncompactified) to: \n", stdout);
- print_nfa (&rxb->rx, rxb->rx.nfa_states, re_seprint, stdout);
- }
-#endif
- if (!rx_compactify_nfa (&rxb->rx, &mem, &size))
- return REG_ESPACE;
- rxb->buffer = mem;
- rxb->allocated = size;
- rxb->rx.buffer = mem;
- rxb->rx.allocated = size;
- perm_mem = ((char *)rxb->rx.buffer
- + rxb->rx.allocated - rxb->rx.reserved);
- rxb->se_params = ((struct re_se_params *)perm_mem);
- bcopy (params, rxb->se_params, iterator_size);
- perm_mem += iterator_size;
- rxb->fastset = (rx_Bitset) perm_mem;
- rxb->start = rx_id_to_nfa_state (&rxb->rx, start_id);
- }
- rx_bitset_null (rxb->rx.local_cset_size, rxb->fastset);
- rxb->can_match_empty = compute_fastset (rxb, orig_rexp);
- rxb->match_regs_on_stack =
- registers_on_stack (rxb, orig_rexp, 0, params);
- rxb->search_regs_on_stack =
- registers_on_stack (rxb, fewer_side_effects, 0, params);
- if (rxb->can_match_empty)
- rx_bitset_universe (rxb->rx.local_cset_size, rxb->fastset);
- rxb->is_anchored = is_anchored (orig_rexp, (rx_side_effect) re_se_hat);
- rxb->begbuf_only = is_anchored (orig_rexp,
- (rx_side_effect) re_se_begbuf);
- }
- rx_free_rexp (&rxb->rx, rexp);
- if (params)
- free (params);
-#ifdef RX_DEBUG
- if (rx_debug_compile)
- {
- dbug_rxb = rxb;
- fputs ("...which cooks down to: \n", stdout);
- print_nfa (&rxb->rx, rxb->rx.nfa_states, re_seprint, stdout);
- }
-#endif
- }
- return REG_NOERROR;
-}
-
-
-
-/* This table gives an error message for each of the error codes listed
- in regex.h. Obviously the order here has to be same as there. */
-
-__const__ char * rx_error_msg[] =
-{ 0, /* REG_NOERROR */
- "No match", /* REG_NOMATCH */
- "Invalid regular expression", /* REG_BADPAT */
- "Invalid collation character", /* REG_ECOLLATE */
- "Invalid character class name", /* REG_ECTYPE */
- "Trailing backslash", /* REG_EESCAPE */
- "Invalid back reference", /* REG_ESUBREG */
- "Unmatched [ or [^", /* REG_EBRACK */
- "Unmatched ( or \\(", /* REG_EPAREN */
- "Unmatched \\{", /* REG_EBRACE */
- "Invalid content of \\{\\}", /* REG_BADBR */
- "Invalid range end", /* REG_ERANGE */
- "Memory exhausted", /* REG_ESPACE */
- "Invalid preceding regular expression", /* REG_BADRPT */
- "Premature end of regular expression", /* REG_EEND */
- "Regular expression too big", /* REG_ESIZE */
- "Unmatched ) or \\)", /* REG_ERPAREN */
-};
-
-
-
-
-char rx_slowmap [256] =
-{
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-};
-
-#ifdef __STDC__
-RX_DECL void
-rx_blow_up_fastmap (struct re_pattern_buffer * rxb)
-#else
-RX_DECL void
-rx_blow_up_fastmap (rxb)
- struct re_pattern_buffer * rxb;
-#endif
-{
- int x;
- for (x = 0; x < 256; ++x) /* &&&& 3.6 % */
- rxb->fastmap [x] = !!RX_bitset_member (rxb->fastset, x);
- rxb->fastmap_accurate = 1;
-}
-
-
-
-
-#if !defined(REGEX_MALLOC) && !defined(__GNUC__)
-#define RE_SEARCH_2_FN inner_re_search_2
-#define RE_S2_QUAL static
-#else
-#define RE_SEARCH_2_FN re_search_2
-#define RE_S2_QUAL
-#endif
-
-struct re_search_2_closure
-{
- __const__ char * string1;
- int size1;
- __const__ char * string2;
- int size2;
-};
-
-
-static __inline__ enum rx_get_burst_return
-re_search_2_get_burst (pos, vclosure, stop)
- struct rx_string_position * pos;
- void * vclosure;
- int stop;
-{
- struct re_search_2_closure * closure;
- closure = (struct re_search_2_closure *)vclosure;
- if (!closure->string2)
- {
- int inset;
-
- inset = pos->pos - pos->string;
- if ((inset < -1) || (inset > closure->size1))
- return rx_get_burst_no_more;
- else
- {
- pos->pos = (__const__ unsigned char *) closure->string1 + inset;
- pos->string = (__const__ unsigned char *) closure->string1;
- pos->size = closure->size1;
- pos->end = ((__const__ unsigned char *)
- MIN(closure->string1 + closure->size1,
- closure->string1 + stop));
- pos->offset = 0;
- return ((pos->pos < pos->end)
- ? rx_get_burst_ok
- : rx_get_burst_no_more);
- }
- }
- else if (!closure->string1)
- {
- int inset;
-
- inset = pos->pos - pos->string;
- pos->pos = (__const__ unsigned char *) closure->string2 + inset;
- pos->string = (__const__ unsigned char *) closure->string2;
- pos->size = closure->size2;
- pos->end = ((__const__ unsigned char *)
- MIN(closure->string2 + closure->size2,
- closure->string2 + stop));
- pos->offset = 0;
- return ((pos->pos < pos->end)
- ? rx_get_burst_ok
- : rx_get_burst_no_more);
- }
- else
- {
- int inset;
-
- inset = pos->pos - pos->string + pos->offset;
- if (inset < closure->size1)
- {
- pos->pos = (__const__ unsigned char *) closure->string1 + inset;
- pos->string = (__const__ unsigned char *) closure->string1;
- pos->size = closure->size1;
- pos->end = ((__const__ unsigned char *)
- MIN(closure->string1 + closure->size1,
- closure->string1 + stop));
- pos->offset = 0;
- return rx_get_burst_ok;
- }
- else
- {
- pos->pos = ((__const__ unsigned char *)
- closure->string2 + inset - closure->size1);
- pos->string = (__const__ unsigned char *) closure->string2;
- pos->size = closure->size2;
- pos->end = ((__const__ unsigned char *)
- MIN(closure->string2 + closure->size2,
- closure->string2 + stop - closure->size1));
- pos->offset = closure->size1;
- return ((pos->pos < pos->end)
- ? rx_get_burst_ok
- : rx_get_burst_no_more);
- }
- }
-}
-
-
-static __inline__ enum rx_back_check_return
-re_search_2_back_check (pos, lparen, rparen, translate, vclosure, stop)
- struct rx_string_position * pos;
- int lparen;
- int rparen;
- unsigned char * translate;
- void * vclosure;
- int stop;
-{
- struct rx_string_position there;
- struct rx_string_position past;
-
- there = *pos;
- there.pos = there.string + lparen - there.offset;
- re_search_2_get_burst (&there, vclosure, stop);
-
- past = *pos;
- past.pos = past.string + rparen - there.offset;
- re_search_2_get_burst (&past, vclosure, stop);
-
- ++pos->pos;
- re_search_2_get_burst (pos, vclosure, stop);
-
- while ( (there.pos != past.pos)
- && (pos->pos != pos->end))
- if (TRANSLATE(*there.pos) != TRANSLATE(*pos->pos))
- return rx_back_check_fail;
- else
- {
- ++there.pos;
- ++pos->pos;
- if (there.pos == there.end)
- re_search_2_get_burst (&there, vclosure, stop);
- if (pos->pos == pos->end)
- re_search_2_get_burst (pos, vclosure, stop);
- }
-
- if (there.pos != past.pos)
- return rx_back_check_fail;
- --pos->pos;
- re_search_2_get_burst (pos, vclosure, stop);
- return rx_back_check_pass;
-}
-
-static __inline__ int
-re_search_2_fetch_char (pos, offset, app_closure, stop)
- struct rx_string_position * pos;
- int offset;
- void * app_closure;
- int stop;
-{
- struct re_search_2_closure * closure;
- closure = (struct re_search_2_closure *)app_closure;
- if (offset == 0)
- {
- if (pos->pos >= pos->string)
- return *pos->pos;
- else
- {
- if ( (pos->string == (__const__ unsigned char *) closure->string2)
- && (closure->string1)
- && (closure->size1))
- return closure->string1[closure->size1 - 1];
- else
- return 0; /* sure, why not. */
- }
- }
- if (pos->pos == pos->end)
- return *closure->string2;
- else
- return pos->pos[1];
-}
-
-
-#ifdef __STDC__
-RE_S2_QUAL int
-RE_SEARCH_2_FN (struct re_pattern_buffer *rxb,
- __const__ char * string1, int size1,
- __const__ char * string2, int size2,
- int startpos, int range,
- struct re_registers *regs,
- int stop)
-#else
-RE_S2_QUAL int
-RE_SEARCH_2_FN (rxb,
- string1, size1, string2, size2, startpos, range, regs, stop)
- struct re_pattern_buffer *rxb;
- __const__ char * string1;
- int size1;
- __const__ char * string2;
- int size2;
- int startpos;
- int range;
- struct re_registers *regs;
- int stop;
-#endif
-{
- int answer;
- struct re_search_2_closure closure;
- closure.string1 = string1;
- closure.size1 = size1;
- closure.string2 = string2;
- closure.size2 = size2;
- answer = rx_search (rxb, startpos, range, stop, size1 + size2,
- re_search_2_get_burst,
- re_search_2_back_check,
- re_search_2_fetch_char,
- (void *)&closure,
- regs,
- 0,
- 0);
- switch (answer)
- {
- case rx_search_continuation:
- abort ();
- case rx_search_error:
- return -2;
- case rx_search_soft_fail:
- case rx_search_fail:
- return -1;
- default:
- return answer;
- }
-}
-
-/* Export rx_search to callers outside this file. */
-
-int
-re_rx_search (rxb, startpos, range, stop, total_size,
- get_burst, back_check, fetch_char,
- app_closure, regs, resume_state, save_state)
- struct re_pattern_buffer * rxb;
- int startpos;
- int range;
- int stop;
- int total_size;
- rx_get_burst_fn get_burst;
- rx_back_check_fn back_check;
- rx_fetch_char_fn fetch_char;
- void * app_closure;
- struct re_registers * regs;
- struct rx_search_state * resume_state;
- struct rx_search_state * save_state;
-{
- return rx_search (rxb, startpos, range, stop, total_size,
- get_burst, back_check, fetch_char, app_closure,
- regs, resume_state, save_state);
-}
-
-#if !defined(REGEX_MALLOC) && !defined(__GNUC__)
-#ifdef __STDC__
-int
-re_search_2 (struct re_pattern_buffer *rxb,
- __const__ char * string1, int size1,
- __const__ char * string2, int size2,
- int startpos, int range,
- struct re_registers *regs,
- int stop)
-#else
-int
-re_search_2 (rxb, string1, size1, string2, size2, startpos, range, regs, stop)
- struct re_pattern_buffer *rxb;
- __const__ char * string1;
- int size1;
- __const__ char * string2;
- int size2;
- int startpos;
- int range;
- struct re_registers *regs;
- int stop;
-#endif
-{
- int ret;
- ret = inner_re_search_2 (rxb, string1, size1, string2, size2, startpos,
- range, regs, stop);
- alloca (0);
- return ret;
-}
-#endif
-
-
-/* Like re_search_2, above, but only one string is specified, and
- * doesn't let you say where to stop matching.
- */
-
-#ifdef __STDC__
-int
-re_search (struct re_pattern_buffer * rxb, __const__ char *string,
- int size, int startpos, int range,
- struct re_registers *regs)
-#else
-int
-re_search (rxb, string, size, startpos, range, regs)
- struct re_pattern_buffer * rxb;
- __const__ char * string;
- int size;
- int startpos;
- int range;
- struct re_registers *regs;
-#endif
-{
- return re_search_2 (rxb, 0, 0, string, size, startpos, range, regs, size);
-}
-
-#ifdef __STDC__
-int
-re_match_2 (struct re_pattern_buffer * rxb,
- __const__ char * string1, int size1,
- __const__ char * string2, int size2,
- int pos, struct re_registers *regs, int stop)
-#else
-int
-re_match_2 (rxb, string1, size1, string2, size2, pos, regs, stop)
- struct re_pattern_buffer * rxb;
- __const__ char * string1;
- int size1;
- __const__ char * string2;
- int size2;
- int pos;
- struct re_registers *regs;
- int stop;
-#endif
-{
- struct re_registers some_regs;
- regoff_t start;
- regoff_t end;
- int srch;
- int save = rxb->regs_allocated;
- struct re_registers * regs_to_pass = regs;
-
- if (!regs)
- {
- some_regs.start = &start;
- some_regs.end = &end;
- some_regs.num_regs = 1;
- regs_to_pass = &some_regs;
- rxb->regs_allocated = REGS_FIXED;
- }
-
- srch = re_search_2 (rxb, string1, size1, string2, size2,
- pos, 1, regs_to_pass, stop);
- if (regs_to_pass != regs)
- rxb->regs_allocated = save;
- if (srch < 0)
- return srch;
- return regs_to_pass->end[0] - regs_to_pass->start[0];
-}
-
-/* re_match is like re_match_2 except it takes only a single string. */
-
-#ifdef __STDC__
-int
-re_match (struct re_pattern_buffer * rxb,
- __const__ char * string,
- int size, int pos,
- struct re_registers *regs)
-#else
-int
-re_match (rxb, string, size, pos, regs)
- struct re_pattern_buffer * rxb;
- __const__ char *string;
- int size;
- int pos;
- struct re_registers *regs;
-#endif
-{
- return re_match_2 (rxb, string, size, 0, 0, pos, regs, size);
-}
-
-
-
-/* Set by `re_set_syntax' to the current regexp syntax to recognize. Can
- also be assigned to arbitrarily: each pattern buffer stores its own
- syntax, so it can be changed between regex compilations. */
-reg_syntax_t re_syntax_options = RE_SYNTAX_EMACS;
-
-
-/* Specify the precise syntax of regexps for compilation. This provides
- for compatibility for various utilities which historically have
- different, incompatible syntaxes.
-
- The argument SYNTAX is a bit mask comprised of the various bits
- defined in regex.h. We return the old syntax. */
-
-#ifdef __STDC__
-reg_syntax_t
-re_set_syntax (reg_syntax_t syntax)
-#else
-reg_syntax_t
-re_set_syntax (syntax)
- reg_syntax_t syntax;
-#endif
-{
- reg_syntax_t ret = re_syntax_options;
-
- re_syntax_options = syntax;
- return ret;
-}
-
-
-/* Set REGS to hold NUM_REGS registers, storing them in STARTS and
- ENDS. Subsequent matches using PATTERN_BUFFER and REGS will use
- this memory for recording register information. STARTS and ENDS
- must be allocated using the malloc library routine, and must each
- be at least NUM_REGS * sizeof (regoff_t) bytes long.
-
- If NUM_REGS == 0, then subsequent matches should allocate their own
- register data.
-
- Unless this function is called, the first search or match using
- PATTERN_BUFFER will allocate its own register data, without
- freeing the old data. */
-
-#ifdef __STDC__
-void
-re_set_registers (struct re_pattern_buffer *bufp,
- struct re_registers *regs,
- unsigned num_regs,
- regoff_t * starts, regoff_t * ends)
-#else
-void
-re_set_registers (bufp, regs, num_regs, starts, ends)
- struct re_pattern_buffer *bufp;
- struct re_registers *regs;
- unsigned num_regs;
- regoff_t * starts;
- regoff_t * ends;
-#endif
-{
- if (num_regs)
- {
- bufp->regs_allocated = REGS_REALLOCATE;
- regs->num_regs = num_regs;
- regs->start = starts;
- regs->end = ends;
- }
- else
- {
- bufp->regs_allocated = REGS_UNALLOCATED;
- regs->num_regs = 0;
- regs->start = regs->end = (regoff_t) 0;
- }
-}
-
-
-
-
-#ifdef __STDC__
-static int
-cplx_se_sublist_len (struct rx_se_list * list)
-#else
-static int
-cplx_se_sublist_len (list)
- struct rx_se_list * list;
-#endif
-{
- int x = 0;
- while (list)
- {
- if ((long)list->car >= 0)
- ++x;
- list = list->cdr;
- }
- return x;
-}
-
-
-/* For rx->se_list_cmp */
-
-#ifdef __STDC__
-static int
-posix_se_list_order (struct rx * rx,
- struct rx_se_list * a, struct rx_se_list * b)
-#else
-static int
-posix_se_list_order (rx, a, b)
- struct rx * rx;
- struct rx_se_list * a;
- struct rx_se_list * b;
-#endif
-{
- int al = cplx_se_sublist_len (a);
- int bl = cplx_se_sublist_len (b);
-
- if (!al && !bl)
- return ((a == b)
- ? 0
- : ((a < b) ? -1 : 1));
-
- else if (!al)
- return -1;
-
- else if (!bl)
- return 1;
-
- else
- {
- rx_side_effect * av = ((rx_side_effect *)
- alloca (sizeof (rx_side_effect) * (al + 1)));
- rx_side_effect * bv = ((rx_side_effect *)
- alloca (sizeof (rx_side_effect) * (bl + 1)));
- struct rx_se_list * ap = a;
- struct rx_se_list * bp = b;
- int ai, bi;
-
- for (ai = al - 1; ai >= 0; --ai)
- {
- while ((long)ap->car < 0)
- ap = ap->cdr;
- av[ai] = ap->car;
- ap = ap->cdr;
- }
- av[al] = (rx_side_effect)-2;
- for (bi = bl - 1; bi >= 0; --bi)
- {
- while ((long)bp->car < 0)
- bp = bp->cdr;
- bv[bi] = bp->car;
- bp = bp->cdr;
- }
- bv[bl] = (rx_side_effect)-1;
-
- {
- int ret;
- int x = 0;
- while (av[x] == bv[x])
- ++x;
- ret = (((unsigned *)(av[x]) < (unsigned *)(bv[x])) ? -1 : 1);
- return ret;
- }
- }
-}
-
-
-
-
-/* re_compile_pattern is the GNU regular expression compiler: it
- compiles PATTERN (of length SIZE) and puts the result in RXB.
- Returns 0 if the pattern was valid, otherwise an error string.
-
- Assumes the `allocated' (and perhaps `buffer') and `translate' fields
- are set in RXB on entry.
-
- We call rx_compile to do the actual compilation. */
-
-#ifdef __STDC__
-__const__ char *
-re_compile_pattern (__const__ char *pattern,
- int length,
- struct re_pattern_buffer * rxb)
-#else
-__const__ char *
-re_compile_pattern (pattern, length, rxb)
- __const__ char *pattern;
- int length;
- struct re_pattern_buffer * rxb;
-#endif
-{
- reg_errcode_t ret;
-
- /* GNU code is written to assume at least RE_NREGS registers will be set
- (and at least one extra will be -1). */
- rxb->regs_allocated = REGS_UNALLOCATED;
-
- /* And GNU code determines whether or not to get register information
- by passing null for the REGS argument to re_match, etc., not by
- setting no_sub. */
- rxb->no_sub = 0;
-
- rxb->rx.local_cset_size = 256;
-
- /* Match anchors at newline. */
- rxb->newline_anchor = 1;
-
- rxb->re_nsub = 0;
- rxb->start = 0;
- rxb->se_params = 0;
- rxb->rx.nodec = 0;
- rxb->rx.epsnodec = 0;
- rxb->rx.instruction_table = 0;
- rxb->rx.nfa_states = 0;
- rxb->rx.se_list_cmp = posix_se_list_order;
- rxb->rx.start_set = 0;
-
- ret = rx_compile (pattern, length, re_syntax_options, rxb);
- alloca (0);
- return rx_error_msg[(int) ret];
-}
-
-
-
-#ifdef __STDC__
-int
-re_compile_fastmap (struct re_pattern_buffer * rxb)
-#else
-int
-re_compile_fastmap (rxb)
- struct re_pattern_buffer * rxb;
-#endif
-{
- rx_blow_up_fastmap (rxb);
- return 0;
-}
-
-
-
-
-/* Entry points compatible with 4.2 BSD regex library. We don't define
- them if this is an Emacs or POSIX compilation. */
-
-/* Don't build them for libg++ either. This is a temporary measure
- * until the functions are moved to another file and reconditionalized.
- */
-#if 0
-/* #if (!defined (emacs) && !defined (_POSIX_SOURCE)) || defined(USE_BSD_REGEX) */
-
-/* BSD has one and only one pattern buffer. */
-static struct re_pattern_buffer rx_comp_buf;
-
-#ifdef __STDC__
-char *
-re_comp (__const__ char *s)
-#else
-char *
-re_comp (s)
- __const__ char *s;
-#endif
-{
- reg_errcode_t ret;
-
- if (!s || (*s == '\0'))
- {
- if (!rx_comp_buf.buffer)
- return "No previous regular expression";
- return 0;
- }
-
- if (!rx_comp_buf.fastmap)
- {
- rx_comp_buf.fastmap = (char *) malloc (1 << CHARBITS);
- if (!rx_comp_buf.fastmap)
- return "Memory exhausted";
- }
-
- /* Since `rx_exec' always passes NULL for the `regs' argument, we
- don't need to initialize the pattern buffer fields which affect it. */
-
- /* Match anchors at newlines. */
- rx_comp_buf.newline_anchor = 1;
-
- rx_comp_buf.fastmap_accurate = 0;
- rx_comp_buf.re_nsub = 0;
- rx_comp_buf.start = 0;
- rx_comp_buf.se_params = 0;
- rx_comp_buf.rx.nodec = 0;
- rx_comp_buf.rx.epsnodec = 0;
- rx_comp_buf.rx.instruction_table = 0;
- rx_comp_buf.rx.nfa_states = 0;
- rx_comp_buf.rx.start = 0;
- rx_comp_buf.rx.se_list_cmp = posix_se_list_order;
- rx_comp_buf.rx.start_set = 0;
- rx_comp_buf.rx.local_cset_size = 256;
-
- ret = rx_compile (s, strlen (s), re_syntax_options, &rx_comp_buf);
- alloca (0);
-
- /* Yes, we're discarding `__const__' here. */
- return (char *) rx_error_msg[(int) ret];
-}
-
-
-#ifdef __STDC__
-int
-re_exec (__const__ char *s)
-#else
-int
-re_exec (s)
- __const__ char *s;
-#endif
-{
- __const__ int len = strlen (s);
- return
- 0 <= re_search (&rx_comp_buf, s, len, 0, len, (struct re_registers *) 0);
-}
-#endif /* not emacs and not _POSIX_SOURCE */
-
-
-
-/* POSIX.2 functions. Don't define these for Emacs. */
-
-/* For now we leave these out, because regex_t is not binary
- compatible with the implementation in other systems. */
-#if 0 /*!defined(emacs)*/
-
-/* regcomp takes a regular expression as a string and compiles it.
-
- PREG is a regex_t *. We do not expect any fields to be initialized,
- since POSIX says we shouldn't. Thus, we set
-
- `buffer' to the compiled pattern;
- `used' to the length of the compiled pattern;
- `syntax' to RE_SYNTAX_POSIX_EXTENDED if the
- REG_EXTENDED bit in CFLAGS is set; otherwise, to
- RE_SYNTAX_POSIX_BASIC;
- `newline_anchor' to REG_NEWLINE being set in CFLAGS;
- `fastmap' and `fastmap_accurate' to zero;
- `re_nsub' to the number of subexpressions in PATTERN.
-
- PATTERN is the address of the pattern string.
-
- CFLAGS is a series of bits which affect compilation.
-
- If REG_EXTENDED is set, we use POSIX extended syntax; otherwise, we
- use POSIX basic syntax.
-
- If REG_NEWLINE is set, then . and [^...] don't match newline.
- Also, regexec will try a match beginning after every newline.
-
- If REG_ICASE is set, then we considers upper- and lowercase
- versions of letters to be equivalent when matching.
-
- If REG_NOSUB is set, then when PREG is passed to regexec, that
- routine will report only success or failure, and nothing about the
- registers.
-
- It returns 0 if it succeeds, nonzero if it doesn't. (See regex.h for
- the return codes and their meanings.) */
-
-
-#ifdef __STDC__
-int
-regcomp (regex_t * preg, __const__ char * pattern, int cflags)
-#else
-int
-regcomp (preg, pattern, cflags)
- regex_t * preg;
- __const__ char * pattern;
- int cflags;
-#endif
-{
- reg_errcode_t ret;
- unsigned syntax
- = cflags & REG_EXTENDED ? RE_SYNTAX_POSIX_EXTENDED : RE_SYNTAX_POSIX_BASIC;
-
- /* regex_compile will allocate the space for the compiled pattern. */
- preg->buffer = 0;
- preg->allocated = 0;
- preg->fastmap = malloc (256);
- if (!preg->fastmap)
- return REG_ESPACE;
- preg->fastmap_accurate = 0;
-
- if (cflags & REG_ICASE)
- {
- unsigned i;
-
- preg->translate = (unsigned char *) malloc (256);
- if (!preg->translate)
- return (int) REG_ESPACE;
-
- /* Map uppercase characters to corresponding lowercase ones. */
- for (i = 0; i < CHAR_SET_SIZE; i++)
- preg->translate[i] = isupper (i) ? tolower (i) : i;
- }
- else
- preg->translate = 0;
-
- /* If REG_NEWLINE is set, newlines are treated differently. */
- if (cflags & REG_NEWLINE)
- { /* REG_NEWLINE implies neither . nor [^...] match newline. */
- syntax &= ~RE_DOT_NEWLINE;
- syntax |= RE_HAT_LISTS_NOT_NEWLINE;
- /* It also changes the matching behavior. */
- preg->newline_anchor = 1;
- }
- else
- preg->newline_anchor = 0;
-
- preg->no_sub = !!(cflags & REG_NOSUB);
-
- /* POSIX says a null character in the pattern terminates it, so we
- can use strlen here in compiling the pattern. */
- preg->re_nsub = 0;
- preg->start = 0;
- preg->se_params = 0;
- preg->syntax_parens = 0;
- preg->rx.nodec = 0;
- preg->rx.epsnodec = 0;
- preg->rx.instruction_table = 0;
- preg->rx.nfa_states = 0;
- preg->rx.local_cset_size = 256;
- preg->rx.start = 0;
- preg->rx.se_list_cmp = posix_se_list_order;
- preg->rx.start_set = 0;
- ret = rx_compile (pattern, strlen (pattern), syntax, preg);
- alloca (0);
-
- /* POSIX doesn't distinguish between an unmatched open-group and an
- unmatched close-group: both are REG_EPAREN. */
- if (ret == REG_ERPAREN) ret = REG_EPAREN;
-
- return (int) ret;
-}
-
-
-/* regexec searches for a given pattern, specified by PREG, in the
- string STRING.
-
- If NMATCH is zero or REG_NOSUB was set in the cflags argument to
- `regcomp', we ignore PMATCH. Otherwise, we assume PMATCH has at
- least NMATCH elements, and we set them to the offsets of the
- corresponding matched substrings.
-
- EFLAGS specifies `execution flags' which affect matching: if
- REG_NOTBOL is set, then ^ does not match at the beginning of the
- string; if REG_NOTEOL is set, then $ does not match at the end.
-
- We return 0 if we find a match and REG_NOMATCH if not. */
-
-#ifdef __STDC__
-int
-regexec (__const__ regex_t *preg, __const__ char *string,
- size_t nmatch, regmatch_t pmatch[],
- int eflags)
-#else
-int
-regexec (preg, string, nmatch, pmatch, eflags)
- __const__ regex_t *preg;
- __const__ char *string;
- size_t nmatch;
- regmatch_t pmatch[];
- int eflags;
-#endif
-{
- int ret;
- struct re_registers regs;
- regex_t private_preg;
- int len = strlen (string);
- boolean want_reg_info = !preg->no_sub && nmatch > 0;
-
- private_preg = *preg;
-
- private_preg.not_bol = !!(eflags & REG_NOTBOL);
- private_preg.not_eol = !!(eflags & REG_NOTEOL);
-
- /* The user has told us exactly how many registers to return
- * information about, via `nmatch'. We have to pass that on to the
- * matching routines.
- */
- private_preg.regs_allocated = REGS_FIXED;
-
- if (want_reg_info)
- {
- regs.num_regs = nmatch;
- regs.start = (( regoff_t *) malloc ((nmatch) * sizeof ( regoff_t)));
- regs.end = (( regoff_t *) malloc ((nmatch) * sizeof ( regoff_t)));
- if (regs.start == 0 || regs.end == 0)
- return (int) REG_NOMATCH;
- }
-
- /* Perform the searching operation. */
- ret = re_search (&private_preg,
- string, len,
- /* start: */ 0,
- /* range: */ len,
- want_reg_info ? &regs : (struct re_registers *) 0);
-
- /* Copy the register information to the POSIX structure. */
- if (want_reg_info)
- {
- if (ret >= 0)
- {
- unsigned r;
-
- for (r = 0; r < nmatch; r++)
- {
- pmatch[r].rm_so = regs.start[r];
- pmatch[r].rm_eo = regs.end[r];
- }
- }
-
- /* If we needed the temporary register info, free the space now. */
- free (regs.start);
- free (regs.end);
- }
-
- /* We want zero return to mean success, unlike `re_search'. */
- return ret >= 0 ? (int) REG_NOERROR : (int) REG_NOMATCH;
-}
-
-
-/* Returns a message corresponding to an error code, ERRCODE, returned
- from either regcomp or regexec. */
-
-#ifdef __STDC__
-size_t
-regerror (int errcode, __const__ regex_t *preg,
- char *errbuf, size_t errbuf_size)
-#else
-size_t
-regerror (errcode, preg, errbuf, errbuf_size)
- int errcode;
- __const__ regex_t *preg;
- char *errbuf;
- size_t errbuf_size;
-#endif
-{
- __const__ char *msg
- = rx_error_msg[errcode] == 0 ? "Success" : rx_error_msg[errcode];
- size_t msg_size = strlen (msg) + 1; /* Includes the 0. */
-
- if (errbuf_size != 0)
- {
- if (msg_size > errbuf_size)
- {
- strncpy (errbuf, msg, errbuf_size - 1);
- errbuf[errbuf_size - 1] = 0;
- }
- else
- strcpy (errbuf, msg);
- }
-
- return msg_size;
-}
-
-
-/* Free dynamically allocated space used by PREG. */
-
-#ifdef __STDC__
-void
-regfree (regex_t *preg)
-#else
-void
-regfree (preg)
- regex_t *preg;
-#endif
-{
- if (preg->buffer != 0)
- free (preg->buffer);
- preg->buffer = 0;
- preg->allocated = 0;
-
- if (preg->fastmap != 0)
- free (preg->fastmap);
- preg->fastmap = 0;
- preg->fastmap_accurate = 0;
-
- if (preg->translate != 0)
- free (preg->translate);
- preg->translate = 0;
-}
-
-#endif /* not emacs */
diff --git a/contrib/libg++/librx/rx.h b/contrib/libg++/librx/rx.h
deleted file mode 100644
index 60f99e199e28..000000000000
--- a/contrib/libg++/librx/rx.h
+++ /dev/null
@@ -1,3732 +0,0 @@
-#if !defined(RXH) || defined(RX_WANT_SE_DEFS)
-#define RXH
-
-/* Copyright (C) 1992, 1993 Free Software Foundation, Inc.
-
-This file is part of the librx library.
-
-Librx is free software; you can redistribute it and/or modify it under
-the terms of the GNU Library General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-Librx is distributed in the hope that it will be useful, but WITHOUT
-ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with this software; see the file COPYING.LIB. If not,
-write to the Free Software Foundation, 675 Mass Ave, Cambridge, MA
-02139, USA. */
-/* t. lord Wed Sep 23 18:20:57 1992 */
-
-
-
-
-
-
-
-
-#ifndef RX_WANT_SE_DEFS
-
-/* This page: Bitsets */
-
-#ifndef RX_subset
-typedef unsigned int RX_subset;
-#define RX_subset_bits (32)
-#define RX_subset_mask (RX_subset_bits - 1)
-#endif
-
-typedef RX_subset * rx_Bitset;
-
-#ifdef __STDC__
-typedef void (*rx_bitset_iterator) (void *, int member_index);
-#else
-typedef void (*rx_bitset_iterator) ();
-#endif
-
-#define rx_bitset_subset(N) ((N) / RX_subset_bits)
-#define rx_bitset_subset_val(B,N) ((B)[rx_bitset_subset(N)])
-#define RX_bitset_access(B,N,OP) \
- ((B)[rx_bitset_subset(N)] OP rx_subset_singletons[(N) & RX_subset_mask])
-#define RX_bitset_member(B,N) RX_bitset_access(B, N, &)
-#define RX_bitset_enjoin(B,N) RX_bitset_access(B, N, |=)
-#define RX_bitset_remove(B,N) RX_bitset_access(B, N, &= ~)
-#define RX_bitset_toggle(B,N) RX_bitset_access(B, N, ^= )
-#define rx_bitset_numb_subsets(N) (((N) + RX_subset_bits - 1) / RX_subset_bits)
-#define rx_sizeof_bitset(N) (rx_bitset_numb_subsets(N) * sizeof(RX_subset))
-
-
-
-/* This page: Splay trees. */
-
-#ifdef __STDC__
-typedef int (*rx_sp_comparer) (void * a, void * b);
-#else
-typedef int (*rx_sp_comparer) ();
-#endif
-
-struct rx_sp_node
-{
- void * key;
- void * data;
- struct rx_sp_node * kids[2];
-};
-
-#ifdef __STDC__
-typedef void (*rx_sp_key_data_freer) (struct rx_sp_node *);
-#else
-typedef void (*rx_sp_key_data_freer) ();
-#endif
-
-
-/* giant inflatable hash trees */
-
-struct rx_hash_item
-{
- struct rx_hash_item * next_same_hash;
- struct rx_hash * table;
- unsigned long hash;
- void * data;
- void * binding;
-};
-
-struct rx_hash
-{
- struct rx_hash * parent;
- int refs;
- struct rx_hash * children[13];
- struct rx_hash_item * buckets [13];
- int bucket_size [13];
-};
-
-struct rx_hash_rules;
-
-#ifdef __STDC__
-/* should return like == */
-typedef int (*rx_hash_eq)(void *, void *);
-typedef struct rx_hash * (*rx_alloc_hash)(struct rx_hash_rules *);
-typedef void (*rx_free_hash)(struct rx_hash *,
- struct rx_hash_rules *);
-typedef struct rx_hash_item * (*rx_alloc_hash_item)(struct rx_hash_rules *,
- void *);
-typedef void (*rx_free_hash_item)(struct rx_hash_item *,
- struct rx_hash_rules *);
-#else
-typedef int (*rx_hash_eq)();
-typedef struct rx_hash * (*rx_alloc_hash)();
-typedef void (*rx_free_hash)();
-typedef struct rx_hash_item * (*rx_alloc_hash_item)();
-typedef void (*rx_free_hash_item)();
-#endif
-
-struct rx_hash_rules
-{
- rx_hash_eq eq;
- rx_alloc_hash hash_alloc;
- rx_free_hash free_hash;
- rx_alloc_hash_item hash_item_alloc;
- rx_free_hash_item free_hash_item;
-};
-
-
-/* Forward declarations */
-
-struct rx_cache;
-struct rx_superset;
-struct rx;
-struct rx_se_list;
-
-
-
-/*
- * GLOSSARY
- *
- * regexp
- * regular expression
- * expression
- * pattern - a `regular' expression. The expression
- * need not be formally regular -- it can contain
- * constructs that don't correspond to purely regular
- * expressions.
- *
- * buffer
- * string - the string (or strings) being searched or matched.
- *
- * pattern buffer - a structure of type `struct re_pattern_buffer'
- * This in turn contains a `struct rx', which holds the
- * NFA compiled from a pattern, as well as some of the state
- * of a matcher using the pattern.
- *
- * NFA - nondeterministic finite automata. Some people
- * use this term to a member of the class of
- * regular automata (those corresponding to a regular
- * language). However, in this code, the meaning is
- * more general. The automata used by Rx are comperable
- * in power to what are usually called `push down automata'.
- *
- * Two NFA are built by rx for every pattern. One is built
- * by the compiler. The other is built from the first, on
- * the fly, by the matcher. The latter is called the `superstate
- * NFA' because its states correspond to sets of states from
- * the first NFA. (Joe Keane gets credit for the name
- * `superstate NFA').
- *
- * NFA edges
- * epsilon edges
- * side-effect edges - The NFA compiled from a pattern can have three
- * kinds of edges. Epsilon edges can be taken freely anytime
- * their source state is reached. Character set edges can be
- * taken when their source state is reached and when the next
- * character in the buffer is a member of the set. Side effect
- * edges imply a transition that can only be taken after the
- * indicated side effect has been successfully accomplished.
- * Some examples of side effects are:
- *
- * Storing the current match position to record the
- * location of a parentesized subexpression.
- *
- * Advancing the matcher over N characters if they
- * match the N characters previously matched by a
- * parentesized subexpression.
- *
- * Both of those kinds of edges occur in the NFA generated
- * by the pattern: \(.\)\1
- *
- * Epsilon and side effect edges are similar. Unfortunately,
- * some of the code uses the name `epsilon edge' to mean
- * both epsilon and side effect edges. For example, the
- * function has_non_idempotent_epsilon_path computes the existance
- * of a non-trivial path containing only a mix of epsilon and
- * side effect edges. In that case `nonidempotent epsilon' is being
- * used to mean `side effect'.
- */
-
-
-
-
-
-/* LOW LEVEL PATTERN BUFFERS */
-
-/* Suppose that from some NFA state, more than one path through
- * side-effect edges is possible. In what order should the paths
- * be tried? A function of type rx_se_list_order answers that
- * question. It compares two lists of side effects, and says
- * which list comes first.
- */
-
-#ifdef __STDC__
-typedef int (*rx_se_list_order) (struct rx *,
- struct rx_se_list *,
- struct rx_se_list *);
-#else
-typedef int (*rx_se_list_order) ();
-#endif
-
-
-
-/* Struct RX holds a compiled regular expression - that is, an nfa
- * ready to be converted on demand to a more efficient superstate nfa.
- * This is for the low level interface. The high-level interfaces enclose
- * this in a `struct re_pattern_buffer'.
- */
-struct rx
-{
- /* The compiler assigns a unique id to every pattern.
- * Like sequence numbers in X, there is a subtle bug here
- * if you use Rx in a system that runs for a long time.
- * But, because of the way the caches work out, it is almost
- * impossible to trigger the Rx version of this bug.
- *
- * The id is used to validate superstates found in a cache
- * of superstates. It isn't sufficient to let a superstate
- * point back to the rx for which it was compiled -- the caller
- * may be re-using a `struct rx' in which case the superstate
- * is not really valid. So instead, superstates are validated
- * by checking the sequence number of the pattern for which
- * they were built.
- */
- int rx_id;
-
- /* This is memory mgt. state for superstates. This may be
- * shared by more than one struct rx.
- */
- struct rx_cache * cache;
-
- /* Every regex defines the size of its own character set.
- * A superstate has an array of this size, with each element
- * a `struct rx_inx'. So, don't make this number too large.
- * In particular, don't make it 2^16.
- */
- int local_cset_size;
-
- /* After the NFA is built, it is copied into a contiguous region
- * of memory (mostly for compatability with GNU regex).
- * Here is that region, and it's size:
- */
- void * buffer;
- unsigned long allocated;
-
- /* Clients of RX can ask for some extra storage in the space pointed
- * to by BUFFER. The field RESERVED is an input parameter to the
- * compiler. After compilation, this much space will be available
- * at (buffer + allocated - reserved)
- */
- unsigned long reserved;
-
- /* --------- The remaining fields are for internal use only. --------- */
- /* --------- But! they must be initialized to 0. --------- */
-
- /* NODEC is the number of nodes in the NFA with non-epsilon
- * transitions.
- */
- int nodec;
-
- /* EPSNODEC is the number of nodes with only epsilon transitions. */
- int epsnodec;
-
- /* The sum (NODEC + EPSNODEC) is the total number of states in the
- * compiled NFA.
- */
-
- /* Lists of side effects as stored in the NFA are `hash consed'..meaning
- * that lists with the same elements are ==. During compilation,
- * this table facilitates hash-consing.
- */
- struct rx_hash se_list_memo;
-
- /* Lists of NFA states are also hashed.
- */
- struct rx_hash set_list_memo;
-
-
-
-
- /* The compiler and matcher must build a number of instruction frames.
- * The format of these frames is fixed (c.f. struct rx_inx). The values
- * of the instructions is not fixed.
- *
- * An enumerated type (enum rx_opcode) defines the set of instructions
- * that the compiler or matcher might generate. When filling an instruction
- * frame, the INX field is found by indexing this instruction table
- * with an opcode:
- */
- void ** instruction_table;
-
- /* The list of all states in an NFA.
- * During compilation, the NEXT field of NFA states links this list.
- * After compilation, all the states are compacted into an array,
- * ordered by state id numbers. At that time, this points to the base
- * of that array.
- */
- struct rx_nfa_state *nfa_states;
-
- /* Every nfa begins with one distinguished starting state:
- */
- struct rx_nfa_state *start;
-
- /* This orders the search through super-nfa paths.
- * See the comment near the typedef of rx_se_list_order.
- */
- rx_se_list_order se_list_cmp;
-
- struct rx_superset * start_set;
-};
-
-
-
-
-/* SYNTAX TREES */
-
-/* Compilation is in stages.
- *
- * In the first stage, a pattern specified by a string is
- * translated into a syntax tree. Later stages will convert
- * the syntax tree into an NFA optimized for conversion to a
- * superstate-NFA.
- *
- * This page is about syntax trees.
- */
-
-enum rexp_node_type
-{
- r_cset, /* Match from a character set. `a' or `[a-z]'*/
- r_concat, /* Concat two subexpressions. `ab' */
- r_alternate, /* Choose one of two subexpressions. `a\|b' */
- r_opt, /* Optional subexpression. `a?' */
- r_star, /* Repeated subexpression. `a*' */
-
-
- /* A 2phase-star is a variation on a repeated subexpression.
- * In this case, there are two subexpressions. The first, if matched,
- * begins a repitition (otherwise, the whole expression is matches the
- * empth string).
- *
- * After matching the first subexpression, a 2phase star either finishes,
- * or matches the second subexpression. If the second subexpression is
- * matched, then the whole construct repeats.
- *
- * 2phase stars are used in two circumstances. First, they
- * are used as part of the implementation of POSIX intervals (counted
- * repititions). Second, they are used to implement proper star
- * semantics when the repeated subexpression contains paths of
- * only side effects. See rx_compile for more information.
- */
- r_2phase_star,
-
-
- /* c.f. "typedef void * rx_side_effect" */
- r_side_effect,
-
- /* This is an extension type: It is for transient use in source->source
- * transformations (implemented over syntax trees).
- */
- r_data
-};
-
-/* A side effect is a matcher-specific action associated with
- * transitions in the NFA. The details of side effects are up
- * to the matcher. To the compiler and superstate constructors
- * side effects are opaque:
- */
-
-typedef void * rx_side_effect;
-
-/* Nodes in a syntax tree are of this type:
- */
-struct rexp_node
-{
- enum rexp_node_type type;
- union
- {
- rx_Bitset cset;
- rx_side_effect side_effect;
- struct
- {
- struct rexp_node *left;
- struct rexp_node *right;
- } pair;
- void * data;
- } params;
-};
-
-
-
-/* NFA
- *
- * A syntax tree is compiled into an NFA. This page defines the structure
- * of that NFA.
- */
-
-struct rx_nfa_state
-{
- /* These are kept in a list as the NFA is being built. */
- struct rx_nfa_state *next;
-
- /* After the NFA is built, states are given integer id's.
- * States whose outgoing transitions are all either epsilon or
- * side effect edges are given ids less than 0. Other states
- * are given successive non-negative ids starting from 0.
- */
- int id;
-
- /* The list of NFA edges that go from this state to some other. */
- struct rx_nfa_edge *edges;
-
- /* If you land in this state, then you implicitly land
- * in all other states reachable by only epsilon translations.
- * Call the set of maximal paths to such states the epsilon closure
- * of this state.
- *
- * There may be other states that are reachable by a mixture of
- * epsilon and side effect edges. Consider the set of maximal paths
- * of that sort from this state. Call it the epsilon-side-effect
- * closure of the state.
- *
- * The epsilon closure of the state is a subset of the epsilon-side-
- * effect closure. It consists of all the paths that contain
- * no side effects -- only epsilon edges.
- *
- * The paths in the epsilon-side-effect closure can be partitioned
- * into equivalance sets. Two paths are equivalant if they have the
- * same set of side effects, in the same order. The epsilon-closure
- * is one of these equivalance sets. Let's call these equivalance
- * sets: observably equivalant path sets. That name is chosen
- * because equivalance of two paths means they cause the same side
- * effects -- so they lead to the same subsequent observations other
- * than that they may wind up in different target states.
- *
- * The superstate nfa, which is derived from this nfa, is based on
- * the observation that all of the paths in an observably equivalant
- * path set can be explored at the same time, provided that the
- * matcher keeps track not of a single nfa state, but of a set of
- * states. In particular, after following all the paths in an
- * observably equivalant set, you wind up at a set of target states.
- * That set of target states corresponds to one state in the
- * superstate NFA.
- *
- * Staticly, before matching begins, it is convenient to analyze the
- * nfa. Each state is labeled with a list of the observably
- * equivalant path sets who's union covers all the
- * epsilon-side-effect paths beginning in this state. This list is
- * called the possible futures of the state.
- *
- * A trivial example is this NFA:
- * s1
- * A ---> B
- *
- * s2
- * ---> C
- *
- * epsilon s1
- * ---------> D ------> E
- *
- *
- * In this example, A has two possible futures.
- * One invokes the side effect `s1' and contains two paths,
- * one ending in state B, the other in state E.
- * The other invokes the side effect `s2' and contains only
- * one path, landing in state C.
- */
- struct rx_possible_future *futures;
-
-
- /* There are exactly two distinguished states in every NFA: */
- unsigned int is_final:1;
- unsigned int is_start:1;
-
- /* These are used during NFA construction... */
- unsigned int eclosure_needed:1;
- unsigned int mark:1;
-};
-
-
-/* An edge in an NFA is typed: */
-enum rx_nfa_etype
-{
- /* A cset edge is labled with a set of characters one of which
- * must be matched for the edge to be taken.
- */
- ne_cset,
-
- /* An epsilon edge is taken whenever its starting state is
- * reached.
- */
- ne_epsilon,
-
- /* A side effect edge is taken whenever its starting state is
- * reached. Side effects may cause the match to fail or the
- * position of the matcher to advance.
- */
- ne_side_effect /* A special kind of epsilon. */
-};
-
-struct rx_nfa_edge
-{
- struct rx_nfa_edge *next;
- enum rx_nfa_etype type;
- struct rx_nfa_state *dest;
- union
- {
- rx_Bitset cset;
- rx_side_effect side_effect;
- } params;
-};
-
-
-
-/* A possible future consists of a list of side effects
- * and a set of destination states. Below are their
- * representations. These structures are hash-consed which
- * means that lists with the same elements share a representation
- * (their addresses are ==).
- */
-
-struct rx_nfa_state_set
-{
- struct rx_nfa_state * car;
- struct rx_nfa_state_set * cdr;
-};
-
-struct rx_se_list
-{
- rx_side_effect car;
- struct rx_se_list * cdr;
-};
-
-struct rx_possible_future
-{
- struct rx_possible_future *next;
- struct rx_se_list * effects;
- struct rx_nfa_state_set * destset;
-};
-
-
-
-/* This begins the description of the superstate NFA.
- *
- * The superstate NFA corresponds to the NFA in these ways:
- *
- * Every superstate NFA states SUPER correspond to sets of NFA states,
- * nfa_states(SUPER).
- *
- * Superstate edges correspond to NFA paths.
- *
- * The superstate has no epsilon transitions;
- * every edge has a character label, and a (possibly empty) side
- * effect label. The side effect label corresponds to a list of
- * side effects that occur in the NFA. These parts are referred
- * to as: superedge_character(EDGE) and superedge_sides(EDGE).
- *
- * For a superstate edge EDGE starting in some superstate SUPER,
- * the following is true (in pseudo-notation :-):
- *
- * exists DEST in nfa_states s.t.
- * exists nfaEDGE in nfa_edges s.t.
- * origin (nfaEDGE) == DEST
- * && origin (nfaEDGE) is a member of nfa_states(SUPER)
- * && exists PF in possible_futures(dest(nfaEDGE)) s.t.
- * sides_of_possible_future (PF) == superedge_sides (EDGE)
- *
- * also:
- *
- * let SUPER2 := superedge_destination(EDGE)
- * nfa_states(SUPER2)
- * == union of all nfa state sets S s.t.
- * exists PF in possible_futures(dest(nfaEDGE)) s.t.
- * sides_of_possible_future (PF) == superedge_sides (EDGE)
- * && S == dests_of_possible_future (PF) }
- *
- * Or in english, every superstate is a set of nfa states. A given
- * character and a superstate implies many transitions in the NFA --
- * those that begin with an edge labeled with that character from a
- * state in the set corresponding to the superstate.
- *
- * The destinations of those transitions each have a set of possible
- * futures. A possible future is a list of side effects and a set of
- * destination NFA states. Two sets of possible futures can be
- * `merged' by combining all pairs of possible futures that have the
- * same side effects. A pair is combined by creating a new future
- * with the same side effect but the union of the two destination sets.
- * In this way, all the possible futures suggested by a superstate
- * and a character can be merged into a set of possible futures where
- * no two elements of the set have the same set of side effects.
- *
- * The destination of a possible future, being a set of NFA states,
- * corresponds to a supernfa state. So, the merged set of possible
- * futures we just created can serve as a set of edges in the
- * supernfa.
- *
- * The representation of the superstate nfa and the nfa is critical.
- * The nfa has to be compact, but has to facilitate the rapid
- * computation of missing superstates. The superstate nfa has to
- * be fast to interpret, lazilly constructed, and bounded in space.
- *
- * To facilitate interpretation, the superstate data structures are
- * peppered with `instruction frames'. There is an instruction set
- * defined below which matchers using the supernfa must be able to
- * interpret.
- *
- * We'd like to make it possible but not mandatory to use code
- * addresses to represent instructions (c.f. gcc's computed goto).
- * Therefore, we define an enumerated type of opcodes, and when
- * writing one of these instructions into a data structure, use
- * the opcode as an index into a table of instruction values.
- *
- * Here are the opcodes that occur in the superstate nfa:
- */
-
-
-/* Every superstate contains a table of instruction frames indexed
- * by characters. A normal `move' in a matcher is to fetch the next
- * character and use it as an index into a superstates transition
- * table.
- *
- * In the fasted case, only one edge follows from that character.
- * In other cases there is more work to do.
- *
- * The descriptions of the opcodes refer to data structures that are
- * described further below.
- */
-
-enum rx_opcode
-{
- /*
- * BACKTRACK_POINT is invoked when a character transition in
- * a superstate leads to more than one edge. In that case,
- * the edges have to be explored independently using a backtracking
- * strategy.
- *
- * A BACKTRACK_POINT instruction is stored in a superstate's
- * transition table for some character when it is known that that
- * character crosses more than one edge. On encountering this
- * instruction, the matcher saves enough state to backtrack to this
- * point in the match later.
- */
- rx_backtrack_point = 0, /* data is (struct transition_class *) */
-
- /*
- * RX_DO_SIDE_EFFECTS evaluates the side effects of an epsilon path.
- * There is one occurence of this instruction per rx_distinct_future.
- * This instruction is skipped if a rx_distinct_future has no side effects.
- */
- rx_do_side_effects = rx_backtrack_point + 1,
-
- /* data is (struct rx_distinct_future *) */
-
- /*
- * RX_CACHE_MISS instructions are stored in rx_distinct_futures whose
- * destination superstate has been reclaimed (or was never built).
- * It recomputes the destination superstate.
- * RX_CACHE_MISS is also stored in a superstate transition table before
- * any of its edges have been built.
- */
- rx_cache_miss = rx_do_side_effects + 1,
- /* data is (struct rx_distinct_future *) */
-
- /*
- * RX_NEXT_CHAR is called to consume the next character and take the
- * corresponding transition. This is the only instruction that uses
- * the DATA field of the instruction frame instead of DATA_2.
- * (see EXPLORE_FUTURE in regex.c).
- */
- rx_next_char = rx_cache_miss + 1, /* data is (struct superstate *) */
-
- /* RX_BACKTRACK indicates that a transition fails.
- */
- rx_backtrack = rx_next_char + 1, /* no data */
-
- /*
- * RX_ERROR_INX is stored only in places that should never be executed.
- */
- rx_error_inx = rx_backtrack + 1, /* Not supposed to occur. */
-
- rx_num_instructions = rx_error_inx + 1
-};
-
-/* An id_instruction_table holds the values stored in instruction
- * frames. The table is indexed by the enums declared above.
- */
-extern void * rx_id_instruction_table[rx_num_instructions];
-
-/* The heart of the matcher is a `word-code-interpreter'
- * (like a byte-code interpreter, except that instructions
- * are a full word wide).
- *
- * Instructions are not stored in a vector of code, instead,
- * they are scattered throughout the data structures built
- * by the regexp compiler and the matcher. One word-code instruction,
- * together with the arguments to that instruction, constitute
- * an instruction frame (struct rx_inx).
- *
- * This structure type is padded by hand to a power of 2 because
- * in one of the dominant cases, we dispatch by indexing a table
- * of instruction frames. If that indexing can be accomplished
- * by just a shift of the index, we're happy.
- *
- * Instructions take at most one argument, but there are two
- * slots in an instruction frame that might hold that argument.
- * These are called data and data_2. The data slot is only
- * used for one instruction (RX_NEXT_CHAR). For all other
- * instructions, data should be set to 0.
- *
- * RX_NEXT_CHAR is the most important instruction by far.
- * By reserving the data field for its exclusive use,
- * instruction dispatch is sped up in that case. There is
- * no need to fetch both the instruction and the data,
- * only the data is needed. In other words, a `cycle' begins
- * by fetching the field data. If that is non-0, then it must
- * be the destination state of a next_char transition, so
- * make that value the current state, advance the match position
- * by one character, and start a new cycle. On the other hand,
- * if data is 0, fetch the instruction and do a more complicated
- * dispatch on that.
- */
-
-struct rx_inx
-{
- void * data;
- void * data_2;
- void * inx;
- void * fnord;
-};
-
-#ifndef RX_TAIL_ARRAY
-#define RX_TAIL_ARRAY 1
-#endif
-
-/* A superstate corresponds to a set of nfa states. Those sets are
- * represented by STRUCT RX_SUPERSET. The constructors
- * guarantee that only one (shared) structure is created for a given set.
- */
-struct rx_superset
-{
- int refs; /* This is a reference counted structure. */
-
- /* We keep these sets in a cache because (in an unpredictable way),
- * the same set is often created again and again. But that is also
- * problematic -- compatibility with POSIX and GNU regex requires
- * that we not be able to tell when a program discards a particular
- * NFA (thus invalidating the supersets created from it).
- *
- * But when a cache hit appears to occur, we will have in hand the
- * nfa for which it may have happened. That is why every nfa is given
- * its own sequence number. On a cache hit, the cache is validated
- * by comparing the nfa sequence number to this field:
- */
- int id;
-
- struct rx_nfa_state * car; /* May or may not be a valid addr. */
- struct rx_superset * cdr;
-
- /* If the corresponding superstate exists: */
- struct rx_superstate * superstate;
-
-
- /* There is another bookkeeping problem. It is expensive to
- * compute the starting nfa state set for an nfa. So, once computed,
- * it is cached in the `struct rx'.
- *
- * But, the state set can be flushed from the superstate cache.
- * When that happens, we can't know if the corresponding `struct rx'
- * is still alive or if it has been freed or re-used by the program.
- * So, the cached pointer to this set in a struct rx might be invalid
- * and we need a way to validate it.
- *
- * Fortunately, even if this set is flushed from the cache, it is
- * not freed. It just goes on the free-list of supersets.
- * So we can still examine it.
- *
- * So to validate a starting set memo, check to see if the
- * starts_for field still points back to the struct rx in question,
- * and if the ID matches the rx sequence number.
- */
- struct rx * starts_for;
-
- /* This is used to link into a hash bucket so these objects can
- * be `hash-consed'.
- */
- struct rx_hash_item hash_item;
-};
-
-#define rx_protect_superset(RX,CON) (++(CON)->refs)
-
-/* The terminology may be confusing (rename this structure?).
- * Every character occurs in at most one rx_super_edge per super-state.
- * But, that structure might have more than one option, indicating a point
- * of non-determinism.
- *
- * In other words, this structure holds a list of superstate edges
- * sharing a common starting state and character label. The edges
- * are in the field OPTIONS. All superstate edges sharing the same
- * starting state and character are in this list.
- */
-struct rx_super_edge
-{
- struct rx_super_edge *next;
- struct rx_inx rx_backtrack_frame;
- int cset_size;
- rx_Bitset cset;
- struct rx_distinct_future *options;
-};
-
-/* A superstate is a set of nfa states (RX_SUPERSET) along
- * with a transition table. Superstates are built on demand and reclaimed
- * without warning. To protect a superstate from this ghastly fate,
- * use LOCK_SUPERSTATE.
- */
-struct rx_superstate
-{
- int rx_id; /* c.f. the id field of rx_superset */
- int locks; /* protection from reclamation */
-
- /* Within a superstate cache, all the superstates are kept in a big
- * queue. The tail of the queue is the state most likely to be
- * reclaimed. The *recyclable fields hold the queue position of
- * this state.
- */
- struct rx_superstate * next_recyclable;
- struct rx_superstate * prev_recyclable;
-
- /* The supernfa edges that exist in the cache and that have
- * this state as their destination are kept in this list:
- */
- struct rx_distinct_future * transition_refs;
-
- /* The list of nfa states corresponding to this superstate: */
- struct rx_superset * contents;
-
- /* The list of edges in the cache beginning from this state. */
- struct rx_super_edge * edges;
-
- /* A tail of the recyclable queue is marked as semifree. A semifree
- * state has no incoming next_char transitions -- any transition
- * into a semifree state causes a complex dispatch with the side
- * effect of rescuing the state from its semifree state.
- *
- * An alternative to this might be to make next_char more expensive,
- * and to move a state to the head of the recyclable queue whenever
- * it is entered. That way, popular states would never be recycled.
- *
- * But unilaterally making next_char more expensive actually loses.
- * So, incoming transitions are only made expensive for states near
- * the tail of the recyclable queue. The more cache contention
- * there is, the more frequently a state will have to prove itself
- * and be moved back to the front of the queue. If there is less
- * contention, then popular states just aggregate in the front of
- * the queue and stay there.
- */
- int is_semifree;
-
-
- /* This keeps track of the size of the transition table for this
- * state. There is a half-hearted attempt to support variable sized
- * superstates.
- */
- int trans_size;
-
- /* Indexed by characters... */
- struct rx_inx transitions[RX_TAIL_ARRAY];
-};
-
-
-/* A list of distinct futures define the edges that leave from a
- * given superstate on a given character. c.f. rx_super_edge.
- */
-
-struct rx_distinct_future
-{
- struct rx_distinct_future * next_same_super_edge[2];
- struct rx_distinct_future * next_same_dest;
- struct rx_distinct_future * prev_same_dest;
- struct rx_superstate * present; /* source state */
- struct rx_superstate * future; /* destination state */
- struct rx_super_edge * edge;
-
-
- /* The future_frame holds the instruction that should be executed
- * after all the side effects are done, when it is time to complete
- * the transition to the next state.
- *
- * Normally this is a next_char instruction, but it may be a
- * cache_miss instruction as well, depending on whether or not
- * the superstate is in the cache and semifree.
- *
- * If this is the only future for a given superstate/char, and
- * if there are no side effects to be performed, this frame is
- * not used (directly) at all. Instead, its contents are copied
- * into the transition table of the starting state of this dist. future.
- */
- struct rx_inx future_frame;
-
- struct rx_inx side_effects_frame;
- struct rx_se_list * effects;
-};
-
-#define rx_lock_superstate(R,S) ((S)->locks++)
-#define rx_unlock_superstate(R,S) (--(S)->locks)
-
-
-/* This page destined for rx.h */
-
-struct rx_blocklist
-{
- struct rx_blocklist * next;
- int bytes;
-};
-
-struct rx_freelist
-{
- struct rx_freelist * next;
-};
-
-struct rx_cache;
-
-#ifdef __STDC__
-typedef void (*rx_morecore_fn)(struct rx_cache *);
-#else
-typedef void (*rx_morecore_fn)();
-#endif
-
-/* You use this to control the allocation of superstate data
- * during matching. Most of it should be initialized to 0.
- *
- * A MORECORE function is necessary. It should allocate
- * a new block of memory or return 0.
- * A default that uses malloc is called `rx_morecore'.
- *
- * The number of SUPERSTATES_ALLOWED indirectly limits how much memory
- * the system will try to allocate. The default is 128. Batch style
- * applications that are very regexp intensive should use as high a number
- * as possible without thrashing.
- *
- * The LOCAL_CSET_SIZE is the number of characters in a character set.
- * It is therefore the number of entries in a superstate transition table.
- * Generally, it should be 256. If your character set has 16 bits,
- * it is better to translate your regexps into equivalent 8 bit patterns.
- */
-
-struct rx_cache
-{
- struct rx_hash_rules superset_hash_rules;
-
- /* Objects are allocated by incrementing a pointer that
- * scans across rx_blocklists.
- */
- struct rx_blocklist * memory;
- struct rx_blocklist * memory_pos;
- int bytes_left;
- char * memory_addr;
- rx_morecore_fn morecore;
-
- /* Freelists. */
- struct rx_freelist * free_superstates;
- struct rx_freelist * free_transition_classes;
- struct rx_freelist * free_discernable_futures;
- struct rx_freelist * free_supersets;
- struct rx_freelist * free_hash;
-
- /* Two sets of superstates -- those that are semifreed, and those
- * that are being used.
- */
- struct rx_superstate * lru_superstate;
- struct rx_superstate * semifree_superstate;
-
- struct rx_superset * empty_superset;
-
- int superstates;
- int semifree_superstates;
- int hits;
- int misses;
- int superstates_allowed;
-
- int local_cset_size;
- void ** instruction_table;
-
- struct rx_hash superset_table;
-};
-
-
-
-/* The lowest-level search function supports arbitrarily fragmented
- * strings and (optionally) suspendable/resumable searches.
- *
- * Callers have to provide a few hooks.
- */
-
-#ifndef __GNUC__
-#ifdef __STDC__
-#define __const__ const
-#else
-#define __const__
-#endif
-#endif
-
-/* This holds a matcher position */
-struct rx_string_position
-{
- __const__ unsigned char * pos; /* The current pos. */
- __const__ unsigned char * string; /* The current string burst. */
- __const__ unsigned char * end; /* First invalid position >= POS. */
- int offset; /* Integer address of the current burst. */
- int size; /* Current string's size. */
- int search_direction; /* 1 or -1 */
- int search_end; /* First position to not try. */
-};
-
-
-enum rx_get_burst_return
-{
- rx_get_burst_continuation,
- rx_get_burst_error,
- rx_get_burst_ok,
- rx_get_burst_no_more
-};
-
-
-/* A call to get burst should make POS valid. It might be invalid
- * if the STRING field doesn't point to a burst that actually
- * contains POS.
- *
- * GET_BURST should take a clue from SEARCH_DIRECTION (1 or -1) as to
- * whether or not to pad to the left. Padding to the right is always
- * appropriate, but need not go past the point indicated by STOP.
- *
- * If a continuation is returned, then the reentering call to
- * a search function will retry the get_burst.
- */
-
-#ifdef __STDC__
-typedef enum rx_get_burst_return
- (*rx_get_burst_fn) (struct rx_string_position * pos,
- void * app_closure,
- int stop);
-
-#else
-typedef enum rx_get_burst_return (*rx_get_burst_fn) ();
-#endif
-
-
-enum rx_back_check_return
-{
- rx_back_check_continuation,
- rx_back_check_error,
- rx_back_check_pass,
- rx_back_check_fail
-};
-
-/* Back_check should advance the position it is passed
- * over rparen - lparen characters and return pass iff
- * the characters starting at POS match those indexed
- * by [LPAREN..RPAREN].
- *
- * If a continuation is returned, then the reentering call to
- * a search function will retry the back_check.
- */
-
-#ifdef __STDC__
-typedef enum rx_back_check_return
- (*rx_back_check_fn) (struct rx_string_position * pos,
- int lparen,
- int rparen,
- unsigned char * translate,
- void * app_closure,
- int stop);
-
-#else
-typedef enum rx_back_check_return (*rx_back_check_fn) ();
-#endif
-
-
-
-
-/* A call to fetch_char should return the character at POS or POS + 1.
- * Returning continuations here isn't supported. OFFSET is either 0 or 1
- * and indicates which characters is desired.
- */
-
-#ifdef __STDC__
-typedef int (*rx_fetch_char_fn) (struct rx_string_position * pos,
- int offset,
- void * app_closure,
- int stop);
-#else
-typedef int (*rx_fetch_char_fn) ();
-#endif
-
-
-enum rx_search_return
-{
- rx_search_continuation = -4,
- rx_search_error = -3,
- rx_search_soft_fail = -2, /* failed by running out of string */
- rx_search_fail = -1 /* failed only by reaching failure states */
- /* return values >= 0 indicate the position of a successful match */
-};
-
-
-
-
-
-
-/* regex.h
- *
- * The remaining declarations replace regex.h.
- */
-
-/* This is an array of error messages corresponding to the error codes.
- */
-extern __const__ char *re_error_msg[];
-
-/* If any error codes are removed, changed, or added, update the
- `re_error_msg' table in regex.c. */
-typedef enum
-{
- REG_NOERROR = 0, /* Success. */
- REG_NOMATCH, /* Didn't find a match (for regexec). */
-
- /* POSIX regcomp return error codes. (In the order listed in the
- standard.) */
- REG_BADPAT, /* Invalid pattern. */
- REG_ECOLLATE, /* Not implemented. */
- REG_ECTYPE, /* Invalid character class name. */
- REG_EESCAPE, /* Trailing backslash. */
- REG_ESUBREG, /* Invalid back reference. */
- REG_EBRACK, /* Unmatched left bracket. */
- REG_EPAREN, /* Parenthesis imbalance. */
- REG_EBRACE, /* Unmatched \{. */
- REG_BADBR, /* Invalid contents of \{\}. */
- REG_ERANGE, /* Invalid range end. */
- REG_ESPACE, /* Ran out of memory. */
- REG_BADRPT, /* No preceding re for repetition op. */
-
- /* Error codes we've added. */
- REG_EEND, /* Premature end. */
- REG_ESIZE, /* Compiled pattern bigger than 2^16 bytes. */
- REG_ERPAREN /* Unmatched ) or \); not returned from regcomp. */
-} reg_errcode_t;
-
-/* The regex.c support, as a client of rx, defines a set of possible
- * side effects that can be added to the edge lables of nfa edges.
- * Here is the list of sidef effects in use.
- */
-
-enum re_side_effects
-{
-#define RX_WANT_SE_DEFS 1
-#undef RX_DEF_SE
-#undef RX_DEF_CPLX_SE
-#define RX_DEF_SE(IDEM, NAME, VALUE) NAME VALUE,
-#define RX_DEF_CPLX_SE(IDEM, NAME, VALUE) NAME VALUE,
-#include "rx.h"
-#undef RX_DEF_SE
-#undef RX_DEF_CPLX_SE
-#undef RX_WANT_SE_DEFS
- re_floogle_flap = 65533
-};
-
-/* These hold paramaters for the kinds of side effects that are possible
- * in the supported pattern languages. These include things like the
- * numeric bounds of {} operators and the index of paren registers for
- * subexpression measurement or backreferencing.
- */
-struct re_se_params
-{
- enum re_side_effects se;
- int op1;
- int op2;
-};
-
-typedef unsigned reg_syntax_t;
-
-struct re_pattern_buffer
-{
- struct rx rx;
- reg_syntax_t syntax; /* See below for syntax bit definitions. */
-
- unsigned int no_sub:1; /* If set, don't return register offsets. */
- unsigned int not_bol:1; /* If set, the anchors ('^' and '$') don't */
- unsigned int not_eol:1; /* match at the ends of the string. */
- unsigned int newline_anchor:1;/* If true, an anchor at a newline matches.*/
- unsigned int least_subs:1; /* If set, and returning registers, return
- * as few values as possible. Only
- * backreferenced groups and group 0 (the whole
- * match) will be returned.
- */
-
- /* If true, this says that the matcher should keep registers on its
- * backtracking stack. For many patterns, we can easily determine that
- * this isn't necessary.
- */
- unsigned int match_regs_on_stack:1;
- unsigned int search_regs_on_stack:1;
-
- /* is_anchored and begbuf_only are filled in by rx_compile. */
- unsigned int is_anchored:1; /* Anchorded by ^? */
- unsigned int begbuf_only:1; /* Anchored to char position 0? */
-
-
- /* If REGS_UNALLOCATED, allocate space in the `regs' structure
- * for `max (RE_NREGS, re_nsub + 1)' groups.
- * If REGS_REALLOCATE, reallocate space if necessary.
- * If REGS_FIXED, use what's there.
- */
-#define REGS_UNALLOCATED 0
-#define REGS_REALLOCATE 1
-#define REGS_FIXED 2
- unsigned int regs_allocated:2;
-
-
- /* Either a translate table to apply to all characters before
- * comparing them, or zero for no translation. The translation
- * is applied to a pattern when it is compiled and to a string
- * when it is matched.
- */
- unsigned char * translate;
-
- /* If this is a valid pointer, it tells rx not to store the extents of
- * certain subexpressions (those corresponding to non-zero entries).
- * Passing 0x1 is the same as passing an array of all ones. Passing 0x0
- * is the same as passing an array of all zeros.
- * The array should contain as many entries as their are subexps in the
- * regexp.
- *
- * For POSIX compatability, when using regcomp and regexec this field
- * is zeroed and ignored.
- */
- char * syntax_parens;
-
- /* Number of subexpressions found by the compiler. */
- size_t re_nsub;
-
- void * buffer; /* Malloced memory for the nfa. */
- unsigned long allocated; /* Size of that memory. */
-
- /* Pointer to a fastmap, if any, otherwise zero. re_search uses
- * the fastmap, if there is one, to skip over impossible
- * starting points for matches. */
- char *fastmap;
-
- unsigned int fastmap_accurate:1; /* These three are internal. */
- unsigned int can_match_empty:1;
- struct rx_nfa_state * start; /* The nfa starting state. */
-
- /* This is the list of iterator bounds for {lo,hi} constructs.
- * The memory pointed to is part of the rx->buffer.
- */
- struct re_se_params *se_params;
-
- /* This is a bitset representation of the fastmap.
- * This is a true fastmap that already takes the translate
- * table into account.
- */
- rx_Bitset fastset;
-};
-
-/* Type for byte offsets within the string. POSIX mandates this. */
-typedef int regoff_t;
-
-/* This is the structure we store register match data in. See
- regex.texinfo for a full description of what registers match. */
-struct re_registers
-{
- unsigned num_regs;
- regoff_t *start;
- regoff_t *end;
-};
-
-typedef struct re_pattern_buffer regex_t;
-
-/* POSIX specification for registers. Aside from the different names than
- `re_registers', POSIX uses an array of structures, instead of a
- structure of arrays. */
-typedef struct
-{
- regoff_t rm_so; /* Byte offset from string's start to substring's start. */
- regoff_t rm_eo; /* Byte offset from string's start to substring's end. */
-} regmatch_t;
-
-
-/* The following bits are used to determine the regexp syntax we
- recognize. The set/not-set meanings are chosen so that Emacs syntax
- remains the value 0. The bits are given in alphabetical order, and
- the definitions shifted by one from the previous bit; thus, when we
- add or remove a bit, only one other definition need change. */
-
-/* If this bit is not set, then \ inside a bracket expression is literal.
- If set, then such a \ quotes the following character. */
-#define RE_BACKSLASH_ESCAPE_IN_LISTS (1)
-
-/* If this bit is not set, then + and ? are operators, and \+ and \? are
- literals.
- If set, then \+ and \? are operators and + and ? are literals. */
-#define RE_BK_PLUS_QM (RE_BACKSLASH_ESCAPE_IN_LISTS << 1)
-
-/* If this bit is set, then character classes are supported. They are:
- [:alpha:], [:upper:], [:lower:], [:digit:], [:alnum:], [:xdigit:],
- [:space:], [:print:], [:punct:], [:graph:], and [:cntrl:].
- If not set, then character classes are not supported. */
-#define RE_CHAR_CLASSES (RE_BK_PLUS_QM << 1)
-
-/* If this bit is set, then ^ and $ are always anchors (outside bracket
- expressions, of course).
- If this bit is not set, then it depends:
- ^ is an anchor if it is at the beginning of a regular
- expression or after an open-group or an alternation operator;
- $ is an anchor if it is at the end of a regular expression, or
- before a close-group or an alternation operator.
-
- This bit could be (re)combined with RE_CONTEXT_INDEP_OPS, because
- POSIX draft 11.2 says that * etc. in leading positions is undefined.
- We already implemented a previous draft which made those constructs
- invalid, though, so we haven't changed the code back. */
-#define RE_CONTEXT_INDEP_ANCHORS (RE_CHAR_CLASSES << 1)
-
-/* If this bit is set, then special characters are always special
- regardless of where they are in the pattern.
- If this bit is not set, then special characters are special only in
- some contexts; otherwise they are ordinary. Specifically,
- * + ? and intervals are only special when not after the beginning,
- open-group, or alternation operator. */
-#define RE_CONTEXT_INDEP_OPS (RE_CONTEXT_INDEP_ANCHORS << 1)
-
-/* If this bit is set, then *, +, ?, and { cannot be first in an re or
- immediately after an alternation or begin-group operator. */
-#define RE_CONTEXT_INVALID_OPS (RE_CONTEXT_INDEP_OPS << 1)
-
-/* If this bit is set, then . matches newline.
- If not set, then it doesn't. */
-#define RE_DOT_NEWLINE (RE_CONTEXT_INVALID_OPS << 1)
-
-/* If this bit is set, then . doesn't match NUL.
- If not set, then it does. */
-#define RE_DOT_NOT_NULL (RE_DOT_NEWLINE << 1)
-
-/* If this bit is set, nonmatching lists [^...] do not match newline.
- If not set, they do. */
-#define RE_HAT_LISTS_NOT_NEWLINE (RE_DOT_NOT_NULL << 1)
-
-/* If this bit is set, either \{...\} or {...} defines an
- interval, depending on RE_NO_BK_BRACES.
- If not set, \{, \}, {, and } are literals. */
-#define RE_INTERVALS (RE_HAT_LISTS_NOT_NEWLINE << 1)
-
-/* If this bit is set, +, ? and | aren't recognized as operators.
- If not set, they are. */
-#define RE_LIMITED_OPS (RE_INTERVALS << 1)
-
-/* If this bit is set, newline is an alternation operator.
- If not set, newline is literal. */
-#define RE_NEWLINE_ALT (RE_LIMITED_OPS << 1)
-
-/* If this bit is set, then `{...}' defines an interval, and \{ and \}
- are literals.
- If not set, then `\{...\}' defines an interval. */
-#define RE_NO_BK_BRACES (RE_NEWLINE_ALT << 1)
-
-/* If this bit is set, (...) defines a group, and \( and \) are literals.
- If not set, \(...\) defines a group, and ( and ) are literals. */
-#define RE_NO_BK_PARENS (RE_NO_BK_BRACES << 1)
-
-/* If this bit is set, then \<digit> matches <digit>.
- If not set, then \<digit> is a back-reference. */
-#define RE_NO_BK_REFS (RE_NO_BK_PARENS << 1)
-
-/* If this bit is set, then | is an alternation operator, and \| is literal.
- If not set, then \| is an alternation operator, and | is literal. */
-#define RE_NO_BK_VBAR (RE_NO_BK_REFS << 1)
-
-/* If this bit is set, then an ending range point collating higher
- than the starting range point, as in [z-a], is invalid.
- If not set, then when ending range point collates higher than the
- starting range point, the range is ignored. */
-#define RE_NO_EMPTY_RANGES (RE_NO_BK_VBAR << 1)
-
-/* If this bit is set, then an unmatched ) is ordinary.
- If not set, then an unmatched ) is invalid. */
-#define RE_UNMATCHED_RIGHT_PAREN_ORD (RE_NO_EMPTY_RANGES << 1)
-
-/* This global variable defines the particular regexp syntax to use (for
- some interfaces). When a regexp is compiled, the syntax used is
- stored in the pattern buffer, so changing this does not affect
- already-compiled regexps. */
-extern reg_syntax_t re_syntax_options;
-
-/* Define combinations of the above bits for the standard possibilities.
- (The [[[ comments delimit what gets put into the Texinfo file, so
- don't delete them!) */
-/* [[[begin syntaxes]]] */
-#define RE_SYNTAX_EMACS 0
-
-#define RE_SYNTAX_AWK \
- (RE_BACKSLASH_ESCAPE_IN_LISTS | RE_DOT_NOT_NULL \
- | RE_NO_BK_PARENS | RE_NO_BK_REFS \
- | RE_NO_BK_VBAR | RE_NO_EMPTY_RANGES \
- | RE_UNMATCHED_RIGHT_PAREN_ORD)
-
-#define RE_SYNTAX_POSIX_AWK \
- (RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS)
-
-#define RE_SYNTAX_GREP \
- (RE_BK_PLUS_QM | RE_CHAR_CLASSES \
- | RE_HAT_LISTS_NOT_NEWLINE | RE_INTERVALS \
- | RE_NEWLINE_ALT)
-
-#define RE_SYNTAX_EGREP \
- (RE_CHAR_CLASSES | RE_CONTEXT_INDEP_ANCHORS \
- | RE_CONTEXT_INDEP_OPS | RE_HAT_LISTS_NOT_NEWLINE \
- | RE_NEWLINE_ALT | RE_NO_BK_PARENS \
- | RE_NO_BK_VBAR)
-
-#define RE_SYNTAX_POSIX_EGREP \
- (RE_SYNTAX_EGREP | RE_INTERVALS | RE_NO_BK_BRACES)
-
-#define RE_SYNTAX_SED RE_SYNTAX_POSIX_BASIC
-
-/* Syntax bits common to both basic and extended POSIX regex syntax. */
-#define _RE_SYNTAX_POSIX_COMMON \
- (RE_CHAR_CLASSES | RE_DOT_NEWLINE | RE_DOT_NOT_NULL \
- | RE_INTERVALS | RE_NO_EMPTY_RANGES)
-
-#define RE_SYNTAX_POSIX_BASIC \
- (_RE_SYNTAX_POSIX_COMMON | RE_BK_PLUS_QM)
-
-/* Differs from ..._POSIX_BASIC only in that RE_BK_PLUS_QM becomes
- RE_LIMITED_OPS, i.e., \? \+ \| are not recognized. Actually, this
- isn't minimal, since other operators, such as \`, aren't disabled. */
-#define RE_SYNTAX_POSIX_MINIMAL_BASIC \
- (_RE_SYNTAX_POSIX_COMMON | RE_LIMITED_OPS)
-
-#define RE_SYNTAX_POSIX_EXTENDED \
- (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \
- | RE_CONTEXT_INDEP_OPS | RE_NO_BK_BRACES \
- | RE_NO_BK_PARENS | RE_NO_BK_VBAR \
- | RE_UNMATCHED_RIGHT_PAREN_ORD)
-
-/* Differs from ..._POSIX_EXTENDED in that RE_CONTEXT_INVALID_OPS
- replaces RE_CONTEXT_INDEP_OPS and RE_NO_BK_REFS is added. */
-#define RE_SYNTAX_POSIX_MINIMAL_EXTENDED \
- (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \
- | RE_CONTEXT_INVALID_OPS | RE_NO_BK_BRACES \
- | RE_NO_BK_PARENS | RE_NO_BK_REFS \
- | RE_NO_BK_VBAR | RE_UNMATCHED_RIGHT_PAREN_ORD)
-/* [[[end syntaxes]]] */
-
-/* Maximum number of duplicates an interval can allow. Some systems
- (erroneously) define this in other header files, but we want our
- value, so remove any previous define. */
-#ifdef RE_DUP_MAX
-#undef RE_DUP_MAX
-#endif
-#define RE_DUP_MAX ((1 << 15) - 1)
-
-
-
-/* POSIX `cflags' bits (i.e., information for `regcomp'). */
-
-/* If this bit is set, then use extended regular expression syntax.
- If not set, then use basic regular expression syntax. */
-#define REG_EXTENDED 1
-
-/* If this bit is set, then ignore case when matching.
- If not set, then case is significant. */
-#define REG_ICASE (REG_EXTENDED << 1)
-
-/* If this bit is set, then anchors do not match at newline
- characters in the string.
- If not set, then anchors do match at newlines. */
-#define REG_NEWLINE (REG_ICASE << 1)
-
-/* If this bit is set, then report only success or fail in regexec.
- If not set, then returns differ between not matching and errors. */
-#define REG_NOSUB (REG_NEWLINE << 1)
-
-
-/* POSIX `eflags' bits (i.e., information for regexec). */
-
-/* If this bit is set, then the beginning-of-line operator doesn't match
- the beginning of the string (presumably because it's not the
- beginning of a line).
- If not set, then the beginning-of-line operator does match the
- beginning of the string. */
-#define REG_NOTBOL 1
-
-/* Like REG_NOTBOL, except for the end-of-line. */
-#define REG_NOTEOL (1 << 1)
-
-/* If `regs_allocated' is REGS_UNALLOCATED in the pattern buffer,
- * `re_match_2' returns information about at least this many registers
- * the first time a `regs' structure is passed.
- *
- * Also, this is the greatest number of backreferenced subexpressions
- * allowed in a pattern being matched without caller-supplied registers.
- */
-#ifndef RE_NREGS
-#define RE_NREGS 30
-#endif
-
-extern int rx_cache_bound;
-extern char rx_version_string[];
-
-
-
-#ifdef RX_WANT_RX_DEFS
-
-/* This is decls to the interesting subsystems and lower layers
- * of rx. Everything which doesn't have a public counterpart in
- * regex.c is declared here.
- */
-
-
-#ifdef __STDC__
-typedef void (*rx_hash_freefn) (struct rx_hash_item * it);
-#else /* ndef __STDC__ */
-typedef void (*rx_hash_freefn) ();
-#endif /* ndef __STDC__ */
-
-
-
-
-#ifdef __STDC__
-RX_DECL int rx_bitset_is_equal (int size, rx_Bitset a, rx_Bitset b);
-RX_DECL int rx_bitset_is_subset (int size, rx_Bitset a, rx_Bitset b);
-RX_DECL int rx_bitset_empty (int size, rx_Bitset set);
-RX_DECL void rx_bitset_null (int size, rx_Bitset b);
-RX_DECL void rx_bitset_universe (int size, rx_Bitset b);
-RX_DECL void rx_bitset_complement (int size, rx_Bitset b);
-RX_DECL void rx_bitset_assign (int size, rx_Bitset a, rx_Bitset b);
-RX_DECL void rx_bitset_union (int size, rx_Bitset a, rx_Bitset b);
-RX_DECL void rx_bitset_intersection (int size,
- rx_Bitset a, rx_Bitset b);
-RX_DECL void rx_bitset_difference (int size, rx_Bitset a, rx_Bitset b);
-RX_DECL void rx_bitset_revdifference (int size,
- rx_Bitset a, rx_Bitset b);
-RX_DECL void rx_bitset_xor (int size, rx_Bitset a, rx_Bitset b);
-RX_DECL unsigned long rx_bitset_hash (int size, rx_Bitset b);
-RX_DECL struct rx_hash_item * rx_hash_find (struct rx_hash * table,
- unsigned long hash,
- void * value,
- struct rx_hash_rules * rules);
-RX_DECL struct rx_hash_item * rx_hash_store (struct rx_hash * table,
- unsigned long hash,
- void * value,
- struct rx_hash_rules * rules);
-RX_DECL void rx_hash_free (struct rx_hash_item * it, struct rx_hash_rules * rules);
-RX_DECL void rx_free_hash_table (struct rx_hash * tab, rx_hash_freefn freefn,
- struct rx_hash_rules * rules);
-RX_DECL rx_Bitset rx_cset (struct rx *rx);
-RX_DECL rx_Bitset rx_copy_cset (struct rx *rx, rx_Bitset a);
-RX_DECL void rx_free_cset (struct rx * rx, rx_Bitset c);
-RX_DECL struct rexp_node * rexp_node (struct rx *rx,
- enum rexp_node_type type);
-RX_DECL struct rexp_node * rx_mk_r_cset (struct rx * rx,
- rx_Bitset b);
-RX_DECL struct rexp_node * rx_mk_r_concat (struct rx * rx,
- struct rexp_node * a,
- struct rexp_node * b);
-RX_DECL struct rexp_node * rx_mk_r_alternate (struct rx * rx,
- struct rexp_node * a,
- struct rexp_node * b);
-RX_DECL struct rexp_node * rx_mk_r_opt (struct rx * rx,
- struct rexp_node * a);
-RX_DECL struct rexp_node * rx_mk_r_star (struct rx * rx,
- struct rexp_node * a);
-RX_DECL struct rexp_node * rx_mk_r_2phase_star (struct rx * rx,
- struct rexp_node * a,
- struct rexp_node * b);
-RX_DECL struct rexp_node * rx_mk_r_side_effect (struct rx * rx,
- rx_side_effect a);
-RX_DECL struct rexp_node * rx_mk_r_data (struct rx * rx,
- void * a);
-RX_DECL void rx_free_rexp (struct rx * rx, struct rexp_node * node);
-RX_DECL struct rexp_node * rx_copy_rexp (struct rx *rx,
- struct rexp_node *node);
-RX_DECL struct rx_nfa_state * rx_nfa_state (struct rx *rx);
-RX_DECL void rx_free_nfa_state (struct rx_nfa_state * n);
-RX_DECL struct rx_nfa_state * rx_id_to_nfa_state (struct rx * rx,
- int id);
-RX_DECL struct rx_nfa_edge * rx_nfa_edge (struct rx *rx,
- enum rx_nfa_etype type,
- struct rx_nfa_state *start,
- struct rx_nfa_state *dest);
-RX_DECL void rx_free_nfa_edge (struct rx_nfa_edge * e);
-RX_DECL void rx_free_nfa (struct rx *rx);
-RX_DECL int rx_build_nfa (struct rx *rx,
- struct rexp_node *rexp,
- struct rx_nfa_state **start,
- struct rx_nfa_state **end);
-RX_DECL void rx_name_nfa_states (struct rx *rx);
-RX_DECL int rx_eclose_nfa (struct rx *rx);
-RX_DECL void rx_delete_epsilon_transitions (struct rx *rx);
-RX_DECL int rx_compactify_nfa (struct rx *rx,
- void **mem, unsigned long *size);
-RX_DECL void rx_release_superset (struct rx *rx,
- struct rx_superset *set);
-RX_DECL struct rx_superset * rx_superset_cons (struct rx * rx,
- struct rx_nfa_state *car, struct rx_superset *cdr);
-RX_DECL struct rx_superset * rx_superstate_eclosure_union
- (struct rx * rx, struct rx_superset *set, struct rx_nfa_state_set *ecl);
-RX_DECL struct rx_superstate * rx_superstate (struct rx *rx,
- struct rx_superset *set);
-RX_DECL struct rx_inx * rx_handle_cache_miss
- (struct rx *rx, struct rx_superstate *super, unsigned char chr, void *data);
-RX_DECL reg_errcode_t rx_compile (__const__ char *pattern, int size,
- reg_syntax_t syntax,
- struct re_pattern_buffer * rxb);
-RX_DECL void rx_blow_up_fastmap (struct re_pattern_buffer * rxb);
-#else /* STDC */
-RX_DECL int rx_bitset_is_equal ();
-RX_DECL int rx_bitset_is_subset ();
-RX_DECL int rx_bitset_empty ();
-RX_DECL void rx_bitset_null ();
-RX_DECL void rx_bitset_universe ();
-RX_DECL void rx_bitset_complement ();
-RX_DECL void rx_bitset_assign ();
-RX_DECL void rx_bitset_union ();
-RX_DECL void rx_bitset_intersection ();
-RX_DECL void rx_bitset_difference ();
-RX_DECL void rx_bitset_revdifference ();
-RX_DECL void rx_bitset_xor ();
-RX_DECL unsigned long rx_bitset_hash ();
-RX_DECL struct rx_hash_item * rx_hash_find ();
-RX_DECL struct rx_hash_item * rx_hash_store ();
-RX_DECL void rx_hash_free ();
-RX_DECL void rx_free_hash_table ();
-RX_DECL rx_Bitset rx_cset ();
-RX_DECL rx_Bitset rx_copy_cset ();
-RX_DECL void rx_free_cset ();
-RX_DECL struct rexp_node * rexp_node ();
-RX_DECL struct rexp_node * rx_mk_r_cset ();
-RX_DECL struct rexp_node * rx_mk_r_concat ();
-RX_DECL struct rexp_node * rx_mk_r_alternate ();
-RX_DECL struct rexp_node * rx_mk_r_opt ();
-RX_DECL struct rexp_node * rx_mk_r_star ();
-RX_DECL struct rexp_node * rx_mk_r_2phase_star ();
-RX_DECL struct rexp_node * rx_mk_r_side_effect ();
-RX_DECL struct rexp_node * rx_mk_r_data ();
-RX_DECL void rx_free_rexp ();
-RX_DECL struct rexp_node * rx_copy_rexp ();
-RX_DECL struct rx_nfa_state * rx_nfa_state ();
-RX_DECL void rx_free_nfa_state ();
-RX_DECL struct rx_nfa_state * rx_id_to_nfa_state ();
-RX_DECL struct rx_nfa_edge * rx_nfa_edge ();
-RX_DECL void rx_free_nfa_edge ();
-RX_DECL void rx_free_nfa ();
-RX_DECL int rx_build_nfa ();
-RX_DECL void rx_name_nfa_states ();
-RX_DECL int rx_eclose_nfa ();
-RX_DECL void rx_delete_epsilon_transitions ();
-RX_DECL int rx_compactify_nfa ();
-RX_DECL void rx_release_superset ();
-RX_DECL struct rx_superset * rx_superset_cons ();
-RX_DECL struct rx_superset * rx_superstate_eclosure_union ();
-RX_DECL struct rx_superstate * rx_superstate ();
-RX_DECL struct rx_inx * rx_handle_cache_miss ();
-RX_DECL reg_errcode_t rx_compile ();
-RX_DECL void rx_blow_up_fastmap ();
-#endif /* STDC */
-
-
-#endif /* RX_WANT_RX_DEFS */
-
-
-
-#ifdef __STDC__
-extern int re_search_2 (struct re_pattern_buffer *rxb,
- __const__ char * string1, int size1,
- __const__ char * string2, int size2,
- int startpos, int range,
- struct re_registers *regs,
- int stop);
-extern int re_search (struct re_pattern_buffer * rxb, __const__ char *string,
- int size, int startpos, int range,
- struct re_registers *regs);
-extern int re_match_2 (struct re_pattern_buffer * rxb,
- __const__ char * string1, int size1,
- __const__ char * string2, int size2,
- int pos, struct re_registers *regs, int stop);
-extern int re_match (struct re_pattern_buffer * rxb,
- __const__ char * string,
- int size, int pos,
- struct re_registers *regs);
-extern reg_syntax_t re_set_syntax (reg_syntax_t syntax);
-extern void re_set_registers (struct re_pattern_buffer *bufp,
- struct re_registers *regs,
- unsigned num_regs,
- regoff_t * starts, regoff_t * ends);
-extern __const__ char * re_compile_pattern (__const__ char *pattern,
- int length,
- struct re_pattern_buffer * rxb);
-extern int re_compile_fastmap (struct re_pattern_buffer * rxb);
-extern char * re_comp (__const__ char *s);
-extern int re_exec (__const__ char *s);
-extern int regcomp (regex_t * preg, __const__ char * pattern, int cflags);
-extern int regexec (__const__ regex_t *preg, __const__ char *string,
- size_t nmatch, regmatch_t pmatch[],
- int eflags);
-extern size_t regerror (int errcode, __const__ regex_t *preg,
- char *errbuf, size_t errbuf_size);
-extern void regfree (regex_t *preg);
-
-#else /* STDC */
-extern int re_search_2 ();
-extern int re_search ();
-extern int re_match_2 ();
-extern int re_match ();
-extern reg_syntax_t re_set_syntax ();
-extern void re_set_registers ();
-extern __const__ char * re_compile_pattern ();
-extern int re_compile_fastmap ();
-extern char * re_comp ();
-extern int re_exec ();
-extern int regcomp ();
-extern int regexec ();
-extern size_t regerror ();
-extern void regfree ();
-
-#endif /* STDC */
-
-
-
-#ifdef RX_WANT_RX_DEFS
-
-struct rx_counter_frame
-{
- int tag;
- int val;
- struct rx_counter_frame * inherited_from; /* If this is a copy. */
- struct rx_counter_frame * cdr;
-};
-
-struct rx_backtrack_frame
-{
- char * counter_stack_sp;
-
- /* A frame is used to save the matchers state when it crosses a
- * backtracking point. The `stk_' fields correspond to variables
- * in re_search_2 (just strip off thes `stk_'). They are documented
- * tere.
- */
- struct rx_superstate * stk_super;
- unsigned int stk_c;
- struct rx_string_position stk_test_pos;
- int stk_last_l;
- int stk_last_r;
- int stk_test_ret;
-
- /* This is the list of options left to explore at the backtrack
- * point for which this frame was created.
- */
- struct rx_distinct_future * df;
- struct rx_distinct_future * first_df;
-
-#ifdef RX_DEBUG
- int stk_line_no;
-#endif
-};
-
-struct rx_stack_chunk
-{
- struct rx_stack_chunk * next_chunk;
- int bytes_left;
- char * sp;
-};
-
-enum rx_outer_entry
-{
- rx_outer_start,
- rx_outer_fastmap,
- rx_outer_test,
- rx_outer_restore_pos
-};
-
-enum rx_fastmap_return
-{
- rx_fastmap_continuation,
- rx_fastmap_error,
- rx_fastmap_ok,
- rx_fastmap_fail
-};
-
-enum rx_fastmap_entry
-{
- rx_fastmap_start,
- rx_fastmap_string_break
-};
-
-enum rx_test_return
-{
- rx_test_continuation,
- rx_test_error,
- rx_test_fail,
- rx_test_ok
-};
-
-enum rx_test_internal_return
-{
- rx_test_internal_error,
- rx_test_found_first,
- rx_test_line_finished
-};
-
-enum rx_test_match_entry
-{
- rx_test_start,
- rx_test_cache_hit_loop,
- rx_test_backreference_check,
- rx_test_backtrack_return
-};
-
-struct rx_search_state
-{
- /* Two groups of registers are kept. The group with the register state
- * of the current test match, and the group that holds the state at the end
- * of the best known match, if any.
- *
- * For some patterns, there may also be registers saved on the stack.
- */
- unsigned num_regs; /* Includes an element for register zero. */
- regoff_t * lparen; /* scratch space for register returns */
- regoff_t * rparen;
- regoff_t * best_lpspace; /* in case the user doesn't want these */
- regoff_t * best_rpspace; /* values, we still need space to store
- * them. Normally, this memoryis unused
- * and the space pointed to by REGS is
- * used instead.
- */
-
- int last_l; /* Highest index of a valid lparen. */
- int last_r; /* It's dual. */
-
- int * best_lparen; /* This contains the best known register */
- int * best_rparen; /* assignments.
- * This may point to the same mem as
- * best_lpspace, or it might point to memory
- * passed by the caller.
- */
- int best_last_l; /* best_last_l:best_lparen::last_l:lparen */
- int best_last_r;
-
-
- unsigned char * translate;
-
- struct rx_string_position outer_pos;
-
- struct rx_superstate * start_super;
- int nfa_choice;
- int first_found; /* If true, return after finding any match. */
- int ret_val;
-
- /* For continuations... */
- enum rx_outer_entry outer_search_resume_pt;
- struct re_pattern_buffer * saved_rxb;
- int saved_startpos;
- int saved_range;
- int saved_stop;
- int saved_total_size;
- rx_get_burst_fn saved_get_burst;
- rx_back_check_fn saved_back_check;
- struct re_registers * saved_regs;
-
- /**
- ** state for fastmap
- **/
- char * fastmap;
- int fastmap_chr;
- int fastmap_val;
-
- /* for continuations in the fastmap procedure: */
- enum rx_fastmap_entry fastmap_resume_pt;
-
- /**
- ** state for test_match
- **/
-
- /* The current superNFA position of the matcher. */
- struct rx_superstate * super;
-
- /* The matcher interprets a series of instruction frames.
- * This is the `instruction counter' for the interpretation.
- */
- struct rx_inx * ifr;
-
- /* We insert a ghost character in the string to prime
- * the nfa. test_pos.pos, test_pos.str_half, and test_pos.end_half
- * keep track of the test-match position and string-half.
- */
- unsigned char c;
-
- /* Position within the string. */
- struct rx_string_position test_pos;
-
- struct rx_stack_chunk * counter_stack;
- struct rx_stack_chunk * backtrack_stack;
- int backtrack_frame_bytes;
- int chunk_bytes;
- struct rx_stack_chunk * free_chunks;
-
- /* To return from this function, set test_ret and
- * `goto test_do_return'.
- *
- * Possible return values are:
- * 1 --- end of string while the superNFA is still going
- * 0 --- internal error (out of memory)
- * -1 --- search completed by reaching the superNFA fail state
- * -2 --- a match was found, maybe not the longest.
- *
- * When the search is complete (-1), best_last_r indicates whether
- * a match was found.
- *
- * -2 is return only if search_state.first_found is non-zero.
- *
- * if search_state.first_found is non-zero, a return of -1 indicates no match,
- * otherwise, best_last_r has to be checked.
- */
- int test_ret;
-
- int could_have_continued;
-
-#ifdef RX_DEBUG
- int backtrack_depth;
- /* There is a search tree with every node as set of deterministic
- * transitions in the super nfa. For every branch of a
- * backtrack point is an edge in the tree.
- * This counts up a pre-order of nodes in that tree.
- * It's saved on the search stack and printed when debugging.
- */
- int line_no;
- int lines_found;
-#endif
-
-
- /* For continuations within the match tester */
- enum rx_test_match_entry test_match_resume_pt;
- struct rx_inx * saved_next_tr_table;
- struct rx_inx * saved_this_tr_table;
- int saved_reg;
- struct rx_backtrack_frame * saved_bf;
-
-};
-
-
-extern char rx_slowmap[];
-extern unsigned char rx_id_translation[];
-
-static __inline__ void
-init_fastmap (rxb, search_state)
- struct re_pattern_buffer * rxb;
- struct rx_search_state * search_state;
-{
- search_state->fastmap = (rxb->fastmap
- ? (char *)rxb->fastmap
- : (char *)rx_slowmap);
- /* Update the fastmap now if not correct already.
- * When the regexp was compiled, the fastmap was computed
- * and stored in a bitset. This expands the bitset into a
- * character array containing 1s and 0s.
- */
- if ((search_state->fastmap == rxb->fastmap) && !rxb->fastmap_accurate)
- rx_blow_up_fastmap (rxb);
- search_state->fastmap_chr = -1;
- search_state->fastmap_val = 0;
- search_state->fastmap_resume_pt = rx_fastmap_start;
-}
-
-static __inline__ void
-uninit_fastmap (rxb, search_state)
- struct re_pattern_buffer * rxb;
- struct rx_search_state * search_state;
-{
- /* Unset the fastmap sentinel */
- if (search_state->fastmap_chr >= 0)
- search_state->fastmap[search_state->fastmap_chr]
- = search_state->fastmap_val;
-}
-
-static __inline__ int
-fastmap_search (rxb, stop, get_burst, app_closure, search_state)
- struct re_pattern_buffer * rxb;
- int stop;
- rx_get_burst_fn get_burst;
- void * app_closure;
- struct rx_search_state * search_state;
-{
- enum rx_fastmap_entry pc;
-
- if (0)
- {
- return_continuation:
- search_state->fastmap_resume_pt = pc;
- return rx_fastmap_continuation;
- }
-
- pc = search_state->fastmap_resume_pt;
-
- switch (pc)
- {
- default:
- return rx_fastmap_error;
- case rx_fastmap_start:
- init_fastmap_sentinal:
- /* For the sake of fast fastmapping, set a sentinal in the fastmap.
- * This sentinal will trap the fastmap loop when it reaches the last
- * valid character in a string half.
- *
- * This must be reset when the fastmap/search loop crosses a string
- * boundry, and before returning to the caller. So sometimes,
- * the fastmap loop is restarted with `continue', othertimes by
- * `goto init_fastmap_sentinal'.
- */
- if (search_state->outer_pos.size)
- {
- search_state->fastmap_chr = ((search_state->outer_pos.search_direction == 1)
- ? *(search_state->outer_pos.end - 1)
- : *search_state->outer_pos.string);
- search_state->fastmap_val
- = search_state->fastmap[search_state->fastmap_chr];
- search_state->fastmap[search_state->fastmap_chr] = 1;
- }
- else
- {
- search_state->fastmap_chr = -1;
- search_state->fastmap_val = 0;
- }
-
- if (search_state->outer_pos.pos >= search_state->outer_pos.end)
- goto fastmap_hit_bound;
- else
- {
- if (search_state->outer_pos.search_direction == 1)
- {
- if (search_state->fastmap_val)
- {
- for (;;)
- {
- while (!search_state->fastmap[*search_state->outer_pos.pos])
- ++search_state->outer_pos.pos;
- return rx_fastmap_ok;
- }
- }
- else
- {
- for (;;)
- {
- while (!search_state->fastmap[*search_state->outer_pos.pos])
- ++search_state->outer_pos.pos;
- if (*search_state->outer_pos.pos != search_state->fastmap_chr)
- return rx_fastmap_ok;
- else
- {
- ++search_state->outer_pos.pos;
- if (search_state->outer_pos.pos == search_state->outer_pos.end)
- goto fastmap_hit_bound;
- }
- }
- }
- }
- else
- {
- __const__ unsigned char * bound;
- bound = search_state->outer_pos.string - 1;
- if (search_state->fastmap_val)
- {
- for (;;)
- {
- while (!search_state->fastmap[*search_state->outer_pos.pos])
- --search_state->outer_pos.pos;
- return rx_fastmap_ok;
- }
- }
- else
- {
- for (;;)
- {
- while (!search_state->fastmap[*search_state->outer_pos.pos])
- --search_state->outer_pos.pos;
- if ((*search_state->outer_pos.pos != search_state->fastmap_chr) || search_state->fastmap_val)
- return rx_fastmap_ok;
- else
- {
- --search_state->outer_pos.pos;
- if (search_state->outer_pos.pos == bound)
- goto fastmap_hit_bound;
- }
- }
- }
- }
- }
-
- case rx_fastmap_string_break:
- fastmap_hit_bound:
- {
- /* If we hit a bound, it may be time to fetch another burst
- * of string, or it may be time to return a continuation to
- * the caller, or it might be time to fail.
- */
-
- int burst_state;
- burst_state = get_burst (&search_state->outer_pos, app_closure, stop);
- switch (burst_state)
- {
- default:
- case rx_get_burst_error:
- return rx_fastmap_error;
- case rx_get_burst_continuation:
- {
- pc = rx_fastmap_string_break;
- goto return_continuation;
- }
- case rx_get_burst_ok:
- goto init_fastmap_sentinal;
- case rx_get_burst_no_more:
- /* ...not a string split, simply no more string.
- *
- * When searching backward, running out of string
- * is reason to quit.
- *
- * When searching forward, we allow the possibility
- * of an (empty) match after the last character in the
- * virtual string. So, fall through to the matcher
- */
- return ( (search_state->outer_pos.search_direction == 1)
- ? rx_fastmap_ok
- : rx_fastmap_fail);
- }
- }
- }
-
-}
-
-
-
-#ifdef emacs
-/* The `emacs' switch turns on certain matching commands
- * that make sense only in Emacs.
- */
-#include "config.h"
-#include "lisp.h"
-#include "buffer.h"
-#include "syntax.h"
-#endif /* emacs */
-
-/* Setting RX_MEMDBUG is useful if you have dbmalloc. Maybe with similar
- * packages too.
- */
-#ifdef RX_MEMDBUG
-#include <malloc.h>
-#endif /* RX_RX_MEMDBUG */
-
-/* We used to test for `BSTRING' here, but only GCC and Emacs define
- * `BSTRING', as far as I know, and neither of them use this code.
- */
-#if HAVE_STRING_H || STDC_HEADERS
-#include <string.h>
-
-#ifndef bcmp
-#define bcmp(s1, s2, n) memcmp ((s1), (s2), (n))
-#endif
-
-#ifndef bcopy
-#define bcopy(s, d, n) memcpy ((d), (s), (n))
-#endif
-
-#ifndef bzero
-#define bzero(s, n) memset ((s), 0, (n))
-#endif
-
-#else /* HAVE_STRING_H || STDC_HEADERS */
-#include <strings.h>
-#endif /* not (HAVE_STRING_H || STDC_HEADERS) */
-
-#ifdef STDC_HEADERS
-#include <stdlib.h>
-#else /* not STDC_HEADERS */
-char *malloc ();
-char *realloc ();
-#endif /* not STDC_HEADERS */
-
-
-
-
-/* How many characters in the character set. */
-#define CHAR_SET_SIZE (1 << CHARBITS)
-
-#ifndef emacs
-/* Define the syntax basics for \<, \>, etc.
- * This must be nonzero for the wordchar and notwordchar pattern
- * commands in re_match_2.
- */
-#ifndef Sword
-#define Sword 1
-#endif
-#define SYNTAX(c) re_syntax_table[c]
-RX_DECL char re_syntax_table[CHAR_SET_SIZE];
-#endif /* not emacs */
-
-
-/* Test if at very beginning or at very end of the virtual concatenation
- * of `string1' and `string2'. If only one string, it's `string2'.
- */
-
-#define AT_STRINGS_BEG() \
- ( -1 \
- == ((search_state.test_pos.pos - search_state.test_pos.string) \
- + search_state.test_pos.offset))
-
-#define AT_STRINGS_END() \
- ( (total_size - 1) \
- == ((search_state.test_pos.pos - search_state.test_pos.string) \
- + search_state.test_pos.offset))
-
-
-/* Test if POS + 1 points to a character which is word-constituent. We have
- * two special cases to check for: if past the end of string1, look at
- * the first character in string2; and if before the beginning of
- * string2, look at the last character in string1.
- *
- * Assumes `string1' exists, so use in conjunction with AT_STRINGS_BEG ().
- */
-#define LETTER_P(POS,OFF) \
- ( SYNTAX (fetch_char(POS, OFF, app_closure, stop)) \
- == Sword)
-
-/* Test if the character at D and the one after D differ with respect
- * to being word-constituent.
- */
-#define AT_WORD_BOUNDARY(d) \
- (AT_STRINGS_BEG () || AT_STRINGS_END () || LETTER_P (d,0) != LETTER_P (d, 1))
-
-
-#ifdef RX_SUPPORT_CONTINUATIONS
-#define RX_STACK_ALLOC(BYTES) malloc(BYTES)
-#define RX_STACK_FREE(MEM) free(MEM)
-#else
-#define RX_STACK_ALLOC(BYTES) alloca(BYTES)
-#define RX_STACK_FREE(MEM) \
- ((struct rx_stack_chunk *)MEM)->next_chunk = search_state.free_chunks; \
- search_state.free_chunks = ((struct rx_stack_chunk *)MEM);
-
-#endif
-
-#define PUSH(CHUNK_VAR,BYTES) \
- if (!CHUNK_VAR || (CHUNK_VAR->bytes_left < (BYTES))) \
- { \
- struct rx_stack_chunk * new_chunk; \
- if (search_state.free_chunks) \
- { \
- new_chunk = search_state.free_chunks; \
- search_state.free_chunks = search_state.free_chunks->next_chunk; \
- } \
- else \
- { \
- new_chunk = (struct rx_stack_chunk *)RX_STACK_ALLOC(search_state.chunk_bytes); \
- if (!new_chunk) \
- { \
- search_state.ret_val = 0; \
- goto test_do_return; \
- } \
- } \
- new_chunk->sp = (char *)new_chunk + sizeof (struct rx_stack_chunk); \
- new_chunk->bytes_left = (search_state.chunk_bytes \
- - (BYTES) \
- - sizeof (struct rx_stack_chunk)); \
- new_chunk->next_chunk = CHUNK_VAR; \
- CHUNK_VAR = new_chunk; \
- } \
- else \
- (CHUNK_VAR->sp += (BYTES)), (CHUNK_VAR->bytes_left -= (BYTES))
-
-#define POP(CHUNK_VAR,BYTES) \
- if (CHUNK_VAR->sp == ((char *)CHUNK_VAR + sizeof(*CHUNK_VAR))) \
- { \
- struct rx_stack_chunk * new_chunk = CHUNK_VAR->next_chunk; \
- RX_STACK_FREE(CHUNK_VAR); \
- CHUNK_VAR = new_chunk; \
- } \
- else \
- (CHUNK_VAR->sp -= BYTES), (CHUNK_VAR->bytes_left += BYTES)
-
-
-
-#define SRCH_TRANSLATE(C) search_state.translate[(unsigned char) (C)]
-
-
-
-
-#ifdef __STDC__
-RX_DECL __inline__ int
-rx_search (struct re_pattern_buffer * rxb,
- int startpos,
- int range,
- int stop,
- int total_size,
- rx_get_burst_fn get_burst,
- rx_back_check_fn back_check,
- rx_fetch_char_fn fetch_char,
- void * app_closure,
- struct re_registers * regs,
- struct rx_search_state * resume_state,
- struct rx_search_state * save_state)
-#else
-RX_DECL __inline__ int
-rx_search (rxb, startpos, range, stop, total_size,
- get_burst, back_check, fetch_char,
- app_closure, regs, resume_state, save_state)
- struct re_pattern_buffer * rxb;
- int startpos;
- int range;
- int stop;
- int total_size;
- rx_get_burst_fn get_burst;
- rx_back_check_fn back_check;
- rx_fetch_char_fn fetch_char;
- void * app_closure;
- struct re_registers * regs;
- struct rx_search_state * resume_state;
- struct rx_search_state * save_state;
-#endif
-{
- int pc;
- int test_state;
- struct rx_search_state search_state;
-
- search_state.free_chunks = 0;
- if (!resume_state)
- pc = rx_outer_start;
- else
- {
- search_state = *resume_state;
- regs = search_state.saved_regs;
- rxb = search_state.saved_rxb;
- startpos = search_state.saved_startpos;
- range = search_state.saved_range;
- stop = search_state.saved_stop;
- total_size = search_state.saved_total_size;
- get_burst = search_state.saved_get_burst;
- back_check = search_state.saved_back_check;
- pc = search_state.outer_search_resume_pt;
- if (0)
- {
- return_continuation:
- if (save_state)
- {
- *save_state = search_state;
- save_state->saved_regs = regs;
- save_state->saved_rxb = rxb;
- save_state->saved_startpos = startpos;
- save_state->saved_range = range;
- save_state->saved_stop = stop;
- save_state->saved_total_size = total_size;
- save_state->saved_get_burst = get_burst;
- save_state->saved_back_check = back_check;
- save_state->outer_search_resume_pt = pc;
- }
- return rx_search_continuation;
- }
- }
-
- switch (pc)
- {
- case rx_outer_start:
- search_state.ret_val = rx_search_fail;
- ( search_state.lparen
- = search_state.rparen
- = search_state.best_lpspace
- = search_state.best_rpspace
- = 0);
-
- /* figure the number of registers we may need for use in backreferences.
- * the number here includes an element for register zero.
- */
- search_state.num_regs = rxb->re_nsub + 1;
-
-
- /* check for out-of-range startpos. */
- if ((startpos < 0) || (startpos > total_size))
- return rx_search_fail;
-
- /* fix up range if it might eventually take us outside the string. */
- {
- int endpos;
- endpos = startpos + range;
- if (endpos < -1)
- range = (-1 - startpos);
- else if (endpos > (total_size + 1))
- range = total_size - startpos;
- }
-
- /* if the search isn't to be a backwards one, don't waste time in a
- * long search for a pattern that says it is anchored.
- */
- if (rxb->begbuf_only && (range > 0))
- {
- if (startpos > 0)
- return rx_search_fail;
- else
- range = 1;
- }
-
- /* decide whether to use internal or user-provided reg buffers. */
- if (!regs || rxb->no_sub)
- {
- search_state.best_lpspace =
- (regoff_t *)REGEX_ALLOCATE (search_state.num_regs * sizeof(regoff_t));
- search_state.best_rpspace =
- (regoff_t *)REGEX_ALLOCATE (search_state.num_regs * sizeof(regoff_t));
- search_state.best_lparen = search_state.best_lpspace;
- search_state.best_rparen = search_state.best_rpspace;
- }
- else
- {
- /* have the register data arrays been allocated? */
- if (rxb->regs_allocated == REGS_UNALLOCATED)
- { /* no. so allocate them with malloc. we need one
- extra element beyond `search_state.num_regs' for the `-1' marker
- gnu code uses. */
- regs->num_regs = MAX (RE_NREGS, rxb->re_nsub + 1);
- regs->start = ((regoff_t *)
- malloc (regs->num_regs * sizeof ( regoff_t)));
- regs->end = ((regoff_t *)
- malloc (regs->num_regs * sizeof ( regoff_t)));
- if (regs->start == 0 || regs->end == 0)
- return rx_search_error;
- rxb->regs_allocated = REGS_REALLOCATE;
- }
- else if (rxb->regs_allocated == REGS_REALLOCATE)
- { /* yes. if we need more elements than were already
- allocated, reallocate them. if we need fewer, just
- leave it alone. */
- if (regs->num_regs < search_state.num_regs + 1)
- {
- regs->num_regs = search_state.num_regs + 1;
- regs->start = ((regoff_t *)
- realloc (regs->start,
- regs->num_regs * sizeof (regoff_t)));
- regs->end = ((regoff_t *)
- realloc (regs->end,
- regs->num_regs * sizeof ( regoff_t)));
- if (regs->start == 0 || regs->end == 0)
- return rx_search_error;
- }
- }
- else if (rxb->regs_allocated != REGS_FIXED)
- return rx_search_error;
-
- if (regs->num_regs < search_state.num_regs + 1)
- {
- search_state.best_lpspace =
- ((regoff_t *)
- REGEX_ALLOCATE (search_state.num_regs * sizeof(regoff_t)));
- search_state.best_rpspace =
- ((regoff_t *)
- REGEX_ALLOCATE (search_state.num_regs * sizeof(regoff_t)));
- search_state.best_lparen = search_state.best_lpspace;
- search_state.best_rparen = search_state.best_rpspace;
- }
- else
- {
- search_state.best_lparen = regs->start;
- search_state.best_rparen = regs->end;
- }
- }
-
- search_state.lparen =
- (regoff_t *) REGEX_ALLOCATE (search_state.num_regs * sizeof(regoff_t));
- search_state.rparen =
- (regoff_t *) REGEX_ALLOCATE (search_state.num_regs * sizeof(regoff_t));
-
- if (! ( search_state.best_rparen
- && search_state.best_lparen
- && search_state.lparen && search_state.rparen))
- return rx_search_error;
-
- search_state.best_last_l = search_state.best_last_r = -1;
-
- search_state.translate = (rxb->translate
- ? rxb->translate
- : rx_id_translation);
-
-
-
- /*
- * two nfa's were compiled.
- * `0' is complete.
- * `1' faster but gets registers wrong and ends too soon.
- */
- search_state.nfa_choice = (regs && !rxb->least_subs) ? '\0' : '\1';
-
- /* we have the option to look for the best match or the first
- * one we can find. if the user isn't asking for register information,
- * we don't need to find the best match.
- */
- search_state.first_found = !regs;
-
- if (range >= 0)
- {
- search_state.outer_pos.search_end = startpos + range;
- search_state.outer_pos.search_direction = 1;
- }
- else
- {
- search_state.outer_pos.search_end = startpos + range;
- search_state.outer_pos.search_direction = -1;
- }
-
- /* the vacuous search always turns up nothing. */
- if ((search_state.outer_pos.search_direction == 1)
- ? (startpos > search_state.outer_pos.search_end)
- : (startpos < search_state.outer_pos.search_end))
- return rx_search_fail;
-
- /* now we build the starting state of the supernfa. */
- {
- struct rx_superset * start_contents;
- struct rx_nfa_state_set * start_nfa_set;
-
- /* we presume here that the nfa start state has only one
- * possible future with no side effects.
- */
- start_nfa_set = rxb->start->futures->destset;
- if ( rxb->rx.start_set
- && (rxb->rx.start_set->starts_for == &rxb->rx))
- start_contents = rxb->rx.start_set;
- else
- {
- start_contents =
- rx_superstate_eclosure_union (&rxb->rx,
- rx_superset_cons (&rxb->rx, 0, 0),
- start_nfa_set);
-
- if (!start_contents)
- return rx_search_fail;
-
- start_contents->starts_for = &rxb->rx;
- rxb->rx.start_set = start_contents;
- }
- if ( start_contents->superstate
- && (start_contents->superstate->rx_id == rxb->rx.rx_id))
- {
- search_state.start_super = start_contents->superstate;
- rx_lock_superstate (&rxb->rx, search_state.start_super);
- }
- else
- {
- rx_protect_superset (&rxb->rx, start_contents);
-
- search_state.start_super = rx_superstate (&rxb->rx, start_contents);
- if (!search_state.start_super)
- return rx_search_fail;
- rx_lock_superstate (&rxb->rx, search_state.start_super);
- rx_release_superset (&rxb->rx, start_contents);
- }
- }
-
-
- /* The outer_pos tracks the position within the strings
- * as seen by loop that calls fastmap_search.
- *
- * The caller supplied get_burst function actually
- * gives us pointers to chars.
- *
- * Communication with the get_burst function is through an
- * rx_string_position structure. Here, the structure for
- * outer_pos is initialized. It is set to point to the
- * NULL string, at an offset of STARTPOS. STARTPOS is out
- * of range of the NULL string, so the first call to
- * getburst will patch up the rx_string_position to point
- * to valid characters.
- */
-
- ( search_state.outer_pos.string
- = search_state.outer_pos.end
- = 0);
-
- search_state.outer_pos.offset = 0;
- search_state.outer_pos.size = 0;
- search_state.outer_pos.pos = (unsigned char *)startpos;
- init_fastmap (rxb, &search_state);
-
- search_state.fastmap_resume_pt = rx_fastmap_start;
- case rx_outer_fastmap:
- /* do { */
- pseudo_do:
- {
- {
- int fastmap_state;
- fastmap_state = fastmap_search (rxb, stop, get_burst, app_closure,
- &search_state);
- switch (fastmap_state)
- {
- case rx_fastmap_continuation:
- pc = rx_outer_fastmap;
- goto return_continuation;
- case rx_fastmap_fail:
- goto finish;
- case rx_fastmap_ok:
- break;
- }
- }
-
- /* now the fastmap loop has brought us to a plausible
- * starting point for a match. so, it's time to run the
- * nfa and see if a match occured.
- */
- startpos = ( search_state.outer_pos.pos
- - search_state.outer_pos.string
- + search_state.outer_pos.offset);
-#if 0
-/*|*/ if ((range > 0) && (startpos == search_state.outer_pos.search_end))
-/*|*/ goto finish;
-#endif
- }
-
- search_state.test_match_resume_pt = rx_test_start;
- /* do interrupted for entry point... */
- case rx_outer_test:
- /* ...do continued */
- {
- goto test_match;
- test_returns_to_search:
- switch (test_state)
- {
- case rx_test_continuation:
- pc = rx_outer_test;
- goto return_continuation;
- case rx_test_error:
- search_state.ret_val = rx_search_error;
- goto finish;
- case rx_test_fail:
- break;
- case rx_test_ok:
- goto finish;
- }
- search_state.outer_pos.pos += search_state.outer_pos.search_direction;
- startpos += search_state.outer_pos.search_direction;
-#if 0
-/*|*/ if (search_state.test_pos.pos < search_state.test_pos.end)
-/*|*/ break;
-#endif
- }
- /* do interrupted for entry point... */
- case rx_outer_restore_pos:
- {
- int x;
- x = get_burst (&search_state.outer_pos, app_closure, stop);
- switch (x)
- {
- case rx_get_burst_continuation:
- pc = rx_outer_restore_pos;
- goto return_continuation;
- case rx_get_burst_error:
- search_state.ret_val = rx_search_error;
- goto finish;
- case rx_get_burst_no_more:
- if (rxb->can_match_empty)
- break;
- goto finish;
- case rx_get_burst_ok:
- break;
- }
- } /* } while (...see below...) */
-
- if ((search_state.outer_pos.search_direction == 1)
- ? (startpos <= search_state.outer_pos.search_end)
- : (startpos > search_state.outer_pos.search_end))
- goto pseudo_do;
-
-
- finish:
- uninit_fastmap (rxb, &search_state);
- if (search_state.start_super)
- rx_unlock_superstate (&rxb->rx, search_state.start_super);
-
-#ifdef regex_malloc
- if (search_state.lparen) free (search_state.lparen);
- if (search_state.rparen) free (search_state.rparen);
- if (search_state.best_lpspace) free (search_state.best_lpspace);
- if (search_state.best_rpspace) free (search_state.best_rpspace);
-#endif
- return search_state.ret_val;
- }
-
-
- test_match:
- {
- enum rx_test_match_entry test_pc;
- int inx;
- test_pc = search_state.test_match_resume_pt;
- if (test_pc == rx_test_start)
- {
-#ifdef RX_DEBUG
- search_state.backtrack_depth = 0;
-#endif
- search_state.last_l = search_state.last_r = 0;
- search_state.lparen[0] = startpos;
- search_state.super = search_state.start_super;
- search_state.c = search_state.nfa_choice;
- search_state.test_pos.pos = search_state.outer_pos.pos - 1;
- search_state.test_pos.string = search_state.outer_pos.string;
- search_state.test_pos.end = search_state.outer_pos.end;
- search_state.test_pos.offset = search_state.outer_pos.offset;
- search_state.test_pos.size = search_state.outer_pos.size;
- search_state.test_pos.search_direction = 1;
- search_state.counter_stack = 0;
- search_state.backtrack_stack = 0;
- search_state.backtrack_frame_bytes =
- (sizeof (struct rx_backtrack_frame)
- + (rxb->match_regs_on_stack
- ? sizeof (regoff_t) * (search_state.num_regs + 1) * 2
- : 0));
- search_state.chunk_bytes = search_state.backtrack_frame_bytes * 64;
- search_state.test_ret = rx_test_line_finished;
- search_state.could_have_continued = 0;
- }
- /* This is while (1)...except that the body of the loop is interrupted
- * by some alternative entry points.
- */
- pseudo_while_1:
- switch (test_pc)
- {
- case rx_test_cache_hit_loop:
- goto resume_continuation_1;
- case rx_test_backreference_check:
- goto resume_continuation_2;
- case rx_test_backtrack_return:
- goto resume_continuation_3;
- case rx_test_start:
-#ifdef RX_DEBUG
- /* There is a search tree with every node as set of deterministic
- * transitions in the super nfa. For every branch of a
- * backtrack point is an edge in the tree.
- * This counts up a pre-order of nodes in that tree.
- * It's saved on the search stack and printed when debugging.
- */
- search_state.line_no = 0;
- search_state.lines_found = 0;
-#endif
-
- top_of_cycle:
- /* A superstate is basicly a transition table, indexed by
- * characters from the string being tested, and containing
- * RX_INX (`instruction frame') structures.
- */
- search_state.ifr = &search_state.super->transitions [search_state.c];
-
- recurse_test_match:
- /* This is the point to which control is sent when the
- * test matcher `recurses'. Before jumping here, some variables
- * need to be saved on the stack and the next instruction frame
- * has to be computed.
- */
-
- restart:
- /* Some instructions don't advance the matcher, but just
- * carry out some side effects and fetch a new instruction.
- * To dispatch that new instruction, `goto restart'.
- */
-
- {
- struct rx_inx * next_tr_table;
- struct rx_inx * this_tr_table;
- /* The fastest route through the loop is when the instruction
- * is RX_NEXT_CHAR. This case is detected when SEARCH_STATE.IFR->DATA
- * is non-zero. In that case, it points to the next
- * superstate.
- *
- * This allows us to not bother fetching the bytecode.
- */
- next_tr_table = (struct rx_inx *)search_state.ifr->data;
- this_tr_table = search_state.super->transitions;
- while (next_tr_table)
- {
-#ifdef RX_DEBUG_0
- if (rx_debug_trace)
- {
- struct rx_superset * setp;
-
- fprintf (stderr, "%d %d>> re_next_char @ %d (%d)",
- search_state.line_no,
- search_state.backtrack_depth,
- (search_state.test_pos.pos - search_state.test_pos.string
- + search_state.test_pos.offset), search_state.c);
-
- search_state.super =
- ((struct rx_superstate *)
- ((char *)this_tr_table
- - ((unsigned long)
- ((struct rx_superstate *)0)->transitions)));
-
- setp = search_state.super->contents;
- fprintf (stderr, " superstet (rx=%d, &=%x: ",
- rxb->rx.rx_id, setp);
- while (setp)
- {
- fprintf (stderr, "%d ", setp->id);
- setp = setp->cdr;
- }
- fprintf (stderr, "\n");
- }
-#endif
- this_tr_table = next_tr_table;
- ++search_state.test_pos.pos;
- if (search_state.test_pos.pos == search_state.test_pos.end)
- {
- int burst_state;
- try_burst_1:
- burst_state = get_burst (&search_state.test_pos,
- app_closure, stop);
- switch (burst_state)
- {
- case rx_get_burst_continuation:
- search_state.saved_this_tr_table = this_tr_table;
- search_state.saved_next_tr_table = next_tr_table;
- test_pc = rx_test_cache_hit_loop;
- goto test_return_continuation;
-
- resume_continuation_1:
- /* Continuation one jumps here to do its work: */
- search_state.saved_this_tr_table = this_tr_table;
- search_state.saved_next_tr_table = next_tr_table;
- goto try_burst_1;
-
- case rx_get_burst_ok:
- /* get_burst succeeded...keep going */
- break;
-
- case rx_get_burst_no_more:
- search_state.test_ret = rx_test_line_finished;
- search_state.could_have_continued = 1;
- goto test_do_return;
-
- case rx_get_burst_error:
- /* An error... */
- search_state.test_ret = rx_test_internal_error;
- goto test_do_return;
- }
- }
- search_state.c = *search_state.test_pos.pos;
- search_state.ifr = this_tr_table + search_state.c;
- next_tr_table = (struct rx_inx *)search_state.ifr->data;
- } /* Fast loop through cached transition tables */
-
- /* Here when we ran out of cached next-char transitions.
- * So, it will be necessary to do a more expensive
- * dispatch on the current instruction. The superstate
- * pointer is allowed to become invalid during next-char
- * transitions -- now we must bring it up to date.
- */
- search_state.super =
- ((struct rx_superstate *)
- ((char *)this_tr_table
- - ((unsigned long)
- ((struct rx_superstate *)0)->transitions)));
- }
-
- /* We've encountered an instruction other than next-char.
- * Dispatch that instruction:
- */
- inx = (int)search_state.ifr->inx;
-#ifdef RX_DEBUG_0
- if (rx_debug_trace)
- {
- struct rx_superset * setp = search_state.super->contents;
-
- fprintf (stderr, "%d %d>> %s @ %d (%d)", search_state.line_no,
- search_state.backtrack_depth,
- inx_names[inx],
- (search_state.test_pos.pos - search_state.test_pos.string
- + (test_pos.half == 0 ? 0 : size1)), search_state.c);
-
- fprintf (stderr, " superstet (rx=%d, &=%x: ",
- rxb->rx.rx_id, setp);
- while (setp)
- {
- fprintf (stderr, "%d ", setp->id);
- setp = setp->cdr;
- }
- fprintf (stderr, "\n");
- }
-#endif
- switch ((enum rx_opcode)inx)
- {
- case rx_do_side_effects:
-
- /* RX_DO_SIDE_EFFECTS occurs when we cross epsilon
- * edges associated with parentheses, backreferencing, etc.
- */
- {
- struct rx_distinct_future * df =
- (struct rx_distinct_future *)search_state.ifr->data_2;
- struct rx_se_list * el = df->effects;
- /* Side effects come in lists. This walks down
- * a list, dispatching.
- */
- while (el)
- {
- long effect;
- effect = (long)el->car;
- if (effect < 0)
- {
-#ifdef RX_DEBUG_0
- if (rx_debug_trace)
- {
- struct rx_superset * setp = search_state.super->contents;
-
- fprintf (stderr, "....%d %d>> %s\n", search_state.line_no,
- search_state.backtrack_depth,
- efnames[-effect]);
- }
-#endif
- switch ((enum re_side_effects) effect)
-
- {
- case re_se_pushback:
- search_state.ifr = &df->future_frame;
- if (!search_state.ifr->data)
- {
- struct rx_superstate * sup;
- sup = search_state.super;
- rx_lock_superstate (rx, sup);
- if (!rx_handle_cache_miss (&rxb->rx,
- search_state.super,
- search_state.c,
- (search_state.ifr
- ->data_2)))
- {
- rx_unlock_superstate (rx, sup);
- search_state.test_ret = rx_test_internal_error;
- goto test_do_return;
- }
- rx_unlock_superstate (rx, sup);
- }
- /* --search_state.test_pos.pos; */
- search_state.c = 't';
- search_state.super
- = ((struct rx_superstate *)
- ((char *)search_state.ifr->data
- - (long)(((struct rx_superstate *)0)
- ->transitions)));
- goto top_of_cycle;
- break;
- case re_se_push0:
- {
- struct rx_counter_frame * old_cf
- = (search_state.counter_stack
- ? ((struct rx_counter_frame *)
- search_state.counter_stack->sp)
- : 0);
- struct rx_counter_frame * cf;
- PUSH (search_state.counter_stack,
- sizeof (struct rx_counter_frame));
- cf = ((struct rx_counter_frame *)
- search_state.counter_stack->sp);
- cf->tag = re_se_iter;
- cf->val = 0;
- cf->inherited_from = 0;
- cf->cdr = old_cf;
- break;
- }
- case re_se_fail:
- goto test_do_return;
- case re_se_begbuf:
- if (!AT_STRINGS_BEG ())
- goto test_do_return;
- break;
- case re_se_endbuf:
- if (!AT_STRINGS_END ())
- goto test_do_return;
- break;
- case re_se_wordbeg:
- if ( LETTER_P (&search_state.test_pos, 1)
- && ( AT_STRINGS_BEG()
- || !LETTER_P (&search_state.test_pos, 0)))
- break;
- else
- goto test_do_return;
- case re_se_wordend:
- if ( !AT_STRINGS_BEG ()
- && LETTER_P (&search_state.test_pos, 0)
- && (AT_STRINGS_END ()
- || !LETTER_P (&search_state.test_pos, 1)))
- break;
- else
- goto test_do_return;
- case re_se_wordbound:
- if (AT_WORD_BOUNDARY (&search_state.test_pos))
- break;
- else
- goto test_do_return;
- case re_se_notwordbound:
- if (!AT_WORD_BOUNDARY (&search_state.test_pos))
- break;
- else
- goto test_do_return;
- case re_se_hat:
- if (AT_STRINGS_BEG ())
- {
- if (rxb->not_bol)
- goto test_do_return;
- else
- break;
- }
- else
- {
- char pos_c = *search_state.test_pos.pos;
- if ( (SRCH_TRANSLATE (pos_c)
- == SRCH_TRANSLATE('\n'))
- && rxb->newline_anchor)
- break;
- else
- goto test_do_return;
- }
- case re_se_dollar:
- if (AT_STRINGS_END ())
- {
- if (rxb->not_eol)
- goto test_do_return;
- else
- break;
- }
- else
- {
- if ( ( SRCH_TRANSLATE (fetch_char
- (&search_state.test_pos, 1,
- app_closure, stop))
- == SRCH_TRANSLATE ('\n'))
- && rxb->newline_anchor)
- break;
- else
- goto test_do_return;
- }
-
- case re_se_try:
- /* This is the first side effect in every
- * expression.
- *
- * FOR NO GOOD REASON...get rid of it...
- */
- break;
-
- case re_se_pushpos:
- {
- int urhere =
- ((int)(search_state.test_pos.pos
- - search_state.test_pos.string)
- + search_state.test_pos.offset);
- struct rx_counter_frame * old_cf
- = (search_state.counter_stack
- ? ((struct rx_counter_frame *)
- search_state.counter_stack->sp)
- : 0);
- struct rx_counter_frame * cf;
- PUSH(search_state.counter_stack,
- sizeof (struct rx_counter_frame));
- cf = ((struct rx_counter_frame *)
- search_state.counter_stack->sp);
- cf->tag = re_se_pushpos;
- cf->val = urhere;
- cf->inherited_from = 0;
- cf->cdr = old_cf;
- break;
- }
-
- case re_se_chkpos:
- {
- int urhere =
- ((int)(search_state.test_pos.pos
- - search_state.test_pos.string)
- + search_state.test_pos.offset);
- struct rx_counter_frame * cf
- = ((struct rx_counter_frame *)
- search_state.counter_stack->sp);
- if (cf->val == urhere)
- goto test_do_return;
- cf->val = urhere;
- break;
- }
- break;
-
- case re_se_poppos:
- POP(search_state.counter_stack,
- sizeof (struct rx_counter_frame));
- break;
-
-
- case re_se_at_dot:
- case re_se_syntax:
- case re_se_not_syntax:
-#ifdef emacs
- /*
- * this release lacks emacs support
- */
-#endif
- break;
- case re_se_win:
- case re_se_lparen:
- case re_se_rparen:
- case re_se_backref:
- case re_se_iter:
- case re_se_end_iter:
- case re_se_tv:
- case re_floogle_flap:
- search_state.ret_val = 0;
- goto test_do_return;
- }
- }
- else
- {
-#ifdef RX_DEBUG_0
- if (rx_debug_trace)
- fprintf (stderr, "....%d %d>> %s %d %d\n", search_state.line_no,
- search_state.backtrack_depth,
- efnames2[rxb->se_params [effect].se],
- rxb->se_params [effect].op1,
- rxb->se_params [effect].op2);
-#endif
- switch (rxb->se_params [effect].se)
- {
- case re_se_win:
- /* This side effect indicates that we've
- * found a match, though not necessarily the
- * best match. This is a fancy assignment to
- * register 0 unless the caller didn't
- * care about registers. In which case,
- * this stops the match.
- */
- {
- int urhere =
- ((int)(search_state.test_pos.pos
- - search_state.test_pos.string)
- + search_state.test_pos.offset);
-
- if ( (search_state.best_last_r < 0)
- || (urhere + 1 > search_state.best_rparen[0]))
- {
- /* Record the best known and keep
- * looking.
- */
- int x;
- for (x = 0; x <= search_state.last_l; ++x)
- search_state.best_lparen[x] = search_state.lparen[x];
- search_state.best_last_l = search_state.last_l;
- for (x = 0; x <= search_state.last_r; ++x)
- search_state.best_rparen[x] = search_state.rparen[x];
- search_state.best_rparen[0] = urhere + 1;
- search_state.best_last_r = search_state.last_r;
- }
- /* If we're not reporting the match-length
- * or other register info, we need look no
- * further.
- */
- if (search_state.first_found)
- {
- search_state.test_ret = rx_test_found_first;
- goto test_do_return;
- }
- }
- break;
- case re_se_lparen:
- {
- int urhere =
- ((int)(search_state.test_pos.pos
- - search_state.test_pos.string)
- + search_state.test_pos.offset);
-
- int reg = rxb->se_params [effect].op1;
-#if 0
- if (reg > search_state.last_l)
-#endif
- {
- search_state.lparen[reg] = urhere + 1;
- /* In addition to making this assignment,
- * we now know that lower numbered regs
- * that haven't already been assigned,
- * won't be. We make sure they're
- * filled with -1, so they can be
- * recognized as unassigned.
- */
- if (search_state.last_l < reg)
- while (++search_state.last_l < reg)
- search_state.lparen[search_state.last_l] = -1;
- }
- break;
- }
-
- case re_se_rparen:
- {
- int urhere =
- ((int)(search_state.test_pos.pos
- - search_state.test_pos.string)
- + search_state.test_pos.offset);
- int reg = rxb->se_params [effect].op1;
- search_state.rparen[reg] = urhere + 1;
- if (search_state.last_r < reg)
- {
- while (++search_state.last_r < reg)
- search_state.rparen[search_state.last_r]
- = -1;
- }
- break;
- }
-
- case re_se_backref:
- {
- int reg = rxb->se_params [effect].op1;
- if ( reg > search_state.last_r
- || search_state.rparen[reg] < 0)
- goto test_do_return;
-
- {
- int backref_status;
- check_backreference:
- backref_status
- = back_check (&search_state.test_pos,
- search_state.lparen[reg],
- search_state.rparen[reg],
- search_state.translate,
- app_closure,
- stop);
- switch (backref_status)
- {
- case rx_back_check_continuation:
- search_state.saved_reg = reg;
- test_pc = rx_test_backreference_check;
- goto test_return_continuation;
- resume_continuation_2:
- reg = search_state.saved_reg;
- goto check_backreference;
- case rx_back_check_fail:
- /* Fail */
- goto test_do_return;
- case rx_back_check_pass:
- /* pass --
- * test_pos now advanced to last
- * char matched by backref
- */
- break;
- }
- }
- break;
- }
- case re_se_iter:
- {
- struct rx_counter_frame * csp
- = ((struct rx_counter_frame *)
- search_state.counter_stack->sp);
- if (csp->val == rxb->se_params[effect].op2)
- goto test_do_return;
- else
- ++csp->val;
- break;
- }
- case re_se_end_iter:
- {
- struct rx_counter_frame * csp
- = ((struct rx_counter_frame *)
- search_state.counter_stack->sp);
- if (csp->val < rxb->se_params[effect].op1)
- goto test_do_return;
- else
- {
- struct rx_counter_frame * source = csp;
- while (source->inherited_from)
- source = source->inherited_from;
- if (!source || !source->cdr)
- {
- POP(search_state.counter_stack,
- sizeof(struct rx_counter_frame));
- }
- else
- {
- source = source->cdr;
- csp->val = source->val;
- csp->tag = source->tag;
- csp->cdr = 0;
- csp->inherited_from = source;
- }
- }
- break;
- }
- case re_se_tv:
- /* is a noop */
- break;
- case re_se_try:
- case re_se_pushback:
- case re_se_push0:
- case re_se_pushpos:
- case re_se_chkpos:
- case re_se_poppos:
- case re_se_at_dot:
- case re_se_syntax:
- case re_se_not_syntax:
- case re_se_begbuf:
- case re_se_hat:
- case re_se_wordbeg:
- case re_se_wordbound:
- case re_se_notwordbound:
- case re_se_wordend:
- case re_se_endbuf:
- case re_se_dollar:
- case re_se_fail:
- case re_floogle_flap:
- search_state.ret_val = 0;
- goto test_do_return;
- }
- }
- el = el->cdr;
- }
- /* Now the side effects are done,
- * so get the next instruction.
- * and move on.
- */
- search_state.ifr = &df->future_frame;
- goto restart;
- }
-
- case rx_backtrack_point:
- {
- /* A backtrack point indicates that we've reached a
- * non-determinism in the superstate NFA. This is a
- * loop that exhaustively searches the possibilities.
- *
- * A backtracking strategy is used. We keep track of what
- * registers are valid so we can erase side effects.
- *
- * First, make sure there is some stack space to hold
- * our state.
- */
-
- struct rx_backtrack_frame * bf;
-
- PUSH(search_state.backtrack_stack,
- search_state.backtrack_frame_bytes);
-#ifdef RX_DEBUG_0
- ++search_state.backtrack_depth;
-#endif
-
- bf = ((struct rx_backtrack_frame *)
- search_state.backtrack_stack->sp);
- {
- bf->stk_super = search_state.super;
- /* We prevent the current superstate from being
- * deleted from the superstate cache.
- */
- rx_lock_superstate (&rxb->rx, search_state.super);
-#ifdef RX_DEBUG_0
- bf->stk_search_state.line_no = search_state.line_no;
-#endif
- bf->stk_c = search_state.c;
- bf->stk_test_pos = search_state.test_pos;
- bf->stk_last_l = search_state.last_l;
- bf->stk_last_r = search_state.last_r;
- bf->df = ((struct rx_super_edge *)
- search_state.ifr->data_2)->options;
- bf->first_df = bf->df;
- bf->counter_stack_sp = (search_state.counter_stack
- ? search_state.counter_stack->sp
- : 0);
- bf->stk_test_ret = search_state.test_ret;
- if (rxb->match_regs_on_stack)
- {
- int x;
- regoff_t * stk =
- (regoff_t *)((char *)bf + sizeof (*bf));
- for (x = 0; x <= search_state.last_l; ++x)
- stk[x] = search_state.lparen[x];
- stk += x;
- for (x = 0; x <= search_state.last_r; ++x)
- stk[x] = search_state.rparen[x];
- }
- }
-
- /* Here is a while loop whose body is mainly a function
- * call and some code to handle a return from that
- * function.
- *
- * From here on for the rest of `case backtrack_point' it
- * is unsafe to assume that the search_state copies of
- * variables saved on the backtracking stack are valid
- * -- so read their values from the backtracking stack.
- *
- * This lets us use one generation fewer stack saves in
- * the call-graph of a search.
- */
-
- while_non_det_options:
-#ifdef RX_DEBUG_0
- ++search_state.lines_found;
- if (rx_debug_trace)
- fprintf (stderr, "@@@ %d calls %d @@@\n",
- search_state.line_no, search_state.lines_found);
-
- search_state.line_no = search_state.lines_found;
-#endif
-
- if (bf->df->next_same_super_edge[0] == bf->first_df)
- {
- /* This is a tail-call optimization -- we don't recurse
- * for the last of the possible futures.
- */
- search_state.ifr = (bf->df->effects
- ? &bf->df->side_effects_frame
- : &bf->df->future_frame);
-
- rx_unlock_superstate (&rxb->rx, search_state.super);
- POP(search_state.backtrack_stack,
- search_state.backtrack_frame_bytes);
-#ifdef RX_DEBUG
- --search_state.backtrack_depth;
-#endif
- goto restart;
- }
- else
- {
- if (search_state.counter_stack)
- {
- struct rx_counter_frame * old_cf
- = ((struct rx_counter_frame *)search_state.counter_stack->sp);
- struct rx_counter_frame * cf;
- PUSH(search_state.counter_stack, sizeof (struct rx_counter_frame));
- cf = ((struct rx_counter_frame *)search_state.counter_stack->sp);
- cf->tag = old_cf->tag;
- cf->val = old_cf->val;
- cf->inherited_from = old_cf;
- cf->cdr = 0;
- }
- /* `Call' this test-match block */
- search_state.ifr = (bf->df->effects
- ? &bf->df->side_effects_frame
- : &bf->df->future_frame);
- goto recurse_test_match;
- }
-
- /* Returns in this block are accomplished by
- * goto test_do_return. There are two cases.
- * If there is some search-stack left,
- * then it is a return from a `recursive' call.
- * If there is no search-stack left, then
- * we should return to the fastmap/search loop.
- */
-
- test_do_return:
-
- if (!search_state.backtrack_stack)
- {
-#ifdef RX_DEBUG_0
- if (rx_debug_trace)
- fprintf (stderr, "!!! %d bails returning %d !!!\n",
- search_state.line_no, search_state.test_ret);
-#endif
-
- /* No more search-stack -- this test is done. */
- if (search_state.test_ret != rx_test_internal_error)
- goto return_from_test_match;
- else
- goto error_in_testing_match;
- }
-
- /* Returning from a recursive call to
- * the test match block:
- */
-
- bf = ((struct rx_backtrack_frame *)
- search_state.backtrack_stack->sp);
-#ifdef RX_DEBUG_0
- if (rx_debug_trace)
- fprintf (stderr, "+++ %d returns %d (to %d)+++\n",
- search_state.line_no,
- search_state.test_ret,
- bf->stk_search_state.line_no);
-#endif
-
- while (search_state.counter_stack
- && (!bf->counter_stack_sp
- || (bf->counter_stack_sp
- != search_state.counter_stack->sp)))
- {
- POP(search_state.counter_stack,
- sizeof (struct rx_counter_frame));
- }
-
- if (search_state.test_ret == rx_test_internal_error)
- {
- POP (search_state.backtrack_stack,
- search_state.backtrack_frame_bytes);
- search_state.test_ret = rx_test_internal_error;
- goto test_do_return;
- }
-
- /* If a non-longest match was found and that is good
- * enough, return immediately.
- */
- if ( (search_state.test_ret == rx_test_found_first)
- && search_state.first_found)
- {
- rx_unlock_superstate (&rxb->rx, bf->stk_super);
- POP (search_state.backtrack_stack,
- search_state.backtrack_frame_bytes);
- goto test_do_return;
- }
-
- search_state.test_ret = bf->stk_test_ret;
- search_state.last_l = bf->stk_last_l;
- search_state.last_r = bf->stk_last_r;
- bf->df = bf->df->next_same_super_edge[0];
- search_state.super = bf->stk_super;
- search_state.c = bf->stk_c;
-#ifdef RX_DEBUG_0
- search_state.line_no = bf->stk_search_state.line_no;
-#endif
-
- if (rxb->match_regs_on_stack)
- {
- int x;
- regoff_t * stk =
- (regoff_t *)((char *)bf + sizeof (*bf));
- for (x = 0; x <= search_state.last_l; ++x)
- search_state.lparen[x] = stk[x];
- stk += x;
- for (x = 0; x <= search_state.last_r; ++x)
- search_state.rparen[x] = stk[x];
- }
-
- {
- int x;
- try_burst_2:
- x = get_burst (&bf->stk_test_pos, app_closure, stop);
- switch (x)
- {
- case rx_get_burst_continuation:
- search_state.saved_bf = bf;
- test_pc = rx_test_backtrack_return;
- goto test_return_continuation;
- resume_continuation_3:
- bf = search_state.saved_bf;
- goto try_burst_2;
- case rx_get_burst_no_more:
- /* Since we've been here before, it is some kind of
- * error that we can't return.
- */
- case rx_get_burst_error:
- search_state.test_ret = rx_test_internal_error;
- goto test_do_return;
- case rx_get_burst_ok:
- break;
- }
- }
- search_state.test_pos = bf->stk_test_pos;
- goto while_non_det_options;
- }
-
-
- case rx_cache_miss:
- /* Because the superstate NFA is lazily constructed,
- * and in fact may erode from underneath us, we sometimes
- * have to construct the next instruction from the hard way.
- * This invokes one step in the lazy-conversion.
- */
- search_state.ifr = rx_handle_cache_miss (&rxb->rx,
- search_state.super,
- search_state.c,
- search_state.ifr->data_2);
- if (!search_state.ifr)
- {
- search_state.test_ret = rx_test_internal_error;
- goto test_do_return;
- }
- goto restart;
-
- case rx_backtrack:
- /* RX_BACKTRACK means that we've reached the empty
- * superstate, indicating that match can't succeed
- * from this point.
- */
- goto test_do_return;
-
- case rx_next_char:
- case rx_error_inx:
- case rx_num_instructions:
- search_state.ret_val = 0;
- goto test_do_return;
- }
- goto pseudo_while_1;
- }
-
- /* Healthy exits from the test-match loop do a
- * `goto return_from_test_match' On the other hand,
- * we might end up here.
- */
- error_in_testing_match:
- test_state = rx_test_error;
- goto test_returns_to_search;
-
- /***** fastmap/search loop body
- * considering the results testing for a match
- */
-
- return_from_test_match:
-
- if (search_state.best_last_l >= 0)
- {
- if (regs && (regs->start != search_state.best_lparen))
- {
- bcopy (search_state.best_lparen, regs->start,
- regs->num_regs * sizeof (int));
- bcopy (search_state.best_rparen, regs->end,
- regs->num_regs * sizeof (int));
- }
- if (regs && !rxb->no_sub)
- {
- int q;
- int bound = (regs->num_regs > search_state.num_regs
- ? regs->num_regs
- : search_state.num_regs);
- regoff_t * s = regs->start;
- regoff_t * e = regs->end;
- for (q = search_state.best_last_l + 1; q < bound; ++q)
- s[q] = e[q] = -1;
- }
- search_state.ret_val = search_state.best_lparen[0];
- test_state = rx_test_ok;
- goto test_returns_to_search;
- }
- else
- {
- test_state = rx_test_fail;
- goto test_returns_to_search;
- }
-
- test_return_continuation:
- search_state.test_match_resume_pt = test_pc;
- test_state = rx_test_continuation;
- goto test_returns_to_search;
- }
-}
-
-
-
-#endif /* RX_WANT_RX_DEFS */
-
-
-
-#else /* RX_WANT_SE_DEFS */
- /* Integers are used to represent side effects.
- *
- * Simple side effects are given negative integer names by these enums.
- *
- * Non-negative names are reserved for complex effects.
- *
- * Complex effects are those that take arguments. For example,
- * a register assignment associated with a group is complex because
- * it requires an argument to tell which group is being matched.
- *
- * The integer name of a complex effect is an index into rxb->se_params.
- */
-
- RX_DEF_SE(1, re_se_try, = -1) /* Epsilon from start state */
-
- RX_DEF_SE(0, re_se_pushback, = re_se_try - 1)
- RX_DEF_SE(0, re_se_push0, = re_se_pushback -1)
- RX_DEF_SE(0, re_se_pushpos, = re_se_push0 - 1)
- RX_DEF_SE(0, re_se_chkpos, = re_se_pushpos -1)
- RX_DEF_SE(0, re_se_poppos, = re_se_chkpos - 1)
-
- RX_DEF_SE(1, re_se_at_dot, = re_se_poppos - 1) /* Emacs only */
- RX_DEF_SE(0, re_se_syntax, = re_se_at_dot - 1) /* Emacs only */
- RX_DEF_SE(0, re_se_not_syntax, = re_se_syntax - 1) /* Emacs only */
-
- RX_DEF_SE(1, re_se_begbuf, = re_se_not_syntax - 1) /* match beginning of buffer */
- RX_DEF_SE(1, re_se_hat, = re_se_begbuf - 1) /* match beginning of line */
-
- RX_DEF_SE(1, re_se_wordbeg, = re_se_hat - 1)
- RX_DEF_SE(1, re_se_wordbound, = re_se_wordbeg - 1)
- RX_DEF_SE(1, re_se_notwordbound, = re_se_wordbound - 1)
-
- RX_DEF_SE(1, re_se_wordend, = re_se_notwordbound - 1)
- RX_DEF_SE(1, re_se_endbuf, = re_se_wordend - 1)
-
- /* This fails except at the end of a line.
- * It deserves to go here since it is typicly one of the last steps
- * in a match.
- */
- RX_DEF_SE(1, re_se_dollar, = re_se_endbuf - 1)
-
- /* Simple effects: */
- RX_DEF_SE(1, re_se_fail, = re_se_dollar - 1)
-
- /* Complex effects. These are used in the 'se' field of
- * a struct re_se_params. Indexes into the se array
- * are stored as instructions on nfa edges.
- */
- RX_DEF_CPLX_SE(1, re_se_win, = 0)
- RX_DEF_CPLX_SE(1, re_se_lparen, = re_se_win + 1)
- RX_DEF_CPLX_SE(1, re_se_rparen, = re_se_lparen + 1)
- RX_DEF_CPLX_SE(0, re_se_backref, = re_se_rparen + 1)
- RX_DEF_CPLX_SE(0, re_se_iter, = re_se_backref + 1)
- RX_DEF_CPLX_SE(0, re_se_end_iter, = re_se_iter + 1)
- RX_DEF_CPLX_SE(0, re_se_tv, = re_se_end_iter + 1)
-
-#endif
-
-#endif
diff --git a/contrib/libg++/libstdc++/ChangeLog b/contrib/libg++/libstdc++/ChangeLog
deleted file mode 100644
index fc08f0d7d90b..000000000000
--- a/contrib/libg++/libstdc++/ChangeLog
+++ /dev/null
@@ -1,620 +0,0 @@
-Tue Jun 18 18:36:58 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * Version 2.7.2.
-
-Mon Jun 17 13:57:24 1996 Per Bothner <bothner@deneb.cygnus.com>
-
- * std/bastring.h (class basic_string::remove): Add casts.
-
- * configure.in: Use EXTRA_DISTCLEAN rather than DISTCLEAN.
-
-Wed Apr 24 10:43:07 1996 Doug Evans <dje@blues.cygnus.com>
-
- * Makefile.in (newi.o,cstringi.o,stddefi.o,cstdlibi.o,cmathi.o): Add
- rules for SunOS VPATH.
-
-Mon Apr 8 15:20:32 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * configure.in: Permit --enable-shared to specify a list of
- directories.
-
-Thu Mar 7 07:29:00 1996 Lee Iverson <leei@Canada.AI.SRI.COM>
-
- * Makefile.in (install): Restore deleted chdir to stl subdir.
-
-Tue Feb 20 18:29:30 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * Makefile.in (CXXFLAGS): Remove -pedantic -ansi.
- (CFLAGS): Ditto.
-
-Wed Feb 14 14:39:07 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * std/bastring.cc (check_realloc): Fix for sizeof (charT) > 1.
- From John Hickin <hickin@bnr.ca>.
-
-Wed Jan 10 11:05:04 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * std/bastring.h (insert): Fix iterator handling.
- From Joe Buck <jbuck@synopsys.com>.
-
-Mon Jan 8 11:48:03 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * std/bastring.h (max_size): Fix for sizeof (charT) > 1.
- * std/bastring.cc (replace): Use it.
-
- * std/bastring.cc (rfind): Fix for n > length ().
-
-Tue Dec 19 15:13:08 1995 Jason Merrill <jason@yorick.cygnus.com>
-
- * config/aix.ml (SHFLAGS): Add -Wl,-unix.
-
-Mon Dec 18 12:48:25 1995 Mike Stump <mrs@cygnus.com>
-
- * Makefile.in (exceptioni.o): Compile with -fhandle-exceptions, so
- we can unwind through unexpected on machines that don't have a
- working __unwind_function.
-
-Sun Dec 17 00:28:31 1995 Jeffrey A Law (law@cygnus.com)
-
- * Makefile.in (install): Make sure shared libraries
- are installed with mode 555.
-
-Mon Nov 27 15:01:56 1995 Jason Merrill <jason@yorick.cygnus.com>
-
- * Makefile.in (install): Make shared library links relative.
- (install): Break up -sf into -s -f.
- ({M,}SHLINK): Ditto.
-
-Sun Nov 26 22:48:06 1995 Jason Merrill <jason@yorick.cygnus.com>
-
- * queue: Include <stack.h> instead of <queue.h>.
-
-Sat Nov 25 11:33:13 1995 Doug Evans <dje@canuck.cygnus.com>
-
- * Makefile.in (install): Fix setting of rootme.
-
-Tue Nov 21 14:20:34 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * configure.in: Check ${with_cross_host} rather than comparing
- ${host} and ${target}.
-
-Tue Nov 14 01:50:52 1995 Doug Evans <dje@canuck.cygnus.com>
-
- * Makefile.in (IO_DIR): Delete MULTITOP, MULTISUBDIR.
- (LIBIBERTY_DIR): Likewise.
- (INSTALLDIR): Delete MULTISUBDIR.
- * configure.in: Delete call to cfg-ml-com.in. Call config-ml.in
- instead of cfg-ml-pos.in.
- (XCXXINCLUDES): Delete MULTITOP.
- * stl/configure.in (XCXXINCLUDES): Delete MULTITOP.
- (config-ml.in): Call instead of cfg-ml-pos.in.
-
-Sun Nov 12 16:44:25 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * Makefile.in (VERSION): Set to 2.7.1.
-
-Thu Nov 9 17:39:28 1995 Jason Merrill <jason@yorick.cygnus.com>
-
- * config/{aix,dec-osf,irix5,linux,sol2shm}.ml: Remove LDLIBS defn;
- no longer needed now that make check sets LD_LIBRARY_PATH.
-
-Wed Nov 8 19:46:35 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * std/bastring.h: Wrap with #ifndef/#define/#endif.
- * std/cassert.h: Likewise.
- * std/cinst.h: Likewise.
- * std/complext.h: Likewise.
- * std/dcomplex.h: Likewise.
- * std/fcomplex.h: Likewise.
- * std/ldcomplex.h: Likewise.
- * std/sinst.h: Likewise.
-
-Wed Nov 8 16:15:48 1995 Jason Merrill <jason@yorick.cygnus.com>
-
- * std/bastring.cc (getline): Update to September 95 WP. Now we
- don't set failbit when reading an empty line.
-
-Tue Nov 7 16:09:04 1995 Jason Merrill <jason@yorick.cygnus.com>
-
- * std/bastring.cc (new): Fix for sizeof (charT) != 1.
-
-Sat Nov 4 17:37:16 1995 Jason Merrill <jason@yorick.cygnus.com>
-
- * std/complext.cc (operator / (FLOAT, const complex<FLOAT>&)):
- Reimplement along the lines of the other operator / templates.
- From John Eaton <jwe@bevo.che.wisc.edu>.
-
-Sat Nov 4 13:33:50 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * configure.in (DISTCLEAN): New, to add target-mkfrag.
-
-Tue Oct 31 13:59:32 1995 Jason Merrill <jason@yorick.cygnus.com>
-
- * std/bastring.h: Use size_t for the reference count.
- * std/bastring.cc (create): Set selfish.
- From Joe Buck (jbuck@synopsys.com).
-
-Mon Oct 30 23:09:48 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * configure.in: Don't bother changing LIBIBERTY for cross,
- now that we are using target-libiberty instead.
- * Makefile.in (LIBIBERTY_DIR): Simplify.
- (LIBIBERTY): Remove.
-
-Wed Oct 11 14:56:49 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * config/sol2shm.ml: New files with -rpath.
- * configure (*-*-solaris*): Use sol2shm.ml.
-
-Thu Sep 28 09:26:52 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * std/straits.h (compare, copy, move, set): Fix for non-char charT's.
- * std/bastring.h (basic_string::remove): Fix for non-char charT's.
-
-Tue Sep 26 15:22:56 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * config/irix5.ml: Pass -rpath to links.
-
-Fri Sep 15 00:17:47 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * config/linux.ml: Conform to Linux shared library numbering
- scheme.
- * Makefile.in: Ditto.
-
-Tue Sep 12 00:28:56 1995 Mike Stump <mrs@cygnus.com>
-
- * typeinfoi.cc: (__pointer_type_info::__rtti_match): Moved from
- the headerfile, include all sorts of pointer conversions from 15.3
- para 2.
- * std/typeinfo.h (__pointer_type_info::__rtti_match): Moved from here.
-
-Mon Sep 11 23:27:59 1995 Mike Stump <mrs@cygnus.com>
-
- * std/typeinfo.h (__pointer_type_info::__rtti_match): We no longer
- have to dereference the object pointer, as the pointer is always
- passed directly.
-
-Mon Sep 11 19:29:51 1995 Mike Stump <mrs@cygnus.com>
-
- * std/typeinfo.h (__pointer_type_info::__rtti_match): Define so
- that pointer conversions can happen on catch type matching.
- * typeinfoi.cc (__throw_type_match_rtti): Arrange for __rtti_match
- to be used on pointers.
-
-Tue Sep 5 14:49:19 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * string.h: Remove for now.
-
-Thu Aug 31 14:14:01 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * std/bastring.cc (operator>>): Simplify and fix.
- (resize): Fix order of arguments to append.
- (getline): Simplify and fix.
-
-Thu Aug 24 17:44:09 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * std/cstdlib.h (abs): Provide default implementation for peons
- without labs.
-
-Tue Aug 22 08:43:07 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * std/cstdlib.h: Comment out definition of div(long,long) for now,
- since not all targets have ldiv.
-
-Mon Aug 21 11:46:03 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * std/cmath.h: Wrap abs(double) with #if ! _G_MATH_H_INLINES.
-
- * stl.h: Add, for compatibility with ObjectSpace STL.
-
- * std/complext.cc (operator /): Use abs instead of fabs.
-
- * std/bastring.h (replace): Update single-character replace method
- as per my proposal.
-
- * std/cmath.h: Add abs(float), abs(double) and abs(long double).
- Add commented-out declarations for other float and long double
- math functions.
-
- * std/cstdlib.h: Add abs(long) and div(long,long).
-
- * Makefile.in (install): Make shared library executable and
- non-writable. Tidy.
- (OBJS): Add cstdlibi.o and cmathi.o.
-
- * Rename implementation files to have different basenames.
-
-Mon Aug 21 00:57:03 1995 Jeffrey A. Law <law@rtl.cygnus.com>
-
- * Makefile.in (install): Use "cd stl"; no need for $(srcdir)
- prefix because we're already in $(srcdir).
-
-Tue Jul 25 18:41:29 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * std/stddef.h: Remove obsolete definition of enum capacity.
-
-Sat Jul 22 13:37:01 1995 Doug Evans <dje@canuck.cygnus.com>
-
- * Makefile.in (IO_DIR): Add multilib support.
- (LIBIBERTY, LIBIBERTY_OBJS, INSTALLDIR, stdlist): Likewise.
- (libiberty.a, install): Likewise.
- * configure.in: Likewise.
- (XCXXINCLUDES): Likewise.
- * stl/configure.in: Likewise.
- (XCXXINCLUDES): Likewise.
-
-Mon Jul 17 09:29:31 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * Makefile.in (typeinfo.o, stdexcept.o): Put an else for the if
- stmt checking PICFLAG.
- (stmp-string, bigstmp-string, stmp-complex, bigstmp-complex): Likewise.
-
-Wed Jun 28 17:05:29 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * std/*.h: Wrap with extern "C++".
-
- * std/ciso646.h: Don't worry about #undefing the keywords.
-
-Mon Jun 26 19:05:38 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * std/bastring.h (operator!=): If they've included the STL
- function.h, don't overload the operator templates that it defines.
-
-Fri Jun 23 16:54:17 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * Makefile.in (SHLINK): Force link.
- (install): Ditto.
-
- * std/bastring.h (terminate): Never reallocate.
- (alloc): No longer const.
-
- * std/bastring.cc (create): Always allocate an extra byte.
- (check_realloc): Always leave room for an extra byte.
- (*find*): Add missing 'const'.
-
- * Makefile.in (SHARLIB): Provide a default value.
-
-Tue Jun 20 16:29:52 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * std/cstring.h: Don't bother tweaking prototypes for now. When
- we do, we will use new-style casts.
-
-Fri Jun 16 13:57:53 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * Makefile.in (VERSION): Update to 2.7.0.
-
- * config/aix.ml: Build both shared and archive libraries.
-
-Wed Jun 14 21:44:21 1995 Jason Merrill <jason@python.cygnus.com>
-
- * configure.in (frags): Use linux.ml for Linux/ELF.
- * config/linux.ml: New file.
-
-Wed Jun 14 17:56:23 1995 Niclas Andersson <nican@ida.liu.se>
-
- * configure.in: Use xiberty when building cross-compiler.
-
-Wed Jun 14 12:57:47 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * std/*complex*, std/cinst.h, cinst.cc: Pass by reference to const
- rather than by value.
- * std/*complex*: Add member functions real() and imag().
-
-Sat Jun 10 12:14:38 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * Makefile.in (bigstmp-string): Call main string object cstrmain.o
- instead of cstring.o.
-
-Wed Jun 7 11:15:15 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * std/cstring.h: Use #include_next to pick up <string.h>.
-
- * string.h: New file.
-
- * Makefile.in (MOSTLYCLEAN_JUNK): Remove piclist.
-
- * configure.in (MOSTLYCLEAN): Remove stamp-picdir.
-
-Mon Jun 5 18:36:39 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * config/*.ml: Build both shared and archive libraries.
-
- * configure.in (MOSTLYCLEAN): Remove pic.
- (frags): Use toplevel pic frags.
-
- * Makefile.in (piclist): New rule.
- (SHLIB): Use it.
- (stl.list): Removed.
- (typeinfo.o): Also build pic version.
- (stdexcept.o): Ditto.
- (*stmp-*): Ditto.
-
-Tue May 30 12:01:14 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * std/{complext,{f,d,ld}complex}.h: To declare specializations,
- use friend declarations in the class body...
- * std/cinst.h: ...rather than macro hackery.
-
- * Makefile.in (stdlist): Renamed from list.
-
- * cstdarg: Don't define __CSTDARG__.
- * complex.h: Similarly.
-
-Tue May 9 19:31:20 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * std/bastring.cc (operator>>): Use an int to store the return value
- of streambuf::sbumpc.
- (getline): Ditto.
- * std/bastring.* (replace): Reverse size_t and charT arguments.
-
- * configure.in (enable_shared): Support enable_shared under AIX.
-
- * Makefile.in (SHARLIB): New variable and rule for building an
- archive library containing a single shared object (for AIX).
-
-Mon May 8 01:43:19 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * std/bastring.h (remove): Forgot one.
- (empty): And this.
- Disable copy-on-write if someone takes an iterator.
-
- * std/bastring.cc (getline): Avoid resizing down if unnecessary.
- (operator>>): Don't use private methods.
-
-Sun May 7 02:39:56 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * std/bastring.h (insert, replace): Fix.
- * std/bastring.cc (find_*_of): Fix.
-
-Fri May 5 01:45:10 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * std/bastring.h: Add iterator remove fn. Remove evil default
- arguments.
-
- * std/*complex*, std/cinst.h, cinst.cc: s/__complex/complex/g.
- complex<float> is now specialized. Lose _*_complex in favor of
- 'explicit' constructors.
- * std/complex.h: Lose typedef of complex.
- * std/fcomplex.h: New file.
- * std/complext.cc (operator<<): Accept more input forms.
-
- * std/bastring.h: Add iterator insert fns.
-
-Thu May 4 02:30:04 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * std/bastring.*: Update to current draft.
-
- * std/bastring.*: Reorganize so that the pointer in a string
- object points to the data rather than the bsrep object, for
- debugging.
-
-Tue Apr 25 17:15:09 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * configure.in: Update to stay in sync with config.shared.
-
-Mon Apr 24 13:08:46 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * std/complext.h: Declare hypot. Declare appropriate functions const.
-
-Wed Apr 12 15:26:25 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * Makefile.in (typeinfo.o): Don't use $<.
- (stdexcept.o): Ditto.
-
-Sat Apr 8 15:35:00 1995 Mike Stump <mrs@cygnus.com>
-
- * std/typeinfo.h: Move bad_cast, bad_typeid and __bad_cast_object
- from here to stdexcept.
- * std/stdexcept.h: Ditto.
- * Makefile.in (stdexcept.o): Added rule to build typeinfo.o with
- -frtti to support matching of thrown objects with rtti info for
- bad_cast.
-
-Mon Apr 3 18:13:14 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * typeinfo: New file.
-
- * Makefile.in (HEADERS): Add typeinfo.
-
-Mon Apr 3 15:06:58 1995 Mike Stump <mrs@cygnus.com>
-
- * Makefile.in (typeinfo.o): Added rule to build typeinfo.o with
- -frtti to support matching of thrown objects with rtti info for
- bad_cast.
-
-Wed Mar 29 15:56:06 1995 Mike Stump <mrs@cygnus.com>
-
- * typeinfo.cc: (__throw_type_match_rtti): Added to support
- matching of thrown objects with rtti info.
-
-Thu Mar 23 18:42:30 1995 Jason Merrill <jason@deneb.cygnus.com>
-
- * Makefile.in (HEADERS): Add stdexcept.
-
-Sun Mar 12 01:25:27 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * std/typeinfo.h: Add return statements to dummy methods.
-
-Wed Mar 8 16:09:50 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * config/dec-osf.ml: Use -rpath flag.
-
-Fri Feb 17 18:16:46 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * std/typeinfo.h: Add copyright header.
-
- * Makefile.in (CXXFLAGS): Add a bunch of warning options to keep
- me honest.
-
-Thu Feb 16 00:04:49 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * Makefile.in, config/*.ml: Generate shared library on most hosts
- as libstdc++.so.$(VERSION), with a symlink to libstdc++.so, so that
- multiple versions can coexist.
-
-Fri Feb 10 02:59:39 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * std/exception.h: {set_,}{terminate,unexpected} have C++ linkage.
-
- * Makefile.in: Allow string and complex to be split up either by
- individual function or into I/O and non-I/O. Default to the
- latter.
-
-Wed Feb 8 02:39:47 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * std/bastring.h: Start thinking about throwing exceptions.
-
- * typeinfo.cc: Remove private functions; defining them to call
- abort () just delays errors until runtime. Define
- __bad_cast_object.
-
- * std/exception.h: Standard exceptions are now defined in
- stdexcept.h. This header now contains declarations of terminate()
- et al.
- * exception.cc: Move code from libg++/src/except.c here.
- * std/typeinfo.h: Define RTTI-related exceptions here.
- * stdexcept{,.cc},std/stdexcept.h: New files.
-
-Mon Feb 6 18:51:31 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * Makefile.in (HEADERS): Resurrect, add new STL header names.
- (install): Install extensionless headers again.
- * extensionless headers: Resurrect, add new STL headers.
- Currently only forward to std/whatever or stl/whatever.
-
-Mon Jan 30 13:53:22 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * std/bastring.h (basic_string (charT, size_t)): Mark explicit.
-
- * Makefile.in (install): Set rootme when installing stl headers.
- Only install *.* from std.
-
-Wed Jan 25 02:29:30 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * std/bastring.h (operator=): grab before releasing.
-
-Mon Jan 23 19:54:02 1995 Ronald F. Guilmette <rfg@segfault.us.com>
-
- * Makefile.in (install): Also install STL headers.
-
-Mon Jan 23 04:09:35 1995 Jason Merrill <jason@python.cygnus.com>
-
- * Makefile.in (list): Set $rootme before calling make.
-
-Wed Jan 11 19:24:47 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * typeinfo.cc (__rtti_match): Don't try to do pointer arithmetic
- with a void *.
-
- * move all headers into std subdirectory and update files accordingly.
-
-Thu Jan 5 01:51:49 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * bastring.ccI (basic_string (size_t, capacity)): s/reserve/::reserve/.
-
-Wed Jan 4 17:27:32 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * exception: s/string/__string/g.
-
- * configure.in (MOSTLYCLEAN): Add so_locations.
-
- * bastring.ccI (basic_string (size_t, capacity)): Fix thinko.
- (various find functions): Ditto.
-
-Fri Dec 30 18:04:00 1994 Mike Stump <mrs@cygnus.com>
-
- * typeinfo.h: Add support for the built-in type bool.
-
-Fri Dec 30 14:57:02 1994 Mike Stump <mrs@cygnus.com>
-
- * typeinfo.{cc, h}: Guard against multiple inclusions, and add #p i/i.
-
-Fri Dec 2 17:56:05 1994 Mike Stump <mrs@cygnus.com>
-
- * libg++ 2.6.2 released.
-
- * typeinfo.{cc, h} (__rtti_match): Change interface to compiler
- for dynamic_casting to gear up for exception handling's use of
- rtti for argument matching.
-
-Tue Nov 29 16:49:32 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * configure.in (configdirs): Add stl.
- * Makefile.in: Build stl, and merge .o files from it.
-
-Thu Nov 17 15:30:57 1994 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * bastring.hI: Add iterator, const_iterator, begin() and end() to
- basic_string.
-
-Mon Nov 7 16:50:33 1994 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * Makefile.in, configure.in, config/*.ml, tests/Makefile.in,
- tests/configure.in: Various changes to handle --enable-shared.
-
-Fri Nov 4 19:13:33 1994 Mike Stump (mrs@cygnus.com)
-
- * exception{,.cc}: Added to support catching bad_cast's.
-
-Thu Nov 3 17:42:13 1994 Mike Stump (mrs@cygnus.com)
-
- * typeinfo.h (type_info::{name, before}): Add to match draft.
-
-Thu Nov 3 00:56:34 1994 Jason Merrill (jason@phydeaux.cygnus.com)
-
- * Makefile.in (LIBIBERTY_OBJS): Add strerror.o.
-
-Mon Oct 31 15:33:06 1994 Kung Hsu (kung@mexican.cygnus.com)
-
- * typeinfo.cc: Fix a bug in the final return.
- * typeinfo.cc: Fix the ANSI header version number.
- * typeinfo.h: ditto.
-
-Fri Oct 28 14:23:12 1994 Mike Stump <mrs@cygnus.com>
-
- * type_info.{cc,h}: Rename to typeinfo to better match current draft.
-
-Wed Oct 26 11:13:53 1994 Kung Hsu (kung@mexican.cygnus.com)
-
- * type_info.h: new header file for rtti.
- * type_info.cc: new code file for rtti.
- * Makefile.in: change to include type_info.o in libstdc++ for rtti.
-
-Sat Oct 15 16:09:51 1994 Jason Merrill (jason@phydeaux.cygnus.com)
-
- * libg++ 2.6.1 released.
-
- * cinst.hI: Also declare instantiations of out-of-line functions.
-
-Fri Oct 14 15:00:09 1994 Jason Merrill (jason@phydeaux.cygnus.com)
-
- * configure.in (CXXINCLUDES): Use {} to wrap variable name.
- * tests/configure.in (CXXINCLUDES): Ditto.
-
- * cinst.hI: Declare instantiations of two-argument functions so
- overload resolution will work.
- * complext.hI: Always include cinst.hI.
-
- * bastring.ccI (operator>>): Tweak.
-
-Tue Oct 11 17:07:49 1994 Jason Merrill (jason@phydeaux.cygnus.com)
-
- * stddef*: Do the #pragma i/i thang.
-
- * bastring.hI (basic_string::put_at): Use operator[].
- (basic_string::terminate): Don't necessarily copy the rep.
-
- * bastring.ccI (operator>>): Avoid shrinking and then re-expanding
- the string.
-
- * bastring.*I, sinst.cc: Only allow allocation policy control if
- _G_ALLOC_CONTROL is defined.
-
- * Makefile.in (libstdc++.a): Depend on iostream.list and libiberty.a.
- (../libio/iostream.list): New rule.
- (../libiberty/libiberty.a): New rule.
- (OBJS): Add stddef.o.
-
-Sat Oct 8 23:59:45 1994 Jason Merrill (jason@phydeaux.cygnus.com)
-
- * *: First checkin.
diff --git a/contrib/libg++/libstdc++/Makefile.in b/contrib/libg++/libstdc++/Makefile.in
deleted file mode 100644
index a4bdc4fc216f..000000000000
--- a/contrib/libg++/libstdc++/Makefile.in
+++ /dev/null
@@ -1,310 +0,0 @@
-# Copyright (C) 1994, 1995 Free Software Foundation
-
-# This file is part of the GNU ANSI C++ Library. This library is free
-# software; you can redistribute it and/or modify it under the terms of
-# the GNU General Public License as published by the Free Software
-# Foundation; either version 2, or (at your option) any later version.
-
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this library; see the file COPYING. If not, write to the Free
-# Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-VERSION = 2.7.2
-
-OBJS = newi.o cstringi.o stddefi.o typeinfoi.o exceptioni.o stdexcepti.o \
- cstdlibi.o cmathi.o
-SUBLIBS = $(STAMP)-string $(STAMP)-complex
-
-# C++ headers with no extension
-HEADERS= cassert cctype cerrno cfloat ciso646 climits clocale cmath complex \
- csetjmp csignal cstdarg cstddef cstdio cstdlib cstring ctime \
- cwchar cwctype new stddef string exception stdexcept typeinfo \
- algorithm deque list map queue set stack vector utility functional \
- iterator memory numeric
-
-ARLIB = libstdc++.a
-SHLIB = libstdc++.so.$(VERSION)
-SHARLIB = libstdc++-sh.a
-SHLINK = libstdc++.so
-MSHLINK = foo
-SHFLAGS =
-SHDEPS =
-
-STAMP = bigstmp
-
-LIBS = $(ARLIB)
-
-#### package, host, target, and site dependent Makefile fragments come in here.
-##
-
-IO_DIR = ../libio
-LIBIBERTY_DIR = ../libiberty
-
-LIBIBERTY_OBJS = `cat $(LIBIBERTY_DIR)/needed-list` strerror.o
-
-tooldir = $(exec_prefix)/$(target)
-INSTALLDIR = $(libdir)
-
-MOSTLYCLEAN_JUNK = *stmp-* tlib*.a *.s *.ii stdlist piclist
-CLEAN_JUNK = $(LIBS)
-
-# Remove these for public releases.
-CXXFLAGS = -g -O3 -Wall -Wpointer-arith -Wnested-externs -Woverloaded-virtual -Wbad-function-cast -Winline
-CFLAGS = -g -O3 -Wpointer-arith -Wnested-externs
-
-.PHONY: libs
-libs: $(LIBS)
-
-stdlist: $(IO_DIR)/iostream.list $(OBJS) $(SUBLIBS) $(LIBIBERTY_DIR)/libiberty.a
- -rm -f tlist
- touch tlist
- echo *.o >> tlist
- for f in `cat $(IO_DIR)/iostream.list` ; do \
- echo "$(IO_DIR)/$$f" >> tlist ; \
- done
- for f in $(LIBIBERTY_OBJS) ; do \
- echo "$(LIBIBERTY_DIR)/$$f" >> tlist ; \
- done
- mv tlist stdlist
-
-piclist: stdlist stl/stl.list
- -rm -f tlist
- cp stdlist tlist
- sed 's,\([A-Za-z_]*\.o\),stl/\1,g' stl/stl.list >> tlist
- if [ -n "$(PICFLAG)" ]; then \
- sed 's,\([A-Za-z_]*\.o\),pic/\1,g' tlist > tlist2 ; \
- mv tlist2 tlist ; \
- else true ; fi
- mv tlist piclist
-
-$(ARLIB): stdlist stl/stl.list
- -rm -f t$(ARLIB)
- $(AR) $(AR_FLAGS) t$(ARLIB) `cat stdlist`
- cd stl; $(AR) $(AR_FLAGS) ../t$(ARLIB) `cat stl.list`
- mv t$(ARLIB) $(ARLIB)
- $(RANLIB) $(ARLIB)
-
-$(SHLIB): piclist
- $(CXX) $(SHFLAGS) -shared -o $(SHLIB) `cat piclist` $(SHDEPS)
-
-$(SHARLIB): $(SHLIB)
- -rm -f t$(SHARLIB)
- $(AR) $(AR_FLAGS) t$(SHARLIB) $(SHLIB)
- mv t$(SHARLIB) $(SHARLIB)
- $(RANLIB) $(SHARLIB)
-
-$(SHLINK):
- ln -s -f $(SHLIB) $(SHLINK)
-
-$(MSHLINK):
- ln -s -f $(SHLIB) $(MSHLINK)
-
-$(IO_DIR)/iostream.list: force
- cd $(IO_DIR) ; $(MAKE) $(FLAGS_TO_PASS) iostream.list
-
-stl/stl.list: force
- @rootme=`pwd`/ ; export rootme; cd stl ; \
- $(MAKE) $(FLAGS_TO_PASS) stl.list
-
-$(LIBIBERTY_DIR)/libiberty.a:
- cd $(LIBIBERTY_DIR) ; $(MAKE) $(FLAGS_TO_PASS)
-
-STRFUNCS = REP MAIN TRAITS ADDSS ADDPS ADDCS ADDSP ADDSC \
- EQSS EQPS EQSP NESS NEPS NESP LTSS LTPS LTSP GTSS GTPS GTSP \
- LESS LEPS LESP GESS GEPS GESP
-STRIO = EXTRACT INSERT GETLINE
-
-typeinfoi.o: ${srcdir}/typeinfoi.cc ${srcdir}/std/typeinfo.h
- if [ -n "$(PICFLAG)" ]; then \
- $(COMPILE.cc) $(PICFLAG) ${srcdir}/typeinfoi.cc -frtti -o pic/typeinfoi.o; \
- else true ; fi
- $(COMPILE.cc) ${srcdir}/typeinfoi.cc -frtti
-
-stdexcepti.o: ${srcdir}/stdexcepti.cc ${srcdir}/std/stdexcept.h
- if [ -n "$(PICFLAG)" ]; then \
- $(COMPILE.cc) $(PICFLAG) ${srcdir}/stdexcepti.cc -frtti -o pic/stdexcepti.o; \
- else true ; fi
- $(COMPILE.cc) ${srcdir}/stdexcepti.cc -frtti
-
-exceptioni.o: ${srcdir}/exceptioni.cc
- if [ -n "$(PICFLAG)" ]; then \
- $(COMPILE.cc) $(PICFLAG) ${srcdir}/exceptioni.cc -O0 -fhandle-exceptions -frtti -o pic/exceptioni.o; \
- else true ; fi
- $(COMPILE.cc) ${srcdir}/exceptioni.cc -O0 -fhandle-exceptions -frtti
-
-# These are here for SunOS VPATH.
-newi.o: newi.cc
-cstringi.o: cstringi.cc
-stddefi.o: stddefi.cc
-cstdlibi.o: cstdlibi.cc
-cmathi.o: cmathi.cc
-typeinfoi.o: typeinfoi.cc
-stdexcepti.o: stdexcepti.cc
-
-# Later do wide strings, too.
-stmp-string: ${srcdir}/sinst.cc ${srcdir}/std/bastring.h \
- ${srcdir}/std/bastring.cc ${srcdir}/std/straits.h
- for name in $(STRFUNCS) $(STRIO); do \
- echo c$${name}; \
- if [ -n "$(PICFLAG)" ]; then \
- $(COMPILE.cc) $(PICFLAG) -DC -D$${name} ${srcdir}/sinst.cc \
- -o pic/c$${name}.o; \
- else true ; fi; \
- if [ $$? -eq 0 ]; then true; else exit 1; fi; \
- $(COMPILE.cc) -DC -D$${name} ${srcdir}/sinst.cc -o c$${name}.o; \
- if [ $$? -eq 0 ]; then true; else exit 1; fi; \
- done
- touch stmp-string
-
-bigstmp-string: ${srcdir}/sinst.cc ${srcdir}/std/bastring.h \
- ${srcdir}/std/bastring.cc ${srcdir}/std/straits.h
- echo cstring
- if [ -n "$(PICFLAG)" ]; then \
- $(COMPILE.cc) $(PICFLAG) -DC \
- `for N in $(STRFUNCS); do echo " -D$${N}"; done` \
- $(srcdir)/sinst.cc -o pic/cstrmain.o; \
- else true ; fi
- $(COMPILE.cc) -DC `for N in $(STRFUNCS); do echo " -D$${N}"; done` \
- $(srcdir)/sinst.cc -o cstrmain.o
- echo cstrio
- if [ -n "$(PICFLAG)" ]; then \
- $(COMPILE.cc) $(PICFLAG) -DC \
- `for N in $(STRIO); do echo " -D$${N}"; done` \
- $(srcdir)/sinst.cc -o pic/cstrio.o; \
- else true ; fi
- $(COMPILE.cc) -DC `for N in $(STRIO); do echo " -D$${N}"; done` \
- $(srcdir)/sinst.cc -o cstrio.o
- touch bigstmp-string
-
-COMFUNCS = MAIN ADDCC ADDCF ADDFC SUBCC SUBCF SUBFC MULCC MULCF MULFC DIVCC \
- DIVCF DIVFC PLUS MINUS EQCC EQCF EQFC NECC NECF NEFC ABS ARG POLAR \
- CONJ NORM COS COSH EXP LOG POWCC POWCF POWCI POWFC SIN SINH SQRT
-COMIO = EXTRACT INSERT
-
-stmp-complex: ${srcdir}/cinst.cc ${srcdir}/std/complext.h \
- ${srcdir}/std/complext.cc ${srcdir}/std/dcomplex.h \
- ${srcdir}/std/ldcomplex.h
- for N in $(COMFUNCS) $(COMIO); do \
- echo f$${N}; \
- if [ -n "$(PICFLAG)" ]; then \
- $(COMPILE.cc) $(PICFLAG) -DF -D$${N} $(srcdir)/cinst.cc \
- -o pic/f$${N}.o; \
- else true ; fi; \
- if [ $$? -eq 0 ]; then true; else exit 1; fi; \
- $(COMPILE.cc) -DF -D$${N} ${srcdir}/cinst.cc -o f$${N}.o; \
- if [ $$? -eq 0 ]; then true; else exit 1; fi; \
- echo d$${N}; \
- if [ -n "$(PICFLAG)" ]; then \
- $(COMPILE.cc) $(PICFLAG) -DD -D$${N} $(srcdir)/cinst.cc \
- -o pic/d$${N}.o; \
- else true ; fi; \
- if [ $$? -eq 0 ]; then true; else exit 1; fi; \
- $(COMPILE.cc) -DD -D$${N} ${srcdir}/cinst.cc -o d$${N}.o; \
- if [ $$? -eq 0 ]; then true; else exit 1; fi; \
- echo ld$${N}; \
- if [ -n "$(PICFLAG)" ]; then \
- $(COMPILE.cc) $(PICFLAG) -DLD -D$${N} $(srcdir)/cinst.cc \
- -o pic/ld$${N}.o; \
- else true ; fi; \
- if [ $$? -eq 0 ]; then true; else exit 1; fi; \
- $(COMPILE.cc) -DLD -D$${N} ${srcdir}/cinst.cc -o ld$${N}.o; \
- if [ $$? -eq 0 ]; then true; else exit 1; fi; \
- done
- touch stmp-complex
-
-bigstmp-complex: ${srcdir}/cinst.cc ${srcdir}/std/complext.h \
- ${srcdir}/std/complext.cc ${srcdir}/std/dcomplex.h \
- ${srcdir}/std/ldcomplex.h
- echo fcomplex
- if [ -n "$(PICFLAG)" ]; then \
- $(COMPILE.cc) $(PICFLAG) -DF \
- `for N in $(COMFUNCS); do echo " -D$${N}"; done` \
- $(srcdir)/cinst.cc -o pic/fcomplex.o; \
- else true ; fi
- $(COMPILE.cc) -DF `for N in $(COMFUNCS); do echo " -D$${N}"; done` \
- $(srcdir)/cinst.cc -o fcomplex.o
- echo fcomio
- if [ -n "$(PICFLAG)" ]; then \
- $(COMPILE.cc) $(PICFLAG) -DF \
- `for N in $(COMIO); do echo " -D$${N}"; done` \
- $(srcdir)/cinst.cc -o pic/fcomio.o; \
- else true ; fi
- $(COMPILE.cc) -DF `for N in $(COMIO); do echo " -D$${N}"; done` \
- $(srcdir)/cinst.cc -o fcomio.o
- echo dcomplex
- if [ -n "$(PICFLAG)" ]; then \
- $(COMPILE.cc) $(PICFLAG) -DD \
- `for N in $(COMFUNCS); do echo " -D$${N}"; done` \
- $(srcdir)/cinst.cc -o pic/dcomplex.o; \
- else true ; fi
- $(COMPILE.cc) -DD `for N in $(COMFUNCS); do echo " -D$${N}"; done` \
- $(srcdir)/cinst.cc -o dcomplex.o
- echo dcomio
- if [ -n "$(PICFLAG)" ]; then \
- $(COMPILE.cc) $(PICFLAG) -DD \
- `for N in $(COMIO); do echo " -D$${N}"; done` \
- $(srcdir)/cinst.cc -o pic/dcomio.o; \
- else true ; fi
- $(COMPILE.cc) -DD `for N in $(COMIO); do echo " -D$${N}"; done` \
- $(srcdir)/cinst.cc -o dcomio.o
- echo ldcomplex
- if [ -n "$(PICFLAG)" ]; then \
- $(COMPILE.cc) $(PICFLAG) -DLD \
- `for N in $(COMFUNCS); do echo " -D$${N}"; done` \
- $(srcdir)/cinst.cc -o pic/ldcomplex.o; \
- else true ; fi
- $(COMPILE.cc) -DLD `for N in $(COMFUNCS); do echo " -D$${N}"; done` \
- $(srcdir)/cinst.cc -o ldcomplex.o
- echo ldcomio
- if [ -n "$(PICFLAG)" ]; then \
- $(COMPILE.cc) $(PICFLAG) -DLD \
- `for N in $(COMIO); do echo " -D$${N}"; done` \
- $(srcdir)/cinst.cc -o pic/ldcomio.o; \
- else true ; fi
- $(COMPILE.cc) -DLD `for N in $(COMIO); do echo " -D$${N}"; done` \
- $(srcdir)/cinst.cc -o ldcomio.o
- touch bigstmp-complex
-
-.PHONY: install
-install:
- rootme=`pwd`/ ; export rootme ; \
- if [ -z "$(MULTISUBDIR)" ]; then \
- cd $(srcdir); \
- for FILE in $(HEADERS) *.h std/*.*; do \
- rm -f $(gxx_includedir)/$$FILE ; \
- $(INSTALL_DATA) $$FILE $(gxx_includedir)/$$FILE ; \
- chmod a-x $(gxx_includedir)/$$FILE ; \
- done ; \
- cd stl; \
- for FILE in *.h; do \
- rm -f $(gxx_includedir)/$$FILE ; \
- $(INSTALL_DATA) $$FILE $(gxx_includedir)/$$FILE ; \
- chmod a-x $(gxx_includedir)/$$FILE ; \
- done ; \
- else true ; \
- fi
- rootme=`pwd`/ ; export rootme ; \
- for FILE in $(LIBS) ; do \
- rm -f $(INSTALLDIR)$(MULTISUBDIR)/$$FILE ; \
- if [ $$FILE = $(SHLINK) ] || [ $$FILE = $(MSHLINK) ]; then \
- ln -s -f $(SHLIB) $(INSTALLDIR)$(MULTISUBDIR)/$$FILE ; \
- elif [ $$FILE = $(SHLIB) ]; then \
- $(INSTALL_PROGRAM) $$FILE $(INSTALLDIR)$(MULTISUBDIR)/$$FILE ; \
- : On the HP, shared libraries must be mode 555. ;\
- chmod 555 $(INSTALLDIR)$(MULTISUBDIR)/$$FILE ; \
- else \
- $(INSTALL_DATA) $$FILE $(INSTALLDIR)$(MULTISUBDIR)/$$FILE ; \
- $(RANLIB) $(INSTALLDIR)$(MULTISUBDIR)/$$FILE ; \
- chmod a-x $(INSTALLDIR)$(MULTISUBDIR)/$$FILE ; \
- fi ; \
- done
- @rootme=`pwd`/ ; export rootme ; \
- $(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=install
-
-.PHONY: force
-force:
diff --git a/contrib/libg++/libstdc++/algorithm b/contrib/libg++/libstdc++/algorithm
deleted file mode 100644
index 472d24166401..000000000000
--- a/contrib/libg++/libstdc++/algorithm
+++ /dev/null
@@ -1,7 +0,0 @@
-// -*- C++ -*- forwarding header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __ALGORITHM__
-#define __ALGORITHM__
-#include <algo.h>
-#endif
diff --git a/contrib/libg++/libstdc++/cassert b/contrib/libg++/libstdc++/cassert
deleted file mode 100644
index 848087f1783c..000000000000
--- a/contrib/libg++/libstdc++/cassert
+++ /dev/null
@@ -1,6 +0,0 @@
-// -*- C++ -*- forwarding header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __CASSERT__
-#include <std/cassert.h>
-#endif
diff --git a/contrib/libg++/libstdc++/cctype b/contrib/libg++/libstdc++/cctype
deleted file mode 100644
index 12d96d75917b..000000000000
--- a/contrib/libg++/libstdc++/cctype
+++ /dev/null
@@ -1,6 +0,0 @@
-// -*- C++ -*- forwarding header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __CCTYPE__
-#include <std/cctype.h>
-#endif
diff --git a/contrib/libg++/libstdc++/cerrno b/contrib/libg++/libstdc++/cerrno
deleted file mode 100644
index bbd93f750673..000000000000
--- a/contrib/libg++/libstdc++/cerrno
+++ /dev/null
@@ -1,6 +0,0 @@
-// -*- C++ -*- forwarding header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __CERRNO__
-#include <std/cerrno.h>
-#endif
diff --git a/contrib/libg++/libstdc++/cfloat b/contrib/libg++/libstdc++/cfloat
deleted file mode 100644
index bd7497a9ebd6..000000000000
--- a/contrib/libg++/libstdc++/cfloat
+++ /dev/null
@@ -1,6 +0,0 @@
-// -*- C++ -*- forwarding header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __CFLOAT__
-#include <std/cfloat.h>
-#endif
diff --git a/contrib/libg++/libstdc++/cinst.cc b/contrib/libg++/libstdc++/cinst.cc
deleted file mode 100644
index 92236c4f8c0c..000000000000
--- a/contrib/libg++/libstdc++/cinst.cc
+++ /dev/null
@@ -1,151 +0,0 @@
-// Instantiation file for the -*- C++ -*- complex number classes.
-// Copyright (C) 1994 Free Software Foundation
-
-#ifdef F
-typedef float f;
-#endif
-#ifdef D
-typedef double f;
-#endif
-#ifdef LD
-typedef long double f;
-#endif
-
-#if defined (MAIN) && defined (__GNUG__)
-#ifdef F
-#pragma implementation "fcomplex"
-#endif
-#ifdef D
-#pragma implementation "dcomplex"
-#endif
-#ifdef LD
-#pragma implementation "ldcomplex"
-#endif
-#endif
-
-#if 0
-#define _G_NO_EXTERN_TEMPLATES
-#endif
-#include <std/complext.cc>
-
-typedef complex<f> c;
-typedef const c& ccr;
-
-#ifdef MAIN
-template class complex<f>;
-#endif
-
-#ifdef ADDCC
-template c operator+ (ccr, ccr);
-#endif
-#ifdef ADDCF
-template c operator+ (ccr, f);
-#endif
-#ifdef ADDFC
-template c operator+ (f, ccr);
-#endif
-#ifdef SUBCC
-template c operator- (ccr, ccr);
-#endif
-#ifdef SUBCF
-template c operator- (ccr, f);
-#endif
-#ifdef SUBFC
-template c operator- (f, ccr);
-#endif
-#ifdef MULCC
-template c operator* (ccr, ccr);
-#endif
-#ifdef MULCF
-template c operator* (ccr, f);
-#endif
-#ifdef MULFC
-template c operator* (f, ccr);
-#endif
-#ifdef DIVCC
-template c operator/ (ccr, ccr);
-#endif
-#ifdef DIVCF
-template c operator/ (ccr, f);
-#endif
-#ifdef DIVFC
-template c operator/ (f, ccr);
-#endif
-#ifdef PLUS
-template c operator+ (ccr);
-#endif
-#ifdef MINUS
-template c operator- (ccr);
-#endif
-#ifdef EQCC
-template bool operator== (ccr, ccr);
-#endif
-#ifdef EQCF
-template bool operator== (ccr, f);
-#endif
-#ifdef EQFC
-template bool operator== (f, ccr);
-#endif
-#ifdef NECC
-template bool operator!= (ccr, ccr);
-#endif
-#ifdef NECF
-template bool operator!= (ccr, f);
-#endif
-#ifdef NEFC
-template bool operator!= (f, ccr);
-#endif
-#ifdef ABS
-template f abs (ccr);
-#endif
-#ifdef ARG
-template f arg (ccr);
-#endif
-#ifdef POLAR
-template c polar (f, f);
-#endif
-#ifdef CONJ
-template c conj (ccr);
-#endif
-#ifdef NORM
-template f norm (ccr);
-#endif
-#ifdef COS
-template c cos (ccr);
-#endif
-#ifdef COSH
-template c cosh (ccr);
-#endif
-#ifdef EXP
-template c exp (ccr);
-#endif
-#ifdef LOG
-template c log (ccr);
-#endif
-#ifdef POWCC
-template c pow (ccr, ccr);
-#endif
-#ifdef POWCF
-template c pow (ccr, f);
-#endif
-#ifdef POWCI
-template c pow (ccr, int);
-#endif
-#ifdef POWFC
-template c pow (f, ccr);
-#endif
-#ifdef SIN
-template c sin (ccr);
-#endif
-#ifdef SINH
-template c sinh (ccr);
-#endif
-#ifdef SQRT
-template c sqrt (ccr);
-#endif
-#ifdef EXTRACT
-template istream& operator>> (istream&, complex<f>&);
-#endif
-#ifdef INSERT
-template ostream& operator<< (ostream&, complex<f>);
-#endif
diff --git a/contrib/libg++/libstdc++/ciso646 b/contrib/libg++/libstdc++/ciso646
deleted file mode 100644
index 512090866954..000000000000
--- a/contrib/libg++/libstdc++/ciso646
+++ /dev/null
@@ -1,6 +0,0 @@
-// -*- C++ -*- forwarding header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __CISO646__
-#include <std/ciso646.h>
-#endif
diff --git a/contrib/libg++/libstdc++/climits b/contrib/libg++/libstdc++/climits
deleted file mode 100644
index 4b7b81d82e35..000000000000
--- a/contrib/libg++/libstdc++/climits
+++ /dev/null
@@ -1,6 +0,0 @@
-// -*- C++ -*- forwarding header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __CLIMITS__
-#include <std/climits.h>
-#endif
diff --git a/contrib/libg++/libstdc++/clocale b/contrib/libg++/libstdc++/clocale
deleted file mode 100644
index 9e20a88bfa42..000000000000
--- a/contrib/libg++/libstdc++/clocale
+++ /dev/null
@@ -1,6 +0,0 @@
-// -*- C++ -*- forwarding header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __CLOCALE__
-#include <std/clocale.h>
-#endif
diff --git a/contrib/libg++/libstdc++/cmath b/contrib/libg++/libstdc++/cmath
deleted file mode 100644
index da5bce9cad31..000000000000
--- a/contrib/libg++/libstdc++/cmath
+++ /dev/null
@@ -1,6 +0,0 @@
-// -*- C++ -*- forwarding header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __CMATH__
-#include <std/cmath.h>
-#endif
diff --git a/contrib/libg++/libstdc++/cmathi.cc b/contrib/libg++/libstdc++/cmathi.cc
deleted file mode 100644
index e9fa0604eb92..000000000000
--- a/contrib/libg++/libstdc++/cmathi.cc
+++ /dev/null
@@ -1,7 +0,0 @@
-// Implementation file for the -*- C++ -*- math functions header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifdef __GNUG__
-#pragma implementation "std/cmath.h"
-#endif
-#include <std/cmath.h>
diff --git a/contrib/libg++/libstdc++/complex b/contrib/libg++/libstdc++/complex
deleted file mode 100644
index 17e2fe439bf7..000000000000
--- a/contrib/libg++/libstdc++/complex
+++ /dev/null
@@ -1,6 +0,0 @@
-// -*- C++ -*- forwarding header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __COMPLEX__
-#include <std/complex.h>
-#endif
diff --git a/contrib/libg++/libstdc++/complex.h b/contrib/libg++/libstdc++/complex.h
deleted file mode 100644
index 554210dcffd6..000000000000
--- a/contrib/libg++/libstdc++/complex.h
+++ /dev/null
@@ -1,6 +0,0 @@
-// -*- C++ -*- backward compatiblity header.
-// Copyright (C) 1994 Free Software Foundation
-
-#ifndef __COMPLEX_H__
-#include <std/complex.h>
-#endif
diff --git a/contrib/libg++/libstdc++/csetjmp b/contrib/libg++/libstdc++/csetjmp
deleted file mode 100644
index b635d738a4fb..000000000000
--- a/contrib/libg++/libstdc++/csetjmp
+++ /dev/null
@@ -1,6 +0,0 @@
-// -*- C++ -*- forwarding header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __CSETJMP__
-#include <std/csetjmp.h>
-#endif
diff --git a/contrib/libg++/libstdc++/csignal b/contrib/libg++/libstdc++/csignal
deleted file mode 100644
index 21ed90cda088..000000000000
--- a/contrib/libg++/libstdc++/csignal
+++ /dev/null
@@ -1,6 +0,0 @@
-// -*- C++ -*- forwarding header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __CSIGNAL__
-#include <std/csignal.h>
-#endif
diff --git a/contrib/libg++/libstdc++/cstdarg b/contrib/libg++/libstdc++/cstdarg
deleted file mode 100644
index c8ca3eabf13d..000000000000
--- a/contrib/libg++/libstdc++/cstdarg
+++ /dev/null
@@ -1,6 +0,0 @@
-// -*- C++ -*- forwarding header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __CSTDARG__
-#include <std/cstdarg.h>
-#endif
diff --git a/contrib/libg++/libstdc++/cstddef b/contrib/libg++/libstdc++/cstddef
deleted file mode 100644
index 18134383bb23..000000000000
--- a/contrib/libg++/libstdc++/cstddef
+++ /dev/null
@@ -1,6 +0,0 @@
-// -*- C++ -*- forwarding header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __CSTDDEF__
-#include <std/cstddef.h>
-#endif
diff --git a/contrib/libg++/libstdc++/cstdio b/contrib/libg++/libstdc++/cstdio
deleted file mode 100644
index ac851787b307..000000000000
--- a/contrib/libg++/libstdc++/cstdio
+++ /dev/null
@@ -1,6 +0,0 @@
-// -*- C++ -*- forwarding header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __CSTDIO__
-#include <std/cstdio.h>
-#endif
diff --git a/contrib/libg++/libstdc++/cstdlib b/contrib/libg++/libstdc++/cstdlib
deleted file mode 100644
index fa4dac415f56..000000000000
--- a/contrib/libg++/libstdc++/cstdlib
+++ /dev/null
@@ -1,6 +0,0 @@
-// -*- C++ -*- forwarding header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __CSTDLIB__
-#include <std/cstdlib.h>
-#endif
diff --git a/contrib/libg++/libstdc++/cstdlibi.cc b/contrib/libg++/libstdc++/cstdlibi.cc
deleted file mode 100644
index bd94aa5dfa38..000000000000
--- a/contrib/libg++/libstdc++/cstdlibi.cc
+++ /dev/null
@@ -1,7 +0,0 @@
-// Implementation file for the -*- C++ -*- standard library header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifdef __GNUG__
-#pragma implementation "std/cstdlib.h"
-#endif
-#include <std/cstdlib.h>
diff --git a/contrib/libg++/libstdc++/cstring b/contrib/libg++/libstdc++/cstring
deleted file mode 100644
index e0d18cfaa5ec..000000000000
--- a/contrib/libg++/libstdc++/cstring
+++ /dev/null
@@ -1,6 +0,0 @@
-// -*- C++ -*- forwarding header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __CSTRING__
-#include <std/cstring.h>
-#endif
diff --git a/contrib/libg++/libstdc++/cstringi.cc b/contrib/libg++/libstdc++/cstringi.cc
deleted file mode 100644
index e981ab73c984..000000000000
--- a/contrib/libg++/libstdc++/cstringi.cc
+++ /dev/null
@@ -1,7 +0,0 @@
-// Implementation file for the -*- C++ -*- null-terminated string header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifdef __GNUG__
-#pragma implementation "std/cstring.h"
-#endif
-#include <std/cstring.h>
diff --git a/contrib/libg++/libstdc++/ctime b/contrib/libg++/libstdc++/ctime
deleted file mode 100644
index 8b68715ac44a..000000000000
--- a/contrib/libg++/libstdc++/ctime
+++ /dev/null
@@ -1,6 +0,0 @@
-// -*- C++ -*- forwarding header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __CTIME__
-#include <std/ctime.h>
-#endif
diff --git a/contrib/libg++/libstdc++/cwchar b/contrib/libg++/libstdc++/cwchar
deleted file mode 100644
index be96cc81d5b4..000000000000
--- a/contrib/libg++/libstdc++/cwchar
+++ /dev/null
@@ -1,6 +0,0 @@
-// -*- C++ -*- forwarding header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __CWCHAR__
-#include <std/cwchar.h>
-#endif
diff --git a/contrib/libg++/libstdc++/cwctype b/contrib/libg++/libstdc++/cwctype
deleted file mode 100644
index 1eaa0ca8e031..000000000000
--- a/contrib/libg++/libstdc++/cwctype
+++ /dev/null
@@ -1,6 +0,0 @@
-// -*- C++ -*- forwarding header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __CWCTYPE__
-#include <std/cwctype.h>
-#endif
diff --git a/contrib/libg++/libstdc++/deque b/contrib/libg++/libstdc++/deque
deleted file mode 100644
index bdc14299a045..000000000000
--- a/contrib/libg++/libstdc++/deque
+++ /dev/null
@@ -1,7 +0,0 @@
-// -*- C++ -*- forwarding header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __DEQUE__
-#define __DEQUE__
-#include <deque.h>
-#endif
diff --git a/contrib/libg++/libstdc++/exception b/contrib/libg++/libstdc++/exception
deleted file mode 100644
index a843d4bbc9c0..000000000000
--- a/contrib/libg++/libstdc++/exception
+++ /dev/null
@@ -1,6 +0,0 @@
-// -*- C++ -*- forwarding header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __EXCEPTION__
-#include <std/exception.h>
-#endif
diff --git a/contrib/libg++/libstdc++/exceptioni.cc b/contrib/libg++/libstdc++/exceptioni.cc
deleted file mode 100644
index 115c6d6b7a41..000000000000
--- a/contrib/libg++/libstdc++/exceptioni.cc
+++ /dev/null
@@ -1,78 +0,0 @@
-// Functions for Exception Support for -*- C++ -*-
-// Copyright (C) 1994, 1995 Free Software Foundation
-
-// This file is part of the GNU ANSI C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-// As a special exception, if you link this library with files
-// compiled with a GNU compiler to produce an executable, this does not cause
-// the resulting executable to be covered by the GNU General Public License.
-// This exception does not however invalidate any other reasons why
-// the executable file might be covered by the GNU General Public License.
-
-#include <exception>
-#include <stdlib.h>
-
-/* terminate (), unexpected (), set_terminate (), set_unexpected () as
- well as the default terminate func and default unexpected func */
-
-#if 0
-extern "C" int printf(const char *, ...);
-#endif
-
-void
-__default_terminate ()
-{
- abort ();
-}
-
-void
-__default_unexpected ()
-{
- __default_terminate ();
-}
-
-static terminate_handler __terminate_func = __default_terminate;
-static unexpected_handler __unexpected_func = __default_unexpected;
-
-terminate_handler
-set_terminate (terminate_handler func)
-{
- terminate_handler old = __terminate_func;
-
- __terminate_func = func;
- return old;
-}
-
-unexpected_handler
-set_unexpected (unexpected_handler func)
-{
- unexpected_handler old = __unexpected_func;
-
- __unexpected_func = func;
- return old;
-}
-
-void
-terminate ()
-{
- __terminate_func ();
-}
-
-void
-unexpected ()
-{
- __unexpected_func ();
-}
diff --git a/contrib/libg++/libstdc++/functional b/contrib/libg++/libstdc++/functional
deleted file mode 100644
index ee8b7f20202e..000000000000
--- a/contrib/libg++/libstdc++/functional
+++ /dev/null
@@ -1,7 +0,0 @@
-// -*- C++ -*- forwarding header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __FUNCTIONAL__
-#define __FUNCTIONAL__
-#include <function.h>
-#endif
diff --git a/contrib/libg++/libstdc++/iterator b/contrib/libg++/libstdc++/iterator
deleted file mode 100644
index a0fa054c5ec6..000000000000
--- a/contrib/libg++/libstdc++/iterator
+++ /dev/null
@@ -1,7 +0,0 @@
-// -*- C++ -*- forwarding header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __ITERATOR__
-#define __ITERATOR__
-#include <iterator.h>
-#endif
diff --git a/contrib/libg++/libstdc++/list b/contrib/libg++/libstdc++/list
deleted file mode 100644
index 475d8443d167..000000000000
--- a/contrib/libg++/libstdc++/list
+++ /dev/null
@@ -1,7 +0,0 @@
-// -*- C++ -*- forwarding header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __LIST__
-#define __LIST__
-#include <list.h>
-#endif
diff --git a/contrib/libg++/libstdc++/map b/contrib/libg++/libstdc++/map
deleted file mode 100644
index 0127b9db250f..000000000000
--- a/contrib/libg++/libstdc++/map
+++ /dev/null
@@ -1,7 +0,0 @@
-// -*- C++ -*- forwarding header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __MAP__
-#define __MAP__
-#include <map.h>
-#endif
diff --git a/contrib/libg++/libstdc++/memory b/contrib/libg++/libstdc++/memory
deleted file mode 100644
index 8328720db6d5..000000000000
--- a/contrib/libg++/libstdc++/memory
+++ /dev/null
@@ -1,7 +0,0 @@
-// -*- C++ -*- forwarding header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __MEMORY__
-#define __MEMORY__
-#include <defalloc.h>
-#endif
diff --git a/contrib/libg++/libstdc++/new b/contrib/libg++/libstdc++/new
deleted file mode 100644
index 47944fcff98d..000000000000
--- a/contrib/libg++/libstdc++/new
+++ /dev/null
@@ -1,6 +0,0 @@
-// -*- C++ -*- forwarding header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __NEW__
-#include <std/new.h>
-#endif
diff --git a/contrib/libg++/libstdc++/new.h b/contrib/libg++/libstdc++/new.h
deleted file mode 100644
index 02bba4509b0f..000000000000
--- a/contrib/libg++/libstdc++/new.h
+++ /dev/null
@@ -1,7 +0,0 @@
-// -*- C++ -*- backward compatiblity header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __NEW_H__
-#define __NEW_H__
-#include <std/new.h>
-#endif
diff --git a/contrib/libg++/libstdc++/newi.cc b/contrib/libg++/libstdc++/newi.cc
deleted file mode 100644
index b4a5b6aeb7e3..000000000000
--- a/contrib/libg++/libstdc++/newi.cc
+++ /dev/null
@@ -1,7 +0,0 @@
-// Implementation file for the -*- C++ -*- dynamic memory management header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifdef __GNUG__
-#pragma implementation "std/new.h"
-#endif
-#include <std/new.h>
diff --git a/contrib/libg++/libstdc++/numeric b/contrib/libg++/libstdc++/numeric
deleted file mode 100644
index dcb88737f171..000000000000
--- a/contrib/libg++/libstdc++/numeric
+++ /dev/null
@@ -1,7 +0,0 @@
-// -*- C++ -*- forwarding header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __NUMERIC__
-#define __NUMERIC__
-#include <algo.h>
-#endif
diff --git a/contrib/libg++/libstdc++/queue b/contrib/libg++/libstdc++/queue
deleted file mode 100644
index e71ce343067c..000000000000
--- a/contrib/libg++/libstdc++/queue
+++ /dev/null
@@ -1,7 +0,0 @@
-// -*- C++ -*- forwarding header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __QUEUE__
-#define __QUEUE__
-#include <stack.h>
-#endif
diff --git a/contrib/libg++/libstdc++/set b/contrib/libg++/libstdc++/set
deleted file mode 100644
index 0353285fe502..000000000000
--- a/contrib/libg++/libstdc++/set
+++ /dev/null
@@ -1,7 +0,0 @@
-// -*- C++ -*- forwarding header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __SET__
-#define __SET__
-#include <set.h>
-#endif
diff --git a/contrib/libg++/libstdc++/sinst.cc b/contrib/libg++/libstdc++/sinst.cc
deleted file mode 100644
index 136a05e532bb..000000000000
--- a/contrib/libg++/libstdc++/sinst.cc
+++ /dev/null
@@ -1,147 +0,0 @@
-// Instantiation file for the -*- C++ -*- string classes.
-// Copyright (C) 1994 Free Software Foundation
-
-// This file is part of the GNU ANSI C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-// As a special exception, if you link this library with files
-// compiled with a GNU compiler to produce an executable, this does not cause
-// the resulting executable to be covered by the GNU General Public License.
-// This exception does not however invalidate any other reasons why
-// the executable file might be covered by the GNU General Public License.
-
-// Written by Jason Merrill based upon the specification by Takanori Adachi
-// in ANSI X3J16/94-0013R2.
-
-#ifdef __GNUG__
-#ifdef TRAITS
-#ifdef C
-#pragma implementation "std/straits.h"
-#endif
-#endif
-#endif
-
-#if 0
-#define _G_NO_EXTERN_TEMPLATES
-#endif
-#include <std/bastring.cc>
-
-#ifdef C
-typedef char c;
-#endif
-#ifdef W
-typedef wchar_t c;
-#endif
-
-#ifdef TRAITS
-template class string_char_traits <c>;
-#endif
-
-#define STRING basic_string <c, string_char_traits <c> >
-typedef class STRING s;
-#define BSREP __bsrep <c, string_char_traits <c> >
-typedef class BSREP r;
-
-#ifdef REP
-template class BSREP;
-r s::nilRep = { 0, 0, 1 };
-#ifdef _G_ALLOC_CONTROL
-bool (*r::excess_slop) (size_t, size_t) = r::default_excess;
-size_t (*r::frob_size) (size_t) = r::default_frob;
-#endif
-#endif
-
-#ifdef MAIN
-template class STRING;
-#endif
-
-#ifdef ADDSS
-template s operator+ (const s&, const s&);
-#endif
-#ifdef ADDPS
-template s operator+ (const c*, const s&);
-#endif
-#ifdef ADDCS
-template s operator+ (c, const s&);
-#endif
-#ifdef ADDSP
-template s operator+ (const s&, const c*);
-#endif
-#ifdef ADDSC
-template s operator+ (const s&, c);
-#endif
-#ifdef EQSS
-template bool operator== (const s&, const s&);
-#endif
-#ifdef EQPS
-template bool operator== (const c*, const s&);
-#endif
-#ifdef EQSP
-template bool operator== (const s&, const c*);
-#endif
-#ifdef NESS
-template bool operator!= (const s&, const s&);
-#endif
-#ifdef NEPS
-template bool operator!= (const c*, const s&);
-#endif
-#ifdef NESP
-template bool operator!= (const s&, const c*);
-#endif
-#ifdef LTSS
-template bool operator< (const s&, const s&);
-#endif
-#ifdef LTPS
-template bool operator< (const c*, const s&);
-#endif
-#ifdef LTSP
-template bool operator< (const s&, const c*);
-#endif
-#ifdef GTSS
-template bool operator> (const s&, const s&);
-#endif
-#ifdef GTPS
-template bool operator> (const c*, const s&);
-#endif
-#ifdef GTSP
-template bool operator> (const s&, const c*);
-#endif
-#ifdef LESS
-template bool operator<= (const s&, const s&);
-#endif
-#ifdef LEPS
-template bool operator<= (const c*, const s&);
-#endif
-#ifdef LESP
-template bool operator<= (const s&, const c*);
-#endif
-#ifdef GESS
-template bool operator>= (const s&, const s&);
-#endif
-#ifdef GEPS
-template bool operator>= (const c*, const s&);
-#endif
-#ifdef GESP
-template bool operator>= (const s&, const c*);
-#endif
-#ifdef EXTRACT
-template istream& operator>> (istream&, s&);
-#endif // EXTRACT
-#ifdef INSERT
-template ostream& operator<< (ostream&, const s&);
-#endif // INSERT
-#ifdef GETLINE
-template istream& getline (istream&, s&);
-#endif
diff --git a/contrib/libg++/libstdc++/stack b/contrib/libg++/libstdc++/stack
deleted file mode 100644
index dfe0c51e1813..000000000000
--- a/contrib/libg++/libstdc++/stack
+++ /dev/null
@@ -1,7 +0,0 @@
-// -*- C++ -*- forwarding header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __STACK__
-#define __STACK__
-#include <stack.h>
-#endif
diff --git a/contrib/libg++/libstdc++/std/bastring.cc b/contrib/libg++/libstdc++/std/bastring.cc
deleted file mode 100644
index 92c69d845b22..000000000000
--- a/contrib/libg++/libstdc++/std/bastring.cc
+++ /dev/null
@@ -1,489 +0,0 @@
-// Member templates for the -*- C++ -*- string classes.
-// Copyright (C) 1994 Free Software Foundation
-
-// This file is part of the GNU ANSI C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-// As a special exception, if you link this library with files
-// compiled with a GNU compiler to produce an executable, this does not cause
-// the resulting executable to be covered by the GNU General Public License.
-// This exception does not however invalidate any other reasons why
-// the executable file might be covered by the GNU General Public License.
-
-// Written by Jason Merrill based upon the specification by Takanori Adachi
-// in ANSI X3J16/94-0013R2.
-
-#include <std/stddef.h>
-#include <std/bastring.h>
-
-extern "C++" {
-template <class charT, class traits>
-inline void * __bsrep <charT, traits>::
-operator new (size_t s, size_t extra)
-{
- return ::operator new (s + extra * sizeof (charT));
-}
-
-template <class charT, class traits>
-inline size_t __bsrep <charT, traits>::
-#if _G_ALLOC_CONTROL
-default_frob (size_t s)
-#else
-frob_size (size_t s)
-#endif
-{
- size_t i = 16;
- while (i < s) i *= 2;
- return i;
-}
-
-template <class charT, class traits>
-inline __bsrep <charT, traits> * __bsrep <charT, traits>::
-create (size_t extra)
-{
- extra = frob_size (extra + 1);
- Rep *p = new (extra) Rep;
- p->res = extra;
- p->ref = 1;
- p->selfish = false;
- return p;
-}
-
-template <class charT, class traits>
-charT * __bsrep <charT, traits>::
-clone ()
-{
- Rep *p = Rep::create (len);
- p->copy (0, data (), len);
- p->len = len;
- return p->data ();
-}
-
-template <class charT, class traits>
-inline bool __bsrep <charT, traits>::
-#ifdef _G_ALLOC_CONTROL
-default_excess (size_t s, size_t r)
-#else
-excess_slop (size_t s, size_t r)
-#endif
-{
- return 2 * (s <= 16 ? 16 : s) < r;
-}
-
-template <class charT, class traits>
-inline bool basic_string <charT, traits>::
-check_realloc (size_t s) const
-{
- s += sizeof (charT);
- return (rep ()->ref > 1
- || s > capacity ()
- || Rep::excess_slop (s, capacity ()));
-}
-
-template <class charT, class traits>
-void basic_string <charT, traits>::
-alloc (size_t size, bool save)
-{
- if (! check_realloc (size))
- return;
-
- Rep *p = Rep::create (size);
-
- if (save)
- {
- p->copy (0, data (), length ());
- p->len = length ();
- }
- else
- p->len = 0;
-
- repup (p);
-}
-
-template <class charT, class traits>
-basic_string <charT, traits>& basic_string <charT, traits>::
-replace (size_t pos1, size_t n1,
- const basic_string& str, size_t pos2, size_t n2)
-{
- const size_t len2 = str.length ();
-
- if (pos1 == 0 && n1 >= length () && pos2 == 0 && n2 >= len2)
- return operator= (str);
-
- OUTOFRANGE (pos2 > len2);
-
- if (n2 > len2 - pos2)
- n2 = len2 - pos2;
-
- return replace (pos1, n1, str.data () + pos2, n2);
-}
-
-template <class charT, class traits>
-inline void __bsrep <charT, traits>::
-copy (size_t pos, const charT *s, size_t n)
-{
- if (n)
- traits::copy (data () + pos, s, n);
-}
-
-template <class charT, class traits>
-inline void __bsrep <charT, traits>::
-move (size_t pos, const charT *s, size_t n)
-{
- if (n)
- traits::move (data () + pos, s, n);
-}
-
-template <class charT, class traits>
-basic_string <charT, traits>& basic_string <charT, traits>::
-replace (size_t pos, size_t n1, const charT* s, size_t n2)
-{
- const size_t len = length ();
- OUTOFRANGE (pos > len);
- if (n1 > len - pos)
- n1 = len - pos;
- LENGTHERROR (len - n1 > max_size () - n2);
- size_t newlen = len - n1 + n2;
-
- if (check_realloc (newlen))
- {
- Rep *p = Rep::create (newlen);
- p->copy (0, data (), pos);
- p->copy (pos + n2, data () + pos + n1, len - (pos + n1));
- p->copy (pos, s, n2);
- repup (p);
- }
- else
- {
- rep ()->move (pos + n2, data () + pos + n1, len - (pos + n1));
- rep ()->copy (pos, s, n2);
- }
- rep ()->len = newlen;
-
- return *this;
-}
-
-template <class charT, class traits>
-inline void __bsrep <charT, traits>::
-set (size_t pos, const charT c, size_t n)
-{
- traits::set (data () + pos, c, n);
-}
-
-template <class charT, class traits>
-basic_string <charT, traits>& basic_string <charT, traits>::
-replace (size_t pos, size_t n1, size_t n2, charT c)
-{
- const size_t len = length ();
- OUTOFRANGE (pos > len);
- if (n1 > len - pos)
- n1 = len - pos;
- LENGTHERROR (len - n1 > max_size () - n2);
- size_t newlen = len - n1 + n2;
-
- if (check_realloc (newlen))
- {
- Rep *p = Rep::create (newlen);
- p->copy (0, data (), pos);
- p->copy (pos + n2, data () + pos + n1, len - (pos + n1));
- p->set (pos, c, n2);
- repup (p);
- }
- else
- {
- rep ()->move (pos + n2, data () + pos + n1, len - (pos + n1));
- rep ()->set (pos, c, n2);
- }
- rep ()->len = newlen;
-
- return *this;
-}
-
-template <class charT, class traits>
-void basic_string <charT, traits>::
-resize (size_t n, charT c)
-{
- LENGTHERROR (n > max_size ());
-
- if (n > length ())
- append (n - length (), c);
- else
- remove (n);
-}
-
-template <class charT, class traits>
-size_t basic_string <charT, traits>::
-copy (charT* s, size_t n, size_t pos)
-{
- OUTOFRANGE (pos > length ());
-
- if (n > length () - pos)
- n = length () - pos;
-
- traits::copy (s, data () + pos, n);
- return n;
-}
-
-template <class charT, class traits>
-size_t basic_string <charT, traits>::
-find (const charT* s, size_t pos, size_t n) const
-{
- size_t xpos = pos;
- for (; xpos + n <= length (); ++xpos)
- if (traits::eq (data () [xpos], *s)
- && traits::compare (data () + xpos, s, n) == 0)
- return xpos;
- return npos;
-}
-
-template <class charT, class traits>
-inline size_t basic_string <charT, traits>::
-_find (const charT* ptr, charT c, size_t xpos, size_t len)
-{
- for (; xpos < len; ++xpos)
- if (traits::eq (ptr [xpos], c))
- return xpos;
- return npos;
-}
-
-template <class charT, class traits>
-size_t basic_string <charT, traits>::
-find (charT c, size_t pos) const
-{
- return _find (data (), c, pos, length ());
-}
-
-template <class charT, class traits>
-size_t basic_string <charT, traits>::
-rfind (const charT* s, size_t pos, size_t n) const
-{
- if (n > length ())
- return npos;
-
- size_t xpos = length () - n;
- if (xpos > pos)
- xpos = pos;
-
- for (++xpos; xpos-- > 0; )
- if (traits::eq (data () [xpos], *s)
- && traits::compare (data () + xpos, s, n) == 0)
- return xpos;
- return npos;
-}
-
-template <class charT, class traits>
-size_t basic_string <charT, traits>::
-rfind (charT c, size_t pos) const
-{
- if (1 > length ())
- return npos;
-
- size_t xpos = length () - 1;
- if (xpos > pos)
- xpos = pos;
-
- for (++xpos; xpos-- > 0; )
- if (traits::eq (data () [xpos], c))
- return xpos;
- return npos;
-}
-
-template <class charT, class traits>
-size_t basic_string <charT, traits>::
-find_first_of (const charT* s, size_t pos, size_t n) const
-{
- size_t xpos = pos;
- for (; xpos < length (); ++xpos)
- if (_find (s, data () [xpos], 0, n) != npos)
- return xpos;
- return npos;
-}
-
-template <class charT, class traits>
-size_t basic_string <charT, traits>::
-find_last_of (const charT* s, size_t pos, size_t n) const
-{
- size_t xpos = length ();
- for (; xpos-- > pos; )
- if (_find (s, data () [xpos], 0, n) != npos)
- return xpos;
- return npos;
-}
-
-template <class charT, class traits>
-size_t basic_string <charT, traits>::
-find_first_not_of (const charT* s, size_t pos, size_t n) const
-{
- size_t xpos = pos;
- for (; xpos < length (); ++xpos)
- if (_find (s, data () [xpos], 0, n) == npos)
- return xpos;
- return npos;
-}
-
-template <class charT, class traits>
-size_t basic_string <charT, traits>::
-find_first_not_of (charT c, size_t pos) const
-{
- size_t xpos = pos;
- for (; xpos < length (); ++xpos)
- if (traits::ne (data () [xpos], c))
- return xpos;
- return npos;
-}
-
-template <class charT, class traits>
-size_t basic_string <charT, traits>::
-find_last_not_of (const charT* s, size_t pos, size_t n) const
-{
- size_t xpos = length ();
- for (; xpos-- > pos; )
- if (_find (s, data () [xpos], 0, n) == npos)
- return xpos;
- return npos;
-}
-
-template <class charT, class traits>
-size_t basic_string <charT, traits>::
-find_last_not_of (charT c, size_t pos) const
-{
- size_t xpos = length ();
- for (; xpos-- > pos; )
- if (traits::ne (data () [xpos], c))
- return xpos;
- return npos;
-}
-
-template <class charT, class traits>
-int basic_string <charT, traits>::
-compare (const basic_string& str, size_t pos, size_t n) const
-{
- OUTOFRANGE (pos > length ());
-
- size_t rlen = length () - pos;
- if (rlen > n)
- rlen = n;
- if (rlen > str.length ())
- rlen = str.length ();
- int r = traits::compare (data () + pos, str.data (), rlen);
- if (r != 0)
- return r;
- if (rlen == n)
- return 0;
- return (length () - pos) - str.length ();
-}
-
-template <class charT, class traits>
-int basic_string <charT, traits>::
-compare (const charT* s, size_t pos, size_t n) const
-{
- OUTOFRANGE (pos > length ());
-
- size_t rlen = length () - pos;
- if (rlen > n)
- rlen = n;
- int r = traits::compare (data () + pos, s, rlen);
- if (r != 0)
- return r;
- return (length () - pos) - n;
-}
-
-#include <iostream.h>
-
-template <class charT, class traits>
-istream &
-operator>> (istream &is, basic_string <charT, traits> &s)
-{
- int w = is.width (0);
- if (is.ipfx0 ())
- {
- register streambuf *sb = is.rdbuf ();
- s.resize (0);
- while (1)
- {
- int ch = sb->sbumpc ();
- if (ch == EOF)
- {
- is.setstate (ios::eofbit);
- break;
- }
- else if (traits::is_del (ch))
- {
- sb->sungetc ();
- break;
- }
- s += ch;
- if (--w == 1)
- break;
- }
- }
-
- is.isfx ();
- if (s.length () == 0)
- is.setstate (ios::failbit);
-
- return is;
-}
-
-template <class charT, class traits>
-ostream &
-operator<< (ostream &o, const basic_string <charT, traits>& s)
-{
- return o.write (s.data (), s.length ());
-}
-
-template <class charT, class traits>
-istream&
-getline (istream &is, basic_string <charT, traits>& s, charT delim)
-{
- if (is.ipfx1 ())
- {
- _IO_size_t count = 0;
- streambuf *sb = is.rdbuf ();
- s.resize (0);
-
- while (1)
- {
- int ch = sb->sbumpc ();
- if (ch == EOF)
- {
- is.setstate (count == 0
- ? (ios::failbit|ios::eofbit)
- : ios::eofbit);
- break;
- }
-
- ++count;
-
- if (ch == delim)
- break;
-
- s += ch;
-
- if (s.length () == s.npos - 1)
- {
- is.setstate (ios::failbit);
- break;
- }
- }
- }
-
- // We need to be friends with istream to do this.
- // is._gcount = count;
- is.isfx ();
-
- return is;
-}
-} // extern "C++"
diff --git a/contrib/libg++/libstdc++/std/bastring.h b/contrib/libg++/libstdc++/std/bastring.h
deleted file mode 100644
index d6174a21f92d..000000000000
--- a/contrib/libg++/libstdc++/std/bastring.h
+++ /dev/null
@@ -1,574 +0,0 @@
-// Main templates for the -*- C++ -*- string classes.
-// Copyright (C) 1994, 1995 Free Software Foundation
-
-// This file is part of the GNU ANSI C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-// As a special exception, if you link this library with files
-// compiled with a GNU compiler to produce an executable, this does not cause
-// the resulting executable to be covered by the GNU General Public License.
-// This exception does not however invalidate any other reasons why
-// the executable file might be covered by the GNU General Public License.
-
-// Written by Jason Merrill based upon the specification by Takanori Adachi
-// in ANSI X3J16/94-0013R2.
-
-#ifndef __BASTRING__
-#define __BASTRING__
-
-#ifdef __GNUG__
-#pragma interface
-#endif
-
-#include <std/stddef.h>
-#include <std/straits.h>
-
-#if _G_USE_EXCEPTIONS
-
-#include <stdexcept>
-#define OUTOFRANGE(cond) \
- do { if (!(cond)) throw out_of_range (#cond); } while (0)
-#define LENGTHERROR(cond) \
- do { if (!(cond)) throw length_error (#cond); } while (0)
-
-#else
-
-#include <cassert>
-#define OUTOFRANGE(cond) assert (!(cond))
-#define LENGTHERROR(cond) assert (!(cond))
-
-#endif
-
-extern "C++" {
-class istream; class ostream;
-
-// Should be a nested class basic_string<charT, traits>::Rep, but nested
-// classes don't work well with templates in g++.
-template <class charT, class traits = string_char_traits<charT> >
-struct __bsrep {
- typedef __bsrep Rep;
-
- size_t len, res, ref;
- bool selfish;
-
- charT* data () { return reinterpret_cast<charT *>(this + 1); }
- charT& operator[] (size_t s) { return data () [s]; }
- charT* grab () { if (selfish) return clone (); ++ref; return data (); }
- void release () { if (--ref == 0) delete this; }
-
- inline static void * operator new (size_t, size_t);
- inline static Rep* create (size_t);
- charT* clone ();
-
- inline void copy (size_t, const charT *, size_t);
- inline void move (size_t, const charT *, size_t);
- inline void set (size_t, const charT, size_t);
-
-#if _G_ALLOC_CONTROL
- // These function pointers allow you to modify the allocation policy used
- // by the string classes. By default they expand by powers of two, but
- // this may be excessive for space-critical applications.
-
- // Returns true if ALLOCATED is too much larger than LENGTH
- static bool (*excess_slop) (size_t length, size_t allocated);
- inline static bool default_excess (size_t, size_t);
-
- // Returns a good amount of space to allocate for a string of length LENGTH
- static size_t (*frob_size) (size_t length);
- inline static size_t default_frob (size_t);
-#else
- inline static bool excess_slop (size_t, size_t);
- inline static size_t frob_size (size_t);
-#endif
-
-private:
- Rep &operator= (const Rep &);
-};
-
-// #include <iterator.h>
-
-template <class charT, class traits = string_char_traits<charT> >
-class basic_string
-{
-private:
- typedef __bsrep<charT, traits> Rep;
-
-public:
-// types:
- typedef traits traits_type;
- typedef charT value_type;
- typedef size_t size_type;
- typedef ptrdiff_t difference_type;
- typedef charT& reference;
- typedef const charT& const_reference;
- typedef charT* pointer;
- typedef const charT* const_pointer;
- typedef pointer iterator;
- typedef const_pointer const_iterator;
-#if 0
- typedef reverse_iterator<iterator, value_type,
- reference, difference_type> reverse_iterator;
- typedef reverse_iterator<const_iterator, value_type, const_reference,
- difference_type> const_reverse_iterator;
-#endif
- static const size_type npos = static_cast<size_type>(-1);
-
-private:
- Rep *rep () const { return reinterpret_cast<Rep *>(dat) - 1; }
- void repup (Rep *p) { rep ()->release (); dat = p->data (); }
-
-public:
- const charT* data () const
- { return rep ()->data(); }
- size_type length () const
- { return rep ()->len; }
- size_type size () const
- { return rep ()->len; }
- size_type capacity () const
- { return rep ()->res; }
- size_type max_size () const
- { return (npos - 1)/sizeof (charT); } // XXX
- bool empty () const
- { return size () == 0; }
-
-// _lib.string.cons_ construct/copy/destroy:
- basic_string& operator= (const basic_string& str)
- {
- if (&str != this) { rep ()->release (); dat = str.rep ()->grab (); }
- return *this;
- }
-
- explicit basic_string (): dat (nilRep.grab ()) { }
- basic_string (const basic_string& str): dat (str.rep ()->grab ()) { }
- basic_string (const basic_string& str, size_type pos, size_type n = npos)
- : dat (nilRep.grab ()) { assign (str, pos, n); }
- basic_string (const charT* s, size_type n)
- : dat (nilRep.grab ()) { assign (s, n); }
- basic_string (const charT* s)
- : dat (nilRep.grab ()) { assign (s); }
- basic_string (size_type n, charT c)
- : dat (nilRep.grab ()) { assign (n, c); }
-#if 0
- template<class InputIterator>
- basic_string(InputIterator begin, InputIterator end,
- Allocator& = Allocator());
-#endif
-
- ~basic_string ()
- { rep ()->release (); }
-
- void swap (basic_string &s) { charT *d = dat; dat = s.dat; s.dat = d; }
-
- basic_string& append (const basic_string& str, size_type pos = 0,
- size_type n = npos)
- { return replace (length (), 0, str, pos, n); }
- basic_string& append (const charT* s, size_type n)
- { return replace (length (), 0, s, n); }
- basic_string& append (const charT* s)
- { return append (s, traits::length (s)); }
- basic_string& append (size_type n, charT c)
- { return replace (length (), 0, n, c); }
-#if 0
- template<class InputIterator>
- basic_string& append(InputIterator first, InputIterator last);
-#endif
-
- basic_string& assign (const basic_string& str, size_type pos = 0,
- size_type n = npos)
- { return replace (0, npos, str, pos, n); }
- basic_string& assign (const charT* s, size_type n)
- { return replace (0, npos, s, n); }
- basic_string& assign (const charT* s)
- { return assign (s, traits::length (s)); }
- basic_string& assign (size_type n, charT c)
- { return replace (0, npos, n, c); }
-#if 0
- template<class InputIterator>
- basic_string& assign(InputIterator first, InputIterator last);
-#endif
-
- basic_string& operator= (const charT* s)
- { return assign (s); }
- basic_string& operator= (charT c)
- { return assign (1, c); }
-
- basic_string& operator+= (const basic_string& rhs)
- { return append (rhs); }
- basic_string& operator+= (const charT* s)
- { return append (s); }
- basic_string& operator+= (charT c)
- { return append (1, c); }
-
- basic_string& insert (size_type pos1, const basic_string& str,
- size_type pos2 = 0, size_type n = npos)
- { return replace (pos1, 0, str, pos2, n); }
- basic_string& insert (size_type pos, const charT* s, size_type n)
- { return replace (pos, 0, s, n); }
- basic_string& insert (size_type pos, const charT* s)
- { return insert (pos, s, traits::length (s)); }
- basic_string& insert (size_type pos, size_type n, charT c)
- { return replace (pos, 0, n, c); }
- iterator insert(iterator p, charT c)
- { size_type pos = p - begin (); insert (pos, 1, c); return pos +begin (); }
- iterator insert(iterator p, size_type n, charT c)
- { size_type pos = p - begin (); insert (pos, n, c); return pos +begin (); }
-#if 0
- template<class InputIterator>
- void insert(iterator p, InputIterator first, InputIterator last);
-#endif
-
- basic_string& remove (size_type pos = 0, size_type n = npos)
- { return replace (pos, n, (size_type)0, (charT)0); }
- basic_string& remove (iterator pos)
- { return replace (pos - begin (), 1, (size_type)0, (charT)0); }
- basic_string& remove (iterator first, iterator last)
- { return replace (first - begin (), last - first, (size_type)0, (charT)0);}
-
- basic_string& replace (size_type pos1, size_type n1, const basic_string& str,
- size_type pos2 = 0, size_type n2 = npos);
- basic_string& replace (size_type pos, size_type n1, const charT* s,
- size_type n2);
- basic_string& replace (size_type pos, size_type n1, const charT* s)
- { return replace (pos, n1, s, traits::length (s)); }
- basic_string& replace (size_type pos, size_type n1, size_type n2, charT c);
- basic_string& replace (size_type pos, size_type n, charT c)
- { return replace (pos, n, 1, c); }
- basic_string& replace (iterator i1, iterator i2, const basic_string& str)
- { return replace (i1 - begin (), i2 - i1, str); }
- basic_string& replace (iterator i1, iterator i2, const charT* s, size_type n)
- { return replace (i1 - begin (), i2 - i1, s, n); }
- basic_string& replace (iterator i1, iterator i2, const charT* s)
- { return replace (i1 - begin (), i2 - i1, s); }
- basic_string& replace (iterator i1, iterator i2, size_type n, charT c)
- { return replace (i1 - begin (), i2 - i1, n, c); }
-#if 0
- template<class InputIterator>
- basic_string& replace(iterator i1, iterator i2,
- InputIterator j1, InputIterator j2);
-#endif
-
-private:
- static charT eos () { return traits::eos (); }
- void unique () { if (rep ()->ref > 1) alloc (capacity (), true); }
- void selfish () { unique (); rep ()->selfish = true; }
-
-public:
- charT operator[] (size_type pos) const
- {
- if (pos == length ())
- return eos ();
- return data ()[pos];
- }
-
- reference operator[] (size_type pos)
- { unique (); return (*rep ())[pos]; }
-
- reference at (size_type pos)
- {
- OUTOFRANGE (pos >= length ());
- return (*this)[pos];
- }
- const_reference at (size_type pos) const
- {
- OUTOFRANGE (pos >= length ());
- return data ()[pos];
- }
-
-private:
- void terminate () const
- { traits::assign ((*rep ())[length ()], eos ()); }
-
-public:
- const charT* c_str () const
- { terminate (); return data (); }
- void resize (size_type n, charT c);
- void resize (size_type n)
- { resize (n, eos ()); }
- void reserve (size_type) { }
-
- size_type copy (charT* s, size_type n, size_type pos = 0);
-
- size_type find (const basic_string& str, size_type pos = 0) const
- { return find (str.data(), pos, str.length()); }
- size_type find (const charT* s, size_type pos, size_type n) const;
- size_type find (const charT* s, size_type pos = 0) const
- { return find (s, pos, traits::length (s)); }
- size_type find (charT c, size_type pos = 0) const;
-
- size_type rfind (const basic_string& str, size_type pos = npos) const
- { return rfind (str.data(), pos, str.length()); }
- size_type rfind (const charT* s, size_type pos, size_type n) const;
- size_type rfind (const charT* s, size_type pos = npos) const
- { return rfind (s, pos, traits::length (s)); }
- size_type rfind (charT c, size_type pos = npos) const;
-
- size_type find_first_of (const basic_string& str, size_type pos = 0) const
- { return find_first_of (str.data(), pos, str.length()); }
- size_type find_first_of (const charT* s, size_type pos, size_type n) const;
- size_type find_first_of (const charT* s, size_type pos = 0) const
- { return find_first_of (s, pos, traits::length (s)); }
- size_type find_first_of (charT c, size_type pos = 0) const
- { return find (c, pos); }
-
- size_type find_last_of (const basic_string& str, size_type pos = npos) const
- { return find_last_of (str.data(), pos, str.length()); }
- size_type find_last_of (const charT* s, size_type pos, size_type n) const;
- size_type find_last_of (const charT* s, size_type pos = npos) const
- { return find_last_of (s, pos, traits::length (s)); }
- size_type find_last_of (charT c, size_type pos = npos) const
- { return rfind (c, pos); }
-
- size_type find_first_not_of (const basic_string& str, size_type pos = 0) const
- { return find_first_not_of (str.data(), pos, str.length()); }
- size_type find_first_not_of (const charT* s, size_type pos, size_type n) const;
- size_type find_first_not_of (const charT* s, size_type pos = 0) const
- { return find_first_not_of (s, pos, traits::length (s)); }
- size_type find_first_not_of (charT c, size_type pos = 0) const;
-
- size_type find_last_not_of (const basic_string& str, size_type pos = npos) const
- { return find_last_not_of (str.data(), pos, str.length()); }
- size_type find_last_not_of (const charT* s, size_type pos, size_type n) const;
- size_type find_last_not_of (const charT* s, size_type pos = npos) const
- { return find_last_not_of (s, pos, traits::length (s)); }
- size_type find_last_not_of (charT c, size_type pos = npos) const;
-
- basic_string substr (size_type pos = 0, size_type n = npos) const
- { return basic_string (*this, pos, n); }
-
- int compare (const basic_string& str, size_type pos = 0, size_type n = npos) const;
- // There is no 'strncmp' equivalent for charT pointers.
- int compare (const charT* s, size_type pos, size_type n) const;
- int compare (const charT* s, size_type pos = 0) const
- { return compare (s, pos, traits::length (s)); }
-
- iterator begin () { selfish (); return &(*this)[0]; }
- iterator end () { selfish (); return &(*this)[length ()]; }
- const_iterator begin () const { return &(*rep ())[0]; }
- const_iterator end () const { return &(*rep ())[length ()]; }
-
-#if 0
- reverse_iterator rbegin() { return reverse_iterator (end ()); }
- const_reverse_iterator rbegin() const
- { return const_reverse_iterator (end ()); }
- reverse_iterator rend() { return reverse_iterator (begin ()); }
- const_reverse_iterator rend() const
- { return const reverse_iterator (begin ()); }
-#endif
-
-private:
- void alloc (size_type size, bool save);
- static size_type _find (const charT* ptr, charT c, size_type xpos, size_type len);
- inline bool check_realloc (size_type s) const;
-
- static Rep nilRep;
- charT *dat;
-};
-
-template <class charT, class traits>
-inline basic_string <charT, traits>
-operator+ (const basic_string <charT, traits>& lhs,
- const basic_string <charT, traits>& rhs)
-{
- basic_string <charT, traits> str (lhs);
- str.append (rhs);
- return str;
-}
-
-template <class charT, class traits>
-inline basic_string <charT, traits>
-operator+ (const charT* lhs, const basic_string <charT, traits>& rhs)
-{
- basic_string <charT, traits> str (lhs);
- str.append (rhs);
- return str;
-}
-
-template <class charT, class traits>
-inline basic_string <charT, traits>
-operator+ (charT lhs, const basic_string <charT, traits>& rhs)
-{
- basic_string <charT, traits> str (1, lhs);
- str.append (rhs);
- return str;
-}
-
-template <class charT, class traits>
-inline basic_string <charT, traits>
-operator+ (const basic_string <charT, traits>& lhs, const charT* rhs)
-{
- basic_string <charT, traits> str (lhs);
- str.append (rhs);
- return str;
-}
-
-template <class charT, class traits>
-inline basic_string <charT, traits>
-operator+ (const basic_string <charT, traits>& lhs, charT rhs)
-{
- basic_string <charT, traits> str (lhs);
- str.append (1, rhs);
- return str;
-}
-
-template <class charT, class traits>
-inline bool
-operator== (const basic_string <charT, traits>& lhs,
- const basic_string <charT, traits>& rhs)
-{
- return (lhs.compare (rhs) == 0);
-}
-
-template <class charT, class traits>
-inline bool
-operator== (const charT* lhs, const basic_string <charT, traits>& rhs)
-{
- return (rhs.compare (lhs) == 0);
-}
-
-template <class charT, class traits>
-inline bool
-operator== (const basic_string <charT, traits>& lhs, const charT* rhs)
-{
- return (lhs.compare (rhs) == 0);
-}
-
-template <class charT, class traits>
-inline bool
-operator!= (const charT* lhs, const basic_string <charT, traits>& rhs)
-{
- return (rhs.compare (lhs) != 0);
-}
-
-template <class charT, class traits>
-inline bool
-operator!= (const basic_string <charT, traits>& lhs, const charT* rhs)
-{
- return (lhs.compare (rhs) != 0);
-}
-
-template <class charT, class traits>
-inline bool
-operator< (const basic_string <charT, traits>& lhs,
- const basic_string <charT, traits>& rhs)
-{
- return (lhs.compare (rhs) < 0);
-}
-
-template <class charT, class traits>
-inline bool
-operator< (const charT* lhs, const basic_string <charT, traits>& rhs)
-{
- return (rhs.compare (lhs) > 0);
-}
-
-template <class charT, class traits>
-inline bool
-operator< (const basic_string <charT, traits>& lhs, const charT* rhs)
-{
- return (lhs.compare (rhs) < 0);
-}
-
-template <class charT, class traits>
-inline bool
-operator> (const charT* lhs, const basic_string <charT, traits>& rhs)
-{
- return (rhs.compare (lhs) < 0);
-}
-
-template <class charT, class traits>
-inline bool
-operator> (const basic_string <charT, traits>& lhs, const charT* rhs)
-{
- return (lhs.compare (rhs) > 0);
-}
-
-template <class charT, class traits>
-inline bool
-operator<= (const charT* lhs, const basic_string <charT, traits>& rhs)
-{
- return (rhs.compare (lhs) >= 0);
-}
-
-template <class charT, class traits>
-inline bool
-operator<= (const basic_string <charT, traits>& lhs, const charT* rhs)
-{
- return (lhs.compare (rhs) <= 0);
-}
-
-template <class charT, class traits>
-inline bool
-operator>= (const charT* lhs, const basic_string <charT, traits>& rhs)
-{
- return (rhs.compare (lhs) <= 0);
-}
-
-template <class charT, class traits>
-inline bool
-operator>= (const basic_string <charT, traits>& lhs, const charT* rhs)
-{
- return (lhs.compare (rhs) >= 0);
-}
-
-// Kludge this until g++ supports the new template overloading semantics.
-#if !defined(FUNCTION_H)
-template <class charT, class traits>
-inline bool
-operator!= (const basic_string <charT, traits>& lhs,
- const basic_string <charT, traits>& rhs)
-{
- return (lhs.compare (rhs) != 0);
-}
-
-template <class charT, class traits>
-inline bool
-operator> (const basic_string <charT, traits>& lhs,
- const basic_string <charT, traits>& rhs)
-{
- return (lhs.compare (rhs) > 0);
-}
-
-template <class charT, class traits>
-inline bool
-operator<= (const basic_string <charT, traits>& lhs,
- const basic_string <charT, traits>& rhs)
-{
- return (lhs.compare (rhs) <= 0);
-}
-
-template <class charT, class traits>
-inline bool
-operator>= (const basic_string <charT, traits>& lhs,
- const basic_string <charT, traits>& rhs)
-{
- return (lhs.compare (rhs) >= 0);
-}
-#endif
-
-class istream; class ostream;
-template <class charT, class traits> istream&
-operator>> (istream&, basic_string <charT, traits>&);
-template <class charT, class traits> ostream&
-operator<< (ostream&, const basic_string <charT, traits>&);
-template <class charT, class traits> istream&
-getline (istream&, basic_string <charT, traits>&, charT delim = '\n');
-
-} // extern "C++"
-
-#if !defined (_G_NO_EXTERN_TEMPLATES)
-#include <std/sinst.h>
-#endif
-
-#endif
diff --git a/contrib/libg++/libstdc++/std/cassert.h b/contrib/libg++/libstdc++/std/cassert.h
deleted file mode 100644
index 83f9f4042f3b..000000000000
--- a/contrib/libg++/libstdc++/std/cassert.h
+++ /dev/null
@@ -1,7 +0,0 @@
-// The -*- C++ -*- assertions header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __ASSERT__
-#define __ASSERT__
-#include <assert.h>
-#endif
diff --git a/contrib/libg++/libstdc++/std/cctype.h b/contrib/libg++/libstdc++/std/cctype.h
deleted file mode 100644
index e2765aed50a6..000000000000
--- a/contrib/libg++/libstdc++/std/cctype.h
+++ /dev/null
@@ -1,7 +0,0 @@
-// The -*- C++ -*- character type header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __CCTYPE__
-#define __CCTYPE__
-#include <ctype.h>
-#endif
diff --git a/contrib/libg++/libstdc++/std/cerrno.h b/contrib/libg++/libstdc++/std/cerrno.h
deleted file mode 100644
index ce493469597e..000000000000
--- a/contrib/libg++/libstdc++/std/cerrno.h
+++ /dev/null
@@ -1,7 +0,0 @@
-// The -*- C++ -*- error number header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __CERRNO__
-#define __CERRNO__
-#include <errno.h>
-#endif
diff --git a/contrib/libg++/libstdc++/std/cfloat.h b/contrib/libg++/libstdc++/std/cfloat.h
deleted file mode 100644
index 05a6338740e7..000000000000
--- a/contrib/libg++/libstdc++/std/cfloat.h
+++ /dev/null
@@ -1,7 +0,0 @@
-// The -*- C++ -*- floating point header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __CFLOAT__
-#define __CFLOAT__
-#include <float.h>
-#endif
diff --git a/contrib/libg++/libstdc++/std/cinst.h b/contrib/libg++/libstdc++/std/cinst.h
deleted file mode 100644
index e41a2bad1460..000000000000
--- a/contrib/libg++/libstdc++/std/cinst.h
+++ /dev/null
@@ -1,112 +0,0 @@
-// Forward declarations of -*- C++ -*- complex number instantiations.
-// Copyright (C) 1994 Free Software Foundation
-
-// This file is part of the GNU ANSI C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-// As a special exception, if you link this library with files
-// compiled with a GNU compiler to produce an executable, this does not cause
-// the resulting executable to be covered by the GNU General Public License.
-// This exception does not however invalidate any other reasons why
-// the executable file might be covered by the GNU General Public License.
-
-// Written by Jason Merrill based upon the specification in the 27 May 1994
-// C++ working paper, ANSI document X3J16/94-0098.
-
-#ifndef __CINST__
-#define __CINST__
-
-#ifndef _G_NO_EXTERN_TEMPLATES
-extern "C++" {
-extern template class complex<float>;
-extern template class complex<double>;
-extern template class complex<long double>;
-
-#define __B(type) bool
-#define __C(type) complex<type>
-#define __F(type) type
-#define __I(type) int
-#define __IS(type) istream&
-#define __OS(type) ostream&
-#define __CR(type) complex<type>&
-#define __CCR(type) const complex<type>&
-
-#define __D2(name,type,ret,arg1,arg2) ret(type) name (arg1(type), arg2(type));
-
-#define __S1(name,type,ret,arg1) \
- extern template ret(type) name (arg1(type));
-#define __S2(name,type,ret,arg1,arg2) \
- extern template __D2 (name,type,ret,arg1,arg2)
-
-#define __DO1(name,ret,arg1) \
- __S1(name,float,ret,arg1) \
- __S1(name,double,ret,arg1) \
- __S1(name,long double,ret,arg1)
-#define __DO2(name,ret,arg1,arg2) \
- __S2(name,float,ret,arg1,arg2) \
- __S2(name,double,ret,arg1,arg2) \
- __S2(name,long double,ret,arg1,arg2)
-
-#define __DOCCC(name) __DO2(name,__C,__CCR,__CCR)
-#define __DOCCF(name) __DO2(name,__C,__CCR,__F)
-#define __DOCFC(name) __DO2(name,__C,__F,__CCR)
-#define __DOCFF(name) __DO2(name,__C,__F,__F)
-#define __DOBCC(name) __DO2(name,__B,__CCR,__CCR)
-#define __DOBCF(name) __DO2(name,__B,__CCR,__F)
-#define __DOBFC(name) __DO2(name,__B,__F,__CCR)
-#define __DOFC(name) __DO1(name,__F,__CCR)
-#define __DOCC(name) __DO1(name,__C,__CCR)
-
-__DO2(operator+,__C,__CCR,__CCR)
-__DO2(operator+,__C,__CCR,__F)
-__DO2(operator+,__C,__F,__CCR)
-__DO2(operator-,__C,__CCR,__CCR)
-__DO2(operator-,__C,__CCR,__F)
-__DO2(operator-,__C,__F,__CCR)
-__DO2(operator*,__C,__CCR,__CCR)
-__DO2(operator*,__C,__CCR,__F)
-__DO2(operator*,__C,__F,__CCR)
-__DO2(operator/,__C,__CCR,__F)
-__DO1(operator+,__C,__CCR)
-__DO1(operator-,__C,__CCR)
-__DO2(operator==,__B,__CCR,__CCR)
-__DO2(operator==,__B,__CCR,__F)
-__DO2(operator==,__B,__F,__CCR)
-__DO2(operator!=,__B,__CCR,__CCR)
-__DO2(operator!=,__B,__CCR,__F)
-__DO2(operator!=,__B,__F,__CCR)
-__DO1(abs,__F,__CCR)
-__DO1(arg,__F,__CCR)
-__DO2(polar,__C,__F,__F)
-__DO1(conj,__C,__CCR)
-__DO1(norm,__F,__CCR)
-
-#undef __DO1
-#undef __DO2
-#undef __S1
-#undef __S2
-#undef __D2
-#undef __B
-#undef __C
-#undef __F
-#undef __I
-#undef __IS
-#undef __OS
-#undef __CR
-#undef __CCR
-} // extern "C++"
-#endif
-
-#endif
diff --git a/contrib/libg++/libstdc++/std/ciso646.h b/contrib/libg++/libstdc++/std/ciso646.h
deleted file mode 100644
index 974d15b57420..000000000000
--- a/contrib/libg++/libstdc++/std/ciso646.h
+++ /dev/null
@@ -1,7 +0,0 @@
-// The -*- C++ -*- ISO 646 header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __CISO646__
-#define __CISO646__
-#include <iso646.h>
-#endif
diff --git a/contrib/libg++/libstdc++/std/climits.h b/contrib/libg++/libstdc++/std/climits.h
deleted file mode 100644
index 45e3d62b492f..000000000000
--- a/contrib/libg++/libstdc++/std/climits.h
+++ /dev/null
@@ -1,7 +0,0 @@
-// The -*- C++ -*- integral type limits header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __CLIMITS__
-#define __CLIMITS__
-#include <limits.h>
-#endif
diff --git a/contrib/libg++/libstdc++/std/clocale.h b/contrib/libg++/libstdc++/std/clocale.h
deleted file mode 100644
index b67cf31c9d2e..000000000000
--- a/contrib/libg++/libstdc++/std/clocale.h
+++ /dev/null
@@ -1,7 +0,0 @@
-// The -*- C++ -*- locale support header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __CLOCALE__
-#define __CLOCALE__
-#include <locale.h>
-#endif
diff --git a/contrib/libg++/libstdc++/std/cmath.h b/contrib/libg++/libstdc++/std/cmath.h
deleted file mode 100644
index 8c6628ed83c9..000000000000
--- a/contrib/libg++/libstdc++/std/cmath.h
+++ /dev/null
@@ -1,76 +0,0 @@
-// The -*- C++ -*- math functions header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __CMATH__
-#define __CMATH__
-#include <_G_config.h>
-#include <math.h>
-
-#ifdef __GNUG__
-#pragma interface "std/cmath.h"
-#endif
-
-extern "C++" {
-#if 0
-float acos (float);
-float asin (float);
-float atan (float);
-float atan2(float, float);
-float ceil (float);
-float cos (float);
-float cosh (float);
-float exp (float);
-float fabs (float);
-float floor(float);
-float fmod (float, float);
-float frexp(float, int*);
-float modf (float, float*);
-float ldexp(float, int);
-float log (float);
-float log10(float);
-float pow (float, float);
-float pow (float, int);
-float sin (float);
-float sinh (float);
-float sqrt (float);
-float tan (float);
-float tanh (float);
-#endif
-
-inline float abs (float x) { return fabs (x); }
-#if ! _G_MATH_H_INLINES /* hpux and SCO define this in math.h */
-inline double abs (double x) { return fabs (x); }
-#endif
-
-#if 0
-double pow(double, int);
-
-long double acos (long double);
-long double asin (long double);
-long double atan (long double);
-long double atan2(long double, long double);
-long double ceil (long double);
-long double cos (long double);
-long double cosh (long double);
-long double exp (long double);
-long double fabs (long double);
-long double floor(long double);
-long double frexp(long double, int*);
-long double fmod (long double, long double);
-long double frexp(long double, int*);
-long double log (long double);
-long double log10(long double);
-long double modf (long double, long double*);
-long double pow (long double, long double);
-long double pow (long double, int);
-long double sin (long double);
-long double sinh (long double);
-long double sqrt (long double);
-long double tan (long double);
-long double tanh (long double);
-#endif
-inline long double abs (long double x) { return fabs (x); }
-
-} // extern "C++"
-
-#endif
diff --git a/contrib/libg++/libstdc++/std/complex.h b/contrib/libg++/libstdc++/std/complex.h
deleted file mode 100644
index bfdd352b4623..000000000000
--- a/contrib/libg++/libstdc++/std/complex.h
+++ /dev/null
@@ -1,18 +0,0 @@
-// Main header for the -*- C++ -*- complex number classes.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __COMPLEX__
-#define __COMPLEX__
-
-#include <std/complext.h>
-
-extern "C++" {
-#define __STD_COMPLEX
-
-// ANSI complex types
-typedef complex<float> float_complex;
-typedef complex<double> double_complex;
-typedef complex<long double> long_double_complex;
-}
-
-#endif
diff --git a/contrib/libg++/libstdc++/std/complext.cc b/contrib/libg++/libstdc++/std/complext.cc
deleted file mode 100644
index 0b63125b2d20..000000000000
--- a/contrib/libg++/libstdc++/std/complext.cc
+++ /dev/null
@@ -1,273 +0,0 @@
-// Member templates for the -*- C++ -*- complex number classes.
-// Copyright (C) 1994 Free Software Foundation
-
-// This file is part of the GNU ANSI C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-// As a special exception, if you link this library with files
-// compiled with a GNU compiler to produce an executable, this does not cause
-// the resulting executable to be covered by the GNU General Public License.
-// This exception does not however invalidate any other reasons why
-// the executable file might be covered by the GNU General Public License.
-
-// Written by Jason Merrill based upon the specification in the 27 May 1994
-// C++ working paper, ANSI document X3J16/94-0098.
-
-#include <std/complex.h>
-
-extern "C++" {
-template <class FLOAT> complex<FLOAT>
-cos (const complex<FLOAT>& x)
-{
- return complex<FLOAT> (cos (real (x)) * cosh (imag (x)),
- - sin (real (x)) * sinh (imag (x)));
-}
-
-template <class FLOAT> complex<FLOAT>
-cosh (const complex<FLOAT>& x)
-{
- return complex<FLOAT> (cosh (real (x)) * cos (imag (x)),
- sinh (real (x)) * sin (imag (x)));
-}
-
-template <class FLOAT> complex<FLOAT>
-exp (const complex<FLOAT>& x)
-{
- return polar (FLOAT (exp (real (x))), imag (x));
-}
-
-template <class FLOAT> complex<FLOAT>
-log (const complex<FLOAT>& x)
-{
- return complex<FLOAT> (log (abs (x)), arg (x));
-}
-
-template <class FLOAT> complex<FLOAT>
-pow (const complex<FLOAT>& x, const complex<FLOAT>& y)
-{
- FLOAT logr = log (abs (x));
- FLOAT t = arg (x);
-
- return polar (FLOAT (exp (logr * real (y) - imag (y) * t)),
- FLOAT (imag (y) * logr + real (y) * t));
-}
-
-template <class FLOAT> complex<FLOAT>
-pow (const complex<FLOAT>& x, FLOAT y)
-{
- return exp (FLOAT (y) * log (x));
-}
-
-template <class FLOAT> complex<FLOAT>
-pow (FLOAT x, const complex<FLOAT>& y)
-{
- return exp (y * FLOAT (log (x)));
-}
-
-template <class FLOAT> complex<FLOAT>
-sin (const complex<FLOAT>& x)
-{
- return complex<FLOAT> (sin (real (x)) * cosh (imag (x)),
- cos (real (x)) * sinh (imag (x)));
-}
-
-template <class FLOAT> complex<FLOAT>
-sinh (const complex<FLOAT>& x)
-{
- return complex<FLOAT> (sinh (real (x)) * cos (imag (x)),
- cosh (real (x)) * sin (imag (x)));
-}
-
-#include <iostream.h>
-
-template <class FLOAT> istream&
-operator >> (istream& is, complex<FLOAT>& x)
-{
- FLOAT re, im = 0;
- char ch = 0;
-
- if (is.ipfx0 ())
- {
- if (is.peek () == '(')
- is >> ch;
- is >> re;
- if (ch == '(')
- {
- is >> ch;
- if (ch == ',')
- is >> im >> ch;
- }
- }
- is.isfx ();
-
- if (ch != 0 && ch != ')')
- is.setstate (ios::failbit);
- else if (is.good ())
- x = complex<FLOAT> (re, im);
-
- return is;
-}
-
-template <class FLOAT> ostream&
-operator << (ostream& os, const complex<FLOAT>& x)
-{
- return os << '(' << real (x) << ',' << imag (x) << ')';
-}
-
-// The code below is adapted from f2c's libF77, and is subject to this
-// copyright:
-
-/****************************************************************
-Copyright 1990, 1991, 1992, 1993 by AT&T Bell Laboratories and Bellcore.
-
-Permission to use, copy, modify, and distribute this software
-and its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the names of AT&T Bell Laboratories or
-Bellcore or any of their entities not be used in advertising or
-publicity pertaining to distribution of the software without
-specific, written prior permission.
-
-AT&T and Bellcore disclaim all warranties with regard to this
-software, including all implied warranties of merchantability
-and fitness. In no event shall AT&T or Bellcore be liable for
-any special, indirect or consequential damages or any damages
-whatsoever resulting from loss of use, data or profits, whether
-in an action of contract, negligence or other tortious action,
-arising out of or in connection with the use or performance of
-this software.
-****************************************************************/
-
-template <class FLOAT> complex<FLOAT>& complex<FLOAT>::
-operator /= (const complex& y)
-{
- FLOAT ar = abs (y.re);
- FLOAT ai = abs (y.im);
- FLOAT nr, ni;
- FLOAT t, d;
- if (ar <= ai)
- {
- t = y.re / y.im;
- d = y.im * (1 + t*t);
- nr = (re * t + im) / d;
- ni = (im * t - re) / d;
- }
- else
- {
- t = y.im / y.re;
- d = y.re * (1 + t*t);
- nr = (re + im * t) / d;
- ni = (im - re * t) / d;
- }
- re = nr;
- im = ni;
- return *this;
-}
-
-template <class FLOAT> complex<FLOAT>
-operator / (const complex<FLOAT>& x, const complex<FLOAT>& y)
-{
- FLOAT ar = abs (real (y));
- FLOAT ai = abs (imag (y));
- FLOAT nr, ni;
- FLOAT t, d;
- if (ar <= ai)
- {
- t = real (y) / imag (y);
- d = imag (y) * (1 + t*t);
- nr = (real (x) * t + imag (x)) / d;
- ni = (imag (x) * t - real (x)) / d;
- }
- else
- {
- t = imag (y) / real (y);
- d = real (y) * (1 + t*t);
- nr = (real (x) + imag (x) * t) / d;
- ni = (imag (x) - real (x) * t) / d;
- }
- return complex<FLOAT> (nr, ni);
-}
-
-template <class FLOAT> complex<FLOAT>
-operator / (FLOAT x, const complex<FLOAT>& y)
-{
- FLOAT ar = abs (real (y));
- FLOAT ai = abs (imag (y));
- FLOAT nr, ni;
- FLOAT t, d;
- if (ar <= ai)
- {
- t = real (y) / imag (y);
- d = imag (y) * (1 + t*t);
- nr = x * t / d;
- ni = -x / d;
- }
- else
- {
- t = imag (y) / real (y);
- d = real (y) * (1 + t*t);
- nr = x / d;
- ni = -x * t / d;
- }
- return complex<FLOAT> (nr, ni);
-}
-
-template <class FLOAT> complex<FLOAT>
-pow (const complex<FLOAT>& xin, int y)
-{
- if (y == 0)
- return complex<FLOAT> (1.0);
- complex<FLOAT> r (1.0);
- complex<FLOAT> x (xin);
- if (y < 0)
- {
- y = -y;
- x = 1/x;
- }
- for (;;)
- {
- if (y & 1)
- r *= x;
- if (y >>= 1)
- x *= x;
- else
- return r;
- }
-}
-
-template <class FLOAT> complex<FLOAT>
-sqrt (const complex<FLOAT>& x)
-{
- FLOAT r = abs (x);
- FLOAT nr, ni;
- if (r == 0.0)
- nr = ni = r;
- else if (real (x) > 0)
- {
- nr = sqrt (0.5 * (r + real (x)));
- ni = imag (x) / nr / 2;
- }
- else
- {
- ni = sqrt (0.5 * (r - real (x)));
- if (imag (x) < 0)
- ni = - ni;
- nr = imag (x) / ni / 2;
- }
- return complex<FLOAT> (nr, ni);
-}
-} // extern "C++"
diff --git a/contrib/libg++/libstdc++/std/complext.h b/contrib/libg++/libstdc++/std/complext.h
deleted file mode 100644
index db87dd0988fe..000000000000
--- a/contrib/libg++/libstdc++/std/complext.h
+++ /dev/null
@@ -1,317 +0,0 @@
-// The template and inlines for the -*- C++ -*- complex number classes.
-// Copyright (C) 1994 Free Software Foundation
-
-// This file is part of the GNU ANSI C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms of
-// the GNU General Public License as published by the Free Software
-// Foundation; either version 2, or (at your option) any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-// As a special exception, if you link this library with files compiled
-// with a GNU compiler to produce an executable, this does not cause the
-// resulting executable to be covered by the GNU General Public License.
-// This exception does not however invalidate any other reasons why the
-// executable file might be covered by the GNU General Public License.
-
-// Written by Jason Merrill based upon the specification in the 27 May 1994
-// C++ working paper, ANSI document X3J16/94-0098.
-
-#ifndef __COMPLEXT__
-#define __COMPLEXT__
-
-#ifdef __GNUG__
-#pragma interface
-#endif
-
-#include <std/cmath.h>
-
-#if ! defined (__GNUG__) && ! defined (__attribute__)
-#define __attribute__ (foo) /* Ignore. */
-#endif
-
-extern "C++" {
-template <class FLOAT>
-class complex
-{
-public:
- complex (FLOAT r = 0, FLOAT i = 0): re (r), im (i) { }
- complex& operator += (const complex&);
- complex& operator -= (const complex&);
- complex& operator *= (const complex&);
- complex& operator /= (const complex&);
- FLOAT real () const { return re; }
- FLOAT imag () const { return im; }
-private:
- FLOAT re, im;
-
- // These functions are specified as friends for purposes of name injection;
- // they do not actually reference private members.
- friend FLOAT real (const complex&) __attribute__ ((const));
- friend FLOAT imag (const complex&) __attribute__ ((const));
- friend complex operator + (const complex&, const complex&) __attribute__ ((const));
- friend complex operator + (const complex&, FLOAT) __attribute__ ((const));
- friend complex operator + (FLOAT, const complex&) __attribute__ ((const));
- friend complex operator - (const complex&, const complex&) __attribute__ ((const));
- friend complex operator - (const complex&, FLOAT) __attribute__ ((const));
- friend complex operator - (FLOAT, const complex&) __attribute__ ((const));
- friend complex operator * (const complex&, const complex&) __attribute__ ((const));
- friend complex operator * (const complex&, FLOAT) __attribute__ ((const));
- friend complex operator * (FLOAT, const complex&) __attribute__ ((const));
- friend complex operator / (const complex&, const complex&) __attribute__ ((const));
- friend complex operator / (const complex&, FLOAT) __attribute__ ((const));
- friend complex operator / (FLOAT, const complex&) __attribute__ ((const));
- friend bool operator == (const complex&, const complex&) __attribute__ ((const));
- friend bool operator == (const complex&, FLOAT) __attribute__ ((const));
- friend bool operator == (FLOAT, const complex&) __attribute__ ((const));
- friend bool operator != (const complex&, const complex&) __attribute__ ((const));
- friend bool operator != (const complex&, FLOAT) __attribute__ ((const));
- friend bool operator != (FLOAT, const complex&) __attribute__ ((const));
- friend complex polar (FLOAT, FLOAT) __attribute__ ((const));
- friend complex pow (const complex&, const complex&) __attribute__ ((const));
- friend complex pow (const complex&, FLOAT) __attribute__ ((const));
- friend complex pow (const complex&, int) __attribute__ ((const));
- friend complex pow (FLOAT, const complex&) __attribute__ ((const));
- friend istream& operator>> (istream&, complex&);
- friend ostream& operator<< (ostream&, const complex&);
-};
-
-// Declare specializations.
-class complex<float>;
-class complex<double>;
-class complex<long double>;
-
-template <class FLOAT>
-inline complex<FLOAT>&
-complex<FLOAT>::operator += (const complex<FLOAT>& r)
-{
- re += r.re;
- im += r.im;
- return *this;
-}
-
-template <class FLOAT>
-inline complex<FLOAT>&
-complex<FLOAT>::operator -= (const complex<FLOAT>& r)
-{
- re -= r.re;
- im -= r.im;
- return *this;
-}
-
-template <class FLOAT>
-inline complex<FLOAT>&
-complex<FLOAT>::operator *= (const complex<FLOAT>& r)
-{
- FLOAT f = re * r.re - im * r.im;
- im = re * r.im + im * r.re;
- re = f;
- return *this;
-}
-
-template <class FLOAT> inline FLOAT
-imag (const complex<FLOAT>& x) __attribute__ ((const))
-{
- return x.imag ();
-}
-
-template <class FLOAT> inline FLOAT
-real (const complex<FLOAT>& x) __attribute__ ((const))
-{
- return x.real ();
-}
-
-template <class FLOAT> inline complex<FLOAT>
-operator + (const complex<FLOAT>& x, const complex<FLOAT>& y) __attribute__ ((const))
-{
- return complex<FLOAT> (real (x) + real (y), imag (x) + imag (y));
-}
-
-template <class FLOAT> inline complex<FLOAT>
-operator + (const complex<FLOAT>& x, FLOAT y) __attribute__ ((const))
-{
- return complex<FLOAT> (real (x) + y, imag (x));
-}
-
-template <class FLOAT> inline complex<FLOAT>
-operator + (FLOAT x, const complex<FLOAT>& y) __attribute__ ((const))
-{
- return complex<FLOAT> (x + real (y), imag (y));
-}
-
-template <class FLOAT> inline complex<FLOAT>
-operator - (const complex<FLOAT>& x, const complex<FLOAT>& y) __attribute__ ((const))
-{
- return complex<FLOAT> (real (x) - real (y), imag (x) - imag (y));
-}
-
-template <class FLOAT> inline complex<FLOAT>
-operator - (const complex<FLOAT>& x, FLOAT y) __attribute__ ((const))
-{
- return complex<FLOAT> (real (x) - y, imag (x));
-}
-
-template <class FLOAT> inline complex<FLOAT>
-operator - (FLOAT x, const complex<FLOAT>& y) __attribute__ ((const))
-{
- return complex<FLOAT> (x - real (y), - imag (y));
-}
-
-template <class FLOAT> inline complex<FLOAT>
-operator * (const complex<FLOAT>& x, const complex<FLOAT>& y) __attribute__ ((const))
-{
- return complex<FLOAT> (real (x) * real (y) - imag (x) * imag (y),
- real (x) * imag (y) + imag (x) * real (y));
-}
-
-template <class FLOAT> inline complex<FLOAT>
-operator * (const complex<FLOAT>& x, FLOAT y) __attribute__ ((const))
-{
- return complex<FLOAT> (real (x) * y, imag (x) * y);
-}
-
-template <class FLOAT> inline complex<FLOAT>
-operator * (FLOAT x, const complex<FLOAT>& y) __attribute__ ((const))
-{
- return complex<FLOAT> (x * real (y), x * imag (y));
-}
-
-template <class FLOAT> complex<FLOAT>
-operator / (const complex<FLOAT>& x, FLOAT y) __attribute__ ((const))
-{
- return complex<FLOAT> (real (x) / y, imag (x) / y);
-}
-
-template <class FLOAT> inline complex<FLOAT>
-operator + (const complex<FLOAT>& x) __attribute__ ((const))
-{
- return x;
-}
-
-template <class FLOAT> inline complex<FLOAT>
-operator - (const complex<FLOAT>& x) __attribute__ ((const))
-{
- return complex<FLOAT> (-real (x), -imag (x));
-}
-
-template <class FLOAT> inline bool
-operator == (const complex<FLOAT>& x, const complex<FLOAT>& y) __attribute__ ((const))
-{
- return real (x) == real (y) && imag (x) == imag (y);
-}
-
-template <class FLOAT> inline bool
-operator == (const complex<FLOAT>& x, FLOAT y) __attribute__ ((const))
-{
- return real (x) == y && imag (x) == 0;
-}
-
-template <class FLOAT> inline bool
-operator == (FLOAT x, const complex<FLOAT>& y) __attribute__ ((const))
-{
- return x == real (y) && imag (y) == 0;
-}
-
-template <class FLOAT> inline bool
-operator != (const complex<FLOAT>& x, const complex<FLOAT>& y) __attribute__ ((const))
-{
- return real (x) != real (y) || imag (x) != imag (y);
-}
-
-template <class FLOAT> inline bool
-operator != (const complex<FLOAT>& x, FLOAT y) __attribute__ ((const))
-{
- return real (x) != y || imag (x) != 0;
-}
-
-template <class FLOAT> inline bool
-operator != (FLOAT x, const complex<FLOAT>& y) __attribute__ ((const))
-{
- return x != real (y) || imag (y) != 0;
-}
-
-// Some targets don't provide a prototype for hypot when -ansi.
-extern "C" double hypot (double, double) __attribute__ ((const));
-
-template <class FLOAT> inline FLOAT
-abs (const complex<FLOAT>& x) __attribute__ ((const))
-{
- return hypot (real (x), imag (x));
-}
-
-template <class FLOAT> inline FLOAT
-arg (const complex<FLOAT>& x) __attribute__ ((const))
-{
- return atan2 (imag (x), real (x));
-}
-
-template <class FLOAT> inline complex<FLOAT>
-polar (FLOAT r, FLOAT t) __attribute__ ((const))
-{
- return complex<FLOAT> (r * cos (t), r * sin (t));
-}
-
-template <class FLOAT> inline complex<FLOAT>
-conj (const complex<FLOAT>& x) __attribute__ ((const))
-{
- return complex<FLOAT> (real (x), -imag (x));
-}
-
-template <class FLOAT> inline FLOAT
-norm (const complex<FLOAT>& x) __attribute__ ((const))
-{
- return real (x) * real (x) + imag (x) * imag (x);
-}
-
-// Declarations of templates in complext.ccI
-
-template <class FLOAT> complex<FLOAT>
- operator / (const complex<FLOAT>&, const complex<FLOAT>&) __attribute__ ((const));
-template <class FLOAT> complex<FLOAT>
- operator / (FLOAT, const complex<FLOAT>&) __attribute__ ((const));
-template <class FLOAT> complex<FLOAT>
- cos (const complex<FLOAT>&) __attribute__ ((const));
-template <class FLOAT> complex<FLOAT>
- cosh (const complex<FLOAT>&) __attribute__ ((const));
-template <class FLOAT> complex<FLOAT>
- exp (const complex<FLOAT>&) __attribute__ ((const));
-template <class FLOAT> complex<FLOAT>
- log (const complex<FLOAT>&) __attribute__ ((const));
-template <class FLOAT> complex<FLOAT>
- pow (const complex<FLOAT>&, const complex<FLOAT>&) __attribute__ ((const));
-template <class FLOAT> complex<FLOAT>
- pow (const complex<FLOAT>&, FLOAT) __attribute__ ((const));
-template <class FLOAT> complex<FLOAT>
- pow (const complex<FLOAT>&, int) __attribute__ ((const));
-template <class FLOAT> complex<FLOAT>
- pow (FLOAT, const complex<FLOAT>&) __attribute__ ((const));
-template <class FLOAT> complex<FLOAT>
- sin (const complex<FLOAT>&) __attribute__ ((const));
-template <class FLOAT> complex<FLOAT>
- sinh (const complex<FLOAT>&) __attribute__ ((const));
-template <class FLOAT> complex<FLOAT>
- sqrt (const complex<FLOAT>&) __attribute__ ((const));
-
-class istream;
-class ostream;
-template <class FLOAT> istream& operator >> (istream&, complex<FLOAT>&);
-template <class FLOAT> ostream& operator << (ostream&, const complex<FLOAT>&);
-} // extern "C++"
-
-// Specializations and such
-
-#include <std/fcomplex.h>
-#include <std/dcomplex.h>
-#include <std/ldcomplex.h>
-
-// Declare the instantiations.
-#include <std/cinst.h>
-
-#endif
diff --git a/contrib/libg++/libstdc++/std/csetjmp.h b/contrib/libg++/libstdc++/std/csetjmp.h
deleted file mode 100644
index 4bba048dcb5e..000000000000
--- a/contrib/libg++/libstdc++/std/csetjmp.h
+++ /dev/null
@@ -1,8 +0,0 @@
-// The -*- C++ -*- setjmp/longjmp header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __CSETJMP__
-#define __CSETJMP__
-#include <setjmp.h>
-#endif
-
diff --git a/contrib/libg++/libstdc++/std/csignal.h b/contrib/libg++/libstdc++/std/csignal.h
deleted file mode 100644
index 6febfb7b2ed5..000000000000
--- a/contrib/libg++/libstdc++/std/csignal.h
+++ /dev/null
@@ -1,7 +0,0 @@
-// The -*- C++ -*- signal handling header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __CSIGNAL__
-#define __CSIGNAL__
-#include <signal.h>
-#endif
diff --git a/contrib/libg++/libstdc++/std/cstdarg.h b/contrib/libg++/libstdc++/std/cstdarg.h
deleted file mode 100644
index 24c57f062997..000000000000
--- a/contrib/libg++/libstdc++/std/cstdarg.h
+++ /dev/null
@@ -1,7 +0,0 @@
-// The -*- C++ -*- variable argument handling header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __CSTDARG__
-#define __CSTDARG__
-#include <stdarg.h>
-#endif
diff --git a/contrib/libg++/libstdc++/std/cstddef.h b/contrib/libg++/libstdc++/std/cstddef.h
deleted file mode 100644
index 0e025e3d163c..000000000000
--- a/contrib/libg++/libstdc++/std/cstddef.h
+++ /dev/null
@@ -1,7 +0,0 @@
-// The -*- C++ -*- wrapper for the C standard definitions header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __CSTDDEF__
-#define __CSTDDEF__
-#include <stddef.h>
-#endif
diff --git a/contrib/libg++/libstdc++/std/cstdio.h b/contrib/libg++/libstdc++/std/cstdio.h
deleted file mode 100644
index 1fe1456b5bdf..000000000000
--- a/contrib/libg++/libstdc++/std/cstdio.h
+++ /dev/null
@@ -1,7 +0,0 @@
-// The -*- C++ -*- standard I/O header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __CSTDIO__
-#define __CSTDIO__
-#include <stdio.h>
-#endif
diff --git a/contrib/libg++/libstdc++/std/cstdlib.h b/contrib/libg++/libstdc++/std/cstdlib.h
deleted file mode 100644
index 51dc00a5af09..000000000000
--- a/contrib/libg++/libstdc++/std/cstdlib.h
+++ /dev/null
@@ -1,23 +0,0 @@
-// The -*- C++ -*- standard library header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __CSTDLIB__
-#define __CSTDLIB__
-#include <stdlib.h>
-
-#ifdef __GNUG__
-#pragma interface "std/cstdlib.h"
-#endif
-
-extern "C++" {
-
-#if _G_HAS_LABS
-inline long abs(long x) { return labs (x); }
-#else
-inline long abs(long x) { return x >= 0 ? x : -x; }
-#endif
-//inline ldiv_t div(long x, long y) { return ldiv (x, y); }
-
-} // extern "C++"
-
-#endif
diff --git a/contrib/libg++/libstdc++/std/cstring.h b/contrib/libg++/libstdc++/std/cstring.h
deleted file mode 100644
index 6d493e7501e5..000000000000
--- a/contrib/libg++/libstdc++/std/cstring.h
+++ /dev/null
@@ -1,71 +0,0 @@
-// The -*- C++ -*- null-terminated string header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __CSTRING__
-#define __CSTRING__
-
-#if 0 // Let's not bother with this just yet.
-// The ANSI C prototypes for these functions have a const argument type and
-// non-const return type, so we can't use them.
-
-#define strchr __hide_strchr
-#define strpbrk __hide_strpbrk
-#define strrchr __hide_strrchr
-#define strstr __hide_strstr
-#define memchr __hide_memchr
-#endif // 0
-
-#include_next <string.h>
-
-#if 0 // Let's not bother with this just yet.
-#undef strchr
-#undef strpbrk
-#undef strrchr
-#undef strstr
-#undef memchr
-
-#include <std/cstddef.h>
-
-#ifdef __GNUG__
-#pragma interface "std/cstring.h"
-#endif
-
-extern "C++" {
-extern "C" const char *strchr (const char *, int);
-inline char *
-strchr (char *s, int c)
-{
- return const_cast<char *> (strchr (static_cast<const char *> (s), c));
-}
-
-extern "C" const char *strpbrk (const char *, const char *);
-inline char *
-strpbrk (char *s1, const char *s2)
-{
- return const_cast<char *> (strpbrk (static_cast<const char *> (s1), s2));
-}
-
-extern "C" const char *strrchr (const char *, int);
-inline char *
-strrchr (char *s, int c)
-{
- return const_cast<char *> (strrchr (static_cast<const char *> (s), c));
-}
-
-extern "C" const char *strstr (const char *, const char *);
-inline char *
-strstr (char *s1, const char *s2)
-{
- return const_cast<char *> (strstr (static_cast<const char *> (s1), s2));
-}
-
-extern "C" const void *memchr (const void *, int, size_t);
-inline void *
-memchr (void *s, int c, size_t n)
-{
- return const_cast<void *> (memchr (static_cast<const void *> (s), c, n));
-}
-} // extern "C++"
-
-#endif // 0
-#endif // !defined (__CSTRING__)
diff --git a/contrib/libg++/libstdc++/std/ctime.h b/contrib/libg++/libstdc++/std/ctime.h
deleted file mode 100644
index 0184da5929f3..000000000000
--- a/contrib/libg++/libstdc++/std/ctime.h
+++ /dev/null
@@ -1,7 +0,0 @@
-// The -*- C++ -*- time header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __CTIME__
-#define __CTIME__
-#include <time.h>
-#endif
diff --git a/contrib/libg++/libstdc++/std/cwchar.h b/contrib/libg++/libstdc++/std/cwchar.h
deleted file mode 100644
index 1674c12b61f0..000000000000
--- a/contrib/libg++/libstdc++/std/cwchar.h
+++ /dev/null
@@ -1,7 +0,0 @@
-// The -*- C++ -*- wide character header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __CWCHAR__
-#define __CWCHAR__
-#include <wchar.h>
-#endif
diff --git a/contrib/libg++/libstdc++/std/cwctype.h b/contrib/libg++/libstdc++/std/cwctype.h
deleted file mode 100644
index 81122012bd04..000000000000
--- a/contrib/libg++/libstdc++/std/cwctype.h
+++ /dev/null
@@ -1,7 +0,0 @@
-// The -*- C++ -*- wide character type header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __CWCTYPE__
-#define __CWCTYPE__
-#include <wctype.h>
-#endif
diff --git a/contrib/libg++/libstdc++/std/dcomplex.h b/contrib/libg++/libstdc++/std/dcomplex.h
deleted file mode 100644
index d3e5d311c634..000000000000
--- a/contrib/libg++/libstdc++/std/dcomplex.h
+++ /dev/null
@@ -1,89 +0,0 @@
-// The -*- C++ -*- double_complex class.
-// Copyright (C) 1994 Free Software Foundation
-
-// This file is part of the GNU ANSI C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-// As a special exception, if you link this library with files
-// compiled with a GNU compiler to produce an executable, this does not cause
-// the resulting executable to be covered by the GNU General Public License.
-// This exception does not however invalidate any other reasons why
-// the executable file might be covered by the GNU General Public License.
-
-// Written by Jason Merrill based upon the specification in the 27 May 1994
-// C++ working paper, ANSI document X3J16/94-0098.
-
-#ifndef __DCOMPLEX__
-#define __DCOMPLEX__
-
-#ifdef __GNUG__
-#pragma interface "dcomplex"
-#endif
-
-extern "C++" {
-class complex<double>
-{
-public:
- complex (double r = 0, double i = 0): re (r), im (i) { }
- complex (const complex<float>& r): re (r.real ()), im (r.imag ()) { }
- explicit complex (const complex<long double>& r);
-
- complex& operator+= (const complex&);
- complex& operator-= (const complex&);
- complex& operator*= (const complex&);
- complex& operator/= (const complex&);
-
- double real () const { return re; }
- double imag () const { return im; }
-private:
- double re, im;
-
- // These functions are specified as friends for purposes of name injection;
- // they do not actually reference private members.
- friend double real (const complex& x) { return x.real (); }
- friend double imag (const complex& x) { return x.imag (); }
- friend complex operator + (const complex&, const complex&) __attribute__ ((const));
- friend complex operator + (const complex&, double) __attribute__ ((const));
- friend complex operator + (double, const complex&) __attribute__ ((const));
- friend complex operator - (const complex&, const complex&) __attribute__ ((const));
- friend complex operator - (const complex&, double) __attribute__ ((const));
- friend complex operator - (double, const complex&) __attribute__ ((const));
- friend complex operator * (const complex&, const complex&) __attribute__ ((const));
- friend complex operator * (const complex&, double) __attribute__ ((const));
- friend complex operator * (double, const complex&) __attribute__ ((const));
- friend complex operator / (const complex&, const complex&) __attribute__ ((const));
- friend complex operator / (const complex&, double) __attribute__ ((const));
- friend complex operator / (double, const complex&) __attribute__ ((const));
- friend bool operator == (const complex&, const complex&) __attribute__ ((const));
- friend bool operator == (const complex&, double) __attribute__ ((const));
- friend bool operator == (double, const complex&) __attribute__ ((const));
- friend bool operator != (const complex&, const complex&) __attribute__ ((const));
- friend bool operator != (const complex&, double) __attribute__ ((const));
- friend bool operator != (double, const complex&) __attribute__ ((const));
- friend complex polar (double, double) __attribute__ ((const));
- friend complex pow (const complex&, const complex&) __attribute__ ((const));
- friend complex pow (const complex&, double) __attribute__ ((const));
- friend complex pow (const complex&, int) __attribute__ ((const));
- friend complex pow (double, const complex&) __attribute__ ((const));
- friend istream& operator>> (istream&, complex&);
- friend ostream& operator<< (ostream&, const complex&);
-};
-
-inline complex<float>::complex (const complex<double>& r)
-: re (r.real ()), im (r.imag ())
-{ }
-} // extern "C++"
-
-#endif
diff --git a/contrib/libg++/libstdc++/std/exception.h b/contrib/libg++/libstdc++/std/exception.h
deleted file mode 100644
index 6de65d8fc108..000000000000
--- a/contrib/libg++/libstdc++/std/exception.h
+++ /dev/null
@@ -1,39 +0,0 @@
-// Exception Handling header for -*- C++ -*-
-// Copyright (C) 1995 Free Software Foundation
-
-// This file is part of the GNU ANSI C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-// As a special exception, if you link this library with files
-// compiled with a GNU compiler to produce an executable, this does not cause
-// the resulting executable to be covered by the GNU General Public License.
-// This exception does not however invalidate any other reasons why
-// the executable file might be covered by the GNU General Public License.
-
-#ifndef __EXCEPTION__
-#define __EXCEPTION__
-
-extern "C++" {
-// class XUNEXPECTED { to be specified };
-typedef void (*terminate_handler) ();
-typedef void (*unexpected_handler) ();
-
-terminate_handler set_terminate (terminate_handler);
-void terminate (void);
-unexpected_handler set_unexpected (unexpected_handler);
-void unexpected (void);
-} // extern "C++"
-
-#endif
diff --git a/contrib/libg++/libstdc++/std/fcomplex.h b/contrib/libg++/libstdc++/std/fcomplex.h
deleted file mode 100644
index 27f3be7a4809..000000000000
--- a/contrib/libg++/libstdc++/std/fcomplex.h
+++ /dev/null
@@ -1,85 +0,0 @@
-// The -*- C++ -*- float_complex class.
-// Copyright (C) 1994 Free Software Foundation
-
-// This file is part of the GNU ANSI C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-// As a special exception, if you link this library with files
-// compiled with a GNU compiler to produce an executable, this does not cause
-// the resulting executable to be covered by the GNU General Public License.
-// This exception does not however invalidate any other reasons why
-// the executable file might be covered by the GNU General Public License.
-
-// Written by Jason Merrill based upon the specification in the 27 May 1994
-// C++ working paper, ANSI document X3J16/94-0098.
-
-#ifndef __FCOMPLEX__
-#define __FCOMPLEX__
-
-#ifdef __GNUG__
-#pragma interface "fcomplex"
-#endif
-
-extern "C++" {
-class complex<float>
-{
-public:
- complex (float r = 0, float i = 0): re (r), im (i) { }
- explicit complex (const complex<double>& r);
- explicit complex (const complex<long double>& r);
-
- complex& operator+= (const complex&);
- complex& operator-= (const complex&);
- complex& operator*= (const complex&);
- complex& operator/= (const complex&);
-
- float real () const { return re; }
- float imag () const { return im; }
-private:
- float re, im;
-
- // These functions are specified as friends for purposes of name injection;
- // they do not actually reference private members.
- friend float real (const complex& x) { return x.real (); }
- friend float imag (const complex& x) { return x.imag (); }
- friend complex operator + (const complex&, const complex&) __attribute__ ((const));
- friend complex operator + (const complex&, float) __attribute__ ((const));
- friend complex operator + (float, const complex&) __attribute__ ((const));
- friend complex operator - (const complex&, const complex&) __attribute__ ((const));
- friend complex operator - (const complex&, float) __attribute__ ((const));
- friend complex operator - (float, const complex&) __attribute__ ((const));
- friend complex operator * (const complex&, const complex&) __attribute__ ((const));
- friend complex operator * (const complex&, float) __attribute__ ((const));
- friend complex operator * (float, const complex&) __attribute__ ((const));
- friend complex operator / (const complex&, const complex&) __attribute__ ((const));
- friend complex operator / (const complex&, float) __attribute__ ((const));
- friend complex operator / (float, const complex&) __attribute__ ((const));
- friend bool operator == (const complex&, const complex&) __attribute__ ((const));
- friend bool operator == (const complex&, float) __attribute__ ((const));
- friend bool operator == (float, const complex&) __attribute__ ((const));
- friend bool operator != (const complex&, const complex&) __attribute__ ((const));
- friend bool operator != (const complex&, float) __attribute__ ((const));
- friend bool operator != (float, const complex&) __attribute__ ((const));
- friend complex polar (float, float) __attribute__ ((const));
- friend complex pow (const complex&, const complex&) __attribute__ ((const));
- friend complex pow (const complex&, float) __attribute__ ((const));
- friend complex pow (const complex&, int) __attribute__ ((const));
- friend complex pow (float, const complex&) __attribute__ ((const));
- friend istream& operator>> (istream&, complex&);
- friend ostream& operator<< (ostream&, const complex&);
-};
-} // extern "C++"
-
-#endif
diff --git a/contrib/libg++/libstdc++/std/ldcomplex.h b/contrib/libg++/libstdc++/std/ldcomplex.h
deleted file mode 100644
index 95f90ae7f0ef..000000000000
--- a/contrib/libg++/libstdc++/std/ldcomplex.h
+++ /dev/null
@@ -1,93 +0,0 @@
-// The -*- C++ -*- long_double_complex class.
-// Copyright (C) 1994 Free Software Foundation
-
-// This file is part of the GNU ANSI C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-// As a special exception, if you link this library with files
-// compiled with a GNU compiler to produce an executable, this does not cause
-// the resulting executable to be covered by the GNU General Public License.
-// This exception does not however invalidate any other reasons why
-// the executable file might be covered by the GNU General Public License.
-
-// Written by Jason Merrill based upon the specification in the 27 May 1994
-// C++ working paper, ANSI document X3J16/94-0098.
-
-#ifndef __LDCOMPLEX__
-#define __LDCOMPLEX__
-
-#ifdef __GNUG__
-#pragma interface "ldcomplex"
-#endif
-
-extern "C++" {
-class complex<long double>
-{
-public:
- complex (long double r = 0, long double i = 0): re (r), im (i) { }
- complex (const complex<float>& r): re (r.real ()), im (r.imag ()) { }
- complex (const complex<double>& r): re (r.real ()), im (r.imag ()) { }
-
- complex& operator+= (const complex&);
- complex& operator-= (const complex&);
- complex& operator*= (const complex&);
- complex& operator/= (const complex&);
-
- long double real () const { return re; }
- long double imag () const { return im; }
-private:
- long double re, im;
-
- // These functions are specified as friends for purposes of name injection;
- // they do not actually reference private members.
- friend long double real (const complex& x) { return x.real (); }
- friend long double imag (const complex& x) { return x.imag (); }
- friend complex operator + (const complex&, const complex&) __attribute__ ((const));
- friend complex operator + (const complex&, long double) __attribute__ ((const));
- friend complex operator + (long double, const complex&) __attribute__ ((const));
- friend complex operator - (const complex&, const complex&) __attribute__ ((const));
- friend complex operator - (const complex&, long double) __attribute__ ((const));
- friend complex operator - (long double, const complex&) __attribute__ ((const));
- friend complex operator * (const complex&, const complex&) __attribute__ ((const));
- friend complex operator * (const complex&, long double) __attribute__ ((const));
- friend complex operator * (long double, const complex&) __attribute__ ((const));
- friend complex operator / (const complex&, const complex&) __attribute__ ((const));
- friend complex operator / (const complex&, long double) __attribute__ ((const));
- friend complex operator / (long double, const complex&) __attribute__ ((const));
- friend bool operator == (const complex&, const complex&) __attribute__ ((const));
- friend bool operator == (const complex&, long double) __attribute__ ((const));
- friend bool operator == (long double, const complex&) __attribute__ ((const));
- friend bool operator != (const complex&, const complex&) __attribute__ ((const));
- friend bool operator != (const complex&, long double) __attribute__ ((const));
- friend bool operator != (long double, const complex&) __attribute__ ((const));
- friend complex polar (long double, long double) __attribute__ ((const));
- friend complex pow (const complex&, const complex&) __attribute__ ((const));
- friend complex pow (const complex&, long double) __attribute__ ((const));
- friend complex pow (const complex&, int) __attribute__ ((const));
- friend complex pow (long double, const complex&) __attribute__ ((const));
- friend istream& operator>> (istream&, complex&);
- friend ostream& operator<< (ostream&, const complex&);
-};
-
-inline complex<float>::complex (const complex<long double>& r)
-: re (r.real ()), im (r.imag ())
-{ }
-
-inline complex<double>::complex (const complex<long double>& r)
-: re (r.real ()), im (r.imag ())
-{ }
-} // extern "C++"
-
-#endif
diff --git a/contrib/libg++/libstdc++/std/new.h b/contrib/libg++/libstdc++/std/new.h
deleted file mode 100644
index cfdfbebdd63d..000000000000
--- a/contrib/libg++/libstdc++/std/new.h
+++ /dev/null
@@ -1,34 +0,0 @@
-// The -*- C++ -*- dynamic memory management header.
-// Copyright (C) 1994 Free Software Foundation
-
-#ifndef __NEW__
-#define __NEW__
-
-#ifdef __GNUG__
-#pragma interface "std/new.h"
-#endif
-
-#include <std/cstddef.h>
-
-extern "C++" {
-typedef void (*new_handler)();
-extern "C" new_handler set_new_handler (new_handler);
-
-#if defined(__GNUG__) && !defined (__STRICT_ANSI__)
-// G++ implementation internals
-extern new_handler __new_handler;
-extern "C" void __default_new_handler (void);
-#endif
-
-// replaceable signatures
-void *operator new (size_t);
-void *operator new[] (size_t);
-void operator delete (void *);
-void operator delete[] (void *);
-
-// default placement versions of operator new
-inline void *operator new(size_t, void *place) { return place; }
-inline void *operator new[](size_t, void *place) { return place; }
-} // extern "C++"
-
-#endif
diff --git a/contrib/libg++/libstdc++/std/sinst.h b/contrib/libg++/libstdc++/std/sinst.h
deleted file mode 100644
index 6bd9bfc6d19d..000000000000
--- a/contrib/libg++/libstdc++/std/sinst.h
+++ /dev/null
@@ -1,73 +0,0 @@
-// Forward declarations of -*- C++ -*- string instantiations.
-// Copyright (C) 1994 Free Software Foundation
-
-// This file is part of the GNU ANSI C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-// As a special exception, if you link this library with files
-// compiled with a GNU compiler to produce an executable, this does not cause
-// the resulting executable to be covered by the GNU General Public License.
-// This exception does not however invalidate any other reasons why
-// the executable file might be covered by the GNU General Public License.
-
-// Written by Jason Merrill based upon the specification by Takanori Adachi
-// in ANSI X3J16/94-0013R2.
-
-#ifndef __SINST__
-#define __SINST__
-
-extern "C++" {
-#define __S basic_string<char,string_char_traits<char> >
-//#define __W basic_string<wchar_t,string_char_traits<wchar_t> >
-
-extern template class __bsrep<char, string_char_traits<char> >;
-extern template class __S;
-// extern template class __W;
-// extern template class __bsrep<wchar_t, string_char_traits<wchar_t> >;
-
-#define __DOPR(op, ret, c, s) \
- extern template ret operator op (const s&, const s&); \
- extern template ret operator op (const c*, const s&); \
- extern template ret operator op (const s&, const c*); \
-
-#define __DO(op, ret, c, s) \
- extern template ret operator op (const s&, const s&); \
- extern template ret operator op (const c*, const s&); \
- extern template ret operator op (const s&, const c*); \
- extern template ret operator op (c, const s&); \
- extern template ret operator op (const s&, c);
-
-__DO (+, __S, char, __S)
-// __DO (+, __W, wchar_t, __W) */
-
-#define __DOB(op) \
- __DOPR (op, bool, char, __S)
-// __DOPR (op, bool, wchar_t, __W)
-
-__DOB (==)
-__DOB (!=)
-__DOB (<)
-__DOB (>)
-__DOB (<=)
-__DOB (>=)
-
-#undef __S
-//#undef __W
-#undef __DO
-#undef __DOB
-#undef __DOPR
-} // extern "C++"
-
-#endif
diff --git a/contrib/libg++/libstdc++/std/stddef.h b/contrib/libg++/libstdc++/std/stddef.h
deleted file mode 100644
index 00cf47e7a027..000000000000
--- a/contrib/libg++/libstdc++/std/stddef.h
+++ /dev/null
@@ -1,25 +0,0 @@
-// The -*- C++ -*- standard definitions header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __STDDEF__
-#define __STDDEF__
-
-#ifdef __GNUG__
-#pragma interface "std/stddef.h"
-#endif
-
-#include <_G_config.h>
-#include <std/cstddef.h>
-
-extern "C++" {
-const size_t NPOS = (size_t)(-1);
-typedef void fvoid_t();
-
-#ifndef _WINT_T
-#define _WINT_T
-typedef _G_wint_t wint_t;
-#endif
-
-} // extern "C++"
-
-#endif
diff --git a/contrib/libg++/libstdc++/std/stdexcept.h b/contrib/libg++/libstdc++/std/stdexcept.h
deleted file mode 100644
index 785bb6a4223f..000000000000
--- a/contrib/libg++/libstdc++/std/stdexcept.h
+++ /dev/null
@@ -1,126 +0,0 @@
-// Methods for Exception Support for -*- C++ -*-
-// Copyright (C) 1994, 1995 Free Software Foundation
-
-// This file is part of the GNU ANSI C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-// As a special exception, if you link this library with files
-// compiled with a GNU compiler to produce an executable, this does not cause
-// the resulting executable to be covered by the GNU General Public License.
-// This exception does not however invalidate any other reasons why
-// the executable file might be covered by the GNU General Public License.
-
-// Written by Mike Stump based upon the specification in the 20 September 1994
-// C++ working paper, ANSI document X3J16/94-0158.
-
-#ifndef __STDEXCEPT__
-#define __STDEXCEPT__
-
-#ifdef __GNUG__
-#pragma interface "std/stdexcept.h"
-#endif
-
-#include <typeinfo>
-
-extern "C++" {
-#if 0
-#include <string>
-typedef string __string;
-#else
-typedef const char * __string;
-#endif
-
-class exception {
-public:
- typedef void (*raise_handler)(exception&);
- static raise_handler set_raise_handler(raise_handler handler_arg);
- exception (const __string& what_arg): desc (what_arg) { }
- virtual ~exception() { }
- void raise();
- virtual __string what() const { return desc; }
-protected:
- exception() { }
- virtual void do_raise() { }
-private:
- __string desc;
-};
-
-class logic_error : public exception {
-public:
- logic_error(const __string& what_arg): exception (what_arg) { }
- virtual ~logic_error() { }
-};
-
-class domain_error : public logic_error {
-public:
- domain_error (const __string& what_arg): logic_error (what_arg) { }
- virtual ~domain_error () { }
-};
-
-class invalid_argument : public logic_error {
-public:
- invalid_argument (const __string& what_arg): logic_error (what_arg) { }
- virtual ~invalid_argument () { }
-};
-
-class length_error : public logic_error {
-public:
- length_error (const __string& what_arg): logic_error (what_arg) { }
- virtual ~length_error () { }
-};
-
-class out_of_range : public logic_error {
-public:
- out_of_range (const __string& what_arg): logic_error (what_arg) { }
- virtual ~out_of_range () { }
-};
-
-class runtime_error : public exception {
-public:
- runtime_error(const __string& what_arg): exception (what_arg) { }
- virtual ~runtime_error() { }
-protected:
- runtime_error(): exception () { }
-};
-
-class range_error : public runtime_error {
-public:
- range_error (const __string& what_arg): runtime_error (what_arg) { }
- virtual ~range_error () { }
-};
-
-class overflow_error : public runtime_error {
-public:
- overflow_error (const __string& what_arg): runtime_error (what_arg) { }
- virtual ~overflow_error () { }
-};
-
-// These are moved here from typeinfo so that we can compile with -frtti
-class bad_cast : public logic_error {
-public:
- bad_cast(const __string& what_arg): logic_error (what_arg) { }
- virtual ~bad_cast() { }
-};
-
-extern bad_cast __bad_cast_object;
-
-class bad_typeid : public logic_error {
- public:
- bad_typeid (): logic_error ("bad_typeid") { }
- virtual ~bad_typeid () { }
-};
-} // extern "C++"
-
-#endif
diff --git a/contrib/libg++/libstdc++/std/straits.h b/contrib/libg++/libstdc++/std/straits.h
deleted file mode 100644
index 42fbad37fe94..000000000000
--- a/contrib/libg++/libstdc++/std/straits.h
+++ /dev/null
@@ -1,161 +0,0 @@
-// Character traits template for the -*- C++ -*- string classes.
-// Copyright (C) 1994 Free Software Foundation
-
-// This file is part of the GNU ANSI C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-// As a special exception, if you link this library with files
-// compiled with a GNU compiler to produce an executable, this does not cause
-// the resulting executable to be covered by the GNU General Public License.
-// This exception does not however invalidate any other reasons why
-// the executable file might be covered by the GNU General Public License.
-
-// Written by Jason Merrill based upon the specification by Takanori Adachi
-// in ANSI X3J16/94-0013R2.
-
-#ifndef __STRING_CHAR_TRAITS__
-#define __STRING_CHAR_TRAITS__
-
-#ifdef __GNUG__
-// For string_char_traits <char>
-#pragma interface "std/straits.h"
-#endif
-
-#include <std/stddef.h>
-
-extern "C++" {
-template <class charT>
-struct string_char_traits {
- typedef charT char_type; // for users to acquire the basic character type
-
- // constraints
-
- static void assign (char_type& c1, const char_type& c2)
- { c1 = c2; }
- static bool eq (const char_type& c1, const char_type& c2)
- { return (c1 == c2); }
- static bool ne (const char_type& c1, const char_type& c2)
- { return !(c1 == c2); }
- static bool lt (const char_type& c1, const char_type& c2)
- { return (c1 < c2); }
- static char_type eos () { return char_type(); } // the null character
- static bool is_del(char_type a) { return 0; }
- // characteristic function for delimiters of charT
-
- // speed-up functions
-
- static int compare (const char_type* s1, const char_type* s2, size_t n)
- {
- size_t i;
- for (i = 0; i < n; ++i)
- if (ne (s1[i], s2[i]))
- return lt (s1[i], s2[i]) ? -1 : 1;
-
- return 0;
- }
-
- static size_t length (const char_type* s)
- {
- size_t l = 0;
- while (ne (*s++, eos ()))
- ++l;
- return l;
- }
-
- static char_type* copy (char_type* s1, const char_type* s2, size_t n)
- {
- for (; n--; )
- assign (s1[n], s2[n]);
- return s1;
- }
-
- static char_type* move (char_type* s1, const char_type* s2, size_t n)
- {
- char_type a[n];
- size_t i;
- for (i = 0; i < n; ++i)
- assign (a[i], s2[i]);
- for (i = 0; i < n; ++i)
- assign (s1[i], a[i]);
- return s1;
- }
-
- static char_type* set (char_type* s1, const char_type& c, size_t n)
- {
- for (; n--; )
- assign (s1[n], c);
- return s1;
- }
-};
-
-class istream;
-class ostream;
-#include <std/cctype.h>
-#include <std/cstring.h>
-
-struct string_char_traits <char> {
- typedef char char_type;
-
- static void assign (char_type& c1, const char_type& c2)
- { c1 = c2; }
- static bool eq (const char_type & c1, const char_type& c2)
- { return (c1 == c2); }
- static bool ne (const char_type& c1, const char_type& c2)
- { return (c1 != c2); }
- static bool lt (const char_type& c1, const char_type& c2)
- { return (c1 < c2); }
- static char_type eos () { return 0; }
- static bool is_del(char_type a) { return isspace(a); }
-
- static int compare (const char_type* s1, const char_type* s2, size_t n)
- { return memcmp (s1, s2, n); }
- static size_t length (const char_type* s)
- { return strlen (s); }
- static char_type* copy (char_type* s1, const char_type* s2, size_t n)
- { return (char_type*) memcpy (s1, s2, n); }
- static char_type* move (char_type* s1, const char_type* s2, size_t n)
- { return (char_type*) memmove (s1, s2, n); }
- static char_type* set (char_type* s1, const char_type& c, size_t n)
- { return (char_type*) memset (s1, c, n); }
-};
-
-#if 0
-#include <std/cwctype.h>
-struct string_char_traits <wchar_t> {
- typedef wchar_t char_type;
-
- static void assign (char_type& c1, const char_type& c2)
- { c1 = c2; }
- static bool eq (const char_type & c1, const char_type& c2)
- { return (c1 == c2); }
- static bool ne (const char_type& c1, const char_type& c2)
- { return (c1 != c2); }
- static bool lt (const char_type& c1, const char_type& c2)
- { return (c1 < c2); }
- static char_type eos () { return 0; }
- static bool is_del(char_type a) { return iswspace(a); }
-
- static int compare (const char_type* s1, const char_type* s2, size_t n)
- { return wmemcmp (s1, s2, n); }
- static size_t length (const char_type* s)
- { return wcslen (s); }
- static char_type* copy (char_type* s1, const char_type* s2, size_t n)
- { return wmemcpy (s1, s2, n); }
- static char_type* set (char_type* s1, const char_type& c, size_t n)
- { return wmemset (s1, c, n); }
-};
-#endif
-} // extern "C++"
-#endif
diff --git a/contrib/libg++/libstdc++/std/string.h b/contrib/libg++/libstdc++/std/string.h
deleted file mode 100644
index 77cc801be16f..000000000000
--- a/contrib/libg++/libstdc++/std/string.h
+++ /dev/null
@@ -1,13 +0,0 @@
-// Main header for the -*- C++ -*- string classes.
-
-#ifndef __STRING__
-#define __STRING__
-
-#include <std/bastring.h>
-
-extern "C++" {
-typedef basic_string <char, string_char_traits <char> > string;
-// typedef basic_string <wchar_t, string_char_traits <wchar_t> > wstring;
-} // extern "C++"
-
-#endif
diff --git a/contrib/libg++/libstdc++/std/typeinfo.h b/contrib/libg++/libstdc++/std/typeinfo.h
deleted file mode 100644
index 44f833cd6858..000000000000
--- a/contrib/libg++/libstdc++/std/typeinfo.h
+++ /dev/null
@@ -1,245 +0,0 @@
-// RTTI support for -*- C++ -*-
-// Copyright (C) 1994, 1995 Free Software Foundation
-
-// This file is part of the GNU ANSI C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-// As a special exception, if you link this library with files
-// compiled with a GNU compiler to produce an executable, this does not cause
-// the resulting executable to be covered by the GNU General Public License.
-// This exception does not however invalidate any other reasons why
-// the executable file might be covered by the GNU General Public License.
-
-// Written by Kung Hsu based upon the specification in the 20 September 1994
-// C++ working paper, ANSI document X3J16/94-0158.
-
-#ifndef __TYPEINFO__
-#define __TYPEINFO__
-
-#ifdef __GNUG__
-#pragma interface "std/typeinfo.h"
-#endif
-
-extern "C" void* __throw_type_match_rtti (void *, void *, void *);
-
-extern "C++" {
-class type_info {
-private:
- // assigning type_info is not supported. made private.
- type_info& operator=(const type_info&);
- type_info(const type_info&);
-
-public:
- enum node_type {
- _RTTI_BUILTIN_TYPE, // builtin type
- _RTTI_USER_TYPE, // user defined type
- _RTTI_CLASS_TYPE, // class type
- _RTTI_POINTER_TYPE, // pointer type
- _RTTI_ATTR_TYPE, // attribute type for const and volatile
- _RTTI_FUNC_TYPE, // function type
- _RTTI_PTMF_TYPE, // pointer to member function type
- _RTTI_PTMD_TYPE // pointer to member data type
- };
-
- // return node type of the object
- virtual node_type __rtti_get_node_type() const { return _RTTI_BUILTIN_TYPE; }
-
- // get_name will return the name of the type, NULL if no name (like builtin)
- virtual const char * __rtti_get_name() const { return 0; }
-
- // compare if type represented by the type_info are the same type
- virtual int __rtti_compare(const type_info&) const { return 0; }
-
- // argument passed is the desired type,
- // for class type, if the type can be converted to the desired type,
- // it will be, and returned, else 0 is returned. If the match
- // succeeds, the return value will be adjusted to point to the sub-object.
- virtual void* __rtti_match(const type_info&, int, void *) const {
- // This should never be called.
- return 0;
- };
-
- // destructor
- virtual ~type_info() {}
- type_info() {}
-
- bool before(const type_info& arg);
- const char* name() const
- { return __rtti_get_name(); }
- bool operator==(const type_info& arg) const
- { return __rtti_compare(arg) == 0; }
- bool operator!=(const type_info& arg) const
- { return __rtti_compare(arg) != 0; }
-};
-
-// type_info for builtin type
-
-class __builtin_type_info : public type_info {
-public:
- enum builtin_type_val {
- _RTTI_BI_BOOL = 1, _RTTI_BI_CHAR, _RTTI_BI_SHORT, _RTTI_BI_INT,
- _RTTI_BI_LONG, _RTTI_BI_LONGLONG, _RTTI_BI_FLOAT,
- _RTTI_BI_DOUBLE, _RTTI_BI_LDOUBLE, _RTTI_BI_UCHAR,
- _RTTI_BI_USHORT, _RTTI_BI_UINT, _RTTI_BI_ULONG,
- _RTTI_BI_ULONGLONG, _RTTI_BI_SCHAR, _RTTI_BI_WCHAR, _RTTI_BI_VOID
- };
-
- builtin_type_val b_type;
-
- __builtin_type_info (builtin_type_val bt) : b_type (bt) {}
- node_type __rtti_get_node_type () const
- { return _RTTI_BUILTIN_TYPE; }
- const char *__rtti_get_name () const
- { return (const char *)0; }
- int __rtti_compare (const type_info& arg) const
- { return (arg.__rtti_get_node_type () == _RTTI_BUILTIN_TYPE &&
- ((__builtin_type_info&)arg).b_type == b_type) ? 0 : -1; }
-};
-
-// serice function for comparing types by name.
-
-inline int __fast_compare (const char *n1, const char *n2) {
- int c;
- if (n1 == n2) return 0;
- if (n1 == 0) return *n2;
- else if (n2 == 0) return *n1;
-
- c = (int)*n1++ - (int)*n2++;
- return c == 0 ? strcmp (n1, n2) : c;
-};
-
-// type_info for user type.
-
-class __user_type_info : public type_info {
- private:
- const char *_name;
-
-public:
- __user_type_info (const char *nm) : _name (nm) {}
- node_type __rtti_get_node_type () const
- { return _RTTI_USER_TYPE; }
- const char *__rtti_get_name () const
- { return _name; }
- int __rtti_compare (const type_info& arg) const
- { return (arg.__rtti_get_node_type () == __rtti_get_node_type() &&
- __fast_compare (_name, arg.__rtti_get_name ()) == 0) ? 0 : -1; }
-};
-
-// type_info for a class.
-
-class __class_type_info : public __user_type_info {
-private:
- enum access_mode {
- _RTTI_ACCESS_PUBLIC, _RTTI_ACCESS_PROTECTED, _RTTI_ACCESS_PRIVATE
- };
- type_info **base_list;
- int *offset_list;
- int *is_virtual_list;
- access_mode *access_list;
- int n_bases;
-
-public:
- __class_type_info (const char *name, type_info **bl, int *off,
- int *is_vir, access_mode *acc, int bn)
- : __user_type_info (name), base_list (bl), offset_list(off),
- is_virtual_list(is_vir), access_list(acc), n_bases (bn) {}
- node_type __rtti_get_node_type () const
- { return _RTTI_CLASS_TYPE; }
-
- // inherit __rtti_compare from __user_type_info
-
- // This is a little complex defined in typeinfo.cc
- void* __rtti_match(const type_info&, int, void *) const;
-};
-
-// type info for pointer type.
-
-class __pointer_type_info : public type_info {
-private:
- type_info& type;
-
-public:
- __pointer_type_info (type_info& ti) : type (ti) {}
- node_type __rtti_get_node_type () const
- { return _RTTI_POINTER_TYPE; }
- const char *__rtti_get_name () const
- { return (const char *)0; }
- int __rtti_compare (const type_info& arg) const
- { return (arg.__rtti_get_node_type () == __rtti_get_node_type() &&
- type.__rtti_compare ( ((__pointer_type_info&)arg).type) == 0) ? 0 : -1; }
- void* __rtti_match(const type_info& catch_type, int, void *objptr) const;
-};
-
-// type info for attributes
-
-class __attr_type_info : public type_info {
-public:
- enum attr_val {
- _RTTI_ATTR_CONST = 1, _RTTI_ATTR_VOLATILE, _RTTI_ATTR_CONSTVOL
- };
-
- attr_val attr;
- type_info& type;
-
- __attr_type_info (attr_val a, type_info& t) : attr (a), type(t) {}
- node_type __rtti_get_node_type () const
- { return _RTTI_ATTR_TYPE; }
- const char *__rtti_get_name () const
- { return (const char *)0; }
- int __rtti_compare (const type_info& arg) const
- { return (arg.__rtti_get_node_type () == _RTTI_ATTR_TYPE &&
- attr == ((__attr_type_info&)arg).attr &&
- type.__rtti_compare ( ((__attr_type_info&)arg).type ) == 0)
- ? 0 : -1; }
-};
-
-// type info for function.
-
-class __func_type_info : public __user_type_info {
-public:
- __func_type_info (const char *name) : __user_type_info (name) {}
- node_type __rtti_get_node_type () const
- { return _RTTI_FUNC_TYPE; }
-};
-
-// type info for pointer to member function.
-
-class __ptmf_type_info : public __user_type_info {
-public:
- __ptmf_type_info (const char *name) : __user_type_info (name) {}
- node_type __rtti_get_node_type () const
- { return _RTTI_PTMF_TYPE; }
-};
-
-// type info for pointer to data member.
-
-class __ptmd_type_info : public type_info {
- type_info& classtype;
- type_info& type;
-public:
- __ptmd_type_info (type_info& tc, type_info& t) : classtype (tc), type (t) {}
- node_type __rtti_get_node_type () const
- { return _RTTI_PTMD_TYPE; }
- int __rtti_compare (const type_info& arg) const
- { return (arg.__rtti_get_node_type () == _RTTI_PTMD_TYPE &&
- classtype.__rtti_compare ( ((__ptmd_type_info&)arg).classtype ) == 0 &&
- type.__rtti_compare ( ((__ptmd_type_info&)arg).type ) == 0)
- ? 0 : -1; }
-};
-} // extern "C++"
-
-#include <stdexcept>
-
-#endif
diff --git a/contrib/libg++/libstdc++/stddef b/contrib/libg++/libstdc++/stddef
deleted file mode 100644
index 9bfd4a91782d..000000000000
--- a/contrib/libg++/libstdc++/stddef
+++ /dev/null
@@ -1,6 +0,0 @@
-// -*- C++ -*- forwarding header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __STDDEF__
-#include <std/stddef.h>
-#endif
diff --git a/contrib/libg++/libstdc++/stddefi.cc b/contrib/libg++/libstdc++/stddefi.cc
deleted file mode 100644
index b49c42c945c7..000000000000
--- a/contrib/libg++/libstdc++/stddefi.cc
+++ /dev/null
@@ -1,7 +0,0 @@
-// Implementation file for the -*- C++ -*- standard definitions header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifdef __GNUG__
-#pragma implementation "std/stddef.h"
-#endif
-#include <std/stddef.h>
diff --git a/contrib/libg++/libstdc++/stdexcept b/contrib/libg++/libstdc++/stdexcept
deleted file mode 100644
index 560c53dd8888..000000000000
--- a/contrib/libg++/libstdc++/stdexcept
+++ /dev/null
@@ -1,6 +0,0 @@
-// -*- C++ -*- forwarding header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __STDEXCEPT__
-#include <std/stdexcept.h>
-#endif
diff --git a/contrib/libg++/libstdc++/stdexcepti.cc b/contrib/libg++/libstdc++/stdexcepti.cc
deleted file mode 100644
index 4025f5ba187f..000000000000
--- a/contrib/libg++/libstdc++/stdexcepti.cc
+++ /dev/null
@@ -1,8 +0,0 @@
-// Implementation file for Exception Support for -*- C++ -*-
-// This file is part of the GNU ANSI C++ Library.
-
-#ifdef __GNUG__
-#pragma implementation "std/stdexcept.h"
-#endif
-
-#include <stdexcept>
diff --git a/contrib/libg++/libstdc++/stl.h b/contrib/libg++/libstdc++/stl.h
deleted file mode 100644
index 4b270742c9cf..000000000000
--- a/contrib/libg++/libstdc++/stl.h
+++ /dev/null
@@ -1,15 +0,0 @@
-// -*- C++ -*- compatibility header.
-// This file is part of the GNU ANSI C++ Library.
-
-#include <algorithm>
-#include <deque>
-#include <functional>
-#include <iterator>
-#include <list>
-#include <map>
-#include <memory>
-#include <numeric>
-#include <set>
-#include <stack>
-#include <utility>
-#include <vector>
diff --git a/contrib/libg++/libstdc++/stl/ChangeLog b/contrib/libg++/libstdc++/stl/ChangeLog
deleted file mode 100644
index 786989d76693..000000000000
--- a/contrib/libg++/libstdc++/stl/ChangeLog
+++ /dev/null
@@ -1,86 +0,0 @@
-Wed Apr 24 10:45:22 1996 Doug Evans <dje@blues.cygnus.com>
-
- * Makefile.in (tempbuf.o,random.o): Add rules for SunOS VPATH.
-
-Fri Apr 5 17:52:31 1996 Per Bothner <bothner@kalessin.cygnus.com>
-
- * configure.in (EXTRA_MOSTLYCLEAN): New, to remove stl.list.
-
-Sun Mar 10 07:49:03 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * deque.h (distance_type): Add overload for g++.
- From Joe Buck.
-
-Thu Nov 9 17:05:23 1995 Jason Merrill <jason@yorick.cygnus.com>
-
- * algo.h algobase.h bvector.h defalloc.h deque.h function.h heap.h
- iterator.h list.h map.h multimap.h multiset.h pair.h projectn.h
- set.h stack.h tempbuf.h tree.h vector.h: Wrap #include <bool.h>
- with #ifndef __GNUG__.
-
-Thu Nov 2 17:05:44 1995 Jason Merrill <jason@yorick.cygnus.com>
-
- * deque.h (deque<T>::insert): Fix merge typo.
- * vector.h (value_type): Lose.
-
-Thu Nov 2 14:33:47 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * algo.h, algobase.h, deque.h, function.h, list.h, pair.h, random.cc:
- Merge in Oct 31 1995 release from HP.
-
-Fri Aug 11 17:11:12 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * list.h: Avoid duplicate construction and destruction of list_nodes.
- Patch from Klamer Schutte <klamer@ph.tn.tudelft.nl>.
-
-Fri Aug 11 16:45:18 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * algo.h, algobase.h, deque.h: Merged in Jul 12 1995 release from HP.
-
-Mon Jun 5 18:38:56 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * Makefile.in (stl.list): Depend on stamp-picdir.
-
-Wed May 17 02:30:47 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * tree.h: Rearrange member initializers in rb_tree constructors.
-
- * Update to HP's February 7, 1995 release.
-
-Fri May 5 10:45:31 1995 Mike Stump <mrs@cygnus.com>
-
- * random.cc (seed): Move `for' decl out of `for' statement.
-
-Wed Apr 26 13:09:16 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * configure.in (XCXXINCLUDES): Rename.
-
-Wed Mar 29 19:24:56 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * tree.h (insert): Return a value.
-
- * vector.h (insert): Cast iterator difference to size_type to
- avoid warning.
-
-Sun Feb 12 09:12:17 1995 Mike Stump <mrs@cygnus.com>
-
- * tree.h (rb_tree::max_size): Add definition when using GNU
- workaround.
-
-Thu Jan 12 01:37:42 1995 deanm@medulla.LABS.TEK.COM (Dean Messing)
-
- * configure.in (LIBDIR): Set to yes.
-
-Fri Dec 30 18:26:20 1994 Mike Stump <mrs@cygnus.com>
-
- * iterator.h: Add default template parameters where possible.
-
-Fri Dec 30 16:29:39 1994 Mike Stump <mrs@cygnus.com>
-
- * algo.h: Change rand to __rand to fix make check on linux systems.
-
-Tue Nov 29 15:30:30 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * Initial check-in, based on HP's October 21, 1994.
-
-
diff --git a/contrib/libg++/libstdc++/stl/Makefile.in b/contrib/libg++/libstdc++/stl/Makefile.in
deleted file mode 100644
index 438d81df2d77..000000000000
--- a/contrib/libg++/libstdc++/stl/Makefile.in
+++ /dev/null
@@ -1,12 +0,0 @@
-#### package, host, target, and site dependent Makefile fragments come in here.
-##
-
-STL_OBJECTS = tempbuf.o tree.o random.o
-
-stl.list: stamp-picdir $(STL_OBJECTS)
- @echo "$(STL_OBJECTS)" >stl.list
-
-# These are here for SunOS VPATH.
-tempbuf.o: tempbuf.cc
-random.o: random.cc
-tree.o: tree.cc
diff --git a/contrib/libg++/libstdc++/stl/README b/contrib/libg++/libstdc++/stl/README
deleted file mode 100644
index fad26dec0c0d..000000000000
--- a/contrib/libg++/libstdc++/stl/README
+++ /dev/null
@@ -1,86 +0,0 @@
-This directory contains Hewlett-Packard's implementation of
-the C++ Standard Template Library.
-It is the October 31, 1995 version.
-It has been extensively modified so it can be compiled by g++.
-(Version 2.6.1 or newer is recommended.)
-Some of these hacks are pretty ugly, but are needed to work around
-bugs in g++ (which we are working on).
-Thanks to Carsten Bormann <cabo@informatik.uni-bremen.de> for
-coming up with many of these work-arounds. However, I have
-come up with alternate (possibly inferior!) work-arounds in some cases.
-
-Note that this is based on a pre-Draft Standard for C++.
-Things are likely to change. For example, the header file names
-are very likely to change. The Allocator interface will change. Etc, etc.
-CYGNUS MAKES NO COMMITTMENT (yet) TO SUPPORT BACKWARD COMPATIBILITY FOR STL.
-
-For examples if things that should work, look in the ../tests directory.
-
-DOCUMENTATION:
-See http://www.cs.rpi.edu/~musser/stl.html on the World-Wide Web,
-or anonymous ftp to butler.hpl.hp.com, directory stl, file sharfile.Z.
-
- --Per Bothner
-Cygnus Support bothner@cygnus.com
-
------------
-Here is Carsten Bormann's notes on his changes:
-
-This is a set of seriously bletcherous hacks to HP's wonderful STL
-library. The objective is to hammer STL through GCC 2.6.1 (2.6.0
-seems to work, too, until you run into one of its bugs) so that us
-academic types can play with STL, not to make STL better in any way.
-
-Many of these changes make the library much less efficient. All
-changes (except vector<bool> -- see below) are due to bugs (or
-non-features) in GCC, not due to any problems in STL. Do not judge
-the performance of STL (code space, data space, compile time
-complexity, run time complexity) from these hacks -- they will be much
-better when GCC implements more of Standard C++. May the authors of
-STL forgive me.
-
-The class templates generally have been hacked in the following ways:
-
-1) Static data members have been eliminated, generally by making them
-non-static members or member functions (both of which generally
-seriously impairs performance -- e.g., each rb_tree iterator now
-carries a copy of NIL since there is no other place to put it). The
-template list<> has suffered most.
-
-Allocators are still static members, since I changed defalloc.h to
-have static members only. (This makes allocators less useful, but
-still useable.) (Note that a static member without data need not be
-initialized.)
-
-2) For member functions defined outside the class template, parameters
-of type tmpl<T>::something have been changed. In some cases, a class
-derived from the type has been used; in some cases the function simply
-has been made inline (again causing code bloat).
-
-3) A number of function templates in iterator.h have been declared
-again for derived classes defined by templates, usually by making them
-friend functions and using the name injection feature of GCC. I don't
-understand the relevant sections of the WP, so I don't know if this
-hack will cease to work in more conforming versions of GCC or become
-unneccessary or simply STL won't work with standard C++. Some of
-the necessary friends may still be missing...
-
-defalloc.h has lost much of its functionality: see above.
-
-bool.h has been made ineffective, since GCC supports bool.
-
-Finally, bit_vector has been changed into a proper specialization of
-vector<bool>.
-[Not in this libstdc++ release. -PB]
-
-demo.cc and Makefile build a small demo program for a number of
-features of STL. This is not a test suite, so I certainly have not
-found all my mistakes (could anyone in possession of such a test suite
-please run it over these hacks?). Send bug reports (that follow GNU
-bug reporting conventions) to
-
- cabo@informatik.uni-bremen.de
-
-Note that I generally do not have time to answer questions about STL.
-
-Carsten Bormann
diff --git a/contrib/libg++/libstdc++/stl/algo.h b/contrib/libg++/libstdc++/stl/algo.h
deleted file mode 100644
index e038d715a250..000000000000
--- a/contrib/libg++/libstdc++/stl/algo.h
+++ /dev/null
@@ -1,2386 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-#ifndef ALGO_H
-#define ALGO_H
-
-#include <stdlib.h>
-#ifndef __GNUG__
-#include <bool.h>
-#endif
-#include <pair.h>
-#include <iterator.h>
-#include <algobase.h>
-#include <heap.h>
-#include <tempbuf.h>
-
-template <class T>
-inline const T& __median(const T& a, const T& b, const T& c) {
- if (a < b)
- if (b < c)
- return b;
- else if (a < c)
- return c;
- else
- return a;
- else if (a < c)
- return a;
- else if (b < c)
- return c;
- else
- return b;
-}
-
-template <class T, class Compare>
-inline const T& __median(const T& a, const T& b, const T& c, Compare comp) {
- if (comp(a, b))
- if (comp(b, c))
- return b;
- else if (comp(a, c))
- return c;
- else
- return a;
- else if (comp(a, c))
- return a;
- else if (comp(b, c))
- return c;
- else
- return b;
-}
-
-template <class InputIterator, class Function>
-Function for_each(InputIterator first, InputIterator last, Function f) {
- while (first != last) f(*first++);
- return f;
-}
-
-template <class InputIterator, class T>
-InputIterator find(InputIterator first, InputIterator last, const T& value) {
- while (first != last && *first != value) ++first;
- return first;
-}
-
-template <class InputIterator, class Predicate>
-InputIterator find_if(InputIterator first, InputIterator last,
- Predicate pred) {
- while (first != last && !pred(*first)) ++first;
- return first;
-}
-
-template <class ForwardIterator>
-ForwardIterator adjacent_find(ForwardIterator first, ForwardIterator last) {
- if (first == last) return last;
- ForwardIterator next = first;
- while(++next != last) {
- if (*first == *next) return first;
- first = next;
- }
- return last;
-}
-
-template <class ForwardIterator, class BinaryPredicate>
-ForwardIterator adjacent_find(ForwardIterator first, ForwardIterator last,
- BinaryPredicate binary_pred) {
- if (first == last) return last;
- ForwardIterator next = first;
- while(++next != last) {
- if (binary_pred(*first, *next)) return first;
- first = next;
- }
- return last;
-}
-
-template <class InputIterator, class T, class Size>
-void count(InputIterator first, InputIterator last, const T& value,
- Size& n) {
- while (first != last)
- if (*first++ == value) ++n;
-}
-
-template <class InputIterator, class Predicate, class Size>
-void count_if(InputIterator first, InputIterator last, Predicate pred,
- Size& n) {
- while (first != last)
- if (pred(*first++)) ++n;
-}
-
-template <class ForwardIterator1, class ForwardIterator2, class Distance1,
- class Distance2>
-ForwardIterator1 __search(ForwardIterator1 first1, ForwardIterator1 last1,
- ForwardIterator2 first2, ForwardIterator2 last2,
- Distance1*, Distance2*) {
- Distance1 d1 = 0;
- distance(first1, last1, d1);
- Distance2 d2 = 0;
- distance(first2, last2, d2);
-
- if (d1 < d2) return last1;
-
- ForwardIterator1 current1 = first1;
- ForwardIterator2 current2 = first2;
-
- while (current2 != last2)
- if (*current1++ != *current2++)
- if (d1-- == d2)
- return last1;
- else {
- current1 = ++first1;
- current2 = first2;
- }
- return (current2 == last2) ? first1 : last1;
-}
-
-template <class ForwardIterator1, class ForwardIterator2>
-inline ForwardIterator1 search(ForwardIterator1 first1, ForwardIterator1 last1,
- ForwardIterator2 first2, ForwardIterator2 last2)
-{
- return __search(first1, last1, first2, last2, distance_type(first1),
- distance_type(first2));
-}
-
-template <class ForwardIterator1, class ForwardIterator2,
- class BinaryPredicate, class Distance1, class Distance2>
-ForwardIterator1 __search(ForwardIterator1 first1, ForwardIterator1 last1,
- ForwardIterator2 first2, ForwardIterator2 last2,
- BinaryPredicate binary_pred, Distance1*, Distance2*) {
- Distance1 d1 = 0;
- distance(first1, last1, d1);
- Distance2 d2 = 0;
- distance(first2, last2, d2);
-
- if (d1 < d2) return last1;
-
- ForwardIterator1 current1 = first1;
- ForwardIterator2 current2 = first2;
-
- while (current2 != last2)
- if (!binary_pred(*current1++, *current2++))
- if (d1-- == d2)
- return last1;
- else {
- current1 = ++first1;
- current2 = first2;
- }
- return (current2 == last2) ? first1 : last1;
-}
-
-template <class ForwardIterator1, class ForwardIterator2,
- class BinaryPredicate>
-inline ForwardIterator1 search(ForwardIterator1 first1, ForwardIterator1 last1,
- ForwardIterator2 first2, ForwardIterator2 last2,
- BinaryPredicate binary_pred) {
- return __search(first1, last1, first2, last2, binary_pred,
- distance_type(first1), distance_type(first2));
-}
-
-template <class ForwardIterator1, class ForwardIterator2>
-ForwardIterator2 swap_ranges(ForwardIterator1 first1, ForwardIterator1 last1,
- ForwardIterator2 first2) {
- while (first1 != last1) iter_swap(first1++, first2++);
- return first2;
-}
-
-template <class InputIterator, class OutputIterator, class UnaryOperation>
-OutputIterator transform(InputIterator first, InputIterator last,
- OutputIterator result, UnaryOperation op) {
- while (first != last) *result++ = op(*first++);
- return result;
-}
-
-template <class InputIterator1, class InputIterator2, class OutputIterator,
- class BinaryOperation>
-OutputIterator transform(InputIterator1 first1, InputIterator1 last1,
- InputIterator2 first2, OutputIterator result,
- BinaryOperation binary_op) {
- while (first1 != last1) *result++ = binary_op(*first1++, *first2++);
- return result;
-}
-
-template <class ForwardIterator, class T>
-void replace(ForwardIterator first, ForwardIterator last, const T& old_value,
- const T& new_value) {
- while (first != last) {
- if (*first == old_value) *first = new_value;
- ++first;
- }
-}
-
-template <class ForwardIterator, class Predicate, class T>
-void replace_if(ForwardIterator first, ForwardIterator last, Predicate pred,
- const T& new_value) {
- while (first != last) {
- if (pred(*first)) *first = new_value;
- ++first;
- }
-}
-
-template <class InputIterator, class OutputIterator, class T>
-OutputIterator replace_copy(InputIterator first, InputIterator last,
- OutputIterator result, const T& old_value,
- const T& new_value) {
- while (first != last) {
- *result++ = *first == old_value ? new_value : *first;
- ++first;
- }
- return result;
-}
-
-template <class Iterator, class OutputIterator, class Predicate, class T>
-OutputIterator replace_copy_if(Iterator first, Iterator last,
- OutputIterator result, Predicate pred,
- const T& new_value) {
- while (first != last) {
- *result++ = pred(*first) ? new_value : *first;
- ++first;
- }
- return result;
-}
-
-template <class ForwardIterator, class Generator>
-void generate(ForwardIterator first, ForwardIterator last, Generator gen) {
- while (first != last) *first++ = gen();
-}
-
-template <class OutputIterator, class Size, class Generator>
-OutputIterator generate_n(OutputIterator first, Size n, Generator gen) {
- while (n-- > 0) *first++ = gen();
- return first;
-}
-
-template <class InputIterator, class OutputIterator, class T>
-OutputIterator remove_copy(InputIterator first, InputIterator last,
- OutputIterator result, const T& value) {
- while (first != last) {
- if (*first != value) *result++ = *first;
- ++first;
- }
- return result;
-}
-
-template <class InputIterator, class OutputIterator, class Predicate>
-OutputIterator remove_copy_if(InputIterator first, InputIterator last,
- OutputIterator result, Predicate pred) {
- while (first != last) {
- if (!pred(*first)) *result++ = *first;
- ++first;
- }
- return result;
-}
-
-template <class ForwardIterator, class T>
-ForwardIterator remove(ForwardIterator first, ForwardIterator last,
- const T& value) {
- first = find(first, last, value);
- ForwardIterator next = first;
- return first == last ? first : remove_copy(++next, last, first, value);
-}
-
-template <class ForwardIterator, class Predicate>
-ForwardIterator remove_if(ForwardIterator first, ForwardIterator last,
- Predicate pred) {
- first = find_if(first, last, pred);
- ForwardIterator next = first;
- return first == last ? first : remove_copy_if(++next, last, first, pred);
-}
-
-template <class InputIterator, class ForwardIterator>
-ForwardIterator __unique_copy(InputIterator first, InputIterator last,
- ForwardIterator result, forward_iterator_tag) {
- *result = *first;
- while (++first != last)
- if (*result != *first) *++result = *first;
- return ++result;
-}
-
-template <class InputIterator, class BidirectionalIterator>
-inline BidirectionalIterator __unique_copy(InputIterator first,
- InputIterator last,
- BidirectionalIterator result,
- bidirectional_iterator_tag) {
- return __unique_copy(first, last, result, forward_iterator_tag());
-}
-
-template <class InputIterator, class RandomAccessIterator>
-inline RandomAccessIterator __unique_copy(InputIterator first,
- InputIterator last,
- RandomAccessIterator result,
- random_access_iterator_tag) {
- return __unique_copy(first, last, result, forward_iterator_tag());
-}
-
-template <class InputIterator, class OutputIterator, class T>
-OutputIterator __unique_copy(InputIterator first, InputIterator last,
- OutputIterator result, T*) {
- T value = *first;
- *result = value;
- while (++first != last)
- if (value != *first) {
- value = *first;
- *++result = value;
- }
- return ++result;
-}
-
-template <class InputIterator, class OutputIterator>
-inline OutputIterator __unique_copy(InputIterator first, InputIterator last,
- OutputIterator result,
- output_iterator_tag) {
- return __unique_copy(first, last, result, value_type(first));
-}
-
-template <class InputIterator, class OutputIterator>
-inline OutputIterator unique_copy(InputIterator first, InputIterator last,
- OutputIterator result) {
- if (first == last) return result;
- return __unique_copy(first, last, result, iterator_category(result));
-}
-template <class InputIterator, class ForwardIterator, class BinaryPredicate>
-ForwardIterator __unique_copy(InputIterator first, InputIterator last,
- ForwardIterator result,
- BinaryPredicate binary_pred,
- forward_iterator_tag) {
- *result = *first;
- while (++first != last)
- if (!binary_pred(*result, *first)) *++result = *first;
- return ++result;
-}
-
-template <class InputIterator, class BidirectionalIterator,
- class BinaryPredicate>
-inline BidirectionalIterator __unique_copy(InputIterator first,
- InputIterator last,
- BidirectionalIterator result,
- BinaryPredicate binary_pred,
- bidirectional_iterator_tag) {
- return __unique_copy(first, last, result, binary_pred,
- forward_iterator_tag());
-}
-
-template <class InputIterator, class RandomAccessIterator,
- class BinaryPredicate>
-inline RandomAccessIterator __unique_copy(InputIterator first,
- InputIterator last,
- RandomAccessIterator result,
- BinaryPredicate binary_pred,
- random_access_iterator_tag) {
- return __unique_copy(first, last, result, binary_pred,
- forward_iterator_tag());
-}
-
-template <class InputIterator, class OutputIterator, class BinaryPredicate,
- class T>
-OutputIterator __unique_copy(InputIterator first, InputIterator last,
- OutputIterator result,
- BinaryPredicate binary_pred, T*) {
- T value = *first;
- *result = value;
- while (++first != last)
- if (!binary_pred(value, *first)) {
- value = *first;
- *++result = value;
- }
- return ++result;
-}
-
-template <class InputIterator, class OutputIterator, class BinaryPredicate>
-inline OutputIterator __unique_copy(InputIterator first, InputIterator last,
- OutputIterator result,
- BinaryPredicate binary_pred,
- output_iterator_tag) {
- return __unique_copy(first, last, result, binary_pred, value_type(first));
-}
-
-template <class InputIterator, class OutputIterator, class BinaryPredicate>
-inline OutputIterator unique_copy(InputIterator first, InputIterator last,
- OutputIterator result,
- BinaryPredicate binary_pred) {
- if (first == last) return result;
- return __unique_copy(first, last, result, binary_pred,
- iterator_category(result));
-}
-
-template <class ForwardIterator>
-ForwardIterator unique(ForwardIterator first, ForwardIterator last) {
- first = adjacent_find(first, last);
- return unique_copy(first, last, first);
-}
-
-template <class ForwardIterator, class BinaryPredicate>
-ForwardIterator unique(ForwardIterator first, ForwardIterator last,
- BinaryPredicate binary_pred) {
- first = adjacent_find(first, last, binary_pred);
- return unique_copy(first, last, first, binary_pred);
-}
-
-template <class BidirectionalIterator>
-void __reverse(BidirectionalIterator first, BidirectionalIterator last,
- bidirectional_iterator_tag) {
- while (true)
- if (first == last || first == --last)
- return;
- else
- iter_swap(first++, last);
-}
-
-template <class RandomAccessIterator>
-void __reverse(RandomAccessIterator first, RandomAccessIterator last,
- random_access_iterator_tag) {
- while (first < last) iter_swap(first++, --last);
-}
-
-template <class BidirectionalIterator>
-inline void reverse(BidirectionalIterator first, BidirectionalIterator last) {
- __reverse(first, last, iterator_category(first));
-}
-
-template <class BidirectionalIterator, class OutputIterator>
-OutputIterator reverse_copy(BidirectionalIterator first,
- BidirectionalIterator last,
- OutputIterator result) {
- while (first != last) *result++ = *--last;
- return result;
-}
-
-template <class ForwardIterator, class Distance>
-void __rotate(ForwardIterator first, ForwardIterator middle,
- ForwardIterator last, Distance*, forward_iterator_tag) {
- for (ForwardIterator i = middle; ;) {
- iter_swap(first++, i++);
- if (first == middle) {
- if (i == last) return;
- middle = i;
- } else if (i == last)
- i = middle;
- }
-}
-
-template <class BidirectionalIterator, class Distance>
-void __rotate(BidirectionalIterator first, BidirectionalIterator middle,
- BidirectionalIterator last, Distance*,
- bidirectional_iterator_tag) {
- reverse(first, middle);
- reverse(middle, last);
- reverse(first, last);
-}
-
-template <class EuclideanRingElement>
-EuclideanRingElement __gcd(EuclideanRingElement m, EuclideanRingElement n)
-{
- while (n != 0) {
- EuclideanRingElement t = m % n;
- m = n;
- n = t;
- }
- return m;
-}
-
-template <class RandomAccessIterator, class Distance, class T>
-void __rotate_cycle(RandomAccessIterator first, RandomAccessIterator last,
- RandomAccessIterator initial, Distance shift, T*) {
- T value = *initial;
- RandomAccessIterator ptr1 = initial;
- RandomAccessIterator ptr2 = ptr1 + shift;
- while (ptr2 != initial) {
- *ptr1 = *ptr2;
- ptr1 = ptr2;
- if (last - ptr2 > shift)
- ptr2 += shift;
- else
- ptr2 = first + (shift - (last - ptr2));
- }
- *ptr1 = value;
-}
-
-template <class RandomAccessIterator, class Distance>
-void __rotate(RandomAccessIterator first, RandomAccessIterator middle,
- RandomAccessIterator last, Distance*,
- random_access_iterator_tag) {
- Distance n = __gcd(last - first, middle - first);
- while (n--)
- __rotate_cycle(first, last, first + n, middle - first,
- value_type(first));
-}
-
-template <class ForwardIterator>
-inline void rotate(ForwardIterator first, ForwardIterator middle,
- ForwardIterator last) {
- if (first == middle || middle == last) return;
- __rotate(first, middle, last, distance_type(first),
- iterator_category(first));
-}
-
-template <class ForwardIterator, class OutputIterator>
-OutputIterator rotate_copy(ForwardIterator first, ForwardIterator middle,
- ForwardIterator last, OutputIterator result) {
- return copy(first, middle, copy(middle, last, result));
-}
-
-unsigned long __long_random(unsigned long);
-
-template <class RandomAccessIterator, class Distance>
-void __random_shuffle(RandomAccessIterator first, RandomAccessIterator last,
- Distance*) {
- if (first == last) return;
- for (RandomAccessIterator i = first + 1; i != last; ++i)
- iter_swap(i, first + Distance(__long_random((i - first) + 1)));
-}
-
-template <class RandomAccessIterator>
-inline void random_shuffle(RandomAccessIterator first,
- RandomAccessIterator last) {
- __random_shuffle(first, last, distance_type(first));
-}
-
-template <class RandomAccessIterator, class RandomNumberGenerator>
-void random_shuffle(RandomAccessIterator first, RandomAccessIterator last,
- RandomNumberGenerator& __rand) {
- if (first == last) return;
- for (RandomAccessIterator i = first + 1; i != last; ++i)
- iter_swap(i, first + __rand((i - first) + 1));
-}
-
-template <class BidirectionalIterator, class Predicate>
-BidirectionalIterator partition(BidirectionalIterator first,
- BidirectionalIterator last, Predicate pred) {
- while (true) {
- while (true)
- if (first == last)
- return first;
- else if (pred(*first))
- ++first;
- else
- break;
- --last;
- while (true)
- if (first == last)
- return first;
- else if (!pred(*last))
- --last;
- else
- break;
- iter_swap(first, last);
- ++first;
- }
-}
-
-template <class ForwardIterator, class Predicate, class Distance>
-ForwardIterator __inplace_stable_partition(ForwardIterator first,
- ForwardIterator last,
- Predicate pred, Distance len) {
- if (len == 1) return pred(*first) ? last : first;
- ForwardIterator middle = first;
- advance(middle, len / 2);
- ForwardIterator
- first_cut = __inplace_stable_partition(first, middle, pred, len / 2);
- ForwardIterator
- second_cut = __inplace_stable_partition(middle, last, pred,
- len - len / 2);
- rotate(first_cut, middle, second_cut);
- len = 0;
- distance(middle, second_cut, len);
- advance(first_cut, len);
- return first_cut;
-}
-
-template <class ForwardIterator, class Pointer, class Predicate,
- class Distance, class T>
-ForwardIterator __stable_partition_adaptive(ForwardIterator first,
- ForwardIterator last,
- Predicate pred, Distance len,
- Pointer buffer,
- Distance buffer_size,
- Distance& fill_pointer, T*) {
- if (len <= buffer_size) {
- len = 0;
- ForwardIterator result1 = first;
- Pointer result2 = buffer;
- while (first != last && len < fill_pointer)
- if (pred(*first))
- *result1++ = *first++;
- else {
- *result2++ = *first++;
- ++len;
- }
- if (first != last) {
- raw_storage_iterator<Pointer, T> result3 = result2;
- while (first != last)
- if (pred(*first))
- *result1++ = *first++;
- else {
- *result3++ = *first++;
- ++len;
- }
- fill_pointer = len;
- }
- copy(buffer, buffer + len, result1);
- return result1;
- }
- ForwardIterator middle = first;
- advance(middle, len / 2);
- ForwardIterator first_cut = __stable_partition_adaptive
- (first, middle, pred, len / 2, buffer, buffer_size, fill_pointer,
- (T*)0);
- ForwardIterator second_cut = __stable_partition_adaptive
- (middle, last, pred, len - len / 2, buffer, buffer_size,
- fill_pointer, (T*)0);
- rotate(first_cut, middle, second_cut);
- len = 0;
- distance(middle, second_cut, len);
- advance(first_cut, len);
- return first_cut;
-}
-
-template <class ForwardIterator, class Predicate, class Pointer,
- class Distance>
-ForwardIterator __stable_partition(ForwardIterator first, ForwardIterator last,
- Predicate pred, Distance len,
- pair<Pointer, Distance> p) {
- if (p.first == 0)
- return __inplace_stable_partition(first, last, pred, len);
- Distance fill_pointer = 0;
- ForwardIterator result =
- __stable_partition_adaptive(first, last, pred, len, p.first, p.second,
- fill_pointer, value_type(first));
- destroy(p.first, p.first + fill_pointer);
- return_temporary_buffer(p.first);
- return result;
-}
-
-template <class ForwardIterator, class Predicate, class Distance>
-inline ForwardIterator __stable_partition_aux(ForwardIterator first,
- ForwardIterator last,
- Predicate pred, Distance*) {
- Distance len = 0;
- distance(first, last, len);
- return __stable_partition(first, last, pred, len,
- get_temporary_buffer(len, value_type(first)));
-}
-
-template <class ForwardIterator, class Predicate>
-inline ForwardIterator stable_partition(ForwardIterator first,
- ForwardIterator last,
- Predicate pred) {
- return __stable_partition_aux(first, last, pred, distance_type(first));
-}
-
-template <class RandomAccessIterator, class T>
-RandomAccessIterator __unguarded_partition(RandomAccessIterator first,
- RandomAccessIterator last,
- T pivot) {
- while (1) {
- while (*first < pivot) ++first;
- --last;
- while (pivot < *last) --last;
- if (!(first < last)) return first;
- iter_swap(first, last);
- ++first;
- }
-}
-
-template <class RandomAccessIterator, class T, class Compare>
-RandomAccessIterator __unguarded_partition(RandomAccessIterator first,
- RandomAccessIterator last,
- T pivot, Compare comp) {
- while (1) {
- while (comp(*first, pivot)) ++first;
- --last;
- while (comp(pivot, *last)) --last;
- if (!(first < last)) return first;
- iter_swap(first, last);
- ++first;
- }
-}
-
-const int __stl_threshold = 16;
-
-template <class RandomAccessIterator, class T>
-void __quick_sort_loop_aux(RandomAccessIterator first,
- RandomAccessIterator last, T*) {
- while (last - first > __stl_threshold) {
- RandomAccessIterator cut = __unguarded_partition
- (first, last, T(__median(*first, *(first + (last - first)/2),
- *(last - 1))));
- if (cut - first >= last - cut) {
- __quick_sort_loop(cut, last);
- last = cut;
- } else {
- __quick_sort_loop(first, cut);
- first = cut;
- }
- }
-}
-
-template <class RandomAccessIterator>
-inline void __quick_sort_loop(RandomAccessIterator first,
- RandomAccessIterator last) {
- __quick_sort_loop_aux(first, last, value_type(first));
-}
-
-template <class RandomAccessIterator, class T, class Compare>
-void __quick_sort_loop_aux(RandomAccessIterator first,
- RandomAccessIterator last, T*, Compare comp) {
- while (last - first > __stl_threshold) {
- RandomAccessIterator cut = __unguarded_partition
- (first, last, T(__median(*first, *(first + (last - first)/2),
- *(last - 1), comp)), comp);
- if (cut - first >= last - cut) {
- __quick_sort_loop(cut, last, comp);
- last = cut;
- } else {
- __quick_sort_loop(first, cut, comp);
- first = cut;
- }
- }
-}
-
-template <class RandomAccessIterator, class Compare>
-inline void __quick_sort_loop(RandomAccessIterator first,
- RandomAccessIterator last, Compare comp) {
- __quick_sort_loop_aux(first, last, value_type(first), comp);
-}
-
-template <class RandomAccessIterator, class T>
-void __unguarded_linear_insert(RandomAccessIterator last, T value) {
- RandomAccessIterator next = last;
- --next;
- while (value < *next) {
- *last = *next;
- last = next--;
- }
- *last = value;
-}
-
-template <class RandomAccessIterator, class T, class Compare>
-void __unguarded_linear_insert(RandomAccessIterator last, T value,
- Compare comp) {
- RandomAccessIterator next = last;
- --next;
- while (comp(value , *next)) {
- *last = *next;
- last = next--;
- }
- *last = value;
-}
-
-template <class RandomAccessIterator, class T>
-inline void __linear_insert(RandomAccessIterator first,
- RandomAccessIterator last, T*) {
- T value = *last;
- if (value < *first) {
- copy_backward(first, last, last + 1);
- *first = value;
- } else
- __unguarded_linear_insert(last, value);
-}
-
-template <class RandomAccessIterator, class T, class Compare>
-inline void __linear_insert(RandomAccessIterator first,
- RandomAccessIterator last, T*, Compare comp) {
- T value = *last;
- if (comp(value, *first)) {
- copy_backward(first, last, last + 1);
- *first = value;
- } else
- __unguarded_linear_insert(last, value, comp);
-}
-
-template <class RandomAccessIterator>
-void __insertion_sort(RandomAccessIterator first, RandomAccessIterator last) {
- if (first == last) return;
- for (RandomAccessIterator i = first + 1; i != last; ++i)
- __linear_insert(first, i, value_type(first));
-}
-
-template <class RandomAccessIterator, class Compare>
-void __insertion_sort(RandomAccessIterator first,
- RandomAccessIterator last, Compare comp) {
- if (first == last) return;
- for (RandomAccessIterator i = first + 1; i != last; ++i)
- __linear_insert(first, i, value_type(first), comp);
-}
-
-template <class RandomAccessIterator, class T>
-void __unguarded_insertion_sort_aux(RandomAccessIterator first,
- RandomAccessIterator last, T*) {
- for (RandomAccessIterator i = first; i != last; ++i)
- __unguarded_linear_insert(i, T(*i));
-}
-
-template <class RandomAccessIterator>
-inline void __unguarded_insertion_sort(RandomAccessIterator first,
- RandomAccessIterator last) {
- __unguarded_insertion_sort_aux(first, last, value_type(first));
-}
-
-template <class RandomAccessIterator, class T, class Compare>
-void __unguarded_insertion_sort_aux(RandomAccessIterator first,
- RandomAccessIterator last,
- T*, Compare comp) {
- for (RandomAccessIterator i = first; i != last; ++i)
- __unguarded_linear_insert(i, T(*i), comp);
-}
-
-template <class RandomAccessIterator, class Compare>
-inline void __unguarded_insertion_sort(RandomAccessIterator first,
- RandomAccessIterator last,
- Compare comp) {
- __unguarded_insertion_sort_aux(first, last, value_type(first), comp);
-}
-
-template <class RandomAccessIterator>
-void __final_insertion_sort(RandomAccessIterator first,
- RandomAccessIterator last) {
- if (last - first > __stl_threshold) {
- __insertion_sort(first, first + __stl_threshold);
- __unguarded_insertion_sort(first + __stl_threshold, last);
- } else
- __insertion_sort(first, last);
-}
-
-template <class RandomAccessIterator, class Compare>
-void __final_insertion_sort(RandomAccessIterator first,
- RandomAccessIterator last, Compare comp) {
- if (last - first > __stl_threshold) {
- __insertion_sort(first, first + __stl_threshold, comp);
- __unguarded_insertion_sort(first + __stl_threshold, last, comp);
- } else
- __insertion_sort(first, last, comp);
-}
-
-template <class RandomAccessIterator>
-void sort(RandomAccessIterator first, RandomAccessIterator last) {
- __quick_sort_loop(first, last);
- __final_insertion_sort(first, last);
-}
-
-template <class RandomAccessIterator, class Compare>
-void sort(RandomAccessIterator first, RandomAccessIterator last,
- Compare comp) {
- __quick_sort_loop(first, last, comp);
- __final_insertion_sort(first, last, comp);
-}
-
-template <class RandomAccessIterator>
-void __inplace_stable_sort(RandomAccessIterator first,
- RandomAccessIterator last) {
- if (last - first < 15) {
- __insertion_sort(first, last);
- return;
- }
- RandomAccessIterator middle = first + (last - first) / 2;
- __inplace_stable_sort(first, middle);
- __inplace_stable_sort(middle, last);
- __merge_without_buffer(first, middle, last, middle - first, last - middle);
-}
-
-template <class RandomAccessIterator, class Compare>
-void __inplace_stable_sort(RandomAccessIterator first,
- RandomAccessIterator last, Compare comp) {
- if (last - first < 15) {
- __insertion_sort(first, last, comp);
- return;
- }
- RandomAccessIterator middle = first + (last - first) / 2;
- __inplace_stable_sort(first, middle, comp);
- __inplace_stable_sort(middle, last, comp);
- __merge_without_buffer(first, middle, last, middle - first,
- last - middle, comp);
-}
-
-template <class RandomAccessIterator1, class RandomAccessIterator2,
- class Distance>
-void __merge_sort_loop(RandomAccessIterator1 first,
- RandomAccessIterator1 last,
- RandomAccessIterator2 result, Distance step_size) {
- Distance two_step = 2 * step_size;
-
- while (last - first >= two_step) {
- result = merge(first, first + step_size,
- first + step_size, first + two_step, result);
- first += two_step;
- }
- step_size = min(Distance(last - first), step_size);
-
- merge(first, first + step_size, first + step_size, last, result);
-}
-
-template <class RandomAccessIterator1, class RandomAccessIterator2,
- class Distance, class Compare>
-void __merge_sort_loop(RandomAccessIterator1 first,
- RandomAccessIterator1 last,
- RandomAccessIterator2 result, Distance step_size,
- Compare comp) {
- Distance two_step = 2 * step_size;
-
- while (last - first >= two_step) {
- result = merge(first, first + step_size,
- first + step_size, first + two_step, result, comp);
- first += two_step;
- }
- step_size = min(Distance(last - first), step_size);
-
- merge(first, first + step_size, first + step_size, last, result, comp);
-}
-
-const int __stl_chunk_size = 7;
-
-template <class RandomAccessIterator, class Distance>
-void __chunk_insertion_sort(RandomAccessIterator first,
- RandomAccessIterator last, Distance chunk_size) {
- while (last - first >= chunk_size) {
- __insertion_sort(first, first + chunk_size);
- first += chunk_size;
- }
- __insertion_sort(first, last);
-}
-
-template <class RandomAccessIterator, class Distance, class Compare>
-void __chunk_insertion_sort(RandomAccessIterator first,
- RandomAccessIterator last,
- Distance chunk_size, Compare comp) {
- while (last - first >= chunk_size) {
- __insertion_sort(first, first + chunk_size, comp);
- first += chunk_size;
- }
- __insertion_sort(first, last, comp);
-}
-
-template <class RandomAccessIterator, class Pointer, class Distance, class T>
-void __merge_sort_with_buffer(RandomAccessIterator first,
- RandomAccessIterator last,
- Pointer buffer, Distance*, T*) {
- Distance len = last - first;
- Pointer buffer_last = buffer + len;
-
- Distance step_size = __stl_chunk_size;
- __chunk_insertion_sort(first, last, step_size);
-
- while (step_size < len) {
- __merge_sort_loop(first, last, buffer, step_size);
- step_size *= 2;
- __merge_sort_loop(buffer, buffer_last, first, step_size);
- step_size *= 2;
- }
-}
-
-template <class RandomAccessIterator, class Pointer, class Distance, class T,
- class Compare>
-void __merge_sort_with_buffer(RandomAccessIterator first,
- RandomAccessIterator last, Pointer buffer,
- Distance*, T*, Compare comp) {
- Distance len = last - first;
- Pointer buffer_last = buffer + len;
-
- Distance step_size = __stl_chunk_size;
- __chunk_insertion_sort(first, last, step_size, comp);
-
- while (step_size < len) {
- __merge_sort_loop(first, last, buffer, step_size, comp);
- step_size *= 2;
- __merge_sort_loop(buffer, buffer_last, first, step_size, comp);
- step_size *= 2;
- }
-}
-
-template <class RandomAccessIterator, class Pointer, class Distance, class T>
-void __stable_sort_adaptive(RandomAccessIterator first,
- RandomAccessIterator last, Pointer buffer,
- Distance buffer_size, T*) {
- Distance len = (last - first + 1) / 2;
- RandomAccessIterator middle = first + len;
- if (len > buffer_size) {
- __stable_sort_adaptive(first, middle, buffer, buffer_size, (T*)0);
- __stable_sort_adaptive(middle, last, buffer, buffer_size, (T*)0);
- } else {
- __merge_sort_with_buffer(first, middle, buffer, (Distance*)0, (T*)0);
- __merge_sort_with_buffer(middle, last, buffer, (Distance*)0, (T*)0);
- }
- __merge_adaptive(first, middle, last, Distance(middle - first),
- Distance(last - middle), buffer, buffer_size, (T*)0);
-}
-
-template <class RandomAccessIterator, class Pointer, class Distance, class T,
- class Compare>
-void __stable_sort_adaptive(RandomAccessIterator first,
- RandomAccessIterator last, Pointer buffer,
- Distance buffer_size, T*, Compare comp) {
- Distance len = (last - first + 1) / 2;
- RandomAccessIterator middle = first + len;
- if (len > buffer_size) {
- __stable_sort_adaptive(first, middle, buffer, buffer_size, (T*)0, comp);
- __stable_sort_adaptive(middle, last, buffer, buffer_size, (T*)0, comp);
- } else {
- __merge_sort_with_buffer(first, middle, buffer, (Distance*)0, (T*)0,
- comp);
- __merge_sort_with_buffer(middle, last, buffer, (Distance*)0, (T*)0,
- comp);
- }
- __merge_adaptive(first, middle, last, Distance(middle - first),
- Distance(last - middle), buffer, buffer_size, (T*)0, comp);
-}
-
-template <class RandomAccessIterator, class Pointer, class Distance, class T>
-inline void __stable_sort(RandomAccessIterator first,
- RandomAccessIterator last,
- pair<Pointer, Distance> p, T*) {
- if (p.first == 0) {
- __inplace_stable_sort(first, last);
- return;
- }
- Distance len = min(p.second, last - first);
- copy(first, first + len, raw_storage_iterator<Pointer, T>(p.first));
- __stable_sort_adaptive(first, last, p.first, p.second, (T*)0);
- destroy(p.first, p.first + len);
- return_temporary_buffer(p.first);
-}
-
-template <class RandomAccessIterator, class Pointer, class Distance, class T,
- class Compare>
-inline void __stable_sort(RandomAccessIterator first,
- RandomAccessIterator last,
- pair<Pointer, Distance> p, T*, Compare comp) {
- if (p.first == 0) {
- __inplace_stable_sort(first, last, comp);
- return;
- }
- Distance len = min(p.second, last - first);
- copy(first, first + len, raw_storage_iterator<Pointer, T>(p.first));
- __stable_sort_adaptive(first, last, p.first, p.second, (T*)0, comp);
- destroy(p.first, p.first + len);
- return_temporary_buffer(p.first);
-}
-
-template <class RandomAccessIterator, class T, class Distance>
-inline void __stable_sort_aux(RandomAccessIterator first,
- RandomAccessIterator last, T*, Distance*) {
- __stable_sort(first, last, get_temporary_buffer(Distance(last - first),
- (T*)0), (T*)0);
-}
-
-template <class RandomAccessIterator, class T, class Distance, class Compare>
-inline void __stable_sort_aux(RandomAccessIterator first,
- RandomAccessIterator last, T*, Distance*,
- Compare comp) {
- __stable_sort(first, last, get_temporary_buffer(Distance(last - first),
- (T*)0), (T*)0, comp);
-}
-
-template <class RandomAccessIterator>
-inline void stable_sort(RandomAccessIterator first,
- RandomAccessIterator last) {
- __stable_sort_aux(first, last, value_type(first), distance_type(first));
-}
-
-template <class RandomAccessIterator, class Compare>
-inline void stable_sort(RandomAccessIterator first,
- RandomAccessIterator last, Compare comp) {
- __stable_sort_aux(first, last, value_type(first), distance_type(first),
- comp);
-}
-
-template <class RandomAccessIterator, class T>
-void __partial_sort(RandomAccessIterator first, RandomAccessIterator middle,
- RandomAccessIterator last, T*) {
- make_heap(first, middle);
- for (RandomAccessIterator i = middle; i < last; ++i)
- if (*i < *first)
- __pop_heap(first, middle, i, T(*i), distance_type(first));
- sort_heap(first, middle);
-}
-
-template <class RandomAccessIterator>
-inline void partial_sort(RandomAccessIterator first,
- RandomAccessIterator middle,
- RandomAccessIterator last) {
- __partial_sort(first, middle, last, value_type(first));
-}
-
-template <class RandomAccessIterator, class T, class Compare>
-void __partial_sort(RandomAccessIterator first, RandomAccessIterator middle,
- RandomAccessIterator last, T*, Compare comp) {
- make_heap(first, middle, comp);
- for (RandomAccessIterator i = middle; i < last; ++i)
- if (comp(*i, *first))
- __pop_heap(first, middle, i, T(*i), comp, distance_type(first));
- sort_heap(first, middle, comp);
-}
-
-template <class RandomAccessIterator, class Compare>
-inline void partial_sort(RandomAccessIterator first,
- RandomAccessIterator middle,
- RandomAccessIterator last, Compare comp) {
- __partial_sort(first, middle, last, value_type(first), comp);
-}
-
-template <class InputIterator, class RandomAccessIterator, class Distance,
- class T>
-RandomAccessIterator __partial_sort_copy(InputIterator first,
- InputIterator last,
- RandomAccessIterator result_first,
- RandomAccessIterator result_last,
- Distance*, T*) {
- if (result_first == result_last) return result_last;
- RandomAccessIterator result_real_last = result_first;
- while(first != last && result_real_last != result_last)
- *result_real_last++ = *first++;
- make_heap(result_first, result_real_last);
- while (first != last) {
- if (*first < *result_first)
- __adjust_heap(result_first, Distance(0),
- Distance(result_real_last - result_first), T(*first));
- ++first;
- }
- sort_heap(result_first, result_real_last);
- return result_real_last;
-}
-
-template <class InputIterator, class RandomAccessIterator>
-inline RandomAccessIterator
-partial_sort_copy(InputIterator first, InputIterator last,
- RandomAccessIterator result_first,
- RandomAccessIterator result_last) {
- return __partial_sort_copy(first, last, result_first, result_last,
- distance_type(result_first), value_type(first));
-}
-
-template <class InputIterator, class RandomAccessIterator, class Compare,
- class Distance, class T>
-RandomAccessIterator __partial_sort_copy(InputIterator first,
- InputIterator last,
- RandomAccessIterator result_first,
- RandomAccessIterator result_last,
- Compare comp, Distance*, T*) {
- if (result_first == result_last) return result_last;
- RandomAccessIterator result_real_last = result_first;
- while(first != last && result_real_last != result_last)
- *result_real_last++ = *first++;
- make_heap(result_first, result_real_last, comp);
- while (first != last) {
- if (comp(*first, *result_first))
- __adjust_heap(result_first, Distance(0),
- Distance(result_real_last - result_first), T(*first),
- comp);
- ++first;
- }
- sort_heap(result_first, result_real_last, comp);
- return result_real_last;
-}
-
-template <class InputIterator, class RandomAccessIterator, class Compare>
-inline RandomAccessIterator
-partial_sort_copy(InputIterator first, InputIterator last,
- RandomAccessIterator result_first,
- RandomAccessIterator result_last, Compare comp) {
- return __partial_sort_copy(first, last, result_first, result_last, comp,
- distance_type(result_first), value_type(first));
-}
-
-template <class RandomAccessIterator, class T>
-void __nth_element(RandomAccessIterator first, RandomAccessIterator nth,
- RandomAccessIterator last, T*) {
- while (last - first > 3) {
- RandomAccessIterator cut = __unguarded_partition
- (first, last, T(__median(*first, *(first + (last - first)/2),
- *(last - 1))));
- if (cut <= nth)
- first = cut;
- else
- last = cut;
- }
- __insertion_sort(first, last);
-}
-
-template <class RandomAccessIterator>
-inline void nth_element(RandomAccessIterator first, RandomAccessIterator nth,
- RandomAccessIterator last) {
- __nth_element(first, nth, last, value_type(first));
-}
-
-template <class RandomAccessIterator, class T, class Compare>
-void __nth_element(RandomAccessIterator first, RandomAccessIterator nth,
- RandomAccessIterator last, T*, Compare comp) {
- while (last - first > 3) {
- RandomAccessIterator cut = __unguarded_partition
- (first, last, T(__median(*first, *(first + (last - first)/2),
- *(last - 1), comp)), comp);
- if (cut <= nth)
- first = cut;
- else
- last = cut;
- }
- __insertion_sort(first, last, comp);
-}
-
-template <class RandomAccessIterator, class Compare>
-inline void nth_element(RandomAccessIterator first, RandomAccessIterator nth,
- RandomAccessIterator last, Compare comp) {
- __nth_element(first, nth, last, value_type(first), comp);
-}
-
-template <class ForwardIterator, class T, class Distance>
-ForwardIterator __lower_bound(ForwardIterator first, ForwardIterator last,
- const T& value, Distance*,
- forward_iterator_tag) {
- Distance len = 0;
- distance(first, last, len);
- Distance half;
- ForwardIterator middle;
-
- while (len > 0) {
- half = len / 2;
- middle = first;
- advance(middle, half);
- if (*middle < value) {
- first = middle;
- ++first;
- len = len - half - 1;
- } else
- len = half;
- }
- return first;
-}
-
-template <class ForwardIterator, class T, class Distance>
-inline ForwardIterator __lower_bound(ForwardIterator first,
- ForwardIterator last,
- const T& value, Distance*,
- bidirectional_iterator_tag) {
- return __lower_bound(first, last, value, (Distance*)0,
- forward_iterator_tag());
-}
-
-template <class RandomAccessIterator, class T, class Distance>
-RandomAccessIterator __lower_bound(RandomAccessIterator first,
- RandomAccessIterator last, const T& value,
- Distance*, random_access_iterator_tag) {
- Distance len = last - first;
- Distance half;
- RandomAccessIterator middle;
-
- while (len > 0) {
- half = len / 2;
- middle = first + half;
- if (*middle < value) {
- first = middle + 1;
- len = len - half - 1;
- } else
- len = half;
- }
- return first;
-}
-
-template <class ForwardIterator, class T>
-inline ForwardIterator lower_bound(ForwardIterator first, ForwardIterator last,
- const T& value) {
- return __lower_bound(first, last, value, distance_type(first),
- iterator_category(first));
-}
-
-template <class ForwardIterator, class T, class Compare, class Distance>
-ForwardIterator __lower_bound(ForwardIterator first, ForwardIterator last,
- const T& value, Compare comp, Distance*,
- forward_iterator_tag) {
- Distance len = 0;
- distance(first, last, len);
- Distance half;
- ForwardIterator middle;
-
- while (len > 0) {
- half = len / 2;
- middle = first;
- advance(middle, half);
- if (comp(*middle, value)) {
- first = middle;
- ++first;
- len = len - half - 1;
- } else
- len = half;
- }
- return first;
-}
-
-template <class ForwardIterator, class T, class Compare, class Distance>
-inline ForwardIterator __lower_bound(ForwardIterator first,
- ForwardIterator last,
- const T& value, Compare comp, Distance*,
- bidirectional_iterator_tag) {
- return __lower_bound(first, last, value, comp, (Distance*)0,
- forward_iterator_tag());
-}
-
-template <class RandomAccessIterator, class T, class Compare, class Distance>
-RandomAccessIterator __lower_bound(RandomAccessIterator first,
- RandomAccessIterator last,
- const T& value, Compare comp, Distance*,
- random_access_iterator_tag) {
- Distance len = last - first;
- Distance half;
- RandomAccessIterator middle;
-
- while (len > 0) {
- half = len / 2;
- middle = first + half;
- if (comp(*middle, value)) {
- first = middle + 1;
- len = len - half - 1;
- } else
- len = half;
- }
- return first;
-}
-
-template <class ForwardIterator, class T, class Compare>
-inline ForwardIterator lower_bound(ForwardIterator first, ForwardIterator last,
- const T& value, Compare comp) {
- return __lower_bound(first, last, value, comp, distance_type(first),
- iterator_category(first));
-}
-
-template <class ForwardIterator, class T, class Distance>
-ForwardIterator __upper_bound(ForwardIterator first, ForwardIterator last,
- const T& value, Distance*,
- forward_iterator_tag) {
- Distance len = 0;
- distance(first, last, len);
- Distance half;
- ForwardIterator middle;
-
- while (len > 0) {
- half = len / 2;
- middle = first;
- advance(middle, half);
- if (value < *middle)
- len = half;
- else {
- first = middle;
- ++first;
- len = len - half - 1;
- }
- }
- return first;
-}
-
-template <class ForwardIterator, class T, class Distance>
-inline ForwardIterator __upper_bound(ForwardIterator first,
- ForwardIterator last,
- const T& value, Distance*,
- bidirectional_iterator_tag) {
- return __upper_bound(first, last, value, (Distance*)0,
- forward_iterator_tag());
-}
-
-template <class RandomAccessIterator, class T, class Distance>
-RandomAccessIterator __upper_bound(RandomAccessIterator first,
- RandomAccessIterator last, const T& value,
- Distance*, random_access_iterator_tag) {
- Distance len = last - first;
- Distance half;
- RandomAccessIterator middle;
-
- while (len > 0) {
- half = len / 2;
- middle = first + half;
- if (value < *middle)
- len = half;
- else {
- first = middle + 1;
- len = len - half - 1;
- }
- }
- return first;
-}
-
-template <class ForwardIterator, class T>
-inline ForwardIterator upper_bound(ForwardIterator first, ForwardIterator last,
- const T& value) {
- return __upper_bound(first, last, value, distance_type(first),
- iterator_category(first));
-}
-
-template <class ForwardIterator, class T, class Compare, class Distance>
-ForwardIterator __upper_bound(ForwardIterator first, ForwardIterator last,
- const T& value, Compare comp, Distance*,
- forward_iterator_tag) {
- Distance len = 0;
- distance(first, last, len);
- Distance half;
- ForwardIterator middle;
-
- while (len > 0) {
- half = len / 2;
- middle = first;
- advance(middle, half);
- if (comp(value, *middle))
- len = half;
- else {
- first = middle;
- ++first;
- len = len - half - 1;
- }
- }
- return first;
-}
-
-template <class ForwardIterator, class T, class Compare, class Distance>
-inline ForwardIterator __upper_bound(ForwardIterator first,
- ForwardIterator last,
- const T& value, Compare comp, Distance*,
- bidirectional_iterator_tag) {
- return __upper_bound(first, last, value, comp, (Distance*)0,
- forward_iterator_tag());
-}
-
-template <class RandomAccessIterator, class T, class Compare, class Distance>
-RandomAccessIterator __upper_bound(RandomAccessIterator first,
- RandomAccessIterator last,
- const T& value, Compare comp, Distance*,
- random_access_iterator_tag) {
- Distance len = last - first;
- Distance half;
- RandomAccessIterator middle;
-
- while (len > 0) {
- half = len / 2;
- middle = first + half;
- if (comp(value, *middle))
- len = half;
- else {
- first = middle + 1;
- len = len - half - 1;
- }
- }
- return first;
-}
-
-template <class ForwardIterator, class T, class Compare>
-inline ForwardIterator upper_bound(ForwardIterator first, ForwardIterator last,
- const T& value, Compare comp) {
- return __upper_bound(first, last, value, comp, distance_type(first),
- iterator_category(first));
-}
-
-template <class ForwardIterator, class T, class Distance>
-pair<ForwardIterator, ForwardIterator>
-__equal_range(ForwardIterator first, ForwardIterator last, const T& value,
- Distance*, forward_iterator_tag) {
- Distance len = 0;
- distance(first, last, len);
- Distance half;
- ForwardIterator middle, left, right;
-
- while (len > 0) {
- half = len / 2;
- middle = first;
- advance(middle, half);
- if (*middle < value) {
- first = middle;
- ++first;
- len = len - half - 1;
- } else if (value < *middle)
- len = half;
- else {
- left = lower_bound(first, middle, value);
- advance(first, len);
- right = upper_bound(++middle, first, value);
- return pair<ForwardIterator, ForwardIterator>(left, right);
- }
- }
- return pair<ForwardIterator, ForwardIterator>(first, first);
-}
-
-template <class ForwardIterator, class T, class Distance>
-inline pair<ForwardIterator, ForwardIterator>
-__equal_range(ForwardIterator first, ForwardIterator last, const T& value,
- Distance*, bidirectional_iterator_tag) {
- return __equal_range(first, last, value, (Distance*)0,
- forward_iterator_tag());
-}
-
-template <class RandomAccessIterator, class T, class Distance>
-pair<RandomAccessIterator, RandomAccessIterator>
-__equal_range(RandomAccessIterator first, RandomAccessIterator last,
- const T& value, Distance*, random_access_iterator_tag) {
- Distance len = last - first;
- Distance half;
- RandomAccessIterator middle, left, right;
-
- while (len > 0) {
- half = len / 2;
- middle = first + half;
- if (*middle < value) {
- first = middle + 1;
- len = len - half - 1;
- } else if (value < *middle)
- len = half;
- else {
- left = lower_bound(first, middle, value);
- right = upper_bound(++middle, first + len, value);
- return pair<RandomAccessIterator, RandomAccessIterator>(left,
- right);
- }
- }
- return pair<RandomAccessIterator, RandomAccessIterator>(first, first);
-}
-
-template <class ForwardIterator, class T>
-inline pair<ForwardIterator, ForwardIterator>
-equal_range(ForwardIterator first, ForwardIterator last, const T& value) {
- return __equal_range(first, last, value, distance_type(first),
- iterator_category(first));
-}
-
-template <class ForwardIterator, class T, class Compare, class Distance>
-pair<ForwardIterator, ForwardIterator>
-__equal_range(ForwardIterator first, ForwardIterator last, const T& value,
- Compare comp, Distance*, forward_iterator_tag) {
- Distance len = 0;
- distance(first, last, len);
- Distance half;
- ForwardIterator middle, left, right;
-
- while (len > 0) {
- half = len / 2;
- middle = first;
- advance(middle, half);
- if (comp(*middle, value)) {
- first = middle;
- ++first;
- len = len - half - 1;
- } else if (comp(value, *middle))
- len = half;
- else {
- left = lower_bound(first, middle, value, comp);
- advance(first, len);
- right = upper_bound(++middle, first, value, comp);
- return pair<ForwardIterator, ForwardIterator>(left, right);
- }
- }
- return pair<ForwardIterator, ForwardIterator>(first, first);
-}
-
-template <class ForwardIterator, class T, class Compare, class Distance>
-inline pair<ForwardIterator, ForwardIterator>
-__equal_range(ForwardIterator first, ForwardIterator last, const T& value,
- Compare comp, Distance*, bidirectional_iterator_tag) {
- return __equal_range(first, last, value, comp, (Distance*)0,
- forward_iterator_tag());
-}
-
-template <class RandomAccessIterator, class T, class Compare, class Distance>
-pair<RandomAccessIterator, RandomAccessIterator>
-__equal_range(RandomAccessIterator first, RandomAccessIterator last,
- const T& value, Compare comp, Distance*,
- random_access_iterator_tag) {
- Distance len = last - first;
- Distance half;
- RandomAccessIterator middle, left, right;
-
- while (len > 0) {
- half = len / 2;
- middle = first + half;
- if (comp(*middle, value)) {
- first = middle + 1;
- len = len - half - 1;
- } else if (comp(value, *middle))
- len = half;
- else {
- left = lower_bound(first, middle, value, comp);
- right = upper_bound(++middle, first + len, value, comp);
- return pair<RandomAccessIterator, RandomAccessIterator>(left,
- right);
- }
- }
- return pair<RandomAccessIterator, RandomAccessIterator>(first, first);
-}
-
-template <class ForwardIterator, class T, class Compare>
-inline pair<ForwardIterator, ForwardIterator>
-equal_range(ForwardIterator first, ForwardIterator last, const T& value,
- Compare comp) {
- return __equal_range(first, last, value, comp, distance_type(first),
- iterator_category(first));
-}
-
-template <class ForwardIterator, class T>
-bool binary_search(ForwardIterator first, ForwardIterator last,
- const T& value) {
- ForwardIterator i = lower_bound(first, last, value);
- return i != last && !(value < *i);
-}
-
-template <class ForwardIterator, class T, class Compare>
-bool binary_search(ForwardIterator first, ForwardIterator last, const T& value,
- Compare comp) {
- ForwardIterator i = lower_bound(first, last, value, comp);
- return i != last && !comp(value, *i);
-}
-
-template <class InputIterator1, class InputIterator2, class OutputIterator>
-OutputIterator merge(InputIterator1 first1, InputIterator1 last1,
- InputIterator2 first2, InputIterator2 last2,
- OutputIterator result) {
- while (first1 != last1 && first2 != last2)
- if (*first2 < *first1)
- *result++ = *first2++;
- else
- *result++ = *first1++;
- return copy(first2, last2, copy(first1, last1, result));
-}
-
-template <class InputIterator1, class InputIterator2, class OutputIterator,
- class Compare>
-OutputIterator merge(InputIterator1 first1, InputIterator1 last1,
- InputIterator2 first2, InputIterator2 last2,
- OutputIterator result, Compare comp) {
- while (first1 != last1 && first2 != last2)
- if (comp(*first2, *first1))
- *result++ = *first2++;
- else
- *result++ = *first1++;
- return copy(first2, last2, copy(first1, last1, result));
-}
-
-template <class BidirectionalIterator, class Distance>
-void __merge_without_buffer(BidirectionalIterator first,
- BidirectionalIterator middle,
- BidirectionalIterator last,
- Distance len1, Distance len2) {
- if (len1 == 0 || len2 == 0) return;
- if (len1 + len2 == 2) {
- if (*middle < *first) iter_swap(first, middle);
- return;
- }
- BidirectionalIterator first_cut = first;
- BidirectionalIterator second_cut = middle;
- Distance len11 = 0;
- Distance len22 = 0;
- if (len1 > len2) {
- len11 = len1 / 2;
- advance(first_cut, len11);
- second_cut = lower_bound(middle, last, *first_cut);
- distance(middle, second_cut, len22);
- } else {
- len22 = len2 / 2;
- advance(second_cut, len22);
- first_cut = upper_bound(first, middle, *second_cut);
- distance(first, first_cut, len11);
- }
- rotate(first_cut, middle, second_cut);
- BidirectionalIterator new_middle = first_cut;
- advance(new_middle, len22);
- __merge_without_buffer(first, first_cut, new_middle, len11, len22);
- __merge_without_buffer(new_middle, second_cut, last, len1 - len11,
- len2 - len22);
-}
-
-template <class BidirectionalIterator, class Distance, class Compare>
-void __merge_without_buffer(BidirectionalIterator first,
- BidirectionalIterator middle,
- BidirectionalIterator last,
- Distance len1, Distance len2, Compare comp) {
- if (len1 == 0 || len2 == 0) return;
- if (len1 + len2 == 2) {
- if (comp(*middle, *first)) iter_swap(first, middle);
- return;
- }
- BidirectionalIterator first_cut = first;
- BidirectionalIterator second_cut = middle;
- Distance len11 = 0;
- Distance len22 = 0;
- if (len1 > len2) {
- len11 = len1 / 2;
- advance(first_cut, len11);
- second_cut = lower_bound(middle, last, *first_cut, comp);
- distance(middle, second_cut, len22);
- } else {
- len22 = len2 / 2;
- advance(second_cut, len22);
- first_cut = upper_bound(first, middle, *second_cut, comp);
- distance(first, first_cut, len11);
- }
- rotate(first_cut, middle, second_cut);
- BidirectionalIterator new_middle = first_cut;
- advance(new_middle, len22);
- __merge_without_buffer(first, first_cut, new_middle, len11, len22, comp);
- __merge_without_buffer(new_middle, second_cut, last, len1 - len11,
- len2 - len22, comp);
-}
-
-
-template <class InputIterator, class OutputIterator>
-OutputIterator __borland_bugfix_copy(InputIterator first, InputIterator last,
- OutputIterator result) {
-// this is used in __rotate_adaptive to work around some obscure Borland
-// bug. It is the same as copy, but with a different (and appropriate) name.
- while (first != last) *result++ = *first++;
- return result;
-}
-
-template <class BidirectionalIterator1, class BidirectionalIterator2,
- class Distance>
-BidirectionalIterator1 __rotate_adaptive(BidirectionalIterator1 first,
- BidirectionalIterator1 middle,
- BidirectionalIterator1 last,
- Distance len1, Distance len2,
- BidirectionalIterator2 buffer,
- Distance buffer_size) {
- BidirectionalIterator2 buffer_end;
- if (len1 > len2 && len2 <= buffer_size) {
- buffer_end = __borland_bugfix_copy(middle, last, buffer);
- copy_backward(first, middle, last);
- return copy(buffer, buffer_end, first);
- } else if (len1 <= buffer_size) {
- buffer_end = __borland_bugfix_copy(first, middle, buffer);
- copy(middle, last, first);
- return copy_backward(buffer, buffer_end, last);
- } else {
- rotate(first, middle, last);
- advance(first, len2);
- return first;
- }
-}
-
-template <class BidirectionalIterator1, class BidirectionalIterator2,
- class BidirectionalIterator3>
-BidirectionalIterator3 __merge_backward(BidirectionalIterator1 first1,
- BidirectionalIterator1 last1,
- BidirectionalIterator2 first2,
- BidirectionalIterator2 last2,
- BidirectionalIterator3 result) {
- if (first1 == last1) return copy_backward(first2, last2, result);
- if (first2 == last2) return copy_backward(first1, last1, result);
- --last1;
- --last2;
- while (true) {
- if (*last2 < *last1) {
- *--result = *last1;
- if (first1 == last1) return copy_backward(first2, ++last2, result);
- --last1;
- } else {
- *--result = *last2;
- if (first2 == last2) return copy_backward(first1, ++last1, result);
- --last2;
- }
- }
-}
-
-template <class BidirectionalIterator1, class BidirectionalIterator2,
- class BidirectionalIterator3, class Compare>
-BidirectionalIterator3 __merge_backward(BidirectionalIterator1 first1,
- BidirectionalIterator1 last1,
- BidirectionalIterator2 first2,
- BidirectionalIterator2 last2,
- BidirectionalIterator3 result,
- Compare comp) {
- if (first1 == last1) return copy_backward(first2, last2, result);
- if (first2 == last2) return copy_backward(first1, last1, result);
- --last1;
- --last2;
- while (true) {
- if (comp(*last2, *last1)) {
- *--result = *last1;
- if (first1 == last1) return copy_backward(first2, ++last2, result);
- --last1;
- } else {
- *--result = *last2;
- if (first2 == last2) return copy_backward(first1, ++last1, result);
- --last2;
- }
- }
-}
-
-template <class BidirectionalIterator, class Distance, class Pointer, class T>
-void __merge_adaptive(BidirectionalIterator first,
- BidirectionalIterator middle,
- BidirectionalIterator last, Distance len1, Distance len2,
- Pointer buffer, Distance buffer_size, T*) {
- if (len1 <= len2 && len1 <= buffer_size) {
- Pointer end_buffer = copy(first, middle, buffer);
- merge(buffer, end_buffer, middle, last, first);
- } else if (len2 <= buffer_size) {
- Pointer end_buffer = copy(middle, last, buffer);
- __merge_backward(first, middle, buffer, end_buffer, last);
- } else {
- BidirectionalIterator first_cut = first;
- BidirectionalIterator second_cut = middle;
- Distance len11 = 0;
- Distance len22 = 0;
- if (len1 > len2) {
- len11 = len1 / 2;
- advance(first_cut, len11);
- second_cut = lower_bound(middle, last, *first_cut);
- distance(middle, second_cut, len22);
- } else {
- len22 = len2 / 2;
- advance(second_cut, len22);
- first_cut = upper_bound(first, middle, *second_cut);
- distance(first, first_cut, len11);
- }
- BidirectionalIterator new_middle =
- __rotate_adaptive(first_cut, middle, second_cut, len1 - len11,
- len22, buffer, buffer_size);
- __merge_adaptive(first, first_cut, new_middle, len11, len22, buffer,
- buffer_size, (T*)0);
- __merge_adaptive(new_middle, second_cut, last, len1 - len11,
- len2 - len22, buffer, buffer_size, (T*)0);
- }
-}
-
-template <class BidirectionalIterator, class Distance, class Pointer, class T,
- class Compare>
-void __merge_adaptive(BidirectionalIterator first,
- BidirectionalIterator middle,
- BidirectionalIterator last, Distance len1, Distance len2,
- Pointer buffer, Distance buffer_size, T*, Compare comp) {
- if (len1 <= len2 && len1 <= buffer_size) {
- Pointer end_buffer = copy(first, middle, buffer);
- merge(buffer, end_buffer, middle, last, first, comp);
- } else if (len2 <= buffer_size) {
- Pointer end_buffer = copy(middle, last, buffer);
- __merge_backward(first, middle, buffer, end_buffer, last, comp);
- } else {
- BidirectionalIterator first_cut = first;
- BidirectionalIterator second_cut = middle;
- Distance len11 = 0;
- Distance len22 = 0;
- if (len1 > len2) {
- len11 = len1 / 2;
- advance(first_cut, len11);
- second_cut = lower_bound(middle, last, *first_cut, comp);
- distance(middle, second_cut, len22);
- } else {
- len22 = len2 / 2;
- advance(second_cut, len22);
- first_cut = upper_bound(first, middle, *second_cut, comp);
- distance(first, first_cut, len11);
- }
- BidirectionalIterator new_middle =
- __rotate_adaptive(first_cut, middle, second_cut, len1 - len11,
- len22, buffer, buffer_size);
- __merge_adaptive(first, first_cut, new_middle, len11, len22, buffer,
- buffer_size, (T*)0, comp);
- __merge_adaptive(new_middle, second_cut, last, len1 - len11,
- len2 - len22, buffer, buffer_size, (T*)0, comp);
- }
-}
-
-template <class BidirectionalIterator, class Distance, class Pointer, class T>
-void __inplace_merge(BidirectionalIterator first,
- BidirectionalIterator middle,
- BidirectionalIterator last, Distance len1, Distance len2,
- pair<Pointer, Distance> p, T*) {
- if (p.first == 0) {
- __merge_without_buffer(first, middle, last, len1, len2);
- return;
- }
- Distance len = min(p.second, len1 + len2);
- fill_n(raw_storage_iterator<Pointer, T>(p.first), len, *first);
- __merge_adaptive(first, middle, last, len1, len2, p.first, p.second, (T*)0);
- destroy(p.first, p.first + len);
- return_temporary_buffer(p.first);
-}
-
-template <class BidirectionalIterator, class Distance, class Pointer, class T,
- class Compare>
-void __inplace_merge(BidirectionalIterator first,
- BidirectionalIterator middle,
- BidirectionalIterator last, Distance len1, Distance len2,
- pair<Pointer, Distance> p, T*, Compare comp) {
- if (p.first == 0) {
- __merge_without_buffer(first, middle, last, len1, len2, comp);
- return;
- }
- Distance len = min(p.second, len1 + len2);
- fill_n(raw_storage_iterator<Pointer, T>(p.first), len, *first);
- __merge_adaptive(first, middle, last, len1, len2, p.first, p.second, (T*)0,
- comp);
- destroy(p.first, p.first + len);
- return_temporary_buffer(p.first);
-}
-
-template <class BidirectionalIterator, class T, class Distance>
-inline void __inplace_merge_aux(BidirectionalIterator first,
- BidirectionalIterator middle,
- BidirectionalIterator last, T*, Distance*) {
- Distance len1 = 0;
- distance(first, middle, len1);
- Distance len2 = 0;
- distance(middle, last, len2);
- __inplace_merge(first, middle, last, len1, len2,
- get_temporary_buffer(len1 + len2, (T*)0), (T*)0);
-}
-
-template <class BidirectionalIterator, class T, class Distance, class Compare>
-inline void __inplace_merge_aux(BidirectionalIterator first,
- BidirectionalIterator middle,
- BidirectionalIterator last, T*, Distance*,
- Compare comp) {
- Distance len1 = 0;
- distance(first, middle, len1);
- Distance len2 = 0;
- distance(middle, last, len2);
- __inplace_merge(first, middle, last, len1, len2,
- get_temporary_buffer(len1 + len2, (T*)0), (T*)0,
- comp);
-}
-
-template <class BidirectionalIterator>
-inline void inplace_merge(BidirectionalIterator first,
- BidirectionalIterator middle,
- BidirectionalIterator last) {
- if (first == middle || middle == last) return;
- __inplace_merge_aux(first, middle, last, value_type(first),
- distance_type(first));
-}
-
-template <class BidirectionalIterator, class Compare>
-inline void inplace_merge(BidirectionalIterator first,
- BidirectionalIterator middle,
- BidirectionalIterator last, Compare comp) {
- if (first == middle || middle == last) return;
- __inplace_merge_aux(first, middle, last, value_type(first),
- distance_type(first), comp);
-}
-
-template <class InputIterator1, class InputIterator2>
-bool includes(InputIterator1 first1, InputIterator1 last1,
- InputIterator2 first2, InputIterator2 last2) {
- while (first1 != last1 && first2 != last2)
- if (*first2 < *first1)
- return false;
- else if(*first1 < *first2)
- ++first1;
- else
- ++first1, ++first2;
-
- return first2 == last2;
-}
-
-template <class InputIterator1, class InputIterator2, class Compare>
-bool includes(InputIterator1 first1, InputIterator1 last1,
- InputIterator2 first2, InputIterator2 last2, Compare comp) {
- while (first1 != last1 && first2 != last2)
- if (comp(*first2, *first1))
- return false;
- else if(comp(*first1, *first2))
- ++first1;
- else
- ++first1, ++first2;
-
- return first2 == last2;
-}
-
-template <class InputIterator1, class InputIterator2, class OutputIterator>
-OutputIterator set_union(InputIterator1 first1, InputIterator1 last1,
- InputIterator2 first2, InputIterator2 last2,
- OutputIterator result) {
- while (first1 != last1 && first2 != last2)
- if (*first1 < *first2)
- *result++ = *first1++;
- else if (*first2 < *first1)
- *result++ = *first2++;
- else {
- *result++ = *first1++;
- first2++;
- }
- return copy(first2, last2, copy(first1, last1, result));
-}
-
-template <class InputIterator1, class InputIterator2, class OutputIterator,
- class Compare>
-OutputIterator set_union(InputIterator1 first1, InputIterator1 last1,
- InputIterator2 first2, InputIterator2 last2,
- OutputIterator result, Compare comp) {
- while (first1 != last1 && first2 != last2)
- if (comp(*first1, *first2))
- *result++ = *first1++;
- else if (comp(*first2, *first1))
- *result++ = *first2++;
- else {
- *result++ = *first1++;
- ++first2;
- }
- return copy(first2, last2, copy(first1, last1, result));
-}
-
-template <class InputIterator1, class InputIterator2, class OutputIterator>
-OutputIterator set_intersection(InputIterator1 first1, InputIterator1 last1,
- InputIterator2 first2, InputIterator2 last2,
- OutputIterator result) {
- while (first1 != last1 && first2 != last2)
- if (*first1 < *first2)
- ++first1;
- else if (*first2 < *first1)
- ++first2;
- else {
- *result++ = *first1++;
- ++first2;
- }
- return result;
-}
-
-template <class InputIterator1, class InputIterator2, class OutputIterator,
- class Compare>
-OutputIterator set_intersection(InputIterator1 first1, InputIterator1 last1,
- InputIterator2 first2, InputIterator2 last2,
- OutputIterator result, Compare comp) {
- while (first1 != last1 && first2 != last2)
- if (comp(*first1, *first2))
- ++first1;
- else if (comp(*first2, *first1))
- ++first2;
- else {
- *result++ = *first1++;
- ++first2;
- }
- return result;
-}
-
-template <class InputIterator1, class InputIterator2, class OutputIterator>
-OutputIterator set_difference(InputIterator1 first1, InputIterator1 last1,
- InputIterator2 first2, InputIterator2 last2,
- OutputIterator result) {
- while (first1 != last1 && first2 != last2)
- if (*first1 < *first2)
- *result++ = *first1++;
- else if (*first2 < *first1)
- ++first2;
- else {
- ++first1;
- ++first2;
- }
- return copy(first1, last1, result);
-}
-
-template <class InputIterator1, class InputIterator2, class OutputIterator,
- class Compare>
-OutputIterator set_difference(InputIterator1 first1, InputIterator1 last1,
- InputIterator2 first2, InputIterator2 last2,
- OutputIterator result, Compare comp) {
- while (first1 != last1 && first2 != last2)
- if (comp(*first1, *first2))
- *result++ = *first1++;
- else if (comp(*first2, *first1))
- ++first2;
- else {
- ++first1;
- ++first2;
- }
- return copy(first1, last1, result);
-}
-
-template <class InputIterator1, class InputIterator2, class OutputIterator>
-OutputIterator set_symmetric_difference(InputIterator1 first1,
- InputIterator1 last1,
- InputIterator2 first2,
- InputIterator2 last2,
- OutputIterator result) {
- while (first1 != last1 && first2 != last2)
- if (*first1 < *first2)
- *result++ = *first1++;
- else if (*first2 < *first1)
- *result++ = *first2++;
- else {
- ++first1;
- ++first2;
- }
- return copy(first2, last2, copy(first1, last1, result));
-}
-
-template <class InputIterator1, class InputIterator2, class OutputIterator,
- class Compare>
-OutputIterator set_symmetric_difference(InputIterator1 first1,
- InputIterator1 last1,
- InputIterator2 first2,
- InputIterator2 last2,
- OutputIterator result, Compare comp) {
- while (first1 != last1 && first2 != last2)
- if (comp(*first1, *first2))
- *result++ = *first1++;
- else if (comp(*first2, *first1))
- *result++ = *first2++;
- else {
- ++first1;
- ++first2;
- }
- return copy(first2, last2, copy(first1, last1, result));
-}
-
-template <class ForwardIterator>
-ForwardIterator max_element(ForwardIterator first, ForwardIterator last) {
- if (first == last) return first;
- ForwardIterator result = first;
- while (++first != last)
- if (*result < *first) result = first;
- return result;
-}
-
-template <class ForwardIterator, class Compare>
-ForwardIterator max_element(ForwardIterator first, ForwardIterator last,
- Compare comp) {
- if (first == last) return first;
- ForwardIterator result = first;
- while (++first != last)
- if (comp(*result, *first)) result = first;
- return result;
-}
-
-template <class ForwardIterator>
-ForwardIterator min_element(ForwardIterator first, ForwardIterator last) {
- if (first == last) return first;
- ForwardIterator result = first;
- while (++first != last)
- if (*first < *result) result = first;
- return result;
-}
-
-template <class ForwardIterator, class Compare>
-ForwardIterator min_element(ForwardIterator first, ForwardIterator last,
- Compare comp) {
- if (first == last) return first;
- ForwardIterator result = first;
- while (++first != last)
- if (comp(*first, *result)) result = first;
- return result;
-}
-
-template <class BidirectionalIterator>
-bool next_permutation(BidirectionalIterator first,
- BidirectionalIterator last) {
- if (first == last) return false;
- BidirectionalIterator i = first;
- ++i;
- if (i == last) return false;
- i = last;
- --i;
-
- for(;;) {
- BidirectionalIterator ii = i--;
- if (*i < *ii) {
- BidirectionalIterator j = last;
- while (!(*i < *--j));
- iter_swap(i, j);
- reverse(ii, last);
- return true;
- }
- if (i == first) {
- reverse(first, last);
- return false;
- }
- }
-}
-
-template <class BidirectionalIterator, class Compare>
-bool next_permutation(BidirectionalIterator first, BidirectionalIterator last,
- Compare comp) {
- if (first == last) return false;
- BidirectionalIterator i = first;
- ++i;
- if (i == last) return false;
- i = last;
- --i;
-
- for(;;) {
- BidirectionalIterator ii = i--;
- if (comp(*i, *ii)) {
- BidirectionalIterator j = last;
- while (!comp(*i, *--j));
- iter_swap(i, j);
- reverse(ii, last);
- return true;
- }
- if (i == first) {
- reverse(first, last);
- return false;
- }
- }
-}
-
-template <class BidirectionalIterator>
-bool prev_permutation(BidirectionalIterator first,
- BidirectionalIterator last) {
- if (first == last) return false;
- BidirectionalIterator i = first;
- ++i;
- if (i == last) return false;
- i = last;
- --i;
-
- for(;;) {
- BidirectionalIterator ii = i--;
- if (*ii < *i) {
- BidirectionalIterator j = last;
- while (!(*--j < *i));
- iter_swap(i, j);
- reverse(ii, last);
- return true;
- }
- if (i == first) {
- reverse(first, last);
- return false;
- }
- }
-}
-
-template <class BidirectionalIterator, class Compare>
-bool prev_permutation(BidirectionalIterator first, BidirectionalIterator last,
- Compare comp) {
- if (first == last) return false;
- BidirectionalIterator i = first;
- ++i;
- if (i == last) return false;
- i = last;
- --i;
-
- for(;;) {
- BidirectionalIterator ii = i--;
- if (comp(*ii, *i)) {
- BidirectionalIterator j = last;
- while (!comp(*--j, *i));
- iter_swap(i, j);
- reverse(ii, last);
- return true;
- }
- if (i == first) {
- reverse(first, last);
- return false;
- }
- }
-}
-
-template <class InputIterator, class T>
-T accumulate(InputIterator first, InputIterator last, T init) {
- while (first != last)
- init = init + *first++;
- return init;
-}
-
-template <class InputIterator, class T, class BinaryOperation>
-T accumulate(InputIterator first, InputIterator last, T init,
- BinaryOperation binary_op) {
- while (first != last)
- init = binary_op(init, *first++);
- return init;
-}
-
-template <class InputIterator1, class InputIterator2, class T>
-T inner_product(InputIterator1 first1, InputIterator1 last1,
- InputIterator2 first2, T init) {
- while (first1 != last1)
- init = init + (*first1++ * *first2++);
- return init;
-}
-
-template <class InputIterator1, class InputIterator2, class T,
- class BinaryOperation1, class BinaryOperation2>
-T inner_product(InputIterator1 first1, InputIterator1 last1,
- InputIterator2 first2, T init, BinaryOperation1 binary_op1,
- BinaryOperation2 binary_op2) {
- while (first1 != last1)
- init = binary_op1(init, binary_op2(*first1++, *first2++));
- return init;
-}
-
-template <class InputIterator, class OutputIterator, class T>
-OutputIterator __partial_sum(InputIterator first, InputIterator last,
- OutputIterator result, T*) {
- T value = *first;
- while (++first != last) {
- value = value + *first;
- *++result = value;
- }
- return ++result;
-}
-
-template <class InputIterator, class OutputIterator>
-OutputIterator partial_sum(InputIterator first, InputIterator last,
- OutputIterator result) {
- if (first == last) return result;
- *result = *first;
- return __partial_sum(first, last, result, value_type(first));
-}
-
-template <class InputIterator, class OutputIterator, class T,
- class BinaryOperation>
-OutputIterator __partial_sum(InputIterator first, InputIterator last,
- OutputIterator result, T*,
- BinaryOperation binary_op) {
- T value = *first;
- while (++first != last) {
- value = binary_op(value, *first);
- *++result = value;
- }
- return ++result;
-}
-
-template <class InputIterator, class OutputIterator, class BinaryOperation>
-OutputIterator partial_sum(InputIterator first, InputIterator last,
- OutputIterator result, BinaryOperation binary_op) {
- if (first == last) return result;
- *result = *first;
- return __partial_sum(first, last, result, value_type(first), binary_op);
-}
-
-template <class InputIterator, class OutputIterator, class T>
-OutputIterator __adjacent_difference(InputIterator first, InputIterator last,
- OutputIterator result, T*) {
- T value = *first;
- while (++first != last) {
- T tmp = *first;
- *++result = tmp - value;
- value = tmp;
- }
- return ++result;
-}
-
-template <class InputIterator, class OutputIterator>
-OutputIterator adjacent_difference(InputIterator first, InputIterator last,
- OutputIterator result) {
- if (first == last) return result;
- *result = *first;
- return __adjacent_difference(first, last, result, value_type(first));
-}
-
-template <class InputIterator, class OutputIterator, class T,
- class BinaryOperation>
-OutputIterator __adjacent_difference(InputIterator first, InputIterator last,
- OutputIterator result, T*,
- BinaryOperation binary_op) {
- T value = *first;
- while (++first != last) {
- T tmp = *first;
- *++result = binary_op(tmp, value);
- value = tmp;
- }
- return ++result;
-}
-
-template <class InputIterator, class OutputIterator, class BinaryOperation>
-OutputIterator adjacent_difference(InputIterator first, InputIterator last,
- OutputIterator result,
- BinaryOperation binary_op) {
- if (first == last) return result;
- *result = *first;
- return __adjacent_difference(first, last, result, value_type(first),
- binary_op);
-}
-
-template <class ForwardIterator, class T>
-void iota(ForwardIterator first, ForwardIterator last, T value) {
- while (first != last) *first++ = value++;
-}
-
-#endif
-
diff --git a/contrib/libg++/libstdc++/stl/algobase.h b/contrib/libg++/libstdc++/stl/algobase.h
deleted file mode 100644
index 21cea93b5f88..000000000000
--- a/contrib/libg++/libstdc++/stl/algobase.h
+++ /dev/null
@@ -1,232 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-#ifndef ALGOBASE_H
-#define ALGOBASE_H
-
-#include <pair.h>
-#include <iterator.h>
-
-template <class ForwardIterator1, class ForwardIterator2, class T>
-inline void __iter_swap(ForwardIterator1 a, ForwardIterator2 b, T*) {
- T tmp = *a;
- *a = *b;
- *b = tmp;
-}
-
-template <class ForwardIterator1, class ForwardIterator2>
-inline void iter_swap(ForwardIterator1 a, ForwardIterator2 b) {
- __iter_swap(a, b, value_type(a));
-}
-
-template <class T>
-inline void swap(T& a, T& b) {
- T tmp = a;
- a = b;
- b = tmp;
-}
-
-template <class T>
-inline const T& min(const T& a, const T& b) {
- return b < a ? b : a;
-}
-
-template <class T, class Compare>
-inline const T& min(const T& a, const T& b, Compare comp) {
- return comp(b, a) ? b : a;
-}
-
-template <class T>
-inline const T& max(const T& a, const T& b) {
- return a < b ? b : a;
-}
-
-template <class T, class Compare>
-inline const T& max(const T& a, const T& b, Compare comp) {
- return comp(a, b) ? b : a;
-}
-
-template <class InputIterator, class Distance>
-void __distance(InputIterator first, InputIterator last, Distance& n,
- input_iterator_tag) {
- while (first != last) { ++first; ++n; }
-}
-
-template <class ForwardIterator, class Distance>
-void __distance(ForwardIterator first, ForwardIterator last, Distance& n,
- forward_iterator_tag) {
- while (first != last) { ++first; ++n; }
-}
-
-template <class BidirectionalIterator, class Distance>
-void __distance(BidirectionalIterator first, BidirectionalIterator last,
- Distance& n, bidirectional_iterator_tag) {
- while (first != last) { ++first; ++n; }
-}
-
-template <class RandomAccessIterator, class Distance>
-inline void __distance(RandomAccessIterator first, RandomAccessIterator last,
- Distance& n, random_access_iterator_tag) {
- n += last - first;
-}
-
-template <class InputIterator, class Distance>
-inline void distance(InputIterator first, InputIterator last, Distance& n) {
- __distance(first, last, n, iterator_category(first));
-}
-
-template <class InputIterator, class Distance>
-void __advance(InputIterator& i, Distance n, input_iterator_tag) {
- while (n--) ++i;
-}
-
-template <class ForwardIterator, class Distance>
-void __advance(ForwardIterator& i, Distance n, forward_iterator_tag) {
- while (n--) ++i;
-}
-
-template <class BidirectionalIterator, class Distance>
-void __advance(BidirectionalIterator& i, Distance n,
- bidirectional_iterator_tag) {
- if (n >= 0)
- while (n--) ++i;
- else
- while (n++) --i;
-}
-
-template <class RandomAccessIterator, class Distance>
-inline void __advance(RandomAccessIterator& i, Distance n,
- random_access_iterator_tag) {
- i += n;
-}
-
-template <class InputIterator, class Distance>
-inline void advance(InputIterator& i, Distance n) {
- __advance(i, n, iterator_category(i));
-}
-
-template <class ForwardIterator>
-void destroy(ForwardIterator first, ForwardIterator last) {
- while (first != last) {
- /* Borland bug */
- destroy(&*first);
- ++first;
- //destroy(&*first++);
- }
-}
-
-template <class InputIterator, class ForwardIterator>
-ForwardIterator uninitialized_copy(InputIterator first, InputIterator last,
- ForwardIterator result) {
- while (first != last) construct(&*result++, *first++);
- return result;
-}
-
-template <class ForwardIterator, class T>
-void uninitialized_fill(ForwardIterator first, ForwardIterator last,
- const T& x) {
- while (first != last) construct(&*first++, x);
-}
-
-template <class ForwardIterator, class Size, class T>
-ForwardIterator uninitialized_fill_n(ForwardIterator first, Size n,
- const T& x) {
- while (n--) construct(&*first++, x);
- return first;
-}
-
-template <class InputIterator, class OutputIterator>
-OutputIterator copy(InputIterator first, InputIterator last,
- OutputIterator result) {
- while (first != last) *result++ = *first++;
- return result;
-}
-
-template <class BidirectionalIterator1, class BidirectionalIterator2>
-BidirectionalIterator2 copy_backward(BidirectionalIterator1 first,
- BidirectionalIterator1 last,
- BidirectionalIterator2 result) {
- while (first != last) *--result = *--last;
- return result;
-}
-
-template <class ForwardIterator, class T>
-void fill(ForwardIterator first, ForwardIterator last, const T& value) {
- while (first != last) *first++ = value;
-}
-
-template <class OutputIterator, class Size, class T>
-OutputIterator fill_n(OutputIterator first, Size n, const T& value) {
- while (n-- > 0) *first++ = value;
- return first;
-}
-
-template <class InputIterator1, class InputIterator2>
-pair<InputIterator1, InputIterator2> mismatch(InputIterator1 first1,
- InputIterator1 last1,
- InputIterator2 first2) {
- while (first1 != last1 && *first1 == *first2) {
- ++first1;
- ++first2;
- }
- return pair<InputIterator1, InputIterator2>(first1, first2);
-}
-
-template <class InputIterator1, class InputIterator2, class BinaryPredicate>
-pair<InputIterator1, InputIterator2> mismatch(InputIterator1 first1,
- InputIterator1 last1,
- InputIterator2 first2,
- BinaryPredicate binary_pred) {
- while (first1 != last1 && binary_pred(*first1, *first2)) {
- ++first1;
- ++first2;
- }
- return pair<InputIterator1, InputIterator2>(first1, first2);
-}
-
-template <class InputIterator1, class InputIterator2>
-inline bool equal(InputIterator1 first1, InputIterator1 last1,
- InputIterator2 first2) {
- return mismatch(first1, last1, first2).first == last1;
-}
-
-template <class InputIterator1, class InputIterator2, class BinaryPredicate>
-inline bool equal(InputIterator1 first1, InputIterator1 last1,
- InputIterator2 first2, BinaryPredicate binary_pred) {
- return mismatch(first1, last1, first2, binary_pred).first == last1;
-}
-
-template <class InputIterator1, class InputIterator2>
-bool lexicographical_compare(InputIterator1 first1, InputIterator1 last1,
- InputIterator2 first2, InputIterator2 last2) {
- while (first1 != last1 && first2 != last2) {
- if (*first1 < *first2) return true;
- if (*first2++ < *first1++) return false;
- }
- return first1 == last1 && first2 != last2;
-}
-
-template <class InputIterator1, class InputIterator2, class Compare>
-bool lexicographical_compare(InputIterator1 first1, InputIterator1 last1,
- InputIterator2 first2, InputIterator2 last2,
- Compare comp) {
- while (first1 != last1 && first2 != last2) {
- if (comp(*first1, *first2)) return true;
- if (comp(*first2++, *first1++)) return false;
- }
- return first1 == last1 && first2 != last2;
-}
-
-#endif
diff --git a/contrib/libg++/libstdc++/stl/bool.h b/contrib/libg++/libstdc++/stl/bool.h
deleted file mode 100644
index 9d86aac99c68..000000000000
--- a/contrib/libg++/libstdc++/stl/bool.h
+++ /dev/null
@@ -1,20 +0,0 @@
-#ifndef __GNUC__
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-#define bool int
-#define true 1
-#define false 0
-#endif
diff --git a/contrib/libg++/libstdc++/stl/bvector.h b/contrib/libg++/libstdc++/stl/bvector.h
deleted file mode 100644
index f9fe10655cbc..000000000000
--- a/contrib/libg++/libstdc++/stl/bvector.h
+++ /dev/null
@@ -1,421 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-// vector<bool> is replaced by bit_vector at present because bool is not
-// implemented.
-
-#ifndef BVECTOR_H
-#define BVECTOR_H
-
-#include <function.h>
-#include <algobase.h>
-#include <iterator.h>
-#ifndef __GNUG__
-#include <bool.h>
-#endif
-
-#ifndef Allocator
-#define Allocator allocator
-#include <defalloc.h>
-#endif
-
-#define __WORD_BIT (int(CHAR_BIT*sizeof(unsigned int)))
-
-class bit_vector {
-public:
- typedef Allocator<unsigned int> vector_allocator;
- typedef bool value_type;
- typedef vector_allocator::size_type size_type;
- typedef vector_allocator::difference_type difference_type;
-
- class iterator;
- class const_iterator;
-
- class reference {
- friend class iterator;
- friend class const_iterator;
- protected:
- unsigned int* p;
- unsigned int mask;
- reference(unsigned int* x, unsigned int y) : p(x), mask(y) {}
- public:
- reference() : p(0), mask(0) {}
- operator bool() const { return !(!(*p & mask)); }
- reference& operator=(bool x) {
- if (x)
- *p |= mask;
- else
- *p &= ~mask;
- return *this;
- }
- reference& operator=(const reference& x) { return *this = bool(x); }
- bool operator==(const reference& x) const {
- return bool(*this) == bool(x);
- }
- bool operator<(const reference& x) const {
- return bool(*this) < bool(x);
- }
- void flip() { *p ^= mask; }
- };
- typedef bool const_reference;
- class iterator : public random_access_iterator<bool, difference_type> {
- friend class bit_vector;
- friend class const_iterator;
- protected:
- unsigned int* p;
- unsigned int offset;
- void bump_up() {
- if (offset++ == __WORD_BIT - 1) {
- offset = 0;
- ++p;
- }
- }
- void bump_down() {
- if (offset-- == 0) {
- offset = __WORD_BIT - 1;
- --p;
- }
- }
- public:
- iterator() : p(0), offset(0) {}
- iterator(unsigned int* x, unsigned int y) : p(x), offset(y) {}
- reference operator*() const { return reference(p, 1U << offset); }
- iterator& operator++() {
- bump_up();
- return *this;
- }
- iterator operator++(int) {
- iterator tmp = *this;
- bump_up();
- return tmp;
- }
- iterator& operator--() {
- bump_down();
- return *this;
- }
- iterator operator--(int) {
- iterator tmp = *this;
- bump_down();
- return tmp;
- }
- iterator& operator+=(difference_type i) {
- difference_type n = i + offset;
- p += n / __WORD_BIT;
- n = n % __WORD_BIT;
- if (n < 0) {
- offset = n + __WORD_BIT;
- --p;
- } else
- offset = n;
- return *this;
- }
- iterator& operator-=(difference_type i) {
- *this += -i;
- return *this;
- }
- iterator operator+(difference_type i) const {
- iterator tmp = *this;
- return tmp += i;
- }
- iterator operator-(difference_type i) const {
- iterator tmp = *this;
- return tmp -= i;
- }
- difference_type operator-(iterator x) const {
- return __WORD_BIT * (p - x.p) + offset - x.offset;
- }
- reference operator[](difference_type i) { return *(*this + i); }
- bool operator==(const iterator& x) const {
- return p == x.p && offset == x.offset;
- }
- bool operator<(iterator x) const {
- return p < x.p || (p == x.p && offset < x.offset);
- }
- };
-
- class const_iterator
- : public random_access_iterator<bool, difference_type> {
- friend class bit_vector;
- protected:
- unsigned int* p;
- unsigned int offset;
- void bump_up() {
- if (offset++ == __WORD_BIT - 1) {
- offset = 0;
- ++p;
- }
- }
- void bump_down() {
- if (offset-- == 0) {
- offset = __WORD_BIT - 1;
- --p;
- }
- }
- public:
- const_iterator() : p(0), offset(0) {}
- const_iterator(unsigned int* x, unsigned int y) : p(x), offset(y) {}
- const_iterator(const iterator& x) : p(x.p), offset(x.offset) {}
- const_reference operator*() const {
- return reference(p, 1U << offset);
- }
- const_iterator& operator++() {
- bump_up();
- return *this;
- }
- const_iterator operator++(int) {
- const_iterator tmp = *this;
- bump_up();
- return tmp;
- }
- const_iterator& operator--() {
- bump_down();
- return *this;
- }
- const_iterator operator--(int) {
- const_iterator tmp = *this;
- bump_down();
- return tmp;
- }
- const_iterator& operator+=(difference_type i) {
- difference_type n = i + offset;
- p += n / __WORD_BIT;
- n = n % __WORD_BIT;
- if (n < 0) {
- offset = n + __WORD_BIT;
- --p;
- } else
- offset = n;
- return *this;
- }
- const_iterator& operator-=(difference_type i) {
- *this += -i;
- return *this;
- }
- const_iterator operator+(difference_type i) const {
- const_iterator tmp = *this;
- return tmp += i;
- }
- const_iterator operator-(difference_type i) const {
- const_iterator tmp = *this;
- return tmp -= i;
- }
- difference_type operator-(const_iterator x) const {
- return __WORD_BIT * (p - x.p) + offset - x.offset;
- }
- const_reference operator[](difference_type i) {
- return *(*this + i);
- }
- bool operator==(const const_iterator& x) const {
- return p == x.p && offset == x.offset;
- }
- bool operator<(const_iterator x) const {
- return p < x.p || (p == x.p && offset < x.offset);
- }
- };
-
- typedef reverse_iterator<const_iterator, value_type, const_reference,
- difference_type> const_reverse_iterator;
- typedef reverse_iterator<iterator, value_type, reference, difference_type>
- reverse_iterator;
-
-protected:
- static Allocator<unsigned int> static_allocator;
- iterator start;
- iterator finish;
- unsigned int* end_of_storage;
- unsigned int* bit_alloc(size_type n) {
- return static_allocator.allocate((n + __WORD_BIT - 1)/__WORD_BIT);
- }
- void initialize(size_type n) {
- unsigned int* q = bit_alloc(n);
- end_of_storage = q + (n + __WORD_BIT - 1)/__WORD_BIT;
- start = iterator(q, 0);
- finish = start + n;
- }
- void insert_aux(iterator position, bool x);
- typedef bit_vector self;
-public:
- iterator begin() { return start; }
- const_iterator begin() const { return start; }
- iterator end() { return finish; }
- const_iterator end() const { return finish; }
-
- reverse_iterator rbegin() { return reverse_iterator(end()); }
- const_reverse_iterator rbegin() const {
- return const_reverse_iterator(end());
- }
- reverse_iterator rend() { return reverse_iterator(begin()); }
- const_reverse_iterator rend() const {
- return const_reverse_iterator(begin());
- }
-
- size_type size() const { return size_type(end() - begin()); }
- size_type max_size() const { return static_allocator.max_size(); }
- size_type capacity() const {
- return size_type(const_iterator(end_of_storage, 0) - begin());
- }
- bool empty() const { return begin() == end(); }
- reference operator[](size_type n) { return *(begin() + n); }
- const_reference operator[](size_type n) const { return *(begin() + n); }
- bit_vector() : start(iterator()), finish(iterator()), end_of_storage(0) {}
- bit_vector(size_type n, bool value = bool()) {
- initialize(n);
- fill(start.p, end_of_storage, value ? ~0 : 0);
- }
- bit_vector(const self& x) {
- initialize(x.size());
- copy(x.begin(), x.end(), start);
- }
- bit_vector(const_iterator first, const_iterator last) {
- size_type n = 0;
- distance(first, last, n);
- initialize(n);
- copy(first, last, start);
- }
- ~bit_vector() { static_allocator.deallocate(start.p); }
- self& operator=(const self& x) {
- if (&x == this) return *this;
- if (x.size() > capacity()) {
- static_allocator.deallocate(start.p);
- initialize(x.size());
- }
- copy(x.begin(), x.end(), begin());
- finish = begin() + x.size();
- return *this;
- }
- void reserve(size_type n) {
- if (capacity() < n) {
- unsigned int* q = bit_alloc(n);
- finish = copy(begin(), end(), iterator(q, 0));
- static_allocator.deallocate(start.p);
- start = iterator(q, 0);
- end_of_storage = q + (n + __WORD_BIT - 1)/__WORD_BIT;
- }
- }
- reference front() { return *begin(); }
- const_reference front() const { return *begin(); }
- reference back() { return *(end() - 1); }
- const_reference back() const { return *(end() - 1); }
- void push_back(bool x) {
- if (finish.p != end_of_storage)
- *finish++ = x;
- else
- insert_aux(end(), x);
- }
- void swap(bit_vector& x) {
- ::swap(start, x.start);
- ::swap(finish, x.finish);
- ::swap(end_of_storage, x.end_of_storage);
- }
- iterator insert(iterator position, bool x) {
- size_type n = position - begin();
- if (finish.p != end_of_storage && position == end())
- *finish++ = x;
- else
- insert_aux(position, x);
- return begin() + n;
- }
- void insert(iterator position, const_iterator first,
- const_iterator last);
- void insert(iterator position, size_type n, bool x);
- void pop_back() { --finish; }
- void erase(iterator position) {
- if (position + 1 != end())
- copy(position + 1, end(), position);
- --finish;
- }
- void erase(iterator first, iterator last) {
- finish = copy(last, end(), first);
- }
-};
-
-Allocator<unsigned int> bit_vector::static_allocator;
-
-inline bool operator==(const bit_vector& x, const bit_vector& y) {
- return x.size() == y.size() && equal(x.begin(), x.end(), y.begin());
-}
-
-inline bool operator<(const bit_vector& x, const bit_vector& y) {
- return lexicographical_compare(x.begin(), x.end(), y.begin(), y.end());
-}
-
-void swap(bit_vector::reference x, bit_vector::reference y) {
- bool tmp = x;
- x = y;
- y = tmp;
-}
-
-void bit_vector::insert_aux(iterator position, bool x) {
- if (finish.p != end_of_storage) {
- copy_backward(position, finish - 1, finish);
- *position = x;
- ++finish;
- } else {
- size_type len = size() ? 2 * size() : __WORD_BIT;
- unsigned int* q = bit_alloc(len);
- iterator i = copy(begin(), position, iterator(q, 0));
- *i++ = x;
- finish = copy(position, end(), i);
- static_allocator.deallocate(start.p);
- end_of_storage = q + (len + __WORD_BIT - 1)/__WORD_BIT;
- start = iterator(q, 0);
- }
-}
-
-void bit_vector::insert(iterator position, size_type n, bool x) {
- if (n == 0) return;
- if (capacity() - size() >= n) {
- copy_backward(position, end(), finish + n);
- fill(position, position + n, x);
- finish += n;
- } else {
- size_type len = size() + max(size(), n);
- unsigned int* q = bit_alloc(len);
- iterator i = copy(begin(), position, iterator(q, 0));
- fill_n(i, n, x);
- finish = copy(position, end(), i + n);
- static_allocator.deallocate(start.p);
- end_of_storage = q + (n + __WORD_BIT - 1)/__WORD_BIT;
- start = iterator(q, 0);
- }
-}
-
-void bit_vector::insert(iterator position, const_iterator first,
- const_iterator last) {
- if (first == last) return;
- size_type n = 0;
- distance(first, last, n);
- if (capacity() - size() >= n) {
- copy_backward(position, end(), finish + n);
- copy(first, last, position);
- finish += n;
- } else {
- size_type len = size() + max(size(), n);
- unsigned int* q = bit_alloc(len);
- iterator i = copy(begin(), position, iterator(q, 0));
- i = copy(first, last, i);
- finish = copy(position, end(), i);
- static_allocator.deallocate(start.p);
- end_of_storage = q + (len + __WORD_BIT - 1)/__WORD_BIT;
- start = iterator(q, 0);
- }
-}
-
-#undef Allocator
-#undef __WORD_BIT
-
-#endif
-
-
diff --git a/contrib/libg++/libstdc++/stl/configure.in b/contrib/libg++/libstdc++/stl/configure.in
deleted file mode 100644
index d452935df77f..000000000000
--- a/contrib/libg++/libstdc++/stl/configure.in
+++ /dev/null
@@ -1,37 +0,0 @@
-# This file is a shell script fragment that supplies the information
-# necessary for a configure script to process the program in
-# this directory. For more information, look at ../../configure.
-
-configdirs=
-srctrigger=iterator.h
-srcname="Standard Template Library"
-package_makefile_frag=Make.pack
-
-# per-host:
-
-# per-target:
-
-target_makefile_frag=../target-mkfrag
-
-LIBDIR=yes
-TO_TOPDIR=../../
-ALL='stl.list'
-EXTRA_MOSTLYCLEAN=stl.list
-XCXXINCLUDES="-I${srcdir} -I${srcdir}/.. -I${TO_TOPDIR}libio -I${srcdir}/${TO_TOPDIR}libio"
-(. ${srcdir}/${TO_TOPDIR}libio/config.shared) >${package_makefile_frag}
-
-# post-target:
-
-# We need multilib support.
-case ${srcdir} in
-.)
- if [ "${with_target_subdir}" != "." ] ; then
- . ${srcdir}/${with_multisrctop}../../../config-ml.in
- else
- . ${srcdir}/${with_multisrctop}../../config-ml.in
- fi
- ;;
-*)
- . ${srcdir}/../../config-ml.in
- ;;
-esac
diff --git a/contrib/libg++/libstdc++/stl/defalloc.h b/contrib/libg++/libstdc++/stl/defalloc.h
deleted file mode 100644
index 388e58fd7444..000000000000
--- a/contrib/libg++/libstdc++/stl/defalloc.h
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-#ifndef DEFALLOC_H
-#define DEFALLOC_H
-
-#include <new.h>
-#include <stddef.h>
-#include <stdlib.h>
-#include <limits.h>
-#include <iostream.h>
-#include <algobase.h>
-
-#ifndef __GNUG__
-inline void* operator new(size_t, void* p) {return p;}
-#endif
-
-/*
- * the following template function is replaced by the following two functions
- * due to the fact that the Borland compiler doesn't change prediff_t type
- * to type long when compile with -ml or -mh.
-
-template <class T>
-inline T* allocate(ptrdiff_t size, T*) {
- set_new_handler(0);
- T* tmp = (T*)(::operator new((size_t)(size * sizeof(T))));
- if (tmp == 0) {
- cerr << "out of memory" << endl;
- exit(1);
- }
- return tmp;
-}
-*/
-
-template <class T>
-inline T* allocate(int size, T*) {
- set_new_handler(0);
- T* tmp = (T*)(::operator new((unsigned int)(size * sizeof(T))));
- if (tmp == 0) {
- cerr << "out of memory" << endl;
- exit(1);
- }
- return tmp;
-}
-
-template <class T>
-inline T* allocate(long size, T*) {
- set_new_handler(0);
- T* tmp = (T*)(::operator new((unsigned long)(size * sizeof(T))));
- if (tmp == 0) {
- cerr << "out of memory" << endl;
- exit(1);
- }
- return tmp;
-}
-
-template <class T>
-inline void deallocate(T* buffer) {
- ::operator delete(buffer);
-}
-
-template <class T>
-inline void destroy(T* pointer) {
- pointer->~T();
-}
-
-inline void destroy(char*) {}
-inline void destroy(unsigned char*) {}
-inline void destroy(short*) {}
-inline void destroy(unsigned short*) {}
-inline void destroy(int*) {}
-inline void destroy(unsigned int*) {}
-inline void destroy(long*) {}
-inline void destroy(unsigned long*) {}
-inline void destroy(float*) {}
-inline void destroy(double*) {}
-inline void destroy(char**) {}
-inline void destroy(unsigned char**) {}
-inline void destroy(short**) {}
-inline void destroy(unsigned short**) {}
-inline void destroy(int**) {}
-inline void destroy(unsigned int**) {}
-inline void destroy(long**) {}
-inline void destroy(unsigned long**) {}
-inline void destroy(float**) {}
-inline void destroy(double**) {}
-
-inline void destroy(char*, char*) {}
-inline void destroy(unsigned char*, unsigned char*) {}
-inline void destroy(short*, short*) {}
-inline void destroy(unsigned short*, unsigned short*) {}
-inline void destroy(int*, int*) {}
-inline void destroy(unsigned int*, unsigned int*) {}
-inline void destroy(long*, long*) {}
-inline void destroy(unsigned long*, unsigned long*) {}
-inline void destroy(float*, float*) {}
-inline void destroy(double*, double*) {}
-inline void destroy(char**, char**) {}
-inline void destroy(unsigned char**, unsigned char**) {}
-inline void destroy(short**, short**) {}
-inline void destroy(unsigned short**, unsigned short**) {}
-inline void destroy(int**, int**) {}
-inline void destroy(unsigned int**, unsigned int**) {}
-inline void destroy(long**, long**) {}
-inline void destroy(unsigned long**, unsigned long**) {}
-inline void destroy(float**, float**) {}
-inline void destroy(double**, double**) {}
-
-template <class T1, class T2>
-inline void construct(T1* p, const T2& value) {
- new (p) T1(value);
-}
-
-template <class T>
-class allocator {
-public:
- typedef T value_type;
- typedef T* pointer;
- typedef const T* const_pointer;
- typedef T& reference;
- typedef const T& const_reference;
- typedef size_t size_type;
- typedef ptrdiff_t difference_type;
-#ifdef __GNUG__
- static pointer allocate(size_type n) {
- return ::allocate((difference_type)n, (pointer)0);
- }
- static void deallocate(pointer p) { ::deallocate(p); }
- static pointer address(reference x) { return (pointer)&x; }
- static const_pointer const_address(const_reference x) {
- return (const_pointer)&x;
- }
- static size_type init_page_size() {
- return max(size_type(1), size_type(4096/sizeof(T)));
- }
- static size_type max_size() {
- return max(size_type(1), size_type(UINT_MAX/sizeof(T)));
- }
-#else
- pointer allocate(size_type n) {
- return ::allocate((difference_type)n, (pointer)0);
- }
- void deallocate(pointer p) { ::deallocate(p); }
- pointer address(reference x) { return (pointer)&x; }
- const_pointer const_address(const_reference x) {
- return (const_pointer)&x;
- }
- size_type init_page_size() {
- return max(size_type(1), size_type(4096/sizeof(T)));
- }
- size_type max_size() const {
- return max(size_type(1), size_type(UINT_MAX/sizeof(T)));
- }
-#endif
-};
-
-class allocator<void> {
-public:
- typedef void* pointer;
-};
-
-
-
-#endif
diff --git a/contrib/libg++/libstdc++/stl/deque.h b/contrib/libg++/libstdc++/stl/deque.h
deleted file mode 100644
index dc790142b54d..000000000000
--- a/contrib/libg++/libstdc++/stl/deque.h
+++ /dev/null
@@ -1,684 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-#ifndef DEQUE_H
-#define DEQUE_H
-
-#include <function.h>
-#include <algobase.h>
-#include <iterator.h>
-#ifndef __GNUG__
-#include <bool.h>
-#endif
-
-#ifndef Allocator
-#define Allocator allocator
-#include <defalloc.h>
-#endif
-
-#ifndef deque
-#define deque deque
-#endif
-
-template <class T>
-class deque {
-public:
- class iterator;
- class const_iterator;
- friend class iterator;
- friend class const_iterator;
-public:
- typedef T value_type;
- typedef Allocator<T> data_allocator_type;
- typedef Allocator<T>::pointer pointer;
- typedef Allocator<T>::reference reference;
- typedef Allocator<T>::const_reference const_reference;
- typedef Allocator<T>::size_type size_type;
- typedef Allocator<T>::difference_type difference_type;
- typedef Allocator<pointer> map_allocator_type;
-protected:
- static data_allocator_type data_allocator;
-#ifdef __GNUG__
- // static // Too bad -- I don't like this hack very much...
- static size_type buffer_size() {
- return data_allocator.init_page_size();
- }
-#define __dq_buffer_size buffer_size()
-#else
- static size_type buffer_size;
-#define __dq_buffer_size buffer_size
-#endif
- static map_allocator_type map_allocator;
- typedef Allocator<pointer>::pointer map_pointer;
-public:
- class iterator : public random_access_iterator<T, difference_type> {
- friend class deque<T>;
- friend class const_iterator;
- protected:
- pointer current;
- pointer first;
- pointer last;
- map_pointer node;
- iterator(pointer x, map_pointer y)
- : current(x), first(*y), last(*y + __dq_buffer_size), node(y) {}
- public:
- iterator() : current(0), first(0), last(0), node(0) {}
- reference operator*() const { return *current; }
- difference_type operator-(const iterator& x) const {
- return node == x.node
- ? current - x.current
- : difference_type(__dq_buffer_size * (node - x.node - 1) +
- (current - first) + (x.last - x.current));
- }
- iterator& operator++() {
- if (++current == last) {
- first = *(++node);
- current = first;
- last = first + __dq_buffer_size;
- }
- return *this;
- }
- iterator operator++(int) {
- iterator tmp = *this;
- ++*this;
- return tmp;
- }
- iterator& operator--() {
- if (current == first) {
- first = *(--node);
- last = first + __dq_buffer_size;
- current = last;
- }
- --current;
- return *this;
- }
- iterator operator--(int) {
- iterator tmp = *this;
- --*this;
- return tmp;
- }
- iterator& operator+=(difference_type n) {
- difference_type offset = n + (current - first);
- difference_type num_node_to_jump = offset >= 0
- ? offset / __dq_buffer_size
- : -((-offset + __dq_buffer_size - 1) / __dq_buffer_size);
- if (num_node_to_jump == 0)
- current += n;
- else {
- node = node + num_node_to_jump;
- first = *node;
- last = first + __dq_buffer_size;
- current = first + (offset - num_node_to_jump * __dq_buffer_size);
- }
- return *this;
- }
- iterator& operator-=(difference_type n) { return *this += -n; }
- iterator operator+(difference_type n) const {
- iterator tmp = *this;
- return tmp += n;
- }
- iterator operator-(difference_type n) const {
- iterator tmp = *this;
- return tmp -= n;
- }
- reference operator[](difference_type n) { return *(*this + n); }
- bool operator==(const iterator& x) const {
- return current == x.current ||
- ((current == first || x.current == x.first) &&
- *this - x == 0);
- }
- bool operator<(const iterator& x) const {
- return (node == x.node) ? (current < x.current) : (node < x.node);
- }
- };
- class const_iterator : public random_access_iterator<T, difference_type> {
- friend class deque<T>;
- protected:
- pointer current;
- pointer first;
- pointer last;
- map_pointer node;
- const_iterator(pointer x, map_pointer y)
- : current(x), first(*y), last(*y + __dq_buffer_size), node(y) {}
- public:
- const_iterator() : current(0), first(0), last(0), node(0) {}
- const_iterator(const iterator& x)
- : current(x.current), first(x.first), last(x.last), node(x.node) {}
- const_reference operator*() const { return *current; }
- difference_type operator-(const const_iterator& x) const {
- return node == x.node
- ? current - x.current
- : difference_type(__dq_buffer_size * (node - x.node - 1) +
- (current - first) + (x.last - x.current));
- }
- const_iterator& operator++() {
- if (++current == last) {
- first = *(++node);
- current = first;
- last = first + __dq_buffer_size;
- }
- return *this;
- }
- const_iterator operator++(int) {
- const_iterator tmp = *this;
- ++*this;
- return tmp;
- }
- const_iterator& operator--() {
- if (current == first) {
- first = *(--node);
- last = first + __dq_buffer_size;
- current = last;
- }
- --current;
- return *this;
- }
- const_iterator operator--(int) {
- const_iterator tmp = *this;
- --*this;
- return tmp;
- }
- const_iterator& operator+=(difference_type n) {
- difference_type offset = n + (current - first);
- difference_type num_node_to_jump = offset >= 0
- ? offset / __dq_buffer_size
- : -((-offset + __dq_buffer_size - 1) / __dq_buffer_size);
- if (num_node_to_jump == 0)
- current += n;
- else {
- node = node + num_node_to_jump;
- first = *node;
- last = first + __dq_buffer_size;
- current = first + (offset - num_node_to_jump * __dq_buffer_size);
- }
- return *this;
- }
- const_iterator& operator-=(difference_type n) { return *this += -n; }
- const_iterator operator+(difference_type n) const {
- const_iterator tmp = *this;
- return tmp += n;
- }
- const_iterator operator-(difference_type n) const {
- const_iterator tmp = *this;
- return tmp -= n;
- }
- const_reference operator[](difference_type n) {
- return *(*this + n);
- }
- bool operator==(const const_iterator& x) const {
- return current == x.current ||
- ((current == first || x.current == x.first) &&
- *this - x == 0);
- }
- bool operator<(const const_iterator& x) const {
- return (node == x.node) ? (current < x.current) : (node < x.node);
- }
- };
- typedef reverse_iterator<const_iterator, value_type, const_reference,
- difference_type> const_reverse_iterator;
- typedef reverse_iterator<iterator, value_type, reference, difference_type>
- reverse_iterator;
-protected:
- iterator start;
- iterator finish;
- size_type length;
- map_pointer map;
- size_type map_size;
-
- void allocate_at_begin();
- void allocate_at_end();
- void deallocate_at_begin();
- void deallocate_at_end();
-
-public:
- deque() : start(), finish(), length(0), map(0), map_size(0) {
-#ifndef __GNUG__
- __dq_buffer_size = data_allocator.init_page_size();
-#endif
- }
- iterator begin() { return start; }
- const_iterator begin() const { return start; }
- iterator end() { return finish; }
- const_iterator end() const { return finish; }
- reverse_iterator rbegin() { return reverse_iterator(end()); }
- const_reverse_iterator rbegin() const {
- return const_reverse_iterator(end());
- }
- reverse_iterator rend() { return reverse_iterator(begin()); }
- const_reverse_iterator rend() const {
- return const_reverse_iterator(begin());
- }
- bool empty() const { return length == 0; }
- size_type size() const { return length; }
- size_type max_size() const { return data_allocator.max_size(); }
- reference operator[](size_type n) { return *(begin() + n); }
- const_reference operator[](size_type n) const { return *(begin() + n); }
- reference front() { return *begin(); }
- const_reference front() const { return *begin(); }
- reference back() { return *(end() - 1); }
- const_reference back() const { return *(end() - 1); }
- void push_front(const T& x) {
- if (empty() || begin().current == begin().first)
- allocate_at_begin();
- --start.current;
- construct(start.current, x);
- ++length;
- if (end().current == end().last) allocate_at_end();
- }
- void push_back(const T& x) {
- if (empty()) allocate_at_end();
- construct(finish.current, x);
- ++finish.current;
- ++length;
- if (end().current == end().last) allocate_at_end();
- }
- void pop_front() {
- destroy(start.current);
- ++start.current;
- --length;
- if (empty() || begin().current == begin().last)
- deallocate_at_begin();
- }
- void pop_back() {
- if (end().current == end().first) deallocate_at_end();
- --finish.current;
- destroy(finish.current);
- --length;
- if (empty()) deallocate_at_end();
- }
- void swap(deque<T>& x) {
- ::swap(start, x.start);
- ::swap(finish, x.finish);
- ::swap(length, x.length);
- ::swap(map, x.map);
- ::swap(map_size, x.map_size);
- }
-#ifdef __GNUG__
- iterator insert(iterator position, const T& x) {
- return insert(deque_iterator<T>(position), x);
- }
- deque_iterator<T> insert(deque_iterator<T> position, const T& x);
- void insert(iterator position, size_type n, const T& x) {
- insert(deque_iterator<T>(position), n, x);
- }
- void insert(deque_iterator<T>(position), size_type n, const T& x);
-// template <class Iterator> void insert(iterator position,
-// Iterator first, Iterator last);
- void insert(iterator position, const T* first, const T* last) {
- insert(deque_iterator<T>(position), first, last);
- }
- void insert(deque_iterator<T> position, const T* first, const T* last);
- void erase(iterator position) {
- erase(deque_iterator<T>(position));
- }
- void erase(deque_iterator<T> position);
- void erase(iterator first, iterator last) {
- erase(deque_iterator<T>(first), deque_iterator<T>(last));
- }
- void erase(deque_iterator<T> first, deque_iterator<T> last);
-#else
- iterator insert(iterator position, const T& x);
- void insert(iterator position, size_type n, const T& x);
-// template <class Iterator> void insert(iterator position,
-// Iterator first, Iterator last);
- void insert(iterator position, const T* first, const T* last);
- void erase(iterator position);
- void erase(iterator first, iterator last);
-#endif
- deque(size_type n, const T& value = T())
- : start(), finish(), length(0), map(0), map_size(0) {
-#ifndef __GNUG__
- __dq_buffer_size = data_allocator.init_page_size();
-#endif
- insert(begin(), n, value);
- }
-// template <class Iterator> deque(Iterator first, Iterator last);
- deque(const T* first, const T* last)
- : start(), finish(), length(0), map(0), map_size(0) {
-#ifndef __GNUG__
- __dq_buffer_size = data_allocator.init_page_size();
-#endif
- copy(first, last, back_inserter(*this));
- }
- deque(const deque<T>& x)
- : start(), finish(), length(0), map(0), map_size(0) {
-#ifndef __GNUG__
- __dq_buffer_size = data_allocator.init_page_size();
-#endif
- copy(x.begin(), x.end(), back_inserter(*this));
- }
- deque<T>& operator=(const deque<T>& x) {
- if (this != &x)
- if (size() >= x.size())
- erase(copy(x.begin(), x.end(), begin()), end());
- else
- copy(x.begin() + size(), x.end(),
- inserter(*this, copy(x.begin(), x.begin() + size(),
- begin())));
- return *this;
- }
- ~deque();
-#ifdef __GNUG__
- friend T* value_type(const iterator&) {
- return (T*)(0);
- }
- friend inline difference_type* distance_type(const iterator&) {
- return (difference_type*)(0);
- }
-#endif
-};
-
-#ifdef __GNUG__
-template <class T>
-struct deque_iterator: deque<T>::iterator {
- deque_iterator(deque<T>::iterator i) : deque<T>::iterator(i) {}
-};
-
-template <class T>
-inline T* value_type(const deque_iterator<T>&) {
- return (T*)(0);
-}
-#else
-template <class T>
-deque<T>::data_allocator_type deque<T>::data_allocator;
-
-template <class T>
-deque<T>::map_allocator_type deque<T>::map_allocator;
-
-template <class T>
-deque<T>::size_type deque<T>::__dq_buffer_size = 0;
-// should be data_allocator.init_page_size(); // Borland bug
-#endif
-
-template <class T>
-bool operator==(const deque<T>& x, const deque<T>& y) {
- return x.size() == y.size() && equal(x.begin(), x.end(), y.begin());
-}
-
-template <class T>
-bool operator<(const deque<T>& x, const deque<T>& y) {
- return lexicographical_compare(x.begin(), x.end(), y.begin(), y.end());
-}
-
-template <class T>
-deque<T>::~deque() { while (!empty()) pop_front(); }
-
-template <class T>
-void deque<T>::allocate_at_begin() {
- pointer p = data_allocator.allocate(__dq_buffer_size);
- if (!empty()) {
- if (start.node == map) {
- difference_type i = finish.node - start.node;
- map_size = (i + 1) * 2;
-#ifdef __GNU_G__
- map_pointer tmp = map_allocator_type::allocate(map_size);
- copy(start.node, finish.node + 1, tmp + map_size / 4 + 1);
- map_allocator_type::deallocate(map);
-#else
- map_pointer tmp = map_allocator.allocate(map_size);
- copy(start.node, finish.node + 1, tmp + map_size / 4 + 1);
- map_allocator.deallocate(map);
-#endif
- map = tmp;
- map[map_size / 4] = p;
- start = iterator(p + __dq_buffer_size, map + map_size / 4);
- finish = iterator(finish.current, map + map_size / 4 + i + 1);
- } else {
-#ifdef __GNUG__
- map_size = map_allocator_type::init_page_size();
- map = map_allocator_type::allocate(map_size);
-#else
- *--start.node = p;
- start = iterator(p + __dq_buffer_size, start.node);
-#endif
- }
- } else {
-#ifdef __GNUG__
- map_size = map_allocator_type::init_page_size();
- map = map_allocator_type::allocate(map_size);
-#else
- map_size = map_allocator.init_page_size();
- map = map_allocator.allocate(map_size);
-#endif
- map[map_size / 2] = p;
- start = iterator(p + __dq_buffer_size / 2 + 1, map + map_size / 2);
- finish = start;
- }
-}
-
-template <class T>
-void deque<T>::allocate_at_end() {
- pointer p = data_allocator.allocate(__dq_buffer_size);
- if (!empty()) {
- if (finish.node == map + map_size - 1) {
- difference_type i = finish.node - start.node;
- map_size = (i + 1) * 2;
-#ifdef __GNUG__
- map_pointer tmp = map_allocator_type::allocate(map_size);
- copy(start.node, finish.node + 1, tmp + map_size / 4);
- map_allocator_type::deallocate(map);
-#else
- map_pointer tmp = map_allocator.allocate(map_size);
- copy(start.node, finish.node + 1, tmp + map_size / 4);
- map_allocator.deallocate(map);
-#endif
- map = tmp;
- map[map_size / 4 + i + 1] = p;
- start = iterator(start.current, map + map_size / 4);
- finish = iterator(p, map + map_size / 4 + i + 1);
- } else {
- *++finish.node = p;
- finish = iterator(p, finish.node);
- }
- } else {
-#ifdef __GNUG__
- map_size = map_allocator_type::init_page_size();
- map = map_allocator_type::allocate(map_size);
-#else
- map_size = map_allocator.init_page_size();
- map = map_allocator.allocate(map_size);
-#endif
- map[map_size / 2] = p;
- start = iterator(p + __dq_buffer_size / 2, map + map_size / 2);
- finish = start;
- }
-}
-
-template <class T>
-void deque<T>::deallocate_at_begin() {
- data_allocator.deallocate(*start.node++);
- if (empty()) {
- if (finish.current == finish.first)
- data_allocator.deallocate(*start.node);
- start = iterator();
- finish = start;
-#ifdef __GNUG__
- map_allocator.deallocate(map);
-#else
- map_allocator.deallocate(map);
-#endif
- } else
- start = iterator(*start.node, start.node);
-}
-
-template <class T>
-void deque<T>::deallocate_at_end() {
- data_allocator.deallocate(*finish.node--);
- if (empty()) {
- start = iterator();
- finish = start;
-#ifdef __GNUG__
- map_allocator.deallocate(map);
-#else
- map_allocator.deallocate(map);
-#endif
- } else
- finish = iterator(*finish.node + __dq_buffer_size, finish.node);
-}
-
-template <class T>
-#ifdef __GNUG__
-deque_iterator<T>
-deque<T>::insert(deque_iterator<T> posn, const T& x) {
- iterator position = posn;
-#else
-deque<T>::iterator deque<T>::insert(iterator position, const T& x) {
-#endif
- if (position == begin()) {
- push_front(x);
- return begin();
- } else if (position == end()) {
- push_back(x);
- return end() - 1;
- } else {
- difference_type index = position - begin();
- if (index < length) {
- push_front(*begin());
- copy(begin() + 2, begin() + index + 1, begin() + 1);
- } else {
- push_back(*(end() - 1));
- copy_backward(begin() + index, end() - 2, end() - 1);
- }
- *(begin() + index) = x;
- return begin() + index;
- }
-}
-
-template <class T>
-#ifdef __GNUG__
-void deque<T>::insert(deque_iterator<T> posn,
- size_t n, // BAD HACK
- const T& x) {
- iterator position = posn;
-#else
-void deque<T>::insert(iterator position, size_type n, const T& x) {
-#endif
- difference_type index = position - begin();
- difference_type remainder = length - index;
- if (remainder > index) {
- if (n > index) {
- difference_type m = n - index;
- while (m-- > 0) push_front(x);
- difference_type i = index;
- while (i--) push_front(*(begin() + n - 1));
- fill(begin() + n, begin() + n + index, x);
- } else {
- difference_type i = n;
- while (i--) push_front(*(begin() + n - 1));
- copy(begin() + n + n, begin() + n + index, begin() + n);
- fill(begin() + index, begin() + n + index, x);
- }
- } else {
- difference_type orig_len = index + remainder;
- if (n > remainder) {
- difference_type m = n - remainder;
- while (m-- > 0) push_back(x);
- difference_type i = 0;
- while (i < remainder) push_back(*(begin() + index + i++));
- fill(begin() + index, begin() + orig_len, x);
- } else {
- difference_type i = 0;
- while (i < n) push_back(*(begin() + orig_len - n + i++));
- copy_backward(begin() + index, begin() + orig_len - n,
- begin() + orig_len);
- fill(begin() + index, begin() + index + n, x);
- }
- }
-}
-
-template <class T>
-void deque<T>::insert
-#ifdef __GNUG__
-(deque_iterator<T> posn, const T* first, const T* last)
-{
- iterator position = posn;
-#else
-(iterator position, const T* first, const T* last)
-{
-#endif
- difference_type index = position - begin();
- difference_type remainder = length - index;
- size_type n = 0;
- distance(first, last, n);
- if (remainder > index) {
- if (n > index) {
- const T* m = last - index;
- while (m != first) push_front(*--m);
- difference_type i = index;
- while (i--) push_front(*(begin() + n - 1));
- copy(last - index, last, begin() + n);
- } else {
- difference_type i = n;
- while (i--) push_front(*(begin() + n - 1));
- copy(begin() + n + n, begin() + n + index, begin() + n);
- copy(first, last, begin() + index);
- }
- } else {
- difference_type orig_len = index + remainder;
- if (n > remainder) {
- const T* m = first + remainder;
- while (m != last) push_back(*m++);
- difference_type i = 0;
- while (i < remainder) push_back(*(begin() + index + i++));
- copy(first, first + remainder, begin() + index);
- } else {
- difference_type i = 0;
- while (i < n) push_back(*(begin() + orig_len - n + i++));
- copy_backward(begin() + index, begin() + orig_len - n,
- begin() + orig_len);
- copy(first, last, begin() + index);
- }
- }
-}
-
-template <class T>
-#ifdef __GNUG__
-void deque<T>::erase(deque_iterator<T> posn) {
- iterator position = posn;
-#else
-void deque<T>::erase(iterator position) {
-#endif
- if (end() - position > position - begin()) {
- copy_backward(begin(), position, position + 1);
- pop_front();
- } else {
- copy(position + 1, end(), position);
- pop_back();
- }
-}
-
-template <class T>
-#ifdef __GNUG__
-void deque<T>::erase(deque_iterator<T> fi, deque_iterator<T> la) {
- iterator first = fi;
- iterator last = la;
- difference_type n = last - first;
-#else
-void deque<T>::erase(iterator first, iterator last) {
- difference_type n = last - first;
-#endif
- if (end() - last > first - begin()) {
- copy_backward(begin(), first, last);
- while(n-- > 0) pop_front();
- } else {
- copy(last, end(), first);
- while(n-- > 0) pop_back();
- }
-}
-
-#undef Allocator
-#undef deque
-
-#endif
diff --git a/contrib/libg++/libstdc++/stl/faralloc.h b/contrib/libg++/libstdc++/stl/faralloc.h
deleted file mode 100644
index b29602cc6327..000000000000
--- a/contrib/libg++/libstdc++/stl/faralloc.h
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-#ifndef FARALLOC_H
-#define FARALLOC_H
-
-#include <new.h>
-#include <stddef.h>
-#include <stdlib.h>
-#include <limits.h>
-#include <iostream.h>
-#include <algobase.h>
-
-template <class T>
-inline random_access_iterator_tag iterator_category(const T __far *) {
- return random_access_iterator_tag();
-}
-
-template <class T>
-inline T* value_type(const T __far *) { return (T*)(0); }
-
-template <class T>
-inline long* distance_type(const T __far*) { return (long*)(0); }
-
-inline void destroy(char __far *) {}
-inline void destroy(unsigned char __far *) {}
-inline void destroy(short __far *) {}
-inline void destroy(unsigned short __far *) {}
-inline void destroy(int __far *) {}
-inline void destroy(unsigned int __far *) {}
-inline void destroy(long __far *) {}
-inline void destroy(unsigned long __far *) {}
-inline void destroy(float __far *) {}
-inline void destroy(double __far *) {}
-
-inline void destroy(char __far *, char __far *) {}
-inline void destroy(unsigned char __far *, unsigned char __far *) {}
-inline void destroy(short __far *, short __far *) {}
-inline void destroy(unsigned short __far *, unsigned short __far *) {}
-inline void destroy(int __far *, int __far *) {}
-inline void destroy(unsigned int __far *, unsigned int __far *) {}
-inline void destroy(long __far *, long __far *) {}
-inline void destroy(unsigned long __far *, unsigned long __far *) {}
-inline void destroy(float __far *, float __far *) {}
-inline void destroy(double __far *, double __far *) {}
-
-inline void __far * operator new(size_t, void __far *p) { return p; }
-
-template <class T>
-inline T __far * allocate(long size, T __far * p) {
- set_new_handler(0);
- T __far * tmp =
- (T __far *)(::operator new((unsigned long)(size * sizeof(T))));
- if (tmp == 0) {
- cerr << "out of memory" << endl;
- exit(1);
- }
- return tmp;
-}
-
-template <class T>
-inline void deallocate(T __far * buffer) {
- ::operator delete(buffer);
-}
-
-template <class T1, class T2>
-inline void construct( T1 __far *p, const T2& value )
-{
- new(p)T1(value);
-}
-
-template <class T>
-inline void destroy( T __far * pointer ) {
- pointer->~T();
-}
-
-template <class T>
-class far_allocator {
-public:
- typedef T value_type;
- typedef T __far * pointer;
- typedef const T __far * const_pointer;
- typedef T __far & reference;
- typedef const T __far & const_reference;
- typedef unsigned long size_type;
- typedef long difference_type;
- pointer allocate(size_type n) {
- return ::allocate((difference_type)n, (pointer)0);
- }
- void deallocate(pointer p) { ::deallocate(p); }
- pointer address(reference x) { return (pointer)&x; }
- const_pointer const_address(const_reference x) {
- return (const_pointer)&x;
- }
- size_type init_page_size() {
- return max(size_type(1), size_type(4096/sizeof(T)));
- }
- size_type max_size() const {
- return max(size_type(1), size_type(ULONG_MAX/sizeof(T)));
- }
-};
-
-class far_allocator<void> {
-public:
- typedef void __far * pointer;
-};
-
-#endif
diff --git a/contrib/libg++/libstdc++/stl/fdeque.h b/contrib/libg++/libstdc++/stl/fdeque.h
deleted file mode 100644
index 7b512b62dc2a..000000000000
--- a/contrib/libg++/libstdc++/stl/fdeque.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-#ifndef FDEQUE_H
-#define FDEQUE_H
-
-#ifdef DEQUE_H
-#undef DEQUE_H
-#define __DEQUE_WAS_DEFINED
-#endif
-
-#define Allocator far_allocator
-#define deque far_deque
-#include <faralloc.h>
-#include <deque.h>
-
-#undef DEQUE_H
-
-#ifdef __DEQUE_WAS_DEFINED
-#define DEQUE_H
-#undef __DEQUE_WAS_DEFINED
-#endif
-
-#undef Allocator
-#undef deque
-
-#endif
diff --git a/contrib/libg++/libstdc++/stl/flist.h b/contrib/libg++/libstdc++/stl/flist.h
deleted file mode 100644
index 35fe9bf6288f..000000000000
--- a/contrib/libg++/libstdc++/stl/flist.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-#ifndef FLIST_H
-#define FLIST_H
-
-#ifdef LIST_H
-#undef LIST_H
-#define __LIST_WAS_DEFINED
-#endif
-
-#define Allocator far_allocator
-#define list far_list
-#include <faralloc.h>
-#include <list.h>
-
-#undef LIST_H
-
-#ifdef __LIST_WAS_DEFINED
-#define LIST_H
-#undef __LIST_WAS_DEFINED
-#endif
-
-#undef Allocator
-#undef list
-
-#endif
diff --git a/contrib/libg++/libstdc++/stl/fmap.h b/contrib/libg++/libstdc++/stl/fmap.h
deleted file mode 100644
index 65aa2091fc20..000000000000
--- a/contrib/libg++/libstdc++/stl/fmap.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-#ifndef FMAP_H
-#define FMAP_H
-
-#ifdef MAP_H
-#undef MAP_H
-#undef TREE_H
-#define __MAP_WAS_DEFINED
-#endif
-
-#define Allocator far_allocator
-#define map far_map
-#define rb_tree far_rb_tree
-#include <faralloc.h>
-#include <map.h>
-
-#undef MAP_H
-#undef TREE_H
-
-#ifdef __MAP_WAS_DEFINED
-#define MAP_H
-#define TREE_H
-#undef __MAP_WAS_DEFINED
-#endif
-
-#undef Allocator
-#undef map
-#undef rb_tree
-
-#endif
diff --git a/contrib/libg++/libstdc++/stl/fmultmap.h b/contrib/libg++/libstdc++/stl/fmultmap.h
deleted file mode 100644
index ecb5cd4fdeff..000000000000
--- a/contrib/libg++/libstdc++/stl/fmultmap.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-#ifndef FMULTIMAP_H
-#define FMULTIMAP_H
-
-#ifdef MULTIMAP_H
-#undef MULTIMAP_H
-#undef TREE_H
-#define __MULTIMAP_WAS_DEFINED
-#endif
-
-#define Allocator far_allocator
-#define multimap far_multimap
-#define rb_tree far_rb_tree
-#include <faralloc.h>
-#include <multimap.h>
-
-#undef MULTIMAP_H
-#undef TREE_H
-
-#ifdef __MULTIMAP_WAS_DEFINED
-#define MULTIMAP_H
-#define TREE_H
-#undef __MULTIMAP_WAS_DEFINED
-#endif
-
-#undef Allocator
-#undef multimap
-#undef rb_tree
-
-#endif
diff --git a/contrib/libg++/libstdc++/stl/fmultset.h b/contrib/libg++/libstdc++/stl/fmultset.h
deleted file mode 100644
index ca9887646ce7..000000000000
--- a/contrib/libg++/libstdc++/stl/fmultset.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-#ifndef FMULTISET_H
-#define FMULTISET_H
-
-#ifdef MULTISET_H
-#undef MULTISET_H
-#undef TREE_H
-#define __MULTISET_WAS_DEFINED
-#endif
-
-#define Allocator far_allocator
-#define multiset far_multiset
-#define rb_tree far_rb_tree
-#include <faralloc.h>
-#include <multiset.h>
-
-#undef MULTISET_H
-#undef TREE_H
-
-#ifdef __MULTISET_WAS_DEFINED
-#define MULTISET_H
-#define TREE_H
-#undef __MULTISET_WAS_DEFINED
-#endif
-
-#undef Allocator
-#undef multiset
-#undef rb_tree
-
-#endif
diff --git a/contrib/libg++/libstdc++/stl/fset.h b/contrib/libg++/libstdc++/stl/fset.h
deleted file mode 100644
index b374bc435a6c..000000000000
--- a/contrib/libg++/libstdc++/stl/fset.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-#ifndef FSET_H
-#define FSET_H
-
-#ifdef SET_H
-#undef SET_H
-#undef TREE_H
-#define __SET_WAS_DEFINED
-#endif
-
-#define Allocator far_allocator
-#define set far_set
-#define rb_tree far_rb_tree
-#include <faralloc.h>
-#include <set.h>
-
-#undef SET_H
-#undef TREE_H
-
-#ifdef __SET_WAS_DEFINED
-#define SET_H
-#define TREE_H
-#undef __SET_WAS_DEFINED
-#endif
-
-#undef Allocator
-#undef set
-#undef rb_tree
-
-#endif
diff --git a/contrib/libg++/libstdc++/stl/function.h b/contrib/libg++/libstdc++/stl/function.h
deleted file mode 100644
index 46fe55569bbd..000000000000
--- a/contrib/libg++/libstdc++/stl/function.h
+++ /dev/null
@@ -1,282 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-#ifndef FUNCTION_H
-#define FUNCTION_H
-
-#ifndef __GNUG__
-#include <bool.h>
-#endif
-
-template <class T1, class T2>
-inline bool operator!=(const T1& x, const T2& y) {
- return !(x == y);
-}
-
-template <class T1, class T2>
-inline bool operator>(const T1& x, const T2& y) {
- return y < x;
-}
-
-template <class T1, class T2>
-inline bool operator<=(const T1& x, const T2& y) {
- return !(y < x);
-}
-
-template <class T1, class T2>
-inline bool operator>=(const T1& x, const T2& y) {
- return !(x < y);
-}
-
-template <class Arg, class Result>
-struct unary_function {
- typedef Arg argument_type;
- typedef Result result_type;
-};
-
-template <class Arg1, class Arg2, class Result>
-struct binary_function {
- typedef Arg1 first_argument_type;
- typedef Arg2 second_argument_type;
- typedef Result result_type;
-};
-
-template <class T>
-struct plus : binary_function<T, T, T> {
- T operator()(const T& x, const T& y) const { return x + y; }
-};
-
-template <class T>
-struct minus : binary_function<T, T, T> {
- T operator()(const T& x, const T& y) const { return x - y; }
-};
-
-template <class T>
-struct times : binary_function<T, T, T> {
- T operator()(const T& x, const T& y) const { return x * y; }
-};
-
-template <class T>
-struct divides : binary_function<T, T, T> {
- T operator()(const T& x, const T& y) const { return x / y; }
-};
-
-template <class T>
-#ifdef __GNU__
-struct modulus {
- typedef T first_argument_type;
- typedef T second_argument_type;
- typedef T result_type;
- T operator()(const T& x, const T& y) const { return x % y; }
-};
-#else
-struct modulus : binary_function<T, T, T> {
- T operator()(const T& x, const T& y) const { return x % y; }
-};
-#endif
-
-template <class T>
-struct negate : unary_function<T, T> {
- T operator()(const T& x) const { return -x; }
-};
-
-template <class T>
-struct equal_to : binary_function<T, T, bool> {
- bool operator()(const T& x, const T& y) const { return x == y; }
-};
-
-template <class T>
-struct not_equal_to : binary_function<T, T, bool> {
- bool operator()(const T& x, const T& y) const { return x != y; }
-};
-
-template <class T>
-struct greater : binary_function<T, T, bool> {
- bool operator()(const T& x, const T& y) const { return x > y; }
-};
-
-template <class T>
-struct less : binary_function<T, T, bool> {
- bool operator()(const T& x, const T& y) const { return x < y; }
-};
-
-template <class T>
-struct greater_equal : binary_function<T, T, bool> {
- bool operator()(const T& x, const T& y) const { return x >= y; }
-};
-
-template <class T>
-struct less_equal : binary_function<T, T, bool> {
- bool operator()(const T& x, const T& y) const { return x <= y; }
-};
-
-template <class T>
-struct logical_and : binary_function<T, T, bool> {
- bool operator()(const T& x, const T& y) const { return x && y; }
-};
-
-template <class T>
-struct logical_or : binary_function<T, T, bool> {
- bool operator()(const T& x, const T& y) const { return x || y; }
-};
-
-template <class T>
-struct logical_not : unary_function<T, bool> {
- bool operator()(const T& x) const { return !x; }
-};
-
-template <class Predicate>
-class unary_negate : public unary_function<Predicate::argument_type, bool> {
-protected:
- Predicate pred;
-public:
- unary_negate(const Predicate& x) : pred(x) {}
- bool operator()(const argument_type& x) const { return !pred(x); }
-};
-
-template <class Predicate>
-unary_negate<Predicate> not1(const Predicate& pred) {
- return unary_negate<Predicate>(pred);
-}
-
-template <class Predicate>
-class binary_negate
- : public binary_function<Predicate::first_argument_type,
- Predicate::second_argument_type, bool> {
-protected:
- Predicate pred;
-public:
- binary_negate(const Predicate& x) : pred(x) {}
- bool operator()(const first_argument_type& x,
- const second_argument_type& y) const {
- return !pred(x, y);
- }
-};
-
-template <class Predicate>
-binary_negate<Predicate> not2(const Predicate& pred) {
- return binary_negate<Predicate>(pred);
-}
-
-template <class Operation>
-class binder1st : public unary_function<Operation::second_argument_type,
- Operation::result_type> {
-protected:
- Operation op;
- Operation::first_argument_type value;
-public:
- binder1st(const Operation& x, const Operation::first_argument_type& y)
- : op(x), value(y) {}
- result_type operator()(const argument_type& x) const {
- return op(value, x);
- }
-};
-
-template <class Operation, class T>
-binder1st<Operation> bind1st(const Operation& op, const T& x) {
- return binder1st<Operation>(op, Operation::first_argument_type(x));
-}
-
-template <class Operation>
-class binder2nd : public unary_function<Operation::first_argument_type,
- Operation::result_type> {
-protected:
- Operation op;
- Operation::second_argument_type value;
-public:
- binder2nd(const Operation& x, const Operation::second_argument_type& y)
- : op(x), value(y) {}
- result_type operator()(const argument_type& x) const {
- return op(x, value);
- }
-};
-
-template <class Operation, class T>
-binder2nd<Operation> bind2nd(const Operation& op, const T& x) {
- return binder2nd<Operation>(op, Operation::second_argument_type(x));
-}
-
-template <class Operation1, class Operation2>
-class unary_compose : public unary_function<Operation2::argument_type,
- Operation1::result_type> {
-protected:
- Operation1 op1;
- Operation2 op2;
-public:
- unary_compose(const Operation1& x, const Operation2& y) : op1(x), op2(y) {}
- result_type operator()(const argument_type& x) const {
- return op1(op2(x));
- }
-};
-
-template <class Operation1, class Operation2>
-unary_compose<Operation1, Operation2> compose1(const Operation1& op1,
- const Operation2& op2) {
- return unary_compose<Operation1, Operation2>(op1, op2);
-}
-
-template <class Operation1, class Operation2, class Operation3>
-class binary_compose : public unary_function<Operation2::argument_type,
- Operation1::result_type> {
-protected:
- Operation1 op1;
- Operation2 op2;
- Operation3 op3;
-public:
- binary_compose(const Operation1& x, const Operation2& y,
- const Operation3& z) : op1(x), op2(y), op3(z) { }
- result_type operator()(const argument_type& x) const {
- return op1(op2(x), op3(x));
- }
-};
-
-template <class Operation1, class Operation2, class Operation3>
-binary_compose<Operation1, Operation2, Operation3>
-compose2(const Operation1& op1, const Operation2& op2, const Operation3& op3) {
- return binary_compose<Operation1, Operation2, Operation3>(op1, op2, op3);
-}
-
-template <class Arg, class Result>
-class pointer_to_unary_function : public unary_function<Arg, Result> {
-protected:
- Result (*ptr)(Arg);
-public:
- pointer_to_unary_function() {}
- pointer_to_unary_function(Result (*x)(Arg)) : ptr(x) {}
- Result operator()(Arg x) const { return ptr(x); }
-};
-
-template <class Arg, class Result>
-pointer_to_unary_function<Arg, Result> ptr_fun(Result (*x)(Arg)) {
- return pointer_to_unary_function<Arg, Result>(x);
-}
-
-template <class Arg1, class Arg2, class Result>
-class pointer_to_binary_function : public binary_function<Arg1, Arg2, Result> {
-protected:
- Result (*ptr)(Arg1, Arg2);
-public:
- pointer_to_binary_function() {}
- pointer_to_binary_function(Result (*x)(Arg1, Arg2)) : ptr(x) {}
- Result operator()(Arg1 x, Arg2 y) const { return ptr(x, y); }
-};
-
-template <class Arg1, class Arg2, class Result>
-pointer_to_binary_function<Arg1, Arg2, Result>
-ptr_fun(Result (*x)(Arg1, Arg2)) {
- return pointer_to_binary_function<Arg1, Arg2, Result>(x);
-}
-
-#endif
diff --git a/contrib/libg++/libstdc++/stl/hdeque.h b/contrib/libg++/libstdc++/stl/hdeque.h
deleted file mode 100644
index 0d47098a06c4..000000000000
--- a/contrib/libg++/libstdc++/stl/hdeque.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-#ifndef HDEQUE_H
-#define HDEQUE_H
-
-#ifdef DEQUE_H
-#undef DEQUE_H
-#define __DEQUE_WAS_DEFINED
-#endif
-
-#define Allocator huge_allocator
-#define deque huge_deque
-#include <hugalloc.h>
-#include <deque.h>
-
-#undef DEQUE_H
-
-#ifdef __DEQUE_WAS_DEFINED
-#define DEQUE_H
-#undef __DEQUE_WAS_DEFINED
-#endif
-
-#undef Allocator
-#undef deque
-
-#endif
diff --git a/contrib/libg++/libstdc++/stl/heap.h b/contrib/libg++/libstdc++/stl/heap.h
deleted file mode 100644
index 7f2747fc5b91..000000000000
--- a/contrib/libg++/libstdc++/stl/heap.h
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-#ifndef HEAP_H
-#define HEAP_H
-
-template <class RandomAccessIterator, class Distance, class T>
-void __push_heap(RandomAccessIterator first, Distance holeIndex,
- Distance topIndex, T value) {
- Distance parent = (holeIndex - 1) / 2;
- while (holeIndex > topIndex && *(first + parent) < value) {
- *(first + holeIndex) = *(first + parent);
- holeIndex = parent;
- parent = (holeIndex - 1) / 2;
- }
- *(first + holeIndex) = value;
-}
-
-template <class RandomAccessIterator, class T>
-inline void __push_heap_aux(RandomAccessIterator first,
- RandomAccessIterator last, T*) {
- __push_heap(first, (last - first) - 1, 0, T(*(last - 1)));
-}
-
-template <class RandomAccessIterator>
-inline void push_heap(RandomAccessIterator first, RandomAccessIterator last) {
- __push_heap_aux(first, last, value_type(first));
-}
-
-template <class RandomAccessIterator, class Distance, class T, class Compare>
-void __push_heap(RandomAccessIterator first, Distance holeIndex,
- Distance topIndex, T value, Compare comp) {
- Distance parent = (holeIndex - 1) / 2;
- while (holeIndex > topIndex && comp(*(first + parent), value)) {
- *(first + holeIndex) = *(first + parent);
- holeIndex = parent;
- parent = (holeIndex - 1) / 2;
- }
- *(first + holeIndex) = value;
-}
-
-template <class RandomAccessIterator, class Compare, class T>
-inline void __push_heap_aux(RandomAccessIterator first,
- RandomAccessIterator last, Compare comp, T*) {
- __push_heap(first, (last - first) - 1, 0, T(*(last - 1)), comp);
-}
-
-template <class RandomAccessIterator, class Compare>
-inline void push_heap(RandomAccessIterator first, RandomAccessIterator last,
- Compare comp) {
- __push_heap_aux(first, last, comp, value_type(first));
-}
-
-template <class RandomAccessIterator, class Distance, class T>
-void __adjust_heap(RandomAccessIterator first, Distance holeIndex,
- Distance len, T value) {
- Distance topIndex = holeIndex;
- Distance secondChild = 2 * holeIndex + 2;
- while (secondChild < len) {
- if (*(first + secondChild) < *(first + (secondChild - 1)))
- secondChild--;
- *(first + holeIndex) = *(first + secondChild);
- holeIndex = secondChild;
- secondChild = 2 * (secondChild + 1);
- }
- if (secondChild == len) {
- *(first + holeIndex) = *(first + (secondChild - 1));
- holeIndex = secondChild - 1;
- }
- __push_heap(first, holeIndex, topIndex, value);
-}
-
-template <class RandomAccessIterator, class T, class Distance>
-inline void __pop_heap(RandomAccessIterator first, RandomAccessIterator last,
- RandomAccessIterator result, T value, Distance*) {
- *result = *first;
- __adjust_heap(first, Distance(0), Distance(last - first), value);
-}
-
-template <class RandomAccessIterator, class T>
-inline void __pop_heap_aux(RandomAccessIterator first,
- RandomAccessIterator last, T*) {
- __pop_heap(first, last - 1, last - 1, T(*(last - 1)), distance_type(first));
-}
-
-template <class RandomAccessIterator>
-inline void pop_heap(RandomAccessIterator first, RandomAccessIterator last) {
- __pop_heap_aux(first, last, value_type(first));
-}
-
-template <class RandomAccessIterator, class Distance, class T, class Compare>
-void __adjust_heap(RandomAccessIterator first, Distance holeIndex,
- Distance len, T value, Compare comp) {
- Distance topIndex = holeIndex;
- Distance secondChild = 2 * holeIndex + 2;
- while (secondChild < len) {
- if (comp(*(first + secondChild), *(first + (secondChild - 1))))
- secondChild--;
- *(first + holeIndex) = *(first + secondChild);
- holeIndex = secondChild;
- secondChild = 2 * (secondChild + 1);
- }
- if (secondChild == len) {
- *(first + holeIndex) = *(first + (secondChild - 1));
- holeIndex = secondChild - 1;
- }
- __push_heap(first, holeIndex, topIndex, value, comp);
-}
-
-template <class RandomAccessIterator, class T, class Compare, class Distance>
-inline void __pop_heap(RandomAccessIterator first, RandomAccessIterator last,
- RandomAccessIterator result, T value, Compare comp,
- Distance*) {
- *result = *first;
- __adjust_heap(first, Distance(0), Distance(last - first), value, comp);
-}
-
-template <class RandomAccessIterator, class T, class Compare>
-inline void __pop_heap_aux(RandomAccessIterator first,
- RandomAccessIterator last, T*, Compare comp) {
- __pop_heap(first, last - 1, last - 1, T(*(last - 1)), comp,
- distance_type(first));
-}
-
-template <class RandomAccessIterator, class Compare>
-inline void pop_heap(RandomAccessIterator first, RandomAccessIterator last,
- Compare comp) {
- __pop_heap_aux(first, last, value_type(first), comp);
-}
-
-template <class RandomAccessIterator, class T, class Distance>
-void __make_heap(RandomAccessIterator first, RandomAccessIterator last, T*,
- Distance*) {
- if (last - first < 2) return;
- Distance len = last - first;
- Distance parent = (len - 2)/2;
-
- while (true) {
- __adjust_heap(first, parent, len, T(*(first + parent)));
- if (parent == 0) return;
- parent--;
- }
-}
-
-template <class RandomAccessIterator>
-inline void make_heap(RandomAccessIterator first, RandomAccessIterator last) {
- __make_heap(first, last, value_type(first), distance_type(first));
-}
-
-template <class RandomAccessIterator, class Compare, class T, class Distance>
-void __make_heap(RandomAccessIterator first, RandomAccessIterator last,
- Compare comp, T*, Distance*) {
- if (last - first < 2) return;
- Distance len = last - first;
- Distance parent = (len - 2)/2;
-
- while (true) {
- __adjust_heap(first, parent, len, T(*(first + parent)), comp);
- if (parent == 0) return;
- parent--;
- }
-}
-
-template <class RandomAccessIterator, class Compare>
-inline void make_heap(RandomAccessIterator first, RandomAccessIterator last,
- Compare comp) {
- __make_heap(first, last, comp, value_type(first), distance_type(first));
-}
-
-template <class RandomAccessIterator>
-void sort_heap(RandomAccessIterator first, RandomAccessIterator last) {
- while (last - first > 1) pop_heap(first, last--);
-}
-
-template <class RandomAccessIterator, class Compare>
-void sort_heap(RandomAccessIterator first, RandomAccessIterator last,
- Compare comp) {
- while (last - first > 1) pop_heap(first, last--, comp);
-}
-
-#endif
diff --git a/contrib/libg++/libstdc++/stl/hlist.h b/contrib/libg++/libstdc++/stl/hlist.h
deleted file mode 100644
index 543ffa7a77ee..000000000000
--- a/contrib/libg++/libstdc++/stl/hlist.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-#ifndef HLIST_H
-#define HLIST_H
-
-#ifdef LIST_H
-#undef LIST_H
-#define __LIST_WAS_DEFINED
-#endif
-
-#define Allocator huge_allocator
-#define list huge_list
-#include <hugalloc.h>
-#include <list.h>
-
-#undef LIST_H
-
-#ifdef __LIST_WAS_DEFINED
-#define LIST_H
-#undef __LIST_WAS_DEFINED
-#endif
-
-#undef Allocator
-#undef list
-
-#endif
diff --git a/contrib/libg++/libstdc++/stl/hmap.h b/contrib/libg++/libstdc++/stl/hmap.h
deleted file mode 100644
index f40abc042ada..000000000000
--- a/contrib/libg++/libstdc++/stl/hmap.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-#ifndef HMAP_H
-#define HMAP_H
-
-#ifdef MAP_H
-#undef MAP_H
-#undef TREE_H
-#define __MAP_WAS_DEFINED
-#endif
-
-#define Allocator huge_allocator
-#define map huge_map
-#define rb_tree huge_rb_tree
-#include <hugalloc.h>
-#include <map.h>
-
-#undef MAP_H
-#undef TREE_H
-
-#ifdef __MAP_WAS_DEFINED
-#define MAP_H
-#define TREE_H
-#undef __MAP_WAS_DEFINED
-#endif
-
-#undef Allocator
-#undef map
-#undef rb_tree
-
-#endif
diff --git a/contrib/libg++/libstdc++/stl/hmultmap.h b/contrib/libg++/libstdc++/stl/hmultmap.h
deleted file mode 100644
index 0a8551e9ec53..000000000000
--- a/contrib/libg++/libstdc++/stl/hmultmap.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-#ifndef HMULTIMAP_H
-#define HMULTIMAP_H
-
-#ifdef MULTIMAP_H
-#undef MULTIMAP_H
-#undef TREE_H
-#define __MULTIMAP_WAS_DEFINED
-#endif
-
-#define Allocator huge_allocator
-#define multimap huge_multimap
-#define rb_tree huge_rb_tree
-#include <hugalloc.h>
-#include <multimap.h>
-
-#undef MULTIMAP_H
-#undef TREE_H
-
-#ifdef __MULTIMAP_WAS_DEFINED
-#define MULTIMAP_H
-#define TREE_H
-#undef __MULTIMAP_WAS_DEFINED
-#endif
-
-#undef Allocator
-#undef multimap
-#undef rb_tree
-
-#endif
diff --git a/contrib/libg++/libstdc++/stl/hmultset.h b/contrib/libg++/libstdc++/stl/hmultset.h
deleted file mode 100644
index e207299603fb..000000000000
--- a/contrib/libg++/libstdc++/stl/hmultset.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-#ifndef HMULTISET_H
-#define HMULTISET_H
-
-#ifdef MULTISET_H
-#undef MULTISET_H
-#undef TREE_H
-#define __MULTISET_WAS_DEFINED
-#endif
-
-#define Allocator huge_allocator
-#define multiset huge_multiset
-#define rb_tree huge_rb_tree
-#include <hugalloc.h>
-#include <multiset.h>
-
-#undef MULTISET_H
-#undef TREE_H
-
-#ifdef __MULTISET_WAS_DEFINED
-#define MULTISET_H
-#define TREE_H
-#undef __MULTISET_WAS_DEFINED
-#endif
-
-#undef Allocator
-#undef multiset
-#undef rb_tree
-
-#endif
diff --git a/contrib/libg++/libstdc++/stl/hset.h b/contrib/libg++/libstdc++/stl/hset.h
deleted file mode 100644
index 11a157632168..000000000000
--- a/contrib/libg++/libstdc++/stl/hset.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-#ifndef HSET_H
-#define HSET_H
-
-#ifdef SET_H
-#undef SET_H
-#undef TREE_H
-#define __SET_WAS_DEFINED
-#endif
-
-#define Allocator huge_allocator
-#define set huge_set
-#define rb_tree huge_rb_tree
-#include <hugalloc.h>
-#include <set.h>
-
-#undef SET_H
-#undef TREE_H
-
-#ifdef __SET_WAS_DEFINED
-#define SET_H
-#define TREE_H
-#undef __SET_WAS_DEFINED
-#endif
-
-#undef Allocator
-#undef set
-#undef rb_tree
-
-#endif
diff --git a/contrib/libg++/libstdc++/stl/hugalloc.h b/contrib/libg++/libstdc++/stl/hugalloc.h
deleted file mode 100644
index a793ab27fd7c..000000000000
--- a/contrib/libg++/libstdc++/stl/hugalloc.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-#ifndef HUGALLOC_H
-#define HUGALLOC_H
-
-#ifdef FARALLOC_H
-#undef FARALLOC_H
-#define __FARALLOC_WAS_DEFINED
-#endif
-
-#define __far __huge
-#define far_allocator huge_allocator
-#include <faralloc.h>
-#undef __far
-#undef far_allocator
-
-#undef FARALLOC_H
-
-#ifdef __FARALLOC_WAS_DEFINED
-#define FARALLOC_H
-#undef __FARALLOC_WAS_DEFINED
-#endif
-
-#endif
-
diff --git a/contrib/libg++/libstdc++/stl/hvector.h b/contrib/libg++/libstdc++/stl/hvector.h
deleted file mode 100644
index e7fb41530db8..000000000000
--- a/contrib/libg++/libstdc++/stl/hvector.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-#ifndef HVECTOR_H
-#define HVECTOR_H
-
-#ifdef VECTOR_H
-#undef VECTOR_H
-#define __VECTOR_WAS_DEFINED
-#endif
-
-#define Allocator huge_allocator
-#define vector huge_vector
-#include <hugalloc.h>
-#include <vector.h>
-
-#undef VECTOR_H
-
-#ifdef __VECTOR_WAS_DEFINED
-#define VECTOR_H
-#undef __VECTOR_WAS_DEFINED
-#endif
-
-#undef Allocator
-#undef vector
-
-#endif
diff --git a/contrib/libg++/libstdc++/stl/iterator.h b/contrib/libg++/libstdc++/stl/iterator.h
deleted file mode 100644
index 5e51598f200f..000000000000
--- a/contrib/libg++/libstdc++/stl/iterator.h
+++ /dev/null
@@ -1,395 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-#ifndef ITERATOR_H
-#define ITERATOR_H
-
-#include <stddef.h>
-#include <iostream.h>
-#ifndef __GNUG__
-#include <bool.h>
-#endif
-#include <function.h>
-
-struct input_iterator_tag {};
-struct output_iterator_tag {};
-struct forward_iterator_tag {};
-struct bidirectional_iterator_tag {};
-struct random_access_iterator_tag {};
-
-template <class T, class Distance> struct input_iterator {};
-struct output_iterator {};
-template <class T, class Distance> struct forward_iterator {};
-template <class T, class Distance> struct bidirectional_iterator {};
-template <class T, class Distance> struct random_access_iterator {};
-
-template <class T, class Distance>
-inline input_iterator_tag
-iterator_category(const input_iterator<T, Distance>&) {
- return input_iterator_tag();
-}
-
-inline output_iterator_tag iterator_category(const output_iterator&) {
- return output_iterator_tag();
-}
-
-template <class T, class Distance>
-inline forward_iterator_tag
-iterator_category(const forward_iterator<T, Distance>&) {
- return forward_iterator_tag();
-}
-
-template <class T, class Distance>
-inline bidirectional_iterator_tag
-iterator_category(const bidirectional_iterator<T, Distance>&) {
- return bidirectional_iterator_tag();
-}
-
-template <class T, class Distance>
-inline random_access_iterator_tag
-iterator_category(const random_access_iterator<T, Distance>&) {
- return random_access_iterator_tag();
-}
-
-template <class T>
-inline random_access_iterator_tag iterator_category(const T*) {
- return random_access_iterator_tag();
-}
-
-template <class T, class Distance>
-inline T* value_type(const input_iterator<T, Distance>&) {
- return (T*)(0);
-}
-
-template <class T, class Distance>
-inline T* value_type(const forward_iterator<T, Distance>&) {
- return (T*)(0);
-}
-
-template <class T, class Distance>
-inline T* value_type(const bidirectional_iterator<T, Distance>&) {
- return (T*)(0);
-}
-
-template <class T, class Distance>
-inline T* value_type(const random_access_iterator<T, Distance>&) {
- return (T*)(0);
-}
-
-template <class T>
-inline T* value_type(const T*) { return (T*)(0); }
-
-template <class T, class Distance>
-inline Distance* distance_type(const input_iterator<T, Distance>&) {
- return (Distance*)(0);
-}
-
-template <class T, class Distance>
-inline Distance* distance_type(const forward_iterator<T, Distance>&) {
- return (Distance*)(0);
-}
-
-template <class T, class Distance>
-inline Distance*
-distance_type(const bidirectional_iterator<T, Distance>&) {
- return (Distance*)(0);
-}
-
-template <class T, class Distance>
-inline Distance*
-distance_type(const random_access_iterator<T, Distance>&) {
- return (Distance*)(0);
-}
-
-template <class T>
-inline ptrdiff_t* distance_type(const T*) { return (ptrdiff_t*)(0); }
-
-template <class Container>
-class back_insert_iterator : public output_iterator {
-protected:
- Container& container;
-public:
- back_insert_iterator(Container& x) : container(x) {}
- back_insert_iterator<Container>&
- operator=(const Container::value_type& value) {
- container.push_back(value);
- return *this;
- }
- back_insert_iterator<Container>& operator*() { return *this; }
- back_insert_iterator<Container>& operator++() { return *this; }
- back_insert_iterator<Container>& operator++(int) { return *this; }
-};
-
-template <class Container>
-back_insert_iterator<Container> back_inserter(Container& x) {
- return back_insert_iterator<Container>(x);
-}
-
-template <class Container>
-class front_insert_iterator : public output_iterator {
-protected:
- Container& container;
-public:
- front_insert_iterator(Container& x) : container(x) {}
- front_insert_iterator<Container>&
- operator=(const Container::value_type& value) {
- container.push_front(value);
- return *this;
- }
- front_insert_iterator<Container>& operator*() { return *this; }
- front_insert_iterator<Container>& operator++() { return *this; }
- front_insert_iterator<Container>& operator++(int) { return *this; }
-};
-
-template <class Container>
-front_insert_iterator<Container> front_inserter(Container& x) {
- return front_insert_iterator<Container>(x);
-}
-
-template <class Container>
-class insert_iterator : public output_iterator {
-protected:
- Container& container;
- Container::iterator iter;
-public:
- insert_iterator(Container& x, Container::iterator i)
- : container(x), iter(i) {}
- insert_iterator<Container>&
- operator=(const Container::value_type& value) {
- iter = container.insert(iter, value);
- ++iter;
- return *this;
- }
- insert_iterator<Container>& operator*() { return *this; }
- insert_iterator<Container>& operator++() { return *this; }
- insert_iterator<Container>& operator++(int) { return *this; }
-};
-
-template <class Container, class Iterator>
-insert_iterator<Container> inserter(Container& x, Iterator i) {
- return insert_iterator<Container>(x, Container::iterator(i));
-}
-
-template <class BidirectionalIterator, class T, class Reference,
- class Distance = ptrdiff_t>
-// Reference = T&
-class reverse_bidirectional_iterator
- : public bidirectional_iterator<T, Distance> {
- typedef reverse_bidirectional_iterator<BidirectionalIterator, T, Reference,
- Distance> self;
- friend bool operator==(const self& x, const self& y);
-protected:
- BidirectionalIterator current;
-public:
- reverse_bidirectional_iterator() {}
- reverse_bidirectional_iterator(BidirectionalIterator x) : current(x) {}
- BidirectionalIterator base() { return current; }
- Reference operator*() const {
- BidirectionalIterator tmp = current;
- return *--tmp;
- }
- self& operator++() {
- --current;
- return *this;
- }
- self operator++(int) {
- self tmp = *this;
- --current;
- return tmp;
- }
- self& operator--() {
- ++current;
- return *this;
- }
- self operator--(int) {
- self tmp = *this;
- ++current;
- return tmp;
- }
-};
-
-template <class BidirectionalIterator, class T, class Reference,
- class Distance>
-inline bool operator==(
- const reverse_bidirectional_iterator<BidirectionalIterator, T, Reference,
- Distance>& x,
- const reverse_bidirectional_iterator<BidirectionalIterator, T, Reference,
- Distance>& y) {
- return x.current == y.current;
-}
-
-template <class RandomAccessIterator, class T, class Reference,
- class Distance = ptrdiff_t>
-// Reference = T&
-class reverse_iterator : public random_access_iterator<T, Distance> {
- typedef reverse_iterator<RandomAccessIterator, T, Reference, Distance>
- self;
- friend bool operator==(const self& x, const self& y);
- friend bool operator<(const self& x, const self& y);
- friend Distance operator-(const self& x, const self& y);
- friend self operator+(Distance n, const self& x);
-protected:
- RandomAccessIterator current;
-public:
- reverse_iterator() {}
- reverse_iterator(RandomAccessIterator x) : current(x) {}
- RandomAccessIterator base() { return current; }
- Reference operator*() const { return *(current - 1); }
- self& operator++() {
- --current;
- return *this;
- }
- self operator++(int) {
- self tmp = *this;
- --current;
- return tmp;
- }
- self& operator--() {
- ++current;
- return *this;
- }
- self operator--(int) {
- self tmp = *this;
- ++current;
- return tmp;
- }
- self operator+(Distance n) const {
- return self(current - n);
- }
- self& operator+=(Distance n) {
- current -= n;
- return *this;
- }
- self operator-(Distance n) const {
- return self(current + n);
- }
- self& operator-=(Distance n) {
- current += n;
- return *this;
- }
- Reference operator[](Distance n) { return *(*this + n); }
-};
-
-template <class RandomAccessIterator, class T, class Reference, class Distance>
-inline bool operator==(const reverse_iterator<RandomAccessIterator, T,
- Reference, Distance>& x,
- const reverse_iterator<RandomAccessIterator, T,
- Reference, Distance>& y) {
- return x.current == y.current;
-}
-
-template <class RandomAccessIterator, class T, class Reference, class Distance>
-inline bool operator<(const reverse_iterator<RandomAccessIterator, T,
- Reference, Distance>& x,
- const reverse_iterator<RandomAccessIterator, T,
- Reference, Distance>& y) {
- return y.current < x.current;
-}
-
-template <class RandomAccessIterator, class T, class Reference, class Distance>
-inline Distance operator-(const reverse_iterator<RandomAccessIterator, T,
- Reference, Distance>& x,
- const reverse_iterator<RandomAccessIterator, T,
- Reference, Distance>& y) {
- return y.current - x.current;
-}
-
-template <class RandomAccessIterator, class T, class Reference, class Distance>
-inline reverse_iterator<RandomAccessIterator, T, Reference, Distance>
-operator+(Distance n,
- const reverse_iterator<RandomAccessIterator, T, Reference,
- Distance>& x) {
- return reverse_iterator<RandomAccessIterator, T, Reference, Distance>
- (x.current - n);
-}
-
-
-template <class OutputIterator, class T>
-class raw_storage_iterator : public output_iterator {
-protected:
- OutputIterator iter;
-public:
- raw_storage_iterator(OutputIterator x) : iter(x) {}
- raw_storage_iterator<OutputIterator, T>& operator*() { return *this; }
- raw_storage_iterator<OutputIterator, T>& operator=(const T& element) {
- construct(iter, element);
- return *this;
- }
- raw_storage_iterator<OutputIterator, T>& operator++() {
- ++iter;
- return *this;
- }
- raw_storage_iterator<OutputIterator, T> operator++(int) {
- raw_storage_iterator<OutputIterator, T> tmp = *this;
- ++iter;
- return tmp;
- }
-};
-
-
-template <class T, class Distance = ptrdiff_t>
-class istream_iterator : public input_iterator<T, Distance> {
-friend bool operator==(const istream_iterator<T, Distance>& x,
- const istream_iterator<T, Distance>& y);
-protected:
- istream* stream;
- T value;
- bool end_marker;
- void read() {
- end_marker = (*stream) ? true : false;
- if (end_marker) *stream >> value;
- end_marker = (*stream) ? true : false;
- }
-public:
- istream_iterator() : stream(&cin), end_marker(false) {}
- istream_iterator(istream& s) : stream(&s) { read(); }
- const T& operator*() const { return value; }
- istream_iterator<T, Distance>& operator++() {
- read();
- return *this;
- }
- istream_iterator<T, Distance> operator++(int) {
- istream_iterator<T, Distance> tmp = *this;
- read();
- return tmp;
- }
-};
-
-template <class T, class Distance>
-bool operator==(const istream_iterator<T, Distance>& x,
- const istream_iterator<T, Distance>& y) {
- return x.stream == y.stream && x.end_marker == y.end_marker ||
- x.end_marker == false && y.end_marker == false;
-}
-
-template <class T>
-class ostream_iterator : public output_iterator {
-protected:
- ostream* stream;
- char* string;
-public:
- ostream_iterator(ostream& s) : stream(&s), string(0) {}
- ostream_iterator(ostream& s, char* c) : stream(&s), string(c) {}
- ostream_iterator<T>& operator=(const T& value) {
- *stream << value;
- if (string) *stream << string;
- return *this;
- }
- ostream_iterator<T>& operator*() { return *this; }
- ostream_iterator<T>& operator++() { return *this; }
- ostream_iterator<T>& operator++(int) { return *this; }
-};
-
-#endif
diff --git a/contrib/libg++/libstdc++/stl/lbvector.h b/contrib/libg++/libstdc++/stl/lbvector.h
deleted file mode 100644
index 763666c3d39b..000000000000
--- a/contrib/libg++/libstdc++/stl/lbvector.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-#ifndef LBVECTOR_H
-#define LBVECTOR_H
-
-#ifdef BVECTOR_H
-#undef BVECTOR_H
-#define __BVECTOR_WAS_DEFINED
-#endif
-
-#define Allocator long_allocator
-#define bit_vector long_bit_vector
-#include <lngalloc.h>
-#include <bvector.h>
-
-#undef BVECTOR_H
-
-#ifdef __BVECTOR_WAS_DEFINED
-#define BVECTOR_H
-#undef __BVECTOR_WAS_DEFINED
-#endif
-
-#undef Allocator
-#undef bit_vector
-
-#endif
diff --git a/contrib/libg++/libstdc++/stl/ldeque.h b/contrib/libg++/libstdc++/stl/ldeque.h
deleted file mode 100644
index 4c8761c9f8be..000000000000
--- a/contrib/libg++/libstdc++/stl/ldeque.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-#ifndef LDEQUE_H
-#define LDEQUE_H
-
-#ifdef DEQUE_H
-#undef DEQUE_H
-#define __DEQUE_WAS_DEFINED
-#endif
-
-#define Allocator long_allocator
-#define deque long_deque
-#include <lngalloc.h>
-#include <deque.h>
-
-#undef DEQUE_H
-
-#ifdef __DEQUE_WAS_DEFINED
-#define DEQUE_H
-#undef __DEQUE_WAS_DEFINED
-#endif
-
-#undef Allocator
-#undef deque
-
-#endif
diff --git a/contrib/libg++/libstdc++/stl/list.h b/contrib/libg++/libstdc++/stl/list.h
deleted file mode 100644
index 42b5d0f5f673..000000000000
--- a/contrib/libg++/libstdc++/stl/list.h
+++ /dev/null
@@ -1,531 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-#ifndef LIST_H
-#define LIST_H
-
-#include <function.h>
-#include <algobase.h>
-#include <iterator.h>
-#ifndef __GNUG__
-#include <bool.h>
-#endif
-
-#ifndef Allocator
-#define Allocator allocator
-#include <defalloc.h>
-#endif
-
-#ifndef list
-#define list list
-#endif
-
-template <class T>
-class list {
-protected:
- typedef Allocator<void>::pointer void_pointer;
- struct list_node;
- friend list_node;
- struct list_node {
- void_pointer next;
- void_pointer prev;
- T data;
- };
-#ifndef __GNUG__
- static Allocator<list_node> list_node_allocator;
- static Allocator<T> value_allocator;
-#endif
-public:
- typedef T value_type;
- typedef Allocator<T> value_allocator_type;
- typedef Allocator<T>::pointer pointer;
- typedef Allocator<T>::reference reference;
- typedef Allocator<T>::const_reference const_reference;
- typedef Allocator<list_node> list_node_allocator_type;
- typedef Allocator<list_node>::pointer link_type;
- typedef Allocator<list_node>::size_type size_type;
- typedef Allocator<list_node>::difference_type difference_type;
-protected:
-#ifdef __GNUG__
- link_type get_node() { return (link_type)(::operator new(sizeof(list_node))); }
- void put_node(link_type p) { ::operator delete(p); }
-#else
- size_type buffer_size() {
- return list_node_allocator.init_page_size();
- }
- struct list_node_buffer;
- friend list_node_buffer;
- struct list_node_buffer {
- void_pointer next_buffer;
- link_type buffer;
- };
-public:
- typedef Allocator<list_node_buffer> buffer_allocator_type;
- typedef Allocator<list_node_buffer>::pointer buffer_pointer;
-protected:
- static Allocator<list_node_buffer> buffer_allocator;
- static buffer_pointer buffer_list;
- static link_type free_list;
- static link_type next_avail;
- static link_type last;
- void add_new_buffer() {
- buffer_pointer tmp = buffer_allocator.allocate((size_type)1);
- tmp->buffer = list_node_allocator.allocate(buffer_size());
- tmp->next_buffer = buffer_list;
- buffer_list = tmp;
- next_avail = buffer_list->buffer;
- last = next_avail + buffer_size();
- }
- static size_type number_of_lists;
- void deallocate_buffers();
- link_type get_node() {
- link_type tmp = free_list;
- return free_list ? (free_list = (link_type)(free_list->next), tmp)
- : (next_avail == last ? (add_new_buffer(), next_avail++)
- : next_avail++);
- // ugly code for inlining - avoids multiple returns
- }
- void put_node(link_type p) {
- p->next = free_list;
- free_list = p;
- }
-#endif
-
- link_type node;
- size_type length;
-public:
- class iterator;
- class const_iterator;
- class iterator : public bidirectional_iterator<T, difference_type> {
- friend class list<T>;
- friend class const_iterator;
-// friend bool operator==(const iterator& x, const iterator& y);
- protected:
- link_type node;
- iterator(link_type x) : node(x) {}
- public:
- iterator() {}
- bool operator==(const iterator& x) const { return node == x.node; }
- reference operator*() const { return (*node).data; }
- iterator& operator++() {
- node = (link_type)((*node).next);
- return *this;
- }
- iterator operator++(int) {
- iterator tmp = *this;
- ++*this;
- return tmp;
- }
- iterator& operator--() {
- node = (link_type)((*node).prev);
- return *this;
- }
- iterator operator--(int) {
- iterator tmp = *this;
- --*this;
- return tmp;
- }
- };
- class const_iterator : public bidirectional_iterator<T, difference_type> {
- friend class list<T>;
- protected:
- link_type node;
- const_iterator(link_type x) : node(x) {}
- public:
- const_iterator() {}
- const_iterator(const iterator& x) : node(x.node) {}
- bool operator==(const const_iterator& x) const { return node == x.node; }
- const_reference operator*() const { return (*node).data; }
- const_iterator& operator++() {
- node = (link_type)((*node).next);
- return *this;
- }
- const_iterator operator++(int) {
- const_iterator tmp = *this;
- ++*this;
- return tmp;
- }
- const_iterator& operator--() {
- node = (link_type)((*node).prev);
- return *this;
- }
- const_iterator operator--(int) {
- const_iterator tmp = *this;
- --*this;
- return tmp;
- }
- };
- typedef reverse_bidirectional_iterator<const_iterator, value_type,
- const_reference, difference_type>
- const_reverse_iterator;
- typedef reverse_bidirectional_iterator<iterator, value_type, reference,
- difference_type>
- reverse_iterator;
- list() : length(0) {
-#ifndef __GNUG__
- ++number_of_lists;
-#endif
- node = get_node();
- (*node).next = node;
- (*node).prev = node;
- }
- iterator begin() { return (link_type)((*node).next); }
- const_iterator begin() const { return (link_type)((*node).next); }
- iterator end() { return node; }
- const_iterator end() const { return node; }
- reverse_iterator rbegin() { return reverse_iterator(end()); }
- const_reverse_iterator rbegin() const {
- return const_reverse_iterator(end());
- }
- reverse_iterator rend() { return reverse_iterator(begin()); }
- const_reverse_iterator rend() const {
- return const_reverse_iterator(begin());
- }
- bool empty() const { return length == 0; }
- size_type size() const { return length; }
-#ifndef __GNUG__
- size_type max_size() const { return list_node_allocator.max_size(); }
-#endif
- reference front() { return *begin(); }
- const_reference front() const { return *begin(); }
- reference back() { return *(--end()); }
- const_reference back() const { return *(--end()); }
- void swap(list<T>& x) {
- ::swap(node, x.node);
- ::swap(length, x.length);
- }
- iterator insert(iterator position, const T& x) {
- link_type tmp = get_node();
-#ifdef __GNUG__
- construct(&(*tmp).data, x);
-#else
- construct(value_allocator.address((*tmp).data), x);
-#endif
- (*tmp).next = position.node;
- (*tmp).prev = (*position.node).prev;
- (*(link_type((*position.node).prev))).next = tmp;
- (*position.node).prev = tmp;
- ++length;
- return tmp;
- }
-#ifdef __GNUG__
- void insert(iterator position, const T* first, const T* last) {
- while (first != last) insert(position, *first++);
- }
- void insert(iterator position, const_iterator first,
- const_iterator last) {
- while (first != last) insert(position, *first++);
- }
- void insert(iterator position, size_type n, const T& x) {
- while (n--) insert(position, x);
- }
-#else
- void insert(iterator position, const T* first, const T* last);
- void insert(iterator position, const_iterator first,
- const_iterator last);
- void insert(iterator position, size_type n, const T& x);
-#endif
- void push_front(const T& x) { insert(begin(), x); }
- void push_back(const T& x) { insert(end(), x); }
- void erase(iterator position) {
- (*(link_type((*position.node).prev))).next = (*position.node).next;
- (*(link_type((*position.node).next))).prev = (*position.node).prev;
-#ifdef __GNUG__
- destroy(&(*position.node).data);
-#else
- destroy(value_allocator.address((*position.node).data));
-#endif
- put_node(position.node);
- --length;
- }
-#ifdef __GNUG__
- void erase(iterator first, iterator last) {
- while (first != last) erase(first++);
- }
-#else
- void erase(iterator first, iterator last);
-#endif
- void pop_front() { erase(begin()); }
- void pop_back() {
- iterator tmp = end();
- erase(--tmp);
- }
- list(size_type n, const T& value = T()) : length(0) {
-#ifndef __GNUG__
- ++number_of_lists;
-#endif
- node = get_node();
- (*node).next = node;
- (*node).prev = node;
- insert(begin(), n, value);
- }
- list(const T* first, const T* last) : length(0) {
-#ifndef __GNUG__
- ++number_of_lists;
-#endif
- node = get_node();
- (*node).next = node;
- (*node).prev = node;
- insert(begin(), first, last);
- }
- list(const list<T>& x) : length(0) {
-#ifndef __GNUG__
- ++number_of_lists;
-#endif
- node = get_node();
- (*node).next = node;
- (*node).prev = node;
- insert(begin(), x.begin(), x.end());
- }
- ~list() {
- erase(begin(), end());
- put_node(node);
-#ifndef __GNUG__
- if (--number_of_lists == 0) deallocate_buffers();
-#endif
- }
- list<T>& operator=(const list<T>& x);
-protected:
- void transfer(iterator position, iterator first, iterator last) {
- (*(link_type((*last.node).prev))).next = position.node;
- (*(link_type((*first.node).prev))).next = last.node;
- (*(link_type((*position.node).prev))).next = first.node;
- link_type tmp = link_type((*position.node).prev);
- (*position.node).prev = (*last.node).prev;
- (*last.node).prev = (*first.node).prev;
- (*first.node).prev = tmp;
- }
-public:
- void splice(iterator position, list<T>& x) {
- if (!x.empty()) {
- transfer(position, x.begin(), x.end());
- length += x.length;
- x.length = 0;
- }
- }
- void splice(iterator position, list<T>& x, iterator i) {
- iterator j = i;
- if (position == i || position == ++j) return;
- transfer(position, i, j);
- ++length;
- --x.length;
- }
- void splice(iterator position, list<T>& x, iterator first, iterator last) {
- if (first != last) {
- if (&x != this) {
- difference_type n = 0;
- distance(first, last, n);
- x.length -= n;
- length += n;
- }
- transfer(position, first, last);
- }
- }
- void remove(const T& value);
- void unique();
- void merge(list<T>& x);
- void reverse();
- void sort();
-#ifdef __GNUG__
- friend difference_type* distance_type(const iterator&) {
- return (difference_type*)(0);
- }
- friend T* value_type(const iterator&) {
- return (T*)(0);
- }
- friend bidirectional_iterator_tag iterator_category(iterator) {
- return bidirectional_iterator_tag();
- }
-#endif
-};
-
-#ifndef __GNUG__
-template <class T>
-list<T>::buffer_pointer list<T>::buffer_list = 0;
-
-template <class T>
-list<T>::link_type list<T>::free_list = 0;
-
-template <class T>
-list<T>::link_type list<T>::next_avail = 0;
-
-template <class T>
-list<T>::link_type list<T>::last = 0;
-
-template <class T>
-list<T>::size_type list<T>::number_of_lists = 0;
-
-template <class T>
-list<T>::list_node_allocator_type list<T>::list_node_allocator;
-
-template <class T>
-list<T>::value_allocator_type list<T>::value_allocator;
-
-template <class T>
-list<T>::buffer_allocator_type list<T>::buffer_allocator;
-#endif
-
-/*
- * currently the following does not work - made into a member function
-
-template <class T>
-inline bool operator==(const list<T>::iterator& x, const list<T>::iterator& y) {
- return x.node == y.node;
-}
-*/
-
-template <class T>
-inline bool operator==(const list<T>& x, const list<T>& y) {
- return x.size() == y.size() && equal(x.begin(), x.end(), y.begin());
-}
-
-template <class T>
-inline bool operator<(const list<T>& x, const list<T>& y) {
- return lexicographical_compare(x.begin(), x.end(), y.begin(), y.end());
-}
-
-#ifndef __GNUG__
-template <class T>
-void list<T>::deallocate_buffers() {
- while (buffer_list) {
- buffer_pointer tmp = buffer_list;
- buffer_list = (buffer_pointer)(buffer_list->next_buffer);
- list_node_allocator.deallocate(tmp->buffer);
- buffer_allocator.deallocate(tmp);
- }
- free_list = 0;
- next_avail = 0;
- last = 0;
-}
-#endif
-
-#ifndef __GNUG__
-template <class T>
-void list<T>::insert(iterator position, const T* first, const T* last) {
- while (first != last) insert(position, *first++);
-}
-
-template <class T>
-void list<T>::insert(iterator position, const_iterator first,
- const_iterator last) {
- while (first != last) insert(position, *first++);
-}
-
-template <class T>
-void list<T>::insert(iterator position, size_type n, const T& x) {
- while (n--) insert(position, x);
-}
-
-template <class T>
-void list<T>::erase(iterator first, iterator last) {
- while (first != last) erase(first++);
-}
-#endif
-
-template <class T>
-list<T>& list<T>::operator=(const list<T>& x) {
- if (this != &x) {
- iterator first1 = begin();
- iterator last1 = end();
- const_iterator first2 = x.begin();
- const_iterator last2 = x.end();
- while (first1 != last1 && first2 != last2) *first1++ = *first2++;
- if (first2 == last2)
- erase(first1, last1);
- else
- insert(last1, first2, last2);
- }
- return *this;
-}
-
-template <class T>
-void list<T>::remove(const T& value) {
- iterator first = begin();
- iterator last = end();
- while (first != last) {
- iterator next = first;
- ++next;
- if (*first == value) erase(first);
- first = next;
- }
-}
-
-template <class T>
-void list<T>::unique() {
- iterator first = begin();
- iterator last = end();
- if (first == last) return;
- iterator next = first;
- while (++next != last) {
- if (*first == *next)
- erase(next);
- else
- first = next;
- next = first;
- }
-}
-
-template <class T>
-void list<T>::merge(list<T>& x) {
- iterator first1 = begin();
- iterator last1 = end();
- iterator first2 = x.begin();
- iterator last2 = x.end();
- while (first1 != last1 && first2 != last2)
- if (*first2 < *first1) {
- iterator next = first2;
- transfer(first1, first2, ++next);
- first2 = next;
- } else
- ++first1;
- if (first2 != last2) transfer(last1, first2, last2);
- length += x.length;
- x.length= 0;
-}
-
-template <class T>
-void list<T>::reverse() {
- if (size() < 2) return;
- for (iterator first = ++begin(); first != end();) {
- iterator old = first++;
- transfer(begin(), old, first);
- }
-}
-
-template <class T>
-void list<T>::sort() {
- if (size() < 2) return;
- list<T> carry;
- list<T> counter[64];
- int fill = 0;
- while (!empty()) {
- carry.splice(carry.begin(), *this, begin());
- int i = 0;
- while(i < fill && !counter[i].empty()) {
- counter[i].merge(carry);
- carry.swap(counter[i++]);
- }
- carry.swap(counter[i]);
- if (i == fill) ++fill;
- }
-
- for (int i = 1; i < fill; ++i) counter[i].merge(counter[i-1]);
- swap(counter[fill-1]);
-}
-
-#undef Allocator
-#undef list
-
-#endif
diff --git a/contrib/libg++/libstdc++/stl/llist.h b/contrib/libg++/libstdc++/stl/llist.h
deleted file mode 100644
index 07ee6113a096..000000000000
--- a/contrib/libg++/libstdc++/stl/llist.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-#ifndef LLIST_H
-#define LLIST_H
-
-#ifdef LIST_H
-#undef LIST_H
-#define __LIST_WAS_DEFINED
-#endif
-
-#define Allocator long_allocator
-#define list long_list
-#include <lngalloc.h>
-#include <list.h>
-
-#undef LIST_H
-
-#ifdef __LIST_WAS_DEFINED
-#define LIST_H
-#undef __LIST_WAS_DEFINED
-#endif
-
-#undef Allocator
-#undef list
-
-#endif
diff --git a/contrib/libg++/libstdc++/stl/lmap.h b/contrib/libg++/libstdc++/stl/lmap.h
deleted file mode 100644
index da1eeba6c8cc..000000000000
--- a/contrib/libg++/libstdc++/stl/lmap.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-#ifndef LMAP_H
-#define LMAP_H
-
-#ifdef MAP_H
-#undef MAP_H
-#undef TREE_H
-#define __MAP_WAS_DEFINED
-#endif
-
-#define Allocator long_allocator
-#define map long_map
-#define rb_tree long_rb_tree
-#include <lngalloc.h>
-#include <map.h>
-
-#undef MAP_H
-#undef TREE_H
-
-#ifdef __MAP_WAS_DEFINED
-#define MAP_H
-#define TREE_H
-#undef __MAP_WAS_DEFINED
-#endif
-
-#undef Allocator
-#undef map
-#undef rb_tree
-
-#endif
diff --git a/contrib/libg++/libstdc++/stl/lmultmap.h b/contrib/libg++/libstdc++/stl/lmultmap.h
deleted file mode 100644
index 1a87e3372d8d..000000000000
--- a/contrib/libg++/libstdc++/stl/lmultmap.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-#ifndef LMULTIMAP_H
-#define LMULTIMAP_H
-
-#ifdef MULTIMAP_H
-#undef MULTIMAP_H
-#undef TREE_H
-#define __MULTIMAP_WAS_DEFINED
-#endif
-
-#define Allocator long_allocator
-#define multimap long_multimap
-#define rb_tree long_rb_tree
-#include <lngalloc.h>
-#include <multimap.h>
-
-#undef MULTIMAP_H
-#undef TREE_H
-
-#ifdef __MULTIMAP_WAS_DEFINED
-#define MULTIMAP_H
-#define TREE_H
-#undef __MULTIMAP_WAS_DEFINED
-#endif
-
-#undef Allocator
-#undef multimap
-#undef rb_tree
-
-#endif
diff --git a/contrib/libg++/libstdc++/stl/lmultset.h b/contrib/libg++/libstdc++/stl/lmultset.h
deleted file mode 100644
index bb1571f6c906..000000000000
--- a/contrib/libg++/libstdc++/stl/lmultset.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-#ifndef LMULTISET_H
-#define LMULTISET_H
-
-#ifdef MULTISET_H
-#undef MULTISET_H
-#undef TREE_H
-#define __MULTISET_WAS_DEFINED
-#endif
-
-#define Allocator long_allocator
-#define multiset long_multiset
-#define rb_tree long_rb_tree
-#include <lngalloc.h>
-#include <multiset.h>
-
-#undef MULTISET_H
-#undef TREE_H
-
-#ifdef __MULTISET_WAS_DEFINED
-#define MULTISET_H
-#define TREE_H
-#undef __MULTISET_WAS_DEFINED
-#endif
-
-#undef Allocator
-#undef multiset
-#undef rb_tree
-
-#endif
diff --git a/contrib/libg++/libstdc++/stl/lngalloc.h b/contrib/libg++/libstdc++/stl/lngalloc.h
deleted file mode 100644
index 6685ea54511c..000000000000
--- a/contrib/libg++/libstdc++/stl/lngalloc.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-#ifndef LNGALLOC_H
-#define LNGALLOC_H
-
-#include <limits.h>
-#include <algobase.h>
-#include <defalloc.h>
-
-template <class T>
-class long_allocator {
-public:
- typedef T value_type;
- typedef T* pointer;
- typedef const T* const_pointer;
- typedef T& reference;
- typedef const T& const_reference;
- typedef unsigned long size_type;
- typedef long difference_type;
- pointer allocate(size_type n) {
- return ::allocate((difference_type)n, (pointer)0);
- }
- void deallocate(pointer p) { ::deallocate(p); }
- pointer address(reference x) { return (pointer)&x; }
- const_pointer const_address(const_reference x) {
- return (const_pointer)&x;
- }
- size_type init_page_size() {
- return max(size_type(1), size_type(4096/sizeof(T)));
- }
- size_type max_size() const {
- return max(size_type(1), size_type(ULONG_MAX/sizeof(T)));
- }
-};
-
-class long_allocator<void> {
-public:
- typedef void* pointer;
-};
-
-#endif
diff --git a/contrib/libg++/libstdc++/stl/lset.h b/contrib/libg++/libstdc++/stl/lset.h
deleted file mode 100644
index e4d52f7c39e1..000000000000
--- a/contrib/libg++/libstdc++/stl/lset.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-#ifndef LSET_H
-#define LSET_H
-
-#ifdef SET_H
-#undef SET_H
-#undef TREE_H
-#define __SET_WAS_DEFINED
-#endif
-
-#define Allocator long_allocator
-#define set long_set
-#define rb_tree long_rb_tree
-#include <lngalloc.h>
-#include <set.h>
-
-#undef SET_H
-#undef TREE_H
-
-#ifdef __SET_WAS_DEFINED
-#define SET_H
-#define TREE_H
-#undef __SET_WAS_DEFINED
-#endif
-
-#undef Allocator
-#undef set
-#undef rb_tree
-
-#endif
diff --git a/contrib/libg++/libstdc++/stl/map.h b/contrib/libg++/libstdc++/stl/map.h
deleted file mode 100644
index 5c1c30d49e67..000000000000
--- a/contrib/libg++/libstdc++/stl/map.h
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-#ifndef MAP_H
-#define MAP_H
-
-#ifndef Allocator
-#define Allocator allocator
-#include <defalloc.h>
-#endif
-
-#include <tree.h>
-
-template <class Key, class T, class Compare>
-class map {
-public:
-
-// typedefs:
-
- typedef Key key_type;
- typedef pair<const Key, T> value_type;
- typedef Compare key_compare;
-
- class value_compare
- : public binary_function<value_type, value_type, bool> {
- friend class map<Key, T, Compare>;
- protected :
- Compare comp;
- value_compare(Compare c) : comp(c) {}
- public:
- bool operator()(const value_type& x, const value_type& y) const {
- return comp(x.first, y.first);
- }
- };
-
-private:
- typedef rb_tree<key_type, value_type,
- select1st<value_type, key_type>, key_compare> rep_type;
- rep_type t; // red-black tree representing map
-public:
- typedef rep_type::pointer pointer;
- typedef rep_type::reference reference;
- typedef rep_type::const_reference const_reference;
- typedef rep_type::iterator iterator;
- typedef rep_type::const_iterator const_iterator;
- typedef rep_type::reverse_iterator reverse_iterator;
- typedef rep_type::const_reverse_iterator const_reverse_iterator;
- typedef rep_type::size_type size_type;
- typedef rep_type::difference_type difference_type;
-
-// allocation/deallocation
-
- map(const Compare& comp = Compare()) : t(comp, false) {}
- map(const value_type* first, const value_type* last,
- const Compare& comp = Compare()) : t(first, last, comp, false) {}
- map(const map<Key, T, Compare>& x) : t(x.t, false) {}
- map<Key, T, Compare>& operator=(const map<Key, T, Compare>& x) {
- t = x.t;
- return *this;
- }
-
-// accessors:
-
- key_compare key_comp() const { return t.key_comp(); }
- value_compare value_comp() const { return value_compare(t.key_comp()); }
- iterator begin() { return t.begin(); }
- const_iterator begin() const { return t.begin(); }
- iterator end() { return t.end(); }
- const_iterator end() const { return t.end(); }
- reverse_iterator rbegin() { return t.rbegin(); }
- const_reverse_iterator rbegin() const { return t.rbegin(); }
- reverse_iterator rend() { return t.rend(); }
- const_reverse_iterator rend() const { return t.rend(); }
- bool empty() const { return t.empty(); }
- size_type size() const { return t.size(); }
-#ifndef __GNUG__
- size_type max_size() const { return t.max_size(); }
-#endif
- Allocator<T>::reference operator[](const key_type& k) {
- return (*((insert(value_type(k, T()))).first)).second;
- }
- void swap(map<Key, T, Compare>& x) { t.swap(x.t); }
-
-// insert/erase
-
- typedef pair<iterator, bool> pair_iterator_bool;
- // typedef done to get around compiler bug
- pair_iterator_bool insert(const value_type& x) { return t.insert(x); }
- iterator insert(iterator position, const value_type& x) {
- return t.insert(position, x);
- }
- void insert(const value_type* first, const value_type* last) {
- t.insert(first, last);
- }
- void erase(iterator position) { t.erase(position); }
- size_type erase(const key_type& x) { return t.erase(x); }
- void erase(iterator first, iterator last) { t.erase(first, last); }
-
-// map operations:
-
- iterator find(const key_type& x) { return t.find(x); }
- const_iterator find(const key_type& x) const { return t.find(x); }
- size_type count(const key_type& x) const { return t.count(x); }
- iterator lower_bound(const key_type& x) {return t.lower_bound(x); }
- const_iterator lower_bound(const key_type& x) const {
- return t.lower_bound(x);
- }
- iterator upper_bound(const key_type& x) {return t.upper_bound(x); }
- const_iterator upper_bound(const key_type& x) const {
- return t.upper_bound(x);
- }
- typedef pair<iterator, iterator> pair_iterator_iterator;
- // typedef done to get around compiler bug
- pair_iterator_iterator equal_range(const key_type& x) {
- return t.equal_range(x);
- }
- typedef pair<const_iterator, const_iterator> pair_citerator_citerator;
- // typedef done to get around compiler bug
- pair_citerator_citerator equal_range(const key_type& x) const {
- return t.equal_range(x);
- }
-};
-
-template <class Key, class T, class Compare>
-inline bool operator==(const map<Key, T, Compare>& x,
- const map<Key, T, Compare>& y) {
- return x.size() == y.size() && equal(x.begin(), x.end(), y.begin());
-}
-
-template <class Key, class T, class Compare>
-inline bool operator<(const map<Key, T, Compare>& x,
- const map<Key, T, Compare>& y) {
- return lexicographical_compare(x.begin(), x.end(), y.begin(), y.end());
-}
-
-#undef Allocator
-
-#endif
diff --git a/contrib/libg++/libstdc++/stl/multimap.h b/contrib/libg++/libstdc++/stl/multimap.h
deleted file mode 100644
index 2478e2419fa6..000000000000
--- a/contrib/libg++/libstdc++/stl/multimap.h
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-#ifndef MULTIMAP_H
-#define MULTIMAP_H
-
-#ifndef Allocator
-#define Allocator allocator
-#include <defalloc.h>
-#endif
-
-#include <tree.h>
-
-template <class Key, class T, class Compare>
-class multimap {
-public:
-
-// typedefs:
-
- typedef Key key_type;
- typedef pair<const Key, T> value_type;
- typedef Compare key_compare;
-
- class value_compare
- : public binary_function<value_type, value_type, bool> {
- friend class multimap<Key, T, Compare>;
- protected:
- Compare comp;
- value_compare(Compare c) : comp(c) {}
- public:
- bool operator()(const value_type& x, const value_type& y) const {
- return comp(x.first, y.first);
- }
- };
-
-private:
- typedef rb_tree<key_type, value_type,
- select1st<value_type, key_type>, key_compare> rep_type;
- rep_type t; // red-black tree representing multimap
-public:
- typedef rep_type::reference reference;
- typedef rep_type::const_reference const_reference;
- typedef rep_type::iterator iterator;
- typedef rep_type::const_iterator const_iterator;
- typedef rep_type::reverse_iterator reverse_iterator;
- typedef rep_type::const_reverse_iterator const_reverse_iterator;
- typedef rep_type::size_type size_type;
- typedef rep_type::difference_type difference_type;
-
-// allocation/deallocation
-
- multimap(const Compare& comp = Compare()) : t(comp, true) { }
- multimap(const value_type* first, const value_type* last,
- const Compare& comp = Compare()) : t(first, last, comp, true) { }
- multimap(const multimap<Key, T, Compare>& x) : t(x.t, true) { }
- multimap<Key, T, Compare>& operator=(const multimap<Key, T, Compare>& x) {
- t = x.t;
- return *this;
- }
-
-// accessors:
-
- key_compare key_comp() const { return t.key_comp(); }
- value_compare value_comp() const { return value_compare(t.key_comp()); }
- iterator begin() { return t.begin(); }
- const_iterator begin() const { return t.begin(); }
- iterator end() { return t.end(); }
- const_iterator end() const { return t.end(); }
- reverse_iterator rbegin() { return t.rbegin(); }
- const_reverse_iterator rbegin() const { return t.rbegin(); }
- reverse_iterator rend() { return t.rend(); }
- const_reverse_iterator rend() const { return t.rend(); }
- bool empty() const { return t.empty(); }
- size_type size() const { return t.size(); }
- size_type max_size() const { return t.max_size(); }
- void swap(multimap<Key, T, Compare>& x) { t.swap(x.t); }
-
-// insert/erase
-
- iterator insert(const value_type& x) { return t.insert(x).first; }
- iterator insert(iterator position, const value_type& x) {
- return t.insert(position, x);
- }
- void insert(const value_type* first, const value_type* last) {
- t.insert(first, last);
- }
- void erase(iterator position) { t.erase(position); }
- size_type erase(const key_type& x) { return t.erase(x); }
- void erase(iterator first, iterator last) { t.erase(first, last); }
-
-// multimap operations:
-
- iterator find(const key_type& x) { return t.find(x); }
- const_iterator find(const key_type& x) const { return t.find(x); }
- size_type count(const key_type& x) const { return t.count(x); }
- iterator lower_bound(const key_type& x) {return t.lower_bound(x); }
- const_iterator lower_bound(const key_type& x) const {
- return t.lower_bound(x);
- }
- iterator upper_bound(const key_type& x) {return t.upper_bound(x); }
- const_iterator upper_bound(const key_type& x) const {
- return t.upper_bound(x);
- }
- typedef pair<iterator, iterator> pair_iterator_iterator;
- // typedef done to get around compiler bug
- pair_iterator_iterator equal_range(const key_type& x) {
- return t.equal_range(x);
- }
- typedef pair<const_iterator, const_iterator> pair_citerator_citerator;
- // typedef done to get around compiler bug
- pair_citerator_citerator equal_range(const key_type& x) const {
- return t.equal_range(x);
- }
-};
-
-template <class Key, class T, class Compare>
-inline bool operator==(const multimap<Key, T, Compare>& x,
- const multimap<Key, T, Compare>& y) {
- return x.size() == y.size() && equal(x.begin(), x.end(), y.begin());
-}
-
-template <class Key, class T, class Compare>
-inline bool operator<(const multimap<Key, T, Compare>& x,
- const multimap<Key, T, Compare>& y) {
- return lexicographical_compare(x.begin(), x.end(), y.begin(), y.end());
-}
-
-#undef Allocator
-
-#endif
diff --git a/contrib/libg++/libstdc++/stl/multiset.h b/contrib/libg++/libstdc++/stl/multiset.h
deleted file mode 100644
index 1ee6d93e352d..000000000000
--- a/contrib/libg++/libstdc++/stl/multiset.h
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-#ifndef MULTISET_H
-#define MULTISET_H
-
-#ifndef Allocator
-#define Allocator allocator
-#include <defalloc.h>
-#endif
-
-#include <tree.h>
-
-template <class Key, class Compare>
-class multiset {
-public:
-// typedefs:
-
- typedef Key key_type;
- typedef Key value_type;
- typedef Compare key_compare;
- typedef Compare value_compare;
-private:
- typedef rb_tree<key_type, value_type,
- ident<value_type, key_type>, key_compare> rep_type;
- rep_type t; // red-black tree representing multiset
-public:
- typedef rep_type::const_reference reference;
- typedef rep_type::const_reference const_reference;
- typedef rep_type::const_iterator iterator;
- typedef rep_type::const_iterator const_iterator;
- typedef rep_type::const_reverse_iterator reverse_iterator;
- typedef rep_type::const_reverse_iterator const_reverse_iterator;
- typedef rep_type::size_type size_type;
- typedef rep_type::difference_type difference_type;
-
-// allocation/deallocation
-
- multiset(const Compare& comp = Compare()) : t(comp, true) {}
- multiset(const value_type* first, const value_type* last,
- const Compare& comp = Compare()) : t(comp, true) {
- for (const value_type* i = first; i != last; ++i)
- t.insert(*i);
- }
- multiset(const multiset<Key, Compare>& x) : t(x.t, true) {}
- multiset<Key, Compare>& operator=(const multiset<Key, Compare>& x) {
- t = x.t;
- return *this;
- }
-
-// accessors:
-
- key_compare key_comp() const { return t.key_comp(); }
- value_compare value_comp() const { return t.key_comp(); }
- iterator begin() const { return t.begin(); }
- iterator end() const { return t.end(); }
- reverse_iterator rbegin() const { return t.rbegin(); }
- reverse_iterator rend() const { return t.rend(); }
- bool empty() const { return t.empty(); }
- size_type size() const { return t.size(); }
- size_type max_size() const { return t.max_size(); }
- void swap(multiset<Key, Compare>& x) { t.swap(x.t); }
-
-// insert/erase
- iterator insert(const value_type& x) {
- return t.insert(x).first;
- }
- iterator insert(iterator position, const value_type& x) {
- return t.insert((rep_type::iterator&)position, x);
- }
- void insert(const value_type* first, const value_type* last) {
- for (const value_type* i = first; i != last; ++i)
- t.insert(*i);
- }
- void erase(iterator position) {
- t.erase((rep_type::iterator&)position);
- }
- size_type erase(const key_type& x) {
- return t.erase(x);
- }
- void erase(iterator first, iterator last) {
- t.erase((rep_type::iterator&)first,
- (rep_type::iterator&)last);
- }
-
-// multiset operations:
-
- iterator find(const key_type& x) const { return t.find(x); }
- size_type count(const key_type& x) const { return t.count(x); }
- iterator lower_bound(const key_type& x) const {
- return t.lower_bound(x);
- }
- iterator upper_bound(const key_type& x) const {
- return t.upper_bound(x);
- }
- typedef pair<iterator, iterator> pair_iterator_iterator;
- // typedef done to get around compiler bug
- pair_iterator_iterator equal_range(const key_type& x) const {
- return t.equal_range(x);
- }
-};
-
-template <class Key, class Compare>
-inline bool operator==(const multiset<Key, Compare>& x,
- const multiset<Key, Compare>& y) {
- return x.size() == y.size() && equal(x.begin(), x.end(), y.begin());
-}
-
-template <class Key, class Compare>
-inline bool operator<(const multiset<Key, Compare>& x,
- const multiset<Key, Compare>& y) {
- return lexicographical_compare(x.begin(), x.end(), y.begin(), y.end());
-}
-
-#undef Allocator
-
-#endif
diff --git a/contrib/libg++/libstdc++/stl/neralloc.h b/contrib/libg++/libstdc++/stl/neralloc.h
deleted file mode 100644
index c66e9b366a02..000000000000
--- a/contrib/libg++/libstdc++/stl/neralloc.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-#ifndef NEARALLOC_H
-#define NEARALLOC_H
-
-#ifdef FARALLOC_H
-#undef FARALLOC_H
-#define __FARALLOC_WAS_DEFINED
-#endif
-
-#define __far __near
-#define far_allocator near_allocator
-#include <faralloc.h>
-#undef __far
-#undef far_allocator
-
-#undef FARALLOC_H
-
-#ifdef __FARALLOC_WAS_DEFINED
-#define FARALLOC_H
-#undef __FARALLOC_WAS_DEFINED
-#endif
-
-#endif
-
diff --git a/contrib/libg++/libstdc++/stl/nmap.h b/contrib/libg++/libstdc++/stl/nmap.h
deleted file mode 100644
index 99754c781692..000000000000
--- a/contrib/libg++/libstdc++/stl/nmap.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-#ifndef NMAP_H
-#define NMAP_H
-
-#ifdef MAP_H
-#undef MAP_H
-#undef TREE_H
-#define __MAP_WAS_DEFINED
-#endif
-
-#define Allocator near_allocator
-#define map near_map
-#define rb_tree near_rb_tree
-#include <neralloc.h>
-#include <map.h>
-
-#undef MAP_H
-#undef TREE_H
-
-#ifdef __MAP_WAS_DEFINED
-#define MAP_H
-#define TREE_H
-#undef __MAP_WAS_DEFINED
-#endif
-
-#undef Allocator
-#undef map
-#undef rb_tree
-
-#endif
diff --git a/contrib/libg++/libstdc++/stl/nmultmap.h b/contrib/libg++/libstdc++/stl/nmultmap.h
deleted file mode 100644
index a6ad67c4fbb2..000000000000
--- a/contrib/libg++/libstdc++/stl/nmultmap.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-#ifndef NMULTIMAP_H
-#define NMULTIMAP_H
-
-#ifdef MULTIMAP_H
-#undef MULTIMAP_H
-#undef TREE_H
-#define __MULTIMAP_WAS_DEFINED
-#endif
-
-#define Allocator near_allocator
-#define multimap near_multimap
-#define rb_tree near_rb_tree
-#include <neralloc.h>
-#include <multimap.h>
-
-#undef MULTIMAP_H
-#undef TREE_H
-
-#ifdef __MULTIMAP_WAS_DEFINED
-#define MULTIMAP_H
-#define TREE_H
-#undef __MULTIMAP_WAS_DEFINED
-#endif
-
-#undef Allocator
-#undef multimap
-#undef rb_tree
-
-#endif
diff --git a/contrib/libg++/libstdc++/stl/nmultset.h b/contrib/libg++/libstdc++/stl/nmultset.h
deleted file mode 100644
index 3a0ad30db0d6..000000000000
--- a/contrib/libg++/libstdc++/stl/nmultset.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-#ifndef NMULTISET_H
-#define NMULTISET_H
-
-#ifdef MULTISET_H
-#undef MULTISET_H
-#undef TREE_H
-#define __MULTISET_WAS_DEFINED
-#endif
-
-#define Allocator near_allocator
-#define multiset near_multiset
-#define rb_tree near_rb_tree
-#include <neralloc.h>
-#include <multiset.h>
-
-#undef MULTISET_H
-#undef TREE_H
-
-#ifdef __MULTISET_WAS_DEFINED
-#define MULTISET_H
-#define TREE_H
-#undef __MULTISET_WAS_DEFINED
-#endif
-
-#undef Allocator
-#undef multiset
-#undef rb_tree
-
-#endif
diff --git a/contrib/libg++/libstdc++/stl/nset.h b/contrib/libg++/libstdc++/stl/nset.h
deleted file mode 100644
index 325d6b94aacf..000000000000
--- a/contrib/libg++/libstdc++/stl/nset.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-#ifndef NSET_H
-#define NSET_H
-
-#ifdef SET_H
-#undef SET_H
-#undef TREE_H
-#define __SET_WAS_DEFINED
-#endif
-
-#define Allocator near_allocator
-#define set near_set
-#define rb_tree near_rb_tree
-#include <neralloc.h>
-#include <set.h>
-
-#undef SET_H
-#undef TREE_H
-
-#ifdef __SET_WAS_DEFINED
-#define SET_H
-#define TREE_H
-#undef __SET_WAS_DEFINED
-#endif
-
-#undef Allocator
-#undef set
-#undef rb_tree
-
-#endif
diff --git a/contrib/libg++/libstdc++/stl/pair.h b/contrib/libg++/libstdc++/stl/pair.h
deleted file mode 100644
index 817d9a439695..000000000000
--- a/contrib/libg++/libstdc++/stl/pair.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-#ifndef PAIR_H
-#define PAIR_H
-
-#ifndef __GNUG__
-#include <bool.h>
-#endif
-
-template <class T1, class T2>
-struct pair {
- T1 first;
- T2 second;
- pair() {}
- pair(const T1& a, const T2& b) : first(a), second(b) {}
-};
-
-template <class T1, class T2>
-inline bool operator==(const pair<T1, T2>& x, const pair<T1, T2>& y) {
- return x.first == y.first && x.second == y.second;
-}
-
-template <class T1, class T2>
-inline bool operator<(const pair<T1, T2>& x, const pair<T1, T2>& y) {
- return x.first < y.first || (!(y.first < x.first) && x.second < y.second);
-}
-
-template <class T1, class T2>
-inline pair<T1, T2> make_pair(const T1& x, const T2& y) {
- return pair<T1, T2>(x, y);
-}
-
-#endif
diff --git a/contrib/libg++/libstdc++/stl/projectn.h b/contrib/libg++/libstdc++/stl/projectn.h
deleted file mode 100644
index 766796e9f218..000000000000
--- a/contrib/libg++/libstdc++/stl/projectn.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-#ifndef PROJECTN_H
-#define PROJECTN_H
-
-#include <function.h>
-
-template <class T, class U>
-struct select1st : public unary_function<T, U> {
- const U& operator()(const T& x) const { return x.first; }
-};
-
-template <class T, class U>
-struct ident : public unary_function<T, U> {
- const U& operator()(const T& x) const { return x; }
-};
-
-#endif
-
-
diff --git a/contrib/libg++/libstdc++/stl/random.cc b/contrib/libg++/libstdc++/stl/random.cc
deleted file mode 100644
index e79872ca49b1..000000000000
--- a/contrib/libg++/libstdc++/stl/random.cc
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-#include <stddef.h>
-
-#define __SEED 161803398
-
-class __random_generator {
-protected:
- unsigned long table[55];
- size_t index1;
- size_t index2;
-public:
- unsigned long operator()(unsigned long limit) {
- index1 = (index1 + 1) % 55;
- index2 = (index2 + 1) % 55;
- table[index1] = table[index1] - table[index2];
- return table[index1] % limit;
- }
- void seed(unsigned long j);
- __random_generator(unsigned long j) { seed(j); }
-};
-
-void __random_generator::seed(unsigned long j) {
- unsigned long k = 1;
- table[54] = j;
- for (size_t i = 0; i < 54; i++) {
- size_t ii = 21 * i % 55;
- table[ii] = k;
- k = j - k;
- j = table[ii];
- }
- for (int loop = 0; loop < 4; loop++) {
- for (size_t i = 0; i < 55; i++)
- table[i] = table[i] - table[(1 + i + 30) % 55];
- }
- index1 = 0;
- index2 = 31;
-}
-
-static __random_generator rd(__SEED);
-
-unsigned long __long_random(unsigned long limit) {
- return rd(limit);
-}
-
-
-
diff --git a/contrib/libg++/libstdc++/stl/set.h b/contrib/libg++/libstdc++/stl/set.h
deleted file mode 100644
index d108e42371a0..000000000000
--- a/contrib/libg++/libstdc++/stl/set.h
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-#ifndef SET_H
-#define SET_H
-
-#ifndef Allocator
-#define Allocator allocator
-#include <defalloc.h>
-#endif
-
-#include <tree.h>
-
-template <class Key, class Compare>
-class set {
-public:
-// typedefs:
-
- typedef Key key_type;
- typedef Key value_type;
- typedef Compare key_compare;
- typedef Compare value_compare;
-private:
- typedef rb_tree<key_type, value_type,
- ident<value_type, key_type>, key_compare> rep_type;
- rep_type t; // red-black tree representing set
-public:
- typedef rep_type::const_reference reference;
- typedef rep_type::const_reference const_reference;
- typedef rep_type::const_iterator iterator;
- typedef rep_type::const_iterator const_iterator;
- typedef rep_type::const_reverse_iterator reverse_iterator;
- typedef rep_type::const_reverse_iterator const_reverse_iterator;
- typedef rep_type::size_type size_type;
- typedef rep_type::difference_type difference_type;
-
-// allocation/deallocation
-
- set(const Compare& comp = Compare()) : t(comp, false) {}
- set(const value_type* first, const value_type* last,
- const Compare& comp = Compare()) : t(comp, false) {
- for (const value_type* i = first; i != last; ++i)
- t.insert(*i);
- }
- set(const set<Key, Compare>& x) : t(x.t, false) {}
- set<Key, Compare>& operator=(const set<Key, Compare>& x) {
- t = x.t;
- return *this;
- }
-
-// accessors:
-
- key_compare key_comp() const { return t.key_comp(); }
- value_compare value_comp() const { return t.key_comp(); }
- iterator begin() const { return t.begin(); }
- iterator end() const { return t.end(); }
- reverse_iterator rbegin() const { return t.rbegin(); }
- reverse_iterator rend() const { return t.rend(); }
- bool empty() const { return t.empty(); }
- size_type size() const { return t.size(); }
- size_type max_size() const { return t.max_size(); }
- void swap(set<Key, Compare>& x) { t.swap(x.t); }
-
-// insert/erase
- typedef pair<iterator, bool> pair_iterator_bool;
- // typedef done to get around compiler bug
- pair_iterator_bool insert(const value_type& x) {
- pair<rep_type::iterator, bool> p = t.insert(x);
- return pair<iterator, bool>(p.first, p.second);
- }
- iterator insert(iterator position, const value_type& x) {
- return t.insert((rep_type::iterator&)position, x);
- }
- void insert(const value_type* first, const value_type* last) {
- for (const value_type* i = first; i != last; ++i)
- t.insert(*i);
- }
- void erase(iterator position) {
- t.erase((rep_type::iterator&)position);
- }
- size_type erase(const key_type& x) {
- return t.erase(x);
- }
- void erase(iterator first, iterator last) {
- t.erase((rep_type::iterator&)first,
- (rep_type::iterator&)last);
- }
-
-// set operations:
-
- iterator find(const key_type& x) const { return t.find(x); }
- size_type count(const key_type& x) const { return t.count(x); }
- iterator lower_bound(const key_type& x) const {
- return t.lower_bound(x);
- }
- iterator upper_bound(const key_type& x) const {
- return t.upper_bound(x);
- }
- typedef pair<iterator, iterator> pair_iterator_iterator;
- // typedef done to get around compiler bug
- pair_iterator_iterator equal_range(const key_type& x) const {
- return t.equal_range(x);
- }
-};
-
-template <class Key, class Compare>
-inline bool operator==(const set<Key, Compare>& x,
- const set<Key, Compare>& y) {
- return x.size() == y.size() && equal(x.begin(), x.end(), y.begin());
-}
-
-template <class Key, class Compare>
-inline bool operator<(const set<Key, Compare>& x,
- const set<Key, Compare>& y) {
- return lexicographical_compare(x.begin(), x.end(), y.begin(), y.end());
-}
-
-#undef Allocator
-
-#endif
diff --git a/contrib/libg++/libstdc++/stl/stack.h b/contrib/libg++/libstdc++/stl/stack.h
deleted file mode 100644
index 83a59a4c2afc..000000000000
--- a/contrib/libg++/libstdc++/stl/stack.h
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-#ifndef STACK_H
-#define STACK_H
-
-#ifndef __GNUG__
-#include <bool.h>
-#endif
-#include <heap.h>
-
-template <class Container>
-class stack {
-friend bool operator==(const stack<Container>& x, const stack<Container>& y);
-friend bool operator<(const stack<Container>& x, const stack<Container>& y);
-public:
- typedef Container::value_type value_type;
- typedef Container::size_type size_type;
-protected:
- Container c;
-public:
- bool empty() const { return c.empty(); }
- size_type size() const { return c.size(); }
- value_type& top() { return c.back(); }
- const value_type& top() const { return c.back(); }
- void push(const value_type& x) { c.push_back(x); }
- void pop() { c.pop_back(); }
-};
-
-template <class Container>
-bool operator==(const stack<Container>& x, const stack<Container>& y) {
- return x.c == y.c;
-}
-
-template <class Container>
-bool operator<(const stack<Container>& x, const stack<Container>& y) {
- return x.c < y.c;
-}
-
-template <class Container>
-class queue {
-friend bool operator==(const queue<Container>& x, const queue<Container>& y);
-friend bool operator<(const queue<Container>& x, const queue<Container>& y);
-public:
- typedef Container::value_type value_type;
- typedef Container::size_type size_type;
-protected:
- Container c;
-public:
- bool empty() const { return c.empty(); }
- size_type size() const { return c.size(); }
- value_type& front() { return c.front(); }
- const value_type& front() const { return c.front(); }
- value_type& back() { return c.back(); }
- const value_type& back() const { return c.back(); }
- void push(const value_type& x) { c.push_back(x); }
- void pop() { c.pop_front(); }
-};
-
-template <class Container>
-bool operator==(const queue<Container>& x, const queue<Container>& y) {
- return x.c == y.c;
-}
-
-template <class Container>
-bool operator<(const queue<Container>& x, const queue<Container>& y) {
- return x.c < y.c;
-}
-
-template <class Container, class Compare>
-// Compare = less<Container::value_type> >
-class priority_queue {
-public:
- typedef Container::value_type value_type;
- typedef Container::size_type size_type;
-protected:
- Container c;
- Compare comp;
-public:
- priority_queue(const Compare& x = Compare()) : c(), comp(x) {}
- priority_queue(const value_type* first, const value_type* last,
- const Compare& x = Compare()) : c(first, last), comp(x) {
- make_heap(c.begin(), c.end(), comp);
- }
-/*
- template <class InputIterator>
- priority_queue(InputIterator first, InputIterator last,
- const Compare& x = Compare()) : c(first, last), comp(x) {
- make_heap(c.begin(), c.end(), comp);
- }
-*/
- bool empty() const { return c.empty(); }
- size_type size() const { return c.size(); }
- value_type& top() { return c.front(); }
- const value_type& top() const { return c.front(); }
- void push(const value_type& x) {
- c.push_back(x);
- push_heap(c.begin(), c.end(), comp);
- }
- void pop() {
- pop_heap(c.begin(), c.end(), comp);
- c.pop_back();
- }
-};
-
-// no equality is provided
-
-#endif
diff --git a/contrib/libg++/libstdc++/stl/tempbuf.cc b/contrib/libg++/libstdc++/stl/tempbuf.cc
deleted file mode 100644
index 2e7408eadd30..000000000000
--- a/contrib/libg++/libstdc++/stl/tempbuf.cc
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-#include <tempbuf.h>
-
-char __stl_temp_buffer[__stl_buffer_size];
diff --git a/contrib/libg++/libstdc++/stl/tempbuf.h b/contrib/libg++/libstdc++/stl/tempbuf.h
deleted file mode 100644
index 238b6acc31bb..000000000000
--- a/contrib/libg++/libstdc++/stl/tempbuf.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-#ifndef TEMPBUF_H
-#define TEMPBUF_H
-
-#include <limits.h>
-#include <pair.h>
-
-#ifndef __stl_buffer_size
-#define __stl_buffer_size 16384 // 16k
-#endif
-
-extern char __stl_temp_buffer[__stl_buffer_size];
-
-//not reentrant code
-
-template <class T>
-pair<T*, int> get_temporary_buffer(int len, T*) {
- while (len > __stl_buffer_size / sizeof(T)) {
- set_new_handler(0);
- T* tmp = (T*)(::operator new((unsigned int)len * sizeof(T)));
- if (tmp) return pair<T*, int>(tmp, len);
- len = len / 2;
- }
- return pair<T*, int>((T*)__stl_temp_buffer,
- (int)(__stl_buffer_size / sizeof(T)));
-}
-
-template <class T>
-void return_temporary_buffer(T* p) {
- if ((char*)(p) != __stl_temp_buffer) deallocate(p);
-}
-
-template <class T>
-pair<T*, long> get_temporary_buffer(long len, T* p) {
- if (len > INT_MAX/sizeof(T))
- len = INT_MAX/sizeof(T);
- pair<T*, int> tmp = get_temporary_buffer((int)len, p);
- return pair<T*, long>(tmp.first, (long)(tmp.second));
-}
-
-#endif
diff --git a/contrib/libg++/libstdc++/stl/tree.cc b/contrib/libg++/libstdc++/stl/tree.cc
deleted file mode 100644
index e4a9cfe10fa7..000000000000
--- a/contrib/libg++/libstdc++/stl/tree.cc
+++ /dev/null
@@ -1,3 +0,0 @@
-#include "tree.h"
-
-__rb_tree_node_base __rb_NIL = { black, 0, 0, 0 };
diff --git a/contrib/libg++/libstdc++/stl/tree.h b/contrib/libg++/libstdc++/stl/tree.h
deleted file mode 100644
index 3ae5da02b08c..000000000000
--- a/contrib/libg++/libstdc++/stl/tree.h
+++ /dev/null
@@ -1,1246 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-#ifndef TREE_H
-#define TREE_H
-
-/*
-
-Red-black tree class, designed for use in implementing STL
-associative containers (set, multiset, map, and multimap). The
-insertion and deletion algorithms are based on those in Cormen,
-Leiserson, and Rivest, Introduction to Algorithms (MIT Press, 1990),
-except that
-
-(1) the header cell is maintained with links not only to the root
-but also to the leftmost node of the tree, to enable constant time
-begin(), and to the rightmost node of the tree, to enable linear time
-performance when used with the generic set algorithms (set_union,
-etc.);
-
-(2) when a node being deleted has two children its successor node is
-relinked into its place, rather than copied, so that the only
-iterators invalidated are those referring to the deleted node.
-
-*/
-
-#include <algobase.h>
-#include <iterator.h>
-#include <function.h>
-#ifndef __GNUG__
-#include <bool.h>
-#endif
-#include <projectn.h>
-
-#ifndef rb_tree
-#define rb_tree rb_tree
-#endif
-
-enum __rb_color_type {red, black};
-
-struct __rb_tree_node_base {
- enum __rb_color_type color_field;
- void* parent_link;
- void* left_link;
- void* right_link;
-};
-
-extern __rb_tree_node_base __rb_NIL;
-
-template <class Key, class Value, class KeyOfValue, class Compare>
-class rb_tree {
-protected:
- typedef enum __rb_color_type color_type;
- typedef Allocator<void>::pointer void_pointer;
- struct rb_tree_node;
- friend rb_tree_node;
- struct rb_tree_node : public __rb_tree_node_base {
- Value value_field;
- };
-#ifndef __GNUG__
- static Allocator<rb_tree_node> rb_tree_node_allocator;
- static Allocator<Value> value_allocator;
-#endif
-public:
- typedef Key key_type;
- typedef Value value_type;
- typedef Allocator<Value>::pointer pointer;
- typedef Allocator<Value>::reference reference;
- typedef Allocator<Value>::const_reference const_reference;
- typedef Allocator<rb_tree_node> rb_tree_node_allocator_type;
- typedef Allocator<rb_tree_node>::pointer link_type;
- typedef Allocator<rb_tree_node>::size_type size_type;
- typedef Allocator<rb_tree_node>::difference_type difference_type;
-protected:
-#ifndef __GNUG__
- size_type buffer_size() {
- return rb_tree_node_allocator.init_page_size();
- }
-#endif
- struct rb_tree_node_buffer;
- friend rb_tree_node_buffer;
- struct rb_tree_node_buffer {
- void_pointer next_buffer;
- link_type buffer;
- };
-public:
- typedef Allocator<rb_tree_node_buffer> buffer_allocator_type;
- typedef Allocator<rb_tree_node_buffer>::pointer buffer_pointer;
-protected:
-#ifdef __GNUG__
- static Allocator<rb_tree_node_buffer> buffer_allocator;
- static buffer_pointer buffer_list;
- static link_type free_list;
- static link_type next_avail;
- static link_type last;
- link_type get_node() { return (link_type) operator new (sizeof (rb_tree_node)); }
- void put_node(link_type p) { operator delete (p); }
-#else
- void add_new_buffer() {
- buffer_pointer tmp = buffer_allocator.allocate((size_type)1);
- tmp->buffer = rb_tree_node_allocator.allocate(buffer_size());
- tmp->next_buffer = buffer_list;
- buffer_list = tmp;
- next_avail = buffer_list->buffer;
- last = next_avail + buffer_size();
- }
- static size_type number_of_trees;
- void deallocate_buffers();
- link_type get_node() {
- link_type tmp = free_list;
- return free_list ?
- (free_list = (link_type)(free_list->right_link), tmp)
- : (next_avail == last ? (add_new_buffer(), next_avail++)
- : next_avail++);
- // ugly code for inlining - avoids multiple returns
- }
- void put_node(link_type p) {
- p->right_link = free_list;
- free_list = p;
- }
-#endif
-protected:
- link_type header;
- link_type& root() { return parent(header); }
- link_type& root() const { return parent(header); }
- link_type& leftmost() { return left(header); }
- link_type& leftmost() const { return left(header); }
- link_type& rightmost() { return right(header); }
- link_type& rightmost() const { return right(header); }
- size_type node_count; // keeps track of size of tree
- bool insert_always; // controls whether an element already in the
- // tree is inserted again
-//public:
- Compare key_compare;
- static link_type& left(link_type x) {
- return (link_type&)((*x).left_link);
- }
- static link_type& right(link_type x) {
- return (link_type&)((*x).right_link);
- }
- static link_type& parent(link_type x) {
- return (link_type&)((*x).parent_link);
- }
- static reference value(link_type x) { return (*x).value_field; }
- static Allocator<Key>::const_reference key(link_type x) {
- return KeyOfValue()(value(x));
- }
- static color_type& color(link_type x) {
- return (color_type&)(*x).color_field; }
- static link_type minimum(link_type x) {
- while (left(x) != &__rb_NIL)
- x = left(x);
- return x;
- }
- static link_type maximum(link_type x) {
- while (right(x) != &__rb_NIL)
- x = right(x);
- return x;
- }
-public:
- class iterator;
- friend iterator;
- class const_iterator;
- friend const_iterator;
- class iterator : public bidirectional_iterator<Value, difference_type> {
- friend class rb_tree<Key, Value, KeyOfValue, Compare>;
- friend class const_iterator;
-/*
- friend bool operator==(const iterator& x, const iterator& y) {
- return x.node == y.node;
- }
-*/
- protected:
- link_type node;
- iterator(link_type x) : node(x) {}
- public:
- iterator() {}
- bool operator==(const iterator& y) const { return node == y.node; }
- reference operator*() const { return value(node); }
- iterator& operator++() {
- if (right(node) != &__rb_NIL) {
- node = right(node);
- while (left(node) != &__rb_NIL)
- node = left(node);
- } else {
- link_type y = parent(node);
- while (node == right(y)) {
- node = y;
- y = parent(y);
- }
- if (right(node) != y) // necessary because of rightmost
- node = y;
- }
- return *this;
- }
- iterator operator++(int) {
- iterator tmp = *this;
- ++*this;
- return tmp;
- }
- iterator& operator--() {
- if (color(node) == red && parent(parent(node)) == node)
- // check for header
- node = right(node); // return rightmost
- else if (left(node) != &__rb_NIL) {
- link_type y = left(node);
- while (right(y) != &__rb_NIL)
- y = right(y);
- node = y;
- } else {
- link_type y = parent(node);
- while (node == left(y)) {
- node = y;
- y = parent(y);
- }
- node = y;
- }
- return *this;
- }
- iterator operator--(int) {
- iterator tmp = *this;
- --*this;
- return tmp;
- }
- };
- class const_iterator
- : public bidirectional_iterator<Value,difference_type> {
- friend class rb_tree<Key, Value, KeyOfValue, Compare>;
- friend class iterator;
-/*
- friend bool operator==(const const_iterator& x, const const_iterator& y) {
- return x.node == y.node;
- }
-*/
- protected:
- link_type node;
- const_iterator(link_type x) : node(x) {}
- public:
- const_iterator() {}
- const_iterator(const iterator& x) : node(x.node) {}
- bool operator==(const const_iterator& y) const {
- return node == y.node;
- }
- bool operator!=(const const_iterator& y) const {
- return node != y.node;
- }
- const_reference operator*() const { return value(node); }
- const_iterator& operator++() {
- if (right(node) != &__rb_NIL) {
- node = right(node);
- while (left(node) != &__rb_NIL)
- node = left(node);
- } else {
- link_type y = parent(node);
- while (node == right(y)) {
- node = y;
- y = parent(y);
- }
- if (right(node) != y) // necessary because of rightmost
- node = y;
- }
- return *this;
- }
- const_iterator operator++(int) {
- const_iterator tmp = *this;
- ++*this;
- return tmp;
- }
- const_iterator& operator--() {
- if (color(node) == red && parent(parent(node)) == node)
- // check for header
- node = right(node); // return rightmost
- else if (left(node) != &__rb_NIL) {
- link_type y = left(node);
- while (right(y) != &__rb_NIL)
- y = right(y);
- node = y;
- } else {
- link_type y = parent(node);
- while (node == left(y)) {
- node = y;
- y = parent(y);
- }
- node = y;
- }
- return *this;
- }
- const_iterator operator--(int) {
- const_iterator tmp = *this;
- --*this;
- return tmp;
- }
- };
- typedef reverse_bidirectional_iterator<iterator, value_type, reference,
- difference_type>
- reverse_iterator;
- typedef reverse_bidirectional_iterator<const_iterator, value_type,
- const_reference, difference_type>
- const_reverse_iterator;
-private:
-#ifdef __GNUC__
- rb_tree_iterator<Key, Value, KeyOfValue, Compare> __insert(void* x, void* y, const value_type& v);
- link_type __copy(link_type x, link_type p) {
- return (link_type) __copy_hack (x, p);
- }
-private:
- void * __copy_hack (void *, void *);
-public:
- void __erase(void* x);
-#else
- iterator __insert(link_type x, link_type y, const value_type& v);
- link_type __copy(link_type x, link_type p);
- void __erase(link_type x);
-#endif
- void init() {
-#ifndef __GNUG__
- ++number_of_trees;
-#endif
- header = get_node();
- color(header) = red; // used to distinguish header from root,
- // in iterator.operator++
- header->parent_link = &__rb_NIL;
- leftmost() = header;
- rightmost() = header;
- }
-public:
-
-// allocation/deallocation
-
- rb_tree(const Compare& comp = Compare(), bool always = true)
- : node_count(0), insert_always(always), key_compare(comp) {
- init();
- }
- rb_tree(const value_type* first, const value_type* last,
- const Compare& comp = Compare(), bool always = true)
- : node_count(0), insert_always(always), key_compare(comp) {
- init();
- insert(first, last);
- }
- rb_tree(const rb_tree<Key, Value, KeyOfValue, Compare>& x,
- bool always = true) : node_count(x.node_count),
- insert_always(always), key_compare(x.key_compare) {
-#ifndef __GNUG__
- ++number_of_trees;
-#endif
- header = get_node();
- color(header) = red;
- root() = __copy(x.root(), header);
- if (root() == &__rb_NIL) {
- leftmost() = header;
- rightmost() = header;
- } else {
- leftmost() = minimum(root());
- rightmost() = maximum(root());
- }
- }
- ~rb_tree() {
- erase(begin(), end());
- put_node(header);
-#ifndef __GNUG__
- if (--number_of_trees == 0) {
- deallocate_buffers();
- free_list = 0;
- next_avail = 0;
- last = 0;
- }
-#endif
- }
- rb_tree<Key, Value, KeyOfValue, Compare>&
- operator=(const rb_tree<Key, Value, KeyOfValue, Compare>& x);
-
-// accessors:
-
- Compare key_comp() const { return key_compare; }
- iterator begin() { return leftmost(); }
- const_iterator begin() const { return leftmost(); }
- iterator end() { return header; }
- const_iterator end() const { return header; }
- reverse_iterator rbegin() { return reverse_iterator(end()); }
- const_reverse_iterator rbegin() const {
- return const_reverse_iterator(end());
- }
- reverse_iterator rend() { return reverse_iterator(begin()); }
- const_reverse_iterator rend() const {
- return const_reverse_iterator(begin());
- }
- bool empty() const { return node_count == 0; }
- size_type size() const { return node_count; }
-#ifndef __GNUG__
- size_type max_size() const {
- return rb_tree_node_allocator.max_size();
- }
-#else
- size_type max_size() const {
- return rb_tree_node_allocator_type::max_size();
- }
-#endif
- void swap(rb_tree<Key, Value, KeyOfValue, Compare>& t) {
- ::swap(header, t.header);
- ::swap(node_count, t.node_count);
- ::swap(insert_always, t.insert_always);
- ::swap(key_compare, t.key_compare);
- }
-
-// insert/erase
-
- typedef pair<iterator, bool> pair_iterator_bool;
- // typedef done to get around compiler bug
-#ifdef __GNUG__
- pair_iterator_bool insert(const value_type& x) {
- return insert_hack(x);
- }
-private:
- rb_tree_pair_iterator_bool<Key, Value, KeyOfValue, Compare>
- insert_hack(const Value& v);
-public:
- iterator insert(iterator position, const value_type& x) {
- return insert_hack(position, x);
- }
-private:
- rb_tree_iterator<Key, Value, KeyOfValue, Compare>
- insert_hack(rb_tree_iterator<Key, Value, KeyOfValue, Compare> posn,
- const Value& v);
-public:
- void insert(iterator first, iterator last) {
- while (first != last) insert(*first++);
- }
- void insert(const value_type* first, const value_type* last){
- while (first != last) insert(*first++);
- }
- void erase(iterator position) {
- erase_hack(position);
- }
-private:
- void erase_hack(rb_tree_iterator<Key, Value, KeyOfValue, Compare> position);
-public:
- size_type erase(const key_type& x);
- void erase(iterator first, iterator last) {
- while (first != last) erase(first++);
- }
-#else
- pair_iterator_bool insert(const value_type& x);
- iterator insert(iterator position, const value_type& x);
- void insert(iterator first, iterator last);
- void insert(const value_type* first, const value_type* last);
- void erase(iterator position);
- size_type erase(const key_type& x);
- void erase(iterator first, iterator last);
-#endif
- void erase(const key_type* first, const key_type* last);
-
-// set operations:
-
-#ifdef __GNUG__
- iterator find(const key_type& x) {
- return find_hack(x);
- }
- const_iterator find(const key_type& x) const {
- return find_hack(x);
- }
-private:
- rb_tree_iterator<Key, Value, KeyOfValue, Compare>
- find_hack(const key_type& x);
- rb_tree_const_iterator<Key, Value, KeyOfValue, Compare>
- find_hack(const Key& k) const;
-public:
-
- size_type count(const key_type& x) const;
- iterator lower_bound(const key_type& x) {
- return lower_bound_hack(x);
- }
- const_iterator lower_bound(const key_type& x) const {
- return lower_bound_hack(x);
- }
- iterator upper_bound(const key_type& x) {
- return upper_bound_hack(x);
- }
- const_iterator upper_bound(const key_type& x) const {
- return upper_bound_hack(x);
- }
-private:
- rb_tree_iterator<Key, Value, KeyOfValue, Compare>
- lower_bound_hack(const key_type& x);
- rb_tree_const_iterator<Key, Value, KeyOfValue, Compare>
- lower_bound_hack(const Key& k) const;
- rb_tree_iterator<Key, Value, KeyOfValue, Compare>
- upper_bound_hack(const key_type& x);
- rb_tree_const_iterator<Key, Value, KeyOfValue, Compare>
- upper_bound_hack(const Key& k) const;
-public:
- typedef pair<iterator, iterator> pair_iterator_iterator;
- // typedef done to get around compiler bug
- pair_iterator_iterator equal_range(const key_type& x) {
- return pair_iterator_iterator(lower_bound(x), upper_bound(x));
- }
- typedef pair<const_iterator, const_iterator> pair_citerator_citerator;
-
- // typedef done to get around compiler bug
- pair_citerator_citerator equal_range(const key_type& x) const {
- return pair_citerator_citerator(lower_bound(x), upper_bound(x));
- }
- inline void rotate_left(link_type x) {
- link_type y = right(x);
- right(x) = left(y);
- if (left(y) != &__rb_NIL)
- parent(left(y)) = x;
- parent(y) = parent(x);
- if (x == root())
- root() = y;
- else if (x == left(parent(x)))
- left(parent(x)) = y;
- else
- right(parent(x)) = y;
- left(y) = x;
- parent(x) = y;
- }
-
- inline void rotate_right(link_type x) {
- link_type y = left(x);
- left(x) = right(y);
- if (right(y) != &__rb_NIL)
- parent(right(y)) = x;
- parent(y) = parent(x);
- if (x == root())
- root() = y;
- else if (x == right(parent(x)))
- right(parent(x)) = y;
- else
- left(parent(x)) = y;
- right(y) = x;
- parent(x) = y;
- }
- friend bidirectional_iterator_tag iterator_category(iterator) {
- return bidirectional_iterator_tag();
- }
- friend bidirectional_iterator_tag iterator_category(const_iterator) {
- return bidirectional_iterator_tag();
- }
-#else
- iterator find(const key_type& x);
- const_iterator find(const key_type& x) const;
- size_type count(const key_type& x) const;
- iterator lower_bound(const key_type& x);
- const_iterator lower_bound(const key_type& x) const;
- iterator upper_bound(const key_type& x);
- const_iterator upper_bound(const key_type& x) const;
- typedef pair<iterator, iterator> pair_iterator_iterator;
- // typedef done to get around compiler bug
- pair_iterator_iterator equal_range(const key_type& x);
- typedef pair<const_iterator, const_iterator> pair_citerator_citerator;
- // typedef done to get around compiler bug
- pair_citerator_citerator equal_range(const key_type& x) const;
- inline void rotate_left(link_type x);
- inline void rotate_right(link_type x);
-#endif
-};
-
-#ifndef __GNUG__
-template <class Key, class Value, class KeyOfValue, class Compare>
-rb_tree<Key, Value, KeyOfValue, Compare>::buffer_pointer
- rb_tree<Key, Value, KeyOfValue, Compare>::buffer_list = 0;
-
-template <class Key, class Value, class KeyOfValue, class Compare>
-rb_tree<Key, Value, KeyOfValue, Compare>::link_type
- rb_tree<Key, Value, KeyOfValue, Compare>::free_list = 0;
-
-template <class Key, class Value, class KeyOfValue, class Compare>
-rb_tree<Key, Value, KeyOfValue, Compare>::link_type
- rb_tree<Key, Value, KeyOfValue, Compare>::next_avail = 0;
-
-template <class Key, class Value, class KeyOfValue, class Compare>
-rb_tree<Key, Value, KeyOfValue, Compare>::link_type
- rb_tree<Key, Value, KeyOfValue, Compare>::last = 0;
-
-template <class Key, class Value, class KeyOfValue, class Compare>
-rb_tree<Key, Value, KeyOfValue, Compare>::size_type
- rb_tree<Key, Value, KeyOfValue, Compare>::number_of_trees = 0;
-
-template <class Key, class Value, class KeyOfValue, class Compare>
-rb_tree<Key, Value, KeyOfValue, Compare>::rb_tree_node_allocator_type
- rb_tree<Key, Value, KeyOfValue, Compare>::rb_tree_node_allocator;
-
-template <class Key, class Value, class KeyOfValue, class Compare>
-Allocator<Value> rb_tree<Key, Value, KeyOfValue, Compare>::value_allocator;
-
-template <class Key, class Value, class KeyOfValue, class Compare>
-rb_tree<Key, Value, KeyOfValue, Compare>::buffer_allocator_type
- rb_tree<Key, Value, KeyOfValue, Compare>::buffer_allocator;
-
-template <class Key, class Value, class KeyOfValue, class Compare>
-void rb_tree<Key, Value, KeyOfValue, Compare>::deallocate_buffers() {
- while (buffer_list) {
- buffer_pointer tmp = buffer_list;
- buffer_list = (buffer_pointer)(buffer_list->next_buffer);
- rb_tree_node_allocator.deallocate(tmp->buffer);
- buffer_allocator.deallocate(tmp);
- }
-}
-#endif
-
-#ifdef __GNUC__
-template <class Key, class Value, class KeyOfValue, class Compare>
-struct rb_tree_iterator {
- rb_tree<Key, Value, KeyOfValue, Compare>::iterator it;
- rb_tree_iterator(rb_tree<Key, Value, KeyOfValue, Compare>::iterator i) : it(i) {}
- operator rb_tree<Key, Value, KeyOfValue, Compare>::iterator() {
- return it;
- }
-};
-
-template <class Key, class Value, class KeyOfValue, class Compare>
-inline Value* value_type(const rb_tree_iterator<Key, Value, KeyOfValue, Compare>&) {
- return (Value*)(0);
-}
-
-template <class Key, class Value, class KeyOfValue, class Compare>
-struct rb_tree_const_iterator {
- rb_tree<Key, Value, KeyOfValue, Compare>::const_iterator it;
- rb_tree_const_iterator(rb_tree<Key, Value, KeyOfValue, Compare>::const_iterator i) : it(i) {}
- operator rb_tree<Key, Value, KeyOfValue, Compare>::const_iterator() {
- return it;
- }
-};
-
-template <class Key, class Value, class KeyOfValue, class Compare>
-inline Value* value_type(const rb_tree_const_iterator<Key, Value, KeyOfValue, Compare>&) {
- return (Value*)(0);
-}
-
-template <class Key, class Value, class KeyOfValue, class Compare>
-struct rb_tree_pair_iterator_bool {
- rb_tree<Key, Value, KeyOfValue, Compare>::pair_iterator_bool it;
- rb_tree_pair_iterator_bool(rb_tree<Key, Value, KeyOfValue, Compare>::pair_iterator_bool i) : it(i) {}
- operator rb_tree<Key, Value, KeyOfValue, Compare>::pair_iterator_bool() {
- return it;
- }
-};
-
-template <class Key, class Value, class KeyOfValue, class Compare>
-inline Value* value_type(rb_tree_pair_iterator_bool<Key, Value, KeyOfValue, Compare>&) {
- return (Value*)(0);
-}
-#endif
-
-template <class Key, class Value, class KeyOfValue, class Compare>
-inline bool operator==(const rb_tree<Key, Value, KeyOfValue, Compare>& x,
- const rb_tree<Key, Value, KeyOfValue, Compare>& y) {
- return x.size() == y.size() && equal(x.begin(), x.end(), y.begin());
-}
-
-template <class Key, class Value, class KeyOfValue, class Compare>
-inline bool operator<(const rb_tree<Key, Value, KeyOfValue, Compare>& x,
- const rb_tree<Key, Value, KeyOfValue, Compare>& y) {
- return lexicographical_compare(x.begin(), x.end(), y.begin(), y.end());
-}
-
-template <class Key, class Value, class KeyOfValue, class Compare>
-rb_tree<Key, Value, KeyOfValue, Compare>&
-rb_tree<Key, Value, KeyOfValue, Compare>::
-operator=(const rb_tree<Key, Value, KeyOfValue, Compare>& x) {
- if (this != &x) {
- // can't be done as in list because Key may be a constant type
- erase(begin(), end());
- root() = __copy(x.root(), header);
- if (root() == &__rb_NIL) {
- leftmost() = header;
- rightmost() = header;
- } else {
- leftmost() = minimum(root());
- rightmost() = maximum(root());
- }
- node_count = x.node_count;
- }
- return *this;
-}
-
-template <class Key, class Value, class KeyOfValue, class Compare>
-#ifdef __GNUC__
-rb_tree_iterator<Key, Value, KeyOfValue, Compare>
-rb_tree<Key, Value, KeyOfValue, Compare>::__insert
-(void* xa, void* ya, const Value& v) {
- link_type x = (link_type)xa;
- link_type y = (link_type)ya;
-#else
-rb_tree<Key, Value, KeyOfValue, Compare>::iterator
-rb_tree<Key, Value, KeyOfValue, Compare>::
-__insert(link_type x, link_type y, const Value& v) {
-#endif
- ++node_count;
- link_type z = get_node();
-#ifdef __GNUG__
- construct(&(value(z)), v);
-#else
- construct(value_allocator.address(value(z)), v);
-#endif
- if (y == header || x != &__rb_NIL || key_compare(KeyOfValue()(v), key(y))) {
- left(y) = z; // also makes leftmost() = z when y == header
- if (y == header) {
- root() = z;
- rightmost() = z;
- } else if (y == leftmost())
- leftmost() = z; // maintain leftmost() pointing to minimum node
- } else {
- right(y) = z;
- if (y == rightmost())
- rightmost() = z; // maintain rightmost() pointing to maximum node
- }
- parent(z) = y;
- z->left_link = &__rb_NIL;
- z->right_link = &__rb_NIL;
- x = z; // recolor and rebalance the tree
- color(x) = red;
- while (x != root() && color(parent(x)) == red)
- if (parent(x) == left(parent(parent(x)))) {
- y = right(parent(parent(x)));
- if (color(y) == red) {
- color(parent(x)) = black;
- color(y) = black;
- color(parent(parent(x))) = red;
- x = parent(parent(x));
- } else {
- if (x == right(parent(x))) {
- x = parent(x);
- rotate_left(x);
- }
- color(parent(x)) = black;
- color(parent(parent(x))) = red;
- rotate_right(parent(parent(x)));
- }
- } else {
- y = left(parent(parent(x)));
- if (color(y) == red) {
- color(parent(x)) = black;
- color(y) = black;
- color(parent(parent(x))) = red;
- x = parent(parent(x));
- } else {
- if (x == left(parent(x))) {
- x = parent(x);
- rotate_right(x);
- }
- color(parent(x)) = black;
- color(parent(parent(x))) = red;
- rotate_left(parent(parent(x)));
- }
- }
- color(root()) = black;
- return iterator(z);
-}
-
-template <class Key, class Value, class KeyOfValue, class Compare>
-#ifdef __GNUC__
-rb_tree_pair_iterator_bool<Key, Value, KeyOfValue, Compare>
-rb_tree<Key, Value, KeyOfValue, Compare>::insert_hack(const Value& v) {
-#else
-rb_tree<Key, Value, KeyOfValue, Compare>::pair_iterator_bool
-rb_tree<Key, Value, KeyOfValue, Compare>::insert(const Value& v) {
-#endif
- link_type y = header;
- link_type x = root();
- bool comp = true;
- while (x != &__rb_NIL) {
- y = x;
- comp = key_compare(KeyOfValue()(v), key(x));
- x = comp ? left(x) : right(x);
- }
- if (insert_always)
- return pair_iterator_bool(__insert(x, y, v), true);
- iterator j = iterator(y);
- if (comp)
- if (j == begin())
- return pair_iterator_bool(__insert(x, y, v), true);
- else
- --j;
- if (key_compare(key(j.node), KeyOfValue()(v)))
- return pair_iterator_bool(__insert(x, y, v), true);
- return pair_iterator_bool(j, false);
-}
-
-template <class Key, class Value, class KeyOfValue, class Compare>
-#ifdef __GNUC__
-rb_tree_iterator<Key, Value, KeyOfValue, Compare>
-rb_tree<Key, Value, KeyOfValue, Compare>::insert_hack(rb_tree_iterator<Key, Value, KeyOfValue, Compare> posn,
- const Value& v) {
- iterator position = posn;
-#else
-rb_tree<Key, Value, KeyOfValue, Compare>::iterator
-rb_tree<Key, Value, KeyOfValue, Compare>::insert(iterator position,
- const Value& v) {
-#endif
- if (position == iterator(begin()))
- if (size() > 0 && key_compare(KeyOfValue()(v), key(position.node)))
- return __insert(position.node, position.node, v);
- // first argument just needs to be non-&__rb_NIL
- else
- return insert(v).first;
- else if (position == iterator(end()))
- if (key_compare(key(rightmost()), KeyOfValue()(v)))
- return __insert(&__rb_NIL, rightmost(), v);
- else
- return insert(v).first;
- else {
- iterator before = --position;
- if (key_compare(key(before.node), KeyOfValue()(v))
- && key_compare(KeyOfValue()(v), key(position.node)))
- if (right(before.node) == &__rb_NIL)
- return __insert(&__rb_NIL, before.node, v);
- else
- return __insert(position.node, position.node, v);
- // first argument just needs to be non-&__rb_NIL
- else
- return insert(v).first;
- }
-}
-
-#ifndef __GNUC__
-template <class Key, class Value, class KeyOfValue, class Compare>
-void rb_tree<Key, Value, KeyOfValue, Compare>::insert(iterator first,
- iterator last) {
- while (first != last) insert(*first++);
-}
-
-template <class Key, class Value, class KeyOfValue, class Compare>
-void rb_tree<Key, Value, KeyOfValue, Compare>::insert(const Value* first,
- const Value* last) {
- while (first != last) insert(*first++);
-}
-#endif
-
-template <class Key, class Value, class KeyOfValue, class Compare>
-#ifdef __GNUC__
-void rb_tree<Key, Value, KeyOfValue, Compare>::erase_hack(
- rb_tree_iterator<Key, Value, KeyOfValue, Compare> posn) {
- iterator position = posn;
-#else
-void rb_tree<Key, Value, KeyOfValue, Compare>::erase(iterator position) {
-#endif
- link_type z = position.node;
- link_type y = z;
- link_type x;
- if (left(y) == &__rb_NIL)
- x = right(y);
- else
- if (right(y) == &__rb_NIL)
- x = left(y);
- else {
- y = right(y);
- while (left(y) != &__rb_NIL)
- y = left(y);
- x = right(y);
- }
- if (y != z) { // relink y in place of z
- parent(left(z)) = y;
- left(y) = left(z);
- if (y != right(z)) {
- parent(x) = parent(y); // possibly x == &__rb_NIL
- left(parent(y)) = x; // y must be a left child
- right(y) = right(z);
- parent(right(z)) = y;
- } else
- parent(x) = y; // needed in case x == &__rb_NIL
- if (root() == z)
- root() = y;
- else if (left(parent(z)) == z)
- left(parent(z)) = y;
- else
- right(parent(z)) = y;
- parent(y) = parent(z);
- ::swap(color(y), color(z));
- ::swap(y, z);
- // y points to node to be actually deleted,
- // z points to old z's former successor
- } else { // y == z
- parent(x) = parent(y); // possibly x == &__rb_NIL
- if (root() == z)
- root() = x;
- else
- if (left(parent(z)) == z)
- left(parent(z)) = x;
- else
- right(parent(z)) = x;
- if (leftmost() == z)
- if (right(z) == &__rb_NIL) // left(z) must be &__rb_NIL also
- leftmost() = parent(z);
- // makes leftmost() == header if z == root()
- else
- leftmost() = minimum(x);
- if (rightmost() == z)
- if (left(z) == &__rb_NIL) // right(z) must be &__rb_NIL also
- rightmost() = parent(z);
- // makes rightmost() == header if z == root()
- else // x == left(z)
- rightmost() = maximum(x);
- }
- if (color(y) != red) {
- while (x != root() && color(x) == black)
- if (x == left(parent(x))) {
- link_type w = right(parent(x));
- if (color(w) == red) {
- color(w) = black;
- color(parent(x)) = red;
- rotate_left(parent(x));
- w = right(parent(x));
- }
- if (color(left(w)) == black && color(right(w)) == black) {
- color(w) = red;
- x = parent(x);
- } else {
- if (color(right(w)) == black) {
- color(left(w)) = black;
- color(w) = red;
- rotate_right(w);
- w = right(parent(x));
- }
- color(w) = color(parent(x));
- color(parent(x)) = black;
- color(right(w)) = black;
- rotate_left(parent(x));
- break;
- }
- } else { // same as then clause with "right" and "left" exchanged
- link_type w = left(parent(x));
- if (color(w) == red) {
- color(w) = black;
- color(parent(x)) = red;
- rotate_right(parent(x));
- w = left(parent(x));
- }
- if (color(right(w)) == black && color(left(w)) == black) {
- color(w) = red;
- x = parent(x);
- } else {
- if (color(left(w)) == black) {
- color(right(w)) = black;
- color(w) = red;
- rotate_left(w);
- w = left(parent(x));
- }
- color(w) = color(parent(x));
- color(parent(x)) = black;
- color(left(w)) = black;
- rotate_right(parent(x));
- break;
- }
- }
- color(x) = black;
- }
-#ifdef __GNUG__
- delete y;
-#else
- destroy(value_allocator.address(value(y)));
- put_node(y);
-#endif
- --node_count;
-}
-
-template <class Key, class Value, class KeyOfValue, class Compare>
-#ifdef __GNUC__
-#ifndef __SIZE_TYPE__
-#define __SIZE_TYPE__ long unsigned int
-#endif
-__SIZE_TYPE__
-#else
-rb_tree<Key, Value, KeyOfValue, Compare>::size_type
-#endif
-rb_tree<Key, Value, KeyOfValue, Compare>::erase(const Key& x) {
- pair_iterator_iterator p = equal_range(x);
- size_type n = 0;
- distance(p.first, p.second, n);
- erase(p.first, p.second);
- return n;
-}
-
-template <class Key, class Value, class KeyOfValue, class Compare>
-#ifdef __GNUG__
-void *
-rb_tree<Key, Value, KeyOfValue, Compare>::__copy_hack(void* xa, void* pa) {
- link_type x = (link_type)xa;
- link_type p = (link_type)pa;
-#else
-rb_tree<Key, Value, KeyOfValue, Compare>::link_type
-rb_tree<Key, Value, KeyOfValue, Compare>::__copy(link_type x, link_type p) {
-#endif
- // structural copy
- link_type r = x;
- while (x != &__rb_NIL) {
- link_type y = get_node();
- if (r == x) r = y; // save for return value
-#ifdef __GNUG__
- construct(&(value(y)), value(x));
-#else
- construct(value_allocator.address(value(y)), value(x));
-#endif
- left(p) = y;
- parent(y) = p;
- color(y) = color(x);
- right(y) = __copy(right(x), y);
- p = y;
- x = left(x);
- }
- left(p) = (link_type)&__rb_NIL;
- return r;
-}
-
-template <class Key, class Value, class KeyOfValue, class Compare>
-#ifdef __GNUG__
-void rb_tree<Key, Value, KeyOfValue, Compare>::__erase(void* xa) {
- link_type x = (link_type)xa;
-#else
-void rb_tree<Key, Value, KeyOfValue, Compare>::__erase(link_type x) {
-#endif
- // erase without rebalancing
- while (x != &__rb_NIL) {
- __erase(right(x));
- link_type y = left(x);
-#ifdef __GNUG__
- delete x;
-#else
- destroy(value_allocator.address(value(x)));
- put_node(x);
-#endif
- x = y;
- }
-}
-
-#ifndef __GNUC__
-template <class Key, class Value, class KeyOfValue, class Compare>
-void rb_tree<Key, Value, KeyOfValue, Compare>::erase(iterator first,
- iterator last) {
- if (first == begin() && last == end() && node_count != 0) {
- __erase(root());
- leftmost() = header;
- root() = NIL;
- rightmost() = header;
- node_count = 0;
- } else
- while (first != last) erase(first++);
-}
-#endif
-
-template <class Key, class Value, class KeyOfValue, class Compare>
-void rb_tree<Key, Value, KeyOfValue, Compare>::erase(const Key* first,
- const Key* last) {
- while (first != last) erase(*first++);
-}
-
-template <class Key, class Value, class KeyOfValue, class Compare>
-#ifdef __GNUC__
-rb_tree_iterator<Key, Value, KeyOfValue, Compare>
-rb_tree<Key, Value, KeyOfValue, Compare>::find_hack(const Key& k) {
-#else
-rb_tree<Key, Value, KeyOfValue, Compare>::iterator
-rb_tree<Key, Value, KeyOfValue, Compare>::find(const Key& k) {
-#endif
- link_type y = header;
- link_type x = root();
- bool comp = false;
- while (x != &__rb_NIL) {
- y = x;
- comp = key_compare(key(x), k);
- x = comp ? right(x) : left(x);
- }
- iterator j = iterator(y);
- if (comp) ++j;
- return (j == end() || key_compare(k, key(j.node))) ? end() : j;
-}
-
-template <class Key, class Value, class KeyOfValue, class Compare>
-#ifdef __GNUC__
-rb_tree_const_iterator<Key, Value, KeyOfValue, Compare>
-rb_tree<Key, Value, KeyOfValue, Compare>::find_hack(const Key& k) const {
-#else
-rb_tree<Key, Value, KeyOfValue, Compare>::const_iterator
-rb_tree<Key, Value, KeyOfValue, Compare>::find(const Key& k) const {
-#endif
- link_type y = header;
- link_type x = root();
- bool comp = false;
- while (x != &__rb_NIL) {
- y = x;
- comp = key_compare(key(x), k);
- x = comp ? right(x) : left(x);
- }
- const_iterator j = const_iterator(y);
- if (comp) ++j;
- return (j == end() || key_compare(k, key(j.node))) ? end() : j;
-}
-
-template <class Key, class Value, class KeyOfValue, class Compare>
-#ifdef __GNUG__
-__SIZE_TYPE__
-#else
-rb_tree<Key, Value, KeyOfValue, Compare>::size_type
-#endif
-rb_tree<Key, Value, KeyOfValue, Compare>::count(const Key& k) const {
- pair<const_iterator, const_iterator> p = equal_range(k);
- size_type n = 0;
- distance(p.first, p.second, n);
- return n;
-}
-
-template <class Key, class Value, class KeyOfValue, class Compare>
-#ifdef __GNUC__
-rb_tree_iterator<Key, Value, KeyOfValue, Compare>
-rb_tree<Key, Value, KeyOfValue, Compare>::lower_bound_hack(const Key& k) {
-#else
-rb_tree<Key, Value, KeyOfValue, Compare>::iterator
-rb_tree<Key, Value, KeyOfValue, Compare>::lower_bound(const Key& k) {
-#endif
- link_type y = header;
- link_type x = root();
- bool comp = false;
- while (x != &__rb_NIL) {
- y = x;
- comp = key_compare(key(x), k);
- x = comp ? right(x) : left(x);
- }
- iterator j = iterator(y);
- return comp ? ++j : j;
-}
-
-template <class Key, class Value, class KeyOfValue, class Compare>
-#ifdef __GNUC__
-rb_tree_const_iterator<Key, Value, KeyOfValue, Compare>
-rb_tree<Key, Value, KeyOfValue, Compare>::lower_bound_hack(const Key& k) const {
-#else
-rb_tree<Key, Value, KeyOfValue, Compare>::const_iterator
-rb_tree<Key, Value, KeyOfValue, Compare>::lower_bound(const Key& k) const {
-#endif
- link_type y = header;
- link_type x = root();
- bool comp = false;
- while (x != &__rb_NIL) {
- y = x;
- comp = key_compare(key(x), k);
- x = comp ? right(x) : left(x);
- }
- const_iterator j = const_iterator(y);
- return comp ? ++j : j;
-}
-
-template <class Key, class Value, class KeyOfValue, class Compare>
-#ifdef __GNUC__
-rb_tree_iterator<Key, Value, KeyOfValue, Compare>
-rb_tree<Key, Value, KeyOfValue, Compare>::upper_bound_hack(const Key& k) {
-#else
-rb_tree<Key, Value, KeyOfValue, Compare>::iterator
-rb_tree<Key, Value, KeyOfValue, Compare>::upper_bound(const Key& k) {
-#endif
- link_type y = header;
- link_type x = root();
- bool comp = true;
- while (x != &__rb_NIL) {
- y = x;
- comp = key_compare(k, key(x));
- x = comp ? left(x) : right(x);
- }
- iterator j = iterator(y);
- return comp ? j : ++j;
-}
-
-template <class Key, class Value, class KeyOfValue, class Compare>
-#ifdef __GNUC__
-rb_tree_const_iterator<Key, Value, KeyOfValue, Compare>
-rb_tree<Key, Value, KeyOfValue, Compare>::upper_bound_hack(const Key& k) const {
-#else
-rb_tree<Key, Value, KeyOfValue, Compare>::const_iterator
-rb_tree<Key, Value, KeyOfValue, Compare>::upper_bound(const Key& k) const {
-#endif
- link_type y = header;
- link_type x = root();
- bool comp = true;
- while (x != &__rb_NIL) {
- y = x;
- comp = key_compare(k, key(x));
- x = comp ? left(x) : right(x);
- }
- const_iterator j = const_iterator(y);
- return comp ? j : ++j;
-}
-
-
-#ifndef __GNUC__
-template <class Key, class Value, class KeyOfValue, class Compare>
-rb_tree<Key, Value, KeyOfValue, Compare>::pair_iterator_iterator
-rb_tree<Key, Value, KeyOfValue, Compare>::equal_range(const Key& k) {
- return pair_iterator_iterator(lower_bound(k), upper_bound(k));
-}
-
-template <class Key, class Value, class KeyOfValue, class Compare>
-rb_tree<Key, Value, KeyOfValue, Compare>::pair_citerator_citerator
-rb_tree<Key, Value, KeyOfValue, Compare>::equal_range(const Key& k) const {
- return pair_citerator_citerator(lower_bound(k), upper_bound(k));
-}
-
-template <class Key, class Value, class KeyOfValue, class Compare>
-inline void
-rb_tree<Key, Value, KeyOfValue, Compare>::rotate_left(link_type x) {
- link_type y = right(x);
- right(x) = left(y);
- if (left(y) != &__rb_NIL)
- parent(left(y)) = x;
- parent(y) = parent(x);
- if (x == root())
- root() = y;
- else if (x == left(parent(x)))
- left(parent(x)) = y;
- else
- right(parent(x)) = y;
- left(y) = x;
- parent(x) = y;
-}
-
-template <class Key, class Value, class KeyOfValue, class Compare>
-inline void
-rb_tree<Key, Value, KeyOfValue, Compare>::rotate_right(link_type x) {
- link_type y = left(x);
- left(x) = right(y);
- if (right(y) != &__rb_NIL)
- parent(right(y)) = x;
- parent(y) = parent(x);
- if (x == root())
- root() = y;
- else if (x == right(parent(x)))
- right(parent(x)) = y;
- else
- left(parent(x)) = y;
- right(y) = x;
- parent(x) = y;
-}
-#endif
-
-#endif
-
diff --git a/contrib/libg++/libstdc++/stl/vector.h b/contrib/libg++/libstdc++/stl/vector.h
deleted file mode 100644
index e609aa109a0a..000000000000
--- a/contrib/libg++/libstdc++/stl/vector.h
+++ /dev/null
@@ -1,355 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-#ifndef VECTOR_H
-#define VECTOR_H
-
-#include <function.h>
-#include <algobase.h>
-#ifndef __GNUG__
-#include <bool.h>
-#endif
-
-#ifndef Allocator
-#define Allocator allocator
-#include <defalloc.h>
-#endif
-
-#ifndef vector
-#define vector vector
-#endif
-
-template <class T>
-class vector {
-public:
-
- typedef Allocator<T> vector_allocator;
- typedef T value_type;
- typedef vector_allocator::pointer pointer;
- typedef vector_allocator::pointer iterator;
- typedef vector_allocator::const_pointer const_iterator;
- typedef vector_allocator::reference reference;
- typedef vector_allocator::const_reference const_reference;
- typedef vector_allocator::size_type size_type;
- typedef vector_allocator::difference_type difference_type;
- typedef reverse_iterator<const_iterator, value_type, const_reference,
- difference_type> const_reverse_iterator;
- typedef reverse_iterator<iterator, value_type, reference, difference_type>
- reverse_iterator;
-protected:
- static Allocator<T> static_allocator;
- iterator start;
- iterator finish;
- iterator end_of_storage;
-#ifdef __GNUG__
- void insert_aux(iterator position, const T& x) {
- insert_aux(vector_iterator<T>(position), x);
- }
- void insert_aux(vector_iterator<T> position, const T& x);
-#else
- void insert_aux(iterator position, const T& x);
-#endif
-public:
- iterator begin() { return start; }
- const_iterator begin() const { return start; }
- iterator end() { return finish; }
- const_iterator end() const { return finish; }
- reverse_iterator rbegin() { return reverse_iterator(end()); }
- const_reverse_iterator rbegin() const {
- return const_reverse_iterator(end());
- }
- reverse_iterator rend() { return reverse_iterator(begin()); }
- const_reverse_iterator rend() const {
- return const_reverse_iterator(begin());
- }
- size_type size() const { return size_type(end() - begin()); }
- size_type max_size() const { return static_allocator.max_size(); }
- size_type capacity() const { return size_type(end_of_storage - begin()); }
- bool empty() const { return begin() == end(); }
- reference operator[](size_type n) { return *(begin() + n); }
- const_reference operator[](size_type n) const { return *(begin() + n); }
- vector() : start(0), finish(0), end_of_storage(0) {}
- vector(size_type n, const T& value = T()) {
- start = static_allocator.allocate(n);
- uninitialized_fill_n(start, n, value);
- finish = start + n;
- end_of_storage = finish;
- }
- vector(const vector<T>& x) {
- start = static_allocator.allocate(x.end() - x.begin());
- finish = uninitialized_copy(x.begin(), x.end(), start);
- end_of_storage = finish;
- }
- vector(const_iterator first, const_iterator last) {
- size_type n = 0;
- distance(first, last, n);
- start = static_allocator.allocate(n);
- finish = uninitialized_copy(first, last, start);
- end_of_storage = finish;
- }
- ~vector() {
- destroy(start, finish);
- static_allocator.deallocate(start);
- }
- vector<T>& operator=(const vector<T>& x);
- void reserve(size_type n) {
- if (capacity() < n) {
- iterator tmp = static_allocator.allocate(n);
- uninitialized_copy(begin(), end(), tmp);
- destroy(start, finish);
- static_allocator.deallocate(start);
- finish = tmp + size();
- start = tmp;
- end_of_storage = begin() + n;
- }
- }
- reference front() { return *begin(); }
- const_reference front() const { return *begin(); }
- reference back() { return *(end() - 1); }
- const_reference back() const { return *(end() - 1); }
- void push_back(const T& x) {
- if (finish != end_of_storage) {
- /* Borland bug */
- construct(finish, x);
- finish++;
- } else
- insert_aux(end(), x);
- }
- void swap(vector<T>& x) {
- ::swap(start, x.start);
- ::swap(finish, x.finish);
- ::swap(end_of_storage, x.end_of_storage);
- }
- iterator insert(iterator position, const T& x) {
- size_type n = position - begin();
- if (finish != end_of_storage && position == end()) {
- /* Borland bug */
- construct(finish, x);
- finish++;
- } else
- insert_aux(position, x);
- return begin() + n;
- }
-#ifdef __GNUG__
- void insert (iterator position, const_iterator first,
- const_iterator last) {
- insert(vector_iterator<T>(position),
- vector_const_iterator<T>(first),
- vector_const_iterator<T>(last));
- }
- void insert (vector_iterator<T> position, vector_const_iterator<T> first,
- vector_const_iterator<T> last);
- void insert (iterator position, size_type n, const T& x) {
- insert(vector_iterator<T>(position), n, x);
- }
- void insert (vector_iterator<T> position, size_type n, const T& x);
-#else
- void insert (iterator position, const_iterator first,
- const_iterator last);
- void insert (iterator position, size_type n, const T& x);
-#endif
- void pop_back() {
- /* Borland bug */
- --finish;
- destroy(finish);
- }
- void erase(iterator position) {
- if (position + 1 != end())
- copy(position + 1, end(), position);
- /* Borland bug */
- --finish;
- destroy(finish);
- }
- void erase(iterator first, iterator last) {
- vector<T>::iterator i = copy(last, end(), first);
- destroy(i, finish);
- // work around for destroy(copy(last, end(), first), finish);
- finish = finish - (last - first);
- }
-};
-
-#ifdef __GNUG__
-template <class T>
-struct vector_iterator {
- vector<T>::iterator it;
- vector_iterator(vector<T>::iterator i) : it(i) {}
- operator vector<T>::iterator() {
- return it;
- }
-};
-
-template <class T>
-inline T* value_type(const vector_iterator<T>&) {
- return (T*)(0);
-}
-
-
-template <class T>
-struct vector_const_iterator {
- vector<T>::const_iterator it;
- vector_const_iterator(vector<T>::const_iterator i) : it(i) {}
- operator vector<T>::const_iterator() {
- return it;
- }
-};
-#endif
-
-template <class T>
-inline bool operator==(const vector<T>& x, const vector<T>& y) {
- return x.size() == y.size() && equal(x.begin(), x.end(), y.begin());
-}
-
-template <class T>
-inline bool operator<(const vector<T>& x, const vector<T>& y) {
- return lexicographical_compare(x.begin(), x.end(), y.begin(), y.end());
-}
-
-#ifndef __GNUG__
-template <class T>
-vector<T>::vector_allocator vector<T>::static_allocator;
-#endif
-
-template <class T>
-vector<T>& vector<T>::operator=(const vector<T>& x) {
- if (&x == this) return *this;
- if (x.size() > capacity()) {
- destroy(start, finish);
- static_allocator.deallocate(start);
- start = static_allocator.allocate(x.end() - x.begin());
- end_of_storage = uninitialized_copy(x.begin(), x.end(), start);
- } else if (size() >= x.size()) {
- vector<T>::iterator i = copy(x.begin(), x.end(), begin());
- destroy(i, finish);
- // work around for destroy(copy(x.begin(), x.end(), begin()), finish);
- } else {
- copy(x.begin(), x.begin() + size(), begin());
- uninitialized_copy(x.begin() + size(), x.end(), begin() + size());
- }
- finish = begin() + x.size();
- return *this;
-}
-
-template <class T>
-#ifdef __GNUG__
-void vector<T>::insert_aux(vector_iterator<T> posn, const T& x) {
- iterator position = posn;
-#else
-void vector<T>::insert_aux(iterator position, const T& x) {
-#endif
- if (finish != end_of_storage) {
- construct(finish, *(finish - 1));
- copy_backward(position, finish - 1, finish);
- *position = x;
- ++finish;
- } else {
- size_type len = size() ? 2 * size()
- : static_allocator.init_page_size();
- iterator tmp = static_allocator.allocate(len);
- uninitialized_copy(begin(), position, tmp);
- construct(tmp + (position - begin()), x);
- uninitialized_copy(position, end(), tmp + (position - begin()) + 1);
- destroy(begin(), end());
- static_allocator.deallocate(begin());
- end_of_storage = tmp + len;
- finish = tmp + size() + 1;
- start = tmp;
- }
-}
-
-template <class T>
-#ifdef __GNUG__
-void vector<T>::insert(vector_iterator<T> posn,
- size_t n,
- const T& x) {
- iterator position = posn;
-#else
-void vector<T>::insert(iterator position, size_type n, const T& x) {
-#endif
- if (n == 0) return;
- if ((size_type) (end_of_storage - finish) >= n) {
- if ((size_type) (end() - position) > n) {
- uninitialized_copy(end() - n, end(), end());
- copy_backward(position, end() - n, end());
- fill(position, position + n, x);
- } else {
- uninitialized_copy(position, end(), position + n);
- fill(position, end(), x);
- uninitialized_fill_n(end(), n - (end() - position), x);
- }
- finish += n;
- } else {
- size_type len = size() + max(size(), n);
- iterator tmp = static_allocator.allocate(len);
- uninitialized_copy(begin(), position, tmp);
- uninitialized_fill_n(tmp + (position - begin()), n, x);
- uninitialized_copy(position, end(), tmp + (position - begin() + n));
- destroy(begin(), end());
- static_allocator.deallocate(begin());
- end_of_storage = tmp + len;
- finish = tmp + size() + n;
- start = tmp;
- }
-}
-
-template <class T>
-#ifdef __GNUG__
-void vector<T>::insert(vector_iterator<T> posn,
- vector_const_iterator<T> fi,
- vector_const_iterator<T> la) {
- iterator position = posn;
- const_iterator first = fi;
- const_iterator last = la;
-#else
-void vector<T>::insert(iterator position,
- const_iterator first,
- const_iterator last) {
-#endif
- if (first == last) return;
- size_type n = 0;
- distance(first, last, n);
- if ((size_type) (end_of_storage - finish) >= n) {
- if ((size_type) (end() - position) > n) {
- uninitialized_copy(end() - n, end(), end());
- copy_backward(position, end() - n, end());
- copy(first, last, position);
- } else {
- uninitialized_copy(position, end(), position + n);
- copy(first, first + (end() - position), position);
- uninitialized_copy(first + (end() - position), last, end());
- }
- finish += n;
- } else {
- size_type len = size() + max(size(), n);
- iterator tmp = static_allocator.allocate(len);
- uninitialized_copy(begin(), position, tmp);
- uninitialized_copy(first, last, tmp + (position - begin()));
- uninitialized_copy(position, end(), tmp + (position - begin() + n));
- destroy(begin(), end());
- static_allocator.deallocate(begin());
- end_of_storage = tmp + len;
- finish = tmp + size() + n;
- start = tmp;
- }
-}
-
-#undef Allocator
-#undef vector
-
-#endif
-
-
-
-
-
diff --git a/contrib/libg++/libstdc++/string b/contrib/libg++/libstdc++/string
deleted file mode 100644
index 467a2fd0a690..000000000000
--- a/contrib/libg++/libstdc++/string
+++ /dev/null
@@ -1,6 +0,0 @@
-// -*- C++ -*- forwarding header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __STRING__
-#include <std/string.h>
-#endif
diff --git a/contrib/libg++/libstdc++/tests/ChangeLog b/contrib/libg++/libstdc++/tests/ChangeLog
deleted file mode 100644
index c089bfbda21d..000000000000
--- a/contrib/libg++/libstdc++/tests/ChangeLog
+++ /dev/null
@@ -1,52 +0,0 @@
-Mon Jun 17 14:05:50 1996 Per Bothner <bothner@deneb.cygnus.com>
-
- * tlist.cc (test_splice): New test.
-
-Sat Nov 18 19:52:26 1995 Mike Stump <mrs@cygnus.com>
-
- * Makefile.in: Update version to 2.7.1.
-
-Tue May 9 19:36:54 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * tstring.cc (decltest): Adjust single-character test.
-
-Fri May 5 14:35:19 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * tcomplex.*: Update to reflect that operator<< now
- accepts more forms of input.
-
-Thu Apr 27 15:34:58 1995 Brendan Kehoe (brendan@lisa.cygnus.com)
-
- * configure.in: Update to stay in sync with config.shared.
-
-Thu Feb 16 00:08:28 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * Makefile.in (VERSION, SHLIB): Define.
-
-Tue Jan 24 02:36:24 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * Makefile.in (CXXFLAGS): Don't set.
-
-Mon Jan 23 04:12:10 1995 Jason Merrill <jason@python.cygnus.com>
-
- * tlist.cc (plus): Remove.
-
-Thu Jan 19 19:41:07 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * Makefile.in: Don't set LD_LIBRARY_PATH. Users will have to set
- it themselves.
-
-Mon Jan 16 13:57:34 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * Makefile.in: Update to reflect header movement.
-
-Wed Dec 14 19:55:45 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * configure.in: Fix quoting problem. Reported nu H.J.Lu.
-
-Tue Nov 29 16:46:56 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * Makefile.in, configure.in: Re-write to avoid duplication.
- * {tvector,tmap,tlist}.{cc,exp}, configure.in: New tests for STL.
-
-
diff --git a/contrib/libg++/libstdc++/tests/Makefile.in b/contrib/libg++/libstdc++/tests/Makefile.in
deleted file mode 100644
index a068ec160a7f..000000000000
--- a/contrib/libg++/libstdc++/tests/Makefile.in
+++ /dev/null
@@ -1,35 +0,0 @@
-# Copyright (C) 1994 Free Software Foundation
-
-# This file is part of the GNU ANSI C++ Library. This library is free
-# software; you can redistribute it and/or modify it under the terms of
-# the GNU General Public License as published by the Free Software
-# Foundation; either version 2, or (at your option) any later version.
-
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this library; see the file COPYING. If not, write to the Free
-# Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-VERSION = 2.7.2
-SHLIB = libstdc++.so.$(VERSION)
-
-DEPLIBS = ../libstdc++.a
-LDLIBS = -L.. -lstdc++
-MDEPLIBS = $(DEPLIBS)
-MLDLIBS = $(LDLIBS) -lm
-
-#### package, host, target, and site dependent Makefile fragments come in here.
-##
-
-tcomplex.o: ${srcdir}/../std/complext.h ${srcdir}/../std/dcomplex.h
-tcomplex: tcomplex.o $(MDEPLIBS)
- $(CXX) -o tcomplex tcomplex.o $(MLDLIBS)
-
-tstring.o: ${srcdir}/../std/bastring.h
-
-# NOTE: Rules for following tests are generated by $(srcdir)/configure.in !!!
-
diff --git a/contrib/libg++/libstdc++/tests/configure.in b/contrib/libg++/libstdc++/tests/configure.in
deleted file mode 100644
index a32d0495f45e..000000000000
--- a/contrib/libg++/libstdc++/tests/configure.in
+++ /dev/null
@@ -1,49 +0,0 @@
-# This file is a shell script fragment that supplies the information
-# necessary for a configure script to process the program in
-# this directory. For more information, look at ../../configure.
-
-configdirs=
-srctrigger=tcomplex.cc
-srcname="tests for ANSI C++ library"
-package_makefile_frag=Make.pack
-
-# per-host:
-
-# per-target:
-
-target_makefile_frag=../target-mkfrag
-
-TO_TOPDIR=../../
-ALL=' '
-XCXXINCLUDES="-I${srcdir}/.. -I${srcdir}/../stl -I${TO_TOPDIR}libio -I${srcdir}/${TO_TOPDIR}libio"
-SIMPLE_TESTS='tstring tlist tmap tvector'
-TESTS="tcomplex ${SIMPLE_TESTS}"
-MOSTLYCLEAN="*.o core ${TESTS} *.out"
-(. ${srcdir}/${TO_TOPDIR}libio/config.shared) >${package_makefile_frag}
-
-# post-target:
-
-CHECK=""
-
-for TEST in ${SIMPLE_TESTS} ; do
- echo "${TEST}: ${TEST}.o" '$(DEPLIBS)
- $(CXX) -o' "${TEST} ${TEST}.o" '$(LDLIBS)
-' >> Makefile
-done
-
-for TEST in ${TESTS} ; do
- echo ".PHONY: check-${TEST}" >>Makefile
- if [ -f ${srcdir}/${TEST}.inp ] ; then
- echo "check-${TEST}: ${TEST}" '$(srcdir)'"/${TEST}.inp
- ./${TEST} < "'$(srcdir)'"/${TEST}.inp > ${TEST}.out 2>&1" >>Makefile
- else
- echo "check-${TEST}: ${TEST}
- ./${TEST} > ${TEST}.out 2>&1" >>Makefile
- fi
- echo ' diff -c $(srcdir)/'"${TEST}.exp ${TEST}.out" >>Makefile
- CHECK="${CHECK} check-${TEST}"
-done
-echo "
-check: ${CHECK}" >>Makefile
-
-
diff --git a/contrib/libg++/libstdc++/tests/tcomplex.cc b/contrib/libg++/libstdc++/tests/tcomplex.cc
deleted file mode 100644
index c9d27360b1b8..000000000000
--- a/contrib/libg++/libstdc++/tests/tcomplex.cc
+++ /dev/null
@@ -1,143 +0,0 @@
-// Tests for the -*- C++ -*- complex number classes.
-// Copyright (C) 1994 Free Software Foundation
-
-// This file is part of the GNU ANSI C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms of
-// the GNU General Public License as published by the Free Software
-// Foundation; either version 2, or (at your option) any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-#include <std/cassert.h>
-#include <iostream.h>
-#include <std/complex.h>
-
-// to test near-equality
-
-const double eps = 0.000001;
-
-static void close_enough(const double_complex& a, const double_complex& b)
-{
- assert(fabs(real(a) - real(b)) < eps &&
- fabs(imag(a) - imag(b)) < eps);
-}
-
-
-void test3(double_complex& a, double_complex& b, double_complex& c)
-{
-
- close_enough(-(-a) , a);
- close_enough((a + b) , (b + a));
- close_enough((a + (-b)) , (a - b));
- close_enough((a * b) , (b * a));
- close_enough((a * (-b)) , -(a * b));
- close_enough((a / (-b)) , -(a / b));
- close_enough((a - b) , -(b - a));
- close_enough((a + (b + c)) , ((a + b) + c));
- close_enough((a * (b * c)) , ((a * b) * c));
- close_enough((a * (b + c)) , ((a * b) + (a * c)));
- close_enough(((a - b) + b) , a);
- close_enough(((a + b) - b) , a);
- close_enough(((a * b) / b) , a);
- close_enough(((a / b) * b) , a);
-
-
- double_complex x = a;
- x *= b;
- close_enough(x , (a * b));
- x += c;
- close_enough(x , ((a * b) + c));
- x -= a;
- close_enough(x , (((a * b) + c) - a));
- x /= b;
- close_enough(x , ((((a * b) + c) - a) / b));
-
-}
-
-main()
-{
- double_complex one = 1.0;
- double_complex i (0.0, 1.0);
- double_complex neg_one = -1.0;
-
- cout << "double_complex one = " << one << "\n";
- cout << "i = " << i << "\n";
- cout << "neg_one = " << neg_one << "\n";
- cout << "sqrt(neg_one) = " << sqrt(neg_one) << "\n";
-
- double_complex a (2.0, 3.0);
- double_complex b (4.0, 5.0);
-
- cout << "a = " << a << "\n";
- cout << "b = " << b << "\n";
-
- cout << "a + one = " << (a + one) << "\n";
- (close_enough((a+one), double_complex(3.0, 3.0)));
- cout << "a - one = " << (a - one) << "\n";
- (close_enough((a-one), double_complex(1.0, 3.0)));
- cout << "a * one = " << (a * one) << "\n";
- (close_enough((a*one), a));
- cout << "a / one = " << (a / one) << "\n";
- (close_enough((a/one), a));
-
- cout << "a + b = " << (a + b) << "\n";
- (close_enough((a+b), double_complex(6.0, 8.0)));
- cout << "a - b = " << (a - b) << "\n";
- (close_enough((a-b), double_complex(-2.0, -2.0)));
- cout << "a * b = " << (a * b) << "\n";
- (close_enough((a*b), double_complex(-7.0, 22.0)));
- cout << "a / b = " << (a / b) << "\n";
- (close_enough((a/b), double_complex(0.5609760976, 0.0487804878)));
-
- double_complex c;
-
- c = a; cout << "c = a; c += b = " << (c += b) << "\n";
- c = a; cout << "c = a; c -= b = " << (c -= b) << "\n";
- c = a; cout << "c = a; c *= b = " << (c *= b) << "\n";
- c = a; cout << "c = a; c /= b = " << (c /= b) << "\n";
-
- cout << "-a = " << (-a) << "\n";
- cout << "real(a) = " << real(a) << "\n";
- assert(real(a) == 2.0);
- cout << "imag(a) = " << imag(a) << "\n";
- assert(imag(a) == 3.0);
- cout << "conj(a) = " << conj(a) << "\n";
- assert(conj(a) == double_complex(2.0, -3.0));
- cout << "norm(a) = " << norm(a) << "\n";
- assert(norm(a) == 13.0);
-
- cout << "abs(a) = " << abs(a) << "\n";
- cout << "arg(a) = " << arg(a) << "\n";
- cout << "cos(a) = " << cos(a) << "\n";
- cout << "sin(a) = " << sin(a) << "\n";
- cout << "cosh(a) = " << cosh(a) << "\n";
- cout << "sinh(a) = " << sinh(a) << "\n";
- cout << "log(a) = " << log(a) << "\n";
- cout << "exp(a) = " << exp(a) << "\n";
- cout << "sqrt(a) = " << sqrt(a) << "\n";
- cout << "pow(a, 2) = " << pow(a, 2) << "\n";
- cout << "pow(a, b) = " << pow(a, b) << "\n";
-
- double_complex d (10, 20);
- double_complex e = pow(a, 2);
-
- test3(one, one, one);
- test3(a, a, a);
- test3(a, b, d);
- test3(e, i, b);
- test3(d, d, i);
-
- cout << "enter a complex number in form a or (a) or (a, b): ";
- cin >> c;
- cout << "number = " << c << "\n";
-
- cout << "\nEnd of test\n";
- return 0;
-}
diff --git a/contrib/libg++/libstdc++/tests/tcomplex.exp b/contrib/libg++/libstdc++/tests/tcomplex.exp
deleted file mode 100644
index 5bef15cd3769..000000000000
--- a/contrib/libg++/libstdc++/tests/tcomplex.exp
+++ /dev/null
@@ -1,37 +0,0 @@
-double_complex one = (1,0)
-i = (0,1)
-neg_one = (-1,0)
-sqrt(neg_one) = (0,1)
-a = (2,3)
-b = (4,5)
-a + one = (3,3)
-a - one = (1,3)
-a * one = (2,3)
-a / one = (2,3)
-a + b = (6,8)
-a - b = (-2,-2)
-a * b = (-7,22)
-a / b = (0.560976,0.0487805)
-c = a; c += b = (6,8)
-c = a; c -= b = (-2,-2)
-c = a; c *= b = (-7,22)
-c = a; c /= b = (0.560976,0.0487805)
--a = (-2,-3)
-real(a) = 2
-imag(a) = 3
-conj(a) = (2,-3)
-norm(a) = 13
-abs(a) = 3.60555
-arg(a) = 0.982794
-cos(a) = (-4.18963,-9.10923)
-sin(a) = (9.1545,-4.16891)
-cosh(a) = (-3.72455,0.511823)
-sinh(a) = (-3.59056,0.530921)
-log(a) = (1.28247,0.982794)
-exp(a) = (-7.31511,1.04274)
-sqrt(a) = (1.67415,0.895977)
-pow(a, 2) = (-5,12)
-pow(a, b) = (-0.753046,-0.986429)
-enter a complex number in form a or (a) or (a, b): number = (1.2,-34)
-
-End of test
diff --git a/contrib/libg++/libstdc++/tests/tcomplex.inp b/contrib/libg++/libstdc++/tests/tcomplex.inp
deleted file mode 100644
index c4e1d84660f2..000000000000
--- a/contrib/libg++/libstdc++/tests/tcomplex.inp
+++ /dev/null
@@ -1 +0,0 @@
-(1.2, -34)
diff --git a/contrib/libg++/libstdc++/tests/tlist.cc b/contrib/libg++/libstdc++/tests/tlist.cc
deleted file mode 100644
index aaf56714a79c..000000000000
--- a/contrib/libg++/libstdc++/tests/tlist.cc
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- test/demo of generic lists
-*/
-
-#include <assert.h>
-
-#define tassert(ex) {if ((ex)) cerr << #ex << "\n"; \
- else _assert(#ex, __FILE__,__LINE__); }
-
-#include <iostream.h>
-#include "list.h"
-#include "algo.h"
-
-bool int_compare(int a, int b)
-{
- return a < b;
-}
-
-int inc(int x)
-{
- return x + 1;
-}
-
-void print(list<int>& l)
-{
- for (list<int>::iterator it = l.begin(); it != l.end(); it++)
- cout << *it << " ";
- cout << "\n";
-}
-
-int is_odd(int x)
-{
- return x & 1;
-}
-
-int is_even(int x)
-{
- return (x & 1) == 0;
-}
-
-void sequence(list<int>& a, int lo, int hi)
-{
- back_insert_iterator<list<int> > it(a);
- while (lo <= hi)
- *it++ = lo++;
-}
-
-int old_rand = 9999;
-
-int get_rand()
-{
- old_rand = ((long)old_rand * (long)1243) % (long)971;
- return old_rand;
-}
-
-void randseq(list<int>& a, int n)
-{
- back_insert_iterator<list<int> > it(a);
- while (--n >= 0)
- *it++ = get_rand() % 50;
-}
-
-int array1 [] = { 9, 16, 36 };
-int array2 [] = { 1, 4 };
-
-int test_splice ()
-{
- list<int> l1 (array1, array1 + 3);
- list<int> l2 (array2, array2 + 2);
- list<int>::iterator i1 = l1.begin ();
- l1.splice (i1, l2);
- list<int>::iterator i2 = l1.begin ();
- while (i2 != l1.end ())
- cout << *i2++ << endl;
- return 0;
-}
-
-main()
-{
- list<int> a; int i;
- list<int>::iterator it, bit;
- sequence(a, 1, 20);
- cout << "\nlist<int> a = sequence(1, 20);\n"; print(a);
- for (it = a.begin (), i = 0; it != a.end (); it++, i++)
- assert (*it == i + 1);
- list<int> b;
- randseq(b, 20);
- cout << "\nlist<int> b = randseq(20);\n"; print(b);
- list<int> c;
- c.insert (c.end(), a.begin(), a.end());
- c.insert (c.end(), b.begin(), b.end());
- cout << "\nlist<int> c = a and b;\n"; print(c);
-
- list<int> d;
- for (it = a.begin(); it != a.end(); it++)
- d.insert(d.end (), inc(*it));
- cout << "\nlist<int> d = map(inc, a);\n"; print(d);
-
- list<int> e;
- back_insert_iterator<list<int> > e_insertor (e);
- reverse_copy (a.begin(), a.end (), e_insertor);
- cout << "\nlist<int> e = reverse(a);\n"; print(e);
-
- list<int> f;
- for (it = a.begin(); it != a.end(); it++)
- if (is_odd (*it))
- f.insert(f.end (), *it);
- cout << "\nlist<int> f = select(is_odd, a);\n"; print(f);
- list<int> ff;
- for (it = f.begin(); it != f.end(); it++)
- if (is_even (*it))
- ff.insert(ff.end (), *it);
- assert(ff.empty());
-
- int red = 0;
- for (it = a.begin(); it != a.end(); it++)
- red += *it;
- cout << "\nint red = a.reduce(plus, 0);\n"; cout << red;
- it = a.begin(); ++it; ++it;
- int second = *it;
- cout << "\nint second = a[2];\n"; cout << second;
- list<int> g;
- for (it = a.begin(), bit = b.begin(); it != a.end () && bit != b.end (); )
- g.insert (g.end (), *it++ + *bit++);
- cout << "\nlist<int> g = combine(plus, a, b);\n"; print(g);
-#if 1
- for (it = g.begin(); it != g.end(); )
- {
- bit = it++;
- if (is_odd (*bit))
- g.erase (bit);
- }
-#else
- g.remove_if (is_odd);
-#endif
- cout << "\ng.del(is_odd);\n"; print(g);
-
- ff.erase (ff.begin (), ff.end());
- for (it = g.begin(); it != g.end(); it++)
- if (is_odd (*it))
- ff.insert (ff.end (), *it);
- assert(ff.empty());
-
- b.sort();
- for (it = b.begin(); bit = it++, it != b.end (); ) assert (*it >= *bit);
- cout << "\nb.sort(int_compare);\n"; print(b);
-
- list<int> h;
- back_insert_iterator<list<int> > h_insertor (h);
- merge (a.begin (), a.end (), b.begin (), b.end (), h_insertor, int_compare);
- cout << "\nlist<int> h = merge(a, b, int_compare);\n"; print(h);
- for (it = h.begin(); bit = it++, it != h.end (); ) assert (*it >= *bit);
-
- cout << "\nh via iterator:\n";
- for (it = h.begin(); it != h.end (); it++)
- cout << *it << ", ";
- cout << "\n";
-
- test_splice ();
-
- cout << "\ndone\n";
-}
diff --git a/contrib/libg++/libstdc++/tests/tlist.exp b/contrib/libg++/libstdc++/tests/tlist.exp
deleted file mode 100644
index 65f7806826f6..000000000000
--- a/contrib/libg++/libstdc++/tests/tlist.exp
+++ /dev/null
@@ -1,44 +0,0 @@
-
-list<int> a = sequence(1, 20);
-1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
-
-list<int> b = randseq(20);
-28 27 5 17 44 6 9 40 15 26 49 35 15 48 13 27 25 25 9 6
-
-list<int> c = a and b;
-1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 28 27 5 17 44 6 9 40 15 26 49 35 15 48 13 27 25 25 9 6
-
-list<int> d = map(inc, a);
-2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
-
-list<int> e = reverse(a);
-20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
-
-list<int> f = select(is_odd, a);
-1 3 5 7 9 11 13 15 17 19
-
-int red = a.reduce(plus, 0);
-210
-int second = a[2];
-3
-list<int> g = combine(plus, a, b);
-29 29 8 21 49 12 16 48 24 36 60 47 28 62 28 43 42 43 28 26
-
-g.del(is_odd);
-8 12 16 48 24 36 60 28 62 28 42 28 26
-
-b.sort(int_compare);
-5 6 6 9 9 13 15 15 17 25 25 26 27 27 28 35 40 44 48 49
-
-list<int> h = merge(a, b, int_compare);
-1 2 3 4 5 5 6 6 6 7 8 9 9 9 10 11 12 13 13 14 15 15 15 16 17 17 18 19 20 25 25 26 27 27 28 35 40 44 48 49
-
-h via iterator:
-1, 2, 3, 4, 5, 5, 6, 6, 6, 7, 8, 9, 9, 9, 10, 11, 12, 13, 13, 14, 15, 15, 15, 16, 17, 17, 18, 19, 20, 25, 25, 26, 27, 27, 28, 35, 40, 44, 48, 49,
-1
-4
-9
-16
-36
-
-done
diff --git a/contrib/libg++/libstdc++/tests/tmap.cc b/contrib/libg++/libstdc++/tests/tmap.cc
deleted file mode 100644
index 7169f9d20d19..000000000000
--- a/contrib/libg++/libstdc++/tests/tmap.cc
+++ /dev/null
@@ -1,66 +0,0 @@
-#include <map.h>
-#include <algo.h>
-#include <iostream.h>
-#include <function.h>
-
-int SIZE;
-
-#if 0
-/* Crashes compiler */
-#define int_less less<int>
-#else
-struct int_less {
- bool operator() (int x, int y) const { return x < y; }
-};
-struct str_less {
- bool operator() (char* x, char* y) const { return strcmp(x,y) < 0; }
-};
-#endif
-
-#if 0
-void add(int x[], int y[], map<int,int, int_less>& a)
-{
- for (int i = 0; i < SIZE; ++i) a[x[i]] = y[i];
-}
-#endif
-
-int
-main(int argv, char** argc)
-{
-#if 0
- if (argv > 1)
- {
- SIZE = abs(atoi(argc[1]));
- SIZE &= ~1;
- }
- else
- SIZE = 100;
- nums = new int[SIZE];
- odds = new int[SIZE];
- perm = new int[SIZE];
-#endif
-
- map<int, int, int_less> my_map;
-
- map<char*, int, str_less> phones;
-
- my_map[4] = 40;
- my_map[2] = 20;
-
- // The (char*) is needed because g++ doesn't
- // convert char[] to char* in this context.
- phones[(char*)"tom"] = 2345;
- phones[(char*)"dick"] = 5678;
- phones[(char*)"harry"] = 7654;
-
- cout << "2 -> " << my_map[2] << endl;
- cout << "4 -> " << my_map[4] << endl;
-
- map<int, int, int_less>::iterator it = my_map.begin();
- for ( ; it != my_map.end(); it++)
- cout << "my_map[" << (*it).first << "] = " << (*it).second << endl;
-
- map<char*, int, str_less>::iterator pit = phones.begin();
- for ( ; pit != phones.end(); pit++)
- cout << "phones[" << (*pit).first << "] = " << (*pit).second << endl;
-}
diff --git a/contrib/libg++/libstdc++/tests/tmap.exp b/contrib/libg++/libstdc++/tests/tmap.exp
deleted file mode 100644
index b7b5df249fb0..000000000000
--- a/contrib/libg++/libstdc++/tests/tmap.exp
+++ /dev/null
@@ -1,7 +0,0 @@
-2 -> 20
-4 -> 40
-my_map[2] = 20
-my_map[4] = 40
-phones[dick] = 5678
-phones[harry] = 7654
-phones[tom] = 2345
diff --git a/contrib/libg++/libstdc++/tests/tstring.cc b/contrib/libg++/libstdc++/tests/tstring.cc
deleted file mode 100644
index 490f2c843e7a..000000000000
--- a/contrib/libg++/libstdc++/tests/tstring.cc
+++ /dev/null
@@ -1,189 +0,0 @@
-// Tests for the -*- C++ -*- string classes.
-// Copyright (C) 1994 Free Software Foundation
-
-// This file is part of the GNU ANSI C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms of
-// the GNU General Public License as published by the Free Software
-// Foundation; either version 2, or (at your option) any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-#include <std/string.h>
-#include <iostream.h>
-#include <std/cstdlib.h>
-#include <std/cassert.h>
-
-string X = "Hello";
-string Y = "world";
-string N = "123";
-string c;
-char* s = ",";
-
-void decltest()
-{
- string x;
- cout << "an empty string:" << x << "\n";
- assert(x == "");
-
- string y = "Hello";
- cout << "A string initialized to Hello:" << y << "\n";
- assert(y == "Hello");
-
- if (y[y.length()-1] == 'o')
- y = y + '\n';
- assert(y == "Hello\n");
- y = "Hello";
-
- string a = y;
- cout << "A string initialized to previous string:" << a << "\n";
- assert(a == "Hello");
- assert(a == y);
-
- string b (a, 1, 2);
- cout << "A string initialized to (previous string, 1, 2):" << b << "\n";
- assert(b == "el");
-
- char ch = '@';
- string z (1, ch);
- cout << "A string initialized to @:" << z << "\n";
- assert (z == "@");
-
- string n ("20");
- cout << "A string initialized to 20:" << n << "\n";
- assert(n == "20");
-
- int i = atoi(n.c_str ());
- double f = atof(n.c_str ());
- cout << "n = " << n << " atoi(n) = " << i << " atof(n) = " << f << "\n";
- assert(i == 20);
- assert(f == 20);
-
-}
-
-void cattest()
-{
- string x = X;
- string y = Y;
- string z = x + y;
- cout << "z = x + y = " << z << "\n";
- assert(z == "Helloworld");
-
- x += y;
- cout << "x += y; x = " << x << "\n";
- assert(x == "Helloworld");
-
- y = Y;
- x = X;
- y.insert (0, x);
- cout << "y.insert (0, x); y = " << y << "\n";
- assert(y == "Helloworld");
-
- y = Y;
- x = X;
- x = x + y + x;
- cout << "x = x + y + x; x = " << x << "\n";
- assert(x == "HelloworldHello");
-
- y = Y;
- x = X;
- x = y + x + x;
- cout << "x = y + x + x; x = " << x << "\n";
- assert(x == "worldHelloHello");
-
- x = X;
- y = Y;
- z = x + s + ' ' + y.substr (y.find ('w'), 1) + y.substr (y.find ('w') + 1) + ".";
- cout << "z = x + s + + y.substr (y.find (w), 1) + y.substr (y.find (w) + 1) + . = " << z << "\n";
- assert(z == "Hello, world.");
-}
-
-void comparetest()
-{
- string x = X;
- string y = Y;
- string n = N;
- string z = x + y;
-
- assert(x != y);
- assert(x == "Hello");
- assert(x != z.substr (0, 4));
- assert(x.compare (y) < 0);
- assert(x.compare (z.substr (0, 6)) < 0);
-
- assert(x.find ("lo") == 3);
- assert(x.find ("l", 2) == 2);
- assert(x.rfind ("l") == 3);
-}
-
-void substrtest()
-{
- string x = X;
-
- char ch = x[0];
- cout << "ch = x[0] = " << ch << "\n";
- assert(ch == 'H');
-
- string z = x.substr (2, 3);
- cout << "z = x.substr (2, 3) = " << z << "\n";
- assert(z == "llo");
-
- x.replace (2, 2, "r");
- cout << "x.replace (2, 2, r); x = " << x << "\n";
- assert(x == "Hero");
-
- x = X;
- x.replace (0, 1, 'j');
- cout << "x.replace (0, 1, 'j'); x = " << x << "\n";
- assert(x == "jello");
-}
-
-void iotest()
-{
- string z;
- cout << "enter a word:";
- cin >> z;
- cout << "word =" << z << " ";
- cout << "length = " << z.length() << "\n";
-}
-
-void identitytest(string a, string b)
-{
- string x = a;
- string y = b;
- x += b;
- y.insert (0, a);
- assert((a + b) == x);
- assert((a + b) == y);
- assert(x == y);
-
- assert((a + b + a) == (a + (b + a)));
-
- x.remove (x.rfind (b));
- assert(x == a);
-
- y.replace (0, y.rfind (b), b);
- assert(y == (b + b));
- y.replace (y.find (b), b.length (), a);
- assert(y == (a + b));
-}
-
-int main()
-{
- decltest();
- cattest();
- comparetest();
- substrtest();
- identitytest(X, X);
- identitytest(X, Y);
- identitytest(X+Y+N+X+Y+N, "A string that will be used in identitytest but is otherwise just another useless string.");
- iotest();
- cout << "\nEnd of test\n";
- return 0;
-}
diff --git a/contrib/libg++/libstdc++/tests/tstring.exp b/contrib/libg++/libstdc++/tests/tstring.exp
deleted file mode 100644
index 3333ab1231d3..000000000000
--- a/contrib/libg++/libstdc++/tests/tstring.exp
+++ /dev/null
@@ -1,20 +0,0 @@
-an empty string:
-A string initialized to Hello:Hello
-A string initialized to previous string:Hello
-A string initialized to (previous string, 1, 2):el
-A string initialized to @:@
-A string initialized to 20:20
-n = 20 atoi(n) = 20 atof(n) = 20
-z = x + y = Helloworld
-x += y; x = Helloworld
-y.insert (0, x); y = Helloworld
-x = x + y + x; x = HelloworldHello
-x = y + x + x; x = worldHelloHello
-z = x + s + + y.substr (y.find (w), 1) + y.substr (y.find (w) + 1) + . = Hello, world.
-ch = x[0] = H
-z = x.substr (2, 3) = llo
-x.replace (2, 2, r); x = Hero
-x.replace (0, 1, 'j'); x = jello
-enter a word:word =abcdefghijklmnopqrstuvwxyz length = 26
-
-End of test
diff --git a/contrib/libg++/libstdc++/tests/tstring.inp b/contrib/libg++/libstdc++/tests/tstring.inp
deleted file mode 100644
index b0883f382e1a..000000000000
--- a/contrib/libg++/libstdc++/tests/tstring.inp
+++ /dev/null
@@ -1 +0,0 @@
-abcdefghijklmnopqrstuvwxyz
diff --git a/contrib/libg++/libstdc++/tests/tvector.cc b/contrib/libg++/libstdc++/tests/tvector.cc
deleted file mode 100644
index ef238ef52da5..000000000000
--- a/contrib/libg++/libstdc++/tests/tvector.cc
+++ /dev/null
@@ -1,20 +0,0 @@
-#include <vector.h>
-#include <iostream.h>
-#include <algo.h>
-
-main ()
-{
- cout << "Fill of C array:\n";
- char x[50];
- fill (x, x+50, '/');
- fill (x+1, x+49, '*');
- copy (x, x+50, ostream_iterator<char>(cout));
-
- cout << "\nFill of vector<char>:\n";
-
- vector<char> cvec;
- cvec.insert (cvec.begin(), 50, '/');
- fill (cvec.begin()+1, cvec.end()-1, '-');
- copy (cvec.begin(), cvec.end(), ostream_iterator<char>(cout));
- cout << endl;
-}
diff --git a/contrib/libg++/libstdc++/tests/tvector.exp b/contrib/libg++/libstdc++/tests/tvector.exp
deleted file mode 100644
index 84a9d1bf3a4d..000000000000
--- a/contrib/libg++/libstdc++/tests/tvector.exp
+++ /dev/null
@@ -1,4 +0,0 @@
-Fill of C array:
-/************************************************/
-Fill of vector<char>:
-/------------------------------------------------/
diff --git a/contrib/libg++/libstdc++/typeinfo b/contrib/libg++/libstdc++/typeinfo
deleted file mode 100644
index 93524ed18626..000000000000
--- a/contrib/libg++/libstdc++/typeinfo
+++ /dev/null
@@ -1,6 +0,0 @@
-// -*- C++ -*- forwarding header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __TYPEINFO__
-#include <std/typeinfo.h>
-#endif
diff --git a/contrib/libg++/libstdc++/typeinfoi.cc b/contrib/libg++/libstdc++/typeinfoi.cc
deleted file mode 100644
index 8daa17764f4a..000000000000
--- a/contrib/libg++/libstdc++/typeinfoi.cc
+++ /dev/null
@@ -1,131 +0,0 @@
-// Methods for type_info for the -*- C++ -*- Run Time Type Identification.
-// Copyright (C) 1994 Free Software Foundation
-
-// This file is part of the GNU ANSI C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-// As a special exception, if you link this library with files
-// compiled with a GNU compiler to produce an executable, this does not cause
-// the resulting executable to be covered by the GNU General Public License.
-// This exception does not however invalidate any other reasons why
-// the executable file might be covered by the GNU General Public License.
-
-// Written by Kung Hsu based upon the specification in the 20 September 1994
-// C++ working paper, ANSI document X3J16/94-0158.
-
-#ifdef __GNUG__
-#pragma implementation "std/typeinfo.h"
-#endif
-
-#include <std/cstdlib.h>
-#include <std/typeinfo.h>
-
-// Offset functions for the class type.
-
-// 0 is returned if the cast is invalid, otherwise the converted
-// object pointer that points to the sub-object that is matched is
-// returned.
-
-void*
-__class_type_info::__rtti_match (const type_info& desired, int is_public,
- void *objptr) const
-{
- if (__rtti_compare (desired) == 0)
- return objptr;
-
- void *match_found = 0;
- for (int i = 0; i < n_bases; i++) {
- if (is_public && access_list[i] != _RTTI_ACCESS_PUBLIC)
- continue;
- void *p = (char *)objptr + offset_list[i];
- if (is_virtual_list[i])
- p = *(void **)p;
-
- if ((p=base_list[i]->__rtti_match (desired, is_public, p))
- != 0)
- if (match_found == 0)
- match_found = p;
- else if (match_found != p) {
- // base found at two different pointers,
- // conversion is not unique
- return 0;
- }
- }
-
- return match_found;
-}
-
-void*
-__pointer_type_info::__rtti_match (const type_info& catch_type, int,
- void *objptr) const
-{
- if (catch_type.__rtti_get_node_type () == __rtti_get_node_type())
- {
- type_info &sub_catch_type = ((__pointer_type_info&)catch_type).type;
- type_info &sub_throw_type = ((__pointer_type_info*)this)->type;
- if (sub_catch_type.__rtti_get_node_type () == _RTTI_BUILTIN_TYPE
- && ((__builtin_type_info&)sub_catch_type).b_type == __builtin_type_info::_RTTI_BI_VOID)
- {
- return objptr;
- }
- if (sub_catch_type.__rtti_get_node_type () == _RTTI_ATTR_TYPE
- && ((__attr_type_info&)sub_catch_type).attr == __attr_type_info::_RTTI_ATTR_CONST)
- {
- /* We have to allow a catch of const int* on a int * throw. */
- type_info &sub_sub_catch_type = ((__attr_type_info&)sub_catch_type).type;
- return __throw_type_match_rtti (&sub_sub_catch_type, &sub_throw_type, objptr);
- }
- return __throw_type_match_rtti (&sub_catch_type, &sub_throw_type, objptr);
- }
- return 0;
-}
-
-/* Low level match routine used by compiler to match types of catch variables and thrown
- objects. */
-extern "C"
-void*
-__throw_type_match_rtti (void *catch_type_r, void *throw_type_r, void *objptr)
-{
- type_info &catch_type = *(type_info*)catch_type_r;
- type_info &throw_type = *(type_info*)throw_type_r;
- void *new_objptr;
-
- if (catch_type == throw_type)
- return objptr;
-
- /* Ensure we can call __rtti_match. */
- if ((throw_type.__rtti_get_node_type () != type_info::_RTTI_CLASS_TYPE
- && throw_type.__rtti_get_node_type () != type_info::_RTTI_USER_TYPE
- && throw_type.__rtti_get_node_type () != type_info::_RTTI_POINTER_TYPE)
- || ((catch_type.__rtti_get_node_type () != type_info::_RTTI_CLASS_TYPE
- && catch_type.__rtti_get_node_type () != type_info::_RTTI_USER_TYPE
- && catch_type.__rtti_get_node_type () != type_info::_RTTI_POINTER_TYPE)))
- return 0;
-
-#if 0
- printf ("We want to match a %s against a %s!\n",
- throw_type.name (), catch_type.name ());
-#endif
-
- /* The 1 skips conversions to private bases. */
- new_objptr = throw_type.__rtti_match (catch_type, 1, objptr);
-#if 0
- if (new_objptr)
- printf ("It converts, delta is %d\n", new_objptr-objptr);
-#endif
- return new_objptr;
-}
-
-bad_cast __bad_cast_object ("bad_cast");
diff --git a/contrib/libg++/libstdc++/utility b/contrib/libg++/libstdc++/utility
deleted file mode 100644
index fb79aa782746..000000000000
--- a/contrib/libg++/libstdc++/utility
+++ /dev/null
@@ -1,8 +0,0 @@
-// -*- C++ -*- forwarding header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __UTILITY__
-#define __UTILITY__
-#include <function.h>
-#include <pair.h>
-#endif
diff --git a/contrib/libg++/libstdc++/vector b/contrib/libg++/libstdc++/vector
deleted file mode 100644
index 79f735937517..000000000000
--- a/contrib/libg++/libstdc++/vector
+++ /dev/null
@@ -1,7 +0,0 @@
-// -*- C++ -*- forwarding header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __VECTOR__
-#define __VECTOR__
-#include <vector.h>
-#endif
diff --git a/contrib/libio/ChangeLog b/contrib/libio/ChangeLog
deleted file mode 100644
index b4564ded4713..000000000000
--- a/contrib/libio/ChangeLog
+++ /dev/null
@@ -1,2807 +0,0 @@
-Fri Mar 16 12:46:19 GMT 2001 Bernd Schmidt (bernds@redhat.com)
-
- * gcc-2.95.3 Released.
-
-2000-12-10 Bernd Schmidt <bernds@redhat.com>
-
- 2000-10-16 Jakub Jelinek <jakub@redhat.com>
- * iostream.cc (ostream::operator<<(double n)) [__GLIBC_MINOR__ >= 2]:
- Initialize new fields wide and i18n of struct printf_info.
- (ostream::operator<<(long double n)) [__GLIBC_MINOR__ >= 2]:
- Likewise.
-
- 2000-09-23 Franz Sirl <Franz.Sirl-kernel@lauterbach.com>
- * stdstreams.cc: Include <libio.h>, not "libio.h".
- * iolibio.h: Likewise.
- (_IO_pos_BAD): Use _IO_off_t instead of _IO_fpos_t.
- * libio.h (_IO_USER_LOCK): Define.
-
- 1999-12-22 Jakub Jelinek <jakub@redhat.com>
- * libio.h (_IO_cookie_io_functions_t): Use _IO_off_t instead of
- _IO_fpos_t.
- (_IO_seekoff, _IO_seekpos): Likewise. Use _IO_off64_t instead of
- _IO_fpos64_t.
- * libioP.h (_IO_seekoff_t, _IO_seekpos_t, _IO_seek_t): Likewise.
- (_IO_seekoff, _IO_seekpos): Likewise.
- (_IO_default_seekoff, _IO_default_seekpos): Likewise.
- (_IO_default_seek): Likewise.
- (_IO_file_seekoff, _IO_file_seek, _IO_str_seekoff): Likewise.
- * streambuf.h (streampos): Typedef to _IO_off_t resp. _IO_off64_t.
- * parsestream.h (class parsebuf::pos_at_line_start): Change type
- to _IO_off_t.
-
-2000-01-28 Martin v. Löwis <loewis@informatik.hu-berlin.de>
-
- * fstream.h (ifstream::ifstream): Add ios::in to mode.
- (ifstream::open): Likewise.
- (ofstream::ofstream): Add ios::out to mode.
- (ofstream::open): Likewise.
-
-1999-12-21 Martin v. Löwis <loewis@informatik.hu-berlin.de>
-
- * filebuf.cc (open): Support ios::ate if _G_HAVE_IO_FILE_OPEN.
- Remove seek for ios::app if not.
-
-1999-12-14 Martin v. Löwis <loewis@informatik.hu-berlin.de>
-
- * strstream.h (strstreambuf::streambuf): Rename parameters to
- avoid shadow warning.
- * stream.h (WS): Likewise.
-
-Sun Oct 24 23:54:10 PDT 1999 Jeff Law (law@cygnus.com)
-
- * gcc-2.95.2 Released.
-
-Mon Aug 16 01:29:24 PDT 1999 Jeff Law (law@cygnus.com)
-
- * gcc-2.95.1 Released.
-
-1999-08-08 Alexandre Oliva <oliva@dcc.unicamp.br>
-
- * streambuf.h (ios::streamsize): Declare as _IO_ssize_t, as in the
- global scope.
-
-1999-08-07 Andreas Schwab <schwab@suse.de>
-
- * iostream.cc: Add missing calls to isfx and setup a cleanup
- region for the locked stream.
- * iostream.h: Likewise.
- * isgetline.cc: Likewise.
- * isgetsb.cc: Likewise.
- * isscan.cc: Likewise.
-
-Wed Jul 28 21:39:31 PDT 1999 Jeff Law (law@cygnus.com)
-
- * gcc-2.95 Released.
-
-Sun Jul 25 23:40:51 PDT 1999 Jeff Law (law@cygnus.com)
-
- * gcc-2.95 Released.
-
-Mon Jun 28 09:25:23 1999 Hans-Peter Nilsson <hp@bitrange.com>
-
- * configure.in (post-target): Use "$(topsrcdir)", not "$(srcdir)/..".
-
-1999-05-20 Angela Marie Thomas <angela@cygnus.com>
-
- * configure.in: Test for ${compiler_name}.exe as well.
-
-1999-05-17 Mark Kettenis <kettenis@gnu.org>
-
- * libioP.h: Only include libc-lock.h if _IO_MTSAFE_IO is defined.
-
-1999-05-12 Jason Merrill <jason@yorick.cygnus.com>
-
- * configure.in (compiler_name): Don't do the skip-this-dir thing
- if we're reconfiguring.
-
-1999-04-29 Nathan Sidwell <nathan@acm.org>
-
- * streambuf.h (ios::~ios): Use operator delete[] to remove _arrays.
-
-Mon Apr 12 19:22:44 1999 Mumit Khan <khan@xraylith.wisc.edu>
-
- * filedoalloc.c (_POSIX_SOURCE): Remove definition.
- * fileops.c (_POSIX_SOURCE): Likewise.
- * iopopen.c (_POSIX_SOURCE): Likewise.
- * procbuf.cc (_POSIX_SOURCE): Likewise.
- * libioP.h (_POSIX_SOURCE): And define it here.
- * stdiostream.cc: Include libioP.h before others.
-
-Fri Apr 2 15:11:58 1999 H.J. Lu (hjl@gnu.org)
-
- * libio/configure.in (gxx_include_dir): Handle it.
- * libio/Makefile.in: Likewise.
-
-Wed Mar 24 22:36:45 1999 Mumit Khan <khan@xraylith.wisc.edu>
-
- * configure.in (EXEEXT): Define.
- (compiler_name): Use.
-
-1999-03-24 Alexandre Oliva <oliva@dcc.unicamp.br>
-
- * gen-params (CONFIG_NM): `test ... -o ...' is not portable.
-
-Thu Mar 11 01:07:55 1999 Franz Sirl <Franz.Sirl-kernel@lauterbach.com>
-
- * configure.in: Cleanup and add mh-*pic handling for arm, powerpc
-
-Fri Mar 5 01:15:15 1999 H.J. Lu (hjl@gnu.org)
-
- * config/linuxlibc1.mt (MT_CFLAGS): Add -D_G_STDIO_USES_LIBIO
- -D_G_HAVE_WEAK_SYMBOL.
-
- * genops.c: Add the proper weak alias if _G_STDIO_USES_LIBIO
- and _G_HAVE_WEAK_SYMBOL are defined.
- * iofclose.c: Likewise.
- * iofeof.c: Likewise.
- * ioferror.c: Likewise.
- * iogetc.c: Likewise.
- * ioputc.c: Likewise.
- * iovsprintf.c: Likewise.
- * iovsscanf.c: Likewise.
-
-Sun Feb 28 22:39:17 1999 Geoffrey Noer <noer@cygnus.com>
-
- * configure.in: Check cygwin*, not cygwin32*.
-
-Wed Feb 10 09:25:48 1999 Mumit Khan <khan@xraylith.wisc.edu>
-
- * gen-params (VTABLE_LABEL_PREFIX): Handle windows32.
-
-Wed Feb 3 22:05:41 1999 H.J. Lu (hjl@gnu.org)
- Jeffrey A Law (law@cygnus.com)
-
- * Makefile.in (iostream.list): Remove dependency on
- stamp-picdir.
- ($(LIBIOSTREAM_DEP)): Depend on stamp-picdir.
- ($(LIBIO_FILES)): Similarly.
-
- * config.shared (all): Make $(PICDIR) concurrent.
-
-1998-11-26 Manfred Hollstein <manfred@s-direktnet.de>
-
- * configure.in (compiler_name): Add check to detect if this
- language's compiler has been built.
-
-1998-10-12 Alexandre Oliva <oliva@dcc.unicamp.br>
-
- * config.shared (depend.new): Delete libc-lock.h from
- dependencies, and fix _G_config.h -> $(_G_CONFIG_H) rule.
- * depend: Rebuilt.
-
-Sun Oct 11 01:51:42 1998 Jeffrey A Law (law@cygnus.com)
-
- * config.shared (depend.new): Fix typo.
- * depend: Rebuilt.
-
-1998-09-09 Manfred Hollstein <manfred@s-direktnet.de>
-
- * configure.in (INSTALLDIR): Fix comment about changing INSTALLDIR's
- value; don't change its value if --enable-version-specific-runtime-libs
- has been specified.
-
-Wed Sep 2 21:05:39 1998 H.J. Lu (hjl@gnu.org)
-
- * configure.in: Fix INSTALLDIR replacement for cross-compile.
-
-Sun Aug 30 22:27:02 1998 Lutz Wohlrab <lutz.wohlrab@informatik.tu-chemnitz.de>
-
- * dbz/Makefile.in: Avoid assumptions about "tr" behaves when
- LANG is set to something other than English.
-
-Sun Aug 30 22:17:00 1998 H.J. Lu (hjl@gnu.org)
-
- * config.shared: Set libsubdir.
-
-1998-08-25 14:34 Ulrich Drepper <drepper@cygnus.com>
-
- * libio/iogetline.c (_IO_getline_info): Don't read anything for
- N == 0. Patch by HJ Lu.
-
-1998-08-23 Mark Mitchell <mark@markmitchell.com>
-
- * iomanip.h: Use __extension__ for `extern' explicit template
- instantiations.
-
-1998-08-17 Ulrich Drepper <drepper@cygnus.com>
-
- * strfile.h: Define __PMT if not already defined.
-
-1998-08-03 Andreas Jaeger <aj@arthur.rhein-neckar.de>
-
- * libioP.h: Use __PMT in typedefs.
- * strfile.h: Likewise.
-
-1998-06-29 Ulrich Drepper <drepper@cygnus.com>
-
- * libio.h: Rewrite __PMT change so that it works with platforms
- defining __P but not __PMT.
-
- * libio.h (__PMT): New macro. Defined like __P. Use is for
- function pointers.
-
-1998-06-27 Manfred Hollstein <manfred@s-direktnet.de>
-
- * Makefile.in (install): Remove superfluous /include.
-
-1998-06-26 Manfred Hollstein <manfred@s-direktnet.de>
-
- * config.shared (FLAGS_TO_PASS): Add gcc_version_trigger.
- (Makefile): Add dependency upon $(gcc_version_trigger).
-
-1998-06-24 Manfred Hollstein <manfred@s-direktnet.de>
-
- * Makefile.in (install): Install _G_config.h depending on new flag
- --enable-version-specific-runtime-libs.
- * config/linux.mt (gxx_include_dir): Remove definition here as we use
- gcc's default anyway.
-
-1998-06-24 Manfred Hollstein <manfred@s-direktnet.de>
-
- * config.shared (FLAGS_TO_PASS): Add gcc_version.
-
-1998-06-19 Manfred Hollstein <manfred@s-direktnet.de>
-
- * config.shared (FLAGS_TO_PASS): Add libsubdir.
-
-1998-06-07 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
-
- * genops.c (__underflow): Read character from read pointer as unsigned.
- (__uflow): Likewise.
-
-1998-05-22 Ulrich Drepper <drepper@cygnus.com>
-
- * strops.c (_IO_str_underflow): Read newly available character
- from buffer as unsigned.
-
-Sun Apr 19 22:13:36 1998 H.J. Lu (hjl@gnu.org)
-
- * isgetline.cc (istream::get): Fix a typo.
-
-Thu Mar 5 09:23:28 1998 Manfred Hollstein <manfred@s-direktnet.de>
-
- * configure.in: Make locating frag files failsafe even for the
- special case if configuring and building in srcdir.
-
-1998-02-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
-
- Changes for _G_IO_IO_FILE_VERSION == 0x20001:
- * libioP.h (_IO_showmanyc_t, _IO_SHOWMANYC, _IO_imbue_t,
- _IO_IMBUE): New definitions.
- (struct _IO_jump_t): Add __showmanyc and __imbue fields.
- (_IO_file_fopen): Add new fourth argument.
- * filebuf.cc (filebuf::open): Pass new fourth argument to
- _IO_file_fopen.
- * iolibio.h (_IO_freopen): Likewise.
- * streambuf.cc (streambuf::showmanyc, streambuf::imbue): New
- functions.
- * streambuf.h (_IO_wchar_t): Define to _G_wchar_t.
- (ios::fill): Remove casts.
- (struct streambuf): Add showmanyc and imbue members.
-
- * iostream.cc (ostream::operator<<(double n)) [__GLIBC_MINOR__ >=
- 1]: Initialize new fields is_char of struct printf_info.
- (ostream::operator<<(long double n)) [__GLIBC_MINOR__ >= 1]:
- Likewise.
-
-Sun Feb 22 17:24:53 1998 Jeffrey A Law (law@cygnus.com)
-
- * config.shared: Bring back changes from Ian and Fred that were
- accidentally clobbered. Should eliminate the need for Dave's
- recent change.
-
-Tue Feb 17 21:56:25 1998 H.J. Lu (hjl@gnu.org)
-
- * config/linux.mt (IO_OBJECTS): Add iogetline.o.
- * config/linuxlibc1.mt: Ditto.
-
- * iogetline.c (_IO_getline_info): Renamed from _IO_getline.
- (_IO_getline): Just call _IO_getline_info.
-
- * isgetline.cc (istream::getline, istream::get, _sb_readline):
- Call _IO_getline_info instead of _IO_getline and get the EOF
- information.
- * sbgetline.cc (streambuf::sgetline): Ditto.
-
- * libioP.h (_IO_getline_info): New declaration.
-
- * iogetline.c (_IO_getline): Handle the case when there is no
- buffer.
-
-Fri Feb 13 00:57:20 1998 Krister Walfridsson (cato@df.lth.se)
-
- * fileops.c: #include <unistd.h>.
- * ioprims.c: Likewise.
-
-1998-02-10 Mark Mitchell <mmitchell@usa.net>
-
- * iostream.cc (ostream::operator<<(long double)): Don't use
- labeled initializers.
-
-Fri Feb 6 01:35:56 1998 Manfred Hollstein <manfred@s-direktnet.de>
-
- * config.shared (FLAGS_TO_PASS): Don't emit PICFLAG.
- (.c.o): Check value of enable_shared, not PICFLAG.
- (.C.o): Dito.
- (.cc.o): Dito.
- (stamp-picdir): Dito.
-
-Thu Feb 5 17:41:26 1998 Dave Brolley <brolley@cygnus.com>
-
- * config.shared (LIBS): Change to -L../../libstdc++ (was -L../libstdc++)
- if ${DOING_GPERF} is true.
-
-1998-01-20 Andreas Schwab (schwab@issan.informatik.uni-dortmund.de)
-
- * iostream.cc (istream::operator>>(long double&))
- [!_G_HAVE_LONG_DOUBLE_IO]: Scan value into separate variable, in
- case long double is bigger than double.
- (ostream::operator<<(double)) [_G_HAVE_PRINTF_FP]: Fix order of
- initializers of struct printf_info to match declaration order,
- to work around g++ bug.
- (ostream::operator<<(long double)) [_G_HAVE_PRINTF_FP]: Likewise.
-
- * gen-params: Add missing quotes. Avoid useless use of command
- substitution.
-
-Sun Feb 1 13:29:47 1998 H.J. Lu (hjl@gnu.org)
-
- * filebuf.cc (filebuf::open): Call _IO_file_open if
- _G_HAVE_IO_FILE_OPEN is 1.
-
- * libio.h (_IO_fpos64_t, _IO_off64_t): Defined if
- _G_IO_IO_FILE_VERSION == 0x20001.
-
- * libioP.h (_IO_file_open): New declaration.
-
- * libio.h (_IO_FILE, _IO_stdin_, _IO_stdout_, _IO_stderr_,
- _IO_seekoff, _IO_seekpos): Add support for libio in glibc 2.1.
- * libioP.h (_IO_seekoff_t, _IO_seekpos_t, _IO_seek_t,
- _IO_seekoff, _IO_seekpos, _IO_default_seekoff,
- _IO_default_seekpos, _IO_default_seek, _IO_file_seekoff,
- _IO_file_seek, _IO_str_seekoff, _IO_pos_BAD, _IO_pos_as_off,
- _IO_pos_0): Ditto.
- * streambuf.h (streamoff, streampos): Ditto.
-
- * gen-params (__extension__): Use only if gcc version >= 2.8.
-
-Sun Feb 1 13:08:18 1998 Krister Walfridsson (cato@df.lth.se)
-
- * dbz/dbz.c (putconf): Handle systems which use "long long" as type
- for "off_t".
- * dbz/dbzmain.c (mkfiles): Likewise.
-
-Wed Jan 28 10:27:11 1998 Manfred Hollstein <manfred@s-direktnet.de>
-
- * config.shared (FLAGS_TO_PASS): Add gxx_include_dir.
-
- * stdio/configure.in, tests/configure.in: Update with yesterday's
- toplevel configure.in changes.
- * testsuite/configure.in: Likewise.
-
- * config.shared: Fix typo in yesterday's changes.
-
-Tue Jan 27 23:26:07 1998 Manfred Hollstein <manfred@s-direktnet.de>
-
- * config.shared: Emit everything which needs to be re-definable
- via file descriptor 1; the generic stuff is emitted using redirection
- onto fd 2.
-
- * configure.in (package_makefile_rules_frag): New variable
- which is used in the call to config.shared; redirect file descriptor 2
- to ${package_makefile_rules_frag}.
-
-Tue Jan 27 10:35:22 1998 H.J. Lu (hjl@gnu.org)
-
- * configure.in (topsrcdir): New.
- (CHECK_SUBDIRS, configdirs): Check ${topsrcdir}/gcc instead.
- (config-ml.in): Use ${topsrcdir}/config-ml.in.
-
- * tests/configure.in (topsrcdir): New.
- (CHECK): Check ${topsrcdir}/gcc instead.
-
-Fri Jan 16 00:48:03 1998 Manfred Hollstein <manfred@lts.sel.alcatel.de>
-
- * config.shared (FLAGS_TO_PASS): Add SHELL.
-
-Thu Jan 15 00:21:58 1998 Ian Lance Taylor <ian@cygnus.com>
-
- * configure.in: For *-*-cygwin32*, add a -I for winsup to both
- XCINCLUDES and XCXXINCLUDES.
- * config.shared: Use ${host_includes} when setting CXXINCLUDES in
- the DOING_LIBGXX case.
- * Makefile.in (_G_config.h): Pass $(CINCLUDES) in CC and
- $(CXXINCLUDES) in CXX when running gen-params.
-
-Tue Jan 13 21:32:08 1998 H.J. Lu (hjl@gnu.org)
-
- * configure.in (CHECK_SUBDIRS): Set to testsuite only if
- ${srcdir}/../gcc exists.
- (configdirs): Include testsuite only if ${srcdir}/../gcc exists.
-
- * tests/Makefile.in (check): Depend on $(CHECK).
-
- * tests/configure.in (CHECK): Set to "check-iostream
- check-stdio" if ${srcdir}/../../gcc doesn't exists.
-
-Thu Jan 8 18:09:03 1998 Fred Fish <fnf@cygnus.com>
-
- * config.shared (THIS_FILE): Really found via TOLIBIO instead
- of TOLIBCXX, which is empty when configuring gperf.
- (LIBS): When linking gperf, find libstdc++ relative to TO_TOPDIR
- instead of hardcoded "../".
-
-1997-12-12 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- Don't make gperf depend upon libg++.
- * config.shared (TOLIBGCXX) [DOING_GPERF]: Delete.
- (LIBS) [DOING_GPERF]: Make it just `-L../libstdc++ -lstdc++'.
-
-Thu Dec 11 11:20:59 1997 H.J. Lu (hjl@gnu.org)
-
- * configure.in (target frags): Add *-linux-gnu.
-
-Fri Dec 5 16:22:15 1997 H.J. Lu (hjl@gnu.org)
-
- * streambuf.cc (streambuf::~streambuf): Don't delete _lock
- for _IO_stdin/_IO_stdout/_IO_stderr.
-
-Thu Nov 27 01:32:43 1997 Jeffrey A Law (law@cygnus.com)
-
- * Makefile.in (install): Change gxx_includedir to gcc_include_dir.
- * config.shared (gxx_includedir): Remove default definition.
- * config/linux.mt: Change gxx_includedir to gxx_include_dir.
- * config/linuxaxp1.mt: Likewise.
-
-Wed Nov 26 16:08:50 1997 Richard Henderson (rth@cygnus.com)
-
- * configure.in (target frags): Add powerpc*-linux-gnulibc1.
- (stdio-lock): Similarly.
-
- * configure.in (target frags): Add alpha*-linux-gnulibc1.
- (pic frags): Its alpha*- not alpha-.
- (stdio-lock): Kill everything. Add alpha*-linux-gnulibc1.
- * libio.h: Check __GLIBC_MINOR__ to find stdio-lock.h. If not
- _IO_MTSAFE_IO & GLIBC, make sure the lock pointer is still there.
- * libioP.h: Check __GLIBC_MINOR__ to find libc-lock.h.
-
- * config/linuxaxp1-libc-lock.h: New file.
- * config/linuxaxp1-stdio-lock.h: New file.
- * config/linuxaxp1.mt: New file.
-
- * gen-params (va_list): Check for and use __gnuc_va_list.
- (NULL): Work around some linux kernel headers and redefine NULL.
-
-Mon Nov 24 17:04:18 1997 Michael Meissner <meissner@cygnus.com>
-
- * stdiostream.cc (sys_read): Declare ch with int type, rather than
- without a type.
-
-Tue Nov 18 09:53:58 1997 H.J. Lu (hjl@gnu.ai.mit.edu)
-
- * stdstrbufs.cc (DEF_STDFILE): Use STD_VTABLE.
-
-Tue Nov 11 01:40:17 1997 Oleg Krivosheev <kriol@fnal.gov>
-
- * iomanip.h: Fix guiding decls.
-
-1997-11-05 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * libio.h (__P): Name its arg `p' instead of `params'.
- Avoids problems with an unchanged Solaris math.h header.
-
-Wed Oct 29 23:01:47 1997 Jason Merrill <jason@yorick.cygnus.com>
-
- * gen-params: Override NULL.
-
-1997-10-27 03:53 Ulrich Drepper <drepper@cygnus.com>
-
- * stdio-lock.h: Removed. Was never needed.
-
-Wed Oct 22 19:19:32 1997 H.J. Lu (hjl@gnu.ai.mit.edu)
-
- * libio.h (_IO_LOCK_T): Handle glibc 2 when _IO_MTSAFE_IO is
- not defined.
-
- * iovsscanf.c (vsscanf): Make it weak alias of _IO_vsscanf if
- __linux__ is defined instead of __ELF__
-
- * config/linuxlibc1.mt (USER_INCLUDES): Add libio.h.
-
-1997-10-15 Ulrich Drepper <drepper@cygnus.com>
-
- * configure.in: Create compatibility code in bits/libc-lock.h file.
-
-Thu Oct 9 07:08:41 1997 H.J. Lu (hjl@gnu.ai.mit.edu)
-
- * libio.h (_IO_LOCK_T): Handle glibc 2 when _IO_MTSAFE_IO is
- not defined.
-
- * filedoalloc.c (_IO_file_doallocate): Don't call
- _IO_cleanup_registration_needed if __linux__ is defined.
-
- * iofclose.c (fclose): Make it weak alias of _IO_fclose if
- __ELF__ is defined.
-
- * iovsprintf.c (vsprintf): Make it weak alias of _IO_vsprintf
- if __ELF__ is defined.
-
- * iovsscanf.c (vsscanf): Make it weak alias of _IO_vsscanf if
- __ELF__ is defined.
-
- * config/linuxlibc1.mt (MT_CFLAGS): Defined as -D_G_HAVE_MMAP.
- (IO_OBJECTS): Add filedoalloc.o fileops.o genops.o iofclose.o
- iovsprintf.o iovsscanf.o strops.o.
-
-Fri Oct 3 10:13:13 1997 Jason Merrill <jason@yorick.cygnus.com>
-
- * iostream.cc, libio.h: Convert other uses of #ifdef
- _G_HAVE_PRINTF_FP to #if.
-
-1997-10-02 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * iostream.cc (operator<<): Use `#if _G_HAVE_PRINTF_FP', not ifdef.
-
-Thu Oct 2 10:36:49 1997 Jason Merrill <jason@yorick.cygnus.com>
-
- * gen-params: Fix __printf_fp test.
- * config/linuxlibc1.mt (gxx_includedir): Don't define.
-
-Thu Oct 2 10:36:26 1997 Ulrich Drepper <drepper@rtl.cygnus.com>
-
- * config/linuxlibc1.mt (_G_CONFIG_H): Don't define.
- * gen-params: Add test for __printf_fp.
-
-Sun Sep 28 12:09:04 1997 Mark Mitchell <mmitchell@usa.net>
-
- * iomanip.h: Use new friend <> syntax.
-
-Sun Sep 28 12:04:21 1997 Jason Merrill <jason@yorick.cygnus.com>
-
- * libio.h: Don't use _IO_LOCK_T if it's not defined.
-
-Fri Sep 26 20:56:41 1997
-
- Based on a patch by H.J. Lu (hjl@gnu.ai.mit.edu).
-
- * Makefile.in (STDIO_OBJECTS): New. Defined as stdfiles.o.
- (LIBIO_OBJECTS): Add $(STDIO_OBJECTS).
- (PICFLAG): New, empty. moved to here from config.shared.
-
- * config.shared (DISTCLEAN): Add target-mkfrag.
- (PICFLAG): Removed.
-
- * configure.in (*-linux-gnulibc1): Remove warning.
- (*-linux-gnu): Use linux.mt mtsafe.mt.
- (alpha-*-linux*): Use mh-elfalphapic.
-
- * gen-params (_G_ullong): Also check unsigned long long int.
- (_G_llong): Also check long long int.
-
- * libio.h (_IO_lock_t): Add support for the Linux libc 5.
- (_IO_peekc): Defined as _IO_peekc_unlocked if _IO_MTSAFE_IO
- is not defined.
-
- * iostream.cc (__cvt_double): Fix a typo in declaration.
- (info): Use expr != 0 to initialize the bit fields. Don't
- initialize "extra" for the Linux libc 5.
-
- * streambuf.h (_G_NEED_STDARG_H): Changed from _IO_NEED_STDARG_H.
-
- * config/linux.mt (STDIO_OBJECTS): New, empty.
- (MT_CFLAGS): Removed.
-
- * config/linuxlibc1.mt: Rewrite. it's identical to linux.mt but
- IO_OBJECTS mentions files not in early libc5 versions.
-
- * config/mtsafe.mt: New.
-
- * dbz/Makefile.in (check): Support make -j.
-
- * tests/tFile.cc (tempfile): Fix a typo.
-
-1997-09-19 11:52 Jim Wilson <wilson@cygnus.com>
-
- * Makefile.in (LIBIO_OBJECTS): Depend on _G_CONFIG_H.
-
-1997-09-17 04:08 Ulrich Drepper <drepper@cygnus.com>
-
- * iostream.cc: Add forward declaration for __cvt_double.
- * libio.h: Define _IO_USE_DTOA is _G_HAVE_PRINTF_FP is not defined.
- * strops.c (_IO_str_count): Correct last change.
-
-1997-09-17 02:50 Ulrich Drepper <drepper@cygnus.com>
-
- * libioP.h: Define __set_errno if not already defined.
-
-1997-09-15 02:37 Ulrich Drepper <drepper@cygnus.com>
-
- * config/linux.mt: Rewrite for use with glibc 2.
- * config/linuxlibc1.mt: Old content of linux.mt, fir libc4 and
- libc5.
-
- * config.shared (COMPILE.c): Allow new flags in MT_CFLAGS be
- passed.
- (COMPILE.cc): Likewise.
-
- * configure.in (*-linux*): Remove goal. We now have...
- (*-linux-gnulibc1): For libc4 and libc5. Emit warning.
- (*-linux-gnu)): For glibc 2.
- Create links to find headers for multi-threading if necessary.
-
- * fileops.c: Make thread-safe by using _IO_cleanup_region_start
- etc to handle cancelation. Acquire locks in functions which are
- called directly.
- (_IO_file_read, _IO_file_write): Remove dead code.
-
- * include/empty.h: Define stub macros for locking.
-
- * iolibio.h: Add prototypes for obstack printing functions.
-
- * ioseekoff.c (_IO_seekoff): Lock stream before working.
- * ioseekpos.c (_IO_seekpos): Likewise.
-
- * iostream.cc: Add support for long double I/O.
- Use __printf_fp from glibc is available.
- Use _IO_cleanup_region_start to handle cancelation correctly.
- * iostream.h (class ostream): Change opfx and osfx to lock/unlock
- stream
- (class istream): Likewise for ipfx, ipfx0, ipfx1, and isfx.
- Declare new function lock and unlock for ostream and istream.
- * osform.cc: Use _IO_cleanup_region_start to handle cancelation
- correctly.
-
- * libio.h: Update from glibc version. Pretty printing.
- * libioP.h: Likewise.
-
- * outfloat.c: Only compile if _IO_USE_DTOA is defined.
-
- * stdio/feof.c: Make thread safe.
- * stdio/ferror.c: Likewise.
- * stdio/getc.c : Likewise.
- * stdio/putc.c : Likewise.
- * stdio/stdio.h: Declare function of thread-safe API.
-
- * stdio/obprintf.c: New file.
- * stdio/vasprintf.c: New file.
-
- * stdio-lock.h: Removed.
-
- * stdstrbufs.c: Add definitions for thread-safe streams.
-
- * streambuf.cc: Initialize lock.
-
- * strops.c (_IO_str_count): Undo last change.
-
- * tests/tFile.cc: Support parallel builds by avoiding fixed
- name for test file.
-
-Thu Sep 11 18:43:56 1997 Jason Merrill <jason@yorick.cygnus.com>
-
- * Makefile.in (iostream.list): Remove STDIO_WRAP_OBJECTS.
-
-Mon Sep 8 01:30:27 1997 Weiwen Liu <liu@hepunix.physics.yale.edu>
-
- * libio.h: Fix typo.
-
-Sun Sep 7 23:00:18 1997 Jim Wilson (wilson@cygnus.com)
-
- * linux.mt (LIBIOSTREAM_DEP): Change stdio.list to stmp-stdio.
-
-Fri Sep 5 09:58:43 1997 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * Makefile.in (iostream.list): Instead of adding stdio.list, add
- STDIO_WRAP_OBJECTS.
- (iostream.list): Lose dependency on stmp-stdio, not necessary for
- our stuff. The stdio stuff is present here just for uniformity
- with glibc.
-
-Thu Sep 4 17:26:22 1997 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * parsestream.cc (general_parsebuf): Cast return of malloc to char*.
-
-1997-09-04 16:11 Ulrich Drepper <drepper@cygnus.com>
-
- Change compared to version initially intended to in:
- * strops.c (_IO_str_count): Still use _IO_write_ptr, not
- _IO_write_end, for now.
-
- * iofeof.c, ioferror.c, iofflush_u.c, iogetc.c, ioputc.c, peekc.c,
- stdio-lock.h: New files.
-
- * include: New dir.
- * include/empty.h: New header.
-
- * filedoalloc.c: Update and reformat copyright.
- Don't use DEFUN.
- Use __set_errno throughout the code to support multi-threaded
- programs.
- Correct layout to follow the Coding Standard.
- Add casts to prevent warnings.
- * fileops.c: Likewise.
- * genops.c: Likewise.
- * iofclose.c: Likewise.
- * iofdopen.c: Likewise.
- * iofflush.c: Likewise.
- * iofgetpos.c: Likewise.
- * iofgets.c: Likewise.
- * iofopen.c: Likewise.
- * iofprintf.c: Likewise.
- * iofputs.c: Likewise.
- * iofread.c: Likewise.
- * iofsetpos.c: Likewise.
- * ioftell.c: Likewise.
- * iofwrite.c: Likewise.
- * iogetdelim.c: Likewise.
- * iogetline.c: Likewise.
- * iogets.c: Likewise.
- * iopadn.c: Likewise.
- * iopopen.c: Likewise.
- * ioputs.c: Likewise.
- * ioseekoff.c: Likewise.
- * iosetbuffer.c: Likewise.
- * iosetvbuf.c: Likewise.
- * iosprintf.c: Likewise.
- * ioungetc.c: Likewise.
- * iovsprintf.c: Likewise.
- * iovsscanf.c: Likewise.
- * libio.h: Likewise.
- * libioP.h: Likewise.
- * stdfiles.c: Likewise.
- * strfile.h: Likewise.
- * strops.c: Likewise.
-
- * Makefile.in (IO_OBJECTS): Add peekc.o, iogetc.o, ioputc.o,
- iofeof.o, and ioferror.o.
- (iostream.list): Depend upon stmp-stdio. Add the entries
- from stdio.list to iostream.list.
- (stmp-stdio): New name for what was the stdio/stdio.list rule.
- All it now does is cd down into stdio and build stdio.list.
-
- * configure.in (ALL): Add libiostream.a.
-
- * libio.h [_IO_MTSFE_IO]: Include header declaring locking code.
- Otherwise define opaque _IO_lock_t.
- Define _IO_cookie_file.
- Rename _IO_getc to _IO_getc_unlocked, _IO_peekc to _IO_peekc_unlocked,
- _IO_putc to _IO_putc_unlocked, _IO_feof to _IO_feof_unclocked, and
- _IO_ferror to _IO_ferror_unlocked.
- Add prototypes for _IO_getc, _IO_putc, _IO_feof, _IO_ferror,
- and _IO_peekc_locked.
- Add declarations for _IO_flockfile, _IO_funlockfile, and
- _IO_ftrylockfile. If !_IO_MTSAFE_IO define _IO_flockfile,
- _IO_funlockfile, _IO_ftrylockfile, _IO_cleanup_region_start, and
- _IO_cleanup_region_end as empty macros.
-
- * libioP.h: Change type of finish function to take an additional int
- argument and change declaration of finish functions.
- Add prototypes for _IO_seekoff and _IO_seekpos.
- If _G_HAVE_MMAP is defined use stream buffers allocated with mmap.
- Redefine FREE_BUF and ALLOC_BUF macros to help in both situations.
- (FILEBUF_LITERAL): If we compile for a thread-safe library also
- initialize lock member.
-
- * filedoalloc.c: Take care for systems already defining _POSIX_SOURCE.
- Keep name space clean on systems which require this.
- (_IO_file_doallocate): Adopt ALLOC_BUF call for changed semantic.
-
- * fileops.c: Keep name space clean on systems which require this.
- (_IO_file_attach): Don't fail if seek failed because it's used on a
- pipe.
- (_IO_file_underflow): Update buffer pointers before calling `read'
- since the `read' might not return anymore.
- (_IO_file_overflow): If stream allows no writes set error flag.
- (_IO_seekoff): Make sure that after flushing the file pointer in
- the underlying file is exact.
- (_IO_file_read): Don't restart `read' syscall if it return EINTR.
- This violates POSIX.
- (_IO_file_write): Likewise for `write'.
- (_IO_cleanup): Install as exit handler in glibc.
-
- * genops.c (_IO_setb): Correctly use FREE_BUF.
- (_IO_default_doallocate): Correctly use ALLOC_BUF.
- (_IO_init): Initialize lock in stream structure.
- (_IO_default_finish): Destroy lock.
- (_IO_get_column): Don't compile since it's not needed.
- (_IO_nobackup_default): Likewise.
-
- * iopopen.c: Take care for systems already defining _POSIX_SOURCE.
- Correct _IO_fork and _IO_dup2 prototypes.
-
- * iofclose.c: Acquire lock before starting the work.
- * iofflush.c: Likewise.
- * iofgetpos.c: Likewise.
- * iofgets.c: Likewise.
- * iofputs.c: Likewise.
- * iofread.c: Likewise.
- * iofsetpos.c: Likewise.
- * ioftell.c: Likewise.
- * iofwrite.c: Likewise.
- * iogetdelim.c: Likewise.
- * iogets.c: Likewise.
- * ioputs.c: Likewise.
- * iosetbuffer.c: Likewise.
- * iosetvbuf.c: Likewise.
- * ioungetc.c: Likewise.
-
- * iofdopen.c: Create and initialize lock for new stream.
- * iofopen.c: Likewise.
- * iopopen.c (_IO_popen): Likewise.
- * iovsprintf.c: Likewise.
- * iovsscanf.c: Likewise.
-
- * genops.c: Make weak aliases for various functions.
- * iofclose.c: Likewise.
- * iofdopen.c: Likewise.
- * iofflush.c: Likewise.
- * iofgetpos.c: Likewise.
- * iofgets.c: Likewise.
- * iofopen.c: Likewise.
- * iofputs.c: Likewise.
- * iofread.c: Likewise.
- * iofsetpos.c: Likewise.
- * ioftell.c: Likewise.
- * iofwrite.c: Likewise.
- * iogetdelim.c: Likewise.
- * iogets.c: Likewise.
- * ioputs.c: Likewise.
- * iosetbuffer.c: Likewise.
- * iosetvbuf.c: Likewise.
- * ioungetc.c: Likewise.
- * iovsprintf.c: Likewise.
- * iovsscanf.c: Likewise.
-
- * iofflush_u.c: New file. fflush_unlocked implementation.
-
- * iostream.h [_G_HAVE_LONG_DOUBLE_IO]: Declare real long double
- output operator.
-
- * peekc.c: New file. Implement _IO_peekc_locked function.
-
- * stdfiles.c: If we compile for a thread-safe library also define
- lock variable.
-
-Tue Aug 26 12:24:01 1997 H.J. Lu (hjl@gnu.ai.mit.edu)
-
- * testsuite/Makefile.in (check): Don't depend on site.exp.
- (just-check): Depend on site.exp.
-
-Wed Aug 20 02:01:34 1997 Jason Merrill <jason@yorick.cygnus.com>
-
- * iostream.h: Add copy assignment ops for _IO_?stream_withassign.
-
-Tue Jul 22 10:31:41 1997 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * config.shared (CHECK_SUBDIRS): Use install-sh, not install.sh.
-
-Wed Jun 25 12:20:55 1997 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * config.shared (DOING_GPERF): Look for this, defining TOLIBGXX
- and LIBS for it.
-
-Wed Jun 18 11:03:34 1997 Bob Manson <manson@charmed.cygnus.com>
-
- * config.shared (FLAGS_TO_PASS): Don't include RUNTEST.
-
-Tue Jun 17 22:23:48 1997 Bob Manson <manson@charmed.cygnus.com>
-
- * config.shared (FLAGS_TO_PASS): Pass RUNTEST and RUNTESTFLAGS.
-
-Fri May 16 21:08:53 1997 Bob Manson <manson@charmed.cygnus.com>
-
- * iovfprintf.c: Declare __cvt_double before use.
-
- * floatconv.c (d2b): Use _G_int32_t instead of int for the
- e and bits parameters.
- (_IO_strtod): Use _G_int32_t.
-
- * gen-params: Look for NO_USE_DTOA and USE_INT32_FLAGS.
-
- * strops.c (_IO_str_init_static): use _G_int32_t appropriately.
-
- * libio.h: If _G_NO_USE_DTOA is set, then don't define
- _IO_USE_DTOA.
-
- * config/mn10200.mt: Don't use dtoa, it only works
- for "real" doubles.
-
-Thu May 15 17:44:12 1997 Bob Manson <manson@charmed.cygnus.com>
-
- * configure.in: Set CHECK_SUBDIRS to testsuite if we're doing
- a cross compile.
-
- * config.shared(check): Only run make check in the directories
- specified by CHECK_SUBDIRS. Set CHECK_SUBDIRS to SUBDIRS
- if it has no previous value.
-
-Thu May 1 17:35:19 1997 Jason Merrill <jason@yorick.cygnus.com>
-
- * Makefile.in (test, tpipe): Add $(CFLAGS).
-
-Wed Apr 30 12:16:29 1997 Jason Merrill <jason@yorick.cygnus.com>
-
- * configure.in: Don't turn on multilib here.
-
-Sat Apr 26 13:38:21 1997 Bob Manson <manson@charmed.cygnus.com>
-
- * configure.in (configdirs): Add testsuite directory.
-
- * testsuite/ChangeLog:
- * testsuite/Makefile.in:
- * testsuite/libio.tests/tiomanip.exp:
- * testsuite/libio.tests/tstdiomisc.exp:
- * testsuite/libio.tests/tiomisc.exp:
- * testsuite/libio.tests/tFile.exp:
- * testsuite/libio.tests/tfformat.exp:
- * testsuite/libio.tests/tiformat.exp:
- * testsuite/libio.tests/hounddog.exp:
- * testsuite/libio.tests/putbackdog.exp:
- * testsuite/configure.in:
- * testsuite/lib/libio.exp:
- * testsuite/config/default.exp:
- New files for DejaGnu-style testsuite.
-
-Fri Apr 4 03:16:44 1997 Ulrich Drepper <drepepr@cygnus.com>
-
- * configure.in: Enable multilibing by default.
- Update multilib template to read config-ml.in.
-
- * floatconv.c: Enable use in cross targets which use the
- newlib ieeefp.h header.
-
-Thu Jan 23 09:16:16 1997 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * libioP.h (_IO_file_attach): Delete redundant decl.
-
-Tue Jan 21 22:13:45 1997 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * streambuf.h (class ios): Take out STREAMSIZE member, since we
- only need (and should only have) the global one.
-
-Tue Jan 7 14:02:40 1997 Jason Merrill <jason@yorick.cygnus.com>
-
- * iostream.h (long long fns): Use __extension__.
-
- * gen-params: Use _G_llong and _G_ullong instead of long long for
- deduced types.
-
-Fri Dec 6 13:13:30 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * dbz/dbz.c: Use off_t.
-
-Sat Nov 23 15:44:37 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * Makefile.in (install): Don't install _G_config.h with other headers.
-
-Mon Nov 18 17:12:41 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * config.shared (SUBDIRS): Use -O instead of -O3 for debugging.
-
-Sun Nov 3 12:43:34 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * iostream.cc (write_int): Treat string literals as const.
-
-Thu Sep 26 10:09:18 1996 Michael Meissner <meissner@tiktok.cygnus.com>
-
- * depend: Regenerate.
-
-Wed Sep 25 22:54:45 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * config.shared (depend.new): Deal with headers that don't end in .h.
-
-Thu Aug 29 17:05:53 1996 Michael Meissner <meissner@tiktok.cygnus.com>
-
- * configure.in (i[345]86-*-*): Recognize i686 for pentium pro.
-
-Mon Aug 5 01:26:32 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * config{ure.in,.shared} (DISTCLEAN): Add multilib.out.
-
-Fri Aug 2 17:39:35 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * libio.h (NULL): Use __null.
- * libioP.h (NULL): Ditto.
- * streambuf.h (NULL): Ditto.
- * ioextend.cc (get_array_element): Use NULL instead of (void*)0.
-
-Fri Jul 5 18:26:41 1996 Jim Wilson <wilson@cygnus.com>
-
- * strfile.h (struct _IO_streambuf): New struct type.
- (struct _IO_strfile): Use it.
-
-Tue Jun 18 18:24:21 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * fstream.h (fstreambase): Make __my_fb mutable.
- From Joe Buck.
-
-Tue Jun 18 11:03:53 1996 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * dbz/fake.c (main): Set return type to int.
- * dbz/dbzmain.c (main): Likewise.
- * dbz/byteflip.c (main): Likewise.
-
-Mon Jun 17 14:05:36 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * gen-params: Check if clog conflicts with system libraries.
- * stdstreams.cc: If it does, use __IO_clog.
- * iostream.h: Likewise.
-
-Tue Jun 11 13:39:31 1996 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * stdiostream.h (istdiostream (FILE*)): Put istream base
- initializer before init for __f.
- (ostdiostream (FILE*)): Likewise for ostream base init.
-
-Tue May 14 11:47:21 1996 Per Bothner <bothner@andros.cygnus.com>
-
- * strfile.h (_IO_str_fields): Removed _len field.
- (_IO_STR_DYNAMIC, _IO_STR_FROZEN): new macros.
- * strstream.h (strstreambuf::is_static): Removed.
- (strstreambuf::frozen): Use _IO_STR_DYNAMIC instead of is_static.
- * strstream.h, strstream.cc: Remove support for !_IO_NEW_STREAMS.
- * strstream.cc (strstreambuf::init_dynamic): Don't set _s._len.
- * strops.c (_IO_str_init_static): Better handling of the
- negative (== unbounded) size case.
- (_IO_str_overflow, _IO_str_underflow, _IO_str_count): Re-write
- to not use _s._len, and otherwise cleanup/fix.
- * strstream.h, strstream.cc (strstreambase::strstreambase()): Call
- ios::init here.
- (other constructors): Simplify - init already called.
-
-Tue May 14 10:55:21 1996 Per Bothner <bothner@deneb.cygnus.com>
-
- Change so that strstreambuf default constructor does no allocation.
- * strstream.h (strstreambuf::init_dynamic): Default initial size = 0.
- * strstream.cc (strstreambuf::init_dynamic): Don't allocate a
- buffer (yet) if initial_size is 0.
- * strops.c (_IO_str_overflow): Add 100 to size of re-allocated
- buffer, to handle case when initial size is 0.
-
- * iostdio.h (remove, rename, tmpfile, tempnam): Comment out.
-
-Mon May 13 23:19:39 1996 Per Bothner <bothner@deneb.cygnus.com>
-
- * fileops.c (_IO_file_close_it): Just call _IO_do_flush rather
- than _IO_file_sync, to avoid useless lseek.
-
-Tue May 14 10:48:48 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * floatconv.c (_IO_strtod): Force rv into the stack.
-
- * config.shared (gxx_includedir): Now $(includedir)/g++.
-
-Sat Apr 27 02:37:49 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * libioP.h (JUMP*): Implement for thunks.
- (_IO_jump_t): Add second dummy field for thunks.
-
-Thu Apr 25 13:20:00 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * config.shared (CXX): Use gcc, not g++.
-
-Wed Apr 24 10:29:50 1996 Doug Evans <dje@blues.cygnus.com>
-
- * config.shared (depend.new): Delete $(srcdir)/ from foo.{c,cc}
- for SunOS VPATH.
- * depend: Regenerated.
-
-Fri Apr 19 17:24:51 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * Version 2.8.0b3.
-
-Wed Apr 10 17:16:01 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * configure.in (ALL): Don't build iostream.a.
-
-Mon Apr 8 14:44:11 1996 Per Bothner <bothner@kalessin.cygnus.com>
-
- * iosetvbuf.c (_IO_setvbuf): Clear _IO_UNBUFFERED unless _IONBF.
-
-Mon Apr 8 15:08:23 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * configure.in: Permit --enable-shared to specify a list of
- directories.
-
-Fri Apr 5 17:48:56 1996 Per Bothner <bothner@kalessin.cygnus.com>
-
- * config.shared (MOSTLYCLEAN): Also remove ${EXTRA_MOSTLYCLEAN}.
-
-Fri Mar 22 23:25:00 1996 Ulrich Drepper <drepepr@gnu.ai.mit.edu>
-
- * genops.c (_IO_sputbackc, _IO_sungetc): Clear EOF flag if putsh
- back was successful.
-
-Wed Mar 27 11:54:08 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * Version 2.8.0b2.
-
-Fri Mar 22 15:39:36 1996 Per Bothner <bothner@kalessin.cygnus.com>
-
- * fileops.c (_IO_do_write): Revert previous fix. (It fails to
- handle the case that fp->_IO_read_end != fp->_IO_write_base.)
- (_IO_file_overflow): Instead, if _IO_read_ptr is at the end of
- the buffer, reset all the read pointers to _IO_buf_base.
-
-Tue Mar 12 12:03:17 1996 Per Bothner <bothner@kalessin.cygnus.com>
-
- * fileops.c (_IO_do_write): Even if to_do==0, must re-set buffer
- pointers. Bug and solution from Luke Blanshard <luke@cs.wisc.edu>.
-
-Wed Feb 28 10:00:24 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * Version 2.8.0b1.
-
-Tue Feb 27 18:08:16 1996 Per Bothner <bothner@kalessin.cygnus.com>
-
- * iopopen.c (_IO_proc_open): Use (char*)0 rather than imprecise NULL.
-
- * streambuf.h (ios): Add ios::binary; deprecate ios::bin.
- * filebuf.cc (filebuf::open): Handle ios::binary.
-
-Fri Feb 9 12:40:19 1996 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * cleanup.c (_IO_cleanup_registration_needed) [!_G_HAVE_ATEXIT]: Init
- to NULL.
- * filedoalloc.c (_IO_cleanup_registration_needed): Remove decl.
-
-Thu Feb 8 08:12:50 1996 Brendan Kehoe <brendan@cygnus.com>
-
- * filedoalloc.c (_IO_cleanup_registration_needed): Revert previous
- change, since cleanup.c only defines it if _G_HAVE_ATEXIT.
-
-Wed Feb 7 15:10:17 1996 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * filedoalloc.c (_IO_cleanup_registration_needed): Declare as extern.
-
-Tue Dec 12 17:21:13 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * indstream.h, instream.cc (indirectbuf::uflow): New method.
- * indstream.cc (indirectbuf::underflow): Fix to use sgetc, not sbumpc.
- Fixes bug reported by Kevin Beyer <beyer@cs.wisc.edu>.
-
- * indstream.cc (indirectbuf::seekpos): Add paranoia test.
-
-Fri Dec 8 14:55:34 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * stream.h: Add warning to not use these functions.
- * stream.cc (str, chr): Re-implement here (from libg++).
-
-Tue Nov 28 15:07:01 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * config.shared: Use test instead of [ to avoid DEC Unix lossage.
-
-Thu Nov 23 14:51:43 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * iopopen.c: Move #include <sys/types.h> ahead of #include <signal.h>
- to deal with BSDI's literal implementation of Posix.
-
-Sat Nov 25 11:21:55 1995 Doug Evans <dje@canuck.cygnus.com>
-
- * Makefile.in (install): Set rootme.
- * config.shared (TOPDIR): Set with ${foo-...} rather than ${foo=...}.
- (INSTALL): Handle absolute, dot, relative-not-dot values of srcdir.
- (TEXIDIR): Likewise.
-
-Tue Nov 21 14:12:05 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * configure.in: Check ${with_cross_host} rather than comparing
- ${host} and ${target}.
-
-Mon Nov 20 13:55:29 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * configure.in: Match *-sco3.2v[45]*.
-
-Wed Nov 15 20:19:31 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * config.shared (FLAGS_TO_PASS): Also pass SHLIB and SHCURSES.
-
-Tue Nov 14 01:41:08 1995 Doug Evans <dje@canuck.cygnus.com>
-
- * config.shared (TO_REAL_TOPDIR): Define.
- (MULTITOP): Deleted.
- (MULTISRCTOP, MULTIBUILDTOP): New.
- (TOPDIR): Change MULTITOP to MULTIBUILDTOP, and use TO_REAL_TOPDIR.
- (INSTALL): Add with_multisrctop, TO_REAL_TOPDIR.
- (TEXIDIR): Use TO_REAL_TOPDIR.
- (LIBS): Delete MULTITOP.
- (FLAGS_TO_PASS): Add NM.
- (CXXINCLUDES): Delete MULTITOP.
- (depend.new): Delete adding MULTITOP to ../ build tree references.
- Add MULTISRCTOP to ../ source tree references.
- * configure.in: Delete call to cfg-ml-com.in. Call config-ml.in
- instead of cfg-ml-pos.in.
-
-Sun Nov 12 16:30:48 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * Makefile.in (VERSION): Set to 2.7.1.
- * configure.in: Add warning for Linux.
- * config.shared (DISTCLEAN): Add EXTRA_DISTCLEAN.
-
- * editbuf.h (edit_mark::index_in_buffer): Avoid unused param warning.
-
- * iostream.cc (istream::operator>> (char*)): Improve ANSI compliance.
-
-Fri Nov 10 08:41:37 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * config.shared (check): Add missing semicolon.
-
-Thu Nov 9 17:27:22 1995 Jason Merrill <jason@yorick.cygnus.com>
-
- * configure.in (ALL): Remove $(OSPRIM_OBJECTS).
- * config.shared (check): Set LD_LIBRARY_PATH.
- * NEWS: Fix typo.
- * iogetdelim.c (_IO_getdelim): Index *lineptr, rather than lineptr.
- From alan@spri.levels.unisa.edu.au (Alan Modra).
-
-Mon Nov 6 15:03:33 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * streambuf.cc, editbuf.cc, isgetline.cc, parsestream.cc:
- Fixes to avoid -Wall warnings.
-
-Fri Nov 3 16:41:41 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * gen-params [!__STDC__]: Include varargs.h instead of stdarg.h.
-
-Thu Nov 2 15:04:03 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * config.shared: Re-write if X then Y else true fi to (not X) || Y.
-
-Wed Nov 1 13:26:44 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * iostream.h (istream::ipfx): Add default argument value.
- Reported by Yotam Medini <yotam_medini@tmai.com>.
-
- * libioP.h (_IO_blen): Fix typo.
- Reported by Bryan T. Vold <btv@ldl.healthpartners.com>.
-
-Fri Oct 27 19:26:20 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * Makefile.in (_G_config.h): Set CC to $(CC) rather than to $(CXX),
- now that CXX defaults to g++ and CC default to gcc (when found).
- * config.shared: Simplify CXX and CC, since they get overridden
- by ../configure anyway.
-
-Wed Oct 25 19:45:50 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * iostdio.h: Wrap including the file with #ifndef _IOSTDIO_H.
-
-Wed Oct 25 11:14:25 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * libio.h (_IO_seekoff, _IO_seekpos): New declarations.
- * libioP.h (_IO_seekoff, _IO_seekpos): Remove declarations.
- * libioP.h: Cleanup; remove old !_IO_UNIFIED_JUMPTABLES stuff.
-
- * filebuf.cc (filebuf::~filebuf): Only call SYSYCLOSE if currently
- open. Bug found by Martin Gerbershagen <ger@ezis-ulm.de>.
-
- * streambuf.h (streambuf::pubseekoff, streambuf::pubseekpos):
- Added, from ANSI draft.
- * filebuf.cc (filebuf::open), iostream.cc (variables places), SFile.cc:
- Use pubseekoff/pubseekpos rather than sseekoff/sseekpos.
-
- * Makefile.in (install): Don't install libiostream.a.
-
- * filedoalloc.c: Also #include <unistd.h>.
-
-Mon Oct 9 18:09:54 1995 Jason Molenda <crash@phydeaux.cygnus.com>
-
- * config.shared (SUFFIXES): add .c.
-
-Tue Sep 26 16:08:01 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * procbuf.cc: Move #pragma implementation to beginning.
-
-Wed Sep 20 17:53:33 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * procbuf.h, procbuf.cc: Add #pragma interface/implementation stuff.
-
-Wed Sep 20 18:59:00 1995 John Eaton <jwe@bevo.che.wisc.edu>
-
- * procbuf.h: Protect from being included multiple times.
-
-Wed Sep 20 15:47:14 1995 John Eaton <jwe@bevo.che.wisc.edu>
-
- * procbuf.h (procbuf): Add '_next' pointer field for compatibility
- with _IO_proc_file.
-
-Wed Sep 20 13:54:02 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * config.shared: Add support for maintainer-clean target as a
- synonym for realclean.
- * dbz/Makefile.in: Likewise.
-
-Mon Sep 11 12:11:19 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * iopopen.c: #include <sys/types.h> before <sys/wait.h>.
- This is in accordance with Posix, and needed for ISC.
-
-Fri Sep 8 00:11:55 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * gen-params: Use double quotes in the eval setting $TYPE to
- $VALUE, to preserve any single quotes in $VALUE.
-
-Mon Aug 21 11:39:09 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * gen-params: Test for an appropriate version of gcc before using
- mode attributes.
-
- * config.shared: Add $(PICDIR) to $ALL.
-
-Mon Aug 7 17:51:40 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * gen-params: Generate new macro _G_HAVE_SYS_CDEFS.
- * libio.h: If _G_HAVE_SYS_CDEFS, get __P from <sys/cdefs.h>.
-
-Fri Aug 4 23:21:17 1995 Paul Eggert <eggert@twinsun.com>
-
- * gen-params: When following typedef changes, allow typedefs
- that do not have a space before the defined type name,
- e.g. `typedef void *__gnuc_va_list;' as in Linux. Also,
- not require a space in the definiens, e.g. `typedef void*foo;'.
-
-Thu Aug 3 17:54:15 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * iostream.h, iostream.cc (istream::sync): Added missing method.
-
-Thu Aug 3 17:49:34 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * configure.in: Remove netbsd special case.
- * config/netbsd.mt: Removed; no longer used.
-
-Tue Jun 20 16:07:12 1995 Paul Eggert <eggert@twinsun.com>
-
- * gen-params: Take transitive closure of `typedef' relation.
- This is needed for BSD/OS 2.0, which has
- fpos_t -> off_t -> quad_t -> long long.
-
-Mon Jul 24 18:28:10 1995 Doug Evans <dje@canuck.cygnus.com>
-
- * config.shared (TOPDIR): Delete extra '/', $rootme may be empty.
-
-Sat Jul 22 13:27:45 1995 Doug Evans <dje@canuck.cygnus.com>
-
- * config.shared (depend.new): Fix quoting in DO NOT EDIT line.
-
- * Makefile.in (_G_config.h): Add multilib support.
- (install): Likewise.
- * config.shared: Likewise.
- * configure.in: Likewise.
-
-Wed Jun 28 17:40:25 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * PlotFile.h, SFile.h, builtinbuf.h, editbuf.h, fstream.h,
- indstream.h, iomanip.h, iostream.h, parsestream.h, pfstream.h,
- procbuf.h, stdiostream.h, stream.h, streambuf.h, strstream.h: Wrap
- with extern "C++".
-
-Thu Jun 22 04:34:01 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * gen-params: Surround attributes with __.
-
-Mon Jun 19 00:33:22 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * config.shared (SUBDIRS): Massage broken shells that require
- 'else true'.
-
-Sat Jun 17 11:25:38 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * streambuf.h: Declare inline members inline in class.
-
-Thu Jun 15 20:45:13 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * Makefile.in (VERSION): Update to version 2.7.0.
-
-Wed Jun 14 21:41:11 1995 Jason Merrill <jason@python.cygnus.com>
-
- * Makefile.in (STDIO_WRAP_OBJECTS): Remove stdfiles.o.
- (LIBIO_OBJECTS): Add stdfiles.o.
-
-Wed Jun 7 16:11:36 1995 Jason Merrill <jason@python.cygnus.com>
-
- * config.shared (all): Appease bash.
-
-Wed Jun 7 11:16:38 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * configure.in (MOSTLYCLEAN): Remove stamp-picdir.
-
- * config.shared (MOSTLYCLEAN): Ditto.
- (CLEAN): Don't.
-
-Mon Jun 5 18:29:39 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * config/mh-*pic: Removed.
-
- * configure.in (MOSTLYCLEAN): Remove pic objects.
- (frags): Use toplevel pic fragments.
-
- * config.shared (CXXFLAGS): Use -O3.
- (PICFLAG, PICDIR): New macros.
- (all): Depend on $(PICDIR).
- (FLAGS_TO_PASS): Pass PICFLAG.
- (.x.o): Also build pic object.
- (stamp-picdir): Create directory for pic objects.
- (MOSTLYCLEAN): Remove pic objects.
- (CLEAN): Remove stamp-picdir.
-
- * Makefile.in (iostream.list): Depend on stamp-picdir.
- (c++clean): Don't remove _G_config.h.
-
-Mon Jun 5 15:03:47 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * strstream.h, strstream.cc (strstream::strstream()): Re-implement to
- be like ostrstream::ostrestream(), and not leak memory.
-
- * streambuf.h: Use #if !_IO_UNIFIED_JUMPTABLES instead of #ifndef.
-
- * iolibio.h (_IO_rewind): Add missing flags when calling _IO_seekoff.
-
-Thu May 25 22:30:21 1995 J.T. Conklin <jtc@rtl.cygnus.com>
-
- * config/netbsd.mt (G_CONFIG_ARGS): Add defn for off_t. Another
- layer of typedefs has been added and the gen-params script can
- not handle it.
-
-Wed May 10 03:02:58 1995 Jason Merrill <jason@python.cygnus.com>
-
- * iolibio.h (_IO_rewind): Add new argument to _IO_seekoff.
-
- * config/linux.mt (LIBIOSTREAM_OBJECTS): Include $(STDIO_WRAP_OBJECTS).
- (LIBIOSTREAM_DEP): Include stdio.list.
- (LIBIOSTREAM_USE): Include `cat stdio.list`.
-
- * Makefile.in (LIBIOSTREAM_DEP): New variable.
- (LIBIOSTREAM_USE): Ditto.
- (libiostream.a): Use them.
- (iostream.list): Ditto.
- (stdio.list): New rule.
- (stdio/stdio.list): Ditto.
-
-Tue May 9 18:29:38 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * libioP.h (_IO_jump_t): Change TYPE for __dummy from int to
- _G_size_t.
-
-Sat May 6 13:50:37 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * libio.h (_IO_UNIFIED_JUMPTABLES): #define as true.
- (_IO_FILE): Remove _jumps field (#if _IO_UNIFIED_JUMPTABLES).
-
- * libioP.h (enum _IO_seekflags_): Removed.
-
- * libioP.h (_IO_setbuf_t): Change return value of setpos jumptable
- function to match C++ streambuf::setpos. (Return NULL on failure.)
- * fileops.c (_IO_file_setbuf), genops.c (_IO_default_setbuf),
- filebuf.cc, iosetvbuf.c: Update to use new setbuf conventions.
-
- * streambuf.h (streambuf): Re-order virtual functions more logically.
- * streambuf.cc (streambuf::uflow), streambuf.h: New virtual.
- * libioP.h (struct _IO_jump_t): Define using new JUMP_FIELD macro.
- And re-order in more logical order consistent with streambuf vtable.
- * fileops.c (_IO_file_jumps), iopopen.c (_IO_proc_jumps), iovfprintf.c
- (_IO_helper_jumps), streambuf.cc (_IO_streambuf_jumps), strops.c
- (_IO_str_jumps): Update accordingly, using JUMP_INIT macro.
- * stdfiles.c: Set vtable to point to _IO_file_jumps.
- * filebuf.cc, iopopen.c, iovfprintf.c (helper_vfprintf), iovsprintf.c,
- iovsscanf.c: Use macros and #if to set jumptables.
-
- * streambuf.c: _IO_streambuf_jumps and the _IO_sb_* methods are not
- needed #if _IO_UNIFIED_JUMPTABLES.
- * filebuf.cc (filebuf::__new): Also no longer needed.
- * fstream.cc (fstreambase::__fb_init, fstreambase::fstreambase): Fix.
- * stdstrbufs.c: Use filebuf vtable instead of builtinbuf's.
- * builtinbuf.h, builtinbuf.cc (builtinbuf): Commented out #if
- _IO_UNIFIED_JUMPTABLES - no longer needed.
- * strstream.cc (SET_STR_JUMPS): Does nothing now.
-
- * builtinbuf.cc, fileops.c, genops.c, iofgetpos.c, iofsetpos.c,
- ioftell.c, iopopen.c, ioseekoff.c, ioseekpos.c, iosetvbuf.c,
- iovfprintf.c, iovfscanf.c, strops.c: Use DEFUN and DEFUN_VOID.
- * filebuf.cc, fileops.c, genops.c, iopopen.c, ioseekoff.c, ioseekpos.c,
- iosetvbuf.c, iovfscanf.c: Use new JUMP_* and IO_OVERFLOW/... macros.
-
- * libioP.h (_IO_seekpos_t): Third arg is now an int (using _IOS_INPUT
- and _IOS_OUTPUT), not an enum _IO_seekflags_. Flags values are
- changed, and their sense inverted (to match streambuf::seekpos).
- * libioP.h (_IO_seekoff_t): Similarly match streambuf::seekoff.
- * filebuf.cc, fileops.c (_IO_file_fopen, _IO_file_seekoff), genops.c
- (_IO_default_seekpos, _IO_default_seekpos), iofgetpos.c, iofsetpos.c,
- iolibio.h (_IO_fseek), ioftell.c, ioseekoff.c, ioseekpos.c,
- iostream.cc, streambuf.cc, strops.c (_IO_str_seekoff), strstream.cc:
- New seekpos/seekoff conventions.
- * iostreamP.h (convert_to_seekflags): Removed - no longer needed.
-
- * iolibio.h (_IO_fread): New declaration.
-
- * dbz/Makefile.in: Re-arrange for cleaner dependencies.
-
-Fri May 5 15:55:22 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * libioP.h (_IO_JUMPS. JUMP_FIELD, JUMP0, JUMP1, JUMP2, JUMP3,
- JUMP_INIT, _IO_FINISH, _IO_OVERFLOW, ... _IO_SYSSTAT): New macros
- in preparation for new unified jumptable/vtable implementation.
- * cleanup.c, filedoalloc.c, iofclose.c, iofflush.c, iofiledoalloc.c,
- ioprims.c, iosetbuffer.c, iostrerror.c, ioungetc.c: Use DEFUN.
- * filedoalloc.c, iofclose, iofflush, iosetbuffer.c: Use new macros.
-
- * iofopen.c, iofdopen.c: Use macros and #if for new jumptables.
-
- * gen-params: Do not #include <sys/types.h>.
- Add missing quote in 'eval'.
- Do add #include <sys/types.h> in test for <sys/resource.h>.
- * config/netbsd.mt: New file, defining _G_CONFIG_ARGS (for fpos_t).
- * configure.in: Use netbsd.mt for NetBSD.
-
-Wed May 3 15:03:47 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * libioP.h (DEFUN, DEFUN_VOID, AND): New macros, from ansidecl.h.
- * iofdopen.c, iofgets.c, iofopen.c, iofputs.c, iofread.c, iofwrite.c,
- iogetdelim.c, iogetline.c, iogets.c, ioignore.c, iopadn.c, ioperror.c,
- ioputs.c, iovsprintf.c, iovsscanf.c, outfloat.c: Use DEFUN.
-
-Mon May 1 16:22:30 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * gen-params: #include <sys/types.h>. Don't use __WCHAR_TYPE__ in
- definition of _G_wchar_t. Use __attribute__ ((mode)) to get
- specific-sized ints under gcc, don't worry about int8 or int64
- otherwise. Provide defaults if deduction fails.
-
-Thu Apr 27 18:27:53 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * streambuf.h (ios::~ios): Delete _arrays.
- (_IO_NEW_STREAMS): Turn on.
- * libio.h (__adjust_column): Remove bogus declaration.
- * genops.c (_IO_set_column): Fix typo (in commented-out code).
-
-Tue Apr 25 17:14:29 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * config.shared (CXXINCLUDES): Use a shell variable with a
- different name from the make variable.
- * configure.in: Update accordingly.
-
-Mon Apr 17 17:19:40 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * streambuf.h (__adjust_column): Remove redundant declaration.
-
-Sat Apr 15 11:39:25 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * config.shared (do-clean-dvi): Also remove *.cps.
-
- * gen-params: Use ${SED} instead of sed.
-
- * libio.h: Remove #if'd out stuff (confuses makedepend).
-
- * stdstreams.cc (STD_STR): Standard streams start with ios::dec set.
-
-Fri Apr 14 23:46:31 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * iostream.h, iostream.cc (istream::read, ostream::write):
- Use streamsize for the length parameter.
-
- * streambuf.h: Removed redundant __overflow and __underflow.
-
- * fstream.h, fstream.cc: Add void fstreambase::attach(int).
-
- * iosscanf.c (_IO_sscanf): Fix non-__STDC__ missing declaration.
-
-Mon Apr 3 15:40:55 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * indstream.*: Fix prototypes of xsputn and xsgetn.
-
- * fileops.c: Avoid ??? trigraph.
-
-Mon Mar 27 16:16:38 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * iomanip.h (operator<< (ostream&, const omanip<TP>&): Define
- separately.
- (operator>> (istream&, const imanip<TP>&): Ditto.
-
-Mon Mar 27 08:56:00 1995 Brendan Kehoe (brendan@lisa.cygnus.com)
-
- * builtinbuf.cc (builtinbuf::setbuf): Cast NULL to streambuf*, to
- avoid warning/error about conversion from void*.
- * indstream.cc (indirectbuf::seekoff): Likewise.
- (indirectbuf::seekpos): Likewise.
- * filebuf.cc (filebuf::setbuf): Likewise.
- (filebuf::close): Cast NULL to filebuf*.
-
-Wed Mar 1 14:23:18 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * configure.in (DISTCLEAN): Add, with target-mkfrag.
-
-Fri Feb 24 01:01:08 1995 Jason Merrill <jason@python.cygnus.com>
-
- * configure.in (frags): Don't require so many dashes in the
- canonical target name.
-
-Sat Feb 18 13:18:30 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * streambuf.cc (streambuf::sync): Always return 0, even for
- non-flushed output. This is required by the ANSI/ISO draft.
- * genops.c (_IO_sync): Likewise always return 0.
-
-Fri Feb 17 16:33:28 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * fileops.c (_IO_file_close_it): Call _IO_file_sync, rather
- than _IO_do_flush, because we want to adjust the file pointer
- if reading and not at end (as in SVR4, and as in fflush).
- Also, make sure to return error indication if sync fails.
- (_IO_file_sync): Ignore seek error if it is ESPIPE.
- (_IO_file_seekoff): If not readable, do dumb lseek.
- * iofclose.c (_IO_fclose): If closing a non-filebuf, return -1
- if _IO_ERR_SEEN.
-
-Fri Feb 17 19:31:00 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * gen-params: Check for struct tms in <sys/times.h>, defining
- HAVE_SYS_TIMES accordingly.
-
-Wed Feb 15 21:05:11 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * strops.c (_IO_str_count): Use LEN macro.
- (_IO_str_seekoff): Update _len field.
-
-Mon Feb 6 19:29:00 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * gen-params: Default to short, long and long long for 16, 32 and
- 64 bit types, in case detection fails.
-
-Wed Jan 25 18:07:30 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * gen-params (_G_wint_t): Allow for broken promotions.
-
-Tue Jan 24 16:15:40 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * stdstrbufs.cc (_IO_fake_stdiobufs): Add an extra layer of struct,
- to force correct alignment on i960s.
- (DEF_STDIOBUF, _IO_{stdin,stdout,stderr}_buf): Update accordingly.
-
-Thu Jan 19 18:30:53 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * config.shared (CXXINCLUDES): Add libstdc++ to includes for
- building libg++.
- (LIBS): Also link with libstdc++ when building libg++ toys.
- Don't set EXPORT_ALL_VARIABLES; users will have to set
- LD_LIBRARY_PATH themselves.
-
-Fri Dec 30 16:38:13 1994 Mike Stump <mrs@cygnus.com>
-
- * config/linux.mt: Fix build problem on linux 1.0.8.
-
-Thu Dec 22 11:49:45 1994 J.T. Conklin (jtc@phishhead.cygnus.com)
-
- * config/netware.mt: Use gcc to pre-link iostream.nlm's objects
- instead of using nlmconv, so that references to functions in
- libgcc.a are resolved.
-
- * configure.in: Append .mt to target makefile fragment file names.
-
- * floatconv.c (tens, tinytens, bigtens): Added const qualifier.
-
-Tue Dec 20 09:59:50 1994 Mike Stump <mrs@cygnus.com>
-
- * gen-params (VTABLE_LABEL_PREFIX): Since some systems have GNU nm
- as nm, and they demangle by default, we have to notice this, and
- try --no-cplus (linux) or --no-demangle when running nm.
-
-Wed Dec 14 18:13:58 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * gen-params: To determine vt-name-mangling using dummy.C add
- #include and #prama interface/implementation to avoid problem with
- assemblers that don't emit local symbols. Reported under HPUX 8
- by Thomas Arend <arend@blasius.Chemietechnik.Uni-Dortmund.DE>.
-
- * streambuf.h (ios::ios): Move inline definition after
- that of ios::init (which ios::ios calls).
-
-Sun Dec 4 19:50:32 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * fileops.c (_IO_file_init, _IO_file_close_it, _IO_file_sync):
- Set _offset to _IO_pos_BAD, to support applications that follow
- POSIX.1 rules on mixing file handles.
-
- * fileops.c (_IO_file_overflow): Handle case that buffer was
- allocated (perhaps by setvbuf) but _IO_write_base is still 0.
-
- * iostdio.h (setbuffer): #define as _IO_setbuffer.
- * streambuf.h, filebuf.cc: Removed filebuf::do_write.
-
-Tue Nov 29 23:38:57 1994 Per Bothner (bothner@rtl.cygnus.com)
-
- * floatconv.c (setword0, setword1): Fix typo.
-
-Tue Nov 29 15:37:29 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * config.shared: Move -fno-implicit-template from CXXFLAGS
- to LIBCXXFLAGS. Tests are better run without it.
-
- * floatconv.c (word0, word1): Re-place/re-implement using unions
- instead of casts to avoid optimizer problems.
-
- * dbz/dbzmain.c: Renamed dirname -> dir_name to avoid OSF
- header file braindamage.
-
-Sat Nov 5 19:44:00 1994 Jason Merrill (jason@phydeaux.cygnus.com)
-
- * config.shared (LIBCFLAGS): Define.
- (LIBCXXFLAGS): Define.
- (DOING_LIBGXX): Define TOLIBGXX. Change LIBS to use -lg++. Add
- LD_LIBRARY_PATH and .EXPORT_ALL_VARIABLES:.
- (FLAGS_TO_PASS): Add LIBC{,XX}FLAGS.
- (XC{,XX}FLAGS): Set to LIBCFLAGS or CFLAGS depending on $LIBDIR.
- (COMPILE.c): Define, use in .c.o rule.
- (COMPILE.cc): Define, use in .cc.o rule.
-
-Sat Nov 5 15:12:12 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * Makefile.in (VERSION): Update to 0.67.
-
- * streambuf.h (ios::dont_close): Is now set by default.
- * fstream.h, fstream.cc (__fb_init): New function. Clears
- ios::dont_close. Change fstreambase constructors to call it.
- * strstream.cc: *strstream constructors must clear ios::dont_close.
- * iostream.cc: Simplify - don't need to set ios::dont_close.
- * ioassign.cc: Simplify - assume ios::dont_close is always set.
-
- * fstream.h, fstream.cc: If _IO_NEW_STREAMS, put the
- filebuf as a member __my_fb.
- * strstream.{h,cc}: Likewile use a strstreambuf member __my_sb.
- * streambuf.h, stdstreams.cc, ioextend.cc:
- Fix if _IO_NEW_STREAMS to not use ios::dont_close.
-
- * streambuf.h (class ios): Move rdbuf later, to avoid
- inability of g++ to inline.
- * filebuf.cc (filebuf::~filebuf): Call _IO_do_flush.
-
- * config.shared: Emit rules to make depend.
- * depend: New file.
-
-Fri Nov 4 17:19:11 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * README: Fix typos.
- * libio.h: Add comment. Update Copyright notice.
-
-Fri Nov 4 21:46:30 1994 Paul Eggert <eggert@twinsun.com>
-
- * libio.h (__P): Change argument name spelling from
- `paramlist' to `protos' for compatibility with BSDI 1.1.
-
-Thu Nov 3 00:45:16 1994 Jason Merrill (jason@phydeaux.cygnus.com)
-
- * config.shared (CXXFLAGS): Add -fno-implicit-templates.
-
-Mon Oct 24 15:57:35 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * config.shared: Define NOSTDIC and use it for libio too.
-
-Thu Oct 20 19:45:35 1994 Jason Merrill (jason@phydeaux.cygnus.com)
-
- * iogetdelim.c: #include <stdlib.h>.
-
-Thu Oct 20 17:09:52 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * iostream.h: Add classes _IO_istream_withassign and
- _IO_ostream_withassign. Re-type cin, cout, cerr, clog.
- (class iostream): Don't add extra _gcount field.
- * ioassign.cc: New file. Implement operator= for cin etc.
- * streambuf.h (class ios): Change return type of operator=.
- * Makefile.in (IOSTREAM_OBJECTS): Add ioassign.o.
-
- * Makefile.in: Re-arrange, so linux.mt overrides can work.
-
- * fileops.c (_IO_file_seekoff): Optimize seeks within buffer.
-
-Wed Oct 19 14:25:47 1994 Jason Merrill (jason@phydeaux.cygnus.com)
-
- * gen-params (wint_t): Return to using __WCHAR_TYPE__ for
- compatibility with gcc versions prior to 2.6.1.
-
-Tue Oct 18 17:08:18 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * Makefile.in: Define _G_CONFOG_H as _G_config.h for Linux. Use it.
- (IO_OBJECTS): Add iogetdelim.o.
- * config/linux.mt: New file.
- * configure.in: Select config/linux.mt if Linux.
- * iogetdelim.c: Verious cleanups, many from
- Ulrich Drepper <drepper@ipd.info.uni-karlsruhe.de>.
- * libioP.h: Add _IO_getdelim. Use (void) for no-parameter functions.
-
-Thu Oct 13 16:30:56 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * libio.h: Rename USE_DTOA to _IO_USE_DTOA for namespace reasons.
- * iostream.cc, iovfscanf.c, iovfprintf, floatconv.c:
- Update USE_DTOA -> _IO_USE_DTOA.
-
- * libio.h (_IO_feof, _IO_ferror): Move to here ...
- * iolibio: ... from here
-
- * iostream.cc (istream::get, istream::ignore, istream::read):
- Set _gcount to 0 if ipfx0 failed.
-
- * iostream.cc (flush): Do virtual function call, rather than
- going through jumptable. (To get correct method in derived class.)
- Bug and fix from John Wiegley <jw@cis.ohio-state.edu>.
-
- * iofdopen.c (O_ACCMODE): Define using O_RDWR, not O_RDWRITE.
-
- * streambuf.h (ios::rdbuf(streambuf*)): New.
- * streambuf.h (ios::operator=): Make private (i.e. dis-allow).
-
-Wed Oct 12 19:09:20 1994 Jason Merrill (jason@phydeaux.cygnus.com)
-
- * gen-params: Define _G_NO_NRV and _G_NO_EXTERN_TEMPLATES if not
- compiling with g++.
-
-Thu Oct 6 16:03:43 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * iostream.texi (ostrstream::str): Note that NUL is not written
- automatically.
-
-Wed Oct 5 17:28:29 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * iogetdelim.c (_IO_getdelim): New function.
-
-Wed Oct 5 15:40:22 1994 J.T. Conklin (jtc@phishhead.cygnus.com)
-
- * config/netware.mt: New file, first cut at Netware NLM support.
- * configure.in (*-*-netware*): Use config/netware.mt.
-
- * config.shared (NLMCONV, LD): New definition.
-
- * gen-params: check for nm in ${binutils}/nm.new.
- * config.shared: Likewise.
-
-Tue Oct 4 12:20:01 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * iomanip.h (omanip::operator<<): Make 2nd arg be const.
- Bug and fix reported by Greg McGary <gkm@magilla.cichlid.com>.
-
- * strstream.cc (strstreambuf::pcount): Simplify, to match
- ANSI/ISO specification.
-
-Mon Sep 26 15:19:52 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * gen-params: Include <wchar.h> and <wctype.h> if they exist.
-
-Thu Sep 8 14:41:41 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * iostream.h (class istream): Declare operator>>(long double&).
- (class ostream): Define operator<<(long double).
-
- * iostream.cc (istream::operator>>(long double&)): Define.
-
-Wed Sep 7 14:42:29 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * iostream.texi (Overflow): Fix bugs in example.
-
-Fri Sep 2 17:45:57 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * iostream.tex: Document a little on how to write your
- own streambuf-derived class, with an example.
-
-Tue Aug 30 13:03:57 1994 Brendan Kehoe (brendan@lisa.cygnus.com)
-
- * floatconv.c (s2b): Declare X and Y to be _G_int32_t.
- (diff, quorem): Declare BORROW, Y, and Z likewise.
- (ulp): Declare L likewise.
- (_IO_strtod): Declare L and AADJ likewise.
- (_IO_dtoa): Declare L and D likewise. Cast division of D by DS to
- _G_int32_t.
-
-Mon Aug 29 16:01:54 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * iosetvbuf.c (_IO_setvbuf): If setting _IOFBF and no
- buffer was specified, call __doallocate.
-
- * fileops.c, floatconv.c: Add a bunch of parentheses to
- shut up gcc warnings. Patch from H.J.Lu.
-
- * stdiostream.cc (stdiobuf::sys_read): Inline call to getc
- for the normal case (size==1).
-
-Sat Aug 20 12:14:52 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * Makefile.in (VERSION): Increase to 0.66.
-
-Fri Aug 19 17:28:41 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * iolibio.h: Added _IO_printf prototype.
- Added extern "C" { ... } wrappers #ifdef __cplusplus.
- Bugs reported by Neal Becker <neal@ctd.comsat.com>.
-
-Wed Aug 17 18:17:15 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * fileops.c (_IO_file_seekoff): For _IO_seek_cur, adjust for
- read-ahead before jumping to label dumb.
-
-Wed Aug 3 13:15:01 1994 H.J. Lu (hjl@nynexst.com)
-
- * libioP.h (CHECK_FILE(FILE,RET)): new, which checks for
- FILE == NULL and _IO_MAGIC_MASK.
- (COERCE_FILE(FILE)): merged into CHECK_FILE(FILE,RET)
- with typo fixes.
-
- * iofread.c, iofwrite.c: add CHECK_FILE(fp, 0);
- * iofclose.c: add CHECK_FILE(fp, EOF); remove _IO_MAGIC_MASK check.
-
- * iofflush.c, iofgetpos.c, iofputs.c, iofscanf.c,
- iofsetpos.c, iofvbuf.c, ioungetc.c:
- Add CHECK_FILE(fp, EOF) and remove COERCE_FILE(fp).
-
- * iofgets.c: add CHECK_FILE(fp, NULL) and remove COERCE_FILE(fp).
- * iofprintf.c: add CHECK_FILE(fp, -1) and remove COERCE_FILE(fp).
- * ioftell.c: add CHECK_FILE(fp, -1L) and remove COERCE_FILE(fp).
- * iosetbuffer.c: add CHECK_FILE(fp, ) and remove COERCE_FILE(fp).
-
-Fri Aug 12 15:35:39 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * iofdopen.c (_IO_fdopen): #define O_ACCMODE if it isn't.
- Still set O_APPEND if "a" is given, but don't unset it
- if it isn't. Added comment.
-
-Mon Aug 8 13:11:00 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * gen-params (VTABLE_LABEL_PREFIX): Changes in the implementation.
- For look for _*vt[$_.]7*filebuf in the nm output, because that
- matches what g++ produces and has produced. Thus it should be
- somewhat more robust.
-
-Sun Aug 7 22:52:49 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * gen-params (CC): Remove no-longer-needed -I options
- passed to xgcc (now they are implied by the -B options).
-
-Wed Jul 20 16:41:13 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * Makefile.in (tooldir): Added definition, so we can do
- 'make install' in this directory.
- Bug reported by Klamer Schutte <schutte@tpd.tno.nl>.
-
-Mon Jul 18 18:02:34 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * gen-params (VTABLE_LABEL_PREFIX): Remove filename sppearing
- by itself. Add comment explaining what is going on.
-
-Tue Dec 21 13:02:48 1993 H.J. Lu (hjl@jalod)
-
- * libio.h: define _IO_uid_t and _IO_HAVE_ST_BLKSIZE
- as _G_xxxxxxxx.
-
-Tue Dec 21 13:02:48 1993 H.J. Lu (hjl@jalod)
-
- * iopopen.c: Don't include <errno.h>. It is included in "libioP.h".
-
- * iopopen.c (_IO_proc_close) : check if fp is on the list
- before close it.
-
-Thu Jul 14 16:38:47 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * gen-params (CONFIG_NM): Make sed scripts to find vtable name
- mangling more robost for different forms of nm output.
-
-Tue Dec 21 13:02:48 1993 H.J. Lu (hjl@jalod)
-
- * iofopen.c (_IO_fopen): don't check [redundantly] fp == NULL after
- IO_file_init(&fp->_file).
-
- * iomanip.h (template<class TP> class iapp):
- change ostream to istream.
-
-Tue Jul 12 14:09:02 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * Makefile.in (VERSION): Increase to 0.65.
- * libioP.h (builtinbuf_vtable): Only define #ifdef __cplusplus.
-
- * gen-params (_G_int8_t): Only define if defined(__STDC__),
- because K&R C compilers don't have signed char.
- (_G_int64_t, _G_uint64_t): Only define if defined(__GNUC__)
- because other compilers may not have long long.
-
-Sun Mar 06 13:10:21 1994 H.J. Lu (hjl@nynexst.com)
-
- * floatconv.c (_IO_dtoa ()): fix a small memory leak, set the
- "on_stack" field to be 0 if "result" is not NULL.
-
-Sat Mar 05 13:18:20 1994 H.J. Lu (hjl@nynexst.com)
-
- * floatconv.c (_IO_dtoa ()): if the number of digits of the
- floating point number is more than the previous one, free the
- old string and allocate a new one.
- [Minor optimization to avoid Bcopy. -PB]
-
-Mon Jul 11 10:53:41 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * fileops.c (_IO_file_underflow): 'count' should be unsigned,
- since it contains the return value of read. Reported by
- Teemu Torma <tot@trema.fi>.
-
-Tue Dec 21 13:02:48 1993 H.J. Lu (hjl@nynexst.com)
-
- * floatconv.c (_IO_strtod ()): make "+" and "-" as error.
-
-Sat Jul 9 15:09:21 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- Make sure _IO_FILE::_flags is always initialized correctly, for the
- C functions (fopen, fdopen, popen), and not just the C++ functions.
- * fileops.c (_IO_file_init): Set _flags to CLOSED_FILEBUF_FLAGS.
- * fileops.c (_IO_file_fopen): Remove bogus assignment.
- * filebuf.cc (filebuf constructors): Don't pass CLOSED_FILEBUF_FLAGS
- to streambuf constructor - _IO_file_init does it instead.
- * filebuf.cc (CLOSED_FILEBUF_FLAGS): Removed.
- * iopopen.c (_IO_proc_open): Use _IO_mask_flags.
-
-Thu Jun 30 08:49:53 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * dbz/Makefile.in (mostlyclean): Add target.
-
-Wed Jun 29 09:30:12 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * gen-params: Woops, can't run a C program to determine target
- characteristics. Sigh.
-
-Tue Jun 28 03:11:33 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * gen-params: Add _G_{,u}int{8,16,64}_t, use a short C program to
- determine what all these should be rather than trying to compare
- the MAX numbers in the shell.
-
-Sun Jun 26 21:04:24 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * stdiostream.h, stdiostream.cc (stdiobuf::xsgetn): Removed.
- Too hairy. If we want to optimize it, we should do so in
- filebuf::xsgetn (or rather _IO_file_xsgetn).
-
- * stdiostream.h (class stdiobuf), stdiostream.cc: Fix parameter
- and return types of virtual function to matcher base types (Oops!).
- * streamstream.cc (stdiobuf::xsgetn, stdiobuf::xsputn):
- Optimize to call fread.fwrite directly if !buffered.
- * fileops.c: Fix comment.
-
-Fri Jun 24 11:28:18 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * stdiostream.h (istdiostream, ostdiostream): New classes.
-
- More robust final cleanup.
- * cleanup.c (_IO_register_cleanup): Register _IO_cleanup,
- rather than _IO_flush_all.
- * filedoalloc.c: Update comment.
- * genops.c (_IO_unbuffer_all): New. Makes all files unbuffered.
- * genops.c (_IO_cleanup), libioP.h: New function. Call
- _IO_flush_all, and then _IO_unbuffer_all. This is in case C++
- destructors try to do output *after* _IO_cleanup is called.
-
- Construct standard stdiobufs statically (using type punning).
- * stdstrbufs.c; Unless _STDIO_USES_IOSTREAM declare standard
- stdiobufs (for stdin, stdout, and stderr), using type punning
- (struct _IO_fake_stdiobuf). This avoids constructor-time problems.
- * stdstreams.cc: Remove the declarations of the stdiobufs.
- Instead use the new (fake) ones in stdstrbufs.cc. We no longer
- have to call ios::sync_with_stdio at constructor time.
-
- Preliminary support for new ANSI streambuf::uflow virtual.
- * libioP.h (struct _IO_jump_t): Add __uflow field.
- * genops.c (_IO_default_uflow), libioP.h: New function.
- * fileops.c (_IO_file_jumps), iopopen.c (IO_proc_jumps),
- iovfprintf.c (_IO_helper_jumps), strops.c (_IO_str_jumps),
- streambuf.cc (_IO_streambuf_jumps): Add _IO_default_uflow.
- * genops.c (__uflow): New function.
- (save_for_backup): New function. Some code shared by
- __underflow and __uflow, moved out from the former.
- (_IO_default_uflow): New function.
- * libio.h (_IO_getc): Call __uflow, not __underflow.
-
-Wed Jun 22 20:22:49 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- Make sure that the vtable of a streambuf is always valid,
- which makes ios::rdbuf simpler and faster.
- * gen-params: Add code to determine _G_VTABLE_LABEL_HAS_LENGTH,
- _G_VTABLE_LABEL_PREFIX, _G_VTABLE_LABEL_PREFIX_ID, and
- _G_USING_THUNKS, which describe how virtual function tables are named.
- * stdfiles.c (FILEBUF_LITERAL): Moved to libioP.h.
- * libioP.h (builtinbuf_vtable): New (complicated) declaration.
- * filebuf.cc (filebuf::__new), strstream.cc (SET_STR_JUMPS):
- Initialize vtable to builtinbuf_vtable, not NULL.
- * stdstrbufs.cc: New file. Same as stdfiles.c, except that
- vtable is initialized to builtinbuf_vtable, not NULL.
- * streambuf.h (ios::rdbuf): Can now simplify/optimize, due to
- above changes. Always, just return _strbuf.
- * builtinbuf.h, builtinbuf.cc (builtinbuf::vtable,
- builtinbuf::get_builtin_vtable): Removed. No longer needed.
- * streambuf.h, builtinbuf.cc (ios::_IO_fix_vtable): No longer needed.
- Only defined #ifdef _STREAM_COMPAT, for binary compatibility.
- * Makefile.in: Move stdfiles.o from IO_OBJECTS to STDIO_WRAP_OBJECTS.
- (IOSTREAM_OBJECT): Add stdstrbufs.o.
- * Makefile.in (_G_config.h): Pass $(CXXFLAGS) as part of $(CXX).
-
-Fri Feb 11 11:08:01 1994 SBPM Marc GINGOLD (marc@david.saclay.cea.fr)
-
- * iovfprintf.c (helper_vfprintf): add
- hp->_IO_file_flags = _IO_MAGIC|(_IO_IS_FILEBUF+_IO_NO_READS);
- [This is needed because _IO_vfprintf checks for _IO_UNBUFFERED. -PB]
- [Actually: don't set _IO_IS_FILEBUF. -PB]
-
-Wed Jun 22 13:49:22 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * stdiostream.cc, stdiostream.h (stdiobuf::buffered): New methods.
-
- * iofdopen.c (_IO_fdopen): Various minor improvements.
-
- * iovfscanf.c: Don't return EOF on control_failure.
-
-Tue Dec 21 13:02:48 1993 H.J. Lu (hjl@nynexst.com)
-
- * iovfscanf.c: Enforce the sequence of the conversion specifications.
-
-Fri Jun 17 20:57:22 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * iofdopen.c: Use fcntl to check that requested access mode is
- compatible with existing access mode, and to change the
- O_APPEND file status flag if need be.
-
-Thu Jun 16 17:33:50 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * streambuf.h (ios::init): Initialize all the fields.
- This may be overkill, but the current ANSI working paper requires it.
- * streambuf.h (ios::ios): Reimplement in terms of ios::init.
- * iostream.cc (Non-default constructors istream::istream,
- ostream::ostream, iostream::iostream): Cannot use a mem-initializer,
- because it is ignored if initializing a derived class. Instead,
- call ios::init.
-
-Wed Jun 15 13:35:37 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * stdstreams.cc (ISTREAM_DEF): Fix typo (it's a _fake_istream, not
- a _fake_ostream). Reported by Jason Shirk <jshirk@gomez.intel.com>.
-
- * stdiostream.h, stdiostream.cc (stdiobuf::~stdiobuf): New.
- Call _IO_do_flush.
- * stdiostream.cc (stdiobuf::sync): Call _IO_do_flush rather
- than filebuf::sync (to avoid bad seeks).
-
- * libioP.h (_IO_do_flush): Add missing parentheses.
-
-Fri Jun 3 19:16:57 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * config.shared (CXXFLAGS): Remove -fno-implicit-templates.
-
- * iomanip.h: Add explicit external instantiations.
-
-Wed Jun 1 14:14:44 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * libio.h (struct _IO_FILE_plus): Move definition from here ...
- * libioP.h (struct _IO_FILE_plus): ... to here. Since this
- file is private to the implementation, we can rename the fields
- from the implementor's to the user's name anme space.
- (This avoids a lossage on SCO, whose stdio.h has a #define _file.)
- * iofdopen.c, iofopen.c, stdfiles.c: Fix field references accordingly.
- * iopopen.c (struct_IO_proc_file): Rename fields from
- implementor's name space to user's, and update usages.
- * streambuf.h (streambuf::_vtable): Re-implement to not need
- struct _IO_FILE_plus.
- * strfile.h (struct _IO_strfile_): Likewise.
-
-Wed Jun 1 13:57:48 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * config.shared (CXXFLAGS): Use -fno-implicit-templates instead of
- -fexternal-templates.
-
-Tue May 31 08:49:28 1994 Mike Stump (mrs@cygnus.com)
-
- * genops.c, iofclose.c, iofdopen.c, iofopen.c, iopopen.c: Be
- consistent about protecting #include <stdlib.h>.
-
- * ioputs.c: Add #include <string.h>, to avoid warning on alpha.
-
- * iofdopen.c: Add #include <stdlib.h>, so that malloc works on
- machines where sizeof(int) != sizeof(void *).
-
-Mon May 30 17:26:49 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * pfstream.cc (ipfstream::ipfstream, opfstream::opfstream):
- Reverse sense of test of return value of procbuf::open.
- (It returns NULL on failure.)
-
- * filedoalloc.c (_IO_file_doallocate): Remove dead code for
- USE_MALLOC_BUF. Add code to return EOF if ALLOC_BUF fails.
-
-Sat May 28 13:47:47 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * iomanip.cc: Explicitly instantiate smanip<int> and
- smanip<ios::fmtflags>.
-
-Wed May 25 16:04:12 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * strfile.h: Use __P instead of _PARAMS.
-
-Fri May 20 11:42:17 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * libio.h: Rename _PARAMS macro to __P for better glibc and BSD
- compatibility. (Also define _PARAMS for backwards compatibility.)
- * cleanup.c, iolibio.h, ioperror.c, iovfprintf.c, iovfscanf.c,
- libioP.h: Use __P instead of _PARAMS.
- * iostdio.h: Use __P instead of _ARGS.
-
- * fileops.c (_IO_file_read): Minor stylistic tweak. (It is
- preferable to test errno *after* the error return.)
-
-Fri May 13 15:25:36 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * iostream.*: Add insertor and extractor for bool (just pretend
- it's an int).
-
-Fri May 13 14:12:03 1994 Mike Stump (mrs@cygnus.com)
-
- * gen-params: Check for builtin bool support.
-
-Wed May 11 00:48:35 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- Make libg++ build with gcc -ansi -pedantic-errors
- * gen-params: #ifdef __STRICT_ANSI__, #define _G_NO_NRV.
- * pfstream.cc (ipfstream::ipfstream): Wrap use of variable-size
- array in #ifndef __STRICT_ANSI__.
-
-Fri May 6 12:42:21 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * Makefile.in (VERSION): Increase to 0.64.
-
- * isgetline.cc (istream::getline): The delimiter should *not*
- be included in the gcount().
-
- * filedoalloc.c: #include <stdlib.h> (If __STDC__) to get malloc.
- * iostream.h (ostream::put): Remove overloaded versions, to match
- new working paper. (Actually just put inside _STREAM_COMPAT, for now.)
-
-Tue May 3 14:14:57 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * genops.c (_IO_default_finish): Make robust when called
- multiple times on the same _IO_FILE*. (One way this can
- happen is by the builtinbuf destructor being followed by the
- streambuf destructor.)
-
-Mon May 2 13:55:26 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * gen-params: Actually determine wint_t rather than depending on
- cpp to provide it or defaulting to the underlying type for
- wchar_t.
-
-Sat Apr 30 14:47:30 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * gen-params: Add _G_wint_t, allow __*_TYPE__ to override values
- at compile time, fix definition of _G_ARGS.
-
-Fri Apr 29 16:55:37 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * libio.h: Remove #pragma interface. (There is no implementation.)
-
-Mon Mar 28 14:22:26 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * iostream.cc (ostream::operator<<(double)): Add/fix support
- for printing '+' when ios::showpos is set.
- (Fixes bug reported by Doug Moore <dougm@cs.rice.edu>.)
- * iostream.cc (istream::read): Set eofbit as well as failbit on eof.
- * iostream.cc (ostream::operator<<(int)): Fix conversion
- to unsigned (used to lose on INT_MIN).
- * iostream.cc (ostream::operator<<(long)): Use (unsigned long),
- rather than (unsigned) for temporary.
-
- * config.shared, Makefile.in: Remove definitions and uses
- of XTRAFLAGS. It is no longer needed, since it is
- now implied by the -B flag.
-
-Fri Mar 25 00:31:22 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * builtinbuf.h: Add put /**/ around comment on trailing #endif.
-
- * Makefile.in (c++clean): Make clean in tests subdir, too.
-
-Wed Mar 23 16:42:09 1994 Doug Evans (dje@canuck.cygnus.com)
-
- * configure.in: Remove Makefile.tem before creating it.
- Needed when configuring from read-only source trees.
-
-Wed Mar 16 14:06:42 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * stdstreams.cc: Fix so that stdiobuf are used for cin/cout/cerr,
- unless _STDIO_USES_IOSTREAM is defined.
- * filebuf.cc (filebuf::setbuf): Fix confusion about return
- value from _IO_file_setbuf.
-
-Sun Mar 13 00:54:12 1994 Paul Eggert (eggert@twinsun.com)
-
- * config.shared: Ensure that `all' precedes `.PHONY';
- BSDI 1.1 needs this.
-
-Sat Mar 12 03:58:00 1994 Paul Eggert (eggert@twinsun.com)
-
- * config.shared: Output a definition of INSTALL that uses
- $${rootme}, not ${rootme}. Most `make's don't care, but BSDI
- 1.1 `make' does.
-
-Fri Mar 4 17:33:01 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * iopopen.c: #define _POSIX_SOURCE.
- * isgetline.c (istream::getline): Various fixes.
-
-Thu Mar 3 17:58:20 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * iostream.cc (write_int): Fix test for when to add initial '0'
- when ios::oct and ios::showbase are set.
- For hex, showbase adds initial 0x (or 0X) regardless of val==0.
- Bugs reported by Phil Roth <proth@cs.uiuc.edu>.
-
-Mon Feb 21 13:18:20 1994 H.J. Lu (hjl@nynexst.com)
-
- * libio.h (_IO_PENDING_OUTPUT_COUNT(_fp)): return the
- pending output count in _fp.
-
-Fri Feb 25 09:26:57 1994 Ian Lance Taylor (ian@cygnus.com)
-
- * gen-params: For HAVE_SYS_WAIT, compile dummy.c, not dummy.C.
-
-Tue Feb 22 11:19:09 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * streambuf.h, genops.c, libioP.h: Rename references to
- _IO_FILE fields other_gbase => _IO_save_base,
- _aux_limit => _IO_backup_base, and _other_egptr => _IO_save_end.
- * libio.h: Remove no-longer needed macros _other_gbase,
- _aux_limit, and _other_egptr.
- * genops.c (__underflow, _IO_default_finishh, _IO_unsave_markers):
- Check _IO_save_base for NULL before FREEing it or calling
- _IO_free_backup_area.
-
-Thu Feb 17 15:26:59 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * gen-params: Improve deduction of _G_uint32 and _G_int32.
- Should now work for 16-bit, 32-bit, or 64-bit targets.
- * gen-params: Check for sys/wait.h using ${CC}, since it's
- now used in a C file, not a C++ file.
- * floatconv.c: Typedef _G_uint32_t as unsigned32, and use
- unsigned32 in place of unsigned long. (Needed for Alpha.)
-
-Tue Feb 8 13:40:15 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * fileops.c (_IO_file_close_it): Simplify by using _IO_do_flush.
- * fileops.c (_IO_file_finish): Don't call _IO_file_close_it -
- do it inline. Call _IO_do_flush even if _IO_DELETE_DONT_CLOSE.
- * fileops.c (_IO_file_attach): Set _IO_DELETE_DONT_CLOSE.
- * genops.c (_IO_flush_all): Only call overflow if there is
- something to write.
- * iofclose.c (_IO_fclose): Check that magic number is correct,
- and clear it when done. Avoids crashing some buggy applications.
- * iogetline.c (_IO_getline): Don't gratuitously increment old_len.
- * iogets.c (_IO_gets): Take care to get required ANSi semantics.
-
-Sun Feb 6 19:50:39 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * iomanip.cc: Explicitly instantiate operator<< and >>.
-
-Fri Feb 4 12:28:22 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * config.shared (CXXFLAGS): Use -fexternal-templates.
-
- * iomanip.h: Uncomment #pragma interface.
-
-Thu Jan 20 13:48:40 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- If no characters are read by fgets, ANSI C doesn't allow '\0' to
- be written to the buffer, but it is required by ANSI C++
- for istream::get and istream::getline. Both use _IO_getline ...
- * iogetline.c (_IO_getline): Don't write a '\0' at the end
- of the read data. The input buffer length does not include
- space for a '\0'.
- * iofgets.c, iogets.c: Change appropriately.
- Also check for _IO_ERR_SEEN, as required by ANSI.
- * isgetline.cc: Update accordingly.
-
-Mon Jan 17 13:24:26 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * Makefile.in (c++clean): Added target for compiler testing
- (i.e. make c++clean all).
-
-Mon Jan 10 11:20:42 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * libio.h (_IO_putc): Add parentheses.
- Patch from Rik Faith <faith@cs.unc.edu>.
-
-Tue Jan 4 01:32:28 1993 Hongjiu Lu (hjl@nynexst.com)
-
- * genops.c (_IO_default_xsputn):
- (_IO_default_xsgetn):
- * ioignore.c: change "_IO_size_t count" to
- "_IO_ssize_t count".
- * iogetline.c: change "_IO_size_t len" to
- "_IO_ssize_t len".
-
-Mon Dec 20 00:31:21 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * config.shared (CXXINCLUDES): Fix quoting of $(NOSTDINC).
-
-Sun Dec 19 21:03:45 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * Makefile.in (VERSION): Increase to 0.63.
-
-Fri Dec 17 13:02:44 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * iofread.c (_IO_fread): Return 0 if either size or count is 0.
- * iofwrite.c (_IO_fwrite): Return 0 if either size or count is 0.
- (This is consistent with fread, and most implementations, but not
- with a literal reading of the ANSI spec.)
- * iovfscanf.c (_IO_vfscanf): If got EOF while skipping spaces,
- set seen_eof and break (instead of returning).
- * sbscan.cc (streambuf::vscan): Set error state before returning.
- * streambuf.h: Add a forward declarations for class istream
- to work around a g++ vtable name mangling bug. (Patch from
- harry@pdsrc.hilco.com via Jeffrey A Law <law@snake.cs.utah.edu>.)
- * NEWS: New file.
-
-Sat Dec 11 16:21:08 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * iovfprintf.c (struct helper_file, _IO_helper_overflow,
- helper_vfprintf, _IO_helper_jumps): New structs and functions.
- (_IO_vfprintf): Use helper_vfprintf to make printing to
- unbuffered files more efficient.
- * genops.c (_IO_default_underflow), libioP.h: New function.
-
- * iovsscanf.c (_IO_vsscanf): The input string's length marks
- its logical end-of-file.
-
-Wed Dec 8 13:20:46 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * indstream.cc (indirectbuf::sync()): Don't crash if get_stream()
- or put_stream() are NULL; sync() both streams even if error.
-
-Sun Dec 5 19:24:29 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
-
- * iostreamP.h (convert_to_seekflags): Use _IO_seek_set instead of
- 0 inside the conditial expressions.
-
- * iofsetpos.c (_IO_fsetpos): Delete unused var `pos'.
-
-Sat Dec 4 15:57:26 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * filedoalloc.c (_IO_file_doallocate): Change type of couldbetty
- to int, and type of size to _IO_size_t, instead of size_t.
- (Change needed for Ultrix, which incorrectly deliberately doesn't
- define size_t in <sys/types.h> if _POSIX_SOURCE is defined.)
-
-Thu Dec 2 22:43:03 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * fileops.c (_IO_file_finish): Remove redundant call to _IO_un_link.
- * iofclose.c (_IO_fclose): Don't call fp->_jumps->__close; it's
- too low-level. Instead call _IO_file_close_it.
- * dbz/Makefile.in (rclean, distclean): Add some missing files.
-
-Wed Dec 1 13:19:14 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * config/hpux.mt (MATH_H_INLINES): No longer define.
- Patch from Jeffrey A Law <law@snake.cs.utah.edu>.
-
-Fri Nov 26 13:28:36 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * config.shared (CINCLUDES): Define default if libg++.
- * iofread.c: Use _IO_sgetn.c.
- * iolibio.h (_IO_clearerr): Fix typo.
- * genops.c (_IO_seekmark): Return 0 on success.
- * floactconv.c (Binit): Change to static.
- * iofclose.c (_IO_fclose): Check if file is _IO_stdin, _IO_stdout,
- or _IO_stderr; if so don't try to free it. Fix from hjl@nynexst.com.
-
- * genops.c (_IO_default_sync), libioP.h: New function.
- * libioP.h (_IO_default_close): Use _IO_default_sync -same interface.
-
- * Makefile.in: Increase version to 0.62.
- * iopopen.c (_IO_proc_close): Use waitpid (available in libibarty,
- if needed), rather than wait. Don't block/ignore SIGINT etc,
- as this is counter to Posix.2.
- * iopopen.c: Chain open proc_files, and have the child close
- the ones that are open (as required by Posix.2).
-
- * fstream.h (fstreambase::rdbuf), strstream.h (strstreambase
- ::rdbuf): Call ios::rdbuf() instead of getting _strbuf directly.
-
- * sbscan.cc (streambuf::vscan): Comment out duplicate default arg.
- * floatconv.c: Recognize Alpha and i860 as little-endian.
- * streambuf.cc: Return two bogus value returns from void functions.
- * iolibio.h, iofwrite.c: Fix buffer type to (const void*).
- * libio.h: Predefine of struct _IO_FILE to help non-g++-compilers.
- * libioP.h, pfstream.cc, stdfiles.c, iovfscanf.c: Cleanup syntax junk.
- * stdstreams.cc: Minor simplification.
- * streambuf.h, builtinbuf.cc: Add non-const ios::_IO_fix_vtable()
- for temporary binary compatibility.
-
- * filedoalloc.c, fileops.c: Add _POSIX_SOURCE.
- * fileops.c, iofopen.c, iofputs.c, iostream.cc, strops.c,
- strstream.cc, genops.c: Add some missing #includes.
- * iofopen.c, iofdopen.c: Return NULL if malloc fails.
- * iovfscanf.c: Fix return type in strtol prototype.
- * fwrite.c: Remove bogus file.
-
-Wed Nov 17 14:09:42 1993 Per Bothner (bothner@cygnus.com)
-
- * builtinbuf.cc (ios::_IO_fix_vtable), streambuf.h: Make method
- const, to reduce problems with -Wcast-qual.
-
-Tue Nov 16 19:30:42 1993 david d `zoo' zuhn (zoo@rtl.cygnus.com)
-
- * config.shared (CXXINCLUDE): use ${} instead of $() for NOSTDINC
-
-Tue Nov 16 14:15:45 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * iopopen.c (_IO_proc_close): Re-structure to avoid
- declarations after statements.
- * floatconv.c: If not __STDC__, #define DBL_MANT_DIG.
- * config/isc.mt (G_CONFIG_ARGS): Remove bogus spaces.
- Patch from David A. Avery <daa@nic.cerf.net>.
-
-Tue Nov 16 15:58:31 1993 Mark Eichin (eichin@cygnus.com)
-
- * Makefile.in (_G_config.h): explicitly use $(SHELL) to run
- gen-params, since we know it is a script (we're explicitly looking
- in ${srcdir} for it) and /bin/sh might not be good enough.
-
-Mon Nov 15 13:26:22 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * builtinbuf.cc: Don't depend on initialization of static
- variable builtinbuf::vtable, since that might happen after
- we need it (for a static constructor). Instead, initialize
- it when needed by inlining the code from get_builtin_vtable
- into ios::_IO_fix_vtable().
-
- * floatconv.c: Avoid using #elif, which some C compilers lack.
- * iogetline.c, libioP.h: Make char parameter be int, to avoid
- some default promotion anomalies.
-
-Fri Nov 5 11:49:46 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * config.shared (do-clean-dvi): Remove TeX work files.
- * iopopen.c (extern _IO_fork): Don't use parameter type void.
- * strops.c (_IO_str_init_static): Clear the allocate_buffer
- function pointer, to mark the strfile as being static.
- Bug fix from Mike Raisbeck <mike@pudding.rtr.COM>.
-
-Thu Nov 4 10:44:24 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * filebuf.cc (filebuf:): Use sseekoff rather than seekoff
- (which loses if vtable pointer is NULL).
-
- * iostream.cc (ostream::operator<<(long long n)): Fix thinko.
-
- * Makefile.in (VERSION): Increase to 0.60.
- * Makefile.in (IO_OBJECTS): Added iopopen.o.
- * config.shared (DISTCLEAN): Also remove Make.pack.
- * config.shared (CXXINCLUDES): Add $(NOSTDINC).
-
- * config.shared (INSTALL): Fix so it ues the correct install.sh
- whether $srcdir is absolute or relative.
-
- * floatconv.c (DBL_MAX_10_EXP): Fix default value.
-
-Wed Nov 3 10:20:49 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * gen-params: Make more robust to allow random junk (NeXT
- has spaces) before typedefs.
-
- * fileops.c (_IO_file_overflow): Reduce code duplication.
- * Makefile.in (IO_OBJECTS): Remove ioputs.o.
-
- * iovfscanf.c, libio.h: Extra parameter to _IO_vfscanf,
- for optionally setting an error indication..
- * iofscanf.c, ioscanf.c, iofscanf.c, iovsscanf.c: Fix calls to
- _IO_vfscanf to pass an extra NULL.
- * sbscan.cc (streambuf::vscan): If passed an extra stream,
- set its error state (using new _IO_vfscanf parameter.
-
- * filedoalloc.c, fileops.c, genops.c, iogetline.c, ioignore.c,
- libio.h, libioP.h, streambuf.cc streambuf.h, strfile.h, strops.c,
- strstream.cc: Replace macros (_base, _ebuf, _eback, _gptr, _egptr,
- _pbase, _pptr, _epptr) by field names (_IO_buf_base, _IO_buf_end,
- _IO_read_base, _IO_read_pre, IO_read_end, _IO_write_base,
- _IO_write_ptr, _IO_write_end).
- * libio.h: Remove the old macros (which fixes a conflict.
-
-Mon Nov 1 15:22:12 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * iostream.cc: Use _IO_sputn instead of sputn. _IO_sputn does
- not require a vtable pointer, and is also slightly faster.
-
- * builtinbuf.{h,cc} (builtinbuf::setbuf): Fix return and
- parameter types.
-
-Mon Oct 25 12:56:33 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- Kludge to make sure _IO_FILE buffers get flushed before exit.
- * dbz/dbzmain.c, dbz/fake.c, dbz/byteflip.c:
- Invoke DBZ_FINISH macro (if defined) before (normal) exits.
- * dbz/Makefile.in (CFLAGS): Define DBZ_FINISH to call _IO_flush_all.
-
-Sat Oct 23 22:10:53 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * Makefile.in (VERSION): Set to 0.60 for libg++ release.
- * fileops.c (_IO_file_attach): Set _offset to _IO_pos_BAD.
- * iostream.cc (ostream::flush): Fix thinkp.
- * editbuf.cc, isgetsb.cc, isscan.cc, osform.cc, parsestream.cc,
- pfstream.cc, sbform.cc, sbscan.cc, stdstreams.cc, stream.cc:
- Replace #include "ioprivate.h" by #include "libioP.h" (and
- sometimes stdarg.h, stdlib.h and/or string.h).
- * ioprivate.h: Removed.
-
-
-Thu Oct 21 19:24:02 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * PlotFile.h, SFile.h, editbuf.cc, editbuf.h, filebuf.cc,
- fstream.cc, fstream.h, indstream.cc, indstream.h, iomanip.cc,
- iomanip.h, ioprivate.h, iostream.cc, iostream.h, isgetline.cc,
- isgetsb.cc, parsestream.cc, parsestream.h, pfstream.cc,
- pfstream.h, procbuf.cc, procbuf.h, stdiostream.cc, stdiostream.h,
- stdstreams.cc, streambuf.cc, streambuf.h, strstream.cc,
- strstream.h: Remove old (duplicate) copyright notices.
-
- * iostream.cc: Fix calls to sync() to be safe in the presence
- of vtable-less streambufs.
-
-Wed Oct 20 15:22:04 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * streambuf.h (streambuf::underflow, streambuf::overflow):
- Don't make virtual functions pure.
- * streambuf.cc (streambuf::underflow, streambuf::overflow):
- Default definitions (return EOF).
- * fstream.h: Add new (int fd, char* buf, int len) constructors.
- These are deprecated, but added for AT&T compatibility.
- * fstream.cc fstreambase::fstreambase(int fd, char *p, int l): New.
-
-Thu Oct 14 14:57:01 1993 david d `zoo' zuhn (zoo@rtl.cygnus.com)
-
- * configure.in: use 'mv -f' instead of 'mv'
-
-Tue Oct 12 05:01:44 1993 Mike Stump (mrs@cygnus.com)
-
- * floatconv.c: Fix typo, change __STDC to __STDC__.
-
-Mon Oct 11 17:03:12 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * cleanup.c: It should be #if _G_HAVE_ATEXIT, not #ifdef.
-
- * floatconv.c, iostrerror.c, iovfprintf.c, iovfscanf.c, libioP.h:
- Bunch of fixes to allow use of non-ANSI (K&R) C compilers.
-
- * Makefile.in (iostream.list): Use CC=$(CXX) to force use of gcc.
- * README: New file.
-
-Fri Oct 8 16:19:58 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * Makefile.in: Move ioungetc.o from STDIO_WRAP_OBJECTS to
- IO_OBJECTS (since it is needed for iovfscanf.c).
- * iostrerror.c: Add declaration of strerror.
-
-Thu Oct 7 12:02:28 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * cleanup.c: New file, to cause flushing at exit.
- * filedoalloc.c: Cause flushing on exit.
- * Makefile.in (OSPRIM_OBJECTS): Add cleanup.o.
- * gen-params: Check for atexit.
-
-Tue Oct 5 19:11:14 1993 Mike Stump (mrs@cygnus.com)
-
- * ioperror.c (_IO_strerror): Add missing ()s in _PARAMS usage.
-
-Tue Oct 5 10:33:37 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * iofprintf.c, iofscanf.c, ioprintf.c, ioscanf.c, iosprintf.c,
- iosscanf.c: Remove bogus semi-colon after va_dcl.
- * ioperror.c: Fix typos in declaration.
-
-Mon Oct 4 17:12:22 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * configure.in (CLEAN): Define (as _G_config.h *.a).
-
- * fileops.c (_IO_file_read): Don't assume EINTR is defined.
- * iosetbuf.c: Replace by generalized ...
- * iosetbuffer.c: ... variant, derived from BSD.
- * Makefile.in (STDIO_WRAP_OBJECTS): Change correspondingly.
- * iosetvbuf.c (iosetvbuf): Minor ANSI tweak.
- * iostdio.h (setbuf, setlinebuf): New #defines.
- * iolibio.h (_IO_setbuf, _IO_setlinebuf): (Re-)define as macros.
- * Makefile.in (LIBIO_OBJECTS): New macro.
-
-Tue Sep 28 14:15:52 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * libioP.h (_IO_proc_open, _IO_proc_close): Add missing return types.
- * procbuf.cc: Belated fixes.
-
-Mon Sep 27 14:04:47 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * Makefile.in: List new files. Add STDIO_WRAP_OBJECTS macro.
- * floatconv.c (d2b): Use Exp_msk11 instead of Exp_msk1.
- * iofgetpos.c (_IO_fgetpos), iofsetpos.c (_IO_fsetpos): Clean up.
- * iolibio.h: New file. Declarations of _IO_foo, for most foo
- where foo is a stdio function. (Remove these from libio.h.)
- * iostream.h (istream::istreambuf, ostream::ostreambuf): Move
- obsolete functions inside #ifdef _STREAM_COMPAT.
- * libio.h, libioP.h, streambuf.h, parsestream.h, stdiostream.h:
- Use _IO_fpos_t rather than _IO_pos_t.
- * iopopen.c: New file type, for pipe (popen-like) streams.
- * procbuf.cc: Now just a C++ wrapper for the files in iopopen.c.
- * streambuf.h (ios::unsetf): Return complete old value of flags.
- * iogets.c (_IO_gets(), ioungetc.c (_IO_ungetc), ioperror.c
- (_IO_perror), iostrerror.c (_IO_strerror): New files and
- functions, for stdio implementation.
- * iostdio.h: Add declarations for various recently-added functions.
-
-Sun Sep 12 14:24:55 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * streambuf.h (ios::showpos):: Fix typo.
-
-Fri Aug 27 12:05:47 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * iopadn.c (_IO_padn): Change to return count of chars written.
- * outfloat.c, iovfprintf.c: Change for new _IO_padn interface.
- * iostream.cc (ostream::operator<<): Make sure to set badbit
- on a failure (many places). Use _IO_padn more.
- * iostream.cc (ostream& ostream::operator<<(const void *p): Move to
- * osform.cc: ... here, to reduce linking-in-the-world syndrome.
- * osform.cc: Use rdbuf(), instead of _strbuf directly.
-
- * genops.c (_IO_sgetn), libio.h: New function.
- * streambuf.h (streambuf.h::sgetn): Use _IO_sgetn.
- * SFile.cc (SFile::operator[]): Use sseekoff, not seekoff.
-
-Thu Aug 26 10:16:31 1993 david d `zoo' zuhn (zoo@rtl.cygnus.com)
-
- * config.shared (SUBDIRS): only recurse if the directory is configured
-
-Wed Aug 25 12:56:12 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * config/{hpux.mt, isc.mt, sco4.mt}:
- Moved from ../libg++/config (since they affect _G_config.h).
- * configure.in: Set target_make_frag to one of the above files.
-
-Fri Aug 20 00:53:14 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * iofopen.c (iofopen): Fix type passed to _IO_un_link().
- * Makefile.in (_G_config.h): Pass $CC (not $CXX) as CC.
-
- * configure.in (configdirs): Add dbz and stdio.
- * fileops.c (_IO_file_seekoff): Convert more old functionality.
- * iofdopen.c: Use mode parameter to set _flags.
- * iofscanf.c, ioputs.c, ioscanf.c, iosprintf.c: New files.
- * Makefile.in (IO_OBJECTS): Added new objects.
- * iostdio.h: Add feof. fscanf, puts, sprintf, vsprintf.
- * libio.h: Add _IO_vprintf macro.
- * iofopen.c: Invoke _IO_un_link if failure.
- * iovsprintf.c: Write terminating NUL.
-
- * libioP.h: Add COERCE_FILE macro (by default does nothing).
- * iofclose.c, iofflush.c, iofgets.c, iofprintf.c, iofputs.c,
- iofread.c, ioftell.c, iofwrite.c, iosetbuf.c, iosetvbuf.c:
- Invoke COERCE_FILE macro.
- * ioftell.c: Use _IO_seekoff.
-
-Wed Aug 18 22:49:56 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * sbform.cc (streambuf::form), sbscan.cc (streambuf::scan):
- Remove cast to _IO_va_list. (Loses if array type.)
-
- * libio.h: Handle _IO_va_list for systems that need <stdarg.h>.
- * floatconv.h: Fix typo (reported by H.J.Lu).
-
-Wed Aug 18 19:34:04 1993 david d `zoo' zuhn (zoo@rtl.cygnus.com)
-
- * configure.in (INSTALLDIR): handle native vs. cross case
-
- * Makefile.in (install): don't use $TARGETLIB, set INSTALLDIR to
- $(libdir)
-
-Wed Aug 18 12:10:03 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * Makefile.in: Rename iostream-files to iostream.list.
- * configure.in: Add iostream.list to MOSTLYCLEAN.
-
-Tue Aug 17 18:56:59 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * Makefile.in: Depend on _G_config.h where appropriate.
- * config.shared (CXXINCLUDES): If doing libg++, search ../libio.
-
-Tue Aug 17 17:34:24 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- New directory. Based on old libg++/iostream code,
- but extensively re-written.
diff --git a/contrib/libio/Makefile.in b/contrib/libio/Makefile.in
deleted file mode 100644
index 1d4123b523c3..000000000000
--- a/contrib/libio/Makefile.in
+++ /dev/null
@@ -1,137 +0,0 @@
-# Copyright (C) 1993, 1995, 1996, 1997, 1998 Free Software Foundation
-#
-# This file is part of the GNU IO Library. This library is free
-# software; you can redistribute it and/or modify it under the
-# terms of the GNU General Public License as published by the
-# Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this library; see the file COPYING. If not, write to the Free
-# Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-srcdir = .
-
-VERSION = 2.8.0
-# The config file (overriden by Linux).
-_G_CONFIG_H=_G_config.h
-tooldir = $(exec_prefix)/$(target)
-INSTALLDIR = $(libdir)
-gxx_include_dir=${includedir}/g++
-
-IO_OBJECTS = filedoalloc.o floatconv.o genops.o fileops.o \
- iovfprintf.o \
- iovfscanf.o ioignore.o iopadn.o \
- iofgetpos.o iofread.o iofscanf.o \
- iofsetpos.o iogetdelim.o iogetline.o \
- ioprintf.o ioseekoff.o ioseekpos.o \
- outfloat.o strops.o iofclose.o iopopen.o ioungetc.o peekc.o iogetc.o \
- ioputc.o iofeof.o ioferror.o
-
-STDIO_OBJECTS = stdfiles.o
-
-# These emulate stdio functionality, but with a different name (_IO_ungetc
-# instead of ungetc), and using _IO_FILE instead of FILE.
-# They are not needed for C++ iostream, nor stdio, though some stdio
-# files are build using the same source files (see stdio/configure.in).
-# They are needed for iostdio.h. They are needed under Linux to avoid
-# version incompatibility problems with the C library.
-# iofclose.o is not here, because it is needed for stdio (by pclose).
-STDIO_WRAP_OBJECTS = iofdopen.o iofflush.o iofgets.o iofopen.o iofprintf.o iofputs.o iofwrite.o \
- iogets.o ioperror.o ioputs.o ioscanf.o iosetbuffer.o iosetvbuf.o \
- iosprintf.o iosscanf.o ioftell.o iovsscanf.o iovsprintf.o
-
-IOSTREAM_OBJECTS = builtinbuf.o filebuf.o fstream.o \
- indstream.o ioassign.o ioextend.o iomanip.o iostream.o \
- isgetline.o isgetsb.o isscan.o \
- osform.o procbuf.o sbform.o sbgetline.o sbscan.o \
- stdiostream.o stdstrbufs.o stdstreams.o stream.o streambuf.o strstream.o \
- PlotFile.o SFile.o parsestream.o pfstream.o editbuf.o
-
-# These files define _IO_read etc, which are just wrappers for read(2) etc.
-# They need to be changed to use name-space-clean (e.g. __read) versions
-# for each specific libc.
-OSPRIM_OBJECTS = ioprims.o iostrerror.o cleanup.o
-
-LIBIOSTREAM_OBJECTS = $(IO_OBJECTS) $(IOSTREAM_OBJECTS) $(OSPRIM_OBJECTS)
-LIBIO_OBJECTS = $(IO_OBJECTS) $(STDIO_WRAP_OBJECTS) $(OSPRIM_OBJECTS) \
- $(STDIO_OBJECTS)
-
-LIBIOSTREAM_DEP = $(LIBIOSTREAM_OBJECTS)
-LIBIOSTREAM_USE = $(LIBIOSTREAM_OBJECTS)
-
-USER_INCLUDES = *.h
-
-PICFLAG =
-
-#### package, host, target, and site dependent Makefile fragments come in here.
-##
-
-$(LIBIO_OBJECTS): $(_G_CONFIG_H)
-
-libio.a: $(_G_CONFIG_H) $(LIBIO_OBJECTS)
- -rm -rf libio.a
- $(AR) $(AR_FLAGS) libio.a $(LIBIO_OBJECTS)
- $(RANLIB) libio.a
-
-libiostream.a: $(_G_CONFIG_H) $(LIBIOSTREAM_DEP)
- -rm -rf libiostream.a
- $(AR) $(AR_FLAGS) libiostream.a $(LIBIOSTREAM_USE)
- $(RANLIB) libiostream.a
-
-test: test.o libio.a
- $(CC) $(CFLAGS) -o test test.o libio.a
-tpipe: tpipe.o libio.a
- $(CC) $(CFLAGS) -o tpipe tpipe.o libio.a
-
-iostream.list: $(_G_CONFIG_H) $(LIBIOSTREAM_DEP)
- @echo "$(LIBIOSTREAM_USE)"> iostream.list
-
-# The "pic" subdir must be created before we can put any object
-# files into it.
-$(LIBIOSTREAM_DEP) $(LIBIO_OBJECTS): stamp-picdir
-
-stmp-stdio:
- @rootme=`pwd`/ ; export rootme; cd stdio ; \
- $(MAKE) $(FLAGS_TO_PASS) stdio.list
-
-_G_config.h: ${srcdir}/gen-params
- rootme=`pwd`/ ; export rootme; \
- CC="$(CC) $(CINCLUDES)"; export CC; \
- CXX="$(CXX) $(CXXINCLUDES) $(NOSTDINC) $(CXXFLAGS)"; export CXX; \
- CONFIG_NM="$(NM)"; export CONFIG_NM; \
- $(SHELL) ${srcdir}/gen-params LIB_VERSION=$(VERSION) $(G_CONFIG_ARGS) >tmp-params.h
- mv tmp-params.h _G_config.h
-
-install:
- rootme=`pwd`/ ; export rootme ; \
- if [ -z "$(MULTISUBDIR)" ]; then \
- if [ "$(_G_CONFIG_H)" != "" ]; then \
- if [ x$(enable_version_specific_runtime_libs) = xyes ]; then \
- rm -f $(gxx_include_dir)/_G_config.h ; \
- $(INSTALL_DATA) _G_config.h $(gxx_include_dir)/_G_config.h || exit 1; \
- else \
- rm -f $(tooldir)/include/_G_config.h ; \
- $(INSTALL_DATA) _G_config.h $(tooldir)/include/_G_config.h || exit 1; \
- fi; \
- else true; \
- fi ; \
- cd $(srcdir); \
- for FILE in $(USER_INCLUDES); do if [ $$FILE != _G_config.h ]; then \
- rm -f $(gxx_include_dir)/$$FILE ; \
- $(INSTALL_DATA) $$FILE $(gxx_include_dir)/$$FILE ; \
- chmod a-x $(gxx_include_dir)/$$FILE ; \
- else true; fi; done ; \
- else true; \
- fi
- @rootme=`pwd`/ ; export rootme ; \
- $(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=install
-
-c++clean:
- rm -rf $(IOSTREAM_OBJECTS)
- @$(MAKE) $(FLAGS_TO_PASS) "DODIRS=tests" DO=clean subdir_do
diff --git a/contrib/libio/NEWS b/contrib/libio/NEWS
deleted file mode 100644
index 1f3b7781e226..000000000000
--- a/contrib/libio/NEWS
+++ /dev/null
@@ -1,57 +0,0 @@
-*** Major changes in libio for egcs:
-
-* Better support for Linux.
-
-* Dejagnu testsuite.
-
-*** Major changes in libio version 2.7.0:
-
-* The data representations of _IO_FILE and streambufs have been modified.
- The layout of the jump-table table _IO_jumps_t has been re-arranged
- to match that of a virtual function table of a streambuf. Therefore,
- we no longer need a separate _IO_FILE::_jumps pointer; instead it can
- be shared with the virtual function table pointer. In addition to
- saving space, this also removes the overhead when double indirection
- was needed, and there are many simplificatons (e.g. we no longer need
- the builtinbuf class.
-
-* The streambuf::uflow virtual has been added, to match the standard.
-
-* The ifstream, ofstream, and fstream classes now include the filebuf
- as a member, rather than being pointed to it. Various related changes.
-
-* Version number changed to generally follow libg++ (and gcc).
-
-*** Major changes in libio version 0.66 (released with libg++ 2.6.1):
-
-* Some documentation and an example in iostream.texi on how to derive
- your own class from streambuf.
-
-* New functions added to stdio: getline, detdelim, snprintf, vsnprintf.
- This is for compatibility with the GNU C library.
-
-*** Major changes in libio version 0.65 (released with libg++ 2.6):
-
-* _IO_getline and streambuf::sgetline no longer write a '\0' at the end.
-
-* A number of improvements to get closer to the ANSI/ISO C++ working
-paper, such as:
-- Added (preliminary support for) new ANSI streambuf::uflow virtual.
-- Added istdiostream and ostdiostream classes.
-- Added ostream::operator<<(bool) and istream::operator>>(bool&).
-
-* More robust (and faster) initialization and cleanup of standard streambufs.
-
-* Many small bug fixes, portability improvements, and random enhancements.
-
-*** Major changes in libio version 0.63 (released with libg++ 2.5.3):
-
-* There is a g++ bug that causes inconsistent name mangling for the
-assembler name of the virtual function table for the istream class.
-A work-around has been put into streambuf.h, which will make g++
-always do the right thing. Note that this may require you to
-recompile programs that were incorrectly compiled by g++.
-
-* Functions that do printf-style formatting to the unbuffered
-streams have been optimized to write to a temporary buffer.
-
diff --git a/contrib/libio/PlotFile.cc b/contrib/libio/PlotFile.cc
deleted file mode 100644
index 98b2d839555d..000000000000
--- a/contrib/libio/PlotFile.cc
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-// This may look like C code, but it is really -*- C++ -*-
-/*
-Copyright (C) 1988, 1992, 1993 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
- converted to use iostream library by Per Bothner (bothner@cygnus.com)
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with GCC to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <PlotFile.h>
-
-/*
- PlotFile implementation module
-*/
-
-
-PlotFile& PlotFile:: cmd(char c)
-{
- ofstream::put(c);
- return *this;
-}
-
-PlotFile& PlotFile:: operator<<(const int x)
-{
-#if defined(convex)
- ofstream::put((char)(x>>8));
- ofstream::put((char)(x&0377));
-#else
- ofstream::put((char)(x&0377));
- ofstream::put((char)(x>>8));
-#endif
- return *this;
-}
-
-PlotFile& PlotFile:: operator<<(const char *s)
-{
- *(ofstream*)this << s;
- return *this;
-}
-
-
-PlotFile& PlotFile:: arc(const int xi, const int yi,
- const int x0, const int y0,
- const int x1, const int y1)
-{
- return cmd('a') << xi << yi << x0 << y0 << x1 << y1;
-}
-
-
-PlotFile& PlotFile:: box(const int x0, const int y0,
- const int x1, const int y1)
-{
- line(x0, y0, x0, y1);
- line(x0, y1, x1, y1);
- line(x1, y1, x1, y0);
- return line(x1, y0, x0, y0);
-}
-
-PlotFile& PlotFile:: circle(const int x, const int y, const int r)
-{
- return cmd('c') << x << y << r;
-}
-
-PlotFile& PlotFile:: cont(const int xi, const int yi)
-{
- return cmd('n') << xi << yi;
-}
-
-PlotFile& PlotFile:: dot(const int xi, const int yi, const int dx,
- int n, const int* pat)
-{
- cmd('d') << xi << yi << dx << n;
- while (n-- > 0) *this << *pat++;
- return *this;
-}
-
-PlotFile& PlotFile:: erase()
-{
- return cmd('e');
-}
-
-PlotFile& PlotFile:: label(const char* s)
-{
- return cmd('t') << s << "\n";
-}
-
-PlotFile& PlotFile:: line(const int x0, const int y0,
- const int x1, const int y1)
-{
- return cmd('l') << x0 << y0 << x1 << y1;
-}
-
-PlotFile& PlotFile:: linemod(const char* s)
-{
- return cmd('f') << s << "\n";
-}
-
-PlotFile& PlotFile:: move(const int xi, const int yi)
-{
- return cmd('m') << xi << yi;
-}
-
-PlotFile& PlotFile:: point(const int xi, const int yi)
-{
- return cmd('p') << xi << yi;
-}
-
-PlotFile& PlotFile:: space(const int x0, const int y0,
- const int x1, const int y1)
-{
- return cmd('s') << x0 << y0 << x1 << y1;
-}
diff --git a/contrib/libio/PlotFile.h b/contrib/libio/PlotFile.h
deleted file mode 100644
index 82b08bc4681c..000000000000
--- a/contrib/libio/PlotFile.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-/*
- a very simple implementation of a class to output unix "plot"
- format plotter files. See corresponding unix man pages for
- more details.
-
- written by Doug Lea (dl@rocky.oswego.edu)
- converted to use iostream library by Per Bothner (bothner@cygnus.com)
-*/
-
-#ifndef _PlotFile_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _PlotFile_h
-
-#include <fstream.h>
-
-/*
- Some plot libraries have the `box' command to draw boxes. Some don't.
- `box' is included here via moves & lines to allow both possiblilties.
-*/
-
-extern "C++" {
-class PlotFile : public ofstream
-{
-protected:
- PlotFile& cmd(char c);
- PlotFile& operator << (const int x);
- PlotFile& operator << (const char *s);
-
-public:
-
- PlotFile() : ofstream() { }
- PlotFile(int fd) : ofstream(fd) { }
- PlotFile(const char *name, int mode=ios::out, int prot=0664)
- : ofstream(name, mode, prot) { }
-
-// PlotFile& remove() { ofstream::remove(); return *this; }
-
-// int filedesc() { return ofstream::filedesc(); }
-// const char* name() { return File::name(); }
-// void setname(const char* newname) { File::setname(newname); }
-// int iocount() { return File::iocount(); }
-
- PlotFile& arc(const int xi, const int yi,
- const int x0, const int y0,
- const int x1, const int y1);
- PlotFile& box(const int x0, const int y0,
- const int x1, const int y1);
- PlotFile& circle(const int x, const int y, const int r);
- PlotFile& cont(const int xi, const int yi);
- PlotFile& dot(const int xi, const int yi, const int dx,
- int n, const int* pat);
- PlotFile& erase();
- PlotFile& label(const char* s);
- PlotFile& line(const int x0, const int y0,
- const int x1, const int y1);
- PlotFile& linemod(const char* s);
- PlotFile& move(const int xi, const int yi);
- PlotFile& point(const int xi, const int yi);
- PlotFile& space(const int x0, const int y0,
- const int x1, const int y1);
-};
-} // extern "C++"
-#endif
diff --git a/contrib/libio/README b/contrib/libio/README
deleted file mode 100644
index c2d564965ca4..000000000000
--- a/contrib/libio/README
+++ /dev/null
@@ -1,30 +0,0 @@
-This is libio, the GNU C/C++ input/output library.
-
-By default, the library is configured to build the C++ iostream
-facility (in $libdir/libiostream.a).
-
-The library can be configured to build the C stdio facility
-that is part of a C run-time library.
-
-This library is distributed with libg++; see ../libg++/README
-for installation instructions, and where to send bug reports
-and questions.
-
-* Copyright restrictions
-
-The files in this directory are generally covered by the GNU Public
-License (which is in the file ../COPYING), but modified with the
-following:
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does not cause
- the resulting executable to be covered by the GNU General Public License.
- This exception does not however invalidate any other reasons why
- the executable file might be covered by the GNU General Public License.
-
-A few source files and subroutines are covered by other (but
-less restrictive) copyright conditions. E.g. some code (such
-as iovfprintf.c) is based on software that was developed by the
-University of California, Berkeley, for the Berkeley Software
-Distribution (BSD-4.4), and bears their copyright; and one
-file (floatconv.c) is derived from ("free") code copyrighted AT&T.
diff --git a/contrib/libio/SFile.cc b/contrib/libio/SFile.cc
deleted file mode 100644
index e5daa645695e..000000000000
--- a/contrib/libio/SFile.cc
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-/*
-Copyright (C) 1988 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU C++ Library. This library is free
-software; you can redistribute it and/or modify it under the terms of
-the GNU Library General Public License as published by the Free
-Software Foundation; either version 2 of the License, or (at your
-option) any later version. This library is distributed in the hope
-that it will be useful, but WITHOUT ANY WARRANTY; without even the
-implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU Library General Public License for more details.
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include <SFile.h>
-
-SFile::SFile(const char *filename, int size, int mode, int prot)
-: fstream(filename, mode, prot)
-{
- sz = size;
-}
-
-SFile::SFile(int fd, int size)
-: fstream(fd)
-{
- sz = size;
-}
-
-void SFile::open(const char *name, int size, int mode, int prot)
-{
- fstream::open(name, mode, prot);
- sz = size;
-}
-
-SFile& SFile::get(void* x)
-{
- read(x, sz);
- return *this;
-}
-
-SFile& SFile::put(void* x)
-{
- write(x, sz);
- return *this;
-}
-
-SFile& SFile::operator[](long i)
-{
- if (rdbuf()->pubseekoff(i * sz, ios::beg) == EOF)
- set(ios::badbit);
- return *this;
-}
diff --git a/contrib/libio/SFile.h b/contrib/libio/SFile.h
deleted file mode 100644
index f07277cee49f..000000000000
--- a/contrib/libio/SFile.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1988, 1992, 1993 Free Software Foundation
- written by Doug Lea (dl@rocky.oswego.edu)
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#ifndef _SFile_h
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _SFile_h 1
-
-#include <fstream.h>
-
-extern "C++" {
-class SFile: public fstream
-{
- protected:
- int sz; // unit size for structured binary IO
-
-public:
- SFile() : fstream() { }
- SFile(int fd, int size);
- SFile(const char *name, int size, int mode, int prot=0664);
- void open(const char *name, int size, int mode, int prot=0664);
-
- int size() { return sz; }
- int setsize(int s) { int old = sz; sz = s; return old; }
-
- SFile& get(void* x);
- SFile& put(void* x);
- SFile& operator[](long i);
-};
-} // extern "C++"
-
-#endif
diff --git a/contrib/libio/builtinbuf.cc b/contrib/libio/builtinbuf.cc
deleted file mode 100644
index 05e65a5c371b..000000000000
--- a/contrib/libio/builtinbuf.cc
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#ifdef __GNUC__
-#pragma implementation
-#endif
-#define _STREAM_COMPAT
-#include "builtinbuf.h"
-#include "iostreamP.h"
-#if !_IO_UNIFIED_JUMPTABLES
-int builtinbuf::overflow(int ch) { return _IO_OVERFLOW (this, ch); }
-
-int builtinbuf::underflow() { return _IO_UNDERFLOW (this); }
-
-streamsize builtinbuf::xsgetn(char* buf, streamsize n)
-{ return _IO_XSGETN (this, buf, n); }
-
-streamsize builtinbuf::xsputn(const char* buf, streamsize n)
-{ return _IO_XSPUTN (this, buf, n); }
-
-int builtinbuf::doallocate() { return _IO_DOALLOCATE (this); }
-
-builtinbuf::~builtinbuf() { _IO_FINISH (this); }
-
-int builtinbuf::sync() { return _IO_SYNC (this); }
-
-streambuf* builtinbuf::setbuf(char *buf, int n)
-{ return (streambuf*)_IO_SETBUF (this, buf, n); }
-
-streampos builtinbuf::seekoff(streamoff off, _seek_dir dir, int mode)
-{
- return _IO_SEEKOFF (this, off, dir, mode);
-}
-
-streampos builtinbuf::seekpos(streampos pos, int mode)
-{
- return _IO_SEEKPOS (this, pos, mode);
-}
-
-int builtinbuf::pbackfail(int c)
-{ return _IO_PBACKFAIL (this, c); }
-
-streamsize builtinbuf::sys_read(char* buf, streamsize size)
-{ return _IO_SYSREAD (this, buf, size); }
-
-streampos builtinbuf::sys_seek(streamoff off, _seek_dir dir)
-{ return _IO_SYSSEEK (this, off, dir); }
-
-streamsize builtinbuf::sys_write(const char* buf, streamsize size)
-{ return _IO_SYSWRITE (this, buf, size); }
-
-int builtinbuf::sys_stat(void* buf) // Actually, a (struct stat*)
-{ return _IO_SYSSTAT (this, buf); }
-
-int builtinbuf::sys_close()
-{ return _IO_SYSCLOSE (this); }
-#endif
diff --git a/contrib/libio/builtinbuf.h b/contrib/libio/builtinbuf.h
deleted file mode 100644
index 3aa4c37a654f..000000000000
--- a/contrib/libio/builtinbuf.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#ifndef _BUILTINBUF_H
-#define _BUILTINBUF_H
-
-#ifdef __GNUC__
-#pragma interface
-#endif
-
-#include <streambuf.h>
-
-#if !_IO_UNIFIED_JUMPTABLES
-// A builtinbuf is a streambuf where all the virtual operations
-// call the _IO_jump_t table.
-
-extern "C++" {
-class builtinbuf : public streambuf {
- friend ios;
- virtual int overflow(int);
- virtual int underflow();
- virtual streamsize xsgetn(char *, streamsize);
- virtual streamsize xsputn(const char *, streamsize);
- virtual streambuf* setbuf(char*, int);
- virtual int doallocate();
- virtual ~builtinbuf();
- virtual int sync();
-
- virtual streampos seekoff(streamoff, _seek_dir, int mode=ios::in|ios::out);
- virtual streampos seekpos(streampos pos, int mode = ios::in|ios::out);
- virtual int pbackfail(int c);
- virtual streamsize sys_read(char* buf, streamsize size);
- virtual streampos sys_seek(streamoff, _seek_dir);
- virtual streamsize sys_write(const char*, streamsize);
- virtual int sys_stat(void*); // Actually, a (struct stat*)
- virtual int sys_close();
-#if 0
- virtual int get_column();
- virtual int set_column(int);
-#endif
- private:
- builtinbuf() { }
-};
-} // extern "C++"
-#endif
-
-#endif /* _BUILTINBUF_H */
diff --git a/contrib/libio/cleanup.c b/contrib/libio/cleanup.c
deleted file mode 100644
index 691fa838b26a..000000000000
--- a/contrib/libio/cleanup.c
+++ /dev/null
@@ -1,17 +0,0 @@
-#include "libioP.h"
-#if _G_HAVE_ATEXIT
-#include <stdlib.h>
-
-typedef void (*voidfunc) __P((void));
-
-static void
-_IO_register_cleanup ()
-{
- atexit ((voidfunc)_IO_cleanup);
- _IO_cleanup_registration_needed = 0;
-}
-
-void (*_IO_cleanup_registration_needed)() = _IO_register_cleanup;
-#else
-void (*_IO_cleanup_registration_needed)() = NULL;
-#endif /* _G_HAVE_ATEXIT */
diff --git a/contrib/libio/config.shared b/contrib/libio/config.shared
deleted file mode 100644
index 6cda566eb7bd..000000000000
--- a/contrib/libio/config.shared
+++ /dev/null
@@ -1,499 +0,0 @@
-# Copyright (C) 1993, 1995, 1997, 1998 Free Software Foundation
-#
-# This file is part of the GNU IO Library. This library is free
-# software; you can redistribute it and/or modify it under the
-# terms of the GNU General Public License as published by the
-# Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# 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. */
-
-# File descriptor usage:
-# 1: All macros which need to be re-definable by any target fragments
-# 2: All generic rules; especially those which use re-defined macros, e.g. _G_CONFIG_H!
-
-# Significant variables:
-
-# Note that TO_TOPDIR does *not* include multilib.
-test -z "${TO_TOPDIR}" && TO_TOPDIR=${TOLIBGXX}../
-# Native configurations build target libraries in directories at the same
-# level as the rest of the tree. Cross configurations build target libraries
-# one level deeper. TO_REAL_TOPDIR accounts for this.
-# Obviously, TO_REAL_TOPDIR can only be used in the build tree.
-if [ "${with_target_subdir}" != "." ] ; then
- TO_REAL_TOPDIR="${TO_TOPDIR}../"
-else
- TO_REAL_TOPDIR="${TO_TOPDIR}"
-fi
-DOING_LIBGXX=${DOING_LIBGXX-false}
-THIS_FILE="${srcdir}/${TOLIBIO}config.shared"
-
-echo "# Start of package fragment generated by ${THIS_FILE}."
-echo ""
-echo >&2 "# Start of package rules fragment generated by ${THIS_FILE}."
-echo >&2 ""
-
-# Multilib support.
-echo 'MULTISRCTOP ='
-echo 'MULTIBUILDTOP ='
-echo 'MULTIDIRS ='
-echo 'MULTISUBDIR ='
-echo 'MULTIDO = true'
-echo 'MULTICLEAN = true'
-echo ''
-
-# TOLIBGXX
-# MOSTLYCLEAN
-# CLEAN
-# DISTCLEAN
-# REALCLEAN
-# SUBDIRS [defaults to (configdirs)]
-# INFO_FILES List of (basenames of) texinfo files
-# INFO_SUBDIRS [default: empty] sub-directories containing documentation
-
-# ??? This doesn't appear to be used by us or any of our callers.
-# Note that all uses in this file are single-quoted.
-rootme=${rootme-`pwd`}
-
-# libg++ uses the convention that $rootme includes a trailing '/'.
-# We use that in the definition of TOPDIR. $rootme is either empty
-# or an absolute pathname to the current directory (with trailing '/').
-TOPDIR=${TOPDIR-'$${rootme}$(MULTIBUILDTOP)'${TO_REAL_TOPDIR}}
-echo '#' TOPDIR="${TOPDIR} invsubdir=${invsubdir} subdir=${subdir}"
-SUBDIRS=${SUBDIRS-${configdirs}}
-CHECK_SUBDIRS=${CHECK_SUBDIRS-${SUBDIRS}}
-
-echo "srcdir = ${srcdir}"
-echo "SUBDIRS = ${SUBDIRS}"
-echo "CHECK_SUBDIRS = ${CHECK_SUBDIRS}"
-
-echo "prefix = ${prefix-/usr/local}"
-echo "exec_prefix = ${exec_prefix-'${prefix}'}"
-
-echo 'bindir = $(exec_prefix)/bin'
-echo 'libdir = $(exec_prefix)/lib'
-echo 'libsubdir = $(libdir)/gcc-lib/$(target_alias)/$(gcc_version)'
-
-echo 'datadir = $(prefix)/lib'
-echo 'mandir = $(prefix)/man'
-echo 'man1dir = $(mandir)/man1'
-echo 'man2dir = $(mandir)/man2'
-echo 'man3dir = $(mandir)/man3'
-echo 'man4dir = $(mandir)/man4'
-echo 'man5dir = $(mandir)/man5'
-echo 'man6dir = $(mandir)/man6'
-echo 'man7dir = $(mandir)/man7'
-echo 'man8dir = $(mandir)/man8'
-echo 'man9dir = $(mandir)/man9'
-
-echo 'infodir = $(prefix)/info'
-echo 'includedir = $(prefix)/include'
-echo 'docdir = $(datadir)/doc'
-echo ''
-echo 'SHELL = /bin/sh'
-echo ''
-case "$srcdir" in
- /*) echo 'INSTALL = $(srcdir)'/"${TO_TOPDIR}install-sh -c" ;;
- .) echo 'INSTALL = $${rootme}'"${with_multisrctop}${TO_REAL_TOPDIR}install-sh -c" ;;
- *) echo 'INSTALL = $${rootme}$(srcdir)'/"${TO_TOPDIR}install-sh -c" ;;
-esac
-echo 'INSTALL_PROGRAM = $(INSTALL)'
-echo 'INSTALL_DATA = $(INSTALL)'
-echo ''
-echo 'AR = `if [ -f' ${TOPDIR}'binutils/ar ] ; \'
-echo " then echo ${TOPDIR}binutils/ar ; "'\'
-echo ' else echo ar ; fi`'
-echo 'AR_FLAGS = rc'
-echo 'RANLIB = `if [ -f' ${TOPDIR}'binutils/ranlib ] ; \'
-echo ' then echo '${TOPDIR}'binutils/ranlib ; \'
-echo ' else echo ranlib ; fi`'
-echo 'NM = `if [ -f' ${TOPDIR}'binutils/nm.new ] ; \'
-echo ' then echo '${TOPDIR}'binutils/nm.new ; \'
-echo ' else echo nm ; fi`'
-echo 'NLMCONV = `if [ -f' ${TOPDIR}'binutils/nlmconv ] ; \'
-echo ' then echo '${TOPDIR}'binutils/nlmconv ; \'
-echo ' else echo nlmconv ; fi`'
-echo 'LD = `if [ -f' ${TOPDIR}'ld/ld.new ] ; \'
-echo ' then echo '${TOPDIR}'ld/ld.new ; \'
-echo ' else echo ld ; fi`'
-echo ''
-echo 'MAKEINFO = `if [ -f '${TOPDIR}'texinfo/C/makeinfo ] ; \'
-echo ' then echo '${TOPDIR}'texinfo/C/makeinfo ; \'
-echo ' else echo makeinfo ; fi`'
-case "$srcdir" in
- .) echo 'TEXIDIR = '"${with_multisrctop}${TO_REAL_TOPDIR}texinfo" ;;
- *) echo 'TEXIDIR = $(srcdir)'/"${TO_TOPDIR}texinfo" ;;
-esac
-echo 'TEXI2DVI = TEXINPUTS=${TEXIDIR}:$$TEXINPUTS texi2dvi'
-echo ''
-echo 'CC = cc'
-echo 'CXX = gcc'
-echo ''
-# FIXME!!!
-if true ; then
- echo 'WRAP_C_INCLUDES ='
-else
- echo 'WRAP_C_INCLUDES = -I$(srcdir)'/${TOLIBGXX}g++-include
-fi
-echo 'CFLAGS = -g'
-echo 'CXXFLAGS = -g -O'
-echo 'LIBCFLAGS = $(CFLAGS)'
-echo 'LIBCXXFLAGS = $(CXXFLAGS) -fno-implicit-templates'
-if [ "${LIBDIR}" = "yes" ]; then
- echo 'PICDIR = stamp-picdir'
-else
- echo 'PICDIR = '
-fi
-
-if test "${DOING_LIBGXX}" = "true" ; then
- echo "TOLIBGXX = ${TOLIBGXX}"
- echo 'PROTODIR = $(srcdir)'/${TOLIBGXX}src/gen
- echo "LIBS = -L./${TOLIBGXX} -L./${TOLIBGXX}../libstdc++ -lg++ -lstdc++"
-
- # You can override iostream (e.g. in a site- or host-Makefile fragment) to:
- # iostream (Normal iostream library)
- # old-stream (Old stream library; no longer supported)
- # no-stream (If you don't want iostream to be part of libg++)
- echo 'IO_DIR = ../libio'
- echo '# IO_DIR = no-stream'
-elif test "${DOING_GPERF}" = "true" ; then
- echo "IO_DIR = libio"
- echo "LIBS = -L${TO_TOPDIR}libstdc++ -lstdc++"
-fi
-
-if [ -z "${ALL}" ] ; then
- if [ -n "${TARGETLIB}" ] ; then
- ALL='$(TARGETLIB)'
- echo "TARGETLIB = ${TARGETLIB}"
- elif [ -n "${TARGETPROG}" ] ; then
- ALL='${TARGETPROG}'
- echo "TARGETPROG = ${TARGETPROG}"
- else
- echo "config error: neither ALL, TARGETLIB or TARGETPROG is defined" 1>&2
- fi
-fi
-
-echo >&2 "all: ${ALL} multi-all"
-if [ "${SUBDIRS}" != "" ] ; then
- echo >&2 ' @rootme=`pwd`/; export rootme; \'
- echo >&2 ' $(MAKE) "DODIRS=$(SUBDIRS)" DO=all $(FLAGS_TO_PASS) subdir_do'
-fi
-if [ "${LIBDIR}" = "yes" ]; then
- echo >&2 "${ALL} "'multi-all: $(PICDIR)'
-fi
-echo >&2 '.PHONY: all'
-echo >&2 ''
-
-echo >&2 '.PHONY: multi-all'
-echo >&2 'multi-all:'
-echo >&2 ' @$(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=all'
-echo >&2 ''
-
-echo >&2
-if [ "${SUBDIRS}" != "" ] ; then
- echo >&2 '.PHONY: subdir_do'
- echo >&2 'subdir_do: force'
- echo >&2 ' @rootme=`pwd`/; export rootme; \'
- echo >&2 ' for i in $(DODIRS); do \'
- echo >&2 ' if [ -f ./$$i/Makefile ] ; then \'
- echo >&2 ' echo "cd $$i; make $(DO) ..." ; \'
- echo >&2 ' (cd $$i ; $(MAKE) $(FLAGS_TO_PASS) $(DO)) || exit 1 ; \'
- echo >&2 ' else true ; fi ; \'
- echo >&2 ' done'
- echo >&2 ''
- echo >&2 '# List of variables to pass to sub-makes. This should not be needed'
- echo >&2 '# by GNU make or Sun make (both of which pass command-line variable'
- echo >&2 '# overrides thouh $(MAKE)) but may be needed by older versions.'
- echo >&2 ''
- echo >&2 'FLAGS_TO_PASS= \'
- echo >&2 ' "SHELL=$(SHELL)" \'
- echo >&2 ' "INSTALL=$(INSTALL)" \'
- echo >&2 ' "INSTALL_DATA=$(INSTALL_DATA)" \'
- echo >&2 ' "INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \'
- echo >&2 ' "prefix=$(prefix)" \'
- echo >&2 ' "exec_prefix=$(exec_prefix)" \'
- echo >&2 ' "tooldir=$(tooldir)" \'
- echo >&2 ' "gxx_include_dir=$(gxx_include_dir)" \'
- echo >&2 ' "libsubdir=$(libsubdir)" \'
- echo >&2 ' "gcc_version=$(gcc_version)" \'
- echo >&2 ' "gcc_version_trigger=$(gcc_version_trigger)" \'
- echo >&2 ' "AR=$(AR)" \'
- echo >&2 ' "AR_FLAGS=$(AR_FLAGS)" \'
- echo >&2 ' "CC=$(CC)" \'
- echo >&2 ' "CXX=$(CXX)" \'
- echo >&2 ' "CFLAGS=$(CFLAGS)" \'
- echo >&2 ' "CXXFLAGS=$(CXXFLAGS)" \'
- echo >&2 ' "NM=$(NM)" \'
- echo >&2 ' "RANLIB=$(RANLIB)" \'
- echo >&2 ' "LIBCFLAGS=$(LIBCFLAGS)" \'
- echo >&2 ' "LIBCXXFLAGS=$(LIBCXXFLAGS)" \'
- echo >&2 ' "LOADLIBES=$(LOADLIBES)" \'
- echo >&2 ' "LDFLAGS=$(LDFLAGS)" \'
- echo >&2 ' "MAKEINFO=$(MAKEINFO)" \'
- echo >&2 ' "SHLIB=$(SHLIB)" \'
- echo >&2 ' "SHCURSES=$(SHCURSES)" \'
- echo >&2 ' "RUNTESTFLAGS=$(RUNTESTFLAGS)"'
-fi
-
-echo >&2 'NOSTDINC = -nostdinc++'
-if test -n "${XCXXINCLUDES}" ; then
- echo >&2 "CXXINCLUDES = ${XCXXINCLUDES} "'$(NOSTDINC)'
-elif test "${DOING_LIBGXX}" = "true" ; then
- echo >&2 'CXXINCLUDES = $(NOSTDINC) -I. -I'"${TO_TOPDIR}libio"' -I$(srcdir) -I$(srcdir)/'"${TOLIBGXX}"'$(IO_DIR) -I$(srcdir)/'"${TOLIBGXX}"'../libstdc++ -I$(srcdir)/'"${TOLIBGXX}src"' '"${host_includes}"' $(WRAP_C_INCLUDES)'
-fi
-if test -n "${XCINCLUDES}" ; then
- echo >&2 "CINCLUDES = ${XCINCLUDES}"
-elif test "${DOING_LIBGXX}" = "true" ; then
- echo >&2 'CINCLUDES ='
-fi
-
-if [ "${LIBDIR}" = "yes" ]; then
- echo >&2 'XCFLAGS = $(LIBCFLAGS)'
- echo >&2 'XCXXFLAGS = $(LIBCXXFLAGS)'
-else
- echo >&2 'XCFLAGS = $(CFLAGS)'
- echo >&2 'XCXXFLAGS = $(CXXFLAGS)'
-fi
-
-echo >&2 '.SUFFIXES: .o .C .cc .c'
-echo >&2 'COMPILE.c = $(CC) -c $(XCFLAGS) $(CINCLUDES) $(MT_CFLAGS)'
-echo >&2 '.c.o:'
-if [ "${LIBDIR}" = "yes" ]; then
-echo >&2 ' test x"$(enable_shared)" != xyes ||\'
-echo >&2 ' $(COMPILE.c) $(PICFLAG) $< -o pic/$@'
-fi
-echo >&2 ' $(COMPILE.c) $<'
-[ "${TOUCH_ON_COMPILE}" = "yes" ] && echo >&2 ' @touch stamp'
-echo >&2 'COMPILE.cc = $(CXX) -c $(XCXXFLAGS) $(CXXINCLUDES) $(MT_CFLAGS)'
-echo >&2 '.C.o:'
-if [ "${LIBDIR}" = "yes" ]; then
-echo >&2 ' test x"$(enable_shared)" != xyes ||\'
-echo >&2 ' $(COMPILE.cc) $(PICFLAG) $< -o pic/$@'
-fi
-echo >&2 ' $(COMPILE.cc) $<'
-[ "${TOUCH_ON_COMPILE}" = "yes" ] && echo >&2 ' @touch stamp'
-echo >&2 '.cc.o:'
-if [ "${LIBDIR}" = "yes" ]; then
-echo >&2 ' test x"$(enable_shared)" != xyes || \'
-echo >&2 ' $(COMPILE.cc) $(PICFLAG) $< -o pic/$@'
-fi
-echo >&2 ' $(COMPILE.cc) $<'
-[ "${TOUCH_ON_COMPILE}" = "yes" ] && echo >&2 ' @touch stamp'
-echo >&2 ''
-
-if [ -n "${TARGETLIB}" ] ; then
- echo TARGETLIB = ${TARGETLIB}
-fi
-if [ -n "${TARGETPROG}" ] ; then
- echo TARGETPROG = ${TARGETPROG}
-fi
-
-if [ "${LIBDIR}" = "yes" ]; then
- echo >&2 ''
- echo >&2 'stamp-picdir:'
- echo >&2 ' if [ x"$(enable_shared)" = xyes ] && [ ! -d pic ]; then \'
- echo >&2 ' mkdir pic; \'
- echo >&2 ' else true; fi'
- echo >&2 ' touch stamp-picdir'
-fi
-
-echo >&2 ''
-echo >&2 '.PHONY: install'
-echo >&2 'install:'
-echo >&2 '.PHONY: check'
-if [ "${CHECK}" != "check" ] ; then
- echo >&2 "check: ${ALL} ${CHECK}"
- if [ "${CHECK_SUBDIRS}" != "" ] ; then
- echo >&2 ' rootme=`pwd`/; export rootme; \'
- echo >&2 ' SAVE_LLPATH="$${SAVE_LLPATH-$$LD_LIBRARY_PATH}"; export SAVE_LLPATH; \'
- echo >&2 ' LD_LIBRARY_PATH="$${rootme}${TOLIBGXX}../libstdc++:$${rootme}${TOLIBGXX}../libg++:$$SAVE_LLPATH"; \'
- echo >&2 ' export LD_LIBRARY_PATH; \'
- echo >&2 ' $(MAKE) "DODIRS=$(CHECK_SUBDIRS)" DO=check $(FLAGS_TO_PASS) subdir_do'
- fi
-fi
-
-# Generate rules for documentation (depending on INFO_FILES and INFO_SUBDIRS).
-
-echo >&2 '.PHONY: info dvi install-info clean-info'
-
-# emit the rule for 'info'
-# (Note that the top-level ../Makefile.in greps for '^info:' when making
-# a release (in "make taz"), so don't break that!)
-if [ -z "${INFO_FILES}" ] ; then
- echo >&2 'info:'
-else
- echo >&2 info: `for file in ${INFO_FILES} ; do echo $file.info ; done`
-fi
-if [ "${INFO_SUBDIRS}" != "" ] ; then
- echo >&2 ' @rootme=`pwd`/; export rootme; \
- $(MAKE) "DODIRS='${INFO_SUBDIRS}'" DO=info $(FLAGS_TO_PASS) subdir_do'
-fi
-
-# emit the rule for 'dvi'
-if [ -z "${INFO_FILES}" ] ; then
- echo >&2 'dvi:'
-else
- echo >&2 dvi: `for file in ${INFO_FILES} ; do echo $file.dvi ; done`
-fi
-if [ "${INFO_SUBDIRS}" != "" ] ; then
- echo >&2 ' @rootme=`pwd`/; export rootme; \
- $(MAKE) "DODIRS='${INFO_SUBDIRS}'" DO=dvi $(FLAGS_TO_PASS) subdir_do'
-fi
-
-# Emit rules for each *.info and *.dvi file
-for file in ${INFO_FILES} ; do
- echo >&2 ${file}.info: '$(srcdir)'/${file}.texi
- echo >&2 ' $(MAKEINFO) -I$(srcdir) -I$(TEXIDIR) $(srcdir)/'${file}.texi -o ${file}.info
- echo >&2 ${file}.dvi: '$(srcdir)'/${file}.texi
- echo >&2 ' $(TEXI2DVI) $(srcdir)'/${file}.texi
- echo >&2 "${file}.ps: ${file}.dvi"
- echo >&2 " dvips ${file} -o"
-done
-
-# emit the rule for install-info
-echo >&2 'install-info:'
-if [ -n "${INFO_FILES}" ] ; then
- echo >&2 ' -parent=`echo $(infodir)|sed -e' "'"'s@/[^/]*$$@@'"'"'`; \'
- echo >&2 ' if [ -d $$parent ] ; then true ; else mkdir $$parent ; fi'
- echo >&2 ' -if [ -d $(infodir) ] ; then true ; else mkdir $(infodir) ; fi'
- echo >&2 ' for i in *.info* ; do \'
- echo >&2 ' $(INSTALL_DATA) $$i $(infodir)/$$i ; \'
- echo >&2 ' done'
-fi
-if [ "${INFO_SUBDIRS}" != "" ] ; then
- echo >&2 ' @rootme=`pwd`/; export rootme; \
- $(MAKE) "DODIRS='${INFO_SUBDIRS}'" DO=install-info $(FLAGS_TO_PASS) subdir_do'
-fi
-
-# emit clean-info and clean-dvi rules
-echo >&2 '.PHONY: do-clean-info clean-info do-clean-dvi clean-dvi'
-echo >&2 do-clean-info:
-if [ -n "${INFO_FILES}" ] ; then
- echo >&2 ' rm -f *.info*'
-fi
-echo >&2 'do-clean-dvi:'
-if [ -n "${INFO_FILES}" ] ; then
- echo >&2 ' rm -f *.dvi *.aux *.cp *.cps *.fn* *.ky *.log *.pg *.toc *.tp *.vr'
-fi
-for type in info dvi ; do
- echo >&2 clean-${type}: do-clean-${type}
- if [ "${INFO_SUBDIRS}" != "" ] ; then
- echo >&2 ' @rootme=`pwd`/; export rootme; \
- $(MAKE) "DODIRS='${NFO_SUBDIRS}'" DO=clean-'${type} '$(FLAGS_TO_PASS) subdir_do'
- fi
-done
-
-echo >&2 ''
-
-echo >&2 '.PHONY: boltcc'
-echo >&2 'boltcc:'
-echo >&2 ' rootme=`pwd`/ ; export rootme ; $(MAKE) $(FLAGS_TO_PASS)'
-echo >&2 ''
-
-# Emit clean rules
-
-echo >&2 ''
-echo >&2 '# clean rules'
-
-MOSTLYCLEAN="${MOSTLYCLEAN-*.o pic stamp-picdir core ${EXTRA_MOSTLYCLEAN}} `if test -n "${TOUCH_ON_COMPILE}"; then echo stamp; else true; fi`"
-CLEAN="${CLEAN-${TARGETPROG} ${TARGETLIB}}"
-DISTCLEAN="${DISTCLEAN-config.status Makefile *~ Make.pack target-mkfrag multilib.out ${EXTRA_DISTCLEAN-}}"
-REALCLEAN="${REALCLEAN-depend *.info*}"
-
-
-echo >&2 '.PHONY: mostlyclean clean distclean maintainer-clean realclean'
-if test -z "${SUBDIRS}" ; then
- echo >&2 "mostlyclean: clean-dvi"
- echo >&2 " rm -rf ${MOSTLYCLEAN}"
- echo >&2 ' @$(MULTICLEAN) multi-clean DO=mostlyclean'
- echo >&2 "clean: clean-dvi"
- echo >&2 " rm -rf ${MOSTLYCLEAN} ${CLEAN}"
- echo >&2 ' @$(MULTICLEAN) multi-clean DO=clean'
- echo >&2 "distclean: clean"
- echo >&2 ' @$(MULTICLEAN) multi-clean DO=distclean'
- echo >&2 " rm -rf ${DISTCLEAN}"
- echo >&2 "maintainer-clean realclean: clean clean-info"
- echo >&2 ' @$(MULTICLEAN) multi-clean DO=maintainer-clean'
- echo >&2 " rm -rf ${DISTCLEAN} ${REALCLEAN}"
-else
- echo >&2 '.PHONY: do-clean subdir_distclean subdir_maintainer_clean'
- echo >&2 "mostlyclean: do-clean-dvi"
- echo >&2 " rm -rf ${MOSTLYCLEAN}"
- echo >&2 ' @$(MAKE) $(FLAGS_TO_PASS) "DODIRS=$(SUBDIRS)" DO=mostlyclean subdir_do'
- echo >&2 ' @$(MULTICLEAN) multi-clean DO=mostlyclean'
- echo >&2 "do-clean: do-clean-dvi"
- echo >&2 " rm -rf ${MOSTLYCLEAN} ${CLEAN}"
- echo >&2 "clean: do-clean"
- echo >&2 ' @$(MAKE) $(FLAGS_TO_PASS) "DODIRS=$(SUBDIRS)" DO=clean subdir_do'
- echo >&2 ' @$(MULTICLEAN) multi-clean DO=clean'
- # distclean and maintainer-clean are tricky because they remove the Makefile.
- echo >&2 "subdir_distclean:"
- echo >&2 ' @$(MAKE) $(FLAGS_TO_PASS) "DODIRS=$(SUBDIRS)" DO=distclean subdir_do'
- echo >&2 "distclean: do-clean subdir_distclean"
- echo >&2 ' @$(MULTICLEAN) multi-clean DO=distclean'
- echo >&2 " rm -rf ${DISTCLEAN}"
- echo >&2 "subdir_maintainer_clean:"
- echo >&2 ' @$(MAKE) $(FLAGS_TO_PASS) "DODIRS=$(SUBDIRS)" DO=maintainer-clean subdir_do'
- echo >&2 "maintainer-clean realclean: do-clean subdir_maintainer_clean do-clean-info"
- echo >&2 ' @$(MULTICLEAN) multi-clean DO=maintainer-clean'
- echo >&2 " rm -rf ${DISTCLEAN} ${REALCLEAN}"
-fi
-
-echo >&2 ''
-echo >&2 '.PHONY: force'
-echo >&2 'force:'
-echo >&2 ''
-echo >&2 '# with the gnu make, this is done automatically.'
-echo >&2 ''
-echo >&2 'Makefile: $(srcdir)/Makefile.in $(host_makefile_frag) $(target_makefile_frag) $(gcc_version_trigger)'
-echo >&2 ' $(SHELL) ./config.status'
-echo >&2 ''
-echo >&2 '.NOEXPORT:'
-echo >&2 'MAKEOVERRIDES='
-
-cat >&2 <<"EOF"
-DEPEND_SOURCES = ${srcdir}/*.cc ${srcdir}/*.c
-depend.new:
-# The sed script below attempts to make the depend output portable.
-# It cleans up the depenency information generated by cpp.
-# It replaces instances of $(srcdir)/ by the string '$(srcdir)/'.
-# It removes remaining absolute files names (such as /usr/include/stdio.h).
-# It removes lines containing only "\\".
-# It inserts '$(MULTISRCTOP)' in '$(srcdir)/..'.
-# In order to support SunOS VPATH, $(srcdir)/[a-z]*.{c,cc} is replaced with
-# [a-z]*.{c,cc} (the directory part is removed).
-# The awk script removes a continuation marker that is followed by
-# a blank line, since that may confuse make.
- echo "# AUTOMATICALLY GENERATED BY 'make depend' - DO NOT EDIT" \
- >depend.new
- $(CXX) -M $(CXXINCLUDES) $(DEPEND_SOURCES) \
- | sed -e 's|$(srcdir)/|$$(srcdir)/|g' \
- -e 's| [^ ]*_G_config.h| $$(_G_CONFIG_H)|g' \
- -e 's| /[^ ]*||g' -e 's| libc-lock\.h||' \
- -e '/^[ ]*\\$$/d' -e 's/^[ ]*$$//' \
- | sed -e 's|$$(srcdir)/[.][.]|$$(srcdir)/$$(MULTISRCTOP)..|g' \
- -e 's|$$(srcdir)/\([^/]*[.]c\)|\1|' \
- | awk 'BEGIN { prev = "" } \
- /^( )*$$/ { if (prev ~ /\\$$/) \
- { prev = substr(prev,1,length(prev)-1); next } } \
- { print prev; prev = $$0 } \
- END { if (prev !~ /^( )*$$/) print prev }' \
- >> depend.new
-$(srcdir)/depend: depend.new
- mv depend.new $(srcdir)/depend
-EOF
-
-if [ -f ${srcdir}/${subdir}/depend ] ; then
- cat ${srcdir}/${subdir}/depend >&2
-fi
-
-echo "# End of package fragment generated by ${THIS_FILE}."
-echo >&2 "# End of package rules fragment generated by ${THIS_FILE}."
diff --git a/contrib/libio/config/hpux.mt b/contrib/libio/config/hpux.mt
deleted file mode 100644
index fc95afa64fa9..000000000000
--- a/contrib/libio/config/hpux.mt
+++ /dev/null
@@ -1,3 +0,0 @@
-# Flags to pass to gen-params when building _G_config.h.
-# For example: G_CONFIG_ARGS = size_t="unsigned long"
-G_CONFIG_ARGS = DOLLAR_IN_LABEL=1
diff --git a/contrib/libio/config/isc.mt b/contrib/libio/config/isc.mt
deleted file mode 100644
index 15cbb8c36c2e..000000000000
--- a/contrib/libio/config/isc.mt
+++ /dev/null
@@ -1,4 +0,0 @@
-# Flags to pass to gen-params when building _G_config.h.
-# For example: G_CONFIG_ARGS = size_t="unsigned long"
-G_CONFIG_ARGS = pid_t="unsigned short" \
- gid_t="unsigned short" uid_t="unsigned short"
diff --git a/contrib/libio/config/linux.mt b/contrib/libio/config/linux.mt
deleted file mode 100644
index 9e3c519ed13b..000000000000
--- a/contrib/libio/config/linux.mt
+++ /dev/null
@@ -1,25 +0,0 @@
-# Use the libio which comes with the local libc.
-
-# Comment this out to avoid including the stdio functions in libiostream.a:
-# LIBIOSTREAM_OBJECTS = $(IO_OBJECTS) $(IOSTREAM_OBJECTS) $(STDIO_WRAP_OBJECTS) $(OSPRIM_OBJECTS)
-# LIBIOSTREAM_DEP = $(LIBIOSTREAM_OBJECTS) stdio.list
-# LIBIOSTREAM_USE = $(LIBIOSTREAM_OBJECTS) `cat stdio.list`
-
-# Comment the above and uncomment the below to use the code in the Linux libc:
-# We have _G_config.h in /usr/include.
-_G_CONFIG_H=
-
-# We must not see the libio.h file from this library.
-LIBIO_INCLUDE=
-
-# We have those in libc.a.
-IO_OBJECTS= iogetline.o
-STDIO_WRAP_OBJECTS=
-OSPRIM_OBJECTS=
-STDIO_OBJECTS=
-
-# We have the rest in /usr/include.
-USER_INCLUDES=PlotFile.h SFile.h builtinbuf.h editbuf.h fstream.h \
- indstream.h iomanip.h iostream.h istream.h ostream.h \
- parsestream.h pfstream.h procbuf.h stdiostream.h stream.h \
- streambuf.h strfile.h strstream.h
diff --git a/contrib/libio/config/linuxaxp1-libc-lock.h b/contrib/libio/config/linuxaxp1-libc-lock.h
deleted file mode 100644
index 2523a0d5157b..000000000000
--- a/contrib/libio/config/linuxaxp1-libc-lock.h
+++ /dev/null
@@ -1,112 +0,0 @@
-/* libc-internal interface for mutex locks. LinuxThreads version.
- Copyright (C) 1996 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-#ifndef _LIBC_LOCK_H
-#define _LIBC_LOCK_H 1
-
-#include <pthread.h>
-#define __libc_lock_t pthread_mutex_t
-
-/* Define a lock variable NAME with storage class CLASS. The lock must be
- initialized with __libc_lock_init before it can be used (or define it
- with __libc_lock_define_initialized, below). Use `extern' for CLASS to
- declare a lock defined in another module. In public structure
- definitions you must use a pointer to the lock structure (i.e., NAME
- begins with a `*'), because its storage size will not be known outside
- of libc. */
-#define __libc_lock_define(CLASS,NAME) \
- CLASS __libc_lock_t NAME;
-
-/* Define an initialized lock variable NAME with storage class CLASS. */
-#define __libc_lock_define_initialized(CLASS,NAME) \
- CLASS __libc_lock_t NAME = PTHREAD_MUTEX_INITIALIZER;
-
-/* Initialize the named lock variable, leaving it in a consistent, unlocked
- state. */
-#define __libc_lock_init(NAME) \
- (__pthread_mutex_init != NULL ? __pthread_mutex_init (&(NAME), NULL) : 0);
-
-/* Same as last but this time we initialize a recursive mutex. */
-#define __libc_lock_init_recursive(NAME) \
- do { \
- if (__pthread_mutex_init != NULL) \
- { \
- pthread_mutexattr_t __attr; \
- __pthread_mutexattr_init (&__attr); \
- __pthread_mutexattr_setkind_np (&__attr, PTHREAD_MUTEX_RECURSIVE_NP); \
- __pthread_mutex_init (&(NAME), &__attr); \
- __pthread_mutexattr_destroy (&__attr); \
- } \
- } while (0);
-
-/* Finalize the named lock variable, which must be locked. It cannot be
- used again until __libc_lock_init is called again on it. This must be
- called on a lock variable before the containing storage is reused. */
-#define __libc_lock_fini(NAME) \
- (__pthread_mutex_destroy != NULL ? __pthread_mutex_destroy (&(NAME)) : 0);
-
-/* Lock the named lock variable. */
-#define __libc_lock_lock(NAME) \
- (__pthread_mutex_lock != NULL ? __pthread_mutex_lock (&(NAME)) : 0);
-
-/* Try to lock the named lock variable. */
-#define __libc_lock_trylock(NAME) \
- (__pthread_mutex_trylock != NULL ? __pthread_mutex_trylock (&(NAME)) : 0);
-
-/* Unlock the named lock variable. */
-#define __libc_lock_unlock(NAME) \
- (__pthread_mutex_unlock != NULL ? __pthread_mutex_unlock (&(NAME)) : 0);
-
-/* Start critical region with cleanup. */
-#define __libc_cleanup_region_start(FCT, ARG) \
- { struct _pthread_cleanup_buffer _buffer; \
- if (_pthread_cleanup_push_defer != NULL) { \
- _pthread_cleanup_push_defer (&_buffer, (FCT), (ARG)); \
- }
-
-/* End critical region with cleanup. */
-#define __libc_cleanup_region_end(DOIT) \
- if (_pthread_cleanup_push_defer != NULL) { \
- _pthread_cleanup_pop_restore (&_buffer, (DOIT)); \
- } \
- }
-
-/* Make the pthread functions weak so that we can elide them from
- single-threaded processes. */
-#pragma weak __pthread_mutex_init
-#pragma weak __pthread_mutex_destroy
-#pragma weak __pthread_mutex_lock
-#pragma weak __pthread_mutex_trylock
-#pragma weak __pthread_mutex_unlock
-#pragma weak __pthread_mutexattr_init
-#pragma weak __pthread_mutexattr_destroy
-#pragma weak __pthread_mutexattr_setkind_np
-#pragma weak __pthread_key_create
-#pragma weak __pthread_setspecific
-#pragma weak __pthread_getspecific
-#pragma weak __pthread_initialize
-#pragma weak _pthread_cleanup_push_defer
-#pragma weak _pthread_cleanup_pop_restore
-
-/* We need portable names for some functions. E.g., when they are
- used as argument to __libc_cleanup_region_start. */
-#define __libc_mutex_unlock __pthread_mutex_unlock
-
-#endif /* libc-lock.h */
-
diff --git a/contrib/libio/config/linuxaxp1-stdio-lock.h b/contrib/libio/config/linuxaxp1-stdio-lock.h
deleted file mode 100644
index cbee76867d12..000000000000
--- a/contrib/libio/config/linuxaxp1-stdio-lock.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/* Thread package specific definitions of stream lock type.
- Copyright (C) 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-#include <pthread.h>
-
-typedef pthread_mutex_t _IO_lock_t;
-
-/* We need recursive (counting) mutexes. */
-#define _IO_lock_initializer PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP
-
-
-#define _IO_cleanup_region_start(_fct, _fp) \
- __libc_cleanup_region_start (_fct, _fp)
-#define _IO_cleanup_region_end(_doit) \
- __libc_cleanup_region_end (_doit)
-#define _IO_lock_init(_name) \
- __libc_lock_init_recursive (_name)
-#define _IO_lock_fini(_name) \
- __libc_lock_fini_recursive (_name)
-
diff --git a/contrib/libio/config/linuxaxp1.mt b/contrib/libio/config/linuxaxp1.mt
deleted file mode 100644
index d9b7e8c7e956..000000000000
--- a/contrib/libio/config/linuxaxp1.mt
+++ /dev/null
@@ -1,10 +0,0 @@
-# We _do_ need a new _G_config.h
-_G_CONFIG_H=_G_config.h
-
-# And the two bits files.
-all:
-install: install-axp-mt-headers
-
-install-axp-mt-headers:
- $(INSTALL_DATA) libc-lock.h $(gxx_include_dir)/libc-lock.h
- $(INSTALL_DATA) stdio-lock.h $(gxx_include_dir)/stdio-lock.h
diff --git a/contrib/libio/config/linuxlibc1.mt b/contrib/libio/config/linuxlibc1.mt
deleted file mode 100644
index 742cbf185342..000000000000
--- a/contrib/libio/config/linuxlibc1.mt
+++ /dev/null
@@ -1,26 +0,0 @@
-# Use the libio which comes with the local libc.
-
-# Comment this out to avoid including the stdio functions in libiostream.a:
-# LIBIOSTREAM_OBJECTS = $(IO_OBJECTS) $(IOSTREAM_OBJECTS) $(STDIO_WRAP_OBJECTS) $(OSPRIM_OBJECTS)
-# LIBIOSTREAM_DEP = $(LIBIOSTREAM_OBJECTS) stdio.list
-# LIBIOSTREAM_USE = $(LIBIOSTREAM_OBJECTS) `cat stdio.list`
-
-# We must not see the libio.h file from this library.
-LIBIO_INCLUDE=
-
-# We have those in libc.a.
-IO_OBJECTS=iogetc.o ioputc.o iofeof.o ioferror.o \
- filedoalloc.o fileops.o genops.o iofclose.o \
- iovsprintf.o iovsscanf.o strops.o iogetline.o
-STDIO_WRAP_OBJECTS=
-OSPRIM_OBJECTS=
-STDIO_OBJECTS=
-
-# We have the rest in /usr/include.
-USER_INCLUDES=PlotFile.h SFile.h builtinbuf.h editbuf.h fstream.h \
- indstream.h iomanip.h iostream.h istream.h ostream.h \
- parsestream.h pfstream.h procbuf.h stdiostream.h stream.h \
- streambuf.h strfile.h strstream.h libio.h
-
-# A bad kludge
-MT_CFLAGS=-D_G_HAVE_MMAP -D_G_STDIO_USES_LIBIO -D_G_HAVE_WEAK_SYMBOL
diff --git a/contrib/libio/config/mn10200.mt b/contrib/libio/config/mn10200.mt
deleted file mode 100644
index 71e79167658b..000000000000
--- a/contrib/libio/config/mn10200.mt
+++ /dev/null
@@ -1,3 +0,0 @@
-# Flags to pass to gen-params when building _G_config.h.
-# For example: G_CONFIG_ARGS = size_t="unsigned long"
-G_CONFIG_ARGS = NO_USE_DTOA=1 USE_INT32_FLAGS=1
diff --git a/contrib/libio/config/mtsafe.mt b/contrib/libio/config/mtsafe.mt
deleted file mode 100644
index 5848851be8ac..000000000000
--- a/contrib/libio/config/mtsafe.mt
+++ /dev/null
@@ -1,2 +0,0 @@
-# tell we want the mt-safe version
-MT_CFLAGS = -D_IO_MTSAFE_IO
diff --git a/contrib/libio/config/netware.mt b/contrib/libio/config/netware.mt
deleted file mode 100644
index 339a865717c0..000000000000
--- a/contrib/libio/config/netware.mt
+++ /dev/null
@@ -1,16 +0,0 @@
-IMPDIR= $(srcdir)/config/netware
-
-PRELUDE= prelude.o
-
-iostream.def: Makefile
- -rm -f iostream.def
- echo "description \"libiostream\"" >> iostream.def
- echo "screenname \"NONE\"" >> iostream.def
- echo "version `echo $(VERSION) | sed 's|\.|,|g'`" >> iostream.def
- echo "export @$(IMPDIR)/iostream.imp" >> iostream.def
-
-iostream.O: $(PRELUDE) $(LIBIOSTREAM_OBJECTS)
- $(CC) -Xlinker -Ur -o $@ $(PRELUDE) $(LIBIOSTREAM_OBJECTS)
-
-iostream.nlm: iostream.def iostream.O $(IMPDIR)/iostream.imp
- $(NLMCONV) -l $(LD) -T iostream.def iostream.O iostream.nlm
diff --git a/contrib/libio/configure.in b/contrib/libio/configure.in
deleted file mode 100644
index ac494296fe2f..000000000000
--- a/contrib/libio/configure.in
+++ /dev/null
@@ -1,199 +0,0 @@
-# This file is a shell script fragment that supplies the information
-# necessary for a configure script to process the program in
-# this directory. For more information, look at ../configure.
-
-# If the language specific compiler does not exist, but the "gcc" directory
-# does, we do not build anything. Note, $r is set by the top-level Makefile.
-# Note that when we look for the compiler, we search both with and without
-# extension to handle cross and canadian cross builds.
-# Note that if $norecursion is set we're being called from config.status,
-# so don't check for the compiler; we might be doing a make clean.
-compiler_name=cc1plus
-rm -f skip-this-dir
-if test -n "$r" && [ -z "$norecursion" ] ; then
- if test -d "$r"/gcc; then
- if test -f "$r"/gcc/$compiler_name \
- || test -f "$r"/gcc/$compiler_name.exe; then
- true
- else
- echo "rm -f multilib.out" > skip-this-dir
- fi
- fi
-fi
-
-if [ "${srcdir}" = "." ] ; then
- if [ "${with_target_subdir}" != "." ] ; then
- topsrcdir=${with_multisrctop}../..
- else
- topsrcdir=${with_multisrctop}..
- fi
-else
- topsrcdir=${srcdir}/..
-fi
-
-if [ -d ${topsrcdir}/gcc ] ; then
- configdirs="tests dbz stdio testsuite"
-else
- configdirs="tests dbz stdio"
-fi
-srctrigger=libioP.h
-srcname="input/output library"
-package_makefile_frag=Make.pack
-package_makefile_rules_frag=Make.pack.r
-
-# per-host:
-
-# per-target:
-
-echo "# Warning: this fragment is automatically generated" > temp.mt
-frags=
-
-case "${target}" in
- *-hpux*) frags=hpux.mt ;;
- alpha*-*-linux-gnulibc1)
- frags="linux.mt linuxaxp1.mt mtsafe.mt" ;;
- powerpc*-*-linux-gnulibc1)
- frags="linux.mt linuxaxp1.mt mtsafe.mt" ;;
- *-linux-gnulibc1)
- frags=linuxlibc1.mt ;;
- *-linux-gnu) frags="linux.mt mtsafe.mt" ;;
- *-sco3.2v[45]*) frags=sco4.mt ;;
- *-isc*) frags=isc.mt ;;
- *-netware*) frags=netware.mt ;;
- *) frags=${target_cpu}.mt ;;
-esac
-
-case "${enable_shared}" in
- yes) shared=yes ;;
- no) shared=no ;;
- *libio*) shared=yes ;;
- *) shared=no ;;
-esac
-
-if [ "${shared}" = "yes" ]; then
- case "${target}" in
- alpha*-*-linux*) frags="${frags} ../../config/mh-elfalphapic" ;;
- arm*-*-*) frags="${frags} ../../config/mh-armpic" ;;
- hppa*-*-*) frags="${frags} ../../config/mh-papic" ;;
- i[3456]86-*-*) frags="${frags} ../../config/mh-x86pic" ;;
- powerpc*-*-aix*) ;;
- powerpc*-*-*) frags="${frags} ../../config/mh-ppcpic" ;;
- *-*-*) frags="${frags} ../../config/mh-${target_cpu}pic" ;;
- esac
-fi
-
-# Take care of header file lossage.
-case "${target}" in
- alpha*-*-linux-gnulibc1)
- # For some reason stdio-lock.h is not installed on Red Hat systems.
- # Further, libc-lock.h needs to define the pthreads stuff weak, and
- # fails to do this for other than _LIBC. Install our own versions
- # of these files.
- cp ${srcdir}/config/linuxaxp1-libc-lock.h libc-lock.h
- cp ${srcdir}/config/linuxaxp1-stdio-lock.h stdio-lock.h
- ;;
- powerpc*-*-linux-gnulibc1)
- # For some reason stdio-lock.h is not installed on Red Hat systems.
- # Further, libc-lock.h needs to define the pthreads stuff weak, and
- # fails to do this for other than _LIBC. Install our own versions
- # of these files.
- cp ${srcdir}/config/linuxaxp1-libc-lock.h libc-lock.h
- cp ${srcdir}/config/linuxaxp1-stdio-lock.h stdio-lock.h
- ;;
- *-linux-gnu)
- # We have a correct libc-lock.h in glibc 2.1 but not all glibc 2.0.
- # Create a wrapper if necessary.
- (echo "#include <bits/libc-lock.h>" | ${CC-cc} -E -) >/dev/null 2>&1 ||
- {
- echo "#include_next <libc-lock.h>" > libc-lock.h
- echo 'asm (".weak _pthread_cleanup_pop_restore");' >> libc-lock.h
- echo 'asm (".weak _pthread_cleanup_push_defer");' >> libc-lock.h
-
- }
- ;;
-esac
-
-for frag in ${frags}; do
- case ${frag} in
- ../* )
- if [ ${srcdir} = . ]; then
- [ -n "${with_target_subdir}" ] && frag=../${frag}
- [ -n "${with_multisrctop}" ] && frag=${with_multisrctop}${frag}
- fi
- ;;
- esac
- frag=${srcdir}/config/$frag
- if [ -f ${frag} ]; then
- echo "Appending ${frag} to target-mkfrag"
- echo "# Following fragment copied from ${frag}" >> temp.mt
- cat ${frag} >> temp.mt
- fi
-done
-
-target_makefile_frag=target-mkfrag
-${moveifchange} temp.mt target-mkfrag
-
-LIBDIR=yes
-TO_TOPDIR=../
-ALL='$(_G_CONFIG_H) libio.a libiostream.a iostream.list'
-case "${target}" in
- *-*-cygwin*)
- XCINCLUDES='-I. -I$(srcdir) -I$(srcdir)/../winsup/include'
- XCXXINCLUDES='-I. -I$(srcdir) -I$(srcdir)/../winsup/include'
- ;;
- *)
- XCINCLUDES='-I. -I$(srcdir)'
- XCXXINCLUDES='-I. -I$(srcdir)'
- ;;
-esac
-MOSTLYCLEAN='*.o pic stamp-picdir core iostream.list'
-DISTCLEAN='config.status Makefile *~ Make.pack target-mkfrag multilib.out'
-CLEAN='_G_config.h *.a'
-INFO_FILES=iostream
-if [ -n "${with_cross_host}" -a -d ${topsrcdir}/gcc ]; then
- CHECK_SUBDIRS=testsuite
-fi
-(. ${srcdir}/config.shared) >${package_makefile_frag} 2>${package_makefile_rules_frag}
-
-# post-target:
-
-# If cross-compiling, we install in $(tooldir)/lib or in $(libsubdir)
-# depending on --enable-version-specific-runtime-libs.
-if [ -n "${with_cross_host}" ] ; then
- rm -f Makefile.tem
- sed \
- -e 's|\(^[ ]*INSTALLDIR[ ]*=[ ]*\)\$(libdir)|\1$(tooldir)/lib|' \
- Makefile >Makefile.tem
- mv -f Makefile.tem Makefile
-fi
-
-. ${topsrcdir}/config-ml.in
-
-gxx_include_dir=
-# Specify the g++ header file directory
-# Check whether --with-gxx-include-dir or --without-gxx-include-dir was given.
-if test "${with_gxx_include_dir+set}" = set; then
- withval="$with_gxx_include_dir"
- case "${withval}" in
- yes)
- echo "configure.in: error: bad value ${withval} given for g++ include directory" 1>&2
- exit 1
- ;;
- no) ;;
- *) gxx_include_dir=$with_gxx_include_dir ;;
- esac
-fi
-
-if test x${gxx_include_dir} = x; then
- if test x${enable_version_specific_runtime_libs} = xyes; then
- gxx_include_dir='${libsubdir}/include/g++'
- else
- . ${topsrcdir}/config.if
- gxx_include_dir='${prefix}/include/g++'-${libstdcxx_interface}
- fi
-fi
-
-rm -f Makefile.tem
-sed -e "s%^gxx_include_dir[ ]*=.*$%gxx_include_dir=${gxx_include_dir}%" \
- Makefile >Makefile.tem
-mv -f Makefile.tem Makefile
diff --git a/contrib/libio/dbz/Makefile.in b/contrib/libio/dbz/Makefile.in
deleted file mode 100644
index 0fd956414148..000000000000
--- a/contrib/libio/dbz/Makefile.in
+++ /dev/null
@@ -1,218 +0,0 @@
-srcdir = .
-CFLAGS = -g
-C_FLAGS = $(CFLAGS) -I$(srcdir) -I.. -I$(srcdir)/.. -DDBZ_FINISH='_IO_flush_all()'
-CC = `if [ -f ../../../gcc/gcc ] ; \
- then echo ../../../gcc/gcc -B../../../gcc/ ; \
- else echo gcc ; fi`
-LIBIO = ../libio.a ../../libiberty/libiberty.a
-LIBS = $(LIBIO)
-# LIBS = ../libcnews.a
-DBM =
-RFC = -DHAVERFCIZE
-CASE = case.o
-DEBUG = -DDBZDEBUG
-LINTFLAGS = -h $(DEBUG) $(RFC) -I$(srcdir)
-LDFLAGS =
-# =()<NEWSBIN = @<NEWSBIN>@>()=
-NEWSBIN = /usr/lib/newsbin
-# workaround for System V make bug
-SHELL = /bin/sh
-
-# database sizes for performance tests, regression, and regression prime-find
-TSIZE=12007
-RSIZE=4019
-RPSIZE=2679
-
-#### host and target dependent Makefile fragments come in here.
-##
-
-# history files for regression and performance tests
-RHIST=hist3.3
-R2HIST=hist10
-THIST=hist13
-
-#all: dbz
-all:
-install:
-install-info:
-info:
-
-check: r
- $(MAKE) rclean
-
-bininstall: dbz
- cp dbz $(NEWSBIN)
-
-cmp: dbz
- cmp dbz $(NEWSBIN)/dbz
-
-newsinstall:
- : nothing
-
-u: dbz.o
- ar ruv ../libcnews.a dbz.o
- cmp dbz.h ../h/dbz.h
-
-t: tdbz fake
-
-lint:
- lint $(LINTFLAGS) dbzmain.c dbz.c
-
-.c.o:
- $(CC) $(C_FLAGS) -c $<
-
-rdbz.o: rdbz.c
- $(CC) $(C_FLAGS) $(DEBUG) -DDEFSIZE=$(RSIZE) -c rdbz.c
-
-rdbzmain.o: rdbzmain.c
- $(CC) $(C_FLAGS) $(RFC) -c rdbzmain.c
-
-tdbz.o: $(srcdir)/dbz.c
- cp $(srcdir)/dbz.c tdbz.c
- $(CC) $(C_FLAGS) -DDEFSIZE=$(TSIZE) -c tdbz.c
- rm tdbz.c
-
-dbz: dbzmain.o $(CASE)
- $(CC) $(LDFLAGS) dbzmain.o $(CASE) $(PRE) $(DBM) $(LIBS) $(POST) -o $@
-
-tdbz: dbzmain.o tdbz.o $(CASE)
- $(CC) $(LDFLAGS) dbzmain.o tdbz.o $(CASE) $(PRE) $(LIBS) $(POST) -o $@
-
-rdbz: rdbzmain.o rdbz.o $(CASE)
- $(CC) $(LDFLAGS) rdbzmain.o rdbz.o $(CASE) $(PRE) $(LIBS) $(POST) -o $@
-
-fake: fake.o random.o
- $(CC) $(LDFLAGS) fake.o random.o $(PRE) $(LIBS) $(POST) -o $@
-
-byteflip: byteflip.o
- $(CC) $(LDFLAGS) byteflip.o $(PRE) $(LIBS) $(POST) -o $@
-
-hist10: fake
- ./fake -t -e 75 10000 >$@
-
-hist3.3: fake
- ./fake -t -e 75 3300 >$@
-
-hist13: fake
- ./fake -t -e 75 13000 >$@
-
-r: $(srcdir)/getmap $(srcdir)/revbytes $(srcdir)/altbytes stamp-r8
- : success!
-
-stamp-r0:
- : 'WARNING: creates about 2MB of debris; do "make rclean" afterward'
- rm -f dbase dbase[23] dbase.* dbase[23].*
- test ! -d xx || rmdir xx
- @touch stamp-r0
-
-stamp-r1: $(RHIST) $(R2HIST) stamp-r0
- : crude check of synthetic history file
- ( sed 25q $(RHIST) ; tail -25 $(RHIST) ) >histjunk
- cmp histjunk $(srcdir)/firstlast25
- rm histjunk
- @touch stamp-r1
-
-r2a: rdbz stamp-r1
- : basic tests, exercising as many options as possible
- cp $(RHIST) dbase
- mkdir xx
- chmod -w xx
- ./rdbz -E 1000 -0 -M -i -S -u -U -C xx dbase
- rmdir xx
- sed '/> 0/d' $(RHIST) >dbase.used
- test "`cat dbase.used | wc -l`" -eq "`sed -n '2s/ .*//p' dbase.dir`" ;
-
-stamp-r2: r2a
- cp $(RHIST) dbase2
- ./rdbz -E 1000 -0 -p $(RPSIZE) -t ' ' dbase2
- cmp $(RHIST) dbase
- cmp dbase dbase2
- cmp dbase.dir dbase2.dir
- cmp dbase.pag dbase2.pag
- ./rdbz -E 1000 -0 -c dbase
- ./rdbz -E 1000 -0 -c -i -q -M -U dbase
- @touch stamp-r2
-
-stamp-r3: stamp-r2
- : build a database and then add to it
- sed 1000q $(RHIST) >dbase2
- sed 1,1000d $(RHIST) >dbase2.add
- ./rdbz -E 1000 -0 dbase2
- ./rdbz -E 1000 -0 -a dbase2 dbase2.add
- cmp dbase dbase2
- cmp dbase.dir dbase2.dir
- cmp dbase.pag dbase2.pag
- @touch stamp-r3
-
-stamp-r4: stamp-r3
- : build based on existing one, test extraction and readonly files
- ./rdbz -E 1000 -0 -f dbase dbase2
- test "`cat dbase.used | wc -l`" -eq "`awk 'NR==2{print $$1}' dbase2.dir`" ;
- test "`cat dbase.used | wc -l`" -eq "`awk 'NR==2{print $$2}' dbase2.dir`" ;
- chmod -w dbase2.dir dbase2.pag
- ./rdbz -E 1000 -x dbase2 dbase >dbase.temp
- cmp dbase.used dbase.temp
- @touch stamp-r4
-
-stamp-r5: stamp-r4
- : try some small case perversions
- sed 's/\(@[^ ]*\)A/\1a/' dbase >dbase.ick
- ./rdbz -E 1000 -x dbase2 dbase.ick >dbase.temp
- cmp dbase.used dbase.temp
- sed -n 's/A\([^ ]*@\)/a\1/p' dbase >dbase.ick
- ./rdbz -x dbase2 dbase.ick >dbase.temp
- test ! -s dbase.temp ;
- rm -f dbase2.dir dbase2.pag
- @touch stamp-r5
-
-stamp-r6: stamp-r5
- : try it without tags, case-insensitive, with case perversions
- ./rdbz -E 1000 -0 -p '0 b 1' dbase2
- tr 'ABCDEFGHIJKLMnopqrstuvwxyz' 'abcdefghijklmNOPQRSTUVWXYZ' <dbase2 >dbase.ick
- ./rdbz -E 1000 -x dbase2 dbase.ick >dbase.temp
- cmp dbase.used dbase.temp
- rm -f dbase.temp dbase.ick
- @touch stamp-r6
-
-stamp-r7: byteflip stamp-r6
- : test various perversions of byte ordering
- awk -f $(srcdir)/revbytes dbase.dir >dbase2.dir
- ./byteflip `$(srcdir)/getmap dbase.dir` `$(srcdir)/getmap dbase2.dir` <dbase.pag >dbase2.pag
- cp dbase dbase2
- ./rdbz -E 1000 -0 -c dbase2
- awk -f $(srcdir)/altbytes dbase.dir >dbase2.dir
- dd conv=swab <dbase.pag >dbase2.pag
- ./rdbz -E 1000 -0 -c dbase2
- cp dbase2 dbase3
- ./rdbz -E 1000 -0 -f dbase2 dbase3
- ./rdbz -E 1000 -0 -c dbase3
- test " `$(srcdir)/getmap dbase2.dir`" = " `$(srcdir)/getmap dbase3.dir`" ;
- @touch stamp-r7
-
-stamp-r8: stamp-r7
- : test massive overflow, throw in case sensitivity and tag mask
- cp $(R2HIST) dbase
- ./rdbz -E 1000 -0 -p '0 0 7ffc0000' dbase
- ./rdbz -E 1000 -0 -cq dbase
- sed 100q dbase | egrep '[aA].* ' | tr aA Aa >dbase.ick
- ./rdbz -x dbase dbase.ick >dbase.temp
- test ! -s dbase.temp ;
- @touch stamp-r8
-
-rclean:
- rm -f dbase dbase[23] dbase.* dbase[23].* fake fake.o random.o
- rm -f rdbz rdbz.o rdbzmain.o $(RHIST) $(R2HIST) byteflip byteflip.o
- rm -f histjunk core stamp-r? *~
- test ! -d xx || rmdir xx
-
-mostlyclean: rclean
- rm -f *.o [a-z]dbz [a-z][a-z]dbz junk* PostScript.out
- rm -f hist* dbase* *.bak mon.out gmon.out core dbm.h
-
-clean: mostlyclean
- rm -f dbz
-
-distclean: clean
- rm -rf Makefile config.status rdbz.c rdbzmain.c
-
-maintainer-clean realclean: distclean
diff --git a/contrib/libio/dbz/README b/contrib/libio/dbz/README
deleted file mode 100644
index e7fa8765ad5c..000000000000
--- a/contrib/libio/dbz/README
+++ /dev/null
@@ -1,25 +0,0 @@
-The dbz package was "liberated" from C News.
-It is included with the GNU libio because it provides
-a fairly good work-out for a stdio implementation.
-The Makefile.in, configure.in, and stdio.h have been
-set up to test libio.
-
-------
-
-This is the new, improved, lemon-freshened :-) dbz.
-
-Just "make" will get you dbz.o and the dbz program. "make r" runs an
-extensive set of regression tests; most of the mysterious oddments lying
-around here are to do with that. "make rclean" cleans up after "make r".
-
-You probably want to inspect the #ifdef list early in dbz.c before
-compiling, although the defaults should work all right on most systems.
-
-If you are not building this as part of C News, you will need to change
-the -I option in FLAGS in the Makefile to "-I.", and delete the DBMLIBS
-and RFC lines entirely. That will break some of the regression tests;
-at some point I'll fix this.
-
-If you are using this independently from C News, you probably still want
-to look through ../notebook/problems, as some of the portability problems
-described in there can affect dbz.
diff --git a/contrib/libio/dbz/altbytes b/contrib/libio/dbz/altbytes
deleted file mode 100644
index 26cc9fb9e023..000000000000
--- a/contrib/libio/dbz/altbytes
+++ /dev/null
@@ -1,7 +0,0 @@
-NR == 1 {
- printf "%s %s %s %s %s %s %s %s %s", $1, $2, $3, $4, $5, $6, $7, $8, $9
- for (i = 10; i <= NF; i += 2)
- printf " %s %s", $(i+1), $i
- printf "\n"
-}
-NR > 1 { print }
diff --git a/contrib/libio/dbz/byteflip.c b/contrib/libio/dbz/byteflip.c
deleted file mode 100644
index d54c6591fa18..000000000000
--- a/contrib/libio/dbz/byteflip.c
+++ /dev/null
@@ -1,38 +0,0 @@
-#include <stdio.h>
-
-#define MAXWORD 32
-
-int
-main(argc, argv)
-int argc;
-char *argv[];
-{
- register int len;
- int inmap[MAXWORD];
- int outmap[MAXWORD];
- char in[MAXWORD];
- char out[MAXWORD];
- register int i;
- register int a;
-
- a = 1;
- len = atoi(argv[a++]);
- if (len > MAXWORD)
- abort(); /* kind of drastic... */
- for (i = 0; i < len; i++)
- inmap[i] = atoi(argv[a++]);
- if (atoi(argv[a++]) != len)
- abort();
- for (i = 0; i < len; i++)
- outmap[i] = atoi(argv[a++]);
-
- while (fread(in, 1, len, stdin) == len) {
- for (i = 0; i < len; i++)
- out[outmap[i]] = in[inmap[i]];
- fwrite(out, 1, len, stdout);
- }
-#ifdef DBZ_FINISH
- DBZ_FINISH;
-#endif
- exit(0);
-}
diff --git a/contrib/libio/dbz/case.c b/contrib/libio/dbz/case.c
deleted file mode 100644
index 87b741ff54a7..000000000000
--- a/contrib/libio/dbz/case.c
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * case-mapping stuff
- *
- * We exploit the fact that we are dealing only with headers here, and
- * headers are limited to the ASCII characters by RFC822. It is barely
- * possible that we might be dealing with a translation into another
- * character set, but in particular it's very unlikely for a header
- * character to be outside -128..255.
- *
- * Life would be a whole lot simpler if tolower() could safely and portably
- * be applied to any char.
- */
-#include <stdio.h>
-#include "string.h"
-#include "case.h"
-
-/* note that case.h knows the value of OFFSET */
-#define OFFSET 128 /* avoid trouble with negative chars */
-#define MAPSIZE (256+OFFSET)
-char casemap[MAPSIZE]; /* relies on init to '\0' */
-static int primed = 0; /* has casemap been set up? */
-
-/*
- - prime - set up case-mapping stuff
- */
-static void
-prime()
-{
- register char *lp;
- register char *up;
- register int c;
- register int i;
- static char lower[] = "abcdefghijklmnopqrstuvwxyz";
- static char upper[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
-
- for (lp = lower, up = upper; *lp != '\0'; lp++, up++) {
- c = *lp;
- casemap[c+OFFSET] = c;
- casemap[*up+OFFSET] = c;
- }
- for (i = 0; i < MAPSIZE; i++)
- if (casemap[i] == '\0')
- casemap[i] = (char)(i-OFFSET);
- primed = 1;
-}
-
-/*
- - cistrncmp - case-independent strncmp
- */
-int /* < == > 0 */
-cistrncmp(s1, s2, len)
-char *s1;
-char *s2;
-int len;
-{
- register char *p1;
- register char *p2;
- register int n;
-
- if (!primed)
- prime();
-
- p1 = s1;
- p2 = s2;
- n = len;
- while (--n >= 0 && *p1 != '\0' && TOLOW(*p1) == TOLOW(*p2)) {
- p1++;
- p2++;
- }
- if (n < 0)
- return(0);
-
- /*
- * The following case analysis is necessary so that characters
- * which look negative collate low against normal characters but
- * high against the end-of-string NUL.
- */
- if (*p1 == '\0' && *p2 == '\0')
- return(0);
- else if (*p1 == '\0')
- return(-1);
- else if (*p2 == '\0')
- return(1);
- else
- return(TOLOW(*p1) - TOLOW(*p2));
-}
-
-/*
- - rfc822ize - do the bizarre case conversion needed for rfc822 message-ids
- *
- * Actually, this is not quite complete. Absolute, total, full RFC822
- * compliance requires a horrible parsing job, because of the arcane
- * quoting conventions -- abc"def"ghi is not equivalent to abc"DEF"ghi,
- * for example. There are three or four things that might occur in the
- * domain part of a message-id that are case-sensitive. They don't seem
- * to ever occur in real news, thank Cthulhu. (What? You were expecting
- * a merciful and forgiving deity to be invoked in connection with RFC822?
- * Forget it; none of them would come near it.)
- */
-char * /* returns the argument */
-rfc822ize(s)
-char *s;
-{
- register char *p;
- static char post[] = "postmaster";
- static int postlen = sizeof(post)-1;
-
- if (!primed)
- prime();
-
- p = strrchr(s, '@');
- if (p == NULL) /* no local/domain split */
- p = ""; /* assume all local */
- else if (p - (s+1) == postlen && CISTREQN(s+1, post, postlen)) {
- /* crazy special case -- "postmaster" is case-insensitive */
- p = s;
- }
-#ifdef NONSTANDARD
-#ifdef RFCVIOLATION
-#ifdef B_2_11_MISTAKE
- p = s; /* all case-insensitive */
-#endif
-#endif
-#endif
- for (; *p != '\0'; p++)
- *p = TOLOW(*p);
-
- return(s);
-}
diff --git a/contrib/libio/dbz/case.h b/contrib/libio/dbz/case.h
deleted file mode 100644
index d5ef69615506..000000000000
--- a/contrib/libio/dbz/case.h
+++ /dev/null
@@ -1,12 +0,0 @@
-extern int cistrncmp();
-extern char *rfc822ize();
-
-extern char casemap[];
-
-/* must call cistrncmp before invoking TOLOW... */
-#define TOLOW(c) (casemap[(c)+128]) /* see case.c for why 128 */
-
-/* ...but the use of it in CISTREQN is safe without the preliminary call (!) */
-/* CISTREQN is an optimised case-insensitive strncmp(a,b,n)==0; n > 0 */
-#define CISTREQN(a, b, n) \
- (TOLOW((a)[0]) == TOLOW((b)[0]) && cistrncmp(a, b, n) == 0)
diff --git a/contrib/libio/dbz/configure.in b/contrib/libio/dbz/configure.in
deleted file mode 100644
index 4cb9b57ce0fa..000000000000
--- a/contrib/libio/dbz/configure.in
+++ /dev/null
@@ -1,17 +0,0 @@
-# This file is a shell script fragment that supplies the information
-# necessary for a configure script to process the program in
-# this directory. For more information, look at ../configure.
-
-configdirs=
-srctrigger=dbzmain.c
-srcname="libio dbz test"
-
-# per-host:
-
-# per-target:
-
-files="dbz.c dbzmain.c"
-links="rdbz.c rdbzmain.c"
-
-# post-target:
-
diff --git a/contrib/libio/dbz/dbz.1 b/contrib/libio/dbz/dbz.1
deleted file mode 100644
index d2fff17af985..000000000000
--- a/contrib/libio/dbz/dbz.1
+++ /dev/null
@@ -1,221 +0,0 @@
-.TH DBZ 1 "11 Feb 1992"
-.BY "C News"
-.SH NAME
-dbz \- operate on dbz databases of text
-.SH SYNOPSIS
-.B dbz
-[
-.BR \- { axmc }
-] [
-.B \-t
-c
-] [
-.B \-l
-length
-] [
-.BR \- { qiue }
-] [
-.B \-f
-old
-] [
-.B \-p
-parms
-] database file ...
-.SH DESCRIPTION
-.I Dbz
-is a shell-level interface to the
-.IR dbz (3z)
-database routines for indexed access to a text file.
-.PP
-The
-.I database
-file must be a text file,
-one line per database record,
-with the key the first field on the line.
-The
-.B \-t
-option sets the field-separator character; the default is tab.
-Setting the separator character to NUL (with
-.BR "\-t\ ''" )
-makes the whole line the key.
-Lines must not exceed 1023 bytes in length including the newline;
-this limit can be increased with the
-.B \-l
-option.
-The limitations and restrictions of
-.IR dbz (3z)
-must also be observed;
-in particular, it remains the user's responsibility to ensure that
-no attempt is made to store two entries (whether identical or not)
-with the same key.
-.PP
-In the absence of options,
-.I dbz
-creates a
-.IR dbz (3z)
-index for the database;
-the index comprises files
-.IB database .pag
-and
-.IB database .dir
-in the same directory.
-Any previous index is silently overwritten.
-The
-.BR \-a ,
-.BR \-x ,
-.BR \-m ,
-and
-.B \-c
-options specify other operations.
-.PP
-With
-.BR \-a ,
-.I dbz
-appends lines from the
-.IR file (s)
-(standard input if none)
-to the database, updating both the
-text file and the indexes.
-.PP
-With
-.BR \-x ,
-.I dbz
-reads keys from the
-.IR file (s)
-(standard input if none)
-and prints (on standard output) the corresponding lines, if any,
-from the database.
-The input is in the form of database lines, although only the keys are
-significant.
-The
-.B \-q
-option makes
-.B \-x
-print the input lines whose keys are found instead of the database
-lines; this is somewhat faster.
-.PP
-With
-.BR \-m ,
-operation is the same as for
-.B \-x
-except that the keys which are \fInot\fR present in the database are printed.
-.PP
-With
-.BR \-c ,
-.I dbz
-checks the database for internal consistency.
-The
-.B \-q
-option causes this check to be done more quickly but less thoroughly
-(each key is looked up in the index, but no check is made to be sure
-that the index entry points to the right place).
-.PP
-The
-.B \-i
-option suppresses the use of
-.IR dbz (3z)'s
-.I incore
-facility.
-This makes accesses slower, but keeps the files current
-during updating
-and reduces
-startup/shutdown overhead.
-.PP
-Normally,
-.I dbz
-checks whether a key is already in the database before adding it.
-The
-.B \-u
-option suppresses this check, speeding things up at the expense of safety.
-.PP
-A new index is normally created with default size,
-case mapping, and tagging.
-The default size is right for 90-100,000 records.
-The default case mapping is right for RFC822 message-ids.
-See
-.IR dbz (3z)
-for what tagging is about.
-(Note, these defaults can be changed when
-.IR dbz (3z)
-is installed.)
-.PP
-If the
-.B \-f
-option is given,
-size, case mapping, and tagging
-are instead initialized based on the
-database
-.IR old .
-This is mostly useful when
-creating a new generation of an existing database.
-(See the description of
-.I dbzagain
-in
-.IR dbz (3z)
-for details.)
-.PP
-If the
-.B \-p
-option is given, the
-.I parms
-string specifies the size, case mapping, and tagging.
-If
-.I parms
-is a single decimal number,
-that is taken as the expected number of records
-in the index, with case mapping and tagging defaulted.
-Alternatively,
-.I parms
-can be three fields\(ema decimal number, a case-mapping code character, and a
-hexadecimal tag mask\(emseparated by white space.
-The decimal number is, again, the expected number of records;
-0 means ``use the default''.
-See
-.IR dbz (3z)
-for possible choices of case-mapping code,
-but in particular,
-.B 0
-means ``no case mapping''.
-See
-.IR dbz (3z)
-for details on tag masks;
-0 means ``use the default''.
-.PP
-If the
-.B \-e
-option is given, the decimal number in
-.B \-p
-is taken to be the exact table size, not the expected number of records,
-and invocation of
-.I dbzsize
-(see
-.IR dbz (3z))
-to predict a good size for that number of records is suppressed.
-.PP
-The
-.B \&.pag
-file is normally about 6 bytes per record (based on the estimate given to
-.B \-p
-or the previous history of the
-.B \-f
-database).
-The
-.B \&.dir
-file is tiny.
-.SH SEE ALSO
-dbz(3z)
-.SH HISTORY
-Written at U of Toronto by Henry Spencer, for the C News project.
-See
-.IR dbz (3z)
-for the history of the underlying database routines.
-.SH BUGS
-There are a number of undocumented options with obscure effects,
-meant for debugging and regression testing of
-.IR dbz (3z).
-.PP
-Permissions for the index files probably ought to be taken from those
-of the base file.
-.PP
-The line-length limit is a blemish, alleviated only slightly by
-.BR \-l .
diff --git a/contrib/libio/dbz/dbz.3z b/contrib/libio/dbz/dbz.3z
deleted file mode 100644
index 6df25311c701..000000000000
--- a/contrib/libio/dbz/dbz.3z
+++ /dev/null
@@ -1,547 +0,0 @@
-.TH DBZ 3Z "3 Feb 1991"
-.BY "C News"
-.SH NAME
-dbminit, fetch, store, dbmclose \- somewhat dbm-compatible database routines
-.br
-dbzfresh, dbzagain, dbzfetch, dbzstore \- database routines
-.br
-dbzsync, dbzsize, dbzincore, dbzcancel, dbzdebug \- database routines
-.SH SYNOPSIS
-.nf
-.B #include <dbz.h>
-.PP
-.B dbminit(base)
-.B char *base;
-.PP
-.B datum
-.B fetch(key)
-.B datum key;
-.PP
-.B store(key, value)
-.B datum key;
-.B datum value;
-.PP
-.B dbmclose()
-.PP
-.B dbzfresh(base, size, fieldsep, cmap, tagmask)
-.B char *base;
-.B long size;
-.B int fieldsep;
-.B int cmap;
-.B long tagmask;
-.PP
-.B dbzagain(base, oldbase)
-.B char *base;
-.B char *oldbase;
-.PP
-.B datum
-.B dbzfetch(key)
-.B datum key;
-.PP
-.B dbzstore(key, value)
-.B datum key;
-.B datum value;
-.PP
-.B dbzsync()
-.PP
-.B long
-.B dbzsize(nentries)
-.B long nentries;
-.PP
-.B dbzincore(newvalue)
-.PP
-.B dbzcancel()
-.PP
-.B dbzdebug(newvalue)
-.SH DESCRIPTION
-These functions provide an indexing system for rapid random access to a
-text file (the
-.I base
-.IR file ).
-Subject to certain constraints, they are call-compatible with
-.IR dbm (3),
-although they also provide some extensions.
-(Note that they are
-.I not
-file-compatible with
-.I dbm
-or any variant thereof.)
-.PP
-In principle,
-.I dbz
-stores key-value pairs, where both key and value are arbitrary sequences
-of bytes, specified to the functions by
-values of type
-.IR datum ,
-typedefed in the header file to be a structure with members
-.I dptr
-(a value of type
-.I char *
-pointing to the bytes)
-and
-.I dsize
-(a value of type
-.I int
-indicating how long the byte sequence is).
-.PP
-In practice,
-.I dbz
-is more restricted than
-.IR dbm .
-A
-.I dbz
-database
-must be an index into a base file,
-with the database
-.IR value s
-being
-.IR fseek (3)
-offsets into the base file.
-Each such
-.I value
-must ``point to'' a place in the base file where the corresponding
-.I key
-sequence is found.
-A key can be no longer than
-.SM DBZMAXKEY
-(a constant defined in the header file) bytes.
-No key can be an initial subsequence of another,
-which in most applications requires that keys be
-either bracketed or terminated in some way (see the
-discussion of the
-.I fieldsep
-parameter of
-.IR dbzfresh ,
-below,
-for a fine point on terminators).
-.PP
-.I Dbminit
-opens a database,
-an index into the base file
-.IR base ,
-consisting of files
-.IB base .dir
-and
-.IB base .pag
-which must already exist.
-(If the database is new, they should be zero-length files.)
-Subsequent accesses go to that database until
-.I dbmclose
-is called to close the database.
-The base file need not exist at the time of the
-.IR dbminit ,
-but it must exist before accesses are attempted.
-.PP
-.I Fetch
-searches the database for the specified
-.IR key ,
-returning the corresponding
-.IR value
-if any.
-.I Store
-stores the
-.IR key - value
-pair in the database.
-.I Store
-will fail unless the database files are writeable.
-See below for a complication arising from case mapping.
-.PP
-.I Dbzfresh
-is a variant of
-.I dbminit
-for creating a new database with more control over details.
-Unlike for
-.IR dbminit ,
-the database files need not exist:
-they will be created if necessary,
-and truncated in any case.
-.PP
-.IR Dbzfresh 's
-.I size
-parameter specifies the size of the first hash table within the database,
-in key-value pairs.
-Performance will be best if
-.I size
-is a prime number and
-the number of key-value pairs stored in the database does not exceed
-about 2/3 of
-.IR size .
-(The
-.I dbzsize
-function, given the expected number of key-value pairs,
-will suggest a database size that meets these criteria.)
-Assuming that an
-.I fseek
-offset is 4 bytes,
-the
-.B .pag
-file will be
-.RI 4* size
-bytes
-(the
-.B .dir
-file is tiny and roughly constant in size)
-until
-the number of key-value pairs exceeds about 80% of
-.IR size .
-(Nothing awful will happen if the database grows beyond 100% of
-.IR size ,
-but accesses will slow down somewhat and the
-.B .pag
-file will grow somewhat.)
-.PP
-.IR Dbzfresh 's
-.I fieldsep
-parameter specifies the field separator in the base file.
-If this is not
-NUL (0), and the last character of a
-.I key
-argument is NUL, that NUL compares equal to either a NUL or a
-.I fieldsep
-in the base file.
-This permits use of NUL to terminate key strings without requiring that
-NULs appear in the base file.
-The
-.I fieldsep
-of a database created with
-.I dbminit
-is the horizontal-tab character.
-.PP
-For use in news systems, various forms of case mapping (e.g. uppercase to
-lowercase) in keys are available.
-The
-.I cmap
-parameter to
-.I dbzfresh
-is a single character specifying which of several mapping algorithms to use.
-Available algorithms are:
-.RS
-.TP
-.B 0
-case-sensitive: no case mapping
-.TP
-.B B
-same as
-.B 0
-.TP
-.B NUL
-same as
-.B 0
-.TP
-.B =
-case-insensitive: uppercase and lowercase equivalent
-.TP
-.B b
-same as
-.B =
-.TP
-.B C
-RFC822 message-ID rules, case-sensitive before `@' (with certain exceptions)
-and case-insensitive after
-.TP
-.B ?
-whatever the local default is, normally
-.B C
-.RE
-.PP
-Mapping algorithm
-.B 0
-(no mapping) is faster than the others and is overwhelmingly the correct
-choice for most applications.
-Unless compatibility constraints interfere, it is more efficient to pre-map
-the keys, storing mapped keys in the base file, than to have
-.I dbz
-do the mapping on every search.
-.PP
-For historical reasons,
-.I fetch
-and
-.I store
-expect their
-.I key
-arguments to be pre-mapped, but expect unmapped keys in the base file.
-.I Dbzfetch
-and
-.I dbzstore
-do the same jobs but handle all case mapping internally,
-so the customer need not worry about it.
-.PP
-.I Dbz
-stores only the database
-.IR value s
-in its files, relying on reference to the base file to confirm a hit on a key.
-References to the base file can be minimized, greatly speeding up searches,
-if a little bit of information about the keys can be stored in the
-.I dbz
-files.
-This is ``free'' if there are some unused bits in an
-.I fseek
-offset,
-so that the offset can be
-.I tagged
-with some information about the key.
-The
-.I tagmask
-parameter of
-.I dbzfresh
-allows specifying the location of unused bits.
-.I Tagmask
-should be a mask with
-one group of
-contiguous
-.B 1
-bits.
-The bits in the mask should
-be unused (0) in
-.I most
-offsets.
-The bit immediately above the mask (the
-.I flag
-bit) should be unused (0) in
-.I all
-offsets;
-.I (dbz)store
-will reject attempts to store a key-value pair in which the
-.I value
-has the flag bit on.
-Apart from this restriction, tagging is invisible to the user.
-As a special case, a
-.I tagmask
-of 1 means ``no tagging'', for use with enormous base files or
-on systems with unusual offset representations.
-.PP
-A
-.I size
-of 0
-given to
-.I dbzfresh
-is synonymous with the local default;
-the normal default is suitable for tables of 90-100,000
-key-value pairs.
-A
-.I cmap
-of 0 (NUL) is synonymous with the character
-.BR 0 ,
-signifying no case mapping
-(note that the character
-.B ?
-specifies the local default mapping,
-normally
-.BR C ).
-A
-.I tagmask
-of 0 is synonymous with the local default tag mask,
-normally 0x7f000000 (specifying the top bit in a 32-bit offset
-as the flag bit, and the next 7 bits as the mask,
-which is suitable for base files up to circa 24MB).
-Calling
-.I dbminit(name)
-with the database files empty is equivalent to calling
-.IR dbzfresh(name,0,'\et','?',0) .
-.PP
-When databases are regenerated periodically, as in news,
-it is simplest to pick the parameters for a new database based on the old one.
-This also permits some memory of past sizes of the old database, so that
-a new database size can be chosen to cover expected fluctuations.
-.I Dbzagain
-is a variant of
-.I dbminit
-for creating a new database as a new generation of an old database.
-The database files for
-.I oldbase
-must exist.
-.I Dbzagain
-is equivalent to calling
-.I dbzfresh
-with the same field separator, case mapping, and tag mask as the old database,
-and a
-.I size
-equal to the result of applying
-.I dbzsize
-to the largest number of entries in the
-.I oldbase
-database and its previous 10 generations.
-.PP
-When many accesses are being done by the same program,
-.I dbz
-is massively faster if its first hash table is in memory.
-If an internal flag is 1,
-an attempt is made to read the table in when
-the database is opened, and
-.I dbmclose
-writes it out to disk again (if it was read successfully and
-has been modified).
-.I Dbzincore
-sets the flag to
-.I newvalue
-(which should be 0 or 1)
-and returns the previous value;
-this does not affect the status of a database that has already been opened.
-The default is 0.
-The attempt to read the table in may fail due to memory shortage;
-in this case
-.I dbz
-quietly falls back on its default behavior.
-.IR Store s
-to an in-memory database are not (in general) written out to the file
-until
-.IR dbmclose
-or
-.IR dbzsync ,
-so if robustness in the presence of crashes
-or concurrent accesses
-is crucial, in-memory databases
-should probably be avoided.
-.PP
-.I Dbzsync
-causes all buffers etc. to be flushed out to the files.
-It is typically used as a precaution against crashes or concurrent accesses
-when a
-.IR dbz -using
-process will be running for a long time.
-It is a somewhat expensive operation,
-especially
-for an in-memory database.
-.PP
-.I Dbzcancel
-cancels any pending writes from buffers.
-This is typically useful only for in-core databases, since writes are
-otherwise done immediately.
-Its main purpose is to let a child process, in the wake of a
-.IR fork ,
-do a
-.I dbmclose
-without writing its parent's data to disk.
-.PP
-If
-.I dbz
-has been compiled with debugging facilities available (which makes it
-bigger and a bit slower),
-.I dbzdebug
-alters the value (and returns the previous value) of an internal flag
-which (when 1; default is 0) causes
-verbose and cryptic debugging output on standard output.
-.PP
-Concurrent reading of databases is fairly safe,
-but there is no (inter)locking,
-so concurrent updating is not.
-.PP
-The database files include a record of the byte order of the processor
-creating the database, and accesses by processors with different byte
-order will work, although they will be slightly slower.
-Byte order is preserved by
-.IR dbzagain .
-However,
-agreement on the size and internal structure of an
-.I fseek
-offset is necessary, as is consensus on
-the character set.
-.PP
-An open database occupies three
-.I stdio
-streams and their corresponding file descriptors;
-a fourth is needed for an in-memory database.
-Memory consumption is negligible (except for
-.I stdio
-buffers) except for in-memory databases.
-.SH SEE ALSO
-dbz(1), dbm(3)
-.SH DIAGNOSTICS
-Functions returning
-.I int
-values return 0 for success, \-1 for failure.
-Functions returning
-.I datum
-values return a value with
-.I dptr
-set to NULL for failure.
-.I Dbminit
-attempts to have
-.I errno
-set plausibly on return, but otherwise this is not guaranteed.
-An
-.I errno
-of
-.B EDOM
-from
-.I dbminit
-indicates that the database did not appear to be in
-.I dbz
-format.
-.SH HISTORY
-The original
-.I dbz
-was written by
-Jon Zeeff (zeeff@b-tech.ann-arbor.mi.us).
-Later contributions by David Butler and Mark Moraes.
-Extensive reworking,
-including this documentation,
-by Henry Spencer (henry@zoo.toronto.edu) as
-part of the C News project.
-Hashing function by Peter Honeyman.
-.SH BUGS
-The
-.I dptr
-members of returned
-.I datum
-values point to static storage which is overwritten by later calls.
-.PP
-Unlike
-.IR dbm ,
-.I dbz
-will misbehave if an existing key-value pair is `overwritten' by
-a new
-.I (dbz)store
-with the same key.
-The user is responsible for avoiding this by using
-.I (dbz)fetch
-first to check for duplicates;
-an internal optimization remembers the result of the
-first search so there is minimal overhead in this.
-.PP
-Waiting until after
-.I dbminit
-to bring the base file into existence
-will fail if
-.IR chdir (2)
-has been used meanwhile.
-.PP
-The RFC822 case mapper implements only a first approximation to the
-hideously-complex RFC822 case rules.
-.PP
-The prime finder in
-.I dbzsize
-is not particularly quick.
-.PP
-Should implement the
-.I dbm
-functions
-.IR delete ,
-.IR firstkey ,
-and
-.IR nextkey .
-.PP
-On C implementations which trap integer overflow,
-.I dbz
-will refuse to
-.I (dbz)store
-an
-.I fseek
-offset equal to the greatest
-representable
-positive number,
-as this would cause overflow in the biased representation used.
-.PP
-.I Dbzagain
-perhaps ought to notice when many offsets
-in the old database were
-too big for
-tagging, and shrink the tag mask to match.
-.PP
-Marking
-.IR dbz 's
-file descriptors
-.RI close-on- exec
-would be a better approach to the problem
-.I dbzcancel
-tries to address, but that's harder to do portably.
diff --git a/contrib/libio/dbz/dbz.c b/contrib/libio/dbz/dbz.c
deleted file mode 100644
index 7489a09d15ae..000000000000
--- a/contrib/libio/dbz/dbz.c
+++ /dev/null
@@ -1,1768 +0,0 @@
-/*
-
-dbz.c V3.2
-
-Copyright 1988 Jon Zeeff (zeeff@b-tech.ann-arbor.mi.us)
-You can use this code in any manner, as long as you leave my name on it
-and don't hold me responsible for any problems with it.
-
-Hacked on by gdb@ninja.UUCP (David Butler); Sun Jun 5 00:27:08 CDT 1988
-
-Various improvments + INCORE by moraes@ai.toronto.edu (Mark Moraes)
-
-Major reworking by Henry Spencer as part of the C News project.
-
-These routines replace dbm as used by the usenet news software
-(it's not a full dbm replacement by any means). It's fast and
-simple. It contains no AT&T code.
-
-In general, dbz's files are 1/20 the size of dbm's. Lookup performance
-is somewhat better, while file creation is spectacularly faster, especially
-if the incore facility is used.
-
-*/
-
-#include <stdio.h>
-#include <sys/types.h>
-#include <string.h>
-#include <ctype.h>
-#include <errno.h>
-#ifndef __STDC__
-extern int errno;
-#endif
-#include <dbz.h>
-
-/*
- * #ifdef index. "LIA" = "leave it alone unless you know what you're doing".
- *
- * FUNNYSEEKS SEEK_SET is not 0, get it from <unistd.h>
- * INDEX_SIZE backward compatibility with old dbz; avoid using this
- * NMEMORY number of days of memory for use in sizing new table (LIA)
- * INCORE backward compatibility with old dbz; use dbzincore() instead
- * DBZDEBUG enable debugging
- * DEFSIZE default table size (not as critical as in old dbz)
- * OLDBNEWS default case mapping as in old B News; set NOBUFFER
- * BNEWS default case mapping as in current B News; set NOBUFFER
- * DEFCASE default case-map algorithm selector
- * NOTAGS fseek offsets are strange, do not do tagging (see below)
- * NPAGBUF size of .pag buffer, in longs (LIA)
- * SHISTBUF size of ASCII-file buffer, in bytes (LIA)
- * MAXRUN length of run which shifts to next table (see below) (LIA)
- * OVERFLOW long-int arithmetic overflow must be avoided, will trap
- * NOBUFFER do not buffer hash-table i/o, B News locking is defective
- */
-
-#ifdef FUNNYSEEKS
-#include <unistd.h>
-#else
-#define SEEK_SET 0
-#endif
-#ifdef OVERFLOW
-#include <limits.h>
-#endif
-
-static int dbzversion = 3; /* for validating .dir file format */
-
-/*
- * The dbz database exploits the fact that when news stores a <key,value>
- * tuple, the `value' part is a seek offset into a text file, pointing to
- * a copy of the `key' part. This avoids the need to store a copy of
- * the key in the dbz files. However, the text file *must* exist and be
- * consistent with the dbz files, or things will fail.
- *
- * The basic format of the database is a simple hash table containing the
- * values. A value is stored by indexing into the table using a hash value
- * computed from the key; collisions are resolved by linear probing (just
- * search forward for an empty slot, wrapping around to the beginning of
- * the table if necessary). Linear probing is a performance disaster when
- * the table starts to get full, so a complication is introduced. The
- * database is actually one *or more* tables, stored sequentially in the
- * .pag file, and the length of linear-probe sequences is limited. The
- * search (for an existing item or an empty slot) always starts in the
- * first table, and whenever MAXRUN probes have been done in table N,
- * probing continues in table N+1. This behaves reasonably well even in
- * cases of massive overflow. There are some other small complications
- * added, see comments below.
- *
- * The table size is fixed for any particular database, but is determined
- * dynamically when a database is rebuilt. The strategy is to try to pick
- * the size so the first table will be no more than 2/3 full, that being
- * slightly before the point where performance starts to degrade. (It is
- * desirable to be a bit conservative because the overflow strategy tends
- * to produce files with holes in them, which is a nuisance.)
- */
-
-/*
- * The following is for backward compatibility.
- */
-#ifdef INDEX_SIZE
-#define DEFSIZE INDEX_SIZE
-#endif
-
-/*
- * ANSI C says the offset argument to fseek is a long, not an off_t, for some
- * reason. Let's use off_t anyway.
- */
-#define SOF (sizeof(off_t))
-
-/*
- * We assume that unused areas of a binary file are zeros, and that the
- * bit pattern of `(off_t)0' is all zeros. The alternative is rather
- * painful file initialization. Note that okayvalue(), if OVERFLOW is
- * defined, knows what value of an offset would cause overflow.
- */
-#define VACANT ((off_t)0)
-#define BIAS(o) ((o)+1) /* make any valid off_t non-VACANT */
-#define UNBIAS(o) ((o)-1) /* reverse BIAS() effect */
-
-/*
- * In a Unix implementation, or indeed any in which an off_t is a byte
- * count, there are a bunch of high bits free in an off_t. There is a
- * use for them. Checking a possible hit by looking it up in the base
- * file is relatively expensive, and the cost can be dramatically reduced
- * by using some of those high bits to tag the value with a few more bits
- * of the key's hash. This detects most false hits without the overhead of
- * seek+read+strcmp. We use the top bit to indicate whether the value is
- * tagged or not, and don't tag a value which is using the tag bits itself.
- * We're in trouble if the off_t representation wants to use the top bit.
- * The actual bitmasks and offset come from the configuration stuff,
- * which permits fiddling with them as necessary, and also suppressing
- * them completely (by defining the masks to 0). We build pre-shifted
- * versions of the masks for efficiency.
- */
-static off_t tagbits; /* pre-shifted tag mask */
-static off_t taghere; /* pre-shifted tag-enable bit */
-static off_t tagboth; /* tagbits|taghere */
-#define HASTAG(o) ((o)&taghere)
-#define TAG(o) ((o)&tagbits)
-#define NOTAG(o) ((o)&~tagboth)
-#define CANTAG(o) (((o)&tagboth) == 0)
-#define MKTAG(v) (((v)<<conf.tagshift)&tagbits)
-
-/*
- * A new, from-scratch database, not built as a rebuild of an old one,
- * needs to know table size, casemap algorithm, and tagging. Normally
- * the user supplies this info, but there have to be defaults.
- */
-#ifndef DEFSIZE
-#define DEFSIZE 120011 /* 300007 might be better */
-#endif
-#ifdef OLDBNEWS
-#define DEFCASE '0' /* B2.10 -- no mapping */
-#define NOBUFFER /* B News locking is defective */
-#endif
-#ifdef BNEWS
-#define DEFCASE '=' /* B2.11 -- all mapped */
-#define NOBUFFER /* B News locking is defective */
-#endif
-#ifndef DEFCASE /* C News compatibility is the default */
-#define DEFCASE 'C' /* C News -- RFC822 mapping */
-#endif
-#ifndef NOTAGS
-#define TAGENB 0x80 /* tag enable is top bit, tag is next 7 */
-#define TAGMASK 0x7f
-#define TAGSHIFT 24
-#else
-#define TAGENB 0 /* no tags */
-#define TAGMASK 0
-#define TAGSHIFT 0
-#endif
-
-/*
- * We read configuration info from the .dir file into this structure,
- * so we can avoid wired-in assumptions for an existing database.
- *
- * Among the info is a record of recent peak usages, so that a new table
- * size can be chosen intelligently when rebuilding. 10 is a good
- * number of usages to keep, since news displays marked fluctuations
- * in volume on a 7-day cycle.
- */
-struct dbzconfig {
- int olddbz; /* .dir file empty but .pag not? */
- off_t tsize; /* table size */
-# ifndef NMEMORY
-# define NMEMORY 10 /* # days of use info to remember */
-# endif
-# define NUSEDS (1+NMEMORY)
- off_t used[NUSEDS]; /* entries used today, yesterday, ... */
- int valuesize; /* size of table values, == SOF */
- int bytemap[SOF]; /* byte-order map */
- char casemap; /* case-mapping algorithm (see cipoint()) */
- char fieldsep; /* field separator in base file, if any */
- off_t tagenb; /* unshifted tag-enable bit */
- off_t tagmask; /* unshifted tag mask */
- int tagshift; /* shift count for tagmask and tagenb */
-};
-static struct dbzconfig conf;
-static int getconf();
-static long getno();
-static int putconf();
-static void mybytemap();
-static off_t bytemap();
-
-/*
- * For a program that makes many, many references to the database, it
- * is a large performance win to keep the table in core, if it will fit.
- * Note that this does hurt robustness in the event of crashes, and
- * dbmclose() *must* be called to flush the in-core database to disk.
- * The code is prepared to deal with the possibility that there isn't
- * enough memory. There *is* an assumption that a size_t is big enough
- * to hold the size (in bytes) of one table, so dbminit() tries to figure
- * out whether this is possible first.
- *
- * The preferred way to ask for an in-core table is to do dbzincore(1)
- * before dbminit(). The default is not to do it, although -DINCORE
- * overrides this for backward compatibility with old dbz.
- *
- * We keep only the first table in core. This greatly simplifies the
- * code, and bounds memory demand. Furthermore, doing this is a large
- * performance win even in the event of massive overflow.
- */
-#ifdef INCORE
-static int incore = 1;
-#else
-static int incore = 0;
-#endif
-
-/*
- * Stdio buffer for .pag reads. Buffering more than about 16 does not help
- * significantly at the densities we try to maintain, and the much larger
- * buffers that most stdios default to are much more expensive to fill.
- * With small buffers, stdio is performance-competitive with raw read(),
- * and it's much more portable.
- */
-#ifndef NPAGBUF
-#define NPAGBUF 16
-#endif
-#ifndef NOBUFFER
-#ifdef _IOFBF
-static off_t pagbuf[NPAGBUF]; /* only needed if !NOBUFFER && _IOFBF */
-#endif
-#endif
-
-/*
- * Stdio buffer for base-file reads. Message-IDs (all news ever needs to
- * read) are essentially never longer than 64 bytes, and the typical stdio
- * buffer is so much larger that it is much more expensive to fill.
- */
-#ifndef SHISTBUF
-#define SHISTBUF 64
-#endif
-#ifdef _IOFBF
-static char basebuf[SHISTBUF]; /* only needed if _IOFBF exists */
-#endif
-
-/*
- * Data structure for recording info about searches.
- */
-struct searcher {
- off_t place; /* current location in file */
- int tabno; /* which table we're in */
- int run; /* how long we'll stay in this table */
-# ifndef MAXRUN
-# define MAXRUN 100
-# endif
- long hash; /* the key's hash code (for optimization) */
- off_t tag; /* tag we are looking for */
- int seen; /* have we examined current location? */
- int aborted; /* has i/o error aborted search? */
-};
-static void start();
-#define FRESH ((struct searcher *)NULL)
-static off_t search();
-#define NOTFOUND ((off_t)-1)
-static int okayvalue();
-static int set();
-
-/*
- * Arguably the searcher struct for a given routine ought to be local to
- * it, but a fetch() is very often immediately followed by a store(), and
- * in some circumstances it is a useful performance win to remember where
- * the fetch() completed. So we use a global struct and remember whether
- * it is current.
- */
-static struct searcher srch;
-static struct searcher *prevp; /* &srch or FRESH */
-
-/* byte-ordering stuff */
-static int mybmap[SOF]; /* my byte order (see mybytemap()) */
-static int bytesame; /* is database order same as mine? */
-#define MAPIN(o) ((bytesame) ? (o) : bytemap((o), conf.bytemap, mybmap))
-#define MAPOUT(o) ((bytesame) ? (o) : bytemap((o), mybmap, conf.bytemap))
-
-/*
- * The double parentheses needed to make this work are ugly, but the
- * alternative (under most compilers) is to pack around 2K of unused
- * strings -- there's just no way to get rid of them.
- */
-static int debug; /* controlled by dbzdebug() */
-#ifdef DBZDEBUG
-#define DEBUG(args) if (debug) { (void) printf args ; }
-#else
-#define DEBUG(args) ;
-#endif
-
-/* externals used */
-extern char *malloc();
-extern char *calloc();
-extern void free(); /* ANSI C; some old implementations say int */
-extern int atoi();
-extern long atol();
-
-/* misc. forwards */
-static long hash();
-static void crcinit();
-static char *cipoint();
-static char *mapcase();
-static int isprime();
-static FILE *latebase();
-
-/* file-naming stuff */
-static char dir[] = ".dir";
-static char pag[] = ".pag";
-static char *enstring();
-
-/* central data structures */
-static FILE *basef; /* descriptor for base file */
-static char *basefname; /* name for not-yet-opened base file */
-static FILE *dirf; /* descriptor for .dir file */
-static int dirronly; /* dirf open read-only? */
-static FILE *pagf = NULL; /* descriptor for .pag file */
-static off_t pagpos; /* posn in pagf; only search may set != -1 */
-static int pagronly; /* pagf open read-only? */
-static off_t *corepag; /* incore version of .pag file, if any */
-static FILE *bufpagf; /* well-buffered pagf, for incore rewrite */
-static off_t *getcore();
-static int putcore();
-static int written; /* has a store() been done? */
-
-/*
- - dbzfresh - set up a new database, no historical info
- */
-int /* 0 success, -1 failure */
-dbzfresh(name, size, fs, cmap, tagmask)
-char *name; /* base name; .dir and .pag must exist */
-long size; /* table size (0 means default) */
-int fs; /* field-separator character in base file */
-int cmap; /* case-map algorithm (0 means default) */
-off_t tagmask; /* 0 default, 1 no tags */
-{
- register char *fn;
- struct dbzconfig c;
- register off_t m;
- register FILE *f;
-
- if (pagf != NULL) {
- DEBUG(("dbzfresh: database already open\n"));
- return(-1);
- }
- if (size != 0 && size < 2) {
- DEBUG(("dbzfresh: preposterous size (%ld)\n", size));
- return(-1);
- }
-
- /* get default configuration */
- if (getconf((FILE *)NULL, (FILE *)NULL, &c) < 0)
- return(-1); /* "can't happen" */
-
- /* and mess with it as specified */
- if (size != 0)
- c.tsize = size;
- c.fieldsep = fs;
- switch (cmap) {
- case 0:
- case '0':
- case 'B': /* 2.10 compat */
- c.casemap = '0'; /* '\0' nicer, but '0' printable! */
- break;
- case '=':
- case 'b': /* 2.11 compat */
- c.casemap = '=';
- break;
- case 'C':
- c.casemap = 'C';
- break;
- case '?':
- c.casemap = DEFCASE;
- break;
- default:
- DEBUG(("dbzfresh case map `%c' unknown\n", cmap));
- return(-1);
- break;
- }
- switch (tagmask) {
- case 0: /* default */
- break;
- case 1: /* no tags */
- c.tagshift = 0;
- c.tagmask = 0;
- c.tagenb = 0;
- break;
- default:
- m = tagmask;
- c.tagshift = 0;
- while (!(m&01)) {
- m >>= 1;
- c.tagshift++;
- }
- c.tagmask = m;
- c.tagenb = (m << 1) & ~m;
- break;
- }
-
- /* write it out */
- fn = enstring(name, dir);
- if (fn == NULL)
- return(-1);
- f = fopen(fn, "w");
- free(fn);
- if (f == NULL) {
- DEBUG(("dbzfresh: unable to write config\n"));
- return(-1);
- }
- if (putconf(f, &c) < 0) {
- (void) fclose(f);
- return(-1);
- }
- if (fclose(f) == EOF) {
- DEBUG(("dbzfresh: fclose failure\n"));
- return(-1);
- }
-
- /* create/truncate .pag */
- fn = enstring(name, pag);
- if (fn == NULL)
- return(-1);
- f = fopen(fn, "w");
- free(fn);
- if (f == NULL) {
- DEBUG(("dbzfresh: unable to create/truncate .pag file\n"));
- return(-1);
- } else
- (void) fclose(f);
-
- /* and punt to dbminit for the hard work */
- return(dbminit(name));
-}
-
-/*
- - dbzsize - what's a good table size to hold this many entries?
- */
-long
-dbzsize(contents)
-long contents; /* 0 means what's the default */
-{
- register long n;
-
- if (contents <= 0) { /* foulup or default inquiry */
- DEBUG(("dbzsize: preposterous input (%ld)\n", contents));
- return(DEFSIZE);
- }
- n = (contents/2)*3; /* try to keep table at most 2/3 full */
- if (!(n&01)) /* make it odd */
- n++;
- DEBUG(("dbzsize: tentative size %ld\n", n));
- while (!isprime(n)) /* and look for a prime */
- n += 2;
- DEBUG(("dbzsize: final size %ld\n", n));
-
- return(n);
-}
-
-/*
- - isprime - is a number prime?
- *
- * This is not a terribly efficient approach.
- */
-static int /* predicate */
-isprime(x)
-register long x;
-{
- static int quick[] = { 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 0 };
- register int *ip;
- register long div;
- register long stop;
-
- /* hit the first few primes quickly to eliminate easy ones */
- /* this incidentally prevents ridiculously small tables */
- for (ip = quick; (div = *ip) != 0; ip++)
- if (x%div == 0) {
- DEBUG(("isprime: quick result on %ld\n", (long)x));
- return(0);
- }
-
- /* approximate square root of x */
- for (stop = x; x/stop < stop; stop >>= 1)
- continue;
- stop <<= 1;
-
- /* try odd numbers up to stop */
- for (div = *--ip; div < stop; div += 2)
- if (x%div == 0)
- return(0);
-
- return(1);
-}
-
-/*
- - dbzagain - set up a new database to be a rebuild of an old one
- */
-int /* 0 success, -1 failure */
-dbzagain(name, oldname)
-char *name; /* base name; .dir and .pag must exist */
-char *oldname; /* base name; all must exist */
-{
- register char *fn;
- struct dbzconfig c;
- register int i;
- register long top;
- register FILE *f;
- register int newtable;
- register off_t newsize;
-
- if (pagf != NULL) {
- DEBUG(("dbzagain: database already open\n"));
- return(-1);
- }
-
- /* pick up the old configuration */
- fn = enstring(oldname, dir);
- if (fn == NULL)
- return(-1);
- f = fopen(fn, "r");
- free(fn);
- if (f == NULL) {
- DEBUG(("dbzagain: cannot open old .dir file\n"));
- return(-1);
- }
- i = getconf(f, (FILE *)NULL, &c);
- (void) fclose(f);
- if (i < 0) {
- DEBUG(("dbzagain: getconf failed\n"));
- return(-1);
- }
-
- /* tinker with it */
- top = 0;
- newtable = 0;
- for (i = 0; i < NUSEDS; i++) {
- if (top < c.used[i])
- top = c.used[i];
- if (c.used[i] == 0)
- newtable = 1; /* hasn't got full usage history yet */
- }
- if (top == 0) {
- DEBUG(("dbzagain: old table has no contents!\n"));
- newtable = 1;
- }
- for (i = NUSEDS-1; i > 0; i--)
- c.used[i] = c.used[i-1];
- c.used[0] = 0;
- newsize = dbzsize(top);
- if (!newtable || newsize > c.tsize) /* don't shrink new table */
- c.tsize = newsize;
-
- /* write it out */
- fn = enstring(name, dir);
- if (fn == NULL)
- return(-1);
- f = fopen(fn, "w");
- free(fn);
- if (f == NULL) {
- DEBUG(("dbzagain: unable to write new .dir\n"));
- return(-1);
- }
- i = putconf(f, &c);
- (void) fclose(f);
- if (i < 0) {
- DEBUG(("dbzagain: putconf failed\n"));
- return(-1);
- }
-
- /* create/truncate .pag */
- fn = enstring(name, pag);
- if (fn == NULL)
- return(-1);
- f = fopen(fn, "w");
- free(fn);
- if (f == NULL) {
- DEBUG(("dbzagain: unable to create/truncate .pag file\n"));
- return(-1);
- } else
- (void) fclose(f);
-
- /* and let dbminit do the work */
- return(dbminit(name));
-}
-
-/*
- - dbminit - open a database, creating it (using defaults) if necessary
- *
- * We try to leave errno set plausibly, to the extent that underlying
- * functions permit this, since many people consult it if dbminit() fails.
- */
-int /* 0 success, -1 failure */
-dbminit(name)
-char *name;
-{
- register int i;
- register size_t s;
- register char *dirfname;
- register char *pagfname;
-
- if (pagf != NULL) {
- DEBUG(("dbminit: dbminit already called once\n"));
- errno = 0;
- return(-1);
- }
-
- /* open the .dir file */
- dirfname = enstring(name, dir);
- if (dirfname == NULL)
- return(-1);
- dirf = fopen(dirfname, "r+");
- if (dirf == NULL) {
- dirf = fopen(dirfname, "r");
- dirronly = 1;
- } else
- dirronly = 0;
- free(dirfname);
- if (dirf == NULL) {
- DEBUG(("dbminit: can't open .dir file\n"));
- return(-1);
- }
-
- /* open the .pag file */
- pagfname = enstring(name, pag);
- if (pagfname == NULL) {
- (void) fclose(dirf);
- return(-1);
- }
- pagf = fopen(pagfname, "r+b");
- if (pagf == NULL) {
- pagf = fopen(pagfname, "rb");
- if (pagf == NULL) {
- DEBUG(("dbminit: .pag open failed\n"));
- (void) fclose(dirf);
- free(pagfname);
- return(-1);
- }
- pagronly = 1;
- } else if (dirronly)
- pagronly = 1;
- else
- pagronly = 0;
-#ifdef NOBUFFER
- /*
- * B News does not do adequate locking on its database accesses.
- * Why it doesn't get into trouble using dbm is a mystery. In any
- * case, doing unbuffered i/o does not cure the problem, but does
- * enormously reduce its incidence.
- */
- (void) setbuf(pagf, (char *)NULL);
-#else
-#ifdef _IOFBF
- (void) setvbuf(pagf, (char *)pagbuf, _IOFBF, sizeof(pagbuf));
-#endif
-#endif
- pagpos = -1;
- /* don't free pagfname, need it below */
-
- /* open the base file */
- basef = fopen(name, "r");
- if (basef == NULL) {
- DEBUG(("dbminit: basefile open failed\n"));
- basefname = enstring(name, "");
- if (basefname == NULL) {
- (void) fclose(pagf);
- (void) fclose(dirf);
- free(pagfname);
- pagf = NULL;
- return(-1);
- }
- } else
- basefname = NULL;
-#ifdef _IOFBF
- if (basef != NULL)
- (void) setvbuf(basef, basebuf, _IOFBF, sizeof(basebuf));
-#endif
-
- /* pick up configuration */
- if (getconf(dirf, pagf, &conf) < 0) {
- DEBUG(("dbminit: getconf failure\n"));
- (void) fclose(basef);
- (void) fclose(pagf);
- (void) fclose(dirf);
- free(pagfname);
- pagf = NULL;
- errno = EDOM; /* kind of a kludge, but very portable */
- return(-1);
- }
- tagbits = conf.tagmask << conf.tagshift;
- taghere = conf.tagenb << conf.tagshift;
- tagboth = tagbits | taghere;
- mybytemap(mybmap);
- bytesame = 1;
- for (i = 0; i < SOF; i++)
- if (mybmap[i] != conf.bytemap[i])
- bytesame = 0;
-
- /* get first table into core, if it looks desirable and feasible */
- s = (size_t)conf.tsize * SOF;
- if (incore && (off_t)(s/SOF) == conf.tsize) {
- bufpagf = fopen(pagfname, (pagronly) ? "rb" : "r+b");
- if (bufpagf != NULL)
- corepag = getcore(bufpagf);
- } else {
- bufpagf = NULL;
- corepag = NULL;
- }
- free(pagfname);
-
- /* misc. setup */
- crcinit();
- written = 0;
- prevp = FRESH;
- DEBUG(("dbminit: succeeded\n"));
- return(0);
-}
-
-/*
- - enstring - concatenate two strings into a malloced area
- */
-static char * /* NULL if malloc fails */
-enstring(s1, s2)
-char *s1;
-char *s2;
-{
- register char *p;
-
- p = malloc((size_t)strlen(s1) + (size_t)strlen(s2) + 1);
- if (p != NULL) {
- (void) strcpy(p, s1);
- (void) strcat(p, s2);
- } else {
- DEBUG(("enstring(%s, %s) out of memory\n", s1, s2));
- }
- return(p);
-}
-
-/*
- - dbmclose - close a database
- */
-int
-dbmclose()
-{
- register int ret = 0;
-
- if (pagf == NULL) {
- DEBUG(("dbmclose: not opened!\n"));
- return(-1);
- }
-
- if (fclose(pagf) == EOF) {
- DEBUG(("dbmclose: fclose(pagf) failed\n"));
- ret = -1;
- }
- pagf = basef; /* ensure valid pointer; dbzsync checks it */
- if (dbzsync() < 0)
- ret = -1;
- if (bufpagf != NULL && fclose(bufpagf) == EOF) {
- DEBUG(("dbmclose: fclose(bufpagf) failed\n"));
- ret = -1;
- }
- if (corepag != NULL)
- free((char *)corepag);
- corepag = NULL;
- if (fclose(basef) == EOF) {
- DEBUG(("dbmclose: fclose(basef) failed\n"));
- ret = -1;
- }
- if (basefname != NULL)
- free(basefname);
- basef = NULL;
- pagf = NULL;
- if (fclose(dirf) == EOF) {
- DEBUG(("dbmclose: fclose(dirf) failed\n"));
- ret = -1;
- }
-
- DEBUG(("dbmclose: %s\n", (ret == 0) ? "succeeded" : "failed"));
- return(ret);
-}
-
-/*
- - dbzsync - push all in-core data out to disk
- */
-int
-dbzsync()
-{
- register int ret = 0;
-
- if (pagf == NULL) {
- DEBUG(("dbzsync: not opened!\n"));
- return(-1);
- }
- if (!written)
- return(0);
-
- if (corepag != NULL) {
- if (putcore(corepag, bufpagf) < 0) {
- DEBUG(("dbzsync: putcore failed\n"));
- ret = -1;
- }
- }
- if (!conf.olddbz)
- if (putconf(dirf, &conf) < 0)
- ret = -1;
-
- DEBUG(("dbzsync: %s\n", (ret == 0) ? "succeeded" : "failed"));
- return(ret);
-}
-
-/*
- - dbzcancel - cancel writing of in-core data
- * Mostly for use from child processes.
- * Note that we don't need to futz around with stdio buffers, because we
- * always fflush them immediately anyway and so they never have stale data.
- */
-int
-dbzcancel()
-{
- if (pagf == NULL) {
- DEBUG(("dbzcancel: not opened!\n"));
- return(-1);
- }
-
- written = 0;
- return(0);
-}
-
-/*
- - dbzfetch - fetch() with case mapping built in
- */
-datum
-dbzfetch(key)
-datum key;
-{
- char buffer[DBZMAXKEY + 1];
- datum mappedkey;
- register size_t keysize;
-
- DEBUG(("dbzfetch: (%s)\n", key.dptr));
-
- /* Key is supposed to be less than DBZMAXKEY */
- keysize = key.dsize;
- if (keysize >= DBZMAXKEY) {
- keysize = DBZMAXKEY;
- DEBUG(("keysize is %d - truncated to %d\n", key.dsize, DBZMAXKEY));
- }
-
- mappedkey.dptr = mapcase(buffer, key.dptr, keysize);
- buffer[keysize] = '\0'; /* just a debug aid */
- mappedkey.dsize = keysize;
-
- return(fetch(mappedkey));
-}
-
-/*
- - fetch - get an entry from the database
- *
- * Disgusting fine point, in the name of backward compatibility: if the
- * last character of "key" is a NUL, that character is (effectively) not
- * part of the comparison against the stored keys.
- */
-datum /* dptr NULL, dsize 0 means failure */
-fetch(key)
-datum key;
-{
- char buffer[DBZMAXKEY + 1];
- static off_t key_ptr; /* return value points here */
- datum output;
- register size_t keysize;
- register size_t cmplen;
- register char *sepp;
-
- DEBUG(("fetch: (%s)\n", key.dptr));
- output.dptr = NULL;
- output.dsize = 0;
- prevp = FRESH;
-
- /* Key is supposed to be less than DBZMAXKEY */
- keysize = key.dsize;
- if (keysize >= DBZMAXKEY) {
- keysize = DBZMAXKEY;
- DEBUG(("keysize is %d - truncated to %d\n", key.dsize, DBZMAXKEY));
- }
-
- if (pagf == NULL) {
- DEBUG(("fetch: database not open!\n"));
- return(output);
- } else if (basef == NULL) { /* basef didn't exist yet */
- basef = latebase();
- if (basef == NULL)
- return(output);
- }
-
- cmplen = keysize;
- sepp = &conf.fieldsep;
- if (key.dptr[keysize-1] == '\0') {
- cmplen--;
- sepp = &buffer[keysize-1];
- }
- start(&srch, &key, FRESH);
- while ((key_ptr = search(&srch)) != NOTFOUND) {
- DEBUG(("got 0x%lx\n", key_ptr));
-
- /* fetch the key */
- if (fseek(basef, key_ptr, SEEK_SET) != 0) {
- DEBUG(("fetch: seek failed\n"));
- return(output);
- }
- if (fread(buffer, 1, keysize, basef) != keysize) {
- DEBUG(("fetch: read failed\n"));
- return(output);
- }
-
- /* try it */
- buffer[keysize] = '\0'; /* terminated for DEBUG */
- (void) mapcase(buffer, buffer, keysize);
- DEBUG(("fetch: buffer (%s) looking for (%s) size = %d\n",
- buffer, key.dptr, keysize));
- if (memcmp(key.dptr, buffer, cmplen) == 0 &&
- (*sepp == conf.fieldsep || *sepp == '\0')) {
- /* we found it */
- output.dptr = (char *)&key_ptr;
- output.dsize = SOF;
- DEBUG(("fetch: successful\n"));
- return(output);
- }
- }
-
- /* we didn't find it */
- DEBUG(("fetch: failed\n"));
- prevp = &srch; /* remember where we stopped */
- return(output);
-}
-
-/*
- - latebase - try to open a base file that wasn't there at the start
- */
-static FILE *
-latebase()
-{
- register FILE *it;
-
- if (basefname == NULL) {
- DEBUG(("latebase: name foulup\n"));
- return(NULL);
- }
- it = fopen(basefname, "r");
- if (it == NULL) {
- DEBUG(("latebase: still can't open base\n"));
- } else {
- DEBUG(("latebase: late open succeeded\n"));
- free(basefname);
- basefname = NULL;
-#ifdef _IOFBF
- (void) setvbuf(it, basebuf, _IOFBF, sizeof(basebuf));
-#endif
- }
- return(it);
-}
-
-/*
- - dbzstore - store() with case mapping built in
- */
-int
-dbzstore(key, data)
-datum key;
-datum data;
-{
- char buffer[DBZMAXKEY + 1];
- datum mappedkey;
- register size_t keysize;
-
- DEBUG(("dbzstore: (%s)\n", key.dptr));
-
- /* Key is supposed to be less than DBZMAXKEY */
- keysize = key.dsize;
- if (keysize >= DBZMAXKEY) {
- DEBUG(("dbzstore: key size too big (%d)\n", key.dsize));
- return(-1);
- }
-
- mappedkey.dptr = mapcase(buffer, key.dptr, keysize);
- buffer[keysize] = '\0'; /* just a debug aid */
- mappedkey.dsize = keysize;
-
- return(store(mappedkey, data));
-}
-
-/*
- - store - add an entry to the database
- */
-int /* 0 success, -1 failure */
-store(key, data)
-datum key;
-datum data;
-{
- off_t value;
-
- if (pagf == NULL) {
- DEBUG(("store: database not open!\n"));
- return(-1);
- } else if (basef == NULL) { /* basef didn't exist yet */
- basef = latebase();
- if (basef == NULL)
- return(-1);
- }
- if (pagronly) {
- DEBUG(("store: database open read-only\n"));
- return(-1);
- }
- if (data.dsize != SOF) {
- DEBUG(("store: value size wrong (%d)\n", data.dsize));
- return(-1);
- }
- if (key.dsize >= DBZMAXKEY) {
- DEBUG(("store: key size too big (%d)\n", key.dsize));
- return(-1);
- }
-
- /* copy the value in to ensure alignment */
- (void) memcpy((char *)&value, data.dptr, SOF);
- DEBUG(("store: (%s, %ld)\n", key.dptr, (long)value));
- if (!okayvalue(value)) {
- DEBUG(("store: reserved bit or overflow in 0x%lx\n", value));
- return(-1);
- }
-
- /* find the place, exploiting previous search if possible */
- start(&srch, &key, prevp);
- while (search(&srch) != NOTFOUND)
- continue;
-
- prevp = FRESH;
- conf.used[0]++;
- DEBUG(("store: used count %ld\n", conf.used[0]));
- written = 1;
- return(set(&srch, value));
-}
-
-/*
- - dbzincore - control attempts to keep .pag file in core
- */
-int /* old setting */
-dbzincore(value)
-int value;
-{
- register int old = incore;
-
- incore = value;
- return(old);
-}
-
-/*
- - getconf - get configuration from .dir file
- */
-static int /* 0 success, -1 failure */
-getconf(df, pf, cp)
-register FILE *df; /* NULL means just give me the default */
-register FILE *pf; /* NULL means don't care about .pag */
-register struct dbzconfig *cp;
-{
- register int c;
- register int i;
- int err = 0;
-
- c = (df != NULL) ? getc(df) : EOF;
- if (c == EOF) { /* empty file, no configuration known */
- cp->olddbz = 0;
- if (df != NULL && pf != NULL && getc(pf) != EOF)
- cp->olddbz = 1;
- cp->tsize = DEFSIZE;
- cp->fieldsep = '\t';
- for (i = 0; i < NUSEDS; i++)
- cp->used[i] = 0;
- cp->valuesize = SOF;
- mybytemap(cp->bytemap);
- cp->casemap = DEFCASE;
- cp->tagenb = TAGENB;
- cp->tagmask = TAGMASK;
- cp->tagshift = TAGSHIFT;
- DEBUG(("getconf: defaults (%ld, %c, (0x%lx/0x%lx<<%d))\n",
- cp->tsize, cp->casemap, cp->tagenb,
- cp->tagmask, cp->tagshift));
- return(0);
- }
- (void) ungetc(c, df);
-
- /* first line, the vital stuff */
- if (getc(df) != 'd' || getc(df) != 'b' || getc(df) != 'z')
- err = -1;
- if (getno(df, &err) != dbzversion)
- err = -1;
- cp->tsize = getno(df, &err);
- cp->fieldsep = getno(df, &err);
- while ((c = getc(df)) == ' ')
- continue;
- cp->casemap = c;
- cp->tagenb = getno(df, &err);
- cp->tagmask = getno(df, &err);
- cp->tagshift = getno(df, &err);
- cp->valuesize = getno(df, &err);
- if (cp->valuesize != SOF) {
- DEBUG(("getconf: wrong off_t size (%d)\n", cp->valuesize));
- err = -1;
- cp->valuesize = SOF; /* to protect the loops below */
- }
- for (i = 0; i < cp->valuesize; i++)
- cp->bytemap[i] = getno(df, &err);
- if (getc(df) != '\n')
- err = -1;
- DEBUG(("size %ld, sep %d, cmap %c, tags 0x%lx/0x%lx<<%d, ", cp->tsize,
- cp->fieldsep, cp->casemap, cp->tagenb, cp->tagmask,
- cp->tagshift));
- DEBUG(("bytemap (%d)", cp->valuesize));
- for (i = 0; i < cp->valuesize; i++) {
- DEBUG((" %d", cp->bytemap[i]));
- }
- DEBUG(("\n"));
-
- /* second line, the usages */
- for (i = 0; i < NUSEDS; i++)
- cp->used[i] = getno(df, &err);
- if (getc(df) != '\n')
- err = -1;
- DEBUG(("used %ld %ld %ld...\n", cp->used[0], cp->used[1], cp->used[2]));
-
- if (err < 0) {
- DEBUG(("getconf error\n"));
- return(-1);
- }
- return(0);
-}
-
-/*
- - getno - get a long
- */
-static long
-getno(f, ep)
-FILE *f;
-int *ep;
-{
- register char *p;
-# define MAXN 50
- char getbuf[MAXN];
- register int c;
-
- while ((c = getc(f)) == ' ')
- continue;
- if (c == EOF || c == '\n') {
- DEBUG(("getno: missing number\n"));
- *ep = -1;
- return(0);
- }
- p = getbuf;
- *p++ = c;
- while ((c = getc(f)) != EOF && c != '\n' && c != ' ')
- if (p < &getbuf[MAXN-1])
- *p++ = c;
- if (c == EOF) {
- DEBUG(("getno: EOF\n"));
- *ep = -1;
- } else
- (void) ungetc(c, f);
- *p = '\0';
-
- if (strspn(getbuf, "-1234567890") != strlen(getbuf)) {
- DEBUG(("getno: `%s' non-numeric\n", getbuf));
- *ep = -1;
- }
- return(atol(getbuf));
-}
-
-/*
- - putconf - write configuration to .dir file
- */
-static int /* 0 success, -1 failure */
-putconf(f, cp)
-register FILE *f;
-register struct dbzconfig *cp;
-{
- register int i;
- register int ret = 0;
-
- if (fseek(f, 0, SEEK_SET) != 0) {
- DEBUG(("fseek failure in putconf\n"));
- ret = -1;
- }
- fprintf(f, "dbz %d %ld %d %c %ld %ld %d %d", dbzversion,
- (long)cp->tsize,
- cp->fieldsep, cp->casemap, (long)cp->tagenb,
- (long)cp->tagmask, cp->tagshift,
- cp->valuesize);
-
- for (i = 0; i < cp->valuesize; i++)
- fprintf(f, " %d", cp->bytemap[i]);
- fprintf(f, "\n");
- for (i = 0; i < NUSEDS; i++)
- fprintf(f, "%ld%c",
- (long)cp->used[i], (i < NUSEDS-1) ? ' ' : '\n');
-
-
- (void) fflush(f);
- if (ferror(f))
- ret = -1;
-
- DEBUG(("putconf status %d\n", ret));
- return(ret);
-}
-
-/*
- - getcore - try to set up an in-core copy of .pag file
- */
-static off_t * /* pointer to copy, or NULL */
-getcore(f)
-FILE *f;
-{
- register off_t *p;
- register size_t i;
- register size_t nread;
- register char *it;
-
- it = malloc((size_t)conf.tsize * SOF);
- if (it == NULL) {
- DEBUG(("getcore: malloc failed\n"));
- return(NULL);
- }
-
- nread = fread(it, SOF, (size_t)conf.tsize, f);
- if (ferror(f)) {
- DEBUG(("getcore: read failed\n"));
- free(it);
- return(NULL);
- }
-
- p = (off_t *)it + nread;
- i = (size_t)conf.tsize - nread;
- while (i-- > 0)
- *p++ = VACANT;
- return((off_t *)it);
-}
-
-/*
- - putcore - try to rewrite an in-core table
- */
-static int /* 0 okay, -1 fail */
-putcore(tab, f)
-off_t *tab;
-FILE *f;
-{
- if (fseek(f, 0, SEEK_SET) != 0) {
- DEBUG(("fseek failure in putcore\n"));
- return(-1);
- }
- (void) fwrite((char *)tab, SOF, (size_t)conf.tsize, f);
- (void) fflush(f);
- return((ferror(f)) ? -1 : 0);
-}
-
-/*
- - start - set up to start or restart a search
- */
-static void
-start(sp, kp, osp)
-register struct searcher *sp;
-register datum *kp;
-register struct searcher *osp; /* may be FRESH, i.e. NULL */
-{
- register long h;
-
- h = hash(kp->dptr, kp->dsize);
- if (osp != FRESH && osp->hash == h) {
- if (sp != osp)
- *sp = *osp;
- DEBUG(("search restarted\n"));
- } else {
- sp->hash = h;
- sp->tag = MKTAG(h / conf.tsize);
- DEBUG(("tag 0x%lx\n", sp->tag));
- sp->place = h % conf.tsize;
- sp->tabno = 0;
- sp->run = (conf.olddbz) ? conf.tsize : MAXRUN;
- sp->aborted = 0;
- }
- sp->seen = 0;
-}
-
-/*
- - search - conduct part of a search
- */
-static off_t /* NOTFOUND if we hit VACANT or error */
-search(sp)
-register struct searcher *sp;
-{
- register off_t dest;
- register off_t value;
- off_t val; /* buffer for value (can't fread register) */
- register off_t place;
-
- if (sp->aborted)
- return(NOTFOUND);
-
- for (;;) {
- /* determine location to be examined */
- place = sp->place;
- if (sp->seen) {
- /* go to next location */
- if (--sp->run <= 0) {
- sp->tabno++;
- sp->run = MAXRUN;
- }
- place = (place+1)%conf.tsize + sp->tabno*conf.tsize;
- sp->place = place;
- } else
- sp->seen = 1; /* now looking at current location */
- DEBUG(("search @ %ld\n", place));
-
- /* get the tagged value */
- if (corepag != NULL && place < conf.tsize) {
- DEBUG(("search: in core\n"));
- value = MAPIN(corepag[place]);
- } else {
- /* seek, if necessary */
- dest = place * SOF;
- if (pagpos != dest) {
- if (fseek(pagf, dest, SEEK_SET) != 0) {
- DEBUG(("search: seek failed\n"));
- pagpos = -1;
- sp->aborted = 1;
- return(NOTFOUND);
- }
- pagpos = dest;
- }
-
- /* read it */
- if (fread((char *)&val, sizeof(val), 1, pagf) == 1)
- value = MAPIN(val);
- else if (ferror(pagf)) {
- DEBUG(("search: read failed\n"));
- pagpos = -1;
- sp->aborted = 1;
- return(NOTFOUND);
- } else
- value = VACANT;
-
- /* and finish up */
- pagpos += sizeof(val);
- }
-
- /* vacant slot is always cause to return */
- if (value == VACANT) {
- DEBUG(("search: empty slot\n"));
- return(NOTFOUND);
- };
-
- /* check the tag */
- value = UNBIAS(value);
- DEBUG(("got 0x%lx\n", value));
- if (!HASTAG(value)) {
- DEBUG(("tagless\n"));
- return(value);
- } else if (TAG(value) == sp->tag) {
- DEBUG(("match\n"));
- return(NOTAG(value));
- } else {
- DEBUG(("mismatch 0x%lx\n", TAG(value)));
- }
- }
- /* NOTREACHED */
-}
-
-/*
- - okayvalue - check that a value can be stored
- */
-static int /* predicate */
-okayvalue(value)
-off_t value;
-{
- if (HASTAG(value))
- return(0);
-#ifdef OVERFLOW
- if (value == LONG_MAX) /* BIAS() and UNBIAS() will overflow */
- return(0);
-#endif
- return(1);
-}
-
-/*
- - set - store a value into a location previously found by search
- */
-static int /* 0 success, -1 failure */
-set(sp, value)
-register struct searcher *sp;
-off_t value;
-{
- register off_t place = sp->place;
- register off_t v = value;
-
- if (sp->aborted)
- return(-1);
-
- if (CANTAG(v) && !conf.olddbz) {
- v |= sp->tag | taghere;
- if (v != UNBIAS(VACANT)) /* BIAS(v) won't look VACANT */
-#ifdef OVERFLOW
- if (v != LONG_MAX) /* and it won't overflow */
-#endif
- value = v;
- }
- DEBUG(("tagged value is 0x%lx\n", value));
- value = BIAS(value);
- value = MAPOUT(value);
-
- /* If we have the index file in memory, use it */
- if (corepag != NULL && place < conf.tsize) {
- corepag[place] = value;
- DEBUG(("set: incore\n"));
- return(0);
- }
-
- /* seek to spot */
- pagpos = -1; /* invalidate position memory */
- if (fseek(pagf, place * SOF, SEEK_SET) != 0) {
- DEBUG(("set: seek failed\n"));
- sp->aborted = 1;
- return(-1);
- }
-
- /* write in data */
- if (fwrite((char *)&value, SOF, 1, pagf) != 1) {
- DEBUG(("set: write failed\n"));
- sp->aborted = 1;
- return(-1);
- }
- /* fflush improves robustness, and buffer re-use is rare anyway */
- if (fflush(pagf) == EOF) {
- DEBUG(("set: fflush failed\n"));
- sp->aborted = 1;
- return(-1);
- }
-
- DEBUG(("set: succeeded\n"));
- return(0);
-}
-
-/*
- - mybytemap - determine this machine's byte map
- *
- * A byte map is an array of ints, sizeof(off_t) of them. The 0th int
- * is the byte number of the high-order byte in my off_t, and so forth.
- */
-static void
-mybytemap(map)
-int map[]; /* -> int[SOF] */
-{
- union {
- off_t o;
- char c[SOF];
- } u;
- register int *mp = &map[SOF];
- register int ntodo;
- register int i;
-
- u.o = 1;
- for (ntodo = (int)SOF; ntodo > 0; ntodo--) {
- for (i = 0; i < SOF; i++)
- if (u.c[i] != 0)
- break;
- if (i == SOF) {
- /* trouble -- set it to *something* consistent */
- DEBUG(("mybytemap: nonexistent byte %d!!!\n", ntodo));
- for (i = 0; i < SOF; i++)
- map[i] = i;
- return;
- }
- DEBUG(("mybytemap: byte %d\n", i));
- *--mp = i;
- while (u.c[i] != 0)
- u.o <<= 1;
- }
-}
-
-/*
- - bytemap - transform an off_t from byte ordering map1 to map2
- */
-static off_t /* transformed result */
-bytemap(ino, map1, map2)
-off_t ino;
-int *map1;
-int *map2;
-{
- union oc {
- off_t o;
- char c[SOF];
- };
- union oc in;
- union oc out;
- register int i;
-
- in.o = ino;
- for (i = 0; i < SOF; i++)
- out.c[map2[i]] = in.c[map1[i]];
- return(out.o);
-}
-
-/*
- * This is a simplified version of the pathalias hashing function.
- * Thanks to Steve Belovin and Peter Honeyman
- *
- * hash a string into a long int. 31 bit crc (from andrew appel).
- * the crc table is computed at run time by crcinit() -- we could
- * precompute, but it takes 1 clock tick on a 750.
- *
- * This fast table calculation works only if POLY is a prime polynomial
- * in the field of integers modulo 2. Since the coefficients of a
- * 32-bit polynomial won't fit in a 32-bit word, the high-order bit is
- * implicit. IT MUST ALSO BE THE CASE that the coefficients of orders
- * 31 down to 25 are zero. Happily, we have candidates, from
- * E. J. Watson, "Primitive Polynomials (Mod 2)", Math. Comp. 16 (1962):
- * x^32 + x^7 + x^5 + x^3 + x^2 + x^1 + x^0
- * x^31 + x^3 + x^0
- *
- * We reverse the bits to get:
- * 111101010000000000000000000000001 but drop the last 1
- * f 5 0 0 0 0 0 0
- * 010010000000000000000000000000001 ditto, for 31-bit crc
- * 4 8 0 0 0 0 0 0
- */
-
-#define POLY 0x48000000L /* 31-bit polynomial (avoids sign problems) */
-
-static long CrcTable[128];
-
-/*
- - crcinit - initialize tables for hash function
- */
-static void
-crcinit()
-{
- register int i, j;
- register long sum;
-
- for (i = 0; i < 128; ++i) {
- sum = 0L;
- for (j = 7 - 1; j >= 0; --j)
- if (i & (1 << j))
- sum ^= POLY >> j;
- CrcTable[i] = sum;
- }
- DEBUG(("crcinit: done\n"));
-}
-
-/*
- - hash - Honeyman's nice hashing function
- */
-static long
-hash(name, size)
-register char *name;
-register int size;
-{
- register long sum = 0L;
-
- while (size--) {
- sum = (sum >> 7) ^ CrcTable[(sum ^ (*name++)) & 0x7f];
- }
- DEBUG(("hash: returns (%ld)\n", sum));
- return(sum);
-}
-
-/*
- * case-mapping stuff
- *
- * Borrowed from C News, by permission of the authors. Somewhat modified.
- *
- * We exploit the fact that we are dealing only with headers here, and
- * headers are limited to the ASCII characters by RFC822. It is barely
- * possible that we might be dealing with a translation into another
- * character set, but in particular it's very unlikely for a header
- * character to be outside -128..255.
- *
- * Life would be a whole lot simpler if tolower() could safely and portably
- * be applied to any char.
- */
-
-#define OFFSET 128 /* avoid trouble with negative chars */
-
-/* must call casencmp before invoking TOLOW... */
-#define TOLOW(c) (cmap[(c)+OFFSET])
-
-/* ...but the use of it in CISTREQN is safe without the preliminary call (!) */
-/* CISTREQN is an optimised case-insensitive strncmp(a,b,n)==0; n > 0 */
-#define CISTREQN(a, b, n) \
- (TOLOW((a)[0]) == TOLOW((b)[0]) && casencmp(a, b, n) == 0)
-
-#define MAPSIZE (256+OFFSET)
-static char cmap[MAPSIZE]; /* relies on init to '\0' */
-static int mprimed = 0; /* has cmap been set up? */
-
-/*
- - mapprime - set up case-mapping stuff
- */
-static void
-mapprime()
-{
- register char *lp;
- register char *up;
- register int c;
- register int i;
- static char lower[] = "abcdefghijklmnopqrstuvwxyz";
- static char upper[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
-
- for (lp = lower, up = upper; *lp != '\0'; lp++, up++) {
- c = *lp;
- cmap[c+OFFSET] = c;
- cmap[*up+OFFSET] = c;
- }
- for (i = 0; i < MAPSIZE; i++)
- if (cmap[i] == '\0')
- cmap[i] = (char)(i-OFFSET);
- mprimed = 1;
-}
-
-/*
- - casencmp - case-independent strncmp
- */
-static int /* < == > 0 */
-casencmp(s1, s2, len)
-char *s1;
-char *s2;
-int len;
-{
- register char *p1;
- register char *p2;
- register int n;
-
- if (!mprimed)
- mapprime();
-
- p1 = s1;
- p2 = s2;
- n = len;
- while (--n >= 0 && *p1 != '\0' && TOLOW(*p1) == TOLOW(*p2)) {
- p1++;
- p2++;
- }
- if (n < 0)
- return(0);
-
- /*
- * The following case analysis is necessary so that characters
- * which look negative collate low against normal characters but
- * high against the end-of-string NUL.
- */
- if (*p1 == '\0' && *p2 == '\0')
- return(0);
- else if (*p1 == '\0')
- return(-1);
- else if (*p2 == '\0')
- return(1);
- else
- return(TOLOW(*p1) - TOLOW(*p2));
-}
-
-/*
- - mapcase - do case-mapped copy
- */
-static char * /* returns src or dst */
-mapcase(dst, src, siz)
-char *dst; /* destination, used only if mapping needed */
-char *src; /* source; src == dst is legal */
-size_t siz;
-{
- register char *s;
- register char *d;
- register char *c; /* case break */
- register char *e; /* end of source */
-
-
- c = cipoint(src, siz);
- if (c == NULL)
- return(src);
-
- if (!mprimed)
- mapprime();
- s = src;
- e = s + siz;
- d = dst;
-
- while (s < c)
- *d++ = *s++;
- while (s < e)
- *d++ = TOLOW(*s++);
-
- return(dst);
-}
-
-/*
- - cipoint - where in this message-ID does it become case-insensitive?
- *
- * The RFC822 code is not quite complete. Absolute, total, full RFC822
- * compliance requires a horrible parsing job, because of the arcane
- * quoting conventions -- abc"def"ghi is not equivalent to abc"DEF"ghi,
- * for example. There are three or four things that might occur in the
- * domain part of a message-id that are case-sensitive. They don't seem
- * to ever occur in real news, thank Cthulhu. (What? You were expecting
- * a merciful and forgiving deity to be invoked in connection with RFC822?
- * Forget it; none of them would come near it.)
- */
-static char * /* pointer into s, or NULL for "nowhere" */
-cipoint(s, siz)
-char *s;
-size_t siz;
-{
- register char *p;
- static char post[] = "postmaster";
- static int plen = sizeof(post)-1;
-
- switch (conf.casemap) {
- case '0': /* unmapped, sensible */
- return(NULL);
- break;
- case 'C': /* C News, RFC 822 conformant (approx.) */
- p = memchr(s, '@', siz);
- if (p == NULL) /* no local/domain split */
- return(NULL); /* assume all local */
- else if (p - (s+1) == plen && CISTREQN(s+1, post, plen)) {
- /* crazy -- "postmaster" is case-insensitive */
- return(s);
- } else
- return(p);
- break;
- case '=': /* 2.11, neither sensible nor conformant */
- return(s); /* all case-insensitive */
- break;
- }
-
- DEBUG(("cipoint: unknown case mapping `%c'\n", conf.casemap));
- return(NULL); /* just leave it alone */
-}
-
-/*
- - dbzdebug - control dbz debugging at run time
- */
-int /* old value */
-dbzdebug(value)
-int value;
-{
-#ifdef DBZDEBUG
- register int old = debug;
-
- debug = value;
- return(old);
-#else
- return(-1);
-#endif
-}
diff --git a/contrib/libio/dbz/dbz.h b/contrib/libio/dbz/dbz.h
deleted file mode 100644
index 3d7e8ed702cb..000000000000
--- a/contrib/libio/dbz/dbz.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/* for dbm and dbz */
-typedef struct {
- char *dptr;
- int dsize;
-} datum;
-
-/* standard dbm functions */
-extern int dbminit();
-extern datum fetch();
-extern int store();
-extern int delete(); /* not in dbz */
-extern datum firstkey(); /* not in dbz */
-extern datum nextkey(); /* not in dbz */
-extern int dbmclose(); /* in dbz, but not in old dbm */
-
-/* new stuff for dbz */
-extern int dbzfresh();
-extern int dbzagain();
-extern datum dbzfetch();
-extern int dbzstore();
-extern int dbzsync();
-extern long dbzsize();
-extern int dbzincore();
-extern int dbzcancel();
-extern int dbzdebug();
-
-/*
- * In principle we could handle unlimited-length keys by operating a chunk
- * at a time, but it's not worth it in practice. Setting a nice large
- * bound on them simplifies the code and doesn't hurt anything.
- */
-#define DBZMAXKEY 255
diff --git a/contrib/libio/dbz/dbzmain.c b/contrib/libio/dbz/dbzmain.c
deleted file mode 100644
index a393d6432bdd..000000000000
--- a/contrib/libio/dbz/dbzmain.c
+++ /dev/null
@@ -1,519 +0,0 @@
-/*
- * dbz - use and test dbz in various ways
- *
- * -Log-
- */
-
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <string.h>
-#include <dbz.h>
-
-#ifdef FUNNYSEEKS
-#include <unistd.h>
-#else
-#define SEEK_SET 0
-#endif
-
-#define STREQ(a, b) (*(a) == *(b) && strcmp((a), (b)) == 0)
-
-#ifndef lint
-static char RCSid[] = "$Header: /egcs/carton/cvsfiles/egcs/./libio/dbz/dbzmain.c,v 1.1.1.1 1997/08/21 22:58:23 jason Exp $";
-#endif
-
-char *progname;
-
-char *inname = "(no file)"; /* filename for messages etc. */
-long lineno; /* line number for messages etc. */
-
-char *my_basename;
-char *pagname;
-char *dir_name;
-char *str2dup();
-FILE *base;
-
-int op = 'b'; /* what to do, default build a new table */
-int baseinput = 1; /* is the base file also the input? */
-
-char *from = NULL; /* old table to use for dbzagain() */
-int omitzero = 0; /* omit lines tagged with 0 */
-long every = 0; /* report every n lines */
-int syncs = 0; /* dbzsync() on each report */
-int quick = 0; /* quick checking, not too thorough */
-int sweep = 0; /* sweep file checking all offsets */
-int useincore = 1; /* should we use incore facility? */
-long xxx = 0; /* debugging variable */
-int printx = 0; /* print xxx after all is done */
-int unique = 1; /* before store(), check with fetch() */
-int usefresh = 0; /* use dbzfresh? */
-long siz = 0; /* -p size */
-char map = 'C'; /* -p map */
-long tag = 0; /* -p tag mask */
-int exact = 0; /* do not run dbzsize(siz) */
-int dbzint = 1; /* use new interface? */
-char fs = '\t'; /* field separator, default tab */
-int unopen = 0; /* make base unopenable during dbminit? */
-char *change = NULL; /* chdir here before dbmclose */
-
-#define DEFBUF 1024 /* default line-buffer size */
-int buflen = DEFBUF; /* line length limit */
-char lbuf[DEFBUF];
-char *line = lbuf;
-char cbuf[DEFBUF];
-char *cmp = cbuf;
-
-void fail();
-void dofile();
-void runs();
-void dosweep();
-void mkfiles();
-void crfile();
-void doline();
-void process();
-
-#ifdef HAVERFCIZE
-extern char *rfc822ize();
-#else
-#define rfc822ize(n) (n)
-#endif
-
-extern char *malloc();
-
-/*
- - main - parse arguments and handle options
- */
-int
-main(argc, argv)
-int argc;
-char *argv[];
-{
- int c;
- int errflg = 0;
- extern int optind;
- extern char *optarg;
- int doruns = 0;
- extern long atol();
-
- progname = argv[0];
-
- while ((c = getopt(argc, argv, "axcmt:l:R0E:SqOiX:Yuf:p:eMUC:d")) != EOF)
- switch (c) {
- case 'a': /* append to existing table */
- if (op != 'b')
- fail("only one of -a -x -c -m can be given", "");
- op = 'a';
- baseinput = 0;
- break;
- case 'x': /* extract from existing table */
- if (op != 'b')
- fail("only one of -a -x -c -m can be given", "");
- op = 'x';
- baseinput = 0;
- break;
- case 'c': /* check existing table */
- if (op != 'b')
- fail("only one of -a -x -c -m can be given", "");
- op = 'c';
- break;
- case 'm': /* extract missing (complement of -x) */
- if (op != 'b')
- fail("only one of -a -x -c -m can be given", "");
- op = 'm';
- baseinput = 0;
- break;
- case 't': /* set field separator */
- if (strlen(optarg) > 1)
- fail("only one field separator allowed", "");
- fs = *optarg;
- break;
- case 'l': /* override line-length limit */
- buflen = atoi(optarg) + 1;
- if (buflen <= 2)
- fail("bad -l value `%s'", optarg);
- line = malloc(buflen);
- cmp = malloc(buflen);
- if (line == NULL || cmp == NULL)
- fail("cannot allocate %s-byte buffers", optarg);
- break;
- case 'R': /* print run statistics */
- doruns = 1;
- break;
- case '0': /* omit lines tagged (by fake -t) with 0 */
- omitzero = 1;
- break;
- case 'E': /* report every n items */
- every = atol(optarg);
- break;
- case 'S': /* dbzsync() on each -E report */
- syncs = 1;
- break;
- case 'q': /* quick check or extract */
- quick = 1;
- break;
- case 'O': /* sweep file checking all offsets */
- sweep = 1;
- break;
- case 'i': /* don't use incore */
- useincore = 0;
- break;
- case 'X': /* set xxx */
- xxx = atoi(optarg);
- break;
- case 'Y': /* print xxx afterward */
- printx = 1;
- break;
- case 'u': /* don't check uniqueness */
- unique = 0;
- break;
- case 'f': /* init from existing table's parameters */
- from = optarg;
- break;
- case 'p': /* parameters for dbzfresh */
- if (sscanf(optarg, "%ld %1s %lx", &siz, &map, &tag) != 3) {
- map = '?';
- tag = 0;
- if (sscanf(optarg, "%ld", &siz) != 1)
- fail("bad -n value `%s'", optarg);
- }
- usefresh = 1;
- break;
- case 'e': /* -p size is exact, don't dbzsize() it */
- exact = 1;
- break;
- case 'M': /* use old dbm interface + rfc822ize */
- dbzint = 0;
- break;
- case 'U': /* make base unopenable during init */
- unopen = 1;
- break;
- case 'C': /* change directories before dbmclose */
- change = optarg;
- break;
- case 'd': /* Debugging. */
- if (dbzdebug(1) < 0)
- fail("dbz debugging not available", "");
- break;
- case '?':
- default:
- errflg++;
- break;
- }
- if (errflg || optind >= argc || (optind+1 < argc && baseinput)) {
- fprintf(stderr, "usage: %s ", progname);
- fprintf(stderr, "[-a] [-x] [-c] database [file] ...\n");
- exit(2);
- }
-
- (void) dbzincore(useincore);
- my_basename = argv[optind];
- pagname = str2dup(my_basename, ".pag");
- dir_name = str2dup(my_basename, ".dir");
- mkfiles();
- optind++;
-
- if (baseinput) /* implies no further arguments */
- process(base, my_basename);
- else if (optind >= argc)
- process(stdin, "stdin");
- else
- for (; optind < argc; optind++)
- dofile(argv[optind]);
-
- if (change != NULL)
- (void) chdir(change);
- if (dbmclose() < 0)
- fail("dbmclose failed", "");
- if (doruns)
- runs(pagname);
- if (sweep)
- dosweep(my_basename, pagname);
- if (printx)
- printf("%ld\n", xxx);
-#ifdef DBZ_FINISH
- DBZ_FINISH;
-#endif
- exit(0);
-}
-
-/*
- - dofile - open a file and invoke process()
- */
-void
-dofile(name)
-char *name;
-{
- register FILE *in;
-
- if (STREQ(name, "-"))
- process(stdin, "-");
- else {
- in = fopen(name, "r");
- if (in == NULL)
- fail("cannot open `%s'", name);
- process(in, name);
- (void) fclose(in);
- }
-}
-
-/*
- - mkfiles - create empty files and open them up
- */
-void
-mkfiles()
-{
- if (op == 'b' && !dbzint) {
- crfile(dir_name);
- crfile(pagname);
- }
-
- base = fopen(my_basename, (op == 'a') ? "a" : "r");
- if (base == NULL)
- fail("cannot open `%s'", my_basename);
- if (unopen)
- (void) chmod(my_basename, 0);
- if (from != NULL) {
- if (dbzagain(my_basename, from) < 0)
- fail("dbzagain(`%s'...) failed", my_basename);
- } else if (op == 'b' && dbzint) {
- if (!exact)
- siz = dbzsize(siz);
- if (dbzfresh(my_basename, siz, (int)fs, map, (off_t)tag) < 0)
- fail("dbzfresh(`%s'...) failed", my_basename);
- } else if (dbminit(my_basename) < 0)
- fail("dbminit(`%s') failed", my_basename);
- if (unopen)
- (void) chmod(my_basename, 0600); /* hard to restore original */
-}
-
-/*
- - crfile - create a file
- */
-void
-crfile(name)
-char *name;
-{
- register int f;
-
- f = creat(name, 0666);
- if (f < 0)
- fail("cannot create `%s'", name);
- (void) close(f);
-}
-
-/*
- - process - process input file
- */
-void
-process(in, name)
-FILE *in;
-char *name;
-{
- register off_t place;
-
- inname = name;
- lineno = 0;
-
- for (;;) {
- place = ftell(in);
- if (fgets(line, buflen, in) == NULL)
- return;
- lineno++;
- if (every > 0 && lineno%every == 0) {
- fprintf(stderr, "%ld\n", lineno);
- if (dbzsync() < 0)
- fail("dbzsync failed", "");
- }
- doline(line, place);
- }
- /* NOTREACHED */
-}
-
-/*
- - doline - process input line
- */
-void
-doline(lp, inoffset)
-char *lp;
-off_t inoffset;
-{
- register char *p;
- register char pc;
- datum key, value;
- off_t place = inoffset;
- register int shouldfind;
- register int llen;
- char keytext[DBZMAXKEY+1];
-
- p = NULL;
- if (fs != '\0')
- p = strchr(lp, fs);
- if (p == NULL)
- p = lp + strlen(lp);
- if (p > lp && *(p-1) == '\n')
- p--;
- if (p - lp > DBZMAXKEY)
- fail("key of `%.40s...' too long", lp);
- pc = *p;
- *p = '\0';
- (void) strcpy(keytext, lp);
- *p = pc;
- key.dptr = (dbzint) ? keytext : rfc822ize(keytext);
- key.dsize = strlen(keytext)+1;
-
- switch (op) {
- case 'a':
- place = ftell(base);
- llen = strlen(lp);
- if (fwrite(lp, 1, llen, base) != llen)
- fail("write error in `%s'", my_basename);
- /* FALLTHROUGH */
- case 'b':
- if (omitzero && p != NULL && *(p+1) == '0')
- return;
- if (unique) {
- value = (dbzint) ? dbzfetch(key) : fetch(key);
- if (value.dptr != NULL)
- fail("`%.40s...' already present", lp);
- }
- value.dptr = (char *)&place;
- value.dsize = (int)sizeof(off_t);
- if (((dbzint) ? dbzstore(key, value) : store(key, value)) < 0)
- fail("store failed on `%.40s...'", lp);
- break;
- case 'c':
- value = (dbzint) ? dbzfetch(key) : fetch(key);
- shouldfind = (omitzero && p != NULL && *(p+1) == '0') ? 0 : 1;
- if (!shouldfind && (value.dptr != NULL || value.dsize != 0))
- fail("`%.40s...' found, shouldn't be", lp);
- if (shouldfind && (value.dptr == NULL ||
- value.dsize != sizeof(off_t)))
- fail("can't find `%.40s...'", lp);
- if (shouldfind && !quick) {
- (void) memcpy((char *)&place, value.dptr, sizeof(off_t));
- if (place != inoffset)
- fail("offset mismatch on `%.40s...'", lp);
- if (fseek(base, place, SEEK_SET) == -1)
- fail("fseek failed on `%.40s...'", lp);
- if (fgets(cmp, buflen, base) == NULL)
- fail("can't read line for `%.40s...'", lp);
- if (!STREQ(lp, cmp))
- fail("compare failed on `%.40s...'", lp);
- }
- break;
- case 'x':
- value = (dbzint) ? dbzfetch(key) : fetch(key);
- if (value.dptr != NULL && !quick) {
- (void) memcpy((char *)&place, value.dptr, sizeof(off_t));
- if (fseek(base, place, SEEK_SET) == -1)
- fail("fseek failed on `%.40s...'", lp);
- if (fgets(cmp, buflen, base) == NULL)
- fail("can't read line for `%.40s...'", lp);
- fputs(cmp, stdout);
- } else if (value.dptr != NULL)
- fputs(lp, stdout);
- break;
- case 'm':
- value = (dbzint) ? dbzfetch(key) : fetch(key);
- if (value.dptr == NULL) {
- fputs(keytext, stdout);
- putchar('\n');
- }
- break;
- default:
- fail("unknown operator -- can't happen", "");
- break;
- }
-}
-
-/*
- - runs - print run statistics
- */
-void
-runs(file)
-char *file;
-{
- register FILE *fd;
- off_t it;
- register long run;
-
- fd = fopen(file, "r");
- if (fd == NULL)
- fail("cannot reopen `%s'", file);
- run = 0;
- while (fread((char *)&it, sizeof(off_t), 1, fd) == 1) {
- if (it != 0)
- run++;
- else if (run > 0) {
- printf("%ld\n", run);
- run = 0;
- }
- }
- (void) fclose(fd);
-}
-
-/*
- - dosweep - sweep pag file checking for valid offsets
- */
-void
-dosweep(fn, pn)
-char *fn;
-char *pn;
-{
- register FILE *pf;
- off_t it;
- char nl;
- register FILE *hf;
-
- hf = fopen(fn, "r");
- if (hf == NULL)
- fail("cannot reopen `%s'", fn);
- pf = fopen(pn, "r");
- if (pf == NULL)
- fail("cannot reopen `%s'", pn);
- while (fread((char *)&it, sizeof(off_t), 1, pf) == 1) {
- it = (it & ((off_t)0x80000000)) ? (it&~((off_t)0xff000000)) : it;
- if (it != 0 && it != 1) { /* 0 empty, 1 known okay */
- it--; /* get rid of bias */
- (void) fseek(hf, it-1, SEEK_SET);
- nl = getc(hf);
- if (nl != '\n')
- fprintf(stderr, "offset 0%lo does not point to line\n",
- (long)it);
- }
- }
- (void) fclose(hf);
- (void) fclose(pf);
-}
-
-/*
- - fail - complain and die
- */
-void
-fail(s1, s2)
-char *s1;
-char *s2;
-{
- fprintf(stderr, "%s: (file `%s', line %ld) ", progname, inname, lineno);
- fprintf(stderr, s1, s2);
- fprintf(stderr, "\n");
- exit(1);
-}
-
-/*
- - str2dup - concatenate strings and malloc result
- */
-char *
-str2dup(s1, s2)
-char *s1;
-char *s2;
-{
- register char *p;
-
- p = malloc((size_t)strlen(s1) + strlen(s2) + 1);
- if (p == NULL)
- fail("can't allocate space for strings", "");
- (void) strcpy(p, s1);
- (void) strcat(p, s2);
- return(p);
-}
diff --git a/contrib/libio/dbz/fake.c b/contrib/libio/dbz/fake.c
deleted file mode 100644
index ed2a2b759376..000000000000
--- a/contrib/libio/dbz/fake.c
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * fake - make up random lines resembling history-file entries, reproducibly
- *
- * -Log-
- */
-
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <string.h>
-
-#define MAXSTR 500 /* For sizing strings -- DON'T use BUFSIZ! */
-#define STREQ(a, b) (*(a) == *(b) && strcmp((a), (b)) == 0)
-
-#ifndef lint
-static char RCSid[] = "$Header: /rel/cvsfiles/devo/libio/dbz/fake.c,v 1.2 1993/10/25 20:02:42 bothner Exp $";
-#endif
-
-int midonly = 0; /* just message ids, rest not realistic */
-int tag = 0; /* tag lines with random digit for later use */
-int expired = -1; /* percentage of lines to be expired */
-
-int debug = 0;
-char *progname;
-
-char *inname; /* filename for messages etc. */
-long lineno; /* line number for messages etc. */
-
-void doline();
-void addchars();
-void seed();
-
-/*
- - main - parse arguments and handle options
- */
-int
-main(argc, argv)
-int argc;
-char *argv[];
-{
- int c;
- int errflg = 0;
- FILE *in;
- struct stat statbuf;
- extern int optind;
- extern char *optarg;
- void process();
- register long no;
- extern long atol();
- char line[MAXSTR];
-
- progname = argv[0];
-
- while ((c = getopt(argc, argv, "ms:te:d")) != EOF)
- switch (c) {
- case 'm': /* message-ids only */
- midonly = 1;
- break;
- case 's': /* seed */
- seed(atol(optarg));
- break;
- case 't': /* tag lines with a random digit */
- tag = 1;
- break;
- case 'e': /* percentage to be expired */
- expired = atoi(optarg);
- break;
- case 'd': /* Debugging. */
- debug++;
- break;
- case '?':
- default:
- errflg++;
- break;
- }
- if (errflg || optind != argc - 1) {
- fprintf(stderr, "usage: %s ", progname);
- fprintf(stderr, "[-m] [-s seed] length\n");
- exit(2);
- }
-
- for (no = atol(argv[optind]); no > 0; no--) {
- doline(line);
- puts(line);
- }
-#ifdef DBZ_FINISH
- DBZ_FINISH;
-#endif
- exit(0);
-}
-
-/*
- - doline - generate random history pseudo-line
- */
-void
-doline(buf)
-char *buf;
-{
- char tagch[2];
-
- (void) strcpy(buf, "<");
- addchars(buf, range(4, 20));
- (void) strcat(buf, "@");
- addchars(buf, range(8, 20));
- if (midonly)
- (void) strcat(buf, ">\tx");
- else {
- if (tag) {
- tagch[0] = "1234567890"[range(0,9)];
- tagch[1] = '\0';
- (void) strcat(buf, ">\t");
- (void) strcat(buf, tagch);
- (void) strcat(buf, "00000000~-");
- } else
- (void) strcat(buf, ">\t1234567890~-");
- }
- if (range(1, 100) > expired) {
- if (midonly)
- (void) strcat(buf, "\tx");
- else {
- (void) strcat(buf, "\t");
- addchars(buf, range(10, 30));
- }
- }
-}
-
-/*
- - addchars - generate n random characters suitable for history file
- */
-void
-addchars(buf, len)
-char *buf;
-int len;
-{
- register int i;
- register char *p = buf + strlen(buf);
- static char vocab[] = "1234567890.abcde.fghij.klmno.pqrst.uvwxyz.\
-1234567890.ABCDE.FGHIJ.KLMNO.PQRST.UVWXYZ.1234567890.\
-1234567890.abcde.fghij.klmno.pqrst.uvwxyz.1234567890";
-
- for (i = len; i > 0; i--)
- *p++ = vocab[range(0, sizeof(vocab)-2)];
- *p++ = '\0';
-}
diff --git a/contrib/libio/dbz/firstlast25 b/contrib/libio/dbz/firstlast25
deleted file mode 100644
index 4850468c0c2a..000000000000
--- a/contrib/libio/dbz/firstlast25
+++ /dev/null
@@ -1,50 +0,0 @@
-<m....VO1.9q.@s95e1zKsIj7LrIwa1> 600000000~- 90fz0706yo.1Env21x8b
-<H5.i.R6ZQ2@Vg6.5mqj8..z> 200000000~-
-<1Hy.ufmjqe371x5.o@HEEl0tAp4> 700000000~-
-<T6.c9.xM4i@943..7z.c..3h> 600000000~-
-<Exus7LsME4fPL9v8@2.ouu97O25z9cdft> 700000000~-
-<6kUzkf.v74@iC1iGj882RQ0zli> 400000000~-
-<J.7YT7dV.Kkul8Bh0fc@Rar.EnMx2lm0.6Yeob> 600000000~-
-<.wVJi1DX42@5.4i6.jaZ6qw9Ln1.> 500000000~-
-<uUd9e18vxzevae7uY@33a480208l0.4p2q> 300000000~-
-<43hQ.5shbE7@912400.ajES6x0sXl.M> 400000000~-
-<g25r..2r.0WOZ6k3@tb3.U9xrR.uw61a2y0> 600000000~-
-<923s5e67d5Oq085Y.1@6Pik68584> 900000000~-
-<.5.n5cx5aD62i9q8@Ai60Sc.4x> 200000000~-
-<9N9n@3.1ql87.yj2xFs.zLqI> 700000000~- Q2.kni8kZps7kF5uiEv32B38y4z.p
-<.X.fw.6LtoT.0@pp6bp.5s6yh74.> 400000000~-
-<54c1w@7..u1.99m9T4j.BNGBiK> 600000000~- .F3hb.OFh06V..p
-<j12Mtn6q9@m2.m1X1s> 500000000~-
-<o1WJV9G4H.zf0BX44w@W7.76xn33> 000000000~-
-<0C605s6plaAgfM.ap40@e6d66n.uv01W.j.8ph.> 100000000~- m.x7TY8.8DQ5
-<.2.14xdn.@D0g.W.uZ.75gyyg.q1G> 100000000~-
-<.A..03.@5v..64.5v3.3tbjUo.> 500000000~-
-<72..c19ms65.WCf0G3.@83seEG9nnhM.O.j22> 900000000~-
-<D..xX.kti9@u739li.xvy2> 000000000~- NPLL42XVfM
-<6HO.nFal1ufl3.8b@3.n0k7a.IDgNy> 700000000~- Wv4j3Itccnh0Zp3
-<x5RjUnIpd03xBBnuN@z0puc82Q26Ou.0T6> 400000000~- k67.hvXwv6X745R4rh2ybuFN3n.
-<62dIeg.fW92.ov375@x76mf5c6.37.v> 000000000~-
-<chdpqs.0mgZOp.@Dxl9v..94e7ar2> 900000000~-
-<.9Xr.7V91..oe5CG.hX@p5x3jos3s27R6O3yj1> 400000000~-
-<Mm6dr.231dH35ua@SE1u0za3V1M43lRn9> 100000000~-
-<JIhw2@.Qdf.8v28Tnf1M> 200000000~-
-<z4FCa.q4MF..EE0.2@W9U63e33h9w3lcFFl> 400000000~-
-<87.W3r6is4.@svVqQCBiNqz400A.qwj> 200000000~-
-<0liI7Lu0Mx435m7M99@87Xw.8j63.9.> 500000000~-
-<tRtht5M.6d0@06gj.qm3.s9> 200000000~- e27S.BKVD70P.o
-<Jpga8@m68yvw.b4b> 200000000~-
-<.2.69hy3JT1@Aq3.r83o.9> 700000000~-
-<.W7EurYppo4fhzs.I@8651m2W7v> 700000000~-
-<3m02.@22074.a5ct2j3> 900000000~-
-<.fy9Epa@.1.kNGCNokFwB8ezo1WM> 800000000~-
-<c758d64.FS4yY7L5@43sw.kI6> 900000000~-
-<vLd0.t@.kq70oHl96ixdnXd.GVv> 100000000~- 9A6Ejq5t55I4VJ6.q1
-<d3.4@n17p4N.77N7W..7.8> 300000000~-
-<f2lv064.8@4jokk3e07> 400000000~-
-<rr7hoxA.U7.JXxnpvd@1rbMO437vHnakx> 000000000~-
-<.0p3G7novlrYz9kjI@Sx.2w.yqzerZl12781.k> 700000000~-
-<51ny.pQ7ay4@nfU2l1f0ixG09584.m> 000000000~- 38K5bhK7cr6.bg.5MlC2Fxq06Ziuw.
-<2.cau.9s@.n4Pk0Jd9g> 300000000~-
-<bEH1Bwa.662i@zm.3g.gx4.lp3> 300000000~- c8.t4Q0.8t0.m50
-<.t13789u5AqM4m3.z0T@P17e.ypf> 200000000~- q17z.fZ3.FyD533WthqZs8q7
-<M4r1I@Ovaev.dp> 100000000~-
diff --git a/contrib/libio/dbz/getmap b/contrib/libio/dbz/getmap
deleted file mode 100755
index fd746cad7d95..000000000000
--- a/contrib/libio/dbz/getmap
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/sh
-awk 'NR == 1 {
- for (i = 9; i <= NF; i++)
- printf "%s ", $i
- printf "\n"
-}' $*
diff --git a/contrib/libio/dbz/random.c b/contrib/libio/dbz/random.c
deleted file mode 100644
index 1d8de3a2b44d..000000000000
--- a/contrib/libio/dbz/random.c
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * random-number generator for testing
- */
-static unsigned long next = 1;
-
-/*
- - range - generate a random number within an inclusive range
- *
- * Algorithm from ANSI C standard. Limitation: max-min <= 32767.
- */
-int
-range(min, max)
-int min;
-int max;
-{
- register int temp;
-
- next = next * 1103515245 + 12345;
- temp = (int)((next/65536)%32768);
- return(temp%(max - min + 1) + min);
-}
-
-/*
- - seed - seed random number generator
- */
-void
-seed(n)
-long n;
-{
- next = (unsigned long)n;
-}
diff --git a/contrib/libio/dbz/revbytes b/contrib/libio/dbz/revbytes
deleted file mode 100644
index b3d80c2685fb..000000000000
--- a/contrib/libio/dbz/revbytes
+++ /dev/null
@@ -1,7 +0,0 @@
-NR == 1 {
- printf "%s %s %s %s %s %s %s %s %s", $1, $2, $3, $4, $5, $6, $7, $8, $9
- for (i = NF; i > 9; i--)
- printf " %s", $i
- printf "\n"
-}
-NR > 1 { print }
diff --git a/contrib/libio/dbz/stdio.h b/contrib/libio/dbz/stdio.h
deleted file mode 100644
index 80faee30ad96..000000000000
--- a/contrib/libio/dbz/stdio.h
+++ /dev/null
@@ -1 +0,0 @@
-#include "../iostdio.h"
diff --git a/contrib/libio/depend b/contrib/libio/depend
deleted file mode 100644
index 15888c4574a7..000000000000
--- a/contrib/libio/depend
+++ /dev/null
@@ -1,379 +0,0 @@
-# AUTOMATICALLY GENERATED BY 'make depend' - DO NOT EDIT
-
-PlotFile.o: PlotFile.cc \
- $(srcdir)/PlotFile.h \
- $(srcdir)/fstream.h \
- $(srcdir)/iostream.h \
- $(srcdir)/streambuf.h \
- $(srcdir)/libio.h $(_G_CONFIG_H)
-SFile.o: SFile.cc \
- $(srcdir)/SFile.h \
- $(srcdir)/fstream.h \
- $(srcdir)/iostream.h \
- $(srcdir)/streambuf.h \
- $(srcdir)/libio.h $(_G_CONFIG_H)
-builtinbuf.o: builtinbuf.cc \
- $(srcdir)/builtinbuf.h \
- $(srcdir)/streambuf.h \
- $(srcdir)/libio.h $(_G_CONFIG_H) \
- $(srcdir)/iostreamP.h \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h
-editbuf.o: editbuf.cc \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H) \
- $(srcdir)/editbuf.h \
- $(srcdir)/fstream.h \
- $(srcdir)/iostream.h \
- $(srcdir)/streambuf.h
-filebuf.o: filebuf.cc \
- $(srcdir)/iostreamP.h \
- $(srcdir)/streambuf.h \
- $(srcdir)/libio.h $(_G_CONFIG_H) \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/builtinbuf.h
-fstream.o: fstream.cc \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H) \
- $(srcdir)/fstream.h \
- $(srcdir)/iostream.h \
- $(srcdir)/streambuf.h
-indstream.o: indstream.cc \
- $(srcdir)/indstream.h \
- $(srcdir)/iostream.h \
- $(srcdir)/streambuf.h \
- $(srcdir)/libio.h $(_G_CONFIG_H)
-ioassign.o: ioassign.cc \
- $(srcdir)/iostream.h \
- $(srcdir)/streambuf.h \
- $(srcdir)/libio.h $(_G_CONFIG_H) \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h
-ioextend.o: ioextend.cc \
- $(srcdir)/iostream.h \
- $(srcdir)/streambuf.h \
- $(srcdir)/libio.h $(_G_CONFIG_H)
-iomanip.o: iomanip.cc \
- $(srcdir)/iomanip.h \
- $(srcdir)/iostream.h \
- $(srcdir)/streambuf.h \
- $(srcdir)/libio.h $(_G_CONFIG_H)
-iostream.o: iostream.cc \
- $(srcdir)/iostream.h \
- $(srcdir)/streambuf.h \
- $(srcdir)/libio.h $(_G_CONFIG_H) \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/floatio.h
-isgetline.o: isgetline.cc \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H) \
- $(srcdir)/iostream.h \
- $(srcdir)/streambuf.h
-isgetsb.o: isgetsb.cc \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H) \
- $(srcdir)/iostream.h \
- $(srcdir)/streambuf.h
-isscan.o: isscan.cc \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H) \
- $(srcdir)/iostream.h \
- $(srcdir)/streambuf.h
-osform.o: osform.cc \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H) \
- $(srcdir)/iostream.h \
- $(srcdir)/streambuf.h
-parsestream.o: parsestream.cc \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H) \
- $(srcdir)/parsestream.h \
- $(srcdir)/streambuf.h
-pfstream.o: pfstream.cc \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H) \
- $(srcdir)/pfstream.h \
- $(srcdir)/fstream.h \
- $(srcdir)/iostream.h \
- $(srcdir)/streambuf.h \
- $(srcdir)/procbuf.h
-procbuf.o: procbuf.cc \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H) \
- $(srcdir)/procbuf.h \
- $(srcdir)/streambuf.h
-sbform.o: sbform.cc \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H) \
- $(srcdir)/streambuf.h
-sbgetline.o: sbgetline.cc \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H) \
- $(srcdir)/streambuf.h
-sbscan.o: sbscan.cc \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H) \
- $(srcdir)/streambuf.h
-stdiostream.o: stdiostream.cc \
- $(srcdir)/stdiostream.h \
- $(srcdir)/iostream.h \
- $(srcdir)/streambuf.h \
- $(srcdir)/libio.h $(_G_CONFIG_H) \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h
-stdstrbufs.o: stdstrbufs.cc \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H) \
- $(srcdir)/stdiostream.h \
- $(srcdir)/iostream.h \
- $(srcdir)/streambuf.h
-stdstreams.o: stdstreams.cc \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H) \
- $(srcdir)/streambuf.h \
- $(srcdir)/iostream.h
-stream.o: stream.cc \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H) \
- $(srcdir)/stream.h \
- $(srcdir)/iostream.h \
- $(srcdir)/streambuf.h \
- $(srcdir)/strstream.h \
- $(srcdir)/strfile.h
-streambuf.o: streambuf.cc \
- $(srcdir)/iostreamP.h \
- $(srcdir)/streambuf.h \
- $(srcdir)/libio.h $(_G_CONFIG_H) \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h
-strstream.o: strstream.cc \
- $(srcdir)/iostreamP.h \
- $(srcdir)/streambuf.h \
- $(srcdir)/libio.h $(_G_CONFIG_H) \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/strstream.h \
- $(srcdir)/iostream.h \
- $(srcdir)/strfile.h
-cleanup.o: cleanup.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H)
-filedoalloc.o: filedoalloc.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H)
-fileops.o: fileops.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H)
-floatconv.o: floatconv.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H)
-genops.o: genops.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H)
-iofclose.o: iofclose.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H)
-iofdopen.o: iofdopen.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H)
-iofeof.o: iofeof.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H)
-ioferror.o: ioferror.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H)
-iofflush.o: iofflush.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H)
-iofflush_u.o: iofflush_u.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H)
-iofgetpos.o: iofgetpos.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H)
-iofgets.o: iofgets.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H)
-iofopen.o: iofopen.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H)
-iofprintf.o: iofprintf.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H)
-iofputs.o: iofputs.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H)
-iofread.o: iofread.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H)
-iofscanf.o: iofscanf.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H)
-iofsetpos.o: iofsetpos.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H)
-ioftell.o: ioftell.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H)
-iofwrite.o: iofwrite.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H)
-iogetc.o: iogetc.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H)
-iogetdelim.o: iogetdelim.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H)
-iogetline.o: iogetline.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H)
-iogets.o: iogets.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H)
-ioignore.o: ioignore.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H)
-iopadn.o: iopadn.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H)
-ioperror.o: ioperror.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H)
-iopopen.o: iopopen.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H)
-ioprims.o: ioprims.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H)
-ioprintf.o: ioprintf.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H)
-ioputc.o: ioputc.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H)
-ioputs.o: ioputs.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H)
-ioscanf.o: ioscanf.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H)
-ioseekoff.o: ioseekoff.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H)
-ioseekpos.o: ioseekpos.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H)
-iosetbuffer.o: iosetbuffer.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H)
-iosetvbuf.o: iosetvbuf.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H)
-iosprintf.o: iosprintf.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H)
-iosscanf.o: iosscanf.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H)
-iostrerror.o: iostrerror.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H)
-ioungetc.o: ioungetc.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H)
-iovfprintf.o: iovfprintf.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H) \
- $(srcdir)/floatio.h
-iovfscanf.o: iovfscanf.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H) \
- $(srcdir)/floatio.h
-iovsprintf.o: iovsprintf.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H) \
- $(srcdir)/strfile.h
-iovsscanf.o: iovsscanf.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H) \
- $(srcdir)/strfile.h
-outfloat.o: outfloat.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H)
-peekc.o: peekc.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H)
-stdfiles.o: stdfiles.c \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h \
- $(srcdir)/libio.h $(_G_CONFIG_H)
-strops.o: strops.c \
- $(srcdir)/strfile.h \
- $(srcdir)/libio.h $(_G_CONFIG_H) \
- $(srcdir)/libioP.h \
- $(srcdir)/iolibio.h
diff --git a/contrib/libio/editbuf.cc b/contrib/libio/editbuf.cc
deleted file mode 100644
index 22304820f8fd..000000000000
--- a/contrib/libio/editbuf.cc
+++ /dev/null
@@ -1,717 +0,0 @@
-/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License.
-
-Written by Per Bothner (bothner@cygnus.com). */
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include "libioP.h"
-#include "editbuf.h"
-#include <stddef.h>
-#include <stdlib.h>
-
-/* NOTE: Some of the code here is taken from GNU emacs */
-/* Hence this file falls under the GNU License! */
-
-// Invariants for edit_streambuf:
-// An edit_streambuf is associated with a specific edit_string,
-// which again is a sub-string of a specific edit_buffer.
-// An edit_streambuf is always in either get mode or put mode, never both.
-// In get mode, gptr() is the current position,
-// and pbase(), pptr(), and epptr() are all NULL.
-// In put mode, pptr() is the current position,
-// and eback(), gptr(), and egptr() are all NULL.
-// Any edit_streambuf that is actively doing insertion (as opposed to
-// replacing) // must have its pptr() pointing to the start of the gap.
-// Only one edit_streambuf can be actively inserting into a specific
-// edit_buffer; the edit_buffer's _writer field points to that edit_streambuf.
-// That edit_streambuf "owns" the gap, and the actual start of the
-// gap is the pptr() of the edit_streambuf; the edit_buffer::_gap_start pointer
-// will only be updated on an edit_streambuf::overflow().
-
-int edit_streambuf::truncate()
-{
- str->buffer->delete_range(str->buffer->tell((buf_char*)pptr()),
- str->buffer->tell(str->end));
- return 0;
-}
-
-#ifdef OLD_STDIO
-inline void disconnect_gap_from_file(edit_buffer* buffer, FILE* fp)
-{
- if (buffer->gap_start_ptr != &fp->__bufp)
- return;
- buffer->gap_start_normal = fp->__bufp;
- buffer->gap_start_ptr = &buffer->gap_start_normal;
-}
-#endif
-
-void edit_streambuf::flush_to_buffer(edit_buffer* buffer)
-{
- if (pptr() > buffer->_gap_start && pptr() < buffer->gap_end())
- buffer->_gap_start = pptr();
-}
-
-void edit_streambuf::disconnect_gap_from_file(edit_buffer* buffer)
-{
- if (buffer->_writer != this) return;
- flush_to_buffer(buffer);
- setp(pptr(),pptr());
- buffer->_writer = NULL;
-}
-
-buf_index edit_buffer::tell(buf_char *ptr)
-{
- if (ptr <= gap_start())
- return ptr - data;
- else
- return ptr - gap_end() + size1();
-}
-
-#if 0
-buf_index buf_cookie::tell()
-{
- return str->buffer->tell(file->__bufp);
-}
-#endif
-
-buf_index edit_buffer::tell(edit_mark*mark)
-{
- return tell(data + mark->index_in_buffer(this));
-}
-
-// adjust the position of the gap
-
-void edit_buffer::move_gap(buf_offset pos)
-{
- if (pos < size1())
- gap_left (pos);
- else if (pos > size1())
- gap_right (pos);
-}
-
-void edit_buffer::gap_left (int pos)
-{
- register buf_char *to, *from;
- register int i;
- int new_s1;
-
- i = size1();
- from = gap_start();
- to = from + gap_size();
- new_s1 = size1();
-
- /* Now copy the characters. To move the gap down,
- copy characters up. */
-
- for (;;)
- {
- /* I gets number of characters left to copy. */
- i = new_s1 - pos;
- if (i == 0)
- break;
-#if 0
- /* If a quit is requested, stop copying now.
- Change POS to be where we have actually moved the gap to. */
- if (QUITP)
- {
- pos = new_s1;
- break;
- }
-#endif
- /* Move at most 32000 chars before checking again for a quit. */
- if (i > 32000)
- i = 32000;
- new_s1 -= i;
- while (--i >= 0)
- *--to = *--from;
- }
-
- /* Adjust markers, and buffer data structure, to put the gap at POS.
- POS is where the loop above stopped, which may be what was specified
- or may be where a quit was detected. */
- adjust_markers (pos << 1, size1() << 1, gap_size(), data);
-#ifndef OLD_STDIO
- _gap_start = data + pos;
-#else
- if (gap_start_ptr == &gap_start_normal)
- gap_start_normal = data + pos;
-#endif
- __gap_end_pos = to - data;
-/* QUIT;*/
-}
-
-void edit_buffer::gap_right (int pos)
-{
- register buf_char *to, *from;
- register int i;
- int new_s1;
-
- i = size1();
- to = gap_start();
- from = i + gap_end();
- new_s1 = i;
-
- /* Now copy the characters. To move the gap up,
- copy characters down. */
-
- while (1)
- {
- /* I gets number of characters left to copy. */
- i = pos - new_s1;
- if (i == 0)
- break;
-#if 0
- /* If a quit is requested, stop copying now.
- Change POS to be where we have actually moved the gap to. */
- if (QUITP)
- {
- pos = new_s1;
- break;
- }
-#endif
- /* Move at most 32000 chars before checking again for a quit. */
- if (i > 32000)
- i = 32000;
- new_s1 += i;
- while (--i >= 0)
- *to++ = *from++;
- }
-
- adjust_markers ((size1() + gap_size()) << 1, (pos + gap_size()) << 1,
- - gap_size(), data);
-#ifndef OLD_STDIO
- _gap_start = data+pos;
-#else
- if (gap_start_ptr == &gap_start_normal)
- gap_start_normal = data + pos;
-#endif
- __gap_end_pos = from - data;
-/* QUIT;*/
-}
-
-/* make sure that the gap in the current buffer is at least k
- characters wide */
-
-void edit_buffer::make_gap(buf_offset k)
-{
- register buf_char *p1, *p2, *lim;
- buf_char *old_data = data;
- int s1 = size1();
-
- if (gap_size() >= k)
- return;
-
- /* Get more than just enough */
- if (buf_size > 1000) k += 2000;
- else k += /*200;*/ 20; // for testing!
-
- p1 = (buf_char *) realloc (data, s1 + size2() + k);
- if (p1 == 0)
- abort(); /*memory_full ();*/
-
- k -= gap_size(); /* Amount of increase. */
-
- /* Record new location of text */
- data = p1;
-
- /* Transfer the new free space from the end to the gap
- by shifting the second segment upward */
- p2 = data + buf_size;
- p1 = p2 + k;
- lim = p2 - size2();
- while (lim < p2)
- *--p1 = *--p2;
-
- /* Finish updating text location data */
- __gap_end_pos += k;
-
-#ifndef OLD_STDIO
- _gap_start = data + s1;
-#else
- if (gap_start_ptr == &gap_start_normal)
- gap_start_normal = data + s1;
-#endif
-
- /* adjust markers */
- adjust_markers (s1 << 1, (buf_size << 1) + 1, k, old_data);
- buf_size += k;
-}
-
-/* Add `amount' to the position of every marker in the current buffer
- whose current position is between `from' (exclusive) and `to' (inclusive).
- Also, any markers past the outside of that interval, in the direction
- of adjustment, are first moved back to the near end of the interval
- and then adjusted by `amount'. */
-
-void edit_buffer::adjust_markers(register mark_pointer low,
- register mark_pointer high,
- int amount, buf_char *old_data)
-{
- register struct edit_mark *m;
- register mark_pointer mpos;
- /* convert to mark_pointer */
- amount <<= 1;
-
- if (_writer)
- _writer->disconnect_gap_from_file(this);
-
- for (m = mark_list(); m != NULL; m = m->chain)
- {
- mpos = m->_pos;
- if (amount > 0)
- {
- if (mpos > high && mpos < high + amount)
- mpos = high + amount;
- }
- else
- {
- if (mpos > low + amount && mpos <= low)
- mpos = low + amount;
- }
- if (mpos > low && mpos <= high)
- mpos += amount;
- m->_pos = mpos;
- }
-
- // Now adjust files
- edit_streambuf *file;
-
- for (file = files; file != NULL; file = file->next) {
- mpos = file->current() - old_data;
- if (amount > 0)
- {
- if (mpos > high && mpos < high + amount)
- mpos = high + amount;
- }
- else
- {
- if (mpos > low + amount && mpos <= low)
- mpos = low + amount;
- }
- if (mpos > low && mpos <= high)
- mpos += amount;
- char* new_pos = data + mpos;
- file->set_current(new_pos, file->is_reading());
- }
-}
-
-#if 0
-stdio_
- __off == index at start of buffer (need only be valid after seek ? )
- __buf ==
-
-if read/read_delete/overwrite mode:
- __endp <= min(*gap_start_ptr, edit_string->end->ptr(buffer))
-
-if inserting:
- must have *gap_start_ptr == __bufp && *gap_start_ptr+gap == __endp
- file->edit_string->end->ptr(buffer) == *gap_start_ptr+end
-if write_mode:
- if before gap
-#endif
-
-int edit_streambuf::underflow()
-{
- if (!(_mode & ios::in))
- return EOF;
- struct edit_buffer *buffer = str->buffer;
- if (!is_reading()) { // Must switch from put to get mode.
- disconnect_gap_from_file(buffer);
- set_current(pptr(), 1);
- }
- buf_char *str_end = str->end->ptr(buffer);
- retry:
- if (gptr() < egptr()) {
- return *gptr();
- }
- if ((buf_char*)gptr() == str_end)
- return EOF;
- if (str_end <= buffer->gap_start()) {
- setg(eback(), gptr(), str_end);
- goto retry;
- }
- if (gptr() < buffer->gap_start()) {
- setg(eback(), gptr(), buffer->gap_start());
- goto retry;
- }
- if (gptr() == buffer->gap_start()) {
- disconnect_gap_from_file(buffer);
-// fp->__offset += fp->__bufp - fp->__buffer;
- setg(buffer->gap_end(), buffer->gap_end(), str_end);
- }
- else
- setg(eback(), gptr(), str_end);
- goto retry;
-}
-
-int edit_streambuf::overflow(int ch)
-{
- if (_mode == ios::in)
- return EOF;
- struct edit_buffer *buffer = str->buffer;
- flush_to_buffer(buffer);
- if (ch == EOF)
- return 0;
- if (is_reading()) { // Must switch from get to put mode.
- set_current(gptr(), 0);
- }
- buf_char *str_end = str->end->ptr(buffer);
- retry:
- if (pptr() < epptr()) {
- *pptr() = ch;
- pbump(1);
- return (unsigned char)ch;
- }
- if ((buf_char*)pptr() == str_end || inserting()) {
- /* insert instead */
- if (buffer->_writer)
- buffer->_writer->flush_to_buffer(); // Redundant?
- buffer->_writer = NULL;
- if (pptr() >= buffer->gap_end())
- buffer->move_gap(pptr() - buffer->gap_size());
- else
- buffer->move_gap(pptr());
- buffer->make_gap(1);
- setp(buffer->gap_start(), buffer->gap_end());
- buffer->_writer = this;
- *pptr() = ch;
- pbump(1);
- return (unsigned char)ch;
- }
- if (str_end <= buffer->gap_start()) {
- // Entire string is left of gap.
- setp(pptr(), str_end);
- }
- else if (pptr() < buffer->gap_start()) {
- // Current pos is left of gap.
- setp(pptr(), buffer->gap_start());
- goto retry;
- }
- else if (pptr() == buffer->gap_start()) {
- // Current pos is at start of gap; move to end of gap.
-// disconnect_gap_from_file(buffer);
- setp(buffer->gap_end(), str_end);
-// __offset += __bufp - __buffer;
- }
- else {
- // Otherwise, current pos is right of gap.
- setp(pptr(), str_end);
- }
- goto retry;
-}
-
-void edit_streambuf::set_current(char *new_pos, int reading)
-{
- if (reading) {
- setg(new_pos, new_pos, new_pos);
- setp(NULL, NULL);
- }
- else {
- setg(NULL, NULL, NULL);
- setp(new_pos, new_pos);
- }
-}
-
-// Called by fseek(fp, pos, whence) if fp is bound to a edit_buffer.
-
-streampos edit_streambuf::seekoff(streamoff offset, _seek_dir dir,
- int /* =ios::in|ios::out*/)
-{
- struct edit_buffer *buffer = str->buffer;
- disconnect_gap_from_file(buffer);
- buf_index cur_pos = buffer->tell((buf_char*)current());;
- buf_index start_pos = buffer->tell(str->start);
- buf_index end_pos = buffer->tell(str->end);
- switch (dir) {
- case ios::beg:
- offset += start_pos;
- break;
- case ios::cur:
- offset += cur_pos;
- break;
- case ios::end:
- offset += end_pos;
- break;
- }
- if (offset < start_pos || offset > end_pos)
- return EOF;
- buf_char *new_pos = buffer->data + offset;
- buf_char* gap_start = buffer->gap_start();
- if (new_pos > gap_start) {
- buf_char* gap_end = buffer->gap_end();
- new_pos += gap_end - gap_start;
- if (new_pos >= buffer->data + buffer->buf_size) abort(); // Paranoia.
- }
- set_current(new_pos, is_reading());
- return EOF;
-}
-
-#if 0
-int buf_seek(void *arg_cookie, fpos_t * pos, int whence)
-{
- struct buf_cookie *cookie = arg_cookie;
- FILE *file = cookie->file;
- struct edit_buffer *buffer = cookie->str->buffer;
- buf_char *str_start = cookie->str->start->ptr(buffer);
- disconnect_gap_from_file(buffer, cookie->file);
- fpos_t cur_pos, new_pos;
- if (file->__bufp <= *buffer->gap_start_ptr
- || str_start >= buffer->__gap_end)
- cur_pos = str_start - file->__bufp;
- else
- cur_pos =
- (*buffer->gap_start_ptr - str_start) + (file->__bufp - __gap_end);
- end_pos = ...;
- switch (whence) {
- case SEEK_SET:
- new_pos = *pos;
- break;
- case SEEK_CUR:
- new_pos = cur_pos + *pos;
- break;
- case SEEK_END:
- new_pos = end_pos + *pos;
- break;
- }
- if (new_pos > end_pos) {
- seek to end_pos;
- insert_nulls(new_pos - end_pos);
- return;
- }
- if (str_start + new_pos <= *gap_start_ptr &* *gap_start_ptr < end) {
- __buffer = str_start;
- __off = 0;
- __bufp = str_start + new_pos;
- file->__get_limit =
- *buffer->gap_start_ptr; /* what if gap_start_ptr == &bufp ??? */
- } else if () {
-
- }
- *pos = new_pos;
-}
-#endif
-
-/* Delete characters from `from' up to (but not incl) `to' */
-
-void edit_buffer::delete_range (buf_index from, buf_index to)
-{
- register int numdel;
-
- if ((numdel = to - from) <= 0)
- return;
-
- /* Make sure the gap is somewhere in or next to what we are deleting */
- if (from > size1())
- gap_right (from);
- if (to < size1())
- gap_left (to);
-
- /* Relocate all markers pointing into the new, larger gap
- to point at the end of the text before the gap. */
- adjust_markers ((to + gap_size()) << 1, (to + gap_size()) << 1,
- - numdel - gap_size(), data);
-
- __gap_end_pos = to + gap_size();
- _gap_start = data + from;
-}
-
-void edit_buffer::delete_range(struct edit_mark *start, struct edit_mark *end)
-{
- delete_range(tell(start), tell(end));
-}
-
-void buf_delete_chars(struct edit_buffer *, struct edit_mark *, size_t)
-{
- abort();
-}
-
-edit_streambuf::edit_streambuf(edit_string* bstr, int mode)
-{
- _mode = mode;
- str = bstr;
- edit_buffer* buffer = bstr->buffer;
- next = buffer->files;
- buffer->files = this;
- char* buf_ptr = bstr->start->ptr(buffer);
- _inserting = 0;
-// setb(buf_ptr, buf_ptr, 0);
- set_current(buf_ptr, !(mode & ios::out+ios::trunc+ios::app));
- if (_mode & ios::trunc)
- truncate();
- if (_mode & ios::ate)
- seekoff(0, ios::end);
-}
-
-// Called by fclose(fp) if fp is bound to a edit_buffer.
-
-#if 0
-static int buf_close(void *arg)
-{
- register struct buf_cookie *cookie = arg;
- struct edit_buffer *buffer = cookie->str->buffer;
- struct buf_cookie **ptr;
- for (ptr = &buffer->files; *ptr != cookie; ptr = &(*ptr)->next) ;
- *ptr = cookie->next;
- disconnect_gap_from_file(buffer, cookie->file);
- free (cookie);
- return 0;
-}
-#endif
-
-edit_streambuf::~edit_streambuf()
-{
- if (_mode == ios::out)
- truncate();
- // Unlink this from list of files associated with bstr->buffer.
- edit_streambuf **ptr = &str->buffer->files;
- for (; *ptr != this; ptr = &(*ptr)->next) { }
- *ptr = next;
-
- disconnect_gap_from_file(str->buffer);
-}
-
-edit_buffer::edit_buffer()
-{
- buf_size = /*200;*/ 15; /* for testing! */
- data = (buf_char*)malloc(buf_size);
- files = NULL;
-#ifndef OLD_STDIO
- _gap_start = data;
- _writer = NULL;
-#else
- gap_start_normal = data;
- gap_start_ptr = &gap_start_normal;
-#endif
- __gap_end_pos = buf_size;
- start_mark.chain = &end_mark;
- start_mark._pos = 0;
- end_mark.chain = NULL;
- end_mark._pos = 2 * buf_size + 1;
-}
-
-// Allocate a new mark, which is adjusted by 'delta' bytes from 'this'.
-// Restrict new mark to lie within 'str'.
-
-edit_mark::edit_mark(struct edit_string *str, long delta)
-{
- struct edit_buffer *buf = str->buffer;
- chain = buf->start_mark.chain;
- buf->start_mark.chain = this;
- mark_pointer size1 = buf->size1() << 1;
- int gap_size = buf->gap_size() << 1;
- delta <<= 1;
-
- // check if new and old marks are opposite sides of gap
- if (_pos <= size1 && _pos + delta > size1)
- delta += gap_size;
- else if (_pos >= size1 + gap_size && _pos + delta < size1 + gap_size)
- delta -= gap_size;
-
- _pos = _pos + delta;
- if (_pos < str->start->_pos & ~1)
- _pos = (str->start->_pos & ~ 1) + (_pos & 1);
- else if (_pos >= str->end->_pos)
- _pos = (str->end->_pos & ~ 1) + (_pos & 1);
-}
-
-// A (slow) way to find the buffer a mark belongs to.
-
-edit_buffer * edit_mark::buffer()
-{
- struct edit_mark *mark;
- for (mark = this; mark->chain != NULL; mark = mark->chain) ;
- // Assume that the last mark on the chain is the end_mark.
- return (edit_buffer *)((char*)mark - offsetof(edit_buffer, end_mark));
-}
-
-edit_mark::~edit_mark()
-{
- // Must unlink mark from chain of owning buffer
- struct edit_buffer *buf = buffer();
- if (this == &buf->start_mark || this == &buf->end_mark) abort();
- edit_mark **ptr;
- for (ptr = &buf->start_mark.chain; *ptr != this; ptr = &(*ptr)->chain) ;
- *ptr = this->chain;
-}
-
-int edit_string::length() const
-{
- ptrdiff_t delta = end->ptr(buffer) - start->ptr(buffer);
- if (end->ptr(buffer) <= buffer->gap_start() ||
- start->ptr(buffer) >= buffer->gap_end())
- return delta;
- return delta - buffer->gap_size();
-}
-
-buf_char * edit_string::copy_bytes(int *lenp) const
-{
- char *new_str;
- int len1, len2;
- buf_char *start1, *start2;
- start1 = start->ptr(buffer);
- if (end->ptr(buffer) <= buffer->gap_start()
- || start->ptr(buffer) >= buffer->gap_end()) {
- len1 = end->ptr(buffer) - start1;
- len2 = 0;
- start2 = NULL; // To avoid a warning from g++.
- }
- else {
- len1 = buffer->gap_start() - start1;
- start2 = buffer->gap_end();
- len2 = end->ptr(buffer) - start2;
- }
- new_str = (char*)malloc(len1 + len2 + 1);
- memcpy(new_str, start1, len1);
- if (len2 > 0) memcpy(new_str + len1, start2, len2);
- new_str[len1+len2] = '\0';
- *lenp = len1+len2;
- return new_str;
-}
-
-// Replace the buf_chars in 'this' with ones from 'src'.
-// Equivalent to deleting this, then inserting src, except tries
-// to leave marks in place: Marks whose offset from the start
-// of 'this' is less than 'src->length()' will still have the
-// same offset in 'this' when done.
-
-void edit_string::assign(struct edit_string *src)
-{
- edit_streambuf dst_file(this, ios::out);
- if (buffer == src->buffer /*&& ???*/) { /* overly conservative */
- int src_len;
- buf_char *new_str;
- new_str = src->copy_bytes(&src_len);
- dst_file.sputn(new_str, src_len);
- free (new_str);
- } else {
- edit_streambuf src_file(src, ios::in);
- for ( ; ; ) {
- int ch = src_file.sbumpc();
- if (ch == EOF) break;
- dst_file.sputc(ch);
- }
- }
-}
diff --git a/contrib/libio/editbuf.h b/contrib/libio/editbuf.h
deleted file mode 100644
index d15758f257ea..000000000000
--- a/contrib/libio/editbuf.h
+++ /dev/null
@@ -1,185 +0,0 @@
-/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License.
-
-Written by Per Bothner (bothner@cygnus.com). */
-
-#ifndef _EDITBUF_H
-#define _EDITBUF_H
-#ifdef __GNUG__
-#pragma interface
-#endif
-#include <stdio.h>
-#include <fstream.h>
-
-extern "C++" {
-typedef unsigned long mark_pointer;
-// At some point, it might be nice to parameterize this code
-// in terms of buf_char.
-typedef /*unsigned*/ char buf_char;
-
-// Logical pos from start of buffer (does not count gap).
-typedef long buf_index;
-
-// Pos from start of buffer, possibly including gap_size.
-typedef long buf_offset;
-
-#if 0
-struct buf_cookie {
- FILE *file;
- struct edit_string *str;
- struct buf_cookie *next;
- buf_index tell();
-};
-#endif
-
-struct edit_buffer;
-struct edit_mark;
-
-// A edit_string is defined as the region between the 'start' and 'end' marks.
-// Normally (always?) 'start->insert_before()' should be false,
-// and 'end->insert_before()' should be true.
-
-struct edit_string {
- struct edit_buffer *buffer; // buffer that 'start' and 'end' belong to
- struct edit_mark *start, *end;
- int length() const; // count of buf_chars currently in string
- edit_string(struct edit_buffer *b,
- struct edit_mark *ms, struct edit_mark *me)
- { buffer = b; start = ms; end = me; }
-/* Make a fresh, contiguous copy of the data in STR.
- Assign length of STR to *LENP.
- (Output has extra NUL at out[*LENP].) */
- buf_char *copy_bytes(int *lenp) const;
-// FILE *open_file(char *mode);
- void assign(struct edit_string *src); // copy bytes from src to this
-};
-
-struct edit_streambuf : public streambuf {
- friend edit_buffer;
- edit_string *str;
- edit_streambuf* next; // Chain of edit_streambuf's for a edit_buffer.
- short _mode;
- edit_streambuf(edit_string* bstr, int mode);
- ~edit_streambuf();
- virtual int underflow();
- virtual int overflow(int c = EOF);
- virtual streampos seekoff(streamoff, _seek_dir, int mode=ios::in|ios::out);
- void flush_to_buffer();
- void flush_to_buffer(edit_buffer* buffer);
- int _inserting;
- int inserting() { return _inserting; }
- void inserting(int i) { _inserting = i; }
-// int delete_chars(int count, char* cut_buf); Not implemented.
- int truncate();
- int is_reading() { return gptr() != NULL; }
- buf_char* current() { return is_reading() ? gptr() : pptr(); }
- void set_current(char *p, int is_reading);
- protected:
- void disconnect_gap_from_file(edit_buffer* buffer);
-};
-
-// A 'edit_mark' indicates a position in a buffer.
-// It is "attached" the text (rather than the offset).
-// There are two kinds of mark, which have different behavior
-// when text is inserted at the mark:
-// If 'insert_before()' is true the mark will be adjusted to be
-// *after* the new text.
-
-struct edit_mark {
- struct edit_mark *chain;
- mark_pointer _pos;
- inline int insert_before() { return _pos & 1; }
- inline unsigned long index_in_buffer(struct edit_buffer *)
- { return _pos >> 1; }
- inline buf_char *ptr(struct edit_buffer *buf);
- buf_index tell();
- edit_mark() { }
- edit_mark(struct edit_string *str, long delta);
- edit_buffer *buffer();
- ~edit_mark();
-};
-
-// A 'edit_buffer' consists of a sequence of buf_chars (the data),
-// a list of edit_marks pointing into the data, and a list of FILEs
-// also pointing into the data.
-// A 'edit_buffer' coerced to a edit_string is the string of
-// all the buf_chars in the buffer.
-
-// This implementation uses a conventional buffer gap (as in Emacs).
-// The gap start is defined by de-referencing a (buf_char**).
-// This is because sometimes a FILE is inserting into the buffer,
-// so rather than having each putc adjust the gap, we use indirection
-// to have the gap be defined as the write pointer of the FILE.
-// (This assumes that putc adjusts a pointer (as in GNU's libc), not an index.)
-
-struct edit_buffer {
- buf_char *data; /* == emacs buffer_text.p1+1 */
- buf_char *_gap_start;
- edit_streambuf* _writer; // If non-NULL, currently writing stream
- inline buf_char *gap_start()
- { return _writer ? _writer->pptr() : _gap_start; }
- buf_offset __gap_end_pos; // size of part 1 + size of gap
- /* int gap; implicit: buf_size - size1 - size2 */
- int buf_size;
- struct edit_streambuf *files;
- struct edit_mark start_mark;
- struct edit_mark end_mark;
- edit_buffer();
- inline buf_offset gap_end_pos() { return __gap_end_pos; }
- inline struct edit_mark *start_marker() { return &start_mark; }
- inline struct edit_mark *end_marker() { return &end_mark; }
-/* these should be protected, ultimately */
- buf_index tell(edit_mark*);
- buf_index tell(buf_char*);
- inline buf_char *gap_end() { return data + gap_end_pos(); }
- inline int gap_size() { return gap_end() - gap_start(); }
- inline int size1() { return gap_start() - data; }
- inline int size2() { return buf_size - gap_end_pos(); }
- inline struct edit_mark * mark_list() { return &start_mark; }
- void make_gap (buf_offset);
- void move_gap (buf_offset pos);
- void move_gap (buf_char *pos) { move_gap(pos - data); }
- void gap_left (int pos);
- void gap_right (int pos);
- void adjust_markers(mark_pointer low, mark_pointer high,
- int amount, buf_char *old_data);
- void delete_range(buf_index from, buf_index to);
- void delete_range(struct edit_mark *start, struct edit_mark *end);
-};
-
-extern buf_char * bstr_copy(struct edit_string *str, int *lenp);
-
-// Convert a edit_mark to a (buf_char*)
-
-inline buf_char *edit_mark::ptr(struct edit_buffer *buf)
- { return buf->data + index_in_buffer(buf); }
-
-inline void edit_streambuf::flush_to_buffer()
-{
- edit_buffer* buffer = str->buffer;
- if (buffer->_writer == this) flush_to_buffer(buffer);
-}
-} // extern "C++"
-#endif /* !_EDITBUF_H*/
-
diff --git a/contrib/libio/filebuf.cc b/contrib/libio/filebuf.cc
deleted file mode 100644
index 0b0fd6d88d3a..000000000000
--- a/contrib/libio/filebuf.cc
+++ /dev/null
@@ -1,223 +0,0 @@
-/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1993, 1995, 1999 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License.
-
-Written by Per Bothner (bothner@cygnus.com). */
-
-#include "iostreamP.h"
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <errno.h>
-#include "builtinbuf.h"
-
-void filebuf::init()
-{
- _IO_file_init(this);
-}
-
-filebuf::filebuf()
-{
- _IO_file_init(this);
-}
-
-#if !_IO_UNIFIED_JUMPTABLES
-/* This is like "new filebuf()", but it uses the _IO_file_jump jumptable,
- for eficiency. */
-
-filebuf* filebuf::__new()
-{
- filebuf *fb = new filebuf;
- _IO_JUMPS(fb) = &_IO_file_jumps;
- fb->_vtable() = builtinbuf_vtable;
- return fb;
-}
-#endif
-
-filebuf::filebuf(int fd)
-{
- _IO_file_init(this);
- _IO_file_attach(this, fd);
-}
-
-filebuf::filebuf(int fd, char* p, int len)
-{
- _IO_file_init(this);
- _IO_file_attach(this, fd);
- setbuf(p, len);
-}
-
-filebuf::~filebuf()
-{
- if (_IO_file_is_open(this))
- {
- _IO_do_flush (this);
- if (!(xflags() & _IO_DELETE_DONT_CLOSE))
- _IO_SYSCLOSE (this);
- }
-}
-
-filebuf* filebuf::open(const char *filename, ios::openmode mode, int prot)
-{
- if (_IO_file_is_open (this))
- return NULL;
- int posix_mode;
- int read_write;
- if (mode & ios::app)
- mode |= ios::out;
- if ((mode & (ios::in|ios::out)) == (ios::in|ios::out)) {
- posix_mode = O_RDWR;
- read_write = 0;
- }
- else if (mode & ios::out)
- posix_mode = O_WRONLY, read_write = _IO_NO_READS;
- else if (mode & (int)ios::in)
- posix_mode = O_RDONLY, read_write = _IO_NO_WRITES;
- else
- posix_mode = 0, read_write = _IO_NO_READS+_IO_NO_WRITES;
- if (mode & ios::binary)
- {
- mode &= ~ios::binary;
-#ifdef O_BINARY
- /* This is a (mis-)feature of DOS/Windows C libraries. */
- posix_mode |= O_BINARY;
-#endif
- }
- if ((mode & (int)ios::trunc) || mode == (int)ios::out)
- posix_mode |= O_TRUNC;
- if (mode & ios::app)
- posix_mode |= O_APPEND, read_write |= _IO_IS_APPENDING;
- if (!(mode & (int)ios::nocreate) && mode != ios::in)
- posix_mode |= O_CREAT;
- if (mode & (int)ios::noreplace)
- posix_mode |= O_EXCL;
-#if _G_HAVE_IO_FILE_OPEN
- if (!_IO_file_open (this, filename, posix_mode, prot,
- read_write, 0))
- return NULL;
- if (mode & ios::ate) {
- if (pubseekoff(0, ios::end) == EOF) {
- _IO_un_link (this);
- return NULL;
- }
- }
- return this;
-#else
- int fd = ::open(filename, posix_mode, prot);
- if (fd < 0)
- return NULL;
- _fileno = fd;
- xsetflags(read_write, _IO_NO_READS+_IO_NO_WRITES+_IO_IS_APPENDING);
- if (mode & ios::ate) {
- if (pubseekoff(0, ios::end) == EOF)
- return NULL;
- }
- _IO_link_in(this);
- return this;
-#endif
-}
-
-filebuf* filebuf::open(const char *filename, const char *mode)
-{
-#if _G_IO_IO_FILE_VERSION == 0x20001
- return (filebuf*)_IO_file_fopen(this, filename, mode, 0);
-#else
- return (filebuf*)_IO_file_fopen(this, filename, mode);
-#endif
-}
-
-filebuf* filebuf::attach(int fd)
-{
- return (filebuf*)_IO_file_attach(this, fd);
-}
-
-streambuf* filebuf::setbuf(char* p, int len)
-{
- return (streambuf*)_IO_file_setbuf (this, p, len);
-}
-
-int filebuf::doallocate() { return _IO_file_doallocate(this); }
-
-int filebuf::overflow(int c)
-{
- return _IO_file_overflow(this, c);
-}
-
-int filebuf::underflow()
-{
- return _IO_file_underflow(this);
-}
-
-int filebuf::sync()
-{
- return _IO_file_sync(this);
-}
-
-streampos filebuf::seekoff(streamoff offset, _seek_dir dir, int mode)
-{
- return _IO_file_seekoff (this, offset, dir, mode);
-}
-
-filebuf* filebuf::close()
-{
- return (_IO_file_close_it(this) ? (filebuf*)NULL : this);
-}
-
-streamsize filebuf::sys_read(char* buf, streamsize size)
-{
- return _IO_file_read(this, buf, size);
-}
-
-streampos filebuf::sys_seek(streamoff offset, _seek_dir dir)
-{
- return _IO_file_seek(this, offset, dir);
-}
-
-streamsize filebuf::sys_write(const char *buf, streamsize n)
-{
- return _IO_file_write (this, buf, n);
-}
-
-int filebuf::sys_stat(void* st)
-{
- return _IO_file_stat (this, st);
-}
-
-int filebuf::sys_close()
-{
- return _IO_file_close (this);
-}
-
-streamsize filebuf::xsputn(const char *s, streamsize n)
-{
- return _IO_file_xsputn(this, s, n);
-}
-
-streamsize filebuf::xsgetn(char *s, streamsize n)
-{
- // FIXME: OPTIMIZE THIS (specifically, when unbuffered()).
- return streambuf::xsgetn(s, n);
-}
-
-// Non-ANSI AT&T-ism: Default open protection.
-const int filebuf::openprot = 0644;
diff --git a/contrib/libio/filedoalloc.c b/contrib/libio/filedoalloc.c
deleted file mode 100644
index 52b554400c21..000000000000
--- a/contrib/libio/filedoalloc.c
+++ /dev/null
@@ -1,107 +0,0 @@
-/* Copyright (C) 1993, 1997 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-/*
- * Copyright (c) 1990 The Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms are permitted
- * provided that the above copyright notice and this paragraph are
- * duplicated in all such forms and that any documentation,
- * advertising materials, and other materials related to such
- * distribution and use acknowledge that the software was developed
- * by the University of California, Berkeley. The name of the
- * University may not be used to endorse or promote products derived
- * from this software without specific prior written permission.
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- */
-
-/* Modified for GNU iostream by Per Bothner 1991, 1992. */
-
-#include "libioP.h"
-#include <sys/types.h>
-#include <sys/stat.h>
-#ifdef __STDC__
-#include <stdlib.h>
-#include <unistd.h>
-#endif
-
-#ifdef _LIBC
-# undef isatty
-# define isatty(Fd) __isatty (Fd)
-#endif
-
-/*
- * Allocate a file buffer, or switch to unbuffered I/O.
- * Per the ANSI C standard, ALL tty devices default to line buffered.
- *
- * As a side effect, we set __SOPT or __SNPT (en/dis-able fseek
- * optimisation) right after the _fstat() that finds the buffer size.
- */
-
-int
-_IO_file_doallocate (fp)
- _IO_FILE *fp;
-{
- _IO_size_t size;
- int couldbetty;
- char *p;
- struct stat st;
-
-#if !defined(_LIBC) && !defined(__linux__)
- /* If _IO_cleanup_registration_needed is non-zero, we should call the
- function it points to. This is to make sure _IO_cleanup gets called
- on exit. We call it from _IO_file_doallocate, since that is likely
- to get called by any program that does buffered I/O. */
- if (_IO_cleanup_registration_needed)
- (*_IO_cleanup_registration_needed) ();
-#endif
-
- if (fp->_fileno < 0 || _IO_SYSSTAT (fp, &st) < 0)
- {
- couldbetty = 0;
- size = _IO_BUFSIZ;
-#if 0
- /* do not try to optimise fseek() */
- fp->_flags |= __SNPT;
-#endif
- }
- else
- {
- couldbetty = S_ISCHR (st.st_mode);
-#if _IO_HAVE_ST_BLKSIZE
- size = st.st_blksize <= 0 ? _IO_BUFSIZ : st.st_blksize;
-#else
- size = _IO_BUFSIZ;
-#endif
- }
- ALLOC_BUF (p, size, EOF);
- _IO_setb (fp, p, p + size, 1);
- if (couldbetty && isatty (fp->_fileno))
- fp->_flags |= _IO_LINE_BUF;
- return 1;
-}
diff --git a/contrib/libio/fileops.c b/contrib/libio/fileops.c
deleted file mode 100644
index 54e13d3f18fe..000000000000
--- a/contrib/libio/fileops.c
+++ /dev/null
@@ -1,811 +0,0 @@
-/* Copyright (C) 1993, 1995, 1997 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
- Written by Per Bothner <bothner@cygnus.com>.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-
-#include "libioP.h"
-#include <fcntl.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <string.h>
-#include <unistd.h>
-#include <errno.h>
-#ifndef errno
-extern int errno;
-#endif
-
-
-#ifdef _LIBC
-# define open(Name, Flags, Prot) __open (Name, Flags, Prot)
-# define close(FD) __close (FD)
-# define fstat(FD, Statbuf) __fstat (FD, Statbuf)
-# define lseek(FD, Offset, Whence) __lseek (FD, Offset, Whence)
-# define read(FD, Buf, NBytes) __read (FD, Buf, NBytes)
-# define write(FD, Buf, NBytes) __write (FD, Buf, NBytes)
-#endif
-
-/* An fstream can be in at most one of put mode, get mode, or putback mode.
- Putback mode is a variant of get mode.
-
- In a filebuf, there is only one current position, instead of two
- separate get and put pointers. In get mode, the current position
- is that of gptr(); in put mode that of pptr().
-
- The position in the buffer that corresponds to the position
- in external file system is normally _IO_read_end, except in putback
- mode, when it is _IO_save_end.
- If the field _fb._offset is >= 0, it gives the offset in
- the file as a whole corresponding to eGptr(). (?)
-
- PUT MODE:
- If a filebuf is in put mode, then all of _IO_read_ptr, _IO_read_end,
- and _IO_read_base are equal to each other. These are usually equal
- to _IO_buf_base, though not necessarily if we have switched from
- get mode to put mode. (The reason is to maintain the invariant
- that _IO_read_end corresponds to the external file position.)
- _IO_write_base is non-NULL and usually equal to _IO_base_base.
- We also have _IO_write_end == _IO_buf_end, but only in fully buffered mode.
- The un-flushed character are those between _IO_write_base and _IO_write_ptr.
-
- GET MODE:
- If a filebuf is in get or putback mode, eback() != egptr().
- In get mode, the unread characters are between gptr() and egptr().
- The OS file position corresponds to that of egptr().
-
- PUTBACK MODE:
- Putback mode is used to remember "excess" characters that have
- been sputbackc'd in a separate putback buffer.
- In putback mode, the get buffer points to the special putback buffer.
- The unread characters are the characters between gptr() and egptr()
- in the putback buffer, as well as the area between save_gptr()
- and save_egptr(), which point into the original reserve buffer.
- (The pointers save_gptr() and save_egptr() are the values
- of gptr() and egptr() at the time putback mode was entered.)
- The OS position corresponds to that of save_egptr().
-
- LINE BUFFERED OUTPUT:
- During line buffered output, _IO_write_base==base() && epptr()==base().
- However, ptr() may be anywhere between base() and ebuf().
- This forces a call to filebuf::overflow(int C) on every put.
- If there is more space in the buffer, and C is not a '\n',
- then C is inserted, and pptr() incremented.
-
- UNBUFFERED STREAMS:
- If a filebuf is unbuffered(), the _shortbuf[1] is used as the buffer.
-*/
-
-#define CLOSED_FILEBUF_FLAGS \
- (_IO_IS_FILEBUF+_IO_NO_READS+_IO_NO_WRITES+_IO_TIED_PUT_GET)
-
-
-void
-_IO_file_init (fp)
- _IO_FILE *fp;
-{
- /* POSIX.1 allows another file handle to be used to change the position
- of our file descriptor. Hence we actually don't know the actual
- position before we do the first fseek (and until a following fflush). */
- fp->_offset = _IO_pos_BAD;
- fp->_IO_file_flags |= CLOSED_FILEBUF_FLAGS;
-
- _IO_link_in(fp);
- fp->_fileno = -1;
-}
-
-int
-_IO_file_close_it (fp)
- _IO_FILE *fp;
-{
- int write_status, close_status;
- if (!_IO_file_is_open (fp))
- return EOF;
-
- write_status = _IO_do_flush (fp);
-
- _IO_unsave_markers(fp);
-
- close_status = _IO_SYSCLOSE (fp);
-
- /* Free buffer. */
- _IO_setb (fp, NULL, NULL, 0);
- _IO_setg (fp, NULL, NULL, NULL);
- _IO_setp (fp, NULL, NULL);
-
- _IO_un_link (fp);
- fp->_flags = _IO_MAGIC|CLOSED_FILEBUF_FLAGS;
- fp->_fileno = EOF;
- fp->_offset = _IO_pos_BAD;
-
- return close_status ? close_status : write_status;
-}
-
-void
-_IO_file_finish (fp, dummy)
- _IO_FILE *fp;
- int dummy;
-{
- if (_IO_file_is_open (fp))
- {
- _IO_do_flush (fp);
- if (!(fp->_flags & _IO_DELETE_DONT_CLOSE))
- _IO_SYSCLOSE (fp);
- }
- _IO_default_finish (fp, 0);
-}
-
-_IO_FILE *
-_IO_file_fopen (fp, filename, mode)
- _IO_FILE *fp;
- const char *filename;
- const char *mode;
-{
- int oflags = 0, omode;
- int read_write, fdesc;
- int oprot = 0666;
- if (_IO_file_is_open (fp))
- return 0;
- switch (*mode++)
- {
- case 'r':
- omode = O_RDONLY;
- read_write = _IO_NO_WRITES;
- break;
- case 'w':
- omode = O_WRONLY;
- oflags = O_CREAT|O_TRUNC;
- read_write = _IO_NO_READS;
- break;
- case 'a':
- omode = O_WRONLY;
- oflags = O_CREAT|O_APPEND;
- read_write = _IO_NO_READS|_IO_IS_APPENDING;
- break;
- default:
- __set_errno (EINVAL);
- return NULL;
- }
- if (mode[0] == '+' || (mode[0] == 'b' && mode[1] == '+'))
- {
- omode = O_RDWR;
- read_write &= _IO_IS_APPENDING;
- }
- fdesc = open (filename, omode|oflags, oprot);
- if (fdesc < 0)
- return NULL;
- fp->_fileno = fdesc;
- _IO_mask_flags (fp, read_write,_IO_NO_READS+_IO_NO_WRITES+_IO_IS_APPENDING);
- if (read_write & _IO_IS_APPENDING)
- if (_IO_SEEKOFF (fp, (_IO_off_t)0, _IO_seek_end, _IOS_INPUT|_IOS_OUTPUT)
- == _IO_pos_BAD && errno != ESPIPE)
- return NULL;
- _IO_link_in (fp);
- return fp;
-}
-
-_IO_FILE *
-_IO_file_attach (fp, fd)
- _IO_FILE *fp;
- int fd;
-{
- if (_IO_file_is_open (fp))
- return NULL;
- fp->_fileno = fd;
- fp->_flags &= ~(_IO_NO_READS+_IO_NO_WRITES);
- fp->_flags |= _IO_DELETE_DONT_CLOSE;
- /* Get the current position of the file. */
- /* We have to do that since that may be junk. */
- fp->_offset = _IO_pos_BAD;
- if (_IO_SEEKOFF (fp, (_IO_off_t)0, _IO_seek_cur, _IOS_INPUT|_IOS_OUTPUT)
- == _IO_pos_BAD && errno != ESPIPE)
- return NULL;
- return fp;
-}
-
-_IO_FILE *
-_IO_file_setbuf (fp, p, len)
- _IO_FILE *fp;
- char *p;
- _IO_ssize_t len;
-{
- if (_IO_default_setbuf (fp, p, len) == NULL)
- return NULL;
-
- fp->_IO_write_base = fp->_IO_write_ptr = fp->_IO_write_end
- = fp->_IO_buf_base;
- _IO_setg (fp, fp->_IO_buf_base, fp->_IO_buf_base, fp->_IO_buf_base);
-
- return fp;
-}
-
-/* Write TO_DO bytes from DATA to FP.
- Then mark FP as having empty buffers. */
-
-int
-_IO_do_write (fp, data, to_do)
- _IO_FILE *fp;
- const char *data;
- _IO_size_t to_do;
-{
- _IO_size_t count;
- if (to_do == 0)
- return 0;
- if (fp->_flags & _IO_IS_APPENDING)
- /* On a system without a proper O_APPEND implementation,
- you would need to sys_seek(0, SEEK_END) here, but it
- is not needed nor desirable for Unix- or Posix-like systems.
- Instead, just indicate that offset (before and after) is
- unpredictable. */
- fp->_offset = _IO_pos_BAD;
- else if (fp->_IO_read_end != fp->_IO_write_base)
- {
- _IO_pos_t new_pos
- = _IO_SYSSEEK (fp, fp->_IO_write_base - fp->_IO_read_end, 1);
- if (new_pos == _IO_pos_BAD)
- return EOF;
- fp->_offset = new_pos;
- }
- count = _IO_SYSWRITE (fp, data, to_do);
- if (fp->_cur_column)
- fp->_cur_column = _IO_adjust_column (fp->_cur_column - 1, data, to_do) + 1;
- _IO_setg (fp, fp->_IO_buf_base, fp->_IO_buf_base, fp->_IO_buf_base);
- fp->_IO_write_base = fp->_IO_write_ptr = fp->_IO_buf_base;
- fp->_IO_write_end = ((fp->_flags & (_IO_LINE_BUF+_IO_UNBUFFERED))
- ? fp->_IO_buf_base : fp->_IO_buf_end);
- return count != to_do ? EOF : 0;
-}
-
-int
-_IO_file_underflow (fp)
- _IO_FILE *fp;
-{
- _IO_ssize_t count;
-#if 0
- /* SysV does not make this test; take it out for compatibility */
- if (fp->_flags & _IO_EOF_SEEN)
- return (EOF);
-#endif
-
- if (fp->_flags & _IO_NO_READS)
- {
- __set_errno (EBADF);
- return EOF;
- }
- if (fp->_IO_read_ptr < fp->_IO_read_end)
- return *(unsigned char *) fp->_IO_read_ptr;
-
- if (fp->_IO_buf_base == NULL)
- _IO_doallocbuf (fp);
-
- /* Flush all line buffered files before reading. */
- /* FIXME This can/should be moved to genops ?? */
- if (fp->_flags & (_IO_LINE_BUF|_IO_UNBUFFERED))
- _IO_flush_all_linebuffered ();
-
- _IO_switch_to_get_mode (fp);
-
- /* This is very tricky. We have to adjust those
- pointers before we call _IO_SYSREAD () since
- we may longjump () out while waiting for
- input. Those pointers may be screwed up. H.J. */
- fp->_IO_read_base = fp->_IO_read_ptr = fp->_IO_buf_base;
- fp->_IO_read_end = fp->_IO_buf_base;
- fp->_IO_write_base = fp->_IO_write_ptr = fp->_IO_write_end
- = fp->_IO_buf_base;
-
- count = _IO_SYSREAD (fp, fp->_IO_buf_base,
- fp->_IO_buf_end - fp->_IO_buf_base);
- if (count <= 0)
- {
- if (count == 0)
- fp->_flags |= _IO_EOF_SEEN;
- else
- fp->_flags |= _IO_ERR_SEEN, count = 0;
- }
- fp->_IO_read_end += count;
- if (count == 0)
- return EOF;
- if (fp->_offset != _IO_pos_BAD)
- _IO_pos_adjust (fp->_offset, count);
- return *(unsigned char *) fp->_IO_read_ptr;
-}
-
-int
-_IO_file_overflow (f, ch)
- _IO_FILE *f;
- int ch;
-{
- if (f->_flags & _IO_NO_WRITES) /* SET ERROR */
- {
- f->_flags |= _IO_ERR_SEEN;
- __set_errno (EBADF);
- return EOF;
- }
- /* If currently reading or no buffer allocated. */
- if ((f->_flags & _IO_CURRENTLY_PUTTING) == 0)
- {
- /* Allocate a buffer if needed. */
- if (f->_IO_write_base == 0)
- {
- _IO_doallocbuf (f);
- _IO_setg (f, f->_IO_buf_base, f->_IO_buf_base, f->_IO_buf_base);
- }
- /* Otherwise must be currently reading.
- If _IO_read_ptr (and hence also _IO_read_end) is at the buffer end,
- logically slide the buffer forwards one block (by setting the
- read pointers to all point at the beginning of the block). This
- makes room for subsequent output.
- Otherwise, set the read pointers to _IO_read_end (leaving that
- alone, so it can continue to correspond to the external position). */
- if (f->_IO_read_ptr == f->_IO_buf_end)
- f->_IO_read_end = f->_IO_read_ptr = f->_IO_buf_base;
- f->_IO_write_ptr = f->_IO_read_ptr;
- f->_IO_write_base = f->_IO_write_ptr;
- f->_IO_write_end = f->_IO_buf_end;
- f->_IO_read_base = f->_IO_read_ptr = f->_IO_read_end;
-
- if (f->_flags & (_IO_LINE_BUF+_IO_UNBUFFERED))
- f->_IO_write_end = f->_IO_write_ptr;
- f->_flags |= _IO_CURRENTLY_PUTTING;
- }
- if (ch == EOF)
- return _IO_do_flush (f);
- if (f->_IO_write_ptr == f->_IO_buf_end ) /* Buffer is really full */
- if (_IO_do_flush (f) == EOF)
- return EOF;
- *f->_IO_write_ptr++ = ch;
- if ((f->_flags & _IO_UNBUFFERED)
- || ((f->_flags & _IO_LINE_BUF) && ch == '\n'))
- if (_IO_do_flush (f) == EOF)
- return EOF;
- return (unsigned char) ch;
-}
-
-int
-_IO_file_sync (fp)
- _IO_FILE *fp;
-{
- _IO_size_t delta;
- int retval = 0;
-
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
- _IO_flockfile (fp);
- /* char* ptr = cur_ptr(); */
- if (fp->_IO_write_ptr > fp->_IO_write_base)
- if (_IO_do_flush(fp)) return EOF;
- delta = fp->_IO_read_ptr - fp->_IO_read_end;
- if (delta != 0)
- {
-#ifdef TODO
- if (_IO_in_backup (fp))
- delta -= eGptr () - Gbase ();
-#endif
- _IO_off_t new_pos = _IO_SYSSEEK (fp, delta, 1);
- if (new_pos != (_IO_off_t) EOF)
- fp->_IO_read_end = fp->_IO_read_ptr;
-#ifdef ESPIPE
- else if (errno == ESPIPE)
- ; /* Ignore error from unseekable devices. */
-#endif
- else
- retval = EOF;
- }
- if (retval != EOF)
- fp->_offset = _IO_pos_BAD;
- /* FIXME: Cleanup - can this be shared? */
- /* setg(base(), ptr, ptr); */
- _IO_cleanup_region_end (1);
- return retval;
-}
-
-_IO_pos_t
-_IO_file_seekoff (fp, offset, dir, mode)
- _IO_FILE *fp;
- _IO_off_t offset;
- int dir;
- int mode;
-{
- _IO_pos_t result;
- _IO_off_t delta, new_offset;
- long count;
- /* POSIX.1 8.2.3.7 says that after a call the fflush() the file
- offset of the underlying file must be exact. */
- int must_be_exact = (fp->_IO_read_base == fp->_IO_read_end
- && fp->_IO_write_base == fp->_IO_write_ptr);
-
- if (mode == 0)
- dir = _IO_seek_cur, offset = 0; /* Don't move any pointers. */
-
- /* Flush unwritten characters.
- (This may do an unneeded write if we seek within the buffer.
- But to be able to switch to reading, we would need to set
- egptr to ptr. That can't be done in the current design,
- which assumes file_ptr() is eGptr. Anyway, since we probably
- end up flushing when we close(), it doesn't make much difference.)
- FIXME: simulate mem-papped files. */
-
- if (fp->_IO_write_ptr > fp->_IO_write_base || _IO_in_put_mode (fp))
- if (_IO_switch_to_get_mode (fp))
- return EOF;
-
- if (fp->_IO_buf_base == NULL)
- {
- _IO_doallocbuf (fp);
- _IO_setp (fp, fp->_IO_buf_base, fp->_IO_buf_base);
- _IO_setg (fp, fp->_IO_buf_base, fp->_IO_buf_base, fp->_IO_buf_base);
- }
-
- switch (dir)
- {
- case _IO_seek_cur:
- /* Adjust for read-ahead (bytes is buffer). */
- offset -= fp->_IO_read_end - fp->_IO_read_ptr;
- if (fp->_offset == _IO_pos_BAD)
- goto dumb;
- /* Make offset absolute, assuming current pointer is file_ptr(). */
- offset += _IO_pos_as_off (fp->_offset);
-
- dir = _IO_seek_set;
- break;
- case _IO_seek_set:
- break;
- case _IO_seek_end:
- {
- struct stat st;
- if (_IO_SYSSTAT (fp, &st) == 0 && S_ISREG (st.st_mode))
- {
- offset += st.st_size;
- dir = _IO_seek_set;
- }
- else
- goto dumb;
- }
- }
- /* At this point, dir==_IO_seek_set. */
-
- /* If destination is within current buffer, optimize: */
- if (fp->_offset != _IO_pos_BAD && fp->_IO_read_base != NULL
- && !_IO_in_backup (fp))
- {
- /* Offset relative to start of main get area. */
- _IO_pos_t rel_offset = (offset - fp->_offset
- + (fp->_IO_read_end - fp->_IO_read_base));
- if (rel_offset >= 0)
- {
-#if 0
- if (_IO_in_backup (fp))
- _IO_switch_to_main_get_area (fp);
-#endif
- if (rel_offset <= fp->_IO_read_end - fp->_IO_read_base)
- {
- _IO_setg (fp, fp->_IO_buf_base, fp->_IO_buf_base + rel_offset,
- fp->_IO_read_end);
- _IO_setp (fp, fp->_IO_buf_base, fp->_IO_buf_base);
- return offset;
- }
-#ifdef TODO
- /* If we have streammarkers, seek forward by reading ahead. */
- if (_IO_have_markers (fp))
- {
- int to_skip = rel_offset
- - (fp->_IO_read_ptr - fp->_IO_read_base);
- if (ignore (to_skip) != to_skip)
- goto dumb;
- return offset;
- }
-#endif
- }
-#ifdef TODO
- if (rel_offset < 0 && rel_offset >= Bbase () - Bptr ())
- {
- if (!_IO_in_backup (fp))
- _IO_switch_to_backup_area (fp);
- gbump (fp->_IO_read_end + rel_offset - fp->_IO_read_ptr);
- return offset;
- }
-#endif
- }
-
-#ifdef TODO
- _IO_unsave_markers (fp);
-#endif
-
- if (fp->_flags & _IO_NO_READS)
- goto dumb;
-
- /* Try to seek to a block boundary, to improve kernel page management. */
- new_offset = offset & ~(fp->_IO_buf_end - fp->_IO_buf_base - 1);
- delta = offset - new_offset;
- if (delta > fp->_IO_buf_end - fp->_IO_buf_base)
- {
- new_offset = offset;
- delta = 0;
- }
- result = _IO_SYSSEEK (fp, new_offset, 0);
- if (result < 0)
- return EOF;
- if (delta == 0)
- count = 0;
- else
- {
- count = _IO_SYSREAD (fp, fp->_IO_buf_base,
- (must_be_exact
- ? delta : fp->_IO_buf_end - fp->_IO_buf_base));
- if (count < delta)
- {
- /* We weren't allowed to read, but try to seek the remainder. */
- offset = count == EOF ? delta : delta-count;
- dir = _IO_seek_cur;
- goto dumb;
- }
- }
- _IO_setg (fp, fp->_IO_buf_base, fp->_IO_buf_base + delta,
- fp->_IO_buf_base + count);
- _IO_setp (fp, fp->_IO_buf_base, fp->_IO_buf_base);
- fp->_offset = result + count;
- _IO_mask_flags (fp, 0, _IO_EOF_SEEN);
- return offset;
- dumb:
-
- _IO_unsave_markers (fp);
- result = _IO_SYSSEEK (fp, offset, dir);
- if (result != EOF)
- _IO_mask_flags (fp, 0, _IO_EOF_SEEN);
- fp->_offset = result;
- _IO_setg (fp, fp->_IO_buf_base, fp->_IO_buf_base, fp->_IO_buf_base);
- _IO_setp (fp, fp->_IO_buf_base, fp->_IO_buf_base);
- return result;
-}
-
-_IO_ssize_t
-_IO_file_read (fp, buf, size)
- _IO_FILE *fp;
- void *buf;
- _IO_ssize_t size;
-{
- return read (fp->_fileno, buf, size);
-}
-
-_IO_pos_t
-_IO_file_seek (fp, offset, dir)
- _IO_FILE *fp;
- _IO_off_t offset;
- int dir;
-{
- return lseek (fp->_fileno, offset, dir);
-}
-
-int
-_IO_file_stat (fp, st)
- _IO_FILE *fp;
- void *st;
-{
- return fstat (fp->_fileno, (struct stat *) st);
-}
-
-int
-_IO_file_close (fp)
- _IO_FILE *fp;
-{
- return close (fp->_fileno);
-}
-
-_IO_ssize_t
-_IO_file_write (f, data, n)
- _IO_FILE *f;
- const void *data;
- _IO_ssize_t n;
-{
- _IO_ssize_t to_do = n;
- while (to_do > 0)
- {
- _IO_ssize_t count = write (f->_fileno, data, to_do);
- if (count == EOF)
- {
- f->_flags |= _IO_ERR_SEEN;
- break;
- }
- to_do -= count;
- data = (void *) ((char *) data + count);
- }
- n -= to_do;
- if (f->_offset >= 0)
- f->_offset += n;
- return n;
-}
-
-_IO_size_t
-_IO_file_xsputn (f, data, n)
- _IO_FILE *f;
- const void *data;
- _IO_size_t n;
-{
- register const char *s = (char *) data;
- _IO_size_t to_do = n;
- int must_flush = 0;
- _IO_size_t count;
-
- if (n <= 0)
- return 0;
- /* This is an optimized implementation.
- If the amount to be written straddles a block boundary
- (or the filebuf is unbuffered), use sys_write directly. */
-
- /* First figure out how much space is available in the buffer. */
- count = f->_IO_write_end - f->_IO_write_ptr; /* Space available. */
- if ((f->_flags & _IO_LINE_BUF) && (f->_flags & _IO_CURRENTLY_PUTTING))
- {
- count = f->_IO_buf_end - f->_IO_write_ptr;
- if (count >= n)
- {
- register const char *p;
- for (p = s + n; p > s; )
- {
- if (*--p == '\n')
- {
- count = p - s + 1;
- must_flush = 1;
- break;
- }
- }
- }
- }
- /* Then fill the buffer. */
- if (count > 0)
- {
- if (count > to_do)
- count = to_do;
- if (count > 20)
- {
- memcpy (f->_IO_write_ptr, s, count);
- s += count;
- }
- else
- {
- register char *p = f->_IO_write_ptr;
- register int i = (int) count;
- while (--i >= 0)
- *p++ = *s++;
- }
- f->_IO_write_ptr += count;
- to_do -= count;
- }
- if (to_do + must_flush > 0)
- {
- _IO_size_t block_size, dont_write;
- /* Next flush the (full) buffer. */
- if (__overflow (f, EOF) == EOF)
- return n - to_do;
-
- /* Try to maintain alignment: write a whole number of blocks.
- dont_write is what gets left over. */
- block_size = f->_IO_buf_end - f->_IO_buf_base;
- dont_write = block_size >= 128 ? to_do % block_size : 0;
-
- count = to_do - dont_write;
- if (_IO_do_write (f, s, count) == EOF)
- return n - to_do;
- to_do = dont_write;
-
- /* Now write out the remainder. Normally, this will fit in the
- buffer, but it's somewhat messier for line-buffered files,
- so we let _IO_default_xsputn handle the general case. */
- if (dont_write)
- to_do -= _IO_default_xsputn (f, s+count, dont_write);
- }
- return n - to_do;
-}
-
-#if 0
-/* Work in progress */
-_IO_size_t
-_IO_file_xsgetn (fp, data, n)
- _IO_FILE *fp;
- void *data;
- _IO_size_t n;
-{
- register _IO_size_t more = n;
- register char *s = data;
- for (;;)
- {
- /* Data available. */
- _IO_ssize_t count = fp->_IO_read_end - fp->_IO_read_ptr;
- if (count > 0)
- {
- if (count > more)
- count = more;
- if (count > 20)
- {
- memcpy (s, fp->_IO_read_ptr, count);
- s += count;
- fp->_IO_read_ptr += count;
- }
- else if (count <= 0)
- count = 0;
- else
- {
- register char *p = fp->_IO_read_ptr;
- register int i = (int) count;
- while (--i >= 0)
- *s++ = *p++;
- fp->_IO_read_ptr = p;
- }
- more -= count;
- }
-#if 0
- if (! _IO_in put_mode (fp)
- && ! _IO_have_markers (fp) && ! IO_have_backup (fp))
- {
- /* This is an optimization of _IO_file_underflow */
- if (fp->_flags & _IO_NO_READS)
- break;
- /* If we're reading a lot of data, don't bother allocating
- a buffer. But if we're only reading a bit, perhaps we should ??*/
- if (count <= 512 && fp->_IO_buf_base == NULL)
- _IO_doallocbuf (fp);
- if (fp->_flags & (_IO_LINE_BUF|_IO_UNBUFFERED))
- _IO_flush_all_linebuffered ();
-
- _IO_switch_to_get_mode (fp); ???;
- count = _IO_SYSREAD (fp, s, more);
- if (count <= 0)
- {
- if (count == 0)
- fp->_flags |= _IO_EOF_SEEN;
- else
- fp->_flags |= _IO_ERR_SEEN, count = 0;
- }
-
- s += count;
- more -= count;
- }
-#endif
- if (more == 0 || __underflow (fp) == EOF)
- break;
- }
- return n - more;
-}
-#endif
-
-struct _IO_jump_t _IO_file_jumps =
-{
- JUMP_INIT_DUMMY,
- JUMP_INIT(finish, _IO_file_finish),
- JUMP_INIT(overflow, _IO_file_overflow),
- JUMP_INIT(underflow, _IO_file_underflow),
- JUMP_INIT(uflow, _IO_default_uflow),
- JUMP_INIT(pbackfail, _IO_default_pbackfail),
- JUMP_INIT(xsputn, _IO_file_xsputn),
- JUMP_INIT(xsgetn, _IO_default_xsgetn),
- JUMP_INIT(seekoff, _IO_file_seekoff),
- JUMP_INIT(seekpos, _IO_default_seekpos),
- JUMP_INIT(setbuf, _IO_file_setbuf),
- JUMP_INIT(sync, _IO_file_sync),
- JUMP_INIT(doallocate, _IO_file_doallocate),
- JUMP_INIT(read, _IO_file_read),
- JUMP_INIT(write, _IO_file_write),
- JUMP_INIT(seek, _IO_file_seek),
- JUMP_INIT(close, _IO_file_close),
- JUMP_INIT(stat, _IO_file_stat)
-};
diff --git a/contrib/libio/floatconv.c b/contrib/libio/floatconv.c
deleted file mode 100644
index 9503187b5d57..000000000000
--- a/contrib/libio/floatconv.c
+++ /dev/null
@@ -1,2375 +0,0 @@
-/*
-Copyright (C) 1993, 1994 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include <libioP.h>
-#ifdef _IO_USE_DTOA
-/****************************************************************
- *
- * The author of this software is David M. Gay.
- *
- * Copyright (c) 1991 by AT&T.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose without fee is hereby granted, provided that this entire notice
- * is included in all copies of any software which is or includes a copy
- * or modification of this software and in all copies of the supporting
- * documentation for such software.
- *
- * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTY. IN PARTICULAR, NEITHER THE AUTHOR NOR AT&T MAKES ANY
- * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
- * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
- *
- ***************************************************************/
-
-/* Some cleaning up by Per Bothner, bothner@cygnus.com, 1992, 1993.
- Re-written to not need static variables
- (except result, result_k, HIWORD, LOWORD). */
-
-/* Note that the checking of _DOUBLE_IS_32BITS is for use with the
- cross targets that employ the newlib ieeefp.h header. -- brendan */
-
-/* Please send bug reports to
- David M. Gay
- AT&T Bell Laboratories, Room 2C-463
- 600 Mountain Avenue
- Murray Hill, NJ 07974-2070
- U.S.A.
- dmg@research.att.com or research!dmg
- */
-
-/* strtod for IEEE-, VAX-, and IBM-arithmetic machines.
- *
- * This strtod returns a nearest machine number to the input decimal
- * string (or sets errno to ERANGE). With IEEE arithmetic, ties are
- * broken by the IEEE round-even rule. Otherwise ties are broken by
- * biased rounding (add half and chop).
- *
- * Inspired loosely by William D. Clinger's paper "How to Read Floating
- * Point Numbers Accurately" [Proc. ACM SIGPLAN '90, pp. 92-101].
- *
- * Modifications:
- *
- * 1. We only require IEEE, IBM, or VAX double-precision
- * arithmetic (not IEEE double-extended).
- * 2. We get by with floating-point arithmetic in a case that
- * Clinger missed -- when we're computing d * 10^n
- * for a small integer d and the integer n is not too
- * much larger than 22 (the maximum integer k for which
- * we can represent 10^k exactly), we may be able to
- * compute (d*10^k) * 10^(e-k) with just one roundoff.
- * 3. Rather than a bit-at-a-time adjustment of the binary
- * result in the hard case, we use floating-point
- * arithmetic to determine the adjustment to within
- * one bit; only in really hard cases do we need to
- * compute a second residual.
- * 4. Because of 3., we don't need a large table of powers of 10
- * for ten-to-e (just some small tables, e.g. of 10^k
- * for 0 <= k <= 22).
- */
-
-/*
- * #define IEEE_8087 for IEEE-arithmetic machines where the least
- * significant byte has the lowest address.
- * #define IEEE_MC68k for IEEE-arithmetic machines where the most
- * significant byte has the lowest address.
- * #define Sudden_Underflow for IEEE-format machines without gradual
- * underflow (i.e., that flush to zero on underflow).
- * #define IBM for IBM mainframe-style floating-point arithmetic.
- * #define VAX for VAX-style floating-point arithmetic.
- * #define Unsigned_Shifts if >> does treats its left operand as unsigned.
- * #define No_leftright to omit left-right logic in fast floating-point
- * computation of dtoa.
- * #define Check_FLT_ROUNDS if FLT_ROUNDS can assume the values 2 or 3.
- * #define RND_PRODQUOT to use rnd_prod and rnd_quot (assembly routines
- * that use extended-precision instructions to compute rounded
- * products and quotients) with IBM.
- * #define ROUND_BIASED for IEEE-format with biased rounding.
- * #define Inaccurate_Divide for IEEE-format with correctly rounded
- * products but inaccurate quotients, e.g., for Intel i860.
- * #define KR_headers for old-style C function headers.
- */
-
-#ifdef DEBUG
-#include <stdio.h>
-#define Bug(x) {fprintf(stderr, "%s\n", x); exit(1);}
-#endif
-
-#ifdef __STDC__
-#include <stdlib.h>
-#include <string.h>
-#include <float.h>
-#define CONST const
-#else
-#define CONST
-#define KR_headers
-
-/* In this case, we assume IEEE floats. */
-#define FLT_ROUNDS 1
-#define FLT_RADIX 2
-#define DBL_MANT_DIG 53
-#define DBL_DIG 15
-#define DBL_MAX_10_EXP 308
-#define DBL_MAX_EXP 1024
-#endif
-
-#include <errno.h>
-#ifndef __MATH_H__
-#include <math.h>
-#endif
-
-#ifdef Unsigned_Shifts
-#define Sign_Extend(a,b) if (b < 0) a |= 0xffff0000;
-#else
-#define Sign_Extend(a,b) /*no-op*/
-#endif
-
-#if defined(__i386__) || defined(__i860__) || defined(clipper)
-#define IEEE_8087
-#endif
-#if defined(MIPSEL) || defined(__alpha__)
-#define IEEE_8087
-#endif
-#if defined(__sparc__) || defined(sparc) || defined(MIPSEB)
-#define IEEE_MC68k
-#endif
-
-#if defined(IEEE_8087) + defined(IEEE_MC68k) + defined(VAX) + defined(IBM) != 1
-
-#ifndef _DOUBLE_IS_32BITS
-#if FLT_RADIX==16
-#define IBM
-#else
-#if DBL_MANT_DIG==56
-#define VAX
-#else
-#if DBL_MANT_DIG==53 && DBL_MAX_10_EXP==308
-#define IEEE_Unknown
-#else
-Exactly one of IEEE_8087, IEEE_MC68k, VAX, or IBM should be defined.
-#endif
-#endif
-#endif
-#endif /* !_DOUBLE_IS_32BITS */
-#endif
-
-typedef _G_uint32_t unsigned32;
-
-union doubleword {
- double d;
- unsigned32 u[2];
-};
-
-#ifdef IEEE_8087
-#define HIWORD 1
-#define LOWORD 0
-#define TEST_ENDIANNESS /* nothing */
-#else
-#if defined(IEEE_MC68k)
-#define HIWORD 0
-#define LOWORD 1
-#define TEST_ENDIANNESS /* nothing */
-#else
-static int HIWORD = -1, LOWORD;
-static void test_endianness()
-{
- union doubleword dw;
- dw.d = 10;
- if (dw.u[0] != 0) /* big-endian */
- HIWORD=0, LOWORD=1;
- else
- HIWORD=1, LOWORD=0;
-}
-#define TEST_ENDIANNESS if (HIWORD<0) test_endianness();
-#endif
-#endif
-
-#if 0
-union doubleword _temp;
-#endif
-#if defined(__GNUC__) && !defined(_DOUBLE_IS_32BITS)
-#define word0(x) ({ union doubleword _du; _du.d = (x); _du.u[HIWORD]; })
-#define word1(x) ({ union doubleword _du; _du.d = (x); _du.u[LOWORD]; })
-#define setword0(D,W) \
- ({ union doubleword _du; _du.d = (D); _du.u[HIWORD]=(W); (D)=_du.d; })
-#define setword1(D,W) \
- ({ union doubleword _du; _du.d = (D); _du.u[LOWORD]=(W); (D)=_du.d; })
-#define setwords(D,W0,W1) ({ union doubleword _du; \
- _du.u[HIWORD]=(W0); _du.u[LOWORD]=(W1); (D)=_du.d; })
-#define addword0(D,W) \
- ({ union doubleword _du; _du.d = (D); _du.u[HIWORD]+=(W); (D)=_du.d; })
-#else
-#define word0(x) ((unsigned32 *)&x)[HIWORD]
-#ifndef _DOUBLE_IS_32BITS
-#define word1(x) ((unsigned32 *)&x)[LOWORD]
-#else
-#define word1(x) 0
-#endif
-#define setword0(D,W) word0(D) = (W)
-#ifndef _DOUBLE_IS_32BITS
-#define setword1(D,W) word1(D) = (W)
-#define setwords(D,W0,W1) (setword0(D,W0),setword1(D,W1))
-#else
-#define setword1(D,W)
-#define setwords(D,W0,W1) (setword0(D,W0))
-#endif
-#define addword0(D,X) (word0(D) += (X))
-#endif
-
-/* The following definition of Storeinc is appropriate for MIPS processors. */
-#if defined(IEEE_8087) + defined(VAX)
-#define Storeinc(a,b,c) (((unsigned short *)a)[1] = (unsigned short)b, \
-((unsigned short *)a)[0] = (unsigned short)c, a++)
-#else
-#if defined(IEEE_MC68k)
-#define Storeinc(a,b,c) (((unsigned short *)a)[0] = (unsigned short)b, \
-((unsigned short *)a)[1] = (unsigned short)c, a++)
-#else
-#define Storeinc(a,b,c) (*a++ = b << 16 | c & 0xffff)
-#endif
-#endif
-
-/* #define P DBL_MANT_DIG */
-/* Ten_pmax = floor(P*log(2)/log(5)) */
-/* Bletch = (highest power of 2 < DBL_MAX_10_EXP) / 16 */
-/* Quick_max = floor((P-1)*log(FLT_RADIX)/log(10) - 1) */
-/* Int_max = floor(P*log(FLT_RADIX)/log(10) - 1) */
-
-#if defined(IEEE_8087) + defined(IEEE_MC68k) + defined(IEEE_Unknown)
-#define Exp_shift 20
-#define Exp_shift1 20
-#define Exp_msk1 0x100000
-#define Exp_msk11 0x100000
-#define Exp_mask 0x7ff00000
-#define P 53
-#define Bias 1023
-#define IEEE_Arith
-#define Emin (-1022)
-#define Exp_1 0x3ff00000
-#define Exp_11 0x3ff00000
-#define Ebits 11
-#define Frac_mask 0xfffff
-#define Frac_mask1 0xfffff
-#define Ten_pmax 22
-#define Bletch 0x10
-#define Bndry_mask 0xfffff
-#define Bndry_mask1 0xfffff
-#define LSB 1
-#define Sign_bit 0x80000000
-#define Log2P 1
-#define Tiny0 0
-#define Tiny1 1
-#define Quick_max 14
-#define Int_max 14
-#define Infinite(x) (word0(x) == 0x7ff00000) /* sufficient test for here */
-#else
-#undef Sudden_Underflow
-#define Sudden_Underflow
-#ifdef IBM
-#define Exp_shift 24
-#define Exp_shift1 24
-#define Exp_msk1 0x1000000
-#define Exp_msk11 0x1000000
-#define Exp_mask 0x7f000000
-#define P 14
-#define Bias 65
-#define Exp_1 0x41000000
-#define Exp_11 0x41000000
-#define Ebits 8 /* exponent has 7 bits, but 8 is the right value in b2d */
-#define Frac_mask 0xffffff
-#define Frac_mask1 0xffffff
-#define Bletch 4
-#define Ten_pmax 22
-#define Bndry_mask 0xefffff
-#define Bndry_mask1 0xffffff
-#define LSB 1
-#define Sign_bit 0x80000000
-#define Log2P 4
-#define Tiny0 0x100000
-#define Tiny1 0
-#define Quick_max 14
-#define Int_max 15
-#else /* VAX */
-#define Exp_shift 23
-#define Exp_shift1 7
-#define Exp_msk1 0x80
-#define Exp_msk11 0x800000
-#define Exp_mask 0x7f80
-#define P 56
-#define Bias 129
-#define Exp_1 0x40800000
-#define Exp_11 0x4080
-#define Ebits 8
-#define Frac_mask 0x7fffff
-#define Frac_mask1 0xffff007f
-#define Ten_pmax 24
-#define Bletch 2
-#define Bndry_mask 0xffff007f
-#define Bndry_mask1 0xffff007f
-#define LSB 0x10000
-#define Sign_bit 0x8000
-#define Log2P 1
-#define Tiny0 0x80
-#define Tiny1 0
-#define Quick_max 15
-#define Int_max 15
-#endif
-#endif
-
-#ifndef IEEE_Arith
-#define ROUND_BIASED
-#endif
-
-#ifdef RND_PRODQUOT
-#define rounded_product(a,b) a = rnd_prod(a, b)
-#define rounded_quotient(a,b) a = rnd_quot(a, b)
-extern double rnd_prod(double, double), rnd_quot(double, double);
-#else
-#define rounded_product(a,b) a *= b
-#define rounded_quotient(a,b) a /= b
-#endif
-
-#define Big0 (Frac_mask1 | Exp_msk1*(DBL_MAX_EXP+Bias-1))
-#define Big1 0xffffffff
-
-#define Kmax 15
-
-/* (1<<BIGINT_MINIMUM_K) is the minimum number of words to allocate
- in a Bigint. dtoa usually manages with 1<<2, and has not been
- known to need more than 1<<3. */
-
-#define BIGINT_MINIMUM_K 3
-
-struct Bigint {
- struct Bigint *next;
- int k; /* Parameter given to Balloc(k) */
- int maxwds; /* Allocated space: equals 1<<k. */
- short on_stack; /* 1 if stack-allocated. */
- short sign; /* 0 if value is positive or zero; 1 if negative. */
- int wds; /* Current length. */
- unsigned32 x[1<<BIGINT_MINIMUM_K]; /* Actually: x[maxwds] */
-};
-
-#define BIGINT_HEADER_SIZE \
- (sizeof(Bigint) - (1<<BIGINT_MINIMUM_K) * sizeof(unsigned32))
-
-typedef struct Bigint Bigint;
-
-/* Initialize a stack-allocated Bigint. */
-
-static Bigint *
-Binit
-#ifdef KR_headers
- (v) Bigint *v;
-#else
- (Bigint *v)
-#endif
-{
- v->on_stack = 1;
- v->k = BIGINT_MINIMUM_K;
- v->maxwds = 1 << BIGINT_MINIMUM_K;
- v->sign = v->wds = 0;
- return v;
-}
-
-/* Allocate a Bigint with '1<<k' big digits. */
-
-static Bigint *
-Balloc
-#ifdef KR_headers
- (k) int k;
-#else
- (int k)
-#endif
-{
- int x;
- Bigint *rv;
-
- if (k < BIGINT_MINIMUM_K)
- k = BIGINT_MINIMUM_K;
-
- x = 1 << k;
- rv = (Bigint *)
- malloc(BIGINT_HEADER_SIZE + x * sizeof(unsigned32));
- rv->k = k;
- rv->maxwds = x;
- rv->sign = rv->wds = 0;
- rv->on_stack = 0;
- return rv;
-}
-
-static void
-Bfree
-#ifdef KR_headers
- (v) Bigint *v;
-#else
- (Bigint *v)
-#endif
-{
- if (v && !v->on_stack)
- free (v);
-}
-
-static void
-Bcopy
-#ifdef KR_headers
- (x, y) Bigint *x, *y;
-#else
- (Bigint *x, Bigint *y)
-#endif
-{
- register unsigned32 *xp, *yp;
- register int i = y->wds;
- x->sign = y->sign;
- x->wds = i;
- for (xp = x->x, yp = y->x; --i >= 0; )
- *xp++ = *yp++;
-}
-
-/* Make sure b has room for at least 1<<k big digits. */
-
-static Bigint *
-Brealloc
-#ifdef KR_headers
- (b, k) Bigint *b; int k;
-#else
- (Bigint * b, int k)
-#endif
-{
- if (b == NULL)
- return Balloc(k);
- if (b->k >= k)
- return b;
- else
- {
- Bigint *rv = Balloc (k);
- Bcopy(rv, b);
- Bfree(b);
- return rv;
- }
-}
-
-/* Return b*m+a. b is modified.
- Assumption: 0xFFFF*m+a fits in 32 bits. */
-
-static Bigint *
-multadd
-#ifdef KR_headers
- (b, m, a) Bigint *b; int m, a;
-#else
- (Bigint *b, int m, int a)
-#endif
-{
- int i, wds;
- unsigned32 *x, y;
- unsigned32 xi, z;
-
- wds = b->wds;
- x = b->x;
- i = 0;
- do {
- xi = *x;
- y = (xi & 0xffff) * m + a;
- z = (xi >> 16) * m + (y >> 16);
- a = (int)(z >> 16);
- *x++ = (z << 16) + (y & 0xffff);
- }
- while(++i < wds);
- if (a) {
- if (wds >= b->maxwds)
- b = Brealloc(b, b->k+1);
- b->x[wds++] = a;
- b->wds = wds;
- }
- return b;
- }
-
-static Bigint *
-s2b
-#ifdef KR_headers
- (result, s, nd0, nd, y9)
- Bigint *result; CONST char *s; int nd0, nd; unsigned32 y9;
-#else
- (Bigint *result, CONST char *s, int nd0, int nd, unsigned32 y9)
-#endif
-{
- int i, k;
- _G_int32_t x, y;
-
- x = (nd + 8) / 9;
- for(k = 0, y = 1; x > y; y <<= 1, k++) ;
- result = Brealloc(result, k);
- result->x[0] = y9;
- result->wds = 1;
-
- i = 9;
- if (9 < nd0)
- {
- s += 9;
- do
- result = multadd(result, 10, *s++ - '0');
- while (++i < nd0);
- s++;
- }
- else
- s += 10;
- for(; i < nd; i++)
- result = multadd(result, 10, *s++ - '0');
- return result;
-}
-
-static int
-hi0bits
-#ifdef KR_headers
- (x) register unsigned32 x;
-#else
- (register unsigned32 x)
-#endif
-{
- register int k = 0;
-
- if (!(x & 0xffff0000)) {
- k = 16;
- x <<= 16;
- }
- if (!(x & 0xff000000)) {
- k += 8;
- x <<= 8;
- }
- if (!(x & 0xf0000000)) {
- k += 4;
- x <<= 4;
- }
- if (!(x & 0xc0000000)) {
- k += 2;
- x <<= 2;
- }
- if (!(x & 0x80000000)) {
- k++;
- if (!(x & 0x40000000))
- return 32;
- }
- return k;
- }
-
-static int
-lo0bits
-#ifdef KR_headers
- (y) unsigned32 *y;
-#else
- (unsigned32 *y)
-#endif
-{
- register int k;
- register unsigned32 x = *y;
-
- if (x & 7) {
- if (x & 1)
- return 0;
- if (x & 2) {
- *y = x >> 1;
- return 1;
- }
- *y = x >> 2;
- return 2;
- }
- k = 0;
- if (!(x & 0xffff)) {
- k = 16;
- x >>= 16;
- }
- if (!(x & 0xff)) {
- k += 8;
- x >>= 8;
- }
- if (!(x & 0xf)) {
- k += 4;
- x >>= 4;
- }
- if (!(x & 0x3)) {
- k += 2;
- x >>= 2;
- }
- if (!(x & 1)) {
- k++;
- x >>= 1;
- if (!x & 1)
- return 32;
- }
- *y = x;
- return k;
- }
-
-static Bigint *
-i2b
-#ifdef KR_headers
- (result, i) Bigint *result; int i;
-#else
- (Bigint* result, int i)
-#endif
-{
- result = Brealloc(result, 1);
- result->x[0] = i;
- result->wds = 1;
- return result;
-}
-
-/* Do: c = a * b. */
-
-static Bigint *
-mult
-#ifdef KR_headers
- (c, a, b) Bigint *a, *b, *c;
-#else
- (Bigint *c, Bigint *a, Bigint *b)
-#endif
-{
- int k, wa, wb, wc;
- unsigned32 carry, y, z;
- unsigned32 *x, *xa, *xae, *xb, *xbe, *xc, *xc0;
- unsigned32 z2;
- if (a->wds < b->wds) {
- Bigint *tmp = a;
- a = b;
- b = tmp;
- }
- k = a->k;
- wa = a->wds;
- wb = b->wds;
- wc = wa + wb;
- if (wc > a->maxwds)
- k++;
- c = Brealloc(c, k);
- for(x = c->x, xa = x + wc; x < xa; x++)
- *x = 0;
- xa = a->x;
- xae = xa + wa;
- xb = b->x;
- xbe = xb + wb;
- xc0 = c->x;
- for(; xb < xbe; xb++, xc0++) {
- if ((y = *xb & 0xffff)) {
- x = xa;
- xc = xc0;
- carry = 0;
- do {
- z = (*x & 0xffff) * y + (*xc & 0xffff) + carry;
- carry = z >> 16;
- z2 = (*x++ >> 16) * y + (*xc >> 16) + carry;
- carry = z2 >> 16;
- Storeinc(xc, z2, z);
- }
- while(x < xae);
- *xc = carry;
- }
- if ((y = *xb >> 16)) {
- x = xa;
- xc = xc0;
- carry = 0;
- z2 = *xc;
- do {
- z = (*x & 0xffff) * y + (*xc >> 16) + carry;
- carry = z >> 16;
- Storeinc(xc, z, z2);
- z2 = (*x++ >> 16) * y + (*xc & 0xffff) + carry;
- carry = z2 >> 16;
- }
- while(x < xae);
- *xc = z2;
- }
- }
- for(xc0 = c->x, xc = xc0 + wc; wc > 0 && !*--xc; --wc) ;
- c->wds = wc;
- return c;
- }
-
-/* Returns b*(5**k). b is modified. */
-/* Re-written by Per Bothner to not need a static list. */
-
-static Bigint *
-pow5mult
-#ifdef KR_headers
- (b, k) Bigint *b; int k;
-#else
- (Bigint *b, int k)
-#endif
-{
- static int p05[6] = { 5, 25, 125, 625, 3125, 15625 };
-
- for (; k > 6; k -= 6)
- b = multadd(b, 15625, 0); /* b *= 5**6 */
- if (k == 0)
- return b;
- else
- return multadd(b, p05[k-1], 0);
-}
-
-/* Re-written by Per Bothner so shift can be in place. */
-
-static Bigint *
-lshift
-#ifdef KR_headers
- (b, k) Bigint *b; int k;
-#else
- (Bigint *b, int k)
-#endif
-{
- int i;
- unsigned32 *x, *x1, *xe;
- int old_wds = b->wds;
- int n = k >> 5;
- int k1 = b->k;
- int n1 = n + old_wds + 1;
-
- if (k == 0)
- return b;
-
- for(i = b->maxwds; n1 > i; i <<= 1)
- k1++;
- b = Brealloc(b, k1);
-
- xe = b->x; /* Source limit */
- x = xe + old_wds; /* Source pointer */
- x1 = x + n; /* Destination pointer */
- if (k &= 0x1f) {
- int k1 = 32 - k;
- unsigned32 z = *--x;
- if ((*x1 = (z >> k1)) != 0) {
- ++n1;
- }
- while (x > xe) {
- unsigned32 w = *--x;
- *--x1 = (z << k) | (w >> k1);
- z = w;
- }
- *--x1 = z << k;
- }
- else
- do {
- *--x1 = *--x;
- } while(x > xe);
- while (x1 > xe)
- *--x1 = 0;
- b->wds = n1 - 1;
- return b;
-}
-
-static int
-cmp
-#ifdef KR_headers
- (a, b) Bigint *a, *b;
-#else
- (Bigint *a, Bigint *b)
-#endif
-{
- unsigned32 *xa, *xa0, *xb, *xb0;
- int i, j;
-
- i = a->wds;
- j = b->wds;
-#ifdef DEBUG
- if (i > 1 && !a->x[i-1])
- Bug("cmp called with a->x[a->wds-1] == 0");
- if (j > 1 && !b->x[j-1])
- Bug("cmp called with b->x[b->wds-1] == 0");
-#endif
- if (i -= j)
- return i;
- xa0 = a->x;
- xa = xa0 + j;
- xb0 = b->x;
- xb = xb0 + j;
- for(;;) {
- if (*--xa != *--xb)
- return *xa < *xb ? -1 : 1;
- if (xa <= xa0)
- break;
- }
- return 0;
- }
-
-/* Do: c = a-b. */
-
-static Bigint *
-diff
-#ifdef KR_headers
- (c, a, b) Bigint *c, *a, *b;
-#else
- (Bigint *c, Bigint *a, Bigint *b)
-#endif
-{
- int i, wa, wb;
- _G_int32_t borrow, y; /* We need signed shifts here. */
- unsigned32 *xa, *xae, *xb, *xbe, *xc;
- _G_int32_t z;
-
- i = cmp(a,b);
- if (!i) {
- c = Brealloc(c, 0);
- c->wds = 1;
- c->x[0] = 0;
- return c;
- }
- if (i < 0) {
- Bigint *tmp = a;
- a = b;
- b = tmp;
- i = 1;
- }
- else
- i = 0;
- c = Brealloc(c, a->k);
- c->sign = i;
- wa = a->wds;
- xa = a->x;
- xae = xa + wa;
- wb = b->wds;
- xb = b->x;
- xbe = xb + wb;
- xc = c->x;
- borrow = 0;
- do {
- y = (*xa & 0xffff) - (*xb & 0xffff) + borrow;
- borrow = y >> 16;
- Sign_Extend(borrow, y);
- z = (*xa++ >> 16) - (*xb++ >> 16) + borrow;
- borrow = z >> 16;
- Sign_Extend(borrow, z);
- Storeinc(xc, z, y);
- }
- while(xb < xbe);
- while(xa < xae) {
- y = (*xa & 0xffff) + borrow;
- borrow = y >> 16;
- Sign_Extend(borrow, y);
- z = (*xa++ >> 16) + borrow;
- borrow = z >> 16;
- Sign_Extend(borrow, z);
- Storeinc(xc, z, y);
- }
- while(!*--xc)
- wa--;
- c->wds = wa;
- return c;
- }
-
-static double
-ulp
-#ifdef KR_headers
- (x) double x;
-#else
- (double x)
-#endif
-{
- register _G_int32_t L;
- double a;
-
- L = (word0(x) & Exp_mask) - (P-1)*Exp_msk1;
-#ifndef Sudden_Underflow
- if (L > 0) {
-#endif
-#ifdef IBM
- L |= Exp_msk1 >> 4;
-#endif
- setwords(a, L, 0);
-#ifndef Sudden_Underflow
- }
- else {
- L = -L >> Exp_shift;
- if (L < Exp_shift)
- setwords(a, 0x80000 >> L, 0);
- else {
- L -= Exp_shift;
- setwords(a, 0, L >= 31 ? 1 : 1 << (31 - L));
- }
- }
-#endif
- return a;
- }
-
-static double
-b2d
-#ifdef KR_headers
- (a, e) Bigint *a; int *e;
-#else
- (Bigint *a, int *e)
-#endif
-{
- unsigned32 *xa, *xa0, w, y, z;
- int k;
- double d;
- unsigned32 d0, d1;
-
- xa0 = a->x;
- xa = xa0 + a->wds;
- y = *--xa;
-#ifdef DEBUG
- if (!y) Bug("zero y in b2d");
-#endif
- k = hi0bits(y);
- *e = 32 - k;
- if (k < Ebits) {
- d0 = Exp_1 | y >> (Ebits - k);
- w = xa > xa0 ? *--xa : 0;
-#ifndef _DOUBLE_IS_32BITS
- d1 = y << ((32-Ebits) + k) | w >> (Ebits - k);
-#endif
- goto ret_d;
- }
- z = xa > xa0 ? *--xa : 0;
- if (k -= Ebits) {
- d0 = Exp_1 | y << k | z >> (32 - k);
- y = xa > xa0 ? *--xa : 0;
-#ifndef _DOUBLE_IS_32BITS
- d1 = z << k | y >> (32 - k);
-#endif
- }
- else {
- d0 = Exp_1 | y;
-#ifndef _DOUBLE_IS_32BITS
- d1 = z;
-#endif
- }
- ret_d:
-#ifdef VAX
- setwords(d, d0 >> 16 | d0 << 16, d1 >> 16 | d1 << 16);
-#else
- setwords (d, d0, d1);
-#endif
- return d;
- }
-
-static Bigint *
-d2b
-#ifdef KR_headers
- (result, d, e, bits) Bigint *result; double d; _G_int32_t *e, *bits;
-#else
- (Bigint *result, double d, _G_int32_t *e, _G_int32_t *bits)
-#endif
-{
- int de, i, k;
- unsigned32 *x, y, z;
- unsigned32 d0, d1;
-#ifdef VAX
- d0 = word0(d) >> 16 | word0(d) << 16;
- d1 = word1(d) >> 16 | word1(d) << 16;
-#else
- d0 = word0(d);
- d1 = word1(d);
-#endif
-
- result = Brealloc(result, 1);
- x = result->x;
-
- z = d0 & Frac_mask;
- d0 &= 0x7fffffff; /* clear sign bit, which we ignore */
-
- de = (int)(d0 >> Exp_shift); /* The exponent part of d. */
-
- /* Put back the suppressed high-order bit, if normalized. */
-#ifndef IBM
-#ifndef Sudden_Underflow
- if (de)
-#endif
- z |= Exp_msk11;
-#endif
-
-#ifndef _DOUBLE_IS_32BITS
- if ((y = d1)) {
- if ((k = lo0bits(&y))) {
- x[0] = y | z << (32 - k);
- z >>= k;
- }
- else
- x[0] = y;
- i = result->wds = (x[1] = z) ? 2 : 1;
- }
- else {
-#endif /* !_DOUBLE_IS_32BITS */
-#ifdef DEBUG
- if (!z)
- Bug("Zero passed to d2b");
-#endif
- k = lo0bits(&z);
- x[0] = z;
- i = result->wds = 1;
-#ifndef _DOUBLE_IS_32BITS
- k += 32;
- }
-#endif
-#ifndef Sudden_Underflow
- if (de) {
-#endif
-#ifdef IBM
- *e = (de - Bias - (P-1) << 2) + k;
- *bits = 4*P + 8 - k - hi0bits(word0(d) & Frac_mask);
-#else
- *e = de - Bias - (P-1) + k;
- *bits = P - k;
-#endif
-#ifndef Sudden_Underflow
- }
- else {
- *e = de - Bias - (P-1) + 1 + k;
- *bits = 32*i - hi0bits(x[i-1]);
- }
-#endif
- return result;
- }
-
-static double
-ratio
-#ifdef KR_headers
- (a, b) Bigint *a, *b;
-#else
- (Bigint *a, Bigint *b)
-#endif
-{
- double da, db;
- int k, ka, kb;
-
- da = b2d(a, &ka);
- db = b2d(b, &kb);
- k = ka - kb + 32*(a->wds - b->wds);
-#ifdef IBM
- if (k > 0) {
- addword0(da, (k >> 2)*Exp_msk1);
- if (k &= 3)
- da *= 1 << k;
- }
- else {
- k = -k;
- addword0(db,(k >> 2)*Exp_msk1);
- if (k &= 3)
- db *= 1 << k;
- }
-#else
- if (k > 0)
- addword0(da, k*Exp_msk1);
- else {
- k = -k;
- addword0(db, k*Exp_msk1);
- }
-#endif
- return da / db;
- }
-
-static CONST double
-tens[] = {
- 1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9,
- 1e10, 1e11, 1e12, 1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19,
- 1e20, 1e21, 1e22
-#ifdef VAX
- , 1e23, 1e24
-#endif
- };
-
-#ifdef IEEE_Arith
-static CONST double bigtens[] = { 1e16, 1e32, 1e64, 1e128, 1e256 };
-static CONST double tinytens[] = { 1e-16, 1e-32, 1e-64, 1e-128, 1e-256 };
-#define n_bigtens 5
-#else
-#ifdef IBM
-static CONST double bigtens[] = { 1e16, 1e32, 1e64 };
-static CONST double tinytens[] = { 1e-16, 1e-32, 1e-64 };
-#define n_bigtens 3
-#else
-/* Also used for the case when !_DOUBLE_IS_32BITS. */
-static CONST double bigtens[] = { 1e16, 1e32 };
-static CONST double tinytens[] = { 1e-16, 1e-32 };
-#define n_bigtens 2
-#endif
-#endif
-
- double
-_IO_strtod
-#ifdef KR_headers
- (s00, se) CONST char *s00; char **se;
-#else
- (CONST char *s00, char **se)
-#endif
-{
- _G_int32_t bb2, bb5, bbe, bd2, bd5, bbbits, bs2, c, dsign,
- e, e1, esign, i, j, k, nd, nd0, nf, nz, nz0, sign;
- CONST char *s, *s0, *s1;
- double aadj, aadj1, adj, rv, rv0;
- _G_int32_t L;
- unsigned32 y, z;
- Bigint _bb, _b_avail, _bd, _bd0, _bs, _delta;
- Bigint *bb = Binit(&_bb);
- Bigint *bd = Binit(&_bd);
- Bigint *bd0 = Binit(&_bd0);
- Bigint *bs = Binit(&_bs);
- Bigint *b_avail = Binit(&_b_avail);
- Bigint *delta = Binit(&_delta);
-
- TEST_ENDIANNESS;
- sign = nz0 = nz = 0;
- rv = 0.;
- (void)&rv; /* Force rv into the stack */
- for(s = s00;;s++) switch(*s) {
- case '-':
- sign = 1;
- /* no break */
- case '+':
- if (*++s)
- goto break2;
- /* no break */
- case 0:
- /* "+" and "-" should be reported as an error? */
- sign = 0;
- s = s00;
- goto ret;
- case '\t':
- case '\n':
- case '\v':
- case '\f':
- case '\r':
- case ' ':
- continue;
- default:
- goto break2;
- }
- break2:
- if (*s == '0') {
- nz0 = 1;
- while(*++s == '0') ;
- if (!*s)
- goto ret;
- }
- s0 = s;
- y = z = 0;
- for(nd = nf = 0; (c = *s) >= '0' && c <= '9'; nd++, s++)
- if (nd < 9)
- y = 10*y + c - '0';
- else if (nd < 16)
- z = 10*z + c - '0';
- nd0 = nd;
- if (c == '.') {
- c = *++s;
- if (!nd) {
- for(; c == '0'; c = *++s)
- nz++;
- if (c > '0' && c <= '9') {
- s0 = s;
- nf += nz;
- nz = 0;
- goto have_dig;
- }
- goto dig_done;
- }
- for(; c >= '0' && c <= '9'; c = *++s) {
- have_dig:
- nz++;
- if (c -= '0') {
- nf += nz;
- for(i = 1; i < nz; i++)
- if (nd++ < 9)
- y *= 10;
- else if (nd <= DBL_DIG + 1)
- z *= 10;
- if (nd++ < 9)
- y = 10*y + c;
- else if (nd <= DBL_DIG + 1)
- z = 10*z + c;
- nz = 0;
- }
- }
- }
- dig_done:
- e = 0;
- if (c == 'e' || c == 'E') {
- if (!nd && !nz && !nz0) {
- s = s00;
- goto ret;
- }
- s00 = s;
- esign = 0;
- switch(c = *++s) {
- case '-':
- esign = 1;
- case '+':
- c = *++s;
- }
- if (c >= '0' && c <= '9') {
- while(c == '0')
- c = *++s;
- if (c > '0' && c <= '9') {
- e = c - '0';
- s1 = s;
- while((c = *++s) >= '0' && c <= '9')
- e = 10*e + c - '0';
- if (s - s1 > 8)
- /* Avoid confusion from exponents
- * so large that e might overflow.
- */
- e = 9999999;
- if (esign)
- e = -e;
- }
- else
- e = 0;
- }
- else
- s = s00;
- }
- if (!nd) {
- if (!nz && !nz0)
- s = s00;
- goto ret;
- }
- e1 = e -= nf;
-
- /* Now we have nd0 digits, starting at s0, followed by a
- * decimal point, followed by nd-nd0 digits. The number we're
- * after is the integer represented by those digits times
- * 10**e */
-
- if (!nd0)
- nd0 = nd;
- k = nd < DBL_DIG + 1 ? nd : DBL_DIG + 1;
- rv = y;
- if (k > 9)
- rv = tens[k - 9] * rv + z;
- if (nd <= DBL_DIG
-#ifndef RND_PRODQUOT
- && FLT_ROUNDS == 1
-#endif
- ) {
- if (!e)
- goto ret;
- if (e > 0) {
- if (e <= Ten_pmax) {
-#ifdef VAX
- goto vax_ovfl_check;
-#else
- /* rv = */ rounded_product(rv, tens[e]);
- goto ret;
-#endif
- }
- i = DBL_DIG - nd;
- if (e <= Ten_pmax + i) {
- /* A fancier test would sometimes let us do
- * this for larger i values.
- */
- e -= i;
- rv *= tens[i];
-#ifdef VAX
- /* VAX exponent range is so narrow we must
- * worry about overflow here...
- */
- vax_ovfl_check:
- addword0(rv, - P*Exp_msk1);
- /* rv = */ rounded_product(rv, tens[e]);
- if ((word0(rv) & Exp_mask)
- > Exp_msk1*(DBL_MAX_EXP+Bias-1-P))
- goto ovfl;
- addword0(rv, P*Exp_msk1);
-#else
- /* rv = */ rounded_product(rv, tens[e]);
-#endif
- goto ret;
- }
- }
-#ifndef Inaccurate_Divide
- else if (e >= -Ten_pmax) {
- /* rv = */ rounded_quotient(rv, tens[-e]);
- goto ret;
- }
-#endif
- }
- e1 += nd - k;
-
- /* Get starting approximation = rv * 10**e1 */
-
- if (e1 > 0) {
- if ((i = e1 & 15))
- rv *= tens[i];
- if (e1 &= ~15) {
- if (e1 > DBL_MAX_10_EXP) {
- ovfl:
- errno = ERANGE;
-#if defined(sun) && !defined(__svr4__)
-/* SunOS defines HUGE_VAL as __infinity(), which is in libm. */
-#undef HUGE_VAL
-#endif
-#ifndef HUGE_VAL
-#define HUGE_VAL 1.7976931348623157E+308
-#endif
- rv = HUGE_VAL;
- goto ret;
- }
- if (e1 >>= 4) {
- for(j = 0; e1 > 1; j++, e1 >>= 1)
- if (e1 & 1)
- rv *= bigtens[j];
- /* The last multiplication could overflow. */
- addword0(rv, -P*Exp_msk1);
- rv *= bigtens[j];
- if ((z = word0(rv) & Exp_mask)
- > Exp_msk1*(DBL_MAX_EXP+Bias-P))
- goto ovfl;
- if (z > Exp_msk1*(DBL_MAX_EXP+Bias-1-P)) {
- /* set to largest number */
- /* (Can't trust DBL_MAX) */
- setwords(rv, Big0, Big1);
- }
- else
- addword0(rv, P*Exp_msk1);
- }
-
- }
- }
- else if (e1 < 0) {
- e1 = -e1;
- if ((i = e1 & 15))
- rv /= tens[i];
- if (e1 &= ~15) {
- e1 >>= 4;
- for(j = 0; e1 > 1; j++, e1 >>= 1)
- if (e1 & 1)
- rv *= tinytens[j];
- /* The last multiplication could underflow. */
- rv0 = rv;
- rv *= tinytens[j];
- if (!rv) {
- rv = 2.*rv0;
- rv *= tinytens[j];
- if (!rv) {
- undfl:
- rv = 0.;
- errno = ERANGE;
- goto ret;
- }
- setwords(rv, Tiny0, Tiny1);
- /* The refinement below will clean
- * this approximation up.
- */
- }
- }
- }
-
- /* Now the hard part -- adjusting rv to the correct value.*/
-
- /* Put digits into bd: true value = bd * 10^e */
-
- bd0 = s2b(bd0, s0, nd0, nd, y);
- bd = Brealloc(bd, bd0->k);
-
- for(;;) {
- Bcopy(bd, bd0);
- bb = d2b(bb, rv, &bbe, &bbbits); /* rv = bb * 2^bbe */
- bs = i2b(bs, 1);
-
- if (e >= 0) {
- bb2 = bb5 = 0;
- bd2 = bd5 = e;
- }
- else {
- bb2 = bb5 = -e;
- bd2 = bd5 = 0;
- }
- if (bbe >= 0)
- bb2 += bbe;
- else
- bd2 -= bbe;
- bs2 = bb2;
-#ifdef Sudden_Underflow
-#ifdef IBM
- j = 1 + 4*P - 3 - bbbits + ((bbe + bbbits - 1) & 3);
-#else
- j = P + 1 - bbbits;
-#endif
-#else
- i = bbe + bbbits - 1; /* logb(rv) */
- if (i < Emin) /* denormal */
- j = bbe + (P-Emin);
- else
- j = P + 1 - bbbits;
-#endif
- bb2 += j;
- bd2 += j;
- i = bb2 < bd2 ? bb2 : bd2;
- if (i > bs2)
- i = bs2;
- if (i > 0) {
- bb2 -= i;
- bd2 -= i;
- bs2 -= i;
- }
- if (bb5 > 0) {
- Bigint *b_tmp;
- bs = pow5mult(bs, bb5);
- b_tmp = mult(b_avail, bs, bb);
- b_avail = bb;
- bb = b_tmp;
- }
- if (bb2 > 0)
- bb = lshift(bb, bb2);
- if (bd5 > 0)
- bd = pow5mult(bd, bd5);
- if (bd2 > 0)
- bd = lshift(bd, bd2);
- if (bs2 > 0)
- bs = lshift(bs, bs2);
- delta = diff(delta, bb, bd);
- dsign = delta->sign;
- delta->sign = 0;
- i = cmp(delta, bs);
- if (i < 0) {
- /* Error is less than half an ulp -- check for
- * special case of mantissa a power of two.
- */
- if (dsign || word1(rv) || word0(rv) & Bndry_mask)
- break;
- delta = lshift(delta,Log2P);
- if (cmp(delta, bs) > 0)
- goto drop_down;
- break;
- }
- if (i == 0) {
- /* exactly half-way between */
- if (dsign) {
- if ((word0(rv) & Bndry_mask1) == Bndry_mask1
- && word1(rv) == 0xffffffff) {
- /*boundary case -- increment exponent*/
- setword0(rv, (word0(rv) & Exp_mask)
- + Exp_msk1);
-#ifdef IBM
- setword0 (rv,
- word0(rv) | (Exp_msk1 >> 4));
-#endif
- setword1(rv, 0);
- break;
- }
- }
- else if (!(word0(rv) & Bndry_mask) && !word1(rv)) {
- drop_down:
- /* boundary case -- decrement exponent */
-#ifdef Sudden_Underflow
- L = word0(rv) & Exp_mask;
-#ifdef IBM
- if (L < Exp_msk1)
-#else
- if (L <= Exp_msk1)
-#endif
- goto undfl;
- L -= Exp_msk1;
-#else
- L = (word0(rv) & Exp_mask) - Exp_msk1;
-#endif
- setwords(rv, L | Bndry_mask1, 0xffffffff);
-#ifdef IBM
- continue;
-#else
- break;
-#endif
- }
-#ifndef ROUND_BIASED
- if (!(word1(rv) & LSB))
- break;
-#endif
- if (dsign)
- rv += ulp(rv);
-#ifndef ROUND_BIASED
- else {
- rv -= ulp(rv);
-#ifndef Sudden_Underflow
- if (!rv)
- goto undfl;
-#endif
- }
-#endif
- break;
- }
- if ((aadj = ratio(delta, bs)) <= 2.) {
- if (dsign)
- aadj = aadj1 = 1.;
- else if (word1(rv) || word0(rv) & Bndry_mask) {
-#ifndef Sudden_Underflow
- if (word1(rv) == Tiny1 && !word0(rv))
- goto undfl;
-#endif
- aadj = 1.;
- aadj1 = -1.;
- }
- else {
- /* special case -- power of FLT_RADIX to be */
- /* rounded down... */
-
- if (aadj < 2./FLT_RADIX)
- aadj = 1./FLT_RADIX;
- else
- aadj *= 0.5;
- aadj1 = -aadj;
- }
- }
- else {
- aadj *= 0.5;
- aadj1 = dsign ? aadj : -aadj;
-#ifdef Check_FLT_ROUNDS
- switch(FLT_ROUNDS) {
- case 2: /* towards +infinity */
- aadj1 -= 0.5;
- break;
- case 0: /* towards 0 */
- case 3: /* towards -infinity */
- aadj1 += 0.5;
- }
-#else
- if (FLT_ROUNDS == 0)
- aadj1 += 0.5;
-#endif
- }
- y = word0(rv) & Exp_mask;
-
- /* Check for overflow */
-
- if (y == Exp_msk1*(DBL_MAX_EXP+Bias-1)) {
- rv0 = rv;
- addword0(rv, - P*Exp_msk1);
- adj = aadj1 * ulp(rv);
- rv += adj;
- if ((word0(rv) & Exp_mask) >=
- Exp_msk1*(DBL_MAX_EXP+Bias-P)) {
- if (word0(rv0) == Big0 && word1(rv0) == Big1)
- goto ovfl;
- setwords(rv, Big0, Big1);
- continue;
- }
- else
- addword0(rv, P*Exp_msk1);
- }
- else {
-#ifdef Sudden_Underflow
- if ((word0(rv) & Exp_mask) <= P*Exp_msk1) {
- rv0 = rv;
- addword0(rv, P*Exp_msk1);
- adj = aadj1 * ulp(rv);
- rv += adj;
-#ifdef IBM
- if ((word0(rv) & Exp_mask) < P*Exp_msk1)
-#else
- if ((word0(rv) & Exp_mask) <= P*Exp_msk1)
-#endif
- {
- if (word0(rv0) == Tiny0
- && word1(rv0) == Tiny1)
- goto undfl;
- setwords(rv, Tiny0, Tiny1);
- continue;
- }
- else
- addword0(rv, -P*Exp_msk1);
- }
- else {
- adj = aadj1 * ulp(rv);
- rv += adj;
- }
-#else
- /* Compute adj so that the IEEE rounding rules will
- * correctly round rv + adj in some half-way cases.
- * If rv * ulp(rv) is denormalized (i.e.,
- * y <= (P-1)*Exp_msk1), we must adjust aadj to avoid
- * trouble from bits lost to denormalization;
- * example: 1.2e-307 .
- */
- if (y <= (P-1)*Exp_msk1 && aadj >= 1.) {
- aadj1 = (double)(int)(aadj + 0.5);
- if (!dsign)
- aadj1 = -aadj1;
- }
- adj = aadj1 * ulp(rv);
- rv += adj;
-#endif
- }
- z = word0(rv) & Exp_mask;
- if (y == z) {
- /* Can we stop now? */
- L = (_G_int32_t)aadj;
- aadj -= L;
- /* The tolerances below are conservative. */
- if (dsign || word1(rv) || word0(rv) & Bndry_mask) {
- if (aadj < .4999999 || aadj > .5000001)
- break;
- }
- else if (aadj < .4999999/FLT_RADIX)
- break;
- }
- }
- Bfree(bb);
- Bfree(bd);
- Bfree(bs);
- Bfree(bd0);
- Bfree(delta);
- Bfree(b_avail);
- ret:
- if (se)
- *se = (char *)s;
- return sign ? -rv : rv;
- }
-
-static int
-quorem
-#ifdef KR_headers
- (b, S) Bigint *b, *S;
-#else
- (Bigint *b, Bigint *S)
-#endif
-{
- int n;
- _G_int32_t borrow, y;
- unsigned32 carry, q, ys;
- unsigned32 *bx, *bxe, *sx, *sxe;
- _G_int32_t z;
- unsigned32 si, zs;
-
- n = S->wds;
-#ifdef DEBUG
- /*debug*/ if (b->wds > n)
- /*debug*/ Bug("oversize b in quorem");
-#endif
- if (b->wds < n)
- return 0;
- sx = S->x;
- sxe = sx + --n;
- bx = b->x;
- bxe = bx + n;
- q = *bxe / (*sxe + 1); /* ensure q <= true quotient */
-#ifdef DEBUG
- /*debug*/ if (q > 9)
- /*debug*/ Bug("oversized quotient in quorem");
-#endif
- if (q) {
- borrow = 0;
- carry = 0;
- do {
- si = *sx++;
- ys = (si & 0xffff) * q + carry;
- zs = (si >> 16) * q + (ys >> 16);
- carry = zs >> 16;
- y = (*bx & 0xffff) - (ys & 0xffff) + borrow;
- borrow = y >> 16;
- Sign_Extend(borrow, y);
- z = (*bx >> 16) - (zs & 0xffff) + borrow;
- borrow = z >> 16;
- Sign_Extend(borrow, z);
- Storeinc(bx, z, y);
- }
- while(sx <= sxe);
- if (!*bxe) {
- bx = b->x;
- while(--bxe > bx && !*bxe)
- --n;
- b->wds = n;
- }
- }
- if (cmp(b, S) >= 0) {
- q++;
- borrow = 0;
- carry = 0;
- bx = b->x;
- sx = S->x;
- do {
- si = *sx++;
- ys = (si & 0xffff) + carry;
- zs = (si >> 16) + (ys >> 16);
- carry = zs >> 16;
- y = (*bx & 0xffff) - (ys & 0xffff) + borrow;
- borrow = y >> 16;
- Sign_Extend(borrow, y);
- z = (*bx >> 16) - (zs & 0xffff) + borrow;
- borrow = z >> 16;
- Sign_Extend(borrow, z);
- Storeinc(bx, z, y);
- }
- while(sx <= sxe);
- bx = b->x;
- bxe = bx + n;
- if (!*bxe) {
- while(--bxe > bx && !*bxe)
- --n;
- b->wds = n;
- }
- }
- return q;
- }
-
-/* dtoa for IEEE arithmetic (dmg): convert double to ASCII string.
- *
- * Inspired by "How to Print Floating-Point Numbers Accurately" by
- * Guy L. Steele, Jr. and Jon L. White [Proc. ACM SIGPLAN '90, pp. 92-101].
- *
- * Modifications:
- * 1. Rather than iterating, we use a simple numeric overestimate
- * to determine k = floor(log10(d)). We scale relevant
- * quantities using O(log2(k)) rather than O(k) multiplications.
- * 2. For some modes > 2 (corresponding to ecvt and fcvt), we don't
- * try to generate digits strictly left to right. Instead, we
- * compute with fewer bits and propagate the carry if necessary
- * when rounding the final digit up. This is often faster.
- * 3. Under the assumption that input will be rounded nearest,
- * mode 0 renders 1e23 as 1e23 rather than 9.999999999999999e22.
- * That is, we allow equality in stopping tests when the
- * round-nearest rule will give the same floating-point value
- * as would satisfaction of the stopping test with strict
- * inequality.
- * 4. We remove common factors of powers of 2 from relevant
- * quantities.
- * 5. When converting floating-point integers less than 1e16,
- * we use floating-point arithmetic rather than resorting
- * to multiple-precision integers.
- * 6. When asked to produce fewer than 15 digits, we first try
- * to get by with floating-point arithmetic; we resort to
- * multiple-precision integer arithmetic only if we cannot
- * guarantee that the floating-point calculation has given
- * the correctly rounded result. For k requested digits and
- * "uniformly" distributed input, the probability is
- * something like 10^(k-15) that we must resort to the long
- * calculation.
- */
-
- char *
-_IO_dtoa
-#ifdef KR_headers
- (d, mode, ndigits, decpt, sign, rve)
- double d; int mode, ndigits, *decpt, *sign; char **rve;
-#else
- (double d, int mode, int ndigits, int *decpt, int *sign, char **rve)
-#endif
-{
- /* Arguments ndigits, decpt, sign are similar to those
- of ecvt and fcvt; trailing zeros are suppressed from
- the returned string. If not null, *rve is set to point
- to the end of the return value. If d is +-Infinity or NaN,
- then *decpt is set to 9999.
-
- mode:
- 0 ==> shortest string that yields d when read in
- and rounded to nearest.
- 1 ==> like 0, but with Steele & White stopping rule;
- e.g. with IEEE P754 arithmetic , mode 0 gives
- 1e23 whereas mode 1 gives 9.999999999999999e22.
- 2 ==> max(1,ndigits) significant digits. This gives a
- return value similar to that of ecvt, except
- that trailing zeros are suppressed.
- 3 ==> through ndigits past the decimal point. This
- gives a return value similar to that from fcvt,
- except that trailing zeros are suppressed, and
- ndigits can be negative.
- 4-9 should give the same return values as 2-3, i.e.,
- 4 <= mode <= 9 ==> same return as mode
- 2 + (mode & 1). These modes are mainly for
- debugging; often they run slower but sometimes
- faster than modes 2-3.
- 4,5,8,9 ==> left-to-right digit generation.
- 6-9 ==> don't try fast floating-point estimate
- (if applicable).
-
- Values of mode other than 0-9 are treated as mode 0.
-
- Sufficient space is allocated to the return value
- to hold the suppressed trailing zeros.
- */
-
- _G_int32_t bbits, b2, b5, be, dig, i, ieps, ilim, ilim0, ilim1,
- j, j1, k, k0, k_check, leftright, m2, m5, s2, s5,
- spec_case, try_quick;
- _G_int32_t L;
-#ifndef Sudden_Underflow
- int denorm;
-#endif
- Bigint _b_avail, _b, _mhi, _mlo, _S;
- Bigint *b_avail = Binit(&_b_avail);
- Bigint *b = Binit(&_b);
- Bigint *S = Binit(&_S);
- /* mhi and mlo are only set and used if leftright. */
- Bigint *mhi = NULL, *mlo = NULL;
- double d2, ds, eps;
- char *s, *s0;
- static Bigint *result = NULL;
- static int result_k;
-
- TEST_ENDIANNESS;
- if (result) {
- /* result is contains a string, so its fields (interpreted
- as a Bigint have been trashed. Restore them.
- This is a really ugly interface - result should
- not be static, since that is not thread-safe. FIXME. */
- result->k = result_k;
- result->maxwds = 1 << result_k;
- result->on_stack = 0;
- }
-
- if (word0(d) & Sign_bit) {
- /* set sign for everything, including 0's and NaNs */
- *sign = 1;
- setword0(d, word0(d) & ~Sign_bit); /* clear sign bit */
- }
- else
- *sign = 0;
-
-#if defined(IEEE_Arith) + defined(VAX)
-#ifdef IEEE_Arith
- if ((word0(d) & Exp_mask) == Exp_mask)
-#else
- if (word0(d) == 0x8000)
-#endif
- {
- /* Infinity or NaN */
- *decpt = 9999;
-#ifdef IEEE_Arith
- if (!word1(d) && !(word0(d) & 0xfffff))
- {
- s = "Infinity";
- if (rve)
- *rve = s + 8;
- }
- else
-#endif
- {
- s = "NaN";
- if (rve)
- *rve = s +3;
- }
- return s;
- }
-#endif
-#ifdef IBM
- d += 0; /* normalize */
-#endif
- if (!d) {
- *decpt = 1;
- s = "0";
- if (rve)
- *rve = s + 1;
- return s;
- }
-
- b = d2b(b, d, &be, &bbits);
- i = (int)(word0(d) >> Exp_shift1 & (Exp_mask>>Exp_shift1));
-#ifndef Sudden_Underflow
- if (i) {
-#endif
- d2 = d;
- setword0(d2, (word0(d2) & Frac_mask1) | Exp_11);
-#ifdef IBM
- if (j = 11 - hi0bits(word0(d2) & Frac_mask))
- d2 /= 1 << j;
-#endif
-
- i -= Bias;
-#ifdef IBM
- i <<= 2;
- i += j;
-#endif
-#ifndef Sudden_Underflow
- denorm = 0;
- }
- else {
- /* d is denormalized */
- unsigned32 x;
-
- i = bbits + be + (Bias + (P-1) - 1);
- x = i > 32 ? word0(d) << (64 - i) | word1(d) >> (i - 32)
- : word1(d) << (32 - i);
- d2 = x;
- addword0(d2, - 31*Exp_msk1); /* adjust exponent */
- i -= (Bias + (P-1) - 1) + 1;
- denorm = 1;
- }
-#endif
-
- /* Now i is the unbiased base-2 exponent. */
-
- /* log(x) ~=~ log(1.5) + (x-1.5)/1.5
- * log10(x) = log(x) / log(10)
- * ~=~ log(1.5)/log(10) + (x-1.5)/(1.5*log(10))
- * log10(d) = i*log(2)/log(10) + log10(d2)
- *
- * This suggests computing an approximation k to log10(d) by
- *
- * k = i*0.301029995663981
- * + ( (d2-1.5)*0.289529654602168 + 0.176091259055681 );
- *
- * We want k to be too large rather than too small.
- * The error in the first-order Taylor series approximation
- * is in our favor, so we just round up the constant enough
- * to compensate for any error in the multiplication of
- * (i) by 0.301029995663981; since |i| <= 1077,
- * and 1077 * 0.30103 * 2^-52 ~=~ 7.2e-14,
- * adding 1e-13 to the constant term more than suffices.
- * Hence we adjust the constant term to 0.1760912590558.
- * (We could get a more accurate k by invoking log10,
- * but this is probably not worthwhile.)
- */
-
- ds = (d2-1.5)*0.289529654602168 + 0.1760912590558 + i*0.301029995663981;
- k = (int)ds;
- if (ds < 0. && ds != k)
- k--; /* want k = floor(ds) */
- k_check = 1;
- if (k >= 0 && k <= Ten_pmax) {
- if (d < tens[k])
- k--;
- k_check = 0;
- }
- j = bbits - i - 1;
- if (j >= 0) {
- b2 = 0;
- s2 = j;
- }
- else {
- b2 = -j;
- s2 = 0;
- }
- if (k >= 0) {
- b5 = 0;
- s5 = k;
- s2 += k;
- }
- else {
- b2 -= k;
- b5 = -k;
- s5 = 0;
- }
- if (mode < 0 || mode > 9)
- mode = 0;
- try_quick = 1;
- if (mode > 5) {
- mode -= 4;
- try_quick = 0;
- }
- leftright = 1;
- switch(mode) {
- case 0:
- case 1:
- ilim = ilim1 = -1;
- i = 18;
- ndigits = 0;
- break;
- case 2:
- leftright = 0;
- /* no break */
- case 4:
- if (ndigits <= 0)
- ndigits = 1;
- ilim = ilim1 = i = ndigits;
- break;
- case 3:
- leftright = 0;
- /* no break */
- case 5:
- i = ndigits + k + 1;
- ilim = i;
- ilim1 = i - 1;
- if (i <= 0)
- i = 1;
- }
- /* i is now an upper bound of the number of digits to generate. */
- j = sizeof(unsigned32) * (1<<BIGINT_MINIMUM_K);
- /* The test is <= so as to allow room for the final '\0'. */
- for(result_k = BIGINT_MINIMUM_K; BIGINT_HEADER_SIZE + j <= i;
- j <<= 1) result_k++;
- if (!result || result_k > result->k)
- {
- Bfree (result);
- result = Balloc(result_k);
- }
- s = s0 = (char *)result;
-
- if (ilim >= 0 && ilim <= Quick_max && try_quick) {
-
- /* Try to get by with floating-point arithmetic. */
-
- i = 0;
- d2 = d;
- k0 = k;
- ilim0 = ilim;
- ieps = 2; /* conservative */
- if (k > 0) {
- ds = tens[k&0xf];
- j = k >> 4;
- if (j & Bletch) {
- /* prevent overflows */
- j &= Bletch - 1;
- d /= bigtens[n_bigtens-1];
- ieps++;
- }
- for(; j; j >>= 1, i++)
- if (j & 1) {
- ieps++;
- ds *= bigtens[i];
- }
- d /= ds;
- }
- else if ((j1 = -k)) {
- d *= tens[j1 & 0xf];
- for(j = j1 >> 4; j; j >>= 1, i++)
- if (j & 1) {
- ieps++;
- d *= bigtens[i];
- }
- }
- if (k_check && d < 1. && ilim > 0) {
- if (ilim1 <= 0)
- goto fast_failed;
- ilim = ilim1;
- k--;
- d *= 10.;
- ieps++;
- }
- eps = ieps*d + 7.;
- addword0(eps, - (P-1)*Exp_msk1);
- if (ilim == 0) {
- d -= 5.;
- if (d > eps)
- goto one_digit;
- if (d < -eps)
- goto no_digits;
- goto fast_failed;
- }
-#ifndef No_leftright
- if (leftright) {
- /* Use Steele & White method of only
- * generating digits needed.
- */
- eps = 0.5/tens[ilim-1] - eps;
- for(i = 0;;) {
- L = (_G_int32_t)d;
- d -= L;
- *s++ = '0' + (int)L;
- if (d < eps)
- goto ret1;
- if (1. - d < eps)
- goto bump_up;
- if (++i >= ilim)
- break;
- eps *= 10.;
- d *= 10.;
- }
- }
- else {
-#endif
- /* Generate ilim digits, then fix them up. */
- eps *= tens[ilim-1];
- for(i = 1;; i++, d *= 10.) {
- L = (_G_int32_t)d;
- d -= L;
- *s++ = '0' + (int)L;
- if (i == ilim) {
- if (d > 0.5 + eps)
- goto bump_up;
- else if (d < 0.5 - eps) {
- while(*--s == '0');
- s++;
- goto ret1;
- }
- break;
- }
- }
-#ifndef No_leftright
- }
-#endif
- fast_failed:
- s = s0;
- d = d2;
- k = k0;
- ilim = ilim0;
- }
-
- /* Do we have a "small" integer? */
-
- if (be >= 0 && k <= Int_max) {
- /* Yes. */
- ds = tens[k];
- if (ndigits < 0 && ilim <= 0) {
- if (ilim < 0 || d <= 5*ds)
- goto no_digits;
- goto one_digit;
- }
- for(i = 1;; i++) {
- L = (_G_int32_t)(d / ds);
- d -= L*ds;
-#ifdef Check_FLT_ROUNDS
- /* If FLT_ROUNDS == 2, L will usually be high by 1 */
- if (d < 0) {
- L--;
- d += ds;
- }
-#endif
- *s++ = '0' + (int)L;
- if (i == ilim) {
- d += d;
- if (d > ds || (d == ds && L & 1)) {
- bump_up:
- while(*--s == '9')
- if (s == s0) {
- k++;
- *s = '0';
- break;
- }
- ++*s++;
- }
- break;
- }
- if (!(d *= 10.))
- break;
- }
- goto ret1;
- }
-
- m2 = b2;
- m5 = b5;
- if (leftright) {
- if (mode < 2) {
- i =
-#ifndef Sudden_Underflow
- denorm ? be + (Bias + (P-1) - 1 + 1) :
-#endif
-#ifdef IBM
- 1 + 4*P - 3 - bbits + ((bbits + be - 1) & 3);
-#else
- 1 + P - bbits;
-#endif
- }
- else {
- j = ilim - 1;
- if (m5 >= j)
- m5 -= j;
- else {
- s5 += j -= m5;
- b5 += j;
- m5 = 0;
- }
- if ((i = ilim) < 0) {
- m2 -= i;
- i = 0;
- }
- }
- b2 += i;
- s2 += i;
- mhi = i2b(Binit(&_mhi), 1);
- }
- if (m2 > 0 && s2 > 0) {
- i = m2 < s2 ? m2 : s2;
- b2 -= i;
- m2 -= i;
- s2 -= i;
- }
- if (b5 > 0) {
- if (leftright) {
- if (m5 > 0) {
- Bigint *b_tmp;
- mhi = pow5mult(mhi, m5);
- b_tmp = mult(b_avail, mhi, b);
- b_avail = b;
- b = b_tmp;
- }
- if ((j = b5 - m5))
- b = pow5mult(b, j);
- }
- else
- b = pow5mult(b, b5);
- }
- S = i2b(S, 1);
- if (s5 > 0)
- S = pow5mult(S, s5);
-
- /* Check for special case that d is a normalized power of 2. */
-
- if (mode < 2) {
- if (!word1(d) && !(word0(d) & Bndry_mask)
-#ifndef Sudden_Underflow
- && word0(d) & Exp_mask
-#endif
- ) {
- /* The special case */
- b2 += Log2P;
- s2 += Log2P;
- spec_case = 1;
- }
- else
- spec_case = 0;
- }
-
- /* Arrange for convenient computation of quotients:
- * shift left if necessary so divisor has 4 leading 0 bits.
- *
- * Perhaps we should just compute leading 28 bits of S once
- * and for all and pass them and a shift to quorem, so it
- * can do shifts and ors to compute the numerator for q.
- */
- if ((i = ((s5 ? 32 - hi0bits(S->x[S->wds-1]) : 1) + s2) & 0x1f))
- i = 32 - i;
- if (i > 4) {
- i -= 4;
- b2 += i;
- m2 += i;
- s2 += i;
- }
- else if (i < 4) {
- i += 28;
- b2 += i;
- m2 += i;
- s2 += i;
- }
- if (b2 > 0)
- b = lshift(b, b2);
- if (s2 > 0)
- S = lshift(S, s2);
- if (k_check) {
- if (cmp(b,S) < 0) {
- k--;
- b = multadd(b, 10, 0); /* we botched the k estimate */
- if (leftright)
- mhi = multadd(mhi, 10, 0);
- ilim = ilim1;
- }
- }
- if (ilim <= 0 && mode > 2) {
- if (ilim < 0 || cmp(b,S = multadd(S,5,0)) <= 0) {
- /* no digits, fcvt style */
- no_digits:
- k = -1 - ndigits;
- goto ret;
- }
- one_digit:
- *s++ = '1';
- k++;
- goto ret;
- }
- if (leftright) {
- if (m2 > 0)
- mhi = lshift(mhi, m2);
-
- /* Compute mlo -- check for special case
- * that d is a normalized power of 2.
- */
-
- if (spec_case) {
- mlo = Brealloc(Binit(&_mlo), mhi->k);
- Bcopy(mlo, mhi);
- mhi = lshift(mhi, Log2P);
- }
- else
- mlo = mhi;
-
- for(i = 1;;i++) {
- dig = quorem(b,S) + '0';
- /* Do we yet have the shortest decimal string
- * that will round to d?
- */
- j = cmp(b, mlo);
- b_avail = diff(b_avail, S, mhi); /* b_avail = S - mi */
- j1 = b_avail->sign ? 1 : cmp(b, b_avail);
-#ifndef ROUND_BIASED
- if (j1 == 0 && !mode && !(word1(d) & 1)) {
- if (dig == '9')
- goto round_9_up;
- if (j > 0)
- dig++;
- *s++ = dig;
- goto ret;
- }
-#endif
- if (j < 0 || (j == 0 && !mode
-#ifndef ROUND_BIASED
- && !(word1(d) & 1)
-#endif
- )) {
- if (j1 > 0) {
- b = lshift(b, 1);
- j1 = cmp(b, S);
- if ((j1 > 0 || (j1 == 0 && dig & 1))
- && dig++ == '9')
- goto round_9_up;
- }
- *s++ = dig;
- goto ret;
- }
- if (j1 > 0) {
- if (dig == '9') { /* possible if i == 1 */
- round_9_up:
- *s++ = '9';
- goto roundoff;
- }
- *s++ = dig + 1;
- goto ret;
- }
- *s++ = dig;
- if (i == ilim)
- break;
- b = multadd(b, 10, 0);
- if (mlo == mhi)
- mlo = mhi = multadd(mhi, 10, 0);
- else {
- mlo = multadd(mlo, 10, 0);
- mhi = multadd(mhi, 10, 0);
- }
- }
- }
- else
- for(i = 1;; i++) {
- *s++ = dig = quorem(b,S) + '0';
- if (i >= ilim)
- break;
- b = multadd(b, 10, 0);
- }
-
- /* Round off last digit */
-
- b = lshift(b, 1);
- j = cmp(b, S);
- if (j > 0 || (j == 0 && dig & 1)) {
- roundoff:
- while(*--s == '9')
- if (s == s0) {
- k++;
- *s++ = '1';
- goto ret;
- }
- ++*s++;
- }
- else {
- while(*--s == '0');
- s++;
- }
- ret:
- Bfree(b_avail);
- Bfree(S);
- if (mhi) {
- if (mlo && mlo != mhi)
- Bfree(mlo);
- Bfree(mhi);
- }
- ret1:
- Bfree(b);
- *s = 0;
- *decpt = k + 1;
- if (rve)
- *rve = s;
- return s0;
- }
-#endif /* _IO_USE_DTOA */
diff --git a/contrib/libio/floatio.h b/contrib/libio/floatio.h
deleted file mode 100644
index 827767bde359..000000000000
--- a/contrib/libio/floatio.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-/*
- * Copyright (c) 1990 The Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms are permitted
- * provided that the above copyright notice and this paragraph are
- * duplicated in all such forms and that any documentation,
- * advertising materials, and other materials related to such
- * distribution and use acknowledge that the software was developed
- * by the University of California, Berkeley. The name of the
- * University may not be used to endorse or promote products derived
- * from this software without specific prior written permission.
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- *
- * %W% (Berkeley) %G%
- */
-
-/*
- * Floating point scanf/printf (input/output) definitions.
- */
-
-/* 11-bit exponent (VAX G floating point) is 308 decimal digits */
-#define MAXEXP 308
-/* 128 bit fraction takes up 39 decimal digits; max reasonable precision */
-#define MAXFRACT 39
diff --git a/contrib/libio/fstream.cc b/contrib/libio/fstream.cc
deleted file mode 100644
index 8930e0b9271f..000000000000
--- a/contrib/libio/fstream.cc
+++ /dev/null
@@ -1,110 +0,0 @@
-/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License.
-
-Written by Per Bothner (bothner@cygnus.com). */
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#define _STREAM_COMPAT
-extern "C" {
-#include "libioP.h"
-}
-#include <fstream.h>
-
-inline void
-fstreambase::__fb_init()
-{
-#ifdef _IO_NEW_STREAMS
-#if !_IO_UNIFIED_JUMPTABLES
- /* Uses the _IO_file_jump jumptable, for eficiency. */
- __my_fb._jumps = &_IO_file_jumps;
- __my_fb._vtable() = builtinbuf_vtable;
-#endif
- init (&__my_fb);
-#else
- init(filebuf::__new());
- _flags &= ~ios::dont_close;
-#endif
-}
-
-fstreambase::fstreambase()
-{
- __fb_init ();
-}
-
-fstreambase::fstreambase(int fd)
-{
- __fb_init ();
- _IO_file_attach(rdbuf(), fd);
-}
-
-fstreambase::fstreambase(const char *name, int mode, int prot)
-{
- __fb_init ();
- if (!rdbuf()->open(name, mode, prot))
- set(ios::badbit);
-}
-
-fstreambase::fstreambase(int fd, char *p, int l)
-{
-#ifdef _IO_NEW_STREAMS
- __fb_init ();
-#else
- init(filebuf::__new());
-#endif
- _IO_file_attach(rdbuf(), fd);
- _IO_file_setbuf(rdbuf(), p, l);
-}
-
-void fstreambase::open(const char *name, int mode, int prot)
-{
- clear();
- if (!rdbuf()->open(name, mode, prot))
- set(ios::badbit);
-}
-
-void fstreambase::close()
-{
- if (!rdbuf()->close())
- set(ios::failbit);
-}
-
-void fstreambase::attach(int fd)
-{
- if (!rdbuf()->attach(fd))
- set(ios::failbit);
-}
-
-#if 0
-static int mode_to_sys(enum open_mode mode)
-{
- return O_WRONLY;
-}
-
-static char* fopen_cmd_arg(io_mode i)
-{
- return "w";
-}
-#endif
diff --git a/contrib/libio/fstream.h b/contrib/libio/fstream.h
deleted file mode 100644
index b5f6598538f2..000000000000
--- a/contrib/libio/fstream.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1993, 2000 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#ifndef _FSTREAM_H
-#define _FSTREAM_H
-#ifdef __GNUG__
-#pragma interface
-#endif
-#include <iostream.h>
-
-extern "C++" {
-class fstreambase : virtual public ios {
-#ifdef _IO_NEW_STREAMS
- mutable filebuf __my_fb; // mutable so rdbuf() can be const
-#endif
- void __fb_init ();
- public:
- fstreambase();
- fstreambase(int fd);
- fstreambase(int fd, char *p, int l); /* Deprecated */
- fstreambase(const char *name, int mode, int prot=0664);
- void close();
-#ifdef _IO_NEW_STREAMS
- filebuf* rdbuf() const { return &__my_fb; }
-#else
- filebuf* rdbuf() const { return (filebuf*) ios::rdbuf(); }
-#endif
- void open(const char *name, int mode, int prot=0664);
- int is_open() const { return rdbuf()->is_open(); }
- void setbuf(char *ptr, int len) { rdbuf()->setbuf(ptr, len); }
- void attach(int fd);
-#ifdef _STREAM_COMPAT
- int filedesc() { return rdbuf()->fd(); }
- fstreambase& raw() { rdbuf()->setbuf(NULL, 0); return *this; }
-#endif
-};
-
-class ifstream : public fstreambase, public istream {
- public:
- ifstream() : fstreambase() { }
- ifstream(int fd) : fstreambase(fd) { }
- ifstream(int fd, char *p, int l) : fstreambase(fd, p, l) { } /*Deprecated*/
- ifstream(const char *name, int mode=ios::in, int prot=0664)
- : fstreambase(name, mode | ios::in, prot) { }
- void open(const char *name, int mode=ios::in, int prot=0664)
- { fstreambase::open(name, mode | ios::in, prot); }
-};
-
-class ofstream : public fstreambase, public ostream {
- public:
- ofstream() : fstreambase() { }
- ofstream(int fd) : fstreambase(fd) { }
- ofstream(int fd, char *p, int l) : fstreambase(fd, p, l) { } /*Deprecated*/
- ofstream(const char *name, int mode=ios::out, int prot=0664)
- : fstreambase(name, mode | ios::out, prot) { }
- void open(const char *name, int mode=ios::out, int prot=0664)
- { fstreambase::open(name, mode | ios::out, prot); }
-};
-
-class fstream : public fstreambase, public iostream {
- public:
- fstream() : fstreambase() { }
- fstream(int fd) : fstreambase(fd) { }
- fstream(const char *name, int mode, int prot=0664)
- : fstreambase(name, mode, prot) { }
- fstream(int fd, char *p, int l) : fstreambase(fd, p, l) { } /*Deprecated*/
- void open(const char *name, int mode, int prot=0664)
- { fstreambase::open(name, mode, prot); }
-};
-} // extern "C++"
-#endif /*!_FSTREAM_H*/
diff --git a/contrib/libio/gen-params b/contrib/libio/gen-params
deleted file mode 100755
index afb8f3b03c04..000000000000
--- a/contrib/libio/gen-params
+++ /dev/null
@@ -1,739 +0,0 @@
-#!/bin/sh
-# Copyright (C) 1992, 1993, 1994, 1997, 1998, 1999 Free Software Foundation
-#
-# This file is part of the GNU IO Library. This library is free
-# software; you can redistribute it and/or modify it under the
-# terms of the GNU General Public License as published by the
-# Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this library; see the file COPYING. If not, write to the Free
-# Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-# Written by Per Bothner (bothner@cygnus.com)
-
-# This is a shell-script that figures out various things about a
-# system, and writes (to stdout) a C-style include files with
-# suitable definitions, including all the standard Posix types.
-# It works by compiling various test programs -- some are run through
-# the C pre-processor, and the output examined.
-# The test programs are only compiled, not executed, so the script
-# should even if you're cross-compiling.
-# It uses $CC (which defaults to cc) to compile C programs (extension .c),
-# and $CXX (which defaults to gcc) to compile C++ programs (extension .C).
-# The shell-script is written for libg++.a.
-
-# Usage: gen-params [NAME1=name1 ...]
-# - where an assignment (such as size_t="unsigned int" means to
-# use that value, instead of trying to figure it out.
-
-# Uncomment following line for debugging
-# set -x
-
-SED=sed
-
-# Evaluate the arguments (which should be assignments):
-for arg in "$@"; do
- # Quote arg (i.e. FOO=bar => FOO='bar'), then eval it.
- eval `echo "$arg" | ${SED} -e "s|^\(.*\)=\(.*\)|\1='\2'|"`
-done
-
-macro_prefix=${macro_prefix-"_G_"}
-rootdir=`pwd`/..
-gccdir=${gccdir-${rootdir}/gcc}
-binutilsdir=${binutilsdir-${rootdir}/binutils}
-CC=${CC-`if [ -f ${gccdir}/xgcc ] ; \
- then echo ${gccdir}/xgcc -B${gccdir}/ ; \
- else echo cc ; fi`}
-CXX=${CXX-`if [ -f ${gccdir}/xgcc ] ; \
- then echo ${gccdir}/xgcc -B${gccdir}/ ; \
- else echo gcc ; fi`}
-CPP=${CPP-`echo ${CC} -E`}
-CONFIG_NM=${CONFIG_NM-`if [ -f ${binutilsdir}/nm.new ] ; \
- then echo ${binutilsdir}/nm.new ; \
- else echo nm ; fi`}
-
-cat <<!EOF!
-/* AUTOMATICALLY GENERATED; DO NOT EDIT! */
-#ifndef ${macro_prefix}config_h
-#define ${macro_prefix}config_h
-!EOF!
-
-if [ x"${LIB_VERSION}" != "x" ] ; then
- echo "#define ${macro_prefix}LIB_VERSION" '"'${LIB_VERSION}'"'
-fi
-
-# This program is used to test if the compiler prepends '_' before identifiers.
-# It is also used to check the g++ uses '$' or '.' various places.
-
-if test -z "${NAMES_HAVE_UNDERSCORE}" \
- || test -z "${DOLLAR_IN_LABEL}" \
- || test -z "${VTABLE_LABEL_PREFIX}"; then
- cat >dummy.h <<!EOF!
-#ifdef __GNUG__
-#pragma interface
-#endif
- struct filebuf {
- virtual int foo();
- };
-!EOF!
- cat >dummy.C <<!EOF!
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include "dummy.h"
- int filebuf::foo() { return 0; }
- extern "C" int FUNC(int);
- int FUNC(int i) { return i+10; }
-!EOF!
-
- if ${CXX} -O -c dummy.C ; then
- if test -z "${NAMES_HAVE_UNDERSCORE}" ; then
- if test "`${CONFIG_NM} dummy.o | grep _FUNC`" != ""; then
- NAMES_HAVE_UNDERSCORE=1
- elif test "`${CONFIG_NM} dummy.o | grep FUNC`" != ""; then
- NAMES_HAVE_UNDERSCORE=0
- else
- echo "${CONFIG_NM} failed to find FUNC in dummy.o!" 1>&2; exit -1;
- fi
- fi
- echo "#define ${macro_prefix}NAMES_HAVE_UNDERSCORE ${NAMES_HAVE_UNDERSCORE}"
-
- if test -z "${VTABLE_LABEL_PREFIX}" ; then
- # Determine how virtual function tables are named. This is fragile,
- # because different nm's produce output in different formats.
- ${CONFIG_NM} dummy.o >TMP
- if [ -n "`${SED} -n -e 's/ virtual table/nope/p' <TMP`" ] ; then
- ${CONFIG_NM} --no-cplus dummy.o >TMP 2>/dev/null ||
- ${CONFIG_NM} --no-demangle dummy.o >TMP 2>/dev/null ||
- ${CONFIG_NM} dummy.o >TMP 2>/dev/null
- fi
- # First we look for a pattern that matches historical output from g++.
- # We surround the actual label name by <> to separate it from
- # other nm junk.
- ${SED} -n -e 's/_*vt[$_.]7*filebuf/<&>/p' <TMP >dummy.out
- # For paranoia's sake (e.g. if we're using some other C++ compiler)
- # we try a more general pattern, and append the result.
- grep -v foo <TMP \
- | ${SED} -n -e 's/[a-zA-Z0-9_.$]*filebuf[a-zA-Z0-9_.$]*/<&>/p' \
- >>dummy.out
- # Now we get rid of the <>, and any other junk on the nm output line.
- # (We get rid of <filebuf> in case nm included debugging output for
- # class filebuf itself.) On windows32, we also need to delete the
- # unique sections (.data$_vt$*), otherwise we get the wrong result.
- # Finally, we select the first line of the result, and hope that's
- # what we wanted!
- vtab_name=`${SED} -n -e '/<filebuf>/d' \
- -e '/\.data[$_.]<_vt\$7filebuf>/d' \
- -e 's/^.*<\(.*\)>.*$/\1/p' \
- <dummy.out | ${SED} -n -e '1p'`
- case "${vtab_name}" in
- *7filebuf) echo "#define ${macro_prefix}VTABLE_LABEL_HAS_LENGTH 1" ;;
- *) echo "#define ${macro_prefix}VTABLE_LABEL_HAS_LENGTH 0" ;;
- esac
- VTABLE_LABEL_PREFIX=`echo $vtab_name | ${SED} -e 's/7*filebuf//'`
- fi
- echo "#define ${macro_prefix}VTABLE_LABEL_PREFIX" '"'"${VTABLE_LABEL_PREFIX}"'"'
- if [ "${VTABLE_LABEL_PREFIX}" = "__vt_" -o \
- "${VTABLE_LABEL_PREFIX}" = "___vt_" ] ; then
- echo "#define ${macro_prefix}USING_THUNKS"
- fi
-
- # VTABLE_LABEL_PREFIX_ID is the same as VTABLE_LABEL_PREFIX,
- # but the former is a C identifier, while the latter is a quoted
- # st
- if [ -z ""`echo ${VTABLE_LABEL_PREFIX} | ${SED} -e 's/[a-zA-Z0-9_]//g'` ] ; then
- if [ "${NAMES_HAVE_UNDERSCORE}" = "1" ] ; then
- VTABLE_LABEL_PREFIX=`echo ${VTABLE_LABEL_PREFIX} | ${SED} -e 's/^_//'`
- fi
- echo "#define ${macro_prefix}VTABLE_LABEL_PREFIX_ID ${VTABLE_LABEL_PREFIX}"
- fi
-
-# if test -n "${DOLLAR_IN_LABEL}" ; then
-# echo "#define ${macro_prefix}DOLLAR_IN_LABEL ${DOLLAR_IN_LABEL}"
-# elif test "`${CONFIG_NM} dummy.o | grep 'vt[$$]7filebuf'`" != ""; then
-# echo "#define ${macro_prefix}DOLLAR_IN_LABEL 1"
-# elif test "`${CONFIG_NM} dummy.o | grep 'vt[.]7filebuf'`" != ""; then
-# echo "#define ${macro_prefix}DOLLAR_IN_LABEL 0"
-# elif test "`${CONFIG_NM} dummy.o | grep 'vtbl__7filebuf'`" != ""; then
-# echo "#define ${macro_prefix}DOLLAR_IN_LABEL 0"
-# else
-# echo "gen-params: ${CONFIG_NM} failed to find vt[.\$]filebuf in dummy.o!" 1>&2; exit 1
-# fi
- else
- # The compile failed for some reason (no C++?)
- echo "gen-params: could not compile dummy.C with ${CXX}" 1>&2; exit 1;
- fi
-fi
-
-# A little test program to check if struct stat has st_blksize.
-cat >dummy.c <<!EOF!
-#include <sys/types.h>
-#include <sys/stat.h>
-int BLKSIZE(struct stat *st)
-{
- return st->st_blksize;
-}
-!EOF!
-
-if ${CC} -c dummy.c >/dev/null 2>&1 ; then
- echo "#define ${macro_prefix}HAVE_ST_BLKSIZE 1"
-else
- echo "#define ${macro_prefix}HAVE_ST_BLKSIZE 0"
-fi
-
-# A little test program to check if the name 'clog' is defined in libm,
-# as it is under DEC UNIX.
-cat >dummy.c <<!EOF!
-int clog;
-main () {}
-!EOF!
-
-if ${CC} dummy.c -lm 2>&1 >/dev/null | grep clog >/dev/null; then
- echo "#define ${macro_prefix}CLOG_CONFLICT 1"
-fi
-
-echo ""
-
-# Next, generate definitions for the standard types (such as mode_t)
-# compatible with those in the standard C header files.
-# It works by a dummy program through the C pre-processor, and then
-# using sed to search for typedefs in the output.
-
-for hdr in wchar wctype; do
- eval $hdr=0
- cat >dummy.c <<EOF
-#include <${hdr}.h>
-EOF
- if ${CPP} dummy.c >/dev/null 2>&1 ; then eval $hdr=1; fi
-done
-
-cat >dummy.c <<!EOF!
-#include <sys/types.h>
-#include <stddef.h>
-#ifdef __STDC__
-#include <stdarg.h>
-#else /* !__STDC__ */
-#include <varargs.h>
-#endif /* __STDC__ */
-#include <stdio.h>
-#include <time.h>
-#include <signal.h>
-#ifdef __STDC__
-#include <limits.h>
-#endif
-#if WCHAR == 1
-#include <wchar.h>
-#endif
-#if WCTYPE == 1
-#include <wctype.h>
-#endif
-#ifdef size_t
-typedef size_t Xsize_t;
-#elif defined(__SIZE_TYPE__)
-typedef __SIZE_TYPE__ Xsize_t;
-#endif
-#ifdef ptrdiff_t
-typedef ptrdiff_t Xptrdiff_t;
-#elif defined(__PTRDIFF_TYPE__)
-typedef __PTRDIFF_TYPE__ Xptrdiff_t;
-#endif
-#ifdef wchar_t
-typedef wchar_t Xwchar_t;
-#elif defined(__WCHAR_TYPE__)
-typedef __WCHAR_TYPE__ Xwchar_t;
-#endif
-#ifdef va_list
-typedef va_list XXXva_list;
-#endif
-#ifdef BUFSIZ
-long XBUFSIZ=BUFSIZ;
-#endif
-#ifdef FOPEN_MAX
-long XFOPEN_MAX=FOPEN_MAX;
-#endif
-#ifdef FILENAME_MAX
-long XFILENAME_MAX=FILENAME_MAX;
-#endif
-#ifdef SHRT_MAX
-long XSHRT_MAX=SHRT_MAX;
-#endif
-#ifdef INT_MAX
-long XINT_MAX=INT_MAX;
-#endif
-#ifdef LONG_MAX
-long XLONG_MAX=LONG_MAX;
-#endif
-#ifdef LONG_LONG_MAX
-long XLONG_LONG_MAX=LONG_LONG_MAX;
-#endif
-!EOF!
-
-if ${CPP} dummy.c -DWCHAR=$wchar -DWCTYPE=$wctype >TMP ; then true
-else
- echo "gen-params: could not invoke ${CPP} on dummy.c" 1>&2 ; exit 1
-fi
-tr ' ' ' ' <TMP >dummy.out
-
-for TYPE in dev_t clock_t fpos_t gid_t ino_t mode_t nlink_t off_t pid_t ptrdiff_t sigset_t size_t ssize_t time_t uid_t va_list wchar_t wint_t int16_t uint16_t int32_t uint_32_t u_int16_t u_int32_t; do
- eval IMPORTED=\$$TYPE
- if [ -n "${IMPORTED}" ] ; then
- eval "$TYPE='$IMPORTED'"
- else
- t=$TYPE
- VALUE=''
-
- # Follow `typedef VALUE TYPE' chains, but don't loop indefinitely.
- for iteration in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20; do
- # Search dummy.out for a typedef for X*$t.
- sed_script="
- s/unsigned long long int/_G_ullong/g
- s/long long int/_G_llong/g
- s/unsigned long long/_G_ullong/g
- s/long long/_G_llong/g
- /.*typedef *\\(.*[^ ]\\) *X*$t *;.*/{s||\1|;p;q;}
- /.*typedef *\\(.*[^ a-zA-Z0-9_]\\)X*$t *;.*/{s||\1|;p;q;}
- "
- t=`${SED} -n "$sed_script" <dummy.out`
- case "$t" in
- '')
- break;;
- *)
- # Found a type $t; save it in VALUE.
- VALUE=$t
- # If it won't cause problems in matching,
- # look for a typedef for it in turn.
- case "$VALUE" in
- *.* | */* | *\ * | *\** | *\[* | *\\*) break;;
- esac;;
- esac
- done
-
- case "$VALUE" in
- ?*) eval "$TYPE=\"$VALUE\""
- esac
- fi
-done
-
-# Look for some standard macros.
-for NAME in BUFSIZ FOPEN_MAX FILENAME_MAX NULL; do
- eval IMPORTED=\$$NAME
- if [ -n "${IMPORTED}" ] ; then
- eval "$NAME='$IMPORTED /* specified */'"
- else
- rm -f TMP
- ${SED} -n -e 's| *;|;|g' -e "s|long X${NAME}= *\(.*\);|\1|w TMP" \
- <dummy.out>/dev/null
- # Now select the first definition.
- if [ -s TMP ]; then
- eval "$NAME='"`${SED} -e '2,$d' <TMP`"'"
- fi
- fi
-done
-
-# These macros must be numerical constants; strip any trailing 'L's.
-for NAME in SHRT_MAX INT_MAX LONG_MAX LONG_LONG_MAX; do
- eval IMPORTED=\$$NAME
- if [ -n "${IMPORTED}" ] ; then
- eval "$NAME='$IMPORTED /* specified */'"
- else
- rm -f TMP
- ${SED} -n -e 's| *;|;|g' -e "s|long X${NAME}= *\([0-9]*\)L* *;|\1|w TMP" \
- <dummy.out>/dev/null
- # Now select the first definition.
- if [ -s TMP ]; then
- eval "$NAME='"`${SED} -e '2,$d' <TMP`"'"
- fi
- fi
-done
-
-# Figure out integral type sizes.
-
-default_int16='short /* deduction failed */'
-default_int32='long /* deduction failed */'
-INT16=32767
-INT32=2147483647
-
-if [ "${SHRT_MAX}" = $INT16 ] ; then
- default_int16='short /* deduced */'
- if [ "${LONG_MAX}" = $INT32 ] ; then
- default_int32='long /* deduced */'
- elif [ "${INT_MAX}" = $INT32 ] ; then
- default_int32='int /* deduced */'
- fi
-fi
-
-[ -n "$u_int16_t" ] && uint16_t="$u_int16_t"
-[ -n "$u_int32_t" ] && uint32_t="$u_int32_t"
-
-[ -z "$int16_t" ] && int16_t="$default_int16"
-[ -z "$uint16_t" ] && uint16_t="unsigned $int16_t"
-[ -z "$int32_t" ] && int32_t="$default_int32"
-[ -z "$uint32_t" ] && uint32_t="unsigned $int32_t"
-
-cat <<!EOF!
-#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
-typedef int ${macro_prefix}int8_t __attribute__((__mode__(__QI__)));
-typedef unsigned int ${macro_prefix}uint8_t __attribute__((__mode__(__QI__)));
-typedef int ${macro_prefix}int16_t __attribute__((__mode__(__HI__)));
-typedef unsigned int ${macro_prefix}uint16_t __attribute__((__mode__(__HI__)));
-typedef int ${macro_prefix}int32_t __attribute__((__mode__(__SI__)));
-typedef unsigned int ${macro_prefix}uint32_t __attribute__((__mode__(__SI__)));
-typedef int ${macro_prefix}int64_t __attribute__((__mode__(__DI__)));
-typedef unsigned int ${macro_prefix}uint64_t __attribute__((__mode__(__DI__)));
-#if __GNUC__ > 2 || __GNUC_MINOR__ >= 8
-__extension__ typedef long long ${macro_prefix}llong;
-__extension__ typedef unsigned long long ${macro_prefix}ullong;
-#endif
-#else
-typedef $int16_t ${macro_prefix}int16_t;
-typedef $uint16_t ${macro_prefix}uint16_t;
-typedef $int32_t ${macro_prefix}int32_t;
-typedef $uint32_t ${macro_prefix}uint32_t;
-#endif
-
-typedef ${clock_t-int /* default */} ${macro_prefix}clock_t;
-typedef ${dev_t-int /* default */} ${macro_prefix}dev_t;
-typedef ${fpos_t-long /* default */} ${macro_prefix}fpos_t;
-typedef ${gid_t-int /* default */} ${macro_prefix}gid_t;
-typedef ${ino_t-int /* default */} ${macro_prefix}ino_t;
-typedef ${mode_t-int /* default */} ${macro_prefix}mode_t;
-typedef ${nlink_t-int /* default */} ${macro_prefix}nlink_t;
-typedef ${off_t-long /* default */} ${macro_prefix}off_t;
-typedef ${pid_t-int /* default */} ${macro_prefix}pid_t;
-#ifndef __PTRDIFF_TYPE__
-#define __PTRDIFF_TYPE__ ${ptrdiff_t-long int /* default */}
-#endif
-typedef __PTRDIFF_TYPE__ ${macro_prefix}ptrdiff_t;
-typedef ${sigset_t-int /* default */} ${macro_prefix}sigset_t;
-#ifndef __SIZE_TYPE__
-#define __SIZE_TYPE__ ${size_t-unsigned long /* default */}
-#endif
-typedef __SIZE_TYPE__ ${macro_prefix}size_t;
-typedef ${time_t-int /* default */} ${macro_prefix}time_t;
-typedef ${uid_t-int /* default */} ${macro_prefix}uid_t;
-typedef ${wchar_t-int /* default */} ${macro_prefix}wchar_t;
-
-#define ${macro_prefix}BUFSIZ ${BUFSIZ-1024 /* default */}
-#define ${macro_prefix}FOPEN_MAX ${FOPEN_MAX-32 /* default */}
-#define ${macro_prefix}FILENAME_MAX ${FILENAME_MAX-1024 /* default */}
-#if defined (__cplusplus) || defined (__STDC__)
-#define ${macro_prefix}ARGS(ARGLIST) ARGLIST
-#else
-#define ${macro_prefix}ARGS(ARGLIST) ()
-#endif
-#if !defined (__GNUG__) || defined (__STRICT_ANSI__)
-#define ${macro_prefix}NO_NRV
-#endif
-#if !defined (__GNUG__)
-#define _G_NO_EXTERN_TEMPLATES
-#endif
-!EOF!
-
-# ssize_t is the signed version of size_t
-if [ -n "${ssize_t}" ] ; then
- echo "typedef ${ssize_t} ${macro_prefix}ssize_t;"
-elif [ -z "${size_t}" ] ; then
- echo "typedef long ${macro_prefix}ssize_t;"
-else
- # Remove "unsigned" from ${size_t} to get ${ssize_t}.
- tmp="`echo ${size_t} | ${SED} -e 's|unsigned||g' -e 's| | |g'`"
- if [ -z "$tmp" ] ; then
- tmp=int
- else
- # check $tmp doesn't conflict with <unistd.h>
- echo "#include <unistd.h>
- extern $tmp read();" >dummy.c
- ${CC} -c dummy.c >/dev/null 2>&1 || tmp=int
- fi
- echo "typedef $tmp /* default */ ${macro_prefix}ssize_t;"
-fi
-
-# wint_t is often the integral type to which wchar_t promotes.
-if [ -z "${wint_t}" ] ; then
- for TYPE in int 'unsigned int' 'long int' 'long unsigned int'; do
- cat >dummy.C <<!EOF!
-#ifndef __WCHAR_TYPE__
-#define __WCHAR_TYPE__ ${wchar_t-int /* default */}
-#endif
-typedef __WCHAR_TYPE__ ${macro_prefix}wchar_t;
-void foo ($TYPE);
-void foo (double);
-void bar (${macro_prefix}wchar_t w)
-{
- foo (w);
-}
-!EOF!
- if ${CXX} -c dummy.C >/dev/null 2>&1 ; then
- wint_t="$TYPE /* default */"
- break
- fi
- done
-fi
-echo "typedef ${wint_t-int /* wchar_t is broken */} ${macro_prefix}wint_t;"
-
-# va_list can cause problems (e.g. some systems have va_list as a struct).
-# Check to see if ${va_list-char*} really is compatible with stdarg.h.
-cat >dummy.C <<!EOF!
-#define X_va_list ${va_list-char* /* default */}
-extern long foo(X_va_list ap); /* Check that X_va_list compiles on its own */
-extern "C" {
-#include <stdarg.h>
-}
-long foo(X_va_list ap) { return va_arg(ap, long); }
-long bar(int i, ...)
-{ va_list ap; long j; va_start(ap, i); j = foo(ap); va_end(ap); return j; }
-!EOF!
-if ${CXX} -c dummy.C >/dev/null 2>&1 ; then
- # Ok: We have something that works.
- echo "typedef ${va_list-char* /* default */} ${macro_prefix}va_list;"
-else
- echo "#define ${macro_prefix}NEED_STDARG_H"
- # Check and see if we have __gnuc_va_list, as we might set up define
- # loops if we use va_list.
- cat >dummy.C <<!EOF!
-#include <stdarg.h>
-long foo(__gnuc_va_list ap) { return va_arg(ap, long); }
-!EOF!
- if ${CXX} -c dummy.C >/dev/null 2>&1 ; then
- echo "#define ${macro_prefix}va_list __gnuc_va_list"
- else
- echo "#define ${macro_prefix}va_list va_list"
- fi
-fi
-
-cat >dummy.c <<!EOF!
-#include <signal.h>
-extern int (*signal())();
-extern int dummy (int);
-main()
-{
- int (*oldsig)(int) = signal (1, dummy);
- (void) signal (2, oldsig);
- return 0;
-}
-!EOF!
-if ${CC} -c dummy.c >/dev/null 2>&1 ; then
- echo "#define ${macro_prefix}signal_return_type int"
-else
- echo "#define ${macro_prefix}signal_return_type void"
-fi
-
-# check sprintf return type
-
-cat >dummy.c <<!EOF!
-#include <stdio.h>
-extern int sprintf(); char buf[100];
-int main() { return sprintf(buf, "%d", 34); }
-!EOF!
-if ${CC} -c dummy.c >/dev/null 2>&1 ; then
- echo "#define ${macro_prefix}sprintf_return_type int"
-else
- echo "#define ${macro_prefix}sprintf_return_type char*"
-fi
-
-if test -n "${HAVE_ATEXIT}" ; then
- echo "#define ${macro_prefix}HAVE_ATEXIT ${HAVE_ATEXIT}"
-else
- cat >dummy.c <<!EOF!
-#include <stdlib.h>
-int main()
-{
- atexit (0);
-}
-!EOF!
- if ${CC} dummy.c >/dev/null 2>&1 ; then
- echo "#define ${macro_prefix}HAVE_ATEXIT 1"
- else
- echo "#define ${macro_prefix}HAVE_ATEXIT 0"
- fi
-fi
-
-
-# *** Check for presence of certain include files ***
-
-# check for sys/resource.h
-
-if test -n "${HAVE_SYS_RESOURCE}" ; then
- echo "#define ${macro_prefix}HAVE_SYS_RESOURCE ${HAVE_SYS_RESOURCE}"
-else
- cat >dummy.c <<!EOF!
-#include <sys/types.h>
-#include <sys/time.h>
-#include <sys/resource.h>
- int main()
- {
- struct rusage res;
- getrusage(RUSAGE_SELF, &res);
- return (int)(res.ru_utime.tv_sec + (res.ru_utime.tv_usec / 1000000.0));
- }
-!EOF!
- # Note: We link because some systems have sys/resource, but not getrusage().
- if ${CC} dummy.c >/dev/null 2>&1 ; then
- echo "#define ${macro_prefix}HAVE_SYS_RESOURCE 1"
- else
- echo "#define ${macro_prefix}HAVE_SYS_RESOURCE 0"
- fi
-fi
-
-# check for struct tms in sys/times.h
-
-if test -n "${HAVE_SYS_TIMES}" ; then
- echo "#define ${macro_prefix}HAVE_SYS_TIMES ${HAVE_SYS_TIMES}"
-else
- cat >dummy.c <<!EOF!
-#include <sys/types.h>
-#include <sys/times.h>
- int main()
- {
- struct tms s;
- return s.tms_utime;
- }
-!EOF!
- if ${CC} -c dummy.c >/dev/null 2>&1 ; then
- echo "#define ${macro_prefix}HAVE_SYS_TIMES 1"
- else
- echo "#define ${macro_prefix}HAVE_SYS_TIMES 0"
- fi
-fi
-
-# check for sys/socket.h
-
-if test -n "${HAVE_SYS_SOCKET}" ; then
- echo "#define ${macro_prefix}HAVE_SYS_SOCKET ${HAVE_SYS_SOCKET}"
-else
- echo '#include <sys/types.h>' >dummy.c
- echo '#include <sys/socket.h>' >>dummy.c
- if ${CC} -c dummy.c >/dev/null 2>&1 ; then
- echo "#define ${macro_prefix}HAVE_SYS_SOCKET 1"
- else
- echo "#define ${macro_prefix}HAVE_SYS_SOCKET 0"
- fi
-fi
-
-# check for sys/cdefs.h
-
-if test -n "${HAVE_SYS_CDEFS}" ; then
- echo "#define ${macro_prefix}HAVE_SYS_CDEFS ${HAVE_SYS_CDEFS}"
-else
- echo '#include <sys/cdefs.h>' >dummy.c
- echo 'extern int myfunc __P((int, int));' >>dummy.c
- if ${CC} -c dummy.c >/dev/null 2>&1 ; then
- echo "#define ${macro_prefix}HAVE_SYS_CDEFS 1"
- else
- echo "#define ${macro_prefix}HAVE_SYS_CDEFS 0"
- fi
-fi
-
-# Check for a (Posix-compatible) sys/wait.h */
-
-if test -n "${HAVE_SYS_WAIT}" ; then
- echo "#define ${macro_prefix}HAVE_SYS_WAIT ${HAVE_SYS_WAIT}"
-else
- cat >dummy.c <<!EOF!
-#include <sys/types.h>
-#include <sys/wait.h>
- int f() { int i; wait(&i); return i; }
-!EOF!
- if ${CC} -c dummy.c >/dev/null 2>&1 ; then
- echo "#define ${macro_prefix}HAVE_SYS_WAIT 1"
- else
- echo "#define ${macro_prefix}HAVE_SYS_WAIT 0"
- fi
-fi
-
-if test -n "${HAVE_UNISTD}" ; then
- echo "#define ${macro_prefix}HAVE_UNISTD ${HAVE_UNISTD}"
-else
- echo '#include <unistd.h>' >dummy.c
- if ${CC} -c dummy.c >/dev/null 2>&1 ; then
- echo "#define ${macro_prefix}HAVE_UNISTD 1"
- else
- echo "#define ${macro_prefix}HAVE_UNISTD 0"
- fi
-fi
-
-if test -n "${HAVE_DIRENT}" ; then
- echo "#define ${macro_prefix}HAVE_DIRENT ${HAVE_DIRENT}"
-else
- echo '#include <sys/types.h>
-#include <dirent.h>' >dummy.c
- if ${CC} -c dummy.c >/dev/null 2>&1 ; then
- echo "#define ${macro_prefix}HAVE_DIRENT 1"
- else
- echo "#define ${macro_prefix}HAVE_DIRENT 0"
- fi
-fi
-
-if test -n "${HAVE_CURSES}" ; then
- echo "#define ${macro_prefix}HAVE_CURSES ${HAVE_CURSES}"
-else
- echo '#include <curses.h>' >dummy.c
- if ${CC} -c dummy.c >/dev/null 2>&1 ; then
- echo "#define ${macro_prefix}HAVE_CURSES 1"
- else
- echo "#define ${macro_prefix}HAVE_CURSES 0"
- fi
-fi
-
-# There is no test for this at the moment; it is just set by the
-# configuration files.
-if test -n "${MATH_H_INLINES}" ; then
- echo "#define ${macro_prefix}MATH_H_INLINES ${MATH_H_INLINES}"
-else
- echo "#define ${macro_prefix}MATH_H_INLINES 0"
-fi
-
-if test -n "${HAVE_BOOL}" ; then
- echo "#define ${macro_prefix}HAVE_BOOL ${HAVE_BOOL}"
-else
- echo 'bool i=true,j=false;' >dummy.C
- if ${CXX} -c dummy.C >/dev/null 2>&1 ; then
- echo "#define ${macro_prefix}HAVE_BOOL 1"
- else
- echo "#define ${macro_prefix}HAVE_BOOL 0"
- fi
-fi
-
-if test -n "${NO_USE_DTOA}" ; then
- echo "#define ${macro_prefix}NO_USE_DTOA 1"
-fi
-if test -n "${USE_INT32_FLAGS}" ; then
- echo "#define ${macro_prefix}USE_INT32_FLAGS 1"
-fi
-
-# A little test program to check if __printf_fp is available.
-cat >dummy.c <<EOF
-int main()
-{
- return __printf_fp ();
-}
-EOF
-
-if ${CC} dummy.c >/dev/null 2>&1 ; then
- echo "#define ${macro_prefix}HAVE_PRINTF_FP 1"
- echo "#define ${macro_prefix}HAVE_LONG_DOUBLE_IO 1"
-else
- echo "#define ${macro_prefix}HAVE_PRINTF_FP 0"
- echo "#define ${macro_prefix}HAVE_LONG_DOUBLE_IO 0"
-fi
-
-# Uncomment the following line if you don't have working templates.
-# echo "#define ${macro_prefix}NO_TEMPLATES"
-
-# Override bogus definitions of NULL in system headers.
-cat <<EOF
-#undef NULL
-#define __need_NULL
-#include <stddef.h>
-EOF
-
-rm -f dummy.C dummy.o dummy.c dummy.out TMP core a.out
-
-echo "#endif /* !${macro_prefix}config_h */"
diff --git a/contrib/libio/genops.c b/contrib/libio/genops.c
deleted file mode 100644
index b899e150afab..000000000000
--- a/contrib/libio/genops.c
+++ /dev/null
@@ -1,946 +0,0 @@
-/* Copyright (C) 1993, 1995, 1997, 1998 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-/* Generic or default I/O operations. */
-
-#include "libioP.h"
-#ifdef __STDC__
-#include <stdlib.h>
-#endif
-#include <string.h>
-
-void
-_IO_un_link (fp)
- _IO_FILE *fp;
-{
- if (fp->_flags & _IO_LINKED)
- {
- _IO_FILE **f;
- for (f = &_IO_list_all; *f != NULL; f = &(*f)->_chain)
- {
- if (*f == fp)
- {
- *f = fp->_chain;
- break;
- }
- }
- fp->_flags &= ~_IO_LINKED;
- }
-}
-
-void
-_IO_link_in (fp)
- _IO_FILE *fp;
-{
- if ((fp->_flags & _IO_LINKED) == 0)
- {
- fp->_flags |= _IO_LINKED;
- fp->_chain = _IO_list_all;
- _IO_list_all = fp;
- }
-}
-
-/* Return minimum _pos markers
- Assumes the current get area is the main get area. */
-static _IO_size_t _IO_least_marker __P ((_IO_FILE *fp));
-
-static _IO_size_t
-_IO_least_marker (fp)
- _IO_FILE *fp;
-{
- _IO_ssize_t least_so_far = fp->_IO_read_end - fp->_IO_read_base;
- struct _IO_marker *mark;
- for (mark = fp->_markers; mark != NULL; mark = mark->_next)
- if (mark->_pos < least_so_far)
- least_so_far = mark->_pos;
- return least_so_far;
-}
-
-/* Switch current get area from backup buffer to (start of) main get area. */
-
-void
-_IO_switch_to_main_get_area (fp)
- _IO_FILE *fp;
-{
- char *tmp;
- fp->_flags &= ~_IO_IN_BACKUP;
- /* Swap _IO_read_end and _IO_save_end. */
- tmp = fp->_IO_read_end;
- fp->_IO_read_end = fp->_IO_save_end;
- fp->_IO_save_end= tmp;
- /* Swap _IO_read_base and _IO_save_base. */
- tmp = fp->_IO_read_base;
- fp->_IO_read_base = fp->_IO_save_base;
- fp->_IO_save_base = tmp;
-
- fp->_IO_read_ptr = fp->_IO_read_base;
-}
-
-/* Switch current get area from main get area to (end of) backup area. */
-
-void
-_IO_switch_to_backup_area (fp)
- _IO_FILE *fp;
-{
- char *tmp;
- fp->_flags |= _IO_IN_BACKUP;
- /* Swap _IO_read_end and _IO_save_end. */
- tmp = fp->_IO_read_end;
- fp->_IO_read_end = fp->_IO_save_end;
- fp->_IO_save_end = tmp;
- /* Swap _gbase and _IO_save_base. */
- tmp = fp->_IO_read_base;
- fp->_IO_read_base = fp->_IO_save_base;
- fp->_IO_save_base = tmp;
-
- fp->_IO_read_ptr = fp->_IO_read_end;
-}
-
-int
-_IO_switch_to_get_mode (fp)
- _IO_FILE *fp;
-{
- if (fp->_IO_write_ptr > fp->_IO_write_base)
- if (_IO_OVERFLOW (fp, EOF) == EOF)
- return EOF;
- if (_IO_in_backup (fp))
- fp->_IO_read_base = fp->_IO_backup_base;
- else
- {
- fp->_IO_read_base = fp->_IO_buf_base;
- if (fp->_IO_write_ptr > fp->_IO_read_end)
- fp->_IO_read_end = fp->_IO_write_ptr;
- }
- fp->_IO_read_ptr = fp->_IO_write_ptr;
-
- fp->_IO_write_base = fp->_IO_write_ptr = fp->_IO_write_end = fp->_IO_read_ptr;
-
- fp->_flags &= ~_IO_CURRENTLY_PUTTING;
- return 0;
-}
-
-void
-_IO_free_backup_area (fp)
- _IO_FILE *fp;
-{
- if (_IO_in_backup (fp))
- _IO_switch_to_main_get_area (fp); /* Just in case. */
- free (fp->_IO_save_base);
- fp->_IO_save_base = NULL;
- fp->_IO_save_end = NULL;
- fp->_IO_backup_base = NULL;
-}
-
-#if 0
-int
-_IO_switch_to_put_mode (fp)
- _IO_FILE *fp;
-{
- fp->_IO_write_base = fp->_IO_read_ptr;
- fp->_IO_write_ptr = fp->_IO_read_ptr;
- /* Following is wrong if line- or un-buffered? */
- fp->_IO_write_end = (fp->_flags & _IO_IN_BACKUP
- ? fp->_IO_read_end : fp->_IO_buf_end);
-
- fp->_IO_read_ptr = fp->_IO_read_end;
- fp->_IO_read_base = fp->_IO_read_end;
-
- fp->_flags |= _IO_CURRENTLY_PUTTING;
- return 0;
-}
-#endif
-
-int
-__overflow (f, ch)
- _IO_FILE *f;
- int ch;
-{
- return _IO_OVERFLOW (f, ch);
-}
-
-static int save_for_backup __P ((_IO_FILE *fp));
-
- static int
-save_for_backup (fp)
- _IO_FILE *fp;
-{
- /* Append [_IO_read_base.._IO_read_end] to backup area. */
- int least_mark = _IO_least_marker (fp);
- /* needed_size is how much space we need in the backup area. */
- int needed_size = (fp->_IO_read_end - fp->_IO_read_base) - least_mark;
- int current_Bsize = fp->_IO_save_end - fp->_IO_save_base;
- int avail; /* Extra space available for future expansion. */
- int delta;
- struct _IO_marker *mark;
- if (needed_size > current_Bsize)
- {
- char *new_buffer;
- avail = 100;
- new_buffer = (char *) malloc (avail + needed_size);
- if (new_buffer == NULL)
- return EOF; /* FIXME */
- if (least_mark < 0)
- {
- memcpy (new_buffer + avail,
- fp->_IO_save_end + least_mark,
- -least_mark);
- memcpy (new_buffer + avail - least_mark,
- fp->_IO_read_base,
- fp->_IO_read_end - fp->_IO_read_base);
- }
- else
- memcpy (new_buffer + avail,
- fp->_IO_read_base + least_mark,
- needed_size);
- if (fp->_IO_save_base)
- free (fp->_IO_save_base);
- fp->_IO_save_base = new_buffer;
- fp->_IO_save_end = new_buffer + avail + needed_size;
- }
- else
- {
- avail = current_Bsize - needed_size;
- if (least_mark < 0)
- {
- memmove (fp->_IO_save_base + avail,
- fp->_IO_save_end + least_mark,
- -least_mark);
- memcpy (fp->_IO_save_base + avail - least_mark,
- fp->_IO_read_base,
- fp->_IO_read_end - fp->_IO_read_base);
- }
- else if (needed_size > 0)
- memcpy (fp->_IO_save_base + avail,
- fp->_IO_read_base + least_mark,
- needed_size);
- }
- /* FIXME: Dubious arithmetic if pointers are NULL */
- fp->_IO_backup_base = fp->_IO_save_base + avail;
- /* Adjust all the streammarkers. */
- delta = fp->_IO_read_end - fp->_IO_read_base;
- for (mark = fp->_markers; mark != NULL; mark = mark->_next)
- mark->_pos -= delta;
- return 0;
-}
-
-int
-__underflow (fp)
- _IO_FILE *fp;
-{
- if (_IO_in_put_mode (fp))
- if (_IO_switch_to_get_mode (fp) == EOF)
- return EOF;
- if (fp->_IO_read_ptr < fp->_IO_read_end)
- return *(unsigned char *) fp->_IO_read_ptr;
- if (_IO_in_backup (fp))
- {
- _IO_switch_to_main_get_area (fp);
- if (fp->_IO_read_ptr < fp->_IO_read_end)
- return *(unsigned char *) fp->_IO_read_ptr;
- }
- if (_IO_have_markers (fp))
- {
- if (save_for_backup (fp))
- return EOF;
- }
- else if (_IO_have_backup (fp))
- _IO_free_backup_area (fp);
- return _IO_UNDERFLOW (fp);
-}
-
-int
-__uflow (fp)
- _IO_FILE *fp;
-{
- if (_IO_in_put_mode (fp))
- if (_IO_switch_to_get_mode (fp) == EOF)
- return EOF;
- if (fp->_IO_read_ptr < fp->_IO_read_end)
- return *(unsigned char *) fp->_IO_read_ptr++;
- if (_IO_in_backup (fp))
- {
- _IO_switch_to_main_get_area (fp);
- if (fp->_IO_read_ptr < fp->_IO_read_end)
- return *(unsigned char *) fp->_IO_read_ptr++;
- }
- if (_IO_have_markers (fp))
- {
- if (save_for_backup (fp))
- return EOF;
- }
- else if (_IO_have_backup (fp))
- _IO_free_backup_area (fp);
- return _IO_UFLOW (fp);
-}
-
-void
-_IO_setb (f, b, eb, a)
- _IO_FILE *f;
- char *b;
- char *eb;
- int a;
-{
- if (f->_IO_buf_base && !(f->_flags & _IO_USER_BUF))
- FREE_BUF (f->_IO_buf_base, _IO_blen (f));
- f->_IO_buf_base = b;
- f->_IO_buf_end = eb;
- if (a)
- f->_flags &= ~_IO_USER_BUF;
- else
- f->_flags |= _IO_USER_BUF;
-}
-
-void
-_IO_doallocbuf (fp)
- _IO_FILE *fp;
-{
- if (fp->_IO_buf_base)
- return;
- if (!(fp->_flags & _IO_UNBUFFERED))
- if (_IO_DOALLOCATE (fp) != EOF)
- return;
- _IO_setb (fp, fp->_shortbuf, fp->_shortbuf+1, 0);
-}
-
-int
-_IO_default_underflow (fp)
- _IO_FILE *fp;
-{
- return EOF;
-}
-
-int
-_IO_default_uflow (fp)
- _IO_FILE *fp;
-{
- int ch = _IO_UNDERFLOW (fp);
- if (ch == EOF)
- return EOF;
- return *(unsigned char *) fp->_IO_read_ptr++;
-}
-
-_IO_size_t
-_IO_default_xsputn (f, data, n)
- _IO_FILE *f;
- const void *data;
- _IO_size_t n;
-{
- const char *s = (char *) data;
- _IO_size_t more = n;
- if (more <= 0)
- return 0;
- for (;;)
- {
- /* Space available. */
- _IO_ssize_t count = f->_IO_write_end - f->_IO_write_ptr;
- if (count > 0)
- {
- if ((_IO_size_t) count > more)
- count = more;
- if (count > 20)
- {
- memcpy (f->_IO_write_ptr, s, count);
- s += count;
- f->_IO_write_ptr += count;
- }
- else if (count <= 0)
- count = 0;
- else
- {
- char *p = f->_IO_write_ptr;
- _IO_ssize_t i;
- for (i = count; --i >= 0; )
- *p++ = *s++;
- f->_IO_write_ptr = p;
- }
- more -= count;
- }
- if (more == 0 || __overflow (f, (unsigned char) *s++) == EOF)
- break;
- more--;
- }
- return n - more;
-}
-
-_IO_size_t
-_IO_sgetn (fp, data, n)
- _IO_FILE *fp;
- void *data;
- _IO_size_t n;
-{
- /* FIXME handle putback buffer here! */
- return _IO_XSGETN (fp, data, n);
-}
-
-_IO_size_t
-_IO_default_xsgetn (fp, data, n)
- _IO_FILE *fp;
- void *data;
- _IO_size_t n;
-{
- _IO_size_t more = n;
- char *s = (char*) data;
- for (;;)
- {
- /* Data available. */
- _IO_ssize_t count = fp->_IO_read_end - fp->_IO_read_ptr;
- if (count > 0)
- {
- if ((_IO_size_t) count > more)
- count = more;
- if (count > 20)
- {
- memcpy (s, fp->_IO_read_ptr, count);
- s += count;
- fp->_IO_read_ptr += count;
- }
- else if (count <= 0)
- count = 0;
- else
- {
- char *p = fp->_IO_read_ptr;
- int i = (int) count;
- while (--i >= 0)
- *s++ = *p++;
- fp->_IO_read_ptr = p;
- }
- more -= count;
- }
- if (more == 0 || __underflow (fp) == EOF)
- break;
- }
- return n - more;
-}
-
-#if 0
-/* Seems not to be needed. --drepper */
-int
-_IO_sync (fp)
- _IO_FILE *fp;
-{
- return 0;
-}
-#endif
-
-_IO_FILE *
-_IO_default_setbuf (fp, p, len)
- _IO_FILE *fp;
- char *p;
- _IO_ssize_t len;
-{
- if (_IO_SYNC (fp) == EOF)
- return NULL;
- if (p == NULL || len == 0)
- {
- fp->_flags |= _IO_UNBUFFERED;
- _IO_setb (fp, fp->_shortbuf, fp->_shortbuf+1, 0);
- }
- else
- {
- fp->_flags &= ~_IO_UNBUFFERED;
- _IO_setb (fp, p, p+len, 0);
- }
- fp->_IO_write_base = fp->_IO_write_ptr = fp->_IO_write_end = 0;
- fp->_IO_read_base = fp->_IO_read_ptr = fp->_IO_read_end = 0;
- return fp;
-}
-
-_IO_pos_t
-_IO_default_seekpos (fp, pos, mode)
- _IO_FILE *fp;
- _IO_pos_t pos;
- int mode;
-{
- return _IO_SEEKOFF (fp, _IO_pos_as_off (pos), 0, mode);
-}
-
-int
-_IO_default_doallocate (fp)
- _IO_FILE *fp;
-{
- char *buf;
-
- ALLOC_BUF (buf, _IO_BUFSIZ, EOF);
- _IO_setb (fp, buf, buf+_IO_BUFSIZ, 1);
- return 1;
-}
-
-void
-_IO_init (fp, flags)
- _IO_FILE *fp;
- int flags;
-{
- fp->_flags = _IO_MAGIC|flags;
- fp->_IO_buf_base = NULL;
- fp->_IO_buf_end = NULL;
- fp->_IO_read_base = NULL;
- fp->_IO_read_ptr = NULL;
- fp->_IO_read_end = NULL;
- fp->_IO_write_base = NULL;
- fp->_IO_write_ptr = NULL;
- fp->_IO_write_end = NULL;
- fp->_chain = NULL; /* Not necessary. */
-
- fp->_IO_save_base = NULL;
- fp->_IO_backup_base = NULL;
- fp->_IO_save_end = NULL;
- fp->_markers = NULL;
- fp->_cur_column = 0;
-#ifdef _IO_MTSAFE_IO
- _IO_lock_init (*fp->_lock);
-#endif
-}
-
-int
-_IO_default_sync (fp)
- _IO_FILE *fp;
-{
- return 0;
-}
-
-/* The way the C++ classes are mapped into the C functions in the
- current implementation, this function can get called twice! */
-
-void
-_IO_default_finish (fp, dummy)
- _IO_FILE *fp;
- int dummy;
-{
- struct _IO_marker *mark;
- if (fp->_IO_buf_base && !(fp->_flags & _IO_USER_BUF))
- {
- FREE_BUF (fp->_IO_buf_base, _IO_blen (fp));
- fp->_IO_buf_base = fp->_IO_buf_end = NULL;
- }
-
- for (mark = fp->_markers; mark != NULL; mark = mark->_next)
- mark->_sbuf = NULL;
-
- if (fp->_IO_save_base)
- {
- free (fp->_IO_save_base);
- fp->_IO_save_base = NULL;
- }
-
-#ifdef _IO_MTSAFE_IO
- _IO_lock_fini (*fp->_lock);
-#endif
-
- _IO_un_link (fp);
-}
-
-_IO_pos_t
-_IO_default_seekoff (fp, offset, dir, mode)
- _IO_FILE *fp;
- _IO_off_t offset;
- int dir;
- int mode;
-{
- return _IO_pos_BAD;
-}
-
-int
-_IO_sputbackc (fp, c)
- _IO_FILE *fp;
- int c;
-{
- int result;
-
- if (fp->_IO_read_ptr > fp->_IO_read_base
- && (unsigned char)fp->_IO_read_ptr[-1] == (unsigned char)c)
- {
- fp->_IO_read_ptr--;
- result = (unsigned char) c;
- }
- else
- result = _IO_PBACKFAIL (fp, c);
-
- if (result != EOF)
- fp->_flags &= ~_IO_EOF_SEEN;
-
- return result;
-}
-
-int
-_IO_sungetc (fp)
- _IO_FILE *fp;
-{
- int result;
-
- if (fp->_IO_read_ptr > fp->_IO_read_base)
- {
- fp->_IO_read_ptr--;
- result = (unsigned char) *fp->_IO_read_ptr;
- }
- else
- result = _IO_PBACKFAIL (fp, EOF);
-
- if (result != EOF)
- fp->_flags &= ~_IO_EOF_SEEN;
-
- return result;
-}
-
-#if 0 /* Work in progress */
-/* Seems not to be needed. */
-#if 0
-void
-_IO_set_column (fp, c)
- _IO_FILE *fp;
- int c;
-{
- if (c == -1)
- fp->_column = -1;
- else
- fp->_column = c - (fp->_IO_write_ptr - fp->_IO_write_base);
-}
-#else
-int
-_IO_set_column (fp, i)
- _IO_FILE *fp;
- int i;
-{
- fp->_cur_column = i + 1;
- return 0;
-}
-#endif
-#endif
-
-
-unsigned
-_IO_adjust_column (start, line, count)
- unsigned start;
- const char *line;
- int count;
-{
- const char *ptr = line + count;
- while (ptr > line)
- if (*--ptr == '\n')
- return line + count - ptr - 1;
- return start + count;
-}
-
-#if 0
-/* Seems not to be needed. --drepper */
-int
-_IO_get_column (fp)
- _IO_FILE *fp;
-{
- if (fp->_cur_column)
- return _IO_adjust_column (fp->_cur_column - 1,
- fp->_IO_write_base,
- fp->_IO_write_ptr - fp->_IO_write_base);
- return -1;
-}
-#endif
-
-int
-_IO_flush_all ()
-{
- int result = 0;
- _IO_FILE *fp;
- for (fp = _IO_list_all; fp != NULL; fp = fp->_chain)
- if (fp->_IO_write_ptr > fp->_IO_write_base
- && _IO_OVERFLOW (fp, EOF) == EOF)
- result = EOF;
- return result;
-}
-
-void
-_IO_flush_all_linebuffered ()
-{
- _IO_FILE *fp;
- for (fp = _IO_list_all; fp != NULL; fp = fp->_chain)
- if ((fp->_flags & _IO_NO_WRITES) == 0 && fp->_flags & _IO_LINE_BUF)
- _IO_OVERFLOW (fp, EOF);
-}
-
-static void _IO_unbuffer_all __P ((void));
-
-static void
-_IO_unbuffer_all ()
-{
- _IO_FILE *fp;
- for (fp = _IO_list_all; fp != NULL; fp = fp->_chain)
- if (! (fp->_flags & _IO_UNBUFFERED))
- _IO_SETBUF (fp, NULL, 0);
-}
-
-void
-_IO_cleanup ()
-{
- _IO_flush_all ();
-
- /* We currently don't have a reliable mechanism for making sure that
- C++ static destructors are executed in the correct order.
- So it is possible that other static destructors might want to
- write to cout - and they're supposed to be able to do so.
-
- The following will make the standard streambufs be unbuffered,
- which forces any output from late destructors to be written out. */
- _IO_unbuffer_all ();
-}
-
-void
-_IO_init_marker (marker, fp)
- struct _IO_marker *marker;
- _IO_FILE *fp;
-{
- marker->_sbuf = fp;
- if (_IO_in_put_mode (fp))
- _IO_switch_to_get_mode (fp);
- if (_IO_in_backup (fp))
- marker->_pos = fp->_IO_read_ptr - fp->_IO_read_end;
- else
- marker->_pos = fp->_IO_read_ptr - fp->_IO_read_base;
-
- /* Should perhaps sort the chain? */
- marker->_next = fp->_markers;
- fp->_markers = marker;
-}
-
-void
-_IO_remove_marker (marker)
- struct _IO_marker *marker;
-{
- /* Unlink from sb's chain. */
- struct _IO_marker **ptr = &marker->_sbuf->_markers;
- for (; ; ptr = &(*ptr)->_next)
- {
- if (*ptr == NULL)
- break;
- else if (*ptr == marker)
- {
- *ptr = marker->_next;
- return;
- }
- }
-#if 0
- if _sbuf has a backup area that is no longer needed, should we delete
- it now, or wait until the next underflow?
-#endif
-}
-
-#define BAD_DELTA EOF
-
-int
-_IO_marker_difference (mark1, mark2)
- struct _IO_marker *mark1;
- struct _IO_marker *mark2;
-{
- return mark1->_pos - mark2->_pos;
-}
-
-/* Return difference between MARK and current position of MARK's stream. */
-int
-_IO_marker_delta (mark)
- struct _IO_marker *mark;
-{
- int cur_pos;
- if (mark->_sbuf == NULL)
- return BAD_DELTA;
- if (_IO_in_backup (mark->_sbuf))
- cur_pos = mark->_sbuf->_IO_read_ptr - mark->_sbuf->_IO_read_end;
- else
- cur_pos = mark->_sbuf->_IO_read_ptr - mark->_sbuf->_IO_read_base;
- return mark->_pos - cur_pos;
-}
-
-int
-_IO_seekmark (fp, mark, delta)
- _IO_FILE *fp;
- struct _IO_marker *mark;
- int delta;
-{
- if (mark->_sbuf != fp)
- return EOF;
- if (mark->_pos >= 0)
- {
- if (_IO_in_backup (fp))
- _IO_switch_to_main_get_area (fp);
- fp->_IO_read_ptr = fp->_IO_read_base + mark->_pos;
- }
- else
- {
- if (!_IO_in_backup (fp))
- _IO_switch_to_backup_area (fp);
- fp->_IO_read_ptr = fp->_IO_read_end + mark->_pos;
- }
- return 0;
-}
-
-void
-_IO_unsave_markers (fp)
- _IO_FILE *fp;
-{
- struct _IO_marker *mark = fp->_markers;
- if (mark)
- {
-#ifdef TODO
- streampos offset = seekoff (0, ios::cur, ios::in);
- if (offset != EOF)
- {
- offset += eGptr () - Gbase ();
- for ( ; mark != NULL; mark = mark->_next)
- mark->set_streampos (mark->_pos + offset);
- }
- else
- {
- for ( ; mark != NULL; mark = mark->_next)
- mark->set_streampos (EOF);
- }
-#endif
- fp->_markers = 0;
- }
-
- if (_IO_have_backup (fp))
- _IO_free_backup_area (fp);
-}
-
-#if 0
-/* Seems not to be needed. --drepper */
-int
-_IO_nobackup_pbackfail (fp, c)
- _IO_FILE *fp;
- int c;
-{
- if (fp->_IO_read_ptr > fp->_IO_read_base)
- fp->_IO_read_ptr--;
- if (c != EOF && *fp->_IO_read_ptr != c)
- *fp->_IO_read_ptr = c;
- return (unsigned char) c;
-}
-#endif
-
-int
-_IO_default_pbackfail (fp, c)
- _IO_FILE *fp;
- int c;
-{
- if (fp->_IO_read_ptr <= fp->_IO_read_base)
- {
- /* Need to handle a filebuf in write mode (switch to read mode). FIXME!*/
- if (_IO_have_backup (fp) && !_IO_in_backup (fp))
- _IO_switch_to_backup_area (fp);
-
- if (!_IO_have_backup (fp))
- {
- /* No backup buffer: allocate one. */
- /* Use nshort buffer, if unused? (probably not) FIXME */
- int backup_size = 128;
- char *bbuf = (char *) malloc (backup_size);
- if (bbuf == NULL)
- return EOF;
- fp->_IO_save_base = bbuf;
- fp->_IO_save_end = fp->_IO_save_base + backup_size;
- fp->_IO_backup_base = fp->_IO_save_end;
- _IO_switch_to_backup_area (fp);
- }
- else if (fp->_IO_read_ptr <= fp->_IO_read_base)
- {
- /* Increase size of existing backup buffer. */
- _IO_size_t new_size;
- _IO_size_t old_size = fp->_IO_read_end - fp->_IO_read_base;
- char *new_buf;
- new_size = 2 * old_size;
- new_buf = (char *) malloc (new_size);
- if (new_buf == NULL)
- return EOF;
- memcpy (new_buf + (new_size - old_size), fp->_IO_read_base,
- old_size);
- free (fp->_IO_read_base);
- _IO_setg (fp, new_buf, new_buf + (new_size - old_size),
- new_buf + new_size);
- fp->_IO_backup_base = fp->_IO_read_ptr;
- }
- }
- --fp->_IO_read_ptr;
- if (c != EOF && *fp->_IO_read_ptr != c)
- *fp->_IO_read_ptr = c;
- return (unsigned char) *fp->_IO_read_ptr;
-}
-
-_IO_pos_t
-_IO_default_seek (fp, offset, dir)
- _IO_FILE *fp;
- _IO_off_t offset;
- int dir;
-{
- return _IO_pos_BAD;
-}
-
-int
-_IO_default_stat (fp, st)
- _IO_FILE *fp;
- void* st;
-{
- return EOF;
-}
-
-_IO_ssize_t
-_IO_default_read (fp, data, n)
- _IO_FILE* fp;
- void *data;
- _IO_ssize_t n;
-{
- return -1;
-}
-
-_IO_ssize_t
-_IO_default_write (fp, data, n)
- _IO_FILE *fp;
- const void *data;
- _IO_ssize_t n;
-{
- return 0;
-}
-
-
-#ifdef TODO
-#if defined(linux)
-#define IO_CLEANUP ;
-#endif
-
-#ifdef IO_CLEANUP
- IO_CLEANUP
-#else
-struct __io_defs {
- __io_defs() { }
- ~__io_defs() { _IO_cleanup (); }
-};
-__io_defs io_defs__;
-#endif
-
-#endif /* TODO */
-
-#ifdef weak_alias
-weak_alias (_IO_cleanup, _cleanup)
-#elif defined(_G_STDIO_USES_LIBIO) && defined(_G_HAVE_WEAK_SYMBOL)
-void _cleanup () __attribute__ ((weak, alias ("_IO_cleanup")));
-#endif
-
-#ifdef text_set_element
-text_set_element(__libc_atexit, _cleanup);
-#endif
diff --git a/contrib/libio/include/empty.h b/contrib/libio/include/empty.h
deleted file mode 100644
index dcbf758df9c7..000000000000
--- a/contrib/libio/include/empty.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/* Thread package specific definitions of stream lock type.
- Copyright (C) 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-#ifndef _LIBIO_LOCK_H
-#define _LIBIO_LOCK_H 1
-
-typedef void *_IO_lock_t;
-
-/* We need recursive (counting) mutexes. */
-#define _IO_lock_initializer NULL
-
-
-#define _IO_cleanup_region_start(_fct, _fp)
-#define _IO_cleanup_region_end(_doit)
-#define _IO_lock_init(_name)
-#define _IO_lock_fini(_name)
-#define _IO_lock_lock(_name)
-#define _IO_lock_unlock(_name)
-
-#endif /* libio-lock.h */
-/* this will be used later*/
diff --git a/contrib/libio/indstream.cc b/contrib/libio/indstream.cc
deleted file mode 100644
index 15a1bb2778d3..000000000000
--- a/contrib/libio/indstream.cc
+++ /dev/null
@@ -1,121 +0,0 @@
-/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License.
-
-Written by Per Bothner (bothner@cygnus.com). */
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-
-#include <indstream.h>
-
-indirectbuf::indirectbuf(streambuf *get, streambuf *put, int delete_mode)
-: streambuf()
-{
- _get_stream = get;
- _put_stream = put == NULL ? get : put;
- _delete_flags = delete_mode;
-}
-
-indirectbuf::~indirectbuf()
-{
- if (_delete_flags & ios::in) delete get_stream();
- if (_delete_flags & ios::out) delete put_stream();
-}
-
-streamsize indirectbuf::xsputn(const char* s, streamsize n)
-{
- return put_stream()->sputn(s, n);
-}
-
-streamsize indirectbuf::xsgetn(char* s, streamsize n)
-{
- return get_stream()->sgetn(s, n);
-}
-
-int indirectbuf::overflow(int c /* = EOF */)
-{
- if (c == EOF)
- return put_stream()->overflow(c);
- else
- return put_stream()->sputc(c);
-}
-
-int indirectbuf::underflow()
-{
- return get_stream()->sgetc();
-}
-
-int indirectbuf::uflow()
-{
- return get_stream()->sbumpc();
-}
-
-streampos indirectbuf::seekoff(streamoff off, _seek_dir dir, int mode)
-{
- int ret_val = 0;
- int select = mode == 0 ? (ios::in|ios::out) : mode;
- streambuf *gbuf = (select & ios::in) ? get_stream() : (streambuf*)NULL;
- streambuf *pbuf = (select & ios::out) ? put_stream() : (streambuf*)NULL;
- if (gbuf == pbuf)
- ret_val = gbuf->seekoff(off, dir, mode);
- else {
- if (gbuf)
- ret_val = gbuf->seekoff(off, dir, ios::in);
- if (pbuf && ret_val != EOF)
- ret_val = pbuf->seekoff(off, dir, ios::out);
- }
- return ret_val;
-}
-
-streampos indirectbuf::seekpos(streampos pos, int mode)
-{
- int ret_val = EOF;
- int select = mode == 0 ? (ios::in|ios::out) : mode;
- streambuf *gbuf = (select & ios::in) ? get_stream() : (streambuf*)NULL;
- streambuf *pbuf = (select & ios::out) ? put_stream() : (streambuf*)NULL;
- if (gbuf == pbuf && gbuf != NULL)
- ret_val = gbuf->seekpos(pos, mode);
- else {
- if (gbuf)
- ret_val = gbuf->seekpos(pos, ios::in);
- if (pbuf && ret_val != EOF)
- ret_val = pbuf->seekpos(pos, ios::out);
- }
- return ret_val;
-}
-
-int indirectbuf::sync()
-{
- streambuf *gbuf = get_stream();
- int get_ret_val = gbuf ? gbuf->sync() : 0;
- streambuf *pbuf = put_stream();
- int put_ret_val = (pbuf && pbuf != gbuf) ? pbuf->sync() : 0;
- return get_ret_val || put_ret_val;
-}
-
-int indirectbuf::pbackfail(int c)
-{
- return get_stream()->sputbackc(c);
-}
diff --git a/contrib/libio/indstream.h b/contrib/libio/indstream.h
deleted file mode 100644
index c4558623d079..000000000000
--- a/contrib/libio/indstream.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License.
-
-Written by Per Bothner (bothner@cygnus.com). */
-
-#ifndef _INDSTREAM_H
-#define _INDSTREAM_H
-
-#ifdef __GNUG__
-#pragma interface
-#endif
-
-#include <iostream.h>
-
-extern "C++" {
-// An indirectbuf is one that forwards all of its I/O requests
-// to another streambuf.
-// All get-related requests are sent to get_stream().
-// All put-related requests are sent to put_stream().
-
-// An indirectbuf can be used to implement Common Lisp
-// synonym-streams and two-way-streams.
-//
-// class synonymbuf : public indirectbuf {
-// Symbol *sym;
-// synonymbuf(Symbol *s) { sym = s; }
-// virtual streambuf *lookup_stream(int mode) {
-// return coerce_to_streambuf(lookup_value(sym)); }
-// };
-
-class indirectbuf : public streambuf {
- protected:
- streambuf *_get_stream; // Optional cache for get_stream().
- streambuf *_put_stream; // Optional cache for put_stream().
- int _delete_flags;
- public:
- streambuf *get_stream()
- { return _get_stream ? _get_stream : lookup_stream(ios::in); }
- streambuf *put_stream()
- { return _put_stream ? _put_stream : lookup_stream(ios::out); }
- virtual streambuf *lookup_stream(int/*mode*/) { return NULL; } // ERROR!
- indirectbuf(streambuf *get=NULL, streambuf *put=NULL, int delete_mode=0);
- virtual ~indirectbuf();
- virtual streamsize xsputn(const char* s, streamsize n);
- virtual streamsize xsgetn(char* s, streamsize n);
- virtual int underflow();
- virtual int uflow();
- virtual int overflow(int c = EOF);
- virtual streampos seekoff(streamoff, _seek_dir, int mode=ios::in|ios::out);
- virtual streampos seekpos(streampos pos, int mode = ios::in|ios::out);
- virtual int sync();
- virtual int pbackfail(int c);
-};
-} // extern "C++"
-
-#endif /* !_INDSTREAM_H */
diff --git a/contrib/libio/ioassign.cc b/contrib/libio/ioassign.cc
deleted file mode 100644
index 5b8e68bbf539..000000000000
--- a/contrib/libio/ioassign.cc
+++ /dev/null
@@ -1,49 +0,0 @@
-/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1994 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-/* Written by Per Bothner (bothner@cygnus.com). */
-
-#include <iostream.h>
-#include "libioP.h"
-
-// These method are provided for backward compatibility reasons.
-// It's generally poor style to use them.
-// They are not supported by the ANSI/ISO working paper.
-
-_IO_istream_withassign& _IO_istream_withassign::operator=(istream& rhs)
-{
- if (&rhs != (istream*)this)
- {
- init (rhs.rdbuf ());
- _gcount = 0;
- }
- return *this;
-}
-
-_IO_ostream_withassign& _IO_ostream_withassign::operator=(ostream& rhs)
-{
- if (&rhs != (ostream*)this)
- init (rhs.rdbuf ());
- return *this;
-}
diff --git a/contrib/libio/ioextend.cc b/contrib/libio/ioextend.cc
deleted file mode 100644
index a31ff36e6e58..000000000000
--- a/contrib/libio/ioextend.cc
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include <iostream.h>
-
-static int __xalloc = 0;
-
-int ios::xalloc()
-{
- return __xalloc++;
-}
-
-static ios::fmtflags __used_fmt_flags
-= ios::skipws | ios::left | ios::right | ios::internal
-| ios::dec | ios::oct | ios::hex | ios::showbase | ios::showpoint
-| ios::uppercase | ios::showpos | ios::scientific | ios::fixed
-#ifndef _IO_NEW_STREAMS
-| ios::dont_close
-#endif
-| ios::unitbuf | ios::stdio;
-
-ios::fmtflags ios::bitalloc()
-{
- fmtflags bit_to_try = (fmtflags)1;
- for (; bit_to_try; bit_to_try <<= 1)
- {
- if ((__used_fmt_flags & bit_to_try) == 0)
- {
- __used_fmt_flags |= bit_to_try;
- return bit_to_try;
- }
- }
- return 0;
-}
-
-// NOTE: This implementation of ios::iword and ios::pword assumes
-// that these methods are seldom used, so we want to minimize
-// the space and time overhead when NOT using these methods.
-//
-// ANSI specifies two conceptually-infinite arrays, one whose
-// elements are longs, and one whose elements are (void*)s.
-// We implement this as a single array, each of whose element is
-// a (struct ptr_and_long), which has space for both a long and a void*.
-// We also specify that (the i field of) the 0'th element of the array
-// contains the allocated length of the array (not counting that
-// initial element).
-
-struct ptr_and_long {
- void *p;
- long i;
-};
-
-static struct ptr_and_long&
-get_array_element(ios& io, int index)
-{
- if (index < 0)
- io._throw_failure();
- register struct ptr_and_long *array = (ptr_and_long*)io._arrays;
- int old_length = array == NULL ? 0 : array[0].i;
- if (index >= old_length)
- {
- register int i;
- int new_length = index + 10;
- register struct ptr_and_long *new_array
- = new ptr_and_long[1 + new_length];
- if (array != NULL)
- {
- for (i = 1; i <= old_length; i++)
- new_array[i] = array[i];
- delete [] array;
- }
- for (i = old_length + 1; i <= new_length; i++)
- {
- new_array[i].i = 0;
- new_array[i].p = NULL;
- }
- new_array[0].i = new_length;
- new_array[0].p = NULL;
- io._arrays = (void*)new_array;
- array = new_array;
- }
- return array[index+1];
-}
-
-long& ios::iword(int index)
-{
- return get_array_element(*this, index).i;
-}
-
-void*& ios::pword(int index)
-{
- return get_array_element(*this, index).p;
-}
-
-long ios::iword(int index) const
-{
- if (index < 0)
- _throw_failure();
- register struct ptr_and_long *pl_array = (ptr_and_long*)_arrays;
- int len = pl_array == NULL ? 0 : pl_array[0].i;
- return index >= len ? 0 : pl_array[index+1].i;
-}
-
-void* ios::pword(int index) const
-{
- if (index < 0)
- _throw_failure();
- register struct ptr_and_long *pl_array = (ptr_and_long*)_arrays;
- int len = pl_array == NULL ? 0 : pl_array[0].i;
- return index >= len ? 0 : pl_array[index+1].p;
-}
diff --git a/contrib/libio/iofclose.c b/contrib/libio/iofclose.c
deleted file mode 100644
index 7db336c5d539..000000000000
--- a/contrib/libio/iofclose.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/* Copyright (C) 1993, 1995, 1997 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#include "libioP.h"
-#ifdef __STDC__
-#include <stdlib.h>
-#endif
-
-int
-_IO_fclose (fp)
- _IO_FILE *fp;
-{
- int status;
-
- CHECK_FILE(fp, EOF);
-
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
- _IO_flockfile (fp);
- if (fp->_IO_file_flags & _IO_IS_FILEBUF)
- status = _IO_file_close_it (fp);
- else
- status = fp->_flags & _IO_ERR_SEEN ? -1 : 0;
- _IO_FINISH (fp);
- _IO_cleanup_region_end (1);
- if (fp != _IO_stdin && fp != _IO_stdout && fp != _IO_stderr)
- {
- fp->_IO_file_flags = 0;
- free(fp);
- }
-
- return status;
-}
-
-#ifdef weak_alias
-weak_alias (_IO_fclose, fclose)
-#elif defined(_G_STDIO_USES_LIBIO) && defined(_G_HAVE_WEAK_SYMBOL)
-int fclose (_IO_FILE *) __attribute__ ((weak, alias("_IO_fclose")));
-#endif
diff --git a/contrib/libio/iofdopen.c b/contrib/libio/iofdopen.c
deleted file mode 100644
index 841e7032b803..000000000000
--- a/contrib/libio/iofdopen.c
+++ /dev/null
@@ -1,134 +0,0 @@
-/* Copyright (C) 1993, 1994, 1997 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#ifdef __STDC__
-#include <stdlib.h>
-#endif
-#include "libioP.h"
-#include <fcntl.h>
-
-#ifndef _IO_fcntl
-#define _IO_fcntl fcntl
-#endif
-
-_IO_FILE *
-_IO_fdopen (fd, mode)
- int fd;
- const char *mode;
-{
- int read_write;
- int posix_mode = 0;
- struct locked_FILE
- {
- struct _IO_FILE_plus fp;
-#ifdef _IO_MTSAFE_IO
- _IO_lock_t lock;
-#endif
- } *new_f;
- int fd_flags;
-
- switch (*mode++)
- {
- case 'r':
- read_write = _IO_NO_WRITES;
- break;
- case 'w':
- read_write = _IO_NO_READS;
- break;
- case 'a':
- posix_mode = O_APPEND;
- read_write = _IO_NO_READS|_IO_IS_APPENDING;
- break;
- default:
- MAYBE_SET_EINVAL;
- return NULL;
- }
- if (mode[0] == '+' || (mode[0] == 'b' && mode[1] == '+'))
- read_write &= _IO_IS_APPENDING;
-#ifdef F_GETFL
- fd_flags = _IO_fcntl (fd, F_GETFL);
-#ifndef O_ACCMODE
-#define O_ACCMODE (O_RDONLY|O_WRONLY|O_RDWR)
-#endif
- if (fd_flags == -1
- || ((fd_flags & O_ACCMODE) == O_RDONLY && !(read_write & _IO_NO_WRITES))
- || ((fd_flags & O_ACCMODE) == O_WRONLY && !(read_write & _IO_NO_READS)))
- return NULL;
-
- /* The May 93 draft of P1003.4/D14.1 (redesignated as 1003.1b)
- [System Application Program Interface (API) Amendment 1:
- Realtime Extensions], Rationale B.8.3.3
- Open a Stream on a File Descriptor says:
-
- Although not explicitly required by POSIX.1, a good
- implementation of append ("a") mode would cause the
- O_APPEND flag to be set.
-
- (Historical implementations [such as Solaris2] do a one-time
- seek in fdopen.)
-
- However, we do not turn O_APPEND off if the mode is "w" (even
- though that would seem consistent) because that would be more
- likely to break historical programs.
- */
- if ((posix_mode & O_APPEND) && !(fd_flags & O_APPEND))
- {
-#ifdef F_SETFL
- if (_IO_fcntl (fd, F_SETFL, fd_flags | O_APPEND) == -1)
-#endif
- return NULL;
- }
-#endif
-
- new_f = (struct locked_FILE *) malloc (sizeof (struct locked_FILE));
- if (new_f == NULL)
- return NULL;
-#ifdef _IO_MTSAFE_IO
- new_f->fp.file._lock = &new_f->lock;
-#endif
- _IO_init (&new_f->fp.file, 0);
- _IO_JUMPS (&new_f->fp.file) = &_IO_file_jumps;
- _IO_file_init (&new_f->fp.file);
-#if !_IO_UNIFIED_JUMPTABLES
- new_f->fp.vtable = NULL;
-#endif
- if (_IO_file_attach (&new_f->fp.file, fd) == NULL)
- {
- _IO_un_link (&new_f->fp.file);
- free (new_f);
- return NULL;
- }
- new_f->fp.file._flags &= ~_IO_DELETE_DONT_CLOSE;
-
- new_f->fp.file._IO_file_flags =
- _IO_mask_flags (&new_f->fp.file, read_write,
- _IO_NO_READS+_IO_NO_WRITES+_IO_IS_APPENDING);
-
- return (_IO_FILE *) &new_f->fp;
-}
-
-#ifdef weak_alias
-weak_alias (_IO_fdopen, fdopen)
-#endif
diff --git a/contrib/libio/iofeof.c b/contrib/libio/iofeof.c
deleted file mode 100644
index 7bf8cba285be..000000000000
--- a/contrib/libio/iofeof.c
+++ /dev/null
@@ -1,45 +0,0 @@
-/* Copyright (C) 1993, 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#include "libioP.h"
-#include "stdio.h"
-
-int
-_IO_feof (fp)
- _IO_FILE* fp;
-{
- int result;
- CHECK_FILE (fp, EOF);
- _IO_flockfile (fp);
- result = _IO_feof_unlocked (fp);
- _IO_funlockfile (fp);
- return result;
-}
-
-#ifdef weak_alias
-weak_alias (_IO_feof, feof)
-#elif defined(_G_STDIO_USES_LIBIO) && defined(_G_HAVE_WEAK_SYMBOL)
-int feof (_IO_FILE *) __attribute__ ((weak, alias("_IO_feof")));
-#endif
diff --git a/contrib/libio/ioferror.c b/contrib/libio/ioferror.c
deleted file mode 100644
index 3019e796a1f6..000000000000
--- a/contrib/libio/ioferror.c
+++ /dev/null
@@ -1,45 +0,0 @@
-/* Copyright (C) 1993, 1995, 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#include "libioP.h"
-#include "stdio.h"
-
-int
-_IO_ferror (fp)
- _IO_FILE* fp;
-{
- int result;
- CHECK_FILE (fp, EOF);
- _IO_flockfile (fp);
- result = _IO_ferror_unlocked (fp);
- _IO_funlockfile (fp);
- return result;
-}
-
-#ifdef weak_alias
-weak_alias (_IO_ferror, ferror)
-#elif defined(_G_STDIO_USES_LIBIO) && defined(_G_HAVE_WEAK_SYMBOL)
-int ferror (_IO_FILE *) __attribute__ ((weak, alias("_IO_ferror")));
-#endif
diff --git a/contrib/libio/iofflush.c b/contrib/libio/iofflush.c
deleted file mode 100644
index 540c99d535ee..000000000000
--- a/contrib/libio/iofflush.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/* Copyright (C) 1993, 1995, 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#include "libioP.h"
-#include <stdio.h>
-
-int
-_IO_fflush (fp)
- _IO_FILE *fp;
-{
- if (fp == NULL)
- return _IO_flush_all ();
- else
- {
- int result;
- CHECK_FILE (fp, EOF);
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
- _IO_flockfile (fp);
- result = _IO_SYNC (fp) ? EOF : 0;
- _IO_cleanup_region_end (1);
- return result;
- }
-}
-
-#ifdef weak_alias
-weak_alias (_IO_fflush, fflush)
-#endif
diff --git a/contrib/libio/iofflush_u.c b/contrib/libio/iofflush_u.c
deleted file mode 100644
index b46ae4a3f949..000000000000
--- a/contrib/libio/iofflush_u.c
+++ /dev/null
@@ -1,40 +0,0 @@
-/* Copyright (C) 1993, 1995, 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#include "libioP.h"
-#include <stdio.h>
-
-int
-fflush_unlocked (fp)
- _IO_FILE *fp;
-{
- if (fp == NULL)
- return _IO_flush_all ();
- else
- {
- CHECK_FILE (fp, EOF);
- return _IO_SYNC (fp) ? EOF : 0;
- }
-}
diff --git a/contrib/libio/iofgetpos.c b/contrib/libio/iofgetpos.c
deleted file mode 100644
index 716be4bca107..000000000000
--- a/contrib/libio/iofgetpos.c
+++ /dev/null
@@ -1,55 +0,0 @@
-/* Copyright (C) 1993, 1995, 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#include "libioP.h"
-#include <errno.h>
-/* ANSI explicitly requires setting errno to a positive value on failure. */
-
-int
-_IO_fgetpos (fp, posp)
- _IO_FILE* fp;
- _IO_fpos_t *posp;
-{
- _IO_fpos_t pos;
- CHECK_FILE (fp, EOF);
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
- _IO_flockfile (fp);
- pos = _IO_seekoff (fp, 0, _IO_seek_cur, 0);
- _IO_cleanup_region_end (1);
- if (pos == _IO_pos_BAD)
- {
-#ifdef EIO
- if (errno == 0)
- __set_errno (EIO);
-#endif
- return EOF;
- }
- *posp = pos;
- return 0;
-}
-
-#ifdef weak_alias
-weak_alias (_IO_fgetpos, fgetpos)
-#endif
diff --git a/contrib/libio/iofgets.c b/contrib/libio/iofgets.c
deleted file mode 100644
index 74754d5d1ea8..000000000000
--- a/contrib/libio/iofgets.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/* Copyright (C) 1993, 1995, 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#include "libioP.h"
-#include <stdio.h>
-
-char *
-_IO_fgets (buf, n, fp)
- char *buf;
- int n;
- _IO_FILE *fp;
-{
- _IO_size_t count;
- char *result;
- CHECK_FILE (fp, NULL);
- if (n <= 0)
- return NULL;
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
- _IO_flockfile (fp);
- count = _IO_getline (fp, buf, n - 1, '\n', 1);
- if (count == 0 || (fp->_IO_file_flags & _IO_ERR_SEEN))
- result = NULL;
- else
- {
- buf[count] = '\0';
- result = buf;
- }
- _IO_cleanup_region_end (1);
- return result;
-}
-
-#ifdef weak_alias
-weak_alias (_IO_fgets, fgets)
-#endif
diff --git a/contrib/libio/iofopen.c b/contrib/libio/iofopen.c
deleted file mode 100644
index 1dbeccb81a8f..000000000000
--- a/contrib/libio/iofopen.c
+++ /dev/null
@@ -1,64 +0,0 @@
-/* Copyright (C) 1993, 1997 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#include "libioP.h"
-#ifdef __STDC__
-#include <stdlib.h>
-#endif
-
-_IO_FILE *
-_IO_fopen (filename, mode)
- const char *filename;
- const char *mode;
-{
- struct locked_FILE
- {
- struct _IO_FILE_plus fp;
-#ifdef _IO_MTSAFE_IO
- _IO_lock_t lock;
-#endif
- } *new_f = (struct locked_FILE *) malloc (sizeof (struct locked_FILE));
-
- if (new_f == NULL)
- return NULL;
-#ifdef _IO_MTSAFE_IO
- new_f->fp.file._lock = &new_f->lock;
-#endif
- _IO_init (&new_f->fp.file, 0);
- _IO_JUMPS (&new_f->fp.file) = &_IO_file_jumps;
- _IO_file_init (&new_f->fp.file);
-#if !_IO_UNIFIED_JUMPTABLES
- new_f->fp.vtable = NULL;
-#endif
- if (_IO_file_fopen (&new_f->fp.file, filename, mode) != NULL)
- return (_IO_FILE *) &new_f->fp;
- _IO_un_link (&new_f->fp.file);
- free (new_f);
- return NULL;
-}
-
-#ifdef weak_alias
-weak_alias (_IO_fopen, fopen)
-#endif
diff --git a/contrib/libio/iofprintf.c b/contrib/libio/iofprintf.c
deleted file mode 100644
index 4dc9d3f6617e..000000000000
--- a/contrib/libio/iofprintf.c
+++ /dev/null
@@ -1,51 +0,0 @@
-/* Copyright (C) 1993, 1997 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#include "libioP.h"
-
-#ifdef __STDC__
-#include <stdarg.h>
-#else
-#include <varargs.h>
-#endif
-
-int
-#ifdef __STDC__
-_IO_fprintf (_IO_FILE *fp, const char* format, ...)
-#else
-_IO_fprintf (fp, format, va_alist)
- _IO_FILE *fp;
- char *format;
- va_dcl
-#endif
-{
- int ret;
- va_list args;
- CHECK_FILE (fp, -1);
- _IO_va_start (args, format);
- ret = _IO_vfprintf (fp, format, args);
- va_end (args);
- return ret;
-}
diff --git a/contrib/libio/iofputs.c b/contrib/libio/iofputs.c
deleted file mode 100644
index 1a329bbe26fc..000000000000
--- a/contrib/libio/iofputs.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/* Copyright (C) 1993, 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#include "libioP.h"
-#include <string.h>
-
-int
-_IO_fputs (str, fp)
- const char *str;
- _IO_FILE *fp;
-{
- _IO_size_t len = strlen (str);
- int result;
- CHECK_FILE (fp, EOF);
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
- _IO_flockfile (fp);
- if (_IO_sputn (fp, str, len) != len)
- result = EOF;
- else
- result = 1;
- _IO_cleanup_region_end (1);
- return result;
-}
-
-#ifdef weak_alias
-weak_alias (_IO_fputs, fputs)
-#endif
diff --git a/contrib/libio/iofread.c b/contrib/libio/iofread.c
deleted file mode 100644
index c83d2b638c97..000000000000
--- a/contrib/libio/iofread.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/* Copyright (C) 1993, 1995, 1997 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#include "libioP.h"
-
-_IO_size_t
-_IO_fread (buf, size, count, fp)
- void *buf;
- _IO_size_t size;
- _IO_size_t count;
- _IO_FILE *fp;
-{
- _IO_size_t bytes_requested = size*count;
- _IO_size_t bytes_read;
- CHECK_FILE (fp, 0);
- if (bytes_requested == 0)
- return 0;
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
- _IO_flockfile (fp);
- bytes_read = _IO_sgetn (fp, (char *) buf, bytes_requested);
- _IO_cleanup_region_end (1);
- return bytes_requested == bytes_read ? count : bytes_read / size;
-}
-
-#ifdef weak_alias
-weak_alias (_IO_fread, fread)
-#endif
diff --git a/contrib/libio/iofscanf.c b/contrib/libio/iofscanf.c
deleted file mode 100644
index 3e12d9b5315c..000000000000
--- a/contrib/libio/iofscanf.c
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include "libioP.h"
-
-#ifdef __STDC__
-#include <stdarg.h>
-#else
-#include <varargs.h>
-#endif
-
-int
-_IO_fscanf
-#ifdef __STDC__
- (_IO_FILE *fp, const char* format, ...)
-#else
-(fp, format, va_alist) _IO_FILE *fp; char *format; va_dcl
-#endif
-{
- int ret;
- va_list args;
- CHECK_FILE(fp, EOF);
- _IO_va_start(args, format);
- ret = _IO_vfscanf(fp, format, args, NULL);
- va_end(args);
- return ret;
-}
diff --git a/contrib/libio/iofsetpos.c b/contrib/libio/iofsetpos.c
deleted file mode 100644
index a8d816f5a393..000000000000
--- a/contrib/libio/iofsetpos.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/* Copyright (C) 1993, 1995, 1997 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#include <libioP.h>
-#include <errno.h>
-
-int
-_IO_fsetpos (fp, posp)
- _IO_FILE *fp;
- const _IO_fpos_t *posp;
-{
- int result;
- CHECK_FILE (fp, EOF);
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
- _IO_flockfile (fp);
- if (_IO_seekpos (fp, *posp, _IOS_INPUT|_IOS_OUTPUT) == _IO_pos_BAD)
- {
- /* ANSI explicitly requires setting errno to a positive value on
- failure. */
-#ifdef EIO
- if (errno == 0)
- __set_errno (EIO);
-#endif
- result = EOF;
- }
- else
- result = 0;
- _IO_cleanup_region_end (1);
- return result;
-}
-
-#ifdef weak_alias
-weak_alias (_IO_fsetpos, fsetpos)
-#endif
diff --git a/contrib/libio/ioftell.c b/contrib/libio/ioftell.c
deleted file mode 100644
index d8a1ce1d2423..000000000000
--- a/contrib/libio/ioftell.c
+++ /dev/null
@@ -1,53 +0,0 @@
-/* Copyright (C) 1993, 1995, 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#include "libioP.h"
-#include <errno.h>
-/* ANSI explicily requires setting errno to a positive value on failure. */
-
-long int
-_IO_ftell (fp)
- _IO_FILE *fp;
-{
- _IO_pos_t pos;
- CHECK_FILE (fp, -1L);
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
- _IO_flockfile (fp);
- pos = _IO_seekoff (fp, 0, _IO_seek_cur, 0);
- _IO_cleanup_region_end (1);
- if (pos == _IO_pos_BAD)
- {
-#ifdef EIO
- if (errno == 0)
- __set_errno (EIO);
-#endif
- return -1L;
- }
- return _IO_pos_as_off (pos);
-}
-
-#ifdef weak_alias
-weak_alias (_IO_ftell, ftell)
-#endif
diff --git a/contrib/libio/iofwrite.c b/contrib/libio/iofwrite.c
deleted file mode 100644
index 5bc525ffc704..000000000000
--- a/contrib/libio/iofwrite.c
+++ /dev/null
@@ -1,54 +0,0 @@
-/* Copyright (C) 1993, 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#include "libioP.h"
-
-_IO_size_t
-_IO_fwrite (buf, size, count, fp)
- const void *buf;
- _IO_size_t size;
- _IO_size_t count;
- _IO_FILE *fp;
-{
- _IO_size_t request = size * count;
- _IO_size_t written;
- CHECK_FILE (fp, 0);
- if (request == 0)
- return 0;
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
- _IO_flockfile (fp);
- written = _IO_sputn (fp, (const char *) buf, request);
- _IO_cleanup_region_end (1);
- /* Many traditional implementations return 0 if size==0 && count > 0,
- but ANSI requires us to return count in this case. */
- if (written == request)
- return count;
- else
- return written / size;
-}
-
-#ifdef weak_alias
-weak_alias (_IO_fwrite, fwrite)
-#endif
diff --git a/contrib/libio/iogetc.c b/contrib/libio/iogetc.c
deleted file mode 100644
index 6a11e47334dc..000000000000
--- a/contrib/libio/iogetc.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/* Copyright (C) 1993, 1995, 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#include "libioP.h"
-#include "stdio.h"
-
-#undef _IO_getc
-
-int
-_IO_getc (fp)
- _IO_FILE *fp;
-{
- int result;
- CHECK_FILE (fp, EOF);
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
- _IO_flockfile (fp);
- result = _IO_getc_unlocked (fp);
- _IO_cleanup_region_end (1);
- return result;
-}
-
-#undef getc
-
-#ifdef weak_alias
-weak_alias (_IO_getc, getc)
-#elif defined(_G_STDIO_USES_LIBIO) && defined(_G_HAVE_WEAK_SYMBOL)
-int getc (_IO_FILE *) __attribute__ ((weak, alias("_IO_getc")));
-#endif
diff --git a/contrib/libio/iogetdelim.c b/contrib/libio/iogetdelim.c
deleted file mode 100644
index 50918b3e8dcc..000000000000
--- a/contrib/libio/iogetdelim.c
+++ /dev/null
@@ -1,125 +0,0 @@
-/* Copyright (C) 1994, 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#ifdef __STDC__
-#include <stdlib.h>
-#endif
-#include "libioP.h"
-#include <string.h>
-#include <errno.h>
-
-/* Read up to (and including) a TERMINATOR from FP into *LINEPTR
- (and null-terminate it). *LINEPTR is a pointer returned from malloc (or
- NULL), pointing to *N characters of space. It is realloc'ed as
- necessary. Returns the number of characters read (not including the
- null terminator), or -1 on error or EOF. */
-
-_IO_ssize_t
-_IO_getdelim (lineptr, n, delimiter, fp)
- char **lineptr;
- _IO_size_t *n;
- int delimiter;
- _IO_FILE *fp;
-{
- int result;
- _IO_ssize_t cur_len = 0;
- _IO_ssize_t len;
-
- if (lineptr == NULL || n == NULL)
- {
- MAYBE_SET_EINVAL;
- return -1;
- }
- CHECK_FILE (fp, -1);
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
- _IO_flockfile (fp);
- if (_IO_ferror_unlocked (fp))
- {
- result = -1;
- goto unlock_return;
- }
-
- if (*lineptr == NULL || *n == 0)
- {
- *n = 120;
- *lineptr = (char *) malloc (*n);
- if (*lineptr == NULL)
- {
- result = -1;
- goto unlock_return;
- }
- }
-
- len = fp->_IO_read_end - fp->_IO_read_ptr;
- if (len <= 0)
- {
- if (__underflow (fp) == EOF)
- {
- result = -1;
- goto unlock_return;
- }
- len = fp->_IO_read_end - fp->_IO_read_ptr;
- }
-
- for (;;)
- {
- _IO_size_t needed;
- char *t;
- t = (char *) memchr ((void *) fp->_IO_read_ptr, delimiter, len);
- if (t != NULL)
- len = (t - fp->_IO_read_ptr) + 1;
- /* Make enough space for len+1 (for final NUL) bytes. */
- needed = cur_len + len + 1;
- if (needed > *n)
- {
- if (needed < 2 * *n)
- needed = 2 * *n; /* Be generous. */
- *n = needed;
- *lineptr = (char *) realloc (*lineptr, needed);
- if (*lineptr == NULL)
- {
- result = -1;
- goto unlock_return;
- }
- }
- memcpy (*lineptr + cur_len, (void *) fp->_IO_read_ptr, len);
- fp->_IO_read_ptr += len;
- cur_len += len;
- if (t != NULL || __underflow (fp) == EOF)
- break;
- len = fp->_IO_read_end - fp->_IO_read_ptr;
- }
- (*lineptr)[cur_len] = '\0';
- result = cur_len;
-
-unlock_return:
- _IO_cleanup_region_end (1);
- return result;
-}
-
-#ifdef weak_alias
-weak_alias (_IO_getdelim, __getdelim)
-weak_alias (_IO_getdelim, getdelim)
-#endif
diff --git a/contrib/libio/iogetline.c b/contrib/libio/iogetline.c
deleted file mode 100644
index 5aac9b56387e..000000000000
--- a/contrib/libio/iogetline.c
+++ /dev/null
@@ -1,112 +0,0 @@
-/* Copyright (C) 1993, 1997, 1998 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#include "libioP.h"
-#include <string.h>
-
-#if defined(_LIBC) || !_G_HAVE_IO_GETLINE_INFO
-
-_IO_size_t
-_IO_getline (fp, buf, n, delim, extract_delim)
- _IO_FILE *fp;
- char *buf;
- _IO_size_t n;
- int delim;
- int extract_delim;
-{
- return _IO_getline_info (fp, buf, n, delim, extract_delim, (int *) 0);
-}
-
-/* Algorithm based on that used by Berkeley pre-4.4 fgets implementation.
-
- Read chars into buf (of size n), until delim is seen.
- Return number of chars read (at most n).
- Does not put a terminating '\0' in buf.
- If extract_delim < 0, leave delimiter unread.
- If extract_delim > 0, insert delim in output. */
-
-_IO_size_t
-_IO_getline_info (fp, buf, n, delim, extract_delim, eof)
- _IO_FILE *fp;
- char *buf;
- _IO_size_t n;
- int delim;
- int extract_delim;
- int *eof;
-{
- char *ptr = buf;
- if (eof) *eof = 0;
- while (n != 0)
- {
- _IO_ssize_t len = fp->_IO_read_end - fp->_IO_read_ptr;
- if (len <= 0)
- {
- int c = __uflow (fp);
- if (c == EOF)
- {
- if (eof) *eof = c;
- break;
- }
- if (c == delim)
- {
- if (extract_delim > 0)
- *ptr++ = c;
- else if (extract_delim < 0)
- _IO_sputbackc (fp, c);
- return ptr - buf;
- }
- *ptr++ = c;
- n--;
- }
- else
- {
- char *t;
- if ((_IO_size_t) len >= n)
- len = n;
- t = (char *) memchr ((void *) fp->_IO_read_ptr, delim, len);
- if (t != NULL)
- {
- _IO_size_t old_len = ptr-buf;
- len = t - fp->_IO_read_ptr;
- if (extract_delim >= 0)
- {
- ++t;
- if (extract_delim > 0)
- ++len;
- }
- memcpy ((void *) ptr, (void *) fp->_IO_read_ptr, len);
- fp->_IO_read_ptr = t;
- return old_len + len;
- }
- memcpy ((void *) ptr, (void *) fp->_IO_read_ptr, len);
- fp->_IO_read_ptr += len;
- ptr += len;
- n -= len;
- }
- }
- return ptr - buf;
-}
-
-#endif /* Defined(_LIBC) || !_G_HAVE_IO_GETLINE_INFO */
diff --git a/contrib/libio/iogets.c b/contrib/libio/iogets.c
deleted file mode 100644
index 9e88ca1037ae..000000000000
--- a/contrib/libio/iogets.c
+++ /dev/null
@@ -1,71 +0,0 @@
-/* Copyright (C) 1993, 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#include "libioP.h"
-#include <limits.h>
-
-char*
-_IO_gets (buf)
- char *buf;
-{
- _IO_size_t count;
- int ch;
- char *retval;
-
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
- _IO_stdin);
- _IO_flockfile (_IO_stdin);
- ch = _IO_getc_unlocked (_IO_stdin);
- if (ch == EOF)
- {
- retval = NULL;
- goto unlock_return;
- }
- if (ch == '\n')
- count = 0;
- else
- {
- buf[0] = (char) ch;
- count = _IO_getline (_IO_stdin, buf + 1, INT_MAX, '\n', 0) + 1;
- if (_IO_stdin->_IO_file_flags & _IO_ERR_SEEN)
- {
- retval = NULL;
- goto unlock_return;
- }
- }
- buf[count] = 0;
- retval = buf;
-unlock_return:
- _IO_cleanup_region_end (1);
- return retval;
-}
-
-#ifdef weak_alias
-weak_alias (_IO_gets, gets)
-#endif
-
-#ifdef _LIBC
-link_warning (gets, "the `gets' function is dangerous and should not be used.")
-#endif
diff --git a/contrib/libio/ioignore.c b/contrib/libio/ioignore.c
deleted file mode 100644
index ac0678ed7b99..000000000000
--- a/contrib/libio/ioignore.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include "libioP.h"
-
-int
-_IO_ignore (fp, n)
- _IO_FILE *fp;
- _IO_size_t n;
-{
- register _IO_size_t more = n;
- for (;;)
- {
- _IO_ssize_t count = fp->_IO_read_end - fp->_IO_read_ptr;
- if (count > 0)
- {
- if (count > more)
- count = more;
- fp->_IO_read_ptr += count;
- more -= count;
- }
- if (more == 0 || __underflow(fp) == EOF)
- break;
- }
- return n - more;
-}
diff --git a/contrib/libio/iolibio.h b/contrib/libio/iolibio.h
deleted file mode 100644
index 0ebc14f7ac2b..000000000000
--- a/contrib/libio/iolibio.h
+++ /dev/null
@@ -1,67 +0,0 @@
-#include <libio.h>
-
-/* These emulate stdio functionality, but with a different name
- (_IO_ungetc instead of ungetc), and using _IO_FILE instead of FILE. */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-extern int _IO_fclose __P((_IO_FILE*));
-extern _IO_FILE *_IO_fdopen __P((int, const char*));
-extern int _IO_fflush __P((_IO_FILE*));
-extern int _IO_fgetpos __P((_IO_FILE*, _IO_fpos_t*));
-extern char* _IO_fgets __P((char*, int, _IO_FILE*));
-extern _IO_FILE *_IO_fopen __P((const char*, const char*));
-extern int _IO_fprintf __P((_IO_FILE*, const char*, ...));
-extern int _IO_fputs __P((const char*, _IO_FILE*));
-extern int _IO_fsetpos __P((_IO_FILE*, const _IO_fpos_t *));
-extern long int _IO_ftell __P((_IO_FILE*));
-extern _IO_size_t _IO_fread __P((void*, _IO_size_t, _IO_size_t, _IO_FILE*));
-extern _IO_size_t _IO_fwrite __P((const void*,
- _IO_size_t, _IO_size_t, _IO_FILE*));
-extern char* _IO_gets __P((char*));
-extern void _IO_perror __P((const char*));
-extern int _IO_printf __P((const char*, ...));
-extern int _IO_puts __P((const char*));
-extern int _IO_scanf __P((const char*, ...));
-extern void _IO_setbuffer __P((_IO_FILE *, char*, _IO_size_t));
-extern int _IO_setvbuf __P((_IO_FILE*, char*, int, _IO_size_t));
-extern int _IO_sscanf __P((const char*, const char*, ...));
-extern int _IO_sprintf __P((char *, const char*, ...));
-extern int _IO_ungetc __P((int, _IO_FILE*));
-extern int _IO_vsscanf __P((const char *, const char *, _IO_va_list));
-extern int _IO_vsprintf __P((char*, const char*, _IO_va_list));
-
-struct obstack;
-extern int _IO_obstack_vprintf __P ((struct obstack *, const char *,
- _IO_va_list));
-extern int _IO_obstack_printf __P ((struct obstack *, const char *, ...));
-#ifndef _IO_pos_BAD
-# if defined(_G_IO_IO_FILE_VERSION) && _G_IO_IO_FILE_VERSION == 0x20001
-# define _IO_pos_BAD ((_IO_off64_t) -1)
-# else
-# define _IO_pos_BAD ((_IO_off_t) -1)
-# endif
-#endif
-#define _IO_clearerr(FP) ((FP)->_flags &= ~(_IO_ERR_SEEN|_IO_EOF_SEEN))
-#define _IO_fseek(__fp, __offset, __whence) \
- (_IO_seekoff(__fp, __offset, __whence, _IOS_INPUT|_IOS_OUTPUT) == _IO_pos_BAD ? EOF : 0)
-#define _IO_rewind(FILE) (void)_IO_seekoff(FILE, 0, 0, _IOS_INPUT|_IOS_OUTPUT)
-#define _IO_vprintf(FORMAT, ARGS) _IO_vfprintf(_IO_stdout, FORMAT, ARGS)
-#if _G_IO_IO_FILE_VERSION == 0x20001
-#define _IO_freopen(FILENAME, MODE, FP) \
- (_IO_file_close_it(FP), _IO_file_fopen(FP, FILENAME, MODE, 0))
-#else
-#define _IO_freopen(FILENAME, MODE, FP) \
- (_IO_file_close_it(FP), _IO_file_fopen(FP, FILENAME, MODE))
-#endif
-#define _IO_fileno(FP) ((FP)->_fileno)
-extern _IO_FILE* _IO_popen __P((const char*, const char*));
-#define _IO_pclose _IO_fclose
-#define _IO_setbuf(_FP, _BUF) _IO_setbuffer(_FP, _BUF, _IO_BUFSIZ)
-#define _IO_setlinebuf(_FP) _IO_setvbuf(_FP, NULL, 1, 0)
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/contrib/libio/iomanip.cc b/contrib/libio/iomanip.cc
deleted file mode 100644
index fddba55a2b98..000000000000
--- a/contrib/libio/iomanip.cc
+++ /dev/null
@@ -1,90 +0,0 @@
-/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-
-#include "iomanip.h"
-
-
-// Those functions are called through a pointer,
-// thus it does not make sense, to inline them.
-
-ios & __iomanip_setbase (ios& i, int n)
-{
- ios::fmtflags b;
- switch (n)
- {
- case 8:
- b = ios::oct; break;
- case 10:
- b = ios::dec; break;
- case 16:
- b = ios::hex; break;
- default:
- b = 0;
- }
- i.setf(b, ios::basefield);
- return i;
-}
-
-ios & __iomanip_setfill (ios& i, int n)
-{
- //FIXME if ( i.flags() & ios::widechar )
- i.fill( (char) n);
- //FIXME else
- //FIXME i.fill( (wchar) n);
- return i;
-}
-
-ios & __iomanip_setprecision (ios& i, int n)
-{
- i.precision(n);
- return i;
-}
-ios & __iomanip_setw (ios& i, int n)
-{
- i.width(n);
- return i;
-}
-
-ios & __iomanip_setiosflags (ios& i, ios::fmtflags n)
-{
- i.setf(n,n);
- return i;
-}
-
-ios & __iomanip_resetiosflags (ios& i, ios::fmtflags n)
-{
- i.setf(0,n);
- return i;
-}
-
-template class smanip<int>;
-template class smanip<ios::fmtflags>;
-template istream& operator>>(istream&, const smanip<int>&);
-template istream& operator>>(istream&, const smanip<ios::fmtflags>&);
-template ostream& operator<<(ostream&, const smanip<int>&);
-template ostream& operator<<(ostream&, const smanip<ios::fmtflags>&);
diff --git a/contrib/libio/iomanip.h b/contrib/libio/iomanip.h
deleted file mode 100644
index 7c0232ed1e16..000000000000
--- a/contrib/libio/iomanip.h
+++ /dev/null
@@ -1,180 +0,0 @@
-/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#ifndef _IOMANIP_H
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _IOMANIP_H
-
-#include <iostream.h>
-
-extern "C++" {
-//-----------------------------------------------------------------------------
-// Parametrized Manipulators as specified by ANSI draft
-//-----------------------------------------------------------------------------
-
-//-----------------------------------------------------------------------------
-// Stream Manipulators
-//-----------------------------------------------------------------------------
-//
-template<class TP> class smanip; // TP = Type Param
-
-template<class TP> class sapp {
- ios& (*_f)(ios&, TP);
-public:
- sapp(ios& (*f)(ios&, TP)) : _f(f) {}
- //
- smanip<TP> operator()(TP a)
- { return smanip<TP>(_f, a); }
-};
-
-template<class TP>
-inline istream& operator>>(istream& i, const smanip<TP>& m);
-template<class TP>
-inline ostream& operator<<(ostream& o, const smanip<TP>& m);
-
-template <class TP> class smanip {
- ios& (*_f)(ios&, TP);
- TP _a;
-public:
- smanip(ios& (*f)(ios&, TP), TP a) : _f(f), _a(a) {}
- //
- friend
- istream& operator>> <>(istream& i, const smanip<TP>& m);
- friend
- ostream& operator<< <>(ostream& o, const smanip<TP>& m);
-};
-
-#ifdef __GNUG__
-__extension__ extern template class smanip<int>;
-__extension__ extern template class smanip<ios::fmtflags>;
-#endif
-
-template<class TP>
-inline istream& operator>>(istream& i, const smanip<TP>& m)
-{ (*m._f)(i, m._a); return i; }
-
-template<class TP>
-inline ostream& operator<<(ostream& o, const smanip<TP>& m)
-{ (*m._f)(o, m._a); return o;}
-
-#ifdef __GNUG__
-__extension__ extern
-template istream& operator>>(istream&, const smanip<int>&);
-__extension__ extern
-template istream& operator>>(istream&, const smanip<ios::fmtflags>&);
-__extension__ extern
-template ostream& operator<<(ostream&, const smanip<int>&);
-__extension__ extern
-template ostream& operator<<(ostream&, const smanip<ios::fmtflags>&);
-#endif
-
-//-----------------------------------------------------------------------------
-// Input-Stream Manipulators
-//-----------------------------------------------------------------------------
-//
-template<class TP> class imanip;
-
-template<class TP> class iapp {
- istream& (*_f)(istream&, TP);
-public:
- iapp(istream& (*f)(istream&,TP)) : _f(f) {}
- //
- imanip<TP> operator()(TP a)
- { return imanip<TP>(_f, a); }
-};
-
-template <class TP>
-inline istream& operator>>(istream&, const imanip<TP>&);
-
-template <class TP> class imanip {
- istream& (*_f)(istream&, TP);
- TP _a;
-public:
- imanip(istream& (*f)(istream&, TP), TP a) : _f(f), _a(a) {}
- //
- friend
- istream& operator>> <>(istream& i, const imanip<TP>& m);
-};
-
-template <class TP>
-inline istream& operator>>(istream& i, const imanip<TP>& m)
-{ return (*m._f)( i, m._a); }
-
-//-----------------------------------------------------------------------------
-// Output-Stream Manipulators
-//-----------------------------------------------------------------------------
-//
-template<class TP> class omanip;
-
-template<class TP> class oapp {
- ostream& (*_f)(ostream&, TP);
-public:
- oapp(ostream& (*f)(ostream&,TP)) : _f(f) {}
- //
- omanip<TP> operator()(TP a)
- { return omanip<TP>(_f, a); }
-};
-
-template <class TP>
-inline ostream& operator<<(ostream&, const omanip<TP>&);
-
-template <class TP> class omanip {
- ostream& (*_f)(ostream&, TP);
- TP _a;
-public:
- omanip(ostream& (*f)(ostream&, TP), TP a) : _f(f), _a(a) {}
- //
- friend
- ostream& operator<< <>(ostream& o, const omanip<TP>& m);
-};
-
-template <class TP>
-inline ostream& operator<<(ostream& o, const omanip<TP>& m)
-{ return (*m._f)(o, m._a); }
-
-//-----------------------------------------------------------------------------
-// Available Manipulators
-//-----------------------------------------------------------------------------
-
-//
-// Macro to define an iomanip function, with one argument
-// The underlying function is `__iomanip_<name>'
-//
-#define __DEFINE_IOMANIP_FN1(type,param,function) \
- extern ios& __iomanip_##function (ios&, param); \
- inline type<param> function (param n) \
- { return type<param> (__iomanip_##function, n); }
-
-__DEFINE_IOMANIP_FN1( smanip, int, setbase)
-__DEFINE_IOMANIP_FN1( smanip, int, setfill)
-__DEFINE_IOMANIP_FN1( smanip, int, setprecision)
-__DEFINE_IOMANIP_FN1( smanip, int, setw)
-
-__DEFINE_IOMANIP_FN1( smanip, ios::fmtflags, resetiosflags)
-__DEFINE_IOMANIP_FN1( smanip, ios::fmtflags, setiosflags)
-} // extern "C++"
-
-#endif /*!_IOMANIP_H*/
diff --git a/contrib/libio/iopadn.c b/contrib/libio/iopadn.c
deleted file mode 100644
index 087715b349b8..000000000000
--- a/contrib/libio/iopadn.c
+++ /dev/null
@@ -1,70 +0,0 @@
-/* Copyright (C) 1993, 1997 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#include "libioP.h"
-
-#define PADSIZE 16
-static char const blanks[PADSIZE] =
-{' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '};
-static char const zeroes[PADSIZE] =
-{'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'};
-
-_IO_ssize_t
-_IO_padn (fp, pad, count)
- _IO_FILE *fp;
- int pad;
- _IO_ssize_t count;
-{
- char padbuf[PADSIZE];
- const char *padptr;
- int i;
- _IO_size_t written = 0;
- _IO_size_t w;
-
- if (pad == ' ')
- padptr = blanks;
- else if (pad == '0')
- padptr = zeroes;
- else
- {
- for (i = PADSIZE; --i >= 0; )
- padbuf[i] = pad;
- padptr = padbuf;
- }
- for (i = count; i >= PADSIZE; i -= PADSIZE)
- {
- w = _IO_sputn (fp, padptr, PADSIZE);
- written += w;
- if (w != PADSIZE)
- return written;
- }
-
- if (i > 0)
- {
- w = _IO_sputn (fp, padptr, i);
- written += w;
- }
- return written;
-}
diff --git a/contrib/libio/ioperror.c b/contrib/libio/ioperror.c
deleted file mode 100644
index 7ca72b0bb60b..000000000000
--- a/contrib/libio/ioperror.c
+++ /dev/null
@@ -1,22 +0,0 @@
-#include "libioP.h"
-#include <errno.h>
-#include <string.h>
-#ifndef errno
-extern int errno;
-#endif
-
-#ifndef _IO_strerror
-extern char* _IO_strerror __P((int));
-#endif
-
-void
-_IO_perror (s)
- const char *s;
-{
- char *error = _IO_strerror (errno);
-
- if (s != NULL && *s != '\0')
- _IO_fprintf (_IO_stderr, "%s:", s);
-
- _IO_fprintf (_IO_stderr, "%s\n", error ? error : "");
-}
diff --git a/contrib/libio/iopopen.c b/contrib/libio/iopopen.c
deleted file mode 100644
index 58f97495c11b..000000000000
--- a/contrib/libio/iopopen.c
+++ /dev/null
@@ -1,248 +0,0 @@
-/* Copyright (C) 1993, 1997 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
- Written by Per Bothner <bothner@cygnus.com>.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#include "libioP.h"
-#if _IO_HAVE_SYS_WAIT
-#include <signal.h>
-#include <unistd.h>
-#ifdef __STDC__
-#include <stdlib.h>
-#endif
-#ifdef _LIBC
-# include <unistd.h>
-#endif
-#include <sys/types.h>
-#include <sys/wait.h>
-
-#ifndef _IO_fork
-#define _IO_fork vfork /* defined in libiberty, if needed */
-extern _IO_pid_t _IO_fork __P ((void));
-#endif
-
-#endif /* _IO_HAVE_SYS_WAIT */
-
-#ifndef _IO_pipe
-#define _IO_pipe pipe
-extern int _IO_pipe __P ((int des[2]));
-#endif
-
-#ifndef _IO_dup2
-#define _IO_dup2 dup2
-extern int _IO_dup2 __P ((int fd, int fd2));
-#endif
-
-#ifndef _IO_waitpid
-#define _IO_waitpid waitpid
-#endif
-
-#ifndef _IO_execl
-#define _IO_execl execl
-#endif
-#ifndef _IO__exit
-#define _IO__exit _exit
-#endif
-
-#ifndef _IO_close
-#define _IO_close close
-#endif
-
-struct _IO_proc_file
-{
- struct _IO_FILE_plus file;
- /* Following fields must match those in class procbuf (procbuf.h) */
- _IO_pid_t pid;
- struct _IO_proc_file *next;
-};
-typedef struct _IO_proc_file _IO_proc_file;
-
-static struct _IO_proc_file *proc_file_chain = NULL;
-
-_IO_FILE *
-_IO_proc_open (fp, command, mode)
- _IO_FILE *fp;
- const char *command;
- const char *mode;
-{
-#if _IO_HAVE_SYS_WAIT
- volatile int read_or_write;
- volatile int parent_end, child_end;
- int pipe_fds[2];
- _IO_pid_t child_pid;
- if (_IO_file_is_open (fp))
- return NULL;
- if (_IO_pipe (pipe_fds) < 0)
- return NULL;
- if (mode[0] == 'r')
- {
- parent_end = pipe_fds[0];
- child_end = pipe_fds[1];
- read_or_write = _IO_NO_WRITES;
- }
- else
- {
- parent_end = pipe_fds[1];
- child_end = pipe_fds[0];
- read_or_write = _IO_NO_READS;
- }
- ((_IO_proc_file *) fp)->pid = child_pid = _IO_fork ();
- if (child_pid == 0)
- {
- int child_std_end = mode[0] == 'r' ? 1 : 0;
- _IO_close (parent_end);
- if (child_end != child_std_end)
- {
- _IO_dup2 (child_end, child_std_end);
- _IO_close (child_end);
- }
- /* POSIX.2: "popen() shall ensure that any streams from previous
- popen() calls that remain open in the parent process are closed
- in the new child process." */
- while (proc_file_chain)
- {
- _IO_close (_IO_fileno ((_IO_FILE *) proc_file_chain));
- proc_file_chain = proc_file_chain->next;
- }
-
- _IO_execl ("/bin/sh", "sh", "-c", command, (char *) 0);
- _IO__exit (127);
- }
- _IO_close (child_end);
- if (child_pid < 0)
- {
- _IO_close (parent_end);
- return NULL;
- }
- _IO_fileno (fp) = parent_end;
-
- /* Link into proc_file_chain. */
- ((_IO_proc_file *) fp)->next = proc_file_chain;
- proc_file_chain = (_IO_proc_file *) fp;
-
- _IO_mask_flags (fp, read_or_write, _IO_NO_READS|_IO_NO_WRITES);
- return fp;
-#else /* !_IO_HAVE_SYS_WAIT */
- return NULL;
-#endif
-}
-
-_IO_FILE *
-_IO_popen (command, mode)
- const char *command;
- const char *mode;
-{
- struct locked_FILE
- {
- struct _IO_proc_file fpx;
-#ifdef _IO_MTSAFE_IO
- _IO_lock_t lock;
-#endif
- } *new_f;
- _IO_FILE *fp;
-
- new_f = (struct locked_FILE *) malloc (sizeof (struct locked_FILE));
- if (new_f == NULL)
- return NULL;
-#ifdef _IO_MTSAFE_IO
- new_f->fpx.file.file._lock = &new_f->lock;
-#endif
- fp = (_IO_FILE*)&new_f->fpx;
- _IO_init (fp, 0);
- _IO_JUMPS (fp) = &_IO_proc_jumps;
- _IO_file_init (fp);
-#if !_IO_UNIFIED_JUMPTABLES
- ((struct _IO_FILE_plus *) fp)->vtable = NULL;
-#endif
- if (_IO_proc_open (fp, command, mode) != NULL)
- return fp;
- free (new_f);
- return NULL;
-}
-
-#ifdef strong_alias
-strong_alias (_IO_popen, popen);
-#endif
-
-int
-_IO_proc_close (fp)
- _IO_FILE *fp;
-{
- /* This is not name-space clean. FIXME! */
-#if _IO_HAVE_SYS_WAIT
- int wstatus;
- _IO_proc_file **ptr = &proc_file_chain;
- _IO_pid_t wait_pid;
- int status = -1;
-
- /* Unlink from proc_file_chain. */
- for ( ; *ptr != NULL; ptr = &(*ptr)->next)
- {
- if (*ptr == (_IO_proc_file *) fp)
- {
- *ptr = (*ptr)->next;
- status = 0;
- break;
- }
- }
-
- if (status < 0 || _IO_close (_IO_fileno(fp)) < 0)
- return -1;
- /* POSIX.2 Rationale: "Some historical implementations either block
- or ignore the signals SIGINT, SIGQUIT, and SIGHUP while waiting
- for the child process to terminate. Since this behavior is not
- described in POSIX.2, such implementations are not conforming." */
- do
- {
- wait_pid = _IO_waitpid (((_IO_proc_file *) fp)->pid, &wstatus, 0);
- }
- while (wait_pid == -1 && errno == EINTR);
- if (wait_pid == -1)
- return -1;
- return wstatus;
-#else /* !_IO_HAVE_SYS_WAIT */
- return -1;
-#endif
-}
-
-struct _IO_jump_t _IO_proc_jumps = {
- JUMP_INIT_DUMMY,
- JUMP_INIT(finish, _IO_file_finish),
- JUMP_INIT(overflow, _IO_file_overflow),
- JUMP_INIT(underflow, _IO_file_underflow),
- JUMP_INIT(uflow, _IO_default_uflow),
- JUMP_INIT(pbackfail, _IO_default_pbackfail),
- JUMP_INIT(xsputn, _IO_file_xsputn),
- JUMP_INIT(xsgetn, _IO_default_xsgetn),
- JUMP_INIT(seekoff, _IO_file_seekoff),
- JUMP_INIT(seekpos, _IO_default_seekpos),
- JUMP_INIT(setbuf, _IO_file_setbuf),
- JUMP_INIT(sync, _IO_file_sync),
- JUMP_INIT(doallocate, _IO_file_doallocate),
- JUMP_INIT(read, _IO_file_read),
- JUMP_INIT(write, _IO_file_write),
- JUMP_INIT(seek, _IO_file_seek),
- JUMP_INIT(close, _IO_proc_close),
- JUMP_INIT(stat, _IO_file_stat)
-};
diff --git a/contrib/libio/ioprims.c b/contrib/libio/ioprims.c
deleted file mode 100644
index e3e0d7e75cdc..000000000000
--- a/contrib/libio/ioprims.c
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-/* I/O OS-level primitives.
- Needs to be replaced if not using Unix.
- Also needs to be replaced if avoiding name-space pollution
- (in which case read would be defined in terms of _IO_read,
- rather than vice versa). */
-
-#include "libioP.h"
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-
-#ifdef TODO
-/* Add open, isatty */
-#endif
-
-_IO_ssize_t
-_IO_read (fildes, buf, nbyte)
- int fildes;
- void *buf;
- _IO_size_t nbyte;
-{
- return read (fildes, buf, nbyte);
-}
-
-_IO_ssize_t
-_IO_write (fildes, buf, nbyte)
- int fildes;
- const void *buf;
- _IO_size_t nbyte;
-{
- return write (fildes, buf, nbyte);
-}
-
-_IO_off_t
-_IO_lseek (fildes, offset, whence)
- int fildes;
- _IO_off_t offset;
- int whence;
-{
- return lseek (fildes, offset, whence);
-}
-
-int
-_IO_close (fildes)
- int fildes;
-{
- return close (fildes);
-}
-
-int
-_IO_fstat (fildes, buf)
- int fildes;
- struct stat *buf;
-{
- return fstat (fildes, buf);
-}
diff --git a/contrib/libio/ioprintf.c b/contrib/libio/ioprintf.c
deleted file mode 100644
index 0b99c2a6637f..000000000000
--- a/contrib/libio/ioprintf.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include "libioP.h"
-
-#ifdef __STDC__
-#include <stdarg.h>
-#else
-#include <varargs.h>
-#endif
-
-int
-_IO_printf
-#ifdef __STDC__
- (const char* format, ...)
-#else
-(format, va_alist) char *format; va_dcl
-#endif
-{
- int ret;
- va_list args;
- _IO_va_start(args, format);
- ret = _IO_vfprintf(_IO_stdout, format, args);
- va_end(args);
- return ret;
-}
diff --git a/contrib/libio/ioputc.c b/contrib/libio/ioputc.c
deleted file mode 100644
index 38a3ec9a00b7..000000000000
--- a/contrib/libio/ioputc.c
+++ /dev/null
@@ -1,44 +0,0 @@
-/* Copyright (C) 1991, 1995, 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-#include "libioP.h"
-#include "stdio.h"
-
-#undef _IO_putc
-
-int
-_IO_putc (c, fp)
- int c;
- _IO_FILE *fp;
-{
- int result;
- CHECK_FILE (fp, EOF);
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
- _IO_flockfile (fp);
- result = _IO_putc_unlocked (c, fp);
- _IO_cleanup_region_end (1);
- return result;
-}
-
-#undef putc
-
-#ifdef weak_alias
-weak_alias (_IO_putc, putc)
-#elif defined(_G_STDIO_USES_LIBIO) && defined(_G_HAVE_WEAK_SYMBOL)
-int putc (int, _IO_FILE *) __attribute__ ((weak, alias("_IO_putc")));
-#endif
diff --git a/contrib/libio/ioputs.c b/contrib/libio/ioputs.c
deleted file mode 100644
index ab5e6aaa4cc9..000000000000
--- a/contrib/libio/ioputs.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/* Copyright (C) 1993, 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#include "libioP.h"
-#include <string.h>
-
-int
-_IO_puts (str)
- const char *str;
-{
- int result;
- _IO_size_t len = strlen (str);
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
- _IO_stdout);
- _IO_flockfile (_IO_stdout);
- if (_IO_sputn (_IO_stdout, str, len) == len
- && _IO_putc_unlocked ('\n', _IO_stdout) != EOF)
- result = len + 1;
- else
- result = EOF;
- _IO_cleanup_region_end (1);
- return result;
-}
-
-#ifdef weak_alias
-weak_alias (_IO_puts, puts)
-#endif
diff --git a/contrib/libio/ioscanf.c b/contrib/libio/ioscanf.c
deleted file mode 100644
index 405d1e2eb0f7..000000000000
--- a/contrib/libio/ioscanf.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include "libioP.h"
-
-#ifdef __STDC__
-#include <stdarg.h>
-#else
-#include <varargs.h>
-#endif
-
-int
-_IO_scanf
-#ifdef __STDC__
- (const char* format, ...)
-#else
-(format, va_alist) char *format; va_dcl
-#endif
-{
- int ret;
- va_list args;
- _IO_va_start(args, format);
- ret = _IO_vfscanf(_IO_stdin, format, args, NULL);
- va_end(args);
- return ret;
-}
diff --git a/contrib/libio/ioseekoff.c b/contrib/libio/ioseekoff.c
deleted file mode 100644
index b1c4729b3d1d..000000000000
--- a/contrib/libio/ioseekoff.c
+++ /dev/null
@@ -1,54 +0,0 @@
-/* Copyright (C) 1993, 1997 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#include <libioP.h>
-
-_IO_pos_t
-_IO_seekoff (fp, offset, dir, mode)
- _IO_FILE *fp;
- _IO_off_t offset;
- int dir;
- int mode;
-{
- _IO_pos_t retval;
-
- /* If we have a backup buffer, get rid of it, since the __seekoff
- callback may not know to do the right thing about it.
- This may be over-kill, but it'll do for now. TODO */
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
- _IO_flockfile (fp);
-
-
- if (_IO_have_backup (fp))
- {
- if (dir == _IO_seek_cur && _IO_in_backup (fp))
- offset -= fp->_IO_read_end - fp->_IO_read_ptr;
- _IO_free_backup_area (fp);
- }
- retval = _IO_SEEKOFF (fp, offset, dir, mode);
-
- _IO_cleanup_region_end (1);
- return retval;
-}
diff --git a/contrib/libio/ioseekpos.c b/contrib/libio/ioseekpos.c
deleted file mode 100644
index 2ce0c2224ec7..000000000000
--- a/contrib/libio/ioseekpos.c
+++ /dev/null
@@ -1,48 +0,0 @@
-/* Copyright (C) 1993, 1997 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#include <libioP.h>
-
-_IO_pos_t
-_IO_seekpos (fp, pos, mode)
- _IO_FILE *fp;
- _IO_pos_t pos;
- int mode;
-{
- _IO_pos_t retval;
-
- /* If we have a backup buffer, get rid of it, since the __seekoff
- callback may not know to do the right thing about it.
- This may be over-kill, but it'll do for now. TODO */
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
- _IO_flockfile (fp);
-
- if (_IO_have_backup (fp))
- _IO_free_backup_area (fp);
- retval = _IO_SEEKPOS (fp, pos, mode);
-
- _IO_cleanup_region_end (1);
- return retval;
-}
diff --git a/contrib/libio/iosetbuffer.c b/contrib/libio/iosetbuffer.c
deleted file mode 100644
index f140a9ad046e..000000000000
--- a/contrib/libio/iosetbuffer.c
+++ /dev/null
@@ -1,46 +0,0 @@
-/* Copyright (C) 1993, 1995, 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#include "libioP.h"
-
-void
-_IO_setbuffer (fp, buf, size)
- _IO_FILE *fp;
- char *buf;
- _IO_size_t size;
-{
- CHECK_FILE (fp, );
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
- _IO_flockfile (fp);
- fp->_flags &= ~_IO_LINE_BUF;
- if (!buf)
- size = 0;
- (void) _IO_SETBUF (fp, buf, size);
- _IO_cleanup_region_end (1);
-}
-
-#ifdef weak_alias
-weak_alias (_IO_setbuffer, setbuffer)
-#endif
diff --git a/contrib/libio/iosetvbuf.c b/contrib/libio/iosetvbuf.c
deleted file mode 100644
index 65eeea51a6fa..000000000000
--- a/contrib/libio/iosetvbuf.c
+++ /dev/null
@@ -1,100 +0,0 @@
-/* Copyright (C) 1993, 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#include "libioP.h"
-
-#define _IOFBF 0 /* Fully buffered. */
-#define _IOLBF 1 /* Line buffered. */
-#define _IONBF 2 /* No buffering. */
-
-int
-_IO_setvbuf (fp, buf, mode, size)
- _IO_FILE *fp;
- char *buf;
- int mode;
- _IO_size_t size;
-{
- int result;
- CHECK_FILE (fp, EOF);
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
- _IO_flockfile (fp);
- switch (mode)
- {
- case _IOFBF:
- fp->_IO_file_flags &= ~_IO_LINE_BUF|_IO_UNBUFFERED;
- if (buf == NULL)
- {
- if (fp->_IO_buf_base == NULL)
- {
- /* There is no flag to distinguish between "fully buffered
- mode has been explicitly set" as opposed to "line
- buffering has not been explicitly set". In both
- cases, _IO_LINE_BUF is off. If this is a tty, and
- _IO_filedoalloc later gets called, it cannot know if
- it should set the _IO_LINE_BUF flag (because that is
- the default), or not (because we have explicitly asked
- for fully buffered mode). So we make sure a buffer
- gets allocated now, and explicitly turn off line
- buffering.
-
- A possibly cleaner alternative would be to add an
- extra flag, but then flags are a finite resource. */
- if (_IO_DOALLOCATE (fp) < 0)
- {
- result = EOF;
- goto unlock_return;
- }
- fp->_IO_file_flags &= ~_IO_LINE_BUF;
- }
- result = 0;
- goto unlock_return;
- }
- break;
- case _IOLBF:
- fp->_IO_file_flags &= ~_IO_UNBUFFERED;
- fp->_IO_file_flags |= _IO_LINE_BUF;
- if (buf == NULL)
- {
- result = 0;
- goto unlock_return;
- }
- break;
- case _IONBF:
- buf = NULL;
- size = 0;
- break;
- default:
- result = EOF;
- goto unlock_return;
- }
- result = _IO_SETBUF (fp, buf, size) == NULL ? EOF : 0;
-unlock_return:
- _IO_cleanup_region_end (1);
- return result;
-}
-
-#ifdef weak_alias
-weak_alias (_IO_setvbuf, setvbuf)
-#endif
diff --git a/contrib/libio/iosprintf.c b/contrib/libio/iosprintf.c
deleted file mode 100644
index 704a6dbd72d9..000000000000
--- a/contrib/libio/iosprintf.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/* Copyright (C) 1993, 1997 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#include "libioP.h"
-
-#ifdef __STDC__
-#include <stdarg.h>
-#else
-#include <varargs.h>
-#endif
-
-int
-#ifdef __STDC__
-_IO_sprintf (char *string, const char* format, ...)
-#else
-_IO_sprintf (string, format, va_alist)
- char *string;
- char *format;
- va_dcl
-#endif
-{
- int ret;
- va_list args;
- _IO_va_start (args, format);
- ret = _IO_vsprintf (string, format, args);
- va_end (args);
- return ret;
-}
diff --git a/contrib/libio/iosscanf.c b/contrib/libio/iosscanf.c
deleted file mode 100644
index 58868778c48e..000000000000
--- a/contrib/libio/iosscanf.c
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include "libioP.h"
-
-#ifdef __STDC__
-#include <stdarg.h>
-#else
-#include <varargs.h>
-#endif
-
-int
-_IO_sscanf
-#ifdef __STDC__
- (const char * string, const char* format, ...)
-#else
-(string, format, va_alist) char *string; char *format; va_dcl
-#endif
-{
- int ret;
- va_list args;
- _IO_va_start(args, format);
- ret = _IO_vsscanf(string, format, args);
- va_end(args);
- return ret;
-}
diff --git a/contrib/libio/iostdio.h b/contrib/libio/iostdio.h
deleted file mode 100644
index 9ed47a4654a4..000000000000
--- a/contrib/libio/iostdio.h
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-/* This file defines a stdio-like environment, except that it avoid
- link-time name clashes with an existing stdio.
- It allows for testing the libio using stdio-using programs
- with an incompatible libc.a.
- It is not predantically correct - e.g. some macros are used
- that may evaluate a stream argument more than once. */
-
-#ifndef _IOSTDIO_H
-#define _IOSTDIO_H
-
-#include "iolibio.h"
-
-typedef _IO_FILE FILE;
-#ifndef EOF
-#define EOF (-1)
-#endif
-#ifndef BUFSIZ
-#define BUFSIZ 1024
-#endif
-
-/* #define size_t, fpos_t L_tmpname TMP_MAX */
-
-#define _IOFBF 0 /* Fully buffered. */
-#define _IOLBF 1 /* Line buffered. */
-#define _IONBF 2 /* No buffering. */
-
-#define SEEK_SET 0
-#define SEEK_CUR 1
-#define SEEK_END 2
-
-#define stdin _IO_stdin
-#define stdout _IO_stdout
-#define stderr _IO_stderr
-
-#define getc(_fp) _IO_getc(_fp)
-#define putc(_ch, _fp) _IO_putc(_ch, _fp)
-
-#define clearerr _IO_clearerr
-#define fclose _IO_fclose
-#define feof _IO_feof
-#define ferror _IO_ferror
-#define fflush _IO_fflush
-#define fgetc(__fp) _IO_getc(_fp)
-#define fgetpos _IO_fgetpos
-#define fgets _IO_fgets
-#define fopen _IO_fopen
-#define fprintf _IO_fprintf
-#define fputc(_ch, _fp) _IO_putc(_ch, _fp)
-#define fputs _IO_fputs
-#define fread _IO_fread
-#define freopen _IO_freopen
-#define fscanf _IO_fscanf
-#define fseek _IO_fseek
-#define fsetpos _IO_fsetpos
-#define ftell _IO_ftell
-#define fwrite _IO_fwrite
-#define gets _IO_gets
-#define perror _IO_perror
-#define printf _IO_printf
-#define puts _IO_puts
-#define rewind _IO_rewind
-#define scanf _IO_scanf
-#define setbuf _IO_setbuf
-#define setbuffer _IO_setbuffer
-#define setvbuf _IO_setvbuf
-#define sprintf _IO_sprintf
-#define sscanf _IO_sscanf
-#define ungetc _IO_ungetc
-#define vfprintf _IO_vfprintf
-#define vprintf(__fmt, __args) vfprintf(stdout, __fmt, __args)
-#define vsprintf _IO_vsprintf
-
-#if 0
-/* We can use the libc versions of these, since they don't pass FILE*s. */
-#define remove ??? __P((const char*))
-#define rename ??? __P((const char* _old, const char* _new))
-#define tmpfile ??? __P((void))
-#define tmpnam ??? __P((char*))
-#endif
-
-#if !defined(__STRICT_ANSI__) || defined(_POSIX_SOURCE)
-#define fdopen _IO_fdopen
-#define fileno _IO_fileno
-#define popen _IO_popen
-#define pclose _IO_pclose
-#define setbuf _IO_setbuf
-#define setlinebuf _IO_setlinebuf
-#endif
-
-#endif /* _IOSTDIO_H */
diff --git a/contrib/libio/iostream.cc b/contrib/libio/iostream.cc
deleted file mode 100644
index 792eaae6b4c4..000000000000
--- a/contrib/libio/iostream.cc
+++ /dev/null
@@ -1,1049 +0,0 @@
-/* This is part of libio/iostream, providing -*- C++ -*- input/output.
- Copyright (C) 1993, 1997, 2000 Free Software Foundation, Inc.
-
- This file is part of the GNU IO Library. This library is free
- software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the
- Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to the Free
- Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
- USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does not cause
- the resulting executable to be covered by the GNU General Public License.
- This exception does not however invalidate any other reasons why
- the executable file might be covered by the GNU General Public License. */
-
-/* Written by Per Bothner (bothner@cygnus.com). */
-
-#ifdef __GNUC__
-#pragma implementation
-#endif
-#define _STREAM_COMPAT
-#include <iostream.h>
-#include "libioP.h"
-#include <stdio.h> /* Needed for sprintf */
-#include <ctype.h>
-#include <string.h>
-#include <limits.h>
-
-#if _G_HAVE_PRINTF_FP
-#include <printf.h>
-extern "C" int __printf_fp (_IO_FILE *, const struct printf_info *,
- const void *const *);
-#else
-#include "floatio.h"
-# ifndef _IO_USE_DTOA
-int __cvt_double(double number, register int prec, int flags, int *signp,
- int fmtch, char *startp, char *endp);
-# endif
-#endif
-
-#define BUF (MAXEXP+MAXFRACT+1) /* + decimal point */
-
-//#define isspace(ch) ((ch)==' ' || (ch)=='\t' || (ch)=='\n')
-
-istream::istream(streambuf *sb, ostream* tied)
-{
- init (sb, tied);
- _gcount = 0;
-}
-
-int skip_ws(streambuf* sb)
-{
- int ch;
- for (;;) {
- ch = sb->sbumpc();
- if (ch == EOF || !isspace(ch))
- return ch;
- }
-}
-
-istream& istream::get(char& c)
-{
- if (ipfx1()) {
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
- _strbuf);
- int ch = _strbuf->sbumpc();
- if (ch == EOF) {
- set(ios::eofbit|ios::failbit);
- _gcount = 0;
- }
- else {
- c = (char)ch;
- _gcount = 1;
- }
- isfx();
- _IO_cleanup_region_end (0);
- }
- else
- _gcount = 0;
- return *this;
-}
-
-int istream::peek()
-{
- if (!good())
- return EOF;
- if (_tie && rdbuf()->in_avail() == 0)
- _tie->flush();
- int ch = _strbuf->sgetc();
- if (ch == EOF)
- set(ios::eofbit);
- return ch;
-}
-
-istream& istream::ignore(int n /* = 1 */, int delim /* = EOF */)
-{
- _gcount = 0;
- if (ipfx1()) {
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
- _strbuf);
- register streambuf* sb = _strbuf;
- if (delim == EOF) {
- _gcount = sb->ignore(n);
- goto unlock;
- }
- for (;;) {
-#if 0
- if (n != MAXINT) // FIXME
-#endif
- if (--n < 0)
- break;
- int ch = sb->sbumpc();
- if (ch == EOF) {
- set(ios::eofbit|ios::failbit);
- break;
- }
- _gcount++;
- if (ch == delim)
- break;
- }
- unlock:
- isfx();
- _IO_cleanup_region_end (0);
- }
- return *this;
-}
-
-istream& istream::read(char *s, streamsize n)
-{
- if (ipfx1()) {
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
- _strbuf);
- _gcount = _strbuf->sgetn(s, n);
- if (_gcount != n)
- set(ios::failbit|ios::eofbit);
- isfx();
- _IO_cleanup_region_end (0);
- }
- else
- _gcount = 0;
- return *this;
-}
-
-int
-istream::sync ()
-{
- streambuf *sb = rdbuf ();
- if (sb == NULL)
- return EOF;
- if (sb->sync ()) // Later: pubsync
- {
- setstate (ios::badbit);
- return EOF;
- }
- else
- return 0;
-}
-
-istream& istream::seekg(streampos pos)
-{
- pos = _strbuf->pubseekpos(pos, ios::in);
- if (pos == streampos(EOF))
- set(ios::badbit);
- return *this;
-}
-
-istream& istream::seekg(streamoff off, _seek_dir dir)
-{
- streampos pos = _IO_seekoff (_strbuf, off, (int) dir, _IOS_INPUT);
- if (pos == streampos(EOF))
- set(ios::badbit);
- return *this;
-}
-
-streampos istream::tellg()
-{
-#if 0
- streampos pos = _strbuf->pubseekoff(0, ios::cur, ios::in);
-#else
- streampos pos = _IO_seekoff (_strbuf, 0, _IO_seek_cur, _IOS_INPUT);
-#endif
- if (pos == streampos(EOF))
- set(ios::badbit);
- return pos;
-}
-
-istream& istream::operator>>(char& c)
-{
- if (ipfx0()) {
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
- _strbuf);
- int ch = _strbuf->sbumpc();
- if (ch == EOF)
- set(ios::eofbit|ios::failbit);
- else
- c = (char)ch;
- isfx();
- _IO_cleanup_region_end (0);
- }
- return *this;
-}
-
-istream&
-istream::operator>> (char* ptr)
-{
- register char *p = ptr;
- int w = width(0);
- if (ipfx0())
- {
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
- _strbuf);
- register streambuf* sb = _strbuf;
- for (;;)
- {
- int ch = sb->sbumpc();
- if (ch == EOF)
- {
- set(ios::eofbit);
- break;
- }
- else if (isspace(ch) || w == 1)
- {
- sb->sputbackc(ch);
- break;
- }
- else *p++ = ch;
- w--;
- }
- if (p == ptr)
- set(ios::failbit);
- isfx();
- _IO_cleanup_region_end (0);
- }
- *p = '\0';
- return *this;
-}
-
-#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
-#define LONGEST long long
-#else
-#define LONGEST long
-#endif
-
-static int read_int(istream& stream, unsigned LONGEST& val, int& neg)
-{
- if (!stream.ipfx0())
- return 0;
- int retval;
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
- stream._strbuf);
- register streambuf* sb = stream.rdbuf();
- int base = 10;
- int ndigits = 0;
- register int ch = skip_ws(sb);
- if (ch == EOF)
- goto eof_fail;
- neg = 0;
- if (ch == '+') {
- ch = skip_ws(sb);
- }
- else if (ch == '-') {
- neg = 1;
- ch = skip_ws(sb);
- }
- if (ch == EOF) goto eof_fail;
- if (!(stream.flags() & ios::basefield)) {
- if (ch == '0') {
- ch = sb->sbumpc();
- if (ch == EOF) {
- val = 0;
- goto unlock;
- }
- if (ch == 'x' || ch == 'X') {
- base = 16;
- ch = sb->sbumpc();
- if (ch == EOF) goto eof_fail;
- }
- else {
- sb->sputbackc(ch);
- base = 8;
- ch = '0';
- }
- }
- }
- else if ((stream.flags() & ios::basefield) == ios::hex)
- base = 16;
- else if ((stream.flags() & ios::basefield) == ios::oct)
- base = 8;
- val = 0;
- for (;;) {
- if (ch == EOF)
- break;
- int digit;
- if (ch >= '0' && ch <= '9')
- digit = ch - '0';
- else if (ch >= 'A' && ch <= 'F')
- digit = ch - 'A' + 10;
- else if (ch >= 'a' && ch <= 'f')
- digit = ch - 'a' + 10;
- else
- digit = 999;
- if (digit >= base) {
- sb->sputbackc(ch);
- if (ndigits == 0)
- goto fail;
- else
- goto unlock;
- }
- ndigits++;
- val = base * val + digit;
- ch = sb->sbumpc();
- }
- unlock:
- retval = 1;
- goto out;
- fail:
- stream.set(ios::failbit);
- retval = 0;
- goto out;
- eof_fail:
- stream.set(ios::failbit|ios::eofbit);
- retval = 0;
- out:
- stream.isfx();
- _IO_cleanup_region_end (0);
- return retval;
-}
-
-#define READ_INT(TYPE) \
-istream& istream::operator>>(TYPE& i)\
-{\
- unsigned LONGEST val; int neg;\
- if (read_int(*this, val, neg)) {\
- if (neg) val = -val;\
- i = (TYPE)val;\
- }\
- return *this;\
-}
-
-READ_INT(short)
-READ_INT(unsigned short)
-READ_INT(int)
-READ_INT(unsigned int)
-READ_INT(long)
-READ_INT(unsigned long)
-#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
-READ_INT(long long)
-READ_INT(unsigned long long)
-#endif
-#if _G_HAVE_BOOL
-READ_INT(bool)
-#endif
-
-istream& istream::operator>>(long double& x)
-{
- if (ipfx0())
- {
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
- _strbuf);
-#if _G_HAVE_LONG_DOUBLE_IO
- scan("%Lg", &x);
-#else
- double y;
- scan("%lg", &y);
- x = y;
-#endif
- isfx();
- _IO_cleanup_region_end (0);
- }
- return *this;
-}
-
-istream& istream::operator>>(double& x)
-{
- if (ipfx0())
- {
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
- _strbuf);
- scan("%lg", &x);
- isfx();
- _IO_cleanup_region_end (0);
- }
- return *this;
-}
-
-istream& istream::operator>>(float& x)
-{
- if (ipfx0())
- {
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
- _strbuf);
- scan("%g", &x);
- isfx();
- _IO_cleanup_region_end (0);
- }
- return *this;
-}
-
-istream& istream::operator>>(register streambuf* sbuf)
-{
- if (ipfx0()) {
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
- _strbuf);
- register streambuf* inbuf = rdbuf();
- // FIXME: Should optimize!
- for (;;) {
- register int ch = inbuf->sbumpc();
- if (ch == EOF) {
- set(ios::eofbit);
- break;
- }
- if (sbuf->sputc(ch) == EOF) {
- set(ios::failbit);
- break;
- }
- }
- isfx();
- _IO_cleanup_region_end (0);
- }
- return *this;
-}
-
-ostream& ostream::operator<<(char c)
-{
- if (opfx()) {
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
- _strbuf);
-#if 1
- // This is what the cfront implementation does.
- if (_strbuf->sputc(c) == EOF) {
- set(ios::badbit);
- goto failed;
- }
-#else
- // This is what cfront documentation and current ANSI drafts say.
- int w = width(0);
- char fill_char = fill();
- register int padding = w > 0 ? w - 1 : 0;
- register streambuf *sb = _strbuf;
- if (!(flags() & ios::left) && padding) // Default adjustment.
- if (_IO_padn(sb, fill_char, padding) < padding) {
- set(ios::badbit);
- goto failed;
- }
- if (sb->sputc(c) == EOF) {
- set(ios::badbit);
- goto failed;
- }
- if (flags() & ios::left && padding) // Left adjustment.
- if (_IO_padn(sb, fill_char, padding) < padding)
- set(ios::badbit);
-#endif
- failed:
- osfx();
- _IO_cleanup_region_end (0);
- }
- return *this;
-}
-
-/* Write VAL on STREAM.
- If SIGN<0, val is the absolute value of a negative number.
- If SIGN>0, val is a signed non-negative number.
- If SIGN==0, val is unsigned. */
-
-static void write_int(ostream& stream, unsigned LONGEST val, int sign)
-{
-#define WRITE_BUF_SIZE (10 + sizeof(unsigned LONGEST) * 3)
- char buf[WRITE_BUF_SIZE];
- register char *buf_ptr = buf+WRITE_BUF_SIZE; // End of buf.
- const char *show_base = "";
- int show_base_len = 0;
- int show_pos = 0; // If 1, print a '+'.
-
- // Now do the actual conversion, placing the result at the *end* of buf.
- // Note that we use separate code for decimal, octal, and hex,
- // so we can divide by optimizable constants.
- if ((stream.flags() & ios::basefield) == ios::oct) { // Octal
- do {
- *--buf_ptr = (val & 7) + '0';
- val = val >> 3;
- } while (val != 0);
- if ((stream.flags() & ios::showbase) && (*buf_ptr != '0'))
- *--buf_ptr = '0';
- }
- else if ((stream.flags() & ios::basefield) == ios::hex) { // Hex
- const char *xdigs = (stream.flags() & ios::uppercase) ? "0123456789ABCDEF0X"
- : "0123456789abcdef0x";
- do {
- *--buf_ptr = xdigs[val & 15];
- val = val >> 4;
- } while (val != 0);
- if ((stream.flags() & ios::showbase)) {
- show_base = xdigs + 16; // Either "0X" or "0x".
- show_base_len = 2;
- }
- }
- else { // Decimal
-#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
- // Optimization: Only use long long when we need to.
- while (val > UINT_MAX) {
- *--buf_ptr = (val % 10) + '0';
- val /= 10;
- }
- // Use more efficient (int) arithmetic for the rest.
- register unsigned int ival = (unsigned int)val;
-#else
- register unsigned LONGEST ival = val;
-#endif
- do {
- *--buf_ptr = (ival % 10) + '0';
- ival /= 10;
- } while (ival != 0);
- if (sign > 0 && (stream.flags() & ios::showpos))
- show_pos=1;
- }
-
- int buf_len = buf+WRITE_BUF_SIZE - buf_ptr;
- int w = stream.width(0);
-
- // Calculate padding.
- int len = buf_len+show_pos;
- if (sign < 0) len++;
- len += show_base_len;
- int padding = len > w ? 0 : w - len;
-
- // Do actual output.
- register streambuf* sbuf = stream.rdbuf();
- ios::fmtflags pad_kind =
- stream.flags() & (ios::left|ios::right|ios::internal);
- char fill_char = stream.fill();
- if (padding > 0
- && pad_kind != (ios::fmtflags)ios::left
- && pad_kind != (ios::fmtflags)ios::internal) // Default (right) adjust.
- if (_IO_padn(sbuf, fill_char, padding) < padding)
- goto failed;
- if (sign < 0 || show_pos)
- {
- char ch = sign < 0 ? '-' : '+';
- if (sbuf->sputc(ch) < 0)
- goto failed;
- }
- if (show_base_len)
- if (_IO_sputn(sbuf, show_base, show_base_len) <= 0)
- goto failed;
- if (pad_kind == (ios::fmtflags)ios::internal && padding > 0)
- if (_IO_padn(sbuf, fill_char, padding) < padding)
- goto failed;
- if (_IO_sputn (sbuf, buf_ptr, buf_len) != buf_len)
- goto failed;
- if (pad_kind == (ios::fmtflags)ios::left && padding > 0) // Left adjustment
- if (_IO_padn(sbuf, fill_char, padding) < padding)
- goto failed;
- stream.osfx();
- return;
- failed:
- stream.set(ios::badbit);
- stream.osfx();
-}
-
-ostream& ostream::operator<<(int n)
-{
- if (opfx()) {
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
- _strbuf);
- int sign = 1;
- unsigned int abs_n = (unsigned)n;
- if (n < 0 && (flags() & (ios::oct|ios::hex)) == 0)
- abs_n = -((unsigned)n), sign = -1;
- write_int(*this, abs_n, sign);
- _IO_cleanup_region_end (0);
- }
- return *this;
-}
-
-ostream& ostream::operator<<(unsigned int n)
-{
- if (opfx()) {
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
- _strbuf);
- write_int(*this, n, 0);
- _IO_cleanup_region_end (0);
- }
- return *this;
-}
-
-
-ostream& ostream::operator<<(long n)
-{
- if (opfx()) {
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
- _strbuf);
- int sign = 1;
- unsigned long abs_n = (unsigned long)n;
- if (n < 0 && (flags() & (ios::oct|ios::hex)) == 0)
- abs_n = -((unsigned long)n), sign = -1;
- write_int(*this, abs_n, sign);
- _IO_cleanup_region_end (0);
- }
- return *this;
-}
-
-ostream& ostream::operator<<(unsigned long n)
-{
- if (opfx()) {
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
- _strbuf);
- write_int(*this, n, 0);
- _IO_cleanup_region_end (0);
- }
- return *this;
-}
-
-#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
-ostream& ostream::operator<<(long long n)
-{
- if (opfx()) {
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
- _strbuf);
- int sign = 1;
- unsigned long long abs_n = (unsigned long long)n;
- if (n < 0 && (flags() & (ios::oct|ios::hex)) == 0)
- abs_n = -((unsigned long long)n), sign = -1;
- write_int(*this, abs_n, sign);
- _IO_cleanup_region_end (0);
- }
- return *this;
-}
-
-
-ostream& ostream::operator<<(unsigned long long n)
-{
- if (opfx()) {
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
- _strbuf);
- write_int(*this, n, 0);
- _IO_cleanup_region_end (0);
- }
- return *this;
-}
-#endif /*__GNUC__*/
-
-ostream& ostream::operator<<(double n)
-{
- if (opfx()) {
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
- _strbuf);
- // Uses __cvt_double (renamed from static cvt), in Chris Torek's
- // stdio implementation. The setup code uses the same logic
- // as in __vsbprintf.C (also based on Torek's code).
- int format_char;
- if ((flags() & ios::floatfield) == ios::fixed)
- format_char = 'f';
- else if ((flags() & ios::floatfield) == ios::scientific)
- format_char = flags() & ios::uppercase ? 'E' : 'e';
- else
- format_char = flags() & ios::uppercase ? 'G' : 'g';
-
- int prec = precision();
- if (prec <= 0 && !(flags() & ios::fixed))
- prec = 6; /* default */
-
- // Do actual conversion.
-#if _G_HAVE_PRINTF_FP
- {
- struct printf_info info = { /* prec: */ prec,
- /* width: */ width(0),
- /* spec: */ format_char,
- /* is_long_double: */ 0,
- /* is_short: */ 0,
- /* is_long: */ 0,
- /* alt: */ (flags() & ios::showpoint) != 0,
- /* space: */ 0,
- /* left: */ (flags() & ios::left) != 0,
- /* showsign: */ (flags() & ios::showpos) != 0,
- /* group: */ 0,
-#if defined __GLIBC__ && __GLIBC__ >= 2
- /* extra: */ 0,
-#if __GLIBC_MINOR__ >= 1
- /* is_char: */ 0,
-#if __GLIBC_MINOR__ >= 2
- /* wide: */ 0,
- /* i18n: */ 0,
-#endif
-#endif
-#endif
- /* pad: */ fill()
- };
- const void *ptr = (const void *) &n;
- if (__printf_fp (rdbuf(), &info, &ptr) < 0)
- set(ios::badbit|ios::failbit);
- }
-#elif defined _IO_USE_DTOA
- if (_IO_outfloat(n, rdbuf(), format_char, width(0),
- prec, flags(),
- flags() & ios::showpos ? '+' : 0,
- fill()) < 0)
- set(ios::badbit|ios::failbit); // ??
-#else
- int fpprec = 0; // 'Extra' (suppressed) floating precision.
- if (prec > MAXFRACT) {
- if (flags() & (ios::fixed|ios::scientific) & ios::showpos)
- fpprec = prec - MAXFRACT;
- prec = MAXFRACT;
- }
- int negative;
- char buf[BUF];
- int sign = '\0';
- char *cp = buf;
- *cp = 0;
- int size = __cvt_double(n, prec,
- flags() & ios::showpoint ? 0x80 : 0,
- &negative,
- format_char, cp, buf + sizeof(buf));
- if (negative) sign = '-';
- else if (flags() & ios::showpos) sign = '+';
- if (*cp == 0)
- cp++;
-
- // Calculate padding.
- int fieldsize = size + fpprec;
- if (sign) fieldsize++;
- int padding = 0;
- int w = width(0);
- if (fieldsize < w)
- padding = w - fieldsize;
-
- // Do actual output.
- register streambuf* sbuf = rdbuf();
- register i;
- char fill_char = fill();
- ios::fmtflags pad_kind =
- flags() & (ios::left|ios::right|ios::internal);
- if (pad_kind != (ios::fmtflags)ios::left // Default (right) adjust.
- && pad_kind != (ios::fmtflags)ios::internal)
- for (i = padding; --i >= 0; ) sbuf->sputc(fill_char);
- if (sign)
- sbuf->sputc(sign);
- if (pad_kind == (ios::fmtflags)ios::internal)
- for (i = padding; --i >= 0; ) sbuf->sputc(fill_char);
-
- // Emit the actual concented field, followed by extra zeros.
- _IO_sputn (sbuf, cp, size);
- for (i = fpprec; --i >= 0; ) sbuf->sputc('0');
-
- if (pad_kind == (ios::fmtflags)ios::left) // Left adjustment
- for (i = padding; --i >= 0; ) sbuf->sputc(fill_char);
-#endif
- osfx();
- _IO_cleanup_region_end (0);
- }
- return *this;
-}
-
-#if _G_HAVE_LONG_DOUBLE_IO
-ostream& ostream::operator<<(long double n)
-{
- if (opfx())
- {
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
- _strbuf);
- int format_char;
- if ((flags() & ios::floatfield) == ios::fixed)
- format_char = 'f';
- else if ((flags() & ios::floatfield) == ios::scientific)
- format_char = flags() & ios::uppercase ? 'E' : 'e';
- else
- format_char = flags() & ios::uppercase ? 'G' : 'g';
-
- int prec = precision();
- if (prec <= 0 && !(flags() & ios::fixed))
- prec = 6; /* default */
-
-#if _G_HAVE_PRINTF_FP
- // Do actual conversion.
- struct printf_info info = { /* prec: */ prec,
- /* width: */ width(0),
- /* spec: */ format_char,
- /* is_long_double: */ 1,
- /* is_short: */ 0,
- /* is_long: */ 0,
- /* alt: */ (flags() & ios::showpoint) != 0,
- /* space: */ 0,
- /* left: */ (flags() & ios::left) != 0,
- /* showsign: */ (flags() & ios::showpos) != 0,
- /* group: */ 0,
-#if defined __GLIBC__ && __GLIBC__ >= 2
- /* extra: */ 0,
-#if __GLIBC_MINOR__ >= 1
- /* is_char: */ 0,
-#if __GLIBC_MINOR__ >= 2
- /* wide: */ 0,
- /* i18n: */ 0,
-#endif
-#endif
-#endif
- /* pad: */ fill()
- };
-
- const void *ptr = (const void *) &n;
-
- if (__printf_fp (rdbuf(), &info, &ptr) < 0)
- set (ios::badbit|ios::failbit);
-#else
-# error "long double I/O using dtoa or cvt_double is not implemented"
-#endif
- osfx();
- _IO_cleanup_region_end (0);
- }
- return *this;
-}
-#endif
-
-ostream& ostream::operator<<(const char *s)
-{
- if (opfx())
- {
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
- _strbuf);
- if (s == NULL)
- s = "(null)";
- int len = strlen(s);
- int w = width(0);
-// FIXME: Should we: if (w && len>w) len = w;
- char fill_char = fill();
- register streambuf *sbuf = rdbuf();
- register int padding = w > len ? w - len : 0;
- if (!(flags() & ios::left) && padding > 0) // Default adjustment.
- if (_IO_padn(sbuf, fill_char, padding) != padding)
- {
- set(ios::badbit);
- goto failed;
- }
- if (_IO_sputn (sbuf, s, len) != len)
- {
- set(ios::badbit);
- goto failed;
- }
- if (flags() & ios::left && padding > 0) // Left adjustment.
- if (_IO_padn(sbuf, fill_char, padding) != padding)
- set(ios::badbit);
- failed:
- osfx();
- _IO_cleanup_region_end (0);
- }
- return *this;
-}
-
-#if 0
-ostream& ostream::operator<<(const void *p)
-{ Is in osform.cc, to avoid pulling in all of _IO_vfprintf by this file. */ }
-#endif
-
-ostream& ostream::operator<<(register streambuf* sbuf)
-{
- if (opfx())
- {
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
- _strbuf);
- char buffer[_IO_BUFSIZ];
- register streambuf* outbuf = _strbuf;
- for (;;)
- {
- _IO_size_t count = _IO_sgetn(sbuf, buffer, _IO_BUFSIZ);
- if (count <= 0)
- break;
- if (_IO_sputn(outbuf, buffer, count) != count)
- {
- set(ios::badbit);
- break;
- }
- }
- osfx();
- _IO_cleanup_region_end (0);
- }
- return *this;
-}
-
-ostream::ostream(streambuf* sb, ostream* tied)
-{
- init (sb, tied);
-}
-
-ostream& ostream::seekp(streampos pos)
-{
- pos = _strbuf->pubseekpos(pos, ios::out);
- if (pos == streampos(EOF))
- set(ios::badbit);
- return *this;
-}
-
-ostream& ostream::seekp(streamoff off, _seek_dir dir)
-{
- streampos pos = _IO_seekoff (_strbuf, off, (int) dir, _IOS_OUTPUT);
- if (pos == streampos(EOF))
- set(ios::badbit);
- return *this;
-}
-
-streampos ostream::tellp()
-{
-#if 1
- streampos pos = _IO_seekoff (_strbuf, 0, _IO_seek_cur, _IOS_OUTPUT);
-#else
- streampos pos = _strbuf->pubseekoff(0, ios::cur, ios::out);
-#endif
- if (pos == streampos(EOF))
- set(ios::badbit);
- return pos;
-}
-
-ostream& ostream::flush()
-{
- if (_strbuf->sync())
- set(ios::badbit);
- return *this;
-}
-
-ostream& flush(ostream& outs)
-{
- return outs.flush();
-}
-
-istream& ws(istream& ins)
-{
- if (ins.ipfx1()) {
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
- ins._strbuf);
- int ch = skip_ws(ins._strbuf);
- if (ch == EOF)
- ins.set(ios::eofbit);
- else
- ins._strbuf->sputbackc(ch);
- ins.isfx();
- _IO_cleanup_region_end (0);
- }
- return ins;
-}
-
-// Skip white-space. Return 0 on failure (EOF), or 1 on success.
-// Differs from ws() manipulator in that failbit is set on EOF.
-// Called by ipfx() and ipfx0() if needed.
-
-int istream::_skip_ws()
-{
- int ch = skip_ws(_strbuf);
- if (ch == EOF) {
- set(ios::eofbit|ios::failbit);
- return 0;
- }
- else {
- _strbuf->sputbackc(ch);
- return 1;
- }
-}
-
-ostream& ends(ostream& outs)
-{
- outs.put('\0');
- return outs;
-}
-
-ostream& endl(ostream& outs)
-{
- return flush(outs.put('\n'));
-}
-
-istream& lock(istream& ins)
-{
- _IO_flockfile (ins._strbuf);
- return ins;
-}
-istream& unlock(istream& ins)
-{
- _IO_funlockfile (ins._strbuf);
- return ins;
-}
-ostream& lock(ostream& outs)
-{
- _IO_flockfile (outs._strbuf);
- return outs;
-}
-ostream& unlock(ostream& outs)
-{
- _IO_funlockfile (outs._strbuf);
- return outs;
-}
-
-
-ostream& ostream::write(const char *s, streamsize n)
-{
- if (opfx()) {
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
- _strbuf);
- if (_IO_sputn(_strbuf, s, n) != n)
- set(ios::failbit);
- osfx();
- _IO_cleanup_region_end (0);
- }
- return *this;
-}
-
-void ostream::do_osfx()
-{
- if (flags() & ios::unitbuf)
- flush();
- if (flags() & ios::stdio) {
- fflush(stdout);
- fflush(stderr);
- }
-}
-
-iostream::iostream(streambuf* sb, ostream* tied)
-{
- init (sb, tied);
-}
-
-// NOTE: extension for compatibility with old libg++.
-// Not really compatible with fistream::close().
-#ifdef _STREAM_COMPAT
-void ios::close()
-{
- if (_strbuf->_flags & _IO_IS_FILEBUF)
- ((struct filebuf*)rdbuf())->close();
- else if (_strbuf != NULL)
- rdbuf()->sync();
- _strbuf = NULL;
- _state = badbit;
-}
-
-int istream::skip(int i)
-{
- int old = (_flags & ios::skipws) != 0;
- if (i)
- _flags |= ios::skipws;
- else
- _flags &= ~ios::skipws;
- return old;
-}
-#endif
diff --git a/contrib/libio/iostream.h b/contrib/libio/iostream.h
deleted file mode 100644
index 19fbf8a4d95c..000000000000
--- a/contrib/libio/iostream.h
+++ /dev/null
@@ -1,273 +0,0 @@
-/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#ifndef _IOSTREAM_H
-#ifdef __GNUG__
-#pragma interface
-#endif
-#define _IOSTREAM_H
-
-#include <streambuf.h>
-
-extern "C++" {
-class istream; class ostream;
-typedef ios& (*__manip)(ios&);
-typedef istream& (*__imanip)(istream&);
-typedef ostream& (*__omanip)(ostream&);
-
-extern istream& ws(istream& ins);
-extern ostream& flush(ostream& outs);
-extern ostream& endl(ostream& outs);
-extern ostream& ends(ostream& outs);
-
-class ostream : virtual public ios
-{
- // NOTE: If fields are changed, you must fix _fake_ostream in stdstreams.C!
- void do_osfx();
- public:
- ostream() { }
- ostream(streambuf* sb, ostream* tied=NULL);
- int opfx() {
- if (!good()) return 0;
- else { if (_tie) _tie->flush(); _IO_flockfile(_strbuf); return 1;} }
- void osfx() { _IO_funlockfile(_strbuf);
- if (flags() & (ios::unitbuf|ios::stdio))
- do_osfx(); }
- ostream& flush();
- ostream& put(char c) { _strbuf->sputc(c); return *this; }
-#ifdef _STREAM_COMPAT
- /* Temporary binary compatibility. REMOVE IN NEXT RELEASE. */
- ostream& put(unsigned char c) { return put((char)c); }
- ostream& put(signed char c) { return put((char)c); }
-#endif
- ostream& write(const char *s, streamsize n);
- ostream& write(const unsigned char *s, streamsize n)
- { return write((const char*)s, n);}
- ostream& write(const signed char *s, streamsize n)
- { return write((const char*)s, n);}
- ostream& write(const void *s, streamsize n)
- { return write((const char*)s, n);}
- ostream& seekp(streampos);
- ostream& seekp(streamoff, _seek_dir);
- streampos tellp();
- ostream& form(const char *format ...);
- ostream& vform(const char *format, _IO_va_list args);
-
- ostream& operator<<(char c);
- ostream& operator<<(unsigned char c) { return (*this) << (char)c; }
- ostream& operator<<(signed char c) { return (*this) << (char)c; }
- ostream& operator<<(const char *s);
- ostream& operator<<(const unsigned char *s)
- { return (*this) << (const char*)s; }
- ostream& operator<<(const signed char *s)
- { return (*this) << (const char*)s; }
- ostream& operator<<(const void *p);
- ostream& operator<<(int n);
- ostream& operator<<(unsigned int n);
- ostream& operator<<(long n);
- ostream& operator<<(unsigned long n);
-#if defined(__GNUC__)
- __extension__ ostream& operator<<(long long n);
- __extension__ ostream& operator<<(unsigned long long n);
-#endif
- ostream& operator<<(short n) {return operator<<((int)n);}
- ostream& operator<<(unsigned short n) {return operator<<((unsigned int)n);}
-#if _G_HAVE_BOOL
- ostream& operator<<(bool b) { return operator<<((int)b); }
-#endif
- ostream& operator<<(double n);
- ostream& operator<<(float n) { return operator<<((double)n); }
-#if _G_HAVE_LONG_DOUBLE_IO
- ostream& operator<<(long double n);
-#else
- ostream& operator<<(long double n) { return operator<<((double)n); }
-#endif
- ostream& operator<<(__omanip func) { return (*func)(*this); }
- ostream& operator<<(__manip func) {(*func)(*this); return *this;}
- ostream& operator<<(streambuf*);
-#ifdef _STREAM_COMPAT
- streambuf* ostreambuf() const { return _strbuf; }
-#endif
-};
-
-class istream : virtual public ios
-{
- // NOTE: If fields are changed, you must fix _fake_istream in stdstreams.C!
-protected:
- _IO_size_t _gcount;
-
- int _skip_ws();
- public:
- istream(): _gcount (0) { }
- istream(streambuf* sb, ostream*tied=NULL);
- istream& get(char* ptr, int len, char delim = '\n');
- istream& get(unsigned char* ptr, int len, char delim = '\n')
- { return get((char*)ptr, len, delim); }
- istream& get(char& c);
- istream& get(unsigned char& c) { return get((char&)c); }
- istream& getline(char* ptr, int len, char delim = '\n');
- istream& getline(unsigned char* ptr, int len, char delim = '\n')
- { return getline((char*)ptr, len, delim); }
- istream& get(signed char& c) { return get((char&)c); }
- istream& get(signed char* ptr, int len, char delim = '\n')
- { return get((char*)ptr, len, delim); }
- istream& getline(signed char* ptr, int len, char delim = '\n')
- { return getline((char*)ptr, len, delim); }
- istream& read(char *ptr, streamsize n);
- istream& read(unsigned char *ptr, streamsize n)
- { return read((char*)ptr, n); }
- istream& read(signed char *ptr, streamsize n)
- { return read((char*)ptr, n); }
- istream& read(void *ptr, streamsize n)
- { return read((char*)ptr, n); }
- istream& get(streambuf& sb, char delim = '\n');
- istream& gets(char **s, char delim = '\n');
- int ipfx(int need = 0) {
- if (!good()) { set(ios::failbit); return 0; }
- else {
- _IO_flockfile(_strbuf);
- if (_tie && (need == 0 || rdbuf()->in_avail() < need)) _tie->flush();
- if (!need && (flags() & ios::skipws)) return _skip_ws();
- else return 1;
- }
- }
- int ipfx0() { // Optimized version of ipfx(0).
- if (!good()) { set(ios::failbit); return 0; }
- else {
- _IO_flockfile(_strbuf);
- if (_tie) _tie->flush();
- if (flags() & ios::skipws) return _skip_ws();
- else return 1;
- }
- }
- int ipfx1() { // Optimized version of ipfx(1).
- if (!good()) { set(ios::failbit); return 0; }
- else {
- _IO_flockfile(_strbuf);
- if (_tie && rdbuf()->in_avail() == 0) _tie->flush();
- return 1;
- }
- }
- void isfx() { _IO_funlockfile(_strbuf); }
- int get() { if (!ipfx1()) return EOF;
- else { int ch = _strbuf->sbumpc();
- if (ch == EOF) set(ios::eofbit);
- isfx();
- return ch;
- } }
- int peek();
- _IO_size_t gcount() { return _gcount; }
- istream& ignore(int n=1, int delim = EOF);
- int sync ();
- istream& seekg(streampos);
- istream& seekg(streamoff, _seek_dir);
- streampos tellg();
- istream& putback(char ch) {
- if (good() && _strbuf->sputbackc(ch) == EOF) clear(ios::badbit);
- return *this;}
- istream& unget() {
- if (good() && _strbuf->sungetc() == EOF) clear(ios::badbit);
- return *this;}
- istream& scan(const char *format ...);
- istream& vscan(const char *format, _IO_va_list args);
-#ifdef _STREAM_COMPAT
- istream& unget(char ch) { return putback(ch); }
- int skip(int i);
- streambuf* istreambuf() const { return _strbuf; }
-#endif
-
- istream& operator>>(char*);
- istream& operator>>(unsigned char* p) { return operator>>((char*)p); }
- istream& operator>>(signed char*p) { return operator>>((char*)p); }
- istream& operator>>(char& c);
- istream& operator>>(unsigned char& c) {return operator>>((char&)c);}
- istream& operator>>(signed char& c) {return operator>>((char&)c);}
- istream& operator>>(int&);
- istream& operator>>(long&);
-#if defined(__GNUC__)
- __extension__ istream& operator>>(long long&);
- __extension__ istream& operator>>(unsigned long long&);
-#endif
- istream& operator>>(short&);
- istream& operator>>(unsigned int&);
- istream& operator>>(unsigned long&);
- istream& operator>>(unsigned short&);
-#if _G_HAVE_BOOL
- istream& operator>>(bool&);
-#endif
- istream& operator>>(float&);
- istream& operator>>(double&);
- istream& operator>>(long double&);
- istream& operator>>( __manip func) {(*func)(*this); return *this;}
- istream& operator>>(__imanip func) { return (*func)(*this); }
- istream& operator>>(streambuf*);
-};
-
-class iostream : public istream, public ostream
-{
- public:
- iostream() { }
- iostream(streambuf* sb, ostream*tied=NULL);
-};
-
-class _IO_istream_withassign : public istream {
-public:
- _IO_istream_withassign& operator=(istream&);
- _IO_istream_withassign& operator=(_IO_istream_withassign& rhs)
- { return operator= (static_cast<istream&> (rhs)); }
-};
-
-class _IO_ostream_withassign : public ostream {
-public:
- _IO_ostream_withassign& operator=(ostream&);
- _IO_ostream_withassign& operator=(_IO_ostream_withassign& rhs)
- { return operator= (static_cast<ostream&> (rhs)); }
-};
-
-extern _IO_istream_withassign cin;
-// clog->rdbuf() == cerr->rdbuf()
-extern _IO_ostream_withassign cout, cerr;
-
-extern _IO_ostream_withassign clog
-#if _G_CLOG_CONFLICT
-__asm__ ("__IO_clog")
-#endif
-;
-
-extern istream& lock(istream& ins);
-extern istream& unlock(istream& ins);
-extern ostream& lock(ostream& outs);
-extern ostream& unlock(ostream& outs);
-
-struct Iostream_init { } ; // Compatibility hack for AT&T library.
-
-inline ios& dec(ios& i)
-{ i.setf(ios::dec, ios::dec|ios::hex|ios::oct); return i; }
-inline ios& hex(ios& i)
-{ i.setf(ios::hex, ios::dec|ios::hex|ios::oct); return i; }
-inline ios& oct(ios& i)
-{ i.setf(ios::oct, ios::dec|ios::hex|ios::oct); return i; }
-} // extern "C++"
-
-#endif /*!_IOSTREAM_H*/
diff --git a/contrib/libio/iostream.texi b/contrib/libio/iostream.texi
deleted file mode 100644
index 641cd7da22f0..000000000000
--- a/contrib/libio/iostream.texi
+++ /dev/null
@@ -1,1971 +0,0 @@
-\input texinfo @c -*-Texinfo-*-
-@c Copyright (c) 1993 Free Software Foundation, Inc.
-
-@c %**start of header
-@setfilename iostream.info
-@settitle The GNU C++ Iostream Library
-@setchapternewpage odd
-@c %**end of header
-
-@ifinfo
-@format
-START-INFO-DIR-ENTRY
-* iostream: (iostream). The C++ input/output facility.
-END-INFO-DIR-ENTRY
-@end format
-
-This file describes libio, the GNU library for C++ iostreams and C stdio.
-
-libio includes software developed by the University of California,
-Berkeley.
-
-Copyright (C) 1993 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-@ignore
-Permission is granted to process this file through TeX and print the
-results, provided the printed document carries copying permission
-notice identical to this one except for the removal of this paragraph
-(this paragraph not being relevant to the printed manual).
-
-@end ignore
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided also that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions.
-@end ifinfo
-
-@finalout
-@syncodeindex fn cp
-@syncodeindex vr cp
-
-@titlepage
-@title The GNU C++ Iostream Library
-@subtitle Reference Manual for @code{libio} Version 0.64
-@sp 3
-@author Per Bothner @hfill @code{bothner@@cygnus.com}
-@author Cygnus Support @hfill @code{doc@@cygnus.com}
-@page
-
-@vskip 0pt plus 1filll
-Copyright @copyright{} 1993 Free Software Foundation, Inc.
-
-@code{libio} includes software developed by the University of
-California, Berkeley.
-
-@code{libio} uses floating-point software written by David M. Gay, which
-includes the following notice:
-
-@quotation
-The author of this software is David M. Gay.
-
-Copyright (c) 1991 by AT&T.
-
-Permission to use, copy, modify, and distribute this software for any
-purpose without fee is hereby granted, provided that this entire notice
-is included in all copies of any software which is or includes a copy
-or modification of this software and in all copies of the supporting
-documentation for such software.
-
-THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
-WARRANTY. IN PARTICULAR, NEITHER THE AUTHOR NOR AT&T MAKES ANY
-REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
-OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
-@end quotation
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided also that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions.
-@end titlepage
-
-@ifinfo
-@node Top
-@top The GNU C++ Iostream Library
-
-This file provides reference information on the GNU C++ iostream library
-(@code{libio}), version 0.64.
-
-@menu
-* Introduction::
-* Operators:: Operators and default streams.
-* Streams:: Stream classes.
-* Files and Strings:: Classes for files and strings.
-* Streambuf:: Using the streambuf layer.
-* Stdio:: C input and output.
-* Index::
-@end menu
-@end ifinfo
-
-@node Introduction
-@chapter Introduction
-
-The iostream classes implement most of the features of AT&T version 2.0
-iostream library classes, and most of the features of the ANSI X3J16
-library draft (which is based on the AT&T design).
-
-This manual is meant as a reference; for tutorial material on iostreams,
-see the corresponding section of any recent popular introduction to C++.
-
-@menu
-* Copying:: Special GNU licensing terms for libio.
-* Acknowledgements:: Contributors to GNU iostream.
-@end menu
-
-@node Copying
-@section Licensing terms for @code{libio}
-
-Since the @code{iostream} classes are so fundamental to standard C++,
-the Free Software Foundation has agreed to a special exception to its
-standard license, when you link programs with @code{libio.a}:
-
-@quotation
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License.
-@end quotation
-
-The code is under the @sc{gnu} General Public License (version 2) for
-all other purposes than linking with this library; that means that you
-can modify and redistribute the code as usual, but remember that if you
-do, your modifications, and anything you link with the modified code,
-must be available to others on the same terms.
-
-These functions are also available as part of the @code{libg++}
-library; if you link with that library instead of @code{libio}, the
-@sc{gnu} Library General Public License applies.
-
-@node Acknowledgements
-@section Acknowledgements
-
-Per Bothner wrote most of the @code{iostream} library, but some portions
-have their origins elsewhere in the free software community. Heinz
-Seidl wrote the IO manipulators. The floating-point conversion software
-is by David M. Gay of AT&T. Some code was derived from parts of BSD
-4.4, which was written at the University of California, Berkeley.
-
-The iostream classes are found in the @code{libio} library. An early
-version was originally distributed in @code{libg++}, and they are still
-included there as well, for convenience if you need other @code{libg++}
-classes. Doug Lea was the original author of @code{libg++}, and some of
-the file-management code still in @code{libio} is his.
-
-Various people found bugs or offered suggestions. Hongjiu Lu worked
-hard to use the library as the default stdio implementation for Linux,
-and has provided much stress-testing of the library.
-
-@node Operators
-@chapter Operators and Default Streams
-
-The @sc{gnu} iostream library, @file{libio}, implements the standard
-input and output facilities for C++. These facilities are roughly
-analogous (in their purpose and ubiquity, at least) with those defined
-by the C @file{stdio} functions.
-
-Although these definitions come from a library, rather than being part
-of the ``core language'', they are sufficiently central to be specified
-in the latest working papers for C++.
-
-You can use two operators defined in this library for basic input and
-output operations. They are familiar from any C++ introductory
-textbook: @code{<<} for output, and @code{>>} for input. (Think of data
-flowing in the direction of the ``arrows''.)
-
-These operators are often used in conjunction with three streams that
-are open by default:
-
-@deftypevar ostream cout
-The standard output stream, analogous to the C @code{stdout}.
-@end deftypevar
-
-@deftypevar istream cin
-The standard input stream, analogous to the C @code{stdin}.
-@end deftypevar
-
-@deftypevar ostream cerr
-An alternative output stream for errors, analogous to the C
-@code{stderr}.
-@end deftypevar
-
-@noindent
-For example, this bare-bones C++ version of the traditional ``hello''
-program uses @code{<<} and @code{cout}:
-
-@example
-#include <iostream.h>
-
-int main(int argc, char **argv)
-@{
- cout << "Well, hi there.\n";
- return 0;
-@}
-@end example
-
-Casual use of these operators may be seductive, but---other than in
-writing throwaway code for your own use---it is not necessarily simpler
-than managing input and output in any other language. For example,
-robust code should check the state of the input and output streams
-between operations (for example, using the method @code{good}).
-@xref{States,,Checking the state of a stream}. You may also need to
-adjust maximum input or output field widths, using manipulators like
-@code{setw} or @code{setprecision}.
-
-@defop Operator ostream <<
-Write output to an open output stream of class @code{ostream}.
-Defined by this library on any @var{object} of a C++ primitive type, and
-on other classes of the library. You can overload the definition for any
-of your own applications' classes.
-
-Returns a reference to the implied argument @code{*this} (the open stream it
-writes on), permitting statements like
-@example
-cout << "The value of i is " << i << "\n";
-@end example
-@end defop
-
-@defop Operator istream >>
-Read input from an open input stream of class @code{istream}. Defined
-by this library on primitive numeric, pointer, and string types; you can
-extend the definition for any of your own applications' classes.
-
-Returns a reference to the implied argument @code{*this} (the open stream
-it reads), permitting multiple inputs in one statement.
-@end defop
-
-@node Streams
-@chapter Stream Classes
-
-The previous chapter referred in passing to the classes @code{ostream}
-and @code{istream}, for output and input respectively. These classes
-share certain properties, captured in their base class @code{ios}.
-
-@menu
-* Ios:: Shared properties.
-* Ostream:: Managing output streams.
-* Istream:: Managing input streams.
-* Iostream:: Input and output together.
-@end menu
-
-@node Ios
-@section Shared properties: class @code{ios}
-
-The base class @code{ios} provides methods to test and manage the state
-of input or output streams.
-
-@code{ios} delegates the job of actually reading and writing bytes to
-the abstract class @code{streambuf}, which is designed to provide
-buffered streams (compatible with C, in the @sc{gnu} implementation).
-@xref{Streambuf,,Using the @code{streambuf} layer}, for information on
-the facilities available at the @code{streambuf} level.
-
-@deftypefn Constructor {} ios::ios ([streambuf* @var{sb} @w{[, ostream*} @var{tie}])
-The @code{ios} constructor by default initializes a new @code{ios}, and
-if you supply a @code{streambuf} @var{sb} to associate with it, sets the
-state @code{good} in the new @code{ios} object. It also sets the
-default properties of the new object.
-
-@ignore
-@c FIXME--future: this (a) doesn't work, (b) is controversial at ANSI
-An @code{ios} without a @code{streambuf} has the state @code{bad} until
-you supply a @code{streambuf}; you can do that by assigning a new value
-to the @code{ios} with @samp{=}.
-@end ignore
-
-You can also supply an optional second argument @var{tie} to the
-constructor: if present, it is an initial value for @code{ios::tie}, to
-associate the new @code{ios} object with another stream.
-@end deftypefn
-
-@deftypefn Destructor {} ios::~ios ()
-The @code{ios} destructor is virtual, permitting application-specific
-behavior when a stream is closed---typically, the destructor frees any
-storage associated with the stream and releases any other associated
-objects.
-@end deftypefn
-
-@c FIXME-future: Is @deftypefn really the best way of displaying these?
-
-@c FIXME-future: Undocumented: ios::_throw_failure, ios::exceptions; things
-@c controlled by _STREAM_COMPAT; ios::Init; ios::_IO_fix_vtable.
-
-@menu
-* States:: Checking the state of a stream.
-* Format Control:: Choices in formatting.
-* Manipulators:: Convenient ways of changing stream properties.
-* Extending:: Extended data fields.
-* Synchronization:: Synchronizing related streams.
-* Streambuf from Ios:: Reaching the underlying streambuf.
-@end menu
-
-@node States
-@subsection Checking the state of a stream
-
-Use this collection of methods to test for (or signal) errors and other
-exceptional conditions of streams:
-
-@deftypefn Method {ios::operator void*} () const
-You can do a quick check on the state of the most recent operation on a
-stream by examining a pointer to the stream itself. The pointer is
-arbitrary except for its truth value; it is true if no failures have
-occurred (@code{ios::fail} is not true). For example, you might ask for
-input on @code{cin} only if all prior output operations succeeded:
-
-@example
-if (cout)
-@{
- // Everything OK so far
- cin >> new_value;
- @dots{}
-@}
-@end example
-@end deftypefn
-
-@deftypefn Method {ios::operator !} () const
-In case it is more convenient to check whether something has failed, the
-operator @code{!} returns true if @code{ios::fail} is true (an operation
-has failed). For example,
-you might issue an error message if input failed:
-
-@example
-if (!cin)
-@{
- // Oops
- cerr << "Eh?\n";
-@}
-@end example
-@end deftypefn
-
-@deftypefn Method iostate ios::rdstate () const
-Return the state flags for this stream. The value is from the
-enumeration @code{iostate}. You can test for any combination of
-
-@vtable @code
-@item goodbit
-There are no indications of exceptional states on this stream.
-
-@item eofbit
-End of file.
-
-@item failbit
-An operation has failed on this stream; this usually indicates bad
-format of input.
-
-@item badbit
-The stream is unusable.
-@end vtable
-@end deftypefn
-
-@deftypefn Method void ios::setstate (iostate @var{state})
-@findex ios::set
-Set the state flag for this stream to @var{state} @emph{in addition to}
-any state flags already set. Synonym (for upward compatibility):
-@code{ios::set}.
-
-See @code{ios::clear} to set the stream state without regard to existing
-state flags. See @code{ios::good}, @code{ios::eof}, @code{ios::fail},
-and @code{ios::bad}, to test the state.
-@end deftypefn
-
-@deftypefn Method int ios::good () const
-Test the state flags associated with this stream; true if no error
-indicators are set.
-@end deftypefn
-
-@deftypefn Method int ios::bad () const
-Test whether a stream is marked as unusable. (Whether
-@code{ios::badbit} is set.)
-@end deftypefn
-
-@deftypefn Method int ios::eof () const
-True if end of file was reached on this stream. (If @code{ios::eofbit}
-is set.)
-@end deftypefn
-
-@deftypefn Method int ios::fail () const
-Test for any kind of failure on this stream: @emph{either} some
-operation failed, @emph{or} the stream is marked as bad. (If either
-@code{ios::failbit} or @code{ios::badbit} is set.)
-@end deftypefn
-
-@deftypefn Method void ios::clear (iostate @var{state})
-@c FIXME-future: There is some complication to do with buffering and _throw_failure
-Set the state indication for this stream to the argument @var{state}.
-You may call @code{ios::clear} with no argument, in which case the state
-is set to @code{good} (no errors pending).
-
-See @code{ios::good}, @code{ios::eof}, @code{ios::fail}, and
-@code{ios::bad}, to test the state; see @code{ios::set} or
-@code{ios::setstate} for an alternative way of setting the state.
-@end deftypefn
-
-@node Format Control
-@subsection Choices in formatting
-
-These methods control (or report on) settings for some details of
-controlling streams, primarily to do with formatting output:
-
-@deftypefn Method char ios::fill () const
-Report on the padding character in use.
-@end deftypefn
-
-@deftypefn Method char ios::fill (char @var{padding})
-Set the padding character. You can also use the manipulator
-@code{setfill}. @xref{Manipulators,,Changing stream properties in
-expressions}.
-
-Default: blank.
-@end deftypefn
-
-@deftypefn Method int ios::precision () const
-Report the number of significant digits currently in use for output of
-floating point numbers.
-
-Default: @code{6}.
-@end deftypefn
-
-@deftypefn Method int ios::precision (int @var{signif})
-Set the number of significant digits (for input and output numeric
-conversions) to @var{signif}.
-
-@findex setprecision
-@cindex setting @code{ios::precision}
-You can also use the manipulator @code{setprecision} for this purpose.
-@xref{Manipulators,,Changing stream properties using manipulators}.
-@end deftypefn
-
-@deftypefn Method int ios::width () const
-Report the current output field width setting (the number of
-characters to write on the next @samp{<<} output operation).
-
-Default: @code{0}, which means to use as many characters as necessary.
-@end deftypefn
-
-@deftypefn Method int ios::width (int @var{num})
-Set the input field width setting to @var{num}. Return the
-@emph{previous} value for this stream.
-
-@findex setw
-@cindex setting @code{ios::width}
-This value resets to zero (the default) every time you use @samp{<<}; it is
-essentially an additional implicit argument to that operator. You can
-also use the manipulator @code{setw} for this purpose.
-@xref{Manipulators,,Changing stream properties using manipulators}.
-@end deftypefn
-
-@need 2000
-@deftypefn Method fmtflags ios::flags () const
-Return the current value of the complete collection of flags controlling
-the format state. These are the flags and their meanings when set:
-
-@vtable @code
-@item ios::dec
-@itemx ios::oct
-@itemx ios::hex
-What numeric base to use in converting integers from internal to display
-representation, or vice versa: decimal, octal, or hexadecimal,
-respectively. (You can change the base using the manipulator
-@code{setbase}, or any of the manipulators @code{dec}, @code{oct}, or
-@code{hex}; @pxref{Manipulators,,Changing stream properties in
-expressions}.)
-
-On input, if none of these flags is set, read numeric constants
-according to the prefix: decimal if no prefix (or a @samp{.} suffix),
-octal if a @samp{0} prefix is present, hexadecimal if a @samp{0x} prefix
-is present.
-
-Default: @code{dec}.
-
-@item ios::fixed
-Avoid scientific notation, and always show a fixed number of digits after
-the decimal point, according to the output precision in effect.
-Use @code{ios::precision} to set precision.
-
-@item ios::left
-@itemx ios::right
-@itemx ios::internal
-Where output is to appear in a fixed-width field; left-justified,
-right-justified, or with padding in the middle (e.g. between a numeric
-sign and the associated value), respectively.
-
-@item ios::scientific
-Use scientific (exponential) notation to display numbers.
-
-@item ios::showbase
-Display the conventional prefix as a visual indicator of the conversion
-base: no prefix for decimal, @samp{0} for octal, @samp{0x} for hexadecimal.
-
-@item ios::showpoint
-Display a decimal point and trailing zeros after it to fill out numeric
-fields, even when redundant.
-
-@item ios::showpos
-Display a positive sign on display of positive numbers.
-
-@item ios::skipws
-Skip white space. (On by default).
-
-@item ios::stdio
-Flush the C @code{stdio} streams @code{stdout} and @code{stderr} after
-each output operation (for programs that mix C and C++ output conventions).
-
-@item ios::unitbuf
-Flush after each output operation.
-
-@item ios::uppercase
-Use upper-case characters for the non-numeral elements in numeric
-displays; for instance, @samp{0X7A} rather than @samp{0x7a}, or
-@samp{3.14E+09} rather than @samp{3.14e+09}.
-@end vtable
-@end deftypefn
-
-@deftypefn Method fmtflags ios::flags (fmtflags @var{value})
-Set @var{value} as the complete collection of flags controlling the
-format state. The flag values are described under @samp{ios::flags ()}.
-
-Use @code{ios::setf} or @code{ios::unsetf} to change one property at a
-time.
-@end deftypefn
-
-@deftypefn Method fmtflags ios::setf (fmtflags @var{flag})
-Set one particular flag (of those described for @samp{ios::flags ()};
-return the complete collection of flags @emph{previously} in effect.
-(Use @code{ios::unsetf} to cancel.)
-@end deftypefn
-
-@deftypefn Method fmtflags ios::setf (fmtflags @var{flag}, fmtflags @var{mask})
-Clear the flag values indicated by @var{mask}, then set any of them that
-are also in @var{flag}. (Flag values are described for @samp{ios::flags
-()}.) Return the complete collection of flags @emph{previously} in
-effect. (See @code{ios::unsetf} for another way of clearing flags.)
-@end deftypefn
-
-@deftypefn Method fmtflags ios::unsetf (fmtflags @var{flag})
-Make certain @var{flag} (a combination of flag values described for
-@samp{ios::flags ()}) is not set for this stream; converse of
-@code{ios::setf}. Returns the old values of those flags.
-@c FIXME-future: should probably be fixed to give same result as setf.
-@end deftypefn
-
-@node Manipulators
-@subsection Changing stream properties using manipulators
-
-For convenience, @var{manipulators} provide a way to change certain
-properties of streams, or otherwise affect them, in the middle of
-expressions involving @samp{<<} or @samp{>>}. For example, you might
-write
-
-@example
-cout << "|" << setfill('*') << setw(5) << 234 << "|";
-@end example
-
-@noindent
-to produce @samp{|**234|} as output.
-
-@deftypefn Manipulator {} ws
-Skip whitespace.
-@end deftypefn
-
-@deftypefn Manipulator {} flush
-Flush an output stream. For example, @samp{cout << @dots{} <<flush;}
-has the same effect as @samp{cout << @dots{}; cout.flush();}.
-@end deftypefn
-
-@deftypefn Manipulator {} endl
-Write an end of line character @samp{\n}, then flushes the output stream.
-@end deftypefn
-
-@deftypefn Manipulator {} ends
-Write @samp{\0} (the string terminator character).
-@end deftypefn
-
-@deftypefn Manipulator {} setprecision (int @var{signif})
-You can change the value of @code{ios::precision} in @samp{<<}
-expressions with the manipulator @samp{setprecision(@var{signif})}; for
-example,
-
-@example
-cout << setprecision(2) << 4.567;
-@end example
-
-@noindent
-prints @samp{4.6}. Requires @file{#include <iomanip.h>}.
-@end deftypefn
-
-@deftypefn Manipulator {} setw (int @var{n})
-You can change the value of @code{ios::width} in @samp{<<} expressions
-with the manipulator @samp{setw(@var{n})}; for example,
-
-@example
-cout << setw(5) << 234;
-@end example
-
-@noindent
-prints @w{@samp{ 234}} with two leading blanks. Requires @file{#include
-<iomanip.h>}.
-@end deftypefn
-
-@deftypefn Manipulator {} setbase (int @var{base})
-Where @var{base} is one of @code{10} (decimal), @code{8} (octal), or
-@code{16} (hexadecimal), change the base value for numeric
-representations. Requires @file{#include <iomanip.h>}.
-@end deftypefn
-
-@deftypefn Manipulator {} dec
-Select decimal base; equivalent to @samp{setbase(10)}.
-@end deftypefn
-
-@deftypefn Manipulator {} hex
-Select hexadecimal base; equivalent to @samp{setbase(16)}.
-@end deftypefn
-
-@deftypefn Manipulator {} oct
-Select octal base; equivalent to @samp{setbase(8)}.
-@end deftypefn
-
-@deftypefn Manipulator {} setfill (char @var{padding})
-Set the padding character, in the same way as @code{ios::fill}.
-Requires @file{#include <iomanip.h>}.
-@end deftypefn
-
-@node Extending
-@subsection Extended data fields
-
-A related collection of methods allows you to extend this collection of
-flags and parameters for your own applications, without risk of conflict
-between them:
-
-@deftypefn Method {static fmtflags} ios::bitalloc ()
-Reserve a bit (the single bit on in the result) to use as a flag. Using
-@code{bitalloc} guards against conflict between two packages that use
-@code{ios} objects for different purposes.
-
-This method is available for upward compatibility, but is not in the
-@sc{ansi} working paper. The number of bits available is limited; a
-return value of @code{0} means no bit is available.
-@end deftypefn
-
-@deftypefn Method {static int} ios::xalloc ()
-Reserve space for a long integer or pointer parameter. The result is a
-unique nonnegative integer. You can use it as an index to
-@code{ios::iword} or @code{ios::pword}. Use @code{xalloc} to arrange
-for arbitrary special-purpose data in your @code{ios} objects, without
-risk of conflict between packages designed for different purposes.
-@end deftypefn
-
-@deftypefn Method long& ios::iword (int @var{index})
-Return a reference to arbitrary data, of long integer type, stored in an
-@code{ios} instance. @var{index}, conventionally returned from
-@code{ios::xalloc}, identifies what particular data you need.
-@end deftypefn
-
-@deftypefn Method long ios::iword (int @var{index}) const
-Return the actual value of a long integer stored in an @code{ios}.
-@end deftypefn
-
-@deftypefn Method void*& ios::pword (int @var{index})
-Return a reference to an arbitrary pointer, stored in an @code{ios}
-instance. @var{index}, originally returned from @code{ios::xalloc},
-identifies what particular pointer you need.
-@end deftypefn
-
-@deftypefn Method void* ios::pword (int @var{index}) const
-Return the actual value of a pointer stored in an @code{ios}.
-@end deftypefn
-
-@node Synchronization
-@subsection Synchronizing related streams
-
-You can use these methods to synchronize related streams with
-one another:
-
-@deftypefn Method ostream* ios::tie () const
-Report on what output stream, if any, is to be flushed before accessing
-this one. A pointer value of @code{0} means no stream is tied.
-@end deftypefn
-
-@deftypefn Method ostream* ios::tie (ostream* @var{assoc})
-Declare that output stream @var{assoc} must be flushed before accessing
-this stream.
-@end deftypefn
-
-@deftypefn Method int ios::sync_with_stdio ([int @var{switch}])
-Unless iostreams and C @code{stdio} are designed to work together, you
-may have to choose between efficient C++ streams output and output
-compatible with C @code{stdio}. Use @samp{ios::sync_with_stdio()} to
-select C compatibility.
-
-The argument @var{switch} is a @sc{gnu} extension; use @code{0} as the
-argument to choose output that is not necessarily compatible with C
-@code{stdio}. The default value for @var{switch} is @code{1}.
-
-If you install the @code{stdio} implementation that comes with @sc{gnu}
-@code{libio}, there are compatible input/output facilities for both C
-and C++. In that situation, this method is unnecessary---but you may
-still want to write programs that call it, for portability.
-@end deftypefn
-
-@node Streambuf from Ios
-@subsection Reaching the underlying @code{streambuf}
-
-Finally, you can use this method to access the underlying object:
-
-@deftypefn Method streambuf* ios::rdbuf () const
-Return a pointer to the @code{streambuf} object that underlies this
-@code{ios}.
-@end deftypefn
-
-@node Ostream
-@section Managing output streams: class @code{ostream}
-
-Objects of class @code{ostream} inherit the generic methods from
-@code{ios}, and in addition have the following methods available.
-Declarations for this class come from @file{iostream.h}.
-
-@deftypefn Constructor {} ostream::ostream ()
-The simplest form of the constructor for an @code{ostream} simply
-allocates a new @code{ios} object.
-@end deftypefn
-
-@deftypefn Constructor {} ostream::ostream (streambuf* @var{sb} @w{[, ostream} @var{tie}])
-This alternative constructor requires a first argument @var{sb} of type
-@code{streambuf*}, to use an existing open stream for output. It also
-accepts an optional second argument @var{tie}, to specify a related
-@code{ostream*} as the initial value for @code{ios::tie}.
-
-If you give the @code{ostream} a @code{streambuf} explicitly, using
-this constructor, the @var{sb} is @emph{not} destroyed (or deleted or
-closed) when the @code{ostream} is destroyed.
-@end deftypefn
-
-@menu
-* Writing:: Writing on an ostream.
-* Output Position:: Repositioning an ostream.
-* Ostream Housekeeping:: Miscellaneous ostream utilities.
-@end menu
-
-@node Writing
-@subsection Writing on an @code{ostream}
-
-These methods write on an @code{ostream} (you may also use the operator
-@code{<<}; @pxref{Operators,,Operators and Default Streams}).
-
-@deftypefn Method ostream& ostream::put (char @var{c})
-Write the single character @var{c}.
-@end deftypefn
-
-@deftypefn Method ostream& ostream::write (@var{string}, int @var{length})
-Write @var{length} characters of a string to this @code{ostream},
-beginning at the pointer @var{string}.
-
-@var{string} may have any of these types: @code{char*}, @code{unsigned
-char*}, @code{signed char*}.
-@end deftypefn
-
-@deftypefn Method ostream& ostream::form (const char *@var{format}, ...)
-A @sc{gnu} extension, similar to @code{fprintf(@var{file},
-@var{format}, ...)}.
-
-@var{format} is a @code{printf}-style format control string, which is used
-to format the (variable number of) arguments, printing the result on
-this @code{ostream}. See @code{ostream::vform} for a version that uses
-an argument list rather than a variable number of arguments.
-@end deftypefn
-
-@deftypefn Method ostream& ostream::vform (const char *@var{format}, va_list @var{args})
-A @sc{gnu} extension, similar to @code{vfprintf(@var{file},
-@var{format}, @var{args})}.
-
-@var{format} is a @code{printf}-style format control string, which is used
-to format the argument list @var{args}, printing the result on
-this @code{ostream}. See @code{ostream::form} for a version that uses a
-variable number of arguments rather than an argument list.
-@end deftypefn
-
-@node Output Position
-@subsection Repositioning an @code{ostream}
-
-You can control the output position (on output streams that actually
-support positions, typically files) with these methods:
-@c FIXME-future: sort out which classes support this and which
-@c don't; fstream, filebuf? And what is failure condition when not supported?
-
-@deftypefn Method streampos ostream::tellp ()
-Return the current write position in the stream.
-@end deftypefn
-
-@deftypefn Method ostream& ostream::seekp (streampos @var{loc})
-Reset the output position to @var{loc} (which is usually the result of a
-previous call to @code{ostream::tellp}). @var{loc} specifies an
-absolute position in the output stream.
-@end deftypefn
-
-@deftypefn Method ostream& ostream::seekp (streamoff @var{loc}, @var{rel})
-@findex ios::seekdir
-Reset the output position to @var{loc}, relative to the beginning, end,
-or current output position in the stream, as indicated by @var{rel} (a
-value from the enumeration @code{ios::seekdir}):
-
-@vtable @code
-@item beg
-Interpret @var{loc} as an absolute offset from the beginning of the
-file.
-
-@item cur
-Interpret @var{loc} as an offset relative to the current output
-position.
-
-@item end
-Interpret @var{loc} as an offset from the current end of the output
-stream.
-@end vtable
-@end deftypefn
-
-@node Ostream Housekeeping
-@subsection Miscellaneous @code{ostream} utilities
-
-You may need to use these @code{ostream} methods for housekeeping:
-
-@deftypefn Method ostream& flush ()
-Deliver any pending buffered output for this @code{ostream}.
-@end deftypefn
-
-@deftypefn Method int ostream::opfx ()
-@code{opfx} is a @dfn{prefix} method for operations on @code{ostream}
-objects; it is designed to be called before any further processing. See
-@code{ostream::osfx} for the converse.
-@c FIXME-future: specify sometime which methods start with opfx.
-
-@code{opfx} tests that the stream is in state @code{good}, and if so
-flushes any stream tied to this one.
-
-The result is @code{1} when @code{opfx} succeeds; else (if the stream state is
-not @code{good}), the result is @code{0}.
-@end deftypefn
-
-@deftypefn Method void ostream::osfx ()
-@code{osfx} is a @dfn{suffix} method for operations on @code{ostream}
-objects; it is designed to be called at the conclusion of any processing. All
-the @code{ostream} methods end by calling @code{osfx}. See
-@code{ostream::opfx} for the converse.
-
-If the @code{unitbuf} flag is set for this stream, @code{osfx} flushes
-any buffered output for it.
-
-If the @code{stdio} flag is set for this stream, @code{osfx} flushes any
-output buffered for the C output streams @file{stdout} and @file{stderr}.
-@end deftypefn
-
-@node Istream
-@section Managing input streams: class @code{istream}
-
-Class @code{istream} objects are specialized for input; as for
-@code{ostream}, they are derived from @code{ios}, so you can use any of
-the general-purpose methods from that base class. Declarations for this
-class also come from @file{iostream.h}.
-
-@deftypefn Constructor {} istream::istream ()
-When used without arguments, the @code{istream} constructor simply
-allocates a new @code{ios} object and initializes the input counter (the
-value reported by @code{istream::gcount}) to @code{0}.
-@end deftypefn
-
-@deftypefn Constructor {} istream::istream (streambuf *@var{sb} @w{[, ostream} @var{tie}])
-You can also call the constructor with one or two arguments. The first
-argument @var{sb} is a @code{streambuf*}; if you supply this pointer,
-the constructor uses that @code{streambuf} for input.
-You can use the second optional argument @var{tie} to specify a related
-output stream as the initial value for @code{ios::tie}.
-
-If you give the @code{istream} a @code{streambuf} explicitly, using
-this constructor, the @var{sb} is @emph{not} destroyed (or deleted or
-closed) when the @code{ostream} is destroyed.
-@end deftypefn
-
-@menu
-* Char Input:: Reading one character.
-* String Input:: Reading strings.
-* Input Position:: Repositioning an istream.
-* Istream Housekeeping:: Miscellaneous istream utilities.
-@end menu
-
-@node Char Input
-@subsection Reading one character
-
-Use these methods to read a single character from the input stream:
-
-@deftypefn Method int istream::get ()
-Read a single character (or @code{EOF}) from the input stream, returning
-it (coerced to an unsigned char) as the result.
-@end deftypefn
-
-@deftypefn Method istream& istream::get (char& @var{c})
-Read a single character from the input stream, into @code{&@var{c}}.
-@end deftypefn
-
-@deftypefn Method int istream::peek ()
-Return the next available input character, but @emph{without} changing
-the current input position.
-@end deftypefn
-
-@node String Input
-@subsection Reading strings
-
-Use these methods to read strings (for example, a line at a time) from
-the input stream:
-
-@deftypefn Method istream& istream::get (char* @var{c}, int @var{len} @w{[, char} @var{delim}])
-Read a string from the input stream, into the array at @var{c}.
-
-The remaining arguments limit how much to read: up to @samp{len-1}
-characters, or up to (but not including) the first occurrence in the
-input of a particular delimiter character @var{delim}---newline
-(@code{\n}) by default. (Naturally, if the stream reaches end of file
-first, that too will terminate reading.)
-
-If @var{delim} was present in the input, it remains available as if
-unread; to discard it instead, see @code{iostream::getline}.
-
-@code{get} writes @samp{\0} at the end of the string, regardless
-of which condition terminates the read.
-@end deftypefn
-
-@deftypefn Method istream& istream::get (streambuf& @var{sb} @w{[, char} @var{delim}])
-Read characters from the input stream and copy them on the
-@code{streambuf} object @var{sb}. Copying ends either just before the
-next instance of the delimiter character @var{delim} (newline @code{\n}
-by default), or when either stream ends. If @var{delim} was present in
-the input, it remains available as if unread.
-@end deftypefn
-
-@deftypefn Method istream& istream::getline (@var{charptr}, int @var{len} @w{[, char} @var{delim}])
-Read a line from the input stream, into the array at @var{charptr}.
-@var{charptr} may be any of three kinds of pointer: @code{char*},
-@code{unsigned char*}, or @code{signed char*}.
-
-The remaining arguments limit how much to read: up to (but not
-including) the first occurrence in the input of a line delimiter
-character @var{delim}---newline (@code{\n}) by default, or up to
-@samp{len-1} characters (or to end of file, if that happens sooner).
-
-If @code{getline} succeeds in reading a ``full line'', it also discards
-the trailing delimiter character from the input stream. (To preserve it
-as available input, see the similar form of @code{iostream::get}.)
-
-If @var{delim} was @emph{not} found before @var{len} characters or end
-of file, @code{getline} sets the @code{ios::fail} flag, as well as the
-@code{ios::eof} flag if appropriate.
-
-@code{getline} writes a null character at the end of the string, regardless
-of which condition terminates the read.
-@end deftypefn
-
-@deftypefn Method istream& istream::read (@var{pointer}, int @var{len})
-Read @var{len} bytes into the location at @var{pointer}, unless the
-input ends first.
-
-@var{pointer} may be of type @code{char*}, @code{void*}, @code{unsigned
-char*}, or @code{signed char*}.
-
-If the @code{istream} ends before reading @var{len} bytes, @code{read}
-sets the @code{ios::fail} flag.
-@end deftypefn
-
-@deftypefn Method istream& istream::gets (char **@var{s} @w{[, char} @var{delim}])
-A @sc{gnu} extension, to read an arbitrarily long string
-from the current input position to the next instance of the @var{delim}
-character (newline @code{\n} by default).
-
-To permit reading a string of arbitrary length, @code{gets} allocates
-whatever memory is required. Notice that the first argument @var{s} is
-an address to record a character pointer, rather than the pointer
-itself.
-@end deftypefn
-
-@deftypefn Method istream& istream::scan (const char *format ...)
-A @sc{gnu} extension, similar to @code{fscanf(@var{file},
-@var{format}, ...)}. The @var{format} is a @code{scanf}-style format
-control string, which is used to read the variables in the remainder of
-the argument list from the @code{istream}.
-@end deftypefn
-
-@deftypefn Method istream& istream::vscan (const char *format, va_list args)
-Like @code{istream::scan}, but takes a single @code{va_list} argument.
-@end deftypefn
-
-@node Input Position
-@subsection Repositioning an @code{istream}
-
-Use these methods to control the current input position:
-
-@deftypefn Method streampos istream::tellg ()
-Return the current read position, so that you can save it and return to
-it later with @code{istream::seekg}.
-@end deftypefn
-
-@deftypefn Method istream& istream::seekg (streampos @var{p})
-Reset the input pointer (if the input device permits it) to @var{p},
-usually the result of an earlier call to @code{istream::tellg}.
-@end deftypefn
-
-@deftypefn Method istream& istream::seekg (streamoff @var{offset}, ios::seek_dir @var{ref})
-Reset the input pointer (if the input device permits it) to @var{offset}
-characters from the beginning of the input, the current position, or the
-end of input. Specify how to interpret @var{offset} with one of these
-values for the second argument:
-
-@vtable @code
-@item ios::beg
-Interpret @var{loc} as an absolute offset from the beginning of the
-file.
-
-@item ios::cur
-Interpret @var{loc} as an offset relative to the current output
-position.
-
-@item ios::end
-Interpret @var{loc} as an offset from the current end of the output
-stream.
-@end vtable
-@end deftypefn
-
-@node Istream Housekeeping
-@subsection Miscellaneous @code{istream} utilities
-
-Use these methods for housekeeping on @code{istream} objects:
-
-@deftypefn Method int istream::gcount ()
-Report how many characters were read from this @code{istream} in the
-last unformatted input operation.
-@c FIXME! Define "unformatted input" somewhere...
-@end deftypefn
-
-@deftypefn Method int istream::ipfx (int @var{keepwhite})
-Ensure that the @code{istream} object is ready for reading; check for
-errors and end of file and flush any tied stream. @code{ipfx} skips
-whitespace if you specify @code{0} as the @var{keepwhite}
-argument, @emph{and} @code{ios::skipws} is set for this stream.
-
-To avoid skipping whitespace (regardless of the @code{skipws} setting on
-the stream), use @code{1} as the argument.
-
-Call @code{istream::ipfx} to simplify writing your own methods for reading
-@code{istream} objects.
-@end deftypefn
-
-@deftypefn Method void istream::isfx ()
-A placeholder for compliance with the draft @sc{ansi} standard; this
-method does nothing whatever.
-
-If you wish to write portable standard-conforming code on @code{istream}
-objects, call @code{isfx} after any operation that reads from an
-@code{istream}; if @code{istream::ipfx} has any special effects that
-must be cancelled when done, @code{istream::isfx} will cancel them.
-@end deftypefn
-
-@deftypefn Method istream& istream::ignore ([int @var{n}] @w{[, int} @var{delim}])
-Discard some number of characters pending input. The first optional
-argument @var{n} specifies how many characters to skip. The second
-optional argument @var{delim} specifies a ``boundary'' character:
-@code{ignore} returns immediately if this character appears in the
-input.
-
-By default, @var{delim} is @code{EOF}; that is, if you do not specify a
-second argument, only the count @var{n} restricts how much to ignore
-(while input is still available).
-
-If you do not specify how many characters to ignore, @code{ignore}
-returns after discarding only one character.
-@end deftypefn
-
-@deftypefn Method istream& istream::putback (char @var{ch})
-Attempts to back up one character, replacing the character backed-up
-over by @var{ch}. Returns @code{EOF} if this is not allowed. Putting
-back the most recently read character is always allowed. (This method
-corresponds to the C function @code{ungetc}.)
-@end deftypefn
-
-@deftypefn Method istream& istream::unget ()
-Attempt to back up one character.
-@end deftypefn
-
-@node Iostream
-@section Input and output together: class @code{iostream}
-
-If you need to use the same stream for input and output, you can use an
-object of the class @code{iostream}, which is derived from @emph{both}
-@code{istream} and @code{ostream}.
-
-The constructors for @code{iostream} behave just like the constructors
-for @code{istream}.
-
-@deftypefn Constructor {} iostream::iostream ()
-When used without arguments, the @code{iostream} constructor simply
-allocates a new @code{ios} object, and initializes the input counter
-(the value reported by @code{istream::gcount}) to @code{0}.
-@end deftypefn
-
-@deftypefn Constructor {} iostream::iostream (streambuf* @var{sb} @w{[, ostream*} @var{tie}])
-You can also call a constructor with one or two arguments. The first
-argument @var{sb} is a @code{streambuf*}; if you supply this pointer,
-the constructor uses that @code{streambuf} for input and output.
-
-You can use the optional second argument @var{tie} (an @code{ostream*})
-to specify a related output stream as the initial value for
-@code{ios::tie}.
-@end deftypefn
-
-@cindex @code{iostream} destructor
-@cindex destructor for @code{iostream}
-As for @code{ostream} and @code{istream}, @code{iostream} simply uses
-the @code{ios} destructor. However, an @code{iostream} is not deleted by
-its destructor.
-
-You can use all the @code{istream}, @code{ostream}, and @code{ios}
-methods with an @code{iostream} object.
-
-@node Files and Strings
-@chapter Classes for Files and Strings
-
-There are two very common special cases of input and output: using files,
-and using strings in memory.
-
-@code{libio} defines four specialized classes for these cases:
-
-@ftable @code
-@item ifstream
-Methods for reading files.
-
-@item ofstream
-Methods for writing files.
-
-@item istrstream
-Methods for reading strings from memory.
-
-@item ostrstream
-Methods for writing strings in memory.
-@end ftable
-
-@menu
-* Files:: Reading and writing files.
-* Strings:: Reading and writing strings in memory.
-@end menu
-
-@node Files
-@section Reading and writing files
-
-These methods are declared in @file{fstream.h}.
-
-@findex ifstream
-@cindex class @code{ifstream}
-You can read data from class @code{ifstream} with any operation from class
-@code{istream}. There are also a few specialized facilities:
-
-@deftypefn Constructor {} ifstream::ifstream ()
-Make an @code{ifstream} associated with a new file for input. (If you
-use this version of the constructor, you need to call
-@code{ifstream::open} before actually reading anything)
-@end deftypefn
-
-@deftypefn Constructor {} ifstream::ifstream (int @var{fd})
-Make an @code{ifstream} for reading from a file that was already open,
-using file descriptor @var{fd}. (This constructor is compatible with
-other versions of iostreams for @sc{posix} systems, but is not part of
-the @sc{ansi} working paper.)
-@end deftypefn
-
-@deftypefn Constructor {} ifstream::ifstream (const char* @var{fname} @w{[, int} @var{mode} @w{[, int} @var{prot}]])
-Open a file @code{*@var{fname}} for this @code{ifstream} object.
-
-By default, the file is opened for input (with @code{ios::in} as
-@var{mode}). If you use this constructor, the file will be closed when
-the @code{ifstream} is destroyed.
-
-You can use the optional argument @var{mode} to specify how to open the
-file, by combining these enumerated values (with @samp{|} bitwise or).
-(These values are actually defined in class @code{ios}, so that all
-file-related streams may inherit them.) Only some of these modes are
-defined in the latest draft @sc{ansi} specification; if portability is
-important, you may wish to avoid the others.
-
-@vtable @code
-@item ios::in
-Open for input. (Included in @sc{ansi} draft.)
-
-@item ios::out
-Open for output. (Included in @sc{ansi} draft.)
-
-@item ios::ate
-Set the initial input (or output) position to the end of the file.
-
-@item ios::app
-Seek to end of file before each write. (Included in @sc{ansi} draft.)
-
-@item ios::trunc
-Guarantee a fresh file; discard any contents that were previously
-associated with it.
-
-@item ios::nocreate
-Guarantee an existing file; fail if the specified file did not already
-exist.
-
-@item ios::noreplace
-Guarantee a new file; fail if the specified file already existed.
-
-@item ios::bin
-Open as a binary file (on systems where binary and text files have different
-properties, typically how @samp{\n} is mapped; included in @sc{ansi} draft).
-@end vtable
-
-@noindent
-The last optional argument @var{prot} is specific to Unix-like systems;
-it specifies the file protection (by default @samp{644}).
-@end deftypefn
-
-@deftypefn Method void ifstream::open (const char* @var{fname} @w{[, int} @var{mode} @w{[, int} @var{prot}]])
-Open a file explicitly after the associated @code{ifstream} object
-already exists (for instance, after using the default constructor). The
-arguments, options and defaults all have the same meanings as in the
-fully specified @code{ifstream} constructor.
-@end deftypefn
-
-@findex ostream
-@cindex class @code{ostream}
-You can write data to class @code{ofstream} with any operation from class
-@code{ostream}. There are also a few specialized facilities:
-
-@deftypefn Constructor {} ofstream::ofstream ()
-Make an @code{ofstream} associated with a new file for output.
-@end deftypefn
-
-@deftypefn Constructor {} ofstream::ofstream (int @var{fd})
-Make an @code{ofstream} for writing to a file that was already open,
-using file descriptor @var{fd}.
-@end deftypefn
-
-@deftypefn Constructor {} ofstream::ofstream (const char* @var{fname} @w{[, int} @var{mode} @w{[, int} @var{prot}]])
-Open a file @code{*@var{fname}} for this @code{ofstream} object.
-
-By default, the file is opened for output (with @code{ios::out} as @var{mode}).
-You can use the optional argument @var{mode} to specify how to open the
-file, just as described for @code{ifstream::ifstream}.
-
-The last optional argument @var{prot} specifies the file protection (by
-default @samp{644}).
-@end deftypefn
-
-@deftypefn Destructor {} ofstream::~ofstream ()
-The files associated with @code{ofstream} objects are closed when the
-corresponding object is destroyed.
-@end deftypefn
-
-@deftypefn Method void ofstream::open (const char* @var{fname} @w{[, int} @var{mode} @w{[, int} @var{prot}]])
-Open a file explicitly after the associated @code{ofstream} object
-already exists (for instance, after using the default constructor). The
-arguments, options and defaults all have the same meanings as in the
-fully specified @code{ofstream} constructor.
-@end deftypefn
-
-@findex fstream
-@cindex class @code{fstream}
-The class @code{fstream} combines the facilities of @code{ifstream} and
-@code{ofstream}, just as @code{iostream} combines @code{istream} and
-@code{ostream}.
-
-@c FIXME-future: say something about fstream constructor, maybe.
-
-@findex fstreambase
-@cindex class @code{fstreambase}
-The class @code{fstreambase} underlies both @code{ifstream} and
-@code{ofstream}. They both inherit this additional method:
-
-@deftypefn Method void fstreambase::close ()
-Close the file associated with this object, and set @code{ios::fail} in
-this object to mark the event.
-@end deftypefn
-
-@node Strings
-@section Reading and writing in memory
-
-@c FIXME!! Per, there's a lot of guesswork here---please check carefully!
-
-@findex istrstream
-@cindex class @code{istrstream}
-@findex ostrstream
-@cindex class @code{ostrstream}
-@findex strstream
-@cindex class @code{strstream}
-@findex strstreambase
-@cindex class @code{strstreambase}
-@findex strstreambuf
-@cindex class @code{strstreambuf}
-The classes @code{istrstream}, @code{ostrstream}, and @code{strstream}
-provide some additional features for reading and writing strings in
-memory---both static strings, and dynamically allocated strings. The
-underlying class @code{strstreambase} provides some features common to
-all three; @code{strstreambuf} underlies that in turn.
-
-@c FIXME-future: Document strstreambuf methods one day, when we document
-@c streambuf more fully.
-
-@deftypefn Constructor {} istrstream::istrstream (const char* @var{str} @w{[, int} @var{size}])
-Associate the new input string class @code{istrstream} with an existing
-static string starting at @var{str}, of size @var{size}. If you do not
-specify @var{size}, the string is treated as a @code{NUL} terminated string.
-@end deftypefn
-
-@deftypefn Constructor {} ostrstream::ostrstream ()
-Create a new stream for output to a dynamically managed string, which
-will grow as needed.
-@end deftypefn
-
-@deftypefn Constructor {} ostrstream::ostrstream (char* @var{str}, int @var{size} [,int @var{mode}])
-A new stream for output to a statically defined string of length
-@var{size}, starting at @var{str}. You may optionally specify one of
-the modes described for @code{ifstream::ifstream}; if you do not specify
-one, the new stream is simply open for output, with mode @code{ios::out}.
-@end deftypefn
-
-@deftypefn Method int ostrstream::pcount ()
-Report the current length of the string associated with this @code{ostrstream}.
-@end deftypefn
-
-@deftypefn Method char* ostrstream::str ()
-A pointer to the string managed by this @code{ostrstream}. Implies
-@samp{ostrstream::freeze()}.
-
-Note that if you want the string to be nul-terminated,
-you must do that yourself (perhaps by writing ends to the stream).
-@end deftypefn
-
-@deftypefn Method void ostrstream::freeze ([int @var{n}])
-If @var{n} is nonzero (the default), declare that the string associated
-with this @code{ostrstream} is not to change dynamically; while frozen,
-it will not be reallocated if it needs more space, and it will not be
-deallocated when the @code{ostrstream} is destroyed. Use
-@samp{freeze(1)} if you refer to the string as a pointer after creating
-it via @code{ostrstream} facilities.
-
-@samp{freeze(0)} cancels this declaration, allowing a dynamically
-allocated string to be freed when its @code{ostrstream} is destroyed.
-
-If this @code{ostrstream} is already static---that is, if it was created
-to manage an existing statically allocated string---@code{freeze} is
-unnecessary, and has no effect.
-@end deftypefn
-
-@deftypefn Method int ostrstream::frozen ()
-Test whether @code{freeze(1)} is in effect for this string.
-@end deftypefn
-
-@deftypefn Method strstreambuf* strstreambase::rdbuf ()
-A pointer to the underlying @code{strstreambuf}.
-@end deftypefn
-
-@node Streambuf
-@chapter Using the @code{streambuf} Layer
-
-The @code{istream} and @code{ostream} classes are meant to handle
-conversion between objects in your program and their textual representation.
-
-By contrast, the underlying @code{streambuf} class is for transferring
-raw bytes between your program, and input sources or output sinks.
-Different @code{streambuf} subclasses connect to different kinds of
-sources and sinks.
-
-The @sc{gnu} implementation of @code{streambuf} is still evolving; we
-describe only some of the highlights.
-
-@menu
-* Areas:: Areas in a streambuf.
-* Overflow:: Simple output re-direction
-* Formatting:: C-style formatting for streambuf objects.
-* Stdiobuf:: Wrappers for C stdio.
-* Procbuf:: Reading/writing from/to a pipe
-* Backing Up:: Marking and returning to a position.
-* Indirectbuf:: Forwarding I/O activity.
-@end menu
-
-@node Areas
-@section Areas of a @code{streambuf}
-
-Streambuf buffer management is fairly sophisticated (this is a
-nice way to say ``complicated''). The standard protocol
-has the following ``areas'':
-
-@itemize @bullet
-@item
-@cindex put area
-The @dfn{put area} contains characters waiting for output.
-
-@item
-@cindex get area
-The @dfn{get area} contains characters available for reading.
-@end itemize
-
-The @sc{gnu} @code{streambuf} design extends this, but the details are
-still evolving.
-
-The following methods are used to manipulate these areas.
-These are all protected methods, which are intended to be
-used by virtual function in classes derived from @code{streambuf}.
-They are also all ANSI/ISO-standard, and the ugly names
-are traditional.
-(Note that if a pointer points to the 'end' of an area,
-it means that it points to the character after the area.)
-
-@deftypefn Method char* streambuf::pbase () const
-Returns a pointer to the start of the put area.
-@end deftypefn
-
-@deftypefn Method char* streambuf::epptr () const
-Returns a pointer to the end of the put area.
-@end deftypefn
-
-@deftypefn Method char* streambuf::pptr () const
-If @code{pptr() < epptr ()}, the @code{pptr()}
-returns a pointer to the current put position.
-(In that case, the next write will
-overwrite @code{*pptr()}, and increment @code{pptr()}.)
-Otherwise, there is no put position available
-(and the next character written will cause @code{streambuf::overflow}
-to be called).
-@end deftypefn
-
-@deftypefn Method void streambuf::pbump (int @var{N})
-Add @var{N} to the current put pointer.
-No error checking is done.
-@end deftypefn
-
-@deftypefn Method void streambuf::setp (char* @var{P}, char* @var{E})
-Sets the start of the put area to @var{P}, the end of the put area to @var{E},
-and the current put pointer to @var{P} (also).
-@end deftypefn
-
-@deftypefn Method char* streambuf::eback () const
-Returns a pointer to the start of the get area.
-@end deftypefn
-
-@deftypefn Method char* streambuf::egptr () const
-Returns a pointer to the end of the get area.
-@end deftypefn
-
-@deftypefn Method char* streambuf::gptr () const
-If @code{gptr() < egptr ()}, then @code{gptr()}
-returns a pointer to the current get position.
-(In that case the next read will read @code{*gptr()},
-and possibly increment @code{gptr()}.)
-Otherwise, there is no read position available
-(and the next read will cause @code{streambuf::underflow}
-to be called).
-@end deftypefn
-
-@deftypefn Method void streambuf:gbump (int @var{N})
-Add @var{N} to the current get pointer.
-No error checking is done.
-@end deftypefn
-
-@deftypefn Method void streambuf::setg (char* @var{B}, char* @var{P}, char* @var{E})
-Sets the start of the get area to @var{B}, the end of the get area to @var{E},
-and the current put pointer to @var{P}.
-@end deftypefn
-
-@node Overflow
-@section Simple output re-direction by redefining @code{overflow}
-
-Suppose you have a function @code{write_to_window} that
-writes characters to a @code{window} object. If you want to use the
-ostream function to write to it, here is one (portable) way to do it.
-This depends on the default buffering (if any).
-
-@cartouche
-@smallexample
-#include <iostream.h>
-/* Returns number of characters successfully written to @var{win}. */
-extern int write_to_window (window* win, char* text, int length);
-
-class windowbuf : public streambuf @{
- window* win;
- public:
- windowbuf (window* w) @{ win = w; @}
- int sync ();
- int overflow (int ch);
- // Defining xsputn is an optional optimization.
- // (streamsize was recently added to ANSI C++, not portable yet.)
- streamsize xsputn (char* text, streamsize n);
-@};
-
-int windowbuf::sync ()
-@{ streamsize n = pptr () - pbase ();
- return (n && write_to_window (win, pbase (), n) != n) ? EOF : 0;
-@}
-
-int windowbuf::overflow (int ch)
-@{ streamsize n = pptr () - pbase ();
- if (n && sync ())
- return EOF;
- if (ch != EOF)
- @{
- char cbuf[1];
- cbuf[0] = ch;
- if (write_to_window (win, cbuf, 1) != 1)
- return EOF;
- @}
- pbump (-n); // Reset pptr().
- return 0;
-@}
-
-streamsize windowbuf::xsputn (char* text, streamsize n)
-@{ return sync () == EOF ? 0 : write_to_window (win, text, n); @}
-
-int
-main (int argc, char**argv)
-@{
- window *win = ...;
- windowbuf wbuf(win);
- ostream wstr(&wbuf);
- wstr << "Hello world!\n";
-@}
-@end smallexample
-@end cartouche
-
-
-
-@node Formatting
-@section C-style formatting for @code{streambuf} objects
-
-The @sc{gnu} @code{streambuf} class supports @code{printf}-like
-formatting and scanning.
-
-@deftypefn Method int streambuf::form (const char *@var{format}, ...)
-Similar to @code{fprintf(@var{file}, @var{format}, ...)}.
-The @var{format} is a @code{printf}-style format control string, which is used
-to format the (variable number of) arguments, printing the result on
-the @code{this} streambuf. The result is the number of characters printed.
-@end deftypefn
-
-@deftypefn Method int streambuf::vform (const char *@var{format}, va_list @var{args})
-Similar to @code{vfprintf(@var{file}, @var{format}, @var{args})}.
-The @var{format} is a @code{printf}-style format control string, which is used
-to format the argument list @var{args}, printing the result on
-the @code{this} streambuf. The result is the number of characters printed.
-@end deftypefn
-
-@deftypefn Method int streambuf::scan (const char *@var{format}, ...)
-Similar to @code{fscanf(@var{file}, @var{format}, ...)}.
-The @var{format} is a @code{scanf}-style format control string, which is used
-to read the (variable number of) arguments from the @code{this} streambuf.
-The result is the number of items assigned, or @code{EOF} in case of
-input failure before any conversion.
-@end deftypefn
-
-@deftypefn Method int streambuf::vscan (const char *@var{format}, va_list @var{args})
-Like @code{streambuf::scan}, but takes a single @code{va_list} argument.
-@end deftypefn
-
-@node Stdiobuf
-@section Wrappers for C @code{stdio}
-
-A @dfn{stdiobuf} is a @code{streambuf} object that points to
-a @code{FILE} object (as defined by @code{stdio.h}).
-All @code{streambuf} operations on the @code{stdiobuf} are forwarded
-to the @code{FILE}. Thus the @code{stdiobuf} object provides a
-wrapper around a @code{FILE}, allowing use of @code{streambuf}
-operations on a @code{FILE}. This can be useful when mixing
-C code with C++ code.
-
-The pre-defined streams @code{cin}, @code{cout}, and @code{cerr} are
-normally implemented as @code{stdiobuf} objects that point to
-respectively @code{stdin}, @code{stdout}, and @code{stderr}. This is
-convenient, but it does cost some extra overhead.
-
-If you set things up to use the implementation of @code{stdio} provided
-with this library, then @code{cin}, @code{cout}, and @code{cerr} will be
-set up to use @code{stdiobuf} objects, since you get their benefits
-for free. @xref{Stdio,,C Input and Output}.
-
-@ignore
-@c FIXME-future: setbuf is not yet documented, hence this para is not useful.
-Note that if you use @code{setbuf} to give a buffer to a @code{stdiobuf},
-that buffer will provide intermediate buffering in addition that
-whatever is done by the @code{FILE}.
-@end ignore
-
-@node Procbuf
-@section Reading/writing from/to a pipe
-
-The @dfn{procbuf} class is a @sc{gnu} extension. It is derived from
-@code{streambuf}. A @code{procbuf} can be @dfn{closed} (in which case
-it does nothing), or @dfn{open} (in which case it allows communicating
-through a pipe with some other program).
-
-@deftypefn Constructor {} procbuf::procbuf ()
-Creates a @code{procbuf} in a @dfn{closed} state.
-@end deftypefn
-
-@deftypefn Method procbuf* procbuf::open (const char *@var{command}, int @var{mode})
-Uses the shell (@file{/bin/sh}) to run a program specified by @var{command}.
-
-If @var{mode} is @samp{ios::in}, standard output from the program is sent
-to a pipe; you can read from the pipe by reading from the
-@code{procbuf}. (This is similar to @w{@samp{popen(@var{command}, "r")}}.)
-
-If @var{mode} is @samp{ios::out}, output written to the
-@code{procbuf} is written to a pipe; the program is set up to read its
-standard input from (the other end of) the pipe. (This is similar to
-@w{@samp{popen(@var{command}, "w")}}.)
-
-The @code{procbuf} must start out in the @dfn{closed} state.
-Returns @samp{*this} on success, and @samp{NULL} on failure.
-@end deftypefn
-
-@deftypefn Constructor {} procbuf::procbuf (const char *@var{command}, int @var{mode})
-Calls @samp{procbuf::open (@var{command}, @var{mode})}.
-@end deftypefn
-
-@deftypefn Method procbuf* procbuf::close ()
-Waits for the program to finish executing,
-and then cleans up the resources used.
-Returns @samp{*this} on success, and @samp{NULL} on failure.
-@end deftypefn
-
-@deftypefn Destructor {} procbuf::~procbuf ()
-Calls @samp{procbuf::close}.
-@end deftypefn
-
-@node Backing Up
-@section Backing up
-
-The @sc{gnu} iostream library allows you to ask a @code{streambuf} to
-remember the current position. This allows you to go back to this
-position later, after reading further. You can back up arbitrary
-amounts, even on unbuffered files or multiple buffers' worth, as long as
-you tell the library in advance. This unbounded backup is very useful
-for scanning and parsing applications. This example shows a typical
-scenario:
-
-@cartouche
-@smallexample
-// Read either "dog", "hound", or "hounddog".
-// If "dog" is found, return 1.
-// If "hound" is found, return 2.
-// If "hounddog" is found, return 3.
-// If none of these are found, return -1.
-int my_scan(streambuf* sb)
-@{
- streammarker fence(sb);
- char buffer[20];
- // Try reading "hounddog":
- if (sb->sgetn(buffer, 8) == 8
- && strncmp(buffer, "hounddog", 8) == 0)
- return 3;
- // No, no "hounddog": Back up to 'fence'
- sb->seekmark(fence); //
- // ... and try reading "dog":
- if (sb->sgetn(buffer, 3) == 3
- && strncmp(buffer, "dog", 3) == 0)
- return 1;
- // No, no "dog" either: Back up to 'fence'
- sb->seekmark(fence); //
- // ... and try reading "hound":
- if (sb->sgetn(buffer, 5) == 5
- && strncmp(buffer, "hound", 5) == 0)
- return 2;
- // No, no "hound" either: Back up and signal failure.
- sb->seekmark(fence); // Backup to 'fence'
- return -1;
-@}
-@end smallexample
-@end cartouche
-
-@deftypefn Constructor {} streammarker::streammarker (streambuf* @var{sbuf})
-Create a @code{streammarker} associated with @var{sbuf}
-that remembers the current position of the get pointer.
-@end deftypefn
-
-@deftypefn Method int streammarker::delta (streammarker& @var{mark2})
-Return the difference between the get positions corresponding
-to @code{*this} and @var{mark2} (which must point into the same
-@code{streambuffer} as @code{this}).
-@end deftypefn
-
-@deftypefn Method int streammarker::delta ()
-Return the position relative to the streambuffer's current get position.
-@end deftypefn
-
-@deftypefn Method int streambuf::seekmark (streammarker& @var{mark})
-Move the get pointer to where it (logically) was when @var{mark}
-was constructed.
-@end deftypefn
-
-@node Indirectbuf
-@section Forwarding I/O activity
-
-An @dfn{indirectbuf} is one that forwards all of its I/O requests
-to another streambuf.
-
-@ignore
-@c FIXME-future: get_stream and put_stream are so far undocumented.
-All get-related requests are sent to get_stream().
-All put-related requests are sent to put_stream().
-@end ignore
-
-An @code{indirectbuf} can be used to implement Common Lisp
-synonym-streams and two-way-streams:
-
-@example
-class synonymbuf : public indirectbuf @{
- Symbol *sym;
- synonymbuf(Symbol *s) @{ sym = s; @}
- virtual streambuf *lookup_stream(int mode) @{
- return coerce_to_streambuf(lookup_value(sym)); @}
-@};
-@end example
-
-@node Stdio
-@chapter C Input and Output
-
-@code{libio} is distributed with a complete implementation of the ANSI C
-@code{stdio} facility. It is implemented using @code{streambuf}
-objects. @xref{Stdiobuf,,Wrappers for C @code{stdio}}.
-
-The @code{stdio} package is intended as a replacement for the whatever
-@code{stdio} is in your C library.
-@ignore
-@c FIXME-future: This is not useful unless we specify what problems.
-It can co-exist with C libraries that have alternate implementations of
-stdio, but there may be some problems.
-@end ignore
-Since @code{stdio} works best when you build @code{libc} to contain it, and
-that may be inconvenient, it is not installed by default.
-
-Extensions beyond @sc{ansi}:
-
-@itemize @bullet
-@item
-A stdio @code{FILE} is identical to a streambuf.
-Hence there is no need to worry about synchronizing C and C++
-input/output---they are by definition always synchronized.
-
-@item
-If you create a new streambuf sub-class (in C++), you can use it as a
-@code{FILE} from C. Thus the system is extensible using the standard
-@code{streambuf} protocol.
-
-@item
-You can arbitrarily mix reading and writing, without having to seek
-in between.
-
-@item
-Unbounded @code{ungetc()} buffer.
-@end itemize
-
-@ignore
-@c FIXME-future: Per says this is not ready to go public at v0.5
-@node Libio buffer management
-@chapter Libio buffer management
-
-The libio user functions present an abstract sequence of characters,
-that they read and write from. A number of buffers are used to go
-between the user program and the abstract sequence. These buffers are
-concrete arrays of characters that contain some sub-sequence of the
-abstract sequence.
-
-The libio buffer management protocol is fairly complex. Its design is
-based on the C++ @code{streambuf} protocol, so that the C++
-@code{streambuf} classes can be trivially implemented on top of the
-libio protocol.
-
-The @dfn{write area} contains characters waiting for output.
-
-The @dfn{read area} contains characters available for reading.
-
-The @dfn{reserve area} is available to virtual methods.
-Usually, the get and/or put areas are part of the reserve area.
-
-The @dfn{main get area} contains characters that have
-been read in from the character source, but not yet
-read by the application.
-
-The @dfn{backup area} contains previously read data that is being saved
-because of a user request, or that have been "unread" (put back).
-@end ignore
-
-@ignore
-@c Per says this design is not finished
-@node Streambuf internals
-@chapter Streambuf internals
-
-@menu
-* Buffer management::
-* Filebuf internals::
-@end menu
-
-@node Buffer management
-@section Buffer management
-
-@subsection Areas
-
-NOTE: This chapter is due for an update.
-
-Streambuf buffer management is fairly sophisticated (this is a
-nice way to say "complicated"). The standard protocol
-has the following "areas":
-
-@itemize @bullet
-@cindex put area
-@item
-The @dfn{put area} contains characters waiting for output.
-@cindex get area
-@item
-The @dfn{get area} contains characters available for reading.
-@cindex reserve area
-@item
-The @dfn{reserve area} is available to virtual methods.
-Usually, the get and/or put areas are part of the reserve area.
-@end itemize
-
-The @sc{gnu} @code{streambuf} design extends this by supporting two
-get areas:
-@itemize @bullet
-@cindex main get area
-@item
-The @dfn{main get area} contains characters that have
-been read in from the character source, but not yet
-read by the application.
-@cindex backup area
-@item
-The @dfn{backup area} contains previously read data that is being
-saved because of a user request, or that have been "unread" (putback).
-@end itemize
-
-The backup and the main get area are logically contiguous: That is,
-the first character of the main get area follows the last character
-of the backup area.
-
-The @dfn{current get area} is whichever one of the backup or
-main get areas that is currently being read from.
-The other of the two is the @dfn{non-current get area}.
-
-@subsection Pointers
-
-The following @code{char*} pointers define the various areas.
-
-@deftypefn Method char* streambuf::base ()
-The start of the reserve area.
-@end deftypefn
-
-@deftypefn Method char* streambuf::ebuf ()
-The end of the reserve area.
-@end deftypefn
-
-@deftypefn Method char* streambuf::Gbase ()
-The start of the main get area.
-@end deftypefn
-
-@deftypefn Method char* streambuf::eGptr ()
-The end of the main get area.
-@end deftypefn
-
-@deftypefn Method char* streambuf::Bbase ()
-The start of the backup area.
-@end deftypefn
-
-@deftypefn Method char* streambuf::Bptr ()
-The start of the used part of the backup area.
-The area (@code{Bptr()} .. @code{eBptr()}) contains data that has been
-pushed back, while (@code{Bbase()} .. @code{eBptr()}) contains unused
-space available for future putbacks.
-@end deftypefn
-
-@deftypefn Method char* streambuf::eBptr ()
-The end of the backup area.
-@end deftypefn
-
-@deftypefn Method char* streambuf::Nbase ()
-The start of the non-current get area (either @code{main_gbase} or @code{backup_gbase}).
-@end deftypefn
-
-@deftypefn Method char* streambuf::eNptr ()
-The end of the non-current get area.
-@end deftypefn
-
-@node Filebuf internals
-@section Filebuf internals
-
-The @code{filebuf} is used a lot, so it is importamt that it be
-efficient. It is also supports rather complex semantics.
-so let us examine its implementation.
-
-@subsection Tied read and write pointers
-
-The streambuf model allows completely independent read and write pointers.
-However, a @code{filebuf} has only a single logical pointer used
-for both reads and writes. Since the @code{streambuf} protocol
-uses @code{gptr()} for reading and @code{pptr()} for writing,
-we map the logical file pointer into either @code{gptr()} or @code{pptr()}
-at different times.
-
-@itemize @bullet
-@item
-Reading is allowed when @code{gptr() < egptr()}, which we call get mode.
-
-@item
-Writing is allowed when @code{pptr() < epptr()}, which we call put mode.
-@end itemize
-
-@noindent
-A @code{filebuf} cannot be in get mode and put mode at the same time.
-
-We have up to two buffers:
-
-@itemize @bullet
-@item
-The backup area, defined by @code{Bbase()}, @code{Bptr()}, and @code{eBptr()}.
-This can be empty.
-
-@item
-The reserve area, which also contains the main get area.
-For an unbuffered file, the (@code{shortbuf()}..@code{shortbuf()+1}) is used,
-where @code{shortbuf()} points to a 1-byte buffer that is part of
-the @code{filebuf}.
-@end itemize
-
-@noindent
-The file system's idea of the current position is @code{eGptr()}.
-
-Characters that have been written into a buffer but not yet written
-out (flushed) to the file systems are those between @code{pbase()}
-and @code{pptr()}.
-
-The end of the valid data bytes is:
-@code{pptr() > eGptr() && pptr() < ebuf() ? pptr() : eGptr()}.
-
-If the @code{filebuf} is unbuffered or line buffered,
-the @code{eptr()} is @code{pbase()}. This forces a call
-to @code{overflow()} on each put of a character.
-The logical @code{epptr()} is @code{epptr() ? ebuf() : NULL}.
-(If the buffer is read-only, set @code{pbase()}, @code{pptr()},
-and @code{epptr()} to @code{NULL}. NOT!)
-@end ignore
-
-@node Index
-@unnumbered Index
-@printindex cp
-
-@contents
-@bye
diff --git a/contrib/libio/iostreamP.h b/contrib/libio/iostreamP.h
deleted file mode 100644
index c9c40cb6ba9a..000000000000
--- a/contrib/libio/iostreamP.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include "streambuf.h"
-#include "libioP.h"
diff --git a/contrib/libio/iostrerror.c b/contrib/libio/iostrerror.c
deleted file mode 100644
index 348e0956d70f..000000000000
--- a/contrib/libio/iostrerror.c
+++ /dev/null
@@ -1,12 +0,0 @@
-/* This should be replaced by whatever namespace-clean
- version of strerror you have available. */
-
-#include "libioP.h"
-extern char *strerror __P ((int));
-
-char *
-_IO_strerror (errnum)
- int errnum;
-{
- return strerror(errnum);
-}
diff --git a/contrib/libio/ioungetc.c b/contrib/libio/ioungetc.c
deleted file mode 100644
index 07f38e747bf3..000000000000
--- a/contrib/libio/ioungetc.c
+++ /dev/null
@@ -1,46 +0,0 @@
-/* Copyright (C) 1993, 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#include "libioP.h"
-
-int
-_IO_ungetc (c, fp)
- int c;
- _IO_FILE *fp;
-{
- int result;
- CHECK_FILE (fp, EOF);
- if (c == EOF)
- return EOF;
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
- _IO_flockfile (fp);
- result = _IO_sputbackc (fp, (unsigned char) c);
- _IO_cleanup_region_end (1);
- return result;
-}
-
-#ifdef weak_alias
-weak_alias (_IO_ungetc, ungetc)
-#endif
diff --git a/contrib/libio/iovfprintf.c b/contrib/libio/iovfprintf.c
deleted file mode 100644
index 755334c2bf23..000000000000
--- a/contrib/libio/iovfprintf.c
+++ /dev/null
@@ -1,890 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-/*
- * Copyright (c) 1990 Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms are permitted
- * provided that the above copyright notice and this paragraph are
- * duplicated in all such forms and that any documentation,
- * advertising materials, and other materials related to such
- * distribution and use acknowledge that the software was developed
- * by the University of California, Berkeley. The name of the
- * University may not be used to endorse or promote products derived
- * from this software without specific prior written permission.
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- */
-
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "%W% (Berkeley) %G%";
-#endif /* LIBC_SCCS and not lint */
-
-/*
- * Actual printf innards.
- *
- * This code is large and complicated...
- */
-
-#include <sys/types.h>
-#include "libioP.h"
-#include <string.h>
-#ifdef __STDC__
-#include <stdarg.h>
-#else
-#include <varargs.h>
-#endif
-
-#ifndef _IO_USE_DTOA
-int __cvt_double __P((double number, register int prec, int flags, int *signp, int fmtch, char *startp, char *endp));
-#endif
-
-/*
- * Define FLOATING_POINT to get floating point.
- */
-#ifndef NO_FLOATING_POINT
-#define FLOATING_POINT
-#endif
-
-/* end of configuration stuff */
-
-
-/*
- * Helper "class" for `fprintf to unbuffered': creates a
- * temporary buffer. */
-
-struct helper_file
-{
- struct _IO_FILE_plus _f;
- _IO_FILE *_put_stream;
-};
-
-static int
-_IO_helper_overflow (fp, c)
- _IO_FILE *fp;
- int c;
-{
- _IO_FILE *target = ((struct helper_file*)fp)->_put_stream;
- int used = fp->_IO_write_ptr - fp->_IO_write_base;
- if (used)
- {
- _IO_sputn(target, fp->_IO_write_base, used);
- fp->_IO_write_ptr -= used;
- }
- return _IO_putc (c, fp);
-}
-
-static struct _IO_jump_t _IO_helper_jumps = {
- JUMP_INIT_DUMMY,
- JUMP_INIT(finish, _IO_default_finish),
- JUMP_INIT(overflow, _IO_helper_overflow),
- JUMP_INIT(underflow, _IO_default_underflow),
- JUMP_INIT(uflow, _IO_default_uflow),
- JUMP_INIT(pbackfail, _IO_default_pbackfail),
- JUMP_INIT(xsputn, _IO_default_xsputn),
- JUMP_INIT(xsgetn, _IO_default_xsgetn),
- JUMP_INIT(seekoff, _IO_default_seekoff),
- JUMP_INIT(seekpos, _IO_default_seekpos),
- JUMP_INIT(setbuf, _IO_default_setbuf),
- JUMP_INIT(sync, _IO_default_sync),
- JUMP_INIT(doallocate, _IO_default_doallocate),
- JUMP_INIT(read, _IO_default_read),
- JUMP_INIT(write, _IO_default_write),
- JUMP_INIT(seek, _IO_default_seek),
- JUMP_INIT(close, _IO_default_close),
- JUMP_INIT(stat, _IO_default_stat)
-};
-
-static int
-helper_vfprintf (fp, fmt0, ap)
- _IO_FILE *fp;
- char const *fmt0;
- _IO_va_list ap;
-{
- char buf[_IO_BUFSIZ];
- struct helper_file helper;
- register _IO_FILE *hp = (_IO_FILE*)&helper;
- int result, to_flush;
-
- /* initialize helper */
- helper._put_stream = fp;
- hp->_IO_write_base = buf;
- hp->_IO_write_ptr = buf;
- hp->_IO_write_end = buf+_IO_BUFSIZ;
- hp->_IO_file_flags = _IO_MAGIC|_IO_NO_READS;
- _IO_JUMPS(hp) = &_IO_helper_jumps;
-
- /* Now print to helper instead. */
- result = _IO_vfprintf(hp, fmt0, ap);
-
- /* Now flush anything from the helper to the fp. */
- if ((to_flush = hp->_IO_write_ptr - hp->_IO_write_base) > 0)
- {
- if (_IO_sputn(fp, hp->_IO_write_base, to_flush) != to_flush)
- return EOF;
- }
- return result;
-}
-
-#ifdef FLOATING_POINT
-
-#include "floatio.h"
-#define BUF (MAXEXP+MAXFRACT+1) /* + decimal point */
-#define DEFPREC 6
-extern double modf __P((double, double*));
-
-#else /* no FLOATING_POINT */
-
-#define BUF 40
-
-#endif /* FLOATING_POINT */
-
-
-/*
- * Macros for converting digits to letters and vice versa
- */
-#define to_digit(c) ((c) - '0')
-#define is_digit(c) ((unsigned)to_digit(c) <= 9)
-#define to_char(n) ((n) + '0')
-
-/*
- * Flags used during conversion.
- */
-#define LONGINT 0x01 /* long integer */
-#define LONGDBL 0x02 /* long double; unimplemented */
-#define SHORTINT 0x04 /* short integer */
-#define ALT 0x08 /* alternate form */
-#define LADJUST 0x10 /* left adjustment */
-#define ZEROPAD 0x20 /* zero (as opposed to blank) pad */
-#define HEXPREFIX 0x40 /* add 0x or 0X prefix */
-
-int
-_IO_vfprintf (fp, fmt0, ap)
- _IO_FILE *fp;
- char const *fmt0;
- _IO_va_list ap;
-{
- register const char *fmt; /* format string */
- register int ch; /* character from fmt */
- register int n; /* handy integer (short term usage) */
- register char *cp; /* handy char pointer (short term usage) */
- const char *fmark; /* for remembering a place in fmt */
- register int flags; /* flags as above */
- int ret; /* return value accumulator */
- int width; /* width from format (%8d), or 0 */
- int prec; /* precision from format (%.3d), or -1 */
- char sign; /* sign prefix (' ', '+', '-', or \0) */
-#ifdef FLOATING_POINT
- int softsign; /* temporary negative sign for floats */
- double _double; /* double precision arguments %[eEfgG] */
-#ifndef _IO_USE_DTOA
- int fpprec; /* `extra' floating precision in [eEfgG] */
-#endif
-#endif
- unsigned long _ulong; /* integer arguments %[diouxX] */
- enum { OCT, DEC, HEX } base;/* base for [diouxX] conversion */
- int dprec; /* a copy of prec if [diouxX], 0 otherwise */
- int dpad; /* extra 0 padding needed for integers */
- int fieldsz; /* field size expanded by sign, dpad etc */
- /* The initialization of 'size' is to suppress a warning that
- 'size' might be used unitialized. It seems gcc can't
- quite grok this spaghetti code ... */
- int size = 0; /* size of converted field or string */
- char buf[BUF]; /* space for %c, %[diouxX], %[eEfgG] */
- char ox[2]; /* space for 0x hex-prefix */
-
- /*
- * BEWARE, these `goto error' on error, and PAD uses `n'.
- */
-#define PRINT(ptr, len) \
- do { if (_IO_sputn(fp,ptr, len) != len) goto error; } while (0)
-#define PAD_SP(howmany) if (_IO_padn(fp, ' ', howmany) < (howmany)) goto error;
-#define PAD_0(howmany) if (_IO_padn(fp, '0', howmany) < (howmany)) goto error;
-
- /*
- * To extend shorts properly, we need both signed and unsigned
- * argument extraction methods.
- */
-#define SARG() \
- (flags&LONGINT ? va_arg(ap, long) : \
- flags&SHORTINT ? (long)(short)va_arg(ap, int) : \
- (long)va_arg(ap, int))
-#define UARG() \
- (flags&LONGINT ? va_arg(ap, unsigned long) : \
- flags&SHORTINT ? (unsigned long)(unsigned short)va_arg(ap, int) : \
- (unsigned long)va_arg(ap, unsigned int))
-
- /* optimise stderr (and other unbuffered Unix files) */
- if (fp->_IO_file_flags & _IO_UNBUFFERED)
- return helper_vfprintf(fp, fmt0, ap);
-
- fmt = fmt0;
- ret = 0;
-
- /*
- * Scan the format for conversions (`%' character).
- */
- for (;;) {
- for (fmark = fmt; (ch = *fmt) != '\0' && ch != '%'; fmt++)
- /* void */;
- if ((n = fmt - fmark) != 0) {
- PRINT(fmark, n);
- ret += n;
- }
- if (ch == '\0')
- goto done;
- fmt++; /* skip over '%' */
-
- flags = 0;
- dprec = 0;
-#if defined(FLOATING_POINT) && !defined (_IO_USE_DTOA)
- fpprec = 0;
-#endif
- width = 0;
- prec = -1;
- sign = '\0';
-
-rflag: ch = *fmt++;
-reswitch: switch (ch) {
- case ' ':
- /*
- * ``If the space and + flags both appear, the space
- * flag will be ignored.''
- * -- ANSI X3J11
- */
- if (!sign)
- sign = ' ';
- goto rflag;
- case '#':
- flags |= ALT;
- goto rflag;
- case '*':
- /*
- * ``A negative field width argument is taken as a
- * - flag followed by a positive field width.''
- * -- ANSI X3J11
- * They don't exclude field widths read from args.
- */
- if ((width = va_arg(ap, int)) >= 0)
- goto rflag;
- width = -width;
- /* FALLTHROUGH */
- case '-':
- flags |= LADJUST;
- flags &= ~ZEROPAD; /* '-' disables '0' */
- goto rflag;
- case '+':
- sign = '+';
- goto rflag;
- case '.':
- if ((ch = *fmt++) == '*') {
- n = va_arg(ap, int);
- prec = n < 0 ? -1 : n;
- goto rflag;
- }
- n = 0;
- while (is_digit(ch)) {
- n = 10 * n + to_digit(ch);
- ch = *fmt++;
- }
- prec = n < 0 ? -1 : n;
- goto reswitch;
- case '0':
- /*
- * ``Note that 0 is taken as a flag, not as the
- * beginning of a field width.''
- * -- ANSI X3J11
- */
- if (!(flags & LADJUST))
- flags |= ZEROPAD; /* '-' disables '0' */
- goto rflag;
- case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
- n = 0;
- do {
- n = 10 * n + to_digit(ch);
- ch = *fmt++;
- } while (is_digit(ch));
- width = n;
- goto reswitch;
-#ifdef FLOATING_POINT
- case 'L':
- flags |= LONGDBL;
- goto rflag;
-#endif
- case 'h':
- flags |= SHORTINT;
- goto rflag;
- case 'l':
- flags |= LONGINT;
- goto rflag;
- case 'c':
- *(cp = buf) = va_arg(ap, int);
- size = 1;
- sign = '\0';
- break;
- case 'D':
- flags |= LONGINT;
- /*FALLTHROUGH*/
- case 'd':
- case 'i':
- _ulong = SARG();
- if ((long)_ulong < 0) {
- _ulong = -_ulong;
- sign = '-';
- }
- base = DEC;
- goto number;
-#ifdef FLOATING_POINT
- case 'e':
- case 'E':
- case 'f':
- case 'F':
- case 'g':
- case 'G':
- _double = va_arg(ap, double);
-#ifdef _IO_USE_DTOA
- {
- int fmt_flags = 0;
- int fill = ' ';
- if (flags & ALT)
- fmt_flags |= _IO_SHOWPOINT;
- if (flags & LADJUST)
- fmt_flags |= _IO_LEFT;
- else if (flags & ZEROPAD)
- fmt_flags |= _IO_INTERNAL, fill = '0';
- n = _IO_outfloat(_double, fp, ch, width,
- prec < 0 ? DEFPREC : prec,
- fmt_flags, sign, fill);
- if (n < 0)
- goto error;
- ret += n;
- }
- /* CHECK ERROR! */
- continue;
-#else
- /*
- * don't do unrealistic precision; just pad it with
- * zeroes later, so buffer size stays rational.
- */
- if (prec > MAXFRACT) {
- if ((ch != 'g' && ch != 'G') || (flags&ALT))
- fpprec = prec - MAXFRACT;
- prec = MAXFRACT;
- } else if (prec == -1)
- prec = DEFPREC;
- /* __cvt_double may have to round up before the
- "start" of its buffer, i.e.
- ``intf("%.2f", (double)9.999);'';
- if the first character is still NUL, it did.
- softsign avoids negative 0 if _double < 0 but
- no significant digits will be shown. */
- cp = buf;
- *cp = '\0';
- size = __cvt_double(_double, prec, flags, &softsign,
- ch, cp, buf + sizeof(buf));
- if (softsign)
- sign = '-';
- if (*cp == '\0')
- cp++;
- break;
-#endif
-#endif /* FLOATING_POINT */
- case 'n':
- if (flags & LONGINT)
- *va_arg(ap, long *) = ret;
- else if (flags & SHORTINT)
- *va_arg(ap, short *) = ret;
- else
- *va_arg(ap, int *) = ret;
- continue; /* no output */
- case 'O':
- flags |= LONGINT;
- /*FALLTHROUGH*/
- case 'o':
- _ulong = UARG();
- base = OCT;
- goto nosign;
- case 'p':
- /*
- * ``The argument shall be a pointer to void. The
- * value of the pointer is converted to a sequence
- * of printable characters, in an implementation-
- * defined manner.''
- * -- ANSI X3J11
- */
- /* NOSTRICT */
- _ulong = (unsigned long)va_arg(ap, void *);
- base = HEX;
- flags |= HEXPREFIX;
- ch = 'x';
- goto nosign;
- case 's':
- if ((cp = va_arg(ap, char *)) == NULL)
- cp = "(null)";
- if (prec >= 0) {
- /*
- * can't use strlen; can only look for the
- * NUL in the first `prec' characters, and
- * strlen() will go further.
- */
- char *p = (char*)memchr(cp, 0, prec);
-
- if (p != NULL) {
- size = p - cp;
- if (size > prec)
- size = prec;
- } else
- size = prec;
- } else
- size = strlen(cp);
- sign = '\0';
- break;
- case 'U':
- flags |= LONGINT;
- /*FALLTHROUGH*/
- case 'u':
- _ulong = UARG();
- base = DEC;
- goto nosign;
- case 'X':
- case 'x':
- _ulong = UARG();
- base = HEX;
- /* leading 0x/X only if non-zero */
- if (flags & ALT && _ulong != 0)
- flags |= HEXPREFIX;
-
- /* unsigned conversions */
-nosign: sign = '\0';
- /*
- * ``... diouXx conversions ... if a precision is
- * specified, the 0 flag will be ignored.''
- * -- ANSI X3J11
- */
-number: if ((dprec = prec) >= 0)
- flags &= ~ZEROPAD;
-
- /*
- * ``The result of converting a zero value with an
- * explicit precision of zero is no characters.''
- * -- ANSI X3J11
- */
- cp = buf + BUF;
- if (_ulong != 0 || prec != 0) {
- char *xdigs; /* digits for [xX] conversion */
- /*
- * unsigned mod is hard, and unsigned mod
- * by a constant is easier than that by
- * a variable; hence this switch.
- */
- switch (base) {
- case OCT:
- do {
- *--cp = to_char(_ulong & 7);
- _ulong >>= 3;
- } while (_ulong);
- /* handle octal leading 0 */
- if (flags & ALT && *cp != '0')
- *--cp = '0';
- break;
-
- case DEC:
- /* many numbers are 1 digit */
- while (_ulong >= 10) {
- *--cp = to_char(_ulong % 10);
- _ulong /= 10;
- }
- *--cp = to_char(_ulong);
- break;
-
- case HEX:
- if (ch == 'X')
- xdigs = "0123456789ABCDEF";
- else /* ch == 'x' || ch == 'p' */
- xdigs = "0123456789abcdef";
- do {
- *--cp = xdigs[_ulong & 15];
- _ulong >>= 4;
- } while (_ulong);
- break;
-
- default:
- cp = "bug in vform: bad base";
- goto skipsize;
- }
- }
- size = buf + BUF - cp;
- skipsize:
- break;
- default: /* "%?" prints ?, unless ? is NUL */
- if (ch == '\0')
- goto done;
- /* pretend it was %c with argument ch */
- cp = buf;
- *cp = ch;
- size = 1;
- sign = '\0';
- break;
- }
-
- /*
- * All reasonable formats wind up here. At this point,
- * `cp' points to a string which (if not flags&LADJUST)
- * should be padded out to `width' places. If
- * flags&ZEROPAD, it should first be prefixed by any
- * sign or other prefix; otherwise, it should be blank
- * padded before the prefix is emitted. After any
- * left-hand padding and prefixing, emit zeroes
- * required by a decimal [diouxX] precision, then print
- * the string proper, then emit zeroes required by any
- * leftover floating precision; finally, if LADJUST,
- * pad with blanks.
- */
-
- /*
- * compute actual size, so we know how much to pad.
- */
-#if defined(FLOATING_POINT) && !defined (_IO_USE_DTOA)
- fieldsz = size + fpprec;
-#else
- fieldsz = size;
-#endif
- dpad = dprec - size;
- if (dpad < 0)
- dpad = 0;
-
- if (sign)
- fieldsz++;
- else if (flags & HEXPREFIX)
- fieldsz += 2;
- fieldsz += dpad;
-
- /* right-adjusting blank padding */
- if ((flags & (LADJUST|ZEROPAD)) == 0)
- PAD_SP(width - fieldsz);
-
- /* prefix */
- if (sign) {
- PRINT(&sign, 1);
- } else if (flags & HEXPREFIX) {
- ox[0] = '0';
- ox[1] = ch;
- PRINT(ox, 2);
- }
-
- /* right-adjusting zero padding */
- if ((flags & (LADJUST|ZEROPAD)) == ZEROPAD)
- PAD_0(width - fieldsz);
-
- /* leading zeroes from decimal precision */
- PAD_0(dpad);
-
- /* the string or number proper */
- PRINT(cp, size);
-
-#if defined(FLOATING_POINT) && !defined (_IO_USE_DTOA)
- /* trailing f.p. zeroes */
- PAD_0(fpprec);
-#endif
-
- /* left-adjusting padding (always blank) */
- if (flags & LADJUST)
- PAD_SP(width - fieldsz);
-
- /* finally, adjust ret */
- ret += width > fieldsz ? width : fieldsz;
-
- }
-done:
- return ret;
-error:
- return EOF;
- /* NOTREACHED */
-}
-
-#if defined(FLOATING_POINT) && !defined(_IO_USE_DTOA)
-
-static char *exponent(register char *p, register int exp, int fmtch)
-{
- register char *t;
- char expbuf[MAXEXP];
-
- *p++ = fmtch;
- if (exp < 0) {
- exp = -exp;
- *p++ = '-';
- }
- else
- *p++ = '+';
- t = expbuf + MAXEXP;
- if (exp > 9) {
- do {
- *--t = to_char(exp % 10);
- } while ((exp /= 10) > 9);
- *--t = to_char(exp);
- for (; t < expbuf + MAXEXP; *p++ = *t++);
- }
- else {
- *p++ = '0';
- *p++ = to_char(exp);
- }
- return (p);
-}
-
-static char * round(double fract, int *exp,
- register char *start, register char *end,
- char ch, int *signp)
-{
- double tmp;
-
- if (fract)
- (void)modf(fract * 10, &tmp);
- else
- tmp = to_digit(ch);
- if (tmp > 4)
- for (;; --end) {
- if (*end == '.')
- --end;
- if (++*end <= '9')
- break;
- *end = '0';
- if (end == start) {
- if (exp) { /* e/E; increment exponent */
- *end = '1';
- ++*exp;
- }
- else { /* f; add extra digit */
- *--end = '1';
- --start;
- }
- break;
- }
- }
- /* ``"%.3f", (double)-0.0004'' gives you a negative 0. */
- else if (*signp == '-')
- for (;; --end) {
- if (*end == '.')
- --end;
- if (*end != '0')
- break;
- if (end == start)
- *signp = 0;
- }
- return (start);
-}
-
-int __cvt_double(double number, register int prec, int flags, int *signp,
- int fmtch, char *startp, char *endp)
-{
- register char *p, *t;
- register double fract;
- int dotrim = 0, expcnt, gformat = 0;
- double integer, tmp;
-
- expcnt = 0;
- if (number < 0) {
- number = -number;
- *signp = '-';
- } else
- *signp = 0;
-
- fract = modf(number, &integer);
-
- /* get an extra slot for rounding. */
- t = ++startp;
-
- /*
- * get integer portion of number; put into the end of the buffer; the
- * .01 is added for modf(356.0 / 10, &integer) returning .59999999...
- */
- for (p = endp - 1; p >= startp && integer; ++expcnt) {
- tmp = modf(integer / 10, &integer);
- *p-- = to_char((int)((tmp + .01) * 10));
- }
- switch (fmtch) {
- case 'f':
- case 'F':
- /* reverse integer into beginning of buffer */
- if (expcnt)
- for (; ++p < endp; *t++ = *p);
- else
- *t++ = '0';
- /*
- * if precision required or alternate flag set, add in a
- * decimal point.
- */
- if (prec || flags&ALT)
- *t++ = '.';
- /* if requires more precision and some fraction left */
- if (fract) {
- if (prec)
- do {
- fract = modf(fract * 10, &tmp);
- *t++ = to_char((int)tmp);
- } while (--prec && fract);
- if (fract)
- startp = round(fract, (int *)NULL, startp,
- t - 1, (char)0, signp);
- }
- for (; prec--; *t++ = '0');
- break;
- case 'e':
- case 'E':
-eformat: if (expcnt) {
- *t++ = *++p;
- if (prec || flags&ALT)
- *t++ = '.';
- /* if requires more precision and some integer left */
- for (; prec && ++p < endp; --prec)
- *t++ = *p;
- /*
- * if done precision and more of the integer component,
- * round using it; adjust fract so we don't re-round
- * later.
- */
- if (!prec && ++p < endp) {
- fract = 0;
- startp = round((double)0, &expcnt, startp,
- t - 1, *p, signp);
- }
- /* adjust expcnt for digit in front of decimal */
- --expcnt;
- }
- /* until first fractional digit, decrement exponent */
- else if (fract) {
- /* adjust expcnt for digit in front of decimal */
- for (expcnt = -1;; --expcnt) {
- fract = modf(fract * 10, &tmp);
- if (tmp)
- break;
- }
- *t++ = to_char((int)tmp);
- if (prec || flags&ALT)
- *t++ = '.';
- }
- else {
- *t++ = '0';
- if (prec || flags&ALT)
- *t++ = '.';
- }
- /* if requires more precision and some fraction left */
- if (fract) {
- if (prec)
- do {
- fract = modf(fract * 10, &tmp);
- *t++ = to_char((int)tmp);
- } while (--prec && fract);
- if (fract)
- startp = round(fract, &expcnt, startp,
- t - 1, (char)0, signp);
- }
- /* if requires more precision */
- for (; prec--; *t++ = '0');
-
- /* unless alternate flag, trim any g/G format trailing 0's */
- if (gformat && !(flags&ALT)) {
- while (t > startp && *--t == '0');
- if (*t == '.')
- --t;
- ++t;
- }
- t = exponent(t, expcnt, fmtch);
- break;
- case 'g':
- case 'G':
- /* a precision of 0 is treated as a precision of 1. */
- if (!prec)
- ++prec;
- /*
- * ``The style used depends on the value converted; style e
- * will be used only if the exponent resulting from the
- * conversion is less than -4 or greater than the precision.''
- * -- ANSI X3J11
- */
- if (expcnt > prec || (!expcnt && fract && fract < .0001)) {
- /*
- * g/G format counts "significant digits, not digits of
- * precision; for the e/E format, this just causes an
- * off-by-one problem, i.e. g/G considers the digit
- * before the decimal point significant and e/E doesn't
- * count it as precision.
- */
- --prec;
- fmtch -= 2; /* G->E, g->e */
- gformat = 1;
- goto eformat;
- }
- /*
- * reverse integer into beginning of buffer,
- * note, decrement precision
- */
- if (expcnt)
- for (; ++p < endp; *t++ = *p, --prec);
- else
- *t++ = '0';
- /*
- * if precision required or alternate flag set, add in a
- * decimal point. If no digits yet, add in leading 0.
- */
- if (prec || flags&ALT) {
- dotrim = 1;
- *t++ = '.';
- }
- else
- dotrim = 0;
- /* if requires more precision and some fraction left */
- if (fract) {
- if (prec) {
- /* If no integer part, don't count initial
- * zeros as significant digits. */
- do {
- fract = modf(fract * 10, &tmp);
- *t++ = to_char((int)tmp);
- } while(!tmp && !expcnt);
- while (--prec && fract) {
- fract = modf(fract * 10, &tmp);
- *t++ = to_char((int)tmp);
- }
- }
- if (fract)
- startp = round(fract, (int *)NULL, startp,
- t - 1, (char)0, signp);
- }
- /* alternate format, adds 0's for precision, else trim 0's */
- if (flags&ALT)
- for (; prec--; *t++ = '0');
- else if (dotrim) {
- while (t > startp && *--t == '0');
- if (*t != '.')
- ++t;
- }
- }
- return (t - startp);
-}
-
-#endif /* defined(FLOATING_POINT) && !defined(_IO_USE_DTOA) */
diff --git a/contrib/libio/iovfscanf.c b/contrib/libio/iovfscanf.c
deleted file mode 100644
index 0631458f21ec..000000000000
--- a/contrib/libio/iovfscanf.c
+++ /dev/null
@@ -1,790 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-/*
- * Copyright (c) 1990 The Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms are permitted
- * provided that the above copyright notice and this paragraph are
- * duplicated in all such forms and that any documentation,
- * advertising materials, and other materials related to such
- * distribution and use acknowledge that the software was developed
- * by the University of California, Berkeley. The name of the
- * University may not be used to endorse or promote products derived
- * from this software without specific prior written permission.
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- */
-
-/* Extensively hacked for GNU iostream by Per Bothner 1991, 1992, 1993.
- Changes copyright Free Software Foundation 1992, 1993. */
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "%W% (Berkeley) %G%";
-#endif /* LIBC_SCCS and not lint */
-
-#include <libioP.h>
-#include <ctype.h>
-#ifdef __STDC__
-#include <stdarg.h>
-#else
-#include <varargs.h>
-#endif
-
-#ifndef NO_FLOATING_POINT
-#define FLOATING_POINT
-#endif
-
-#ifdef FLOATING_POINT
-#include "floatio.h"
-#define BUF (MAXEXP+MAXFRACT+3) /* 3 = sign + decimal point + NUL */
-#else
-#define BUF 40
-#endif
-
-/*
- * Flags used during conversion.
- */
-#define LONG 0x01 /* l: long or double */
-#define LONGDBL 0x02 /* L: long double; unimplemented */
-#define SHORT 0x04 /* h: short */
-#define SUPPRESS 0x08 /* suppress assignment */
-#define POINTER 0x10 /* weird %p pointer (`fake hex') */
-#define NOSKIP 0x20 /* do not skip blanks */
-#define WIDTH 0x40 /* width */
-
-/*
- * The following are used in numeric conversions only:
- * SIGNOK, NDIGITS, DPTOK, and EXPOK are for floating point;
- * SIGNOK, NDIGITS, PFXOK, and NZDIGITS are for integral.
- */
-#define SIGNOK 0x40 /* +/- is (still) legal */
-#define NDIGITS 0x80 /* no digits detected */
-
-#define DPTOK 0x100 /* (float) decimal point is still legal */
-#define EXPOK 0x200 /* (float) exponent (e+3, etc) still legal */
-
-#define PFXOK 0x100 /* 0x prefix is (still) legal */
-#define NZDIGITS 0x200 /* no zero digits detected */
-
-/*
- * Conversion types.
- */
-#define CT_CHAR 0 /* %c conversion */
-#define CT_CCL 1 /* %[...] conversion */
-#define CT_STRING 2 /* %s conversion */
-#define CT_INT 3 /* integer, i.e., strtol or strtoul */
-#define CT_FLOAT 4 /* floating, i.e., strtod */
-
-#define u_char unsigned char
-#define u_long unsigned long
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-extern u_long strtoul __P((const char*, char**, int));
-extern long strtol __P((const char*, char**, int));
-static const u_char *__sccl __P((char *tab, const u_char *fmt));
-#ifndef _IO_USE_DTOA
-extern double atof();
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-/* If errp != NULL, *errp|=1 if we see a premature EOF;
- *errp|=2 if we an invalid character. */
-
-int
-_IO_vfscanf (fp, fmt0, ap, errp)
- _IO_FILE *fp;
- char const *fmt0;
- _IO_va_list ap;
- int *errp;
-{
- register const u_char *fmt = (const u_char *)fmt0;
- register int c; /* character from format, or conversion */
- register _IO_ssize_t width; /* field width, or 0 */
- register char *p; /* points into all kinds of strings */
- register int n; /* handy integer */
- register int flags = 0; /* flags as defined above */
- register char *p0; /* saves original value of p when necessary */
- int nassigned; /* number of fields assigned */
- int nread; /* number of characters consumed from fp */
- /* Assignments to base and ccfn are just to suppress warnings from gcc.*/
- int base = 0; /* base argument to strtol/strtoul */
- typedef u_long (*strtoulfn) __P((const char*, char**, int));
- strtoulfn ccfn = 0;
- /* conversion function (strtol/strtoul) */
- char ccltab[256]; /* character class table for %[...] */
- char buf[BUF]; /* buffer for numeric conversions */
- int seen_eof = 0;
-
- /* `basefix' is used to avoid `if' tests in the integer scanner */
- static short basefix[17] =
- { 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 };
-
- nassigned = 0;
- nread = 0;
- for (;;) {
- c = *fmt++;
- if (c == 0)
- goto done;
- if (isspace(c)) {
- for (;;) {
- c = _IO_getc(fp);
- if (c == EOF) {
- seen_eof++;
- break;
- }
- if (!isspace(c)) {
- _IO_ungetc (c, fp);
- break;
- }
- nread++;
- }
- continue;
- }
- if (c != '%')
- goto literal;
- width = 0;
- flags = 0;
- /*
- * switch on the format. continue if done;
- * break once format type is derived.
- */
-again: c = *fmt++;
- switch (c) {
- case '%':
-literal:
- n = _IO_getc(fp);
- if (n == EOF)
- goto eof_failure;
- if (n != c) {
- _IO_ungetc (n, fp);
- goto match_failure;
- }
- nread++;
- continue;
-
- case '*':
- if (flags) goto control_failure;
- flags = SUPPRESS;
- goto again;
- case 'l':
- if (flags & ~(SUPPRESS | WIDTH)) goto control_failure;
- flags |= LONG;
- goto again;
- case 'L':
- if (flags & ~(SUPPRESS | WIDTH)) goto control_failure;
- flags |= LONGDBL;
- goto again;
- case 'h':
- if (flags & ~(SUPPRESS | WIDTH)) goto control_failure;
- flags |= SHORT;
- goto again;
-
- case '0': case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
- if (flags & ~(SUPPRESS | WIDTH)) goto control_failure;
- flags |= WIDTH;
- width = width * 10 + c - '0';
- goto again;
-
- /*
- * Conversions.
- * Those marked `compat' are for 4.[123]BSD compatibility.
- *
- * (According to ANSI, E and X formats are supposed
- * to the same as e and x. Sorry about that.)
- */
- case 'D': /* compat */
- flags |= LONG;
- /* FALLTHROUGH */
- case 'd':
- c = CT_INT;
- ccfn = (strtoulfn)strtol;
- base = 10;
- break;
-
- case 'i':
- c = CT_INT;
- ccfn = (strtoulfn)strtol;
- base = 0;
- break;
-
- case 'O': /* compat */
- flags |= LONG;
- /* FALLTHROUGH */
- case 'o':
- c = CT_INT;
- ccfn = strtoul;
- base = 8;
- break;
-
- case 'u':
- c = CT_INT;
- ccfn = strtoul;
- base = 10;
- break;
-
- case 'X':
- case 'x':
- flags |= PFXOK; /* enable 0x prefixing */
- c = CT_INT;
- ccfn = strtoul;
- base = 16;
- break;
-
-#ifdef FLOATING_POINT
- case 'E': case 'F':
- case 'e': case 'f': case 'g':
- c = CT_FLOAT;
- break;
-#endif
-
- case 's':
- c = CT_STRING;
- break;
-
- case '[':
- fmt = __sccl(ccltab, fmt);
- flags |= NOSKIP;
- c = CT_CCL;
- break;
-
- case 'c':
- flags |= NOSKIP;
- c = CT_CHAR;
- break;
-
- case 'p': /* pointer format is like hex */
- flags |= POINTER | PFXOK;
- c = CT_INT;
- ccfn = strtoul;
- base = 16;
- break;
-
- case 'n':
- if (flags & SUPPRESS) /* ??? */
- continue;
- if (flags & SHORT)
- *va_arg(ap, short *) = nread;
- else if (flags & LONG)
- *va_arg(ap, long *) = nread;
- else
- *va_arg(ap, int *) = nread;
- continue;
-
- /*
- * Disgusting backwards compatibility hacks. XXX
- */
- case '\0': /* compat */
- nassigned = EOF;
- goto done;
-
- default: /* compat */
- if (isupper(c))
- flags |= LONG;
- c = CT_INT;
- ccfn = (strtoulfn)strtol;
- base = 10;
- break;
- }
-
- /*
- * We have a conversion that requires input.
- */
- if (_IO_peekc(fp) == EOF)
- goto eof_failure;
-
- /*
- * Consume leading white space, except for formats
- * that suppress this.
- */
- if ((flags & NOSKIP) == 0) {
- n = (unsigned char)*fp->_IO_read_ptr;
- while (isspace(n)) {
- fp->_IO_read_ptr++;
- nread++;
- n = _IO_peekc(fp);
- if (n == EOF)
- goto eof_failure;
- }
- /* Note that there is at least one character in
- the buffer, so conversions that do not set NOSKIP
- can no longer result in an input failure. */
- }
-
- /*
- * Do the conversion.
- */
- switch (c) {
-
- case CT_CHAR:
- /* scan arbitrary characters (sets NOSKIP) */
- if (width == 0) /* FIXME! */
- width = 1;
- if (flags & SUPPRESS) {
- _IO_size_t sum = 0;
- for (;;) {
- n = fp->_IO_read_end - fp->_IO_read_ptr;
- if (n < (int)width) {
- sum += n;
- width -= n;
- fp->_IO_read_ptr += n;
- if (__underflow(fp) == EOF)
- if (sum == 0)
- goto eof_failure;
- else {
- seen_eof++;
- break;
- }
- } else {
- sum += width;
- fp->_IO_read_ptr += width;
- break;
- }
- }
- nread += sum;
- } else {
- _IO_size_t r =
-
- _IO_XSGETN (fp, (char*)va_arg(ap, char*), width);
- if (r != width)
- goto eof_failure;
- nread += r;
- nassigned++;
- }
- break;
-
- case CT_CCL:
- /* scan a (nonempty) character class (sets NOSKIP) */
- if (width == 0)
- width = ~0; /* `infinity' */
- /* take only those things in the class */
- if (flags & SUPPRESS) {
- n = 0;
- while (ccltab[(unsigned char)*fp->_IO_read_ptr]) {
- n++, fp->_IO_read_ptr++;
- if (--width == 0)
- break;
- if (_IO_peekc(fp) == EOF) {
- if (n == 0)
- goto eof_failure;
- seen_eof++;
- break;
- }
- }
- if (n == 0)
- goto match_failure;
- } else {
- p0 = p = va_arg(ap, char *);
- while (ccltab[(unsigned char)*fp->_IO_read_ptr]) {
- *p++ = *fp->_IO_read_ptr++;
- if (--width == 0)
- break;
- if (_IO_peekc(fp) == EOF) {
- if (p == p0)
- goto eof_failure;
- seen_eof++;
- break;
- }
- }
- n = p - p0;
- if (n == 0)
- goto match_failure;
- *p = 0;
- nassigned++;
- }
- nread += n;
- break;
-
- case CT_STRING:
- /* like CCL, but zero-length string OK, & no NOSKIP */
- if (width == 0)
- width = ~0;
- if (flags & SUPPRESS) {
- n = 0;
- while (!isspace((unsigned char)*fp->_IO_read_ptr)) {
- n++, fp->_IO_read_ptr++;
- if (--width == 0)
- break;
- if (_IO_peekc(fp) == EOF) {
- seen_eof++;
- break;
- }
- }
- nread += n;
- } else {
- p0 = p = va_arg(ap, char *);
- while (!isspace((unsigned char)*fp->_IO_read_ptr)) {
- *p++ = *fp->_IO_read_ptr++;
- if (--width == 0)
- break;
- if (_IO_peekc(fp) == EOF) {
- seen_eof++;
- break;
- }
- }
- *p = 0;
- nread += p - p0;
- nassigned++;
- }
- continue;
-
- case CT_INT:
- /* scan an integer as if by strtol/strtoul */
- if (width == 0 || width > sizeof(buf) - 1)
- width = sizeof(buf) - 1;
- flags |= SIGNOK | NDIGITS | NZDIGITS;
- for (p = buf; width; width--) {
- c = (unsigned char)*fp->_IO_read_ptr;
- /*
- * Switch on the character; `goto ok'
- * if we accept it as a part of number.
- */
- switch (c) {
-
- /*
- * The digit 0 is always legal, but is
- * special. For %i conversions, if no
- * digits (zero or nonzero) have been
- * scanned (only signs), we will have
- * base==0. In that case, we should set
- * it to 8 and enable 0x prefixing.
- * Also, if we have not scanned zero digits
- * before this, do not turn off prefixing
- * (someone else will turn it off if we
- * have scanned any nonzero digits).
- */
- case '0':
- if (base == 0) {
- base = 8;
- flags |= PFXOK;
- }
- if (flags & NZDIGITS)
- flags &= ~(SIGNOK|NZDIGITS|NDIGITS);
- else
- flags &= ~(SIGNOK|PFXOK|NDIGITS);
- goto ok;
-
- /* 1 through 7 always legal */
- case '1': case '2': case '3':
- case '4': case '5': case '6': case '7':
- base = basefix[base];
- flags &= ~(SIGNOK | PFXOK | NDIGITS);
- goto ok;
-
- /* digits 8 and 9 ok iff decimal or hex */
- case '8': case '9':
- base = basefix[base];
- if (base <= 8)
- break; /* not legal here */
- flags &= ~(SIGNOK | PFXOK | NDIGITS);
- goto ok;
-
- /* letters ok iff hex */
- case 'A': case 'B': case 'C':
- case 'D': case 'E': case 'F':
- case 'a': case 'b': case 'c':
- case 'd': case 'e': case 'f':
- /* no need to fix base here */
- if (base <= 10)
- break; /* not legal here */
- flags &= ~(SIGNOK | PFXOK | NDIGITS);
- goto ok;
-
- /* sign ok only as first character */
- case '+': case '-':
- if (flags & SIGNOK) {
- flags &= ~SIGNOK;
- goto ok;
- }
- break;
-
- /* x ok iff flag still set & 2nd char */
- case 'x': case 'X':
- if (flags & PFXOK && p == buf + 1) {
- base = 16; /* if %i */
- flags &= ~PFXOK;
- goto ok;
- }
- break;
- }
-
- /*
- * If we got here, c is not a legal character
- * for a number. Stop accumulating digits.
- */
- break;
- ok:
- /*
- * c is legal: store it and look at the next.
- */
- *p++ = c;
- fp->_IO_read_ptr++;
- if (_IO_peekc(fp) == EOF) {
- seen_eof++;
- break; /* EOF */
- }
- }
- /*
- * If we had only a sign, it is no good; push
- * back the sign. If the number ends in `x',
- * it was [sign] '0' 'x', so push back the x
- * and treat it as [sign] '0'.
- */
- if (flags & NDIGITS) {
- if (p > buf)
- (void) _IO_ungetc(*(u_char *)--p, fp);
- goto match_failure;
- }
- c = ((u_char *)p)[-1];
- if (c == 'x' || c == 'X') {
- --p;
- (void) _IO_ungetc (c, fp);
- }
- if ((flags & SUPPRESS) == 0) {
- u_long res;
-
- *p = 0;
- res = (*ccfn)(buf, (char **)NULL, base);
- if (flags & POINTER)
- *va_arg(ap, void **) = (void *)res;
- else if (flags & SHORT)
- *va_arg(ap, short *) = res;
- else if (flags & LONG)
- *va_arg(ap, long *) = res;
- else
- *va_arg(ap, int *) = res;
- nassigned++;
- }
- nread += p - buf;
- break;
-
-#ifdef FLOATING_POINT
- case CT_FLOAT:
- /* scan a floating point number as if by strtod */
- if (width == 0 || width > sizeof(buf) - 1)
- width = sizeof(buf) - 1;
- flags |= SIGNOK | NDIGITS | DPTOK | EXPOK;
- for (p = buf; width; width--) {
- c = (unsigned char)*fp->_IO_read_ptr;
- /*
- * This code mimicks the integer conversion
- * code, but is much simpler.
- */
- switch (c) {
-
- case '0': case '1': case '2': case '3':
- case '4': case '5': case '6': case '7':
- case '8': case '9':
- flags &= ~(SIGNOK | NDIGITS);
- goto fok;
-
- case '+': case '-':
- if (flags & SIGNOK) {
- flags &= ~SIGNOK;
- goto fok;
- }
- break;
- case '.':
- if (flags & DPTOK) {
- flags &= ~(SIGNOK | DPTOK);
- goto fok;
- }
- break;
- case 'e': case 'E':
- /* no exponent without some digits */
- if ((flags&(NDIGITS|EXPOK)) == EXPOK) {
- flags =
- (flags & ~(EXPOK|DPTOK)) |
- SIGNOK | NDIGITS;
- goto fok;
- }
- break;
- }
- break;
- fok:
- *p++ = c;
- fp->_IO_read_ptr++;
- if (_IO_peekc(fp) == EOF) {
- seen_eof++;
- break; /* EOF */
- }
- }
- /*
- * If no digits, might be missing exponent digits
- * (just give back the exponent) or might be missing
- * regular digits, but had sign and/or decimal point.
- */
- if (flags & NDIGITS) {
- if (flags & EXPOK) {
- /* no digits at all */
- while (p > buf)
- _IO_ungetc (*(u_char *)--p, fp);
- goto match_failure;
- }
- /* just a bad exponent (e and maybe sign) */
- c = *(u_char *)--p;
- if (c != 'e' && c != 'E') {
- (void) _IO_ungetc (c, fp);/* sign */
- c = *(u_char *)--p;
- }
- (void) _IO_ungetc (c, fp);
- }
- if ((flags & SUPPRESS) == 0) {
- double res;
- *p = 0;
-#ifdef _IO_USE_DTOA
- res = _IO_strtod(buf, NULL);
-#else
- res = atof(buf);
-#endif
- if (flags & LONG)
- *va_arg(ap, double *) = res;
- else
- *va_arg(ap, float *) = res;
- nassigned++;
- }
- nread += p - buf;
- break;
-#endif /* FLOATING_POINT */
- }
- }
-eof_failure:
- seen_eof++;
-input_failure:
- if (nassigned == 0)
- nassigned = -1;
-control_failure:
-match_failure:
- if (errp)
- *errp |= 2;
-done:
- if (errp && seen_eof)
- *errp |= 1;
- return (nassigned);
-}
-
-/*
- * Fill in the given table from the scanset at the given format
- * (just after `['). Return a pointer to the character past the
- * closing `]'. The table has a 1 wherever characters should be
- * considered part of the scanset.
- */
-static const u_char *
-__sccl (tab, fmt)
- char *tab;
- const u_char *fmt;
-{
- register int c, n, v;
-
- /* first `clear' the whole table */
- c = *fmt++; /* first char hat => negated scanset */
- if (c == '^') {
- v = 1; /* default => accept */
- c = *fmt++; /* get new first char */
- } else
- v = 0; /* default => reject */
- /* should probably use memset here */
- for (n = 0; n < 256; n++)
- tab[n] = v;
- if (c == 0)
- return (fmt - 1);/* format ended before closing ] */
-
- /*
- * Now set the entries corresponding to the actual scanset
- * to the opposite of the above.
- *
- * The first character may be ']' (or '-') without being special;
- * the last character may be '-'.
- */
- v = 1 - v;
- for (;;) {
- tab[c] = v; /* take character c */
-doswitch:
- n = *fmt++; /* and examine the next */
- switch (n) {
-
- case 0: /* format ended too soon */
- return (fmt - 1);
-
- case '-':
- /*
- * A scanset of the form
- * [01+-]
- * is defined as `the digit 0, the digit 1,
- * the character +, the character -', but
- * the effect of a scanset such as
- * [a-zA-Z0-9]
- * is implementation defined. The V7 Unix
- * scanf treats `a-z' as `the letters a through
- * z', but treats `a-a' as `the letter a, the
- * character -, and the letter a'.
- *
- * For compatibility, the `-' is not considerd
- * to define a range if the character following
- * it is either a close bracket (required by ANSI)
- * or is not numerically greater than the character
- * we just stored in the table (c).
- */
- n = *fmt;
- if (n == ']' || n < c) {
- c = '-';
- break; /* resume the for(;;) */
- }
- fmt++;
- do { /* fill in the range */
- tab[++c] = v;
- } while (c < n);
-#if 1 /* XXX another disgusting compatibility hack */
- /*
- * Alas, the V7 Unix scanf also treats formats
- * such as [a-c-e] as `the letters a through e'.
- * This too is permitted by the standard....
- */
- goto doswitch;
-#else
- c = *fmt++;
- if (c == 0)
- return (fmt - 1);
- if (c == ']')
- return (fmt);
-#endif
- break;
-
- case ']': /* end of scanset */
- return (fmt);
-
- default: /* just another character */
- c = n;
- break;
- }
- }
- /* NOTREACHED */
-}
diff --git a/contrib/libio/iovsprintf.c b/contrib/libio/iovsprintf.c
deleted file mode 100644
index 617a5888405d..000000000000
--- a/contrib/libio/iovsprintf.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/* Copyright (C) 1993, 1997 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#include "libioP.h"
-#include "strfile.h"
-
-int
-_IO_vsprintf (string, format, args)
- char *string;
- const char *format;
- _IO_va_list args;
-{
- _IO_strfile sf;
-#ifdef _IO_MTSAFE_IO
- _IO_lock_t lock;
-#endif
- int ret;
-
-#ifdef _IO_MTSAFE_IO
- sf._sbf._f._lock = &lock;
-#endif
- _IO_init (&sf._sbf._f, 0);
- _IO_JUMPS (&sf._sbf._f) = &_IO_str_jumps;
- _IO_str_init_static (&sf._sbf._f, string, -1, string);
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, &sf);
- _IO_flockfile (&sf._sbf._f);
- ret = _IO_vfprintf (&sf._sbf._f, format, args);
- _IO_putc_unlocked ('\0', &sf._sbf._f);
- _IO_cleanup_region_end (1);
- return ret;
-}
-
-#ifdef weak_alias
-weak_alias (_IO_vsprintf, vsprintf)
-#elif defined(_G_STDIO_USES_LIBIO) && defined(_G_HAVE_WEAK_SYMBOL)
-int vsprintf (char *, const char *, _IO_va_list)
- __attribute__ ((weak, alias("_IO_vsprintf")));
-#endif
diff --git a/contrib/libio/iovsscanf.c b/contrib/libio/iovsscanf.c
deleted file mode 100644
index 6bdc3ccf0182..000000000000
--- a/contrib/libio/iovsscanf.c
+++ /dev/null
@@ -1,59 +0,0 @@
-/* Copyright (C) 1993, 1997 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#include "libioP.h"
-#include "strfile.h"
-
-int
-_IO_vsscanf (string, format, args)
- const char *string;
- const char *format;
- _IO_va_list args;
-{
- int ret;
- _IO_strfile sf;
-#ifdef _IO_MTSAFE_IO
- _IO_lock_t lock;
- sf._sbf._f._lock = &lock;
-#endif
- _IO_init (&sf._sbf._f, 0);
- _IO_JUMPS (&sf._sbf._f) = &_IO_str_jumps;
- _IO_str_init_static (&sf._sbf._f, (char*)string, 0, NULL);
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, &sf);
- _IO_flockfile (&sf._sbf._f);
- ret = _IO_vfscanf (&sf._sbf._f, format, args, NULL);
- _IO_cleanup_region_end (1);
- return ret;
-}
-
-#ifdef weak_alias
-weak_alias (_IO_vsscanf, __vsscanf)
-weak_alias (_IO_vsscanf, vsscanf)
-#elif defined(_G_STDIO_USES_LIBIO) && defined(_G_HAVE_WEAK_SYMBOL)
-int __vsscanf (const char *, const char *, _IO_va_list)
- __attribute__ ((weak, alias("_IO_vsscanf")));
-int vsscanf (const char *, const char *, _IO_va_list)
- __attribute__ ((weak, alias("_IO_vsscanf")));
-#endif
diff --git a/contrib/libio/isgetline.cc b/contrib/libio/isgetline.cc
deleted file mode 100644
index 5e48a000c09a..000000000000
--- a/contrib/libio/isgetline.cc
+++ /dev/null
@@ -1,153 +0,0 @@
-/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include <libioP.h>
-#include "iostream.h"
-#include <string.h>
-
-istream& istream::getline(char* buf, int len, char delim)
-{
- _gcount = 0;
- if (len <= 0)
- {
- set(ios::failbit);
- return *this;
- }
- int ch;
- if (ipfx1())
- {
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
- _strbuf);
- streambuf *sb = rdbuf();
- _gcount = _IO_getline_info(sb, buf, len - 1, delim, -1, &ch);
- if (ch != EOF)
- ch = sb->sbumpc();
- if (ch == EOF)
- set (_gcount == 0 ? (ios::failbit|ios::eofbit) : ios::eofbit);
- else if (ch != (unsigned char) delim)
- {
- set(ios::failbit);
- sb->sungetc(); // Leave delimiter unread.
- }
- isfx();
- _IO_cleanup_region_end (0);
- }
- else
- ch = EOF;
- buf[_gcount] = '\0';
- if (ch == (unsigned char)delim)
- _gcount++; // The delimiter is counted in the gcount().
- return *this;
-}
-
-istream& istream::get(char* buf, int len, char delim)
-{
- _gcount = 0;
- if (len <= 0)
- {
- set(ios::failbit);
- return *this;
- }
- if (ipfx1())
- {
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
- _strbuf);
- streambuf *sbuf = rdbuf();
- int ch;
- _gcount = _IO_getline_info(sbuf, buf, len - 1, delim, -1, &ch);
- if (_gcount == 0 && ch == EOF)
- set(ios::failbit|ios::eofbit);
- isfx();
- _IO_cleanup_region_end (0);
- }
- buf[_gcount] = '\0';
- return *this;
-}
-
-
-// from Doug Schmidt
-
-#define CHUNK_SIZE 512
-
-/* Reads an arbitrarily long input line terminated by a user-specified
- TERMINATOR. Super-nifty trick using recursion avoids unnecessary calls
- to NEW! */
-
-char *_sb_readline (streambuf *sb, long& total, char terminator)
-{
- char buf[CHUNK_SIZE];
- char *ptr;
- int ch;
-
- _IO_size_t count = _IO_getline_info(sb, buf, CHUNK_SIZE, terminator,
- -1, &ch);
- if (ch != EOF)
- ch = sb->sbumpc();
- long old_total = total;
- total += count;
- if (ch != EOF && ch != terminator) {
- total++; // Include ch in total.
- ptr = _sb_readline(sb, total, terminator);
- if (ptr) {
- memcpy(ptr + old_total, buf, count);
- ptr[old_total+count] = ch;
- }
- return ptr;
- }
-
- ptr = new char[total+1];
- if (ptr != NULL) {
- ptr[total] = '\0';
- memcpy(ptr + total - count, buf, count);
- }
- return ptr;
-}
-
-/* Reads an arbitrarily long input line terminated by TERMINATOR.
- This routine allocates its own memory, so the user should
- only supply the address of a (char *). */
-
-istream& istream::gets(char **s, char delim /* = '\n' */)
-{
- if (ipfx1()) {
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
- _strbuf);
- long size = 0;
- streambuf *sb = rdbuf();
- *s = _sb_readline (sb, size, delim);
- _gcount = *s ? size : 0;
- if (sb->_flags & _IO_EOF_SEEN) {
- set(ios::eofbit);
- if (_gcount == 0)
- set(ios::failbit);
- }
- isfx();
- _IO_cleanup_region_end (0);
- }
- else {
- _gcount = 0;
- *s = NULL;
- }
- return *this;
-}
diff --git a/contrib/libio/isgetsb.cc b/contrib/libio/isgetsb.cc
deleted file mode 100644
index 655c972589ab..000000000000
--- a/contrib/libio/isgetsb.cc
+++ /dev/null
@@ -1,63 +0,0 @@
-/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include "libioP.h"
-#include "iostream.h"
-#include <string.h>
-
-istream& istream::get(streambuf& sb, char delim /* = '\n' */)
-{
- _gcount = 0;
- if (ipfx1())
- {
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
- _strbuf);
- register streambuf* isb = rdbuf();
- for (;;)
- {
- streamsize len = isb->_IO_read_end - isb->_IO_read_ptr;
- if (len <= 0)
- if (__underflow(isb) == EOF)
- break;
- else
- len = isb->_IO_read_end - isb->_IO_read_ptr;
- char *delimp = (char*)memchr((void*)isb->_IO_read_ptr, delim, len);
- if (delimp != NULL)
- len = delimp - isb->_IO_read_ptr;
- int written = sb.sputn(isb->_IO_read_ptr, len);
- isb->_IO_read_ptr += written;
- _gcount += written;
- if (written != len)
- {
- set(ios::failbit);
- break;
- }
- if (delimp != NULL)
- break;
- }
- isfx();
- _IO_cleanup_region_end (0);
- }
- return *this;
-}
diff --git a/contrib/libio/isscan.cc b/contrib/libio/isscan.cc
deleted file mode 100644
index 977559c2cba5..000000000000
--- a/contrib/libio/isscan.cc
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include "libioP.h"
-#include <iostream.h>
-#include <stdarg.h>
-
-istream& istream::scan(const char *format ...)
-{
- if (ipfx0()) {
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
- _strbuf);
- va_list ap;
- va_start(ap, format);
- _strbuf->vscan(format, ap, this);
- va_end(ap);
- isfx();
- _IO_cleanup_region_end (0);
- }
- return *this;
-}
-
-istream& istream::vscan(const char *format, _IO_va_list args)
-{
- if (ipfx0())
- {
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
- _strbuf);
- _strbuf->vscan(format, args, this);
- isfx();
- _IO_cleanup_region_end (0);
- }
- return *this;
-}
diff --git a/contrib/libio/istream.h b/contrib/libio/istream.h
deleted file mode 100644
index f54ec1de9a1c..000000000000
--- a/contrib/libio/istream.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include <stream.h>
diff --git a/contrib/libio/libio.h b/contrib/libio/libio.h
deleted file mode 100644
index c453b77bf30d..000000000000
--- a/contrib/libio/libio.h
+++ /dev/null
@@ -1,365 +0,0 @@
-/* Copyright (C) 1991, 92, 93, 94, 95, 97, 98 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
- Written by Per Bothner <bothner@cygnus.com>.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#ifndef _IO_STDIO_H
-#define _IO_STDIO_H
-
-#include <_G_config.h>
-#define _IO_pos_t _G_fpos_t /* obsolete */
-#define _IO_fpos_t _G_fpos_t
-#define _IO_size_t _G_size_t
-#define _IO_ssize_t _G_ssize_t
-#define _IO_off_t _G_off_t
-#define _IO_pid_t _G_pid_t
-#define _IO_uid_t _G_uid_t
-#define _IO_HAVE_SYS_WAIT _G_HAVE_SYS_WAIT
-#define _IO_HAVE_ST_BLKSIZE _G_HAVE_ST_BLKSIZE
-#define _IO_BUFSIZ _G_BUFSIZ
-#define _IO_va_list _G_va_list
-#if defined(_G_IO_IO_FILE_VERSION) && _G_IO_IO_FILE_VERSION == 0x20001
-#define _IO_fpos64_t _G_fpos64_t
-#define _IO_off64_t _G_off64_t
-#endif
-
-#ifdef _G_NEED_STDARG_H
-/* This define avoids name pollution if we're using GNU stdarg.h */
-# define __need___va_list
-# include <stdarg.h>
-# ifdef __GNUC_VA_LIST
-# undef _IO_va_list
-# define _IO_va_list __gnuc_va_list
-# endif /* __GNUC_VA_LIST */
-#endif
-
-#ifndef __P
-# if _G_HAVE_SYS_CDEFS
-# include <sys/cdefs.h>
-# else
-# ifdef __STDC__
-# define __P(p) p
-# else
-# define __P(p) ()
-# endif
-# endif
-#endif /*!__P*/
-
-#ifndef __PMT
-# ifdef __STDC__
-# define __PMT(p) p
-# else
-# define __PMT(p) ()
-# endif
-#endif /*!__P*/
-
-/* For backward compatibility */
-#ifndef _PARAMS
-# define _PARAMS(protos) __P(protos)
-#endif /*!_PARAMS*/
-
-#ifndef __STDC__
-# define const
-#endif
-#define _IO_UNIFIED_JUMPTABLES 1
-#if !_G_HAVE_PRINTF_FP
-# define _IO_USE_DTOA 1
-#endif
-
-#ifndef EOF
-# define EOF (-1)
-#endif
-#ifndef NULL
-# if defined __GNUG__ && \
- (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 8))
-# define NULL (__null)
-# else
-# if !defined(__cplusplus)
-# define NULL ((void*)0)
-# else
-# define NULL (0)
-# endif
-# endif
-#endif
-
-#define _IOS_INPUT 1
-#define _IOS_OUTPUT 2
-#define _IOS_ATEND 4
-#define _IOS_APPEND 8
-#define _IOS_TRUNC 16
-#define _IOS_NOCREATE 32
-#define _IOS_NOREPLACE 64
-#define _IOS_BIN 128
-
-/* Magic numbers and bits for the _flags field.
- The magic numbers use the high-order bits of _flags;
- the remaining bits are available for variable flags.
- Note: The magic numbers must all be negative if stdio
- emulation is desired. */
-
-#define _IO_MAGIC 0xFBAD0000 /* Magic number */
-#define _OLD_STDIO_MAGIC 0xFABC0000 /* Emulate old stdio. */
-#define _IO_MAGIC_MASK 0xFFFF0000
-#define _IO_USER_BUF 1 /* User owns buffer; don't delete it on close. */
-#define _IO_UNBUFFERED 2
-#define _IO_NO_READS 4 /* Reading not allowed */
-#define _IO_NO_WRITES 8 /* Writing not allowd */
-#define _IO_EOF_SEEN 0x10
-#define _IO_ERR_SEEN 0x20
-#define _IO_DELETE_DONT_CLOSE 0x40 /* Don't call close(_fileno) on cleanup. */
-#define _IO_LINKED 0x80 /* Set if linked (using _chain) to streambuf::_list_all.*/
-#define _IO_IN_BACKUP 0x100
-#define _IO_LINE_BUF 0x200
-#define _IO_TIED_PUT_GET 0x400 /* Set if put and get pointer logicly tied. */
-#define _IO_CURRENTLY_PUTTING 0x800
-#define _IO_IS_APPENDING 0x1000
-#define _IO_IS_FILEBUF 0x2000
-#define _IO_BAD_SEEN 0x4000
-#define _IO_USER_LOCK 0x8000
-
-/* These are "formatting flags" matching the iostream fmtflags enum values. */
-#define _IO_SKIPWS 01
-#define _IO_LEFT 02
-#define _IO_RIGHT 04
-#define _IO_INTERNAL 010
-#define _IO_DEC 020
-#define _IO_OCT 040
-#define _IO_HEX 0100
-#define _IO_SHOWBASE 0200
-#define _IO_SHOWPOINT 0400
-#define _IO_UPPERCASE 01000
-#define _IO_SHOWPOS 02000
-#define _IO_SCIENTIFIC 04000
-#define _IO_FIXED 010000
-#define _IO_UNITBUF 020000
-#define _IO_STDIO 040000
-#define _IO_DONT_CLOSE 0100000
-#define _IO_BOOLALPHA 0200000
-
-
-struct _IO_jump_t; struct _IO_FILE;
-
-/* Handle lock. */
-#ifdef _IO_MTSAFE_IO
-# if defined __GLIBC__ && __GLIBC__ >= 2
-# if __GLIBC_MINOR__ > 0
-# include <bits/stdio-lock.h>
-# else
-# include <stdio-lock.h>
-# endif
-# define _IO_LOCK_T _IO_lock_t *
-# else
-/*# include <comthread.h>*/
-# endif
-#else
-# if defined(__GLIBC__) && __GLIBC__ >= 2
- typedef void _IO_lock_t;
-# define _IO_LOCK_T void *
-# else
-# ifdef __linux__
- struct _IO_lock_t { void *ptr; short int field1; short int field2; };
-# define _IO_LOCK_T struct _IO_lock_t
-# else
- typedef void _IO_lock_t;
-# endif
-# endif
-#endif
-
-
-/* A streammarker remembers a position in a buffer. */
-
-struct _IO_marker {
- struct _IO_marker *_next;
- struct _IO_FILE *_sbuf;
- /* If _pos >= 0
- it points to _buf->Gbase()+_pos. FIXME comment */
- /* if _pos < 0, it points to _buf->eBptr()+_pos. FIXME comment */
- int _pos;
-#if 0
- void set_streampos(streampos sp) { _spos = sp; }
- void set_offset(int offset) { _pos = offset; _spos = (streampos)(-2); }
- public:
- streammarker(streambuf *sb);
- ~streammarker();
- int saving() { return _spos == -2; }
- int delta(streammarker&);
- int delta();
-#endif
-};
-
-struct _IO_FILE {
- int _flags; /* High-order word is _IO_MAGIC; rest is flags. */
-#define _IO_file_flags _flags
-
- /* The following pointers correspond to the C++ streambuf protocol. */
- /* Note: Tk uses the _IO_read_ptr and _IO_read_end fields directly. */
- char* _IO_read_ptr; /* Current read pointer */
- char* _IO_read_end; /* End of get area. */
- char* _IO_read_base; /* Start of putback+get area. */
- char* _IO_write_base; /* Start of put area. */
- char* _IO_write_ptr; /* Current put pointer. */
- char* _IO_write_end; /* End of put area. */
- char* _IO_buf_base; /* Start of reserve area. */
- char* _IO_buf_end; /* End of reserve area. */
- /* The following fields are used to support backing up and undo. */
- char *_IO_save_base; /* Pointer to start of non-current get area. */
- char *_IO_backup_base; /* Pointer to first valid character of backup area */
- char *_IO_save_end; /* Pointer to end of non-current get area. */
-
- struct _IO_marker *_markers;
-
- struct _IO_FILE *_chain;
-
- int _fileno;
- int _blksize;
-#ifdef _G_IO_IO_FILE_VERSION
- _IO_off_t _old_offset;
-#else
- _IO_off_t _offset;
-#endif
-
-#define __HAVE_COLUMN /* temporary */
- /* 1+column number of pbase(); 0 is unknown. */
- unsigned short _cur_column;
- char _unused;
- char _shortbuf[1];
-
- /* char* _save_gptr; char* _save_egptr; */
-
-#ifdef _IO_LOCK_T
- _IO_LOCK_T _lock;
-#endif
-#if defined(_G_IO_IO_FILE_VERSION) && _G_IO_IO_FILE_VERSION == 0x20001
- _IO_off64_t _offset;
- int _unused2[16]; /* Make sure we don't get into trouble again. */
-#endif
-};
-
-#ifndef __cplusplus
-typedef struct _IO_FILE _IO_FILE;
-#endif
-
-#if defined(_G_IO_IO_FILE_VERSION) && _G_IO_IO_FILE_VERSION == 0x20001
-#define _IO_stdin_ _IO_2_1_stdin_
-#define _IO_stdout_ _IO_2_1_stdout_
-#define _IO_stderr_ _IO_2_1_stderr_
-#endif
-
-struct _IO_FILE_plus;
-extern struct _IO_FILE_plus _IO_stdin_, _IO_stdout_, _IO_stderr_;
-#define _IO_stdin ((_IO_FILE*)(&_IO_stdin_))
-#define _IO_stdout ((_IO_FILE*)(&_IO_stdout_))
-#define _IO_stderr ((_IO_FILE*)(&_IO_stderr_))
-
-
-/* Define the user-visible type, with user-friendly member names. */
-typedef struct
-{
- _IO_ssize_t (*read) __PMT ((struct _IO_FILE *, void *, _IO_ssize_t));
- _IO_ssize_t (*write) __PMT ((struct _IO_FILE *, const void *, _IO_ssize_t));
- _IO_off_t (*seek) __PMT ((struct _IO_FILE *, _IO_off_t, int));
- int (*close) __PMT ((struct _IO_FILE *));
-} _IO_cookie_io_functions_t;
-
-/* Special file type for fopencookie function. */
-struct _IO_cookie_file
-{
- struct _IO_FILE file;
- const void *vtable;
- void *cookie;
- _IO_cookie_io_functions_t io_functions;
-};
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-extern int __underflow __P ((_IO_FILE *));
-extern int __uflow __P ((_IO_FILE *));
-extern int __overflow __P ((_IO_FILE *, int));
-
-#define _IO_getc_unlocked(_fp) \
- ((_fp)->_IO_read_ptr >= (_fp)->_IO_read_end ? __uflow (_fp) \
- : *(unsigned char *) (_fp)->_IO_read_ptr++)
-#define _IO_peekc_unlocked(_fp) \
- ((_fp)->_IO_read_ptr >= (_fp)->_IO_read_end \
- && __underflow (_fp) == EOF ? EOF \
- : *(unsigned char *) (_fp)->_IO_read_ptr)
-
-#define _IO_putc_unlocked(_ch, _fp) \
- (((_fp)->_IO_write_ptr >= (_fp)->_IO_write_end) \
- ? __overflow (_fp, (unsigned char) (_ch)) \
- : (unsigned char) (*(_fp)->_IO_write_ptr++ = (_ch)))
-
-#define _IO_feof_unlocked(__fp) (((__fp)->_flags & _IO_EOF_SEEN) != 0)
-#define _IO_ferror_unlocked(__fp) (((__fp)->_flags & _IO_ERR_SEEN) != 0)
-
-extern int _IO_getc __P ((_IO_FILE *__fp));
-extern int _IO_putc __P ((int __c, _IO_FILE *__fp));
-extern int _IO_feof __P ((_IO_FILE *__fp));
-extern int _IO_ferror __P ((_IO_FILE *__fp));
-
-extern int _IO_peekc_locked __P ((_IO_FILE *__fp));
-
-/* This one is for Emacs. */
-#define _IO_PENDING_OUTPUT_COUNT(_fp) \
- ((_fp)->_IO_write_ptr - (_fp)->_IO_write_base)
-
-extern void _IO_flockfile __P ((_IO_FILE *));
-extern void _IO_funlockfile __P ((_IO_FILE *));
-extern int _IO_ftrylockfile __P ((_IO_FILE *));
-
-#ifdef _IO_MTSAFE_IO
-# define _IO_peekc(_fp) _IO_peekc_locked (_fp)
-#else
-# define _IO_peekc(_fp) _IO_peekc_unlocked (_fp)
-# define _IO_flockfile(_fp) /**/
-# define _IO_funlockfile(_fp) /**/
-# define _IO_ftrylockfile(_fp) /**/
-# define _IO_cleanup_region_start(_fct, _fp) /**/
-# define _IO_cleanup_region_end(_Doit) /**/
-#endif /* !_IO_MTSAFE_IO */
-
-
-extern int _IO_vfscanf __P ((_IO_FILE *, const char *, _IO_va_list, int *));
-extern int _IO_vfprintf __P ((_IO_FILE *, const char *, _IO_va_list));
-extern _IO_ssize_t _IO_padn __P ((_IO_FILE *, int, _IO_ssize_t));
-extern _IO_size_t _IO_sgetn __P ((_IO_FILE *, void *, _IO_size_t));
-
-#if defined(_G_IO_IO_FILE_VERSION) && _G_IO_IO_FILE_VERSION == 0x20001
-extern _IO_off64_t _IO_seekoff __P ((_IO_FILE *, _IO_off64_t, int, int));
-extern _IO_off64_t _IO_seekpos __P ((_IO_FILE *, _IO_off64_t, int));
-#else
-extern _IO_off_t _IO_seekoff __P ((_IO_FILE *, _IO_off_t, int, int));
-extern _IO_off_t _IO_seekpos __P ((_IO_FILE *, _IO_off_t, int));
-#endif
-
-extern void _IO_free_backup_area __P ((_IO_FILE *));
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _IO_STDIO_H */
diff --git a/contrib/libio/libioP.h b/contrib/libio/libioP.h
deleted file mode 100644
index be70f526bbe6..000000000000
--- a/contrib/libio/libioP.h
+++ /dev/null
@@ -1,648 +0,0 @@
-/* Copyright (C) 1993, 1997 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#ifndef _POSIX_SOURCE
-# define _POSIX_SOURCE
-#endif
-
-#include <errno.h>
-#ifndef __set_errno
-# define __set_errno(Val) errno = (Val)
-#endif
-
-#ifdef _IO_MTSAFE_IO
-# if defined __GLIBC__ && __GLIBC__ >= 2
-# if __GLIBC_MINOR__ > 0
-# include <bits/libc-lock.h>
-# else
-# include <libc-lock.h>
-# endif
-# else
-/*# include <comthread.h>*/
-# endif
-#endif
-
-#include "iolibio.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define _IO_seek_set 0
-#define _IO_seek_cur 1
-#define _IO_seek_end 2
-
-/* THE JUMPTABLE FUNCTIONS.
-
- * The _IO_FILE type is used to implement the FILE type in GNU libc,
- * as well as the streambuf class in GNU iostreams for C++.
- * These are all the same, just used differently.
- * An _IO_FILE (or FILE) object is allows followed by a pointer to
- * a jump table (of pointers to functions). The pointer is accessed
- * with the _IO_JUMPS macro. The jump table has a eccentric format,
- * so as to be compatible with the layout of a C++ virtual function table.
- * (as implemented by g++). When a pointer to a streambuf object is
- * coerced to an (_IO_FILE*), then _IO_JUMPS on the result just
- * happens to point to the virtual function table of the streambuf.
- * Thus the _IO_JUMPS function table used for C stdio/libio does
- * double duty as the virtual function table for C++ streambuf.
- *
- * The entries in the _IO_JUMPS function table (and hence also the
- * virtual functions of a streambuf) are described below.
- * The first parameter of each function entry is the _IO_FILE/streambuf
- * object being acted on (i.e. the 'this' parameter).
- */
-
-#define _IO_JUMPS(THIS) ((struct _IO_FILE_plus *) (THIS))->vtable
-#ifdef _G_USING_THUNKS
-# define JUMP_FIELD(TYPE, NAME) TYPE NAME
-# define JUMP0(FUNC, THIS) _IO_JUMPS(THIS)->FUNC (THIS)
-# define JUMP1(FUNC, THIS, X1) _IO_JUMPS(THIS)->FUNC (THIS, X1)
-# define JUMP2(FUNC, THIS, X1, X2) _IO_JUMPS(THIS)->FUNC (THIS, X1, X2)
-# define JUMP3(FUNC, THIS, X1,X2,X3) _IO_JUMPS(THIS)->FUNC (THIS, X1,X2, X3)
-# define JUMP_INIT(NAME, VALUE) VALUE
-# define JUMP_INIT_DUMMY JUMP_INIT(dummy, 0), JUMP_INIT (dummy2, 0)
-#else
-/* These macros will change when we re-implement vtables to use "thunks"! */
-# define JUMP_FIELD(TYPE, NAME) struct { short delta1, delta2; TYPE pfn; } NAME
-# define JUMP0(FUNC, THIS) _IO_JUMPS(THIS)->FUNC.pfn (THIS)
-# define JUMP1(FUNC, THIS, X1) _IO_JUMPS(THIS)->FUNC.pfn (THIS, X1)
-# define JUMP2(FUNC, THIS, X1, X2) _IO_JUMPS(THIS)->FUNC.pfn (THIS, X1, X2)
-# define JUMP3(FUNC, THIS, X1,X2,X3) _IO_JUMPS(THIS)->FUNC.pfn (THIS, X1,X2,X3)
-# define JUMP_INIT(NAME, VALUE) {0, 0, VALUE}
-# define JUMP_INIT_DUMMY JUMP_INIT(dummy, 0)
-#endif
-
-/* The 'finish' function does any final cleaning up of an _IO_FILE object.
- It does not delete (free) it, but does everything else to finalize it/
- It matches the streambuf::~streambuf virtual destructor. */
-typedef void (*_IO_finish_t) __PMT ((_IO_FILE *, int)); /* finalize */
-#define _IO_FINISH(FP) JUMP1 (__finish, FP, 0)
-
-/* The 'overflow' hook flushes the buffer.
- The second argument is a character, or EOF.
- It matches the streambuf::overflow virtual function. */
-typedef int (*_IO_overflow_t) __PMT ((_IO_FILE *, int));
-#define _IO_OVERFLOW(FP, CH) JUMP1 (__overflow, FP, CH)
-
-/* The 'underflow' hook tries to fills the get buffer.
- It returns the next character (as an unsigned char) or EOF. The next
- character remains in the get buffer, and the get position is not changed.
- It matches the streambuf::underflow virtual function. */
-typedef int (*_IO_underflow_t) __PMT ((_IO_FILE *));
-#define _IO_UNDERFLOW(FP) JUMP0 (__underflow, FP)
-
-/* The 'uflow' hook returns the next character in the input stream
- (cast to unsigned char), and increments the read position;
- EOF is returned on failure.
- It matches the streambuf::uflow virtual function, which is not in the
- cfront implementation, but was added to C++ by the ANSI/ISO committee. */
-#define _IO_UFLOW(FP) JUMP0 (__uflow, FP)
-
-/* The 'pbackfail' hook handles backing up.
- It matches the streambuf::pbackfail virtual function. */
-typedef int (*_IO_pbackfail_t) __PMT ((_IO_FILE *, int));
-#define _IO_PBACKFAIL(FP, CH) JUMP1 (__pbackfail, FP, CH)
-
-/* The 'xsputn' hook writes upto N characters from buffer DATA.
- Returns the number of character actually written.
- It matches the streambuf::xsputn virtual function. */
-typedef _IO_size_t (*_IO_xsputn_t) __PMT ((_IO_FILE *FP, const void *DATA,
- _IO_size_t N));
-#define _IO_XSPUTN(FP, DATA, N) JUMP2 (__xsputn, FP, DATA, N)
-
-/* The 'xsgetn' hook reads upto N characters into buffer DATA.
- Returns the number of character actually read.
- It matches the streambuf::xsgetn virtual function. */
-typedef _IO_size_t (*_IO_xsgetn_t) __PMT ((_IO_FILE *FP, void *DATA,
- _IO_size_t N));
-#define _IO_XSGETN(FP, DATA, N) JUMP2 (__xsgetn, FP, DATA, N)
-
-/* The 'seekoff' hook moves the stream position to a new position
- relative to the start of the file (if DIR==0), the current position
- (MODE==1), or the end of the file (MODE==2).
- It matches the streambuf::seekoff virtual function.
- It is also used for the ANSI fseek function. */
-#if defined(_G_IO_IO_FILE_VERSION) && _G_IO_IO_FILE_VERSION == 0x20001
-typedef _IO_off64_t (*_IO_seekoff_t) __PMT ((_IO_FILE *FP, _IO_off64_t OFF,
- int DIR, int MODE));
-#else
-typedef _IO_off_t (*_IO_seekoff_t) __PMT ((_IO_FILE *FP, _IO_off_t OFF,
- int DIR, int MODE));
-#endif
-#define _IO_SEEKOFF(FP, OFF, DIR, MODE) JUMP3 (__seekoff, FP, OFF, DIR, MODE)
-
-/* The 'seekpos' hook also moves the stream position,
- but to an absolute position given by a fpos_t (seekpos).
- It matches the streambuf::seekpos virtual function.
- It is also used for the ANSI fgetpos and fsetpos functions. */
-/* The _IO_seek_cur and _IO_seek_end options are not allowed. */
-#if defined(_G_IO_IO_FILE_VERSION) && _G_IO_IO_FILE_VERSION == 0x20001
-typedef _IO_off64_t (*_IO_seekpos_t) __PMT ((_IO_FILE *, _IO_off64_t, int));
-#else
-typedef _IO_off_t (*_IO_seekpos_t) __PMT ((_IO_FILE *, _IO_off_t, int));
-#endif
-#define _IO_SEEKPOS(FP, POS, FLAGS) JUMP2 (__seekpos, FP, POS, FLAGS)
-
-/* The 'setbuf' hook gives a buffer to the file.
- It matches the streambuf::setbuf virtual function. */
-typedef _IO_FILE* (*_IO_setbuf_t) __PMT ((_IO_FILE *, char *, _IO_ssize_t));
-#define _IO_SETBUF(FP, BUFFER, LENGTH) JUMP2 (__setbuf, FP, BUFFER, LENGTH)
-
-/* The 'sync' hook attempts to synchronize the internal data structures
- of the file with the external state.
- It matches the streambuf::sync virtual function. */
-typedef int (*_IO_sync_t) __PMT ((_IO_FILE *));
-#define _IO_SYNC(FP) JUMP0 (__sync, FP)
-
-/* The 'doallocate' hook is used to tell the file to allocate a buffer.
- It matches the streambuf::doallocate virtual function, which is not
- in the ANSI/ISO C++ standard, but is part traditional implementations. */
-typedef int (*_IO_doallocate_t) __PMT ((_IO_FILE *));
-#define _IO_DOALLOCATE(FP) JUMP0 (__doallocate, FP)
-
-/* The following four hooks (sysread, syswrite, sysclose, sysseek, and
- sysstat) are low-level hooks specific to this implementation.
- There is no correspondence in the ANSI/ISO C++ standard library.
- The hooks basically correspond to the Unix system functions
- (read, write, close, lseek, and stat) except that a _IO_FILE*
- parameter is used instead of a integer file descriptor; the default
- implementation used for normal files just calls those functions.
- The advantage of overriding these functions instead of the higher-level
- ones (underflow, overflow etc) is that you can leave all the buffering
- higher-level functions. */
-
-/* The 'sysread' hook is used to read data from the external file into
- an existing buffer. It generalizes the Unix read(2) function.
- It matches the streambuf::sys_read virtual function, which is
- specific to this implementation. */
-typedef _IO_ssize_t (*_IO_read_t) __PMT ((_IO_FILE *, void *, _IO_ssize_t));
-#define _IO_SYSREAD(FP, DATA, LEN) JUMP2 (__read, FP, DATA, LEN)
-
-/* The 'syswrite' hook is used to write data from an existing buffer
- to an external file. It generalizes the Unix write(2) function.
- It matches the streambuf::sys_write virtual function, which is
- specific to this implementation. */
-typedef _IO_ssize_t (*_IO_write_t) __PMT ((_IO_FILE *,const void *,_IO_ssize_t));
-#define _IO_SYSWRITE(FP, DATA, LEN) JUMP2 (__write, FP, DATA, LEN)
-
-/* The 'sysseek' hook is used to re-position an external file.
- It generalizes the Unix lseek(2) function.
- It matches the streambuf::sys_seek virtual function, which is
- specific to this implementation. */
-#if defined(_G_IO_IO_FILE_VERSION) && _G_IO_IO_FILE_VERSION == 0x20001
-typedef _IO_off64_t (*_IO_seek_t) __PMT ((_IO_FILE *, _IO_off64_t, int));
-#else
-typedef _IO_off_t (*_IO_seek_t) __PMT ((_IO_FILE *, _IO_off_t, int));
-#endif
-#define _IO_SYSSEEK(FP, OFFSET, MODE) JUMP2 (__seek, FP, OFFSET, MODE)
-
-/* The 'sysclose' hook is used to finalize (close, finish up) an
- external file. It generalizes the Unix close(2) function.
- It matches the streambuf::sys_close virtual function, which is
- specific to this implementation. */
-typedef int (*_IO_close_t) __PMT ((_IO_FILE *)); /* finalize */
-#define _IO_SYSCLOSE(FP) JUMP0 (__close, FP)
-
-/* The 'sysstat' hook is used to get information about an external file
- into a struct stat buffer. It generalizes the Unix fstat(2) call.
- It matches the streambuf::sys_stat virtual function, which is
- specific to this implementation. */
-typedef int (*_IO_stat_t) __PMT ((_IO_FILE *, void *));
-#define _IO_SYSSTAT(FP, BUF) JUMP1 (__stat, FP, BUF)
-
-#if _G_IO_IO_FILE_VERSION == 0x20001
-/* The 'showmany' hook can be used to get an image how much input is
- available. In many cases the answer will be 0 which means unknown
- but some cases one can provide real information. */
-typedef int (*_IO_showmanyc_t) __PMT ((_IO_FILE *));
-#define _IO_SHOWMANYC(FP) JUMP0 (__showmanyc, FP)
-
-/* The 'imbue' hook is used to get information about the currently
- installed locales. */
-typedef void (*_IO_imbue_t) __PMT ((_IO_FILE *, void *));
-#define _IO_IMBUE(FP, LOCALE) JUMP1 (__imbue, FP, LOCALE)
-#endif
-
-
-#define _IO_CHAR_TYPE char /* unsigned char ? */
-#define _IO_INT_TYPE int
-
-struct _IO_jump_t
-{
- JUMP_FIELD(_G_size_t, __dummy);
-#ifdef _G_USING_THUNKS
- JUMP_FIELD(_G_size_t, __dummy2);
-#endif
- JUMP_FIELD(_IO_finish_t, __finish);
- JUMP_FIELD(_IO_overflow_t, __overflow);
- JUMP_FIELD(_IO_underflow_t, __underflow);
- JUMP_FIELD(_IO_underflow_t, __uflow);
- JUMP_FIELD(_IO_pbackfail_t, __pbackfail);
- /* showmany */
- JUMP_FIELD(_IO_xsputn_t, __xsputn);
- JUMP_FIELD(_IO_xsgetn_t, __xsgetn);
- JUMP_FIELD(_IO_seekoff_t, __seekoff);
- JUMP_FIELD(_IO_seekpos_t, __seekpos);
- JUMP_FIELD(_IO_setbuf_t, __setbuf);
- JUMP_FIELD(_IO_sync_t, __sync);
- JUMP_FIELD(_IO_doallocate_t, __doallocate);
- JUMP_FIELD(_IO_read_t, __read);
- JUMP_FIELD(_IO_write_t, __write);
- JUMP_FIELD(_IO_seek_t, __seek);
- JUMP_FIELD(_IO_close_t, __close);
- JUMP_FIELD(_IO_stat_t, __stat);
-#if _G_IO_IO_FILE_VERSION == 0x20001
- JUMP_FIELD(_IO_showmanyc_t, __showmanyc);
- JUMP_FIELD(_IO_imbue_t, __imbue);
-#endif
-#if 0
- get_column;
- set_column;
-#endif
-};
-
-/* We always allocate an extra word following an _IO_FILE.
- This contains a pointer to the function jump table used.
- This is for compatibility with C++ streambuf; the word can
- be used to smash to a pointer to a virtual function table. */
-
-struct _IO_FILE_plus
-{
- _IO_FILE file;
- const struct _IO_jump_t *vtable;
-};
-
-/* Generic functions */
-
-#if defined(_G_IO_IO_FILE_VERSION) && _G_IO_IO_FILE_VERSION == 0x20001
-extern _IO_off64_t _IO_seekoff __P ((_IO_FILE *, _IO_off64_t, int, int));
-extern _IO_off64_t _IO_seekpos __P ((_IO_FILE *, _IO_off64_t, int));
-#else
-extern _IO_off_t _IO_seekoff __P ((_IO_FILE *, _IO_off_t, int, int));
-extern _IO_off_t _IO_seekpos __P ((_IO_FILE *, _IO_off_t, int));
-#endif
-
-extern void _IO_switch_to_main_get_area __P ((_IO_FILE *));
-extern void _IO_switch_to_backup_area __P ((_IO_FILE *));
-extern int _IO_switch_to_get_mode __P ((_IO_FILE *));
-extern void _IO_init __P ((_IO_FILE *, int));
-extern int _IO_sputbackc __P ((_IO_FILE *, int));
-extern int _IO_sungetc __P ((_IO_FILE *));
-extern void _IO_un_link __P ((_IO_FILE *));
-extern void _IO_link_in __P ((_IO_FILE *));
-extern void _IO_doallocbuf __P ((_IO_FILE *));
-extern void _IO_unsave_markers __P ((_IO_FILE *));
-extern void _IO_setb __P ((_IO_FILE *, char *, char *, int));
-extern unsigned _IO_adjust_column __P ((unsigned, const char *, int));
-#define _IO_sputn(__fp, __s, __n) _IO_XSPUTN (__fp, __s, __n)
-
-/* Marker-related function. */
-
-extern void _IO_init_marker __P ((struct _IO_marker *, _IO_FILE *));
-extern void _IO_remove_marker __P ((struct _IO_marker *));
-extern int _IO_marker_difference __P ((struct _IO_marker *,
- struct _IO_marker *));
-extern int _IO_marker_delta __P ((struct _IO_marker *));
-extern int _IO_seekmark __P ((_IO_FILE *, struct _IO_marker *, int));
-
-/* Default jumptable functions. */
-
-extern int _IO_default_underflow __P ((_IO_FILE *));
-extern int _IO_default_uflow __P ((_IO_FILE *));
-extern int _IO_default_doallocate __P ((_IO_FILE *));
-extern void _IO_default_finish __P ((_IO_FILE *, int));
-extern int _IO_default_pbackfail __P ((_IO_FILE *, int));
-extern _IO_FILE* _IO_default_setbuf __P ((_IO_FILE *, char *, _IO_ssize_t));
-extern _IO_size_t _IO_default_xsputn __P ((_IO_FILE *, const void *,
- _IO_size_t));
-extern _IO_size_t _IO_default_xsgetn __P ((_IO_FILE *, void *, _IO_size_t));
-#if defined(_G_IO_IO_FILE_VERSION) && _G_IO_IO_FILE_VERSION == 0x20001
-extern _IO_off64_t _IO_default_seekoff __P ((_IO_FILE *,
- _IO_off64_t, int, int));
-extern _IO_off64_t _IO_default_seekpos __P ((_IO_FILE *,
- _IO_off64_t, int));
-#else
-extern _IO_off_t _IO_default_seekoff __P ((_IO_FILE *, _IO_off_t, int, int));
-extern _IO_off_t _IO_default_seekpos __P ((_IO_FILE *, _IO_off_t, int));
-#endif
-extern _IO_ssize_t _IO_default_write __P ((_IO_FILE *, const void *,
- _IO_ssize_t));
-extern _IO_ssize_t _IO_default_read __P ((_IO_FILE *, void *, _IO_ssize_t));
-extern int _IO_default_stat __P ((_IO_FILE *, void *));
-#if defined(_G_IO_IO_FILE_VERSION) && _G_IO_IO_FILE_VERSION == 0x20001
-extern _IO_off64_t _IO_default_seek __P ((_IO_FILE *, _IO_off64_t, int));
-#else
-extern _IO_off_t _IO_default_seek __P ((_IO_FILE *, _IO_off_t, int));
-#endif
-extern int _IO_default_sync __P ((_IO_FILE *));
-#define _IO_default_close ((_IO_close_t) _IO_default_sync)
-
-extern struct _IO_jump_t _IO_file_jumps;
-extern struct _IO_jump_t _IO_streambuf_jumps;
-extern struct _IO_jump_t _IO_proc_jumps;
-extern struct _IO_jump_t _IO_str_jumps;
-extern int _IO_do_write __P ((_IO_FILE *, const char *, _IO_size_t));
-extern int _IO_flush_all __P ((void));
-extern void _IO_cleanup __P ((void));
-extern void _IO_flush_all_linebuffered __P ((void));
-
-#define _IO_do_flush(_f) \
- _IO_do_write(_f, (_f)->_IO_write_base, \
- (_f)->_IO_write_ptr-(_f)->_IO_write_base)
-#define _IO_in_put_mode(_fp) ((_fp)->_flags & _IO_CURRENTLY_PUTTING)
-#define _IO_mask_flags(fp, f, mask) \
- ((fp)->_flags = ((fp)->_flags & ~(mask)) | ((f) & (mask)))
-#define _IO_setg(fp, eb, g, eg) ((fp)->_IO_read_base = (eb),\
- (fp)->_IO_read_ptr = (g), (fp)->_IO_read_end = (eg))
-#define _IO_setp(__fp, __p, __ep) \
- ((__fp)->_IO_write_base = (__fp)->_IO_write_ptr = __p, (__fp)->_IO_write_end = (__ep))
-#define _IO_have_backup(fp) ((fp)->_IO_save_base != NULL)
-#define _IO_in_backup(fp) ((fp)->_flags & _IO_IN_BACKUP)
-#define _IO_have_markers(fp) ((fp)->_markers != NULL)
-#define _IO_blen(fp) ((fp)->_IO_buf_end - (fp)->_IO_buf_base)
-
-/* Jumptable functions for files. */
-
-extern int _IO_file_doallocate __P ((_IO_FILE *));
-extern _IO_FILE* _IO_file_setbuf __P ((_IO_FILE *, char *, _IO_ssize_t));
-#if defined(_G_IO_IO_FILE_VERSION) && _G_IO_IO_FILE_VERSION == 0x20001
-extern _IO_off64_t _IO_file_seekoff __P ((_IO_FILE *, _IO_off64_t, int, int));
-extern _IO_off64_t _IO_file_seek __P ((_IO_FILE *, _IO_off64_t, int));
-#else
-extern _IO_off_t _IO_file_seekoff __P ((_IO_FILE *, _IO_off_t, int, int));
-extern _IO_off_t _IO_file_seek __P ((_IO_FILE *, _IO_off_t, int));
-#endif
-extern _IO_size_t _IO_file_xsputn __P ((_IO_FILE *, const void *, _IO_size_t));
-extern int _IO_file_stat __P ((_IO_FILE *, void *));
-extern int _IO_file_close __P ((_IO_FILE *));
-extern int _IO_file_underflow __P ((_IO_FILE *));
-extern int _IO_file_overflow __P ((_IO_FILE *, int));
-#define _IO_file_is_open(__fp) ((__fp)->_fileno >= 0)
-extern void _IO_file_init __P ((_IO_FILE *));
-extern _IO_FILE* _IO_file_attach __P ((_IO_FILE *, int));
-extern _IO_FILE* _IO_file_open __P ((_IO_FILE *, const char *, int, int,
- int, int));
-#if _G_IO_IO_FILE_VERSION == 0x20001
-extern _IO_FILE* _IO_file_fopen __P ((_IO_FILE *, const char *, const char *,
- int));
-#else
-extern _IO_FILE* _IO_file_fopen __P ((_IO_FILE *, const char *, const char *));
-#endif
-extern _IO_ssize_t _IO_file_write __P ((_IO_FILE *, const void *,
- _IO_ssize_t));
-extern _IO_ssize_t _IO_file_read __P ((_IO_FILE *, void *, _IO_ssize_t));
-extern int _IO_file_sync __P ((_IO_FILE *));
-extern int _IO_file_close_it __P ((_IO_FILE *));
-extern void _IO_file_finish __P ((_IO_FILE *, int));
-
-/* Jumptable functions for proc_files. */
-extern _IO_FILE* _IO_proc_open __P ((_IO_FILE *, const char *, const char *));
-extern int _IO_proc_close __P ((_IO_FILE *));
-
-/* Jumptable functions for strfiles. */
-extern int _IO_str_underflow __P ((_IO_FILE *));
-extern int _IO_str_overflow __P ((_IO_FILE *, int));
-extern int _IO_str_pbackfail __P ((_IO_FILE *, int));
-#if defined(_G_IO_IO_FILE_VERSION) && _G_IO_IO_FILE_VERSION == 0x20001
-extern _IO_off64_t _IO_str_seekoff __P ((_IO_FILE *, _IO_off64_t, int, int));
-#else
-extern _IO_off_t _IO_str_seekoff __P ((_IO_FILE *, _IO_off_t, int, int));
-#endif
-extern void _IO_str_finish __P ((_IO_FILE *, int));
-
-/* Other strfile functions */
-extern void _IO_str_init_static __P ((_IO_FILE *, char *, int, char *));
-extern void _IO_str_init_readonly __P ((_IO_FILE *, const char *, int));
-extern _IO_ssize_t _IO_str_count __P ((_IO_FILE *));
-
-extern int _IO_vasprintf __P ((char **result_ptr, __const char *format,
- _IO_va_list args));
-extern int _IO_vdprintf __P ((int d, __const char *format, _IO_va_list arg));
-extern int _IO_vsnprintf __P ((char *string, _IO_size_t maxlen,
- __const char *format, _IO_va_list args));
-
-
-extern _IO_size_t _IO_getline __P ((_IO_FILE *,char *, _IO_size_t, int, int));
-extern _IO_size_t _IO_getline_info __P ((_IO_FILE *,char *, _IO_size_t,
- int, int, int *));
-extern _IO_ssize_t _IO_getdelim __P ((char **, _IO_size_t *, int, _IO_FILE *));
-extern double _IO_strtod __P ((const char *, char **));
-extern char *_IO_dtoa __P ((double __d, int __mode, int __ndigits,
- int *__decpt, int *__sign, char **__rve));
-extern int _IO_outfloat __P ((double __value, _IO_FILE *__sb, int __type,
- int __width, int __precision, int __flags,
- int __sign_mode, int __fill));
-
-extern _IO_FILE *_IO_list_all;
-extern void (*_IO_cleanup_registration_needed) __PMT ((void));
-
-#ifndef EOF
-# define EOF (-1)
-#endif
-#ifndef NULL
-# if defined __GNUG__ && \
- (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 8))
-# define NULL (__null)
-# else
-# if !defined(__cplusplus)
-# define NULL ((void*)0)
-# else
-# define NULL (0)
-# endif
-# endif
-#endif
-
-#if _G_HAVE_MMAP
-
-# include <unistd.h>
-# include <fcntl.h>
-# include <sys/mman.h>
-# include <sys/param.h>
-
-# if !defined(MAP_ANONYMOUS) && defined(MAP_ANON)
-# define MAP_ANONYMOUS MAP_ANON
-# endif
-
-# if !defined(MAP_ANONYMOUS) || !defined(EXEC_PAGESIZE)
-# undef _G_HAVE_MMAP
-# define _G_HAVE_MMAP 0
-# endif
-
-#endif /* _G_HAVE_MMAP */
-
-#if _G_HAVE_MMAP
-
-# ifdef _LIBC
-/* When using this code in the GNU libc we must not pollute the name space. */
-# define mmap __mmap
-# define munmap __munmap
-# endif
-
-# define ROUND_TO_PAGE(_S) \
- (((_S) + EXEC_PAGESIZE - 1) & ~(EXEC_PAGESIZE - 1))
-
-# define FREE_BUF(_B, _S) \
- munmap ((_B), ROUND_TO_PAGE (_S))
-# define ALLOC_BUF(_B, _S, _R) \
- do { \
- (_B) = (char *) mmap (0, ROUND_TO_PAGE (_S), \
- PROT_READ | PROT_WRITE, \
- MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); \
- if ((_B) == (char *) -1) \
- return (_R); \
- } while (0)
-
-#else /* _G_HAVE_MMAP */
-
-# define FREE_BUF(_B, _S) \
- free(_B)
-# define ALLOC_BUF(_B, _S, _R) \
- do { \
- (_B) = (char*)malloc(_S); \
- if ((_B) == NULL) \
- return (_R); \
- } while (0)
-
-#endif /* _G_HAVE_MMAP */
-
-#ifndef OS_FSTAT
-# define OS_FSTAT fstat
-#endif
-struct stat;
-extern _IO_ssize_t _IO_read __P ((int, void *, _IO_size_t));
-extern _IO_ssize_t _IO_write __P ((int, const void *, _IO_size_t));
-extern _IO_off_t _IO_lseek __P ((int, _IO_off_t, int));
-extern int _IO_close __P ((int));
-extern int _IO_fstat __P ((int, struct stat *));
-extern int _IO_vscanf __P ((const char *, _IO_va_list));
-
-/* Operations on _IO_fpos_t.
- Normally, these are trivial, but we provide hooks for configurations
- where an _IO_fpos_t is a struct.
- Note that _IO_off_t must be an integral type. */
-
-/* _IO_pos_BAD is an _IO_off_t value indicating error, unknown, or EOF. */
-#ifndef _IO_pos_BAD
-# if defined(_G_IO_IO_FILE_VERSION) && _G_IO_IO_FILE_VERSION == 0x20001
-# define _IO_pos_BAD ((_IO_off64_t) -1)
-# else
-# define _IO_pos_BAD ((_IO_off_t) -1)
-# endif
-#endif
-/* _IO_pos_as_off converts an _IO_fpos_t value to an _IO_off_t value. */
-#ifndef _IO_pos_as_off
-# if defined(_G_IO_IO_FILE_VERSION) && _G_IO_IO_FILE_VERSION == 0x20001
-# define _IO_pos_as_off(__pos) ((_IO_off64_t) (__pos))
-# else
-# define _IO_pos_as_off(__pos) ((_IO_off_t) (__pos))
-# endif
-#endif
-/* _IO_pos_adjust adjust an _IO_fpos_t by some number of bytes. */
-#ifndef _IO_pos_adjust
-# define _IO_pos_adjust(__pos, __delta) ((__pos) += (__delta))
-#endif
-/* _IO_pos_0 is an _IO_fpos_t value indicating beginning of file. */
-#ifndef _IO_pos_0
-# if defined(_G_IO_IO_FILE_VERSION) && _G_IO_IO_FILE_VERSION == 0x20001
-# define _IO_pos_0 ((_IO_fpos64_t) 0)
-# else
-# define _IO_pos_0 ((_IO_fpos_t) 0)
-# endif
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#ifdef _IO_MTSAFE_IO
-/* check following! */
-# define FILEBUF_LITERAL(CHAIN, FLAGS, FD) \
- { _IO_MAGIC+_IO_LINKED+_IO_IS_FILEBUF+FLAGS, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, CHAIN, FD, \
- 0, 0, 0, 0, { 0 }, &_IO_stdfile_##FD##_lock }
-#else
-/* check following! */
-# define FILEBUF_LITERAL(CHAIN, FLAGS, FD) \
- { _IO_MAGIC+_IO_LINKED+_IO_IS_FILEBUF+FLAGS, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, CHAIN, FD }
-#endif
-
-/* VTABLE_LABEL defines NAME as of the CLASS class.
- CNLENGTH is strlen(#CLASS). */
-#ifdef __GNUC__
-# if _G_VTABLE_LABEL_HAS_LENGTH
-# define VTABLE_LABEL(NAME, CLASS, CNLENGTH) \
- extern char NAME[] asm (_G_VTABLE_LABEL_PREFIX #CNLENGTH #CLASS);
-# else
-# define VTABLE_LABEL(NAME, CLASS, CNLENGTH) \
- extern char NAME[] asm (_G_VTABLE_LABEL_PREFIX #CLASS);
-# endif
-#endif /* __GNUC__ */
-
-#if !defined(builtinbuf_vtable) && defined(__cplusplus)
-# ifdef __GNUC__
-VTABLE_LABEL(builtinbuf_vtable, builtinbuf, 10)
-# else
-# if _G_VTABLE_LABEL_HAS_LENGTH
-# define builtinbuf_vtable _G_VTABLE_LABEL_PREFIX_ID##10builtinbuf
-# else
-# define builtinbuf_vtable _G_VTABLE_LABEL_PREFIX_ID##builtinbuf
-# endif
-# endif
-#endif /* !defined(builtinbuf_vtable) && defined(__cplusplus) */
-
-#if defined(__STDC__) || defined(__cplusplus)
-# define _IO_va_start(args, last) va_start(args, last)
-#else
-# define _IO_va_start(args, last) va_start(args)
-#endif
-
-extern struct _IO_fake_stdiobuf _IO_stdin_buf, _IO_stdout_buf, _IO_stderr_buf;
-
-#if 1
-# define COERCE_FILE(FILE) /* Nothing */
-#else
-/* This is part of the kludge for binary compatibility with old stdio. */
-# define COERCE_FILE(FILE) \
- (((FILE)->_IO_file_flags & _IO_MAGIC_MASK) == _OLD_MAGIC_MASK \
- && (FILE) = *(FILE**)&((int*)fp)[1])
-#endif
-
-#ifdef EINVAL
-# define MAYBE_SET_EINVAL __set_errno (EINVAL)
-#else
-# define MAYBE_SET_EINVAL /* nothing */
-#endif
-
-#ifdef IO_DEBUG
-# define CHECK_FILE(FILE, RET) \
- if ((FILE) == NULL) { MAYBE_SET_EINVAL; return RET; } \
- else { COERCE_FILE(FILE); \
- if (((FILE)->_IO_file_flags & _IO_MAGIC_MASK) != _IO_MAGIC) \
- { MAYBE_SET_EINVAL; return RET; }}
-#else
-# define CHECK_FILE(FILE, RET) COERCE_FILE (FILE)
-#endif
diff --git a/contrib/libio/osform.cc b/contrib/libio/osform.cc
deleted file mode 100644
index f08f2efaa39e..000000000000
--- a/contrib/libio/osform.cc
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include "libioP.h"
-#include <iostream.h>
-#include <stdarg.h>
-
-ostream& ostream::form(const char *format ...)
-{
- if (opfx()) {
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
- _strbuf);
- va_list ap;
- va_start(ap, format);
- _IO_vfprintf(rdbuf(), format, ap);
- va_end(ap);
- osfx();
- _IO_cleanup_region_end (0);
- }
- return *this;
-}
-
-ostream& ostream::vform(const char *format, _IO_va_list args)
-{
- if (opfx()) {
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
- _strbuf);
- _IO_vfprintf(rdbuf(), format, args);
- osfx();
- _IO_cleanup_region_end (0);
- }
- return *this;
-}
-
-ostream& ostream::operator<<(const void *p)
-{
- if (opfx()) {
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
- _strbuf);
- form("%p", p);
- osfx();
- _IO_cleanup_region_end (0);
- }
- return *this;
-}
diff --git a/contrib/libio/ostream.h b/contrib/libio/ostream.h
deleted file mode 100644
index f54ec1de9a1c..000000000000
--- a/contrib/libio/ostream.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include <stream.h>
diff --git a/contrib/libio/outfloat.c b/contrib/libio/outfloat.c
deleted file mode 100644
index 5cbb6c925982..000000000000
--- a/contrib/libio/outfloat.c
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include "libioP.h"
-
-#ifdef _IO_USE_DTOA
-/* Format floating-point number and print them.
- Return number of chars printed, or EOF on error.
-
- sign_mode == '+' : print "-" or "+"
- sign_mode == ' ' : print "-" or " "
- sign_mode == '\0' : print "-' or ""
-*/
-
-int
-_IO_outfloat (value, sb, type, width, precision, flags, sign_mode, fill)
- double value;
- _IO_FILE *sb;
- int type;
- int width;
- int precision;
- int flags;
- int sign_mode;
- int fill;
-{
- int count = 0;
-#define PUT(x) do {if (_IO_putc(x, sb) < 0) goto error; count++;} while (0)
-#define PUTN(p, n) \
- do {int _n=n; count+=_n; if (_IO_sputn(sb, p,_n) != _n) goto error;} while(0)
-#define PADN(fill, n) \
- do {int _n = n; count+=_n; if (_IO_padn(sb, fill, _n) != _n) goto error;} while (0)
- int pad_kind = flags & (_IO_LEFT|_IO_RIGHT|_IO_INTERNAL);
- int skip_zeroes = 0;
- int show_dot = (flags & _IO_SHOWPOINT) != 0;
- int decpt;
- int sign;
- int mode;
- int exponent_size;
- int print_sign;
- int trailing_zeroes, useful_digits;
- int padding, unpadded_width;
- char *p;
- char *exponent_start;
- register int i;
-#define EBUF_SIZE 12
-#define EBUF_END &ebuf[EBUF_SIZE]
- char ebuf[EBUF_SIZE];
- char *end;
- int exp = 0;
- switch (type)
- {
- case 'f':
- mode = 3;
- break;
- case 'e':
- case 'E':
- exp = type;
- mode = 2;
- if (precision != 999)
- precision++; /* Add one to include digit before decimal point. */
- break;
- case 'g':
- case 'G':
- exp = type == 'g' ? 'e' : 'E';
- if (precision == 0) precision = 1;
- if (!(flags & _IO_SHOWPOINT))
- skip_zeroes = 1;
- type = 'g';
- mode = 2;
- break;
- }
- /* Do the actual convension */
- if (precision == 999 && mode != 3)
- mode = 0;
- p = _IO_dtoa(value, mode, precision, &decpt, &sign, &end);
- useful_digits = end-p;
- exponent_start = EBUF_END;
- if (mode == 0)
- precision = useful_digits;
- /* Check if we need to emit an exponent. */
- if (mode != 3 && decpt != 9999)
- {
- i = decpt - 1;
- if ((type != 'g' && type != 'F') || i < -4 || i >= precision)
- {
- /* Print the exponent into ebuf.
- We write ebuf in reverse order (right-to-left). */
- char sign;
- if (i >= 0)
- sign = '+';
- else
- sign = '-', i = -i;
- /* Note: ANSI requires at least 2 exponent digits. */
- do {
- *--exponent_start = (i % 10) + '0';
- i /= 10;
- } while (i >= 10);
- *--exponent_start = i + '0';
- *--exponent_start = sign;
- *--exponent_start = exp;
- }
- }
- exponent_size = EBUF_END - exponent_start;
- if (mode == 1)
- precision = 1;
- /* If we print an exponent, always show just one digit before point. */
- if (exponent_size)
- decpt = 1;
- if (decpt == 9999)
- { /* Infinity or NaN */
- decpt = useful_digits;
- precision = 0;
- show_dot = 0;
- }
-
- /* dtoa truncates trailing zeroes. Set the variable trailing_zeroes to
- the number of 0's we have to add (after the decimal point). */
- if (skip_zeroes)
- trailing_zeroes = 0;
- else if (type == 'f')
- trailing_zeroes = useful_digits <= decpt ? precision
- : precision-(useful_digits-decpt);
- else if (exponent_size) /* 'e' 'E' or 'g' format using exponential notation*/
- trailing_zeroes = precision - useful_digits;
- else /* 'g' format not using exponential notation. */
- trailing_zeroes = useful_digits <= decpt ? precision - decpt
- : precision-useful_digits;
- if (trailing_zeroes < 0) trailing_zeroes = 0;
-
- if (trailing_zeroes != 0 || useful_digits > decpt)
- show_dot = 1;
- if (sign_mode == 0)
- print_sign = sign ? '-' : 0;
- else if (sign_mode == '+')
- print_sign = sign ? '-' : '+';
- else /* if (sign_mode == ' ') */
- print_sign = sign ? '-' : ' ';
-
- /* Calculate the width (before padding). */
- unpadded_width =
- (print_sign != 0) + trailing_zeroes + exponent_size + show_dot
- + useful_digits
- + (decpt > useful_digits ? decpt - useful_digits
- : decpt > 0 ? 0 : 1 - decpt);
-
- padding = width > unpadded_width ? width - unpadded_width : 0;
- if (padding > 0 && pad_kind != _IO_LEFT && pad_kind != _IO_INTERNAL)
- PADN(fill, padding); /* Default (right) adjust */
- if (print_sign)
- PUT(print_sign);
- if (pad_kind == _IO_INTERNAL && padding > 0)
- PADN(fill, padding);
- if (decpt > 0)
- {
- if (useful_digits >= decpt)
- PUTN(p, decpt);
- else
- {
- PUTN(p, useful_digits);
- PADN('0', decpt-useful_digits);
- }
- if (show_dot)
- {
- PUT('.');
- /* Print digits after the decimal point. */
- if (useful_digits > decpt)
- PUTN(p + decpt, useful_digits-decpt);
- }
- }
- else
- {
- PUT('0');
- if (show_dot)
- {
- PUT('.');
- PADN('0', -decpt);
- /* Print digits after the decimal point. */
- PUTN(p, useful_digits);
- }
- }
- PADN('0', trailing_zeroes);
- if (exponent_size)
- PUTN(exponent_start, exponent_size);
- if (pad_kind == _IO_LEFT && padding > 0) /* Left adjustment*/
- PADN(fill, padding);
- return count;
- error:
- return EOF;
-}
-#endif
diff --git a/contrib/libio/parsestream.cc b/contrib/libio/parsestream.cc
deleted file mode 100644
index e430e602c8dc..000000000000
--- a/contrib/libio/parsestream.cc
+++ /dev/null
@@ -1,317 +0,0 @@
-/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License.
-
-Written by Per Bothner (bothner@cygnus.com). */
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include "libioP.h"
-#include "parsestream.h"
-#include <stdlib.h>
-
-streambuf* parsebuf::setbuf(char*, int)
-{
- return NULL;
-}
-
-int parsebuf::tell_in_line()
-{
- return 0;
-}
-
-int parsebuf::pbackfail(int c)
-{
- if (c == EOF)
- return 0;
- if (seekoff(-1, ios::cur) == EOF)
- return EOF;
- return (unsigned char)c;
-}
-
-char* parsebuf::current_line() { return NULL; }
-
-streampos parsebuf::seekoff(streamoff offset, _seek_dir dir, int)
-{
- // Make offset relative to line start.
- switch (dir) {
- case ios::beg:
- offset -= pos_at_line_start;
- break;
- case ios::cur:
- offset += tell_in_line();
- break;
- default:
- return EOF;
- }
- if (offset < -1)
- return EOF;
- if (offset > _line_length + 1)
- return EOF;
- return seek_in_line(offset) + pos_at_line_start;
-}
-
-// string_parsebuf invariants:
-// The reserve ares (base() .. ebuf()) is always the entire string.
-// The get area (eback() .. egptr()) is the extended current line
-// (i.e. with the '\n' at either end, if these exist).
-
-string_parsebuf::string_parsebuf(char *buf, int len,
- int delete_at_close /* = 0*/)
-: parsebuf()
-{
- setb(buf, buf+len, delete_at_close);
- register char *ptr = buf;
- while (ptr < ebuf() && *ptr != '\n') ptr++;
- _line_length = ptr - buf;
- setg(buf, buf, ptr);
-}
-
-int string_parsebuf::underflow()
-{
- register char* ptr = egptr(); // Point to end of current_line
- do {
- int i = right() - ptr;
- if (i <= 0)
- return EOF;
- ptr++; i--; // Skip '\n'.
- char *line_start = ptr;
- while (ptr < right() && *ptr == '\n') ptr++;
- setg(line_start-1, line_start, ptr + (ptr < right()));
- pos_at_line_start = line_start - left();
- _line_length = ptr - line_start;
- __line_number++;
- } while (gptr() == ptr);
- return *gptr();
-}
-
-char* string_parsebuf::current_line()
-{
- char *ptr = eback();
- if (__line_number > 0)
- ptr++; // Skip '\n' at end of previous line.
- return ptr;
-}
-
-int string_parsebuf::tell_in_line()
-{
- int offset = gptr() - eback();
- if (__line_number > 0)
- offset--;
- return offset;
-}
-
-int string_parsebuf::seek_in_line(int i)
-{
- int delta = i - tell_in_line();
- gbump(delta); // FIXME: Needs error (bounds) checking!
- return i;
-}
-
-static const char NewLine[1] = { '\n' };
-
-general_parsebuf::general_parsebuf(streambuf *buf, int delete_arg_buf)
- : parsebuf()
-{
- delete_buf = delete_arg_buf;
- sbuf = buf;
- int buf_size = 128;
- char* buffer = (char*)malloc(buf_size);
- setb(buffer, buffer+buf_size, 1);
-// setg(buffer, buffer, buffer);
-}
-
-general_parsebuf::~general_parsebuf()
-{
- if (delete_buf)
- delete sbuf;
-}
-
-int general_parsebuf::underflow()
-{
- register char *ptr = base();
- int has_newline = eback() < gptr() && gptr()[-1] == '\n';
- if (has_newline)
- *ptr++ = '\n';
- register streambuf *sb = sbuf;
- register int ch;
- for (;;) {
- ch = sb->sbumpc();
- if (ch == EOF)
- break;
- if (ptr == ebuf()) {
- int old_size = ebuf() - base();
- char *new_buffer = new char[old_size * 2];
- memcpy(new_buffer, base(), old_size);
- setb(new_buffer, new_buffer + 2 * old_size, 1);
- ptr = new_buffer + old_size;
- }
- *ptr++ = ch;
- if (ch == '\n')
- break;
- }
- char *cur_pos = base() + has_newline;
- pos_at_line_start += _line_length + 1;
- _line_length = ptr - cur_pos;
- if (ch != EOF || _line_length > 0)
- __line_number++;
- setg(base(), cur_pos, ptr);
- return ptr == cur_pos ? EOF : cur_pos[0];
-}
-
-char* general_parsebuf::current_line()
-{
- char* ret = base();
- if (__line_number > 1)
- ret++; // Move past '\n' from end of previous line.
- return ret;
-}
-
-int general_parsebuf::tell_in_line()
-{
- int off = gptr() - base();
- if (__line_number > 1)
- off--; // Subtract 1 for '\n' from end of previous line.
- return off;
-}
-
-int general_parsebuf::seek_in_line(int i)
-{
- if (__line_number == 0)
- (void)general_parsebuf::underflow();
- if (__line_number > 1)
- i++; // Add 1 for '\n' from end of previous line.
- if (i < 0) i = 0;
- int len = egptr() - eback();
- if (i > len) i = len;
- setg(base(), base() + i, egptr());
- return i;
-}
-
-func_parsebuf::func_parsebuf(CharReader func, void *argm) : parsebuf()
-{
- read_func = func;
- arg = argm;
- buf_start = NULL;
- buf_end = NULL;
- setb((char*)NewLine, (char*)NewLine+1, 0);
- setg((char*)NewLine, (char*)NewLine+1, (char*)NewLine+1);
- backed_up_to_newline = 0;
-}
-
-int func_parsebuf::tell_in_line()
-{
- if (buf_start == NULL)
- return 0;
- if (egptr() != (char*)NewLine+1)
- // Get buffer was line buffer.
- return gptr() - buf_start;
- if (backed_up_to_newline)
- return -1; // Get buffer is '\n' preceding current line.
- // Get buffer is '\n' following current line.
- return (buf_end - buf_start) + (gptr() - (char*)NewLine);
-}
-
-char* func_parsebuf::current_line()
-{
- return buf_start;
-}
-
-int func_parsebuf::seek_in_line(int i)
-{
- if (i < 0) {
- // Back up to preceding '\n'.
- if (i < -1) i = -1;
- backed_up_to_newline = 1;
- setg((char*)NewLine, (char*)NewLine+(i+1), (char*)NewLine+1);
- return i;
- }
- backed_up_to_newline = 0;
- int line_length = buf_end-buf_start;
- if (i <= line_length) {
- setg(buf_start, buf_start+i, buf_end);
- return i;
- }
- i -= line_length;
- if (i > 0) i = 1;
- setg((char*)NewLine, (char*)NewLine+i, (char*)NewLine+1);
- return line_length + i;
-}
-
-int func_parsebuf::underflow()
-{
- retry:
- if (gptr() < egptr())
- return *gptr();
- if (gptr() != (char*)NewLine+1) {
- // Get buffer was line buffer. Move to following '\n'.
- setg((char*)NewLine, (char*)NewLine, (char*)NewLine+1);
- return *gptr();
- }
- if (backed_up_to_newline)
- // Get buffer was '\n' preceding current line. Move to current line.
- backed_up_to_newline = 0;
- else {
- // Get buffer was '\n' following current line. Read new line.
- if (buf_start) free(buf_start);
- char *str = (*read_func)(arg);
- buf_start = str;
- if (str == NULL)
- return EOF;
- // Initially, _line_length == -1, so pos_at_line_start becomes 0.
- pos_at_line_start += _line_length + 1;
- _line_length = strlen(str);
- buf_end = str + _line_length;
- __line_number++;
- }
- setg(buf_start, buf_start, buf_end);
- goto retry;
-}
-
-#if 0
-size_t parsebuf::line_length()
-{
- if (current_line_length == (size_t)(-1)) // Initial value;
- (void)sgetc();
- return current_line_length;
-}
-#endif
-
-int parsebuf::seek_in_line(int i)
-{
-#if 1
- abort();
- return i; // Suppress warnings.
-#else
- if (i > 0) {
- size_t len = line_length();
- if ((unsigned)i > len) i = len;
- }
- else if (i < -1) i = -1;
- int new_pos = seekoff(pos_at_line_start + i, ios::beg);
- if (new_pos == EOF)
- return tell_in_line();
- else return new_pos - pos_at_line_start;
-#endif
-}
diff --git a/contrib/libio/parsestream.h b/contrib/libio/parsestream.h
deleted file mode 100644
index 97655bcbf691..000000000000
--- a/contrib/libio/parsestream.h
+++ /dev/null
@@ -1,156 +0,0 @@
-/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License.
-
-Written by Per Bothner (bothner@cygnus.com). */
-
-#ifndef PARSESTREAM_H
-#define PARSESTREAM_H
-#ifdef __GNUG__
-#pragma interface
-#endif
-#include "streambuf.h"
-
-extern "C++" {
-// A parsebuf is a streambuf optimized for scanning text files.
-// It keeps track of line and column numbers.
-// It is guaranteed to remember the entire current line,
-// as well the '\n'-s on either side of it (if they exist).
-// You can arbitrarily seek (or unget) within this extended line.
-// Other backward seeks are not supported.
-// Normal read semantics are supported (and hence istream operators like >>).
-
-class parsebuf : public streambuf {
- protected:
- _IO_off_t pos_at_line_start;
- long _line_length;
- unsigned long __line_number;
- char *buf_start;
- char *buf_end;
-
- public:
- parsebuf *chain;
-
- // Return column number (raw - don't handle tabs etc).
- // Retult can be -1, meaning: at '\n' before current line.
- virtual int tell_in_line();
-
- // seek to (raw) column I in current line.
- // Result is new (raw) column position - differs from I if unable to seek.
- // Seek to -1 tries to seek to before previous LF.
- virtual int seek_in_line(int i);
-
- // Note: there is no "current line" initially, until something is read.
-
- // Current line number, starting with 0.
- // If tell_in_line()==-1, then line number of next line.
- int line_number() { return __line_number; }
-
- // Length of current line, not counting either '\n'.
- int line_length() { return _line_length; }
- // Current line - not a copy, so file ops may trash it.
- virtual char* current_line();
- virtual streampos seekoff(streamoff, _seek_dir, int mode=ios::in|ios::out);
- virtual streambuf* setbuf(char* p, int len);
- protected:
- parsebuf() { chain= NULL;
- __line_number = 0; pos_at_line_start = 0; _line_length = -1; }
- virtual int pbackfail(int c);
-};
-
-// A string_parsebuf is a parsebuf whose source is a fixed string.
-
-class string_parsebuf : public parsebuf {
- public:
- int do_delete;
- string_parsebuf(char *str, int len, int delete_at_close=0);
- virtual int underflow();
- virtual char* current_line();
- virtual int seek_in_line(int i);
- virtual int tell_in_line();
- char *left() const { return base(); }
- char *right() const { return ebuf(); }
-// streampos seekoff(streamoff, _seek_dir, int);
-};
-
-// A func_parsebuf calls a given function to get new input.
-// Each call returns an entire NUL-terminated line (without the '\n').
-// That line has been allocated with malloc(), not new.
-// The interface is tailored to the GNU readline library.
-// Example:
-// char* DoReadLine(void* arg)
-// {
-// char *line = readline((char*)arg); /* 'arg' is used as prompt. */
-// if line == NULL) { putc('\n', stderr); return NULL; }
-// if (line[0] != '\0') add_history(line);
-// return line;
-// }
-// char PromptBuffer[100] = "> ";
-// func_parsebuf my_stream(DoReadLine, PromptBuffer);
-
-typedef char *(*CharReader)(void *arg);
-class istream;
-
-class func_parsebuf : public parsebuf {
- public:
- void *arg;
- CharReader read_func;
- int backed_up_to_newline;
- func_parsebuf(CharReader func, void *argm = NULL);
- int underflow();
- virtual int tell_in_line();
- virtual int seek_in_line(int i);
- virtual char* current_line();
-};
-
-// A general_parsebuf is a parsebuf which gets its input from some
-// other streambuf. It explicitly buffers up an entire line.
-
-class general_parsebuf : public parsebuf {
- public:
- streambuf *sbuf;
- int delete_buf; // Delete sbuf when destroying this.
- general_parsebuf(streambuf *buf, int delete_arg_buf = 0);
- int underflow();
- virtual int tell_in_line();
- virtual int seek_in_line(int i);
- ~general_parsebuf();
- virtual char* current_line();
-};
-
-#if 0
-class parsestream : public istream {
- streammarker marks[2];
- short _first; // of the two marks; either 0 or 1
- int _lineno;
- int first() { return _first; }
- int second() { return 1-_first; }
- int line_length() { marks[second].delta(marks[first]); }
- int line_length() { marks[second].delta(marks[first]); }
- int seek_in_line(int i);
- int tell_in_line();
- int line_number();
-};
-#endif
-} // extern "C++"
-#endif /*!defined(PARSESTREAM_H)*/
diff --git a/contrib/libio/peekc.c b/contrib/libio/peekc.c
deleted file mode 100644
index 0b3b5140c26f..000000000000
--- a/contrib/libio/peekc.c
+++ /dev/null
@@ -1,42 +0,0 @@
-/* Copyright (C) 1993, 1995, 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#include "libioP.h"
-#include "stdio.h"
-
-#undef _IO_peekc
-
-int
-_IO_peekc_locked (fp)
- _IO_FILE *fp;
-{
- int result;
- CHECK_FILE (fp, EOF);
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
- _IO_flockfile (fp);
- result = _IO_peekc_unlocked (fp);
- _IO_cleanup_region_end (1);
- return result;
-}
diff --git a/contrib/libio/pfstream.cc b/contrib/libio/pfstream.cc
deleted file mode 100644
index 3fa93c958f8f..000000000000
--- a/contrib/libio/pfstream.cc
+++ /dev/null
@@ -1,92 +0,0 @@
-/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-/* Written by Per Bothner (bothner@cygnus.com). */
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include "libioP.h"
-#include <pfstream.h>
-#include <procbuf.h>
-
-ipfstream::ipfstream(const char *name, int mode, int prot)
-{
- const char* p;
-
- // Look for '| command' (as used by ftp).
- for (p = name; *p == ' ' || *p == '\t'; p++) ;
- if (*p == '|') {
- procbuf *pbuf = new procbuf();
- init(pbuf);
- if (!pbuf->open(p+1, mode))
- set(ios::badbit);
- return;
- }
-
- // Look for 'command |'
- while (*p) p++; // Point to last
- while (p[-1] == ' ' || p[-1] == '\t' || p[-1] == '\n') p--;
- if (p[-1] == '|') {
- // Must remove the final '|'.
- p--;
-#if !defined (__GNUC__) || defined (__STRICT_ANSI__)
- char *command = new char[p-name+1];
-#else
- char command[p-name+1];
-#endif
- memcpy(command, name, p-name);
- command[p-name] = '\0';
-
- procbuf *pbuf = new procbuf();
- if (pbuf->open(command, mode))
- set(ios::badbit);
-#if !defined (__GNUC__) || defined (__STRICT_ANSI__)
- delete command;
-#endif
- return;
- }
-
- init(new filebuf());
- if (!rdbuf()->open(name, mode, prot))
- set(ios::badbit);
-}
-
-opfstream::opfstream(const char *name, int mode, int prot)
-{
- const char *p;
- // Look for '| command'.
- for (p = name; *p == ' ' || *p == '\t'; p++) ;
- if (*p == '|') {
- procbuf *pbuf = new procbuf();
- init(pbuf);
- if (!pbuf->open(p+1, mode))
- set(ios::badbit);
- }
- else {
- init(new filebuf());
- if (!rdbuf()->open(name, mode, prot))
- set(ios::badbit);
- }
-}
diff --git a/contrib/libio/pfstream.h b/contrib/libio/pfstream.h
deleted file mode 100644
index 3c5458baaa93..000000000000
--- a/contrib/libio/pfstream.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-/* Written by Per Bothner (bothner@cygnus.com). */
-
-#ifndef _PFSTREAM_H
-#define _PFSTREAM_H
-#ifdef __GNUG__
-#pragma interface
-#endif
-#include <fstream.h>
-
-extern "C++" {
-// ipfstream foo("NAME") is like: ifstream foo("NAME"). However,
-// if NAME starts *or ends* with a '|', the remainder of NAME is
-// evaluated as a shell command (using a procbuf), and all input
-// read from foo is whatever that shell writes to its standard output.
-// E.g. ipfstream foo("|zcat foo.Z") or ipfstream foo("zcat foo.Z|")
-// (These two forms are equivalent.)
-
-class ipfstream : public ifstream {
- public:
- ipfstream(const char *name, int mode=ios::in, int prot=0664);
-};
-
-// opfstream foo("NAME") is like: ofstream foo("NAME").
-// However, if NAME starts with a '|', the remainder of NAME is
-// evaluated as a shell command (using a procbuf), and all output
-// written to foo is piped to the standard input of that shell.
-// E.g. opfstream foo("|more");
-
-class opfstream : public ofstream {
- public:
- opfstream(const char *name, int mode=ios::out, int prot=0664);
-};
-} // extern "C++"
-#endif /*!_PFSTREAM_H*/
-
diff --git a/contrib/libio/procbuf.cc b/contrib/libio/procbuf.cc
deleted file mode 100644
index eb6d50e7797f..000000000000
--- a/contrib/libio/procbuf.cc
+++ /dev/null
@@ -1,54 +0,0 @@
-/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-/* Written by Per Bothner (bothner@cygnus.com). */
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-
-#include "libioP.h"
-#include "procbuf.h"
-
-procbuf::procbuf(const char *command, int mode) : filebuf()
-{
- _IO_proc_open(this, command, (mode & ios::in) ? "r" : "w");
-}
-
-procbuf *procbuf::open(const char *command, int mode)
-{
- return (procbuf*)_IO_proc_open(this, command, (mode & ios::in) ? "r" : "w");
-}
-
-/* #define USE_SIGMASK */
-
-int procbuf::sys_close()
-{
- return _IO_proc_close(this);
-}
-
-procbuf::~procbuf()
-{
- close();
-}
diff --git a/contrib/libio/procbuf.h b/contrib/libio/procbuf.h
deleted file mode 100644
index b361a6a7c844..000000000000
--- a/contrib/libio/procbuf.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-/* Written by Per Bothner (bothner@cygnus.com). */
-
-#ifndef _PROCBUF_H
-#define _PROCBUF_H
-#ifdef __GNUG__
-#pragma interface
-#endif
-
-#include <streambuf.h>
-
-extern "C++" {
-class procbuf : public filebuf {
- /* Following fields must match those in struct _IO_proc_file */
- _IO_pid_t _pid;
- procbuf *_next;
- public:
- procbuf() : filebuf() { }
- procbuf(const char *command, int mode);
- procbuf* open(const char *command, int mode);
- procbuf *close() { return (procbuf*)filebuf::close(); }
- virtual int sys_close();
- ~procbuf();
-};
-} // extern "C++"
-
-#endif /* !_PROCBUF_H */
diff --git a/contrib/libio/sbform.cc b/contrib/libio/sbform.cc
deleted file mode 100644
index c17bd08db15e..000000000000
--- a/contrib/libio/sbform.cc
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include "libioP.h"
-#include "streambuf.h"
-#include <stdarg.h>
-
-int streambuf::vform(char const *fmt0, _IO_va_list ap)
-{
- return _IO_vfprintf(this, fmt0, ap);
-}
-int streambuf::form(char const *format ...)
-{
- va_list ap;
- va_start(ap, format);
- int count = _IO_vfprintf(this, format, ap);
- va_end(ap);
- return count;
-}
diff --git a/contrib/libio/sbgetline.cc b/contrib/libio/sbgetline.cc
deleted file mode 100644
index 0475114c629e..000000000000
--- a/contrib/libio/sbgetline.cc
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include "libioP.h"
-#include "streambuf.h"
-
-long streambuf::sgetline(char* buf, _IO_size_t n, char delim, int extract_delim)
-{
- return _IO_getline_info(this, buf, n, delim, extract_delim, (int *) 0);
-}
diff --git a/contrib/libio/sbscan.cc b/contrib/libio/sbscan.cc
deleted file mode 100644
index c0ec35c53db6..000000000000
--- a/contrib/libio/sbscan.cc
+++ /dev/null
@@ -1,45 +0,0 @@
-
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include "libioP.h"
-#include "streambuf.h"
-#include <stdarg.h>
-
-int streambuf::vscan(char const *fmt0, _IO_va_list ap, ios* stream /* = NULL*/)
-{
- int errcode = 0;
- int count = _IO_vfscanf(this, fmt0, ap, &errcode);
- if (stream)
- stream->setstate((ios::iostate)errcode);
- return count;
-}
-int streambuf::scan(char const *format ...)
-{
- va_list ap;
- va_start(ap, format);
- int count = _IO_vfscanf(this, format, ap, NULL);
- va_end(ap);
- return count;
-}
diff --git a/contrib/libio/stdfiles.c b/contrib/libio/stdfiles.c
deleted file mode 100644
index 8453e33c34cd..000000000000
--- a/contrib/libio/stdfiles.c
+++ /dev/null
@@ -1,51 +0,0 @@
-/* Copyright (C) 1993, 1994, 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-
-/* This file provides definitions of _IO_stdin, _IO_stdout, and _IO_stderr
- for C code. Compare stdstreams.cc.
- (The difference is that here the vtable field is set to 0,
- so the objects defined are not valid C++ objects. On the other
- hand, we don't need a C++ compiler to build this file.) */
-
-#include "libioP.h"
-
-#ifdef _IO_MTSAFE_IO
-#define DEF_STDFILE(NAME, FD, CHAIN, FLAGS) \
- static _IO_lock_t _IO_stdfile_##FD##_lock = _IO_lock_initializer; \
- struct _IO_FILE_plus NAME \
- = {FILEBUF_LITERAL(CHAIN, FLAGS, FD), &_IO_file_jumps}
-#else
-#define DEF_STDFILE(NAME, FD, CHAIN, FLAGS) \
- struct _IO_FILE_plus NAME \
- = {FILEBUF_LITERAL(CHAIN, FLAGS, FD), &_IO_file_jumps}
-#endif
-
-DEF_STDFILE(_IO_stdin_, 0, 0, _IO_NO_WRITES);
-DEF_STDFILE(_IO_stdout_, 1, &_IO_stdin_.file, _IO_NO_READS);
-DEF_STDFILE(_IO_stderr_, 2, &_IO_stdout_.file,
- _IO_NO_READS+_IO_UNBUFFERED);
-
-_IO_FILE *_IO_list_all = &_IO_stderr_.file;
diff --git a/contrib/libio/stdio/ChangeLog b/contrib/libio/stdio/ChangeLog
deleted file mode 100644
index 8ef9dcc0b3ce..000000000000
--- a/contrib/libio/stdio/ChangeLog
+++ /dev/null
@@ -1,153 +0,0 @@
-Fri Mar 16 12:46:19 GMT 2001 Bernd Schmidt (bernds@redhat.com)
-
- * gcc-2.95.3 Released.
-
-Sun Oct 24 23:54:10 PDT 1999 Jeff Law (law@cygnus.com)
-
- * gcc-2.95.2 Released.
-
-Mon Aug 16 01:29:24 PDT 1999 Jeff Law (law@cygnus.com)
-
- * gcc-2.95.1 Released.
-
-Wed Jul 28 21:39:31 PDT 1999 Jeff Law (law@cygnus.com)
-
- * gcc-2.95 Released.
-
-Sun Jul 25 23:40:51 PDT 1999 Jeff Law (law@cygnus.com)
-
- * gcc-2.95 Released.
-
-1997-09-04 16:11 Ulrich Drepper <drepper@cygnus.com>
-
- * Makefile.in (STDIO_OBJECTS): Lose feof.o and ferror.o. Add getc.o
- and putc.o.
- (stmp-libio, stmp-libiostream, stmp-io, stmp-streamlib): New rules.
-
- (iostream.list): Depend upon stmp-stdio. Add the entries
- from stdio.list to iostream.list.
- (stmp-stdio): New name for what was the stdio/stdio.list rule.
- All it now does is cd down into stdio and build stdio.list.
-
- * clearerr.c: Add copyright and lock stream before use.
- * feof.c: Likewise.
- * ferror.c: Likewise.
- * fgetc.c: Likewise.
- * fputc.c: Likewise.
- * freopen.c: Likewise.
- * fseek.c: Likewise.
- * getc.c: Likewise.
- * getchar.c: Likewise.
- * putc.c: Likewise.
- * putchar.c: Likewise.
- * rewind.c: Likewise.
-
- * setbuf.c: Update copyright.
- * setlinebuf.c: Likewise.
- * vscanf.c: Likewise.
-
- * fileno.c: Define alias fileno_unlocked. Update copyright.
-
- * clearerr_u.c: New file. Implement clearerr_unlocked function.
- * feof_u.c: New file. Implement feof_unlocked function.
- * ferror_u.c: New file. Implement ferror_unlocked function.
- * fputc_u.c: New file. Implement fputc_unlocked function.
- * getc_u.c: New file. Implement getc_unclocked function.
- * getchar_u.c: New file. Implement getchar_unclocked function.
- * putc_u.c: New file. Implement putc_unclocked function.
- * putchar_u.c: New file. Implement putchar_unclocked function.
-
- * vsnprintf.c: Rewrite according to ISO C 9X draft.
-
-Thu May 1 11:03:45 1997 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * stdio.h (TMP_MAX): Wrap it with #ifndef for now, since it can
- get defined by <limits.h> (e.g., HP/UX and AIX).
-
-Wed Mar 12 08:51:37 1997 Gavin Koch <gavin@cygnus.com>
-
- * stdio.h: Use _IO_va_list rather than _G_va_list.
-
-Wed Jun 14 21:41:50 1995 Jason Merrill <jason@python.cygnus.com>
-
- * configure.in (LIBDIR): Set.
- (MOSTLYCLEAN): Remove pic and stamp-picdir.
- (stdio_objects): Also compile pic version.
-
- * Makefile.in (STDIO_OBJECTS): Remove getdelim.o.
-
-Wed May 10 03:05:53 1995 Jason Merrill <jason@python.cygnus.com>
-
- * vsnprintf.c (vsnprintf): Update to use _IO_JUMPS.
-
- * Makefile.in (STDIO_OBJECTS): Fix typo.
-
-Tue Oct 18 17:15:09 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * getline.c, snprintf.c, vsnprintf.c: New files, providing
- functionality of the GNU C library.
- * Makefile.in (STDIO_OBJECTS), configure.in: Add new files.
- * stdio.h: Add new functions.
-
-Fri Oct 14 15:56:27 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * stdio.h: Added vfscanf, vscanf, vsscanf, #ifndef __STRICT_ANSI__.
-
-Tue Aug 23 16:17:25 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * stdio.h: Added comment, at hjl's request.
-
-Sun Aug 7 13:28:12 1994 H.J. Lu (hjl@nynexst.com)
-
- * stdio.h (getc, getchar, putc, putchar): New declarations.
- Move macros after the declarations.
-
-Fri Aug 5 18:27:21 1994 H.J. Lu (hjl@nynexst.com)
-
- * clearerr.c, rewind.c, setfileno.c:
- Add CHECK_FILE(fp, ) and remove COERCE_FILE(fp).
- * feof.c, ferror.c, fgetc.c, fileno.c, fputc.c, getw.c, putw.c,
- vfscanf.c: Add CHECK_FILE(fp, EOF) and remove COERCE_FILE(fp).
- * freopen.c: Add CHECK_FILE(fp, NULL) and remove COERCE_FILE(fp).
- * fseek.c, vfprintf.c:
- Add CHECK_FILE(fp, -1) and remove COERCE_FILE(fp).
-
-Fri May 20 13:11:58 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * stdio.h: Rename _ARGS macro to __P for better gnlibc and
- BSD compatibility.
-
-Fri Nov 26 13:26:35 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- Bunch of little changes, many from H.J. Lu <hjl@nynexst.com>.
- * feof.c, setbuf.c, vprintf.c, vcanf.c: #include <stdio.h>,
- for error checking.
- * fileno.c: #include libioP.h, not just libio.h.
- * fputc.c: Fix typo.
- * fseek.c, rewind.c: Use #include "...", not <...> ,for local files.
- * getc.c, getchar.c, putc.c, putchar.c: New files, providing
- non-macro versions of the standard macros.
- * getw.c, putw.c, setfileno.c, setlinebuf.c: New files.
- * Makefile.in (STDIO_OBJECTS): Add new files.
- * vfscanf.c: Add missing new 4th arg to _IO_vfscanf call.
-
-Thu Oct 14 16:12:07 1993 Karen Christiansen (karen@deneb.cygnus.com)
-
- * configure.in: changed mv to mv -f
-
-Mon Oct 4 17:29:23 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * configure.in (stdio_renames): Add fgetpos, fsetpos, gets,
- perror, setbuffer, ungetc.
- * clearerr.c, ferror.c, fgetc.c, fileno.c, fputc.c, freopen.c,
- fseek.c, popen.c, rewind.c, setbuf.c: New files.
- * Makefile.in (STDIO_OBJECTS): Add new files.
- * stdio.h: Use _IO_XXX instead of _G_XXX many places.
- #include <libio.h> instead of <_stdio.h>, to get useful defs.
-
-Fri Aug 20 00:28:28 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * feof.c, vprintf.c, vscanf.c: Converted stub functions.
- * configure.in (stdio_renamed): Removed feof.
- Added sprintf sscanf vsscanf.
- * ChangeLog.old: Copy of old libg++/iostream/stdio/ChangeLog.
diff --git a/contrib/libio/stdio/Makefile.in b/contrib/libio/stdio/Makefile.in
deleted file mode 100644
index 680c8a497a41..000000000000
--- a/contrib/libio/stdio/Makefile.in
+++ /dev/null
@@ -1,35 +0,0 @@
-srcdir = .
-
-#### package, host, target, and site dependent Makefile fragments come in here.
-##
-
-# These are compiled from the corresponding ../ioFOO.c files.
-STDIO_RENAMED_OBJECTS = ... filled in by configure ...
-# These are the files that a libc would want.
-STDIO_OBJECTS = $(STDIO_RENAMED_OBJECTS) \
- clearerr.o fdopen.o fgetc.o fileno.o \
- fputc.o freopen.o fseek.o getchar.o getline.o getw.o \
- popen.o putchar.o putw.o rewind.o \
- setbuf.o setfileno.o setlinebuf.o snprintf.o \
- vfprintf.o vfscanf.o vprintf.o vscanf.o vsnprintf.o
-
-CC_FOR_STDIO=$(CC)
-CINCLUDES = -I. -I$(srcdir) -I.. -I$(srcdir)/.. -D__USE_GNU
-
-nothing:
-
-stmp-libio: stdio.list stamp-io
-
-stamp-io:
- $(AR) $(AR_FLAGS) ../libio.a $(STDIO_OBJECTS)
- touch stmp-io
-
-stmp-libiostream: stdio.list stamp-streamlib
-
-stamp-streamlib:
- $(AR) $(AR_FLAGS) ../libiostream.a $(STDIO_OBJECTS)
- touch stmp-streamlib
-
-stdio.list: stamp-picdir $(STDIO_OBJECTS)
- @echo "$(STDIO_OBJECTS)" >stdio.list
-
diff --git a/contrib/libio/stdio/clearerr.c b/contrib/libio/stdio/clearerr.c
deleted file mode 100644
index 4776250ff8d9..000000000000
--- a/contrib/libio/stdio/clearerr.c
+++ /dev/null
@@ -1,30 +0,0 @@
-/* Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-#include "libioP.h"
-#include "stdio.h"
-
-void
-clearerr (fp)
- FILE *fp;
-{
- CHECK_FILE (fp, /*nothing*/);
- _IO_flockfile (fp);
- _IO_clearerr (fp);
- _IO_funlockfile (fp);
-}
diff --git a/contrib/libio/stdio/clearerr_u.c b/contrib/libio/stdio/clearerr_u.c
deleted file mode 100644
index 2a1ba7070bb7..000000000000
--- a/contrib/libio/stdio/clearerr_u.c
+++ /dev/null
@@ -1,28 +0,0 @@
-/* Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-#include "libioP.h"
-#include "stdio.h"
-
-void
-clearerr_unlocked (fp)
- FILE *fp;
-{
- CHECK_FILE (fp, /*nothing*/);
- _IO_clearerr (fp);
-}
diff --git a/contrib/libio/stdio/configure.in b/contrib/libio/stdio/configure.in
deleted file mode 100644
index 83cac17ebc7c..000000000000
--- a/contrib/libio/stdio/configure.in
+++ /dev/null
@@ -1,49 +0,0 @@
-# This file is a shell script fragment that supplies the information
-# necessary for a configure script to process the program in
-# this directory. For more information, look at ../configure.
-
-configdirs=
-srctrigger=stdio.h
-srcname="libio/stdio"
-package_makefile_frag=../Make.pack
-package_makefile_rules_frag=../Make.pack.r
-
-# per-host:
-
-# per-target:
-
-LIBDIR=yes
-TO_TOPDIR=../../
-ALL=nothing
-MOSTLYCLEAN='*.o pic stamp-picdir core stdio.list'
-(. ${srcdir}/../config.shared) >${package_makefile_frag} 2>${package_makefile_rules_frag}
-
-# post-target:
-
-# Certain files that are used to build a C library (such as fprintf.o)
-# are compled from the same sources as the ioXXX versions (such as ioprintf.c).
-# These lines add the appropriate rules.
-# NOTE: We assume a C compiler that where -o with -c works.
-# But these files are not built by default anyway ...
-
-# TODO: remove rename tmpfile tmpnam
-
-stdio_renames="fclose fflush fgetpos fgets fopen fprintf fputs fread \
- fscanf fsetpos ftell fwrite getdelim gets perror printf puts \
- scanf setbuffer setvbuf sprintf sscanf ungetc vsprintf vsscanf"
-stdio_objects=""
-
-for file in $stdio_renames ; do
- cat >>Makefile <<EOF
-$file.o: \$(srcdir)/../io$file.c
- if [ -n "\$(PICFLAG)" ]; then \\
- \$(CC_FOR_STDIO) \$(CFLAGS) \$(CINCLUDES) \$(PICFLAG) -c \\
- \$(srcdir)/../io$file.c -D_IO_$file=$file -o pic/$file.o; \\
- fi
- \$(CC_FOR_STDIO) \$(CFLAGS) \$(CINCLUDES) -c \\
- \$(srcdir)/../io$file.c -D_IO_$file=$file -o $file.o
-EOF
- stdio_objects="$stdio_objects $file.o"
-done
-sed -e "/STDIO_RENAMED_OBJECTS =/s/=.*/=${stdio_objects}/" <Makefile >tmp
-mv -f tmp Makefile
diff --git a/contrib/libio/stdio/fdopen.c b/contrib/libio/stdio/fdopen.c
deleted file mode 100644
index 83e026ec7f76..000000000000
--- a/contrib/libio/stdio/fdopen.c
+++ /dev/null
@@ -1,9 +0,0 @@
-#include "libioP.h"
-
-_IO_FILE *
-fdopen (fd, mode)
- int fd;
- const char *mode;
-{
- return _IO_fdopen (fd, mode);
-}
diff --git a/contrib/libio/stdio/feof.c b/contrib/libio/stdio/feof.c
deleted file mode 100644
index d06de044fba5..000000000000
--- a/contrib/libio/stdio/feof.c
+++ /dev/null
@@ -1,43 +0,0 @@
-/* Copyright (C) 1993, 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#include "libioP.h"
-#include "stdio.h"
-
-int
-_IO_feof (fp)
- _IO_FILE* fp;
-{
- int result;
- CHECK_FILE (fp, EOF);
- _IO_flockfile (fp);
- result = _IO_feof_unlocked (fp);
- _IO_funlockfile (fp);
- return result;
-}
-
-#ifdef weak_alias
-weak_alias (_IO_feof, feof)
-#endif
diff --git a/contrib/libio/stdio/feof_u.c b/contrib/libio/stdio/feof_u.c
deleted file mode 100644
index 4773599012dd..000000000000
--- a/contrib/libio/stdio/feof_u.c
+++ /dev/null
@@ -1,37 +0,0 @@
-/* Copyright (C) 1993, 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#include "libioP.h"
-#include "stdio.h"
-
-#undef feof_unlocked
-
-int
-feof_unlocked (fp)
- _IO_FILE* fp;
-{
- CHECK_FILE (fp, EOF);
- return _IO_feof_unlocked (fp);
-}
diff --git a/contrib/libio/stdio/ferror.c b/contrib/libio/stdio/ferror.c
deleted file mode 100644
index 855627ade66d..000000000000
--- a/contrib/libio/stdio/ferror.c
+++ /dev/null
@@ -1,43 +0,0 @@
-/* Copyright (C) 1993, 1995, 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#include "libioP.h"
-#include "stdio.h"
-
-int
-_IO_ferror (fp)
- _IO_FILE* fp;
-{
- int result;
- CHECK_FILE (fp, EOF);
- _IO_flockfile (fp);
- result = _IO_ferror_unlocked (fp);
- _IO_funlockfile (fp);
- return result;
-}
-
-#ifdef weak_alias
-weak_alias (_IO_ferror, ferror)
-#endif
diff --git a/contrib/libio/stdio/ferror_u.c b/contrib/libio/stdio/ferror_u.c
deleted file mode 100644
index 6e13e53ddc00..000000000000
--- a/contrib/libio/stdio/ferror_u.c
+++ /dev/null
@@ -1,37 +0,0 @@
-/* Copyright (C) 1993, 1995, 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#include "libioP.h"
-#include "stdio.h"
-
-#undef ferror_unlocked
-
-int
-ferror_unlocked (fp)
- _IO_FILE* fp;
-{
- CHECK_FILE (fp, EOF);
- return _IO_ferror_unlocked (fp);
-}
diff --git a/contrib/libio/stdio/fgetc.c b/contrib/libio/stdio/fgetc.c
deleted file mode 100644
index 174e60fa3fd2..000000000000
--- a/contrib/libio/stdio/fgetc.c
+++ /dev/null
@@ -1,40 +0,0 @@
-/* Copyright (C) 1993, 1995, 1997 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#include "libioP.h"
-#include "stdio.h"
-
-int
-fgetc (fp)
- FILE *fp;
-{
- int result;
- CHECK_FILE (fp, EOF);
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
- _IO_flockfile (fp);
- result = _IO_getc_unlocked (fp);
- _IO_cleanup_region_end (1);
- return result;
-}
diff --git a/contrib/libio/stdio/fileno.c b/contrib/libio/stdio/fileno.c
deleted file mode 100644
index 7ff93e6a8138..000000000000
--- a/contrib/libio/stdio/fileno.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/* Copyright (C) 1993, 1995, 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#include "libioP.h"
-#include "stdio.h"
-
-int
-fileno (fp)
- _IO_FILE* fp;
-{
- CHECK_FILE (fp, EOF);
-
- if (!(fp->_flags & _IO_IS_FILEBUF))
- return EOF;
-
- return _IO_fileno (fp);
-}
-
-#ifdef _IO_MTSAFE_IO
-#ifdef weak_alias
-/* The fileno implementation for libio does not require locking because
- it only accesses once a single variable and this is already atomic
- (at least at thread level). */
-
-weak_alias (fileno, fileno_unlocked)
-#endif
-#endif
diff --git a/contrib/libio/stdio/fputc.c b/contrib/libio/stdio/fputc.c
deleted file mode 100644
index 22cdfab9a844..000000000000
--- a/contrib/libio/stdio/fputc.c
+++ /dev/null
@@ -1,41 +0,0 @@
-/* Copyright (C) 1993, 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#include "libioP.h"
-#include "stdio.h"
-
-int
-fputc (c, fp)
- int c;
- _IO_FILE *fp;
-{
- int result;
- CHECK_FILE (fp, EOF);
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
- _IO_flockfile (fp);
- result = _IO_putc_unlocked (c, fp);
- _IO_cleanup_region_end (1);
- return result;
-}
diff --git a/contrib/libio/stdio/fputc_u.c b/contrib/libio/stdio/fputc_u.c
deleted file mode 100644
index 48701e1d6cb5..000000000000
--- a/contrib/libio/stdio/fputc_u.c
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Copyright (C) 1993, 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#include "libioP.h"
-#include "stdio.h"
-
-#undef fputc_unlocked
-
-int
-fputc_unlocked (c, fp)
- int c;
- _IO_FILE *fp;
-{
- CHECK_FILE (fp, EOF);
- return _IO_putc_unlocked (c, fp);
-}
diff --git a/contrib/libio/stdio/freopen.c b/contrib/libio/stdio/freopen.c
deleted file mode 100644
index ff57d6033dc1..000000000000
--- a/contrib/libio/stdio/freopen.c
+++ /dev/null
@@ -1,44 +0,0 @@
-/* Copyright (C) 1993, 1995, 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#include "libioP.h"
-#include "stdio.h"
-
-FILE*
-freopen (filename, mode, fp)
- const char* filename;
- const char* mode;
- FILE* fp;
-{
- FILE *result;
- CHECK_FILE (fp, NULL);
- if (!(fp->_flags & _IO_IS_FILEBUF))
- return NULL;
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
- _IO_flockfile (fp);
- result = _IO_freopen (filename, mode, fp);
- _IO_cleanup_region_end (1);
- return result;
-}
diff --git a/contrib/libio/stdio/fseek.c b/contrib/libio/stdio/fseek.c
deleted file mode 100644
index f2563d33f28f..000000000000
--- a/contrib/libio/stdio/fseek.c
+++ /dev/null
@@ -1,42 +0,0 @@
-/* Copyright (C) 1993, 1995, 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#include "libioP.h"
-#include "stdio.h"
-
-int
-fseek (fp, offset, whence)
- _IO_FILE* fp;
- long int offset;
- int whence;
-{
- int result;
- CHECK_FILE (fp, -1);
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
- _IO_flockfile (fp);
- result = _IO_fseek (fp, offset, whence);
- _IO_cleanup_region_end (1);
- return result;
-}
diff --git a/contrib/libio/stdio/getc.c b/contrib/libio/stdio/getc.c
deleted file mode 100644
index 1dc53b5ed651..000000000000
--- a/contrib/libio/stdio/getc.c
+++ /dev/null
@@ -1,48 +0,0 @@
-/* Copyright (C) 1993, 1995, 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#include "libioP.h"
-#include "stdio.h"
-
-#undef _IO_getc
-
-int
-_IO_getc (fp)
- FILE *fp;
-{
- int result;
- CHECK_FILE (fp, EOF);
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
- _IO_flockfile (fp);
- result = _IO_getc_unlocked (fp);
- _IO_cleanup_region_end (1);
- return result;
-}
-
-#undef getc
-
-#ifdef weak_alias
-weak_alias (_IO_getc, getc)
-#endif
diff --git a/contrib/libio/stdio/getc_u.c b/contrib/libio/stdio/getc_u.c
deleted file mode 100644
index f07442744661..000000000000
--- a/contrib/libio/stdio/getc_u.c
+++ /dev/null
@@ -1,37 +0,0 @@
-/* Copyright (C) 1993, 1995, 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#include "libioP.h"
-#include "stdio.h"
-
-#undef getc_unlocked
-
-int
-getc_unlocked (fp)
- FILE *fp;
-{
- CHECK_FILE (fp, EOF);
- return _IO_getc_unlocked (fp);
-}
diff --git a/contrib/libio/stdio/getchar.c b/contrib/libio/stdio/getchar.c
deleted file mode 100644
index 93194b3912d9..000000000000
--- a/contrib/libio/stdio/getchar.c
+++ /dev/null
@@ -1,40 +0,0 @@
-/* Copyright (C) 1993, 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#include "libioP.h"
-#include "stdio.h"
-
-#undef getchar
-
-int
-getchar ()
-{
- int result;
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, stdin);
- _IO_flockfile (stdin);
- result = _IO_getc_unlocked (stdin);
- _IO_cleanup_region_end (1);
- return result;
-}
diff --git a/contrib/libio/stdio/getchar_u.c b/contrib/libio/stdio/getchar_u.c
deleted file mode 100644
index bfbe56b30c09..000000000000
--- a/contrib/libio/stdio/getchar_u.c
+++ /dev/null
@@ -1,35 +0,0 @@
-/* Copyright (C) 1993, 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#include "libioP.h"
-#include "stdio.h"
-
-#undef getchar_unlocked
-
-int
-getchar_unlocked ()
-{
- return _IO_getc_unlocked (stdin);
-}
diff --git a/contrib/libio/stdio/getline.c b/contrib/libio/stdio/getline.c
deleted file mode 100644
index 6f4b677086e8..000000000000
--- a/contrib/libio/stdio/getline.c
+++ /dev/null
@@ -1,13 +0,0 @@
-#include "libioP.h"
-#include "stdio.h"
-
-/* NOTE: This geline function is different from _IO_getline. */
-
-_IO_ssize_t
-getline (lineptr, linelen, fp)
- char** lineptr;
- size_t* linelen;
- FILE* fp;
-{
- return _IO_getdelim (lineptr, linelen, '\n', fp);
-}
diff --git a/contrib/libio/stdio/getw.c b/contrib/libio/stdio/getw.c
deleted file mode 100644
index 1dfafbc1d4f4..000000000000
--- a/contrib/libio/stdio/getw.c
+++ /dev/null
@@ -1,13 +0,0 @@
-#include "libioP.h"
-#include "stdio.h"
-
-int
-getw(fp)
- FILE *fp;
-{
- int w;
- _IO_size_t bytes_read;
- CHECK_FILE(fp, EOF);
- bytes_read = _IO_sgetn (fp, (char*)&w, sizeof(w));
- return sizeof(w) == bytes_read ? w : EOF;
-}
diff --git a/contrib/libio/stdio/obprintf.c b/contrib/libio/stdio/obprintf.c
deleted file mode 100644
index 6b959e455a8d..000000000000
--- a/contrib/libio/stdio/obprintf.c
+++ /dev/null
@@ -1,168 +0,0 @@
-/* Print output of stream to given obstack.
- Copyright (C) 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-
-#ifdef __STDC__
-#include <stdlib.h>
-#endif
-#include "libioP.h"
-#include <string.h>
-#include <errno.h>
-#include <obstack.h>
-#include <stdarg.h>
-
-
-struct _IO_obstack_file
-{
- struct _IO_FILE file;
- const void *vtable;
- struct obstack *obstack;
-};
-
-
-static int
-_IO_obstack_overflow (_IO_FILE *fp, int c)
-{
- struct obstack *obstack = ((struct _IO_obstack_file *) fp)->obstack;
-
- /* Make room for another character. This might as well allocate a
- new chunk a memory and moves the old contents over. */
- if (c != EOF)
- obstack_1grow (obstack, c);
-
- /* Setup the buffer pointers again. */
- fp->_IO_write_base = obstack_base (obstack);
- fp->_IO_write_ptr = obstack_next_free (obstack);
- fp->_IO_write_end = fp->_IO_write_base + obstack_room (obstack);
- /* Now allocate the rest of the current chunk. */
- obstack_blank_fast (obstack, fp->_IO_write_end - fp->_IO_write_ptr);
-
- return c;
-}
-
-
-static _IO_size_t
-_IO_obstack_xsputn (_IO_FILE *fp, const void *data, _IO_size_t n)
-{
- struct obstack *obstack = ((struct _IO_obstack_file *) fp)->obstack;
-
- if (fp->_IO_write_ptr + n > fp->_IO_write_end)
- {
- /* We need some more memory. First shrink the buffer to the
- space we really currently need. */
- obstack_blank (obstack, fp->_IO_write_ptr - fp->_IO_write_end);
-
- /* Now grow for N bytes. */
- obstack_blank (obstack, n);
-
- /* Setup the buffer pointers again. */
- fp->_IO_write_base = obstack_base (obstack);
- fp->_IO_write_ptr = obstack_next_free (obstack);
- fp->_IO_write_end = (fp->_IO_write_base + obstack_room (obstack));
- /* Now allocate the rest of the current chunk. */
- obstack_blank_fast (obstack, fp->_IO_write_end - fp->_IO_write_ptr);
- }
- else
- {
- memcpy (fp->_IO_write_ptr, data, n);
- fp->_IO_write_ptr += n;
- }
-
- return n;
-}
-
-
-/* the jump table. */
-static struct _IO_jump_t _IO_obstack_jumps =
-{
- JUMP_INIT_DUMMY,
- JUMP_INIT(finish, NULL),
- JUMP_INIT(overflow, _IO_obstack_overflow),
- JUMP_INIT(underflow, NULL),
- JUMP_INIT(uflow, NULL),
- JUMP_INIT(pbackfail, NULL),
- JUMP_INIT(xsputn, _IO_obstack_xsputn),
- JUMP_INIT(xsgetn, NULL),
- JUMP_INIT(seekoff, NULL),
- JUMP_INIT(seekpos, NULL),
- JUMP_INIT(setbuf, NULL),
- JUMP_INIT(sync, NULL),
- JUMP_INIT(doallocate, NULL),
- JUMP_INIT(read, NULL),
- JUMP_INIT(write, NULL),
- JUMP_INIT(seek, NULL),
- JUMP_INIT(close, NULL),
- JUMP_INIT(stat, NULL)
-};
-
-
-int
-_IO_obstack_vprintf (struct obstack *obstack, const char *format, va_list args)
-{
- struct obstack_FILE
- {
- struct _IO_obstack_file ofile;
-#ifdef _IO_MTSAFE_IO
- _IO_lock_t lock;
-#endif
- } new_f;
- int result;
-
-#ifdef _IO_MTSAFE_IO
- new_f.ofile.file._lock = &new_f.lock;
-#endif
-
- _IO_init ((_IO_FILE *) &new_f.ofile, 0);
- _IO_JUMPS (&new_f.ofile.file) = &_IO_obstack_jumps;
- _IO_str_init_static (&new_f.ofile.file, obstack_base (obstack),
- (obstack_object_size (obstack) +
- obstack_room (obstack)), obstack_next_free (obstack));
- /* Now allocate the rest of the current chunk. */
- obstack_blank_fast (obstack,
- (new_f.ofile.file._IO_write_end
- - new_f.ofile.file._IO_write_ptr));
- new_f.ofile.obstack = obstack;
-
- result = _IO_vfprintf ((_IO_FILE *) &new_f, format, args);
-
- /* Shrink the buffer to the space we really currently need. */
- obstack_blank (obstack, (new_f.ofile.file._IO_write_ptr
- - new_f.ofile.file._IO_write_end));
-
- return result;
-}
-#ifdef weak_alias
-weak_alias (_IO_obstack_vprintf, obstack_vprintf)
-#endif
-
-
-int
-_IO_obstack_printf (struct obstack *obstack, const char *format, ...)
-{
- int result;
- va_list ap;
- va_start (ap, format);
- result = _IO_obstack_vprintf (obstack, format, ap);
- va_end (ap);
- return result;
-}
-#ifdef weak_alias
-weak_alias (_IO_obstack_printf, obstack_printf)
-#endif
diff --git a/contrib/libio/stdio/popen.c b/contrib/libio/stdio/popen.c
deleted file mode 100644
index 9f9f3f72f58e..000000000000
--- a/contrib/libio/stdio/popen.c
+++ /dev/null
@@ -1,23 +0,0 @@
-#include "libioP.h"
-#include "stdio.h"
-#include <errno.h>
-
-FILE *
-popen(command, mode)
- const char *command; const char *mode;
-{
- return _IO_popen(command, mode);
-}
-
-int
-pclose(fp)
- FILE *fp;
-{
-#if 0
- /* Does not actually test that stream was created by popen(). Instead,
- it depends on the filebuf::sys_close() virtual to Do The Right Thing. */
- if (fp is not a proc_file)
- return -1;
-#endif
- return _IO_fclose(fp);
-}
diff --git a/contrib/libio/stdio/putc.c b/contrib/libio/stdio/putc.c
deleted file mode 100644
index 3c35c365f07a..000000000000
--- a/contrib/libio/stdio/putc.c
+++ /dev/null
@@ -1,42 +0,0 @@
-/* Copyright (C) 1991, 1995, 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-#include "libioP.h"
-#include "stdio.h"
-
-#undef _IO_putc
-
-int
-_IO_putc (c, fp)
- int c;
- _IO_FILE *fp;
-{
- int result;
- CHECK_FILE (fp, EOF);
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
- _IO_flockfile (fp);
- result = _IO_putc_unlocked (c, fp);
- _IO_cleanup_region_end (1);
- return result;
-}
-
-#undef putc
-
-#ifdef weak_alias
-weak_alias (_IO_putc, putc)
-#endif
diff --git a/contrib/libio/stdio/putc_u.c b/contrib/libio/stdio/putc_u.c
deleted file mode 100644
index b4d94e8912bc..000000000000
--- a/contrib/libio/stdio/putc_u.c
+++ /dev/null
@@ -1,31 +0,0 @@
-/* Copyright (C) 1991, 1995, 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-#include "libioP.h"
-#include "stdio.h"
-
-#undef putc_unlocked
-
-int
-putc_unlocked (c, fp)
- int c;
- _IO_FILE *fp;
-{
- CHECK_FILE (fp, EOF);
- return _IO_putc_unlocked (c, fp);
-}
diff --git a/contrib/libio/stdio/putchar.c b/contrib/libio/stdio/putchar.c
deleted file mode 100644
index 1e1dd1376267..000000000000
--- a/contrib/libio/stdio/putchar.c
+++ /dev/null
@@ -1,35 +0,0 @@
-/* Copyright (C) 1991, 1995, 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-#include "libioP.h"
-#include "stdio.h"
-
-#undef putchar
-
-int
-putchar (c)
- int c;
-{
- int result;
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
- _IO_stdout);
- _IO_flockfile (_IO_stdout);
- result = _IO_putc_unlocked (c, _IO_stdout);
- _IO_cleanup_region_end (1);
- return result;
-}
diff --git a/contrib/libio/stdio/putchar_u.c b/contrib/libio/stdio/putchar_u.c
deleted file mode 100644
index f8f387ac4edb..000000000000
--- a/contrib/libio/stdio/putchar_u.c
+++ /dev/null
@@ -1,30 +0,0 @@
-/* Copyright (C) 1991, 1995, 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
-
-#include "libioP.h"
-#include "stdio.h"
-
-#undef putchar_unlocked
-
-int
-putchar_unlocked (c)
- int c;
-{
- CHECK_FILE (stdout, EOF);
- return _IO_putc_unlocked (c, stdout);
-}
diff --git a/contrib/libio/stdio/putw.c b/contrib/libio/stdio/putw.c
deleted file mode 100644
index fd73261359cf..000000000000
--- a/contrib/libio/stdio/putw.c
+++ /dev/null
@@ -1,15 +0,0 @@
-#include "libioP.h"
-#include "stdio.h"
-
-#undef putw
-
-int
-putw(w, fp)
- int w;
- FILE *fp;
-{
- _IO_size_t written;
- CHECK_FILE(fp, EOF);
- written = _IO_sputn(fp, (const char *)&w, sizeof(w));
- return written == sizeof(w) ? 0 : EOF;
-}
diff --git a/contrib/libio/stdio/rewind.c b/contrib/libio/stdio/rewind.c
deleted file mode 100644
index bce27575fd8a..000000000000
--- a/contrib/libio/stdio/rewind.c
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Copyright (C) 1993, 1996, 1997 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#include "libioP.h"
-#include "stdio.h"
-
-void
-rewind (fp)
- _IO_FILE *fp;
-{
- CHECK_FILE (fp, );
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
- _IO_flockfile (fp);
- _IO_rewind (fp);
- _IO_cleanup_region_end (1);
-}
diff --git a/contrib/libio/stdio/setbuf.c b/contrib/libio/stdio/setbuf.c
deleted file mode 100644
index ac323a31b5ba..000000000000
--- a/contrib/libio/stdio/setbuf.c
+++ /dev/null
@@ -1,35 +0,0 @@
-/* Copyright (C) 1993, 1997 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#include "libioP.h"
-#include "stdio.h"
-
-void
-setbuf (fp, buf)
- _IO_FILE *fp;
- char *buf;
-{
- _IO_setbuffer (fp, buf, _IO_BUFSIZ);
-}
diff --git a/contrib/libio/stdio/setfileno.c b/contrib/libio/stdio/setfileno.c
deleted file mode 100644
index f7ccc6fdd666..000000000000
--- a/contrib/libio/stdio/setfileno.c
+++ /dev/null
@@ -1,17 +0,0 @@
-/* Some known programs (xterm, pdksh?) non-portably change the _file
- field of s struct _iobuf. This kludge allows the same "functionality".
- This code is an undocumented feature for iostream/stdio. Use it at
- your own risk. */
-
-#include "libioP.h"
-#include "stdio.h"
-
-void
-setfileno(fp, fd)
- _IO_FILE* fp;
- int fd;
-{
- CHECK_FILE(fp, );
- if ((fp->_flags & _IO_IS_FILEBUF) != 0)
- fp->_fileno = fd;
-}
diff --git a/contrib/libio/stdio/setlinebuf.c b/contrib/libio/stdio/setlinebuf.c
deleted file mode 100644
index e4e029faeac2..000000000000
--- a/contrib/libio/stdio/setlinebuf.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/* Copyright (C) 1993, 1997 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#include "libioP.h"
-#include "stdio.h"
-
-#undef setlinebuf
-
-void
-setlinebuf (stream)
- _IO_FILE *stream;
-{
- _IO_setvbuf (stream, NULL, 1, 0);
-}
diff --git a/contrib/libio/stdio/snprintf.c b/contrib/libio/stdio/snprintf.c
deleted file mode 100644
index 5c70a4441127..000000000000
--- a/contrib/libio/stdio/snprintf.c
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
-Copyright (C) 1994 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include "libioP.h"
-
-#ifdef __STDC__
-#include <stdarg.h>
-#else
-#include <varargs.h>
-#endif
-
-int
-snprintf
-#ifdef __STDC__
- (char *string, _IO_size_t maxlen, const char *format, ...)
-#else
-(string, maxlen, format, va_alist)
- char *string;
- _IO_size_t maxlen;
- char *format;
- va_dcl
-#endif
-{
- int ret;
- va_list args;
- _IO_va_start(args, format);
- ret = vsnprintf(string, maxlen, format, args);
- va_end(args);
- return ret;
-}
diff --git a/contrib/libio/stdio/stdio.h b/contrib/libio/stdio/stdio.h
deleted file mode 100644
index 30065ac87149..000000000000
--- a/contrib/libio/stdio/stdio.h
+++ /dev/null
@@ -1,219 +0,0 @@
-/* This is part of the iostream/stdio library, providing -*- C -*- I/O.
- Define ANSI C stdio on top of C++ iostreams.
- Copyright (C) 1991, 1994 Free Software Foundation
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
-
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-/*
- * ANSI Standard: 4.9 INPUT/OUTPUT <stdio.h>
- */
-
-#ifndef _STDIO_H
-#define _STDIO_H
-#define _STDIO_USES_IOSTREAM
-
-#include <libio.h>
-
-#ifndef NULL
-#ifdef __cplusplus
-#define NULL 0
-#else
-#define NULL (void*)0
-#endif
-#endif
-
-#ifndef EOF
-#define EOF (-1)
-#endif
-#ifndef BUFSIZ
-#define BUFSIZ 1024
-#endif
-
-#define _IOFBF 0 /* Fully buffered. */
-#define _IOLBF 1 /* Line buffered. */
-#define _IONBF 2 /* No buffering. */
-
-#define SEEK_SET 0
-#define SEEK_CUR 1
-#define SEEK_END 2
-
- /* define size_t. Crud in case <sys/types.h> has defined it. */
-#if !defined(_SIZE_T) && !defined(_T_SIZE_) && !defined(_T_SIZE)
-#if !defined(__SIZE_T) && !defined(_SIZE_T_) && !defined(___int_size_t_h)
-#if !defined(_GCC_SIZE_T) && !defined(_SIZET_)
-#define _SIZE_T
-#define _T_SIZE_
-#define _T_SIZE
-#define __SIZE_T
-#define _SIZE_T_
-#define ___int_size_t_h
-#define _GCC_SIZE_T
-#define _SIZET_
-typedef _IO_size_t size_t;
-#endif
-#endif
-#endif
-
-typedef struct _IO_FILE FILE;
-typedef _IO_fpos_t fpos_t;
-
-#define FOPEN_MAX _G_FOPEN_MAX
-#define FILENAME_MAX _G_FILENAME_MAX
-#ifndef TMP_MAX
-#define TMP_MAX 999 /* Only limited by filename length */
-#endif
-
-#define L_ctermid 9
-#define L_cuserid 9
-#define P_tmpdir "/tmp"
-#define L_tmpnam 20
-
-/* For use by debuggers. These are linked in if printf or fprintf are used. */
-extern FILE *stdin, *stdout, *stderr; /* TODO */
-
-#define stdin _IO_stdin
-#define stdout _IO_stdout
-#define stderr _IO_stderr
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifndef __P
-#if defined(__STDC__) || defined(__cplusplus) || defined(c_plusplus)
-#define __P(args) args
-#else
-#define __P(args) ()
-#endif
-#endif /*!__P*/
-
-extern void clearerr __P((FILE*));
-extern int fclose __P((FILE*));
-extern int feof __P((FILE*));
-extern int ferror __P((FILE*));
-extern int fflush __P((FILE*));
-extern int fgetc __P((FILE *));
-extern int fgetpos __P((FILE* fp, fpos_t *pos));
-extern char* fgets __P((char*, int, FILE*));
-extern FILE* fopen __P((const char*, const char*));
-extern int fprintf __P((FILE*, const char* format, ...));
-extern int fputc __P((int, FILE*));
-extern int fputs __P((const char *str, FILE *fp));
-extern size_t fread __P((void*, size_t, size_t, FILE*));
-extern FILE* freopen __P((const char*, const char*, FILE*));
-extern int fscanf __P((FILE *fp, const char* format, ...));
-extern int fseek __P((FILE* fp, long int offset, int whence));
-extern int fsetpos __P((FILE* fp, const fpos_t *pos));
-extern long int ftell __P((FILE* fp));
-extern size_t fwrite __P((const void*, size_t, size_t, FILE*));
-extern int getc __P((FILE *));
-extern int getchar __P((void));
-extern char* gets __P((char*));
-extern void perror __P((const char *));
-extern int printf __P((const char* format, ...));
-extern int putc __P((int, FILE *));
-extern int putchar __P((int));
-extern int puts __P((const char *str));
-extern int remove __P((const char*));
-extern int rename __P((const char* _old, const char* _new));
-extern void rewind __P((FILE*));
-extern int scanf __P((const char* format, ...));
-extern void setbuf __P((FILE*, char*));
-extern void setlinebuf __P((FILE*));
-extern void setbuffer __P((FILE*, char*, int));
-extern int setvbuf __P((FILE*, char*, int mode, size_t size));
-extern int sprintf __P((char*, const char* format, ...));
-extern int sscanf __P((const char* string, const char* format, ...));
-extern FILE* tmpfile __P((void));
-extern char* tmpnam __P((char*));
-extern int ungetc __P((int c, FILE* fp));
-extern int vfprintf __P((FILE *fp, char const *fmt0, _IO_va_list));
-extern int vprintf __P((char const *fmt, _IO_va_list));
-extern int vsprintf __P((char* string, const char* format, _IO_va_list));
-
-#ifndef __STRICT_ANSI__
-extern int vfscanf __P((FILE*, const char *, _IO_va_list));
-extern int vscanf __P((const char *, _IO_va_list));
-extern int vsscanf __P((const char *, const char *, _IO_va_list));
-#endif
-
-#if !defined(__STRICT_ANSI__) || defined(_POSIX_SOURCE)
-extern FILE *fdopen __P((int, const char *));
-extern int fileno __P((FILE*));
-extern FILE* popen __P((const char*, const char*));
-extern int pclose __P((FILE*));
-#endif
-
-#ifdef __USE_GNU
-extern _IO_ssize_t getdelim __P ((char **, size_t *, int, FILE*));
-extern _IO_ssize_t getline __P ((char **, size_t *, FILE *));
-
-extern int snprintf __P ((char *, size_t, const char *, ...));
-extern int vsnprintf __P ((char *, size_t, const char *, _IO_va_list));
-#endif
-
-extern int __underflow __P((struct _IO_FILE*));
-extern int __overflow __P((struct _IO_FILE*, int));
-
-/* Handle locking of streams. */
-#if defined _REENTRANT || defined _THREAD_SAFE
-extern void clearerr_locked __P ((FILE *));
-extern void clearerr_unlocked __P ((FILE *));
-extern int feof_locked __P ((FILE *));
-extern int feof_unlocked __P ((FILE *));
-extern int ferror_locked __P ((FILE*));
-extern int ferror_unlocked __P ((FILE*));
-extern int fileno_locked __P ((FILE *));
-extern int fileno_unlocked __P ((FILE *));
-extern void flockfile __P ((FILE *));
-extern void funlockfile __P ((FILE *));
-extern int ftrylockfile __P ((FILE *));
-extern int fclose_unlocked __P ((FILE *));
-extern int fflush_locked __P ((FILE *));
-extern int fflush_unlocked __P ((FILE *));
-extern size_t fread_unlocked __P ((void *, size_t, size_t, FILE *));
-extern size_t fwrite_unlocked __P ((const void *, size_t, size_t, FILE *));
-
-extern int fputc_locked __P ((int, FILE*));
-extern int fputc_unlocked __P ((int, FILE*));
-extern int getc_locked __P ((FILE *));
-extern int getc_unlocked __P ((FILE *));
-extern int getchar_locked __P ((void));
-extern int getchar_unlocked __P ((void));
-extern int putc_locked __P ((int, FILE *));
-extern int putc_unlocked __P ((int, FILE *));
-extern int putchar_locked __P ((int));
-extern int putchar_unlocked __P ((int));
-
-# define getc_unlocked(fp) _IO_getc_unlocked (fp)
-# define getc_locked(fp) _IO_getc (fp)
-# define getchar_unlocked() _IO_getc_unlocked (stdin)
-# define getchar_locked() _IO_getc (stdin)
-# define putchar_unlocked(c) _IO_putc_unlocked (c, stdout)
-# define putchar_locked(c) _IO_putc (c, stdout)
-#endif /* __USE_REENTRANT */
-
-#define getc(fp) _IO_getc(fp)
-#define putc(c, fp) _IO_putc(c, fp)
-#define putchar(c) _IO_putc(c, stdout)
-#define getchar() _IO_getc(stdin)
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /*!_STDIO_H*/
diff --git a/contrib/libio/stdio/vasprintf.c b/contrib/libio/stdio/vasprintf.c
deleted file mode 100644
index 15513d0fca7d..000000000000
--- a/contrib/libio/stdio/vasprintf.c
+++ /dev/null
@@ -1,72 +0,0 @@
-/* Copyright (C) 1995, 1997 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#include <malloc.h>
-#include "libioP.h"
-#include "stdio.h"
-#include "strfile.h"
-
-int
-_IO_vasprintf (result_ptr, format, args)
- char **result_ptr;
- const char *format;
- _IO_va_list args;
-{
- /* Initial size of the buffer to be used. Will be doubled each time an
- overflow occurs. */
- const _IO_size_t init_string_size = 100;
- char *string;
- _IO_strfile sf;
-#ifdef _IO_MTSAFE_IO
- _IO_lock_t lock;
-#endif
- int ret;
- string = (char *) malloc (init_string_size);
- if (string == NULL)
- return -1;
-#ifdef _IO_MTSAFE_IO
- sf._sbf._f._lock = &lock;
-#endif
- _IO_init ((_IO_FILE *) &sf, 0);
- _IO_JUMPS ((_IO_FILE *) &sf) = &_IO_str_jumps;
- _IO_str_init_static ((_IO_FILE *) &sf, string, init_string_size, string);
- sf._sbf._f._flags &= ~_IO_USER_BUF;
- sf._s._allocate_buffer = (_IO_alloc_type) malloc;
- sf._s._free_buffer = (_IO_free_type) free;
- ret = _IO_vfprintf ((_IO_FILE *) &sf, format, args);
- if (ret < 0)
- return ret;
- *result_ptr = (char *) realloc (sf._sbf._f._IO_buf_base,
- (sf._sbf._f._IO_write_ptr
- - sf._sbf._f._IO_write_base) +1);
- if (*result_ptr == NULL)
- *result_ptr = sf._sbf._f._IO_buf_base;
- (*result_ptr)[sf._sbf._f._IO_write_ptr-sf._sbf._f._IO_write_base] = '\0';
- return ret;
-}
-
-#ifdef weak_alias
-weak_alias (_IO_vasprintf, vasprintf)
-#endif
diff --git a/contrib/libio/stdio/vfprintf.c b/contrib/libio/stdio/vfprintf.c
deleted file mode 100644
index fca620944529..000000000000
--- a/contrib/libio/stdio/vfprintf.c
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include "libioP.h"
-
-int
-vfprintf(fp, format, args)
- register _IO_FILE* fp;
- char const *format;
- _IO_va_list args;
-{
- CHECK_FILE(fp, -1);
- return _IO_vfprintf(fp, format, args);
-}
diff --git a/contrib/libio/stdio/vfscanf.c b/contrib/libio/stdio/vfscanf.c
deleted file mode 100644
index 1759ee5ee017..000000000000
--- a/contrib/libio/stdio/vfscanf.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include "libioP.h"
-#include "stdio.h"
-
-int
-vfscanf(fp, format, args)
- register _IO_FILE* fp;
- const char *format;
- _IO_va_list args;
-{
- CHECK_FILE(fp, EOF);
- return _IO_vfscanf(fp, format, args, NULL);
-}
diff --git a/contrib/libio/stdio/vprintf.c b/contrib/libio/stdio/vprintf.c
deleted file mode 100644
index 784f0d9b8dfe..000000000000
--- a/contrib/libio/stdio/vprintf.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include "libioP.h"
-#include "stdio.h"
-
-int vprintf(format, args)
- const char* format;
- _IO_va_list args;
-{
- return _IO_vfprintf(_IO_stdout, format, args);
-}
diff --git a/contrib/libio/stdio/vscanf.c b/contrib/libio/stdio/vscanf.c
deleted file mode 100644
index 8b92ae270e6d..000000000000
--- a/contrib/libio/stdio/vscanf.c
+++ /dev/null
@@ -1,41 +0,0 @@
-/* Copyright (C) 1993, 1997 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#include "libioP.h"
-#include "stdio.h"
-
-#undef vscanf
-
-int
-_IO_vscanf (format, args)
- const char *format;
- _IO_va_list args;
-{
- return _IO_vfscanf (_IO_stdin, format, args, NULL);
-}
-
-#ifdef weak_alias
-weak_alias (_IO_vscanf, vscanf)
-#endif
diff --git a/contrib/libio/stdio/vsnprintf.c b/contrib/libio/stdio/vsnprintf.c
deleted file mode 100644
index 3f35af299ab7..000000000000
--- a/contrib/libio/stdio/vsnprintf.c
+++ /dev/null
@@ -1,136 +0,0 @@
-/* Copyright (C) 1994, 1997 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#include "libioP.h"
-#include "strfile.h"
-
-
-typedef struct
-{
- _IO_strfile f;
- /* This is used for the characters which do not fit in the buffer
- provided by the user. */
- char overflow_buf[64];
-} _IO_strnfile;
-
-
-static int _IO_strn_overflow __P ((_IO_FILE *fp, int c));
-
-static int
-_IO_strn_overflow (fp, c)
- _IO_FILE *fp;
- int c;
-{
- /* When we come to here this means the user supplied buffer is
- filled. But since we must return the number of characters which
- would have been written in total we must provide a buffer for
- further use. We can do this by writing on and on in the overflow
- buffer in the _IO_strnfile structure. */
- _IO_strnfile *snf = (_IO_strnfile *) fp;
-
- if (fp->_IO_buf_base != snf->overflow_buf)
- {
- /* Terminate the string. We know that there is room for at
- least one more character since we initialized the stream with
- a size to make this possible. */
- *fp->_IO_write_ptr = '\0';
-
- _IO_setb (fp, snf->overflow_buf,
- snf->overflow_buf + sizeof (snf->overflow_buf), 0);
-
- fp->_IO_write_base = snf->overflow_buf;
- fp->_IO_read_base = snf->overflow_buf;
- fp->_IO_read_ptr = snf->overflow_buf;
- fp->_IO_read_end = snf->overflow_buf + sizeof (snf->overflow_buf);
- }
-
- fp->_IO_write_ptr = snf->overflow_buf;
- fp->_IO_write_end = snf->overflow_buf;
-
- /* Since we are not really interested in storing the characters
- which do not fit in the buffer we simply ignore it. */
- return c;
-}
-
-
-static struct _IO_jump_t _IO_strn_jumps =
-{
- JUMP_INIT_DUMMY,
- JUMP_INIT(finish, _IO_str_finish),
- JUMP_INIT(overflow, _IO_strn_overflow),
- JUMP_INIT(underflow, _IO_str_underflow),
- JUMP_INIT(uflow, _IO_default_uflow),
- JUMP_INIT(pbackfail, _IO_str_pbackfail),
- JUMP_INIT(xsputn, _IO_default_xsputn),
- JUMP_INIT(xsgetn, _IO_default_xsgetn),
- JUMP_INIT(seekoff, _IO_str_seekoff),
- JUMP_INIT(seekpos, _IO_default_seekpos),
- JUMP_INIT(setbuf, _IO_default_setbuf),
- JUMP_INIT(sync, _IO_default_sync),
- JUMP_INIT(doallocate, _IO_default_doallocate),
- JUMP_INIT(read, _IO_default_read),
- JUMP_INIT(write, _IO_default_write),
- JUMP_INIT(seek, _IO_default_seek),
- JUMP_INIT(close, _IO_default_close),
- JUMP_INIT(stat, _IO_default_stat)
-};
-
-
-int
-_IO_vsnprintf (string, maxlen, format, args)
- char *string;
- _IO_size_t maxlen;
- const char *format;
- _IO_va_list args;
-{
- _IO_strnfile sf;
- int ret;
-#ifdef _IO_MTSAFE_IO
- _IO_lock_t lock;
- sf.f._sbf._f._lock = &lock;
-#endif
-
- /* We need to handle the special case where MAXLEN is 0. Use the
- overflow buffer right from the start. */
- if (maxlen == 0)
- {
- string = sf.overflow_buf;
- maxlen = sizeof (sf.overflow_buf);
- }
-
- _IO_init ((_IO_FILE *) &sf, 0);
- _IO_JUMPS ((_IO_FILE *) &sf) = &_IO_strn_jumps;
- _IO_str_init_static ((_IO_FILE *) &sf, string, maxlen - 1, string);
- ret = _IO_vfprintf ((_IO_FILE *) &sf, format, args);
-
- if (sf.f._sbf._f._IO_buf_base != sf.overflow_buf)
- *sf.f._sbf._f._IO_write_ptr = '\0';
- return ret;
-}
-
-#ifdef weak_alias
-weak_alias (_IO_vsnprintf, __vsnprintf)
-weak_alias (_IO_vsnprintf, vsnprintf)
-#endif
diff --git a/contrib/libio/stdiostream.cc b/contrib/libio/stdiostream.cc
deleted file mode 100644
index ee0907b209f4..000000000000
--- a/contrib/libio/stdiostream.cc
+++ /dev/null
@@ -1,159 +0,0 @@
-/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-/* Written by Per Bothner (bothner@cygnus.com). */
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-
-#include "libioP.h"
-#include <stdiostream.h>
-
-// A stdiobuf is "tied" to a FILE object (as used by the stdio package).
-// Thus a stdiobuf is always synchronized with the corresponding FILE,
-// though at the cost of some overhead. (If you use the implementation
-// of stdio supplied with this library, you don't need stdiobufs.)
-// This implementation inherits from filebuf, but implement the virtual
-// functions sys_read/..., using the stdio functions fread/... instead
-// of the low-level read/... system calls. This has the advantage that
-// we get all of the nice filebuf semantics automatically, though
-// with some overhead.
-
-
-#ifndef SEEK_SET
-#define SEEK_SET 0
-#endif
-#ifndef SEEK_CUR
-#define SEEK_CUR 1
-#endif
-#ifndef SEEK_END
-#define SEEK_END 2
-#endif
-
-stdiobuf::stdiobuf(FILE *f) : filebuf(fileno(f))
-{
- _file = f;
- // Turn off buffer in stdiobuf. Instead, rely on buffering in (FILE).
- // Thus the stdiobuf will be synchronized with the FILE.
- setbuf(NULL, 0);
-}
-
-stdiobuf::~stdiobuf()
-{
- /* Only needed if we're buffered. Not buffered is the default. */
- _IO_do_flush((_IO_FILE*)this);
-}
-
-streamsize stdiobuf::sys_read(char* buf, streamsize size)
-{
- // A minor optimization, but it makes a noticable difference.
- // A bigger optimization would be to write stdiobuf::underflow,
- // but that has some modularity disadvantages. Re-evaluate that
- // after we have gotten rid of the double indirection. FIXME
- if (size == 1)
- {
- register int ch = getc(_file);
- if (ch == EOF)
- return 0;
- *buf = (char)ch;
- return 1;
- }
- else
- return fread(buf, 1, size, _file);
-}
-
-streamsize stdiobuf::sys_write(const char *buf, streamsize n)
-{
- _IO_ssize_t count = fwrite(buf, 1, n, _file);
- if (_offset >= 0)
- _offset += n;
- return count;
-}
-
-streampos stdiobuf::sys_seek(streamoff offset, _seek_dir dir)
-{
- // Normally, equivalent to: fdir=dir
- int fdir =
- (dir == ios::beg) ? SEEK_SET :
- (dir == ios::cur) ? SEEK_CUR :
- (dir == ios::end) ? SEEK_END :
- dir;
- return fseek(_file, offset, fdir);
-}
-
-int stdiobuf::sys_close()
-{
- int status = fclose(_file);
- _file = NULL;
- return status;
-}
-
-int stdiobuf::sync()
-{
- if (_IO_do_flush((_IO_FILE*)this))
- return EOF;
- if (!(xflags() & _IO_NO_WRITES))
- if (fflush(_file))
- return EOF;
- return 0;
-}
-
-int stdiobuf::overflow(int c /* = EOF*/)
-{
- if (filebuf::overflow(c) == EOF)
- return EOF;
- if (c != EOF)
- return c;
- return fflush(_file);
-}
-
-streamsize stdiobuf::xsputn(const char* s, streamsize n)
-{
- if (buffered ())
- {
- // The filebuf implementation of sputn loses.
- return streambuf::xsputn(s, n);
- }
- else
- return fwrite (s, 1, n, _file);
-}
-
-void stdiobuf::buffered (int b)
-{
- if (b)
- {
- if (_flags & _IO_UNBUFFERED)
- { /* Was unbuffered, make it buffered. */
- _flags &= ~_IO_UNBUFFERED;
- }
- }
- else
- {
- if (!(_flags & _IO_UNBUFFERED))
- { /* Was buffered, make it unbuffered. */
- setbuf(NULL, 0);
- }
- }
-}
diff --git a/contrib/libio/stdiostream.h b/contrib/libio/stdiostream.h
deleted file mode 100644
index b973d7a39b62..000000000000
--- a/contrib/libio/stdiostream.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-/* Written by Per Bothner (bothner@cygnus.com). */
-
-#ifndef _STDIOSTREAM_H
-#define _STDIOSTREAM_H
-
-#ifdef __GNUG__
-#pragma interface
-#endif
-
-#include <iostream.h>
-#include <stdio.h>
-
-extern "C++" {
-class stdiobuf : public filebuf {
- protected:
- FILE *_file;
- public:
- FILE* stdiofile() const { return _file; }
- stdiobuf(FILE *);
- ~stdiobuf();
- int buffered () const { return _flags & _IO_UNBUFFERED ? 0 : 1; }
- void buffered (int);
- virtual streamsize sys_read(char*, streamsize);
- virtual streampos sys_seek(streamoff, _seek_dir);
- virtual streamsize sys_write(const char*, streamsize);
- virtual int sys_close();
- virtual int sync();
- virtual int overflow(int c = EOF);
- streamsize xsputn(const char* s, streamsize n);
-};
-
-class istdiostream : public istream
-{
-private:
- stdiobuf _file;
-public:
- istdiostream (FILE* __f) : istream(), _file(__f) { init(&_file); }
- stdiobuf* rdbuf()/* const */ { return &_file; }
- int buffered () const { return _file.buffered (); }
- void buffered (int _i) { _file.buffered (_i); }
-};
-
-class ostdiostream : public ostream
-{
-private:
- stdiobuf _file;
-public:
- ostdiostream (FILE* __f) : ostream(), _file(__f) { init(&_file); }
- stdiobuf* rdbuf() /* const */ { return &_file; }
- int buffered () const { return _file.buffered (); }
- void buffered (int _i) { _file.buffered (_i); }
-};
-} // extern "C++"
-
-#endif /* !_STDIOSTREAM_H */
diff --git a/contrib/libio/stdstrbufs.cc b/contrib/libio/stdstrbufs.cc
deleted file mode 100644
index 48aa719df863..000000000000
--- a/contrib/libio/stdstrbufs.cc
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
-Copyright (C) 1994 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-
-/* This file provides definitions of _IO_stdin, _IO_stdout, and _IO_stderr
- for C++ code. Compare stdfiles.c.
- (The difference is that here the vtable field is set to
- point to builtinbuf's vtable, so the objects are effectively
- of class builtinbuf.) */
-
-#include "libioP.h"
-#include <stdio.h>
-
-#if !defined(filebuf_vtable) && defined(__cplusplus)
-#ifdef __GNUC__
-extern char filebuf_vtable[]
- asm (_G_VTABLE_LABEL_PREFIX
-#if _G_VTABLE_LABEL_HAS_LENGTH
- "7"
-#endif
- "filebuf");
-#else /* !__GNUC__ */
-#if _G_VTABLE_LABEL_HAS_LENGTH
-#define filebuf_vtable _G_VTABLE_LABEL_PREFIX_ID##7filebuf
-#else
-#define filebuf_vtable _G_VTABLE_LABEL_PREFIX_ID##filebuf
-#endif
-extern char filebuf_vtable[];
-#endif /* !__GNUC__ */
-#endif /* !defined(filebuf_vtable) && defined(__cplusplus) */
-
-#ifndef STD_VTABLE
-#define STD_VTABLE (const struct _IO_jump_t *)filebuf_vtable
-#endif
-
-#ifdef _IO_MTSAFE_IO
-#define DEF_STDFILE(NAME, FD, CHAIN, FLAGS) \
- static _IO_lock_t _IO_stdfile_##FD##_lock = _IO_lock_initializer; \
- struct _IO_FILE_plus NAME \
- = {FILEBUF_LITERAL(CHAIN, FLAGS, FD), STD_VTABLE}
-#else
-#define DEF_STDFILE(NAME, FD, CHAIN, FLAGS) \
- struct _IO_FILE_plus NAME = {FILEBUF_LITERAL(CHAIN, FLAGS, FD), STD_VTABLE}
-#endif
-
-DEF_STDFILE(_IO_stdin_, 0, 0, _IO_NO_WRITES);
-DEF_STDFILE(_IO_stdout_, 1, &_IO_stdin_.file, _IO_NO_READS);
-DEF_STDFILE(_IO_stderr_, 2, &_IO_stdout_.file,
- _IO_NO_READS+_IO_UNBUFFERED);
-
-#ifdef _STDIO_USES_IOSTREAM
-_IO_FILE *_IO_list_all = &_IO_stderr_.file;
-#else /* !_STDIO_USES_IOSTREAM */
-#include "stdiostream.h"
-
-struct _IO_fake_stdiobuf {
- struct {
- _IO_FILE file;
- const void *vtable;
- } s;
- FILE *stdio_file;
-};
-
-/* Define stdiobuf_vtable as a name for the virtual function table
- of the stdiobuf class. */
-#ifndef stdiobuf_vtable
-#ifdef __GNUC__
-extern struct _IO_jump_t stdiobuf_vtable
- asm (_G_VTABLE_LABEL_PREFIX
-#if _G_VTABLE_LABEL_HAS_LENGTH
- "8"
-#endif
- "stdiobuf");
-#else /* !__GNUC__ */
-#if _G_VTABLE_LABEL_HAS_LENGTH
-#define stdiobuf_vtable _G_VTABLE_LABEL_PREFIX_ID##8stdiobuf
-#else
-#define stdiobuf_vtable _G_VTABLE_LABEL_PREFIX_ID##stdiobuf
-#endif
-extern struct _IO_jump_t stdiobuf_vtable;
-#endif /* !__GNUC__ */
-#endif /* !stdiobuf_vtable */
-
-#ifdef _IO_MTSAFE_IO
-#define DEF_STDIOFILE(NAME, FD, FILE, FLAGS, CHAIN) \
- static _IO_lock_t _IO_stdfile_##FD##_lock = _IO_lock_initializer; \
- struct _IO_fake_stdiobuf NAME = \
- {{{ _IO_MAGIC+_IO_LINKED+_IO_IS_FILEBUF+_IO_UNBUFFERED+FLAGS, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, CHAIN, FD, \
- 0, 0, 0, 0, { 0 }, _IO_stdfile_##FD##_lock},\
- &stdiobuf_vtable}, FILE}
-#else
-#define DEF_STDIOFILE(NAME, FD, FILE, FLAGS, CHAIN) \
- struct _IO_fake_stdiobuf NAME = \
- {{{ _IO_MAGIC+_IO_LINKED+_IO_IS_FILEBUF+_IO_UNBUFFERED+FLAGS, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, CHAIN, FD}, \
- &stdiobuf_vtable}, FILE}
-#endif
-
-DEF_STDIOFILE(_IO_stdin_buf, 0, stdin, _IO_NO_WRITES, &_IO_stderr_.file);
-DEF_STDIOFILE(_IO_stdout_buf, 1, stdout, _IO_NO_READS, &_IO_stdin_buf.s.file);
-DEF_STDIOFILE(_IO_stderr_buf, 2, stderr, _IO_NO_READS, &_IO_stdout_buf.s.file);
-
-_IO_FILE *_IO_list_all = &_IO_stderr_buf.s.file;
-#endif /* !_STDIO_USES_IOSTREAM */
diff --git a/contrib/libio/stdstreams.cc b/contrib/libio/stdstreams.cc
deleted file mode 100644
index 7a74eaaa4433..000000000000
--- a/contrib/libio/stdstreams.cc
+++ /dev/null
@@ -1,153 +0,0 @@
-/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-/* Written by Per Bothner (bothner@cygnus.com). */
-
-#include "libioP.h"
-#include "streambuf.h"
-#include <stdio.h>
-
-// The ANSI draft requires that operations on cin/cout/cerr can be
-// mixed with operations on stdin/stdout/stderr on a character by
-// character basis. This normally requires that the streambuf's
-// used by cin/cout/cerr be stdiostreams. However, if the stdio
-// implementation is the one that is built using this library,
-// then we don't need to, since in that case stdin/stdout/stderr
-// are identical to _IO_stdin/_IO_stdout/_IO_stderr.
-
-#include <libio.h>
-
-#ifdef _STDIO_USES_IOSTREAM
-#define CIN_SBUF _IO_stdin_
-#define COUT_SBUF _IO_stdout_
-#define CERR_SBUF _IO_stderr_
-static int use_stdiobuf = 0;
-#else
-#define CIN_SBUF _IO_stdin_buf
-#define COUT_SBUF _IO_stdout_buf
-#define CERR_SBUF _IO_stderr_buf
-static int use_stdiobuf = 1;
-#endif
-
-#define cin CIN
-#define cout COUT
-#define cerr CERR
-#define clog CLOG
-#include "iostream.h"
-#undef cin
-#undef cout
-#undef cerr
-#undef clog
-
-#ifdef __GNUG__
-#define PAD 0 /* g++ allows 0-length arrays. */
-#else
-#define PAD 1
-#endif
-struct _fake_istream {
- struct myfields {
-#ifdef __GNUC__
- _ios_fields *vb; /* pointer to virtual base class ios */
- _IO_ssize_t _gcount;
-#else
- /* This is supposedly correct for cfront. */
- _IO_ssize_t _gcount;
- void *vptr;
- _ios_fields *vb; /* pointer to virtual base class ios */
-#endif
- } mine;
- _ios_fields base;
- char filler[sizeof(struct istream)-sizeof(struct _ios_fields)+PAD];
-};
-struct _fake_ostream {
- struct myfields {
-#ifndef __GNUC__
- void *vptr;
-#endif
- _ios_fields *vb; /* pointer to virtual base class ios */
- } mine;
- _ios_fields base;
- char filler[sizeof(struct ostream)-sizeof(struct _ios_fields)+PAD];
-};
-
-
-#ifdef _IO_NEW_STREAMS
-#define STD_STR(SBUF, TIE, EXTRA_FLAGS) \
- (streambuf*)&SBUF, TIE, 0, ios::skipws|ios::dec|EXTRA_FLAGS, ' ',0,0,6
-#else
-#define STD_STR(SBUF, TIE, EXTRA_FLAGS) \
- (streambuf*)&SBUF, TIE, 0, ios::dont_close|ios::dec|ios::skipws|EXTRA_FLAGS, ' ',0,0,6
-#endif
-
-#ifdef __GNUC__
-#define OSTREAM_DEF(NAME, SBUF, TIE, EXTRA_FLAGS, ASM) \
- _fake_ostream NAME ASM = { {&NAME.base}, {STD_STR(SBUF, TIE, EXTRA_FLAGS) }};
-#define ISTREAM_DEF(NAME, SBUF, TIE, EXTRA_FLAGS) \
- _fake_istream NAME = { {&NAME.base}, {STD_STR(SBUF, TIE, EXTRA_FLAGS) }};
-#else
-#define OSTREAM_DEF(NAME, SBUF, TIE, EXTRA_FLAGS) \
- _fake_ostream NAME = { {0, &NAME.base}, {STD_STR(SBUF, TIE, EXTRA_FLAGS) }};
-#define ISTREAM_DEF(NAME, SBUF, TIE, EXTRA_FLAGS) \
- _fake_istream NAME = {{0, 0, &NAME.base}, {STD_STR(SBUF, TIE, EXTRA_FLAGS)}};
-#endif
-
-OSTREAM_DEF(cout, COUT_SBUF, NULL, 0, )
-OSTREAM_DEF(cerr, CERR_SBUF,(ostream*)&cout, ios::unitbuf, )
-ISTREAM_DEF(cin, CIN_SBUF, (ostream*)&cout, 0)
-
-/* Only for (partial) compatibility with AT&T's library. */
-#if _G_CLOG_CONFLICT
-OSTREAM_DEF(clog, CERR_SBUF, (ostream*)&cout, 0, __asm__ ("__IO_clog"))
-#else
-OSTREAM_DEF(clog, CERR_SBUF, (ostream*)&cout, 0, )
-#endif
-
-// Switches between using _IO_std{in,out,err} and __std{in,out,err}_buf
-// for standard streams. This does not normally need to be called
-// explicitly, but is provided for AT&T compatibility.
-
-int ios::sync_with_stdio(int new_state)
-{
-#ifdef _STDIO_USES_IOSTREAM
- // It is always synced.
- return 0;
-#else
- if (new_state == use_stdiobuf) // The usual case now.
- return use_stdiobuf;
- if (new_state) {
- cin.base._strbuf = (streambuf*)&_IO_stdin_buf;
- cout.base._strbuf = (streambuf*)&_IO_stdout_buf;
- cerr.base._strbuf = (streambuf*)&_IO_stderr_buf;
- clog.base._strbuf = (streambuf*)&_IO_stderr_buf;
- } else {
- cin.base._strbuf = (streambuf*)_IO_stdin;
- cout.base._strbuf = (streambuf*)_IO_stdout;
- cerr.base._strbuf = (streambuf*)_IO_stderr;
- clog.base._strbuf = (streambuf*)_IO_stderr;
- }
- int old_state = use_stdiobuf;
- use_stdiobuf = new_state;
- return old_state;
-#endif
-}
diff --git a/contrib/libio/stream.cc b/contrib/libio/stream.cc
deleted file mode 100644
index 3440a0c9bdb4..000000000000
--- a/contrib/libio/stream.cc
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include <stdarg.h>
-#include <string.h>
-#include "libioP.h"
-#include "stream.h"
-#include "strstream.h"
-
-static char Buffer[_IO_BUFSIZ];
-#define EndBuffer (Buffer+_IO_BUFSIZ)
-static char* next_chunk = Buffer; // Start of available part of Buffer.
-
-char* form(const char* format, ...)
-{
- int space_left = EndBuffer - next_chunk;
- // If less that 25% of the space is available start over.
- if (space_left < (_IO_BUFSIZ>>2))
- next_chunk = Buffer;
- char* buf = next_chunk;
-
- strstreambuf stream(buf, EndBuffer-buf-1, buf);
- va_list ap;
- va_start(ap, format);
- int count = stream.vform(format, ap);
- va_end(ap);
- stream.sputc(0);
- next_chunk = buf + stream.pcount();
- return buf;
-}
-
-#define u_long unsigned long
-
-static char* itoa(unsigned long i, int size, int neg, int base)
-{
- // Conservative estimate: If base==2, might need 8 characters
- // for each input byte, but normally 3 is plenty.
- int needed = size ? size
- : (base >= 8 ? 3 : 8) * sizeof(unsigned long) + 2;
- int space_left = EndBuffer - next_chunk;
- if (space_left <= needed)
- next_chunk = Buffer; // start over.
-
- char* buf = next_chunk;
-
- register char* ptr = buf+needed+1;
- next_chunk = ptr;
-
- if (needed < (2+neg) || ptr > EndBuffer)
- return NULL;
- *--ptr = 0;
-
- if (i == 0)
- *--ptr = '0';
- while (i != 0 && ptr > buf) {
- int ch = i % base;
- i = i / base;
- if (ch >= 10)
- ch += 'a' - 10;
- else
- ch += '0';
- *--ptr = ch;
- }
- if (neg)
- *--ptr = '-';
- if (size == 0)
- return ptr;
- while (ptr > buf)
- *--ptr = ' ';
- return buf;
-}
-
-char* dec(long i, int len /* = 0 */)
-{
- if (i >= 0) return itoa((unsigned long)i, len, 0, 10);
- else return itoa((unsigned long)(-i), len, 1, 10);
-}
-char* dec(int i, int len /* = 0 */)
-{
- if (i >= 0) return itoa((unsigned long)i, len, 0, 10);
- else return itoa((unsigned long)(-i), len, 1, 10);
-}
-char* dec(unsigned long i, int len /* = 0 */)
-{
- return itoa(i, len, 0, 10);
-}
-char* dec(unsigned int i, int len /* = 0 */)
-{
- return itoa(i, len, 0, 10);
-}
-
-char* hex(long i, int len /* = 0 */)
-{
- return itoa((unsigned long)i, len, 0, 16);
-}
-char* hex(int i, int len /* = 0 */)
-{
- return itoa((unsigned long)i, len, 0, 16);
-}
-char* hex(unsigned long i, int len /* = 0 */)
-{
- return itoa(i, len, 0, 16);
-}
-char* hex(unsigned int i, int len /* = 0 */)
-{
- return itoa(i, len, 0, 16);
-}
-
-char* oct(long i, int len /* = 0 */)
-{
- return itoa((unsigned long)i, len, 0, 8);
-}
-char* oct(int i, int len /* = 0 */)
-{
- return itoa((unsigned long)i, len, 0, 8);
-}
-char* oct(unsigned long i, int len /* = 0 */)
-{
- return itoa(i, len, 0, 8);
-}
-char* oct(unsigned int i, int len /* = 0 */)
-{
- return itoa(i, len, 0, 8);
-}
-
-static char *str(const char* s, int len, int width)
-{
- if (width < len)
- width = len;
- int space_left = EndBuffer - next_chunk;
- if (space_left <= width + 1)
- next_chunk = Buffer; // start over.
- char* buf = next_chunk;
- memset (buf, ' ', width - len);
- memcpy (buf + width - len, s, len);
- buf[width] = 0;
- return buf;
-}
-
-char* str(const char* s, int width)
-{
- return str (s, strlen (s), width);
-}
-
-char* chr(char ch, int width)
-{
- char c = ch;
- return str (&c, 1, width);
-}
diff --git a/contrib/libio/stream.h b/contrib/libio/stream.h
deleted file mode 100644
index 90f8c1f27819..000000000000
--- a/contrib/libio/stream.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
-Copyright (C) 1993, 1999 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#ifndef _COMPAT_STREAM_H
-#define _COMPAT_STREAM_H
-
-// Compatibility with old library.
-// DO NOT USE THESE FUNCTIONS IN NEW CODE!
-// They are obsolete, non-standard, and non-reentrant.
-
-#define _STREAM_COMPAT
-#include <iostream.h>
-
-extern "C++" {
-extern char* form(const char*, ...);
-
-extern char* dec(long, int=0);
-extern char* dec(int, int=0);
-extern char* dec(unsigned long, int=0);
-extern char* dec(unsigned int, int=0);
-
-extern char* hex(long, int=0);
-extern char* hex(int, int=0);
-extern char* hex(unsigned long, int=0);
-extern char* hex(unsigned int, int=0);
-
-extern char* oct(long, int=0);
-extern char* oct(int, int=0);
-extern char* oct(unsigned long, int=0);
-extern char* oct(unsigned int, int=0);
-
-char* chr(char ch, int width = 0);
-char* str(const char* s, int width = 0);
-
-inline istream& WS(istream& __str) { return ws(__str); }
-} // extern "C++"
-
-#endif /* !_COMPAT_STREAM_H */
diff --git a/contrib/libio/streambuf.cc b/contrib/libio/streambuf.cc
deleted file mode 100644
index 057d1e6e4ce9..000000000000
--- a/contrib/libio/streambuf.cc
+++ /dev/null
@@ -1,364 +0,0 @@
-/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1991, 1992, 1993, 1995 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-/* Written by Per Bothner (bothner@cygnus.com). */
-
-#define _STREAM_COMPAT
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include "iostreamP.h"
-#include <string.h>
-#include <stdarg.h>
-#include <errno.h>
-#ifndef errno
-extern int errno;
-#endif
-
-void streambuf::_un_link() { _IO_un_link(this); }
-
-void streambuf::_link_in() { _IO_link_in(this); }
-
-int streambuf::switch_to_get_mode()
-{ return _IO_switch_to_get_mode(this); }
-
-void streambuf::free_backup_area()
-{ _IO_free_backup_area(this); }
-
-#if 0
-int streambuf::switch_to_put_mode()
-{ return _IO_:switch_to_put_mode(this); }
-#endif
-
-int __overflow(streambuf* sb, int c)
-{
- return sb->overflow(c);
-}
-
-int streambuf::underflow()
-{ return EOF; }
-
-int streambuf::uflow()
-{ return _IO_default_uflow (this); }
-
-int streambuf::overflow(int /* = EOF */)
-{ return EOF; }
-
-streamsize streambuf::xsputn(register const char* s, streamsize n)
-{ return _IO_default_xsputn(this, s, n); }
-
-streamsize streambuf::xsgetn(char* s, streamsize n)
-{ return _IO_default_xsgetn(this, s, n); }
-
-int streambuf::ignore(int n)
-{
- register int more = n;
- for (;;) {
- int count = _IO_read_end - _IO_read_ptr; // Data available.
- if (count > 0) {
- if (count > more)
- count = more;
- _IO_read_ptr += count;
- more -= count;
- }
- if (more == 0 || __underflow(this) == EOF)
- break;
- }
- return n - more;
-}
-
-int streambuf::sync()
-{
- return 0;
-}
-
-int streambuf::pbackfail(int c)
-{
- return _IO_default_pbackfail(this, c);
-}
-
-streambuf* streambuf::setbuf(char* p, int len)
-{
- if (sync() == EOF)
- return NULL;
- if (p == NULL || len == 0) {
- unbuffered(1);
- setb(_shortbuf, _shortbuf+1, 0);
- }
- else {
- unbuffered(0);
- setb(p, p+len, 0);
- }
- setp(0, 0);
- setg(0, 0, 0);
- return this;
-}
-
-streampos streambuf::seekpos(streampos pos, int mode)
-{
- return seekoff(pos, ios::beg, mode);
-}
-
-streampos streambuf::sseekpos(streampos pos, int mode)
-{
- return _IO_seekpos (this, pos, mode);
-}
-
-void streambuf::setb(char* b, char* eb, int a)
-{ _IO_setb(this, b, eb, a); }
-
-int streambuf::doallocate() { return _IO_default_doallocate(this); }
-
-void streambuf::doallocbuf() { _IO_doallocbuf(this); }
-
-#if !_IO_UNIFIED_JUMPTABLES
-/* The following are jump table entries that just call the virtual method */
-
-static int _IO_sb_overflow(_IO_FILE *fp, int c)
-{ return ((streambuf*)fp)->overflow(c); }
-static int _IO_sb_underflow(_IO_FILE *fp)
-{ return ((streambuf*)fp)->underflow(); }
-static _IO_size_t _IO_sb_xsputn(_IO_FILE *fp, const void *s, _IO_size_t n)
-{ return ((streambuf*)fp)->xsputn((const char*)s, n); }
-static _IO_size_t _IO_sb_xsgetn(_IO_FILE *fp, void *s, _IO_size_t n)
-{ return ((streambuf*)fp)->xsgetn((char*)s, n); }
-static int _IO_sb_close(_IO_FILE *fp)
-{ return ((streambuf*)fp)->sys_close(); }
-static int _IO_sb_stat(_IO_FILE *fp, void *b)
-{ return ((streambuf*)fp)->sys_stat(b); }
-static int _IO_sb_doallocate(_IO_FILE *fp)
-{ return ((streambuf*)fp)->doallocate(); }
-
-static _IO_pos_t _IO_sb_seekoff(_IO_FILE *fp, _IO_off_t pos, int dir, int mode)
-{
- return ((streambuf*)fp)->seekoff(pos, (ios::seek_dir)dir, mode);
-}
-
-static _IO_pos_t _IO_sb_seekpos(_IO_FILE *fp, _IO_pos_t pos, int mode)
-{
- return ((streambuf*)fp)->seekpos(pos, mode);
-}
-
-static int _IO_sb_pbackfail(_IO_FILE *fp, int ch)
-{ return ((streambuf*)fp)->pbackfail(ch); }
-static void _IO_sb_finish(_IO_FILE *fp, int)
-{ ((streambuf*)fp)->~streambuf(); }
-static _IO_ssize_t _IO_sb_read(_IO_FILE *fp, void *buf, _IO_ssize_t n)
-{ return ((streambuf*)fp)->sys_read((char*)buf, n); }
-static _IO_ssize_t _IO_sb_write(_IO_FILE *fp, const void *buf, _IO_ssize_t n)
-{ return ((streambuf*)fp)->sys_write((const char*)buf, n); }
-static int _IO_sb_sync(_IO_FILE *fp)
-{ return ((streambuf*)fp)->sync(); }
-static _IO_pos_t _IO_sb_seek(_IO_FILE *fp, _IO_off_t off, int dir)
-{ return ((streambuf*)fp)->sys_seek(off, (_seek_dir)dir); }
-static _IO_FILE* _IO_sb_setbuf(_IO_FILE *fp, char *buf, _IO_ssize_t n)
-{ return ((streambuf*)fp)->setbuf(buf, n); }
-
-/* This callbacks in this jumptable just call the corresponding
- virtual function, so that C functions can access (potentially user-defined)
- streambuf-derived objects.
- Contrast the builtinbuf class, which does the converse: Allow
- C++ virtual calls to be used on _IO_FILE objects that are builtin
- (or defined by C code). */
-
-
-struct _IO_jump_t _IO_streambuf_jumps = {
- JUMP_INIT_DUMMY,
- JUMP_INIT(finish, _IO_sb_finish),
- JUMP_INIT(overflow, _IO_sb_overflow),
- JUMP_INIT(underflow, _IO_sb_underflow),
- JUMP_INIT(uflow, _IO_default_uflow),
- JUMP_INIT(pbackfail, _IO_sb_pbackfail),
- JUMP_INIT(xsputn, _IO_sb_xsputn),
- JUMP_INIT(xsgetn, _IO_sb_xsgetn),
- JUMP_INIT(seekoff, _IO_sb_seekoff),
- JUMP_INIT(seekpos, _IO_sb_seekpos),
- JUMP_INIT(setbuf, _IO_sb_setbuf),
- JUMP_INIT(sync, _IO_sb_sync),
- JUMP_INIT(doallocate, _IO_sb_doallocate),
- JUMP_INIT(read, _IO_sb_read),
- JUMP_INIT(write, _IO_sb_write),
- JUMP_INIT(seek, _IO_sb_seek),
- JUMP_INIT(close, _IO_sb_close),
- JUMP_INIT(stat, _IO_sb_stat)
-};
-#endif
-
-streambuf::streambuf(int flags)
-{
-#ifdef _IO_MTSAFE_IO
- _lock = new _IO_lock_t;
-#endif
- _IO_init(this, flags);
-#if !_IO_UNIFIED_JUMPTABLES
- _jumps = &_IO_streambuf_jumps;
-#endif
-}
-
-streambuf::~streambuf()
-{
- _IO_default_finish(this,0);
-#ifdef _IO_MTSAFE_IO
- if (this != _IO_stdin && this != _IO_stdout && this != _IO_stderr)
- delete _lock;
-#endif
-}
-
-streampos
-streambuf::seekoff(streamoff, _seek_dir, int /*=ios::in|ios::out*/)
-{
- return EOF;
-}
-
-streampos
-streambuf::sseekoff(streamoff o , _seek_dir d, int m /*=ios::in|ios::out*/)
-{
- return _IO_seekoff (this, o, d, m);
-}
-
-int streambuf::sputbackc(char c)
-{
- return _IO_sputbackc(this, c);
-}
-
-int streambuf::sungetc()
-{
- return _IO_sungetc(this);
-}
-
-#if 0 /* Work in progress */
-void streambuf::collumn(int c)
-{
- if (c == -1)
- _collumn = -1;
- else
- _collumn = c - (_IO_write_ptr - _IO_write_base);
-}
-#endif
-
-
-int streambuf::get_column()
-{
- if (_cur_column)
- return _IO_adjust_column(_cur_column - 1, pbase(), pptr() - pbase());
- return -1;
-}
-
-int streambuf::set_column(int i)
-{
- _cur_column = i+1;
- return 0;
-}
-
-int streambuf::flush_all() { return _IO_flush_all (); }
-
-void streambuf::flush_all_linebuffered()
-{ _IO_flush_all_linebuffered(); }
-
-int streambuf::sys_stat(void *)
-{
-#ifdef EIO
- errno = EIO;
-#endif
- return -1;
-}
-
-streamsize streambuf::sys_read(char* /*buf*/, streamsize /*size*/)
-{
- return 0;
-}
-
-streamsize streambuf::sys_write(const char* /*buf*/, streamsize /*size*/)
-{
- return 0;
-}
-
-streampos streambuf::sys_seek(streamoff, _seek_dir)
-{
- return EOF;
-}
-
-int streambuf::sys_close() { return 0; /* Suceess; do nothing */ }
-
-#if _G_IO_IO_FILE_VERSION == 0x20001
-int streambuf::showmanyc()
-{
- return -1;
-}
-
-void streambuf::imbue(void *)
-{
-}
-#endif
-
-streammarker::streammarker(streambuf *sb)
-{
- _IO_init_marker(this, sb);
-}
-
-streammarker::~streammarker()
-{
- _IO_remove_marker(this);
-}
-
-#define BAD_DELTA EOF
-
-int streammarker::delta(streammarker& other_mark)
-{
- return _IO_marker_difference(this, &other_mark);
-}
-
-int streammarker::delta()
-{
- return _IO_marker_delta(this);
-}
-
-int streambuf::seekmark(streammarker& mark, int delta /* = 0 */)
-{
- return _IO_seekmark(this, &mark, delta);
-}
-
-void streambuf::unsave_markers()
-{
- _IO_unsave_markers(this);
-}
-
-int ios::readable() { return !(rdbuf()->_flags & _IO_NO_READS); }
-int ios::writable() { return !(rdbuf()->_flags & _IO_NO_WRITES); }
-int ios::is_open() { return rdbuf()
- && (rdbuf()->_flags & _IO_NO_READS+_IO_NO_WRITES)
- != _IO_NO_READS+_IO_NO_WRITES; }
-
-#if defined(linux)
-#define IO_CLEANUP
-#endif
-
-#ifdef IO_CLEANUP
- IO_CLEANUP
-#else
-struct __io_defs {
- ~__io_defs() { _IO_cleanup (); }
-};
-__io_defs io_defs__;
-#endif
diff --git a/contrib/libio/streambuf.h b/contrib/libio/streambuf.h
deleted file mode 100644
index 193c4993827f..000000000000
--- a/contrib/libio/streambuf.h
+++ /dev/null
@@ -1,490 +0,0 @@
-/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#ifndef _STREAMBUF_H
-#define _STREAMBUF_H
-#ifdef __GNUG__
-#pragma interface
-#endif
-
-/* #define _G_IO_THROW */ /* Not implemented: ios::failure */
-
-#define _IO_NEW_STREAMS // new optimizated stream representation
-
-extern "C" {
-#include <libio.h>
-}
-//#include <_G_config.h>
-#ifdef _G_NEED_STDARG_H
-#include <stdarg.h>
-#endif
-#ifndef _IO_va_list
-#define _IO_va_list char *
-#endif
-
-#ifndef EOF
-#define EOF (-1)
-#endif
-#ifndef NULL
-#ifdef __GNUG__
-#define NULL (__null)
-#else
-#define NULL (0)
-#endif
-#endif
-
-#ifndef _IO_wchar_t
-#if _G_IO_IO_FILE_VERSION == 0x20001
-#define _IO_wchar_t _G_wchar_t
-#else
-#define _IO_wchar_t short
-#endif
-#endif
-
-extern "C++" {
-class istream; /* Work-around for a g++ name mangling bug. Fixed in 2.6. */
-class ostream; class streambuf;
-
-// In case some header files defines these as macros.
-#undef open
-#undef close
-
-#if defined(_G_IO_IO_FILE_VERSION) && _G_IO_IO_FILE_VERSION == 0x20001
-typedef _IO_off64_t streamoff;
-typedef _IO_off64_t streampos;
-#else
-typedef _IO_off_t streamoff;
-typedef _IO_off_t streampos;
-#endif
-typedef _IO_ssize_t streamsize;
-
-typedef unsigned long __fmtflags;
-typedef unsigned char __iostate;
-
-struct _ios_fields
-{ // The data members of an ios.
- streambuf *_strbuf;
- ostream* _tie;
- int _width;
- __fmtflags _flags;
- _IO_wchar_t _fill;
- __iostate _state;
- __iostate _exceptions;
- int _precision;
-
- void *_arrays; /* Support for ios::iword and ios::pword. */
-};
-
-#define _IOS_GOOD 0
-#define _IOS_EOF 1
-#define _IOS_FAIL 2
-#define _IOS_BAD 4
-
-#define _IO_INPUT 1
-#define _IO_OUTPUT 2
-#define _IO_ATEND 4
-#define _IO_APPEND 8
-#define _IO_TRUNC 16
-#define _IO_NOCREATE 32
-#define _IO_NOREPLACE 64
-#define _IO_BIN 128
-
-#ifdef _STREAM_COMPAT
-enum state_value {
- _good = _IOS_GOOD,
- _eof = _IOS_EOF,
- _fail = _IOS_FAIL,
- _bad = _IOS_BAD };
-enum open_mode {
- input = _IO_INPUT,
- output = _IO_OUTPUT,
- atend = _IO_ATEND,
- append = _IO_APPEND };
-#endif
-
-class ios : public _ios_fields {
- ios& operator=(ios&); /* Not allowed! */
- ios (const ios&); /* Not allowed! */
- public:
- typedef __fmtflags fmtflags;
- typedef int iostate;
- typedef int openmode;
- typedef _IO_ssize_t streamsize;
- enum io_state {
- goodbit = _IOS_GOOD,
- eofbit = _IOS_EOF,
- failbit = _IOS_FAIL,
- badbit = _IOS_BAD };
- enum open_mode {
- in = _IO_INPUT,
- out = _IO_OUTPUT,
- ate = _IO_ATEND,
- app = _IO_APPEND,
- trunc = _IO_TRUNC,
- nocreate = _IO_NOCREATE,
- noreplace = _IO_NOREPLACE,
- bin = _IOS_BIN, // Deprecated - ANSI uses ios::binary.
- binary = _IOS_BIN };
- enum seek_dir { beg, cur, end};
- typedef enum seek_dir seekdir;
- // NOTE: If adding flags here, before to update ios::bitalloc().
- enum { skipws=_IO_SKIPWS,
- left=_IO_LEFT, right=_IO_RIGHT, internal=_IO_INTERNAL,
- dec=_IO_DEC, oct=_IO_OCT, hex=_IO_HEX,
- showbase=_IO_SHOWBASE, showpoint=_IO_SHOWPOINT,
- uppercase=_IO_UPPERCASE, showpos=_IO_SHOWPOS,
- scientific=_IO_SCIENTIFIC, fixed=_IO_FIXED,
- unitbuf=_IO_UNITBUF, stdio=_IO_STDIO
-#ifndef _IO_NEW_STREAMS
- , dont_close=_IO_DONT_CLOSE // Don't delete streambuf on stream destruction
-#endif
- };
- enum { // Masks.
- basefield=dec+oct+hex,
- floatfield = scientific+fixed,
- adjustfield = left+right+internal
- };
-
-#ifdef _IO_THROW
- class failure : public xmsg {
- ios* _stream;
- public:
- failure(ios* stream) { _stream = stream; }
- failure(string cause, ios* stream) { _stream = stream; }
- ios* rdios() const { return _stream; }
- };
-#endif
-
- ostream* tie() const { return _tie; }
- ostream* tie(ostream* val) { ostream* save=_tie; _tie=val; return save; }
-
- // Methods to change the format state.
- _IO_wchar_t fill() const { return _fill; }
- _IO_wchar_t fill(_IO_wchar_t newf)
- {_IO_wchar_t oldf = _fill; _fill = newf; return oldf;}
- fmtflags flags() const { return _flags; }
- fmtflags flags(fmtflags new_val) {
- fmtflags old_val = _flags; _flags = new_val; return old_val; }
- int precision() const { return _precision; }
- int precision(int newp) {
- unsigned short oldp = _precision; _precision = (unsigned short)newp;
- return oldp; }
- fmtflags setf(fmtflags val) {
- fmtflags oldbits = _flags;
- _flags |= val; return oldbits; }
- fmtflags setf(fmtflags val, fmtflags mask) {
- fmtflags oldbits = _flags;
- _flags = (_flags & ~mask) | (val & mask); return oldbits; }
- fmtflags unsetf(fmtflags mask) {
- fmtflags oldbits = _flags;
- _flags &= ~mask; return oldbits; }
- int width() const { return _width; }
- int width(int val) { int save = _width; _width = val; return save; }
-
-#ifdef _IO_THROW
- void _throw_failure() const { throw new ios::failure(this); }
-#else
- void _throw_failure() const { }
-#endif
- void clear(iostate state = 0) {
- _state = _strbuf ? state : state|badbit;
- if (_state & _exceptions) _throw_failure(); }
- void set(iostate flag) { _state |= flag;
- if (_state & _exceptions) _throw_failure(); }
- void setstate(iostate flag) { _state |= flag; // ANSI
- if (_state & _exceptions) _throw_failure(); }
- int good() const { return _state == 0; }
- int eof() const { return _state & ios::eofbit; }
- int fail() const { return _state & (ios::badbit|ios::failbit); }
- int bad() const { return _state & ios::badbit; }
- iostate rdstate() const { return _state; }
- operator void*() const { return fail() ? (void*)0 : (void*)(-1); }
- int operator!() const { return fail(); }
- iostate exceptions() const { return _exceptions; }
- void exceptions(iostate enable) {
- _exceptions = enable;
- if (_state & _exceptions) _throw_failure(); }
-
- streambuf* rdbuf() const { return _strbuf; }
- streambuf* rdbuf(streambuf *_s) {
- streambuf *_old = _strbuf; _strbuf = _s; clear (); return _old; }
-
- static int sync_with_stdio(int on);
- static void sync_with_stdio() { sync_with_stdio(1); }
- static fmtflags bitalloc();
- static int xalloc();
- void*& pword(int);
- void* pword(int) const;
- long& iword(int);
- long iword(int) const;
-
-#ifdef _STREAM_COMPAT
- void unset(state_value flag) { _state &= ~flag; }
- void close();
- int is_open();
- int readable();
- int writable();
-#endif
-
- // Used to initialize standard streams. Not needed in this implementation.
- class Init {
- public:
- Init () { }
- };
-
- protected:
- inline ios(streambuf* sb = 0, ostream* tie_to = 0);
- inline virtual ~ios();
- inline void init(streambuf* sb, ostream* tie = 0);
-};
-
-#if __GNUG__==1
-typedef int _seek_dir;
-#else
-typedef ios::seek_dir _seek_dir;
-#endif
-
-// Magic numbers and bits for the _flags field.
-// The magic numbers use the high-order bits of _flags;
-// the remaining bits are abailable for variable flags.
-// Note: The magic numbers must all be negative if stdio
-// emulation is desired.
-
-// A streammarker remembers a position in a buffer.
-// You are guaranteed to be able to seek back to it if it is saving().
-class streammarker : private _IO_marker {
- friend class streambuf;
- void set_offset(int offset) { _pos = offset; }
- public:
- streammarker(streambuf *sb);
- ~streammarker();
- int saving() { return 1; }
- int delta(streammarker&);
- int delta();
-};
-
-struct streambuf : public _IO_FILE { // protected??
- friend class ios;
- friend class istream;
- friend class ostream;
- friend class streammarker;
- const void *&_vtable() { return *(const void**)((_IO_FILE*)this + 1); }
- protected:
- static streambuf* _list_all; /* List of open streambufs. */
- _IO_FILE*& xchain() { return _chain; }
- void _un_link();
- void _link_in();
- char* gptr() const
- { return _IO_file_flags & _IO_IN_BACKUP ? _IO_save_base : _IO_read_ptr; }
- char* pptr() const { return _IO_write_ptr; }
- char* egptr() const
- { return _IO_file_flags & _IO_IN_BACKUP ? _IO_save_end : _IO_read_end; }
- char* epptr() const { return _IO_write_end; }
- char* pbase() const { return _IO_write_base; }
- char* eback() const
- { return _IO_file_flags & _IO_IN_BACKUP ? _IO_save_base : _IO_read_base;}
- char* base() const { return _IO_buf_base; }
- char* ebuf() const { return _IO_buf_end; }
- int blen() const { return _IO_buf_end - _IO_buf_base; }
- void xput_char(char c) { *_IO_write_ptr++ = c; }
- int xflags() { return _IO_file_flags; }
- int xflags(int f) {int fl = _IO_file_flags; _IO_file_flags = f; return fl;}
- void xsetflags(int f) { _IO_file_flags |= f; }
- void xsetflags(int f, int mask)
- { _IO_file_flags = (_IO_file_flags & ~mask) | (f & mask); }
- void gbump(int n)
- { _IO_file_flags & _IO_IN_BACKUP ? (_IO_save_base+=n):(_IO_read_ptr+=n);}
- void pbump(int n) { _IO_write_ptr += n; }
- void setb(char* b, char* eb, int a=0);
- void setp(char* p, char* ep)
- { _IO_write_base=_IO_write_ptr=p; _IO_write_end=ep; }
- void setg(char* eb, char* g, char *eg) {
- if (_IO_file_flags & _IO_IN_BACKUP) _IO_free_backup_area(this);
- _IO_read_base = eb; _IO_read_ptr = g; _IO_read_end = eg; }
- char *shortbuf() { return _shortbuf; }
-
- int in_backup() { return _flags & _IO_IN_BACKUP; }
- // The start of the main get area: FIXME: wrong for write-mode filebuf?
- char *Gbase() { return in_backup() ? _IO_save_base : _IO_read_base; }
- // The end of the main get area:
- char *eGptr() { return in_backup() ? _IO_save_end : _IO_read_end; }
- // The start of the backup area:
- char *Bbase() { return in_backup() ? _IO_read_base : _IO_save_base; }
- char *Bptr() { return _IO_backup_base; }
- // The end of the backup area:
- char *eBptr() { return in_backup() ? _IO_read_end : _IO_save_end; }
- char *Nbase() { return _IO_save_base; }
- char *eNptr() { return _IO_save_end; }
- int have_backup() { return _IO_save_base != NULL; }
- int have_markers() { return _markers != NULL; }
- void free_backup_area();
- void unsave_markers(); // Make all streammarkers !saving().
- int put_mode() { return _flags & _IO_CURRENTLY_PUTTING; }
- int switch_to_get_mode();
-
- streambuf(int flags=0);
- public:
- static int flush_all();
- static void flush_all_linebuffered(); // Flush all line buffered files.
- virtual ~streambuf();
- virtual int overflow(int c = EOF); // Leave public for now
- virtual int underflow(); // Leave public for now
- virtual int uflow(); // Leave public for now
- virtual int pbackfail(int c);
-// virtual int showmany ();
- virtual streamsize xsputn(const char* s, streamsize n);
- virtual streamsize xsgetn(char* s, streamsize n);
- virtual streampos seekoff(streamoff, _seek_dir, int mode=ios::in|ios::out);
- virtual streampos seekpos(streampos pos, int mode = ios::in|ios::out);
-
- streampos pubseekoff(streamoff o, _seek_dir d, int mode=ios::in|ios::out)
- { return _IO_seekoff (this, o, d, mode); }
- streampos pubseekpos(streampos pos, int mode = ios::in|ios::out)
- { return _IO_seekpos (this, pos, mode); }
- streampos sseekoff(streamoff, _seek_dir, int mode=ios::in|ios::out);
- streampos sseekpos(streampos pos, int mode = ios::in|ios::out);
- virtual streambuf* setbuf(char* p, int len);
- virtual int sync();
- virtual int doallocate();
-
- int seekmark(streammarker& mark, int delta = 0);
- int sputbackc(char c);
- int sungetc();
- int unbuffered() { return _flags & _IO_UNBUFFERED ? 1 : 0; }
- int linebuffered() { return _flags & _IO_LINE_BUF ? 1 : 0; }
- void unbuffered(int i)
- { if (i) _flags |= _IO_UNBUFFERED; else _flags &= ~_IO_UNBUFFERED; }
- void linebuffered(int i)
- { if (i) _flags |= _IO_LINE_BUF; else _flags &= ~_IO_LINE_BUF; }
- int allocate() { // For AT&T compatibility
- if (base() || unbuffered()) return 0;
- else return doallocate(); }
- // Allocate a buffer if needed; use _shortbuf if appropriate.
- void allocbuf() { if (base() == NULL) doallocbuf(); }
- void doallocbuf();
- int in_avail() { return _IO_read_end - _IO_read_ptr; }
- int out_waiting() { return _IO_write_ptr - _IO_write_base; }
- streamsize sputn(const char* s, streamsize n) { return xsputn(s, n); }
- streamsize padn(char pad, streamsize n) { return _IO_padn(this, pad, n); }
- streamsize sgetn(char* s, streamsize n) { return _IO_sgetn(this, s, n); }
- int ignore(int);
- int get_column();
- int set_column(int);
- long sgetline(char* buf, _IO_size_t n, char delim, int putback_delim);
- int sputc(int c) { return _IO_putc(c, this); }
- int sbumpc() { return _IO_getc(this); }
- int sgetc() { return _IO_peekc(this); }
- int snextc() {
- if (_IO_read_ptr >= _IO_read_end && __underflow(this) == EOF)
- return EOF;
- else return _IO_read_ptr++, sgetc(); }
- void stossc() { if (_IO_read_ptr < _IO_read_end) _IO_read_ptr++; }
- int vscan(char const *fmt0, _IO_va_list ap, ios* stream = NULL);
- int scan(char const *fmt0 ...);
- int vform(char const *fmt0, _IO_va_list ap);
- int form(char const *fmt0 ...);
-#if 0 /* Work in progress */
- int column(); // Current column number (of put pointer). -1 is unknown.
- void column(int c); // Set column number of put pointer to c.
-#endif
- virtual streamsize sys_read(char* buf, streamsize size);
- virtual streamsize sys_write(const char*, streamsize);
- virtual streampos sys_seek(streamoff, _seek_dir);
- virtual int sys_close();
- virtual int sys_stat(void*); // Actually, a (struct stat*)
-#if _G_IO_IO_FILE_VERSION == 0x20001
- virtual int showmanyc();
- virtual void imbue(void *);
-#endif
-};
-
-// A backupbuf is a streambuf with full backup and savepoints on reading.
-// All standard streambufs in the GNU iostream library are backupbufs.
-
-class filebuf : public streambuf {
- protected:
- void init();
- public:
- static const int openprot; // Non-ANSI AT&T-ism: Default open protection.
- filebuf();
- filebuf(int fd);
- filebuf(int fd, char* p, int len);
-#if !_IO_UNIFIED_JUMPTABLES
- static filebuf *__new();
-#endif
- ~filebuf();
- filebuf* attach(int fd);
- filebuf* open(const char *filename, const char *mode);
- filebuf* open(const char *filename, ios::openmode mode, int prot = 0664);
- virtual int underflow();
- virtual int overflow(int c = EOF);
- int is_open() const { return _fileno >= 0; }
- int fd() const { return is_open() ? _fileno : EOF; }
- filebuf* close();
- virtual int doallocate();
- virtual streampos seekoff(streamoff, _seek_dir, int mode=ios::in|ios::out);
- virtual streambuf* setbuf(char* p, int len);
- streamsize xsputn(const char* s, streamsize n);
- streamsize xsgetn(char* s, streamsize n);
- virtual int sync();
- protected: // See documentation in filebuf.C.
-// virtual int pbackfail(int c);
- int is_reading() { return eback() != egptr(); }
- char* cur_ptr() { return is_reading() ? gptr() : pptr(); }
- /* System's idea of pointer */
- char* file_ptr() { return eGptr(); }
- // Low-level operations (Usually invoke system calls.)
- virtual streamsize sys_read(char* buf, streamsize size);
- virtual streampos sys_seek(streamoff, _seek_dir);
- virtual streamsize sys_write(const char*, streamsize);
- virtual int sys_stat(void*); // Actually, a (struct stat*)
- virtual int sys_close();
-#if 0
- virtual uflow;
- virtual showmany;
-#endif
-};
-
-inline void ios::init(streambuf* sb, ostream* tie_to) {
- _state = sb ? ios::goodbit : ios::badbit; _exceptions=0;
- _strbuf=sb; _tie = tie_to; _width=0; _fill=' ';
-#ifdef _IO_NEW_STREAMS
- _flags=ios::skipws|ios::dec;
-#else
- _flags=ios::skipws|ios::dec|ios::dont_close;
-#endif
- _precision=6; _arrays = 0; }
-
-inline ios::ios(streambuf* sb, ostream* tie_to) { init(sb, tie_to); }
-
-inline ios::~ios() {
-#ifndef _IO_NEW_STREAMS
- if (!(_flags & (unsigned int)ios::dont_close)) delete rdbuf();
-#endif
- // It is safe to use naked operator delete[] as we know elements have no
- // dtor, and g++ does not add a new[] cookie for such cases.
- operator delete[] (_arrays);
-}
-} // extern "C++"
-#endif /* _STREAMBUF_H */
diff --git a/contrib/libio/strfile.h b/contrib/libio/strfile.h
deleted file mode 100644
index 85e83a95d073..000000000000
--- a/contrib/libio/strfile.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/* Copyright (C) 1993, 1997, 1998 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#include <libio.h>
-#ifdef TODO
-Merge into libio.h ?
-#endif
-
-#ifndef __PMT
-# ifdef __STDC__
-# define __PMT(p) p
-# else
-# define __PMT(p) ()
-# endif
-#endif /*!__P*/
-
-typedef void *(*_IO_alloc_type) __PMT ((_IO_size_t));
-typedef void (*_IO_free_type) __PMT ((void*));
-
-struct _IO_str_fields
-{
- _IO_alloc_type _allocate_buffer;
- _IO_free_type _free_buffer;
-};
-
-/* This is needed for the Irix6 N32 ABI, which has a 64 bit off_t type,
- but a 32 bit pointer type. In this case, we get 4 bytes of padding
- after the vtable pointer. Putting them in a structure together solves
- this problem. */
-
-struct _IO_streambuf
-{
- struct _IO_FILE _f;
- const void *_vtable;
-};
-
-typedef struct _IO_strfile_
-{
- struct _IO_streambuf _sbf;
- struct _IO_str_fields _s;
-} _IO_strfile;
-
-/* dynamic: set when the array object is allocated (or reallocated) as
- necessary to hold a character sequence that can change in length. */
-#define _IO_STR_DYNAMIC(FP) ((FP)->_s._allocate_buffer != (_IO_alloc_type)0)
-
-/* frozen: set when the program has requested that the array object not
- be altered, reallocated, or freed. */
-#define _IO_STR_FROZEN(FP) ((FP)->_f._IO_file_flags & _IO_USER_BUF)
diff --git a/contrib/libio/strops.c b/contrib/libio/strops.c
deleted file mode 100644
index 193e39d55cb8..000000000000
--- a/contrib/libio/strops.c
+++ /dev/null
@@ -1,303 +0,0 @@
-/* Copyright (C) 1993, 1997, 1998 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#include "strfile.h"
-#include "libioP.h"
-#include <string.h>
-
-#if 0
-/* The following definitions are for exposition only.
- They map the terminology used in the ANSI/ISO C++ draft standard
- to the implementation. */
-
-/* allocated: set when a dynamic array object has been allocated, and
- hence should be freed by the destructor for the strstreambuf object. */
-#define ALLOCATED(FP) ((FP)->_f._IO_buf_base && DYNAMIC(FP))
-
-/* constant: set when the array object has const elements,
- so the output sequence cannot be written. */
-#define CONSTANT(FP) ((FP)->_f._IO_file_flags & _IO_NO_WRITES)
-
-/* alsize: the suggested minimum size for a dynamic array object. */
-#define ALSIZE(FP) ??? /* not stored */
-
-/* palloc: points to the function to call to allocate a dynamic array object.*/
-#define PALLOC(FP) \
- ((FP)->_s._allocate_buffer == default_alloc ? 0 : (FP)->_s._allocate_buffer)
-
-/* pfree: points to the function to call to free a dynamic array object. */
-#define PFREE(FP) \
- ((FP)->_s._free_buffer == default_free ? 0 : (FP)->_s._free_buffer)
-
-#endif
-
-#ifdef TODO
-/* An "unbounded buffer" is when a buffer is supplied, but with no
- specified length. An example is the buffer argument to sprintf.
- */
-#endif
-
-void
-_IO_str_init_static (fp, ptr, size, pstart)
- _IO_FILE *fp;
- char *ptr;
- int size;
- char *pstart;
-{
- if (size == 0)
- size = strlen (ptr);
- else if (size < 0)
- {
- /* If size is negative 'the characters are assumed to
- continue indefinitely.' This is kind of messy ... */
- int s;
- size = 512;
- /* Try increasing powers of 2, as long as we don't wrap around. */
- for (; s = 2*size, s > 0 && ptr + s > ptr && s < 0x4000000L; )
- size = s;
- /* Try increasing size as much as we can without wrapping around. */
- for (s = size >> 1; s > 0; s >>= 1)
- {
- if (ptr + size + s > ptr)
- size += s;
- }
- }
- _IO_setb (fp, ptr, ptr + size, 0);
-
- fp->_IO_write_base = ptr;
- fp->_IO_read_base = ptr;
- fp->_IO_read_ptr = ptr;
- if (pstart)
- {
- fp->_IO_write_ptr = pstart;
- fp->_IO_write_end = ptr + size;
- fp->_IO_read_end = pstart;
- }
- else
- {
- fp->_IO_write_ptr = ptr;
- fp->_IO_write_end = ptr;
- fp->_IO_read_end = ptr+size;
- }
- /* A null _allocate_buffer function flags the strfile as being static. */
- (((_IO_strfile *) fp)->_s._allocate_buffer) = (_IO_alloc_type)0;
-}
-
-void
-_IO_str_init_readonly (fp, ptr, size)
- _IO_FILE *fp;
- const char *ptr;
- int size;
-{
- _IO_str_init_static (fp, (char *) ptr, size, NULL);
- fp->_IO_file_flags |= _IO_NO_WRITES;
-}
-
-int
-_IO_str_overflow (fp, c)
- _IO_FILE *fp;
- int c;
-{
- int flush_only = c == EOF;
- _IO_size_t pos;
- if (fp->_flags & _IO_NO_WRITES)
- return flush_only ? 0 : EOF;
- if ((fp->_flags & _IO_TIED_PUT_GET) && !(fp->_flags & _IO_CURRENTLY_PUTTING))
- {
- fp->_flags |= _IO_CURRENTLY_PUTTING;
- fp->_IO_write_ptr = fp->_IO_read_ptr;
- fp->_IO_read_ptr = fp->_IO_read_end;
- }
- pos = fp->_IO_write_ptr - fp->_IO_write_base;
- if (pos >= (_IO_size_t) (_IO_blen (fp) + flush_only))
- {
- if (fp->_flags & _IO_USER_BUF) /* not allowed to enlarge */
- return EOF;
- else
- {
- char *new_buf;
- char *old_buf = fp->_IO_buf_base;
- _IO_size_t new_size = 2 * _IO_blen (fp) + 100;
- new_buf
- = (char *) (*((_IO_strfile *) fp)->_s._allocate_buffer) (new_size);
- if (new_buf == NULL)
- {
- /* __ferror(fp) = 1; */
- return EOF;
- }
- if (fp->_IO_buf_base)
- {
- memcpy (new_buf, old_buf, _IO_blen (fp));
- (*((_IO_strfile *) fp)->_s._free_buffer) (fp->_IO_buf_base);
- /* Make sure _IO_setb won't try to delete _IO_buf_base. */
- fp->_IO_buf_base = NULL;
- }
-#if 0
- if (lenp == &LEN(fp)) /* use '\0'-filling */
- memset (new_buf + pos, 0, blen() - pos);
-#endif
- _IO_setb (fp, new_buf, new_buf + new_size, 1);
- fp->_IO_read_base = new_buf + (fp->_IO_read_base - old_buf);
- fp->_IO_read_ptr = new_buf + (fp->_IO_read_ptr - old_buf);
- fp->_IO_read_end = new_buf + (fp->_IO_read_end - old_buf);
- fp->_IO_write_ptr = new_buf + (fp->_IO_write_ptr - old_buf);
-
- fp->_IO_write_base = new_buf;
- fp->_IO_write_end = fp->_IO_buf_end;
- }
- }
-
- if (!flush_only)
- *fp->_IO_write_ptr++ = (unsigned char) c;
- if (fp->_IO_write_ptr > fp->_IO_read_end)
- fp->_IO_read_end = fp->_IO_write_ptr;
- return c;
-}
-
-int
-_IO_str_underflow (fp)
- _IO_FILE *fp;
-{
- if (fp->_IO_write_ptr > fp->_IO_read_end)
- fp->_IO_read_end = fp->_IO_write_ptr;
- if ((fp->_flags & _IO_TIED_PUT_GET) && (fp->_flags & _IO_CURRENTLY_PUTTING))
- {
- fp->_flags &= ~_IO_CURRENTLY_PUTTING;
- fp->_IO_read_ptr = fp->_IO_write_ptr;
- fp->_IO_write_ptr = fp->_IO_write_end;
- }
- if (fp->_IO_read_ptr < fp->_IO_read_end)
- return *((unsigned char *) fp->_IO_read_ptr);
- else
- return EOF;
-}
-
-/* The size of the valid part of the buffer. */
-
-_IO_ssize_t
-_IO_str_count (fp)
- _IO_FILE *fp;
-{
- return ((fp->_IO_write_ptr > fp->_IO_read_end
- ? fp->_IO_write_ptr : fp->_IO_read_end)
- - fp->_IO_read_base);
-}
-
-_IO_pos_t
-_IO_str_seekoff (fp, offset, dir, mode)
- _IO_FILE *fp;
- _IO_off_t offset;
- int dir;
- int mode;
-{
- _IO_ssize_t cur_size = _IO_str_count (fp);
- _IO_pos_t new_pos = EOF;
-
- /* Move the get pointer, if requested. */
- if (mode & _IOS_INPUT)
- {
- switch (dir)
- {
- case _IO_seek_end:
- offset += cur_size;
- break;
- case _IO_seek_cur:
- offset += fp->_IO_read_ptr - fp->_IO_read_base;
- break;
- default: /* case _IO_seek_set: */
- break;
- }
- if (offset < 0 || (_IO_ssize_t) offset > cur_size)
- return EOF;
- fp->_IO_read_ptr = fp->_IO_read_base + offset;
- fp->_IO_read_end = fp->_IO_read_base + cur_size;
- new_pos = offset;
- }
-
- /* Move the put pointer, if requested. */
- if (mode & _IOS_OUTPUT)
- {
- switch (dir)
- {
- case _IO_seek_end:
- offset += cur_size;
- break;
- case _IO_seek_cur:
- offset += fp->_IO_write_ptr - fp->_IO_write_base;
- break;
- default: /* case _IO_seek_set: */
- break;
- }
- if (offset < 0 || (_IO_ssize_t) offset > cur_size)
- return EOF;
- fp->_IO_write_ptr = fp->_IO_write_base + offset;
- new_pos = offset;
- }
- return new_pos;
-}
-
-int
-_IO_str_pbackfail (fp, c)
- _IO_FILE *fp;
- int c;
-{
- if ((fp->_flags & _IO_NO_WRITES) && c != EOF)
- return EOF;
- return _IO_default_pbackfail (fp, c);
-}
-
-void
-_IO_str_finish (fp, dummy)
- _IO_FILE *fp;
- int dummy;
-{
- if (fp->_IO_buf_base && !(fp->_flags & _IO_USER_BUF))
- (((_IO_strfile *) fp)->_s._free_buffer) (fp->_IO_buf_base);
- fp->_IO_buf_base = NULL;
-
- _IO_default_finish (fp, 0);
-}
-
-struct _IO_jump_t _IO_str_jumps =
-{
- JUMP_INIT_DUMMY,
- JUMP_INIT(finish, _IO_str_finish),
- JUMP_INIT(overflow, _IO_str_overflow),
- JUMP_INIT(underflow, _IO_str_underflow),
- JUMP_INIT(uflow, _IO_default_uflow),
- JUMP_INIT(pbackfail, _IO_str_pbackfail),
- JUMP_INIT(xsputn, _IO_default_xsputn),
- JUMP_INIT(xsgetn, _IO_default_xsgetn),
- JUMP_INIT(seekoff, _IO_str_seekoff),
- JUMP_INIT(seekpos, _IO_default_seekpos),
- JUMP_INIT(setbuf, _IO_default_setbuf),
- JUMP_INIT(sync, _IO_default_sync),
- JUMP_INIT(doallocate, _IO_default_doallocate),
- JUMP_INIT(read, _IO_default_read),
- JUMP_INIT(write, _IO_default_write),
- JUMP_INIT(seek, _IO_default_seek),
- JUMP_INIT(close, _IO_default_close),
- JUMP_INIT(stat, _IO_default_stat)
-};
diff --git a/contrib/libio/strstream.cc b/contrib/libio/strstream.cc
deleted file mode 100644
index a32e811c9d94..000000000000
--- a/contrib/libio/strstream.cc
+++ /dev/null
@@ -1,116 +0,0 @@
-/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-/* Written by Per Bothner (bothner@cygnus.com). */
-
-#ifdef __GNUG__
-#pragma implementation
-#endif
-#include "iostreamP.h"
-#include "strstream.h"
-#include <string.h>
-
-static void* default_alloc(_IO_size_t size)
-{
- return (void*)new char[size];
-}
-
-static void default_free(void* ptr)
-{
- delete [] (char*)ptr;
-}
-
-istrstream::istrstream(const char *cp, int n)
-{
- __my_sb.init_readonly (cp, n);
-}
-
-strstreambase::strstreambase(char *cp, int n, int mode)
-: __my_sb (cp, n,
- (mode == ios::app || mode == ios::ate) ? cp + strlen(cp) : cp)
-{
- init (&__my_sb);
-}
-
-char *strstreambuf::str()
-{
- freeze(1);
- return base();
-}
-
-_IO_ssize_t strstreambuf::pcount () { return _IO_write_ptr - _IO_write_base; }
-
-int strstreambuf::overflow(int c /* = EOF */)
-{
- return _IO_str_overflow (this, c);
-}
-
-int strstreambuf::underflow()
-{
- return _IO_str_underflow(this);
-}
-
-
-void strstreambuf::init_dynamic(_IO_alloc_type alloc, _IO_free_type free,
- int initial_size)
-
-{
- _s._allocate_buffer = alloc ? alloc : default_alloc;
- _s._free_buffer = free ? free : default_free;
- if (initial_size > 0)
- {
- char * buf = (char*)(*_s._allocate_buffer)(initial_size);
- setb(buf, buf + initial_size, 1);
- setp(buf, buf + initial_size);
- setg(buf, buf, buf);
- }
-}
-
-void strstreambuf::init_static(char *ptr, int size, char *pstart)
-{
- _IO_str_init_static (this, ptr, size, pstart);
-}
-
-void strstreambuf::init_readonly (const char *ptr, int size)
-{
- _IO_str_init_readonly (this, ptr, size);
-}
-
-strstreambuf::~strstreambuf()
-{
- if (_IO_buf_base && !(_flags & _IO_USER_BUF))
- (_s._free_buffer)(_IO_buf_base);
- _IO_buf_base = NULL;
-}
-
-streampos strstreambuf::seekoff(streamoff off, _seek_dir dir,
- int mode /*=ios::in|ios::out*/)
-{
- return _IO_str_seekoff (this, off, dir, mode);
-}
-
-int strstreambuf::pbackfail(int c)
-{
- return _IO_str_pbackfail (this, c);
-}
diff --git a/contrib/libio/strstream.h b/contrib/libio/strstream.h
deleted file mode 100644
index 967e5b0b76ac..000000000000
--- a/contrib/libio/strstream.h
+++ /dev/null
@@ -1,113 +0,0 @@
-/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 1993, 1999 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-/* Written by Per Bothner (bothner@cygnus.com). */
-
-#ifndef __STRSTREAM_H
-#define __STRSTREAM_H
-#ifdef __GNUG__
-#pragma interface
-#endif
-#include <iostream.h>
-#include <strfile.h>
-
-extern "C++" {
-class strstreambuf : public streambuf
-{
- struct _IO_str_fields _s;
- friend class istrstream;
-
- void init_dynamic(_IO_alloc_type alloc, _IO_free_type free,
- int initial_size = 0);
- void init_static(char *ptr, int size, char *pstart);
- void init_readonly(const char *ptr, int size);
- protected:
- virtual int overflow(int = EOF);
- virtual int underflow();
- virtual int pbackfail(int c);
- public:
- virtual ~strstreambuf();
- strstreambuf() { init_dynamic(0, 0); }
- strstreambuf(int initial_size) { init_dynamic(0, 0, initial_size); }
- strstreambuf(void *(*__alloc)(_IO_size_t), void (*__free)(void*))
- { init_dynamic(__alloc, __free); }
- strstreambuf(char *ptr, int size, char *pstart = NULL)
- { init_static(ptr, size, pstart); }
- strstreambuf(unsigned char *ptr, int size, unsigned char *pstart = NULL)
- { init_static((char*)ptr, size, (char*)pstart); }
- strstreambuf(const char *ptr, int size)
- { init_readonly(ptr, size); }
- strstreambuf(const unsigned char *ptr, int size)
- { init_readonly((const char*)ptr, size); }
- strstreambuf(signed char *ptr, int size, signed char *pstart = NULL)
- { init_static((char*)ptr, size, (char*)pstart); }
- strstreambuf(const signed char *ptr, int size)
- { init_readonly((const char*)ptr, size); }
- // Note: frozen() is always true if !_IO_STR_DYNAMIC(this).
- int frozen() { return _flags & _IO_USER_BUF ? 1 : 0; }
- void freeze(int n=1)
- { if (_IO_STR_DYNAMIC(this))
- { if (n) _flags |= _IO_USER_BUF; else _flags &= ~_IO_USER_BUF; } }
- _IO_ssize_t pcount();
- char *str();
- virtual streampos seekoff(streamoff, _seek_dir, int mode=ios::in|ios::out);
-};
-
-class strstreambase : virtual public ios {
- protected:
- strstreambuf __my_sb;
- public:
- strstreambuf* rdbuf() { return &__my_sb; }
- protected:
- strstreambase() { init (&__my_sb); }
- strstreambase(char *cp, int n, int mode=ios::out);
-};
-
-class istrstream : public strstreambase, public istream {
- public:
- istrstream(const char*, int=0);
-};
-
-class ostrstream : public strstreambase, public ostream {
- public:
- ostrstream() { }
- ostrstream(char *cp, int n, int mode=ios::out) :strstreambase(cp,n,mode){}
- _IO_ssize_t pcount() { return ((strstreambuf*)_strbuf)->pcount(); }
- char *str() { return ((strstreambuf*)_strbuf)->str(); }
- void freeze(int n = 1) { ((strstreambuf*)_strbuf)->freeze(n); }
- int frozen() { return ((strstreambuf*)_strbuf)->frozen(); }
-};
-
-class strstream : public strstreambase, public iostream {
- public:
- strstream() { }
- strstream(char *cp, int n, int mode=ios::out) :strstreambase(cp,n,mode){}
- _IO_ssize_t pcount() { return ((strstreambuf*)_strbuf)->pcount(); }
- char *str() { return ((strstreambuf*)_strbuf)->str(); }
- void freeze(int n = 1) { ((strstreambuf*)_strbuf)->freeze(n); }
- int frozen() { return ((strstreambuf*)_strbuf)->frozen(); }
-};
-} // extern "C++"
-
-#endif /*!__STRSTREAM_H*/
diff --git a/contrib/libio/tests/ChangeLog b/contrib/libio/tests/ChangeLog
deleted file mode 100644
index 548e9e0519aa..000000000000
--- a/contrib/libio/tests/ChangeLog
+++ /dev/null
@@ -1,166 +0,0 @@
-Fri Mar 16 12:46:19 GMT 2001 Bernd Schmidt (bernds@redhat.com)
-
- * gcc-2.95.3 Released.
-
-Sun Oct 24 23:54:10 PDT 1999 Jeff Law (law@cygnus.com)
-
- * gcc-2.95.2 Released.
-
-Mon Aug 16 01:29:24 PDT 1999 Jeff Law (law@cygnus.com)
-
- * gcc-2.95.1 Released.
-
-Wed Jul 28 21:39:31 PDT 1999 Jeff Law (law@cygnus.com)
-
- * gcc-2.95 Released.
-
-Sun Jul 25 23:40:51 PDT 1999 Jeff Law (law@cygnus.com)
-
- * gcc-2.95 Released.
-
-1997-10-31 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * tFile.cc (t4): Cast TMPFILE to char* in the call to unlink, to
- solve warning problems with vxworks headers that leave const off
- their declarations.
-
-Tue May 20 17:57:31 1997 Jeffrey A Law (law@cygnus.com)
-
- * tfformat.c (main): Only run half the testcases if SLOW_SIMULATOR
- is defined.
-
-Sun May 18 17:15:32 1997 Jeffrey A Law (law@cygnus.com)
-
- * tfformat.c (main): Exit immediately if doubles are not
- at least 64 bits wide.
-
-Fri May 16 19:31:29 1997 Bob Manson <manson@charmed.cygnus.com>
-
- Fix testscases to use _G_int32_t appropriately.
-
-Thu May 1 17:35:43 1997 Jason Merrill <jason@yorick.cygnus.com>
-
- * Makefile.in (tgetl, tFile, tiomisc, hounddog, putbackdog,
- tiomanip, foo, foo+): Add $(CXXFLAGS).
- (tfseek, twrseek, trdseek, tstdiomisc, tpopen): Add $(CFLAGS).
-
-Mon Apr 28 11:28:36 1997 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * tiomisc.cc (operator delete): Add throw spec.
-
-Sat Apr 26 13:40:17 1997 Bob Manson <manson@charmed.cygnus.com>
-
- * Makefile.in: Change check to check-old. Add do-nothing
- check target.
-
-Wed Apr 10 17:15:47 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * Makefile.in (IOLIBS): Link with libstdc++.
-
-Tue Mar 12 11:45:14 1996 Per Bothner <bothner@kalessin.cygnus.com>
-
- * tiomisc.cc (test_read_write_flush): New test for read/write/seek
- on block end. From Luke Blanshard <luke@cs.wisc.edu>.
-
-Thu Jul 6 17:51:30 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * tiomisc.cc (getline_test3): New function. Test reading long lines.
- * tiomisc.exp: Update for output from getline_test3.
-
-Wed May 10 03:06:51 1995 Jason Merrill <jason@python.cygnus.com>
-
- * configure.in (X*INCLUDES): Renamed.
-
-Thu Apr 27 21:05:00 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * tiomisc.cc (test_destroy), tiomisc.exp: Add support for
- _IO_NEW_STREAMS.
-
-Tue Apr 25 15:15:01 1995 Jim Wilson <wilson@chestnut.cygnus.com>
-
- * tstdiomisc.c (t2): Use N not n in last SCAN macro call.
-
-Sun Feb 12 21:23:24 1995 Brendan Kehoe (brendan@lisa.cygnus.com)
-
- * Makefile.in (JUNK_TO_CLEAN): Also delete foo.dat from tiomisc.
-
-Sat Nov 5 14:37:36 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * tiomisc.cc (test_destroy): New test case from Jason Merrill.
- * tiomisc.exp: Update.
-
- * Makefile.in (JUNK_TO_CLEAN): Add tstdiomisc.
-
-Thu Oct 13 16:47:30 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * tiomisc.cc (reread_test): Remove bogus istream assignment.
-
-Wed Aug 31 13:59:56 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * Makefile.in (CXX_FLAGS): Not used. Removed.
-
-Wed Aug 17 18:27:37 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * tiomisc.cc (getline_test1, getline_test2, flush1_test): New tests,
- * tiomisc.cc (reread_test): New tests,
-
-Wed Jun 22 13:44:19 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * tstdiomisc.c: Add some sscanf tests.
- * Makefile.in (check-tstdiomisc): Run diff with expected output.
- * tstdiomisc.exp: New file. Expected output from tstdiomisc.
- * Makefile.in (foo): New rule, for quick one-off tests.
-
-Fri May 6 14:10:24 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * tFile.cc (t7): Revert Mar 4 change - I was confused.
-
-Sat Apr 2 04:41:41 1994 Andreas Schwab (schwab@issan.informatik.uni-dortmund.de)
-
- * Makefile.in (tfformat): Fix dependency.
-
-Fri Mar 4 17:40:14 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * tFile.cc (t7): gcount after getline shouldn't include delimiter.
- * tFile.cc (show_int, t12), tFile.exp: More integer formatting tests.
-
-Tue Feb 8 18:39:09 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * tiomisc.cc, tiomisc.exp: New test case (for filebuf::attach)
- from Joe Buck.
-
-Mon Jan 31 13:24:58 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * tfformat.c (main): Fix fprintf format string (%s -> %d).
- Bug reported by Jochen Voss <voss@mathematik.uni-kl.de>.
-
-Sun Dec 19 15:29:00 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * tstdiomisc.c, Makefile.in: New tests.
-
-Thu Dec 2 22:56:21 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * Makefile.in (JUNK_TO_CLEAN), configure.in (MOSTLYCLEAN):
- Added, to cleanup after tests.
-
-Fri Nov 26 16:05:43 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * tiomisc.cc, tiomisc.exp: A (hopefully growing) collection
- of small, random tests (mainly regression tests).
- * tiomisc.cc (test1 and test2): Tests from Wilco van Hoogstraeten
- <wilco@erasmus.et.tudelft.nl> to check for (now-fixed) bugs.
-
-Mon Oct 4 17:38:27 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * Makefile.in (IOSTDIOLIB): New macro.
-
-Fri Aug 27 12:22:10 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * tFile.cc (t7): Add test for buffer overflow.
-
-Fri Aug 20 00:23:53 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- Moved various tests over from old libg++/iostream/test.
- * Makefile.in: Edit appropriately.
-
-
diff --git a/contrib/libio/tests/Makefile.in b/contrib/libio/tests/Makefile.in
deleted file mode 100644
index b70639a68096..000000000000
--- a/contrib/libio/tests/Makefile.in
+++ /dev/null
@@ -1,196 +0,0 @@
-# Copyright (C) 1993, 1998 Free Software Foundation
-#
-# This file is part of the GNU IO Library. This library is free
-# software; you can redistribute it and/or modify it under the
-# terms of the GNU General Public License as published by the
-# Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# 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. */
-
-srcdir = .
-
-CFLAGS = -g
-C_FLAGS = $(CFLAGS) -I. -I.. -I$(srcdir) -I$(srcdir)/..
-CXXFLAGS = -g
-CC = gcc
-CXX = gcc
-
-#### package, host, target, and site dependent Makefile fragments come in here.
-##
-
-STDIO_LD_FLAGS = -u __cleanup
-
-#LIBS = ../../libg++.a
-
-#LIBSTDIO = ../stdio/libstdio++.a
-#LIBIO = ../libio.a
-
-#STDIOLIBS = $(STDIO_LD_FLAGS) $(LIBSTDIO) $(LIBIO) $(LIBS)
-STDIOLIBS = $(LIBSTDIO) $(LIBIO) $(LIBS)
-IOLIBS = -L../../libstdc++ -lstdc++
-IOSTDIOLIB = ../libio.a ../../libiberty/libiberty.a
-
-DEPEND_SOURCES = $(srcdir)/*.C
-
-.PHONY: check check-old check-iostream check-stdio
-check: $(CHECK)
-
-
-# These are tests written in C++, that test the iostream facility.
-check-iostream: check-tFile check-tiomisc \
- check-hounddog check-putbackdog check-tiomanip
-
-# These are tests written in C, that don't need C++.
-# They test libio's emulation of stdio.
-check-iostdio: check-tiformat check-tfformat check-tstdiomisc
-
-# check-stdio runs test programs that use stdio.
-# These aren't run by default because there may be linker tricks needed
-# to build them (if libc.a contains a competing stdio implementation).
-
-check-stdio: check-tfseek check-twrseek check-trdseek check-tpopen
-
-# See ${MOSTLYCLEAN} in configure.in
-JUNK_TO_CLEAN = tFile tiomisc hounddog putbackdog tiomanip \
- t?format *.out streamfile ftmp* tstdiomisc foo.dat
-
-.PHONY: info
-info:
-.PHONY: clean-info
-clean-info:
-.PHONY: install-info
-install-info:
-
-tst: tst.o
- gcc -v -o tst tst.o $(STDIOLIBS)
-
-tgetl: tgetl.o
- $(CXX) $(CXXFLAGS) -o tgetl tgetl.o $(IOLIBS)
-
-tFile: tFile.o
- $(CXX) $(CXXFLAGS) -o tFile tFile.o $(IOLIBS)
-
-tiomisc: tiomisc.o
- $(CXX) $(CXXFLAGS) -o tiomisc tiomisc.o $(IOLIBS)
-
-hounddog: hounddog.o
- $(CXX) $(CXXFLAGS) -o hounddog hounddog.o $(IOLIBS)
-
-check-hounddog: hounddog
- ./hounddog <$(srcdir)/hounddog.inp > hounddog.out 2>&1
- diff -c hounddog.out $(srcdir)/hounddog.exp
- ./hounddog -b0 <$(srcdir)/hounddog.inp > hound-b0.out 2>&1
- diff -c hound-b0.out $(srcdir)/hounddog.exp
- ./hounddog -b2 <$(srcdir)/hounddog.inp > hound-b2.out 2>&1
- diff -c hound-b2.out $(srcdir)/hounddog.exp
-
-putbackdog: putbackdog.o
- $(CXX) $(CXXFLAGS) -o putbackdog putbackdog.o $(IOLIBS)
-
-check-putbackdog-regular: putbackdog
- ./putbackdog <$(srcdir)/hounddog.inp > putback.out 2>&1
- diff -c putback.out $(srcdir)/hounddog.exp
-check-putbackdog-nobuf: putbackdog
- ./putbackdog -b0 <$(srcdir)/hounddog.inp > putback-b0.out 2>&1
- diff -c putback-b0.out $(srcdir)/hounddog.exp
-check-putbackdog-buf2: putbackdog
- ./putbackdog -b2 <$(srcdir)/hounddog.inp > putback-b2.out 2>&1
- diff -c putback-b2.out $(srcdir)/hounddog.exp
-check-putbackdog: \
- check-putbackdog-regular check-putbackdog-nobuf check-putbackdog-buf2
-
-tfseek: tfseek.o
- $(CC) $(CFLAGS) -o tfseek tfseek.o $(STDIOLIBS)
-
-check-tfseek: tfseek
- ./tfseek SEEK_SET fopen > tfseek-set-fopen.out 2>&1
- diff -c tfseek-set-fopen.out $(srcdir)/tfseek-set.exp
- ./tfseek SEEK_SET freopen > tfseek-set-freopen.out 2>&1
- diff -c tfseek-set-freopen.out $(srcdir)/tfseek-set.exp
- ./tfseek SEEK_CUR fopen > tfseek-cur-fopen.out 2>&1
- diff -c tfseek-cur-fopen.out $(srcdir)/tfseek-cur.exp
- ./tfseek SEEK_CUR freopen > tfseek-cur-freopen.out 2>&1
- diff -c tfseek-cur-freopen.out $(srcdir)/tfseek-cur.exp
-
-twrseek: twrseek.o
- $(CC) $(CFLAGS) -o twrseek twrseek.o $(STDIOLIBS)
-
-check-twrseek: twrseek
- ./twrseek > twrseek.out 2>&1
- diff -c twrseek.out $(srcdir)/twrseek.exp
-
-trdseek: trdseek.o
- $(CC) $(CFLAGS) -o trdseek -v trdseek.o $(STDIOLIBS)
-
-check-trdseek: trdseek
- ./trdseek
-
-check-tFile-regular: tFile
- ./tFile < $(srcdir)/tFile.inp > tFile.out 2>&1
- diff -c tFile.out $(srcdir)/tFile.exp
-# Run tFile with cout.rdbuf() unbuffered.
-check-tFile-nobuf: tFile
- ./tFile -b0 < $(srcdir)/tFile.inp > tFile-buf0.out 2>&1
- diff -c tFile-buf0.out $(srcdir)/tFile.exp
-# Run tFile with a 3-byte buffer for cout.rdbuf().
-check-tFile-buf3: tFile
- ./tFile -b3 < $(srcdir)/tFile.inp > tFile-buf3.out 2>&1
- diff -c tFile-buf3.out $(srcdir)/tFile.exp
-check-tFile: check-tFile-regular check-tFile-nobuf check-tFile-buf3
-
-check-tiomisc: tiomisc
- ./tiomisc >tiomisc.out 2>&1
- diff -c tiomisc.out $(srcdir)/tiomisc.exp
-
-tiomanip: tiomanip.o
- $(CXX) $(CXXFLAGS) -o tiomanip tiomanip.o $(IOLIBS)
-check-tiomanip: tiomanip
- ./tiomanip >tiomanip.out 2>&1
- diff -c tiomanip.out $(srcdir)/tiomanip.exp
-
-tfformat: $(srcdir)/tfformat.c
- $(CC) $(C_FLAGS) -DTEST_LIBIO -DTEST_EXACTNESS \
- -o tfformat $(srcdir)/tfformat.c $(IOSTDIOLIB)
-
-check-tfformat: tfformat
- ./tfformat
-
-tiformat: $(srcdir)/tiformat.c
- $(CC) $(C_FLAGS) -DTEST_LIBIO -o tiformat $(srcdir)/tiformat.c $(IOSTDIOLIB)
-
-check-tiformat: tiformat
- ./tiformat
-
-tstdiomisc: tstdiomisc.o
- $(CC) $(CFLAGS) -o tstdiomisc tstdiomisc.o $(IOSTDIOLIB)
-
-check-tstdiomisc: tstdiomisc
- ./tstdiomisc >tstdiomisc.out 2>&1
- diff -c tstdiomisc.out $(srcdir)/tstdiomisc.exp
-
-tpopen: tpopen.o
- $(CC) $(CFLAGS) -o tpopen tpopen.o $(STDIOLIBS)
-
-check-tpopen: tpopen
- ./tpopen > tpopen.out 2>&1
- diff -c tpopen.out $(srcdir)/tpopen.exp
-
-trwseek: trwseek.o
- $(CC) $(CFLAGS) -o trwseek trwseek.o $(STDIOLIBS)
-
-check-trwseek: trwseek
- ./trwsseek TMP r+ k w o
-
-foo: foo.o
- $(CXX) $(CXXFLAGS) -o foo foo.o $(STDIOLIBS)
-foo+: foo+.o
- $(CXX) $(CXXFLAGS) -o foo+ foo+.o $(IOLIBS)
diff --git a/contrib/libio/tests/configure.in b/contrib/libio/tests/configure.in
deleted file mode 100644
index 46deefbc8c95..000000000000
--- a/contrib/libio/tests/configure.in
+++ /dev/null
@@ -1,36 +0,0 @@
-# This file is a shell script fragment that supplies the information
-# necessary for a configure script to process the program in
-# this directory. For more information, look at ../../configure.
-
-configdirs=
-srctrigger=tFile.cc
-srcname="test C++ input/output library"
-package_makefile_frag=Make.pack
-package_makefile_rules_frag=Make.pack.r
-
-# per-host:
-
-# per-target:
-
-TO_TOPDIR=../../
-ALL=' '
-XCINCLUDES='-I. -I.. -I$(srcdir) -I$(srcdir)/..'
-XCXXINCLUDES='-I. -I.. -I$(srcdir) -I$(srcdir)/..'
-MOSTLYCLEAN='*.o core $(JUNK_TO_CLEAN)'
-(. ${srcdir}/../config.shared) >${package_makefile_frag} 2>${package_makefile_rules_frag}
-
-if [ "${srcdir}" = "." ] ; then
- if [ "${with_target_subdir}" != "." ] ; then
- topsrcdir=${with_multisrctop}../../..
- else
- topsrcdir=${with_multisrctop}../..
- fi
-else
- topsrcdir=${srcdir}/../..
-fi
-
-if [ ! -d ${topsrcdir}/gcc ] ; then
- echo "CHECK = check-iostream check-iostdio" >>${package_makefile_frag}
-fi
-
-# post-target:
diff --git a/contrib/libio/tests/hounddog.cc b/contrib/libio/tests/hounddog.cc
deleted file mode 100644
index 29a923836476..000000000000
--- a/contrib/libio/tests/hounddog.cc
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include <iostream.h>
-#include <stdlib.h>
-#include <string.h>
-
-// Read either "dog", "hound", or "hounddog".
-// If "dog" is found, return 1.
-// If "hound" is found, return 2.
-// If "hounddog" is found, return 3.
-// If non of these are found, return -1.
-int my_scan(streambuf* sb)
-{
- streammarker fence(sb);
- char buffer[20];
- // Try reading "hounddog":
- if (sb->sgetn(buffer, 8) == 8 && strncmp(buffer, "hounddog", 8) == 0)
- return 3;
- // No, no "hounddog": Backup to 'fence' ...
- sb->seekmark(fence);
- // ... and try reading "dog":
- if (sb->sgetn(buffer, 3) == 3 && strncmp(buffer, "dog", 3) == 0)
- return 1;
- // No, no "dog" either: Backup to 'fence' ...
- sb->seekmark(fence);
- // ... and try reading "hound":
- if (sb->sgetn(buffer, 5) == 5 && strncmp(buffer, "hound", 5) == 0)
- return 2;
- // No, no "hound" either: Backup to 'fence' and signal failure.
- sb->seekmark(fence); // Backup to 'fence'..
- return -1;
-}
-
-int main(int argc, char **argv)
-{
- streambuf *sb = cin.rdbuf();
- if (argc > 1 && strncmp(argv[1], "-b", 2) == 0) {
- streambuf *ret;
- int buffer_size = atoi(&argv[1][2]);
- if (buffer_size == 0)
- ret = sb->setbuf(NULL, 0);
- else
- ret = sb->setbuf(new char[buffer_size], buffer_size);
- if (ret != sb)
- cerr << "Warning: cin.rdbuf()->setbuf failed!\n";
- }
- for (;;) {
- int code = my_scan(sb);
- int ch = sb->sbumpc();
- if (code == -1 && ch == EOF)
- break;
- int n = 0;
- while (ch != EOF && ch != '\n') {
- n++;
- ch = sb->sbumpc();
- };
- if (ch == EOF) {
- cout << "[Unexpected EOF]\n";
- break;
- }
- cout << "Code: " << code << " followed by " << n << " chars\n";
- }
-}
diff --git a/contrib/libio/tests/hounddog.exp b/contrib/libio/tests/hounddog.exp
deleted file mode 100644
index 2060807b4312..000000000000
--- a/contrib/libio/tests/hounddog.exp
+++ /dev/null
@@ -1,7 +0,0 @@
-Code: -1 followed by 6 chars
-Code: 1 followed by 3 chars
-Code: 2 followed by 0 chars
-Code: -1 followed by 3 chars
-Code: 3 followed by 4 chars
-Code: 1 followed by 0 chars
-Code: -1 followed by 3 chars
diff --git a/contrib/libio/tests/hounddog.inp b/contrib/libio/tests/hounddog.inp
deleted file mode 100644
index 370371bc2032..000000000000
--- a/contrib/libio/tests/hounddog.inp
+++ /dev/null
@@ -1,7 +0,0 @@
-hello!
-doggie
-hound
-cat
-hounddog rat
-dog
-foo
diff --git a/contrib/libio/tests/putbackdog.cc b/contrib/libio/tests/putbackdog.cc
deleted file mode 100644
index 0e1ed61f5598..000000000000
--- a/contrib/libio/tests/putbackdog.cc
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-// Test streambuf::sputbackc
-
-#include <iostream.h>
-#include <stdlib.h>
-#include <string.h>
-
-// Read either "dog", "hound", or "hounddog".
-// If "dog" is found, return 1.
-// If "hound" is found, return 2.
-// If "hounddog" is found, return 3.
-// If non of these are found, return -1.
-
-void unget_string(streambuf *sb, char *str, int count)
-{
- for (str += count; -- count >= 0; )
- sb->sputbackc(*--str);
-}
-
-int my_scan(streambuf* sb)
-{
- char buffer[20];
- // Try reading "hounddog":
- int count;
- count = sb->sgetn(buffer, 8);
- if (count == 8 && strncmp(buffer, "hounddog", 8) == 0)
- return 3;
- // No, no "hounddog": Backup to 'fence' ...
- unget_string(sb, buffer, count);
- // ... and try reading "dog":
- count = sb->sgetn(buffer, 3);
- if (count == 3 && strncmp(buffer, "dog", 3) == 0)
- return 1;
- // No, no "dog" either: Backup to 'fence' ...
- unget_string(sb, buffer, count);
- // ... and try reading "hound":
- count = sb->sgetn(buffer, 5);
- if (count == 5 && strncmp(buffer, "hound", 5) == 0)
- return 2;
- // No, no "hound" either: Backup to 'fence' and signal failure.
- unget_string(sb, buffer, count);
- return -1;
-}
-
-int main(int argc, char **argv)
-{
- streambuf *sb = cin.rdbuf();
- if (argc > 1 && strncmp(argv[1], "-b", 2) == 0) {
- streambuf *ret;
- int buffer_size = atoi(&argv[1][2]);
- if (buffer_size == 0)
- ret = sb->setbuf(NULL, 0);
- else
- ret = sb->setbuf(new char[buffer_size], buffer_size);
- if (ret != sb)
- cerr << "Warning: cin.rdbuf()->setbuf failed!\n";
- }
- for (;;) {
- int code = my_scan(sb);
- int ch = sb->sbumpc();
- if (code == -1 && ch == EOF)
- break;
- int n = 0;
- while (ch != EOF && ch != '\n') {
- n++;
- ch = sb->sbumpc();
- };
- if (ch == EOF) {
- cout << "[Unexpected EOF]\n";
- break;
- }
- cout << "Code: " << code << " followed by " << n << " chars\n";
- }
-}
diff --git a/contrib/libio/tests/tFile.cc b/contrib/libio/tests/tFile.cc
deleted file mode 100644
index 42090ff83a30..000000000000
--- a/contrib/libio/tests/tFile.cc
+++ /dev/null
@@ -1,558 +0,0 @@
-/*
-Copyright (C) 1993 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-// This may look like C code, but it is really -*- C++ -*-
-
-/*
- * a few tests for streams
- *
- */
-
-#include <stream.h>
-#include <fstream.h>
-#ifndef _OLD_STREAMS
-#include <strstream.h>
-#include "unistd.h"
-#endif
-#include <SFile.h>
-#include <PlotFile.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-
-const char *tempfile;
-
-class record
-{
-public:
- char c; int i; double d;
-};
-
-ostream& operator<<(ostream& s, record& r)
-{
- return(s << "(i = " << r.i << " c = " << r.c << " d = " << r.d << ")");
-}
-
-void t1()
-{
- char ch;
-
- assert(cout.good());
- assert(cout.writable());
- assert(cout.is_open());
- cout << "Hello, world via cout\n";
- assert(cerr.good());
- assert(cerr.writable());
- assert(cerr.is_open());
- cerr << "Hello, world via cerr\n";
-
- assert(cin.good());
- assert(cin.readable());
- assert(cin.is_open());
-
- cout << "enter a char:"; cin >> ch;
- cout.put('c'); cout.put(' '); cout.put('='); cout.put(' ');
- cout.put('"'); cout.put(ch); cout << '"'; cout << char('\n');
- assert(cin.good());
- assert(cout.good());
-}
-
-void t2()
-{
- int i;
- short h;
- long l;
- float f;
- double d;
- char s[100];
-
- cout << "enter three integers (short, int, long):";
- cin >> h; cin >> i;
- // cin.scan("%ld", &l);
- cin >> l;
- cout << "first = " << h << " via dec = " << dec(h, 8) << "\n";
- cout << "second = " << i << form(" via form = %d = 0%o", i, i);
- cout.form(" via cout.form = %d = 0x%x\n", i, i);
- cout << "third = " << l << " via hex = " << hex(l) << "\n";
- assert(cin.good());
- assert(cout.good());
-
- cout << "enter a float then a double:"; cin >> f; cin >> d;
- cout << "first = " << f << "\n";
- cout << "second = " << d << "\n";
- assert(cin.good());
- assert(cout.good());
-
- cout << "enter 5 characters separated with spaces:"; cin >> s;
- cout << "first = " << s << "\n";
- cin.get(s, 100);
- cout << "rest = " << s << "\n";
-
- assert(cin.good());
-
- cin.width(10);
- cin >> s;
- cin.clear();
- cout << "A 10-character buffer: " << s << endl;
-
- assert(cout.good());
-
-}
-
-void t3()
-{
- char ch;
- cout << "\nMaking streams sout and sin...";
-#ifdef _OLD_STREAMS
- ostream sout("streamfile", io_writeonly, a_create);
-#else
- ofstream sout("streamfile");
-#endif
- assert(sout.good());
- assert(sout.is_open());
- assert(sout.writable());
- assert(!sout.readable());
- sout << "This file has one line testing output streams.\n";
- sout.close();
- assert(!sout.is_open());
-#ifdef _OLD_STREAMS
- istream sin("streamfile", io_readonly, a_useonly);
-#else
- ifstream sin("streamfile");
-#endif
- assert(sin.good());
- assert(sin.is_open());
- assert(!sin.writable());
- assert(sin.readable());
- cout << "contents of file:\n";
- while(sin >> ch) cout << ch;
- sin.close();
- assert(!sin.is_open());
-}
-
-
-void t4()
-{
- char s[100];
- char ch;
- int i;
-
- cout << "\nMaking File tf ... ";
-#ifdef _OLD_STREAMS
- File tf(tempfile, io_readwrite, a_create);
-#else
- fstream tf(tempfile, ios::in|ios::out|ios::trunc);
-#endif
- assert(tf.good());
- assert(tf.is_open());
- assert(tf.writable());
- assert(tf.readable());
- strcpy(s, "This is the first and only line of this file.\n");
-#ifdef _OLD_STREAMS
- tf.put(s);
- tf.seek(0);
-#else
- tf << s;
- tf.rdbuf()->seekoff(0, ios::beg);
-#endif
- tf.get(s, 100);
- assert(tf.good());
- cout << "first line of file:\n" << s << "\n";
- cout << "next char = ";
- tf.get(ch);
- cout << (int)ch;
- cout.put('\n');
- assert(ch == 10);
- strcpy(s, "Now there is a second line.\n");
- cout << "reopening tempfile, appending: " << s;
-#ifdef _OLD_STREAMS
- tf.open(tf.name(), io_appendonly, a_use);
-#else
- tf.close();
- tf.open(tempfile, ios::app);
-#endif
- assert(tf.good());
- assert(tf.is_open());
- assert(tf.writable());
- assert(!tf.readable());
-#ifdef _OLD_STREAMS
- tf.put(s);
- assert(tf.good());
- tf.open(tf.name(), io_readonly, a_use);
-#else
- tf << s;
- assert(tf.good());
- tf.close();
- tf.open(tempfile, ios::in);
-#endif
- tf.raw();
- assert(tf.good());
- assert(tf.is_open());
- assert(!tf.writable());
- assert(tf.readable());
- cout << "First 10 chars via raw system read after reopen for input:\n";
- read(tf.filedesc(), s, 10);
- assert(tf.good());
- for (i = 0; i < 10; ++ i)
- cout.put(s[i]);
- lseek(tf.filedesc(), 5, 0);
- cout << "\nContents after raw lseek to pos 5:\n";
- while ( (tf.get(ch)) && (cout.put(ch)) );
-#ifdef _OLD_STREAMS
- tf.remove();
-#else
- tf.close();
- unlink((char*)tempfile);
-#endif
- assert(!tf.is_open());
-}
-
-void t5()
-{
- record r;
- int i;
- cout << "\nMaking SFile rf...";
-#ifdef _OLD_STREAMS
- SFile rf("recfile", sizeof(record), io_readwrite, a_create);
-#else
- SFile rf("recfile", sizeof(record), ios::in|ios::out|ios::trunc);
-#endif
- assert(rf.good());
- assert(rf.is_open());
- assert(rf.writable());
- assert(rf.readable());
- for (i = 0; i < 10; ++i)
- {
- r.c = i + 'a';
- r.i = i;
- r.d = (double)(i) / 1000.0;
- rf.put(&r);
- }
- assert(rf.good());
- cout << "odd elements of file in reverse order:\n";
- for (i = 9; i >= 0; i -= 2)
- {
- rf[i].get(&r);
- assert(r.c == i + 'a');
- assert(r.i == i);
- cout << r << "\n";
- }
- assert(rf.good());
-#ifdef _OLD_STREAMS
- rf.remove();
-#else
- rf.close();
- unlink("recfile");
-#endif
- assert(!rf.is_open());
-}
-
-void t6()
-{
- cout << "\nMaking PlotFile pf ...";
- static const char plot_name[] = "plot.out";
- PlotFile pf(plot_name);
- assert(pf.good());
- assert(pf.is_open());
- assert(pf.writable());
- assert(!pf.readable());
- pf.move(10,10);
- pf.label("Test");
- pf.circle(300,300,200);
- pf.line(100, 100, 500, 500);
- assert(pf.good());
-#ifdef _OLD_STREAMS
- cout << "(You may delete or attempt to plot " << pf.name() << ")\n";
-#else
- cout << "(You may delete or attempt to plot " << plot_name << ")\n";
-#endif
-}
-
-void t7()
-{
- char ch;
- static char t7_line1[] = "This is a string-based stream.\n";
- static char t7_line2[] = "With two lines.\n";
- char mybuf[60];
- char *bufp;
-#ifdef _OLD_STREAMS
- cout << "creating string-based ostream...\n";
- ostream strout(60, mybuf);
-#else
- cout << "creating ostrstream...\n";
- ostrstream strout(mybuf, 60);
-#endif
- assert(strout.good());
- assert(strout.writable());
- strout << t7_line1 << t7_line2 << ends;
- assert(strout.good());
- cout << "with contents:\n";
- bufp = strout.str();
- assert(bufp == mybuf);
- strout.rdbuf()->freeze(0); /* Should be a no-op */
- cout << mybuf;
-#ifdef _OLD_STREAMS
- cout << "using it to create string-based istream...\n";
- istream strin(strlen(mybuf), mybuf);
-#else
- cout << "using it to create istrstream...\n";
- istrstream strin(mybuf, strlen(mybuf));
-#endif
- assert(strin.good());
- assert(strin.readable());
- cout << "with contents:\n";
-#ifndef _OLD_STREAMS
- char line[100];
- strin.getline(line, 100);
- int line1_len = strlen(t7_line1);
- assert(strin.tellg() == line1_len);
- int line_len = strin.gcount();
- assert(line_len == line1_len);
- cout.write(line, line1_len - 1);
- cout << endl;
-#endif
- while (strin.get(ch)) cout.put(ch);
-
- strstream str1;
- strstream str2;
- str1 << "Testing string-based stream using strstream.\n";
- str1.seekg(0);
- for (;;) {
- int i = str1.get();
- if (i == EOF)
- break;
- str2 << (char)i;
- }
- str2 << ends;
- cout << str2.str();
-
- // This should make it overflow.
- strout << t7_line1;
- assert (strout.bad());
-}
-
-void t8()
-{
-#ifdef _OLD_STREAMS
- cout << "\nThe following file open should generate error message:";
- cout.flush();
- File ef("shouldnotexist", io_readonly, a_useonly);
-#else
- ifstream ef("shouldnotexist");
-#endif
- assert(!ef.good());
- assert(!ef.is_open());
-}
-
-void t9()
-{
- char ch;
- static char ffile_name[] = "ftmp";
- {
- cout << "\nMaking filebuf streams fout and fin...";
- filebuf foutbuf;
-#ifdef _OLD_STREAMS
- foutbuf.open(ffile_name, output);
-#else
- foutbuf.open(ffile_name, ios::out);
-#endif
- ostream fout(&foutbuf);
- assert(fout.good());
- assert(fout.is_open());
- assert(fout.writable());
- assert(!fout.readable());
- fout << "This file has one line testing output streams.\n";
-#ifdef _OLD_STREAMS
- fout.close();
- assert(!fout.is_open());
-#endif
- }
- filebuf finbuf;
-#ifdef _OLD_STREAMS
- finbuf.open(ffile_name, input);
-#else
- finbuf.open(ffile_name, ios::in);
-#endif
- istream fin(&finbuf);
- assert(fin.good());
- assert(fin.is_open());
- assert(!fin.writable());
- assert(fin.readable());
- cout << "contents of file:\n";
- while(fin >> ch) cout << ch;
-#ifndef _OLD_STREAMS
- cout << '\n';
-#endif
- fin.close();
- assert(!fin.is_open());
-}
-
-void t10()
-{
- int fileCnt = 3;
- char *file_name_pattern = "ftmp%d";
- char current_file_name[50];
- ifstream inFile;
- ofstream outFile;
- char c;
- int i;
-
- cout << '\n';
-
- // Write some files.
- for (i=0; i < fileCnt; i++) {
- sprintf(current_file_name, file_name_pattern, i);
- outFile.open(current_file_name, ios::out);
-
- if ( outFile.fail() )
- cerr << "File " << current_file_name
- << " can't be opened for output" << endl;
- else {
- outFile << "This is line 1 of " << current_file_name << '\n';
- outFile << "This is line 2 of " << current_file_name << endl;
- outFile.close();
- }
- }
-
- // Now read the files back in, and write then out to cout.
- for (i=0; i < fileCnt; i++) {
- sprintf(current_file_name, file_name_pattern, i);
- inFile.open(current_file_name, ios::in);
-
-
- if ( inFile.fail() )
- cerr << "File " << current_file_name
- << " can't be opened for input" << endl;
- else {
- while ( inFile.get (c))
- cout << c;
- cout << endl;
- inFile.close();
- }
- }
-}
-
-// Test form
-
-void t11()
-{
- int count1, count2;
- cout.form("%.2f+%.2f = %4.3e\n%n", 5.5, 6.25, 5.5+6.25, &count1);
- char *text = "Previous line has12345";
- char text_length_to_use = strlen(text) - 5;
- count2 = cout.rdbuf()->form("%-*.*s%3g characters\n",
- text_length_to_use + 1,
- text_length_to_use,
- text,
- (double)(count1-1));
- cout.form("%-*.*s%+d characters\n%n",
- text_length_to_use + 1, text_length_to_use, text,
- count2-1, &count1);
- assert(count1 == 33);
-}
-
-static void
-show_int (long val)
-{
- cout.setf(ios::showbase);
- cout << dec; cout.width (8); cout << val << "(dec) = ";
- cout << hex; cout.width (8); cout << (0xFFFF & val) << "(hex) = ";
- cout << oct; cout.width (8);
- cout << (0xFFFF & val) << "(oct) [showbase on]\n";
- cout.unsetf(ios::showbase);
- cout << dec; cout.width (8); cout << val << "(dec) = ";
- cout << hex; cout.width (8); cout << (0xFFFF & val) << "(hex) = ";
- cout << oct; cout.width (8);
- cout << (0xFFFF & val) << "(oct) [showbase off]\n";
-}
-
-void
-t12 ()
-{
- ios::fmtflags old_flags = cout.setf(ios::showpos);
- int fill = cout.fill('_');
- cout.unsetf(ios::uppercase);
- cout.setf(ios::internal, ios::adjustfield);
- show_int(34567);
- show_int(-34567);
- cout.setf(ios::right, ios::adjustfield);
- show_int(0);
- cout.setf(ios::uppercase);
- cout.unsetf(ios::showpos);
- show_int(34567);
- cout.setf(ios::left, ios::adjustfield);
- show_int(-34567);
- cout.fill(fill);
- show_int(0);
- cout.setf(old_flags,
- ios::adjustfield|ios::basefield
- |ios::showbase|ios::showpos|ios::uppercase);
-}
-
-main(int argc, char **argv)
-{
- char temp [1024] = "tempfile";
-
- if (argc > 1 && strncmp(argv[1], "-b", 2) == 0) {
- streambuf *sb = cout.rdbuf();
- streambuf *ret;
- int buffer_size = atoi(&argv[1][2]);
- if (buffer_size == 0)
- ret = sb->setbuf(NULL, 0);
- else
- ret = sb->setbuf(new char[buffer_size], buffer_size);
- if (ret != sb)
- cerr << "Warning: cout.rdbuf()->setbuf failed!\n";
-
- strncpy (&temp [8], &argv[1][2], 1000);
- temp [1008] = '\0';
- }
- tempfile = temp;
- t1();
- t2();
- t3();
- t4();
- t5();
- t6();
- t7();
- t9();
- t8();
- t10();
- t11();
- t12();
-
- cout << "Final names & states:\n";
-#ifdef _OLD_STREAMS
- cout << "cin: " << cin.name() << "\t" << cin.rdstate() << "\n";
- cout << "cout: " << cout.name() << "\t" << cout.rdstate() << "\n";
- cout << "cerr: " << cerr.name() << "\t" << cerr.rdstate() << "\n";
-#else
- cout << "cin: " << "(stdin)" << "\t" << cin.rdstate() << "\n";
- cout << "cout: " << "(stdout)" << "\t" << cout.rdstate() << "\n";
- cout << "cerr: " << "(stderr)" << "\t" << cerr.rdstate() << "\n";
-#endif
- cout << "\nend of test.\n";
-}
diff --git a/contrib/libio/tests/tFile.exp b/contrib/libio/tests/tFile.exp
deleted file mode 100644
index 154cd24dc0bb..000000000000
--- a/contrib/libio/tests/tFile.exp
+++ /dev/null
@@ -1,75 +0,0 @@
-Hello, world via cout
-Hello, world via cerr
-enter a char:c = "a"
-enter three integers (short, int, long):first = 123 via dec = 123
-second = 4567 via form = 4567 = 010727 via cout.form = 4567 = 0x11d7
-third = 89012 via hex = 15bb4
-enter a float then a double:first = 123.456
-second = -0.012
-enter 5 characters separated with spaces:first = 1
-rest = 2 3 4 5
-A 10-character buffer: abcdefghi
-
-Making streams sout and sin...contents of file:
-Thisfilehasonelinetestingoutputstreams.
-Making File tf ... first line of file:
-This is the first and only line of this file.
-next char = 10
-reopening tempfile, appending: Now there is a second line.
-First 10 chars via raw system read after reopen for input:
-This is th
-Contents after raw lseek to pos 5:
-is the first and only line of this file.
-Now there is a second line.
-
-Making SFile rf...odd elements of file in reverse order:
-(i = 9 c = j d = 0.009)
-(i = 7 c = h d = 0.007)
-(i = 5 c = f d = 0.005)
-(i = 3 c = d d = 0.003)
-(i = 1 c = b d = 0.001)
-
-Making PlotFile pf ...(You may delete or attempt to plot plot.out)
-creating ostrstream...
-with contents:
-This is a string-based stream.
-With two lines.
-using it to create istrstream...
-with contents:
-This is a string-based stream.
-With two lines.
-Testing string-based stream using strstream.
-
-Making filebuf streams fout and fin...contents of file:
-Thisfilehasonelinetestingoutputstreams.
-
-This is line 1 of ftmp0
-This is line 2 of ftmp0
-
-This is line 1 of ftmp1
-This is line 2 of ftmp1
-
-This is line 1 of ftmp2
-This is line 2 of ftmp2
-
-5.50+6.25 = 1.175e+01
-Previous line has 21 characters
-Previous line has +32 characters
-+__34567(dec) = 0x__8707(hex) = _0103407(oct) [showbase on]
-+__34567(dec) = ____8707(hex) = __103407(oct) [showbase off]
--__34567(dec) = 0x__78f9(hex) = __074371(oct) [showbase on]
--__34567(dec) = ____78f9(hex) = ___74371(oct) [showbase off]
-______+0(dec) = _____0x0(hex) = _______0(oct) [showbase on]
-______+0(dec) = _______0(hex) = _______0(oct) [showbase off]
-___34567(dec) = __0X8707(hex) = _0103407(oct) [showbase on]
-___34567(dec) = ____8707(hex) = __103407(oct) [showbase off]
--34567__(dec) = 0X78F9__(hex) = 074371__(oct) [showbase on]
--34567__(dec) = 78F9____(hex) = 74371___(oct) [showbase off]
-0 (dec) = 0X0 (hex) = 0 (oct) [showbase on]
-0 (dec) = 0 (hex) = 0 (oct) [showbase off]
-Final names & states:
-cin: (stdin) 0
-cout: (stdout) 0
-cerr: (stderr) 0
-
-end of test.
diff --git a/contrib/libio/tests/tFile.inp b/contrib/libio/tests/tFile.inp
deleted file mode 100644
index 5b821ef072be..000000000000
--- a/contrib/libio/tests/tFile.inp
+++ /dev/null
@@ -1,5 +0,0 @@
-a
-123 4567 89012
-123.456 -1.2e-2
-1 2 3 4 5
-abcdefghijklmnop
diff --git a/contrib/libio/tests/tfformat.c b/contrib/libio/tests/tfformat.c
deleted file mode 100644
index 29bac8b6b792..000000000000
--- a/contrib/libio/tests/tfformat.c
+++ /dev/null
@@ -1,4181 +0,0 @@
-#ifdef TEST_LIBIO
-#include <iostdio.h>
-#else
-#ifdef __cplusplus
-#include <strstream.h>
-#else
-#include <stdio.h>
-#endif
-#endif /* !TEST_LIBIO */
-
-/* Tests taken from Cygnus C library. */
-
-typedef struct
-{
- int line;
- double value;
- char *result;
- char *format_string;
-} sprint_double_type;
-
-sprint_double_type sprint_doubles[] =
-{
-__LINE__, 30.3, "< +30.3>", "<%+15.10g>",
-__LINE__, 10.0, "<10.00>", "<%5.2f>",
-
-__LINE__, 1.002121970718271e+05, "100212.19707 ", "%0-15.5f",
-__LINE__, -1.002121970718271e+05, "-100212.19707 ", "%0-15.5f",
-__LINE__, 1.002121970718271e+05, "000100212.19707", "%015.5f",
-__LINE__, -1.002121970718271e+05, "-00100212.19707", "%015.5f",
-__LINE__, 1.002121970718271e+05, "+00100212.19707", "%+015.5f",
-__LINE__, -1.002121970718271e+05, "-00100212.19707", "%+015.5f",
-__LINE__, 1.002121970718271e+05, " 00100212.19707", "% 015.5f",
-__LINE__, -1.002121970718271e+05, "-00100212.19707", "% 015.5f",
-__LINE__, 1.002121970718271e+05, "+100212.19707 ", "%+-15.5f",
-__LINE__, -1.002121970718271e+05, "-100212.19707 ", "%+-15.5f",
-
-__LINE__, -1.002121970718271e+29, "-1.0E+29", "%.1E",
-__LINE__, -1.002126048612756e-02, "-1.002126E-02", "%+#E",
-__LINE__, -1.002653755271637e+00, "-1.00265", "%G",
-__LINE__, -1.003238744365917e-23, "-0.00", "%4.2f",
-__LINE__, -1.005084840877781e-29, " -0", "%4.f",
-__LINE__, -1.005362549674427e+01, "-10.0536", "%#g",
-__LINE__, -1.005915042991691e-17, "-1.00592E-17", "%G",
-__LINE__, -1.007829874228503e-18, "-1.00783e-18", "%.7g",
-__LINE__, -1.007829874228503e-18, "-1.007830e-18", "%#.7g",
-__LINE__, -1.009390937771849e+15, "-1009390937771848.628657", "%+f",
-__LINE__, -1.010679382726182e-29, "-0.0000000", "%.7f",
-__LINE__, -1.010691853346650e+13, "-10106918533466.497934", "%+f",
-__LINE__, -1.013412912122286e-22, "-1.01E-22", "%.2E",
-__LINE__, -1.019269582113858e-25, " -0", "%4.0f",
-__LINE__, -1.019886033368556e+24, "-1.019886E+24", "%+.7G",
-__LINE__, -1.021037413548719e+02, "-102.103741", "%f",
-__LINE__, -1.023833576089065e+26, "-1.023834E+26", "%+E",
-__LINE__, -1.024736652408627e+10, "-10247366524.086265", "%+f",
-__LINE__, -1.025439198495476e+09, "-1.02544e+09", "%+g",
-__LINE__, -1.027080247585776e-04, "-0.0001027", "%6.7f",
-__LINE__, -1.028096307262016e+18, "-1.0281E+18", "%3G",
-__LINE__, -1.029604290697901e-02, "-0.010296", "%g",
-__LINE__, -1.034347730570491e+16, "-10343477305704908.975059", "%+f",
-__LINE__, -1.034663325049286e+22, "-1.0E+22", "%#.1E",
-__LINE__, -1.034843152721857e-14, " -0", "%6.f",
-__LINE__, -1.036082122299529e-29, "-1.04e-29", "%4.3g",
-__LINE__, -1.037213662365954e-09, "-1e-09", "%3.e",
-__LINE__, -1.038563976775690e-12, "-0.000000", "%f",
-__LINE__, -1.040910158681323e-02, "-0.0104091", "%+G",
-__LINE__, -1.044680094714482e-20, "-1.04468E-20", "%G",
-__LINE__, -1.044990054091126e+24, "-1.044990E+24", "%+E",
-__LINE__, -1.045693871096982e+11, "-1.045694e+11", "%+e",
-__LINE__, -1.045714133591312e-04, "-0.000104571", "%+#3g",
-__LINE__, -1.046215079103016e-15, "-1.04622e-15", "%g",
-__LINE__, -1.046285293993789e-18, "-1.04629E-18", "%+4G",
-__LINE__, -1.046306092899333e-06, "-0.00", "%0.2f",
-__LINE__, -1.047308973649206e-22, "-1.05E-22", "%+1.3G",
-__LINE__, -1.047369032507755e+01, "-1.047369E+01", "%E",
-__LINE__, -1.048986365562919e-21, "-1.05E-21", "%+.2E",
-__LINE__, -1.049530193156793e-17, "-1.04953E-17", "%+G",
-__LINE__, -1.050073419263768e+25, "-1.05007e+25", "%g",
-__LINE__, -1.051739652002504e-28, "-0.000000", "%+f",
-__LINE__, -1.054493420082636e+21, "-1.0545e+21", "%#5.4e",
-__LINE__, -1.055867291029098e+18, "-1.05587e+18", "%g",
-__LINE__, -1.056514389757866e-16, "-1.05651E-16", "%5.6G",
-__LINE__, -1.057180924868704e+15, "-1057180924868704", "%4.f",
-__LINE__, -1.058455468395683e-23, "-1.05846e-23", "%g",
-__LINE__, -1.062560982393212e+08, "-1.06256e+08", "%g",
-__LINE__, -1.063365829241138e-10, "-1.063366e-10", "%+e",
-__LINE__, -1.063568908667280e-19, "-1.06357E-19", "%+G",
-__LINE__, -1.063734263253492e-13, "-0.000000", "%0f",
-__LINE__, -1.064472689765495e-13, "-1E-13", "%4.0G",
-__LINE__, -1.067192610000129e-25, "-1.06719E-25", "%G",
-__LINE__, -1.068401334996592e-12, "-0.0000000", "%+.7f",
-__LINE__, -1.069012628653724e-13, "-1.069013E-13", "%+.7G",
-__LINE__, -1.069451976810790e+16, "-10694519768107904.056365", "%f",
-__LINE__, -1.069568935323556e+17, "-1.06957e+17", "%g",
-__LINE__, -1.071351044854107e-29, "-1.07135e-29", "%g",
-__LINE__, -1.072274197526185e-21, "-1E-21", "%1.G",
-__LINE__, -1.073875921752995e+23, "-1E+23", "%5.E",
-__LINE__, -1.074835151152265e-12, "-1.0748e-12", "%1.5g",
-__LINE__, -1.075171047088241e-19, "-1.07517E-19", "%#G",
-__LINE__, -1.076258826412760e+22, "-1.076259e+22", "%+e",
-__LINE__, -1.076365103160401e+06, "-1.07637E+06", "%+4.6G",
-__LINE__, -1.076817750454633e+08, "-1e+08", "%4.g",
-__LINE__, -1.078615405755685e-30, "-1e-30", "%4.g",
-__LINE__, -1.078629622917468e-25, "-1.078630e-25", "%e",
-__LINE__, -1.079352432833170e+11, "-107935243283", "%+2.f",
-__LINE__, -1.081431147440215e+16, "-10814311474402147.439378", "%+f",
-__LINE__, -1.083042116905339e-16, "-1.083e-16", "%.5g",
-__LINE__, -1.085351710708553e-10, "-1.085e-10", "%1.4g",
-__LINE__, -1.085796045618276e+07, "-1.085796e+07", "%e",
-__LINE__, -1.087398259981007e+22, "-1.0874e+22", "%g",
-__LINE__, -1.087986044402224e-11, "-1.087986e-11", "%e",
-__LINE__, -1.090451848762709e-02, "-1.090452e-02", "%e",
-__LINE__, -1.091463236899737e+11, "-1.091463E+11", "%#E",
-__LINE__, -1.091617921737384e-29, "-1.09162e-29", "%3g",
-__LINE__, -1.092049328579047e-17, "-1.092049E-17", "%E",
-__LINE__, -1.093647615472090e+06, "-1093647.61547", "%6.5f",
-__LINE__, -1.094133175602384e-08, "-1.1E-08", "%0.1E",
-__LINE__, -1.095397916728214e-23, "-1e-23", "%6.e",
-__LINE__, -1.098958790437321e+02, "-109.895879", "%+#f",
-__LINE__, -1.100194638181594e-20, "-1.100195e-20", "%e",
-__LINE__, -1.102174253534260e+05, "-1.1e+05", "%2.3g",
-__LINE__, -1.102890180316350e-12, "-1.10289e-12", "%+g",
-__LINE__, -1.105582337418378e+00, "-1.11", "%3.3g",
-__LINE__, -1.110515122647056e+04, "-1.E+04", "%#0.G",
-__LINE__, -1.111365895262625e-18, "-1e-18", "%0.g",
-__LINE__, -1.112010622677495e+04, "-11120.1", "%g",
-__LINE__, -1.112580043156699e-23, "-1.11258e-23", "%1g",
-__LINE__, -1.112829057091303e+08, "-1.11283e+08", "%+2g",
-__LINE__, -1.115019046200472e+18, "-1.1150190e+18", "%+#.7e",
-__LINE__, -1.118078332268016e-13, "-1.12E-13", "%1.3G",
-__LINE__, -1.119113571963886e+08, "-1.119114e+08", "%e",
-__LINE__, -1.120102397563448e-15, "-1.12e-15", "%.4g",
-__LINE__, -1.120707480791434e-19, "-1.12071e-19", "%g",
-__LINE__, -1.124243676139007e-07, "-0.000000", "%f",
-__LINE__, -1.125025214608798e+15, "-1.12503E+15", "%0G",
-__LINE__, -1.126074395136447e+06, "-1E+06", "%+.0G",
-__LINE__, -1.127203019940870e-06, "-0.000001", "%+#7f",
-__LINE__, -1.130577648480677e+01, "-1.130578e+01", "%e",
-__LINE__, -1.131469694425240e-11, "-1.13147e-11", "%#0.6g",
-__LINE__, -1.132225023239752e+02, "-113.223", "%G",
-__LINE__, -1.133702113050128e+20, "-1E+20", "%+3.E",
-__LINE__, -1.135529466224404e-13, "-1.13553e-13", "%#g",
-__LINE__, -1.137587210063004e+21, "-1e+21", "%.1g",
-__LINE__, -1.140765637106361e-21, "-1.1e-21", "%+.1e",
-__LINE__, -1.141182595083699e-18, "-0.000000", "%f",
-__LINE__, -1.141695709120972e+00, "-1.1417", "%3G",
-__LINE__, -1.143199141708028e+18, "-1143199141708027833", "%2.f",
-__LINE__, -1.146712902056139e+21, "-1146712902056139071760.298975", "%f",
-__LINE__, -1.146837903839073e-02, " -0.0", "%+5.1f",
-__LINE__, -1.147363016107446e+10, "-1.14736e+10", "%+7g",
-__LINE__, -1.149575523465052e+20, "-114957552346505220697.28140", "%+.5f",
-__LINE__, -1.152748955392589e+13, "-1.15275E+13", "%G",
-__LINE__, -1.152751106015483e-17, "-1E-17", "%+3.E",
-__LINE__, -1.155539139258226e-18, "-1.2e-18", "%+.2g",
-__LINE__, -1.157089280563492e+20, "-1.15709e+20", "%g",
-__LINE__, -1.161217745859779e+19, "-1.161218E+19", "%E",
-__LINE__, -1.162293536734798e+10, "-11622935367.347980", "%f",
-__LINE__, -1.162629909468603e+20, "-1.16E+20", "%.3G",
-__LINE__, -1.164979155838631e+24, "-1.16498E+24", "%G",
-__LINE__, -1.165103052644816e-20, " -1e-20", "%+7.g",
-__LINE__, -1.166448459023264e-08, "-0.000000", "%f",
-__LINE__, -1.167694506705309e+28, "-1e+28", "%.1g",
-__LINE__, -1.169901754818745e-28, "-0.000000", "%+f",
-__LINE__, -1.170330336216446e+08, " -1e+08", "%7.g",
-__LINE__, -1.170946623214213e-17, "-1.17095E-17", "%G",
-__LINE__, -1.174581596799302e+27, "-1.174582e+27", "%+e",
-__LINE__, -1.174763473995155e-28, "-1E-28", "%.1G",
-__LINE__, -1.175885640508038e-23, "-1E-23", "%+.0E",
-__LINE__, -1.177268411775439e-05, "-0.000012", "%#2.6f",
-__LINE__, -1.177739669428001e-30, "-1.17774E-30", "%G",
-__LINE__, -1.178059639880544e-02, "-0.0117806", "%+.7G",
-__LINE__, -1.178793300854446e-13, "-1.2E-13", "%+#0.2G",
-__LINE__, -1.179629345138058e-04, "-0.000118", "%0.3g",
-__LINE__, -1.180730292213358e-25, "-1.18073e-25", "%g",
-__LINE__, -1.180766261654697e+02, "-118.077", "%3g",
-__LINE__, -1.181880261069391e-29, "-1.181880e-29", "%+#e",
-__LINE__, -1.183752810063514e-09, "-1.18375e-09", "%#g",
-__LINE__, -1.184191742443406e-21, "-1.184192e-21", "%e",
-__LINE__, -1.184859760488406e-26, "-1.18486E-26", "%G",
-__LINE__, -1.187276828720072e-29, "-1.18728E-29", "%G",
-__LINE__, -1.187992907205195e-04, "-1.187993E-04", "%E",
-__LINE__, -1.190586192763405e-28, "-1.E-28", "%#1.E",
-__LINE__, -1.192104053032086e+02, "-119.21", "%G",
-__LINE__, -1.192917884333569e+26, "-1.192918E+26", "%E",
-__LINE__, -1.195900753509801e+22, "-1.1959e+22", "%g",
-__LINE__, -1.196559413116537e-28, "-0.000000", "%6.6f",
-__LINE__, -1.197534588732952e+12, "-1.19753e+12", "%#g",
-__LINE__, -1.200279514790649e-25, "-0.0000", "%0.4f",
-__LINE__, -1.203806667944635e+10, "-1.2038067E+10", "%5.7E",
-__LINE__, -1.204344885974736e+07, "-1.204E+07", "%#2.4G",
-__LINE__, -1.205668007693083e+00, "-1.20567", "%g",
-__LINE__, -1.205898515218947e-11, "-1.2059e-11", "%+g",
-__LINE__, -1.206787414909373e-05, "-1.2e-05", "%2.2g",
-__LINE__, -1.207905830366447e+15, "-1.207906e+15", "%6.7g",
-__LINE__, -1.208067010597729e-17, "-1.208067e-17", "%5e",
-__LINE__, -1.210189135822574e+01, "-12", "%+2.0f",
-__LINE__, -1.211560695948122e+10, "-1.21156e+10", "%+g",
-__LINE__, -1.214003025273234e-18, "-1.214e-18", "%+g",
-__LINE__, -1.214096815259005e+17, "-121409681525900459.142520", "%f",
-__LINE__, -1.214699041716797e-14, "-1.2147E-14", "%G",
-__LINE__, -1.215061611919443e+14, "-121506161191944.306310", "%+#f",
-__LINE__, -1.217491221065185e+27, "-1.21749e+27", "%g",
-__LINE__, -1.218538401534388e-11, "-1.218538e-11", "%#e",
-__LINE__, -1.218810085883466e+16, "-1e+16", "%+.1g",
-__LINE__, -1.219422688169801e+08, "-1.219423e+08", "%e",
-__LINE__, -1.220473194407651e-14, "-1.2205E-14", "%1.5G",
-__LINE__, -1.220824440193375e-02, "-0.012208", "%4f",
-__LINE__, -1.221520240637007e+13, "-1.221520E+13", "%1E",
-__LINE__, -1.221894719843486e+29, "-1.22189E+29", "%G",
-__LINE__, -1.223020108610281e+25, "-1.22302E+25", "%G",
-__LINE__, -1.223203206227728e-02, "-0.012232", "%G",
-__LINE__, -1.225661737076919e-15, "-1.22566E-15", "%G",
-__LINE__, -1.228147221003795e-08, "-1.22815E-08", "%G",
-__LINE__, -1.228298534591771e+20, "-1.22830E+20", "%#G",
-__LINE__, -1.228469080229780e-02, "-0.012285", "%0f",
-__LINE__, -1.229161950699222e-09, "-1e-09", "%0.e",
-__LINE__, -1.231294820136559e-17, "-1.231295E-17", "%1.7G",
-__LINE__, -1.232588663406698e-21, "-1E-21", "%+0.G",
-__LINE__, -1.233381256982191e-26, "-0.000000", "%f",
-__LINE__, -1.233435864835578e+14, "-1.23344e+14", "%#g",
-__LINE__, -1.237409567806099e-25, "-1.23741E-25", "%#G",
-__LINE__, -1.238244697758558e-02, "-1.238245e-02", "%7e",
-__LINE__, -1.239393163123284e+26, "-1.23939e+26", "%+g",
-__LINE__, -1.240484781756132e-18, "-1E-18", "%4.E",
-__LINE__, -1.241420286838750e+23, "-1E+23", "%2.E",
-__LINE__, -1.243781122052343e-18, "-1.243781e-18", "%+e",
-__LINE__, -1.244421506844779e+07, "-1.244422E+07", "%+6E",
-__LINE__, -1.245754054764741e-21, "-1e-21", "%5.0g",
-__LINE__, -1.245992228426733e-24, "-0.000000", "%f",
-__LINE__, -1.246498277739883e-12, "-0.0000000", "%5.7f",
-__LINE__, -1.247130891343776e-18, "-1.24713E-18", "%G",
-__LINE__, -1.247309461703025e-03, "-0.0012473", "%#5.5G",
-__LINE__, -1.248139162966407e-29, "-1.e-29", "%+#6.g",
-__LINE__, -1.249756153623776e+08, "-1.249756e+08", "%e",
-__LINE__, -1.250899983565585e-10, "-1.2509e-10", "%5g",
-__LINE__, -1.250957368798327e+19, "-1.25096E+19", "%0G",
-__LINE__, -1.252630814464822e-02, "-0.012526", "%+f",
-__LINE__, -1.253076368257011e-28, "-0.000000", "%f",
-__LINE__, -1.254243507039370e+01, "-1.254244e+01", "%e",
-__LINE__, -1.257605614492298e-12, "-1.257606E-12", "%6.7G",
-__LINE__, -1.258041911573120e+06, "-1258041.911573", "%+f",
-__LINE__, -1.261670983426507e-25, "-0.00", "%.2f",
-__LINE__, -1.263216883336562e-14, "-1.26322e-14", "%g",
-__LINE__, -1.266846944498751e-15, "-1e-15", "%0.g",
-__LINE__, -1.266977908502326e+06, "-1266978", "%+1.f",
-__LINE__, -1.267006162870084e-23, "-1.267006e-23", "%e",
-__LINE__, -1.269144609375931e+01, "-1.269145e+01", "%+e",
-__LINE__, -1.269458714257904e+25, "-1.26946E+25", "%G",
-__LINE__, -1.276697325772662e-02, "-0.0128", "%7.3G",
-__LINE__, -1.278855081807602e+15, "-1278855081807601.87891", "%#0.5f",
-__LINE__, -1.278966821639612e+20, "-1.278967E+20", "%3E",
-__LINE__, -1.281942705258106e+03, "-1281.94", "%+G",
-__LINE__, -1.282331291499203e+14, "-128233129149920.266343", "%+f",
-__LINE__, -1.285125739341808e-28, "-1.28513e-28", "%g",
-__LINE__, -1.285700693704978e+11, "-1.285701E+11", "%E",
-__LINE__, -1.286574096459251e+28, "-1.287E+28", "%6.4G",
-__LINE__, -1.287967889247240e+03, "-1287.97", "%G",
-__LINE__, -1.288913808801319e-27, "-1.3e-27", "%7.1e",
-__LINE__, -1.289147517760377e-18, "-1.289148E-18", "%E",
-__LINE__, -1.289355006600107e+23, "-1.28936E+23", "%+G",
-__LINE__, -1.291232014623979e+01, "-1.29123E+01", "%+.5E",
-__LINE__, -1.293658562875966e-18, "-1.29366e-18", "%+g",
-__LINE__, -1.294982911983638e-19, "-1.29498E-19", "%#G",
-__LINE__, -1.296123363481695e-13, "-1.296123E-13", "%E",
-__LINE__, -1.296632862070602e-20, "-1.29663e-20", "%+g",
-__LINE__, -1.297801639022777e+23, "-129780163902277735132884.11777", "%#0.5f",
-__LINE__, -1.297886574534611e+16, "-1.297887e+16", "%+e",
-__LINE__, -1.300588216308401e+11, "-1.30e+11", "%.2e",
-__LINE__, -1.301296100909062e-10, "-1.3013e-10", "%+g",
-__LINE__, -1.303144244306468e-07, "-1.303144E-07", "%E",
-__LINE__, -1.304096315024042e-20, "-1.3041E-20", "%+G",
-__LINE__, -1.304817970675085e+16, "-1.304818E+16", "%+E",
-__LINE__, -1.304870304632683e-15, " -1e-15", "%7.g",
-__LINE__, -1.305213586757638e-18, "-1.30521e-18", "%g",
-__LINE__, -1.306880734910465e-22, "-1.306881E-22", "%E",
-__LINE__, -1.308964092631446e-23, "-1.30896e-23", "%g",
-__LINE__, -1.312070555198201e+26, "-131207055519820126043839537", "%+7.f",
-__LINE__, -1.312511609151056e-30, "-1.312512E-30", "%#E",
-__LINE__, -1.313087359008389e-23, "-0.000000", "%+f",
-__LINE__, -1.316948423042059e-02, "-1.316948E-02", "%+E",
-__LINE__, -1.317080882577385e+29, "-1.317E+29", "%+.4G",
-__LINE__, -1.317514598984346e+24, "-1.317515e+24", "%e",
-__LINE__, -1.317817551125923e-21, "-1.31782E-21", "%+G",
-__LINE__, -1.319603985988120e+29, "-131960398598811989856471882376.354188", "%f",
-__LINE__, -1.328850458671907e+06, "-1e+06", "%.0e",
-__LINE__, -1.328945346449817e-23, "-1.328945e-23", "%+e",
-__LINE__, -1.330146584094221e-08, "-1e-08", "%+5.g",
-__LINE__, -1.332609617892115e+00, "-1.33261", "%2.7G",
-#ifndef __PCCNECV70__
-__LINE__, -1.332751724965715e+22, "-13327517249657150344432.920974", "%f",
-__LINE__, -1.333194379353273e-19, "-0.000000", "%f",
-__LINE__, -1.334304387932777e-06, "-1.334304e-06", "%e",
-__LINE__, -1.334306581172082e-05, "-1.3e-05", "%+1.2g",
-__LINE__, -1.335283510893438e-05, " -1E-05", "%7.G",
-__LINE__, -1.337939692108373e+11, "-1.33794e+11", "%+4g",
-__LINE__, -1.339117288874809e-03, "-0.001", "%1.3f",
-__LINE__, -1.340100588141492e+27, "-1.340101E+27", "%E",
-__LINE__, -1.341953272572953e-19, "-0.000000", "%+f",
-__LINE__, -1.343058354301620e-02, "-1.343058e-02", "%e",
-__LINE__, -1.346662720871543e+22, "-1.34666E+22", "%#G",
-__LINE__, -1.354010578652210e-02, "-0.0135401", "%#g",
-__LINE__, -1.354066549307666e-12, " -0", "%+6.f",
-__LINE__, -1.355284719365947e+21, "-1.35528e+21", "%g",
-__LINE__, -1.356326532145087e+29, "-1E+29", "%4.G",
-__LINE__, -1.357278618897291e+19, "-13572786188972911780.581398", "%f",
-__LINE__, -1.357537331348202e-10, "-0.000", "%+.3f",
-__LINE__, -1.360011287595868e-10, "-0.000000", "%f",
-__LINE__, -1.360506902899232e+16, "-13605069028992320.", "%#5.f",
-__LINE__, -1.361102570277000e+10, "-1.3611E+10", "%G",
-__LINE__, -1.362601255900219e+07, "-1.363E+07", "%.4G",
-__LINE__, -1.366078182354771e+10, "-1.36608E+10", "%0G",
-__LINE__, -1.366667926615127e+08, "-136666792.661513", "%f",
-__LINE__, -1.367162823743231e-12, "-0.000000", "%#f",
-__LINE__, -1.371523037550709e+09, "-1.37152e+09", "%+g",
-__LINE__, -1.374328925986197e-17, "-1.37e-17", "%.2e",
-__LINE__, -1.374995603898421e-26, "-1.375e-26", "%+g",
-__LINE__, -1.376726539375688e+09, "-1.376727E+09", "%+E",
-__LINE__, -1.378351117694958e-13, "-0.000000", "%f",
-__LINE__, -1.378514699313619e-14, "-1.378515e-14", "%e",
-__LINE__, -1.379347588942324e-23, "-1.4e-23", "%+.1e",
-__LINE__, -1.380380583822272e-17, "-0.000000", "%+f",
-__LINE__, -1.381658659947406e+19, "-1.38166e+19", "%g",
-__LINE__, -1.382775316390237e+29, "-138277531639023653298181670834.3104", "%+#7.4f",
-__LINE__, -1.383541138922400e+00, "-1.383541E+00", "%E",
-__LINE__, -1.384625301445090e+01, "-13.8", "%+.3g",
-__LINE__, -1.386844086284027e-13, "-1.38684E-13", "%+G",
-__LINE__, -1.386930516448650e-28, "-1.386931E-28", "%E",
-__LINE__, -1.387444896054260e-07, "-1.38744E-07", "%G",
-__LINE__, -1.389685107980798e+22, "-1.38969E+22", "%G",
-__LINE__, -1.390880300369347e+03, "-1390.880300", "%f",
-__LINE__, -1.391423370198150e-17, "-1E-17", "%+2.G",
-__LINE__, -1.394441767471218e-09, "-1.394442e-09", "%e",
-__LINE__, -1.396275525062527e-20, "-1.39628E-20", "%G",
-__LINE__, -1.397045957455157e+24, "-1E+24", "%.0E",
-__LINE__, -1.397458546930799e+21, "-1397458546930798526375.383517", "%f",
-__LINE__, -1.397584578988941e-14, "-1.39758e-14", "%5g",
-__LINE__, -1.397789397300823e+09, "-1.398e+09", "%.4g",
-__LINE__, -1.398167472294874e+21, "-1.398167E+21", "%+7E",
-__LINE__, -1.398809636136688e-16, "-0.000000", "%+f",
-__LINE__, -1.399545335304119e+26, "-139954533530411872277454676.805064", "%#5f",
-__LINE__, -1.400102603335755e+20, "-140010260333575509150.705329", "%2f",
-__LINE__, -1.401212746235235e+04, "-1.401213e+04", "%e",
-__LINE__, -1.404409427681801e+07, "-1E+07", "%4.E",
-__LINE__, -1.406018114263948e-25, "-1e-25", "%3.e",
-__LINE__, -1.406245608096877e-06, "-1.4e-06", "%+.1e",
-__LINE__, -1.410697254683835e-10, "-1.410697e-10", "%e",
-__LINE__, -1.410739097553846e+25, "-1.410739E+25", "%+E",
-__LINE__, -1.410850631189577e+04, "-14108.5", "%.6g",
-__LINE__, -1.411680434455781e+28, "-14116804344557807304738616949.180141", "%f",
-__LINE__, -1.413309465660099e-27, "-1.413309E-27", "%+#E",
-__LINE__, -1.418468741386300e+09, "-1418468741.386300", "%f",
-__LINE__, -1.420277110892909e+06, "-1.42028e+06", "%1g",
-__LINE__, -1.420417889565590e-17, "-1.42E-17", "%.2E",
-__LINE__, -1.421098212056305e+08, "-1.421098e+08", "%4e",
-__LINE__, -1.421792812798986e-20, " -1E-20", "%7.G",
-__LINE__, -1.423675488122461e+18, "-1423675488122461363.360571", "%f",
-__LINE__, -1.423810545840653e+15, "-1E+15", "%3.E",
-__LINE__, -1.424242673476368e-15, "-1.424243e-15", "%e",
-__LINE__, -1.427847435688733e-01, "-1.427847E-01", "%E",
-__LINE__, -1.433897734612555e-04, "-0.0001", "%3.g",
-__LINE__, -1.434537754075696e-24, "-1.435E-24", "%+0.3E",
-__LINE__, -1.434774864809324e-24, "-1E-24", "%2.E",
-__LINE__, -1.435583851565142e-11, "-1E-11", "%.0E",
-__LINE__, -1.438791024010112e+11, "-1.43879e+11", "%#.6g",
-__LINE__, -1.439267565343777e+27, "-1.4e+27", "%2.1e",
-__LINE__, -1.439440602670449e+02, "-143.944", "%G",
-__LINE__, -1.439494412124925e+13, "-14394944121249.251268", "%f",
-__LINE__, -1.440032823245152e+10, "-14400328232.451516", "%f",
-__LINE__, -1.440174494009562e-08, "-0.000000", "%7f",
-__LINE__, -1.440827804010568e+07, "-1.E+07", "%#6.1G",
-__LINE__, -1.442760907195336e+09, "-1.44276E+09", "%+5G",
-__LINE__, -1.444655304181403e+10, "-14446553041.814035", "%7f",
-__LINE__, -1.444995766787036e+04, "-14450", "%5G",
-__LINE__, -1.445078682874535e-13, "-1E-13", "%3.E",
-__LINE__, -1.446781469662328e+01, "-14.4678", "%G",
-__LINE__, -1.447795251395321e-04, "-0.000145", "%+f",
-__LINE__, -1.448193079247108e-02, "-0.014", "%4.2G",
-__LINE__, -1.449552967961345e+14, "-1E+14", "%1.E",
-__LINE__, -1.451269763513571e+10, "-14512697635.135705", "%6f",
-__LINE__, -1.451843176990292e+12, "-1e+12", "%1.g",
-__LINE__, -1.452631405935931e+06, "-1.452631e+06", "%e",
-__LINE__, -1.452753650285897e+21, "-1452753650285897091265.496783", "%5f",
-__LINE__, -1.453811512433860e-05, "-1e-05", "%+6.g",
-__LINE__, -1.454071430557372e+13, "-1.4541E+13", "%.4E",
-__LINE__, -1.455956079562999e+03, "-1455.96", "%G",
-__LINE__, -1.459712196146602e-17, "-1.45971e-17", "%g",
-__LINE__, -1.461857733495947e-02, "-1.4619E-02", "%.4E",
-__LINE__, -1.465257069090911e-11, "-1.465257E-11", "%+E",
-__LINE__, -1.465306607257042e+05, "-146531", "%g",
-__LINE__, -1.465857076315921e+20, "-1.46586E+20", "%+G",
-__LINE__, -1.467919792051489e+16, "-1.46792e+16", "%2g",
-__LINE__, -1.469271519834567e+20, "-146927151983456720785", "%+.0f",
-__LINE__, -1.472961447442697e-28, "-1.47296e-28", "%#g",
-__LINE__, -1.473385695190456e-12, "-1.473386E-12", "%E",
-__LINE__, -1.485003089033267e-10, "-1.485E-10", "%2G",
-__LINE__, -1.490541379072390e-18, "-1.490541E-18", "%4E",
-__LINE__, -1.490683434793125e+22, "-14906834347931249951102.472551", "%#f",
-__LINE__, -1.498356837215425e+20, "-1.49836E+20", "%#G",
-__LINE__, -1.498677007818122e+14, "-1.49868E+14", "%+4G",
-__LINE__, -1.502143197677119e+23, "-150214319767711934616727.", "%#7.f",
-__LINE__, -1.503563770470753e-24, "-1.50356e-24", "%.6g",
-__LINE__, -1.504643092793197e-18, "-1.504643e-18", "%+4e",
-__LINE__, -1.507017706254022e-13, "-1.50702e-13", "%+g",
-__LINE__, -1.507054033750081e-22, "-0.000000", "%f",
-__LINE__, -1.508662346022339e+16, "-1.508662E+16", "%#E",
-__LINE__, -1.509366882438902e+08, "-2e+08", "%4.g",
-__LINE__, -1.511086567087967e+20, "-1.51109e+20", "%g",
-__LINE__, -1.514959134622707e-18, "-0.000000", "%+f",
-__LINE__, -1.515730120364204e+06, "-2E+06", "%0.G",
-__LINE__, -1.516372763118606e-09, "-1.51637e-09", "%g",
-__LINE__, -1.520610443546204e+27, "-1.52061e+27", "%g",
-__LINE__, -1.522040655642012e+11, "-1.52204E+11", "%+2G",
-__LINE__, -1.523772495014966e-24, "-2E-24", "%2.G",
-__LINE__, -1.523980825983892e-05, "-0.000", "%2.3f",
-__LINE__, -1.526696214603152e-03, "-0.0015267", "%+6.5G",
-__LINE__, -1.528680540769583e+00, "-1.5287", "%0.5G",
-__LINE__, -1.529951830525433e+08, "-1.529952e+08", "%+e",
-__LINE__, -1.533052896559935e+05, "-153305", "%4.0f",
-__LINE__, -1.533829640475152e-03, "-0.00153383", "%+#g",
-__LINE__, -1.535617804643105e-30, "-1.535618e-30", "%e",
-__LINE__, -1.537623698361821e+16, "-15376236983618207.7875719", "%4.7f",
-__LINE__, -1.544994895330616e+24, "-1.54499e+24", "%g",
-__LINE__, -1.545083356728403e+17, "-1.545083e+17", "%e",
-__LINE__, -1.545684535393879e+12, "-1.55E+12", "%3.3G",
-__LINE__, -1.545878334099427e+13, "-15458783340994.268762", "%1f",
-__LINE__, -1.547697185980564e-18, "-1.5477e-18", "%.6g",
-__LINE__, -1.548576527172579e-29, "-1.5E-29", "%2.2G",
-__LINE__, -1.549712227835891e+08, "-1.549712e+08", "%#6.7g",
-__LINE__, -1.550010819435335e-21, "-1.55001E-21", "%G",
-__LINE__, -1.551412476164257e+14, "-1.551412E+14", "%E",
-__LINE__, -1.553156638090030e+01, " -2E+01", "%7.G",
-__LINE__, -1.553733233064355e-01, "-0.2", "%3.g",
-__LINE__, -1.558391111609365e+00, "-1.558391", "%+f",
-__LINE__, -1.562004019284766e+15, "-1.562E+15", "%6.5G",
-__LINE__, -1.562195733239758e-16, "-0.000000", "%f",
-__LINE__, -1.563953339012525e-14, "-1.56395E-14", "%1G",
-__LINE__, -1.568317638534983e+18, "-1.56832E+18", "%1G",
-__LINE__, -1.568546851135348e+04, "-15685.5", "%+#G",
-__LINE__, -1.574297872228857e+18, "-1.574298e+18", "%e",
-__LINE__, -1.575696460196291e-21, "-1.5757E-21", "%G",
-__LINE__, -1.576324848379791e+25, "-1.57632E+25", "%+G",
-__LINE__, -1.577524395140843e+06, "-1.5775E+06", "%.5G",
-__LINE__, -1.585122856675091e+12, "-1585122856675.091452", "%f",
-__LINE__, -1.586734674395556e-02, "-1.586735E-02", "%E",
-__LINE__, -1.592602264315192e+22, "-1.5926E+22", "%G",
-__LINE__, -1.594121556700562e+05, "-2E+05", "%+.0G",
-__LINE__, -1.598538116193430e+22, "-1.59854e+22", "%+g",
-__LINE__, -1.605647463222382e+18, "-1.6056E+18", "%.5G",
-__LINE__, -1.610891449201191e+06, "-1.6109E+06", "%#6.4E",
-__LINE__, -1.614593168166818e-05, "-1.61459E-05", "%G",
-__LINE__, -1.615597722557325e-03, "-0.001616", "%f",
-__LINE__, -1.616038022182124e-29, "-1.61604E-29", "%1G",
-__LINE__, -1.618380771451625e-28, "-2e-28", "%+1.g",
-__LINE__, -1.620287456872150e+10, "-1.620e+10", "%#7.3e",
-__LINE__, -1.620469955611903e-29, "-0.000000", "%f",
-__LINE__, -1.622580720690927e+20, "-1.622581E+20", "%+#E",
-__LINE__, -1.622752500991079e-12, "-1.622753E-12", "%E",
-__LINE__, -1.622771933776459e+08, "-1.6228E+08", "%+4.4E",
-__LINE__, -1.623894567037391e+09, "-1.623895e+09", "%#e",
-__LINE__, -1.624021408185354e-25, "-1.624E-25", "%.5G",
-__LINE__, -1.624405320939366e-06, "-1.62441e-06", "%+#g",
-__LINE__, -1.631236208958857e-25, "-1.631236e-25", "%#e",
-__LINE__, -1.632165969536046e+20, "-1.63217E+20", "%G",
-__LINE__, -1.632859596256475e+06, "-1.63286E+06", "%G",
-__LINE__, -1.634371961703112e+06, "-1.634372E+06", "%+E",
-__LINE__, -1.637230383641845e+24, "-1.63723e+24", "%#g",
-__LINE__, -1.638081480475853e+17, "-1.63808e+17", "%+g",
-__LINE__, -1.638279690467673e+14, "-163827969046767.325523", "%#f",
-__LINE__, -1.640360249548215e-29, "-1.64036e-29", "%+6.6g",
-__LINE__, -1.645691728060833e-30, "-1.64569e-30", "%g",
-__LINE__, -1.648548965852592e-03, " -0", "%5.f",
-__LINE__, -1.650100957771182e+21, "-1650100957771182308420.065965", "%+f",
-__LINE__, -1.650957176011913e-02, "-0.016510", "%#4.5G",
-__LINE__, -1.651165108095301e+29, "-165116510809530137038336761179.380119", "%f",
-__LINE__, -1.657132845094847e-06, "-0.000002", "%f",
-__LINE__, -1.657152146172541e+12, "-1.657152E+12", "%.7G",
-__LINE__, -1.658377345516132e-06, "-0.00", "%.2f",
-__LINE__, -1.658850468902324e+20, "-1.659e+20", "%.4g",
-__LINE__, -1.661723557149830e+18, "-1.66172E+18", "%G",
-__LINE__, -1.663570885140273e+14, "-166357088514027", "%2.f",
-__LINE__, -1.665186944896906e+25, "-1.66519E+25", "%G",
-__LINE__, -1.675910137717036e+22, "-2e+22", "%5.g",
-__LINE__, -1.677447987675587e-15, "-1.67745E-15", "%G",
-__LINE__, -1.677510590697220e+06, "-1677510.590697", "%5f",
-__LINE__, -1.677658141289510e-18, "-2E-18", "%+5.G",
-__LINE__, -1.678316848066192e-03, "-1.678317E-03", "%E",
-__LINE__, -1.681506404024821e+24, "-1.68151E+24", "%G",
-__LINE__, -1.688584243722160e+12, "-1.68858E+12", "%+#G",
-__LINE__, -1.689468295411408e+28, "-1.68947E+28", "%+G",
-__LINE__, -1.690746767470207e-11, "-1.69075E-11", "%G",
-__LINE__, -1.692773960755248e-14, "-2E-14", "%4.E",
-__LINE__, -1.693349092740995e-18, "-1.69335e-18", "%g",
-__LINE__, -1.693642321808920e-26, "-1.69364E-26", "%G",
-__LINE__, -1.694579128700042e-12, "-0.000000", "%f",
-__LINE__, -1.695454897264717e-08, "-1.7E-08", "%+4.3G",
-__LINE__, -1.695733278397589e+19, "-1.695733e+19", "%4e",
-__LINE__, -1.699522534409388e-05, "-1.69952E-05", "%G",
-__LINE__, -1.701752039544919e+00, "-2", "%.0f",
-__LINE__, -1.702304998615036e+16, "-1.7023E+16", "%1G",
-__LINE__, -1.703113580904556e-25, "-1.703114e-25", "%+e",
-__LINE__, -1.705165515454546e+29, "-1.705166e+29", "%+e",
-__LINE__, -1.707392568277288e-05, "-1.70739E-05", "%G",
-__LINE__, -1.707477319256742e+09, "-1707477319.26", "%7.2f",
-__LINE__, -1.709669107513969e-03, " -0.002", "%7.g",
-__LINE__, -1.713284011412432e-24, "-1.713e-24", "%3.3e",
-__LINE__, -1.715512203951086e-28, "-1.715512E-28", "%E",
-__LINE__, -1.716880832248879e+13, "-1.71688e+13", "%+g",
-__LINE__, -1.720722835740680e-15, "-1.7E-15", "%.1E",
-__LINE__, -1.721855769574895e+07, "-17218557.695749", "%3f",
-__LINE__, -1.722449437415368e+01, "-1.722449e+01", "%e",
-__LINE__, -1.723218805116591e-29, "-2e-29", "%.0g",
-__LINE__, -1.726129004920195e-05, "-1.72613E-05", "%0G",
-__LINE__, -1.727400228037571e-28, "-0.0000000", "%2.7f",
-__LINE__, -1.730008745782339e-23, "-1.73e-23", "%.4g",
-__LINE__, -1.731875670201859e+09, "-1.73188E+09", "%G",
-__LINE__, -1.732142976428085e+10, "-2E+10", "%+6.0E",
-__LINE__, -1.732699651229194e-02, "-0.017327", "%5g",
-__LINE__, -1.734772870736446e-12, "-0.000000", "%+f",
-__LINE__, -1.738576887938331e+09, "-1.73858e+09", "%g",
-__LINE__, -1.738759937912438e-08, "-1.73876e-08", "%+2g",
-__LINE__, -1.739320154069143e-18, "-0.0000", "%1.4f",
-__LINE__, -1.739870415800800e+16, "-1.73987e+16", "%g",
-__LINE__, -1.741290506928618e+04, "-17412.9", "%G",
-__LINE__, -1.742520800031913e+29, "-1.742521e+29", "%7e",
-__LINE__, -1.747620095195231e+01, "-2e+01", "%+2.g",
-__LINE__, -1.749860675924882e-21, "-1.74986E-21", "%G",
-__LINE__, -1.752675363661431e-06, "-1.7527E-06", "%.5G",
-__LINE__, -1.752871508059699e-06, " -0", "%7.f",
-__LINE__, -1.755178530989839e+25, "-1.7551785e+25", "%1.7e",
-__LINE__, -1.755566213249512e-07, "-1.755566e-07", "%.6e",
-__LINE__, -1.756193485005071e-24, "-1.75619E-24", "%+2.6G",
-__LINE__, -1.758501410496218e+03, "-1758.501", "%.7G",
-__LINE__, -1.758795617219102e+20, "-1.75880E+20", "%#6G",
-__LINE__, -1.760538679276709e+03, "-2e+03", "%+1.e",
-__LINE__, -1.762660914833003e+27, "-1.76266E+27", "%G",
-__LINE__, -1.765122691141907e+19, "-17651226911419071186.1", "%5.1f",
-__LINE__, -1.765313277389086e-18, "-2E-18", "%+1.E",
-__LINE__, -1.765821717148734e+19, "-1.76582E+19", "%G",
-__LINE__, -1.767048687863149e-17, "-1.77E-17", "%+.3G",
-__LINE__, -1.768661645451962e+18, "-1.77E+18", "%+.3G",
-__LINE__, -1.769753257452233e+01, "-17.6975", "%G",
-__LINE__, -1.770945665065531e+28, "-1.770946E+28", "%0.7G",
-__LINE__, -1.776713865753894e-09, "-2e-09", "%1.g",
-__LINE__, -1.778424845787448e+03, "-1.7784E+03", "%.4E",
-__LINE__, -1.779060610701250e+06, "-1.779061E+06", "%E",
-__LINE__, -1.781447182110762e-27, "-1.781447E-27", "%E",
-__LINE__, -1.782655842123784e-13, "-2.E-13", "%#2.1G",
-__LINE__, -1.783071018169166e+16, "-17830710181691664.217851", "%+f",
-__LINE__, -1.784665985294415e+25, "-2E+25", "%3.G",
-__LINE__, -1.787297600658096e+25, "-2E+25", "%+5.E",
-__LINE__, -1.788200250255718e+12, "-1.7882E+12", "%2.4E",
-__LINE__, -1.792860730579114e-09, "-1.79286E-09", "%G",
-__LINE__, -1.793122797100936e+24, "-1.793123e+24", "%e",
-__LINE__, -1.793761706915029e-25, "-0.000000", "%f",
-__LINE__, -1.793947567431932e+22, "-1.79395e+22", "%g",
-__LINE__, -1.796428035404303e-18, "-1.79643e-18", "%g",
-__LINE__, -1.797113144273918e-16, "-1.79711E-16", "%.6G",
-__LINE__, -1.798796767828424e-29, "-1.7988E-29", "%G",
-__LINE__, -1.805004010633763e-11, "-1.805e-11", "%2.5g",
-__LINE__, -1.806936269752338e-26, "-1.80694e-26", "%g",
-__LINE__, -1.807122541760172e-10, "-1.80712e-10", "%g",
-__LINE__, -1.808295407815630e-06, "-1.8083E-06", "%+G",
-__LINE__, -1.813893236685959e+15, "-1813893236685959", "%0.f",
-__LINE__, -1.816201530145367e+06, "-1816202", "%+2.f",
-__LINE__, -1.822811219123512e+13, "-1.82281e+13", "%g",
-__LINE__, -1.826276499170243e-25, "-2E-25", "%+3.G",
-__LINE__, -1.832399287433839e-26, "-1.832399E-26", "%#4E",
-__LINE__, -1.833597815584463e-18, "-0.000000", "%+3f",
-__LINE__, -1.834165532712233e+28, "-1.834166E+28", "%.7G",
-__LINE__, -1.837633147831083e+28, "-1.8376331e+28", "%.7e",
-__LINE__, -1.839756716742518e-01, "-0.2", "%+0.G",
-__LINE__, -1.840101206950368e-14, "-1.840101E-14", "%+E",
-__LINE__, -1.842043645474877e+17, "-1.84204e+17", "%+g",
-__LINE__, -1.842155892969934e+17, "-1.84216e+17", "%+g",
-__LINE__, -1.843566073012842e-25, "-1.84357E-25", "%G",
-__LINE__, -1.843976321320497e-02, "-0.02", "%+4.2f",
-__LINE__, -1.845299931651554e+11, "-1.8453E+11", "%0.4E",
-__LINE__, -1.846199038659889e-06, "-1.8462e-06", "%0.5g",
-__LINE__, -1.847062180184169e-30, "-1.847062E-30", "%5E",
-__LINE__, -1.847962158722201e-16, "-0.000000", "%f",
-__LINE__, -1.849446376756582e+15, "-1.8E+15", "%2.2G",
-__LINE__, -1.853168465523878e-24, "-2E-24", "%1.E",
-__LINE__, -1.853601367230139e+10, "-1.853601e+10", "%e",
-__LINE__, -1.857367903775364e+18, "-1.86E+18", "%1.3G",
-__LINE__, -1.858332820633906e-05, "-0.000019", "%7f",
-__LINE__, -1.860243811657223e-23, "-1.860244e-23", "%e",
-__LINE__, -1.860660612539794e+08, "-1.86066e+08", "%+6.5e",
-__LINE__, -1.861160816251124e-09, "-2E-09", "%1.G",
-__LINE__, -1.862380636974688e-25, "-1.9E-25", "%.2G",
-__LINE__, -1.864168808453004e+15, "-1.86417E+15", "%G",
-__LINE__, -1.864273144411246e+07, "-1.86427e+07", "%g",
-__LINE__, -1.864929236615802e-02, "-2e-02", "%+3.e",
-__LINE__, -1.865010503480847e+19, "-2E+19", "%4.G",
-__LINE__, -1.866276374553144e+22, "-1.866276e+22", "%e",
-__LINE__, -1.870809567910649e+09, "-1.870810e+09", "%e",
-__LINE__, -1.872555495839008e-13, "-1.872555E-13", "%3E",
-__LINE__, -1.874465717110388e-22, "-1.874466E-22", "%E",
-__LINE__, -1.874916306627632e+21, "-1874916306627632422987.517202", "%f",
-__LINE__, -1.875804322194491e-23, "-0.000000", "%+f",
-__LINE__, -1.876662099198587e-04, "-0.000187666", "%G",
-__LINE__, -1.876775504795760e-25, "-1.87678e-25", "%0g",
-__LINE__, -1.879343051002554e-20, " -0.", "%#6.f",
-__LINE__, -1.881535445774717e-15, "-1.881535e-15", "%e",
-__LINE__, -1.887515901404300e+00, "-1.888", "%2.4G",
-__LINE__, -1.887730637149009e+17, "-1.887731E+17", "%E",
-__LINE__, -1.889920303480086e+17, "-1.889920e+17", "%+e",
-__LINE__, -1.891903478784091e+04, "-1.891903e+04", "%e",
-__LINE__, -1.893550084305833e+16, "-1.89355e+16", "%g",
-__LINE__, -1.894675230197676e+05, "-1.894675e+05", "%#e",
-__LINE__, -1.898389624953187e-27, "-1.898390e-27", "%+e",
-__LINE__, -1.899250044644046e+21, "-1899250044644046120367.875119", "%+4.6f",
-__LINE__, -1.904187609804679e-02, "-1.90419E-02", "%0.5E",
-__LINE__, -1.904452538421193e-04, "-2e-04", "%4.0e",
-__LINE__, -1.904615326969061e-16, "-1.904615e-16", "%1.7g",
-__LINE__, -1.907761255064750e+02, "-190.776126", "%f",
-__LINE__, -1.910727641826707e-10, " -2e-10", "%7.g",
-__LINE__, -1.913149279262051e+15, "-1.913149e+15", "%.7g",
-__LINE__, -1.913235739298009e+28, "-1.913236e+28", "%e",
-__LINE__, -1.913526822735271e+18, "-1.914e+18", "%.4g",
-__LINE__, -1.913780977515583e+17, "-191378097751558335.9150", "%5.4f",
-__LINE__, -1.917095456962182e-10, "-2E-10", "%4.G",
-__LINE__, -1.918803033972851e+23, "-191880303397285132405158.947222", "%f",
-__LINE__, -1.926420984801848e+16, "-19264209848018483.128840", "%+f",
-__LINE__, -1.931905465942639e-10, "-1.93191e-10", "%g",
-__LINE__, -1.932907105840252e+06, "-1.932907e+06", "%+#e",
-__LINE__, -1.933091601918916e+15, "-1.933092E+15", "%#E",
-__LINE__, -1.934296184983361e+09, "-1.9343e+09", "%1.6g",
-__LINE__, -1.934637311832448e+11, "-1.93464e+11", "%+g",
-__LINE__, -1.936201483262186e+12, "-2e+12", "%+6.g",
-__LINE__, -1.939114661603911e+19, "-1.93911E+19", "%G",
-__LINE__, -1.940478182124347e-13, "-0.000000", "%f",
-__LINE__, -1.943218220654923e+08, "-2E+08", "%+5.0G",
-__LINE__, -1.943526872455779e-30, "-1.9E-30", "%.1E",
-__LINE__, -1.949869164681357e+19, "-1.949869e+19", "%#3e",
-__LINE__, -1.954181060535402e+23, "-1.954181e+23", "%e",
-__LINE__, -1.961581555579142e+14, "-1.962E+14", "%.3E",
-__LINE__, -1.964535562036915e+07, "-1.96454E+07", "%G",
-__LINE__, -1.969749653575926e+04, "-19697.5", "%.6g",
-__LINE__, -1.973475369169053e+15, "-1.97348e+15", "%g",
-__LINE__, -1.975658532866600e-21, "-2e-21", "%+1.2g",
-__LINE__, -1.984050343831260e+09, "-1.984050E+09", "%E",
-__LINE__, -1.984422410018571e+12, "-1.984422e+12", "%+4.7g",
-__LINE__, -1.984878687667223e-22, "-0.000000", "%f",
-__LINE__, -1.986116930967811e-28, "-1.98612e-28", "%g",
-__LINE__, -1.986774457812683e+02, "-1.986774e+02", "%e",
-__LINE__, -1.987274814938726e-04, "-0.000198727", "%g",
-__LINE__, -1.987319200580415e+10, "-1.987319E+10", "%E",
-__LINE__, -1.987980768698114e-19, "-0.000000", "%3f",
-__LINE__, -1.994698965044602e-29, "-2E-29", "%+4.0G",
-__LINE__, -1.997833122667050e+26, "-1.99783E+26", "%G",
-__LINE__, -1.999453681184129e-10, "-0.00000", "%.5f",
-__LINE__, -1.999897345839745e-16, "-1.9999e-16", "%g",
-__LINE__, -2.003703825123989e-22, "-0.000000", "%f",
-__LINE__, -2.004569188274957e-23, "-2.00457E-23", "%G",
-__LINE__, -2.005911883189058e+07, "-2.00591E+07", "%G",
-__LINE__, -2.006438312005722e-25, "-2.006e-25", "%0.4g",
-__LINE__, -2.017322171210280e+18, "-2.01732E+18", "%+0G",
-__LINE__, -2.017718635819594e-06, "-2.01772e-06", "%5g",
-__LINE__, -2.019187445568160e-12, "-0.00", "%.2f",
-__LINE__, -2.021022665608503e+25, "-20210226656085028551501636.684", "%2.3f",
-__LINE__, -2.022720393474145e+07, "-2.02272E+07", "%#G",
-__LINE__, -2.024506694471065e+23, "-2.02451E+23", "%G",
-__LINE__, -2.024884686553821e-15, " -2e-15", "%7.g",
-__LINE__, -2.027484636128966e-23, "-2.0275E-23", "%.5G",
-__LINE__, -2.028185530467237e+21, "-2028185530467237374097.067", "%+4.3f",
-__LINE__, -2.028388905566873e-09, "-0.000000", "%f",
-__LINE__, -2.029856507431584e-17, "-2.02986E-17", "%G",
-__LINE__, -2.029891733449167e+27, "-2029891733449166846270372843.7190875", "%3.7f",
-__LINE__, -2.031933616694469e+14, "-2.031934E+14", "%#E",
-__LINE__, -2.034011738471413e-10, "-2.03401E-10", "%#G",
-__LINE__, -2.036087355975756e+29, "-203608735597575574161055556032.806635", "%+f",
-__LINE__, -2.036355025137273e+09, "-2.036355E+09", "%#.7G",
-__LINE__, -2.038423730536878e+12, "-2E+12", "%4.G",
-__LINE__, -2.045209202278810e+23, "-2.045209e+23", "%+#e",
-__LINE__, -2.046794083517423e-06, "-2.04679e-06", "%g",
-__LINE__, -2.048042459678599e-19, "-0.000000", "%f",
-__LINE__, -2.050526462096153e+18, "-2.05053e+18", "%+g",
-__LINE__, -2.053583900249402e+13, "-2.053584e+13", "%0.7g",
-__LINE__, -2.054342100957522e-23, "-2.05434E-23", "%#G",
-__LINE__, -2.054793400141025e+11, "-205479340014.1", "%+2.1f",
-__LINE__, -2.059200689196498e-11, "-0.000000", "%#f",
-__LINE__, -2.060960692728114e-16, "-0.000000", "%+f",
-__LINE__, -2.061417528654300e-30, "-2.06E-30", "%.3G",
-__LINE__, -2.061513401198340e-29, "-2.06151e-29", "%7g",
-__LINE__, -2.061846698845984e+27, "-2.061847E+27", "%E",
-__LINE__, -2.063922242876789e-19, "-2.06392e-19", "%#g",
-__LINE__, -2.065359431805529e+03, "-2065.359432", "%f",
-__LINE__, -2.065529069992156e-04, "-0.000206553", "%+G",
-__LINE__, -2.066082546490980e-25, "-2.06608e-25", "%5g",
-__LINE__, -2.068394312095200e+17, "-2.068394e+17", "%e",
-__LINE__, -2.071024178556425e-10, "-2.07102E-10", "%G",
-__LINE__, -2.074401605950382e-22, "-2.07e-22", "%1.3g",
-__LINE__, -2.074731895144874e-26, "-2.07473E-26", "%G",
-__LINE__, -2.074895800882730e+18, "-2074895800882730068.082083", "%+f",
-__LINE__, -2.077336220500764e-30, "-0", "%2.f",
-__LINE__, -2.078067878561077e+09, "-2.0781e+09", "%0.5g",
-__LINE__, -2.080497889634533e+15, "-2.080498E+15", "%4E",
-__LINE__, -2.084717279367594e-21, "-2.08472e-21", "%+g",
-__LINE__, -2.087827915301948e+29, "-2E+29", "%6.1G",
-__LINE__, -2.090268686389680e+05, "-2.090269e+05", "%1e",
-__LINE__, -2.092036176589720e+24, "-2.09204e+24", "%+g",
-__LINE__, -2.093546373938615e-21, "-2.093546e-21", "%#e",
-__LINE__, -2.101302069316682e+18, "-2.1013e+18", "%+7g",
-__LINE__, -2.103463622286002e-13, "-2.103464E-13", "%E",
-__LINE__, -2.105622845016732e+06, "-2105622.845017", "%1f",
-__LINE__, -2.109999123037767e+28, "-2.11E+28", "%.2E",
-__LINE__, -2.110317013992166e+04, "-21103.2", "%+g",
-__LINE__, -2.112226142154618e+21, "-2112226142154617569702.", "%#6.f",
-__LINE__, -2.112519484486528e+06, "-2.11252E+06", "%G",
-__LINE__, -2.113439260812000e+23, "-2E+23", "%1.G",
-__LINE__, -2.113465893194608e-15, "-2.1135E-15", "%.5G",
-__LINE__, -2.113547784669409e+20, "-2.1135e+20", "%2.5g",
-__LINE__, -2.114146001321822e+28, "-2.114146e+28", "%e",
-__LINE__, -2.114509425574444e-30, " -0", "%4.f",
-__LINE__, -2.114887421659561e-21, "-0.000000", "%+f",
-__LINE__, -2.121120215127601e+21, "-2121120215127601404958.5683097", "%.7f",
-__LINE__, -2.122555390665796e+06, "-2E+06", "%0.G",
-__LINE__, -2.123468430242052e-27, "-0.000000", "%+f",
-__LINE__, -2.123473598890635e+28, "-2.12347e+28", "%+g",
-__LINE__, -2.124328049748190e-04, "-2.124328E-04", "%E",
-__LINE__, -2.125633890999010e+28, "-2E+28", "%+5.G",
-__LINE__, -2.125697963566045e+21, "-2.1257E+21", "%0G",
-__LINE__, -2.127638109230109e+06, "-2.12764e+06", "%+6g",
-__LINE__, -2.128456114617786e+07, "-2.128456E+07", "%E",
-__LINE__, -2.128732742932824e-04, "-2.128733E-04", "%#E",
-__LINE__, -2.129654381588404e+27, "-2129654381588404365999167566.7697564", "%+.7f",
-__LINE__, -2.129792795009985e+20, "-2.12979e+20", "%g",
-__LINE__, -2.131026925664619e-20, "-2e-20", "%.0e",
-__LINE__, -2.132860730144188e-04, "-0.0002", "%5.g",
-__LINE__, -2.133620979309562e+06, "-2e+06", "%3.e",
-__LINE__, -2.133821423139120e-27, "-2.13382E-27", "%.6G",
-__LINE__, -2.134253401425940e-07, "-0.000000", "%f",
-__LINE__, -2.135469568156964e-29, "-2.135470E-29", "%+7E",
-__LINE__, -2.135723595288365e-25, "-0.0", "%.1f",
-__LINE__, -2.137642458920094e-09, "-2.13764e-09", "%g",
-__LINE__, -2.143412361116583e+12, "-2.14341e+12", "%+g",
-__LINE__, -2.144467087741129e-17, "-2.14447e-17", "%+g",
-__LINE__, -2.145726966596964e-11, "-0.000000", "%2f",
-__LINE__, -2.148318753042597e+08, "-2.14832E+08", "%5G",
-__LINE__, -2.149932310549644e-19, "-2.14993e-19", "%g",
-__LINE__, -2.150050917377646e-21, " -0", "%3.f",
-__LINE__, -2.150854313643430e-16, "-0.000000", "%.6f",
-__LINE__, -2.151071797121845e+00, "-2.15107", "%+g",
-__LINE__, -2.158728406865981e+14, "-215872840686598.088666", "%7f",
-__LINE__, -2.166062878011641e-23, "-2.166063e-23", "%e",
-__LINE__, -2.167045002060684e+12, "-2.167045E+12", "%E",
-__LINE__, -2.173752581051530e+20, "-217375258105153035259.604621", "%f",
-__LINE__, -2.175599129057555e+24, "-2.175599E+24", "%E",
-__LINE__, -2.176564454093042e-02, "-0.0217656", "%+G",
-__LINE__, -2.181270774327071e-12, "-0.000000", "%#1f",
-__LINE__, -2.184404769844158e-09, "-2.2E-09", "%+.2G",
-__LINE__, -2.184881476334310e-07, "-2.18488e-07", "%g",
-__LINE__, -2.189197211449684e-11, "-2E-11", "%.0G",
-__LINE__, -2.189451286805190e+20, "-218945128680519029984", "%3.f",
-__LINE__, -2.190642494146884e-27, " -0.", "%#4.f",
-__LINE__, -2.194727956725854e+06, "-2.19E+06", "%.3G",
-__LINE__, -2.196145868303877e+11, "-219614586830.387726", "%+5f",
-__LINE__, -2.196397972262690e-16, "-0.000000", "%3f",
-__LINE__, -2.202692843474668e-01, "-2.203e-01", "%.3e",
-__LINE__, -2.204528684782451e-21, "-2.20453E-21", "%G",
-__LINE__, -2.214926838821340e-16, "-2e-16", "%+2.g",
-__LINE__, -2.215558986352773e+18, "-2215558986352773374", "%0.f",
-__LINE__, -2.216976693056186e+27, "-2216976693056186498154147557.215765", "%f",
-__LINE__, -2.217348422793322e+13, "-2.21735E+13", "%6G",
-__LINE__, -2.217732695583920e-07, "-0", "%.0f",
-__LINE__, -2.221185494767834e-14, "-2.22119e-14", "%g",
-__LINE__, -2.224557193699609e-16, "-2.224557E-16", "%E",
-__LINE__, -2.227417758704028e-18, "-0.000000", "%0f",
-__LINE__, -2.231261655673006e-30, "-2.231262E-30", "%E",
-__LINE__, -2.233081938836160e+21, "-2233081938836160240668.960", "%+6.3f",
-__LINE__, -2.233158918439853e+05, "-223316", "%2G",
-__LINE__, -2.233802298007898e-30, "-2.2338E-30", "%2G",
-__LINE__, -2.233864858404732e+17, "-223386485840473181.241350", "%f",
-__LINE__, -2.241242805107749e+14, "-2.24124E+14", "%G",
-__LINE__, -2.244555498855249e+25, "-2.24456E+25", "%#G",
-__LINE__, -2.248170665127481e-07, "-2.248171E-07", "%E",
-__LINE__, -2.252558275567388e-13, "-2.25256e-13", "%g",
-__LINE__, -2.256190083496001e+13, "-22561900834960.0136398", "%7.7f",
-__LINE__, -2.259851596715945e+27, "-2.259852e+27", "%e",
-__LINE__, -2.260461480001174e-21, "-0.000000", "%f",
-__LINE__, -2.264128628428577e+22, "-2.26413e+22", "%1g",
-__LINE__, -2.265914518399595e-04, "-0.000226591", "%G",
-__LINE__, -2.266251557092826e+23, "-2.26625e+23", "%g",
-__LINE__, -2.268592252572450e+19, "-2.268592e+19", "%2.6e",
-__LINE__, -2.268597523847349e+11, "-2.2686e+11", "%g",
-__LINE__, -2.268963106935546e+05, "-226896", "%+g",
-__LINE__, -2.272527876808919e-24, "-0.000000", "%#f",
-__LINE__, -2.273366440479073e+02, "-227.337", "%g",
-__LINE__, -2.277858038556191e+25, "-2.28E+25", "%0.3G",
-__LINE__, -2.282019915623415e+25, "-2E+25", "%5.E",
-__LINE__, -2.283333247435650e-27, " -0", "%4.f",
-__LINE__, -2.285230610829355e+23, "-2E+23", "%2.G",
-__LINE__, -2.290900253402985e+23, "-2.2909E+23", "%G",
-__LINE__, -2.293266953268186e+08, "-2.29327e+08", "%g",
-__LINE__, -2.293489603164786e+23, "-229348960316478578391752.3076525", "%4.7f",
-__LINE__, -2.294434667605481e+15, "-2.2944E+15", "%.5G",
-__LINE__, -2.296607768466765e+21, "-2.29661E+21", "%G",
-__LINE__, -2.297449967994012e+14, "-229744996799401.23542", "%+.5f",
-__LINE__, -2.301162556466583e-01, "-0.230116", "%+#2g",
-__LINE__, -2.301676246374004e+05, "-230168.", "%#g",
-__LINE__, -2.301976724487835e-01, "-0.230198", "%5G",
-__LINE__, -2.303269770571222e-15, "-2.303270e-15", "%.6e",
-__LINE__, -2.306451480495636e+23, "-2.30645E+23", "%G",
-__LINE__, -2.307659351219690e-17, "-0.000000", "%+3f",
-__LINE__, -2.309009762339430e+16, "-2.30901E+16", "%G",
-__LINE__, -2.309261751862100e+06, "-2309261.751862", "%+f",
-__LINE__, -2.309504876918634e-26, " -2E-26", "%7.E",
-__LINE__, -2.310910348147804e-26, "-2e-26", "%5.g",
-__LINE__, -2.317173552252235e+05, "-231717.4", "%.7g",
-__LINE__, -2.319517289618469e-23, "-2.31952E-23", "%+G",
-__LINE__, -2.320103195142527e+08, "-2.320103E+08", "%+E",
-__LINE__, -2.323523032125633e+24, "-2323523032125633491773442.07419", "%.5f",
-__LINE__, -2.326279126614399e-16, "-0.000000", "%f",
-__LINE__, -2.331393688620925e-09, "-2.33139e-09", "%#g",
-__LINE__, -2.334233527512469e+01, " -23", "%6.0f",
-__LINE__, -2.337418834112767e+24, " -2E+24", "%7.E",
-__LINE__, -2.339455293612118e+12, "-2339455293612.1", "%+.1f",
-__LINE__, -2.341930318143367e-18, "-2.E-18", "%#4.E",
-__LINE__, -2.346107614950921e-17, "-0.00000", "%+2.5f",
-__LINE__, -2.348356578807972e+23, "-2.34836e+23", "%g",
-__LINE__, -2.351485855138244e+19, "-2.351486e+19", "%+e",
-__LINE__, -2.362101647639198e-15, "-2.36210e-15", "%#g",
-__LINE__, -2.369743873030115e+08, "-2e+08", "%.1g",
-__LINE__, -2.371658164739356e+25, "-23716581647393559784120498.079574", "%f",
-__LINE__, -2.372427847607163e+28, "-2.37243E+28", "%G",
-__LINE__, -2.375465465294647e+11, "-2.375465e+11", "%e",
-__LINE__, -2.377128971572195e-18, "-0.0", "%1.1f",
-__LINE__, -2.380322448568089e-13, "-2.38032E-13", "%+#0G",
-__LINE__, -2.385960728264882e+26, "-2E+26", "%.0E",
-__LINE__, -2.387345744004747e+00, "-2.38735", "%G",
-__LINE__, -2.390480023300201e+25, "-2.39048e+25", "%g",
-__LINE__, -2.395420431930886e+23, "-2E+23", "%2.E",
-__LINE__, -2.401144663870969e-10, "-2.e-10", "%#6.g",
-__LINE__, -2.402787441215039e-08, "-2.40279e-08", "%g",
-__LINE__, -2.402990830425278e+08, "-2.40299E+08", "%G",
-__LINE__, -2.404213682932215e+08, "-2.40421e+08", "%2g",
-__LINE__, -2.409385592298822e+21, "-2409385592298821876511.283335", "%7f",
-__LINE__, -2.410798267658614e+13, "-2.4108e+13", "%+g",
-__LINE__, -2.413180068271811e-24, "-0.000000", "%+f",
-__LINE__, -2.413268457113495e+26, "-2.41327E+26", "%3.6G",
-__LINE__, -2.415341832206007e-13, "-0.000000", "%+f",
-__LINE__, -2.422519577068670e-08, "-0.0000000", "%.7f",
-__LINE__, -2.422533651282808e+20, "-2.42253E+20", "%#G",
-__LINE__, -2.422795006880671e+17, "-2.4228e+17", "%g",
-__LINE__, -2.423483330202008e+20, "-2.42348e+20", "%g",
-__LINE__, -2.431756009640369e-04, "-0.000243176", "%+#3g",
-__LINE__, -2.431878622534173e-05, "-0.000024", "%f",
-__LINE__, -2.432012113077180e+24, "-2.43201e+24", "%g",
-__LINE__, -2.433843704470487e+07, "-24338437", "%4.f",
-__LINE__, -2.435475755031956e+11, "-2.435476E+11", "%1E",
-__LINE__, -2.438081888695437e-13, "-0.000000", "%f",
-__LINE__, -2.438334590462860e+10, "-2.4E+10", "%5.2G",
-__LINE__, -2.440223135334059e+17, "-2.44022e+17", "%g",
-__LINE__, -2.444107281115317e-21, "-2.44411e-21", "%+g",
-__LINE__, -2.444582273206171e-02, " -0.02", "%7.G",
-__LINE__, -2.445234676352794e+23, "-2.44523e+23", "%#g",
-__LINE__, -2.449185020984714e+08, "-2.E+08", "%#2.G",
-__LINE__, -2.450646640466020e+22, "-2.45065E+22", "%5G",
-__LINE__, -2.456840850262473e+13, "-24568408502625", "%0.f",
-__LINE__, -2.464466865714499e-10, "-2e-10", "%6.g",
-__LINE__, -2.466022088999151e+27, "-2.46602E+27", "%G",
-__LINE__, -2.484398113119779e-04, "-2.484398E-04", "%E",
-__LINE__, -2.484591850456328e+23, "-248459185045632846566832.085955", "%+f",
-__LINE__, -2.488166252162446e-11, "-2.5E-11", "%4.2G",
-__LINE__, -2.493507313049390e+24, "-2.49E+24", "%4.3G",
-__LINE__, -2.500280281988428e+28, "-2.5E+28", "%.4G",
-__LINE__, -2.500373956445372e-07, "-2.50037e-07", "%g",
-__LINE__, -2.505566434769299e-12, "-2.5E-12", "%+#0.2G",
-__LINE__, -2.508215917020758e+05, "-2.508216e+05", "%5e",
-__LINE__, -2.519368094680315e-29, "-2.51937e-29", "%#0g",
-__LINE__, -2.522266530587753e-11, "-2.52227e-11", "%+g",
-__LINE__, -2.534492886372514e-06, "-2.53449E-06", "%0G",
-__LINE__, -2.534617610955074e-02, "-0.03", "%0.2f",
-__LINE__, -2.540551642835634e+26, "-3E+26", "%4.G",
-__LINE__, -2.548210731830516e-26, "-0.000", "%2.3f",
-__LINE__, -2.558868082397931e-11, "-3E-11", "%2.E",
-__LINE__, -2.560062512991052e+11, "-2.56006E+11", "%+G",
-__LINE__, -2.561274682814428e-05, "-0.000026", "%f",
-__LINE__, -2.563424949397357e-02, " -0", "%6.f",
-__LINE__, -2.577010939931465e+17, "-2.57701E+17", "%G",
-__LINE__, -2.578224879294822e+10, "-3E+10", "%+4.1G",
-__LINE__, -2.585655636750244e+13, "-2.585656e+13", "%+0.7g",
-__LINE__, -2.585657986834408e+14, "-2.5857e+14", "%3.5g",
-__LINE__, -2.586728929368101e+02, "-258.673", "%+g",
-__LINE__, -2.591293023229468e+06, "-2591293.0232295", "%2.7f",
-__LINE__, -2.592454222603538e-06, "-2.59245E-06", "%G",
-__LINE__, -2.599399905869649e+02, "-259.939991", "%f",
-__LINE__, -2.605382860307596e+12, "-2.60538E+12", "%2G",
-__LINE__, -2.607507689402762e-01, "-0.260751", "%#.6g",
-__LINE__, -2.612933252582967e+15, "-2.61293e+15", "%g",
-__LINE__, -2.614337505491483e-14, "-2.61434E-14", "%.6G",
-__LINE__, -2.618302263333671e+14, "-2.62e+14", "%3.3g",
-__LINE__, -2.622998533972296e+00, "-3.", "%#0.g",
-__LINE__, -2.623348319869643e-15, "-2.62335E-15", "%#G",
-__LINE__, -2.626703132693163e+23, "-3E+23", "%+6.E",
-__LINE__, -2.629610853765779e+25, "-2.62961E+25", "%+#G",
-__LINE__, -2.632993880472784e+26, "-2.63299E+26", "%G",
-__LINE__, -2.635651112327873e-20, "-2.63565E-20", "%1G",
-__LINE__, -2.636003980473492e-23, "-2.636E-23", "%G",
-__LINE__, -2.639316453244009e+10, "-26393164532.440094", "%#f",
-__LINE__, -2.640517223417942e-28, "-2.641e-28", "%.3e",
-__LINE__, -2.640625797147664e-22, "-2.640626E-22", "%E",
-__LINE__, -2.644401262524378e-12, " -0.000", "%7.3f",
-__LINE__, -2.651033203243637e-14, "-2.651033e-14", "%+e",
-__LINE__, -2.652386470126594e-24, "-2.652386E-24", "%E",
-__LINE__, -2.654281018623631e-12, "-0.00000", "%6.5f",
-__LINE__, -2.655529742118827e+02, "-265.552974", "%f",
-__LINE__, -2.658550833241620e+22, "-26585508332416196708436.473273", "%+f",
-__LINE__, -2.660515890519100e+08, "-2.660516E+08", "%E",
-__LINE__, -2.665025749266086e-24, "-2.66503E-24", "%G",
-__LINE__, -2.666117105643095e-20, "-2.66612e-20", "%g",
-__LINE__, -2.667051347741259e+11, "-3e+11", "%6.g",
-__LINE__, -2.667207607243375e+04, "-26672.076072", "%+#f",
-__LINE__, -2.667631877167590e+26, "-2.667632E+26", "%E",
-__LINE__, -2.673817942962878e+13, "-2.673818e+13", "%+2.6e",
-__LINE__, -2.674972907853507e+20, "-2.674973E+20", "%E",
-__LINE__, -2.675830887404867e+14, "-2.675831E+14", "%E",
-__LINE__, -2.682749918168908e+26, "-2.682750E+26", "%E",
-__LINE__, -2.689222801942679e-03, "-0.0027", "%7.2G",
-__LINE__, -2.692245629411156e+25, "-2.69225e+25", "%g",
-__LINE__, -2.692606702464273e+11, "-2.69261e+11", "%g",
-__LINE__, -2.693070822061136e-27, "-2.69307e-27", "%+g",
-__LINE__, -2.694415515655336e-30, "-3E-30", "%+3.0E",
-__LINE__, -2.694770057384739e+15, "-2.69477e+15", "%g",
-__LINE__, -2.699998392329361e+01, "-27", "%+.2g",
-__LINE__, -2.700151952281511e+23, "-270015195228151050343968.", "%+#5.f",
-__LINE__, -2.707398527302841e-08, "-2.70740e-08", "%+#3g",
-__LINE__, -2.711404950850030e-21, "-2.71E-21", "%.2E",
-__LINE__, -2.714057739024281e-10, "-2.714e-10", "%.4g",
-__LINE__, -2.717657632815414e-10, "-2.71766e-10", "%g",
-__LINE__, -2.720875786430592e-09, "-2.7E-09", "%6.2G",
-__LINE__, -2.725886730997891e+19, "-2.72589e+19", "%g",
-__LINE__, -2.726089169748676e-09, "-2.72609E-09", "%+G",
-__LINE__, -2.732907572038661e-30, "-2.73291E-30", "%G",
-__LINE__, -2.737918050958789e+11, "-3e+11", "%1.g",
-__LINE__, -2.739024251198484e-18, "-2.73902e-18", "%+g",
-__LINE__, -2.742646144452305e+13, "-2.74265e+13", "%g",
-__LINE__, -2.742911865386719e+06, "-3E+06", "%+5.G",
-__LINE__, -2.759159275123811e-30, "-0.000000", "%+f",
-__LINE__, -2.759794813930001e-21, "-2.75979e-21", "%+g",
-__LINE__, -2.763243077558348e+20, "-2.7632E+20", "%+0.4E",
-__LINE__, -2.770348477810209e-14, "-0.000000", "%2f",
-__LINE__, -2.776074766292453e+05, "-277607", "%g",
-__LINE__, -2.776610811432007e-07, "-2.77661E-07", "%6G",
-__LINE__, -2.778673793270678e+23, "-3E+23", "%+4.E",
-__LINE__, -2.782405168708350e+08, "-278240516.87084", "%.5f",
-__LINE__, -2.783316149365198e-09, "-3E-09", "%5.0G",
-__LINE__, -2.785436703085409e-27, "-2.78544E-27", "%#G",
-__LINE__, -2.787479051660640e+21, "-2.78748e+21", "%g",
-__LINE__, -2.789445406042450e-03, "-0.002789", "%+f",
-__LINE__, -2.791104581836077e+05, "-279110.4581836", "%+7.7f",
-__LINE__, -2.802078617775784e+04, "-28020.786", "%0.3f",
-__LINE__, -2.804954315579055e+20, "-2.80495E+20", "%G",
-__LINE__, -2.806575341862696e-05, "-2.80658E-05", "%G",
-__LINE__, -2.807769556900402e-06, "-0.000003", "%+#f",
-__LINE__, -2.808882056357941e-12, "-0.0", "%.1f",
-__LINE__, -2.809386677339924e+10, "-2.8094E+10", "%6.5G",
-__LINE__, -2.818404311437694e+19, "-3E+19", "%6.G",
-__LINE__, -2.819463285551660e+01, "-28.1946", "%+G",
-__LINE__, -2.821428853207724e-16, "-3e-16", "%6.g",
-__LINE__, -2.824452750788444e+07, "-3e+07", "%+2.g",
-__LINE__, -2.825430381094971e+28, "-3e+28", "%+.0e",
-__LINE__, -2.830010928384944e-17, "-0", "%.0f",
-__LINE__, -2.832505114479680e-09, "-0.000000", "%f",
-__LINE__, -2.833246604950796e+13, "-2.83325E+13", "%G",
-__LINE__, -2.833274073265017e+13, "-28332740732650.174564", "%f",
-__LINE__, -2.835842581787797e+07, "-2.83584E+07", "%2G",
-__LINE__, -2.839758384681983e-07, "-2.83976E-07", "%.6G",
-__LINE__, -2.841077022753766e-09, "-3E-09", "%0.1G",
-__LINE__, -2.845307294930682e+00, "-2.845307e+00", "%+1e",
-__LINE__, -2.847420163874243e+19, "-2.8e+19", "%1.2g",
-__LINE__, -2.848133715109881e-25, "-2.848134E-25", "%E",
-__LINE__, -2.850208101288058e-06, "-2.8502E-06", "%+5.4E",
-__LINE__, -2.853666525870413e+04, "-28536.665259", "%f",
-__LINE__, -2.855661543202034e+21, "-2.85566e+21", "%g",
-__LINE__, -2.859528889324159e-08, "-2.859529e-08", "%3e",
-__LINE__, -2.860545310690251e+29, "-3e+29", "%.1g",
-__LINE__, -2.863576633666884e-14, "-2.863577e-14", "%+5e",
-__LINE__, -2.864115740396321e-14, "-2.86412e-14", "%g",
-__LINE__, -2.864481979037153e+20, "-2.86E+20", "%3.3G",
-__LINE__, -2.867582970177984e-18, "-0.000000", "%f",
-__LINE__, -2.868237707901564e+25, "-3E+25", "%6.E",
-__LINE__, -2.871741071402520e+13, "-3e+13", "%.1g",
-__LINE__, -2.873724610073364e+18, "-2873724610073364438.278531", "%+#f",
-__LINE__, -2.876433859770866e-25, "-2.87643e-25", "%g",
-__LINE__, -2.877458587075737e-08, "-2.877E-08", "%+.4G",
-__LINE__, -2.883349842927101e+24, "-2.883350E+24", "%2E",
-__LINE__, -2.883749925642885e+09, "-2.883750e+09", "%e",
-__LINE__, -2.883773835633003e-17, "-0.000000", "%+f",
-__LINE__, -2.890389090491409e+24, "-2890389090491409262995148.310438", "%#1f",
-__LINE__, -2.900848552225810e-11, "-0.000000", "%+f",
-__LINE__, -2.911942123176400e+25, "-29119421231764004431852300", "%0.f",
-__LINE__, -2.912904462180751e-18, "-2.9129E-18", "%6G",
-__LINE__, -2.917717875075651e+26, "-3e+26", "%0.e",
-__LINE__, -2.922293201084093e-26, "-2.922293E-26", "%E",
-__LINE__, -2.925070319932451e-30, "-0.000000", "%f",
-__LINE__, -2.926558572870874e+15, "-2.926559E+15", "%E",
-__LINE__, -2.928781435877896e+26, "-2.928781e+26", "%+e",
-__LINE__, -2.930178318110376e+28, "-2.930178E+28", "%E",
-__LINE__, -2.930984661925819e+05, "-293098.5", "%.7G",
-__LINE__, -2.932762424932762e-08, "-0.000000", "%#f",
-__LINE__, -2.933415597492494e+10, "-29334155974.924943", "%+#2f",
-__LINE__, -2.933564314850986e+29, "-2.93356E+29", "%7G",
-__LINE__, -2.943224907893795e+10, "-2.943225E+10", "%+7E",
-__LINE__, -2.945311540471221e+19, "-2.94531E+19", "%#G",
-__LINE__, -2.945812356522847e+15, "-2.94581e+15", "%+g",
-__LINE__, -2.945836999630957e+00, "-2.945837E+00", "%E",
-__LINE__, -2.947798782726622e-01, "-0.29478", "%+g",
-__LINE__, -2.948958405827917e+18, "-2.94896e+18", "%g",
-__LINE__, -2.949790871798059e-11, "-2.94979E-11", "%G",
-__LINE__, -2.950347806125225e-12, "-2.95035e-12", "%g",
-__LINE__, -2.952781884599368e-29, "-2.952782E-29", "%+E",
-__LINE__, -2.956801341442716e+06, "-2.9568E+06", "%G",
-__LINE__, -2.957469310356540e-07, "-0.000", "%1.3f",
-__LINE__, -2.960464869534870e-23, "-2.96046E-23", "%G",
-__LINE__, -2.962339381825446e-07, "-0", "%1.f",
-__LINE__, -2.971013180028710e+22, "-2.971e+22", "%3.5g",
-__LINE__, -2.975167862441254e+07, "-2.97517e+07", "%g",
-__LINE__, -2.976018424339993e+16, "-2.976018e+16", "%3e",
-__LINE__, -2.979173094835454e+29, "-2.97917E+29", "%G",
-__LINE__, -2.983135249987541e-03, "-0.00298314", "%+G",
-__LINE__, -2.985142444917919e-24, "-2.985142E-24", "%+#7E",
-__LINE__, -2.988680953635159e-14, "-0.0000000", "%2.7f",
-__LINE__, -2.989629778079379e+04, "-29896.297781", "%f",
-__LINE__, -2.991274275137276e+19, "-29912742751372762839.423558", "%+4f",
-__LINE__, -2.991286396006024e-06, "-2.99129e-06", "%4g",
-__LINE__, -2.993310397844811e+04, "-2.993310E+04", "%3.6E",
-__LINE__, -2.994669852410861e-29, "-2.99467E-29", "%G",
-__LINE__, -2.996082093034831e+27, "-2.996082e+27", "%1e",
-__LINE__, -2.999783904575110e+16, "-2.999784E+16", "%#E",
-__LINE__, -3.012019221956988e+25, "-3.012019E+25", "%E",
-__LINE__, -3.014211917706622e-25, "-0.000000", "%+f",
-__LINE__, -3.015149723683428e-19, "-3.01515E-19", "%G",
-__LINE__, -3.022158478004638e-19, "-3.02216e-19", "%6g",
-__LINE__, -3.022825518373900e-12, "-3.0228E-12", "%+.4E",
-__LINE__, -3.025108924057340e-19, "-0.000000", "%f",
-__LINE__, -3.026316824631967e+24, "-3026316824631966717618070.106255", "%1f",
-__LINE__, -3.033074643529623e-13, "-3.03307e-13", "%g",
-__LINE__, -3.035292960731141e+24, "-3035292960731141409524980.190326", "%f",
-__LINE__, -3.043291272956732e-13, "-3.04329e-13", "%#g",
-__LINE__, -3.045216723973715e-23, "-3.045e-23", "%.4g",
-__LINE__, -3.047140976048835e+09, "-3.04714E+09", "%3.5E",
-__LINE__, -3.047680278470886e+09, "-3.047680E+09", "%#E",
-__LINE__, -3.048465807963461e+05, "-304847", "%g",
-__LINE__, -3.050904753556756e+22, "-3.0509E+22", "%G",
-__LINE__, -3.052845748999047e-13, "-3.05285e-13", "%g",
-__LINE__, -3.053395231883620e-06, "-3E-06", "%2.G",
-__LINE__, -3.054894203375445e-28, "-3e-28", "%2.g",
-__LINE__, -3.055080347760755e-13, "-0", "%2.f",
-__LINE__, -3.055513037393624e-29, "-3e-29", "%3.g",
-__LINE__, -3.056198778208295e-06, "-3.0562e-06", "%g",
-__LINE__, -3.057813660266980e-21, "-3E-21", "%1.G",
-__LINE__, -3.059687036330998e-11, "-3.1E-11", "%#2.2G",
-__LINE__, -3.061450385559094e-10, "-3.06145E-10", "%G",
-__LINE__, -3.066605713361383e-27, "-0.000000", "%f",
-__LINE__, -3.071590110813156e+22, "-3.07159E+22", "%G",
-__LINE__, -3.073253864426931e+26, "-3.0733E+26", "%.5G",
-__LINE__, -3.078998328596940e+07, "-3.079e+07", "%5.4g",
-__LINE__, -3.082733887951920e+06, "-3.082734e+06", "%+6e",
-__LINE__, -3.084365358064710e+24, "-3.084365E+24", "%#E",
-__LINE__, -3.086948022123716e+25, "-30869480221237162176350921.072299", "%+f",
-__LINE__, -3.088200214218024e-10, "-0", "%0.f",
-__LINE__, -3.093442983942874e+08, "-309344298.394287", "%f",
-__LINE__, -3.103573455403534e-09, "-3.103573E-09", "%#E",
-__LINE__, -3.109178443120997e+07, "-31091784.431210", "%f",
-__LINE__, -3.111494549914917e+28, "-3e+28", "%0.g",
-__LINE__, -3.113384020517480e-17, " -0", "%+6.f",
-__LINE__, -3.121622779718055e+14, "-312162277971805.491", "%+.3f",
-__LINE__, -3.122780443843900e-01, "-0.312278", "%#g",
-__LINE__, -3.122952438335638e-25, "-3.122952E-25", "%E",
-__LINE__, -3.128970339463168e-18, "-3e-18", "%3.g",
-__LINE__, -3.130862507719335e+10, "-3.130863e+10", "%3e",
-__LINE__, -3.145960838955379e+03, "-3145.96", "%g",
-__LINE__, -3.149362645138929e+21, "-3.14936e+21", "%g",
-__LINE__, -3.150697168664913e+26, "-315069716866491322804222363.629378", "%+f",
-__LINE__, -3.157946785041287e+05, "-3.1579e+05", "%.4e",
-__LINE__, -3.158347006986809e-02, "-3.E-02", "%#.0E",
-__LINE__, -3.159542871923388e+07, "-31595429", "%2.f",
-__LINE__, -3.169997512351985e+15, "-3.169998E+15", "%6.7G",
-__LINE__, -3.170971776544746e+07, "-31709717.765447", "%f",
-__LINE__, -3.173246079104466e+19, "-3.173246E+19", "%1E",
-__LINE__, -3.173581228658553e-02, "-0.03", "%+0.G",
-__LINE__, -3.187598864929850e-07, "-3.18760E-07", "%#G",
-__LINE__, -3.190525302270244e+08, "-3.190525e+08", "%+0.7g",
-__LINE__, -3.191879884186422e+19, "-3.19E+19", "%.2E",
-__LINE__, -3.197292604744926e+02, "-3.197293e+02", "%+e",
-__LINE__, -3.203713337688838e-12, "-3.20371E-12", "%6G",
-__LINE__, -3.204416889544914e-18, "-0.000000", "%+f",
-__LINE__, -3.204494471917096e+09, "-3.20449e+09", "%g",
-__LINE__, -3.211933195516720e+11, "-3.21193E+11", "%G",
-__LINE__, -3.214544021431917e-24, "-0.000000", "%1f",
-__LINE__, -3.215501229487004e-07, "-3e-07", "%3.e",
-__LINE__, -3.232157492322707e-13, "-3.E-13", "%+#5.G",
-__LINE__, -3.239074974455177e-05, "-3.239e-05", "%2.4g",
-__LINE__, -3.243083730801156e-24, "-3.243084e-24", "%#e",
-__LINE__, -3.243128583394124e+07, "-32431285.8339", "%6.4f",
-__LINE__, -3.247997999770571e-08, "-3e-08", "%5.e",
-__LINE__, -3.258251054563991e-15, "-3.2583E-15", "%.5G",
-__LINE__, -3.259499053187446e+07, "-3.2595E+07", "%5.6G",
-__LINE__, -3.261907782031174e+20, "-3.3e+20", "%.2g",
-__LINE__, -3.263979380855122e+29, "-3.26398E+29", "%G",
-__LINE__, -3.264166546402073e+06, "-3.26417E+06", "%5G",
-__LINE__, -3.269357648926951e+01, "-3.E+01", "%#5.G",
-__LINE__, -3.273523287028019e-30, "-3.27352e-30", "%g",
-__LINE__, -3.274464331526264e-14, "-3e-14", "%.0g",
-__LINE__, -3.276647049958546e+05, "-327664.7", "%+.1f",
-__LINE__, -3.276853612008326e-04, "-3.276854e-04", "%e",
-__LINE__, -3.288077788905925e+17, "-3.28808e+17", "%g",
-__LINE__, -3.292054327509010e+21, "-3.29205e+21", "%+g",
-__LINE__, -3.292086868337041e-16, " -0", "%7.f",
-__LINE__, -3.299368070005327e-17, "-3E-17", "%5.G",
-__LINE__, -3.307165537474566e-30, "-3e-30", "%+2.g",
-__LINE__, -3.310556325973673e-17, "-3.31056E-17", "%G",
-__LINE__, -3.315407318453138e-09, "-3.315407e-09", "%+#.6e",
-__LINE__, -3.318402800998018e-09, "-3.3184E-09", "%+G",
-__LINE__, -3.324277622889107e-04, "-0.000332428", "%G",
-__LINE__, -3.326372457131185e+14, "-3.326372e+14", "%0e",
-__LINE__, -3.333300611287597e+18, "-3.3E+18", "%4.2G",
-__LINE__, -3.333608976277018e-25, "-3.33361e-25", "%g",
-__LINE__, -3.333613056182724e-24, "-3.33361e-24", "%.5e",
-__LINE__, -3.338505874378410e-26, "-0.00000", "%.5f",
-__LINE__, -3.339838772519661e+24, "-3.3398E+24", "%0.5G",
-__LINE__, -3.354802735583258e-27, "-3.3548E-27", "%G",
-__LINE__, -3.356542080644329e+15, "-3356542080644329.129058", "%#f",
-__LINE__, -3.360027692463026e-29, "-3.36003e-29", "%+g",
-__LINE__, -3.361845657814323e+06, "-3361845.657814", "%f",
-__LINE__, -3.363135493765816e-12, " -0", "%5.f",
-__LINE__, -3.367383112102258e+19, "-33673831121022579360.158034", "%f",
-__LINE__, -3.376798505037497e+03, "-3376.8", "%+3G",
-__LINE__, -3.388170639372559e+09, "-3.388171e+09", "%+e",
-__LINE__, -3.397304185715499e-12, "-3.397304e-12", "%+e",
-__LINE__, -3.401559374016378e-13, "-3.40156e-13", "%g",
-__LINE__, -3.402651870178825e+21, "-3.40265e+21", "%+g",
-__LINE__, -3.410491213537530e+12, "-3.41049E+12", "%G",
-__LINE__, -3.411695570460075e-01, "-3.411696e-01", "%e",
-__LINE__, -3.417311435719220e+29, "-3.4E+29", "%3.1E",
-__LINE__, -3.417581063208165e-23, " -0", "%+4.f",
-__LINE__, -3.424005615113663e-28, "-0.000000", "%f",
-__LINE__, -3.424793585094130e-12, "-0.000000", "%f",
-__LINE__, -3.434733077762304e-05, "-3.43473e-05", "%g",
-__LINE__, -3.436384988494743e+08, "-3.43638E+08", "%G",
-__LINE__, -3.441082995163884e-21, "-0.000000", "%f",
-__LINE__, -3.442868661576827e-23, "-3.442869e-23", "%#.7g",
-__LINE__, -3.444337521046186e+13, "-3.44434E+13", "%#G",
-__LINE__, -3.448230173418967e-28, "-3.44823E-28", "%#G",
-__LINE__, -3.448523828225326e-21, "-3.4485e-21", "%.4e",
-__LINE__, -3.449876796754720e-07, "-3.44988e-07", "%g",
-__LINE__, -3.450163790411588e+25, "-34501637904115876054333966.749255", "%2f",
-__LINE__, -3.450224454406567e-26, "-3.450224E-26", "%#1E",
-__LINE__, -3.459930768422874e-28, "-3.46E-28", "%2.3G",
-__LINE__, -3.460730505022601e-28, "-3.46073e-28", "%#g",
-__LINE__, -3.462894265593946e-10, "-3.46289e-10", "%+#g",
-__LINE__, -3.464808359229496e+05, "-346481", "%6.6G",
-__LINE__, -3.467272303652620e-03, "-0.00346727", "%g",
-__LINE__, -3.468252706910251e+10, "-3.5E+10", "%#7.2G",
-__LINE__, -3.473623965680253e+27, "-3.47362e+27", "%g",
-__LINE__, -3.474527926009729e+11, "-3.475E+11", "%.4G",
-__LINE__, -3.476489048299929e+15, "-3.47649e+15", "%g",
-__LINE__, -3.477809698895344e-09, "-0.000", "%+.3f",
-__LINE__, -3.493008398637667e-28, " -0", "%+4.f",
-__LINE__, -3.497441286691613e+07, "-3.49744e+07", "%g",
-__LINE__, -3.500904660533358e+00, "-3.500905E+00", "%+1E",
-__LINE__, -3.504996054364915e+25, "-3.505e+25", "%+g",
-__LINE__, -3.507738629125434e-24, "-0.00", "%+4.2f",
-__LINE__, -3.508557770253211e-04, "-3.508558e-04", "%#6e",
-__LINE__, -3.516056824437550e+20, "-3.516057e+20", "%#e",
-__LINE__, -3.521102917733367e+02, "-352.11", "%g",
-__LINE__, -3.523948985825251e+10, "-3.52395e+10", "%+g",
-__LINE__, -3.525281835697895e-15, "-3.525282e-15", "%e",
-__LINE__, -3.534088845494570e-26, "-0.000000", "%2f",
-__LINE__, -3.541002442741569e+01, "-35.410", "%3.3f",
-__LINE__, -3.541126630345017e-19, "-3.541127e-19", "%e",
-__LINE__, -3.545277845967514e-17, "-0.000000", "%f",
-__LINE__, -3.560935430637329e-12, "-3.56094E-12", "%G",
-__LINE__, -3.564234584447659e-23, "-3.56423E-23", "%G",
-__LINE__, -3.576040378379921e-11, "-0.000000", "%+6f",
-__LINE__, -3.578133580350674e-05, "-3.578134e-05", "%#e",
-__LINE__, -3.584484015191491e-28, "-0.0", "%+2.1f",
-__LINE__, -3.591961845146752e+27, "-3.59196E+27", "%G",
-__LINE__, -3.602508380305001e+26, "-3.60251e+26", "%g",
-__LINE__, -3.603113449808132e+04, "-36031.134498", "%+3.6f",
-__LINE__, -3.605569849504628e+25, "-4E+25", "%6.G",
-__LINE__, -3.611297754851416e+05, "-361129.775485", "%+f",
-__LINE__, -3.613177909959201e-28, "-0.000000", "%f",
-__LINE__, -3.616261225230595e-01, "-0.361626", "%3g",
-__LINE__, -3.619203521536307e+09, "-3.6192E+09", "%G",
-__LINE__, -3.619316709131723e-27, "-0.0000000", "%.7f",
-__LINE__, -3.623100583082346e+28, "-3.6231E+28", "%+G",
-__LINE__, -3.626582653589919e+21, "-3626582653589918603387.332041", "%f",
-__LINE__, -3.626667540343067e-30, "-4.E-30", "%#.0G",
-__LINE__, -3.633539220625861e-30, "-3.634E-30", "%+.3E",
-__LINE__, -3.641655782149502e-11, "-3.64166E-11", "%G",
-__LINE__, -3.644523594046571e+25, "-3.64452e+25", "%5g",
-__LINE__, -3.645977605394108e+25, "-3.646e+25", "%+0.3e",
-__LINE__, -3.647864582248812e+13, "-4E+13", "%4.G",
-__LINE__, -3.655241667633056e-25, "-3.655242E-25", "%E",
-__LINE__, -3.662603655433297e+23, "-3.662604e+23", "%e",
-__LINE__, -3.668995445134158e+22, " -4E+22", "%7.G",
-__LINE__, -3.670006666569412e-11, "-3.670007e-11", "%e",
-__LINE__, -3.670510381138509e-24, "-3.670510e-24", "%e",
-__LINE__, -3.671283003268254e-20, "-3.67128E-20", "%G",
-__LINE__, -3.687760201176777e-13, "-3.68776E-13", "%G",
-__LINE__, -3.687983982100676e-14, "-0.00", "%.2f",
-__LINE__, -3.694808382827435e-12, "-3.694808E-12", "%#E",
-__LINE__, -3.696158520838821e+28, "-3.69616E+28", "%3G",
-__LINE__, -3.700911860811323e+18, "-3.70091e+18", "%+g",
-__LINE__, -3.701328314738669e+24, "-3.70133e+24", "%g",
-__LINE__, -3.707068461822151e-19, "-3.707068E-19", "%E",
-__LINE__, -3.710679411506914e+25, "-3.71068e+25", "%g",
-__LINE__, -3.713003840923896e-23, "-3.713e-23", "%7g",
-__LINE__, -3.717028397747828e-28, "-3.71703e-28", "%g",
-__LINE__, -3.728159642236442e+14, "-3.72816E+14", "%G",
-__LINE__, -3.731956233637010e+21, "-3.73196E+21", "%G",
-__LINE__, -3.742336623322610e+07, "-3.74234e+07", "%g",
-__LINE__, -3.748328269630045e+04, "-37483.3", "%G",
-__LINE__, -3.750803081283569e-27, "-3.7508E-27", "%+7G",
-__LINE__, -3.752021500826652e-04, "-0.0004", "%.1G",
-__LINE__, -3.755942257004103e-12, "-3.75594E-12", "%G",
-__LINE__, -3.765921235889045e+03, " -4e+03", "%+7.g",
-__LINE__, -3.772453135667801e-28, "-3.77245E-28", "%G",
-__LINE__, -3.776384200230367e+27, "-3.776e+27", "%1.4g",
-__LINE__, -3.787035870684945e-25, "-4E-25", "%+3.G",
-__LINE__, -3.798616350818839e-29, "-3.7986164e-29", "%.7e",
-__LINE__, -3.807178315238428e-15, "-0.000000", "%+#6f",
-__LINE__, -3.822059837967635e+18, "-3822059837967634621.236357", "%6.6f",
-__LINE__, -3.823553096022006e+12, "-3.82355e+12", "%g",
-__LINE__, -3.839198115259428e-23, "-0.000000", "%f",
-__LINE__, -3.846953640321746e+02, "-3.846954E+02", "%E",
-__LINE__, -3.852230696542361e+08, "-3.8522e+08", "%#.5g",
-__LINE__, -3.861139362195314e-25, "-3.86114E-25", "%2G",
-__LINE__, -3.873388618099769e+09, "-3873388618", "%0.0f",
-__LINE__, -3.874161550543817e+15, "-3.874162e+15", "%+e",
-__LINE__, -3.874527935469425e+20, "-3.87E+20", "%3.3G",
-__LINE__, -3.878069577893697e-30, "-3.878070E-30", "%#E",
-__LINE__, -3.878852490397702e-20, "-3.87885e-20", "%g",
-__LINE__, -3.879688342272101e-10, "-0.00", "%#4.2f",
-__LINE__, -3.879797428399897e+03, "-3880", "%1.4g",
-__LINE__, -3.881588804766756e+00, "-3.9", "%+4.2G",
-__LINE__, -3.889377318111182e+01, "-38.8938", "%+.4f",
-__LINE__, -3.893444523430385e-03, "-0.004", "%+2.g",
-__LINE__, -3.894912141515856e+03, "-3894.91", "%+g",
-__LINE__, -3.905279115773667e+04, "-39052.791158", "%f",
-__LINE__, -3.905333955484919e-20, "-3.90533E-20", "%G",
-__LINE__, -3.906559442060730e+27, "-3906559442060730447110472596.250474", "%f",
-__LINE__, -3.909396469655334e-26, "-3.91E-26", "%.3G",
-__LINE__, -3.920132491092364e+11, "-3.92013e+11", "%g",
-__LINE__, -3.935651497471973e+27, "-3935651497471972604103029880", "%5.f",
-__LINE__, -3.939742577853889e-03, "-0.004", "%5.G",
-__LINE__, -3.943284017088198e+19, "-39432840170881981123.3", "%.1f",
-__LINE__, -3.947452186327660e+09, "-3947452186.33", "%0.2f",
-__LINE__, -3.951967237553488e+18, "-3951967237553488132.562052", "%f",
-__LINE__, -3.953673427359789e-28, "-3.954E-28", "%3.4G",
-__LINE__, -3.956044867371602e+23, "-4e+23", "%+6.1g",
-__LINE__, -3.965038994251913e-20, "-3.96504e-20", "%g",
-__LINE__, -3.970527677577937e+05, "-4.e+05", "%#0.1g",
-__LINE__, -3.970717822164395e-20, "-3.970718e-20", "%6e",
-__LINE__, -3.978063834438912e-19, "-3.97806E-19", "%G",
-__LINE__, -3.982705395472599e+27, "-3.9827e+27", "%#.5g",
-__LINE__, -3.983486821352571e-28, "-3.98349e-28", "%g",
-__LINE__, -3.985470630230926e-14, "-4e-14", "%.2g",
-__LINE__, -3.993095662863953e-16, "-3.993096e-16", "%e",
-__LINE__, -4.006984141314271e-22, " -4e-22", "%7.2g",
-__LINE__, -4.006984141314271e-22, "-4.0e-22", "%#7.2g",
-__LINE__, -4.013226099863981e+06, "-4.013226E+06", "%+E",
-__LINE__, -4.013702226581167e+00, "-4.0137022", "%+#3.7f",
-__LINE__, -4.017598274642537e+11, "-4E+11", "%5.G",
-__LINE__, -4.021385792825529e-09, " -4e-09", "%7.2g",
-__LINE__, -4.024099064819937e-20, "-4.0241E-20", "%+G",
-__LINE__, -4.026952473441366e+22, "-4.026952e+22", "%6.7g",
-__LINE__, -4.027636677087866e+12, "-4.02764E+12", "%G",
-__LINE__, -4.036506013049443e+17, "-4.03651e+17", "%0.6g",
-__LINE__, -4.063191953523012e-06, " -0.0", "%6.1f",
-__LINE__, -4.070953223475192e-23, "-4.07095E-23", "%G",
-__LINE__, -4.072425833070524e+09, "-4.072426E+09", "%E",
-__LINE__, -4.086025576759603e+12, "-4.086026e+12", "%e",
-__LINE__, -4.086627783296081e-24, "-4.087E-24", "%.3E",
-__LINE__, -4.086683676772144e+10, "-40866836767.721439", "%f",
-__LINE__, -4.087336043219081e-10, "-0.", "%+#0.f",
-__LINE__, -4.125162973336809e-26, "-4.125163E-26", "%.7G",
-__LINE__, -4.150753797717075e-10, "-4.2e-10", "%.2g",
-__LINE__, -4.152126152181912e+23, "-4.15213e+23", "%g",
-__LINE__, -4.164458223079432e-07, "-4.164458E-07", "%E",
-__LINE__, -4.170624866130099e+03, "-4170.624866", "%4.6f",
-__LINE__, -4.171137277374942e-01, " -4E-01", "%+7.E",
-__LINE__, -4.176067421901769e-25, "-4.17607E-25", "%G",
-__LINE__, -4.179514418604771e+24, "-4.1795e+24", "%3.5g",
-__LINE__, -4.196285183415621e+23, "-4.19629E+23", "%5G",
-__LINE__, -4.198600486581023e+23, "-4E+23", "%+4.G",
-__LINE__, -4.199020494598538e-16, "-0.000000", "%+f",
-__LINE__, -4.207824153501688e-01, "-0.420782", "%G",
-__LINE__, -4.219086441294006e-13, " -0", "%+4.f",
-__LINE__, -4.223689582765525e+12, "-4.22369e+12", "%g",
-__LINE__, -4.230213377391093e+04, "-42302.1", "%+2.6G",
-__LINE__, -4.232495358100605e-02, "-0.042325", "%+f",
-__LINE__, -4.235459662515940e-29, "-0.000000", "%f",
-__LINE__, -4.240807508057296e-07, "-4e-07", "%0.g",
-__LINE__, -4.248376819122346e-13, "-4.248377e-13", "%7e",
-__LINE__, -4.251361939638334e-23, "-4.251362E-23", "%E",
-__LINE__, -4.253044333568077e+24, "-4.253044e+24", "%4e",
-__LINE__, -4.255728039119772e-30, "-4.25573E-30", "%2G",
-__LINE__, -4.256502531648988e+02, "-425.65", "%G",
-__LINE__, -4.260731632612400e-04, "-0", "%2.f",
-__LINE__, -4.262037138254753e-25, "-4e-25", "%5.g",
-__LINE__, -4.270910126379393e+00, "-4.2709", "%#7.4f",
-__LINE__, -4.273844276097008e-09, " -0.", "%#4.f",
-__LINE__, -4.280424136111831e+21, "-4.280E+21", "%.3E",
-__LINE__, -4.284351940366486e-23, "-0.000000", "%+f",
-__LINE__, -4.291747881693517e-29, "-4.3e-29", "%+#.2g",
-__LINE__, -4.298346825232928e+04, "-42983.5", "%G",
-__LINE__, -4.298879924365432e+28, "-42988799243654316484253286034.800112", "%f",
-__LINE__, -4.302192665689887e-25, "-0.000000", "%f",
-__LINE__, -4.303899568112784e+06, "-4E+06", "%1.G",
-__LINE__, -4.307399960278190e-30, "-4.31e-30", "%.3g",
-__LINE__, -4.341161949359232e+01, "-43.411619", "%+f",
-__LINE__, -4.353334435604675e+17, " -4e+17", "%+7.g",
-__LINE__, -4.354760231068195e+08, "-4e+08", "%2.e",
-__LINE__, -4.363535913318519e+08, "-4.363536E+08", "%+7E",
-__LINE__, -4.365389605557404e-29, "-4.365390e-29", "%e",
-__LINE__, -4.369278570829168e-22, "-4.369279E-22", "%5E",
-__LINE__, -4.372187639240662e-11, "-4.37219e-11", "%+g",
-__LINE__, -4.374221079233858e-15, "-4.37422E-15", "%4.6G",
-__LINE__, -4.374840292001664e-13, "-0.000000", "%+f",
-__LINE__, -4.376554800103945e+16, "-43765548001039453.751559", "%f",
-__LINE__, -4.376659235899513e+07, "-4.4E+07", "%0.2G",
-__LINE__, -4.377316129868239e-06, "-4.37732E-06", "%+5G",
-__LINE__, -4.380028480226885e+21, "-4e+21", "%1.0e",
-__LINE__, -4.380434965450223e+16, "-43804349654502230.393405", "%f",
-__LINE__, -4.392477080355168e-15, "-4E-15", "%+2.G",
-__LINE__, -4.396120020536161e+17, "-439612002053616102.159594", "%#f",
-__LINE__, -4.400993154571784e+13, "-44009931545717.844159", "%f",
-__LINE__, -4.402873692051930e-26, "-4.4e-26", "%5.3g",
-__LINE__, -4.405330274903779e+24, "-4405330274903779042006135.568954", "%+5f",
-__LINE__, -4.406272291312090e+06, "-4.40627e+06", "%+g",
-__LINE__, -4.407065949816988e-13, "-0.000000", "%f",
-__LINE__, -4.408295597674563e-10, "-4.4083e-10", "%g",
-__LINE__, -4.417553815178214e-30, "-4.41755E-30", "%G",
-__LINE__, -4.428894120469459e+16, "-4.42889e+16", "%g",
-__LINE__, -4.433747825142046e+04, "-4.433748e+04", "%#e",
-__LINE__, -4.435051082856639e+11, "-4.43505E+11", "%G",
-__LINE__, -4.445045573007259e-27, "-4.445e-27", "%.5g",
-__LINE__, -4.447791368960968e-25, " -4e-25", "%+7.g",
-__LINE__, -4.449691386526521e-11, "-4.44969e-11", "%g",
-__LINE__, -4.451399093849402e+06, "-4.e+06", "%#0.e",
-__LINE__, -4.453753130320864e-22, "-4E-22", "%6.E",
-__LINE__, -4.455910780463539e+00, "-4", "%2.g",
-__LINE__, -4.464935674747308e+25, "-4.46494e+25", "%g",
-__LINE__, -4.469759565657550e-29, "-4.46976e-29", "%g",
-__LINE__, -4.473254139442931e+14, "-4E+14", "%3.1G",
-__LINE__, -4.480844704930373e-04, "-0.000448", "%5.6f",
-__LINE__, -4.484177356024563e+19, "-4.484177E+19", "%E",
-__LINE__, -4.488115678357666e-13, "-4.48812e-13", "%g",
-__LINE__, -4.491545112281561e+12, "-4.491545E+12", "%E",
-__LINE__, -4.492547433553077e-23, "-4.49255e-23", "%g",
-__LINE__, -4.492701755830813e-05, "-0.000045", "%f",
-__LINE__, -4.497405935096372e-02, "-4.497406e-02", "%e",
-__LINE__, -4.502764260212887e+21, "-4.50276E+21", "%G",
-__LINE__, -4.511984199938207e+29, "-451198419993820731832556703011.505306", "%f",
-__LINE__, -4.514517861504637e-13, "-4.51452e-13", "%g",
-__LINE__, -4.525577218881990e+24, "-4.5e+24", "%2.2g",
-__LINE__, -4.549244580903896e-26, "-5E-26", "%2.G",
-__LINE__, -4.569192488002113e-29, "-5E-29", "%3.G",
-__LINE__, -4.572011438847734e+17, "-4.57e+17", "%#.3g",
-__LINE__, -4.573010973514519e-08, "-4.57301e-08", "%+7g",
-__LINE__, -4.584534976177852e-04, "-0.000458453", "%7g",
-__LINE__, -4.584729895132228e-21, "-0.000000", "%4f",
-__LINE__, -4.585259328217483e-30, "-4.58526E-30", "%+#4.6G",
-__LINE__, -4.589603063610410e-04, "-4.589603E-04", "%+E",
-__LINE__, -4.592428795671033e+22, " -5e+22", "%7.g",
-__LINE__, -4.595683678223830e-20, " -0", "%5.f",
-__LINE__, -4.602585606100101e+05, "-4.602586E+05", "%E",
-__LINE__, -4.603375306660027e-08, "-5E-08", "%+6.G",
-__LINE__, -4.611341343728034e-18, "-4.611341e-18", "%5e",
-__LINE__, -4.613608487855863e+05, "-461361", "%6g",
-__LINE__, -4.615997775774194e-24, "-4.61600e-24", "%#g",
-__LINE__, -4.620310950564759e+23, "-462031095056475926696749", "%1.0f",
-__LINE__, -4.620645693595563e-10, "-4.6206457e-10", "%.7e",
-__LINE__, -4.621527706233292e-09, "-4.621528e-09", "%#e",
-__LINE__, -4.625215210297273e-13, "-4.62522E-13", "%G",
-__LINE__, -4.636755152220100e-29, "-0.000000", "%#f",
-__LINE__, -4.641203877508087e+23, "-4.6412e+23", "%0g",
-__LINE__, -4.648627249239175e+23, "-4.65E+23", "%+0.3G",
-__LINE__, -4.662546890623409e-10, "-4.663E-10", "%.3E",
-__LINE__, -4.664488650292317e-27, "-4.66449e-27", "%#g",
-__LINE__, -4.668715685060282e+08, "-466871568.50603", "%.5f",
-__LINE__, -4.673332851657081e-18, "-4.7e-18", "%#5.2g",
-__LINE__, -4.683361436174074e+24, "-4.68e+24", "%#.2e",
-__LINE__, -4.693748680461066e-01, "-0.469375", "%G",
-__LINE__, -4.697110010549124e+23, "-4.69711E+23", "%G",
-__LINE__, -4.710442739966989e+06, "-4.710443e+06", "%2e",
-__LINE__, -4.713427678642280e-09, "-4.71343e-09", "%g",
-__LINE__, -4.721999055940316e-04, "-4.721999e-04", "%#1e",
-__LINE__, -4.724262200578540e+17, "-472426220057853996.081576", "%+f",
-__LINE__, -4.733267644288093e+01, "-4.733268e+01", "%7e",
-__LINE__, -4.742854711396110e-11, "-0.000000", "%f",
-__LINE__, -4.757456106385936e+23, "-4.75746e+23", "%g",
-__LINE__, -4.770895495642298e+27, "-4770895495642298200777986494.358629", "%2f",
-__LINE__, -4.775073456318149e+29, "-4.775073E+29", "%#E",
-__LINE__, -4.779997387204258e+17, "-4.78e+17", "%g",
-__LINE__, -4.799264315770707e-23, "-4.799264E-23", "%+.7G",
-__LINE__, -4.814277930599660e+10, "-5e+10", "%2.1g",
-__LINE__, -4.818413387018612e+05, "-5e+05", "%.0g",
-__LINE__, -4.818827195107612e-16, "-4.818827e-16", "%e",
-__LINE__, -4.841524514024803e+21, "-4.84152E+21", "%G",
-__LINE__, -4.860585077313477e+10, "-4.86059E+10", "%+G",
-__LINE__, -4.870037451948589e+28, "-48700374519485887248038125107.996166", "%f",
-__LINE__, -4.888835952705153e-28, "-4.888836E-28", "%+E",
-__LINE__, -4.893523355754114e-19, "-4.893523e-19", "%.6e",
-__LINE__, -4.906070260482585e+17, "-490607026048258454", "%+.0f",
-__LINE__, -4.907734144101900e+25, "-5E+25", "%+.1G",
-__LINE__, -4.917899547741841e-25, "-4.917900e-25", "%e",
-__LINE__, -4.923348512538722e+25, "-49233485125387215219916470.232420", "%+.6f",
-__LINE__, -4.926052630078460e-26, "-4.926053e-26", "%e",
-__LINE__, -4.926751662051156e+14, "-4.927E+14", "%+5.3E",
-__LINE__, -4.928017952199046e-12, "-0.000000", "%f",
-__LINE__, -4.944296782981195e-21, "-4.9443E-21", "%1.5G",
-__LINE__, -4.947320427183599e-19, "-4.947320e-19", "%.6e",
-__LINE__, -4.968188938972135e+17, "-4.96819E+17", "%G",
-__LINE__, -4.968756725758674e+05, "-496876", "%G",
-__LINE__, -4.968788759793340e-26, "-4.97E-26", "%.3G",
-__LINE__, -4.983904999913364e-24, "-5E-24", "%0.G",
-__LINE__, -4.985209496522767e+23, "-4.985209e+23", "%e",
-__LINE__, -4.987363880732866e+08, "-4.98736E+08", "%G",
-__LINE__, -4.989754940144973e+05, "-498975.494014", "%f",
-__LINE__, -4.998203870733718e-25, "-4.9982e-25", "%g",
-__LINE__, -4.999153445016792e-27, "-5e-27", "%+1.e",
-__LINE__, -5.002693488258108e+06, " -5e+06", "%+7.g",
-__LINE__, -5.017958458603783e+05, "-5.0179585E+05", "%+.7E",
-__LINE__, -5.028902178573363e-12, "-5.0289e-12", "%0g",
-__LINE__, -5.032337536971444e+07, "-50323375.369714", "%f",
-__LINE__, -5.036525516370473e-24, "-5.0365e-24", "%4.5g",
-__LINE__, -5.038642321515756e+18, "-5038642321515755639.893541", "%f",
-__LINE__, -5.051003516976770e-14, "-5.051E-14", "%+G",
-__LINE__, -5.051196143816789e+27, "-5.0512e+27", "%g",
-__LINE__, -5.057372886713786e+28, "-5.057373e+28", "%#e",
-__LINE__, -5.057475029459727e+12, "-5.05748e+12", "%+g",
-__LINE__, -5.068286816124670e-17, "-5.068E-17", "%5.3E",
-__LINE__, -5.070475165759468e-12, "-0.000000", "%4.6f",
-__LINE__, -5.081352543220476e+20, "-5.081E+20", "%.3E",
-__LINE__, -5.084398319179363e+11, "-508439831917.936313", "%#f",
-__LINE__, -5.085781220648484e+05, "-5.E+05", "%+#7.G",
-__LINE__, -5.094941054632498e-24, "-5.09494E-24", "%+G",
-__LINE__, -5.100059596310871e-10, "-5.10006e-10", "%3.6g",
-__LINE__, -5.103072553594136e-01, "-0.5", "%+1.g",
-__LINE__, -5.106319890388412e+08, "-5.106320e+08", "%4e",
-__LINE__, -5.107120687977690e+09, "-5107120687.977690", "%f",
-__LINE__, -5.119910716893161e-13, "-5.11991E-13", "%6G",
-__LINE__, -5.127594569425709e-29, "-5.12759e-29", "%#g",
-__LINE__, -5.130365585632797e+29, "-5.13037e+29", "%#g",
-__LINE__, -5.131415638022112e+08, "-513141563.802211", "%0f",
-__LINE__, -5.144703216335916e-23, "-5.1447e-23", "%g",
-__LINE__, -5.152511923201882e-05, "-5.15251E-05", "%+G",
-__LINE__, -5.165484448280190e-12, " -0.0", "%5.1f",
-__LINE__, -5.179220760465737e-20, "-5e-20", "%+5.g",
-__LINE__, -5.183005119662180e-10, "-5.183005E-10", "%+E",
-__LINE__, -5.199587953258117e+13, "-5.19959e+13", "%6g",
-__LINE__, -5.202041951844580e-25, "-0.000000", "%f",
-__LINE__, -5.202836038621740e+00, "-5.20284", "%G",
-__LINE__, -5.212204099528552e-11, "-5.2122e-11", "%.6g",
-__LINE__, -5.225617726710534e+17, "-522561772671053414.995868", "%+f",
-__LINE__, -5.230162003281426e+25, "-52301620032814257754694153.84578", "%+6.5f",
-__LINE__, -5.251849429321286e-11, "-5.25185e-11", "%g",
-__LINE__, -5.265174939930368e+23, "-5.265175E+23", "%1.6E",
-__LINE__, -5.271218134351422e+21, "-5.27122e+21", "%+1g",
-__LINE__, -5.273823357545750e+17, "-527382335754575048.980541", "%f",
-__LINE__, -5.279848797214957e+11, "-527984879721.495659", "%0f",
-__LINE__, -5.281551888625290e+11, "-5e+11", "%4.g",
-__LINE__, -5.281780377142961e-24, "-5.28178e-24", "%g",
-__LINE__, -5.292125782379512e+03, "-5292.125782", "%f",
-__LINE__, -5.292401691410388e+15, "-5292401691410387.520875", "%f",
-__LINE__, -5.305120752102265e-25, "-5.30512e-25", "%+#.5e",
-__LINE__, -5.317975791704413e+16, "-5.31798e+16", "%+g",
-__LINE__, -5.336522843607233e+27, "-5.33652e+27", "%#6g",
-__LINE__, -5.342016438000917e-05, " -5e-05", "%+7.e",
-__LINE__, -5.351122291549103e+06, "-5351122.291549", "%+0f",
-__LINE__, -5.352043956303597e+00, "-5.35204", "%g",
-__LINE__, -5.353582488767747e+09, "-5.354E+09", "%7.3E",
-__LINE__, -5.383420177718380e+04, "-5e+04", "%1.e",
-__LINE__, -5.384320189791882e-10, "-5.384320e-10", "%e",
-__LINE__, -5.409487543257379e-12, "-5.40949E-12", "%G",
-__LINE__, -5.418395794776773e+23, "-5.4184e+23", "%g",
-__LINE__, -5.419918795921525e-09, "-0.000000", "%+f",
-__LINE__, -5.422374157832442e+11, "-5.42237e+11", "%3g",
-__LINE__, -5.426916951577001e-27, "-5.42692E-27", "%+G",
-__LINE__, -5.430058833461779e+28, "-5.43006E+28", "%G",
-__LINE__, -5.444433348653147e+23, "-5.444433E+23", "%E",
-__LINE__, -5.446560186537024e+09, "-5.446560E+09", "%E",
-__LINE__, -5.464243500152188e+27, "-5.46424E+27", "%G",
-__LINE__, -5.464427517531742e+20, "-546442751753174249529.365625", "%f",
-__LINE__, -5.465783705970954e+05, "-5E+05", "%1.E",
-__LINE__, -5.475138077475789e-11, "-5e-11", "%.0e",
-__LINE__, -5.475302250616576e+10, "-54753022506.1658", "%.4f",
-__LINE__, -5.488964905442472e+09, "-5.48896e+09", "%g",
-__LINE__, -5.492508526846316e-08, "-5.49251e-08", "%.6g",
-__LINE__, -5.520533408804846e-15, "-5.520533e-15", "%e",
-__LINE__, -5.532744688447266e+28, "-55327446884472664123677532188.594341", "%2.6f",
-__LINE__, -5.535834653450131e-14, "-5.5e-14", "%0.1e",
-__LINE__, -5.554344735392882e-02, "-5.554345E-02", "%+#E",
-__LINE__, -5.555497334515501e-17, "-5.5555e-17", "%g",
-__LINE__, -5.558304303221977e+14, "-555830430322197.699411", "%f",
-__LINE__, -5.562210815777694e-05, "-5.562211E-05", "%#1E",
-__LINE__, -5.564800722538402e-09, "-5.56480e-09", "%#.6g",
-__LINE__, -5.567143271590439e-01, "-5.567143e-01", "%#e",
-__LINE__, -5.568606044396186e+01, "-55.6861", "%4g",
-__LINE__, -5.592027856401721e+12, "-5.592028e+12", "%.7g",
-__LINE__, -5.592295342565443e+22, "-6.E+22", "%#3.G",
-__LINE__, -5.600007421926053e+07, "-56000074.219261", "%1f",
-__LINE__, -5.601444553155006e-12, "-5.60144E-12", "%G",
-__LINE__, -5.605128912835080e-03, "-0.005605", "%+f",
-__LINE__, -5.610950285679577e+19, "-5.61095E+19", "%G",
-__LINE__, -5.622074657679467e+11, "-562207465767.946690", "%f",
-__LINE__, -5.627358352391656e-01, "-0.6", "%1.g",
-__LINE__, -5.627974317622488e-02, "-5.627974e-02", "%+e",
-__LINE__, -5.629497696447229e+27, "-5.629E+27", "%+.4G",
-__LINE__, -5.631383567258576e-29, "-5.63138e-29", "%0g",
-__LINE__, -5.635241327177333e-18, "-5.63524E-18", "%G",
-__LINE__, -5.644819783138381e+06, "-5.644820E+06", "%#E",
-__LINE__, -5.648538459114833e+26, "-564853845911483265496144667.849876", "%+f",
-__LINE__, -5.649004865848537e+00, "-5.649", "%g",
-__LINE__, -5.653403316885170e+23, "-6E+23", "%2.0E",
-__LINE__, -5.656109962244926e-18, "-0.000000", "%f",
-__LINE__, -5.674988031695793e+22, "-5.674988E+22", "%+.7G",
-__LINE__, -5.686380226400881e-22, "-0.000000", "%f",
-__LINE__, -5.698840855829442e-14, "-5.69884E-14", "%G",
-__LINE__, -5.707036642649580e+03, "-5707.036643", "%f",
-__LINE__, -5.710344882278847e+11, "-5.71034E+11", "%+G",
-__LINE__, -5.714852196401017e+19, "-5.71485E+19", "%+G",
-__LINE__, -5.720153622156089e-22, "-5.72015E-22", "%G",
-__LINE__, -5.722366011976922e+26, "-5.72237e+26", "%+g",
-__LINE__, -5.722909928097404e+12, "-5.72291E+12", "%2G",
-__LINE__, -5.725325961787777e-25, "-5.72533e-25", "%g",
-__LINE__, -5.727138241052646e+19, "-5.72714e+19", "%+#g",
-__LINE__, -5.734025840446336e+14, "-5.73403e+14", "%+g",
-__LINE__, -5.736469106710259e-05, "-0.000057", "%.6f",
-__LINE__, -5.755099153733116e-14, "-5.7551e-14", "%+g",
-__LINE__, -5.758411844890947e-20, "-6E-20", "%+6.G",
-__LINE__, -5.760350214122813e+03, "-5760.35", "%+g",
-__LINE__, -5.768009192512392e-30, "-0", "%1.f",
-__LINE__, -5.772343286693103e+07, "-5.77234E+07", "%G",
-__LINE__, -5.776693265471852e-27, "-5.776693E-27", "%E",
-__LINE__, -5.779682861172754e-28, "-5.779683e-28", "%e",
-__LINE__, -5.789953490749936e+26, "-578995349074993637117358957.76656", "%5.5f",
-__LINE__, -5.796771264754334e+04, "-57967.7", "%g",
-__LINE__, -5.804788370597286e-02, "-5.80479E-02", "%+#1.5E",
-__LINE__, -5.805343475329215e-13, "-5.80534e-13", "%g",
-__LINE__, -5.809853913830122e+09, "-5809853914", "%+0.f",
-__LINE__, -5.817313814570609e-30, " -0", "%7.0f",
-__LINE__, -5.831708441750138e+00, "-5.83171", "%#g",
-__LINE__, -5.846914550593652e+29, "-5.846915e+29", "%e",
-__LINE__, -5.851455214762288e+04, "-58514.6", "%+G",
-__LINE__, -5.855803663871393e-23, "-6E-23", "%5.E",
-__LINE__, -5.858065129988470e+10, "-5.85807e+10", "%+g",
-__LINE__, -5.863147168075411e-14, "-5.86315e-14", "%+g",
-__LINE__, -5.878936740266680e-04, "-0.000587894", "%g",
-__LINE__, -5.887654893386630e+25, "-58876548933866299506689756.526612", "%#f",
-__LINE__, -5.889416409731902e-02, "-0.06", "%5.g",
-__LINE__, -5.897630195029892e-18, "-5.897630E-18", "%#0.7G",
-__LINE__, -5.898506808456422e-19, "-5.89851E-19", "%G",
-__LINE__, -5.901768645393515e+29, "-5.90177E+29", "%+G",
-__LINE__, -5.907529093570369e+10, "-59075290935.703695", "%f",
-__LINE__, -5.910069365260240e+13, "-59100693652602.39849", "%+#5.5f",
-__LINE__, -5.915678929676435e-07, "-0.000001", "%+f",
-__LINE__, -5.922232380131716e-01, "-0.592223", "%+3f",
-__LINE__, -5.923716473994306e+19, "-5.92372E+19", "%+#.6G",
-__LINE__, -5.929950428920404e-15, "-5.929950e-15", "%+e",
-__LINE__, -5.949552735665802e+26, "-5.94955e+26", "%#g",
-__LINE__, -5.949977081310732e-02, "-0.059500", "%f",
-__LINE__, -5.954520303889356e-07, "-5.954520E-07", "%5E",
-__LINE__, -5.978861337429145e-13, "-6E-13", "%1.G",
-__LINE__, -5.980539445081087e+15, "-5.98054E+15", "%.6G",
-__LINE__, -5.981724990853490e-03, " -0.006", "%#7.g",
-__LINE__, -5.989488907825821e+03, "-6E+03", "%.2G",
-__LINE__, -5.998272294890842e+06, "-6.00E+06", "%4.2E",
-__LINE__, -6.023775731455919e-29, "-6.023776e-29", "%e",
-__LINE__, -6.028153126666870e-05, "-6.e-05", "%+#6.e",
-__LINE__, -6.036200621484690e+25, "-6e+25", "%2.2g",
-__LINE__, -6.036400640928137e-14, "-6.036401e-14", "%e",
-__LINE__, -6.038198451098329e-20, "-6.038198e-20", "%1.7g",
-__LINE__, -6.045778975641123e-15, "-6.04578E-15", "%G",
-__LINE__, -6.046038904252073e+00, "-6.04604", "%g",
-__LINE__, -6.082158462782175e-06, "-0.000006", "%+#f",
-__LINE__, -6.106162726644904e+10, "-6.10616e+10", "%g",
-__LINE__, -6.126345215489182e+10, "-6e+10", "%+1.g",
-__LINE__, -6.131852309620571e+02, "-6e+02", "%4.e",
-__LINE__, -6.134589313243809e-01, "-0.613459", "%+#f",
-__LINE__, -6.142358153783462e-10, "-6.14236E-10", "%4G",
-__LINE__, -6.151524334856263e+27, "-6151524334856262932191839354.345575", "%+6f",
-__LINE__, -6.156818333724550e+04, "-6.e+04", "%#.1g",
-__LINE__, -6.166172551433993e+24, "-6166172551433993120895138.4178", "%5.4f",
-__LINE__, -6.169532428006014e-09, "-6.16953e-09", "%3g",
-__LINE__, -6.172019382601770e-28, "-0.000000", "%+f",
-__LINE__, -6.174496985807155e-09, "-6.1745E-09", "%G",
-__LINE__, -6.186771845105751e+04, "-61867.7", "%G",
-__LINE__, -6.200817973780066e+22, "-6.20082E+22", "%3G",
-__LINE__, -6.218004335456301e-22, "-0.000000", "%+f",
-__LINE__, -6.219009630546262e-18, "-6.22e-18", "%6.3g",
-__LINE__, -6.242532875230618e-06, "-0.000006", "%7f",
-__LINE__, -6.243612261280864e+14, "-6.24361e+14", "%.6g",
-__LINE__, -6.243689597320126e+10, "-6e+10", "%.0e",
-__LINE__, -6.244620667090527e+04, "-6e+04", "%6.e",
-__LINE__, -6.250789625572054e-09, "-0.000000", "%+f",
-__LINE__, -6.253537566219164e+01, "-63.", "%#1.f",
-__LINE__, -6.284420289484166e+21, "-6.2844203e+21", "%7.7e",
-__LINE__, -6.285939888202846e+27, "-6e+27", "%+.0g",
-__LINE__, -6.290025777678105e+13, "-6E+13", "%2.E",
-__LINE__, -6.291364254323924e+10, "-6.3E+10", "%3.2G",
-__LINE__, -6.292428812164449e+15, "-6292428812164448.714839", "%.6f",
-__LINE__, -6.292600606358002e+29, "-6.29260E+29", "%#G",
-__LINE__, -6.292739629144148e-15, "-6.292740E-15", "%E",
-__LINE__, -6.296471626465745e+28, "-6.29647E+28", "%G",
-__LINE__, -6.299575066640315e+27, "-6.300E+27", "%.3E",
-__LINE__, -6.315234679394876e-24, "-6E-24", "%2.G",
-__LINE__, -6.320883246383228e-01, "-0.632088", "%2g",
-__LINE__, -6.324938413548937e-11, "-6e-11", "%.1g",
-__LINE__, -6.336312983176250e+04, "-6.336313e+04", "%e",
-__LINE__, -6.341786787214541e+06, "-6.341787E+06", "%+7.6E",
-__LINE__, -6.360189291106185e-15, "-0.0000000", "%#.7f",
-__LINE__, -6.364818355457748e-15, "-0.0000000", "%1.7f",
-__LINE__, -6.366291103431814e+04, "-63662.9", "%#G",
-__LINE__, -6.366334042923153e-05, "-6.37e-05", "%5.3g",
-__LINE__, -6.370477455143194e-12, "-0.000000", "%f",
-__LINE__, -6.372829256546279e+23, "-6.37283E+23", "%G",
-__LINE__, -6.375208490193110e-23, "-6.37521e-23", "%4.5e",
-__LINE__, -6.382595100891736e-24, "-6.3826E-24", "%5G",
-__LINE__, -6.396882421146790e-22, "-6.39688e-22", "%+g",
-__LINE__, -6.407190354039938e+08, "-6.40719e+08", "%+g",
-__LINE__, -6.408581541430886e-10, "-6.E-10", "%#0.0G",
-__LINE__, -6.409206904981703e-03, "-0.006", "%+.0G",
-__LINE__, -6.416106714707772e+26, "-641610671470777216285341637.558304", "%f",
-__LINE__, -6.417436981761998e-04, "-0.000642", "%+#f",
-__LINE__, -6.429997249673124e+11, "-642999724967.312414", "%#f",
-__LINE__, -6.440827429825250e+16, "-6.44083E+16", "%G",
-__LINE__, -6.444869858444955e+02, "-6e+02", "%6.g",
-__LINE__, -6.471701890976228e-25, " -6e-25", "%7.1g",
-__LINE__, -6.485393161670371e-12, "-6.485393e-12", "%.6e",
-__LINE__, -6.487710907063584e+23, "-6.E+23", "%#3.E",
-__LINE__, -6.492942931343439e-08, "-0.", "%+#2.0f",
-__LINE__, -6.496010652113223e+18, "-6.49601e+18", "%g",
-__LINE__, -6.502856921840228e+22, "-6.50286e+22", "%4g",
-__LINE__, -6.523559906055000e-10, "-6.52356E-10", "%.6G",
-__LINE__, -6.525899074126662e+04, "-6.5e+04", "%+.1e",
-__LINE__, -6.532216801155521e-09, "-6.53222E-09", "%G",
-__LINE__, -6.544601787025684e-27, "-0", "%+.0f",
-__LINE__, -6.558968312132168e-01, " -1", "%+6.f",
-__LINE__, -6.559654261655786e+08, "-6.559654e+08", "%e",
-__LINE__, -6.566562622196495e-21, "-6.56656E-21", "%.6G",
-__LINE__, -6.573486832071960e+04, "-65734.9", "%G",
-__LINE__, -6.573806290918275e+13, "-6.57381E+13", "%G",
-__LINE__, -6.578113771674787e+17, "-6.57811E+17", "%+#G",
-__LINE__, -6.584106931007506e+15, "-6.584107E+15", "%E",
-__LINE__, -6.590538844308877e+07, "-65905388.443089", "%f",
-__LINE__, -6.593708834068371e-07, "-0.000001", "%f",
-__LINE__, -6.597116446195875e+08, "-6.5971164e+08", "%#1.7e",
-__LINE__, -6.605813542127091e-04, "-0.0007", "%+0.g",
-__LINE__, -6.607491403866429e+07, "-7e+07", "%3.g",
-__LINE__, -6.616499847522278e+09, "-6.61650E+09", "%+#G",
-__LINE__, -6.618619768691332e+20, "-7E+20", "%2.G",
-__LINE__, -6.626748168962331e-22, "-7.E-22", "%+#3.E",
-__LINE__, -6.639335450348280e+12, "-6.63934e+12", "%g",
-__LINE__, -6.643910144912576e-03, "-0.006644", "%f",
-__LINE__, -6.650293872031870e-18, "-6.65029e-18", "%+#g",
-__LINE__, -6.654903858656310e-21, "-0.000000", "%f",
-__LINE__, -6.665834666726511e-12, "-6.665835E-12", "%E",
-__LINE__, -6.666428729917570e-19, "-0.000000", "%+#f",
-__LINE__, -6.668415789681128e+27, "-6.66842E+27", "%+G",
-__LINE__, -6.675214676269601e-28, "-6.67521e-28", "%#g",
-__LINE__, -6.679560072732262e+01, "-66.7956", "%#g",
-__LINE__, -6.692325075457020e-19, "-0.000000", "%1f",
-__LINE__, -6.697096655164652e+00, "-6.70", "%#.3g",
-__LINE__, -6.712436135928394e-28, "-7e-28", "%0.g",
-__LINE__, -6.720769486122685e-16, "-7e-16", "%0.e",
-__LINE__, -6.727196898490600e+26, "-672719689849060031860972230.8", "%.1f",
-__LINE__, -6.744132627576416e+02, "-674.413", "%6G",
-__LINE__, -6.757705576425288e+28, "-6.7577056e+28", "%.7e",
-__LINE__, -6.760554929237173e-02, "-0.067606", "%+f",
-__LINE__, -6.763538810629361e+10, "-6.7635E+10", "%.4E",
-__LINE__, -6.764712008860796e-29, "-6.76471E-29", "%+G",
-__LINE__, -6.767299719678443e+04, "-67672.997197", "%f",
-__LINE__, -6.768326491352134e+20, "-676832649135213415547.70", "%+.2f",
-__LINE__, -6.771116968952891e+03, "-7E+03", "%3.1G",
-__LINE__, -6.775218099238350e-30, "-7.e-30", "%+#6.g",
-__LINE__, -6.782142689928918e-18, "-0.00", "%4.2f",
-__LINE__, -6.795409770512149e+08, "-7E+08", "%+5.0G",
-__LINE__, -6.820966157097271e+14, "-6.820966e+14", "%e",
-__LINE__, -6.824972990592273e-22, "-0.00", "%+#1.2f",
-__LINE__, -6.830452914741750e+29, "-6.8E+29", "%+7.2G",
-__LINE__, -6.835797187132348e+10, "-6.8358E+10", "%+5G",
-__LINE__, -6.837040829636343e-03, "-0.00683704", "%+g",
-__LINE__, -6.852956218658224e+23, "-6.85296e+23", "%3g",
-__LINE__, -6.854102607287217e-26, "-7e-26", "%5.e",
-__LINE__, -6.865065870249438e+16, "-6.86507E+16", "%#G",
-__LINE__, -6.884819522625523e-13, "-6.88482E-13", "%5G",
-__LINE__, -6.916316600148513e-12, "-0.000000", "%f",
-__LINE__, -6.925312418761560e-05, "-6.92531E-05", "%#G",
-__LINE__, -6.929518694178331e+09, "-6929518694.178", "%#.3f",
-__LINE__, -6.936008056682024e+02, "-6.936008E+02", "%E",
-__LINE__, -6.944911117352400e+26, "-6.944911E+26", "%1.6E",
-__LINE__, -6.945829492125162e+05, "-6.9e+05", "%+2.2g",
-__LINE__, -6.946603162471856e-13, "-6.94660E-13", "%#G",
-__LINE__, -6.947529440406653e+22, "-6.9475e+22", "%+6.5g",
-__LINE__, -6.950167604854856e-30, "-0.000000", "%7f",
-__LINE__, -6.958122319262799e-26, "-7E-26", "%+1.E",
-__LINE__, -6.958978258390961e+16, "-6.95898E+16", "%+5.6G",
-__LINE__, -6.963780466334008e-06, "-6.96378E-06", "%2G",
-__LINE__, -6.965570896221966e+13, "-6.965571E+13", "%5E",
-__LINE__, -6.967741871945064e-10, "-6.96774E-10", "%+#G",
-__LINE__, -6.973815739524307e+19, "-69738157395243067782.076", "%6.3f",
-__LINE__, -6.982714545008106e+13, "-6.98271e+13", "%g",
-__LINE__, -6.985955885054476e+03, "-6985.96", "%6G",
-__LINE__, -6.986415266835747e+18, "-6.98642e+18", "%#g",
-__LINE__, -6.996461529596512e-08, "-7.0E-08", "%#.1E",
-__LINE__, -7.000144914012241e-05, "-7.00014e-05", "%#g",
-__LINE__, -7.001017894492730e-03, "-0.00700102", "%+#.6G",
-__LINE__, -7.003690685875917e+20, "-7E+20", "%0.G",
-__LINE__, -7.010454163965384e+00, "-7.010454e+00", "%+e",
-__LINE__, -7.011493550018082e-26, " -0", "%7.f",
-__LINE__, -7.018018443394008e+21, "-7.0E+21", "%+#1.1E",
-__LINE__, -7.027253777387243e-05, "-7.02725E-05", "%+G",
-__LINE__, -7.043679213677740e-17, "-0", "%1.f",
-__LINE__, -7.051690489227881e-16, "-7.052e-16", "%0.4g",
-__LINE__, -7.063422475274161e-16, "-7.063422E-16", "%E",
-__LINE__, -7.065069592235558e-30, "-7.06507e-30", "%+#g",
-__LINE__, -7.068265283935834e-29, "-7e-29", "%+5.e",
-__LINE__, -7.068748224536295e-13, "-0.000000", "%f",
-__LINE__, -7.069621910708177e-04, "-0.000707", "%1.3g",
-__LINE__, -7.079725450964823e-12, "-0.000000", "%f",
-__LINE__, -7.087255464668218e+17, "-7.1e+17", "%.1e",
-__LINE__, -7.088715102009605e-09, "-7e-09", "%6.0g",
-__LINE__, -7.090414916270137e-15, "-0.00000", "%.5f",
-__LINE__, -7.091868311008428e-03, " -0.0", "%5.1f",
-__LINE__, -7.094242165237718e+21, "-7.09424e+21", "%+g",
-__LINE__, -7.094324305740325e-05, "-7E-05", "%+3.G",
-__LINE__, -7.104544752289144e+04, "-71045.4", "%#g",
-__LINE__, -7.105164644813694e-29, "-0.000000", "%+f",
-__LINE__, -7.114513164219487e-12, "-7.11451e-12", "%+g",
-__LINE__, -7.115778236604137e-12, "-7.11578E-12", "%G",
-__LINE__, -7.126217683410162e-27, "-7.126218e-27", "%e",
-__LINE__, -7.136214260967733e+28, "-71362142609677334803564008325.338364", "%f",
-__LINE__, -7.143452595522573e+19, "-7.14345e+19", "%g",
-__LINE__, -7.156042088843537e+27, "-7156042088843537207765166385.7977837", "%4.7f",
-__LINE__, -7.173687683710490e+24, "-7.17369e+24", "%6g",
-__LINE__, -7.190531162598206e+25, "-71905311625982060164119503", "%4.f",
-__LINE__, -7.201301831373747e-09, "-7.2013e-09", "%g",
-__LINE__, -7.209601436737306e+10, "-7.2096e+10", "%g",
-__LINE__, -7.211058997356655e-06, "-7.211059E-06", "%E",
-__LINE__, -7.226756177676272e-09, "-7.22676E-09", "%+G",
-__LINE__, -7.230870817566419e+19, "-72308708175664193618.1040364", "%#.7f",
-__LINE__, -7.231355992133345e-05, "-7.231356E-05", "%#E",
-__LINE__, -7.245999575278407e-12, "-7.246e-12", "%g",
-__LINE__, -7.247426403040390e-09, "-7.2474E-09", "%+4.5G",
-__LINE__, -7.257348680308567e-12, "-7.3E-12", "%1.2G",
-__LINE__, -7.258184256387366e-26, "-7.25818E-26", "%+2G",
-__LINE__, -7.262633672900126e+10, "-7.26263e+10", "%#g",
-__LINE__, -7.268887462426250e+03, "-7.268887e+03", "%+#e",
-__LINE__, -7.275284494682963e+08, "-7.27528e+08", "%g",
-__LINE__, -7.276335846256479e-07, " -0", "%4.f",
-__LINE__, -7.312556378294452e+15, "-7.31256e+15", "%+6g",
-__LINE__, -7.334763752442417e-15, "-0.0000", "%#.4f",
-__LINE__, -7.354627097325888e-18, "-7E-18", "%0.E",
-__LINE__, -7.360087573342401e-25, "-7.4E-25", "%6.2G",
-__LINE__, -7.368533563361098e-29, "-7.4E-29", "%3.1E",
-__LINE__, -7.379267723540596e-06, "-0.000007", "%f",
-__LINE__, -7.384525781709565e-19, "-0.000000", "%+#f",
-__LINE__, -7.388940868679677e-09, "-7.388941E-09", "%E",
-__LINE__, -7.391602149099698e+00, "-7.391602E+00", "%E",
-__LINE__, -7.393159340196723e+22, "-7.39316e+22", "%#2.6g",
-__LINE__, -7.399783260198277e-16, "-7.39978E-16", "%G",
-__LINE__, -7.405609590448331e-06, "-7.40561e-06", "%g",
-__LINE__, -7.407396977847794e-11, "-7.40740E-11", "%#G",
-__LINE__, -7.433716848698637e+20, "-7.43372e+20", "%+g",
-__LINE__, -7.444176062769411e-01, "-0.744418", "%#g",
-__LINE__, -7.448314697244012e+12, "-7448314697244.011739", "%f",
-__LINE__, -7.449533988369018e+08, "-7.449534e+08", "%+#7e",
-__LINE__, -7.465682839758801e-01, "-7E-01", "%4.E",
-__LINE__, -7.466517843126368e-26, "-7.5E-26", "%.1E",
-__LINE__, -7.471385785539900e+24, "-7471385785539899515583783.795591", "%f",
-__LINE__, -7.478345583780341e+00, "-7.478346e+00", "%e",
-__LINE__, -7.524759284626724e-06, "-7.52476e-06", "%2g",
-__LINE__, -7.534831049342539e-19, "-7.53483E-19", "%G",
-__LINE__, -7.540546673179273e+15, "-8e+15", "%.1g",
-__LINE__, -7.543440436184003e-08, "-7.54344E-08", "%6G",
-__LINE__, -7.558224240835564e-06, "-7.55822e-06", "%g",
-__LINE__, -7.564132915154469e+23, "-756413291515446850610260.298708", "%+f",
-__LINE__, -7.566590720355392e+15, "-7.566591e+15", "%1.6e",
-__LINE__, -7.568565927479741e-01, "-7.568566e-01", "%#6e",
-__LINE__, -7.615574141973305e-17, "-7.6156e-17", "%+.5g",
-__LINE__, -7.641297631509318e-28, "-8e-28", "%+.1g",
-__LINE__, -7.661227834163450e+09, "-7661227834.1634497", "%+#.7f",
-__LINE__, -7.665934364070126e+11, "-766593436407.0", "%.1f",
-__LINE__, -7.682500068463102e-27, "-0.000000", "%+#f",
-__LINE__, -7.709363160273798e+15, "-7.70936e+15", "%g",
-__LINE__, -7.712596019255238e+26, "-7.7e+26", "%.2g",
-__LINE__, -7.730213358437991e+25, "-7.7e+25", "%6.2g",
-__LINE__, -7.744420019068976e+05, "-7.74442E+05", "%.5E",
-__LINE__, -7.745813181942296e+11, "-7.7458132e+11", "%+.7e",
-__LINE__, -7.751004379716307e+16, "-7.751004e+16", "%e",
-__LINE__, -7.759862226564527e-28, "-7.75986e-28", "%g",
-__LINE__, -7.767838880221207e-27, "-7.76784e-27", "%g",
-__LINE__, -7.776301142157532e-19, "-0", "%2.f",
-__LINE__, -7.783944257077553e-14, "-8e-14", "%3.g",
-__LINE__, -7.801587579382377e+28, "-8e+28", "%+0.g",
-__LINE__, -7.806685979552780e+25, "-7.806686E+25", "%E",
-__LINE__, -7.825968891331719e-05, "-7.82597E-05", "%G",
-__LINE__, -7.826834158664018e+12, "-7.826834E+12", "%+#E",
-__LINE__, -7.832536798726886e+24, "-7.83254E+24", "%#1G",
-__LINE__, -7.840485340202362e-18, "-0.000000", "%.6f",
-__LINE__, -7.843236212099233e+21, "-7.84324e+21", "%g",
-__LINE__, -7.906644052019278e-13, "-7.906644E-13", "%E",
-__LINE__, -7.908090440678874e-20, "-7.90809E-20", "%#G",
-__LINE__, -7.917588593012283e+08, "-7.917589E+08", "%+E",
-__LINE__, -7.929100086742454e+29, "-792910008674245414539427656563.930213", "%f",
-__LINE__, -7.933235286034290e+26, "-7.933235E+26", "%E",
-__LINE__, -7.943431966567875e-03, "-0.0079434", "%+.5g",
-__LINE__, -7.950872643572970e-22, "-7.95087e-22", "%2g",
-__LINE__, -7.971225555313069e-01, "-0.797123", "%f",
-__LINE__, -7.978310272676090e-12, "-0.000000", "%#f",
-__LINE__, -8.006805393896414e-29, "-8.00681E-29", "%G",
-__LINE__, -8.006906303018830e+25, "-8.00691E+25", "%+G",
-__LINE__, -8.008484654476057e+18, "-8.008485e+18", "%5.6e",
-__LINE__, -8.008943512904249e+27, "-8008943512904249217854157905.0943", "%+.4f",
-__LINE__, -8.016539743121665e+27, "-8.01654E+27", "%G",
-__LINE__, -8.018247227006128e-05, " -8E-05", "%7.G",
-__LINE__, -8.044391842561705e+21, "-8.04439e+21", "%g",
-__LINE__, -8.081902305002036e-02, "-8.081902E-02", "%E",
-__LINE__, -8.084193011936438e-03, "-0.0080842", "%+5.5g",
-__LINE__, -8.105813534846529e-27, "-0.000000", "%f",
-__LINE__, -8.128116892989251e+00, "-8.12812", "%G",
-__LINE__, -8.136119035731877e+05, "-8e+05", "%+0.g",
-__LINE__, -8.140584224052606e+14, "-8E+14", "%5.G",
-__LINE__, -8.145928897003907e+13, "-8.15E+13", "%.3G",
-__LINE__, -8.164495905907508e-02, "-0.081645", "%G",
-__LINE__, -8.169602113313905e+20, "-8.16960e+20", "%#g",
-__LINE__, -8.179181640418333e+24, "-8.E+24", "%#.1G",
-__LINE__, -8.184324492264231e-18, "-8.18432E-18", "%G",
-__LINE__, -8.186480473850516e-28, "-0.000000", "%+f",
-__LINE__, -8.196858948158896e+07, "-8.1969E+07", "%.4E",
-__LINE__, -8.213138534699043e-30, "-0.000000", "%f",
-__LINE__, -8.221181368676532e-21, "-8.221181E-21", "%#1E",
-__LINE__, -8.222605734191438e+16, "-8.22261E+16", "%+G",
-__LINE__, -8.223925661091432e-14, "-8.223926e-14", "%0e",
-__LINE__, -8.232281541044777e-01, "-0.823228", "%f",
-__LINE__, -8.245536794508725e+22, "-8E+22", "%6.G",
-__LINE__, -8.270687365305925e+25, "-82706873653059247430974210.146815", "%f",
-__LINE__, -8.288978945738204e+11, "-8.28898e+11", "%5g",
-__LINE__, -8.290628698333139e+02, "-829.063", "%+G",
-__LINE__, -8.292416206056451e-16, "-8.29242e-16", "%+g",
-__LINE__, -8.296322623746486e-13, "-8.29632E-13", "%0.6G",
-__LINE__, -8.298321941376933e-16, "-0.000000", "%+f",
-__LINE__, -8.302331258878365e+29, "-8.30233E+29", "%0G",
-__LINE__, -8.309022429255061e+06, "-8309022.429255", "%+f",
-__LINE__, -8.312786829254646e-23, "-8.312787e-23", "%e",
-__LINE__, -8.313852965178063e-15, "-8.313853e-15", "%#7e",
-__LINE__, -8.317529094827869e+16, "-8.31753E+16", "%2G",
-__LINE__, -8.322847660882248e-17, "-0.000000", "%f",
-__LINE__, -8.324060602752638e-30, "-8.32406e-30", "%#g",
-__LINE__, -8.325043500735461e+27, "-8325043500735461066142306663.095951", "%#f",
-__LINE__, -8.332432016286935e-02, "-0.0833243", "%g",
-__LINE__, -8.334251670232117e-09, "-8.33425e-09", "%g",
-__LINE__, -8.338076225141778e+02, "-833.808", "%g",
-__LINE__, -8.338349587571534e-23, "-8.33835e-23", "%+2g",
-__LINE__, -8.342420812231939e+23, "-834242081223193920891390.00745", "%+0.5f",
-__LINE__, -8.347404637940894e+17, "-8.347405e+17", "%+e",
-__LINE__, -8.367002601133880e-12, "-0.000000", "%#2.6f",
-__LINE__, -8.368579538210858e-17, "-8.36858e-17", "%5g",
-__LINE__, -8.392398522472401e-10, "-0.0000", "%.4f",
-__LINE__, -8.393029677635258e-29, " -8E-29", "%7.G",
-__LINE__, -8.393843230819225e-11, "-8.393843E-11", "%E",
-__LINE__, -8.397239871789148e-11, "-8.39724e-11", "%g",
-__LINE__, -8.402316358199041e-29, "-0.000", "%3.3f",
-__LINE__, -8.402910159034304e-14, "-8.4e-14", "%+0.3g",
-__LINE__, -8.414960962391726e+09, "-8414960962.391726", "%#f",
-__LINE__, -8.417512471384889e-28, "-8.417512e-28", "%e",
-__LINE__, -8.418719240222911e+21, "-8418719240222911182058.851409", "%f",
-__LINE__, -8.421210956044195e-09, "-0.00000", "%.5f",
-__LINE__, -8.422001733529095e+24, "-8E+24", "%0.G",
-__LINE__, -8.443614453772469e+21, "-8.44361E+21", "%+G",
-__LINE__, -8.445883044175737e-19, "-0", "%+1.f",
-__LINE__, -8.460545304711022e-01, "-0.846055", "%G",
-__LINE__, -8.470462532754567e+12, "-8.47E+12", "%6.3G",
-__LINE__, -8.478488782426476e-07, "-8.478489E-07", "%E",
-__LINE__, -8.478657582923923e+09, "-8.5e+09", "%.2g",
-__LINE__, -8.482732098043366e+12, "-8482732098043", "%5.f",
-__LINE__, -8.489112373854447e+07, "-8.489e+07", "%#3.3e",
-__LINE__, -8.494153144629106e+02, "-849.415", "%+g",
-__LINE__, -8.496331191616493e+28, "-8E+28", "%+6.G",
-__LINE__, -8.503711894495339e+05, "-850371", "%g",
-__LINE__, -8.505271893964268e+14, "-8.505272E+14", "%E",
-__LINE__, -8.509873985358741e+15, "-9.e+15", "%#7.g",
-__LINE__, -8.518336897898081e-20, "-8.51834E-20", "%G",
-__LINE__, -8.529588044136128e+21, "-8.529588E+21", "%E",
-__LINE__, -8.539706586811079e-23, "-8.53971E-23", "%G",
-__LINE__, -8.545924619642008e+10, "-8.545925e+10", "%6e",
-__LINE__, -8.572893681637353e+09, "-8.57289E+09", "%G",
-__LINE__, -8.585483717692345e+29, "-8.58548E+29", "%+G",
-__LINE__, -8.586092014292309e+27, "-8.59e+27", "%.2e",
-__LINE__, -8.604716827086833e-26, "-8.60472e-26", "%g",
-__LINE__, -8.621349224186615e-04, "-0.000862", "%f",
-__LINE__, -8.626097065201103e-21, " -0", "%5.f",
-__LINE__, -8.631700514212522e-16, "-8.631701E-16", "%+E",
-__LINE__, -8.634703359975640e-09, "-0.000000", "%+5f",
-__LINE__, -8.639393025443855e-17, "-8.63939e-17", "%g",
-__LINE__, -8.640641942556812e-11, "-8.64064e-11", "%#g",
-__LINE__, -8.646260250525495e-09, "-0.000", "%.3f",
-__LINE__, -8.667322015806242e+09, "-8667322015.806242", "%+#f",
-__LINE__, -8.690705655554451e+10, "-8.690706E+10", "%#E",
-__LINE__, -8.714299893763934e-07, "-8.7143E-07", "%.5G",
-__LINE__, -8.715729756264988e+27, "-8.71573E+27", "%+.6G",
-__LINE__, -8.716518487180945e+16, "-9e+16", "%3.e",
-__LINE__, -8.744404488756237e+25, "-87444044887562366596966967.335902", "%4f",
-__LINE__, -8.754720498369242e+13, "-8.75472e+13", "%g",
-__LINE__, -8.763198097931010e-19, "-8.76320e-19", "%#g",
-__LINE__, -8.779007408852458e+28, "-8.77901E+28", "%G",
-__LINE__, -8.794576202907937e+11, "-8.79458E+11", "%#2.6G",
-__LINE__, -8.799091520612418e-11, "-8.799E-11", "%3.4G",
-__LINE__, -8.799246265524921e+11, "-8.79925E+11", "%G",
-__LINE__, -8.809010508550436e-04, "-8.8090E-04", "%.4E",
-__LINE__, -8.817389999872653e-10, "-8.81739e-10", "%g",
-__LINE__, -8.842022428985267e-28, "-8.842022E-28", "%E",
-__LINE__, -8.851265987586864e-07, "-0.000001", "%f",
-__LINE__, -8.861985131432196e+03, "-8861.985", "%+.7G",
-__LINE__, -8.874449013455113e-29, "-8.874449e-29", "%e",
-__LINE__, -8.878752609483453e+18, "-8.87875E+18", "%G",
-__LINE__, -8.882501665315313e-04, "-0.00088825", "%+G",
-__LINE__, -8.892056241505784e-14, "-8.89206E-14", "%G",
-__LINE__, -8.895327674961603e-30, "-8.89533E-30", "%G",
-__LINE__, -8.900059462213669e-30, "-8.900059E-30", "%+#E",
-__LINE__, -8.957100548759815e+18, "-9e+18", "%3.0e",
-__LINE__, -8.961352369869012e-30, "-8.961352e-30", "%+#2e",
-__LINE__, -8.962296474587800e+02, "-896", "%4.f",
-__LINE__, -8.962536469328530e-12, "-8.96254E-12", "%G",
-__LINE__, -8.963299420391932e+21, "-8.9633e+21", "%g",
-__LINE__, -8.967736672941522e-11, "-8.96774e-11", "%g",
-__LINE__, -8.994077362462679e+11, "-8.9940774e+11", "%+#.7e",
-__LINE__, -9.000452862345622e+15, "-9e+15", "%2.e",
-__LINE__, -9.007489135361462e+07, "-9.0075E+07", "%+2.4E",
-__LINE__, -9.036271805879910e+16, "-9.03627E+16", "%G",
-__LINE__, -9.036319073700248e+22, "-9.03632e+22", "%1g",
-__LINE__, -9.043207635989237e+11, "-9.043208e+11", "%#e",
-__LINE__, -9.043856598625815e-26, "-9e-26", "%+1.g",
-__LINE__, -9.052760561065698e+14, "-9.052761E+14", "%E",
-__LINE__, -9.066480297957160e-06, "-9E-06", "%+1.G",
-__LINE__, -9.070971376440752e-01, "-0.907097", "%g",
-__LINE__, -9.073301831888273e+09, "-9.07330E+09", "%#G",
-__LINE__, -9.091228662702147e+28, "-9E+28", "%4.G",
-__LINE__, -9.093652024983832e+04, "-9.093652E+04", "%7.6E",
-__LINE__, -9.098945831139295e-04, "-9.098946E-04", "%+1.6E",
-__LINE__, -9.124981449916591e+05, "-912498", "%G",
-__LINE__, -9.132038703003394e-02, "-0.0913204", "%#G",
-__LINE__, -9.138271437433964e-04, "-0.000913827", "%5g",
-__LINE__, -9.158186427463699e-04, "-0.000915819", "%g",
-__LINE__, -9.160846358172526e+16, "-9.160846E+16", "%#E",
-__LINE__, -9.160884330810163e+17, "-9E+17", "%+5.G",
-__LINE__, -9.190271387375542e+21, "-9.19027e+21", "%+g",
-__LINE__, -9.191651872412619e-04, "-9.191652E-04", "%E",
-__LINE__, -9.196426161984341e-10, "-9E-10", "%4.G",
-__LINE__, -9.201074139774962e+09, "-9E+09", "%4.G",
-__LINE__, -9.223294284802762e+09, "-9.22329E+09", "%G",
-__LINE__, -9.224740266754996e+02, "-9E+02", "%6.0G",
-__LINE__, -9.231583780512302e-01, " -0.9", "%6.g",
-__LINE__, -9.241998826543689e+07, "-92419988", "%1.f",
-__LINE__, -9.243603351372128e+27, "-9.243603e+27", "%#e",
-__LINE__, -9.255922697415071e+11, "-9.25592e+11", "%g",
-__LINE__, -9.265734968114124e-02, "-0.092657", "%f",
-__LINE__, -9.273132068521061e+11, "-9.27313E+11", "%G",
-__LINE__, -9.276017912826685e+27, "-9.E+27", "%+#5.G",
-__LINE__, -9.279781279788505e+17, "-9.27978E+17", "%7G",
-__LINE__, -9.305057549822465e-19, "-9.30506E-19", "%5G",
-__LINE__, -9.313182384508469e+18, "-9.31318E+18", "%G",
-__LINE__, -9.313350925182641e-12, "-9.31E-12", "%.3G",
-__LINE__, -9.362202657509130e+08, "-9e+08", "%.1g",
-__LINE__, -9.367344757598381e+19, "-9.36734e+19", "%g",
-__LINE__, -9.374222399774300e+26, "-9.37422e+26", "%4g",
-__LINE__, -9.385734023305105e+02, "-9.385734e+02", "%+0e",
-__LINE__, -9.392042570618909e+17, "-9.39204E+17", "%G",
-__LINE__, -9.395742939311926e+20, "-939574293931192627837.8451", "%.4f",
-__LINE__, -9.409066155962469e+09, "-9.40907E+09", "%#G",
-__LINE__, -9.412851077799790e+23, "-9.412851E+23", "%E",
-__LINE__, -9.431808019049818e+08, "-9.43181e+08", "%g",
-__LINE__, -9.465236900519924e-27, "-9.46524e-27", "%g",
-__LINE__, -9.478330386415852e+17, "-9.478330e+17", "%e",
-__LINE__, -9.510393719697428e+15, "-9.51039E+15", "%+G",
-__LINE__, -9.534229599909890e-09, "-0.000000", "%f",
-__LINE__, -9.541731189284823e-17, "-1.E-16", "%+#7.G",
-__LINE__, -9.548861908445902e+24, "-9548861908445902102471336.547751", "%f",
-__LINE__, -9.578447281451794e+14, "-957844728145179", "%5.f",
-__LINE__, -9.580512736933464e+11, "-9.58051E+11", "%G",
-__LINE__, -9.596838169770637e-28, "-1E-27", "%+6.G",
-__LINE__, -9.597528852877852e-22, "-1e-21", "%2.1g",
-__LINE__, -9.599943658427051e+02, "-9.599944E+02", "%E",
-__LINE__, -9.603227991185260e-14, "-1E-13", "%+0.E",
-__LINE__, -9.606818733892343e+08, "-960681873.389", "%1.3f",
-__LINE__, -9.617442692720937e+16, "-9.61744E+16", "%G",
-__LINE__, -9.628685516961109e+29, "-9.62869e+29", "%3g",
-__LINE__, -9.638354750455226e-11, "-0.000000", "%f",
-__LINE__, -9.644266379029137e+16, "-96442663790291369.707575", "%f",
-__LINE__, -9.645563533575482e+06, "-1E+07", "%1.G",
-__LINE__, -9.645993536742941e-29, "-9.64599e-29", "%+g",
-__LINE__, -9.647147223548563e+00, "-9.647147e+00", "%e",
-__LINE__, -9.671225879906396e-11, "-0", "%0.f",
-__LINE__, -9.675000471729906e-09, "-9.675000E-09", "%E",
-__LINE__, -9.683992878297159e-26, "-9.68e-26", "%2.2e",
-__LINE__, -9.695491325144765e+10, "-9.69549E+10", "%#G",
-__LINE__, -9.695661526907136e-24, " -0.", "%#6.f",
-__LINE__, -9.703124881970338e+07, "-9.703e+07", "%0.4g",
-__LINE__, -9.707701257031864e+26, "-970770125703186437249314622.022212", "%f",
-__LINE__, -9.709879792694702e+09, "-9.709880E+09", "%E",
-__LINE__, -9.736052226907940e+26, "-9.73605e+26", "%+#g",
-__LINE__, -9.745037157520795e+07, "-9.74504e+07", "%#5.6g",
-__LINE__, -9.757293950670832e-29, "-9.757E-29", "%0.4G",
-__LINE__, -9.762126832689880e+12, "-9.76213E+12", "%G",
-__LINE__, -9.801328150341989e-01, " -1", "%7.G",
-__LINE__, -9.837332964629669e-20, "-9.83733E-20", "%0G",
-__LINE__, -9.837790327283010e+23, "-1E+24", "%.1G",
-__LINE__, -9.839636176463729e+23, "-9.83964E+23", "%#6.5E",
-__LINE__, -9.841454250618272e+11, "-9.84E+11", "%+2.3G",
-__LINE__, -9.852920805249280e-12, "-9.852921e-12", "%.7g",
-__LINE__, -9.854092850182351e+12, "-9.85409e+12", "%0g",
-__LINE__, -9.866796026839712e+02, "-9.9E+02", "%#.1E",
-__LINE__, -9.867413260289803e-21, "-1e-20", "%.1g",
-__LINE__, -9.882136052131983e-08, "-9.88214e-08", "%g",
-__LINE__, -9.882755697941866e+20, "-9.882756E+20", "%E",
-__LINE__, -9.897275811087050e+20, "-9.9E+20", "%0.3G",
-__LINE__, -9.899860651812364e-04, "-9.899861e-04", "%e",
-__LINE__, -9.906754113555550e-11, "-9.90675e-11", "%3g",
-__LINE__, -9.926067557389940e+11, "-9.92607E+11", "%G",
-__LINE__, -9.929638609014063e+17, "-992963860901406292.214233", "%1f",
-__LINE__, -9.941214552193284e-24, "-0.000000", "%+#f",
-__LINE__, -9.942875240256573e+14, "-9.942875e+14", "%+1e",
-__LINE__, -9.944492909695798e-01, "-9.944E-01", "%.3E",
-__LINE__, -9.954710507359939e-27, "-1e-26", "%+0.2g",
-__LINE__, -9.955410507742851e+03, "-9955.41", "%+G",
-__LINE__, -9.974437672251590e+02, "-997.444", "%#G",
-__LINE__, -9.975683165288929e-26, "-9.97568E-26", "%6G",
-__LINE__, 1.003827370583415e+06, "1003827.370583", "%3f",
-__LINE__, 1.004189065268560e-27, "1.004189E-27", "%.7G",
-__LINE__, 1.005840059175462e-28, "+1.00584E-28", "%+G",
-__LINE__, 1.006586790090557e-12, "0.000000", "%#f",
-__LINE__, 1.007598594773359e+18, "1.0076E+18", "%G",
-__LINE__, 1.007902307001894e+29, "1.0079e+29", "%g",
-__LINE__, 1.008607405036580e-15, "1.00861E-15", "%6G",
-__LINE__, 1.008769102466771e+16, "+1.00877E+16", "%+G",
-__LINE__, 1.009545698372534e-08, "+1E-08", "%+0.0G",
-__LINE__, 1.010173673945099e-12, "+1.01017e-12", "%+#0g",
-__LINE__, 1.011375000606627e+09, "1011375000.606627", "%f",
-__LINE__, 1.011944652221650e+15, "1011944652221649.98", "%3.2f",
-__LINE__, 1.013057788090379e-21, "0.000000", "%#f",
-__LINE__, 1.014525729953198e+15, "1.01453e+15", "%3g",
-__LINE__, 1.016760538234615e-21, "+1.016761E-21", "%+3E",
-__LINE__, 1.017052611781237e-29, "0.000000", "%f",
-__LINE__, 1.018471223361229e+14, "1.01847E+14", "%G",
-__LINE__, 1.021646959220873e+15, "1021646959220872.6", "%4.1f",
-__LINE__, 1.022304833976590e+27, "1.0223e+27", "%g",
-__LINE__, 1.022500312067325e-12, "1.0225e-12", "%6g",
-__LINE__, 1.023019285462627e-20, "0.000000", "%f",
-__LINE__, 1.024192579400824e+06, "1.02419e+06", "%g",
-__LINE__, 1.024517953555766e-28, "1.02452E-28", "%G",
-__LINE__, 1.026673589339585e+21, "1.02667E+21", "%G",
-__LINE__, 1.027231090958880e-19, "1.E-19", "%#3.G",
-__LINE__, 1.028249904956487e-27, "1E-27", "%5.G",
-__LINE__, 1.028570144661448e-28, "+1.02857E-28", "%+G",
-__LINE__, 1.028934898454705e-13, "+1.028935E-13", "%+E",
-__LINE__, 1.029071053545906e-26, "1.029071E-26", "%E",
-__LINE__, 1.032672895881148e-30, "+1.032673E-30", "%+E",
-__LINE__, 1.033502358979511e+06, "1.0335E+06", "%.5G",
-__LINE__, 1.036790427717847e+19, "1e+19", "%4.g",
-__LINE__, 1.037022928821648e+03, "1037.02", "%5g",
-__LINE__, 1.040551683941284e+14, "1.04055E+14", "%G",
-__LINE__, 1.044499252101308e-17, "1.044499E-17", "%E",
-__LINE__, 1.045791899570889e+15, "+1.04579e+15", "%+g",
-__LINE__, 1.048730383198703e+28, "1.049e+28", "%.4g",
-__LINE__, 1.050654419882509e-18, "0.000000", "%f",
-__LINE__, 1.052600569262127e-27, "+0.000", "%+2.3f",
-__LINE__, 1.053213014784149e+15, "1E+15", "%4.G",
-__LINE__, 1.057553916225948e-15, "+0.000000", "%+4f",
-__LINE__, 1.058191244482453e+19, "1.058e+19", "%.3e",
-__LINE__, 1.058746269793972e-26, "+1.1E-26", "%+.2G",
-__LINE__, 1.058793271960762e-01, "+1.058793E-01", "%+4E",
-__LINE__, 1.058869592738370e-19, "1.05887e-19", "%3g",
-__LINE__, 1.060402312803008e+15, "1060402312803008.229025", "%f",
-__LINE__, 1.061106284763095e+00, "1.061106", "%0f",
-__LINE__, 1.061180160987467e+09, "1e+09", "%2.g",
-__LINE__, 1.061181537176067e-06, "+1.06118e-06", "%+g",
-__LINE__, 1.065021381771174e+20, "1.06502e+20", "%g",
-__LINE__, 1.065464040401130e-16, "1.065464e-16", "%e",
-__LINE__, 1.065573419819459e-05, "0.00001", "%.5f",
-__LINE__, 1.066107764306644e+13, "1.066108e+13", "%#e",
-__LINE__, 1.071318759598956e+12, "1.071319e+12", "%e",
-__LINE__, 1.071564727222321e+10, "1.072E+10", "%3.4G",
-__LINE__, 1.074652481218139e+14, "1.0747E+14", "%.4E",
-__LINE__, 1.078453684911309e-02, "0.0107845", "%g",
-__LINE__, 1.078550811446675e-05, "1.07855e-05", "%g",
-__LINE__, 1.078780494515273e-04, "0.000107878", "%4G",
-__LINE__, 1.079467488876157e-16, "+1.079467E-16", "%+E",
-__LINE__, 1.080529722917934e-20, "0.000000", "%f",
-__LINE__, 1.082169127709439e+01, "10.8217", "%#5g",
-__LINE__, 1.087241285590951e+22, "1E+22", "%4.G",
-__LINE__, 1.091049208406195e-14, "0.0000", "%.4f",
-__LINE__, 1.095316064213237e+16, "+1e+16", "%+0.g",
-__LINE__, 1.095349083237975e-04, "1.095349e-04", "%5e",
-__LINE__, 1.098002465452836e+12, "1098002465452.836205", "%f",
-__LINE__, 1.098445764138997e+13, "1.09845E+13", "%G",
-__LINE__, 1.099968047892474e-13, "1.1e-13", "%2.5g",
-__LINE__, 1.101017598311363e-04, "0.000110102", "%G",
-__LINE__, 1.102776332077817e+18, "1.103e+18", "%.3e",
-__LINE__, 1.103734053887830e-01, "0.110373", "%f",
-__LINE__, 1.105730106869006e-03, "0.00110573", "%g",
-__LINE__, 1.106366781854058e-10, "1.10637e-10", "%g",
-__LINE__, 1.107354763213839e+15, "1.107355e+15", "%6e",
-__LINE__, 1.108151709609825e-10, "+1.10815E-10", "%+G",
-__LINE__, 1.110054501993647e+21, "+1.11005E+21", "%+G",
-__LINE__, 1.111574814737873e-17, "+1.112E-17", "%+1.4G",
-__LINE__, 1.111865512360108e-15, "1E-15", "%.0G",
-__LINE__, 1.112281568330498e-03, "1.112282e-03", "%.6e",
-__LINE__, 1.112625415174238e+21, "+1.11263e+21", "%+g",
-__LINE__, 1.112744974910395e-02, "0.011127", "%f",
-__LINE__, 1.114726566979885e-10, "1.11473e-10", "%g",
-__LINE__, 1.115395843055731e-20, "+0.000000", "%+6f",
-__LINE__, 1.115983414693121e+15, "1.11598e+15", "%5.6g",
-__LINE__, 1.116118842074266e+27, "1.116119e+27", "%e",
-__LINE__, 1.118386983012328e+19, "11183869830123276400.968280", "%1f",
-__LINE__, 1.119344607892718e-22, "1.119345e-22", "%e",
-__LINE__, 1.120560837110279e-19, "0.000000", "%f",
-__LINE__, 1.123620157906291e-02, "0.0112362", "%G",
-__LINE__, 1.126804857639478e+29, "1.1268E+29", "%#0.5G",
-__LINE__, 1.128962199461581e+11, "1.12896e+11", "%g",
-__LINE__, 1.129878714246809e-16, "1E-16", "%0.0G",
-__LINE__, 1.130331982972407e-06, "+0.", "%+#1.f",
-__LINE__, 1.134167332070028e-16, "0", "%0.0f",
-__LINE__, 1.134248080053598e-28, "0.000000", "%f",
-__LINE__, 1.136023160708119e-10, "+0.000000", "%+1f",
-__LINE__, 1.136167141059036e+23, "113616714105903593434732.101741", "%f",
-__LINE__, 1.136439499920164e+10, "+1.13644E+10", "%+G",
-__LINE__, 1.136859734932182e+24, "1.13686e+24", "%g",
-__LINE__, 1.138985939448731e+09, "1.13899e+09", "%2g",
-__LINE__, 1.139287324790407e-25, "1e-25", "%.1g",
-__LINE__, 1.140559912153251e+06, "1.14056e+06", "%g",
-__LINE__, 1.141318036027086e-26, "1.14132E-26", "%G",
-__LINE__, 1.142586049368452e-20, "+1.14259E-20", "%+7.5E",
-__LINE__, 1.143283863993333e-17, "1.143284E-17", "%3E",
-__LINE__, 1.144637911632432e-28, "1.144638E-28", "%#3E",
-__LINE__, 1.145791416532065e-10, "1.14579e-10", "%g",
-__LINE__, 1.146958047315780e-17, "1.146958e-17", "%e",
-__LINE__, 1.147898346886569e-08, "1E-08", "%3.0E",
-__LINE__, 1.149724744965608e-14, "1.14972e-14", "%5g",
-__LINE__, 1.155383721940441e-10, "1e-10", "%1.g",
-__LINE__, 1.157066617729094e-02, "0", "%1.f",
-__LINE__, 1.157893614537215e+05, "1.157894E+05", "%E",
-__LINE__, 1.160476344451928e-19, "1.2e-19", "%.1e",
-__LINE__, 1.161610499315966e-26, "1.161610E-26", "%E",
-__LINE__, 1.162345042181490e+29, "116234504218148981813385489658.685401", "%5.6f",
-__LINE__, 1.162376053722862e+23, "1.16238e+23", "%g",
-__LINE__, 1.162996084782483e+18, "+1e+18", "%+0.g",
-__LINE__, 1.163544861478966e+26, "1.16354E+26", "%G",
-__LINE__, 1.167300137450931e+06, "1E+06", "%.0G",
-__LINE__, 1.168693829096401e-30, "+1.16869e-30", "%+g",
-__LINE__, 1.172791369381396e+15, "1.173E+15", "%.4G",
-__LINE__, 1.174427110782028e-29, " 1E-29", "%7.G",
-__LINE__, 1.179498322112450e+27, "1179498322112449759657692993.641831", "%f",
-__LINE__, 1.179555606293547e+27, "1.17956e+27", "%3g",
-__LINE__, 1.180815814881269e+06, "1.180816e+06", "%e",
-__LINE__, 1.181494870072805e+20, "1.181495e+20", "%5e",
-__LINE__, 1.181524119225619e+12, "+1181524119225.61917", "%+5.5f",
-__LINE__, 1.182111212289243e-20, "1e-20", "%4.g",
-__LINE__, 1.184503315019769e-27, "1.1845e-27", "%7g",
-__LINE__, 1.186413646767670e+29, "1.18641e+29", "%g",
-__LINE__, 1.186852938885004e-13, "1.18685e-13", "%4g",
-__LINE__, 1.188837612473914e+05, "1e+05", "%.0g",
-__LINE__, 1.190317482928293e-29, "1.190317e-29", "%e",
-__LINE__, 1.190527491143987e+02, "1.190527E+02", "%E",
-__LINE__, 1.191823062060233e-30, "1.2E-30", "%6.2G",
-__LINE__, 1.191926974812428e-23, "1.2e-23", "%.2g",
-__LINE__, 1.193549622366544e-25, "1E-25", "%4.1G",
-__LINE__, 1.195517368629765e-21, "1.195517e-21", "%1.7g",
-__LINE__, 1.195573061651289e-27, "1.19557e-27", "%#g",
-__LINE__, 1.195806681188325e-03, "+0.00120", "%+#.3G",
-__LINE__, 1.196842275192189e-28, "1.19684e-28", "%g",
-__LINE__, 1.197307550969576e+04, "1.1973E+04", "%.4E",
-__LINE__, 1.197608525847607e+15, "1197608525847606.8062805", "%4.7f",
-__LINE__, 1.197801338159407e+04, "11978", "%5G",
-__LINE__, 1.197813329735025e+27, "1.19781E+27", "%7G",
-__LINE__, 1.199483904123253e-12, "1.19948e-12", "%g",
-__LINE__, 1.199535292169766e-09, "1.199535e-09", "%e",
-__LINE__, 1.201478067515135e+05, "120147.806752", "%f",
-__LINE__, 1.202054662662158e+17, "1.20205E+17", "%#G",
-__LINE__, 1.202111922368321e+07, "+1.202112E+07", "%+#E",
-__LINE__, 1.202536892743791e-01, "0.120254", "%#g",
-__LINE__, 1.205698674119882e-29, "1.2057E-29", "%G",
-__LINE__, 1.208091664701942e-13, " 0.", "%#3.f",
-__LINE__, 1.208942413954872e-17, "1.20894E-17", "%G",
-__LINE__, 1.209704891496613e+10, "1.210e+10", "%2.3e",
-__LINE__, 1.211355639334831e+29, "1E+29", "%.0G",
-__LINE__, 1.211447553804203e+17, " 1E+17", "%7.E",
-__LINE__, 1.212481583429790e-16, "1.212482e-16", "%e",
-__LINE__, 1.212849001551862e+26, "121284900155186181613942153.4899157", "%6.7f",
-__LINE__, 1.213057538677801e+06, "1213057.538678", "%#.6f",
-__LINE__, 1.214609592911893e+25, "1.214610e+25", "%#e",
-__LINE__, 1.216086266251665e+01, "1e+01", "%5.e",
-__LINE__, 1.216468565931026e-22, "1.216469E-22", "%1E",
-__LINE__, 1.216503126598765e+14, "+1E+14", "%+0.E",
-__LINE__, 1.216641013695553e-14, "0.000000", "%f",
-__LINE__, 1.223142246779504e-23, "0.000000", "%f",
-__LINE__, 1.223884786443274e+08, "122388479", "%5.f",
-__LINE__, 1.224012562770076e+29, "1.22401e+29", "%0g",
-__LINE__, 1.225098157528297e+14, "1.22510e+14", "%#g",
-__LINE__, 1.226306848505242e-22, "1.22631E-22", "%G",
-__LINE__, 1.227487485547996e-08, "+1.22749e-08", "%+g",
-__LINE__, 1.237206486909689e+02, "+123.721", "%+#.6g",
-__LINE__, 1.240281126177077e-02, "+0.01", "%+3.g",
-__LINE__, 1.241197211306994e-06, "1.241197E-06", "%E",
-__LINE__, 1.241776311097410e+07, "1.241776E+07", "%E",
-__LINE__, 1.245995986024999e-03, "0.001246", "%g",
-__LINE__, 1.246082428199607e+03, "1246.082428", "%f",
-__LINE__, 1.247021567954220e+05, " 1e+05", "%7.g",
-__LINE__, 1.248140089618390e-30, "+1.24814E-30", "%+G",
-__LINE__, 1.248403361652064e-30, "+0.000000", "%+f",
-__LINE__, 1.251098538918842e-26, "+1.251099E-26", "%+E",
-__LINE__, 1.251952633022061e+25, "1.25195e+25", "%g",
-__LINE__, 1.253029705843461e-04, "+1.E-04", "%+#4.E",
-__LINE__, 1.259562132729488e-09, "1e-09", "%1.e",
-__LINE__, 1.261702205492260e-27, "0.000000", "%f",
-__LINE__, 1.265910361926660e-19, "+1.265910e-19", "%+e",
-__LINE__, 1.267411912651087e+12, "1.26741E+12", "%1G",
-__LINE__, 1.267830718285980e-10, "1.26783e-10", "%g",
-__LINE__, 1.268238378987517e-23, "1E-23", "%5.E",
-__LINE__, 1.275543253354167e+10, "1.27554E+10", "%G",
-__LINE__, 1.277255234454465e-10, "1.27726E-10", "%5G",
-__LINE__, 1.280590949834150e-21, "1.280591E-21", "%E",
-__LINE__, 1.285570453788242e-02, "1.285570E-02", "%E",
-__LINE__, 1.287712130719031e+09, "1287712130.719031", "%#f",
-__LINE__, 1.290142876187105e+29, "+1.290143E+29", "%+E",
-__LINE__, 1.293129213191961e+21, "1.29313E+21", "%G",
-__LINE__, 1.293317101334714e-23, "+0.000000", "%+f",
-__LINE__, 1.294506813069071e-13, "0.0", "%3.1f",
-__LINE__, 1.295576232685739e-22, "+0.000000", "%+f",
-__LINE__, 1.296010470431800e-19, "+0.000000", "%+6f",
-__LINE__, 1.298798231947674e+19, "1.2988E+19", "%2G",
-__LINE__, 1.299521114379381e+09, "1.29952E+09", "%G",
-__LINE__, 1.299847637892712e+24, "1.299848e+24", "%e",
-__LINE__, 1.301269777843698e+29, "130126977784369834978406288428.232074", "%f",
-__LINE__, 1.302911786437618e-15, " 0", "%6.f",
-__LINE__, 1.303863159906719e+27, "1303863159906719415559450681", "%0.f",
-__LINE__, 1.304396472326846e-12, "+1E-12", "%+1.0G",
-__LINE__, 1.306180443528427e-30, "+1e-30", "%+.1g",
-__LINE__, 1.308469138968514e+22, "1.30847E+22", "%0G",
-__LINE__, 1.312700156826057e-11, "1.3127e-11", "%g",
-__LINE__, 1.315364075120764e+21, "+1.31536E+21", "%+G",
-__LINE__, 1.320376485288444e-09, "+1.3204E-09", "%+6.5G",
-__LINE__, 1.321434154364635e-08, "1.32143e-08", "%1g",
-__LINE__, 1.322777272579176e+19, "+1e+19", "%+3.e",
-__LINE__, 1.322861663428564e+00, "1.322862E+00", "%#E",
-__LINE__, 1.323566013489230e+14, "+1.323566E+14", "%+1E",
-__LINE__, 1.327446904132973e-20, "+1.32745E-20", "%+4.6G",
-__LINE__, 1.328226362528158e+19, "1e+19", "%2.g",
-__LINE__, 1.329167460803610e+08, "1e+08", "%3.g",
-__LINE__, 1.335371420823160e+14, "1.33537E+14", "%7G",
-__LINE__, 1.336116185095935e-21, "0.000000", "%f",
-__LINE__, 1.338766774704671e-22, "+1.33877e-22", "%+g",
-__LINE__, 1.339199373014647e-12, "1E-12", "%1.E",
-__LINE__, 1.344293357481519e+26, "134429335748151945750805680.290796", "%#2f",
-__LINE__, 1.344328188122843e+29, "1.34433e+29", "%g",
-__LINE__, 1.344382581316972e-05, "1E-05", "%5.0E",
-__LINE__, 1.349835616116184e+11, "134983561611.6", "%2.1f",
-__LINE__, 1.349955669989707e+20, "134995566998970728533.890906", "%7f",
-__LINE__, 1.350230411093841e+20, "135023041109384145386.229648", "%f",
-__LINE__, 1.353391369565576e+10, " 1E+10", "%7.1G",
-__LINE__, 1.356889483699471e+22, "+1.35689E+22", "%+G",
-__LINE__, 1.358141775798243e+24, "+1358141775798242578687791.137781", "%+f",
-__LINE__, 1.358547541975523e-15, "1.35855e-15", "%g",
-__LINE__, 1.363402539800791e+11, "1.3634E+11", "%G",
-__LINE__, 1.363676837988798e+16, "+13636768379887982.4053", "%+2.4f",
-__LINE__, 1.364592026494839e-24, "1.36459e-24", "%g",
-__LINE__, 1.366664212399413e-09, "+1E-09", "%+6.G",
-__LINE__, 1.367446193117463e-17, "1.3674e-17", "%2.4e",
-__LINE__, 1.368681648785823e-18, "1.36868E-18", "%3G",
-__LINE__, 1.370635189583606e+05, "1.370635E+05", "%E",
-__LINE__, 1.371395540772186e-18, "+1.371396e-18", "%+e",
-__LINE__, 1.371945318043159e+10, "1E+10", "%0.E",
-__LINE__, 1.373780604772988e-21, "1e-21", "%3.g",
-__LINE__, 1.374244970441862e-28, "0.000000", "%7.6f",
-__LINE__, 1.375874695067149e-25, "1.37587E-25", "%#3G",
-__LINE__, 1.377165614832621e+20, "1.37717E+20", "%#G",
-__LINE__, 1.381541864946684e-09, "1.38154E-09", "%G",
-__LINE__, 1.382901694835415e+00, "1.382902E+00", "%E",
-__LINE__, 1.384250577530184e-21, "1.384e-21", "%.4g",
-__LINE__, 1.385322753374640e-03, " 1E-03", "%6.E",
-__LINE__, 1.387026156054724e+19, "1.387026E+19", "%E",
-__LINE__, 1.388726735790498e-27, "+1.388727E-27", "%+E",
-__LINE__, 1.388819105742044e+16, "1.38882e+16", "%g",
-__LINE__, 1.389941086024951e-19, "0.000000", "%f",
-__LINE__, 1.390101174785536e+25, "1.3901E+25", "%G",
-__LINE__, 1.392210785638597e+24, "+1.39221E+24", "%+G",
-__LINE__, 1.396148856283474e-26, "1.4e-26", "%7.3g",
-__LINE__, 1.398153728631994e-21, "1.39815E-21", "%G",
-__LINE__, 1.398332446762342e-14, "+1.39833E-14", "%+5G",
-__LINE__, 1.400250919607987e+10, "1.40025E+10", "%G",
-__LINE__, 1.400662469019739e+03, "1.E+03", "%#0.0E",
-__LINE__, 1.401720273747805e-12, "0.000000", "%#f",
-__LINE__, 1.402151358748719e+22, "1.402151e+22", "%e",
-__LINE__, 1.402351913752357e-28, "1.40235E-28", "%#1.6G",
-__LINE__, 1.403285877973810e+13, "+14032858779738.097255", "%+4f",
-__LINE__, 1.404540981735861e+04, "14045.409817", "%4f",
-__LINE__, 1.406420622355064e+19, "1.40642E+19", "%G",
-__LINE__, 1.412552725962301e-29, "+1e-29", "%+1.e",
-__LINE__, 1.413266982485044e+10, "1.41327e+10", "%g",
-__LINE__, 1.413627189411456e+21, "1.41363E+21", "%0G",
-__LINE__, 1.416647216002592e-25, "+0.000000", "%+#f",
-__LINE__, 1.417107155080584e-10, "1e-10", "%1.e",
-__LINE__, 1.418829895346648e+19, "14188298953466484952.912197", "%f",
-__LINE__, 1.419404559267523e-11, "1.4194e-11", "%g",
-__LINE__, 1.422421321425472e+15, "1.422421E+15", "%E",
-__LINE__, 1.424858902008998e+18, "1.42486E+18", "%2.5E",
-__LINE__, 1.428863051254205e+22, "1.428863e+22", "%e",
-__LINE__, 1.429533727936725e-02, "0.0142953", "%g",
-__LINE__, 1.430982219743369e-19, " 1E-19", "%6.G",
-__LINE__, 1.431974118434703e+17, "1E+17", "%3.G",
-__LINE__, 1.432418341970152e+16, "+1.432418e+16", "%+5e",
-__LINE__, 1.433470281650523e+04, "14334.7", "%g",
-__LINE__, 1.434446243424653e+24, " +1e+24", "%+7.g",
-__LINE__, 1.435118019241039e+24, "+1e+24", "%+4.g",
-__LINE__, 1.435691648420278e-01, "0.1435692", "%#4.7g",
-__LINE__, 1.437569598098744e+27, "1.437570E+27", "%#E",
-__LINE__, 1.437633484061726e-25, "+1.43763e-25", "%+7g",
-__LINE__, 1.437866591230707e-13, "1.43787e-13", "%g",
-__LINE__, 1.440593154445915e-01, "+0.144059", "%+1G",
-__LINE__, 1.441368205977342e+16, "1.441368E+16", "%#E",
-__LINE__, 1.441825266684367e+28, "1.44183e+28", "%g",
-__LINE__, 1.442374183199456e+20, "1.442374E+20", "%E",
-__LINE__, 1.445101893951061e-24, "0", "%0.f",
-__LINE__, 1.446037835160094e-20, "+1.44604E-20", "%+2G",
-__LINE__, 1.449245376093616e+04, "1.449245e+04", "%e",
-__LINE__, 1.454126845620100e+09, "1.45413E+09", "%G",
-__LINE__, 1.455764608801107e+09, "1.5e+09", "%6.1e",
-__LINE__, 1.457176183149955e-12, "1.45718e-12", "%#g",
-__LINE__, 1.458821535020046e-05, "1.45882e-05", "%#g",
-__LINE__, 1.460179141161202e-19, "1.460179E-19", "%#E",
-__LINE__, 1.461701055446198e-20, "1.461701e-20", "%#2.7g",
-__LINE__, 1.462408181482172e+10, "1.4624082E+10", "%3.7E",
-__LINE__, 1.463706296748154e+24, "1e+24", "%2.g",
-__LINE__, 1.464891255780761e-19, "+1.46489e-19", "%+g",
-__LINE__, 1.467903978945872e+25, "1.4679E+25", "%G",
-__LINE__, 1.468585992857062e+22, "14685859928570619281629.205943", "%f",
-__LINE__, 1.469803528668286e+29, "+1E+29", "%+6.G",
-__LINE__, 1.469883002609266e-23, "1.E-23", "%#2.E",
-__LINE__, 1.469941481858809e+08, "+146994148.185881", "%+f",
-__LINE__, 1.470744493304611e+13, "1.47074e+13", "%g",
-__LINE__, 1.471857261085004e+23, "1E+23", "%2.G",
-__LINE__, 1.474419778873037e+06, "1474419.7789", "%#.4f",
-__LINE__, 1.483134762223381e-03, "0", "%0.0f",
-__LINE__, 1.483575501240724e-13, "1.48358e-13", "%g",
-__LINE__, 1.486068112294452e+20, "1.486068e+20", "%e",
-__LINE__, 1.488665528787761e-03, " +0", "%+4.f",
-__LINE__, 1.492145267536713e+07, "14921452.675367", "%f",
-__LINE__, 1.492589762884761e-01, "0.149259", "%f",
-__LINE__, 1.494784286168215e+01, "1.494784E+01", "%E",
-__LINE__, 1.495945331501655e+04, "1.5e+04", "%.2g",
-__LINE__, 1.501383201904700e+14, "2e+14", "%1.g",
-__LINE__, 1.501387105011959e-02, "0.0150139", "%g",
-__LINE__, 1.505784488562271e+26, "1.50578e+26", "%5g",
-__LINE__, 1.506367986495534e+10, "1.50637e+10", "%2g",
-__LINE__, 1.507421710226296e+19, "1.507422E+19", "%#E",
-__LINE__, 1.507960881206134e+16, "2e+16", "%.0g",
-__LINE__, 1.508974301049424e+14, "+1.508974E+14", "%+E",
-__LINE__, 1.509204025111090e-18, "1.509204E-18", "%E",
-__LINE__, 1.511351799767759e+21, "1511351799767759462866.93397", "%.5f",
-__LINE__, 1.511712197184520e-06, "+1.51171e-06", "%+1g",
-__LINE__, 1.514703727491400e+02, "151.47", "%.5g",
-__LINE__, 1.514855355408287e+04, "15148.6", "%g",
-__LINE__, 1.516256896575301e+06, "1.516257e+06", "%.6e",
-__LINE__, 1.517712083681069e+14, "1.51771e+14", "%0g",
-__LINE__, 1.522102209167607e-18, "1.52210e-18", "%#g",
-__LINE__, 1.526264862895663e-12, "0.000000", "%f",
-__LINE__, 1.527165480858125e+10, "1.527e+10", "%.4g",
-__LINE__, 1.528363280308369e+00, "+1.52836", "%+0G",
-__LINE__, 1.529108490733420e-22, "1.529108E-22", "%E",
-__LINE__, 1.529783364474522e+19, "15297833644745216119.531506", "%7f",
-__LINE__, 1.530698363199346e-01, "0.1531", "%#.4f",
-__LINE__, 1.531520796537450e+22, "1.53152E+22", "%G",
-__LINE__, 1.533314559644813e+06, "+1533314.559645", "%+f",
-__LINE__, 1.534682791112854e+01, "+15.3468", "%+0G",
-__LINE__, 1.534714026386730e-11, "0.000000", "%f",
-__LINE__, 1.537145729498115e+00, "1.537146E+00", "%E",
-__LINE__, 1.538740040875751e-23, "1.538740E-23", "%E",
-__LINE__, 1.546248240596482e-03, "0.001546", "%f",
-__LINE__, 1.546808012239302e-09, "+1.54681E-09", "%+G",
-__LINE__, 1.546903877359107e+06, "1.5e+06", "%.2g",
-__LINE__, 1.550153973747718e-18, "2e-18", "%.0g",
-__LINE__, 1.551703460384378e+00, "+1.5517", "%+.4f",
-__LINE__, 1.553995673101369e+29, "1.554E+29", "%G",
-__LINE__, 1.555477017531899e+28, "1.55548e+28", "%g",
-__LINE__, 1.555548963448462e+12, "1555548963448.46227", "%6.5f",
-__LINE__, 1.558702451007712e+16, "2e+16", "%5.1g",
-__LINE__, 1.561641587723724e+29, "1.561642e+29", "%e",
-__LINE__, 1.561868589559509e-05, "1.56187E-05", "%G",
-__LINE__, 1.565229056438949e+13, "1.56523e+13", "%1.6g",
-__LINE__, 1.570074406600442e+14, "+1.57007E+14", "%+4G",
-__LINE__, 1.570951909913194e+13, "1.57095E+13", "%.6G",
-__LINE__, 1.572186421520727e-30, "+1.57219e-30", "%+g",
-__LINE__, 1.574374582066945e+12, "1.57e+12", "%5.2e",
-__LINE__, 1.577789404823585e+12, "1.577789E+12", "%E",
-__LINE__, 1.579641278389186e+04, "15796.413", "%7.3f",
-__LINE__, 1.581602330975388e+17, "1.5816E+17", "%#.5G",
-__LINE__, 1.587809692297490e-18, "+1.58781e-18", "%+2g",
-__LINE__, 1.588672954832388e-05, "1.58867E-05", "%G",
-__LINE__, 1.594548954259978e+25, "+1.595e+25", "%+.3e",
-__LINE__, 1.596653742160718e+10, "15966537421.6072", "%.4f",
-__LINE__, 1.597416186584641e+25, "1.59742e+25", "%g",
-__LINE__, 1.597810706039500e-04, "0.000159781", "%g",
-__LINE__, 1.601425691153542e+01, "16.0143", "%G",
-__LINE__, 1.601491150913706e-15, "+1.60149e-15", "%+g",
-__LINE__, 1.609357026469645e+02, "160.936", "%0g",
-__LINE__, 1.611064881461188e+06, "+1.611065E+06", "%+E",
-__LINE__, 1.611324319640770e-03, "0.00161132", "%G",
-__LINE__, 1.613202907940803e+19, "1.6E+19", "%#.1E",
-__LINE__, 1.613883500056636e-12, "0.000000", "%5f",
-__LINE__, 1.618254213010772e+07, "16182542.130108", "%6f",
-__LINE__, 1.620441271211248e-08, "1.62044E-08", "%0G",
-__LINE__, 1.622548435024803e-01, "+0.162255", "%+5G",
-__LINE__, 1.623740394555269e+19, "16237403945552689066.289531", "%3f",
-__LINE__, 1.625774250389937e+18, "1.625774e+18", "%1e",
-__LINE__, 1.626300864432426e-02, "0.016263", "%G",
-__LINE__, 1.626351146877694e-11, "1.6263511e-11", "%2.7e",
-__LINE__, 1.626568757587995e+25, "16265687575879949733348439.62220", "%6.5f",
-__LINE__, 1.626717482094360e-28, "+1.626717e-28", "%+3e",
-__LINE__, 1.630801585998995e-28, "1.6308e-28", "%0g",
-__LINE__, 1.631827173682962e+03, "1632", "%1.4g",
-__LINE__, 1.631907571243379e+18, "1631907571243378818.337533", "%f",
-__LINE__, 1.632058420447239e-14, " +2E-14", "%+7.G",
-__LINE__, 1.632847882621240e+18, "+1.63285E+18", "%+2G",
-__LINE__, 1.637329146233172e-09, "+1.63733e-09", "%+g",
-__LINE__, 1.638315287442427e-16, "+1.63832E-16", "%+G",
-__LINE__, 1.641284849351445e+15, "1641284849351445.096488", "%f",
-__LINE__, 1.644871927486929e+10, "2e+10", "%1.e",
-__LINE__, 1.645917293047431e-19, "1.64592e-19", "%.6g",
-__LINE__, 1.649201265647819e-07, "0.000000", "%f",
-__LINE__, 1.650169065733559e+23, "165016906573355903731226.135278", "%3f",
-__LINE__, 1.651217291298196e-30, "2E-30", "%4.G",
-__LINE__, 1.652680660160331e+08, "2.e+08", "%#3.g",
-__LINE__, 1.654171892948767e-15, "1.65417e-15", "%g",
-__LINE__, 1.655435863725412e+17, "+1.655436e+17", "%+#e",
-__LINE__, 1.656015606204101e+28, "+1.7E+28", "%+3.2G",
-__LINE__, 1.656814723110478e-21, "+0.000000", "%+f",
-__LINE__, 1.658632655199721e-19, "2.E-19", "%#4.G",
-__LINE__, 1.659915061311444e+27, "1.66E+27", "%.3G",
-__LINE__, 1.664258574522914e-29, "+1.664259E-29", "%+E",
-__LINE__, 1.667662840654469e-28, "+2e-28", "%+0.g",
-__LINE__, 1.673124993246863e-25, "+0.000000", "%+f",
-__LINE__, 1.677788498058833e-20, "1.678e-20", "%.4g",
-__LINE__, 1.681211731173386e-07, "1.68121e-07", "%0.6g",
-__LINE__, 1.686341560076196e+02, "169", "%.0f",
-__LINE__, 1.686507685287281e+08, "1.686508E+08", "%E",
-__LINE__, 1.689500448795801e+03, "+1689.500449", "%+0f",
-__LINE__, 1.690639426041009e-13, "2e-13", "%5.0g",
-__LINE__, 1.691554939595928e+16, "+1.6916e+16", "%+.5g",
-__LINE__, 1.698597126229626e-09, "1.699e-09", "%3.4g",
-__LINE__, 1.700093083173516e+16, "17000930831735159", "%5.f",
-__LINE__, 1.703653732982710e+13, "+1.70365e+13", "%+g",
-__LINE__, 1.705353380573352e-16, "0.000000", "%f",
-__LINE__, 1.705973328700179e-26, "1.70597e-26", "%5g",
-__LINE__, 1.717797289369145e+22, "+1.717797E+22", "%+7E",
-__LINE__, 1.722819196705361e-28, "1.722819E-28", "%1.7G",
-__LINE__, 1.723775772891202e+01, "17.237758", "%f",
-__LINE__, 1.723787102325353e-23, "0.000000", "%2f",
-__LINE__, 1.724551301171870e-13, "0.000000", "%f",
-__LINE__, 1.726098078655758e-20, "0.0000000", "%7.7f",
-__LINE__, 1.726302822039762e+18, "+2E+18", "%+1.G",
-__LINE__, 1.726659209108151e+18, "+1.72666E+18", "%+6G",
-__LINE__, 1.728324925097269e-25, "1.728325e-25", "%7e",
-__LINE__, 1.728357491215602e+02, "172.836", "%G",
-__LINE__, 1.729612227517587e+22, "1.729612e+22", "%e",
-__LINE__, 1.731753104740805e-06, "1.73175e-06", "%2g",
-__LINE__, 1.736066279733589e+18, "+1.736066E+18", "%+3E",
-__LINE__, 1.736626769480182e-19, "2e-19", "%.0g",
-__LINE__, 1.737445267713118e-13, " 2e-13", "%7.g",
-__LINE__, 1.739264683023077e+05, "173926.468302", "%f",
-__LINE__, 1.739423702667596e-16, "+1.73942e-16", "%+g",
-__LINE__, 1.741053616961658e-14, "1.74105E-14", "%G",
-__LINE__, 1.741085952255057e+29, "1.7e+29", "%#.1e",
-__LINE__, 1.743673705633426e+03, "2E+03", "%5.0G",
-__LINE__, 1.750940899205665e+27, "1.75094e+27", "%g",
-__LINE__, 1.753871003884151e-26, "0.", "%#.0f",
-__LINE__, 1.755237470854478e-14, "1.755237e-14", "%4e",
-__LINE__, 1.757491419837315e-03, "0.002", "%1.G",
-__LINE__, 1.758657797688126e+26, "+1.75866E+26", "%+#G",
-__LINE__, 1.760491452270889e+08, "1.76049E+08", "%G",
-__LINE__, 1.760816275862939e-10, "2e-10", "%.1g",
-__LINE__, 1.760905893493003e-22, "1.76e-22", "%.2e",
-__LINE__, 1.762101125986743e-12, "2e-12", "%.0g",
-__LINE__, 1.763855968659571e+27, "1.763856E+27", "%E",
-__LINE__, 1.764595217341348e-13, "1.764595E-13", "%E",
-__LINE__, 1.766737296048445e+08, "+1.77e+08", "%+.3g",
-__LINE__, 1.769916386969961e-05, "+1.76992e-05", "%+g",
-__LINE__, 1.773873506344176e-01, "1.773874e-01", "%e",
-__LINE__, 1.775392554371421e+03, "+1775.39", "%+3.2f",
-__LINE__, 1.776007623006870e+24, "1776007623006870161930237.372871", "%f",
-__LINE__, 1.777418921678653e-27, " 0", "%6.f",
-__LINE__, 1.780967607234234e-18, "1.780968E-18", "%E",
-__LINE__, 1.782510583486435e+24, "+2e+24", "%+3.g",
-__LINE__, 1.784002921603004e+14, "1.784E+14", "%G",
-__LINE__, 1.784231151778382e+11, "1.7842E+11", "%.5G",
-__LINE__, 1.785589091453195e+02, " 179.", "%#5.f",
-__LINE__, 1.786402639400039e+19, "2e+19", "%0.g",
-__LINE__, 1.786506485794647e-25, "2E-25", "%.1G",
-__LINE__, 1.787513971482493e-04, "+0.000178751", "%+G",
-__LINE__, 1.799765409320039e+23, "179976540932003885586710", "%6.0f",
-__LINE__, 1.800451864218989e+08, "+1.80045e+08", "%+g",
-__LINE__, 1.800743538258572e+04, " +18007", "%+7.f",
-__LINE__, 1.801583764453362e+25, "1.8016e+25", "%0.5g",
-__LINE__, 1.804502093739547e+14, "2e+14", "%2.g",
-__LINE__, 1.805600104488678e-17, "1.805600E-17", "%E",
-__LINE__, 1.811342448081048e+17, "1.811342e+17", "%.6e",
-__LINE__, 1.812252160066930e+19, "2e+19", "%0.e",
-__LINE__, 1.816287564395273e+02, "182", "%2.f",
-__LINE__, 1.817097386762552e-13, "2E-13", "%3.1G",
-__LINE__, 1.817881381387254e+06, "1.81788E+06", "%G",
-__LINE__, 1.818416380830953e-30, "1.81842E-30", "%G",
-__LINE__, 1.824788290177454e-23, "1.82479e-23", "%g",
-__LINE__, 1.827832506678437e-18, "1.82783E-18", "%G",
-__LINE__, 1.828048053242609e+01, "18.2805", "%g",
-__LINE__, 1.828939681844203e-21, "1.82894E-21", "%.6G",
-__LINE__, 1.829763900251753e+12, "1829763900251.752773", "%1f",
-__LINE__, 1.833100407114602e-05, "0.000018", "%#f",
-__LINE__, 1.833672780034284e-07, "1.833673e-07", "%e",
-__LINE__, 1.834307692387540e+21, "2E+21", "%5.G",
-__LINE__, 1.835119931666753e+14, "+1.835120e+14", "%+e",
-__LINE__, 1.835956566920861e-26, "0.000000", "%#f",
-__LINE__, 1.837784131899354e+22, "1.83778E+22", "%G",
-__LINE__, 1.842867094224664e-09, "1.84287e-09", "%g",
-__LINE__, 1.844234823805319e+28, "2E+28", "%1.G",
-__LINE__, 1.844877682008962e+12, "1.84488e+12", "%g",
-__LINE__, 1.846530424340488e-22, "1.846530e-22", "%#.7g",
-__LINE__, 1.849111603036448e-08, "0.00", "%.2f",
-__LINE__, 1.850158752678734e+04, "+18502", "%+.5G",
-__LINE__, 1.851431391104701e-06, " +2e-06", "%+7.e",
-__LINE__, 1.851487430609031e-04, "0.000185149", "%G",
-__LINE__, 1.853171650128773e+03, "1853.17", "%G",
-__LINE__, 1.854743263740068e-16, "1.854743E-16", "%6.6E",
-__LINE__, 1.864399020932753e-11, "+0.000000", "%+f",
-__LINE__, 1.865028568072397e-22, "1.86503E-22", "%.6G",
-__LINE__, 1.868128423759223e+14, "1.86813E+14", "%4G",
-__LINE__, 1.868453558435480e+21, "1.86845E+21", "%G",
-__LINE__, 1.870663011627498e-06, "1.87E-06", "%.3G",
-__LINE__, 1.873273487748907e+17, "+1.873273E+17", "%+E",
-__LINE__, 1.878885220839805e-04, "0.000187889", "%G",
-__LINE__, 1.879102515623569e+17, "1.8791e+17", "%g",
-__LINE__, 1.889343972100858e-10, "2E-10", "%2.E",
-__LINE__, 1.891833282879762e-24, "+2e-24", "%+.1g",
-__LINE__, 1.895148778941240e-07, "0.000000", "%0f",
-__LINE__, 1.896950834067578e-28, "+1.89695e-28", "%+#g",
-__LINE__, 1.898464546986629e-05, "1.898465e-05", "%.7g",
-__LINE__, 1.900851427578321e-19, "1.90085e-19", "%6g",
-__LINE__, 1.901171344577750e+27, "1.901171e+27", "%7.7g",
-__LINE__, 1.903563335316359e+02, "190.356", "%0g",
-__LINE__, 1.903817306004701e-16, "+1.90e-16", "%+#6.2e",
-__LINE__, 1.910606410246797e+21, "1.91061E+21", "%2.5E",
-__LINE__, 1.912537759564710e+29, "1.91254E+29", "%G",
-__LINE__, 1.913606675894566e+27, "1.91361E+27", "%7.6G",
-__LINE__, 1.916473734025505e-05, " 2e-05", "%7.g",
-__LINE__, 1.916507511720523e+23, "+2E+23", "%+.0E",
-__LINE__, 1.917688262248837e-28, "1.918e-28", "%.4g",
-__LINE__, 1.921375594217083e-12, "1.92138E-12", "%G",
-__LINE__, 1.923916000932815e-25, "1.92392E-25", "%G",
-__LINE__, 1.926303652776462e-01, "+0.2", "%+0.G",
-__LINE__, 1.929411084211293e+21, "1.92941E+21", "%6G",
-__LINE__, 1.929996820297491e-26, "1.93e-26", "%.6g",
-__LINE__, 1.937301472034748e-29, "1.9373E-29", "%G",
-__LINE__, 1.937301660220894e-11, "+1.9373E-11", "%+G",
-__LINE__, 1.939038538587083e-02, "0.0193904", "%g",
-__LINE__, 1.940575489112444e-09, "1.94058E-09", "%G",
-__LINE__, 1.946550455606677e-26, "1.946550E-26", "%#1E",
-__LINE__, 1.954250777559491e-14, "1.95425E-14", "%G",
-__LINE__, 1.955646327688473e-16, "1.956E-16", "%#.3E",
-__LINE__, 1.956999911995683e+20, "2E+20", "%2.G",
-__LINE__, 1.959125254298784e-21, "1.95913E-21", "%#G",
-__LINE__, 1.960330340481290e+26, "1.96033e+26", "%.6g",
-__LINE__, 1.964156478075422e+01, "+19.6416", "%+g",
-__LINE__, 1.964702507676036e+19, "2.0e+19", "%2.1e",
-__LINE__, 1.965762191674409e-30, "2E-30", "%1.G",
-__LINE__, 1.967492699686803e-29, "+1.967493E-29", "%+#E",
-__LINE__, 1.970072604062236e-11, "+1.97007E-11", "%+G",
-__LINE__, 1.975631055550387e+05, "197563.105555", "%.6f",
-__LINE__, 1.975722425389177e+28, "+1.975722e+28", "%+5.6e",
-__LINE__, 1.977938328895365e-05, " 2e-05", "%6.e",
-__LINE__, 1.981950849019640e+13, "1.981951E+13", "%E",
-__LINE__, 1.982543168856985e-26, "1.98254e-26", "%4g",
-__LINE__, 1.984873317384181e-20, "1.98487E-20", "%4G",
-__LINE__, 1.986146420877074e+02, "+1.986146e+02", "%+0e",
-__LINE__, 1.986465942785167e-28, "1.98647e-28", "%g",
-__LINE__, 1.988250323235468e-05, " +0", "%+7.f",
-__LINE__, 1.989966623080645e-09, "1.989967e-09", "%e",
-__LINE__, 1.991243122514519e+11, "199124312251", "%5.f",
-__LINE__, 1.993287894645908e+25, "+1.993288E+25", "%+E",
-__LINE__, 1.995172329888890e-30, "+1.99517e-30", "%+3g",
-__LINE__, 1.997075127236432e+05, "1.997E+05", "%#.4G",
-__LINE__, 2.000651599487290e+04, "2E+04", "%2.E",
-__LINE__, 2.001429412876339e-28, "0.000000", "%6f",
-__LINE__, 2.003535646264196e+03, " 2E+03", "%7.G",
-__LINE__, 2.011751504116246e+06, "2E+06", "%2.G",
-__LINE__, 2.016361237694652e-30, "2.01636e-30", "%4g",
-__LINE__, 2.018266414065554e-08, "0.00", "%2.2f",
-__LINE__, 2.020706780608565e+03, "2E+03", "%.0G",
-__LINE__, 2.025098418552005e-16, "+2.025098E-16", "%+2E",
-__LINE__, 2.026100592518976e-11, "2.026101e-11", "%6e",
-__LINE__, 2.026167291572980e+11, "2.02617E+11", "%G",
-__LINE__, 2.026782170272331e+07, "2.026782E+07", "%E",
-__LINE__, 2.029133469449347e-06, " 2e-06", "%6.g",
-__LINE__, 2.031191570768443e-20, "2.031192E-20", "%2.7G",
-__LINE__, 2.031884221862863e-16, "2.031884e-16", "%e",
-__LINE__, 2.032992924118323e+29, "203299292411832333016263874014.84", "%#0.2f",
-__LINE__, 2.035799610097827e+28, "+20357996100978272835391180706.2104344", "%+3.7f",
-__LINE__, 2.038008183612069e+25, "20380081836120691463065668", "%7.0f",
-__LINE__, 2.041632205119365e-22, "+2.04163e-22", "%+g",
-__LINE__, 2.042769811159352e-10, "2e-10", "%.1g",
-__LINE__, 2.043034975847005e-08, "2.043035e-08", "%e",
-__LINE__, 2.045930666285880e+26, "2.04593e+26", "%g",
-__LINE__, 2.048377276651386e-21, "0.00000", "%2.5f",
-__LINE__, 2.051785787301292e-23, "0.000000", "%f",
-__LINE__, 2.055085792048183e-10, "0.000000", "%f",
-__LINE__, 2.055783028451040e-21, "+0", "%+1.f",
-__LINE__, 2.057641607509489e-17, "+2E-17", "%+2.G",
-__LINE__, 2.058348703001600e-15, "2.05835E-15", "%#G",
-__LINE__, 2.059594758787322e+24, "2.05959E+24", "%1G",
-__LINE__, 2.062710740295018e+01, "20.6271", "%G",
-__LINE__, 2.063240676447750e-11, "0.000000", "%f",
-__LINE__, 2.063799238238917e-09, "+0.000000", "%+f",
-__LINE__, 2.064564135160425e-17, "2.06456E-17", "%G",
-__LINE__, 2.066363476927650e-05, "2.07E-05", "%.3G",
-__LINE__, 2.066871450514214e-02, "+2.066871e-02", "%+e",
-__LINE__, 2.067258256169148e+07, "2.06726e+07", "%g",
-__LINE__, 2.068466590729350e-22, "0.0000", "%.4f",
-__LINE__, 2.068779510112540e-26, "2.06878e-26", "%g",
-__LINE__, 2.069258770387493e+19, "20692587703874929516.700831", "%3f",
-__LINE__, 2.069547778447951e+26, "2.069548e+26", "%6e",
-__LINE__, 2.070479507710941e-23, "2.07048E-23", "%G",
-__LINE__, 2.071809640061785e+22, "2.071810E+22", "%E",
-__LINE__, 2.073364463564950e-06, "2.07336e-06", "%g",
-__LINE__, 2.073478953644888e-10, "+2.07E-10", "%+.3G",
-__LINE__, 2.076039194312519e+12, "2.07604E+12", "%G",
-__LINE__, 2.081490398946229e-07, "+2.08149e-07", "%+g",
-__LINE__, 2.084941170287895e-07, "2.084941E-07", "%7E",
-__LINE__, 2.087035885023382e-18, "+0.000000", "%+f",
-__LINE__, 2.091025884363342e-09, "2.09103E-09", "%G",
-__LINE__, 2.091830555397864e+08, "209183056", "%0.f",
-__LINE__, 2.091998109232084e-22, "0.000000", "%#f",
-__LINE__, 2.093406473464940e-17, "2.09341e-17", "%g",
-__LINE__, 2.094646724039720e-26, "2.094647e-26", "%0.7g",
-__LINE__, 2.095218667083208e-22, "2.09522e-22", "%.5e",
-__LINE__, 2.096932364992728e-27, "2.1E-27", "%.2G",
-__LINE__, 2.097012452732083e+17, "2.09701E+17", "%G",
-__LINE__, 2.102022216908102e-07, "0.000000", "%f",
-__LINE__, 2.104648382618938e-04, "0.00021", "%.3G",
-__LINE__, 2.109159578853690e-19, "2.10916e-19", "%6g",
-__LINE__, 2.111732624641178e-13, "+2.111733E-13", "%+7.7G",
-__LINE__, 2.112676138351330e+21, " 2e+21", "%6.g",
-__LINE__, 2.117332904051741e-09, "+0.000000", "%+f",
-__LINE__, 2.118001353767757e-14, "2.118E-14", "%4.3E",
-__LINE__, 2.119413720893955e+12, "2.119414E+12", "%.7G",
-__LINE__, 2.119610992647014e+07, "+21196109.9265", "%+.4f",
-__LINE__, 2.120504022069221e+25, "21205040220692210617414730.223", "%#.3f",
-__LINE__, 2.120634617123718e-16, "2.120635e-16", "%#e",
-__LINE__, 2.128702437175385e+12, "2128702437175.385", "%.3f",
-__LINE__, 2.131148830213536e-12, "2.131149e-12", "%e",
-__LINE__, 2.132682622145255e+04, "+21326.83", "%+#5.7G",
-__LINE__, 2.133864841676473e-01, " +0.2", "%+6.g",
-__LINE__, 2.133939058496273e+16, "2E+16", "%4.G",
-__LINE__, 2.135087006806302e-24, "0.000000", "%f",
-__LINE__, 2.138983961194584e-20, "+2.138984e-20", "%+7e",
-__LINE__, 2.146534189669224e+17, "+2.147E+17", "%+.4G",
-__LINE__, 2.147375595676503e+09, "2.147376e+09", "%e",
-__LINE__, 2.152994986418075e+02, "2E+02", "%0.E",
-__LINE__, 2.154127135896811e+06, "2.15E+06", "%2.3G",
-__LINE__, 2.154613053892588e-29, "2.1546E-29", "%.4E",
-__LINE__, 2.160830430730653e-12, "2.16083E-12", "%#G",
-__LINE__, 2.161740591663027e+28, "2.161741e+28", "%e",
-__LINE__, 2.167181665934011e-06, "2e-06", "%1.e",
-__LINE__, 2.167348761729060e-04, "2.167349e-04", "%#e",
-__LINE__, 2.170270852816708e-10, "2.17027E-10", "%0G",
-__LINE__, 2.173048229189370e-06, "2.173e-06", "%.5g",
-__LINE__, 2.175554537855024e+10, "2.17555E+10", "%G",
-__LINE__, 2.177447372527968e-30, "+0.000000", "%+.6f",
-__LINE__, 2.178591661569858e+05, "2.1786e+05", "%1.5g",
-__LINE__, 2.184700207174818e-29, "0.000000", "%f",
-__LINE__, 2.190817031437247e+03, "2.E+03", "%#3.0E",
-__LINE__, 2.191396212145558e-01, "2.191E-01", "%6.3E",
-__LINE__, 2.191786353372880e-23, "2.19179e-23", "%.5e",
-__LINE__, 2.193471126151079e+19, "2.1935E+19", "%.4E",
-__LINE__, 2.194750177630526e-15, "2.194750e-15", "%e",
-__LINE__, 2.196145170358973e+05, "+219615", "%+g",
-__LINE__, 2.199602360934320e-09, "2.19960E-09", "%#6.6G",
-__LINE__, 2.202913988776998e+17, "+2.20291e+17", "%+g",
-__LINE__, 2.207094560707703e-10, "2.207095e-10", "%e",
-__LINE__, 2.207557214621658e-13, " 0", "%4.f",
-__LINE__, 2.209428206272229e+13, "2.20943e+13", "%g",
-__LINE__, 2.212662463615175e-11, " 0", "%4.0f",
-__LINE__, 2.215732710968468e-30, "2E-30", "%.1G",
-__LINE__, 2.218490841936778e-10, "2.21849e-10", "%2g",
-__LINE__, 2.218850610567959e-01, "+0.221885", "%+G",
-__LINE__, 2.220796939261542e-03, "0.002221", "%#f",
-__LINE__, 2.221819894808024e+24, "2.2e+24", "%5.1e",
-__LINE__, 2.223804993235507e+27, "2.223805e+27", "%1e",
-__LINE__, 2.224715386046563e-17, "0.00000", "%#.5f",
-__LINE__, 2.224864709983882e-16, "+2.224865e-16", "%+e",
-__LINE__, 2.225764510969505e+16, "2.E+16", "%#4.G",
-__LINE__, 2.233229189161284e-07, "+2.23323e-07", "%+6g",
-__LINE__, 2.236522807209868e+17, "2.23652e+17", "%g",
-__LINE__, 2.236641620849775e+20, "2E+20", "%0.G",
-__LINE__, 2.237089952728626e-13, "2E-13", "%5.E",
-__LINE__, 2.238531255563381e-11, " 2E-11", "%7.1G",
-__LINE__, 2.242782296436871e+12, "2242782296436.871103", "%f",
-__LINE__, 2.249177852069393e-02, "+2.249178E-02", "%+5E",
-__LINE__, 2.250735782732076e+29, "+2.25074e+29", "%+g",
-__LINE__, 2.257455203557544e-11, "+2e-11", "%+4.0g",
-__LINE__, 2.258002527939529e+24, "2.258e+24", "%g",
-__LINE__, 2.266955929448160e+20, "226695592944815960123.6056915", "%.7f",
-__LINE__, 2.269019719123250e-23, "0.000000", "%f",
-__LINE__, 2.269022332502809e+02, "+226.902233", "%+f",
-__LINE__, 2.271165222038591e-03, "0.002", "%1.1g",
-__LINE__, 2.273965946408021e+14, "+227396594640802.085507", "%+f",
-__LINE__, 2.277221153386242e+22, "22772211533862418697538.032575", "%#f",
-__LINE__, 2.280214920187521e-01, "0.2", "%2.G",
-__LINE__, 2.280762993019740e+06, "2.28076E+06", "%G",
-__LINE__, 2.283479263040833e-24, "+0.000000", "%+f",
-__LINE__, 2.283686319235123e-07, "2.2837E-07", "%5.5G",
-__LINE__, 2.285842617231066e-26, "0.000000", "%f",
-__LINE__, 2.293145864755873e-02, "0.02", "%.0g",
-__LINE__, 2.293439381531532e+03, "+2.293439E+03", "%+#1E",
-__LINE__, 2.297972500660698e-22, "2.29797e-22", "%g",
-__LINE__, 2.298725366073681e+23, "2.29873E+23", "%G",
-__LINE__, 2.303151535483950e-29, "2.30315E-29", "%G",
-__LINE__, 2.308565313657699e-25, " 0", "%4.f",
-__LINE__, 2.309305373760733e-07, "2.309305E-07", "%E",
-__LINE__, 2.309693761334710e-19, "2.30969e-19", "%g",
-__LINE__, 2.312218220995774e-20, "+2.31222E-20", "%+.6G",
-__LINE__, 2.313115729670525e+24, "2.31312E+24", "%G",
-__LINE__, 2.315325159866773e-21, "2.315325E-21", "%E",
-__LINE__, 2.316932917620091e-19, "0.000000", "%f",
-__LINE__, 2.317548394633895e+13, "2.31755E+13", "%0G",
-__LINE__, 2.318951465093612e+02, "+2.32e+02", "%+1.2e",
-__LINE__, 2.319151794905482e-17, "+0.000000", "%+0f",
-__LINE__, 2.319708617851078e-27, "0.000000", "%f",
-__LINE__, 2.320019976591725e+20, "2e+20", "%.1g",
-__LINE__, 2.322859962551666e+06, "2.32286e+06", "%g",
-__LINE__, 2.326474568074649e-29, "2.326e-29", "%.4g",
-__LINE__, 2.328400844172053e-07, "2.3284E-07", "%G",
-__LINE__, 2.333695247698112e+16, "2.3337e+16", "%g",
-__LINE__, 2.333717120257130e-19, "+0.000000", "%+f",
-__LINE__, 2.334711793234782e-19, "2.33471E-19", "%5G",
-__LINE__, 2.335524987281242e+02, "+233.55", "%+7.5g",
-__LINE__, 2.335556767836369e-30, "2.34e-30", "%.3g",
-__LINE__, 2.337696964360052e-10, "2.3377e-10", "%1g",
-__LINE__, 2.337858249184500e-14, "2.337858E-14", "%5.6E",
-__LINE__, 2.339984354781169e-14, "2.339984E-14", "%E",
-__LINE__, 2.340849041430089e-04, "0.00023", "%0.2G",
-__LINE__, 2.342388410373363e-24, "2.34239E-24", "%G",
-__LINE__, 2.343933106737237e-22, "2.34393e-22", "%g",
-__LINE__, 2.344870855713960e-08, "0.000000", "%.6f",
-__LINE__, 2.347368965433808e+24, "2347368965433808352116785", "%4.f",
-__LINE__, 2.349417462171421e-02, "+0.0234942", "%+G",
-__LINE__, 2.351071111431207e+11, "235107111143.12", "%.2f",
-__LINE__, 2.352756222810670e+19, "+2.e+19", "%+#4.g",
-__LINE__, 2.355862529217003e-22, "2.355863e-22", "%#4e",
-__LINE__, 2.356804045401445e-30, "2.3568E-30", "%G",
-__LINE__, 2.362100710185559e-26, "2.3621e-26", "%g",
-__LINE__, 2.368330779173562e-12, " 0", "%4.f",
-__LINE__, 2.383329784369796e+22, "2.38333E+22", "%G",
-__LINE__, 2.386845229536477e+01, "+23.868452", "%+#f",
-__LINE__, 2.388207830036780e-05, "0.000024", "%f",
-__LINE__, 2.391809468802907e+21, "+2.391809e+21", "%+e",
-__LINE__, 2.395172908564692e-09, "+0.000000", "%+f",
-__LINE__, 2.395447167030886e-29, "2.39545e-29", "%g",
-__LINE__, 2.397292973389182e+16, "23972929733891823", "%6.f",
-__LINE__, 2.401749832237687e-30, "2.401750E-30", "%E",
-__LINE__, 2.403610502544347e-03, "0.00240361", "%4G",
-__LINE__, 2.404676421776132e+17, "240467642177613206", "%6.f",
-__LINE__, 2.406327689091479e+25, "2.406328e+25", "%e",
-__LINE__, 2.407341999590511e-02, "0.024073", "%f",
-__LINE__, 2.407352797581004e+05, "240735.", "%#g",
-__LINE__, 2.407903467439017e+13, "2.4079E+13", "%G",
-__LINE__, 2.407979635013539e+21, " +2E+21", "%+7.G",
-__LINE__, 2.409513517930790e+29, "240951351793079027174826478585.600853", "%f",
-__LINE__, 2.412530651221551e+10, "+2.41253E+10", "%+G",
-__LINE__, 2.419943224673811e+00, "2.41994", "%#g",
-__LINE__, 2.422474399040258e-15, "0.000000", "%f",
-__LINE__, 2.426060206689458e+18, "2.42606E+18", "%1G",
-__LINE__, 2.439982659679872e+14, "+2.439983E+14", "%+E",
-__LINE__, 2.440528851375447e+13, "24405288513754.466173", "%f",
-__LINE__, 2.441340473292679e+19, "2.44134E+19", "%G",
-__LINE__, 2.443521636943916e+19, " 2.e+19", "%#7.g",
-__LINE__, 2.445925211597624e-27, "2.445925E-27", "%E",
-__LINE__, 2.446966179060722e+25, "2.446966e+25", "%5e",
-__LINE__, 2.447714218717278e+11, "2e+11", "%1.e",
-__LINE__, 2.448339744613286e+06, "2.4483e+06", "%3.5g",
-__LINE__, 2.448772993496189e+03, "2448.77", "%G",
-__LINE__, 2.448857654325229e+22, "+2.44886e+22", "%+g",
-__LINE__, 2.450082452098890e-27, "2.4501E-27", "%#3.5G",
-__LINE__, 2.451293602221637e+05, "245129.360222", "%f",
-__LINE__, 2.454531490229426e+02, "245.453", "%G",
-__LINE__, 2.458958369944980e+14, "2.5E+14", "%6.1E",
-__LINE__, 2.463666680775038e+14, "+246366668077503.80", "%+#.2f",
-__LINE__, 2.471582990960795e+05, "2.471583e+05", "%e",
-__LINE__, 2.474107179274687e+22, "2.47411e+22", "%g",
-__LINE__, 2.474332114849132e-08, "+2.47433e-08", "%+g",
-__LINE__, 2.476956762431716e+18, "+2476956762431715919.348107", "%+#f",
-__LINE__, 2.479091221850607e-22, "0.000000", "%f",
-__LINE__, 2.479819586598431e-24, "2.47982e-24", "%g",
-__LINE__, 2.480006174601455e-05, "2.48001E-05", "%G",
-__LINE__, 2.482672677638334e-26, "+0.000000", "%+f",
-__LINE__, 2.492816492208918e-14, " 0", "%7.f",
-__LINE__, 2.492964173197140e-12, " 2e-12", "%7.g",
-__LINE__, 2.494646635961173e+02, "249.465", "%g",
-__LINE__, 2.494687818780545e+11, "249468781878.054546", "%#7f",
-__LINE__, 2.510083560147301e-13, "+2.510084e-13", "%+#e",
-__LINE__, 2.511186607989480e-30, "2.51E-30", "%.3G",
-__LINE__, 2.514164516133643e-11, "2.51416e-11", "%g",
-__LINE__, 2.517242520804735e+11, "2.517243e+11", "%e",
-__LINE__, 2.518526126400833e-26, "2.51853e-26", "%g",
-__LINE__, 2.520313416401176e+09, "2520313416.401176", "%5f",
-__LINE__, 2.521653160738683e-29, "2.52165e-29", "%#g",
-__LINE__, 2.521941342615338e-16, "2.52194e-16", "%g",
-__LINE__, 2.523554774354461e-03, "+3E-03", "%+.0E",
-__LINE__, 2.525434130825058e+06, "+2.525434E+06", "%+E",
-__LINE__, 2.527616380113364e+02, "2.527616E+02", "%E",
-__LINE__, 2.531871347913505e+09, "+2.53187E+09", "%+#G",
-__LINE__, 2.532167428661069e+06, "2532167.428661", "%f",
-__LINE__, 2.545585718405995e+14, "+2.54559E+14", "%+G",
-__LINE__, 2.546305097286406e+10, "2.546305e+10", "%e",
-__LINE__, 2.547467156069069e-30, "+0.00", "%+3.2f",
-__LINE__, 2.548728793004506e-14, "2.54873E-14", "%G",
-__LINE__, 2.560375602395090e+11, "256037560239.509032", "%0f",
-__LINE__, 2.560555687476687e+03, "2561", "%.4g",
-__LINE__, 2.561709077363443e-24, "+0.000000", "%+f",
-__LINE__, 2.563763849675242e+10, "2.5637638E+10", "%.7E",
-__LINE__, 2.567482414574355e+11, "+2.567482e+11", "%+e",
-__LINE__, 2.571575046303674e-17, "3E-17", "%2.0E",
-__LINE__, 2.572997971296986e+11, "257299797129.698593", "%f",
-__LINE__, 2.578625935900331e+22, "25786259359003311786295.853381", "%f",
-__LINE__, 2.579663282966370e+12, "2.579663e+12", "%e",
-__LINE__, 2.593141782397610e-08, "0.000000", "%f",
-__LINE__, 2.594386109584196e+04, "3.E+04", "%#6.0E",
-__LINE__, 2.598069318007816e-22, "2.59807e-22", "%g",
-__LINE__, 2.600910462290091e+09, "2.600910E+09", "%6E",
-__LINE__, 2.602580183614458e-03, "2.602580e-03", "%e",
-__LINE__, 2.606540360440264e+09, "+2606540360.4", "%+#0.1f",
-__LINE__, 2.610016419698116e-21, "+3.e-21", "%+#3.g",
-__LINE__, 2.612279323574882e-20, "2.61228E-20", "%G",
-__LINE__, 2.614157324336453e-14, "2.61416e-14", "%g",
-__LINE__, 2.614688721873993e-09, "2.61e-09", "%6.2e",
-__LINE__, 2.616661104472416e-15, " 0", "%5.f",
-__LINE__, 2.616742079283195e-09, " +3E-09", "%+7.E",
-__LINE__, 2.618075304717427e+24, "2.618075e+24", "%e",
-__LINE__, 2.624118573335769e+26, "262411857333576925555007619.550452", "%1f",
-__LINE__, 2.625718894274227e+24, "+2625718894274227110940955.753904", "%+f",
-__LINE__, 2.627081999477812e+03, "2627.081999", "%f",
-__LINE__, 2.631061062224705e+14, "263106106222470.481626", "%f",
-__LINE__, 2.631545877128814e+27, "+2.63155e+27", "%+g",
-__LINE__, 2.632694395848818e-11, "2.63269e-11", "%g",
-__LINE__, 2.636728891022008e-22, "+2.63673e-22", "%+#4g",
-__LINE__, 2.638495675008130e-28, "+2.638496e-28", "%+e",
-__LINE__, 2.639704195859799e-11, "0.", "%#.0f",
-__LINE__, 2.641645264652665e-20, "0", "%0.f",
-__LINE__, 2.642012075064497e-20, "3E-20", "%0.E",
-__LINE__, 2.648725869006487e-29, " 3E-29", "%6.G",
-__LINE__, 2.649060724417770e+12, "3E+12", "%3.G",
-__LINE__, 2.651188545120166e-17, "0.000", "%.3f",
-__LINE__, 2.652302152621621e+14, "2.7E+14", "%.2G",
-__LINE__, 2.653309718412604e-28, "0.000000", "%f",
-__LINE__, 2.658344750491858e-21, " 3e-21", "%6.g",
-__LINE__, 2.664625074612594e+15, "3e+15", "%1.g",
-__LINE__, 2.666953728270800e-15, "3e-15", "%0.e",
-__LINE__, 2.674515419678877e-11, " 3E-11", "%6.E",
-__LINE__, 2.680054917256578e+15, "2680054917256577.5", "%#2.1f",
-__LINE__, 2.680495609883415e-11, "2.68E-11", "%#.3G",
-__LINE__, 2.685757893641070e+23, "268575789364107020418259.70809", "%1.5f",
-__LINE__, 2.695551226058178e+16, "26955512260581775.407786", "%f",
-__LINE__, 2.696346377519671e+04, "+26963.5", "%+G",
-__LINE__, 2.714262310601257e+17, "+2.714262E+17", "%+E",
-__LINE__, 2.719227450016317e-01, "0.271923", "%G",
-__LINE__, 2.724135433346056e-30, "+2.72414e-30", "%+g",
-__LINE__, 2.725143224130276e+14, "272514322413027.576530", "%6f",
-__LINE__, 2.729355189648310e-03, "+0.00273", "%+.5f",
-__LINE__, 2.732872167724945e+11, "2.73287E+11", "%G",
-__LINE__, 2.737709476435412e+17, "273770947643541218.141650", "%f",
-__LINE__, 2.739299356074967e-15, "2.7E-15", "%.2G",
-__LINE__, 2.740793612304798e-27, "2.740794E-27", "%.7G",
-__LINE__, 2.742030156175960e+20, "2.74203e+20", "%2.6g",
-__LINE__, 2.744455324096085e+11, "2.74446E+11", "%G",
-__LINE__, 2.745179546531160e+07, "2.7452E+07", "%.5G",
-__LINE__, 2.747470562525333e+04, "3E+04", "%2.E",
-__LINE__, 2.750243314674629e+21, "2.75024E+21", "%#G",
-__LINE__, 2.750250224436030e+20, "+2.750250e+20", "%+0.6e",
-__LINE__, 2.752712858561084e-22, "2.752713e-22", "%e",
-__LINE__, 2.756982987656667e-03, "0.002756983", "%#.7G",
-__LINE__, 2.761841188479590e+13, "3e+13", "%1.g",
-__LINE__, 2.769498440434419e+00, "+3e+00", "%+0.e",
-__LINE__, 2.769993785786379e+10, "27699937857.863794", "%f",
-__LINE__, 2.772900256376753e-06, "+2.7729E-06", "%+7.6G",
-__LINE__, 2.774401482467457e-06, "2.8e-06", "%3.2g",
-__LINE__, 2.777691370374757e-02, "+0.027777", "%+f",
-__LINE__, 2.779836227365899e-09, "3e-09", "%5.0g",
-__LINE__, 2.780481651765741e+01, "2.780482E+01", "%E",
-__LINE__, 2.782228478714809e-26, "2.782228E-26", "%4.7G",
-__LINE__, 2.790457781719376e+13, "+2.8e+13", "%+.2g",
-__LINE__, 2.792026581166417e-30, " 3.e-30", "%#7.0g",
-__LINE__, 2.792396278299615e-08, "0.00", "%#.2f",
-__LINE__, 2.793658047689995e-10, "2.794e-10", "%#0.4g",
-__LINE__, 2.795707358229888e-25, "0.000000", "%f",
-__LINE__, 2.796253091758523e-06, "2.796E-06", "%.4G",
-__LINE__, 2.796756564788716e-24, "2.796757e-24", "%e",
-__LINE__, 2.798730444798773e-14, "2.79873e-14", "%g",
-__LINE__, 2.799108397670447e-24, "3E-24", "%.0G",
-__LINE__, 2.799389008872835e+06, "2799389.", "%#0.f",
-__LINE__, 2.800413998518039e-14, "0.000000", "%f",
-__LINE__, 2.803237602587100e+15, "+2803237602587100.418816", "%+5f",
-__LINE__, 2.803474415574551e-04, "0.0002803", "%.7f",
-__LINE__, 2.804957468647181e+25, "2.80496e+25", "%g",
-__LINE__, 2.809345112788226e+09, "2809345112.788226", "%.6f",
-__LINE__, 2.811518239408899e+10, "3e+10", "%1.g",
-__LINE__, 2.813188439967416e-16, "0.0000000", "%5.7f",
-__LINE__, 2.813497118051755e+08, "2.8135e+08", "%.5g",
-__LINE__, 2.815748256510577e-29, "0.000000", "%2f",
-__LINE__, 2.816076365485207e-01, "0.281608", "%0G",
-__LINE__, 2.816083345772131e+24, "2.8161e+24", "%6.4e",
-__LINE__, 2.818686957605178e+12, "2.8187E+12", "%.5G",
-__LINE__, 2.821903538737691e+20, "2.8219E+20", "%G",
-__LINE__, 2.823659589845680e+26, "2.82366e+26", "%2g",
-__LINE__, 2.823685630865012e+22, "2.82369E+22", "%G",
-__LINE__, 2.828826386007914e+21, "2.828826E+21", "%7E",
-__LINE__, 2.830997901034349e+04, "+3e+04", "%+0.e",
-__LINE__, 2.833886731091353e-26, "+2.833887e-26", "%+4e",
-__LINE__, 2.839965144893913e+28, "28399651448939131626048038015.1421", "%.4f",
-__LINE__, 2.840651452049947e-09, "2.841E-09", "%#.3E",
-__LINE__, 2.843388001911757e-01, "0.284339", "%g",
-__LINE__, 2.846122151080671e+14, "2.84612E+14", "%.5E",
-__LINE__, 2.851257828837595e+05, "+285126", "%+5.f",
-__LINE__, 2.853823884459520e+07, "+2.85382E+07", "%+G",
-__LINE__, 2.853870068368765e-06, "2.854E-06", "%4.3E",
-__LINE__, 2.856687358149867e+01, "+28.567", "%+6.5G",
-__LINE__, 2.858946600073752e+06, "2.8589466e+06", "%3.7e",
-__LINE__, 2.861525727138818e+24, "2.8615257e+24", "%2.7e",
-__LINE__, 2.865104175886071e-24, "0.000000", "%f",
-__LINE__, 2.870678920363198e-14, "2.87068E-14", "%G",
-__LINE__, 2.873298537233691e+09, "+2.8733e+09", "%+g",
-__LINE__, 2.877939609444375e-02, "0.028779", "%f",
-__LINE__, 2.878253985341728e+13, "2.87825E+13", "%G",
-__LINE__, 2.879299244903946e+29, "287929924490394597569320467301", "%0.f",
-__LINE__, 2.885516225515485e-26, "0.000000", "%f",
-__LINE__, 2.886013724129579e+20, "+3e+20", "%+4.g",
-__LINE__, 2.887032786975506e-30, "0.000000", "%f",
-__LINE__, 2.890415456531026e-29, "2.89042E-29", "%G",
-__LINE__, 2.893177360548214e-13, "2.893E-13", "%#6.3E",
-__LINE__, 2.895265536458195e+26, "2.89527e+26", "%5g",
-__LINE__, 2.903844533810152e+23, "290384453381015195105874.23", "%.2f",
-__LINE__, 2.909060558287504e+27, "2.90906e+27", "%g",
-__LINE__, 2.911615480973172e-05, "2.91162E-05", "%3G",
-__LINE__, 2.912692297221896e+09, "2912692297.221896", "%#f",
-__LINE__, 2.913595662485813e-24, "2.9136E-24", "%G",
-__LINE__, 2.915960840341896e-27, "0.000000", "%f",
-__LINE__, 2.920451095973991e-16, "2.92e-16", "%2.2e",
-__LINE__, 2.920528295810925e+06, "2.92053E+06", "%#G",
-__LINE__, 2.921564671017147e+20, "2.921565E+20", "%#6E",
-__LINE__, 2.921628350942189e+01, "2.921628E+01", "%E",
-__LINE__, 2.921843377455232e+20, "2.921843E+20", "%#E",
-__LINE__, 2.930156950319384e+29, "2.930E+29", "%1.3E",
-__LINE__, 2.931229858895071e-30, "2.9e-30", "%4.2g",
-__LINE__, 2.931753029689166e+20, "2.93175e+20", "%g",
-__LINE__, 2.933023693079342e+15, "3.E+15", "%#.1G",
-__LINE__, 2.933078733225520e+26, "2.93308E+26", "%G",
-__LINE__, 2.933528170896643e-14, "+2.93353e-14", "%+g",
-__LINE__, 2.938648437428148e+00, "2.938648e+00", "%e",
-__LINE__, 2.940752238221344e+26, "+2.94075E+26", "%+G",
-__LINE__, 2.942836470459675e+20, "2.9428e+20", "%6.4e",
-__LINE__, 2.943218333254941e+29, "294321833325494086608387078740.634024", "%f",
-__LINE__, 2.943690574007512e-27, "0.000000", "%f",
-__LINE__, 2.945452907046501e+09, "+2.9455E+09", "%+.5G",
-__LINE__, 2.946648725966953e+16, "29466487259669534.637396", "%4f",
-__LINE__, 2.955119322417825e+29, "2.95512E+29", "%G",
-__LINE__, 2.966481197538973e+24, "2.96648e+24", "%#g",
-__LINE__, 2.969362862661362e+08, "+2.969363e+08", "%+7e",
-__LINE__, 2.970062459990078e+21, "+2.97006E+21", "%+G",
-__LINE__, 2.971059959019791e+10, " 3E+10", "%7.G",
-__LINE__, 2.973020205606034e-29, "0.000000", "%f",
-__LINE__, 2.977223210301426e+04, "2.977223e+04", "%#e",
-__LINE__, 2.977467832772786e-26, "0.000000", "%f",
-__LINE__, 2.981433606423384e+18, "2981433606423384397.032805", "%f",
-__LINE__, 2.981615513287404e-17, "2.98162e-17", "%g",
-__LINE__, 2.983880743847276e+19, " 3e+19", "%7.e",
-__LINE__, 2.983927792297305e-28, "2.983928e-28", "%e",
-__LINE__, 2.984807359492058e-17, " 0", "%2.f",
-__LINE__, 2.985123412933032e+09, "+2.98512e+09", "%+g",
-__LINE__, 2.991132955408629e-27, "+2.99113e-27", "%+4g",
-__LINE__, 2.992345635923643e+19, "3E+19", "%4.G",
-__LINE__, 2.993024238285395e-05, "2.99302e-05", "%2g",
-__LINE__, 2.995303406756363e+16, "+2.995303E+16", "%+E",
-__LINE__, 2.995492577854335e+19, "+29954925778543346481.797016", "%+f",
-__LINE__, 2.996856271675341e-25, "+3e-25", "%+0.e",
-__LINE__, 2.997813968112619e+12, "2.99781e+12", "%#5g",
-__LINE__, 3.002097486457961e-17, "3.00210e-17", "%5.5e",
-__LINE__, 3.006538123158692e+28, "+3.00654E+28", "%+#G",
-__LINE__, 3.007293721729544e+04, "30072.937217", "%f",
-__LINE__, 3.008301791944493e-07, "3.008e-07", "%.3e",
-__LINE__, 3.011742184603817e-17, "3.011742E-17", "%#E",
-__LINE__, 3.024641547299177e-30, "3.02464e-30", "%g",
-__LINE__, 3.026525135110198e-28, "3e-28", "%.0e",
-__LINE__, 3.026768160756558e+20, "3.02677E+20", "%G",
-__LINE__, 3.031928829940975e+18, "3031928829940975234.1", "%0.1f",
-__LINE__, 3.039787705138620e+24, "+3.E+24", "%+#5.G",
-__LINE__, 3.039803824423916e-02, "0.030398", "%5f",
-__LINE__, 3.041236293199133e-26, "3.04124e-26", "%g",
-__LINE__, 3.045634954037886e+04, "30456.3", "%g",
-__LINE__, 3.047528114241850e+25, "3e+25", "%0.e",
-__LINE__, 3.047958193737501e-24, "3.04796E-24", "%#G",
-__LINE__, 3.049537324414302e-16, "3.04954E-16", "%G",
-__LINE__, 3.050500637681798e-30, "3.0505E-30", "%G",
-__LINE__, 3.051769626625307e-01, "0.305177", "%f",
-__LINE__, 3.057280201971847e+11, "+3.05728E+11", "%+.5E",
-__LINE__, 3.060046173306881e-10, "+3.060046e-10", "%+e",
-__LINE__, 3.069732667347204e+27, "+3069732667347204291274920251.453295", "%+f",
-__LINE__, 3.075060836786916e-14, "0.000000", "%f",
-__LINE__, 3.078175179670964e+13, "3.07818E+13", "%G",
-__LINE__, 3.080305344303183e-21, "3.08031e-21", "%6g",
-__LINE__, 3.088881497064043e+27, "+3.088881E+27", "%+3E",
-__LINE__, 3.089196877931209e-20, "3.089197e-20", "%e",
-__LINE__, 3.091400888880487e-08, "3e-08", "%2.e",
-__LINE__, 3.093410684178904e+16, "3.09341e+16", "%g",
-__LINE__, 3.104225344208216e-21, "0.000000", "%f",
-__LINE__, 3.105843728248599e+13, "3.e+13", "%#.0g",
-__LINE__, 3.106463071390893e-07, "0.0000", "%.4f",
-__LINE__, 3.107784123569379e+02, "+310.778", "%+G",
-__LINE__, 3.110605148983672e-20, "3.1106051E-20", "%.7E",
-__LINE__, 3.111702418162670e-04, "0.00031117", "%.5G",
-__LINE__, 3.117610675303153e-17, "3.11761e-17", "%g",
-__LINE__, 3.123620125717981e+07, "3.1236e+07", "%2.5g",
-__LINE__, 3.125648558809832e-24, "+3.125649E-24", "%+#0.6E",
-__LINE__, 3.129025163659283e+10, "31290251636.592825", "%#f",
-__LINE__, 3.130689119412709e-29, "+3.131E-29", "%+#.4G",
-__LINE__, 3.135681222132527e+13, "3.13568E+13", "%G",
-__LINE__, 3.138290485073330e-10, "3.13829E-10", "%G",
-__LINE__, 3.141255250155306e-12, "3.14126E-12", "%G",
-__LINE__, 3.143224520918429e+25, "3.14322E+25", "%#1G",
-__LINE__, 3.144746921366173e-16, " 0", "%7.f",
-__LINE__, 3.151336678241994e+19, "+3.15134E+19", "%+G",
-__LINE__, 3.161752935716549e+24, "3.2E+24", "%2.1E",
-__LINE__, 3.167106521258172e-10, "+3.167107e-10", "%+e",
-__LINE__, 3.167266522824146e-04, "3E-04", "%3.E",
-__LINE__, 3.169995217131489e+27, "3169995217131488907114089670.358226", "%f",
-__LINE__, 3.172117220467692e-21, "3.1721E-21", "%.5G",
-__LINE__, 3.173824170351611e+02, " 3e+02", "%6.e",
-__LINE__, 3.186291452544739e-28, " 0", "%2.f",
-__LINE__, 3.194750094186063e+03, "+3.194750E+03", "%+E",
-__LINE__, 3.195001037118137e-20, "0", "%0.0f",
-__LINE__, 3.199271564719560e+02, "319.927", "%g",
-__LINE__, 3.212803450638544e+20, "3.2128e+20", "%.6g",
-__LINE__, 3.214502877263883e+24, "3214502877263882840708220", "%2.f",
-__LINE__, 3.214658414074286e-01, "+0.321466", "%+#g",
-__LINE__, 3.217627975823673e+00, "3.217628", "%f",
-__LINE__, 3.218257328710536e-07, "3.21826e-07", "%6.5e",
-__LINE__, 3.221949479347008e+02, "322.194948", "%f",
-__LINE__, 3.222862935507443e-14, "3.222863E-14", "%E",
-__LINE__, 3.223750247261608e+19, "3.22375e+19", "%g",
-__LINE__, 3.236030335782375e+05, "3.236030e+05", "%e",
-__LINE__, 3.241078803072735e+19, "3.24108e+19", "%g",
-__LINE__, 3.248069569167045e-06, "0.000003", "%#f",
-__LINE__, 3.248148973717269e-15, "3.24815E-15", "%G",
-__LINE__, 3.251150704311790e+25, "+3.25115e+25", "%+5g",
-__LINE__, 3.254498593372140e+15, "+3.2545e+15", "%+g",
-__LINE__, 3.254949399612861e-13, "+3.255E-13", "%+7.3E",
-__LINE__, 3.255490928554106e-17, "3.255491e-17", "%e",
-__LINE__, 3.262333894422112e+17, "326233389442211185.738074", "%0f",
-__LINE__, 3.263923577545217e-24, "0.0000000", "%.7f",
-__LINE__, 3.267125289609703e+23, "3.26713e+23", "%#.5e",
-__LINE__, 3.267906049108331e+27, "3.267906E+27", "%6E",
-__LINE__, 3.269885039157328e+14, "326988503915732.797722", "%f",
-__LINE__, 3.296011393609953e-27, " 3E-27", "%7.E",
-__LINE__, 3.296452164568996e+29, "3.296452E+29", "%E",
-__LINE__, 3.296544736555325e+10, "+3.29654E+10", "%+.6G",
-__LINE__, 3.301861835798572e+03, "3301.862", "%4.7g",
-__LINE__, 3.311292283423002e+21, " 3E+21", "%6.G",
-__LINE__, 3.314868440076262e-10, "3.3149E-10", "%.5G",
-__LINE__, 3.318057982247451e-13, "3.3181e-13", "%0.5g",
-__LINE__, 3.318139218410071e-22, "0.000000", "%f",
-__LINE__, 3.326769904839351e-11, "+3.3268e-11", "%+0.4e",
-__LINE__, 3.327483659787219e+27, "+3.32748e+27", "%+g",
-__LINE__, 3.332666889640198e+17, "333266688964019763.830038", "%f",
-__LINE__, 3.333807449377253e+10, "+3.33e+10", "%+.3g",
-__LINE__, 3.334572302792625e-09, "3.334572E-09", "%E",
-__LINE__, 3.337567126586765e-17, "0.0000000", "%#3.7f",
-__LINE__, 3.340512607683786e-04, "+3E-04", "%+1.E",
-__LINE__, 3.344911557516870e+04, "33449.1", "%G",
-__LINE__, 3.346464302017296e+26, "+3.E+26", "%+#3.G",
-__LINE__, 3.348503166628953e+00, "+3.348503e+00", "%+e",
-__LINE__, 3.350025157778138e-19, "3.35003e-19", "%6g",
-__LINE__, 3.352826233035342e+11, "335282623303.534200", "%7f",
-__LINE__, 3.357174089765502e+10, "3.35717E+10", "%G",
-__LINE__, 3.369253166475501e+03, "+3369.25", "%+G",
-__LINE__, 3.371385975046735e+02, "337.", "%#.0f",
-__LINE__, 3.372532650462104e-04, "+0.000", "%+.3f",
-__LINE__, 3.376498162710442e-26, "3.376498e-26", "%e",
-__LINE__, 3.383510307689135e-12, " 3e-12", "%7.0e",
-__LINE__, 3.388427914080631e-04, "0.0003", "%2.4f",
-__LINE__, 3.390757423408097e+29, "3.3908E+29", "%.4E",
-__LINE__, 3.393963140962879e-11, "3.39396e-11", "%g",
-__LINE__, 3.399245742994444e+24, "3.399246E+24", "%E",
-__LINE__, 3.417690405546708e-26, "0.00000", "%4.5f",
-__LINE__, 3.421159360472045e-30, "3.42116E-30", "%G",
-__LINE__, 3.421973947898887e-06, "3.42197E-06", "%4G",
-__LINE__, 3.425949002482817e-10, "+3.42595E-10", "%+G",
-__LINE__, 3.428355150377972e+08, "3.42836E+08", "%G",
-__LINE__, 3.445035158951526e+15, "3445035158951526.454985", "%f",
-__LINE__, 3.447363996077534e+28, "+3e+28", "%+2.e",
-__LINE__, 3.451571062654907e-03, "0.00345157", "%G",
-__LINE__, 3.452787236877688e+09, "3.45279e+09", "%g",
-__LINE__, 3.454114826574939e-22, "3.e-22", "%#3.e",
-__LINE__, 3.455241965974631e-03, "0.003455", "%#f",
-__LINE__, 3.456190496554365e-18, "3.E-18", "%#5.E",
-__LINE__, 3.456804565717233e-19, "+0.000", "%+2.3f",
-__LINE__, 3.457077651539715e-28, "3.457078E-28", "%E",
-__LINE__, 3.472025705376229e+22, "3.472e+22", "%7.4g",
-__LINE__, 3.473308270919079e+03, "3.473308e+03", "%e",
-__LINE__, 3.474468013243007e-30, "3.47447e-30", "%g",
-__LINE__, 3.477976957097698e+22, "3.47798e+22", "%g",
-__LINE__, 3.501174631980057e-06, "4e-06", "%4.g",
-__LINE__, 3.501808481702140e+20, "3.50181E+20", "%G",
-__LINE__, 3.511760000705324e+14, "351176000070532.357000", "%f",
-__LINE__, 3.511870226306087e+29, "3.51187e+29", "%.5e",
-__LINE__, 3.518846859147841e+02, "+351.885", "%+G",
-__LINE__, 3.521659149753418e+25, "35216591497534182053641416", "%5.f",
-__LINE__, 3.521721228178747e+21, "4e+21", "%2.e",
-__LINE__, 3.526696007281458e+22, "3.5267e+22", "%g",
-__LINE__, 3.535631031379084e-11, "4e-11", "%5.0g",
-__LINE__, 3.537219665456759e-01, "0.353722", "%f",
-__LINE__, 3.537252728287785e-09, "3.537253E-09", "%E",
-__LINE__, 3.542561277796815e-19, "3.542561E-19", "%E",
-__LINE__, 3.548942336915745e+13, "3.54894E+13", "%.5E",
-__LINE__, 3.574385715121768e-24, "3.57439E-24", "%#G",
-__LINE__, 3.578068067760211e-13, "3.578068E-13", "%E",
-__LINE__, 3.583296432862266e-13, "3.5833e-13", "%g",
-__LINE__, 3.591567367115590e+19, "3.59157e+19", "%1g",
-__LINE__, 3.594902312287635e-24, "3.5949E-24", "%G",
-__LINE__, 3.602929486764515e+12, "3602929486764.514522", "%#f",
-__LINE__, 3.606699462631472e-01, "+0.360670", "%+f",
-__LINE__, 3.608605968319811e+17, "3.60861e+17", "%g",
-__LINE__, 3.608780761567885e+24, "4e+24", "%0.e",
-__LINE__, 3.623857274715022e-15, "3.62386E-15", "%1G",
-__LINE__, 3.627346251764432e-22, "3.627e-22", "%.4g",
-__LINE__, 3.652610391698086e-16, "0.000000", "%3f",
-__LINE__, 3.657463146689917e-19, " 0", "%4.0f",
-__LINE__, 3.658538858712938e-15, "4E-15", "%5.G",
-__LINE__, 3.660337267266058e+16, "+36603372672660579.034698", "%+f",
-__LINE__, 3.661588742065142e-01, "0.366159", "%g",
-__LINE__, 3.662296387211376e-25, "0.000000", "%f",
-__LINE__, 3.668511100303393e-29, "0.000000", "%7f",
-__LINE__, 3.669499303661920e+06, "3.6695e+06", "%1.5g",
-__LINE__, 3.676856420121343e-23, "3.6769e-23", "%0.4e",
-__LINE__, 3.677197473476901e-19, "+3.6772e-19", "%+g",
-__LINE__, 3.677281754506453e+12, "+3677281754506.452671", "%+f",
-__LINE__, 3.678420802401506e-19, "3.67842E-19", "%G",
-__LINE__, 3.679970245325769e+07, "3.67997e+07", "%g",
-__LINE__, 3.682528947621349e+05, "4.e+05", "%#5.e",
-__LINE__, 3.688257471304210e+22, "36882574713042104441740.320908", "%f",
-__LINE__, 3.689129734472166e-01, "0.368913", "%0.6G",
-__LINE__, 3.693483801463324e+12, "4E+12", "%3.E",
-__LINE__, 3.694612396584729e-21, "+3.69461E-21", "%+G",
-__LINE__, 3.706150073392112e-19, "0.000000", "%2f",
-__LINE__, 3.706824819530577e+21, "3706824819530576853310.321894", "%f",
-__LINE__, 3.709583789659276e+19, "+3.709584E+19", "%+#E",
-__LINE__, 3.711137503697284e+22, "3.7111E+22", "%.5G",
-__LINE__, 3.717307412969522e-22, "3.717307E-22", "%#E",
-__LINE__, 3.717434999853808e+24, " 4E+24", "%6.G",
-__LINE__, 3.720761662524312e+14, "+372076166252431.2285", "%+1.4f",
-__LINE__, 3.721613815237707e-10, "3.72161e-10", "%g",
-__LINE__, 3.725086467464346e+14, "3.72509E+14", "%G",
-__LINE__, 3.727427083626536e-15, "+4E-15", "%+.0G",
-__LINE__, 3.731138322599465e-13, "3.73114e-13", "%5g",
-__LINE__, 3.732248129614146e-04, " 4E-04", "%7.E",
-__LINE__, 3.744422223926118e-24, "3.744422E-24", "%E",
-__LINE__, 3.745595428897916e+21, "+3745595428897916079336.027906", "%+f",
-__LINE__, 3.751308304055989e-08, "+3.751308e-08", "%+e",
-__LINE__, 3.755395417696132e-02, "0.037554", "%f",
-__LINE__, 3.769103881505159e+09, "3.7691e+09", "%g",
-__LINE__, 3.769535572757430e+00, "3.769536", "%6.7G",
-__LINE__, 3.770823872348274e-28, "+0.000000", "%+f",
-__LINE__, 3.771160653578178e+29, "3.77116e+29", "%g",
-__LINE__, 3.776563752716444e-12, "4E-12", "%.0E",
-__LINE__, 3.777953798674786e-28, "3.77795e-28", "%g",
-__LINE__, 3.785994690686598e+28, "4E+28", "%5.G",
-__LINE__, 3.787487488835162e+01, "+37.874875", "%+5f",
-__LINE__, 3.788249311173359e-18, "3.788249E-18", "%E",
-__LINE__, 3.798728360791314e-08, "3.798728E-08", "%2E",
-__LINE__, 3.799038238867092e+05, "3.79904E+05", "%.5E",
-__LINE__, 3.799822564549600e+06, "3.79982E+06", "%.5E",
-__LINE__, 3.804862840499834e-16, "0", "%1.f",
-__LINE__, 3.805375156822481e+12, "3805375156822.4814861", "%.7f",
-__LINE__, 3.821612790153376e-17, "3.821613e-17", "%e",
-__LINE__, 3.825193659558693e+14, "3.82519E+14", "%#G",
-__LINE__, 3.834180638680996e+17, "+383418063868099565.638659", "%+f",
-__LINE__, 3.834759760605814e-12, "3.83476E-12", "%G",
-__LINE__, 3.839786235582770e+16, "+3.84e+16", "%+0.3g",
-__LINE__, 3.843164462248778e+28, "3.84316e+28", "%#g",
-__LINE__, 3.845599697858050e+22, "3.8456E+22", "%G",
-__LINE__, 3.850147271017228e-21, "3.85e-21", "%.4g",
-__LINE__, 3.850283557812101e+07, "3.85028E+07", "%G",
-__LINE__, 3.854235609725703e+03, "3854.24", "%G",
-__LINE__, 3.864901885489405e-15, "3.8649E-15", "%G",
-__LINE__, 3.868630187629983e-24, "3.868630e-24", "%e",
-__LINE__, 3.876764606134972e-03, "+3.8767646e-03", "%+#0.7e",
-__LINE__, 3.884553592855422e+08, "+3.8845536e+08", "%+4.7e",
-__LINE__, 3.887417494351062e+03, "3887.42", "%0g",
-__LINE__, 3.887561018972304e+03, "3887.56", "%G",
-__LINE__, 3.888554801724658e-24, "3.888555e-24", "%e",
-__LINE__, 3.892806891909861e-01, "0.389281", "%f",
-__LINE__, 3.914459791345755e+15, "+3.914460E+15", "%+E",
-__LINE__, 3.918383209642759e+01, "39.1838", "%#G",
-__LINE__, 3.923970658741865e-10, "3.92397E-10", "%G",
-__LINE__, 3.928163650272335e+18, "3928163650272335161.162118", "%f",
-__LINE__, 3.933053127721002e-20, "3.933053e-20", "%e",
-__LINE__, 3.939306552155218e-29, "3.93931E-29", "%G",
-__LINE__, 3.953007066379472e+07, "3.953007E+07", "%E",
-__LINE__, 3.954924824986267e-01, "3.954925E-01", "%E",
-__LINE__, 3.956156072067987e+15, "3.956E+15", "%0.4G",
-__LINE__, 3.957756196797224e+22, "4.0E+22", "%4.1E",
-__LINE__, 3.960011413261009e+27, "+3960011413261008783592842519.283295", "%+f",
-__LINE__, 3.961789076323378e+20, "396178907632337828914.614875", "%f",
-__LINE__, 3.961985468081708e-28, "3.96199E-28", "%1G",
-__LINE__, 3.975007582283812e-27, "0.000000", "%0.6f",
-__LINE__, 3.987586813142132e+15, "+3.98759e+15", "%+g",
-__LINE__, 3.992250836957379e+21, "3.99225E+21", "%0G",
-__LINE__, 3.992985048620057e+00, "3.9930", "%.4f",
-__LINE__, 4.000000000000000e+02, "400.00", "%.2f",
-__LINE__, 4.000145414240556e+14, "4.00015e+14", "%#6g",
-__LINE__, 4.000774453529974e-25, "4E-25", "%.0E",
-__LINE__, 4.002041494804383e+17, "4.002041E+17", "%E",
-__LINE__, 4.005505415013214e+17, " 4E+17", "%6.2G",
-__LINE__, 4.008960306876491e-28, "0.000", "%.3f",
-__LINE__, 4.032337828117640e+16, "4.03234E+16", "%G",
-__LINE__, 4.035414597530057e+26, "403541459753005682387083652.429283", "%f",
-__LINE__, 4.037065874793069e-01, "0.403707", "%f",
-__LINE__, 4.047856284449970e-14, "4.04786E-14", "%#G",
-__LINE__, 4.049037221323070e-04, "4.049037e-04", "%e",
-__LINE__, 4.053458853142009e-07, "4E-07", "%2.0E",
-__LINE__, 4.056455443275955e-22, "4.056455e-22", "%e",
-__LINE__, 4.058158020771355e-22, "4.05816e-22", "%#2g",
-__LINE__, 4.067283508945137e+02, "+4.07e+02", "%+5.2e",
-__LINE__, 4.072155715199509e+11, "4.072e+11", "%.4g",
-__LINE__, 4.074643403755990e-22, "4e-22", "%0.g",
-__LINE__, 4.077450352325251e+08, "4.1e+08", "%3.2g",
-__LINE__, 4.081492619284916e-08, "4.081493E-08", "%E",
-__LINE__, 4.083271801996951e-10, "4.083272E-10", "%#E",
-__LINE__, 4.090188547940879e-15, "4.090189E-15", "%#E",
-__LINE__, 4.091167728938537e-11, "4e-11", "%1.g",
-__LINE__, 4.091916745541154e+15, "4091916745541153.588306", "%f",
-__LINE__, 4.092366122921161e+23, "4E+23", "%0.E",
-__LINE__, 4.094638368212577e-11, "4.09464E-11", "%#G",
-__LINE__, 4.097148443124199e-16, "0.000000", "%f",
-__LINE__, 4.101057893946401e+06, "4e+06", "%4.g",
-__LINE__, 4.101209521231476e+28, "41012095212314756409455185348.633677", "%f",
-__LINE__, 4.105683659045903e+05, "+4.E+05", "%+#1.G",
-__LINE__, 4.111553717385758e-16, "4.11155e-16", "%g",
-__LINE__, 4.112186409918593e+14, "+4.11219e+14", "%+g",
-__LINE__, 4.117782144860865e+25, "4.117782E+25", "%5E",
-__LINE__, 4.119420921722146e-27, "4.11942e-27", "%g",
-__LINE__, 4.134953783635018e+14, "+4.1349538e+14", "%+.7e",
-__LINE__, 4.136990822648468e+11, "4.136991E+11", "%E",
-__LINE__, 4.140475788523046e+14, "+4E+14", "%+5.G",
-__LINE__, 4.149589679915584e+24, "4.14959E+24", "%2G",
-__LINE__, 4.151240342256744e-22, " 0", "%2.f",
-__LINE__, 4.155533104307272e-04, "+0.000416", "%+f",
-__LINE__, 4.155890511880097e+25, "4.155891e+25", "%e",
-__LINE__, 4.159907901074450e-19, "4.159908E-19", "%7E",
-__LINE__, 4.171899783464252e+18, "4E+18", "%.0E",
-__LINE__, 4.177920266276382e-17, "+0.0000", "%+1.4f",
-__LINE__, 4.181728014477237e-20, "4.18173e-20", "%.6g",
-__LINE__, 4.203600495086497e-30, " 4E-30", "%6.G",
-__LINE__, 4.211166112605717e-08, "4E-08", "%5.1G",
-__LINE__, 4.219513437404614e+18, "+4E+18", "%+.0E",
-__LINE__, 4.221426315236785e+08, "4.221426E+08", "%#E",
-__LINE__, 4.226224756005934e-13, " 4.e-13", "%#7.g",
-__LINE__, 4.226979046489921e-01, "4.226979e-01", "%#.6e",
-__LINE__, 4.236283521629158e-08, "+4.23628E-08", "%+G",
-__LINE__, 4.239850628514233e-07, "4.23985E-07", "%.6G",
-__LINE__, 4.241177358638621e+04, "42411.773586", "%2f",
-__LINE__, 4.245306724398964e-13, "0.000000", "%#f",
-__LINE__, 4.246194290300334e+16, "42461942903003340.177293", "%2f",
-__LINE__, 4.251238996137952e-05, "4.25124E-05", "%3G",
-__LINE__, 4.262432542017438e+13, "42624325420174.375978", "%1f",
-__LINE__, 4.266383084300715e+16, "4E+16", "%4.G",
-__LINE__, 4.292963398931474e-11, "4.292963E-11", "%E",
-__LINE__, 4.296530271399131e-29, "0.000000", "%6f",
-__LINE__, 4.303753949741171e+19, "4.30375E+19", "%2G",
-__LINE__, 4.303767633827431e-28, "4.30377e-28", "%g",
-__LINE__, 4.316181911403991e-30, "4.3162e-30", "%#7.5g",
-__LINE__, 4.318654697213126e-18, "4.31865e-18", "%g",
-__LINE__, 4.320618603119499e+05, "432061.860312", "%3f",
-__LINE__, 4.322443609118441e+21, "4.32244E+21", "%7.5E",
-__LINE__, 4.322522446810708e-15, "4.32252e-15", "%.6g",
-__LINE__, 4.334728493589115e-18, "0.000000", "%f",
-__LINE__, 4.335342531476346e-19, "4.33534E-19", "%G",
-__LINE__, 4.340579325084176e-30, "4.34058e-30", "%#0.6g",
-__LINE__, 4.340775659883185e+04, "43407.756599", "%6f",
-__LINE__, 4.361131891528634e-14, " 4E-14", "%6.G",
-__LINE__, 4.366662624371249e-02, "+0.04", "%+4.g",
-__LINE__, 4.369919308458348e+28, "+4.36992e+28", "%+2g",
-__LINE__, 4.369930393192433e-24, "4.369930e-24", "%e",
-__LINE__, 4.376283118322521e-01, "0.437628", "%g",
-__LINE__, 4.386868840825930e+19, "4.3869E+19", "%.5G",
-__LINE__, 4.389349113395235e+05, "+4.389349e+05", "%+e",
-__LINE__, 4.392447466753053e-08, "+4.392E-08", "%+.4G",
-__LINE__, 4.394068619246889e-13, "4.39407e-13", "%6g",
-__LINE__, 4.404889573700147e-09, "4.404890E-09", "%E",
-__LINE__, 4.410531039373014e+05, "+4.41e+05", "%+.2e",
-__LINE__, 4.412466606726400e-08, " 0.0", "%6.1f",
-__LINE__, 4.414693719279123e+17, "4.414694e+17", "%e",
-__LINE__, 4.417050329080679e-01, "+0.441705", "%+g",
-__LINE__, 4.419509841929196e-10, "4.4195098E-10", "%.7E",
-__LINE__, 4.421012777695611e+07, "+4.42101E+07", "%+0.6G",
-__LINE__, 4.426387732151208e+11, "4.42639e+11", "%g",
-__LINE__, 4.439567017550398e+26, "4.439567E+26", "%E",
-__LINE__, 4.446479816166258e-21, "4.446480e-21", "%0e",
-__LINE__, 4.453486178424380e+05, "445348.617842", "%f",
-__LINE__, 4.455733696043438e+06, "4.45573e+06", "%3g",
-__LINE__, 4.455870606312063e+16, "4.45587e+16", "%g",
-__LINE__, 4.458776435431700e+22, "4e+22", "%1.g",
-__LINE__, 4.466448605584151e-30, "0.000000", "%f",
-__LINE__, 4.471063097005706e+16, "4.47106E+16", "%G",
-__LINE__, 4.482001890035190e-22, "+4.482E-22", "%+G",
-__LINE__, 4.493246870093631e+05, "449325", "%1G",
-__LINE__, 4.496089639281023e+17, "4.49609e+17", "%g",
-__LINE__, 4.515066070117557e+15, "4.51507e+15", "%g",
-__LINE__, 4.518296460916194e+24, "+4.5183E+24", "%+G",
-__LINE__, 4.526548719445596e+02, "452.655", "%6.3f",
-__LINE__, 4.532756455106440e-26, "4.53e-26", "%4.2e",
-__LINE__, 4.534466782633055e-14, "4.53447E-14", "%G",
-__LINE__, 4.541313061854649e-14, "4.54131E-14", "%G",
-__LINE__, 4.541848265404338e+02, " 5E+02", "%7.G",
-__LINE__, 4.546603085406363e-26, "5E-26", "%3.G",
-__LINE__, 4.557349604829375e+28, "+45573496048293753446500886639.", "%+#1.f",
-__LINE__, 4.560736449944898e-27, "4.56074e-27", "%g",
-__LINE__, 4.563726230559341e-15, "+0.0", "%+2.1f",
-__LINE__, 4.572650965532532e-26, "+5E-26", "%+4.G",
-__LINE__, 4.574369572115099e-10, "+0.000000", "%+2.6f",
-__LINE__, 4.576480601519729e+28, "+4.576481e+28", "%+e",
-__LINE__, 4.587487640650499e+02, "+458.75", "%+3.2f",
-__LINE__, 4.598365231538559e-27, "4.59837E-27", "%G",
-__LINE__, 4.599348244725009e-28, "+4.5993482e-28", "%+#3.7e",
-__LINE__, 4.599897524047587e+22, "45998975240475870052136.997401", "%#f",
-__LINE__, 4.605415604725077e-25, "0.000000", "%f",
-__LINE__, 4.613055015797716e+28, "4.613055E+28", "%E",
-__LINE__, 4.618715275814238e-10, "4.618715E-10", "%E",
-__LINE__, 4.619044579489540e-14, "0.00", "%.2f",
-__LINE__, 4.633693310095410e-20, "+0.000000", "%+f",
-__LINE__, 4.648505395281916e-28, "0.000000", "%f",
-__LINE__, 4.651232770446398e+21, "4.65e+21", "%.2e",
-__LINE__, 4.659743589975352e+28, "+4.65974e+28", "%+g",
-__LINE__, 4.660181457075208e-13, "4.66018e-13", "%g",
-__LINE__, 4.669787018529686e+20, "4.66979e+20", "%g",
-__LINE__, 4.672649286126732e-21, "4.6726E-21", "%4.5G",
-__LINE__, 4.675431901120643e-11, " 0", "%3.f",
-__LINE__, 4.684404068169945e+26, "468440406816994503458317922.2", "%6.1f",
-__LINE__, 4.685438834234642e+19, "5.E+19", "%#6.G",
-__LINE__, 4.688915890732712e+00, "+5e+00", "%+2.e",
-__LINE__, 4.692999432046297e+00, "4.692999E+00", "%E",
-__LINE__, 4.708690772584701e+11, "4.70869e+11", "%g",
-__LINE__, 4.711821455782105e-11, "+4.71182e-11", "%+1g",
-__LINE__, 4.712413965116830e-01, "4.712414E-01", "%E",
-__LINE__, 4.719504715401049e-08, "0.000000", "%f",
-__LINE__, 4.719767896031655e+27, "4.71977e+27", "%#g",
-__LINE__, 4.722493017411588e-05, "0.000047", "%4f",
-__LINE__, 4.729482386761477e+08, "4.72948e+08", "%1g",
-__LINE__, 4.730102169800602e-06, "0.000005", "%f",
-__LINE__, 4.743951614209393e+24, "4.743952E+24", "%#E",
-__LINE__, 4.746077075605921e-16, "4.746E-16", "%.3E",
-__LINE__, 4.747802537919248e+24, "4747802537919247889419694", "%4.f",
-__LINE__, 4.754727690703025e-26, "0", "%0.f",
-__LINE__, 4.756952432926979e-29, " 0.", "%#3.f",
-__LINE__, 4.758335147956709e+03, "4758.335148", "%f",
-__LINE__, 4.760141880810268e-25, "4.760142e-25", "%e",
-__LINE__, 4.767079423650815e-07, "5.E-07", "%#0.G",
-__LINE__, 4.785662728343338e-28, "4.78566e-28", "%g",
-__LINE__, 4.787146245774150e-13, "+4.78715E-13", "%+G",
-__LINE__, 4.787415449888824e-17, "4.78742e-17", "%3g",
-__LINE__, 4.794589807429657e-05, "4.79459E-05", "%6G",
-__LINE__, 4.794948299666205e+08, "4.79495e+08", "%g",
-__LINE__, 4.802292865915992e-04, "4.802293e-04", "%e",
-__LINE__, 4.802513688198601e+07, "+4.8e+07", "%+2.3g",
-__LINE__, 4.810456746192536e+06, "5E+06", "%0.0G",
-__LINE__, 4.820631660081696e+20, "+4.82063E+20", "%+G",
-__LINE__, 4.827865857270075e-20, "4.82787e-20", "%g",
-__LINE__, 4.835054268490970e+21, "4835054268490970308391.752042", "%#f",
-__LINE__, 4.838136770808465e-18, "4.83814E-18", "%G",
-__LINE__, 4.839342397882353e-26, "4.839342E-26", "%E",
-__LINE__, 4.845130210072029e-16, "0", "%1.f",
-__LINE__, 4.845161043167169e-12, "+4.845e-12", "%+.4g",
-__LINE__, 4.857425142494964e+01, "48.574251", "%f",
-__LINE__, 4.858118337285513e-10, "+4.8581e-10", "%+.5g",
-__LINE__, 4.867478343525339e-15, "+4.867478E-15", "%+E",
-__LINE__, 4.886137001331278e-11, "0.000000", "%f",
-__LINE__, 4.886835850687998e-20, " 0", "%6.0f",
-__LINE__, 4.886880737482383e+26, "488688073748238327453918827.814050", "%4f",
-__LINE__, 4.888812049144075e-22, "4.888812E-22", "%E",
-__LINE__, 4.895869618002905e+02, "+489.587", "%+.7g",
-__LINE__, 4.902046593298549e+09, " 5e+09", "%7.g",
-__LINE__, 4.907918627564751e-05, "4.91e-05", "%.3g",
-__LINE__, 4.916048355579009e+19, "49160483555790088772", "%2.f",
-__LINE__, 4.917197806128638e+14, "+5e+14", "%+5.g",
-__LINE__, 4.918303274189911e+13, "4.918303e+13", "%e",
-__LINE__, 4.922687970321108e+26, "492268797032110771993984599.2485", "%0.4f",
-__LINE__, 4.929263362431195e+14, "4.92926e+14", "%g",
-__LINE__, 4.933385398543267e-17, "0.000000", "%#f",
-__LINE__, 4.942367126455025e+00, " +5", "%+6.f",
-__LINE__, 4.947687486717652e-04, "0.000495", "%.6f",
-__LINE__, 4.960855200003128e-08, "+4.960855e-08", "%+e",
-__LINE__, 4.968485435774085e-21, "0.0000", "%#2.4f",
-__LINE__, 4.972088381506133e+01, "49.7", "%.1f",
-__LINE__, 4.977561524480392e-15, "4.977562E-15", "%7E",
-__LINE__, 4.984592111249502e-13, "5.0e-13", "%.1e",
-__LINE__, 4.997502335602838e-14, "4.998e-14", "%6.4g",
-__LINE__, 5.001731554335935e-09, "5.00173e-09", "%g",
-__LINE__, 5.006231697107042e-17, "5.0062e-17", "%1.5g",
-__LINE__, 5.008035801093423e+24, "5.008036E+24", "%#E",
-__LINE__, 5.008756965733827e-28, "5.009E-28", "%.4G",
-__LINE__, 5.009774027622812e+20, "+5.00977E+20", "%+G",
-__LINE__, 5.010576312346293e+29, "5.01058E+29", "%G",
-__LINE__, 5.012335250996786e+29, "5.012335e+29", "%.7g",
-__LINE__, 5.012404365186907e+20, "5E+20", "%3.2G",
-__LINE__, 5.024670103250229e-01, "+5.024670E-01", "%+E",
-__LINE__, 5.025765369164560e+03, "5025.77", "%g",
-__LINE__, 5.027173841003918e+11, "+5.02717E+11", "%+G",
-__LINE__, 5.032093817639893e-26, "5e-26", "%3.e",
-__LINE__, 5.039636818525848e-02, "0.050396", "%#f",
-__LINE__, 5.040626671307691e+23, "5.040627E+23", "%E",
-__LINE__, 5.040788233368296e-11, "+5.04079e-11", "%+g",
-__LINE__, 5.040903321336150e-28, "5.0409E-28", "%G",
-__LINE__, 5.042078512958994e+12, "5.04208E+12", "%G",
-__LINE__, 5.045957900223303e+15, "5045957900223303", "%0.f",
-__LINE__, 5.048298764352134e-14, "5.048299e-14", "%1e",
-__LINE__, 5.048827326763192e+28, "50488273267631917917697137454.524636", "%f",
-__LINE__, 5.049714558347361e-23, "5e-23", "%5.0g",
-__LINE__, 5.051509904923853e+16, "50515099049238534", "%5.f",
-__LINE__, 5.052789863743305e-10, "5.05279E-10", "%6G",
-__LINE__, 5.057429728861999e-29, "0.000", "%#1.3f",
-__LINE__, 5.075313093968501e-13, "+5.07531e-13", "%+g",
-__LINE__, 5.075874503501582e+29, "5e+29", "%2.e",
-__LINE__, 5.079468079020803e+01, "50.795", "%.5G",
-__LINE__, 5.086214826494080e-28, " 0.0", "%4.1f",
-__LINE__, 5.096054881114421e+13, "5.096e+13", "%.4g",
-__LINE__, 5.099045274853458e-23, "5.09905E-23", "%0G",
-__LINE__, 5.100248195124433e+00, "5.100248", "%f",
-__LINE__, 5.101016114276598e-20, "5e-20", "%4.1g",
-__LINE__, 5.103213528670269e+07, "51032135.286703", "%6f",
-__LINE__, 5.108373625126768e+08, "+510837362.512677", "%+f",
-__LINE__, 5.113097157183416e+07, "5.1131E+07", "%#.4E",
-__LINE__, 5.114452611789777e+08, "+5.11445E+08", "%+G",
-__LINE__, 5.117099184715288e-16, "5.1171E-16", "%G",
-__LINE__, 5.119910534665511e-13, "+5.11991E-13", "%+G",
-__LINE__, 5.121320931953720e+23, "+5.121321e+23", "%+#e",
-__LINE__, 5.121900318443998e+06, "5.121900e+06", "%e",
-__LINE__, 5.135698679084286e+00, "5.1357", "%2g",
-__LINE__, 5.146355903104154e-10, "+5.14636E-10", "%+.6G",
-__LINE__, 5.148754210958986e-24, "+5.148754e-24", "%+e",
-__LINE__, 5.156238368448428e+26, "5e+26", "%5.g",
-__LINE__, 5.159924520667922e-19, "+5E-19", "%+0.1G",
-__LINE__, 5.159938266135425e-27, "0.000000", "%f",
-__LINE__, 5.165915205175676e-01, "5.165915e-01", "%e",
-__LINE__, 5.190205499401547e-11, "5e-11", "%2.1g",
-__LINE__, 5.193260005542003e+26, "5.19326e+26", "%#g",
-__LINE__, 5.194732077318269e+08, "519473207.731827", "%f",
-__LINE__, 5.196394616633798e-19, "0", "%.0f",
-__LINE__, 5.206753628035638e+19, "5.20675e+19", "%6.6g",
-__LINE__, 5.207364136540851e-23, " 0.000", "%6.3f",
-__LINE__, 5.210672737132108e-09, "5.21067E-09", "%G",
-__LINE__, 5.211423933057123e-20, "+5.21142E-20", "%+G",
-__LINE__, 5.219749528363367e-27, "5.219750e-27", "%e",
-__LINE__, 5.228031587478653e-06, "+5.2E-06", "%+3.1E",
-__LINE__, 5.229303095005359e-25, "+0.000000", "%+#f",
-__LINE__, 5.234703511938320e-06, " 0", "%7.f",
-__LINE__, 5.235655046937822e-20, "5.235655E-20", "%.6E",
-__LINE__, 5.237924986002288e-01, "+0.52379", "%+.5f",
-__LINE__, 5.249148093603826e+20, "5.24915E+20", "%0G",
-__LINE__, 5.262680920244596e+16, "5.26268E+16", "%G",
-__LINE__, 5.267944704715845e-06, "5.e-06", "%#3.g",
-__LINE__, 5.268543533730505e-08, "5.26854E-08", "%G",
-__LINE__, 5.275727269515247e-02, "0.0527573", "%.6g",
-__LINE__, 5.279215316873723e+24, "5279215316873722585455652.733799", "%f",
-__LINE__, 5.284326985680811e+16, "52843269856808108.286828", "%6f",
-__LINE__, 5.286192957344040e-10, "5.3E-10", "%.1E",
-__LINE__, 5.289451976001091e-23, "5.28945E-23", "%G",
-__LINE__, 5.289512908209300e+09, "+5.289513e+09", "%+e",
-__LINE__, 5.295696957972123e+11, "5.296E+11", "%#.3E",
-__LINE__, 5.303584684011050e+16, "53035846840110503.208621", "%f",
-__LINE__, 5.310315581980172e+23, "531031558198017172855998", "%4.f",
-__LINE__, 5.317492728410062e-14, "5.31749e-14", "%7g",
-__LINE__, 5.324506949499409e+18, "5.3245E+18", "%.5G",
-__LINE__, 5.329238068668336e-20, "5e-20", "%4.g",
-__LINE__, 5.336050125161774e+14, "5.33605e+14", "%g",
-__LINE__, 5.349921315003169e-17, "5.34992E-17", "%.6G",
-__LINE__, 5.355648481782587e-20, "5.355648e-20", "%e",
-__LINE__, 5.358945557589489e-26, "+5e-26", "%+0.g",
-__LINE__, 5.359638846465574e+21, "5.359639E+21", "%E",
-__LINE__, 5.377048469393900e+14, "5.377E+14", "%.5G",
-__LINE__, 5.387471194156434e+23, "5.387471E+23", "%.7G",
-__LINE__, 5.401622578962497e-03, "+0.0054", "%+5.2g",
-__LINE__, 5.406882732497444e-16, "5.406883E-16", "%E",
-__LINE__, 5.421474560523198e-11, "+5.42147e-11", "%+g",
-__LINE__, 5.440249323479418e-26, "5.44025E-26", "%7G",
-__LINE__, 5.440922682921101e-05, "5e-05", "%.1g",
-__LINE__, 5.444400103673185e-01, "0.54444", "%G",
-__LINE__, 5.449339470916152e+09, "5449339470.9162", "%.4f",
-__LINE__, 5.451583259558706e-15, "5.e-15", "%#4.e",
-__LINE__, 5.460153018660573e+26, "+546015301866057267687892817.775719", "%+f",
-__LINE__, 5.477591210511918e+08, "+5.47759E+08", "%+0.5E",
-__LINE__, 5.481665401407188e-02, "5.481665e-02", "%e",
-__LINE__, 5.482670784411319e-16, "5E-16", "%4.G",
-__LINE__, 5.487494580636099e+12, "5.48749e+12", "%g",
-__LINE__, 5.508630369473937e-10, "5.508630e-10", "%e",
-__LINE__, 5.528898001438273e+20, "6e+20", "%4.g",
-__LINE__, 5.530331734443152e-24, " 6e-24", "%6.g",
-__LINE__, 5.531704398969656e-24, "0.000000", "%f",
-__LINE__, 5.539906569043238e+05, "+553990.656904", "%+f",
-__LINE__, 5.554571854756323e-08, "+0.00000", "%+4.5f",
-__LINE__, 5.555155069925145e-28, "5.55516e-28", "%g",
-__LINE__, 5.555302705075539e-08, "+5.5553e-08", "%+g",
-__LINE__, 5.563805076159055e-05, "5.563805e-05", "%e",
-__LINE__, 5.565063508995002e+07, "5.565E+07", "%.3E",
-__LINE__, 5.566281664807526e-08, "5.56628E-08", "%G",
-__LINE__, 5.575245679736338e-08, "5.575246e-08", "%e",
-__LINE__, 5.578254777281501e-21, "0.", "%#.0f",
-__LINE__, 5.582389275770848e-01, " 0.6", "%5.G",
-__LINE__, 5.592215029176133e-04, "0.00056", "%.2g",
-__LINE__, 5.593536789867047e-25, "5.59354e-25", "%g",
-__LINE__, 5.605652054074862e-03, " 0.006", "%8.G",
-__LINE__, 5.606982382643258e+20, "+5.60698E+20", "%+G",
-__LINE__, 5.614646821116853e-18, "5.6E-18", "%.2G",
-__LINE__, 5.625586848606565e-11, "+5.62559E-11", "%+G",
-__LINE__, 5.626300428046732e+26, " 6e+26", "%7.g",
-__LINE__, 5.638236626881086e-17, " 6E-17", "%6.G",
-__LINE__, 5.645744817075691e+04, "5.645745E+04", "%E",
-__LINE__, 5.651410004691736e+06, "6.E+06", "%#3.E",
-__LINE__, 5.659582345929256e-11, "+0.000000", "%+f",
-__LINE__, 5.670968861413510e+16, "+5.67097E+16", "%+G",
-__LINE__, 5.672476851235796e+01, "+56.724769", "%+0f",
-__LINE__, 5.674563779921248e+28, " 6E+28", "%6.0G",
-__LINE__, 5.675558529939025e+19, "5.67556e+19", "%3g",
-__LINE__, 5.676326888314589e-08, " 6e-08", "%7.g",
-__LINE__, 5.677928507840897e-30, "5.67793e-30", "%0g",
-__LINE__, 5.686622552402630e-15, "5.69E-15", "%1.3G",
-__LINE__, 5.710441686922142e-14, "5.710442E-14", "%E",
-__LINE__, 5.713234603280163e-21, "0.00000", "%0.5f",
-__LINE__, 5.714968959046963e+12, "5.71497e+12", "%g",
-__LINE__, 5.722025141555638e-23, "5.72e-23", "%.2e",
-__LINE__, 5.725398571007033e-09, "5.7254E-09", "%.6G",
-__LINE__, 5.751604813862738e+18, "6E+18", "%.1G",
-__LINE__, 5.761025444751985e+20, "5.76103e+20", "%g",
-__LINE__, 5.762315767948593e+15, "5.76232e+15", "%4g",
-__LINE__, 5.764528858586032e-15, "5.764529E-15", "%6.7G",
-__LINE__, 5.766408541535810e-07, " 6E-07", "%6.1G",
-__LINE__, 5.771831571087174e-01, "0.577183", "%f",
-__LINE__, 5.790102497364865e-15, "+5.790102e-15", "%+e",
-__LINE__, 5.790222335547785e-08, "5.79022e-08", "%0.6g",
-__LINE__, 5.794082127091130e+21, "5794082127091130018925.468903", "%f",
-__LINE__, 5.804568463644165e+28, "5.80457e+28", "%g",
-__LINE__, 5.827356651901066e+20, "582735665190106555400.006982", "%f",
-__LINE__, 5.837553387436408e+18, "5.837553E+18", "%3E",
-__LINE__, 5.844458110907209e+22, "5.84446e+22", "%g",
-__LINE__, 5.851672125746866e-19, "5.85167e-19", "%g",
-__LINE__, 5.868843476784172e-12, "5.868843e-12", "%1.7g",
-__LINE__, 5.870854146748864e-04, "0.000587", "%2.3g",
-__LINE__, 5.877787821470433e+01, "+58.77788", "%+#3.5f",
-__LINE__, 5.881333514866498e+04, "5.881334E+04", "%E",
-__LINE__, 5.908427816128965e+28, "+5.908428E+28", "%+E",
-__LINE__, 5.918139800007388e+07, "59181398.000074", "%f",
-__LINE__, 5.925587467475260e+21, "5925587467475259551008.548442", "%f",
-__LINE__, 5.930403502679683e-22, "5.9304E-22", "%.6G",
-__LINE__, 5.961572644847521e+02, "+596.157", "%+G",
-__LINE__, 5.968917715225198e-21, "5.96892e-21", "%4g",
-__LINE__, 5.982184454670110e-08, "0", "%0.f",
-__LINE__, 5.988414319040855e+09, "6E+09", "%0.G",
-__LINE__, 5.996263783103995e-10, "5.996264e-10", "%e",
-__LINE__, 6.004634162276014e-18, "6.00463e-18", "%g",
-__LINE__, 6.018734975519166e-08, "6.01873E-08", "%G",
-__LINE__, 6.029071822986717e-14, "0.0000000", "%.7f",
-__LINE__, 6.030392278117406e+23, "6.030392e+23", "%e",
-__LINE__, 6.034553399237175e-27, "+6.03455e-27", "%+g",
-__LINE__, 6.034938873443862e+24, "6034938873443861595546877.651941", "%f",
-__LINE__, 6.038929148003457e-16, "6.03893e-16", "%g",
-__LINE__, 6.039149626573702e-13, "6.0391E-13", "%3.5G",
-__LINE__, 6.041247664739301e+29, "6.041248E+29", "%3E",
-__LINE__, 6.044220746789781e+20, "+6.04422e+20", "%+g",
-__LINE__, 6.045775647107433e+19, "6E+19", "%2.G",
-__LINE__, 6.051917010461611e-05, "6.05192E-05", "%G",
-__LINE__, 6.059773181566425e+17, "+605977318156642486", "%+5.f",
-__LINE__, 6.082239575475813e+01, "+6E+01", "%+.1G",
-__LINE__, 6.093984174629151e+18, "6.093984e+18", "%e",
-__LINE__, 6.102368380479137e+22, "6.1E+22", "%.2G",
-__LINE__, 6.103097446204007e+25, "61030974462040070704915706.301108", "%#0f",
-__LINE__, 6.105244994410556e-24, "0.0000000", "%2.7f",
-__LINE__, 6.110828906801633e-14, "+6.110829e-14", "%+3e",
-__LINE__, 6.124439072468681e-30, "6.12444e-30", "%g",
-__LINE__, 6.127714703273447e-15, "0", "%0.f",
-__LINE__, 6.128539582408870e-15, "6.12854e-15", "%g",
-__LINE__, 6.145470264744349e+24, "6145470264744348654062378.045637", "%f",
-__LINE__, 6.159177701667455e+26, "615917770166745537352426254.074089", "%#f",
-__LINE__, 6.159348213337442e+17, "6.15935e+17", "%g",
-__LINE__, 6.161953891020492e-21, "0.000000", "%f",
-__LINE__, 6.169474192777305e+29, "+6.169E+29", "%+.4G",
-__LINE__, 6.198519761010651e-15, "+0", "%+1.f",
-__LINE__, 6.201381824304919e-27, " 0", "%5.f",
-__LINE__, 6.204387065736372e-18, "6.204387E-18", "%7E",
-__LINE__, 6.209270088144063e-24, "0.000000", "%f",
-__LINE__, 6.209871738353546e-20, "6.20987E-20", "%G",
-__LINE__, 6.222733191871026e+14, "+6.22273e+14", "%+g",
-__LINE__, 6.234670085354310e+04, "+62346.700854", "%+f",
-__LINE__, 6.258389346602224e-09, "6E-09", "%.0G",
-__LINE__, 6.263326582587503e+12, "6263326582588.", "%#5.f",
-__LINE__, 6.272768026763922e+03, "+6272.77", "%+g",
-__LINE__, 6.287747868625765e+00, "6E+00", "%.0E",
-__LINE__, 6.297724027388795e-17, "+6E-17", "%+3.G",
-__LINE__, 6.309940679156400e+27, "6.30994e+27", "%6.5e",
-__LINE__, 6.312960327030170e+06, "+6.312960E+06", "%+E",
-__LINE__, 6.317658179632976e+02, "+631.766", "%+g",
-__LINE__, 6.321255960699571e-27, "0.000000", "%f",
-__LINE__, 6.323069932833900e+03, "6323", "%.4G",
-__LINE__, 6.337027835933034e+21, "6.33703e+21", "%#g",
-__LINE__, 6.343583177899838e-03, "0.00634358", "%7G",
-__LINE__, 6.347464241733904e-03, "6.e-03", "%#0.e",
-__LINE__, 6.352038720353924e+07, "63520387.203539", "%f",
-__LINE__, 6.355292378565109e+23, "+635529237856510942350496.407016", "%+f",
-__LINE__, 6.377901944439164e-29, "0.000", "%2.3f",
-__LINE__, 6.378660255554053e-04, "6.37866E-04", "%.5E",
-__LINE__, 6.382838195255167e-18, "0.000000", "%f",
-__LINE__, 6.391046303581911e+22, "6E+22", "%.0G",
-__LINE__, 6.404812348309621e+22, "6.404812E+22", "%.7G",
-__LINE__, 6.406154091357119e+16, "6.40615E+16", "%G",
-__LINE__, 6.419414726557980e+21, "+6.41941e+21", "%+g",
-__LINE__, 6.432166563008504e+10, " +6e+10", "%+7.g",
-__LINE__, 6.438463704193190e+19, "6.438464e+19", "%e",
-__LINE__, 6.445270237908565e+15, "+6.445270E+15", "%+E",
-__LINE__, 6.445536770502964e+09, "6.446e+09", "%.3e",
-__LINE__, 6.446614224811444e+28, "64466142248114444157636171439.662576", "%f",
-__LINE__, 6.457046289718297e+18, "6457046289718297416.015957", "%4f",
-__LINE__, 6.457682856890173e+01, "6.457683E+01", "%2E",
-__LINE__, 6.471026352792729e-16, "+6.47103e-16", "%+g",
-__LINE__, 6.474527749567342e+19, "6E+19", "%.1G",
-__LINE__, 6.481178401781131e-24, "+6.48E-24", "%+6.3G",
-__LINE__, 6.490736647261461e-15, "+6.49074e-15", "%+g",
-__LINE__, 6.493196535069719e+23, "+6.4932E+23", "%+G",
-__LINE__, 6.500296992935538e-20, "+0.0", "%+.1f",
-__LINE__, 6.502867735895890e-19, "+0.000000", "%+6f",
-__LINE__, 6.506627529164683e+14, "650662752916468", "%5.f",
-__LINE__, 6.511909298966434e-15, "+6.51191E-15", "%+G",
-__LINE__, 6.514463062693312e+01, "65.1446", "%G",
-__LINE__, 6.520721469484543e+16, "6.52072E+16", "%G",
-__LINE__, 6.528064508731680e-05, "6.528065E-05", "%7E",
-__LINE__, 6.529007214194039e-24, "0.000000", "%f",
-__LINE__, 6.537822760557410e-23, "0.000000", "%f",
-__LINE__, 6.552222096390805e+29, "+6.55222E+29", "%+G",
-__LINE__, 6.554569862717104e+12, "6.55457E+12", "%G",
-__LINE__, 6.563440840359989e-30, "7E-30", "%4.G",
-__LINE__, 6.586246985535526e+17, "6.58625E+17", "%#4G",
-__LINE__, 6.593339522442827e+16, "6.6E+16", "%#4.1E",
-__LINE__, 6.611179030024350e+02, "7E+02", "%4.E",
-__LINE__, 6.617541638586767e-10, "6.617542E-10", "%E",
-__LINE__, 6.619147920886991e-28, "7e-28", "%.1g",
-__LINE__, 6.622304444772819e-21, "6.62230E-21", "%#4G",
-__LINE__, 6.634766655157910e+12, "6634766655158", "%2.f",
-__LINE__, 6.635639771921218e+25, "+6.63564E+25", "%+G",
-__LINE__, 6.644575305929087e+17, "+6.64458e+17", "%+g",
-__LINE__, 6.648697591328432e+04, "6.648698E+04", "%3E",
-__LINE__, 6.665426012448100e+09, "6.66543E+09", "%G",
-__LINE__, 6.675222780441723e-23, "6.67522e-23", "%1g",
-__LINE__, 6.689765053880623e+00, "6.6898", "%.5g",
-__LINE__, 6.693874943680238e+25, "7.e+25", "%#1.g",
-__LINE__, 6.695033453546435e+19, "6.695033E+19", "%E",
-__LINE__, 6.720131534244976e+03, "+6720.132", "%+.3f",
-__LINE__, 6.725287004784564e+19, "+6.72529e+19", "%+g",
-__LINE__, 6.743599626906313e-18, "0.0000000", "%7.7f",
-__LINE__, 6.755534260704152e+29, "7.e+29", "%#5.e",
-__LINE__, 6.761855244766418e-18, "6.8E-18", "%.2G",
-__LINE__, 6.764974143681080e-02, "6.765E-02", "%2.3E",
-__LINE__, 6.766924477711975e-17, "0.000000", "%4f",
-__LINE__, 6.772195434106330e-19, "6.7722E-19", "%G",
-__LINE__, 6.779433073319225e-23, "0.00", "%.2f",
-__LINE__, 6.790317710068964e+05, "6.8e+05", "%.1e",
-__LINE__, 6.791378160292960e+02, "679.137816", "%f",
-__LINE__, 6.798381262104190e-27, "0.000000", "%f",
-__LINE__, 6.804165939424860e-14, "7e-14", "%4.g",
-__LINE__, 6.810668670623699e+11, "681066867062.369852", "%f",
-__LINE__, 6.838942637635821e-17, "+6.84e-17", "%+.2e",
-__LINE__, 6.868523988329111e-09, "+6.868524e-09", "%+e",
-__LINE__, 6.873228061403223e-15, "6.873228E-15", "%3E",
-__LINE__, 6.879370500093334e-12, "+0.000000", "%+f",
-__LINE__, 6.891525498686674e-10, "7e-10", "%0.g",
-__LINE__, 6.923027319286220e+21, "7.e+21", "%#1.g",
-__LINE__, 6.923565533024560e-11, "+6.92357e-11", "%+g",
-__LINE__, 6.931415640770737e-24, "+6.93142e-24", "%+g",
-__LINE__, 6.936582619246057e+09, "6.936583e+09", "%7e",
-__LINE__, 6.938661496670582e+05, "693866.1496671", "%2.7f",
-__LINE__, 6.946115378286550e-25, "0.000000", "%f",
-__LINE__, 6.955823211921219e-09, "6.95582e-09", "%g",
-__LINE__, 6.962365243425770e+29, "696236524342577034474288666388.019919", "%7f",
-__LINE__, 6.970432274812882e+05, "+7e+05", "%+1.0e",
-__LINE__, 6.975784942897122e-13, "6.975785e-13", "%e",
-__LINE__, 6.976786489904214e-07, "6.97679E-07", "%3G",
-__LINE__, 6.985245976357042e-05, "0.00", "%.2f",
-__LINE__, 6.993402879410720e-21, "6.9934e-21", "%g",
-__LINE__, 7.012183985341519e+28, "+70121839853415188770213717362", "%+2.f",
-__LINE__, 7.028670648856025e-15, "7.028671e-15", "%.7g",
-__LINE__, 7.034042985683665e-03, " 0", "%2.f",
-__LINE__, 7.044054273278726e+18, "7.044e+18", "%7.4g",
-__LINE__, 7.049706744250734e-06, "7E-06", "%0.E",
-__LINE__, 7.061982657056197e+13, "+7.061983e+13", "%+e",
-__LINE__, 7.066873668945899e+21, "7.06687E+21", "%G",
-__LINE__, 7.087941418633258e+26, "7.08794E+26", "%G",
-__LINE__, 7.108268134631547e+22, "7.108268E+22", "%E",
-__LINE__, 7.112095848565475e-19, "7.1121e-19", "%g",
-__LINE__, 7.116326241291862e+16, "7.116326e+16", "%e",
-__LINE__, 7.118854843597607e-22, "0.000000", "%f",
-__LINE__, 7.121423043456375e-27, "0.000000", "%f",
-__LINE__, 7.131415427096460e-03, "0.007131", "%3f",
-__LINE__, 7.132023279679892e+22, "7.e+22", "%#3.e",
-__LINE__, 7.146250280189992e-18, "0.000000", "%f",
-__LINE__, 7.150059058390724e+03, "7150.06", "%g",
-__LINE__, 7.161081578177381e-02, "+0.0716108", "%+G",
-__LINE__, 7.164935125149336e-27, "7.2E-27", "%#6.2G",
-__LINE__, 7.173125717489549e-10, "7.173126e-10", "%e",
-__LINE__, 7.174199549624193e+00, "7.1741995", "%.7f",
-__LINE__, 7.192493588077649e+27, "7.19249e+27", "%g",
-__LINE__, 7.215209568601445e-06, "7.215210e-06", "%e",
-__LINE__, 7.238322284100497e+03, "7238.3", "%.1f",
-__LINE__, 7.239203871123613e+06, "7239204", "%4.f",
-__LINE__, 7.245809072577019e-09, "+7.245809E-09", "%+E",
-__LINE__, 7.256275686433336e+03, "7.256276e+03", "%e",
-__LINE__, 7.265774291605193e+27, "+7.26577E+27", "%+G",
-__LINE__, 7.287968172227119e-21, "+7.287968e-21", "%+e",
-__LINE__, 7.306020169678527e+12, "7E+12", "%2.E",
-__LINE__, 7.315587463572568e-04, "0.", "%#.0f",
-__LINE__, 7.324627764547963e+09, "7.324628E+09", "%#E",
-__LINE__, 7.331904966719081e-06, "+7.3319E-06", "%+G",
-__LINE__, 7.334448152798243e-02, "0.07", "%0.g",
-__LINE__, 7.334487195961240e-01, "+0.733449", "%+#g",
-__LINE__, 7.381283575515707e+13, "7.381284E+13", "%E",
-__LINE__, 7.394854567245476e-11, "0.000000", "%7f",
-__LINE__, 7.401950211415377e-08, " 7e-08", "%6.e",
-__LINE__, 7.409023867864680e+03, "7409.023868", "%#3f",
-__LINE__, 7.411912956257733e-20, "7e-20", "%0.g",
-__LINE__, 7.445275019272160e+11, "744527501927.2159511", "%.7f",
-__LINE__, 7.450279765616891e-16, "7.45028e-16", "%.6g",
-__LINE__, 7.467047411334495e+14, "7.46705E+14", "%G",
-__LINE__, 7.485628870972725e+28, "7E+28", "%.0G",
-__LINE__, 7.495391782588563e+11, "749539178258.856253", "%f",
-__LINE__, 7.495824101611911e+06, "7.49582e+06", "%.6g",
-__LINE__, 7.499759867592402e+20, "+749975986759240154100.3", "%+.1f",
-__LINE__, 7.508983397140368e+04, "75089.8", "%g",
-__LINE__, 7.512585199581016e-27, "7.512585E-27", "%.6E",
-__LINE__, 7.516831372212545e-29, "+7.516831e-29", "%+e",
-__LINE__, 7.525789465978582e+00, "7.52579", "%G",
-__LINE__, 7.528655653725963e+06, "7.5287e+06", "%3.4e",
-__LINE__, 7.533217421035612e+28, "75332174210356122046050586504.861712", "%f",
-__LINE__, 7.534147071756384e+03, "7534.15", "%g",
-__LINE__, 7.542648637430919e-25, "+0.000000", "%+#f",
-__LINE__, 7.554380140947798e-15, " 8e-15", "%7.g",
-__LINE__, 7.557366996007743e+25, " 8E+25", "%7.G",
-__LINE__, 7.579228950138068e+08, "8e+08", "%3.e",
-__LINE__, 7.579773904052487e-13, "0.000000", "%3f",
-__LINE__, 7.580377544554059e+27, "7.58038e+27", "%#g",
-__LINE__, 7.589615147875915e-15, "7.59E-15", "%.3G",
-__LINE__, 7.593317194045158e-12, "+0.", "%+#1.f",
-__LINE__, 7.605535657484387e-07, "7.60554E-07", "%G",
-__LINE__, 7.609171121278006e-08, " 0", "%5.f",
-__LINE__, 7.612033900317304e-14, "7.61203e-14", "%g",
-__LINE__, 7.628040858080326e+23, "+7.62804e+23", "%+g",
-__LINE__, 7.632109382948695e-01, "0.763211", "%#f",
-__LINE__, 7.633415922627254e+28, "76334159226272539910951309138.908982", "%#f",
-__LINE__, 7.636190400774419e+22, "+7.636190E+22", "%+E",
-__LINE__, 7.636228368661314e-23, "0.000000", "%f",
-__LINE__, 7.653292362739654e-17, "7.65329E-17", "%#G",
-__LINE__, 7.664044705231460e+03, "7.664045E+03", "%5E",
-__LINE__, 7.664257283149626e-05, "7.66426E-05", "%0G",
-__LINE__, 7.668996632821614e-19, " 0.0", "%4.1f",
-__LINE__, 7.674502669497263e-24, "7.6745e-24", "%g",
-__LINE__, 7.681870119755193e+12, "+7.68187e+12", "%+#g",
-__LINE__, 7.693453198401315e+02, "769.3453198", "%5.7f",
-__LINE__, 7.705080073293603e-29, "7.705080E-29", "%1E",
-__LINE__, 7.707244083934683e-07, "7.71E-07", "%2.3G",
-__LINE__, 7.749445584970652e-17, "7.75E-17", "%6.3G",
-__LINE__, 7.755369447889403e+09, "7.8e+09", "%#4.2g",
-__LINE__, 7.760378169707072e-06, "7.76038e-06", "%g",
-__LINE__, 7.763518882114968e-10, "0.000000", "%f",
-__LINE__, 7.764720069569677e-18, "0.000000", "%0f",
-__LINE__, 7.768821339438552e-03, "0.00776882", "%g",
-__LINE__, 7.774767835990679e-29, "7.774768E-29", "%7E",
-__LINE__, 7.805567188246987e-04, "0.000780557", "%2G",
-__LINE__, 7.825157442935941e-26, "0.000000", "%f",
-__LINE__, 7.833373563161910e+29, "+783337356316190991378789476584.643126", "%+f",
-__LINE__, 7.875872661746674e-16, "7.875873E-16", "%E",
-__LINE__, 7.880664458920439e-28, "7.881E-28", "%#0.3E",
-__LINE__, 7.893084198630288e+18, "7893084198630288206", "%1.f",
-__LINE__, 7.912222737877417e+04, "79122.2", "%G",
-__LINE__, 7.913004582748724e-26, "0.000000", "%f",
-__LINE__, 7.913749944463836e+17, "791374994446383617.230367", "%f",
-__LINE__, 7.923881665760883e-24, "0.000000", "%f",
-__LINE__, 7.926699779993694e-03, "0.007927", "%5.6f",
-__LINE__, 7.941991860623354e-20, "7.941992e-20", "%e",
-__LINE__, 7.942700358097138e+17, "794270035809713803.587329", "%2f",
-__LINE__, 7.945451569935757e-16, "7.94545E-16", "%#4.6G",
-__LINE__, 7.948277588625241e-04, "0", "%.0f",
-__LINE__, 7.952265062569124e+21, "+7.95227e+21", "%+#g",
-__LINE__, 7.959953534668040e+11, "8e+11", "%2.e",
-__LINE__, 7.962059154424500e-22, "7.96206E-22", "%G",
-__LINE__, 7.962856142535673e-26, "7.9629E-26", "%#.5G",
-__LINE__, 7.966528574505771e+12, "7.96653e+12", "%g",
-__LINE__, 8.006496880305429e-21, "8.0065E-21", "%G",
-__LINE__, 8.023374861440542e+06, "+8023375", "%+6.f",
-__LINE__, 8.041139717082990e-20, "8.04114e-20", "%g",
-__LINE__, 8.044201752824126e+15, "8.04420E+15", "%.5E",
-__LINE__, 8.044262927409321e-10, "+8E-10", "%+2.2G",
-__LINE__, 8.058285708061202e+02, "+8.058286e+02", "%+e",
-__LINE__, 8.104422320765144e+10, "8.10442e+10", "%#4g",
-__LINE__, 8.104572628022330e-11, "0.000000", "%f",
-__LINE__, 8.112156369917432e+15, "+8.11216E+15", "%+G",
-__LINE__, 8.114566569709531e-18, "8.11457E-18", "%G",
-__LINE__, 8.114795069552519e+13, "8.114795E+13", "%E",
-__LINE__, 8.121382719830660e+03, "8121.382720", "%f",
-__LINE__, 8.125179335533733e-12, "+8.125179e-12", "%+e",
-__LINE__, 8.126383949107055e+19, "81263839491070548604.056967", "%f",
-__LINE__, 8.129961701307842e-04, "+0.00081", "%+5.2g",
-__LINE__, 8.143780077390936e+15, "8.14378E+15", "%G",
-__LINE__, 8.149891507777399e+16, "+8E+16", "%+1.G",
-__LINE__, 8.167395708830107e+03, "8167", "%3.f",
-__LINE__, 8.167703619221975e+01, "81.677", "%G",
-__LINE__, 8.178463030771759e+06, "+8.17846E+06", "%+G",
-__LINE__, 8.188188531273697e+12, "8.18819E+12", "%G",
-__LINE__, 8.189094866416537e+11, "+8E+11", "%+.1G",
-__LINE__, 8.205086844365809e-18, "+8.205087E-18", "%+#E",
-__LINE__, 8.205762333408320e-26, "0.000000", "%f",
-__LINE__, 8.212370598174696e-10, "8.2124E-10", "%.5G",
-__LINE__, 8.228054316085489e-14, "0.000000", "%3f",
-__LINE__, 8.244313484402404e-16, "8.24431e-16", "%g",
-__LINE__, 8.244472235472472e+19, "8.24447E+19", "%G",
-__LINE__, 8.245421473302411e-09, "+8.2454e-09", "%+1.5g",
-__LINE__, 8.252286626634840e-22, "8E-22", "%3.G",
-__LINE__, 8.259969177912707e-19, "0.000000", "%f",
-__LINE__, 8.265769991725211e+18, "8.26577e+18", "%.5e",
-__LINE__, 8.293986939496488e+25, "8.3E+25", "%.1E",
-__LINE__, 8.310348813512608e-23, "+8.31035e-23", "%+g",
-__LINE__, 8.316951996533247e-20, "0.000000", "%f",
-__LINE__, 8.318818016883803e+05, " 8e+05", "%6.1g",
-__LINE__, 8.324896920131877e-13, "+8.324897e-13", "%+e",
-__LINE__, 8.325228630004624e-03, "0.0083252", "%5.7f",
-__LINE__, 8.332538660129034e+14, "8.3e+14", "%5.2g",
-__LINE__, 8.343325212751775e+07, "8.34333e+07", "%#4g",
-__LINE__, 8.363117398136236e+20, "+8.36e+20", "%+.3g",
-__LINE__, 8.364181324448165e+27, "8.36418e+27", "%#g",
-__LINE__, 8.372159259848738e+10, "8.37216e+10", "%4g",
-__LINE__, 8.379252006152759e-26, "8.37925e-26", "%g",
-__LINE__, 8.392670395720252e+09, "8392670395.720252", "%f",
-__LINE__, 8.423360059147756e+05, "+842336.", "%+#G",
-__LINE__, 8.425921213167943e+09, "8.425921e+09", "%1.7g",
-__LINE__, 8.431664412515776e-16, "8.43166E-16", "%#G",
-__LINE__, 8.448608859842500e+02, "844.861", "%1.3f",
-__LINE__, 8.456292247478771e-14, "8.45629E-14", "%G",
-__LINE__, 8.460077225296853e-04, "0.000846008", "%G",
-__LINE__, 8.478635925746218e-10, "0.000000", "%f",
-__LINE__, 8.492455774427448e+06, "8.49246e+06", "%g",
-__LINE__, 8.494450528380746e-07, "8.494451e-07", "%e",
-__LINE__, 8.516435842947605e-23, "+0.000000", "%+1f",
-__LINE__, 8.519057789029134e-18, "0.000000", "%0f",
-__LINE__, 8.522602111109066e+18, " 9.e+18", "%#7.g",
-__LINE__, 8.529176788022152e-24, "8.529E-24", "%0.4G",
-__LINE__, 8.534979605642793e-07, "0.000001", "%f",
-__LINE__, 8.546859563634342e-07, "8.546860E-07", "%E",
-__LINE__, 8.552370027054106e+12, "9e+12", "%.0g",
-__LINE__, 8.561781328234041e+10, "8.56178e+10", "%4g",
-__LINE__, 8.562688793145107e-20, "8.562689e-20", "%1.7g",
-__LINE__, 8.573130147270046e-07, " 9E-07", "%7.G",
-__LINE__, 8.584571984387802e-18, "8.5846e-18", "%.5g",
-__LINE__, 8.596407996491291e+11, "8.596408E+11", "%#E",
-__LINE__, 8.604843726850381e+10, " 9E+10", "%6.G",
-__LINE__, 8.626884271938994e-23, "8.62688e-23", "%g",
-__LINE__, 8.631140282429168e+24, "8631140282429168308908629.", "%#.0f",
-__LINE__, 8.635194331917948e-16, "8.63519E-16", "%G",
-__LINE__, 8.641417311588688e-24, "+0.000000", "%+f",
-__LINE__, 8.649120264278466e+26, "8.65E+26", "%1.3G",
-__LINE__, 8.649745523383894e+06, "8.649746e+06", "%e",
-__LINE__, 8.654720740091021e+16, "8.65472e+16", "%g",
-__LINE__, 8.655445556834509e-08, "9e-08", "%4.g",
-__LINE__, 8.658954696751902e+06, "8.65895E+06", "%G",
-__LINE__, 8.665712368800818e-10, "+8.66571E-10", "%+G",
-__LINE__, 8.666937057116442e-10, "8.666937e-10", "%e",
-__LINE__, 8.670981239765155e+05, "867098", "%G",
-__LINE__, 8.679631934294932e-25, "+9.E-25", "%+#0.G",
-__LINE__, 8.683595173050962e-21, "8.68360E-21", "%#G",
-__LINE__, 8.684938704958039e+25, "8.684939E+25", "%E",
-__LINE__, 8.686745463281227e-12, "8.686745E-12", "%5.7G",
-__LINE__, 8.700227628706534e-12, "8.700228e-12", "%#e",
-__LINE__, 8.705101179577200e+04, "87051.011796", "%#2f",
-__LINE__, 8.707824829984700e-24, "9e-24", "%.1g",
-__LINE__, 8.717654041009233e+21, "+9E+21", "%+6.0E",
-__LINE__, 8.741736299906572e-11, "8.74174E-11", "%#0G",
-__LINE__, 8.742228350419966e+18, "+8742228350419965821.060941", "%+f",
-__LINE__, 8.743045146087558e-17, "+8.74305E-17", "%+2G",
-__LINE__, 8.747820269457588e+18, "8.74782E+18", "%G",
-__LINE__, 8.756274717008537e-28, "8.756275E-28", "%E",
-__LINE__, 8.769782309254687e-24, "+8.769782E-24", "%+2.6E",
-__LINE__, 8.788151659193398e-16, " 9E-16", "%6.E",
-__LINE__, 8.789514812202340e-07, "9E-07", "%0.G",
-__LINE__, 8.792657843164822e-07, "8.79266e-07", "%0g",
-__LINE__, 8.810976223440985e+05, "881097.622344", "%f",
-__LINE__, 8.822553973113614e+10, "8.82255E+10", "%G",
-__LINE__, 8.839440421530611e-04, "0.000883944", "%G",
-__LINE__, 8.842539073558434e-12, "0", "%1.f",
-__LINE__, 8.882818021261782e-13, "+8.9e-13", "%+4.2g",
-__LINE__, 8.899833909201039e+05, "8.8998E+05", "%.5G",
-__LINE__, 8.903167498000181e-13, "9e-13", "%0.g",
-__LINE__, 8.933727737932164e+09, "+8933727738", "%+4.f",
-__LINE__, 8.946226267100711e+06, "8.946E+06", "%1.4G",
-__LINE__, 8.953203780849794e-21, "8.9532E-21", "%G",
-__LINE__, 8.959934262635649e+28, "+8.959934e+28", "%+e",
-__LINE__, 8.969485341781558e-25, "0.000000", "%#f",
-__LINE__, 8.970058187654221e+02, "897.005819", "%f",
-__LINE__, 8.979846508565979e+02, "8.979847E+02", "%E",
-__LINE__, 8.984561117901212e+01, "8.984561E+01", "%E",
-__LINE__, 8.992157765875611e-12, "8.99216e-12", "%g",
-__LINE__, 9.004487016708012e+01, "9.004487e+01", "%#e",
-__LINE__, 9.007306978283218e-24, "9.007307e-24", "%e",
-__LINE__, 9.014546375043562e+17, "901454637504356171.007203", "%#3f",
-__LINE__, 9.028177786002161e-12, "9.02818E-12", "%G",
-__LINE__, 9.029635986381795e-02, "0.09", "%.1g",
-__LINE__, 9.032389962233431e-07, "+0.000001", "%+f",
-__LINE__, 9.038466945070887e+10, "+9.038467E+10", "%+E",
-__LINE__, 9.040166964322772e-27, "9.04017e-27", "%g",
-__LINE__, 9.044627673694681e-11, "9.04463E-11", "%G",
-__LINE__, 9.045906217628948e+17, "904590621762894819.823941", "%1f",
-__LINE__, 9.051764975661710e+11, "9.05176e+11", "%#g",
-__LINE__, 9.053142913711405e+29, "9.053143e+29", "%#e",
-__LINE__, 9.073185209160657e-19, "+9.07319e-19", "%+g",
-__LINE__, 9.074372574441451e+02, "907.437", "%g",
-__LINE__, 9.084624602048136e+08, "9.084625E+08", "%E",
-__LINE__, 9.088839346363631e+18, "9.09e+18", "%.2e",
-__LINE__, 9.091945159170871e-15, "9.09195e-15", "%5g",
-__LINE__, 9.115304318083716e+10, "9.115304e+10", "%e",
-__LINE__, 9.115978352902710e+28, "9.11598E+28", "%G",
-__LINE__, 9.121415008221017e-17, "9.E-17", "%#6.G",
-__LINE__, 9.127270978060388e+18, "9.E+18", "%#5.G",
-__LINE__, 9.143941729069086e+08, "9.143942E+08", "%#E",
-__LINE__, 9.162740105978580e-19, " 9.E-19", "%#7.G",
-__LINE__, 9.221509957559626e-18, "9.22151e-18", "%g",
-__LINE__, 9.227419774250317e-28, " 0.", "%#3.f",
-__LINE__, 9.230846660807540e-21, "0.000000", "%f",
-__LINE__, 9.238091727277130e-06, "+0.00001", "%+.5f",
-__LINE__, 9.244337357684406e+10, "9E+10", "%5.G",
-__LINE__, 9.259179793993285e-19, " 9E-19", "%7.0G",
-__LINE__, 9.274068541525759e-17, "9.274069e-17", "%e",
-__LINE__, 9.283833535882367e+16, "9.28383e+16", "%#g",
-__LINE__, 9.295693096364605e+11, "+9.295693E+11", "%+E",
-__LINE__, 9.301820438602407e+05, "930182", "%G",
-__LINE__, 9.322805251555376e-29, "9e-29", "%1.e",
-__LINE__, 9.358443042421307e-27, "9.35844e-27", "%g",
-__LINE__, 9.372658444745124e-23, "9.372658e-23", "%e",
-__LINE__, 9.380302971355292e+05, "938030.3", "%.7g",
-__LINE__, 9.381976354968076e-26, "+9.382E-26", "%+5.4G",
-__LINE__, 9.391072061980585e-15, "9.391072E-15", "%E",
-__LINE__, 9.403554117166546e-06, "0.000009", "%f",
-__LINE__, 9.403712900426614e-28, "9.40371e-28", "%g",
-__LINE__, 9.419046629820578e+03, "9419.046630", "%f",
-__LINE__, 9.422344695378412e+22, "94223446953784115720509.362291", "%f",
-__LINE__, 9.433327680467576e+01, "9.433328e+01", "%e",
-__LINE__, 9.443975205260596e+20, "9.44398e+20", "%g",
-__LINE__, 9.445134851965593e-04, "+9.445135E-04", "%+E",
-__LINE__, 9.448403585149890e+24, "9e+24", "%0.g",
-__LINE__, 9.463149430113036e+18, "9.46315e+18", "%g",
-__LINE__, 9.465735160722534e+27, "+9465735160722534402566452627.070248", "%+f",
-__LINE__, 9.495210794344892e-04, "0.000950", "%f",
-__LINE__, 9.501916506373814e-25, "9.50192E-25", "%#G",
-__LINE__, 9.514641335897739e+29, "9.51464E+29", "%G",
-__LINE__, 9.524633436992819e-04, " 0.001", "%6.G",
-__LINE__, 9.530925101873022e-18, "9.530925e-18", "%2e",
-__LINE__, 9.557903833216979e-22, "9.557904E-22", "%E",
-__LINE__, 9.587709102390903e-01, " 1", "%2.f",
-__LINE__, 9.592723000828453e-02, "9.592723E-02", "%5E",
-__LINE__, 9.603430008794172e+27, "9.60343e+27", "%g",
-__LINE__, 9.622648414989433e-18, "9.622648e-18", "%1e",
-__LINE__, 9.633326171289319e-23, "9.633326e-23", "%e",
-__LINE__, 9.662064616152408e+19, "96620646161524081918.5146393", "%1.7f",
-__LINE__, 9.668544846563163e-23, "9.668545e-23", "%e",
-__LINE__, 9.691014191346685e+28, "9.69101E+28", "%G",
-__LINE__, 9.693075414840598e+02, "+969.308", "%+G",
-__LINE__, 9.695013453291907e-30, "9.695013e-30", "%5e",
-__LINE__, 9.705983477801926e-24, "9.70598e-24", "%g",
-__LINE__, 9.709022568030226e-17, "0.000000", "%f",
-__LINE__, 9.715194901854826e+20, "9.715195e+20", "%e",
-__LINE__, 9.721011821337717e+16, "1E+17", "%0.G",
-__LINE__, 9.734895542899672e+14, "9.734896e+14", "%e",
-__LINE__, 9.741486438769710e-29, " 1e-28", "%6.g",
-__LINE__, 9.766657482315475e-24, "9.76666E-24", "%7G",
-__LINE__, 9.767283293054552e-02, "0.09767", "%5.5f",
-__LINE__, 9.769553159146005e-20, "9.76955E-20", "%G",
-__LINE__, 9.777220880605434e-10, "0.00", "%4.2f",
-__LINE__, 9.790290569034575e+20, "979029056903457473027.", "%#6.f",
-__LINE__, 9.793128245822718e-01, "0.979313", "%G",
-__LINE__, 9.804758536498200e+08, "980475853.650", "%.3f",
-__LINE__, 9.816883664191066e-02, "0.1", "%.0g",
-__LINE__, 9.836109821010300e+25, "9.83611e+25", "%g",
-__LINE__, 9.846197559631225e+03, "1E+04", "%2.G",
-__LINE__, 9.863289416819924e+12, "9.86329e+12", "%g",
-__LINE__, 9.865893798657353e+12, "9.866e+12", "%0.4g",
-__LINE__, 9.868248446640862e-15, "0.000000", "%#f",
-__LINE__, 9.869973080775134e+04, "98699.7", "%G",
-__LINE__, 9.899444006312953e+20, "1E+21", "%.1G",
-__LINE__, 9.904083146074285e-08, "9.904083e-08", "%6e",
-__LINE__, 9.909790408255471e+15, "9909790408255471.305665", "%f",
-__LINE__, 9.930297455798394e-13, "+9.930297E-13", "%+5.6E",
-__LINE__, 9.933314448709083e-15, "9.93331E-15", "%#.6G",
-__LINE__, 9.938714530509870e+29, "9.938715e+29", "%e",
-__LINE__, 9.953892603540162e+07, "9.95389E+07", "%G",
-__LINE__, 9.962084643867200e+14, "+996208464386720.038419", "%+f",
-__LINE__, 9.977706708809947e-09, "9.9777E-09", "%#.4E",
-#endif
-__LINE__, 9.978034352999867e+15, "9.978034e+15", "%2.6e",
-__LINE__, 9.998315286730175e-30, "9.998315e-30", "%6e",
-
-0
-};
-
-/* matches(s1, s2) is true if s1 is "approximately" equal to s2.
- Any digits after the first required_precision digits do not have to match.
- */
-
-int required_precision = 13;
-
-#if defined(__STDC__) || defined(__cplusplus)
-int matches(register char *result, register char *desired)
-#else
-int matches(result, desired)
- register char *result; register char *desired;
-#endif
-{
- int digits_seen = 0;
- for (;; result++, desired++) {
- if (*result == *desired) {
- if (*result == 0)
- return 1;
- else if (*result >= '0' && *result <= '9')
- digits_seen++;
- }
- else if (digits_seen >= required_precision
- && *result >= '0' && *result <= '9'
- && *desired >= '0' && *desired <= '9')
- continue;
- else
- return 0;
- }
-}
-
-extern void dump_stats();
-
-int main()
-{
- int errcount = 0;
- int testcount = 0;
- double d;
-#define BSIZE 1024
- char buffer[BSIZE];
- sprint_double_type *dptr;
-
- /* This test demands more precision than a 32bit floating
- point format can provide. So only run it if doubles
- are last least 64bits wide. */
- if (sizeof (double) < 8)
- exit (0);
-
-#if defined(__cplusplus) && !defined(TEST_LIBIO)
-
- strstream sstr(buffer, BSIZE, ios::in|ios::out);
-
- for (dptr = sprint_doubles; dptr->line; dptr++)
- {
-
-#ifdef SLOW_SIMULATOR
- /* We only run half the tests if we have a slow simulator to
- avoid dejagnu timeouts. */
- if (testcount % 2)
- {
- testcount++;
- continue;
- }
-#endif
-
- sstr.seekp(0);
- sstr.form(dptr->format_string, dptr->value);
- sstr << ends;
- if (!matches(buffer, dptr->result))
- {
- errcount++;
- cerr << "Error in line " << dptr->line;
- cerr << " using \"" << dptr->format_string;
- cerr << "\". Result is \"" << buffer << "\"; should be: \"";
- cerr << dptr->result << "\".\n";
- }
-
-#ifdef TEST_EXACTNESS
- sstr.seekp(0);
- sstr.form("%.999g", dptr->value);
- sstr << ends;
-
- sstr.seekg(0);
- sstr.scan("%lg", &d);
-
- if (dptr->value != d)
- {
- errcount++;
- cerr << "Error in line " << dptr->line;
- cerr << ". String is \"" << buffer << "\", value is " << d << ".\n";
- }
-#endif
- testcount++;
- }
-
-#ifdef SLOW_SIMULATOR
- testcount /= 2;
-#endif
-
- if (errcount == 0)
- {
- cerr << "Encountered no errors in " << testcount << " tests.\n";
- return 0;
- }
- else
- {
- cerr << "Encountered " << errcount << " errors in "
- << testcount << " tests.\n";
- return 1;
- }
-#else
- for (dptr = sprint_doubles; dptr->line; dptr++)
- {
-#ifdef SLOW_SIMULATOR
- /* We only run half the tests if we have a slow simulator to
- avoid dejagnu timeouts. */
- if (testcount % 2)
- {
- testcount++;
- continue;
- }
-#endif
-
- sprintf (buffer, dptr->format_string, dptr->value);
- if (!matches(buffer, dptr->result))
- {
- errcount++;
- fprintf(stderr,
- "Error in line %d using \"%s\". Result is \"%s\"; should be: \"%s\".\n",
- dptr->line, dptr->format_string, buffer, dptr->result);
- }
-
-#ifdef TEST_EXACTNESS
- sprintf (buffer, "%.999g", dptr->value);
- sscanf (buffer, "%lg", &d);
- if (dptr->value != d)
- {
- errcount++;
- fprintf (stderr,
- "Error in line %d. String is \"%s\", value is %g.\n",
- dptr->line, buffer, d);
- }
-#endif
- testcount++;
- }
-
-#ifdef SLOW_SIMULATOR
- testcount /= 2;
-#endif
-
- if (errcount == 0)
- {
- fprintf(stderr, "Encountered no errors in %d tests.\n", testcount);
- return 0;
- }
- else
- {
- fprintf(stderr, "Encountered %d errors in %d tests.\n",
- errcount, testcount);
- return 1;
- }
-#endif
-}
diff --git a/contrib/libio/tests/tiformat.c b/contrib/libio/tests/tiformat.c
deleted file mode 100644
index 78d09cedc230..000000000000
--- a/contrib/libio/tests/tiformat.c
+++ /dev/null
@@ -1,5112 +0,0 @@
-#ifdef TEST_LIBIO
-#include <iostdio.h>
-#else
-#ifdef __cplusplus
-#include <strstream.h>
-#else
-#include <stdio.h>
-#endif
-#endif /* !TEST_LIBIO */
-#include <string.h>
-
-/* Tests taken from Cygnus C library. */
-typedef struct {
- int line;
- long value;
- char *result;
- char *format_string;
-} sprint_int_type;
-
-sprint_int_type sprint_ints[] =
-{
-__LINE__, 0x000838d2L, "838d2", "%.4x",
-__LINE__, 0x0063be46L, "63BE46", "%-6X",
-__LINE__, -0x1b236c0L, "-28456640", "%#0.d",
-__LINE__, -0x0000003L, "-3", "% 0d",
-__LINE__, 0x0000ed51L, "ed51", "%2.x",
-__LINE__, -0x00001f2L, "-498", "%1ld",
-__LINE__, 0x0ea3e927L, "EA3E927", "%+X",
-__LINE__, 0xffbef8daL, "FFBEF8DA", "%5X",
-__LINE__, 0x62ff9f56L, "62ff9f56", "%0x",
-__LINE__, 0x00000ad2L, "AD2", "%.0X",
-__LINE__, 0x00000000L, " ", "% 6.ld",
-__LINE__, 0xffffffffL, "FFFFFFFF", "%1.4X",
-__LINE__, 0x0000208cL, " 208C", "%5X",
-__LINE__, 0x0000003cL, "3c", "%x",
-__LINE__, 0xffff6177L, "0xffff6177", "%+#x",
-__LINE__, 0xffffdc8dL, "ffffdc8d", "%+x",
-__LINE__, 0x00000000L, "0", "%X",
-__LINE__, 0x00002434L, "9268", "%0d",
-__LINE__, 0xd2c72cdbL, "d2c72cdb", "%-x",
-__LINE__, 0xfe38012bL, "0xfe38012b", "%+#7x",
-__LINE__, 0x00000001L, "0001", "%#.4d",
-__LINE__, -0x008525aL, "-0545370", "%06.7ld",
-__LINE__, 0xffffffacL, "ffffffac", "%3.7x",
-__LINE__, 0x007424d2L, "+7611602", "%+ld",
-__LINE__, 0x00001a85L, "1A85", "%.4X",
-__LINE__, -0x0000019L, "-25", "%3.d",
-__LINE__, 0xfffffffeL, "fffffffe", "%-x",
-__LINE__, -0x34473b2L, "-54817714", "% d",
-__LINE__, 0x000000eaL, "234", "%1.ld",
-__LINE__, -0x0000004L, "-4 ", "%-7.ld",
-__LINE__, 0x00006c94L, "27796", "%0d",
-__LINE__, 0x00000001L, "1", "%ld",
-__LINE__, 0x00000619L, "619", "%1x",
-__LINE__, 0x0000209cL, "8348", "%ld",
-__LINE__, -0x327f8ffL, "-52951295", "%-0ld",
-__LINE__, 0xffffff0bL, "FFFFFF0B", "%2.X",
-__LINE__, 0xf199d6aeL, "F199D6AE", "%X",
-__LINE__, 0x3ca5602eL, "1017471022", "%-1.ld",
-__LINE__, -0xfb2080bL, "-263325707", "%3.5d",
-__LINE__, 0x00001cb8L, "7352", "%d",
-__LINE__, 0x00000000L, "0000000", "%3.7d",
-__LINE__, 0xffffff40L, "FFFFFF40", "%+X",
-__LINE__, 0x14664450L, "0x14664450", "%#x",
-__LINE__, 0x0000002eL, "2e", "%1x",
-__LINE__, 0xffffffffL, "ffffffff", "%x",
-__LINE__, 0xffff606aL, "0XFFFF606A", "%#X",
-__LINE__, 0xffffff33L, "0XFFFFFF33", "%#X",
-__LINE__, 0x00000000L, "0", "%d",
-__LINE__, -0x0000012L, "-00018", "%-2.5d",
-__LINE__, 0x0001fbe6L, "130022", "%1.d",
-__LINE__, 0xfff59dd9L, "fff59dd9", "%+x",
-__LINE__, 0x00000002L, "2", "%0.0d",
-__LINE__, 0x00000fe1L, "fe1 ", "%-7.x",
-__LINE__, 0x001f8f6aL, "1F8F6A", "%1.X",
-__LINE__, 0x0000001bL, "000001B", "%04.7X",
-__LINE__, 0x126a2609L, " 308946441", "% 4d",
-__LINE__, 0xffffffe3L, "0XFFFFFFE3", "%+#.1X",
-__LINE__, 0x1858f1c9L, "1858f1c9", "%.3x",
-__LINE__, 0x003fc672L, "3fc672", "%1x",
-__LINE__, 0x00c0bddcL, "12631516", "%#d",
-__LINE__, 0x000006d6L, "1750", "%#d",
-__LINE__, 0x000006a0L, "6A0", "%X",
-__LINE__, 0x000007beL, "7BE", "%X",
-__LINE__, -0x1c7cd1aL, "-29871386", "%ld",
-__LINE__, 0x000000ccL, "204", "%ld",
-__LINE__, 0x000002dbL, "731 ", "%-#5d",
-__LINE__, 0xffff67adL, "FFFF67AD", "% X",
-__LINE__, 0x00000008L, "8", "%d",
-__LINE__, 0xffe07007L, "FFE07007", "%5X",
-__LINE__, -0x0000001L, " -1", "% 7d",
-__LINE__, 0xfffffffeL, "fffffffe", "%x",
-__LINE__, 0x00027b68L, "+162664", "%+ld",
-__LINE__, 0x0a7c1997L, "+175905175", "%+2ld",
-__LINE__, 0xfe300896L, "fe300896", "%.4x",
-__LINE__, 0x00000537L, "537", "%-0.x",
-__LINE__, 0x3e981779L, "3e981779", "%.6x",
-__LINE__, 0xfffff05eL, "FFFFF05E", "%1.0X",
-__LINE__, -0x07bc0cfL, "-8110287", "%-7d",
-__LINE__, -0x01371bcL, "-1274300", "%.7ld",
-__LINE__, -0x0000013L, "-19", "%.2ld",
-__LINE__, 0x000000d1L, "0xd1", "%#x",
-__LINE__, -0x0000003L, "-3", "%-ld",
-__LINE__, 0xfffffffcL, "FFFFFFFC", "%4.1X",
-__LINE__, 0x00000000L, "0", "%ld",
-__LINE__, 0x0001c8afL, "116911", "%d",
-__LINE__, 0x000048c3L, "48C3", "%X",
-__LINE__, 0x00000079L, "0x0000079", "%-#0.7x",
-__LINE__, 0x0000615aL, " 24922", "% d",
-__LINE__, 0xfffffff5L, "fffffff5", "%x",
-__LINE__, 0x00000308L, "0000308", "%+07.7x",
-__LINE__, 0xfcadc983L, "fcadc983", "%x",
-__LINE__, 0x00000097L, "151", "%#d",
-__LINE__, 0x000001c5L, "453", "%0.2ld",
-__LINE__, 0x00000000L, "00", "%-1.2x",
-__LINE__, 0x00000001L, "+1", "%+02.d",
-__LINE__, 0x01eb4354L, "1EB4354", "% X",
-__LINE__, 0xffffa7d1L, "ffffa7d1", "%5.x",
-__LINE__, 0x0003170eL, "0x3170e", "%#x",
-__LINE__, 0x000001ceL, "1CE", "% .2X",
-__LINE__, 0x3a2991fbL, "975802875", "%d",
-__LINE__, -0xcdad8e2L, "-215668962", "%-d",
-__LINE__, 0xfe0261c3L, "fe0261c3", "%x",
-__LINE__, -0x0006ea7L, "-28327", "% ld",
-__LINE__, 0x032854a3L, "0X32854A3", "% #6X",
-__LINE__, 0x0000004bL, "4b", "%x",
-__LINE__, 0xffff6ca3L, "FFFF6CA3", "%4.X",
-__LINE__, 0x00000000L, "0", "%X",
-__LINE__, 0x00611f04L, "611F04", "%.1X",
-__LINE__, 0x00000000L, " 0", "%#6d",
-__LINE__, 0x0002c711L, "2c711", "%-02.x",
-__LINE__, -0x07a2fe4L, "-8007652", "%d",
-__LINE__, -0x0000547L, "-1351", "%ld",
-__LINE__, 0x00013954L, "0x13954", "%#x",
-__LINE__, -0x00523b7L, "-336823", "%ld",
-__LINE__, -0x00f6c6eL, "-1010798", "%6.ld",
-__LINE__, 0xffea6427L, "FFEA6427", "%3X",
-__LINE__, -0x0000005L, "-5", "%d",
-__LINE__, -0x04fe618L, "-5236248", "% .7d",
-__LINE__, 0xffa80a28L, "ffa80a28", "%-0x",
-__LINE__, 0x00000047L, "71", "%ld",
-__LINE__, 0x001dc6bbL, "1951419", "%#4ld",
-__LINE__, 0x00000868L, " 2152", "%#6d",
-__LINE__, 0x000002fbL, "2fb", "%x",
-__LINE__, 0x00607fa0L, "6324128", "%4d",
-__LINE__, 0xfffed161L, "fffed161", "%x",
-__LINE__, 0x0001c6e4L, " 116452", "% 2.5d",
-__LINE__, 0x0003dda8L, "3DDA8", "%4X",
-__LINE__, 0xfffffff8L, "fffffff8", "%x",
-__LINE__, 0xfacf664aL, "facf664a", "%x",
-__LINE__, 0x000000c1L, "C1", "% 1X",
-__LINE__, 0x0000839cL, " 839C", "%6X",
-__LINE__, 0xfffff69aL, "FFFFF69A", "%X",
-__LINE__, 0x000e5c2eL, "+941102", "%+d",
-__LINE__, -0x0000004L, "-4", "%#d",
-__LINE__, 0x00000000L, "00000", "%#.5ld",
-__LINE__, 0xfffffffeL, "fffffffe", "%3.1x",
-__LINE__, 0x0010ed68L, "1109352", "%-ld",
-__LINE__, 0xffffffe9L, "ffffffe9", "%.6x",
-__LINE__, 0x00000007L, " 7", "% 4.ld",
-__LINE__, 0x0000cabaL, "51898", "%ld",
-__LINE__, -0x0000119L, "-281", "% d",
-__LINE__, 0x0c3012a9L, "204477097", "%03.6ld",
-__LINE__, -0x001c98fL, "-117135", "%ld",
-__LINE__, 0x000017b1L, "+6065", "%+d",
-__LINE__, 0x00000001L, "1", "%ld",
-__LINE__, -0x0000019L, "-25", "% .2d",
-__LINE__, 0x0009ae28L, "9AE28", "%X",
-__LINE__, 0xe861c4feL, "e861c4fe", "%7.x",
-__LINE__, 0xffac88d3L, "FFAC88D3", "%X",
-__LINE__, -0x00005dfL, "-01503", "%-5.5ld",
-__LINE__, 0x0000013eL, "318", "%-0d",
-__LINE__, 0x04b6f58fL, "4b6f58f", "%x",
-__LINE__, 0xfffe3978L, "fffe3978", "%+0.6x",
-__LINE__, 0x57ee5244L, "57ee5244", "%+7.4x",
-__LINE__, 0xfffb5610L, "fffb5610", "% 6x",
-__LINE__, 0x00000006L, " 6", "%#7d",
-__LINE__, 0x0000000cL, "0x0000c", "%#.5x",
-__LINE__, -0xec59362L, "-247829346", "%1.7d",
-__LINE__, -0x0000001L, "-1", "%ld",
-__LINE__, -0x0007e4bL, "-32331", "% d",
-__LINE__, 0x0ececa6fL, "248433263", "%0d",
-__LINE__, 0x00000578L, " 578", "%+6.x",
-__LINE__, -0x0000003L, "-3", "%ld",
-__LINE__, 0x000002bbL, "2bb", "% 0x",
-__LINE__, -0x0000006L, "-6", "%-ld",
-__LINE__, 0x000002f9L, "761", "%d",
-__LINE__, 0xffffd736L, "ffffd736", "%3.4x",
-__LINE__, 0x0010ba79L, "1096313", "%7.4d",
-__LINE__, -0x0001244L, "-4676", "%#.1d",
-__LINE__, 0x00000dbeL, "DBE", "%1X",
-__LINE__, -0x0000015L, "-21", "%-0.d",
-__LINE__, 0xffffffffL, "0xffffffff", "%#x",
-__LINE__, -0x6cdf4a3L, "-114160803", "%ld",
-__LINE__, 0x00008ac9L, "8AC9", "%1X",
-__LINE__, 0x00000000L, "00", "%.2X",
-__LINE__, -0x2263dbaL, "-36060602", "%5.5d",
-__LINE__, 0x00007da9L, "32169", "%0d",
-__LINE__, 0xfffffff7L, "FFFFFFF7", "% 4.X",
-__LINE__, 0xfbf36ccaL, "FBF36CCA", "%.1X",
-__LINE__, 0x00000040L, "64", "%.0ld",
-__LINE__, 0x0000001cL, " 28", "% d",
-__LINE__, 0xfffffadbL, "0xfffffadb", "%#.5x",
-__LINE__, 0x0eb95847L, "247027783", "%d",
-__LINE__, 0xfffd7030L, "FFFD7030", "%+02X",
-__LINE__, 0x00000005L, "00005", "%.5x",
-__LINE__, 0xfffffffdL, "FFFFFFFD", "%X",
-__LINE__, 0x98975b15L, "98975B15", "%02X",
-__LINE__, -0x0000034L, " -52", "%6ld",
-__LINE__, 0xffd7d0ccL, "ffd7d0cc", "% 5.6x",
-__LINE__, 0xffffffa6L, "FFFFFFA6", "%X",
-__LINE__, 0xfff27132L, "fff27132", "%x",
-__LINE__, -0x065b74dL, "-6666061", "%+6ld",
-__LINE__, 0xf6ac99d6L, "0XF6AC99D6", "%#X",
-__LINE__, 0xfffff4bdL, "FFFFF4BD", "%X",
-__LINE__, 0xfffffb62L, "FFFFFB62", "%6X",
-__LINE__, 0xf8434543L, "f8434543", "%-0x",
-__LINE__, 0x0002b374L, "0x2b374", "%-#6x",
-__LINE__, 0x00000000L, "0", "%x",
-__LINE__, 0xffb5751dL, "ffb5751d", "%-3.x",
-__LINE__, 0x34ea7347L, "887780167", "%d",
-__LINE__, -0x008f457L, "-586839", "%0ld",
-__LINE__, 0x00000001L, " 1", "%#4d",
-__LINE__, 0xc32d7ad4L, "c32d7ad4", "%0x",
-__LINE__, 0xfffffb80L, "FFFFFB80", "%-.2X",
-__LINE__, 0x00000756L, "756 ", "%-6x",
-__LINE__, 0xfffb020fL, "FFFB020F", "%+.2X",
-__LINE__, -0xe68619fL, "-241721759", "%#1.6ld",
-__LINE__, 0x180166cdL, "402745037", "%3.7ld",
-__LINE__, -0x0000001L, "-1", "%+00d",
-__LINE__, 0xfdbc3611L, "fdbc3611", "%x",
-__LINE__, -0x000005bL, "-91", "%d",
-__LINE__, 0xffffe77fL, "ffffe77f", "%x",
-__LINE__, -0x0000019L, "-25", "%ld",
-__LINE__, 0x00000016L, "22", "%#d",
-__LINE__, -0x0000025L, "-37", "%ld",
-__LINE__, 0xffffe43fL, "ffffe43f", "%x",
-__LINE__, 0x000050a5L, "00050a5", "%.7x",
-__LINE__, 0x0000000cL, " 12", "% 5.ld",
-__LINE__, -0x001faffL, "-129791", "%4d",
-__LINE__, 0x239d7cf2L, "597523698", "%0.7ld",
-__LINE__, 0x04092183L, "4092183", "% 7X",
-__LINE__, -0x0043498L, "-275608", "%-ld",
-__LINE__, -0x0018dbeL, "-101822", "%d",
-__LINE__, 0xff3e09c3L, "FF3E09C3", "%X",
-__LINE__, 0x00000000L, "0", "%d",
-__LINE__, -0x15d57558L, "-366310744", "%+0.7ld",
-__LINE__, 0x0004fb06L, "326406", "%0.0d",
-__LINE__, 0x00000119L, "0X119", "%#X",
-__LINE__, -0x14c53e19L, "-348470809", "%d",
-__LINE__, 0x00000019L, "0000019", "% .7X",
-__LINE__, -0x0000654L, "-1620", "%0.4ld",
-__LINE__, -0xde5899bL, "-233146779", "%#.1d",
-__LINE__, 0x0013c1f0L, "1294832", "%4.ld",
-__LINE__, 0x0a9fe761L, "A9FE761", "%X",
-__LINE__, -0x00000e5L, "-229", "%1ld",
-__LINE__, 0x00000161L, "000353", "%.6ld",
-__LINE__, 0x6b04e4bdL, "0x6b04e4bd", "%#7.0x",
-__LINE__, -0x0000ef0L, "-3824 ", "%-6.ld",
-__LINE__, -0x026306eL, "-2502766", "%ld",
-__LINE__, 0x00000000L, "0", "%-X",
-__LINE__, 0xfffffe1fL, "fffffe1f", "%-x",
-__LINE__, 0x0003aecfL, " 241359", "% 2.1ld",
-__LINE__, -0x0000014L, "-20", "%d",
-__LINE__, 0x00000002L, "0002", "%-.4ld",
-__LINE__, 0xfffff662L, "0XFFFFF662", "% #.6X",
-__LINE__, 0x00000006L, "6", "%0x",
-__LINE__, 0x0001f4c4L, " 128196", "% 0d",
-__LINE__, 0xffffffffL, "FFFFFFFF", "%5X",
-__LINE__, 0x05605e38L, "90201656", "%ld",
-__LINE__, 0xffffffdeL, "0XFFFFFFDE", "% #X",
-__LINE__, 0x000001e0L, " 1e0", "%7.x",
-__LINE__, 0x00000007L, "7", "%X",
-__LINE__, 0x00000001L, "+1", "%+d",
-__LINE__, 0xffffffe0L, "FFFFFFE0", "% X",
-__LINE__, 0xffd7f77aL, "FFD7F77A", "%+00.1X",
-__LINE__, 0xfffffffeL, "0xfffffffe", "%-#x",
-__LINE__, 0x01b0a63bL, "1b0a63b", "%x",
-__LINE__, -0x06554b7L, "-6640823", "%d",
-__LINE__, 0xfffffff8L, "fffffff8", "%x",
-__LINE__, 0x00000b2dL, "b2d", "%x",
-__LINE__, -0x2664ba2L, "-40258466", "%-d",
-__LINE__, 0xfffffffeL, "FFFFFFFE", "%X",
-__LINE__, -0x0000552L, " -1362", "%6.2ld",
-__LINE__, 0x00000009L, " 00009", "%6.5x",
-__LINE__, 0x00035c72L, "220274", "%05.ld",
-__LINE__, -0x014d09dL, "-1364125", "%d",
-__LINE__, -0x0000002L, " -2", "% 4d",
-__LINE__, 0x00000001L, "1", "%+X",
-__LINE__, 0x00000028L, "28", "%X",
-__LINE__, 0xf25c9eb2L, "F25C9EB2", "%7.X",
-__LINE__, -0x7ae4b62L, "-128863074", "%d",
-__LINE__, 0x00630d87L, "630D87", "%2X",
-__LINE__, 0x000000f8L, "F8", "%-X",
-__LINE__, 0xfffffff9L, "FFFFFFF9", "%X",
-__LINE__, -0x0000007L, "-7", "%0d",
-__LINE__, -0x2518fcdL, "-38899661", "% 3ld",
-__LINE__, 0xfffff4b4L, "FFFFF4B4", "%-5X",
-__LINE__, 0x01cc36c8L, "30160584", "%ld",
-__LINE__, 0xffffffffL, "ffffffff", "%-x",
-__LINE__, 0x0000000bL, " 11", "%6.ld",
-__LINE__, 0x00010d55L, " 68949", "% d",
-__LINE__, -0x0c01306L, "-12587782", "% 6.1ld",
-__LINE__, 0x001719d7L, "1513943", "%.1ld",
-__LINE__, -0x0000002L, " -2", "%+3.ld",
-__LINE__, 0x0000018eL, "398", "%d",
-__LINE__, 0x000000a6L, "0xa6", "%-#3x",
-__LINE__, 0x00006f66L, " 28518", "% #d",
-__LINE__, 0x0000032aL, "32A", "%X",
-__LINE__, -0x0000145L, "-325", "%0d",
-__LINE__, 0xffffffffL, "ffffffff", "%2.x",
-__LINE__, 0x00287171L, "2650481", "%ld",
-__LINE__, 0x0000004bL, "+75", "%+02.ld",
-__LINE__, 0xfffffff8L, "fffffff8", "%-0x",
-__LINE__, 0x00000064L, "64", "% X",
-__LINE__, 0xfffffca2L, "fffffca2", "%0x",
-__LINE__, 0x000010b6L, "10b6", "% .0x",
-__LINE__, -0x003806fL, "-229487", "%7d",
-__LINE__, -0x00000b7L, "-183", "%3ld",
-__LINE__, 0xffffe5baL, "FFFFE5BA", "%0X",
-__LINE__, 0x001f0da8L, "1f0da8", "%+x",
-__LINE__, 0x000ce185L, "844165", "%0ld",
-__LINE__, 0x00000c96L, "3222", "%0d",
-__LINE__, -0x0013099L, "-77977", "%1.ld",
-__LINE__, -0x5f3c47aL, "-99861626", "%.6ld",
-__LINE__, 0x00000cbfL, " CBF", "%+5.X",
-__LINE__, -0x0000001L, "-1", "%+ld",
-__LINE__, 0x0d793bc3L, "d793bc3", "%6.x",
-__LINE__, 0xfffffffdL, "0xfffffffd", "%+#x",
-__LINE__, -0x0000070L, " -112", "%6.d",
-__LINE__, 0xfffffb3fL, "FFFFFB3F", "%.7X",
-__LINE__, 0x037dfc78L, "0X37DFC78", "%#X",
-__LINE__, 0x00009ba5L, "39845", "%3ld",
-__LINE__, 0x0000004aL, "4a", "%0x",
-__LINE__, 0xffffff81L, "ffffff81", "%5.5x",
-__LINE__, -0x86ef222L, "-141488674", "%ld",
-__LINE__, -0xac5531eL, "-180704030", "% 4ld",
-__LINE__, 0x00002493L, "2493", "%+X",
-__LINE__, 0xffffffffL, "FFFFFFFF", "%1.3X",
-__LINE__, 0x0005c875L, "378997", "%.0ld",
-__LINE__, 0x0301d345L, "50451269", "%d",
-__LINE__, 0xfff6b589L, "fff6b589", "%2.4x",
-__LINE__, -0x00001dbL, "-475 ", "%-7.0d",
-__LINE__, 0x0000d1e7L, "0x000d1e7", "%#2.7x",
-__LINE__, 0xf4c4d2bbL, "f4c4d2bb", "%.6x",
-__LINE__, 0x00c89f54L, "13147988", "%ld",
-__LINE__, -0x6599253cL, "-1704535356", "%+ld",
-__LINE__, 0xab7d61eaL, "ab7d61ea", "% x",
-__LINE__, 0x00000006L, "6", "%1ld",
-__LINE__, 0xffff5ab7L, "ffff5ab7", "%0x",
-__LINE__, -0x1cfeca5bL, "-486459995", "%#ld",
-__LINE__, 0x000000f3L, " f3", "% 6.x",
-__LINE__, -0x0000021L, "-33", "%d",
-__LINE__, 0xfe7246acL, "fe7246ac", "%-5.x",
-__LINE__, 0x00000017L, "00017", "%-.5X",
-__LINE__, -0x0cc250aL, "-13378826", "%0.0d",
-__LINE__, -0x00010aeL, "-04270", "%#.5ld",
-__LINE__, -0x7952c8bL, "-127216779", "% ld",
-__LINE__, 0x0002a53eL, "173374", "%4.0d",
-__LINE__, 0x03801bbfL, "3801BBF", "%0X",
-__LINE__, 0x0368645fL, "+57173087", "%+#0.6ld",
-__LINE__, 0x0000002fL, "47", "%d",
-__LINE__, 0x00000003L, "3", "%x",
-__LINE__, 0x000005f7L, "5F7", "%0X",
-__LINE__, -0x06e5e76L, "-7233142", "% 0.1ld",
-__LINE__, 0x053da936L, "53da936", "%1.4x",
-__LINE__, -0x0df0c2fL, "-14617647", "%.5ld",
-__LINE__, 0xfffffffdL, "FFFFFFFD", "%-0X",
-__LINE__, 0x000104bfL, "104BF", "%X",
-__LINE__, 0x000353fcL, "353FC", "%X",
-__LINE__, 0x182a18dcL, "+405412060", "%+ld",
-__LINE__, 0x0000000eL, " 14", "% 2d",
-__LINE__, -0x0000091L, "-145", "%+ld",
-__LINE__, 0x0029a9d6L, "2730454", "%d",
-__LINE__, 0x00009d57L, "009d57", "% .6x",
-__LINE__, 0x4c4d4f79L, "1280135033", "%5.ld",
-__LINE__, -0x000075bL, "-1883", "% 03d",
-__LINE__, -0x001b718L, "-112408", "%+d",
-__LINE__, 0xfffaaf57L, "FFFAAF57", "%+1X",
-__LINE__, 0x00f44e52L, "F44E52", "% 4X",
-__LINE__, 0x00000002L, "0X2", "%#X",
-__LINE__, 0x000a85e9L, "A85E9", "%+0X",
-__LINE__, 0xffff70bbL, "ffff70bb", "%6x",
-__LINE__, 0x00004e15L, "4e15", "%x",
-__LINE__, 0x000eeb60L, " 977760", "% ld",
-__LINE__, 0xfffffff1L, "fffffff1", "%0x",
-__LINE__, -0x294d7e2L, "-43309026", "% 02.d",
-__LINE__, 0x0001aaebL, "0109291", "%02.7ld",
-__LINE__, 0x000a01fcL, "0xa01fc", "%-#.5x",
-__LINE__, 0x002c3c30L, "+2898992", "%+#d",
-__LINE__, 0x015667aeL, "+22439854", "%+5ld",
-__LINE__, -0x05af42bL, "-5960747", "%+d",
-__LINE__, 0x0000be36L, "be36", "%+2x",
-__LINE__, 0x005e3f67L, "5e3f67", "% x",
-__LINE__, -0x0000020L, "-32", "% ld",
-__LINE__, -0x0003617L, "-13847", "% d",
-__LINE__, 0x00000014L, "14 ", "%-4.X",
-__LINE__, 0x00000001L, "001", "%0.3d",
-__LINE__, 0xfffffea9L, "fffffea9", "%3.x",
-__LINE__, 0xe447099eL, "E447099E", "%0X",
-__LINE__, 0x00049c71L, "302193", "%d",
-__LINE__, 0x76356ed3L, "0x76356ed3", "%#4.1x",
-__LINE__, 0x00000005L, " 0X5", "%#5X",
-__LINE__, 0x00004da2L, "0x004da2", "%#1.6x",
-__LINE__, 0xffdfb36cL, "FFDFB36C", "%4X",
-__LINE__, 0xffffe3c5L, "FFFFE3C5", "%+4.X",
-__LINE__, 0x00000006L, "6", "%0x",
-__LINE__, -0x914ff17L, "-152370967", "% .5ld",
-__LINE__, -0x0000002L, "-2", "%0ld",
-__LINE__, 0xffffff36L, "FFFFFF36", "% 2X",
-__LINE__, -0x0bb1598L, "-12260760", "%-ld",
-__LINE__, 0x00006db5L, "28085", "%0.5ld",
-__LINE__, 0xffffffffL, "ffffffff", "%x",
-__LINE__, -0x0000001L, "-1", "%0ld",
-__LINE__, 0x0fa37e79L, "FA37E79", "%1.X",
-__LINE__, -0x00000acL, "-172", "%.2d",
-__LINE__, 0xffffffd8L, "ffffffd8", "%.7x",
-__LINE__, -0x000a513L, "-42259", "%ld",
-__LINE__, 0x00001294L, "4756", "%2ld",
-__LINE__, -0x56bae0b4L, "-1455087796", "%.1ld",
-__LINE__, 0x3b26d5faL, "3b26d5fa", "%x",
-__LINE__, 0xff657013L, "ff657013", "%x",
-__LINE__, -0x00005f5L, "-1525", "%0.0ld",
-__LINE__, -0x0000001L, " -1", "% 7d",
-__LINE__, -0x02396b2L, "-2332338", "%d",
-__LINE__, -0x0000003L, "-000003", "%+7.6d",
-__LINE__, 0xfd3ec7c1L, "fd3ec7c1", "% 3.4x",
-__LINE__, -0x076e338L, "-7791416", "%0.d",
-__LINE__, -0x000015eL, "-350", "%3ld",
-__LINE__, 0x0a0f0b71L, "a0f0b71", "%x",
-__LINE__, 0xfffe00baL, "FFFE00BA", "%X",
-__LINE__, 0x00036bd8L, " 36bd8", "% 06.x",
-__LINE__, 0xfffff2dfL, "0XFFFFF2DF", "%#2.6X",
-__LINE__, 0x004687fbL, "4622331", "%ld",
-__LINE__, -0x0000331L, " -817", "%+6.d",
-__LINE__, 0xfcd5b090L, "fcd5b090", "%+0x",
-__LINE__, 0x0334f94cL, "334F94C", "%.6X",
-__LINE__, 0x00000bceL, "3022", "%.3ld",
-__LINE__, 0xf28d9dddL, "f28d9ddd", "%x",
-__LINE__, 0x00003a79L, " 14969", "% ld",
-__LINE__, 0xfffffffeL, "FFFFFFFE", "%.7X",
-__LINE__, 0x0043d7feL, "43D7FE", "%X",
-__LINE__, -0x0000b82L, "-2946", "%-ld",
-__LINE__, -0x00e29d8L, "-928216", "%d",
-__LINE__, 0xffffffecL, "ffffffec", "%-x",
-__LINE__, 0x0aeaf557L, "0xaeaf557", "%-#x",
-__LINE__, 0x00c07fe6L, "C07FE6", "%X",
-__LINE__, 0x307414d8L, "307414d8", "% 0x",
-__LINE__, -0x045ef67L, "-4583271", "%d",
-__LINE__, 0x0000024aL, " 0000586", "% .7d",
-__LINE__, 0xfffffc42L, "fffffc42", "%x",
-__LINE__, 0xfc38c249L, "fc38c249", "%5.x",
-__LINE__, -0x000d096L, "-53398", "%-d",
-__LINE__, -0x213a345L, "-34841413", "%ld",
-__LINE__, -0x0000130L, "-304", "%ld",
-__LINE__, -0x000efd1L, "-61393", "%ld",
-__LINE__, 0xfffff867L, "FFFFF867", "%2X",
-__LINE__, 0x00113ed0L, "0x113ed0", "%-#7x",
-__LINE__, 0x00000677L, " 1655", "% 3.ld",
-__LINE__, 0x0000002fL, "2f", "%x",
-__LINE__, 0xfffffd38L, "fffffd38", "%-4x",
-__LINE__, -0x000b3ccL, "-46028", "%1.2d",
-__LINE__, 0x45da719bL, "45DA719B", "%+0X",
-__LINE__, -0x000a454L, " -42068", "%7.3ld",
-__LINE__, 0x01cc7c30L, " 30178352", "% d",
-__LINE__, -0x05ae80eL, "-5957646", "%#.4ld",
-__LINE__, 0x000000b9L, "185", "%d",
-__LINE__, 0x003fcaf4L, "4180724", "%1.ld",
-__LINE__, 0x02da1b74L, "2DA1B74", "%X",
-__LINE__, 0xffffffd9L, "FFFFFFD9", "%X",
-__LINE__, 0x00064359L, "64359 ", "%-6X",
-__LINE__, 0x000000f0L, "240", "%ld",
-__LINE__, -0x01715e5L, "-1512933", "%ld",
-__LINE__, 0xc8f6e118L, "0XC8F6E118", "%#X",
-__LINE__, 0xfffffd8fL, "FFFFFD8F", "%X",
-__LINE__, 0x0000176dL, "5997 ", "%-6d",
-__LINE__, 0x00003cabL, "0x3cab", "%#0.3x",
-__LINE__, 0x00000001L, " 1", "% d",
-__LINE__, 0xfffff610L, "0XFFFFF610", "%#X",
-__LINE__, 0xfffffffeL, "FFFFFFFE", "%5.7X",
-__LINE__, 0x00000001L, "1", "%0x",
-__LINE__, 0x00000001L, "00001", "%.5ld",
-__LINE__, -0x0000d51L, "-3409", "%d",
-__LINE__, -0x08639eeL, "-8796654", "%ld",
-__LINE__, 0x00003121L, "12577", "%#1.2ld",
-__LINE__, 0x0000004eL, "78", "%d",
-__LINE__, 0xfffff64fL, "fffff64f", "%-x",
-__LINE__, 0x0000002aL, "2a", "%0x",
-__LINE__, 0x00000020L, "20", "%x",
-__LINE__, -0x00000b8L, "-184", "%#ld",
-__LINE__, 0x0000000aL, "10", "%-#d",
-__LINE__, 0x00000364L, "868", "%.1ld",
-__LINE__, 0x00d1f9b6L, "D1F9B6", "%0.X",
-__LINE__, 0x008cfda1L, "8CFDA1", "% 6.X",
-__LINE__, 0xffd58cceL, "FFD58CCE", "%X",
-__LINE__, 0x00000008L, "0000008", "%6.7ld",
-__LINE__, 0x00000318L, " 318", "%4X",
-__LINE__, 0x000172d8L, "94936", "%2ld",
-__LINE__, -0x056ccbfL, "-5688511", "%ld",
-__LINE__, 0x000000c7L, "+000199", "%+0.6d",
-__LINE__, 0x00000002L, "0X2", "%-#X",
-__LINE__, 0xfffff634L, "FFFFF634", "%.1X",
-__LINE__, -0x00001f3L, "-499", "%-ld",
-__LINE__, -0x000081bL, "-2075", "%-d",
-__LINE__, 0x000000b5L, "181", "%0d",
-__LINE__, 0xfe961ee8L, "fe961ee8", "%0x",
-__LINE__, 0x000028a2L, "10402", "%d",
-__LINE__, 0xffffffffL, "FFFFFFFF", "%.4X",
-__LINE__, -0x000058aL, "-1418", "%.3ld",
-__LINE__, 0x00001cebL, "1CEB", "%X",
-__LINE__, 0x00000021L, "21", "% X",
-__LINE__, 0x00000002L, "2", "%0d",
-__LINE__, -0x2f9bbf5L, "-49921013", "%.4ld",
-__LINE__, 0x00000e91L, "03729", "%#.5ld",
-__LINE__, 0xf1116740L, "f1116740", "%2x",
-__LINE__, 0x00014f72L, "14F72", "%X",
-__LINE__, 0xfffffcedL, "FFFFFCED", "%X",
-__LINE__, 0xffffffffL, "ffffffff", "%.5x",
-__LINE__, 0x0017cf0cL, " 1560332", "% 0ld",
-__LINE__, 0x0000000aL, "A", "% X",
-__LINE__, 0xff3a39d4L, "ff3a39d4", "%x",
-__LINE__, 0xfffef05fL, "FFFEF05F", "%X",
-__LINE__, 0xfedfe708L, "fedfe708", "%03.0x",
-__LINE__, 0x000345a0L, "345A0", "% X",
-__LINE__, -0x1ed5b6f7L, "-517322487", "%d",
-__LINE__, 0xd2d56c22L, "D2D56C22", "%0.X",
-__LINE__, 0x00002cbfL, "2CBF", "%.2X",
-__LINE__, 0x00000db4L, "db4", "%3x",
-__LINE__, -0x000b154L, "-45396", "%d",
-__LINE__, 0x002bf4c7L, "2BF4C7", "%X",
-__LINE__, 0x6954abf4L, "+1767156724", "%+d",
-__LINE__, 0xfffffffbL, "fffffffb", "%x",
-__LINE__, -0x29e0050eL, "-702547214", "%-0ld",
-__LINE__, -0x0014989L, "-84361", "%-#0.3ld",
-__LINE__, 0x001a557cL, "+1725820", "%+6.5d",
-__LINE__, -0x56689a81L, "-1449695873", "%.2d",
-__LINE__, 0x00000016L, " 16", "%05.X",
-__LINE__, 0x0001da1eL, " 121374", "% d",
-__LINE__, -0x04deac7L, "-5106375", "%03.4d",
-__LINE__, 0x000012b1L, "4785", "%d",
-__LINE__, 0x0009a116L, "9a116", "%-x",
-__LINE__, -0x0000003L, "-000003", "%4.6ld",
-__LINE__, 0x00000000L, "", "%.0x",
-__LINE__, 0x0000000aL, " A", "% 3X",
-__LINE__, 0xfffffff0L, "0xfffffff0", "%-#0.1x",
-__LINE__, 0x00000086L, "86", "%0X",
-__LINE__, 0x0000001fL, "31", "%-d",
-__LINE__, 0x0386f706L, "59176710", "%3.6ld",
-__LINE__, 0xffe437aeL, "0XFFE437AE", "%#X",
-__LINE__, 0x0e5405c6L, "e5405c6", "%-x",
-__LINE__, 0xfffdee46L, "FFFDEE46", "%+X",
-__LINE__, 0xff861e9dL, "FF861E9D", "%5.X",
-__LINE__, 0xfffff570L, "FFFFF570", "%-X",
-__LINE__, 0x045c90bdL, "45c90bd", "%0x",
-__LINE__, 0x000000aaL, "AA", "%+X",
-__LINE__, -0x747262eL, "-122103342", "%0ld",
-__LINE__, 0xffffad89L, "FFFFAD89", "%X",
-__LINE__, 0x00000018L, "18", "%0.2X",
-__LINE__, 0x00057a2dL, " 358957", "% #7.d",
-__LINE__, 0x73a0e21dL, "1939923485", "%ld",
-__LINE__, -0x00021e1L, "-8673", "%0d",
-__LINE__, 0x000000e9L, " 233", "% 06.3ld",
-__LINE__, 0xffffcc0dL, "ffffcc0d", "%x",
-__LINE__, 0x00000052L, "52", "%x",
-__LINE__, 0x01c155afL, "1C155AF", "%.5X",
-__LINE__, 0xffffffffL, "ffffffff", "%0.x",
-__LINE__, -0x00400a4L, "-262308", "%-d",
-__LINE__, -0x0000001L, "-0000001", "%#.7ld",
-__LINE__, 0x01fb9c99L, "1fb9c99", "% 03.5x",
-__LINE__, 0xffffffffL, "ffffffff", "%6.x",
-__LINE__, 0xff5e5eeaL, "FF5E5EEA", "%X",
-__LINE__, 0x0000000fL, "F", "%+0X",
-__LINE__, 0xfffffe3aL, "fffffe3a", "% x",
-__LINE__, 0xfffffffeL, "FFFFFFFE", "%-X",
-__LINE__, -0x0000007L, "-7", "%0ld",
-__LINE__, -0x002f635L, "-194101", "%d",
-__LINE__, -0x0000005L, "-5", "%ld",
-__LINE__, -0x0000059L, "-89", "%0ld",
-__LINE__, -0x1ccda96L, "-30202518", "%d",
-__LINE__, -0x0000002L, "-2", "%-d",
-__LINE__, 0xffffffdaL, "0XFFFFFFDA", "%#X",
-__LINE__, 0x00036cc5L, "224453", "%#d",
-__LINE__, 0x00000010L, "+16", "%+ld",
-__LINE__, 0x0b6039c7L, "190855623", "%d",
-__LINE__, -0x0000002L, "-002", "%#.3d",
-__LINE__, 0xfff3e746L, "FFF3E746", "%-4X",
-__LINE__, 0x0361b3deL, "361B3DE", "% 04X",
-__LINE__, 0xffffe6a2L, "ffffe6a2", "%-x",
-__LINE__, 0x00032790L, "0x0032790", "%#7.7x",
-__LINE__, 0xffe33b4eL, "ffe33b4e", "%-0x",
-__LINE__, -0x0094663L, "-607843", "%.3ld",
-__LINE__, -0x00a3efaL, "-671482", "%4d",
-__LINE__, 0x000000e6L, " 00E6", "%7.4X",
-__LINE__, 0x000125cbL, "125CB", "%+X",
-__LINE__, 0x0000b97eL, "b97e", "%x",
-__LINE__, -0x0000039L, "-57", "%+ld",
-__LINE__, 0xffffe39aL, "ffffe39a", "%5.4x",
-__LINE__, 0xffffffffL, "ffffffff", "%6.1x",
-__LINE__, -0xdee910cL, "-233738508", "%-#2d",
-__LINE__, -0x14044930L, "-335825200", "%6.ld",
-__LINE__, 0x00a81259L, "a81259", "%x",
-__LINE__, 0x020e74c6L, "20E74C6", "%X",
-__LINE__, -0x00000fbL, "-251", "%01.d",
-__LINE__, 0x034ceb45L, "34CEB45", "%5.X",
-__LINE__, 0xfeacb66aL, "feacb66a", "% x",
-__LINE__, 0x00003eb6L, "3EB6", "% X",
-__LINE__, 0x000009efL, "9ef", "% x",
-__LINE__, 0xf9d9dd07L, "F9D9DD07", "%0X",
-#ifndef __PCCNECV70__
-
-__LINE__, 0x000154d7L, "087255", "%.6ld",
-__LINE__, -0x000036eL, "-878", "%-ld",
-__LINE__, -0x0007dccL, "-32204", "% d",
-__LINE__, 0x000019dcL, "6620", "%d",
-__LINE__, 0xffffff6eL, "FFFFFF6E", "%2X",
-__LINE__, 0x00000016L, "0x16", "%-#x",
-__LINE__, 0xffdb3e96L, "ffdb3e96", "%+.5x",
-__LINE__, 0xffffffefL, "FFFFFFEF", "% 04.X",
-__LINE__, 0xffffffffL, "FFFFFFFF", "%5X",
-__LINE__, 0x000c08cdL, "C08CD", "%-X",
-__LINE__, 0x18de71eeL, "18de71ee", "%x",
-__LINE__, 0xffffffffL, "ffffffff", "% x",
-__LINE__, -0x00025bdL, "-009661", "%#.6d",
-__LINE__, 0x2f05de14L, " 788913684", "% 6.4ld",
-__LINE__, 0x0c99cf86L, "211406726", "%.5d",
-__LINE__, 0x09e6a21dL, " 166109725", "% 0d",
-__LINE__, -0x013da65L, "-1301093", "%+ld",
-__LINE__, 0x000003d0L, " 976", "% 4.2d",
-__LINE__, -0xef9e3ccL, "-251257804", "%-7.0d",
-__LINE__, 0x0000000cL, "+12", "%+00ld",
-__LINE__, 0xffffffe2L, "ffffffe2", "%x",
-__LINE__, 0x000000feL, "fe", "%-x",
-__LINE__, 0xfffffc5fL, "fffffc5f", "%x",
-__LINE__, -0x0005c55L, "-23637", "%d",
-__LINE__, -0x0111ff2L, "-1122290", "% 7.d",
-__LINE__, -0x1a1746e5L, "-437733093", "%.4ld",
-__LINE__, 0x00001007L, "004103", "%00.6d",
-__LINE__, 0xffffffe1L, "ffffffe1", "%x",
-__LINE__, 0x0000d80fL, "55311", "%d",
-__LINE__, 0x00000004L, "4", "%+X",
-__LINE__, 0xfffffffdL, "fffffffd", "%6x",
-__LINE__, -0x2afbcc3cL, "-721144892", "%4.6ld",
-__LINE__, 0x00377f96L, "377F96", "%6.X",
-__LINE__, 0xffffffc8L, "FFFFFFC8", "%0X",
-__LINE__, 0x007ed9d1L, "8313297", "%-3d",
-__LINE__, 0x00000000L, "0", "%-X",
-__LINE__, 0x001e122dL, "1970733", "%01.d",
-__LINE__, -0x000029bL, "-667", "%ld",
-__LINE__, -0x002f563L, "-193891", "% 2.5d",
-__LINE__, 0xfffffffeL, "fffffffe", "%+3.7x",
-__LINE__, 0xfff7658cL, "fff7658c", "%x",
-__LINE__, -0x0006d08L, "-0027912", "%7.7ld",
-__LINE__, 0x00000080L, "80", "%X",
-__LINE__, 0x0000078fL, " 1935", "% 6ld",
-__LINE__, 0xfffffffbL, "FFFFFFFB", "% X",
-__LINE__, 0x000000aeL, " AE", "%7.X",
-__LINE__, -0x000d6aaL, "-54954", "%-ld",
-__LINE__, 0xfffffffeL, "FFFFFFFE", "%6.X",
-__LINE__, 0x000003bfL, "+959", "%+d",
-__LINE__, -0x7242d04bL, "-1916981323", "% ld",
-__LINE__, 0xf0e6546fL, "F0E6546F", "% .7X",
-__LINE__, 0x047e196aL, "75372906", "%ld",
-__LINE__, 0x0240174eL, "240174E", "%+0X",
-__LINE__, -0x0000006L, "-006", "%.3ld",
-__LINE__, 0x00068aacL, "428716", "%#ld",
-__LINE__, 0xffffffa1L, "ffffffa1", "%0x",
-__LINE__, 0x000adab3L, "adab3", "%x",
-__LINE__, -0x00000aeL, "-0000174", "%7.7ld",
-__LINE__, 0x0f0a8f4bL, "f0a8f4b", "% x",
-__LINE__, 0xfee229bcL, "fee229bc", "%x",
-__LINE__, -0x275b8455L, "-660309077", "%.2ld",
-__LINE__, -0xca4b2a5L, "-212120229", "%d",
-__LINE__, 0x000000b5L, " 181", "%04.d",
-__LINE__, 0xfff213f2L, "FFF213F2", "%X",
-__LINE__, 0x00000003L, "3", "%-X",
-__LINE__, 0x0ebb978bL, "247175051", "%.6ld",
-__LINE__, 0xffffffcaL, "FFFFFFCA", "%X",
-__LINE__, -0x0000003L, "-03", "%+0.2d",
-__LINE__, -0x178ff86L, "-24706950", "%+d",
-__LINE__, 0x0000003cL, " 60", "%7.ld",
-__LINE__, -0x001012dL, "-65837", "%.5d",
-__LINE__, 0x03673fd2L, "3673fd2", "%.5x",
-__LINE__, -0x001fe74L, "-130676", "%#0.6ld",
-__LINE__, 0x004f6226L, "4f6226", "%-0x",
-__LINE__, 0xfffffa0fL, "fffffa0f", "%7x",
-__LINE__, 0xfffffff8L, "fffffff8", "%-.6x",
-__LINE__, -0x0000001L, "-1", "%#d",
-__LINE__, 0xffffe43dL, "ffffe43d", "%7x",
-__LINE__, 0x00009d47L, "0040263", "%7.7ld",
-__LINE__, 0xff0fc79fL, "FF0FC79F", "%-4.X",
-__LINE__, 0x2d610907L, "2d610907", "%x",
-__LINE__, -0x00002deL, "-734", "%04d",
-__LINE__, 0x0000036bL, " 36B", "%7.1X",
-__LINE__, 0x00000002L, "2", "%.0x",
-__LINE__, -0x1f577b3eL, "-525826878", "%d",
-__LINE__, 0x0000002dL, "45", "%#ld",
-__LINE__, 0xfffffffbL, "fffffffb", "%x",
-__LINE__, -0x0000004L, "-4", "%-.0d",
-__LINE__, 0x00016ba4L, "16ba4", "%x",
-__LINE__, -0x1ad853d5L, "-450384853", "% 0ld",
-__LINE__, 0x00366899L, "366899", "%2.x",
-__LINE__, 0x1659158bL, "1659158B", "%X",
-__LINE__, 0x000076c7L, "76c7", "%x",
-__LINE__, 0x00000674L, "674", "%0x",
-__LINE__, 0x016c9d8aL, "+23895434", "%+ld",
-__LINE__, 0xfffffc43L, "FFFFFC43", "%0X",
-__LINE__, 0xfff249d2L, "fff249d2", "%-2.x",
-__LINE__, 0xffffffddL, "ffffffdd", "%5x",
-__LINE__, 0xffffa7efL, "FFFFA7EF", "%0.3X",
-__LINE__, 0x030d4d06L, "30d4d06", "%x",
-__LINE__, -0x0e4694bL, "-14969163", "%d",
-__LINE__, 0x00000078L, "120", "%.3ld",
-__LINE__, -0x16c1273eL, "-381757246", "%0d",
-__LINE__, 0xffffd183L, "FFFFD183", "% 0X",
-__LINE__, -0x2dfdaddL, "-48224989", "%ld",
-__LINE__, -0x5767fe5cL, "-1466433116", "%ld",
-__LINE__, 0x01bea036L, "29270070", "%#4.3d",
-__LINE__, 0x00000027L, "27", "%-x",
-__LINE__, 0x0004d183L, "4D183", "%X",
-__LINE__, 0xffdaf9c8L, "FFDAF9C8", "%.7X",
-__LINE__, 0xfffffd95L, "fffffd95", "%x",
-__LINE__, -0x0059acbL, "-367307", "%00.d",
-__LINE__, 0x017d8db4L, "17d8db4", "% 05.x",
-__LINE__, 0x0001f084L, "001F084", "%5.7X",
-__LINE__, 0x00000006L, " 6", "% ld",
-__LINE__, 0x011b0802L, "18548738", "%.3ld",
-__LINE__, 0x00000006L, " 6", "%#3.d",
-__LINE__, 0xffffffffL, "ffffffff", "%6x",
-__LINE__, 0x00000001L, "1", "% x",
-__LINE__, 0x00000750L, " 01872", "% .5d",
-__LINE__, 0xfffffff9L, "fffffff9", "%x",
-__LINE__, -0x00f842cL, "-1016876", "%+d",
-__LINE__, -0x001dcf0L, "-122096", "%-0d",
-__LINE__, 0x000000c9L, "0XC9", "% #3X",
-__LINE__, 0x1e368e86L, "1e368e86", "%7x",
-__LINE__, -0x0001157L, "-4439", "% 03.4d",
-__LINE__, 0xfff91e87L, "FFF91E87", "%3.5X",
-__LINE__, 0x00000006L, "6", "%x",
-__LINE__, 0x00000bcaL, "3018", "%ld",
-__LINE__, 0x00495ff6L, "495ff6", "%01.0x",
-__LINE__, -0x0267f7aL, "-2523002", "% #5d",
-__LINE__, 0x00000060L, "96", "%-d",
-__LINE__, 0x000850c6L, "544966", "%#.1d",
-__LINE__, 0x00231457L, "231457", "%-6.4X",
-__LINE__, 0x0000000bL, "11", "%-d",
-__LINE__, 0x000003bdL, "957", "%#d",
-__LINE__, 0xfd51d970L, "FD51D970", "%+.7X",
-__LINE__, 0x000007bfL, "1983", "%-ld",
-__LINE__, 0x000034b2L, "34B2", "%0.X",
-__LINE__, 0x0000c18dL, "C18D", "%0.X",
-__LINE__, 0xffffbb83L, "ffffbb83", "% 3x",
-__LINE__, 0x000001d0L, "0x1d0", "%#x",
-__LINE__, -0x003c784L, "-247684", "%#ld",
-__LINE__, 0x0210cffaL, "210CFFA", "%X",
-__LINE__, -0x33093a1L, "-53515169", "% 0d",
-__LINE__, 0x00000001L, " 1", "% #ld",
-__LINE__, 0xffffaa53L, "ffffaa53", "%-4.5x",
-__LINE__, 0x2935c056L, "691388502", "%1.d",
-__LINE__, -0x0000001L, "-1", "%ld",
-__LINE__, 0x000013d1L, "0X013D1", "%+#2.5X",
-__LINE__, -0x000035cL, "-860", "%-.2d",
-__LINE__, 0x00000000L, " ", "%-4.X",
-__LINE__, -0x0000147L, "-327", "%d",
-__LINE__, 0x0a317eb0L, "171015856", "%.7d",
-__LINE__, 0x00000003L, "3", "%ld",
-__LINE__, 0x000001d6L, "1d6", "%-x",
-__LINE__, 0x18185214L, "404247060", "%-.2ld",
-__LINE__, 0x00574140L, "0574140", "%.7X",
-__LINE__, 0x00002ea5L, "02ea5", "%.5x",
-__LINE__, 0x00000005L, "5", "% x",
-__LINE__, 0xffc47ed6L, "ffc47ed6", "%-x",
-__LINE__, 0x0001f5daL, "0X1F5DA", "%#X",
-__LINE__, 0xfffffcc9L, "fffffcc9", "% x",
-__LINE__, 0x02586c98L, "2586C98", "%X",
-__LINE__, -0x0000036L, "-54", "% ld",
-__LINE__, 0x00064b57L, "412503", "%1.5d",
-__LINE__, -0x0000007L, "-7", "%#0.0ld",
-__LINE__, 0x00023a03L, "145923", "%ld",
-__LINE__, -0x0000065L, "-101", "%+#d",
-__LINE__, 0x00000208L, "208", "%X",
-__LINE__, 0x00e97728L, "15300392", "%-ld",
-__LINE__, 0x0000030aL, "+778", "%+d",
-__LINE__, 0xf4d7deeeL, "F4D7DEEE", "%+X",
-__LINE__, -0x000009aL, "-154", "%+.3ld",
-__LINE__, 0x000002c0L, "+704", "%+ld",
-__LINE__, 0x0067ec23L, "67ec23", "%x",
-__LINE__, 0x005ca7fcL, "+6072316", "%+d",
-__LINE__, 0xfffff5f1L, "fffff5f1", "%x",
-__LINE__, 0x00000601L, " 0X601", "%#7.2X",
-__LINE__, -0x0000057L, "-87", "% ld",
-__LINE__, -0x0000078L, " -120", "%7.d",
-__LINE__, -0x000001fL, "-31 ", "%-6d",
-__LINE__, 0x0160c000L, "23117824", "%ld",
-__LINE__, -0x0000007L, "-7", "%0ld",
-__LINE__, 0xfffffffeL, "fffffffe", "%+x",
-__LINE__, 0x5b6ef898L, "5b6ef898", "%+0x",
-__LINE__, 0x0009bfb6L, "638902", "%d",
-__LINE__, -0x0000145L, " -325", "%#6.0d",
-__LINE__, -0x508c048L, "-84459592", "%-5.ld",
-__LINE__, 0x00000002L, " 0x2", "% #4x",
-__LINE__, 0x0001486eL, "84078", "%#d",
-__LINE__, 0x006ac76aL, "6997866", "%.6d",
-__LINE__, 0xffffff98L, "FFFFFF98", "%X",
-__LINE__, 0xfffffe08L, "fffffe08", "%6.x",
-__LINE__, -0x24ef47eL, "-38728830", "%1.6ld",
-__LINE__, 0x39d1b2dbL, "39D1B2DB", "% X",
-__LINE__, 0xfffc9ce2L, "0xfffc9ce2", "%#x",
-__LINE__, 0x59485e14L, "1497914900", "%#4ld",
-__LINE__, 0x000022ebL, "22EB", "%3.X",
-__LINE__, 0xfa410352L, "FA410352", "%-X",
-__LINE__, -0x4a342f0L, "-77808368", "% ld",
-__LINE__, 0xef5825a4L, "EF5825A4", "%.6X",
-__LINE__, 0x01b0185aL, "0x1b0185a", "% #x",
-__LINE__, -0x0004290L, "-17040", "%.3d",
-__LINE__, -0x10f88659L, "-284722777", "%+6.2ld",
-__LINE__, 0x00003216L, "12822", "%-d",
-__LINE__, 0x4a31a219L, "1244766745", "%d",
-__LINE__, 0xffffffb5L, "FFFFFFB5", "%-X",
-__LINE__, 0x0000d586L, "D586", "%-2.X",
-__LINE__, 0x00008496L, "33942", "%1.d",
-__LINE__, -0x0000011L, "-17", "%1ld",
-__LINE__, 0x0000003cL, "3C", "%2.X",
-__LINE__, 0xfffffffeL, "FFFFFFFE", "%.3X",
-__LINE__, 0x0000152aL, "152A", "%X",
-__LINE__, 0xfffe876eL, "FFFE876E", "%X",
-__LINE__, -0x0003874L, "-14452", "%-ld",
-__LINE__, -0x004918aL, "-299402", "%#.6d",
-__LINE__, -0x000000cL, "-12", "%-d",
-__LINE__, 0xffffd812L, "FFFFD812", "%+X",
-__LINE__, -0x000000cL, "-12", "%0d",
-__LINE__, -0x0000229L, "-553", "%0d",
-__LINE__, 0x00002ab8L, "2AB8", "%4.X",
-__LINE__, 0x0000004bL, "+75", "%+ld",
-__LINE__, 0x001c3178L, " 1847672", "% ld",
-__LINE__, -0x0000006L, "-6", "%.0ld",
-__LINE__, 0x0003be65L, "245349", "%ld",
-__LINE__, -0x0000001L, "-1", "%#1ld",
-__LINE__, 0x0000007fL, "+127", "%+ld",
-__LINE__, 0x0000020eL, "526 ", "%-5ld",
-__LINE__, 0x00000002L, "2", "%d",
-__LINE__, 0x03bd0873L, "0X3BD0873", "%#X",
-__LINE__, 0x00093a52L, "604754", "%-2d",
-__LINE__, -0x00823fcL, "-0533500", "%+.7ld",
-__LINE__, 0x00000000L, " ", "%4.X",
-__LINE__, -0x0000001L, "-1", "%ld",
-__LINE__, 0xfff09edeL, "fff09ede", "%-x",
-__LINE__, 0x01e28c24L, "31624228", "%ld",
-__LINE__, 0x00001dccL, "1DCC", "%X",
-__LINE__, -0x0f0ea0dL, "-15788557", "%-00.ld",
-__LINE__, 0xffff73a1L, "FFFF73A1", "%X",
-__LINE__, -0x0004040L, "-16448", "%+#d",
-__LINE__, 0x0073b158L, "0x73b158", "%#7x",
-__LINE__, 0xfffff8ffL, "FFFFF8FF", "% 5X",
-__LINE__, -0x0000004L, "-4", "%0d",
-__LINE__, 0xffff56a3L, "ffff56a3", "%1.6x",
-__LINE__, -0x0000041L, "-65", "%0d",
-__LINE__, 0x00000009L, "+0000009", "%+2.7d",
-__LINE__, 0xffffe13dL, "0XFFFFE13D", "%+#2.X",
-__LINE__, -0x00002ceL, "-00718", "%.5ld",
-__LINE__, 0xffc53e28L, "ffc53e28", "%03.4x",
-__LINE__, 0x00000005L, "0X5", "%#X",
-__LINE__, 0x00000004L, "4", "%x",
-__LINE__, 0xe21b35ebL, "e21b35eb", "%-x",
-__LINE__, -0x0000098L, "-152", "%-ld",
-__LINE__, 0xffffff81L, "FFFFFF81", "%2X",
-__LINE__, 0x00000003L, "00003", "%.5ld",
-__LINE__, 0xfffffffcL, "fffffffc", "%+x",
-__LINE__, 0x000491f5L, "299509", "%1.ld",
-__LINE__, 0xf06bfd7dL, "F06BFD7D", "%X",
-__LINE__, -0x0000006L, "-6", "%0d",
-__LINE__, -0x0a4af7dL, "-10792829", "%-0d",
-__LINE__, -0x11a74efL, "-18511087", "%ld",
-__LINE__, 0x2dc95e17L, "768171543", "%-1.d",
-__LINE__, -0x0000001L, "-1", "%#ld",
-__LINE__, 0x00000033L, "51", "%-#d",
-__LINE__, 0x002d0219L, "2949657", "%ld",
-__LINE__, 0xfffffffdL, "FFFFFFFD", "%2.4X",
-__LINE__, 0x00000f20L, "+3872", "%+ld",
-__LINE__, -0x0000047L, "-071", "%4.3ld",
-__LINE__, 0x00000010L, " 16", "%6d",
-__LINE__, 0x00000000L, "0", "%0d",
-__LINE__, 0xffffff57L, "FFFFFF57", "%X",
-__LINE__, -0x0000700L, "-1792", "%-#d",
-__LINE__, -0x0000064L, "-100", "%-ld",
-__LINE__, 0xff26d49aL, "FF26D49A", "%-0X",
-__LINE__, -0x0000006L, "-6", "%.1ld",
-__LINE__, 0x1391edc5L, "1391edc5", "%.1x",
-__LINE__, 0x0000014aL, "330", "%-#ld",
-__LINE__, 0x07ecd1e1L, "7ecd1e1", "%6x",
-__LINE__, -0xa2b8898L, "-170625176", "%3.d",
-__LINE__, 0x00035287L, "0x35287", "%#.0x",
-__LINE__, 0x00000000L, "00000", "%0.5X",
-__LINE__, -0x0000153L, "-339", "%d",
-__LINE__, 0x0000ad6eL, " 44398", "% 0.d",
-__LINE__, 0x00000001L, "1", "%-X",
-__LINE__, -0x000000dL, "-13 ", "%-6.2d",
-__LINE__, -0x01bff8aL, "-1834890", "%d",
-__LINE__, 0x000a0fa8L, "+659368", "%+ld",
-__LINE__, 0xac044dc0L, "ac044dc0", "%.0x",
-__LINE__, 0x0003a729L, "239401", "%ld",
-__LINE__, -0x00004f0L, "-1264", "%+ld",
-__LINE__, 0x00000000L, "0", "%x",
-__LINE__, 0x00000012L, "12", "% x",
-__LINE__, 0xffff770bL, "ffff770b", "%7.1x",
-__LINE__, 0xd7458572L, "d7458572", "%x",
-__LINE__, 0x01f1b4f9L, "1f1b4f9", "% 0x",
-__LINE__, 0xfffb2198L, "0XFFFB2198", "% #1.X",
-__LINE__, 0x00ef6189L, " 15688073", "% ld",
-__LINE__, -0x3f0ae63L, "-66104931", "% #d",
-__LINE__, -0x0006075L, "-24693", "%ld",
-__LINE__, 0x000000a1L, "161", "%d",
-__LINE__, 0xfffffffcL, "fffffffc", "%3.2x",
-__LINE__, 0xff6b4125L, "FF6B4125", "%+5.X",
-__LINE__, 0x00000001L, " 1", "%6.d",
-__LINE__, -0x0000001L, "-1", "%+0d",
-__LINE__, -0x000096cL, "-2412", "%0.4d",
-__LINE__, 0x00039c6fL, "236655", "%.0d",
-__LINE__, 0x3625286cL, "908404844", "%.1d",
-__LINE__, 0xfffffffaL, "fffffffa", "%x",
-__LINE__, 0x00000000L, "0", "%X",
-__LINE__, 0x00c34353L, "12796755", "%#.4d",
-__LINE__, 0x000002dfL, "735", "%ld",
-__LINE__, 0xffff38faL, "FFFF38FA", "%5.1X",
-__LINE__, -0x000002aL, "-42", "%0.d",
-__LINE__, 0x0000077eL, "1918", "%ld",
-__LINE__, 0x000001f7L, "503", "%ld",
-__LINE__, 0x00000004L, "4", "%ld",
-__LINE__, 0x0021fb02L, "2226946", "%d",
-__LINE__, 0x007c858dL, "8160653", "%-0d",
-__LINE__, -0x0000109L, "-265", "%.0d",
-__LINE__, 0xfffffffaL, "fffffffa", "% x",
-__LINE__, 0x0097932dL, "97932d", "%+x",
-__LINE__, 0xfffbbd03L, "fffbbd03", "%-.5x",
-__LINE__, -0x0000005L, "-5", "%0d",
-__LINE__, 0x03ee3a95L, "65944213", "%ld",
-__LINE__, -0x0000002L, " -00002", "%7.5d",
-__LINE__, 0xea1a4e54L, "EA1A4E54", "%X",
-__LINE__, -0x000a9d6L, "-43478", "%+d",
-__LINE__, -0x0fd8d65L, "-16616805", "%5ld",
-__LINE__, 0x00000001L, "1", "%-d",
-__LINE__, 0x00000072L, "72", "%2.X",
-__LINE__, 0xffffff94L, "FFFFFF94", "%X",
-__LINE__, 0x00000d2aL, "D2A", "%+X",
-__LINE__, 0xffff614fL, "ffff614f", "%x",
-__LINE__, -0x0000018L, "-24", "%ld",
-__LINE__, 0x0000003bL, "059", "%2.3d",
-__LINE__, 0x0000001aL, "1A", "%0X",
-__LINE__, -0x0000109L, "-265", "%02ld",
-__LINE__, 0x00000f9dL, "3997", "%#1d",
-__LINE__, 0x0000001bL, "1b", "%x",
-__LINE__, 0xffffff07L, "ffffff07", "%x",
-__LINE__, 0xfff1a425L, "0xfff1a425", "%#x",
-__LINE__, 0x00000005L, "5", "%-1d",
-__LINE__, -0x53a6efdL, "-87715581", "%ld",
-__LINE__, 0x042f37dbL, "42F37DB", "%6.X",
-__LINE__, 0x00053bd5L, "+342997", "%+5ld",
-__LINE__, 0xffffffffL, "ffffffff", "% x",
-__LINE__, 0xffffffefL, "FFFFFFEF", "%6.X",
-__LINE__, -0x10ec29aL, "-17744538", "%+2.d",
-__LINE__, 0x01dcc901L, "1dcc901", "%x",
-__LINE__, 0x0007dc68L, "515176", "%-3.d",
-__LINE__, -0x0000062L, "-0098", "%#2.4d",
-__LINE__, 0x00000000L, " ", "%3.0X",
-__LINE__, -0x00000deL, "-222", "%ld",
-__LINE__, 0x000c1fb8L, "C1FB8", "%0X",
-__LINE__, 0x0005bf58L, "5BF58", "%X",
-__LINE__, -0x000dd1bL, "-56603", "%-03.1d",
-__LINE__, 0x00000b14L, "B14", "%+3.X",
-__LINE__, 0x00000799L, "799", "%-x",
-__LINE__, 0xfffffffaL, "fffffffa", "%x",
-__LINE__, 0x00000003L, "0x00003", "% #7.5x",
-__LINE__, -0x002b9f1L, "-178673", "%+d",
-__LINE__, -0x001b817L, "-112663", "%0d",
-__LINE__, 0xf6f98533L, "f6f98533", "%.1x",
-__LINE__, 0x00338ffcL, "3379196", "%d",
-__LINE__, 0x0409e9b5L, "0X409E9B5", "%#X",
-__LINE__, 0x00b8e98eL, " 12118414", "% 0d",
-__LINE__, -0x002a8f6L, "-174326", "%ld",
-__LINE__, 0x13bb9722L, "331061026", "%0d",
-__LINE__, 0x00063c71L, "63c71", "%x",
-__LINE__, 0xfffffe37L, "FFFFFE37", "%.1X",
-__LINE__, 0xffff7b3eL, "ffff7b3e", "%+.1x",
-__LINE__, 0x005eeab1L, "5eeab1", "%+x",
-__LINE__, 0xffc69e99L, "ffc69e99", "%x",
-__LINE__, -0x000005cL, " -92", "%5ld",
-__LINE__, 0x07d8fa8aL, "7d8fa8a", "%x",
-__LINE__, 0x00030e0aL, "200202", "%-4.1d",
-__LINE__, 0x00001dc1L, "1DC1", "%.0X",
-__LINE__, 0x00000008L, "8", "%0ld",
-__LINE__, -0x01b5397L, "-1790871", "%3.d",
-__LINE__, 0x27fbb4b5L, "27fbb4b5", "%x",
-__LINE__, -0xe3fdcfcL, "-239066364", "%4ld",
-__LINE__, 0x0008bcb1L, "8bcb1", "%0x",
-__LINE__, 0xffff039eL, "ffff039e", "%.6x",
-__LINE__, 0x000d0bd4L, "d0bd4", "%-x",
-__LINE__, 0x00000000L, "+0", "%+d",
-__LINE__, -0x2a49ea4L, "-44342948", "%1d",
-__LINE__, -0x0000055L, "-85", "%0d",
-__LINE__, -0x0000a05L, "-2565", "%3.3ld",
-__LINE__, -0x000000bL, "-11 ", "%-4d",
-__LINE__, 0xfff30444L, "FFF30444", "%7.X",
-__LINE__, 0x0000003fL, "63", "%-0d",
-__LINE__, 0x00046779L, "46779", "%X",
-__LINE__, 0x000028d7L, " 0X28D7", "%#7.X",
-__LINE__, 0x00000019L, " 19", "%5x",
-__LINE__, 0x0032291dL, "3287325", "%2.ld",
-__LINE__, 0x00057afaL, "57AFA", "%X",
-__LINE__, 0xfffe8c64L, "fffe8c64", "%3.4x",
-__LINE__, -0x624110d6L, "-1648431318", "%+6d",
-__LINE__, 0x0000001aL, " 26", "% 5.d",
-__LINE__, 0xfffffffdL, "FFFFFFFD", "%6.X",
-__LINE__, 0x00199490L, "1676432", "%-1d",
-__LINE__, -0xfff8265L, "-268403301", "%-0ld",
-__LINE__, 0x0000000eL, "e", "%-x",
-__LINE__, 0x00c38aecL, "c38aec", "%x",
-__LINE__, -0x00658f4L, "-415988", "%#ld",
-__LINE__, 0x0066ac4eL, "6728782", "%0d",
-__LINE__, 0xc4a808d5L, "c4a808d5", "%x",
-__LINE__, 0x00000000L, " 0", "%6.1x",
-__LINE__, 0x00066d24L, "66d24", "%x",
-__LINE__, 0x00002117L, "2117", "%X",
-__LINE__, 0xfe06fdf4L, "FE06FDF4", "%0X",
-__LINE__, 0xfffffff9L, "fffffff9", "%x",
-__LINE__, 0x1c6bb795L, "+476821397", "%+d",
-__LINE__, 0xfffffba4L, "FFFFFBA4", "%X",
-__LINE__, 0xfffd7d44L, "fffd7d44", "%0x",
-__LINE__, 0x0019dd17L, "1694999", "%d",
-__LINE__, 0x6475851eL, "0x6475851e", "% #7.x",
-__LINE__, -0x00330d5L, "-209109", "%0ld",
-__LINE__, 0x009f53f7L, "09F53F7", "%+6.7X",
-__LINE__, -0x00172f9L, " -94969", "%7.5ld",
-__LINE__, 0xffffffdcL, "FFFFFFDC", "%X",
-__LINE__, -0x013bdecL, "-1293804", "%+#2ld",
-__LINE__, 0xfff845c0L, "fff845c0", "%+7.x",
-__LINE__, -0x0fbe712L, "-16508690", "%.7d",
-__LINE__, 0xffffe13fL, "ffffe13f", "%x",
-__LINE__, 0xbbc19951L, "BBC19951", "%-4X",
-__LINE__, -0x28d6d1bL, "-42822939", "%#d",
-__LINE__, -0x93cda6bL, "-154983019", "%-d",
-__LINE__, 0xffc93342L, "FFC93342", "%7.X",
-__LINE__, 0x072ac8b3L, " 120244403", "% ld",
-__LINE__, 0xfff8d17bL, "FFF8D17B", "% X",
-__LINE__, 0x00000da5L, "DA5", "%0.X",
-__LINE__, 0x055ad3acL, "0x55ad3ac", "%#1x",
-__LINE__, 0x00000e5aL, " 3674", "% .4ld",
-__LINE__, 0xffffff79L, "FFFFFF79", "%+X",
-__LINE__, 0xffffe167L, "ffffe167", "%+5x",
-__LINE__, 0x0000fa50L, "0064080", "%.7ld",
-__LINE__, 0x00000001L, "1", "%-d",
-__LINE__, 0xfffffffeL, "fffffffe", "%x",
-__LINE__, 0x000009acL, " 2476", "% #2.ld",
-__LINE__, 0x00000e78L, "0003704", "%.7ld",
-__LINE__, -0x000dfc3L, "-57283", "%6.d",
-__LINE__, 0x00000ee0L, "EE0", "%0X",
-__LINE__, -0x293703b3L, "-691471283", "%ld",
-__LINE__, 0x000073e8L, " 73e8", "%6x",
-__LINE__, 0xffffdffdL, "ffffdffd", "%5.5x",
-__LINE__, 0x00000004L, "4", "%+00.x",
-__LINE__, 0x00000008L, "0X8", "%#X",
-__LINE__, 0x0003044cL, "3044c", "%0x",
-__LINE__, 0xffc2095eL, "FFC2095E", "%0X",
-__LINE__, 0x00000aacL, "0002732", "%-.7ld",
-__LINE__, 0xffffff79L, "FFFFFF79", "%+1.X",
-__LINE__, 0x53a0f94aL, " 1403058506", "% 2.4ld",
-__LINE__, 0x000e928dL, "e928d", "%x",
-__LINE__, 0x0024127aL, "2364026", "%5.d",
-__LINE__, 0x000f7c1cL, " 1014812", "% 2.d",
-__LINE__, -0x000003dL, "-61 ", "%-#4ld",
-__LINE__, -0x0000122L, "-290", "%+ld",
-__LINE__, 0x00000006L, "+6", "%+0d",
-__LINE__, 0x00000129L, " 000129", "%7.6X",
-__LINE__, 0x15d873e5L, " 366506981", "% 5.7d",
-__LINE__, 0x00000001L, "1", "%d",
-__LINE__, 0x038d6110L, "+59597072", "%+d",
-__LINE__, 0x0f46ccc3L, "256298179", "%-1.4d",
-__LINE__, 0xfe434d21L, "fe434d21", "%x",
-__LINE__, -0x179797d7L, "-395810775", "%d",
-__LINE__, 0xe35807bfL, "e35807bf", "%x",
-__LINE__, 0x00000003L, " +3", "%+7d",
-__LINE__, 0x017e699eL, "25061790", "%#ld",
-__LINE__, -0x0000029L, "-41", "%d",
-__LINE__, 0xffffff11L, "ffffff11", "%1.x",
-__LINE__, -0x0001bf6L, "-7158", "%+0ld",
-__LINE__, 0xffffff4bL, "FFFFFF4B", "%4X",
-__LINE__, -0x0000040L, "-64", "%ld",
-__LINE__, 0x000034d6L, "+13526", "%+ld",
-__LINE__, 0xffffffa7L, "ffffffa7", "%x",
-__LINE__, 0xfffffe8eL, "fffffe8e", "%+.3x",
-__LINE__, 0x00000000L, "0", "%0.1d",
-__LINE__, -0x007cdf1L, "-511473", "%ld",
-__LINE__, 0xfffffeefL, "FFFFFEEF", "%-X",
-__LINE__, 0x00002d91L, "2d91", "%x",
-__LINE__, -0x000025bL, "-603", "%#ld",
-__LINE__, -0x000001bL, "-27", "%-ld",
-__LINE__, 0x042b6752L, "42B6752", "%+X",
-__LINE__, -0x75afb0a6L, "-1974448294", "% ld",
-__LINE__, -0x0000001L, "-1", "%ld",
-__LINE__, 0x00000542L, " 1346", "%6d",
-__LINE__, -0x0000010L, "-16", "%+0d",
-__LINE__, 0xfffed8f7L, "FFFED8F7", "%5.X",
-__LINE__, 0x0541852eL, "541852e", "% 2.x",
-__LINE__, 0xff22aec3L, "ff22aec3", "% .1x",
-__LINE__, 0x5e34b745L, "1580513093", "%ld",
-__LINE__, 0xfffffff3L, "fffffff3", "%x",
-__LINE__, 0x0eda7b86L, "+249199494", "%+.3d",
-__LINE__, 0xffffe40fL, "ffffe40f", "%+x",
-__LINE__, -0x0003484L, "-13444", "%-1.5ld",
-__LINE__, 0x0000334bL, " 13131", "%6.ld",
-__LINE__, -0x0000149L, "-329", "%ld",
-__LINE__, 0x00000001L, " 001", "% 5.3x",
-__LINE__, 0xffeaa035L, "ffeaa035", "%+3.5x",
-__LINE__, 0x00211dffL, "2170367", "%ld",
-__LINE__, 0x007e91f4L, "7e91f4", "%x",
-__LINE__, 0xfffffffcL, "0xfffffffc", "%+#5x",
-__LINE__, 0xfffffffcL, "FFFFFFFC", "%6.X",
-__LINE__, 0x0156a9b5L, "156a9b5", "%x",
-__LINE__, 0xfffffe58L, "fffffe58", "%+x",
-__LINE__, 0xffff8c66L, "FFFF8C66", "%.0X",
-__LINE__, 0x00000000L, "0", "%d",
-__LINE__, 0x00000005L, " 5", "%7.d",
-__LINE__, -0x0000002L, "-2", "%ld",
-__LINE__, 0x000076b9L, " 30393", "% ld",
-__LINE__, 0x00003824L, "3824", "%4X",
-__LINE__, 0x00000cdfL, " CDF", "% 7X",
-__LINE__, 0x017c9e8fL, "17C9E8F", "%-X",
-__LINE__, -0x20f582dL, "-34560045", "%-.5d",
-__LINE__, 0x0000732eL, " 29486", "% 7.ld",
-__LINE__, 0xffffffffL, "FFFFFFFF", "%+0X",
-__LINE__, 0xf379a4a2L, "F379A4A2", "% .7X",
-__LINE__, -0x0000028L, "-40", "%-d",
-__LINE__, 0xe73cf79eL, "e73cf79e", "%x",
-__LINE__, 0x00000002L, " 2", "%7ld",
-__LINE__, -0x00029b1L, "-10673", "%-#1.ld",
-__LINE__, -0x0002a58L, "-10840", "%3.d",
-__LINE__, 0x00000002L, "2", "%-X",
-__LINE__, 0xfffffffcL, "FFFFFFFC", "%X",
-__LINE__, -0x000003aL, " -58", "%5ld",
-__LINE__, 0x0245ef3bL, "245ef3b", "%.3x",
-__LINE__, 0x00026ccaL, "158922", "%-06.3ld",
-__LINE__, 0x01016fd3L, "16871379", "%-d",
-__LINE__, 0x000016fcL, "5884", "%0ld",
-__LINE__, -0x00007fbL, " -2043", "%7.3d",
-__LINE__, 0xfff73d3cL, "fff73d3c", "%0x",
-__LINE__, -0x0000110L, "-272", "% 04.3d",
-__LINE__, 0x0000000eL, " 014", "% 04ld",
-__LINE__, -0x0000039L, "-57", "%.0ld",
-__LINE__, 0x00000c95L, "c95", "%0x",
-__LINE__, 0xffff3b2eL, "ffff3b2e", "%x",
-__LINE__, 0xfffffffeL, "FFFFFFFE", "%X",
-__LINE__, 0x00000015L, "21", "%.1d",
-__LINE__, 0x0000000cL, "+12", "%+ld",
-__LINE__, 0x00000000L, "0", "%+X",
-__LINE__, 0xfffc9a14L, "fffc9a14", "%-.5x",
-__LINE__, 0x0000003cL, "60", "%.2ld",
-__LINE__, -0x0000023L, " -35", "%6.d",
-__LINE__, 0x00000740L, "1856", "%ld",
-__LINE__, 0x00000160L, "160", "% 3.X",
-__LINE__, 0x00000006L, " 6", "%5.X",
-__LINE__, -0x0000677L, "-1655", "%.3ld",
-__LINE__, 0x12709c7eL, "12709C7E", "%.7X",
-__LINE__, 0x0000090fL, "+2319", "%+#d",
-__LINE__, 0xffffffe0L, "0xffffffe0", "%#4.1x",
-__LINE__, 0x00132ce0L, "1256672", "%ld",
-__LINE__, 0x00000059L, "59", "%+X",
-__LINE__, -0x0000017L, "-23", "%0d",
-__LINE__, -0x01fade6L, "-2076134", "%-4.3ld",
-__LINE__, 0x000df3faL, "914426", "%.5ld",
-__LINE__, 0xfffffd0fL, "fffffd0f", "%7x",
-__LINE__, -0x000c212L, "-49682", "%0.1ld",
-__LINE__, 0xffff8bcbL, "FFFF8BCB", "%.3X",
-__LINE__, 0x0000000aL, "a", "% x",
-__LINE__, 0x00000021L, "21", "%x",
-__LINE__, -0x0000040L, "-64", "% 1ld",
-__LINE__, 0x00000009L, " 9", "%6.ld",
-__LINE__, -0x0000d67L, "-3431", "% 5.3d",
-__LINE__, 0x03a85f1bL, "61366043", "%ld",
-__LINE__, 0x00000035L, "000053", "%0.6d",
-__LINE__, 0xfffda5cbL, "fffda5cb", "%+x",
-__LINE__, 0xffffff78L, "FFFFFF78", "%-7.0X",
-__LINE__, 0xfffffd6dL, "fffffd6d", "%7.x",
-__LINE__, 0xfffffc08L, "fffffc08", "%7.3x",
-__LINE__, 0x00003335L, " 13109", "% #d",
-__LINE__, -0x0000002L, " -2", "%5.d",
-__LINE__, -0x13767a48L, "-326531656", "%+ld",
-__LINE__, 0x00000be5L, "3045", "%4.0ld",
-__LINE__, 0xfffdb28cL, "FFFDB28C", "%X",
-__LINE__, 0x00127118L, "1208600", "%ld",
-__LINE__, 0x00000086L, " 134", "% ld",
-__LINE__, 0x0002214cL, "2214c", "%+x",
-__LINE__, 0x0000a0c2L, " a0c2", "%5.0x",
-__LINE__, -0x000007cL, "-124", "%ld",
-__LINE__, 0x0000012aL, "00298", "%3.5d",
-__LINE__, 0xfd4f1257L, "FD4F1257", "%+2.X",
-__LINE__, 0xffffd8aaL, "ffffd8aa", "%5x",
-__LINE__, -0x00000a7L, "-167", "%+ld",
-__LINE__, -0x0009c69L, "-40041", "%0.0ld",
-__LINE__, 0x02230418L, "35849240", "%-0.6ld",
-__LINE__, 0x00000000L, " 0", "%6x",
-__LINE__, 0xfffff184L, "fffff184", "%02.5x",
-__LINE__, -0x0ae967bL, "-11441787", "%d",
-__LINE__, 0x0015de3aL, "1433146", "%-5.3d",
-__LINE__, -0x0071e93L, "-466579", "%1.ld",
-__LINE__, 0xfffff8bdL, "fffff8bd", "%+x",
-__LINE__, -0x00000e4L, "-228", "%+ld",
-__LINE__, 0x000001d8L, " 472", "% .3ld",
-__LINE__, 0x00315faaL, "315faa", "%-0x",
-__LINE__, 0x00000e59L, "e59", "%0x",
-__LINE__, -0x0000005L, "-5", "%ld",
-__LINE__, 0x000018ecL, "6380", "%ld",
-__LINE__, 0xfffffff9L, "fffffff9", "%5.2x",
-__LINE__, -0xe7cfd39L, "-243072313", "%-d",
-__LINE__, 0x0002c30bL, "2C30B", "%1.2X",
-__LINE__, 0x0000007aL, "7A", "%X",
-__LINE__, 0xf604ecb2L, "F604ECB2", "%2X",
-__LINE__, -0x05f602cL, "-6250540", "%d",
-__LINE__, 0xffff9c86L, "ffff9c86", "%2.x",
-__LINE__, -0x00d7f55L, "-884565", "%#d",
-__LINE__, 0xd2a37824L, "D2A37824", "%4X",
-__LINE__, 0x00000000L, "", "%-.0x",
-__LINE__, 0x000d4b51L, "0d4b51", "%3.6x",
-__LINE__, 0x000ecd97L, "ecd97", "% x",
-__LINE__, -0x0000018L, "-024", "%+04ld",
-__LINE__, -0x009f292L, "-651922", "%ld",
-__LINE__, -0x0002da9L, "-11689", "%-0ld",
-__LINE__, -0x000a218L, "-41496", "%4.5d",
-__LINE__, 0xffff85acL, "FFFF85AC", "% 04.X",
-__LINE__, -0x0d9ffbeL, "-14286782", "%0d",
-__LINE__, 0xfb18cc8eL, "fb18cc8e", "%x",
-__LINE__, 0xffffe5d3L, "FFFFE5D3", "%-X",
-__LINE__, 0x00000000L, "0", "%x",
-__LINE__, -0x0000006L, "-6", "% d",
-__LINE__, 0x0002fc62L, "2fc62", "% 03.x",
-__LINE__, 0x00000000L, "00", "%.2d",
-__LINE__, -0x00000fdL, " -253", "%6ld",
-__LINE__, -0x000000bL, "-11", "%d",
-__LINE__, -0x00042a3L, "-17059", "% 6d",
-__LINE__, 0x00000002L, "2", "% X",
-__LINE__, -0x61ead93eL, "-1642780990", "%-0d",
-__LINE__, 0xf2e61f6dL, "f2e61f6d", "%-.4x",
-__LINE__, 0xffd31b93L, "ffd31b93", "%x",
-__LINE__, -0x0000008L, "-8", "%ld",
-__LINE__, 0xffffffffL, "ffffffff", "%00x",
-__LINE__, 0x000000fbL, "+000251", "%+2.6d",
-__LINE__, 0x00000015L, " 15", "%4.X",
-__LINE__, 0x06ec6d96L, "6EC6D96", "%+2.X",
-__LINE__, 0xffff1df7L, "0xffff1df7", "% #1x",
-__LINE__, -0x000004bL, "-75", "%-ld",
-__LINE__, 0x00000008L, "8", "%#.0d",
-__LINE__, 0x00001355L, "4949", "%3.4ld",
-__LINE__, -0x00000f7L, "-247", "%d",
-__LINE__, 0x0000001fL, "31", "%.2ld",
-__LINE__, 0x0000d556L, "D556", "%-X",
-__LINE__, 0xffffd5a5L, "ffffd5a5", "% x",
-__LINE__, -0x0000e34L, "-3636", "%#d",
-__LINE__, -0x0000007L, "-7", "%d",
-__LINE__, 0x01ba10a4L, "1ba10a4", "%x",
-__LINE__, 0xfffff759L, "FFFFF759", "% X",
-__LINE__, -0x80d0adbL, "-135072475", "%d",
-__LINE__, 0x0002bf61L, "2bf61", "%x",
-__LINE__, 0xffff008bL, "FFFF008B", "%-7X",
-__LINE__, 0x00000e72L, "E72", "%X",
-__LINE__, -0x00000eaL, "-234", "%0ld",
-__LINE__, -0x0007b9dL, "-0031645", "%0.7ld",
-__LINE__, 0x0001baaaL, "0X1BAAA", "%#4X",
-__LINE__, 0x0000a57fL, " a57f", "%6.x",
-__LINE__, -0x21a73726L, "-564606758", "%ld",
-__LINE__, 0x06f45c9fL, "0x6f45c9f", "%#.3x",
-__LINE__, 0x00018e5dL, "101981", "%-d",
-__LINE__, 0x0001e69aL, "124570", "%-d",
-__LINE__, -0x0000d26L, " -3366", "% 07.d",
-__LINE__, 0x00000000L, "+", "%+0.ld",
-__LINE__, 0x00003916L, "14614", "%ld",
-__LINE__, 0xfffffd8fL, "fffffd8f", "%-3.x",
-__LINE__, 0x00000011L, "11", "%x",
-__LINE__, 0x000000e7L, "E7", "%X",
-__LINE__, 0xfdf9d89bL, "FDF9D89B", "%X",
-__LINE__, 0x00000a7cL, "a7c", "%x",
-__LINE__, 0x0000003fL, "00003F", "%.6X",
-__LINE__, 0xffffe729L, "FFFFE729", "%X",
-__LINE__, 0xfffffffeL, "fffffffe", "% .6x",
-__LINE__, -0x0000a4bL, "-2635", "%+d",
-__LINE__, 0xffffff50L, "ffffff50", "%0.7x",
-__LINE__, 0xfaf57e8bL, "faf57e8b", "% 4.x",
-__LINE__, -0x0000056L, "-86", "%ld",
-__LINE__, 0x08ed2a4dL, "8ed2a4d", "%4x",
-__LINE__, 0xff8d9081L, "FF8D9081", "%+0.X",
-__LINE__, 0x002730a1L, "2568353", "%4d",
-__LINE__, 0xffff9564L, "ffff9564", "%x",
-__LINE__, -0x0000006L, " -6", "%4ld",
-__LINE__, -0x19890310L, "-428409616", "%0ld",
-__LINE__, 0xd2ce636cL, "d2ce636c", "%+x",
-__LINE__, -0x00001feL, "-510", "%d",
-__LINE__, 0x00000006L, "0000006", "%+0.7x",
-__LINE__, 0xffffffc2L, "0XFFFFFFC2", "%-#.5X",
-__LINE__, -0x00000fdL, "-253", "%+d",
-__LINE__, 0x000216aaL, "0x216aa", "%#x",
-__LINE__, 0xffe36c66L, "ffe36c66", "%x",
-__LINE__, 0x00000002L, "2", "%x",
-__LINE__, -0x0000025L, "-37", "% d",
-__LINE__, 0x0000007eL, "126", "%d",
-__LINE__, 0x0003c1f9L, "+246265", "%+ld",
-__LINE__, 0x00000001L, "1", "%ld",
-__LINE__, -0x0000001L, "-1", "%ld",
-__LINE__, -0x00539e7L, "-342503", "%06.ld",
-__LINE__, 0x00000d42L, " 3394", "%#6.ld",
-__LINE__, 0xf73b7c4eL, "F73B7C4E", "%X",
-__LINE__, 0x00000022L, "22", "%.1x",
-__LINE__, 0xffffa883L, "FFFFA883", "%X",
-__LINE__, 0x016ec247L, "16ec247", "%x",
-__LINE__, 0x00000019L, "19", "%+X",
-__LINE__, 0x0000665aL, "665A", "% 2.X",
-__LINE__, 0xfffffffcL, "FFFFFFFC", "%-5.X",
-__LINE__, 0x008e3fbcL, "8E3FBC", "%X",
-__LINE__, 0xfffffffaL, "FFFFFFFA", "%X",
-__LINE__, 0x1b806597L, "461399447", "%.2d",
-__LINE__, 0x00000366L, "0000870", "%#1.7ld",
-__LINE__, 0x0001d92eL, "1d92e", "%x",
-__LINE__, 0x000104ceL, "104CE", "%-X",
-__LINE__, 0xfffffe4cL, "fffffe4c", "%x",
-__LINE__, 0x000000e9L, "E9", "%X",
-__LINE__, 0x000a855cL, " 689500", "% d",
-__LINE__, 0x00000075L, "75", "% X",
-__LINE__, -0x0000026L, "-38", "%ld",
-__LINE__, 0xfffff169L, "fffff169", "%-04.2x",
-__LINE__, 0xffffff6fL, "ffffff6f", "%x",
-__LINE__, 0x00000003L, "0x3", "%#x",
-__LINE__, 0x00623babL, "6437803", "%.0d",
-__LINE__, -0x2260224cL, "-576725580", "%ld",
-__LINE__, 0xe7e7a998L, "E7E7A998", "%.1X",
-__LINE__, 0x00000005L, "5", "%X",
-__LINE__, 0x0000b560L, "0xb560", "%#x",
-__LINE__, 0xfe11854dL, "fe11854d", "%-.5x",
-__LINE__, 0x00190014L, "1638420", "%ld",
-__LINE__, 0x0001d22aL, "0X1D22A", "%-#X",
-__LINE__, 0x00000c16L, "c16", "%2x",
-__LINE__, 0x00000d1aL, "3354", "%#d",
-__LINE__, 0x000165f6L, "91638", "%d",
-__LINE__, 0xfffff557L, "0XFFFFF557", "%#X",
-__LINE__, 0x00000588L, " 588", "%07.X",
-__LINE__, 0xf4a72708L, "f4a72708", "%x",
-__LINE__, 0xfff1cba9L, "0xfff1cba9", "% #2.5x",
-__LINE__, 0x000333a4L, "209828", "%d",
-__LINE__, 0x0000179bL, "179B", "% 2.X",
-__LINE__, 0x00000460L, "1120", "%0ld",
-__LINE__, 0xffffff89L, "FFFFFF89", "%X",
-__LINE__, -0x0000012L, "-18", "%ld",
-__LINE__, 0x00004fe0L, "20448", "%0.d",
-__LINE__, 0x00532e77L, "532e77", "%00.x",
-__LINE__, 0xf7b92efeL, "f7b92efe", "%0x",
-__LINE__, -0x0000243L, "-579", "%+1.d",
-__LINE__, 0x34894bb7L, "+881413047", "%+d",
-__LINE__, 0xfffaa189L, "FFFAA189", "% 6X",
-__LINE__, -0x0000579L, "-1401", "%+ld",
-__LINE__, 0x005acb12L, "5acb12", "%5.0x",
-__LINE__, 0xffff890aL, "FFFF890A", "%X",
-__LINE__, 0x010dff2fL, "10DFF2F", "%.7X",
-__LINE__, 0x00005a7fL, "23167", "%#ld",
-__LINE__, 0x000005e3L, "1507", "%#3d",
-__LINE__, -0xa815bcbL, "-176249803", "%d",
-__LINE__, 0xffffffffL, "ffffffff", "%+x",
-__LINE__, 0xfffe0ff7L, "fffe0ff7", "%3x",
-__LINE__, 0xffffffffL, "0XFFFFFFFF", "%#2.1X",
-__LINE__, -0x1cc5ea52L, "-482732626", "%6.d",
-__LINE__, 0x000425edL, "+0271853", "%+.7d",
-__LINE__, 0x00000001L, "1", "%+x",
-__LINE__, -0x48f2a72L, "-76491378", "%7.0d",
-__LINE__, 0xfffffff7L, "FFFFFFF7", "% 0X",
-__LINE__, 0xfd8ffc0aL, "fd8ffc0a", "%.1x",
-__LINE__, 0x0001f56dL, " 1F56D", "%+7.2X",
-__LINE__, 0x000000dbL, " DB", "%6.X",
-__LINE__, 0xffffffc2L, "ffffffc2", "%x",
-__LINE__, 0x00000001L, "001", "%03ld",
-__LINE__, 0xffd89f58L, "ffd89f58", "% 0.x",
-__LINE__, 0xfe1a72fcL, "fe1a72fc", "%x",
-__LINE__, 0xfffff9b6L, "FFFFF9B6", "%X",
-__LINE__, 0x00243633L, "243633", "%X",
-__LINE__, 0x00821bc7L, "+8526791", "%+#0ld",
-__LINE__, 0xfe63f348L, "0XFE63F348", "%#3X",
-__LINE__, 0xff729f19L, "ff729f19", "%4x",
-__LINE__, 0xffff570fL, "FFFF570F", "%+X",
-__LINE__, 0x00a57a42L, "10844738", "%6.3d",
-__LINE__, 0xfe4a3ed0L, "FE4A3ED0", "%6.X",
-__LINE__, 0x00000000L, "0", "%d",
-__LINE__, 0x000001bbL, "01bb", "% .4x",
-__LINE__, 0x02b4a1e9L, "2b4a1e9", "%-7.x",
-__LINE__, 0x31750683L, "31750683", "%x",
-__LINE__, 0x00001cd7L, "7383", "%#ld",
-__LINE__, 0x0000079dL, "1949", "%d",
-__LINE__, 0xffb8ff3bL, "FFB8FF3B", "%X",
-__LINE__, 0x00a768b6L, "0A768B6", "%-6.7X",
-__LINE__, 0x1c665b48L, "0X1C665B48", "% #X",
-__LINE__, -0x000037dL, "-000893", "%3.6d",
-__LINE__, 0x29890443L, "29890443", "%+0x",
-__LINE__, 0x000000e5L, "e5 ", "%-4x",
-__LINE__, 0xfff2b5faL, "FFF2B5FA", "%X",
-__LINE__, -0x5d32c2bL, "-97725483", "%05ld",
-__LINE__, -0x00016c5L, " -05829", "%+#7.5ld",
-__LINE__, 0x00000644L, "644", "%X",
-__LINE__, -0x018c027L, "-1622055", "%+.1d",
-__LINE__, 0x0000013cL, "0x13c", "%#x",
-__LINE__, 0x00000009L, "+9", "%+#ld",
-__LINE__, 0x00000000L, "0", "%ld",
-__LINE__, -0x018eb19L, "-1633049", "%4.3ld",
-__LINE__, 0xfffff429L, "FFFFF429", "% X",
-__LINE__, 0x0032de67L, "32DE67", "%X",
-__LINE__, 0x0016bdfaL, " 1490426", "% .2ld",
-__LINE__, 0x00000065L, "65", "%+.0X",
-__LINE__, 0x00000072L, " 72", "%+4.2X",
-__LINE__, 0x00075119L, "75119", "%2x",
-__LINE__, 0x000000b8L, "b8", "%x",
-__LINE__, 0x000000d0L, "d0", "%x",
-__LINE__, 0x000000b9L, "b9", "%x",
-__LINE__, 0x003fda9dL, " 4184733", "% #3.d",
-__LINE__, 0x00029a24L, "170532", "%4.d",
-__LINE__, -0x132a337dL, "-321532797", "% ld",
-__LINE__, 0x0000047aL, "0X47A", "%-#X",
-__LINE__, 0x00000000L, "0", "%-ld",
-__LINE__, -0x0d9750bL, "-14251275", "% ld",
-__LINE__, 0x00029d6cL, "29d6c", "%x",
-__LINE__, 0xfb060cc0L, "fb060cc0", "%x",
-__LINE__, 0xffffd524L, "0XFFFFD524", "%#X",
-__LINE__, 0xffffff30L, "ffffff30", "%-5x",
-__LINE__, 0x00001650L, "0005712", "%#0.7d",
-__LINE__, 0x0000b702L, "0B702", "%03.5X",
-__LINE__, 0x000003c1L, "3c1", "% .1x",
-__LINE__, -0x0290412L, "-2688018", "%d",
-__LINE__, -0x00008bfL, "-2239", "%#d",
-__LINE__, -0x0000001L, "-1", "%d",
-__LINE__, 0x0001d750L, "1D750", "%-X",
-__LINE__, 0x006eee92L, "6EEE92", "%-X",
-__LINE__, 0xff812b02L, "ff812b02", "%0x",
-__LINE__, 0xfffffeacL, "FFFFFEAC", "%+0X",
-__LINE__, 0x000003a5L, "3a5", "%x",
-__LINE__, -0x15270ceeL, "-354880750", "%2.ld",
-__LINE__, 0x06b686d2L, "6b686d2", "%0x",
-__LINE__, 0xffe9cdccL, "ffe9cdcc", "%x",
-__LINE__, 0x0ecb168eL, "ecb168e", "%x",
-__LINE__, 0x00000051L, "51", "%-X",
-__LINE__, -0x0018860L, "-100448", "%-0d",
-__LINE__, 0x8f08b82bL, "0x8f08b82b", "%-#.5x",
-__LINE__, 0xffffffffL, "ffffffff", "%x",
-__LINE__, 0x0000000eL, "e", "%+01x",
-__LINE__, 0x04cf15bcL, " 80680380", "% #ld",
-__LINE__, 0x50006e8aL, "50006e8a", "%x",
-__LINE__, 0x0002f669L, "194153", "%0d",
-__LINE__, 0x000000a6L, " 166", "% 5.ld",
-__LINE__, -0x04036bbL, "-4208315", "%7.5d",
-__LINE__, 0x00070deaL, "70DEA", "%+X",
-__LINE__, 0x00000964L, "0x964", "%#x",
-__LINE__, 0x0000004dL, "0x4d", "% #3.x",
-__LINE__, -0x0000001L, "-1", "%-0d",
-__LINE__, 0x0000043eL, "1086", "%ld",
-__LINE__, -0x0000001L, "-1", "%-d",
-__LINE__, 0x00000000L, "+0", "%+d",
-__LINE__, 0xfffe68d9L, "FFFE68D9", "%7.X",
-__LINE__, -0x0169199L, "-1479065", "%#.5ld",
-__LINE__, -0x000003dL, "-61", "%ld",
-__LINE__, 0x00000001L, "+1", "%+.1d",
-__LINE__, 0x0001a65dL, "1a65d", "%.5x",
-__LINE__, 0x00000141L, "+000321", "%+#5.6ld",
-__LINE__, 0x00000000L, " 0", "%4x",
-__LINE__, 0x00000408L, "1032", "%-2.3ld",
-__LINE__, 0xffffffedL, "FFFFFFED", "%-X",
-__LINE__, 0xfe832351L, "FE832351", "% .4X",
-__LINE__, 0x003a421bL, "3A421B", "%-X",
-__LINE__, -0x53ed7f25L, "-1408073509", "%ld",
-__LINE__, -0x0000003L, "-0003", "%-5.4ld",
-__LINE__, 0x00000ad0L, " 2768", "%7d",
-__LINE__, 0xfffaf30bL, "FFFAF30B", "%X",
-__LINE__, 0x006349d3L, " 6506963", "% 6.2ld",
-__LINE__, 0x07f0146aL, "7f0146a", "%+3.4x",
-__LINE__, -0x0000002L, " -2", "% 3.ld",
-__LINE__, -0x26e94f3L, "-40801523", "%-#ld",
-__LINE__, -0x0000004L, " -004", "%7.3d",
-__LINE__, 0xfffe8cc9L, "FFFE8CC9", "%0X",
-__LINE__, 0x00000018L, " 18", "%5.x",
-__LINE__, -0x4941de83L, "-1229053571", "% 0.5ld",
-__LINE__, 0x00000000L, " 0", "%6ld",
-__LINE__, 0xfffffffeL, "0XFFFFFFFE", "%-#X",
-__LINE__, -0x0142ae1L, "-1321697", "%4.ld",
-__LINE__, -0x0319e7fL, "-3251839", "%0ld",
-__LINE__, 0x000004ffL, " 4FF", "%7.2X",
-__LINE__, -0x0001c3eL, "-7230", "%#.2ld",
-__LINE__, 0xffffe522L, "ffffe522", "%x",
-__LINE__, 0x0001d1cbL, "+119243", "%+.3ld",
-__LINE__, 0xfad19d52L, "FAD19D52", "%+X",
-__LINE__, 0x00002a7cL, " 10876", "% 0.ld",
-__LINE__, 0x00001449L, "1449", "%X",
-__LINE__, 0x000732b8L, "471736", "%d",
-__LINE__, -0x211a496eL, "-555370862", "%ld",
-__LINE__, -0x0000004L, "-4", "%1.d",
-__LINE__, 0x0295c03dL, "43368509", "%5.ld",
-__LINE__, 0x01fa5722L, "33183522", "%0ld",
-__LINE__, 0xfffbff62L, "0xfffbff62", "%#x",
-__LINE__, 0x000000f5L, " 245", "% 2.d",
-__LINE__, 0x000000a0L, "160", "%-d",
-__LINE__, 0x0000000fL, "15", "%.2ld",
-__LINE__, 0x0bf5f077L, "+200667255", "%+ld",
-__LINE__, -0x14d3e5aL, "-21839450", "%#2.3d",
-__LINE__, -0x21cbe656L, "-567010902", "%ld",
-__LINE__, 0x000002b9L, "697", "%ld",
-__LINE__, 0xfffff9b0L, "FFFFF9B0", "%X",
-__LINE__, 0x007fd9c7L, "8378823", "%3.4d",
-__LINE__, 0x00036d06L, "36d06", "%x",
-__LINE__, 0xffde8052L, "FFDE8052", "%4.6X",
-__LINE__, 0x0000000dL, "13", "%#d",
-__LINE__, 0x68157d93L, "68157d93", "%x",
-__LINE__, 0x00000005L, "5", "%1x",
-__LINE__, 0xfffffff4L, "FFFFFFF4", "%X",
-__LINE__, 0xf5bbf7e9L, "f5bbf7e9", "%+.1x",
-__LINE__, 0x0be98f98L, "BE98F98", "%X",
-__LINE__, 0x00000122L, "00122", "%.5X",
-__LINE__, -0x0000936L, "-2358", "%+#3.0ld",
-__LINE__, 0xfd230f09L, "FD230F09", "%-7X",
-__LINE__, 0x00000089L, "137", "%ld",
-__LINE__, 0x00000078L, " 120", "%7d",
-__LINE__, -0x68ef2b6bL, "-1760504683", "%-ld",
-__LINE__, 0xc24480bbL, "C24480BB", "%+4X",
-__LINE__, 0xfefe36a2L, "FEFE36A2", "%0X",
-__LINE__, -0x35344baL, "-55788730", "%7.d",
-__LINE__, 0xffffffffL, "FFFFFFFF", "%+.6X",
-__LINE__, -0x0000f40L, "-3904", "% ld",
-__LINE__, 0xfffffffbL, "FFFFFFFB", "%X",
-__LINE__, 0x58b37c4bL, "58b37c4b", "%2.2x",
-__LINE__, 0x000000e2L, "226", "%#ld",
-__LINE__, 0xfff5ebdeL, "fff5ebde", "%-7.1x",
-__LINE__, 0x0c6ea9beL, "208579006", "%-ld",
-__LINE__, 0xff708c74L, "FF708C74", "% 4.X",
-__LINE__, 0x00000000L, " 0", "% 3X",
-__LINE__, 0x00000004L, " 4", "%03.d",
-__LINE__, 0x0919be7cL, "+152682108", "%+6.d",
-__LINE__, 0x00d4fd1eL, "13958430", "%0d",
-__LINE__, 0xfe77a69eL, "fe77a69e", "%-7.x",
-__LINE__, 0x284ded44L, "676195652", "%-#2ld",
-__LINE__, -0x00006e6L, "-1766", "% ld",
-__LINE__, -0x7dac7eaL, "-131778538", "%.0ld",
-__LINE__, 0x0003c50fL, "247055", "%#d",
-__LINE__, 0xfffffffcL, "fffffffc", "%-x",
-__LINE__, 0xfe0f0d1fL, "fe0f0d1f", "% 5.1x",
-__LINE__, 0x00000009L, "9", "%0ld",
-__LINE__, -0x0175cc1L, "-1531073", "%-04.d",
-__LINE__, 0x000e4da2L, " 937378", "% 4.ld",
-__LINE__, 0x00000762L, "762", "%-0.X",
-__LINE__, 0x005211bfL, "5211bf", "%-x",
-__LINE__, 0xfffffffbL, "fffffffb", "%+2.6x",
-__LINE__, 0x00008862L, "34914", "%ld",
-__LINE__, 0xfffc9754L, "fffc9754", "%+x",
-__LINE__, 0x0000716eL, "716E", "%X",
-__LINE__, 0x000000a8L, "a8", "%x",
-__LINE__, 0xffff84f5L, "ffff84f5", "%0x",
-__LINE__, 0x00005032L, "5032", "%x",
-__LINE__, 0xffe242b4L, "ffe242b4", "%6x",
-__LINE__, 0x002df9bdL, "3013053", "%ld",
-__LINE__, 0xffffe267L, "FFFFE267", "%.5X",
-__LINE__, 0xffffffc7L, "0xffffffc7", "%#x",
-__LINE__, -0x1727c38L, "-24280120", "%d",
-__LINE__, 0x01308072L, "1308072", "%x",
-__LINE__, -0x5883c7cL, "-92814460", "%+ld",
-__LINE__, 0x000030adL, "30ad", "%x",
-__LINE__, 0xffffffffL, "FFFFFFFF", "%X",
-__LINE__, -0x2090a708L, "-546350856", "% d",
-__LINE__, 0x0024e6b4L, "2418356", "%#ld",
-__LINE__, 0x02db71acL, "2DB71AC", "% 6.3X",
-__LINE__, 0xfffffffcL, "FFFFFFFC", "%2.7X",
-__LINE__, -0x000074eL, " -1870", "%7.ld",
-__LINE__, -0x0011d84L, "-73092", "%d",
-__LINE__, 0x00160723L, "160723", "%1.3x",
-__LINE__, 0x00412929L, "4270377", "%-d",
-__LINE__, -0x0008fc6L, "-36806", "% d",
-__LINE__, 0x00000002L, "2", "%d",
-__LINE__, 0x0eb67ffaL, "eb67ffa", "%.4x",
-__LINE__, 0x05b86c3cL, "95972412", "%4.4d",
-__LINE__, 0xffffca9cL, "FFFFCA9C", "% 4.X",
-__LINE__, 0x0007d571L, "7d571", "%-0x",
-__LINE__, -0x000239bL, "-09115", "%5.5d",
-__LINE__, -0x0000155L, " -341", "%5.3ld",
-__LINE__, 0x00000034L, "34", "%x",
-__LINE__, -0x0000051L, "-81", "%.1ld",
-__LINE__, 0x309bbbe0L, "309bbbe0", "%x",
-__LINE__, 0x0075be1eL, " 7716382", "% #ld",
-__LINE__, 0x000002d5L, "2d5", "%x",
-__LINE__, 0x006b466dL, "6B466D", "%-0X",
-__LINE__, 0x01d6c30fL, "1D6C30F", "%4.X",
-__LINE__, 0x00000003L, " 3", "%07.x",
-__LINE__, 0xfffcc102L, "FFFCC102", "%6.X",
-__LINE__, 0xffffffffL, "0XFFFFFFFF", "%#X",
-__LINE__, 0xfffffffeL, "fffffffe", "%+x",
-__LINE__, 0x00000005L, "5", "%ld",
-__LINE__, 0xff060284L, "ff060284", "%x",
-__LINE__, 0x007a3325L, "7A3325", "%-X",
-__LINE__, 0xf5f595bdL, "F5F595BD", "%0X",
-__LINE__, 0xfffa3a10L, "FFFA3A10", "%0X",
-__LINE__, 0x00000000L, "0", "%x",
-__LINE__, -0x15078f9L, "-22051065", "%7d",
-__LINE__, -0x0000002L, "-000002", "%.6d",
-__LINE__, 0x00000036L, "54", "%1.1ld",
-__LINE__, -0xbbecf6aL, "-197054314", "%ld",
-__LINE__, 0x0000043dL, "43D", "%X",
-__LINE__, 0xfffffffaL, "0xfffffffa", "% #6.x",
-__LINE__, 0x016759f8L, "23550456", "%0.ld",
-__LINE__, 0x000052d2L, "+21202", "%+6.2d",
-__LINE__, -0x007d232L, "-512562", "%ld",
-__LINE__, 0x00240be0L, "2362336", "%.1d",
-__LINE__, -0x0000001L, "-1", "%0d",
-__LINE__, 0xfffffffaL, "FFFFFFFA", "%X",
-__LINE__, -0x0000e88L, "-3720", "%ld",
-__LINE__, 0xfffffa9bL, "FFFFFA9B", "%.5X",
-__LINE__, 0x09296eebL, "153710315", "%-1.0d",
-__LINE__, 0x001f46fcL, "0X1F46FC", "%#X",
-__LINE__, 0x00000006L, "6", "%X",
-__LINE__, 0xffffff87L, "0XFFFFFF87", "%+#X",
-__LINE__, 0x00000469L, "0469", "%04X",
-__LINE__, -0x0000001L, "-1", "%ld",
-__LINE__, 0x00000000L, "", "%.0ld",
-__LINE__, -0x52bc137L, "-86753591", "%-#3ld",
-__LINE__, -0x2bddb08L, "-45996808", "%-3.d",
-__LINE__, 0x041367f7L, "41367F7", "%+X",
-__LINE__, -0x0018eb5L, "-102069", "%+ld",
-__LINE__, -0x0000537L, "-1335", "%#ld",
-__LINE__, -0x6f159ff4L, "-1863688180", "%+1.d",
-__LINE__, 0x00112ac8L, "0X112AC8", "%#6.3X",
-__LINE__, 0x00000000L, " ", "%3.d",
-__LINE__, 0x0008afe8L, "08afe8", "%+3.6x",
-__LINE__, 0x00000015L, "21", "%ld",
-__LINE__, -0x02b7130L, "-2847024", "% #2.4d",
-__LINE__, 0xffffffd0L, "FFFFFFD0", "%X",
-__LINE__, -0x6970fa1L, "-110563233", "%+#.4ld",
-__LINE__, 0x06387dccL, "0X6387DCC", "%-#X",
-__LINE__, 0xffffd506L, "ffffd506", "%+6x",
-__LINE__, -0x00fe5cdL, "-1041869", "%-#7d",
-__LINE__, -0x0c35bf6L, "-12803062", "%-03d",
-__LINE__, -0x0020d89L, "-134537", "%#d",
-__LINE__, -0x0c7aed3L, "-13086419", "%-ld",
-__LINE__, -0x000362aL, "-13866", "%#.4ld",
-__LINE__, -0x02d05f0L, "-2950640", "%#ld",
-__LINE__, 0x02de1321L, "0x2de1321", "%#7.x",
-__LINE__, 0xffb56428L, "0xffb56428", "%#x",
-__LINE__, 0xfffffffeL, "FFFFFFFE", "%X",
-__LINE__, 0xf072292dL, "F072292D", "%.5X",
-__LINE__, -0x0f4b0f2L, "-16036082", "%.5ld",
-__LINE__, 0x01b81885L, "28842117", "%5d",
-__LINE__, -0x009cfa6L, "-642982", "%d",
-__LINE__, 0xfffffffdL, "0XFFFFFFFD", "%-#.5X",
-__LINE__, 0x0dc97a66L, "DC97A66", "%2.X",
-__LINE__, 0x000000beL, "190", "%.0d",
-__LINE__, 0xffffe1c7L, "FFFFE1C7", "% X",
-__LINE__, 0x01883b9aL, "1883b9a", "%3x",
-__LINE__, 0xffffdde1L, "ffffdde1", "%+x",
-__LINE__, 0x2f1b4e32L, "+790318642", "%+ld",
-__LINE__, 0x000129aaL, "129aa", "%x",
-__LINE__, -0x00092c2L, "-37570", "%d",
-__LINE__, 0x00070fbdL, "70fbd", "%x",
-__LINE__, -0x00000eaL, "-234", "%+4ld",
-__LINE__, 0xfffffffeL, "fffffffe", "%x",
-__LINE__, 0x0091c7f7L, "91C7F7", "% .3X",
-__LINE__, -0x0c14fe2L, "-12668898", "%d",
-__LINE__, -0x0017c15L, "-97301", "%d",
-__LINE__, -0x00005d0L, "-0001488", "%5.7d",
-__LINE__, 0x0114c36eL, "18137966", "%0d",
-__LINE__, 0xffffffffL, "ffffffff", "%+x",
-__LINE__, 0x0ac76e78L, "180842104", "%d",
-__LINE__, 0x001976cdL, " 1668813", "% 4.ld",
-__LINE__, -0x0642319L, "-6562585", "% d",
-__LINE__, 0xffffffffL, "FFFFFFFF", "%X",
-__LINE__, -0x035019dL, "-3473821", "%.7d",
-__LINE__, -0x0000061L, "-97", "%#3.d",
-__LINE__, 0x0000001fL, " 31", "% 6.1ld",
-__LINE__, -0x0000024L, "-36", "%d",
-__LINE__, 0x000b3785L, "735109", "%ld",
-__LINE__, 0xfffffda9L, "fffffda9", "%-x",
-__LINE__, 0x00254832L, "2443314", "%-ld",
-__LINE__, 0xfffffd40L, "FFFFFD40", "%0X",
-__LINE__, -0x0006105L, "-24837", "%+#d",
-__LINE__, 0x00000006L, "+6", "%+d",
-__LINE__, 0xffd40fd8L, "ffd40fd8", "%3.x",
-__LINE__, -0x000988eL, "-39054", "%03d",
-__LINE__, 0x0005ad8bL, "5AD8B", "%0.0X",
-__LINE__, 0x00000001L, "1", "%d",
-__LINE__, 0xfe1f59b7L, "fe1f59b7", "%4.x",
-__LINE__, -0x0000022L, "-34", "%#d",
-__LINE__, 0x0018e3e9L, "18E3E9", "% X",
-__LINE__, 0xffffff25L, "FFFFFF25", "%2.X",
-__LINE__, -0x00002c6L, "-710", "%1.ld",
-__LINE__, 0x00009765L, "38757", "%5ld",
-__LINE__, 0xfe197646L, "FE197646", "%-X",
-__LINE__, 0x00000001L, " 1", "%+5.x",
-__LINE__, -0x0000002L, "-2", "%#ld",
-__LINE__, 0x0072f6beL, "72F6BE", "%1X",
-__LINE__, -0x000f06dL, "-61549", "%-d",
-__LINE__, 0x00000001L, " 1", "%5X",
-__LINE__, 0x328cba28L, " 848083496", "% 2.ld",
-__LINE__, 0x0000cddcL, "cddc", "%.1x",
-__LINE__, 0xfffffff9L, "fffffff9", "%7x",
-__LINE__, 0x00baf511L, "BAF511", "%-5.6X",
-__LINE__, 0x00000001L, " 1", "%4.ld",
-__LINE__, 0x0001e4b0L, "+124080", "%+ld",
-__LINE__, -0x07548f3L, "-7686387", "% 6.d",
-__LINE__, -0x01b14eaL, "-1774826", "% #0d",
-__LINE__, -0x000005cL, "-92 ", "%-04ld",
-__LINE__, -0x00000aeL, "-174", "%+.3ld",
-__LINE__, 0x0000008cL, "0X8C", "%+#X",
-__LINE__, 0x14c02360L, "14C02360", "%.6X",
-__LINE__, 0xfffffff6L, "FFFFFFF6", "%X",
-__LINE__, 0x009f4ee5L, "9f4ee5", "%x",
-__LINE__, 0x00000035L, "35", "%X",
-__LINE__, -0x00000ebL, "-235", "%ld",
-__LINE__, 0x1552ced8L, "1552CED8", "%04X",
-__LINE__, 0x0000002aL, " 2A", "%5X",
-__LINE__, 0xffffffffL, "ffffffff", "% x",
-__LINE__, -0xdec0db2L, "-233573810", "%d",
-__LINE__, 0x001e2ef0L, "1978096", "%2.d",
-__LINE__, 0xffffef24L, "ffffef24", "%.5x",
-__LINE__, 0xfffe6a6cL, "fffe6a6c", "%+x",
-__LINE__, -0x0000004L, "-4", "% ld",
-__LINE__, 0xfe3c6743L, "fe3c6743", "%.1x",
-__LINE__, 0x0000033dL, "829", "%0ld",
-__LINE__, -0x00006a0L, " -1696", "% 7.ld",
-__LINE__, 0xffffffdbL, "ffffffdb", "%0.0x",
-__LINE__, 0xfffffffcL, "FFFFFFFC", "%3.3X",
-__LINE__, -0x0000004L, "-4", "%#ld",
-__LINE__, 0x00b32b56L, "B32B56", "%X",
-__LINE__, 0xffffffffL, "0xffffffff", "%+#x",
-__LINE__, 0x01cd1a48L, "1cd1a48", "%+7x",
-__LINE__, 0xffffffdaL, "ffffffda", "%x",
-__LINE__, 0x1886509eL, "1886509E", "% X",
-__LINE__, 0x000000ebL, "235", "%0d",
-__LINE__, 0xfffffff4L, "fffffff4", "%0x",
-__LINE__, 0x00000547L, "547", "% X",
-__LINE__, 0x000017e6L, "17e6", "%-2.x",
-__LINE__, 0x00001dc4L, "7620", "%d",
-__LINE__, 0xffffffffL, "FFFFFFFF", "%3.0X",
-__LINE__, 0xffff93faL, "0XFFFF93FA", "%#X",
-__LINE__, 0xfffffe1cL, "FFFFFE1C", "%-X",
-__LINE__, 0x00000000L, "", "% .0x",
-__LINE__, 0x000000a1L, "A1", "%X",
-__LINE__, 0xffffffffL, "0xffffffff", "%#x",
-__LINE__, -0x0001460L, "-05216", "%+#.5d",
-__LINE__, 0x00000001L, "1 ", "%-6.x",
-__LINE__, 0xfffd5324L, "FFFD5324", "%+2.6X",
-__LINE__, 0x00000007L, " 07", "%06.2d",
-__LINE__, 0x00000003L, "3", "%-X",
-__LINE__, 0xfffffdb7L, "0XFFFFFDB7", "%+#X",
-__LINE__, 0xfffff4ccL, "fffff4cc", "%0x",
-__LINE__, 0x00000000L, "0 ", "%-5X",
-__LINE__, 0x00758c96L, "758C96", "%X",
-__LINE__, -0x0000001L, "-1", "%-ld",
-__LINE__, 0x00000001L, "1", "%ld",
-__LINE__, 0x03f03cafL, "66075823", "%.2ld",
-__LINE__, 0x0000a87cL, "a87c", "%1.x",
-__LINE__, 0x00000034L, "34", "%X",
-__LINE__, 0x00000000L, "0", "%x",
-__LINE__, 0x00010167L, "10167", "%x",
-__LINE__, -0x00007ceL, "-1998 ", "%-6ld",
-__LINE__, 0x00000001L, "1", "%.0d",
-__LINE__, 0x00d94ceeL, "14241006", "%ld",
-__LINE__, -0x0000008L, "-8", "% d",
-__LINE__, -0x71520839L, "-1901201465", "%+0d",
-__LINE__, 0x0000035aL, "35a", "%-x",
-__LINE__, 0xfffd2f68L, "FFFD2F68", "%-X",
-__LINE__, 0x0006ea53L, "453203", "%1d",
-__LINE__, 0x000000dfL, "DF", "% 1X",
-__LINE__, 0xfffffffeL, "fffffffe", "% 7x",
-__LINE__, 0x00000156L, "156", "% X",
-__LINE__, 0x00037ac9L, " 228041", "% ld",
-__LINE__, 0xffffffdeL, "FFFFFFDE", "%0.5X",
-__LINE__, 0x00000025L, "37", "%-0.ld",
-__LINE__, -0x4133686L, "-68368006", "%2ld",
-__LINE__, -0x000003bL, "-59", "%.2ld",
-__LINE__, 0xfffff910L, "fffff910", "% 00.0x",
-__LINE__, 0xff9ec802L, "FF9EC802", "%2.6X",
-__LINE__, 0x00000008L, "0X8", "%#1X",
-__LINE__, 0xfffffff7L, "FFFFFFF7", "%-X",
-__LINE__, 0x0029a4daL, "2729178", "%04.ld",
-__LINE__, 0x007d1588L, "8197512", "%#d",
-__LINE__, 0x0007e86dL, "518253", "%0d",
-__LINE__, 0xfffffff9L, "fffffff9", "%x",
-__LINE__, 0x00000002L, "002", "%.3d",
-__LINE__, 0x00006ec1L, "6EC1", "%2X",
-__LINE__, 0x0000300cL, "12300", "%-d",
-__LINE__, -0x0000002L, "-2", "%+ld",
-__LINE__, -0x0000002L, "-2", "%ld",
-__LINE__, -0x00015d5L, "-005589", "%#.6ld",
-__LINE__, 0x00000041L, "65", "%d",
-__LINE__, 0x00000229L, "0000229", "% 0.7x",
-__LINE__, 0xfffffffbL, "fffffffb", "%03.x",
-__LINE__, 0x00093262L, "0602722", "%.7d",
-__LINE__, -0x00037b4L, "-14260", "%-0ld",
-__LINE__, 0xfffffffcL, "fffffffc", "%-x",
-__LINE__, 0xf24cb3e6L, "f24cb3e6", "%1x",
-__LINE__, 0x00000000L, "0", "%x",
-__LINE__, 0xfffffffbL, "FFFFFFFB", "%0X",
-__LINE__, 0x00000031L, "0000049", "%00.7ld",
-__LINE__, 0x00000bb3L, "BB3", "%.1X",
-__LINE__, -0x0000001L, "-0001", "%+#4.4ld",
-__LINE__, -0x0000001L, "-1", "% d",
-__LINE__, 0x00022c0cL, "22c0c", "%-x",
-__LINE__, 0xffffffd4L, "ffffffd4", "%x",
-__LINE__, 0x000729c6L, "469446", "%3.d",
-__LINE__, 0xb180feaeL, "b180feae", "%3.x",
-__LINE__, 0x124fac15L, "307211285", "%-0ld",
-__LINE__, -0x0000004L, "-4", "%ld",
-__LINE__, 0x0000006aL, "106", "%#d",
-__LINE__, 0x0000297fL, "297F", "%+3X",
-__LINE__, 0x0000000eL, "14", "%0ld",
-__LINE__, 0x00000027L, "27", "%0.1X",
-__LINE__, 0xffeb98ebL, "ffeb98eb", "% 05.2x",
-__LINE__, 0xfffff19bL, "FFFFF19B", "%+X",
-__LINE__, 0x00025992L, "154002", "%6.6d",
-__LINE__, 0x00000040L, " 040", "%6.3X",
-__LINE__, 0x00000a9eL, " 0a9e", "%5.4x",
-__LINE__, 0x00c7f2ccL, "c7f2cc", "%x",
-__LINE__, 0x000325e6L, " 325E6", "%6.X",
-__LINE__, -0x69faad3L, "-111127251", "%d",
-__LINE__, -0x059a307L, "-5874439", "% ld",
-__LINE__, 0xfffffff6L, "0xfffffff6", "%#0.0x",
-__LINE__, 0x0030fdf3L, "30fdf3", "%x",
-__LINE__, 0x00007343L, "+29507", "%+#2d",
-__LINE__, 0x0003cf4bL, "0X3CF4B", "% #.2X",
-__LINE__, 0x00000433L, "+1075", "%+0ld",
-__LINE__, 0xfffffffdL, "fffffffd", "%+.3x",
-__LINE__, 0x0ae30c4eL, "ae30c4e", "%+00x",
-__LINE__, 0x0002540fL, "02540f", "%-.6x",
-__LINE__, -0x0000001L, " -01", "% #5.2ld",
-__LINE__, 0xffffffe7L, "0xffffffe7", "% #5.x",
-__LINE__, 0x0000005bL, "91", "%d",
-__LINE__, 0x00001f9bL, "8091", "%.4ld",
-__LINE__, 0xfffff315L, "fffff315", "%4.x",
-__LINE__, -0x130eec41L, "-319745089", "% ld",
-__LINE__, 0xfff8fe13L, "FFF8FE13", "%X",
-__LINE__, -0x0000004L, "-00004", "%5.5d",
-__LINE__, 0x00000669L, "669", "%0X",
-__LINE__, -0x0000004L, "-4", "%d",
-__LINE__, 0xf5e81496L, "F5E81496", "% 6X",
-__LINE__, -0x0000001L, "-1", "% 0d",
-__LINE__, 0xfffffff7L, "fffffff7", "%x",
-__LINE__, 0x000001deL, "478", "%d",
-__LINE__, 0x0000623eL, "25150", "%5.0d",
-__LINE__, 0xffffffa8L, "FFFFFFA8", "%+X",
-__LINE__, -0x0000117L, "-279", "% ld",
-__LINE__, -0x0000517L, "-1303", "%d",
-__LINE__, 0xfffff9d5L, "fffff9d5", "% x",
-__LINE__, 0x000001ccL, "1CC", "%-X",
-__LINE__, 0x0000019aL, "0000410", "%.7d",
-__LINE__, 0x00000003L, "3 ", "%-06X",
-__LINE__, 0x00000009L, "0x9", "%#0x",
-__LINE__, 0xfd544610L, "0XFD544610", "% #X",
-__LINE__, 0xfffffffcL, "fffffffc", "%+x",
-__LINE__, 0x00009437L, "37943", "%ld",
-__LINE__, -0x00b5ea6L, "-745126", "%d",
-__LINE__, 0xffffffd8L, "ffffffd8", "%6x",
-__LINE__, 0x00002a2dL, "10797", "%.3ld",
-__LINE__, 0x00275238L, "2576952", "%0ld",
-__LINE__, 0xfff90a34L, "FFF90A34", "%-7X",
-__LINE__, 0xfffffffeL, "FFFFFFFE", "% .7X",
-__LINE__, -0xb3b673eL, "-188442430", "% ld",
-__LINE__, 0xfffff67aL, "0xfffff67a", "%#0.x",
-__LINE__, 0x0000dff6L, " dff6", "%+7.x",
-__LINE__, 0xffee46e3L, "ffee46e3", "%x",
-__LINE__, 0x00001a66L, " 0006758", "% 7.7d",
-__LINE__, 0x0002b475L, "2B475", "%.4X",
-__LINE__, 0x0002090dL, "002090d", "%.7x",
-__LINE__, -0x0057838L, "-358456", "%#ld",
-__LINE__, 0x00000004L, "0x4", "%#x",
-__LINE__, 0x0574cb62L, "91540322", "%#7d",
-__LINE__, -0x0054388L, "-344968", "% #d",
-__LINE__, 0x000421c2L, "421C2", "% X",
-__LINE__, 0x00000003L, "3", "%0d",
-__LINE__, 0xffffe2e2L, "ffffe2e2", "% 5.x",
-__LINE__, 0x00000021L, "+33", "%+d",
-__LINE__, -0x0020033L, "-131123", "%ld",
-__LINE__, -0x0000001L, " -1", "%4.ld",
-__LINE__, 0x000000fdL, "000fd", "%3.5x",
-__LINE__, 0x023e4337L, "37634871", "%1d",
-__LINE__, 0x6e823d96L, "6E823D96", "% X",
-__LINE__, 0xfff0e133L, "fff0e133", "%x",
-__LINE__, -0x000deccL, "-57036", "%3d",
-__LINE__, 0x004397b8L, "4429752", "%0d",
-__LINE__, -0x0000023L, " -35", "%6d",
-__LINE__, 0xffe701caL, "FFE701CA", "%3X",
-__LINE__, 0x000c0319L, "+787225", "%+.6d",
-__LINE__, 0x00000000L, "0", "%x",
-__LINE__, 0xfffffe1dL, "FFFFFE1D", "%X",
-__LINE__, 0xfffffb33L, "fffffb33", "%x",
-__LINE__, 0x02b5e30aL, "45474570", "%d",
-__LINE__, 0x000074ebL, "29931", "%03.ld",
-__LINE__, -0x4e42e310L, "-1313006352", "%-0.d",
-__LINE__, -0x000007bL, "-123", "%d",
-__LINE__, 0x00000160L, " 352", "% d",
-__LINE__, -0x16af31ecL, "-380580332", "%#ld",
-__LINE__, -0x000006eL, "-000110", "%07ld",
-__LINE__, 0x232699a0L, "232699a0", "%7.x",
-__LINE__, 0x00f9b8e5L, "+16365797", "%+0d",
-__LINE__, 0x0000000cL, "C", "%X",
-__LINE__, 0xfffffd4fL, "FFFFFD4F", "%X",
-__LINE__, 0xffffe7bbL, "FFFFE7BB", "%.7X",
-__LINE__, -0x0000163L, "-355", "%d",
-__LINE__, 0x00070315L, " 459541", "% #2.d",
-__LINE__, -0x7d5c12aL, "-131449130", "% 6.ld",
-__LINE__, 0xffffffb2L, "FFFFFFB2", "%X",
-__LINE__, -0x0004aadL, "-19117", "%+6.4ld",
-__LINE__, 0x00115586L, "1136006", "%0d",
-__LINE__, -0x0000021L, "-33", "%d",
-__LINE__, 0x093ce01eL, "93ce01e", "% 5x",
-__LINE__, 0x00672135L, "672135", "% x",
-__LINE__, 0x05f4abd5L, "0x5f4abd5", "%+#6.x",
-__LINE__, -0x0448b03L, "-4492035", "%-0.2ld",
-__LINE__, 0x00000000L, "0", "%#x",
-__LINE__, 0x1987217eL, "428286334", "%d",
-__LINE__, 0x000010f6L, "10f6", "%-x",
-__LINE__, 0x0000177aL, "177a", "%1x",
-__LINE__, 0xfffffefdL, "FFFFFEFD", "%7X",
-__LINE__, -0x095cbf8L, "-9817080", "%-5ld",
-__LINE__, 0x0000008aL, "138", "%2.0ld",
-__LINE__, 0xfffe80adL, "fffe80ad", "%0x",
-__LINE__, -0x1a4c8f7L, "-27576567", "%d",
-__LINE__, 0x00000000L, "0", "%-x",
-__LINE__, 0x0000a82bL, "43051", "%-ld",
-__LINE__, 0x000000ebL, "235", "%2.3ld",
-__LINE__, -0x0002747L, "-10055", "%d",
-__LINE__, 0x00000319L, "0X319", "%#X",
-__LINE__, 0xfffffcfeL, "FFFFFCFE", "% X",
-__LINE__, 0x00050f0eL, "50f0e", "%-1x",
-__LINE__, -0x398e09eL, "-60350622", "%0.7ld",
-__LINE__, 0x00000000L, " ", "%2.ld",
-__LINE__, 0x00000049L, "00049", "% .5X",
-__LINE__, -0x00000ddL, " -221", "%+#5ld",
-__LINE__, 0xf6db2facL, "f6db2fac", "%-07x",
-__LINE__, 0x0000004fL, "4F", "% .0X",
-__LINE__, 0x00000000L, "0", "%x",
-__LINE__, 0xfd07f692L, "fd07f692", "%x",
-__LINE__, 0xdb98bde0L, "db98bde0", "%x",
-__LINE__, 0x00000271L, "0271", "% 3.4x",
-__LINE__, -0x000115aL, "-4442", "%#1.ld",
-__LINE__, 0x0002f5f2L, "194034", "%ld",
-__LINE__, -0x0000152L, " -338", "%+7ld",
-__LINE__, 0x00059336L, "365366", "%d",
-__LINE__, 0xfffffff6L, "fffffff6", "%-7x",
-__LINE__, 0xfb916c51L, "fb916c51", "%-x",
-__LINE__, 0xffff413dL, "FFFF413D", "%-X",
-__LINE__, 0xf2576910L, "F2576910", "%-4.X",
-__LINE__, 0xfffc7730L, "fffc7730", "%5.x",
-__LINE__, 0x000002e6L, "+742", "%+1d",
-__LINE__, -0x00001bfL, "-447", "%3d",
-__LINE__, 0x000002e1L, "2E1", "%-X",
-__LINE__, 0x00000096L, "150", "%#0ld",
-__LINE__, 0x000002bdL, "701", "%d",
-__LINE__, -0x0053386L, "-340870", "%#d",
-__LINE__, 0xfffdb076L, "FFFDB076", "%X",
-__LINE__, 0x00004dc5L, " +19909", "%+07.ld",
-__LINE__, 0x00000f7aL, " F7A", "%4X",
-__LINE__, 0x02405000L, " 37769216", "% ld",
-__LINE__, 0xfffce68dL, "fffce68d", "%0x",
-__LINE__, -0x35b3af2L, "-56310514", "%-ld",
-__LINE__, -0x0238631L, "-2328113", "%.4d",
-__LINE__, -0x000001eL, "-030", "%.3ld",
-__LINE__, 0xffffffddL, "FFFFFFDD", "%.4X",
-__LINE__, 0x0013f6acL, "13f6ac", "%02.x",
-__LINE__, 0xfffffffaL, "fffffffa", "%+07.x",
-__LINE__, -0x000192bL, " -6443", "%6.d",
-__LINE__, 0x0000058bL, "+1419", "%+d",
-__LINE__, 0x00001391L, "5009", "%ld",
-__LINE__, -0x0041a57L, "-268887", "%1ld",
-__LINE__, 0xfffff266L, "0xfffff266", "%+#6.6x",
-__LINE__, 0x0000018bL, " 395", "%6.ld",
-__LINE__, 0x009ae24dL, "+10150477", "%+ld",
-__LINE__, 0x0000007eL, "7E", "%X",
-__LINE__, 0xfffffd53L, "FFFFFD53", "% 0X",
-__LINE__, 0x000002faL, "2FA", "%-1.3X",
-__LINE__, 0x000000a4L, "164", "%0d",
-__LINE__, 0x00001833L, "6195", "%ld",
-__LINE__, -0x0000001L, "-1", "%d",
-__LINE__, 0xf2fcbd9bL, "F2FCBD9B", "%+0.2X",
-__LINE__, 0x00004a8aL, "4A8A", "%X",
-__LINE__, -0x10695cdaL, "-275340506", "%d",
-__LINE__, 0x00000037L, "37", "%X",
-__LINE__, 0x00082d5cL, "82D5C", "%+0.5X",
-__LINE__, 0xfffffe01L, "fffffe01", "% 5.3x",
-__LINE__, 0x000005eaL, "05EA", "% 1.4X",
-__LINE__, 0x0e0b8826L, "e0b8826", "%2x",
-__LINE__, -0x0000161L, "-353", "%+d",
-__LINE__, 0x19e3014aL, "19E3014A", "%+5X",
-__LINE__, 0x00000140L, "140", "%x",
-__LINE__, 0xffff84b9L, "FFFF84B9", "%X",
-__LINE__, -0x0005776L, "-22390", "%+5ld",
-__LINE__, 0x0162ad61L, "162AD61", "% X",
-__LINE__, 0x00002395L, "2395", "%X",
-__LINE__, 0x003702ecL, "3605228", "%5.2d",
-__LINE__, 0xffffffffL, "FFFFFFFF", "%7X",
-__LINE__, 0x00001778L, "0x1778", "%#5.x",
-__LINE__, 0xc52bef7fL, "C52BEF7F", "%X",
-__LINE__, 0xfffffec4L, "FFFFFEC4", "%X",
-__LINE__, 0x00000006L, "6", "%X",
-__LINE__, 0x00000000L, "000", "%03.3x",
-__LINE__, 0x00000000L, "0", "%x",
-__LINE__, 0xffff6c46L, "FFFF6C46", "% 2.2X",
-__LINE__, -0x1506098L, "-22044824", "%01.d",
-__LINE__, 0x03415cafL, "3415caf", "%x",
-__LINE__, -0x00007b4L, "-1972", "%#4.4d",
-__LINE__, -0x00158c9L, "-88265", "%03.4d",
-__LINE__, 0x6947c336L, "1766310710", "%.6d",
-__LINE__, 0x0000017cL, "17C", "% 0X",
-__LINE__, -0x00001b7L, "-439", "% 0ld",
-__LINE__, 0x06a7575aL, "6A7575A", "%-.0X",
-__LINE__, 0x000b3459L, "734297", "%ld",
-__LINE__, -0x395d8ddL, "-60152029", "%ld",
-__LINE__, 0x00036bb3L, "224179", "%-6.d",
-__LINE__, 0xffff14ffL, "FFFF14FF", "%X",
-__LINE__, -0x15910e4fL, "-361827919", "%-0d",
-__LINE__, -0x0000004L, "-4", "%#d",
-__LINE__, 0xf7f7adacL, "F7F7ADAC", "% 3.X",
-__LINE__, 0xffffff74L, "FFFFFF74", "%0X",
-__LINE__, 0x00000000L, "0", "%d",
-__LINE__, -0x000007bL, "-123 ", "%-7.d",
-__LINE__, -0x000002cL, "-44", "%d",
-__LINE__, -0x000002bL, " -43", "%5d",
-__LINE__, 0x0000ae5fL, "44639", "%d",
-__LINE__, 0x003cbc63L, "3CBC63", "%X",
-__LINE__, 0xfffffffcL, "0XFFFFFFFC", "%#5.7X",
-__LINE__, 0x0003e044L, "3E044", "%X",
-__LINE__, -0x0000c46L, "-3142", "%.1d",
-__LINE__, 0xff18f4bbL, "FF18F4BB", "%0X",
-__LINE__, 0xfffffffdL, "FFFFFFFD", "%.1X",
-__LINE__, -0x01c0f27L, "-1838887", "%0d",
-__LINE__, -0x1242901fL, "-306352159", "%.4ld",
-__LINE__, 0x1775c10aL, "393593098", "%6.ld",
-__LINE__, 0x00000001L, " 1", "%03.d",
-__LINE__, 0xfff1fd30L, "0xfff1fd30", "%#x",
-__LINE__, 0x00000191L, "191", "%0.X",
-__LINE__, 0x2e597178L, "777613688", "%2.ld",
-__LINE__, -0x4ef0cf3L, "-82775283", "%+.6ld",
-__LINE__, -0x0000085L, " -133", "%6.d",
-__LINE__, 0x0000014dL, "333 ", "%-5ld",
-__LINE__, -0xc03bd74L, "-201571700", "%07.6ld",
-__LINE__, -0x000000aL, "-10", "%d",
-__LINE__, 0x01f5e86eL, "32893038", "%#2.ld",
-__LINE__, 0x00000033L, "0X33", "% #X",
-__LINE__, 0x0087c797L, " 8898455", "% 7.d",
-__LINE__, -0x0001205L, "-4613", "%5d",
-__LINE__, 0x00000192L, " 192", "%7.X",
-__LINE__, 0x000e6c00L, "945152", "%6.1ld",
-__LINE__, 0x00018629L, " 99881", "% d",
-__LINE__, -0x04739c6L, "-4667846", "%-01.3ld",
-__LINE__, 0x00001f42L, "8002", "%d",
-__LINE__, 0x00000cafL, "3247", "%d",
-__LINE__, -0x4992e24L, "-77147684", "%#.6d",
-__LINE__, 0x0000001dL, "1d", "%-0x",
-__LINE__, 0x14d79f03L, "349675267", "%0ld",
-__LINE__, 0x00000dd4L, " 03540", "%#6.5ld",
-__LINE__, 0x0005f30eL, "0X5F30E", "%#X",
-__LINE__, 0x00000157L, "157", "%X",
-__LINE__, -0x9281698L, "-153622168", "%d",
-__LINE__, -0x000004aL, "-74", "%d",
-__LINE__, -0x0010c9eL, "-68766", "%-0d",
-__LINE__, 0x00000059L, "00089", "%.5ld",
-__LINE__, -0x06959e3L, "-6904291", "% 4.d",
-__LINE__, 0xfbea12b1L, "0XFBEA12B1", "%+#X",
-__LINE__, 0xffffdfb1L, "FFFFDFB1", "%2.6X",
-__LINE__, 0x0434faacL, "434faac", "%.5x",
-__LINE__, 0xffffffffL, "ffffffff", "% x",
-__LINE__, 0x00000b32L, "B32", "%0X",
-__LINE__, 0x00000047L, "71", "%.1d",
-__LINE__, 0x00070befL, " 0461807", "% .7d",
-__LINE__, 0x00000038L, "38", "% 0x",
-__LINE__, 0x00000000L, " 0", "%6X",
-__LINE__, 0xfff9c011L, "FFF9C011", "%2X",
-__LINE__, 0xfffffffeL, "fffffffe", "%7x",
-__LINE__, 0xfffffff9L, "FFFFFFF9", "%X",
-__LINE__, -0x016a095L, "-1482901", "%4.0ld",
-__LINE__, -0x000001cL, "-28", "% ld",
-__LINE__, 0xfffd6133L, "0xfffd6133", "%#x",
-__LINE__, 0x000004a4L, "0x4a4", "%#x",
-__LINE__, 0x000003c2L, "0962", "%.4d",
-__LINE__, -0x000323bL, "-12859", "%+#d",
-__LINE__, 0x0f620237L, "F620237", "%X",
-__LINE__, 0x00007863L, "007863", "%.6X",
-__LINE__, 0x0000002cL, " 44", "% #ld",
-__LINE__, 0xfffffff0L, "fffffff0", "%03.6x",
-__LINE__, 0xffff6346L, "FFFF6346", "%1.X",
-__LINE__, 0x00063188L, "63188", "% x",
-__LINE__, 0xfffff91cL, "fffff91c", "%-.3x",
-__LINE__, 0x004cd0b4L, "4CD0B4", "%-2.X",
-__LINE__, 0x06b4d739L, "112514873", "%0.1d",
-__LINE__, -0x0009bebL, "-39915", "%.2d",
-__LINE__, 0x0000831bL, "33563", "%d",
-__LINE__, 0x00000001L, "1", "%X",
-__LINE__, -0x942d76bL, "-155375467", "% #0ld",
-__LINE__, 0xffff2a95L, "FFFF2A95", "%2X",
-__LINE__, 0x00548d5eL, "5541214", "%.3ld",
-__LINE__, 0x0b5e1a01L, "B5E1A01", "% .7X",
-__LINE__, 0xfffffc22L, "fffffc22", "%6x",
-__LINE__, -0x0000dd7L, "-3543", "%-.3ld",
-__LINE__, 0xfffff834L, "FFFFF834", "%X",
-__LINE__, 0x0365f762L, "57014114", "%ld",
-__LINE__, -0x0000003L, "-3", "%d",
-__LINE__, 0x3bd998a3L, "1004116131", "%d",
-__LINE__, 0xfffff6c9L, "FFFFF6C9", "%+X",
-__LINE__, 0xffffded9L, "FFFFDED9", "%-.1X",
-__LINE__, -0x00fbb5aL, "-1031002", "% 1.0d",
-__LINE__, 0xffffffb7L, "ffffffb7", "%6.x",
-__LINE__, 0xff1b8ac3L, "FF1B8AC3", "%-X",
-__LINE__, 0xfffffff2L, "FFFFFFF2", "%00.X",
-__LINE__, -0x000013dL, " -317", "%05.d",
-__LINE__, 0x0000f5e2L, "+62946", "%+0.2ld",
-__LINE__, 0x16ac6358L, "16ac6358", "%x",
-__LINE__, 0xffff8728L, "FFFF8728", "%+X",
-__LINE__, -0x0014a6dL, "-084589", "%0.6ld",
-__LINE__, 0xfc904514L, "FC904514", "%+0X",
-__LINE__, 0x00000004L, "4", "%ld",
-__LINE__, 0xffffffe0L, "ffffffe0", "%+x",
-__LINE__, -0x0a0ffddL, "-10551261", "%+02d",
-__LINE__, -0x0000bbcL, "-3004", "%+d",
-__LINE__, 0x00000006L, " +6", "%+7ld",
-__LINE__, 0x17afa6e5L, "397387493", "%ld",
-__LINE__, 0xfffff6bfL, "fffff6bf", "%+04.4x",
-__LINE__, 0x000001dcL, "01dc", "% 02.4x",
-__LINE__, 0x0000000eL, " 14", "% d",
-__LINE__, 0xfffffff9L, "0XFFFFFFF9", "%#4.X",
-__LINE__, 0x0000005dL, "93", "%0d",
-__LINE__, -0x004fa05L, "-0326149", "%.7d",
-__LINE__, -0x0000018L, "-24", "%ld",
-__LINE__, 0xfffff7ebL, "FFFFF7EB", "%X",
-__LINE__, 0x0072b044L, " 7516228", "% .7ld",
-__LINE__, 0xffffffedL, "0xffffffed", "%#x",
-__LINE__, 0x0010364dL, "10364D", "%X",
-__LINE__, 0xfff90469L, "0XFFF90469", "%#X",
-__LINE__, 0x000001b4L, " 436", "% 0d",
-__LINE__, 0x00000000L, "0", "% X",
-__LINE__, 0xfffffff3L, "fffffff3", "%x",
-__LINE__, 0x19335d40L, "19335d40", "%6x",
-__LINE__, 0x00039c24L, "236580", "%ld",
-__LINE__, 0x000021f7L, "8695", "%0.4ld",
-__LINE__, -0x057b406L, "-5747718", "%d",
-__LINE__, -0x017b371L, "-1553265", "%#ld",
-__LINE__, 0x0003e405L, "254981", "%2.d",
-__LINE__, 0x00000001L, "1", "%-.1x",
-__LINE__, 0x000000aeL, "AE", "%.1X",
-__LINE__, 0xffd85825L, "ffd85825", "%-7.x",
-__LINE__, 0xfffad763L, "fffad763", "%x",
-__LINE__, 0x002431d4L, "2372052", "%6.ld",
-__LINE__, 0x00000003L, "000003", "%-05.6d",
-__LINE__, 0xffffffebL, "0xffffffeb", "%#x",
-__LINE__, 0xff8cf3b0L, "ff8cf3b0", "%x",
-__LINE__, 0xfe88d2ffL, "0xfe88d2ff", "%+#.2x",
-__LINE__, 0xffffff6bL, "ffffff6b", "%6.3x",
-__LINE__, 0xfffffffeL, "fffffffe", "%-x",
-__LINE__, 0xe998945aL, "e998945a", "%2.x",
-__LINE__, 0x03b9c50fL, "3B9C50F", "%+X",
-__LINE__, 0xffffffffL, "FFFFFFFF", "%3.7X",
-__LINE__, 0x000024efL, "24ef", "%+x",
-__LINE__, 0xfffffc04L, "FFFFFC04", "%X",
-__LINE__, 0x0d4bef7cL, " 223080316", "% .1ld",
-__LINE__, -0xc33f3bcL, "-204731324", "%.5ld",
-__LINE__, 0xffffffffL, "0XFFFFFFFF", "%#2X",
-__LINE__, 0x0000e493L, "e493", "%x",
-__LINE__, 0x000001b4L, "1b4", "%x",
-__LINE__, 0xffffffd6L, "0xffffffd6", "% #1x",
-__LINE__, 0x00000001L, "1", "%d",
-__LINE__, -0x0000f28L, "-3880", "%ld",
-__LINE__, 0x00000277L, "631", "%-1ld",
-__LINE__, 0x00000001L, " 1", "%2x",
-__LINE__, -0x0ff4d2cL, "-16731436", "%#ld",
-__LINE__, 0x0bb80344L, "196608836", "%00ld",
-__LINE__, 0xffffffdcL, "FFFFFFDC", "%X",
-__LINE__, 0x00000484L, "1156", "%ld",
-__LINE__, 0x00000341L, "341", "%-.2x",
-__LINE__, 0x0000ee62L, "ee62", "%x",
-__LINE__, 0xfffffe20L, "fffffe20", "%+x",
-__LINE__, -0x00076ebL, "-30443", "%.2d",
-__LINE__, 0x2c4a7407L, "2c4a7407", "% x",
-__LINE__, 0x00000000L, " ", "%3.X",
-__LINE__, 0xffffff60L, "ffffff60", "% 4.x",
-__LINE__, 0x000e4cf2L, "+937202", "%+.5ld",
-__LINE__, 0x00000008L, " 00008", "%06.5X",
-__LINE__, 0x0002f612L, "194066", "%d",
-__LINE__, 0xfffffc96L, "fffffc96", "%-3.3x",
-__LINE__, -0x0000001L, "-1", "% ld",
-__LINE__, 0x00000000L, " ", "% 6.0X",
-__LINE__, 0xfffffff5L, "fffffff5", "%3.x",
-__LINE__, 0x0bfd63a1L, "201155489", "%d",
-__LINE__, -0x1547c214L, "-357024276", "%ld",
-__LINE__, 0x00000004L, "4", "%#0.d",
-__LINE__, -0x000f2f3L, "-62195", "%.2d",
-__LINE__, 0xfff843ddL, "FFF843DD", "%X",
-__LINE__, 0x00966e36L, "9858614", "%.0ld",
-__LINE__, 0x0000782eL, "0X782E", "% #X",
-__LINE__, 0x00bd36c0L, "12400320", "%ld",
-__LINE__, 0x00000000L, "00", "% .2X",
-__LINE__, 0x00000000L, "0", "%1X",
-__LINE__, 0x0003f416L, "3f416 ", "%-6.x",
-__LINE__, -0x00b74bdL, "-750781", "% ld",
-__LINE__, 0x0000138aL, "138a", "% x",
-__LINE__, 0x024df7f0L, "24DF7F0", "% 0.6X",
-__LINE__, 0xfffffffcL, "FFFFFFFC", "%X",
-__LINE__, -0x0003284L, "-12932 ", "%-07.ld",
-__LINE__, 0x000094d3L, "94d3", "%x",
-__LINE__, 0x000000bfL, "bf", "%.2x",
-__LINE__, 0x00000000L, "00000", "%-1.5X",
-__LINE__, -0x04899b8L, "-4757944", "%d",
-__LINE__, 0x2b51bf20L, "+726777632", "%+d",
-__LINE__, -0x000000dL, "-13", "%.2d",
-__LINE__, 0x04f78fbdL, "4F78FBD", "% 7.X",
-__LINE__, 0x00011684L, "71300", "%5.d",
-__LINE__, 0x0000539dL, "21405", "%0d",
-__LINE__, 0x00000008L, "000008", "%-3.6X",
-__LINE__, 0xfc7a2cdcL, "fc7a2cdc", "%2.3x",
-__LINE__, 0xffc21da1L, "ffc21da1", "%x",
-__LINE__, 0x00000273L, "273", "%x",
-__LINE__, 0x00000000L, "0", "%#X",
-__LINE__, -0x31cd6b9L, "-52221625", "% d",
-__LINE__, 0xfffffff8L, "FFFFFFF8", "%.0X",
-__LINE__, 0x00000002L, "2", "%#ld",
-__LINE__, 0x00e8922cL, "15241772", "%d",
-__LINE__, 0xfeb19ea7L, "FEB19EA7", "%0.1X",
-__LINE__, 0x00003931L, "014641", "%06ld",
-__LINE__, 0x00000015L, "0X00015", "%#.5X",
-__LINE__, 0xfffffffeL, "FFFFFFFE", "%1.X",
-__LINE__, 0xfff17103L, "0XFFF17103", "% #X",
-__LINE__, 0xfffffffcL, "FFFFFFFC", "%+X",
-__LINE__, 0x00000002L, "00002", "%.5x",
-__LINE__, 0x00001617L, " 5655", "% 7.d",
-__LINE__, -0x0000010L, "-000016", "%00.6d",
-__LINE__, 0x000000b0L, "B0", "% X",
-__LINE__, 0xfc9362b2L, "FC9362B2", "%-X",
-__LINE__, 0xfc3d8276L, "fc3d8276", "% 1x",
-__LINE__, 0x00001405L, "5125", "%#d",
-__LINE__, 0x02250183L, " 35979651", "% ld",
-__LINE__, 0xffc9b007L, "ffc9b007", "% 4.x",
-__LINE__, 0x00000311L, "785", "%0d",
-__LINE__, 0x0004d273L, " 316019", "% d",
-__LINE__, 0x00000001L, "1", "%1.x",
-__LINE__, 0xffff240fL, "FFFF240F", "%4.X",
-__LINE__, 0x0049cfdaL, "+4837338", "%+ld",
-__LINE__, 0x012f6dd5L, "12F6DD5", "% 6.2X",
-__LINE__, 0x00000002L, "0x2", "%#2.0x",
-__LINE__, 0xfffd834aL, "FFFD834A", "%.6X",
-__LINE__, 0xfe2a40f8L, "0XFE2A40F8", "%#X",
-__LINE__, 0xffffffebL, "ffffffeb", "%x",
-__LINE__, -0x00ac5cbL, "-705995", "%d",
-__LINE__, -0x3021108cL, "-807473292", "% .4d",
-__LINE__, -0x0000035L, "-53", "%-ld",
-__LINE__, -0x1a36475L, "-27485301", "% d",
-__LINE__, -0x0000011L, "-17", "%d",
-__LINE__, 0x000001a3L, "000419", "%.6ld",
-__LINE__, 0x0030a0a8L, "3186856", "%.5ld",
-__LINE__, 0x00000019L, "25", "%d",
-__LINE__, 0xf32deac1L, "F32DEAC1", "%06.2X",
-__LINE__, -0x0000004L, " -00004", "%7.5ld",
-__LINE__, 0x00000000L, "0", "%ld",
-__LINE__, 0x0006bf19L, "442137", "%#0.d",
-__LINE__, 0x566f6c44L, "1450142788", "%1.6d",
-__LINE__, 0xfffffc10L, "fffffc10", "%.2x",
-__LINE__, -0x000e04dL, "-57421", "%+0d",
-__LINE__, 0x00000000L, "0000000", "%+.7X",
-__LINE__, 0x00b5c74dL, " 11913037", "% ld",
-__LINE__, -0x028dfe2L, "-2678754", "%05.1d",
-__LINE__, 0xfffffee0L, "fffffee0", "%0x",
-__LINE__, -0x030c077L, "-3194999", "%-.6d",
-__LINE__, 0x00055ca1L, "055ca1", "%-.6x",
-__LINE__, 0x00000000L, " ", "%7.X",
-__LINE__, 0xfffffe3bL, "FFFFFE3B", "%X",
-__LINE__, 0xffffffffL, "FFFFFFFF", "% 3X",
-__LINE__, 0x00000857L, "2135", "%-#1.d",
-__LINE__, -0x00546a2L, "-345762", "%0.5d",
-__LINE__, 0x0000000bL, "0xb ", "%-#6x",
-__LINE__, 0x00000d2bL, "d2b ", "%-4.0x",
-__LINE__, 0x0ae02b9eL, "AE02B9E", "%X",
-__LINE__, 0xfffffa7bL, "fffffa7b", "%-2.x",
-__LINE__, 0x00000001L, "1", "%X",
-__LINE__, 0x000006adL, "01709", "%05.5ld",
-__LINE__, -0x0000102L, "-258", "%-0.ld",
-__LINE__, 0x00000000L, "0", "%.1X",
-__LINE__, -0x01daa95L, "-1944213", "%-1ld",
-__LINE__, 0x02b99040L, "2B99040", "%2.X",
-__LINE__, 0x1b3d5621L, "1B3D5621", "%X",
-__LINE__, 0x0312d16bL, "51564907", "%-1.7ld",
-__LINE__, 0x000aa76cL, " 698220", "% 2d",
-__LINE__, 0x00000000L, "0", "%ld",
-__LINE__, 0xfff8a4ecL, "FFF8A4EC", "%-X",
-__LINE__, 0xffffe06dL, "ffffe06d", "%x",
-__LINE__, 0x00000003L, "3", "% x",
-__LINE__, 0x00000000L, "0", "%x",
-__LINE__, 0xd3e244ddL, "D3E244DD", "%+5X",
-__LINE__, 0x000028b3L, " 28b3", "% 5.x",
-__LINE__, 0x0001acebL, "109803", "%6d",
-__LINE__, 0xfffbc5caL, "0xfffbc5ca", "%-#5x",
-__LINE__, 0x00000097L, " 151", "% 7ld",
-__LINE__, 0x00001fccL, "+8140", "%+d",
-__LINE__, 0xffffffffL, "ffffffff", "%0x",
-__LINE__, -0x00052a9L, "-21161", "%ld",
-__LINE__, 0xfffffc76L, "FFFFFC76", "%.1X",
-__LINE__, -0x2acb012L, "-44871698", "%0.1ld",
-__LINE__, 0xffffff81L, "ffffff81", "%x",
-__LINE__, -0x0018394L, "-99220", "%-ld",
-__LINE__, 0x0000001bL, "1B", "%X",
-__LINE__, 0x00000033L, "51", "%1d",
-__LINE__, 0xffec37e5L, "FFEC37E5", "%-1X",
-__LINE__, -0x000000aL, " -10", "%#5.d",
-__LINE__, -0x0000412L, "-1042", "%ld",
-__LINE__, 0x000cd0b1L, "cd0b1 ", "%-7.5x",
-__LINE__, 0x0b445370L, "B445370", "%+2.0X",
-__LINE__, 0xfffffff3L, "0XFFFFFFF3", "%-#X",
-__LINE__, 0xffff9f33L, "FFFF9F33", "%5.X",
-__LINE__, 0x00010a1eL, "10A1E", "%-2X",
-__LINE__, -0xede156fL, "-249435503", "% 7.1ld",
-__LINE__, 0xfc6d63aaL, "fc6d63aa", "% .6x",
-__LINE__, 0x0000311cL, " 12572", "% ld",
-__LINE__, 0x00001f8aL, "8074", "%00.d",
-__LINE__, 0x00000199L, "199", "%-X",
-__LINE__, 0xfffffc60L, "FFFFFC60", "%+3X",
-__LINE__, -0x000022cL, "-556", "%+0ld",
-__LINE__, 0x021d8407L, "35488775", "%-#.7ld",
-__LINE__, 0x0000020fL, "527", "%d",
-__LINE__, -0x000064bL, "-1611", "%#ld",
-__LINE__, -0x0c15aefL, "-12671727", "%d",
-__LINE__, -0x1f1a6881L, "-521824385", "%ld",
-__LINE__, 0xffffc115L, "ffffc115", "% x",
-__LINE__, 0x00000017L, " 23", "% #ld",
-__LINE__, 0x00000dc1L, "DC1 ", "%-4X",
-__LINE__, 0x000002caL, "2CA", "%X",
-__LINE__, 0x000f052cL, " 984364", "%7.d",
-__LINE__, 0x0000005aL, "0090", "%0.4d",
-__LINE__, -0x001e463L, "-124003", "% 4.ld",
-__LINE__, 0x00000001L, "0000001", "%+.7X",
-__LINE__, 0x00000bfbL, "0000bfb", "%5.7x",
-__LINE__, 0x0002484bL, "149579", "%#1d",
-__LINE__, 0x0043ba18L, "4438552", "%-ld",
-__LINE__, 0x000078f8L, "0X78F8", "%#X",
-__LINE__, 0x00000001L, " 1", "%4d",
-__LINE__, 0x0cedaeedL, "CEDAEED", "%X",
-__LINE__, 0x00000003L, "+3", "%+ld",
-__LINE__, 0xfffffffbL, "FFFFFFFB", "%7.4X",
-__LINE__, 0x00000169L, "361", "%ld",
-__LINE__, 0x00003c7aL, "+15482", "%+ld",
-__LINE__, -0x0159d93L, "-1416595", "% 0.0d",
-__LINE__, 0x0000775cL, "+30556", "%+3.d",
-__LINE__, 0x10284768L, "+271075176", "%+0.0ld",
-__LINE__, -0xf8b610eL, "-260792590", "%0d",
-__LINE__, 0xfdd8d369L, "fdd8d369", "%-.3x",
-__LINE__, 0x000c9495L, "+824469", "%+ld",
-__LINE__, -0x000003fL, " -063", "%7.3d",
-__LINE__, -0x000073bL, "-1851", "%+03.ld",
-__LINE__, 0xfffe4e23L, "0xfffe4e23", "%#.5x",
-__LINE__, 0x0081788cL, "81788c", "%5x",
-__LINE__, -0x015f888L, "-1439880", "%+1d",
-__LINE__, -0x31d64b4L, "-52257972", "%0.2d",
-__LINE__, 0xffffffffL, "FFFFFFFF", "%6.5X",
-__LINE__, -0x0000072L, "-114", "%+.1d",
-__LINE__, -0x00000e1L, "-225", "%ld",
-__LINE__, 0x000006a8L, "0x6a8", "%+#x",
-__LINE__, 0xfffe673aL, "fffe673a", "%01.x",
-__LINE__, 0xfff2ee0dL, "FFF2EE0D", "%-X",
-__LINE__, 0x0290320aL, "43004426", "%0ld",
-__LINE__, -0xeb7a832L, "-246917170", "% ld",
-__LINE__, 0x02ae9265L, "2ae9265", "%1.x",
-__LINE__, 0xffffffd2L, "ffffffd2", "%+2.x",
-__LINE__, 0x00e6e858L, "0xe6e858", "%#0.x",
-__LINE__, 0x00000c4aL, "+3146", "%+3.1d",
-__LINE__, -0x6943c1aL, "-110378010", "% 0ld",
-__LINE__, 0x0167b119L, "167b119", "%0x",
-__LINE__, 0xfffffffeL, "fffffffe", "%+x",
-__LINE__, 0xfffffffeL, "FFFFFFFE", "%X",
-__LINE__, 0x000b861eL, "755230", "%ld",
-__LINE__, 0x0000015bL, "347", "%-#ld",
-__LINE__, 0xfffffffaL, "0XFFFFFFFA", "%#X",
-__LINE__, 0x000de9e5L, "911845", "%d",
-__LINE__, 0x00000001L, "01", "%.2d",
-__LINE__, 0x000007a5L, "1957", "%0d",
-__LINE__, 0x0000000fL, "f", "%x",
-__LINE__, 0x00c38cbfL, " 12815551", "% .2d",
-__LINE__, -0x7bd1b6eL, "-129833838", "% d",
-__LINE__, -0x000013cL, "-316", "%0d",
-__LINE__, 0x00001aadL, "1AAD", "%-0X",
-__LINE__, 0x0034f903L, "3471619", "%00d",
-__LINE__, 0xff925717L, "ff925717", "%4x",
-__LINE__, 0x00000002L, "02", "%.2d",
-__LINE__, 0x00000f34L, "F34", "%+X",
-__LINE__, 0xffffeefeL, "FFFFEEFE", "%X",
-__LINE__, 0xfffeecb4L, "FFFEECB4", "% 2.X",
-__LINE__, 0x00034421L, "214049", "%0ld",
-__LINE__, 0x00000000L, " 0", "%+6X",
-__LINE__, -0x0000062L, "-98", "%-#2d",
-__LINE__, -0x0000557L, "-1367", "%-4.4d",
-__LINE__, 0xffffe17cL, "FFFFE17C", "%X",
-__LINE__, 0x00000097L, "00097", "%.5X",
-__LINE__, 0xfffcb278L, "FFFCB278", "%0.7X",
-__LINE__, -0x0000001L, "-0001 ", "%-7.4d",
-__LINE__, -0x0000001L, "-1", "%ld",
-__LINE__, 0x000002c4L, "708", "%d",
-__LINE__, 0x04946f45L, "4946F45", "%-2.X",
-__LINE__, 0x000000ffL, "00ff", "% 2.4x",
-__LINE__, 0x00073307L, "471815", "%3ld",
-__LINE__, 0x0085b7b6L, "+8763318", "%+ld",
-__LINE__, -0x0000002L, "-2", "%1ld",
-__LINE__, -0x0000001L, "-1", "%-2d",
-__LINE__, -0x00000b5L, " -181", "%7ld",
-__LINE__, -0x0412486L, "-4269190", "%+2.1ld",
-__LINE__, 0xffffffffL, "ffffffff", "%0x",
-__LINE__, 0x0000006dL, "6d", "%x",
-__LINE__, 0x000000daL, "218", "%-.3ld",
-__LINE__, 0xfffffcfeL, "fffffcfe", "%x",
-__LINE__, 0x652e60c7L, "652E60C7", "%7.7X",
-__LINE__, 0x00000035L, " 53", "% #2d",
-__LINE__, 0x000000fcL, "FC", "%-X",
-__LINE__, 0x00000019L, " 25", "% ld",
-__LINE__, 0xfffffcf4L, "fffffcf4", "%6x",
-__LINE__, 0xffffff41L, "ffffff41", "%x",
-__LINE__, 0x00000034L, " 52", "%3.ld",
-__LINE__, 0xffffffb2L, "ffffffb2", "%-x",
-__LINE__, -0x6dc43e7cL, "-1841577596", "% .2ld",
-__LINE__, 0x00000004L, "4", "%d",
-__LINE__, -0x000023bL, "-571", "%ld",
-__LINE__, -0x000004dL, "-77", "%ld",
-__LINE__, 0x0000e3baL, "58298", "%.0ld",
-__LINE__, 0xfffffff2L, "fffffff2", "%0.0x",
-__LINE__, -0x0000020L, "-32", "%ld",
-__LINE__, 0xffffb33eL, "0XFFFFB33E", "%-#X",
-__LINE__, 0x00000000L, " ", "% 4.x",
-__LINE__, 0xffd96f92L, "FFD96F92", "%X",
-__LINE__, 0x0000002eL, " 46", "% 0ld",
-__LINE__, 0xffffffffL, "ffffffff", "%x",
-__LINE__, -0x5008ba3L, "-83921827", "%+d",
-__LINE__, 0xfdc1df3dL, "FDC1DF3D", "%0X",
-__LINE__, 0xfc7410e5L, "fc7410e5", "%7x",
-__LINE__, 0xfffffffaL, "FFFFFFFA", "% 6.X",
-__LINE__, 0x00000000L, "0", "%X",
-__LINE__, -0x040fd4eL, "-4259150", "% 05.d",
-__LINE__, 0x0000003bL, " 59", "%3.2d",
-__LINE__, 0xff776dd8L, "ff776dd8", "%x",
-__LINE__, 0x0000055bL, "+1371", "%+#2d",
-__LINE__, 0x00004841L, "4841", "%.1x",
-__LINE__, 0x0229d710L, "36296464", "%-.2ld",
-__LINE__, 0x00000000L, "0", "%x",
-__LINE__, 0xfffe8376L, "fffe8376", "%0x",
-__LINE__, 0x000a7b83L, "a7b83", "%x",
-__LINE__, 0x0000000dL, " 013", "%#7.3d",
-__LINE__, 0xffffffffL, "FFFFFFFF", "%5.0X",
-__LINE__, 0x00000704L, " 0x704", "%#7.0x",
-__LINE__, 0xfff970b9L, "FFF970B9", "%.1X",
-__LINE__, -0x000b60aL, "-46602", "%+d",
-__LINE__, 0x00000000L, " 00000", "%6.5x",
-__LINE__, 0x00000003L, "3", "%X",
-__LINE__, 0x0000c14bL, "c14b", "%0x",
-__LINE__, 0x066d7860L, "107837536", "%-d",
-__LINE__, 0x00000013L, " 13", "%4.x",
-__LINE__, 0xfff96f18L, "FFF96F18", "%4X",
-__LINE__, 0xffffff30L, "FFFFFF30", "%X",
-__LINE__, 0xffffffffL, "FFFFFFFF", "% .7X",
-__LINE__, -0x72a9e985L, "-1923737989", "%2.d",
-__LINE__, 0x00000002L, "0x2", "%#x",
-__LINE__, 0x0000050eL, "50e", "%2.3x",
-__LINE__, 0x0000605cL, "24668", "%4.1d",
-__LINE__, 0xffffff3eL, "ffffff3e", "%x",
-__LINE__, -0x0000010L, "-16", "%-2d",
-__LINE__, 0x000061aaL, "61AA", "%X",
-__LINE__, 0x000c2ec3L, "C2EC3", "%0X",
-__LINE__, -0x0000001L, "-1", "%-0d",
-__LINE__, 0x00130e17L, "+1248791", "%+.6ld",
-__LINE__, 0x000000efL, "EF", "%-X",
-__LINE__, -0x0000001L, " -1", "%+5ld",
-__LINE__, 0x0000989dL, "39069", "%d",
-__LINE__, 0x00000000L, "0", "%-x",
-__LINE__, 0x00000417L, "417", "%X",
-__LINE__, 0x00005e86L, "5E86", "%+X",
-__LINE__, -0x0007c08L, "-31752", "%ld",
-__LINE__, 0x00da8e0fL, "DA8E0F", "%2.2X",
-__LINE__, -0x3ee095ecL, "-1054905836", "% 0d",
-__LINE__, 0xfffdb5a3L, "fffdb5a3", "%x",
-__LINE__, 0xffffff83L, "FFFFFF83", "%X",
-__LINE__, 0xfff8efd7L, "0xfff8efd7", "%#x",
-__LINE__, 0x00000020L, " 32", "% d",
-__LINE__, 0xfff7c002L, "fff7c002", "%.7x",
-__LINE__, -0x0000001L, "-1", "%ld",
-__LINE__, 0x00000000L, " 000", "%05.3X",
-__LINE__, 0xfff190eeL, "FFF190EE", "%X",
-__LINE__, 0x00000a6cL, " 2668", "%#6.ld",
-__LINE__, 0x00037024L, "37024", "%x",
-__LINE__, 0xfffec37fL, "FFFEC37F", "%X",
-__LINE__, 0x007ee9bbL, "8317371", "%#0.ld",
-__LINE__, 0x00000122L, "290", "%ld",
-__LINE__, -0x0013b5fL, "-80735", "%ld",
-__LINE__, 0xfffffff6L, "FFFFFFF6", "%X",
-__LINE__, -0x0000c16L, "-0003094", "%-00.7d",
-__LINE__, -0x00010edL, "-4333", "%ld",
-__LINE__, 0x00000007L, " 0X007", "%#6.3X",
-__LINE__, 0x0053781eL, " 5470238", "% 2d",
-__LINE__, 0xffff03e9L, "0XFFFF03E9", "%+#7.3X",
-__LINE__, 0xfffffdc2L, "0xfffffdc2", "% #4.x",
-__LINE__, -0x00018e1L, "-6369", "%d",
-__LINE__, 0xf3a4abc6L, "F3A4ABC6", "%-.2X",
-__LINE__, 0xfff64a27L, "FFF64A27", "%7.7X",
-__LINE__, 0x00195ae5L, "195AE5", "%+03.X",
-__LINE__, 0xfff8849aL, "fff8849a", "%.1x",
-__LINE__, -0x001b045L, "-110661", "%+ld",
-__LINE__, 0x01e8a106L, "32022790", "%7.ld",
-__LINE__, 0x0008ee94L, "8EE94", "%X",
-__LINE__, 0xfffcdabcL, "FFFCDABC", "%X",
-__LINE__, 0xfda75cd2L, "fda75cd2", "%x",
-__LINE__, 0x00fd505aL, "fd505a", "%x",
-__LINE__, 0x00003748L, "3748", "%+x",
-__LINE__, 0xffffffe5L, "ffffffe5", "% 3.6x",
-__LINE__, -0x1d1c4045L, "-488390725", "%d",
-__LINE__, 0xfffffff9L, "0xfffffff9", "%#x",
-__LINE__, -0x0000001L, "-1", "%-#ld",
-__LINE__, 0x00000191L, "191", "%X",
-__LINE__, 0xfffffffeL, "FFFFFFFE", "%-X",
-__LINE__, -0x0000006L, "-6", "%ld",
-__LINE__, 0x00000033L, " 33", "% 4x",
-__LINE__, -0x0159a14L, "-1415700", "% ld",
-__LINE__, 0x000001c3L, "00001c3", "%07x",
-__LINE__, 0xffffe9e2L, "ffffe9e2", "%-x",
-__LINE__, 0x5b19abd9L, "0x5b19abd9", "%-#x",
-__LINE__, 0xffff1baeL, "0xffff1bae", "%#x",
-__LINE__, 0x00000001L, "+1", "%+d",
-__LINE__, 0x006a23c7L, "6A23C7", "%2.X",
-__LINE__, 0x000008a4L, " 8a4", "% 4.1x",
-__LINE__, 0xfffffcd9L, "fffffcd9", "%.1x",
-__LINE__, 0x0000121bL, "121B", "%X",
-__LINE__, 0x001231aaL, "1192362", "%7.d",
-__LINE__, -0x008026dL, "-524909", "%4.2d",
-__LINE__, 0x192ea594L, "422487444", "%ld",
-__LINE__, 0x0001a800L, "108544", "%0d",
-__LINE__, 0x000062f1L, "62f1", "%.4x",
-__LINE__, 0xff8b39b0L, "ff8b39b0", "% x",
-__LINE__, 0x00000001L, "0x1", "%+#x",
-__LINE__, 0x0000144aL, "5194", "%ld",
-__LINE__, 0x00002599L, "9625", "%d",
-__LINE__, 0xffa0a2efL, "ffa0a2ef", "%0x",
-__LINE__, 0xff6712e1L, "FF6712E1", "%0X",
-__LINE__, 0x0007ebb3L, "519091", "%1ld",
-__LINE__, 0x0000000fL, "15 ", "%-4.ld",
-__LINE__, -0x0000096L, "-150", "%2.ld",
-__LINE__, 0x0000004fL, "4F", "%.2X",
-__LINE__, 0xfffffc29L, "fffffc29", "%-4.x",
-__LINE__, 0x00000019L, "19", "%x",
-__LINE__, 0x00000c4eL, "c4e", "%x",
-__LINE__, 0x0000006bL, " 0006B", "%6.5X",
-__LINE__, 0x00c8d2c6L, "c8d2c6", "%.0x",
-__LINE__, -0x256fb8deL, "-628078814", "%ld",
-__LINE__, 0x4f51fcf4L, "4F51FCF4", "%+X",
-__LINE__, 0x000f000eL, "983054", "%1.ld",
-__LINE__, 0xfffff03fL, "fffff03f", "%x",
-__LINE__, 0x0000001dL, " 1D", "%05.X",
-__LINE__, 0x0072ea14L, "72ea14", "%x",
-__LINE__, -0xc6098b9L, "-207657145", "%-7d",
-__LINE__, 0x00000a76L, "2678", "%3ld",
-__LINE__, 0xfff84db3L, "FFF84DB3", "%X",
-__LINE__, 0x0fb52870L, "fb52870", "%+x",
-__LINE__, 0x08bc170aL, "0x8bc170a", "%#x",
-__LINE__, 0xfffeeb00L, "fffeeb00", "%0.5x",
-__LINE__, 0x000ece95L, "970389", "%d",
-__LINE__, 0x00000000L, "0", "%0X",
-__LINE__, 0x07f98e8aL, "7f98e8a", "% x",
-__LINE__, 0x000499ebL, " 499eb", "% 6.x",
-__LINE__, 0xffffffffL, "FFFFFFFF", "%-X",
-__LINE__, 0x0aa45e86L, "178544262", "%#.2d",
-__LINE__, 0xff73387dL, "FF73387D", "%03.X",
-__LINE__, 0xfffffb51L, "FFFFFB51", "%.3X",
-__LINE__, 0xffffffdcL, "ffffffdc", "%6.x",
-__LINE__, 0xffffffedL, "FFFFFFED", "%-X",
-__LINE__, 0x0001c4c2L, "1c4c2", "%0.3x",
-__LINE__, -0x0000001L, "-0000001", "%-#.7d",
-__LINE__, 0x00000007L, "7", "%0.x",
-__LINE__, 0x00000001L, "1", "%ld",
-__LINE__, 0xffffd000L, "ffffd000", "%4.3x",
-__LINE__, 0x00000030L, "48", "%2.d",
-__LINE__, -0x6c121ceL, "-113320398", "%.5ld",
-__LINE__, 0x000001edL, "1ED", "% 3.X",
-__LINE__, 0xfffff0f3L, "FFFFF0F3", "%+.6X",
-__LINE__, 0xffffffecL, "ffffffec", "%x",
-__LINE__, 0x002d5ab8L, "0x2d5ab8", "%-#x",
-__LINE__, 0x0026acffL, "2534655", "%0ld",
-__LINE__, 0x01d90cd7L, "+31001815", "%+.2ld",
-__LINE__, -0x1f7abc0L, "-33008576", "%7.6d",
-__LINE__, 0xfc5babccL, "fc5babcc", "%x",
-__LINE__, -0x9b74892L, "-163006610", "% .6d",
-__LINE__, 0x03931d84L, "59972996", "%0.d",
-__LINE__, 0x07d261ceL, "131228110", "%#ld",
-__LINE__, 0x00000000L, "0", "%x",
-__LINE__, 0x00000002L, "2", "%+X",
-__LINE__, -0x0000604L, "-1540", "%+d",
-__LINE__, 0x00000000L, " ", "%7.x",
-__LINE__, 0x00000001L, "1", "%.0X",
-__LINE__, -0x0005a8eL, "-23182", "% d",
-__LINE__, 0x03fb2730L, "3fb2730", "%7.x",
-__LINE__, 0xffffff03L, "ffffff03", "%x",
-__LINE__, 0x00000000L, " ", "%-#3.d",
-__LINE__, 0x04025a4bL, "0X4025A4B", "%+#X",
-__LINE__, -0x0000001L, " -1", "%4.d",
-__LINE__, 0xfffe00a3L, "FFFE00A3", "%+X",
-__LINE__, -0x1b26e3c8L, "-455533512", "% ld",
-__LINE__, 0x000017e5L, "6117", "%d",
-__LINE__, -0x0e4f3b6L, "-15004598", "%0ld",
-__LINE__, 0x00000034L, "52", "%ld",
-__LINE__, 0x0000024cL, " 24C", "%4X",
-__LINE__, 0xfffedf65L, "FFFEDF65", "%-0X",
-__LINE__, -0x000ff1fL, "-65311", "%+#d",
-__LINE__, 0x00000007L, " 7", "%7.x",
-__LINE__, 0x018656aeL, "18656ae", "%3.7x",
-__LINE__, -0x0000004L, "-4", "%d",
-__LINE__, 0x7081292dL, "1887512877", "%d",
-__LINE__, 0x87d3e48cL, "87d3e48c", "%-x",
-__LINE__, 0xf99c516eL, "0xf99c516e", "% #7.4x",
-__LINE__, 0xfffffffaL, "FFFFFFFA", "%-1X",
-__LINE__, -0x000001dL, "-29", "%#ld",
-__LINE__, -0x0000001L, "-1", "%+ld",
-__LINE__, 0x28ab3350L, " 682308432", "% 1d",
-__LINE__, -0x0000006L, "-6", "%ld",
-__LINE__, 0xfffffffbL, "FFFFFFFB", "%.5X",
-__LINE__, -0x0000007L, "-7", "%#d",
-__LINE__, -0x0000328L, " -808", "%6.ld",
-__LINE__, -0x29386f00L, "-691564288", "%.3d",
-__LINE__, -0x059f38aL, "-5895050", "%.4ld",
-__LINE__, 0xfffff888L, "FFFFF888", "%3X",
-__LINE__, 0xffffffdfL, "ffffffdf", "%0.0x",
-__LINE__, -0xb4fc354L, "-189776724", "%2d",
-__LINE__, 0x00058c07L, "363527", "%1.d",
-__LINE__, 0x0a256162L, "a256162", "%x",
-__LINE__, -0x05c87b0L, "-6064048", "%0ld",
-__LINE__, 0xfffffda1L, "fffffda1", "%x",
-__LINE__, 0x000034b7L, "13495", "%d",
-__LINE__, -0x6d1a8918L, "-1830455576", "%.1d",
-__LINE__, 0x00022290L, "139920", "%05ld",
-__LINE__, 0x00000000L, "0", "%-x",
-__LINE__, -0x1f8eafceL, "-529444814", "%4.d",
-__LINE__, -0x7bf32808L, "-2079533064", "% ld",
-__LINE__, 0x0000023cL, "23c", "% x",
-__LINE__, 0x00000039L, "39", "%X",
-__LINE__, -0x000556dL, "-21869", "%ld",
-__LINE__, -0x00000caL, "-202", "%ld",
-__LINE__, 0x00002e28L, "11816", "%-d",
-__LINE__, 0x00000011L, "17", "%-ld",
-__LINE__, 0xfffffffbL, "FFFFFFFB", "%-X",
-__LINE__, 0xfffdd67fL, "0XFFFDD67F", "%#X",
-__LINE__, -0x000003dL, "-61", "%d",
-__LINE__, 0x0000bfceL, "0XBFCE", "%-#5.2X",
-__LINE__, 0xfffffffcL, "fffffffc", "%x",
-__LINE__, -0x00aea17L, "-715287", "%.5d",
-__LINE__, -0x02fce89L, "-3133065", "%0d",
-__LINE__, 0x007f6ed1L, "7F6ED1", "%6X",
-__LINE__, 0xffffffffL, "FFFFFFFF", "%X",
-__LINE__, -0x0002761L, "-10081", "%#6.2d",
-__LINE__, 0x003be8d8L, "3BE8D8", "%-X",
-__LINE__, 0x00000901L, " 2305", "%6.d",
-__LINE__, 0x00049916L, "0301334", "%3.7ld",
-__LINE__, 0x0678ffeaL, "0X678FFEA", "%#4X",
-__LINE__, 0xffffffffL, "ffffffff", "%+.0x",
-__LINE__, -0x31d2ec61L, "-835906657", "%.0d",
-__LINE__, 0xfffffffcL, "FFFFFFFC", "%0X",
-__LINE__, -0x0015588L, "-87432", "%d",
-__LINE__, 0xffffff3eL, "ffffff3e", "%.4x",
-__LINE__, 0x0000000aL, "10", "%d",
-__LINE__, -0x0000003L, "-3", "%2.1ld",
-__LINE__, -0x000d29aL, "-53914", "%ld",
-__LINE__, -0x04ccbe0L, "-5032928", "%2.2ld",
-__LINE__, 0x0357c2a5L, "357c2a5", "% 7.x",
-__LINE__, 0x00000009L, " 9", "% 1.ld",
-__LINE__, -0x005908dL, "-364685", "%0d",
-__LINE__, -0x0000de6L, "-3558", "%0ld",
-__LINE__, 0x2d395e6bL, "+758734443", "%+6d",
-__LINE__, 0x001aba58L, "1ABA58", "% X",
-__LINE__, 0x0ceba5abL, "0XCEBA5AB", "%#.1X",
-__LINE__, -0x01a8575L, "-1738101", "% 2ld",
-__LINE__, 0x0000000dL, "13", "%#ld",
-__LINE__, 0x00000000L, "0", "%d",
-__LINE__, 0x4b856407L, "4b856407", "%5x",
-__LINE__, 0x006f333cL, "6F333C", "%-X",
-__LINE__, 0x000000d0L, "d0", "%x",
-__LINE__, 0x2ecf0d4eL, "2ecf0d4e", "%0x",
-__LINE__, -0x0000188L, "-0000392", "%#1.7ld",
-__LINE__, -0x0000037L, "-55", "%d",
-__LINE__, 0xfffffff1L, "FFFFFFF1", "% .1X",
-__LINE__, 0x00000001L, "0x1", "%#3x",
-__LINE__, 0x000005edL, "5ED", "%3X",
-__LINE__, 0x031183a3L, "31183A3", "%X",
-__LINE__, 0xffffffffL, "ffffffff", "%x",
-__LINE__, -0x0018695L, "-99989", "%-0.5ld",
-__LINE__, -0x0000001L, "-01", "%0.2ld",
-__LINE__, 0x00007822L, "7822", "%+x",
-__LINE__, 0x00000000L, "0", "% x",
-__LINE__, 0xfda2461aL, "FDA2461A", "%X",
-__LINE__, 0x065c50efL, "106713327", "%2.ld",
-__LINE__, 0x00000a81L, "a81", "% 0x",
-__LINE__, -0x000022eL, "-558", "%.0ld",
-__LINE__, 0x00013d2fL, "81199", "%.2ld",
-__LINE__, 0xfffffffeL, "FFFFFFFE", "%+X",
-__LINE__, 0x000015f9L, "5625", "%04.ld",
-__LINE__, 0x0ab575a2L, "179664290", "%0d",
-__LINE__, 0x0024d07fL, "0X24D07F", "%#X",
-__LINE__, 0x07ee35e1L, "7EE35E1", "%+X",
-__LINE__, -0x00c114cL, "-790860", "%#ld",
-__LINE__, 0x00003be3L, " 15331", "%07.d",
-__LINE__, 0xfff87570L, "FFF87570", "%4.0X",
-__LINE__, -0x14eab419L, "-350925849", "%-ld",
-__LINE__, -0x000001bL, "-27", "%ld",
-__LINE__, 0x167ce2eaL, "0x167ce2ea", "%#0.x",
-__LINE__, -0x00009bcL, "-002492", "% 3.6d",
-__LINE__, 0xfffffdb9L, "0XFFFFFDB9", "%#7.X",
-__LINE__, 0x008b2b9dL, "8B2B9D", "% X",
-__LINE__, 0x000cfec3L, "CFEC3", "% 05X",
-__LINE__, 0x05970be6L, "5970be6", "%x",
-__LINE__, 0x00002780L, "010112", "%2.6d",
-__LINE__, 0x00000005L, "+5", "%+d",
-__LINE__, 0xfffffffbL, "0xfffffffb", "%#3.x",
-__LINE__, 0x00000001L, "1 ", "%-#5.ld",
-__LINE__, -0x0000017L, "-23", "%ld",
-__LINE__, -0x023b943L, "-2341187", "%d",
-__LINE__, 0x0000000dL, "13", "%ld",
-__LINE__, 0x00025a03L, "25a03", "% .5x",
-__LINE__, 0x3e1ebe24L, "3e1ebe24", "% x",
-__LINE__, 0x0000013aL, "0x13a", "%#5.0x",
-__LINE__, 0xfff6f5b3L, "FFF6F5B3", "%4.X",
-__LINE__, -0x0000a8aL, "-2698", "%.3d",
-__LINE__, 0x0009dd5fL, "9dd5f", "%x",
-__LINE__, 0x000003c7L, " 3C7", "%04.2X",
-__LINE__, 0x1bcfa2f2L, "1bcfa2f2", "%+1.x",
-__LINE__, 0x0001b4f4L, "1b4f4", "%+1.x",
-__LINE__, 0x1bc19a90L, "465672848", "%#d",
-__LINE__, 0xffffffffL, "ffffffff", "%+06x",
-__LINE__, -0x0000a88L, "-2696", "%3.d",
-__LINE__, 0x00084a19L, "84A19", "%-X",
-__LINE__, 0xffe1fc8fL, "FFE1FC8F", "%0.1X",
-__LINE__, -0x0000a3aL, "-2618", "%5d",
-__LINE__, -0x0000001L, "-1", "%ld",
-__LINE__, -0x5c6183dL, "-96868413", "%+ld",
-__LINE__, -0x0000001L, "-1", "%-d",
-__LINE__, 0x0000faa8L, "64168", "%05.d",
-__LINE__, 0x003913efL, "3740655", "%ld",
-__LINE__, 0x0dde330aL, "232665866", "%#ld",
-__LINE__, 0xfcfb1a7bL, "FCFB1A7B", "%+X",
-__LINE__, 0x07b1a81fL, " 129083423", "% 0d",
-__LINE__, 0x00000001L, "1", "%d",
-__LINE__, 0x00000070L, " 112", "%5ld",
-__LINE__, 0xffff74d9L, "ffff74d9", "%x",
-__LINE__, -0x001ab93L, "-109459", "%03.d",
-__LINE__, 0x0eb6b497L, "EB6B497", "%+X",
-__LINE__, 0x07adbac2L, "128826050", "%#0.4d",
-__LINE__, 0xff747068L, "FF747068", "%6.X",
-__LINE__, -0x190ce98fL, "-420276623", "%06.6ld",
-__LINE__, -0x0000007L, "-7", "%.0d",
-__LINE__, 0x0001240fL, "1240f", "% 3x",
-__LINE__, 0x267ae4a0L, "645588128", "%-#ld",
-__LINE__, -0x0000001L, "-1", "% ld",
-__LINE__, -0x0000066L, "-00102", "%.5ld",
-__LINE__, 0x868fa035L, "868fa035", "%x",
-__LINE__, 0x00000000L, " ", "%-4.ld",
-__LINE__, 0xfffffe72L, "FFFFFE72", "%4.4X",
-__LINE__, 0x00a6b4f4L, "10925300", "%#ld",
-__LINE__, -0x0000002L, "-2", "%00.1d",
-__LINE__, -0x00000a3L, "-163", "%ld",
-__LINE__, 0xfffffffeL, "fffffffe", "% 3.x",
-__LINE__, 0xffe25941L, "ffe25941", "% x",
-__LINE__, 0x0000a20fL, "41487", "%ld",
-__LINE__, -0x000009bL, "-155", "%#.3ld",
-__LINE__, 0x000c5dc1L, "810433", "%4.ld",
-__LINE__, 0x00003ec4L, "16068", "%ld",
-__LINE__, 0x000002f3L, "0755", "%04ld",
-__LINE__, 0xffffff28L, "FFFFFF28", "%.5X",
-__LINE__, -0x08450ffL, "-8671487", "%-3.0ld",
-__LINE__, 0x00000092L, "92", "%x",
-__LINE__, -0x0000317L, "-791", "%d",
-__LINE__, 0x0000000dL, "d", "%x",
-__LINE__, 0x00000036L, "36", "%x",
-__LINE__, -0x112693fL, "-17983807", "%ld",
-__LINE__, 0x00004226L, "16934", "%0.d",
-__LINE__, 0x000001baL, " 442", "% ld",
-__LINE__, 0xfffffffcL, "0XFFFFFFFC", "%#4X",
-__LINE__, 0xffdb3d23L, "0xffdb3d23", "% #x",
-__LINE__, 0x039eb84dL, "39EB84D", "%+.6X",
-__LINE__, 0xffffc7daL, "ffffc7da", "%0x",
-__LINE__, 0xfffffdb6L, "FFFFFDB6", "%6X",
-__LINE__, 0x001b75b0L, "1799600", "%ld",
-__LINE__, 0xfffffca2L, "FFFFFCA2", "%-X",
-__LINE__, 0xffffffbaL, "ffffffba", "%7.4x",
-__LINE__, -0x000124eL, "-4686", "%3.ld",
-__LINE__, -0x000bec0L, "-48832", "% 0d",
-__LINE__, 0xfffffca0L, "fffffca0", "%2.x",
-__LINE__, 0x00b2a462L, "11707490", "%ld",
-__LINE__, 0x0745a647L, "745a647", "%+4.x",
-__LINE__, 0xfffffbacL, "0XFFFFFBAC", "%#3.X",
-__LINE__, -0x0000002L, "-2", "%-0.1d",
-__LINE__, 0x0006cfdbL, "446427", "%#5.d",
-__LINE__, -0x0000001L, "-1", "%d",
-__LINE__, 0x043b134eL, "43B134E", "%X",
-__LINE__, -0x0000015L, "-21", "%ld",
-__LINE__, -0x0000114L, "-276", "%0d",
-__LINE__, -0x0004d4aL, "-19786", "%-d",
-__LINE__, -0x000001cL, "-28", "%ld",
-__LINE__, -0x0cb89fcL, "-13339132", "%ld",
-__LINE__, 0xffffffcfL, "ffffffcf", "%x",
-__LINE__, 0xf6d2387aL, "f6d2387a", "%-x",
-__LINE__, -0x00000cdL, "-205", "%#ld",
-__LINE__, 0x00000000L, "0", "%#x",
-__LINE__, 0xfffffc81L, "fffffc81", "%x",
-__LINE__, 0x00000000L, " 0", "% ld",
-__LINE__, 0x00024fb5L, "24fb5", "%x",
-__LINE__, 0x000012faL, "12FA", "%X",
-__LINE__, 0x0318ce7cL, "51957372", "%0d",
-__LINE__, 0x02280a99L, "2280a99", "%-x",
-__LINE__, 0xffffff5cL, "FFFFFF5C", "%2.X",
-__LINE__, -0x000002eL, " -46", "%7ld",
-__LINE__, -0x04a73e8L, "-4879336", "%4ld",
-__LINE__, 0x000007f3L, "7f3", "% 1.3x",
-__LINE__, 0x00000114L, "0x114", "%#x",
-__LINE__, 0x0000030cL, "30c", "%-x",
-__LINE__, 0x001dd0ddL, "0x1dd0dd", "%+#5.5x",
-__LINE__, 0xfff23de3L, "fff23de3", "%-x",
-__LINE__, -0x0178f9cL, "-1544092", "%d",
-__LINE__, 0x02ded8daL, "2DED8DA", "%X",
-__LINE__, -0x0991672L, "-10032754", "%3.d",
-__LINE__, 0x6943c150L, "6943c150", "%x",
-__LINE__, 0xffffc25dL, "FFFFC25D", "%4X",
-__LINE__, 0x00000c9cL, " 0003228", "% .7d",
-__LINE__, 0xffffffdfL, "FFFFFFDF", "% 6.X",
-__LINE__, 0x0001a145L, " 1a145", "%6.0x",
-__LINE__, 0xffdc832fL, "0xffdc832f", "%#.1x",
-__LINE__, 0x00699f7bL, "699f7b", "%x",
-__LINE__, 0xf9575268L, "F9575268", "%+0X",
-__LINE__, 0x04eb4783L, "82528131", "%-ld",
-__LINE__, -0x0000023L, "-35", "%0ld",
-__LINE__, -0x012b08aL, "-1224842", "%0d",
-__LINE__, 0xffffb587L, "FFFFB587", "%X",
-__LINE__, 0xffffffe9L, "ffffffe9", "%x",
-__LINE__, 0x006b5596L, " 7034262", "% 0d",
-__LINE__, 0x004d0d2aL, "+5049642", "%+ld",
-__LINE__, -0x002a099L, "-172185", "%d",
-__LINE__, 0x00000224L, "548", "%ld",
-__LINE__, 0x03e0cca8L, "65064104", "%d",
-__LINE__, -0x7bb389dL, "-129710237", "%.3ld",
-__LINE__, 0xffc630f5L, "ffc630f5", "%-07.0x",
-__LINE__, 0xfffffff8L, "FFFFFFF8", "%X",
-__LINE__, 0x0030225bL, "3154523", "%#d",
-__LINE__, 0xff7f4e28L, "ff7f4e28", "%+4.x",
-__LINE__, 0x14ee154dL, "+351147341", "%+ld",
-__LINE__, 0x00000003L, "03", "%.2d",
-__LINE__, 0xfe0359d6L, "fe0359d6", "%x",
-__LINE__, 0x002b71c3L, "2847171", "%d",
-__LINE__, 0x055c4d4aL, "55C4D4A", "%-X",
-__LINE__, 0xfffb17d2L, "fffb17d2", "% .0x",
-__LINE__, 0x00000002L, "2", "%x",
-__LINE__, 0x000018e1L, "18E1", "%1.1X",
-__LINE__, 0x00000331L, "817", "%0d",
-__LINE__, -0x0000982L, "-2434 ", "%-06.ld",
-__LINE__, -0x0000168L, "-0000360", "%.7ld",
-__LINE__, 0xffffffe9L, "FFFFFFE9", "%-0.4X",
-__LINE__, 0xe42084efL, "E42084EF", "%X",
-__LINE__, 0x000000aaL, "aa", "%x",
-__LINE__, -0xe8b98b5L, "-244029621", "%+d",
-__LINE__, -0x00000d9L, "-217", "%+2.d",
-__LINE__, 0x0000027bL, "27B", "%+.0X",
-__LINE__, 0x002e52dbL, "3035867", "%-ld",
-__LINE__, -0x00e2ba8L, "-928680", "%0.2ld",
-__LINE__, 0x003b74d8L, "3B74D8", "%X",
-__LINE__, -0x000006fL, "-111", "%+ld",
-__LINE__, 0xf8507e22L, "0XF8507E22", "%-#X",
-__LINE__, 0x0629f4c0L, "103412928", "%-ld",
-__LINE__, -0x000002dL, "-45", "%0d",
-__LINE__, -0x0001db0L, "-7600", "%d",
-__LINE__, -0x00001bbL, " -443", "%5.ld",
-__LINE__, 0xffffd2b9L, "ffffd2b9", "%+x",
-__LINE__, 0xffffe685L, "0XFFFFE685", "%#0.7X",
-__LINE__, 0x0000a4ceL, "A4CE", "% X",
-__LINE__, 0xffffffffL, "FFFFFFFF", "%X",
-__LINE__, 0x0000000cL, "C", "% X",
-__LINE__, 0xfff59369L, "FFF59369", "%7X",
-__LINE__, 0x00000156L, " 156", "%5.X",
-__LINE__, 0x02833aa9L, "+42154665", "%+2d",
-__LINE__, 0x0004a8f3L, "+305395", "%+d",
-__LINE__, 0x01a09267L, "1A09267", "%0.3X",
-__LINE__, 0x000004f1L, "4f1", "%x",
-__LINE__, 0x00000005L, "5", "%x",
-__LINE__, 0x00000119L, " 0281", "% #2.4ld",
-__LINE__, -0x0001a2aL, "-6698", "%ld",
-__LINE__, 0xa3633a57L, "A3633A57", "%7X",
-__LINE__, -0x10bd2970L, "-280832368", "%-d",
-__LINE__, 0xffff9c38L, "ffff9c38", "%x",
-__LINE__, 0xffdbe81eL, "ffdbe81e", "%+6.7x",
-__LINE__, 0xffffffe7L, "FFFFFFE7", "%-3.0X",
-__LINE__, 0x0002f6d6L, "2f6d6", "%5.x",
-__LINE__, 0xffffffffL, "ffffffff", "% x",
-__LINE__, 0xffc2c07aL, "ffc2c07a", "%0.x",
-__LINE__, 0xfcc0e13aL, "FCC0E13A", "%X",
-__LINE__, 0x0000000dL, "d", "% x",
-__LINE__, 0x0016cac8L, "16CAC8", "%-0.3X",
-__LINE__, 0x00945dc1L, "9723329", "%2d",
-__LINE__, 0xf19a1cd1L, "F19A1CD1", "%-X",
-__LINE__, 0x00000003L, "+3", "%+ld",
-__LINE__, 0x00000773L, "1907", "%ld",
-__LINE__, 0x000263e6L, "263e6", "%-x",
-__LINE__, -0x0238b55L, "-2329429", "%d",
-__LINE__, 0x00006c56L, "6C56", "%X",
-__LINE__, 0x0000f34bL, "62283", "%#.0ld",
-__LINE__, -0x1620e21L, "-23203361", "%0ld",
-__LINE__, 0xf9257d6aL, "f9257d6a", "%2x",
-__LINE__, -0x00ed463L, "-971875", "%03.d",
-__LINE__, 0x02bb94c6L, "45847750", "%d",
-__LINE__, 0xffffd20cL, "0XFFFFD20C", "%#X",
-__LINE__, 0x000087d8L, "34776", "%.0d",
-__LINE__, 0xfffffffcL, "FFFFFFFC", "%+7.X",
-__LINE__, -0x0009cd5L, "-40149", "%-ld",
-__LINE__, 0xfffff85eL, "FFFFF85E", "% 0.7X",
-__LINE__, -0x0000006L, " -6", "%+#6.ld",
-__LINE__, 0x007ff453L, "0x7ff453", "%-#1.x",
-__LINE__, 0xffffffe6L, "FFFFFFE6", "%2X",
-__LINE__, 0x0000001fL, "0X1F", "%#4X",
-__LINE__, -0x001c157L, "-115031", "%.3ld",
-__LINE__, 0x00096e06L, "617990", "%3.1ld",
-__LINE__, 0x0f77271dL, "259467037", "%d",
-__LINE__, -0x0001403L, "-5123", "%d",
-__LINE__, 0xffffff8aL, "ffffff8a", "%x",
-__LINE__, -0x000010fL, "-271", "%1.ld",
-__LINE__, 0xe573cc4aL, "E573CC4A", "%0X",
-__LINE__, -0x0000d88L, "-3464", "%-d",
-__LINE__, 0x0000000eL, "14", "%#ld",
-__LINE__, -0x000345bL, "-13403", "%#d",
-__LINE__, 0x00000602L, "602", "%+x",
-__LINE__, 0x00000011L, "17", "%#d",
-__LINE__, -0x0000002L, "-2", "%+d",
-__LINE__, 0x030fe6e6L, "51373798", "%d",
-__LINE__, 0x00000007L, "007", "%.3X",
-__LINE__, 0x0001abe0L, "0X1ABE0", "%+#.4X",
-__LINE__, 0xfffffdb7L, "fffffdb7", "%-6x",
-__LINE__, 0xffffff8dL, "FFFFFF8D", "% 02.2X",
-__LINE__, 0xfff12126L, "FFF12126", "%X",
-__LINE__, 0x0208e32dL, "34136877", "%.2d",
-__LINE__, 0x11c04b55L, "297814869", "%ld",
-__LINE__, 0xff1e5ca3L, "0xff1e5ca3", "%#x",
-__LINE__, 0xf9643f09L, "f9643f09", "%x",
-__LINE__, -0x003c6daL, "-247514", "%4d",
-__LINE__, 0xff69d0e7L, "FF69D0E7", "%-X",
-__LINE__, 0x00006ae9L, "0x6ae9", "%#x",
-__LINE__, -0x005aefeL, "-372478", "%d",
-__LINE__, 0x0000000dL, "00013", "%3.5ld",
-__LINE__, 0x00cc185cL, "CC185C", "%X",
-__LINE__, 0x3dd14d9fL, "3DD14D9F", "%1.4X",
-__LINE__, -0x4cc2ad3L, "-80489171", "%1.d",
-__LINE__, 0xfffff79eL, "fffff79e", "%x",
-__LINE__, 0xfffeeb03L, "fffeeb03", "%-1x",
-__LINE__, -0x0b1b15cL, "-11645276", "%0ld",
-__LINE__, -0x06b558dL, "-7034253", "%ld",
-__LINE__, 0xfffffe61L, "fffffe61", "%x",
-__LINE__, -0x0000002L, "-2", "%d",
-__LINE__, -0x0000162L, "-000354", "%-5.6d",
-__LINE__, 0x01a23780L, "27408256", "%d",
-__LINE__, 0xffff3a9bL, "ffff3a9b", "% x",
-__LINE__, 0xfffffdc7L, "0xfffffdc7", "%#4.5x",
-__LINE__, 0x00000000L, "00", "%.2X",
-__LINE__, -0x0000006L, "-6", "%0ld",
-__LINE__, -0x16072c6L, "-23098054", "%#5ld",
-__LINE__, -0x07152b8L, "-7426744", "%01ld",
-__LINE__, 0x0000d6c6L, "0x0d6c6", "%#1.5x",
-__LINE__, 0x00000f7cL, "000f7c", "%+04.6x",
-__LINE__, 0x00000bd0L, "3024", "%4ld",
-__LINE__, 0x0000295eL, "0x295e", "%#x",
-__LINE__, 0x00002e38L, "11832", "%.5d",
-__LINE__, -0xa2f5de4L, "-170876388", "%#d",
-__LINE__, -0x001aa36L, "-109110", "%-#d",
-__LINE__, 0x03012091L, "3012091", "%+2.5X",
-__LINE__, -0x00009edL, "-002541", "%-0.6ld",
-__LINE__, 0x0000001dL, "1d", "%x",
-__LINE__, 0xffffe315L, "FFFFE315", "%+4X",
-__LINE__, 0x0000716bL, "716B", "%X",
-__LINE__, 0xfffb8315L, "0xfffb8315", "%+#x",
-__LINE__, 0x00000132L, "132 ", "%-7.3x",
-__LINE__, 0x00000000L, "+0000000", "%+1.7d",
-__LINE__, 0xe16d27abL, "E16D27AB", "%X",
-__LINE__, 0xffffffe5L, "ffffffe5", "%+x",
-__LINE__, -0x000ab9dL, "-43933", "%ld",
-__LINE__, 0xffd042d6L, "ffd042d6", "%2x",
-__LINE__, 0xffffff9bL, "ffffff9b", "%x",
-__LINE__, 0x000000fbL, "0xfb", "% #1.x",
-__LINE__, 0x0000000fL, " 15", "%#3ld",
-__LINE__, 0xfffba2d8L, "0XFFFBA2D8", "%-#0.X",
-__LINE__, 0xfffffff8L, "0XFFFFFFF8", "% #X",
-__LINE__, 0x00000000L, " ", "%4.ld",
-__LINE__, 0x00000002L, "2", "%+x",
-__LINE__, 0xfffff314L, "FFFFF314", "%-X",
-__LINE__, 0x00000000L, " 0", "% ld",
-__LINE__, -0x0000007L, "-07", "%3.2ld",
-__LINE__, 0xffffdd80L, "FFFFDD80", "%.6X",
-__LINE__, -0x000001bL, "-27", "%-ld",
-__LINE__, -0x0000258L, "-600", "%-0d",
-__LINE__, 0x00016377L, "16377", "%3X",
-__LINE__, 0x00000001L, "1", "%X",
-__LINE__, -0xac5d314L, "-180736788", "%d",
-__LINE__, -0x000036eL, "-878", "% ld",
-__LINE__, 0xfe346af4L, "fe346af4", "%.5x",
-__LINE__, 0xffffffe1L, "ffffffe1", "%-7.6x",
-__LINE__, -0x0a1df07L, "-10608391", "%#.5d",
-__LINE__, 0x000000c9L, " 0XC9", "%+#5.X",
-__LINE__, 0xfffffffeL, "fffffffe", "%x",
-__LINE__, 0xfffffff8L, "fffffff8", "%+x",
-__LINE__, -0x4517255L, "-72446549", "%.6ld",
-__LINE__, 0xfffa3670L, "FFFA3670", "%-6X",
-__LINE__, 0xffffffe0L, "ffffffe0", "%2.x",
-__LINE__, 0xffffffffL, "ffffffff", "%0x",
-__LINE__, 0x0000230dL, "8973", "%#.1d",
-__LINE__, 0x00000238L, "238", "%0X",
-__LINE__, 0xfffce5abL, "FFFCE5AB", "%-X",
-__LINE__, 0x0000002cL, "2C", "%X",
-__LINE__, 0x00000001L, " 1", "%4.ld",
-__LINE__, 0xffffff8dL, "FFFFFF8D", "%-X",
-__LINE__, 0x00069c69L, "433257", "%06d",
-__LINE__, 0xfffffb8dL, "0xfffffb8d", "%#x",
-__LINE__, 0x000d6a2dL, "879149", "%5.5d",
-__LINE__, -0x0001fcbL, " -8139", "%7.ld",
-__LINE__, 0xfff86937L, "fff86937", "%-0x",
-__LINE__, 0x00059cf9L, "367865", "%#.0ld",
-__LINE__, 0x02c5d87aL, "46520442", "%3.ld",
-__LINE__, 0x00000571L, "1393", "%ld",
-__LINE__, 0x0003c73fL, "+247615", "%+4ld",
-__LINE__, 0x0000004fL, "4f", "% 0x",
-__LINE__, 0x00000000L, "0", "%-ld",
-__LINE__, -0x0e5850fL, "-15041807", "% ld",
-__LINE__, -0x0000002L, " -0002", "%7.4d",
-__LINE__, 0xfffffd1bL, "fffffd1b", "%05x",
-__LINE__, 0x0000041cL, " 1052", "% #0.ld",
-__LINE__, -0x0000030L, "-48", "%d",
-__LINE__, -0x0013593L, "-79251", "% #d",
-__LINE__, 0x00000001L, "1", "%+X",
-__LINE__, 0x0000056bL, " 56b", "%4.x",
-__LINE__, -0x0000004L, "-4 ", "%-3d",
-__LINE__, -0x0000003L, "-3", "% ld",
-__LINE__, 0xffff7c14L, "0XFFFF7C14", "%#X",
-__LINE__, 0x02f63dd8L, "49692120", "%.7ld",
-__LINE__, -0x03c51c9L, "-3953097", "%+d",
-__LINE__, 0x00ded685L, "14603909", "%5.ld",
-__LINE__, 0xffffffbaL, "ffffffba", "%x",
-__LINE__, 0x000370e8L, "225512", "%#ld",
-__LINE__, 0x00000003L, "3", "%X",
-__LINE__, -0x0024a64L, "-150116", "%7.d",
-__LINE__, 0xff486ca1L, "ff486ca1", "%x",
-__LINE__, 0x000001cfL, "1CF", "% X",
-__LINE__, -0x0002d7eL, "-11646", "%-0d",
-__LINE__, 0x0a594c65L, "a594c65", "%.4x",
-__LINE__, -0x0000002L, "-0002", "%-5.4ld",
-__LINE__, 0x00000000L, "", "%00.ld",
-__LINE__, 0x00058bc4L, "58BC4", "%3X",
-__LINE__, 0x0002cf8eL, " 184206", "% 0ld",
-__LINE__, 0x000009c7L, "+2503", "%+4.ld",
-__LINE__, 0xed0c984dL, "ED0C984D", "%X",
-__LINE__, -0x0000058L, "-088", "%#.3ld",
-__LINE__, 0x0076083dL, "0X76083D", "%#6X",
-__LINE__, -0x0000001L, "-1", "%#d",
-__LINE__, -0x6bf1777L, "-113186679", "%#ld",
-__LINE__, -0x000011fL, "-287", "%ld",
-__LINE__, 0x001b0e7dL, "1B0E7D", "%-4X",
-__LINE__, 0x000007acL, " 1964", "%5.ld",
-__LINE__, 0x00000005L, "5", "%0.d",
-__LINE__, -0x00003baL, "-954", "%4.0ld",
-__LINE__, 0xfffffffeL, "FFFFFFFE", "%X",
-__LINE__, 0x00000019L, "19", "%x",
-__LINE__, 0xffffffe0L, "ffffffe0", "%-.6x",
-__LINE__, 0x0000012aL, " 298", "% d",
-__LINE__, 0x00002c74L, "2c74", "% 4.3x",
-__LINE__, 0x000002d5L, "725", "%d",
-__LINE__, 0x0001c9a9L, "1c9a9", "%-02x",
-__LINE__, 0xffc928c8L, "ffc928c8", "%x",
-__LINE__, -0x03ae51fL, "-3859743", "% #ld",
-__LINE__, 0x0000526dL, "526d", "%x",
-__LINE__, -0x00028f0L, "-10480", "%5ld",
-__LINE__, -0x49b4262L, "-77283938", "%+02.0d",
-__LINE__, 0x028d37f0L, "0x28d37f0", "%+#x",
-__LINE__, 0xd66e0af9L, "D66E0AF9", "%03.X",
-__LINE__, -0x00c7707L, "-816903", "%0d",
-__LINE__, -0x00000d0L, "-208", "%-.1ld",
-__LINE__, 0x0000c328L, "49960", "%d",
-__LINE__, 0x34cb86f1L, "34CB86F1", "%X",
-__LINE__, 0x000000f6L, "F6", "%+X",
-__LINE__, 0x0a3407ecL, "0xa3407ec", "%-#x",
-__LINE__, 0x00007ebcL, "32444", "%#3.d",
-__LINE__, 0xfffd3d65L, "fffd3d65", "%x",
-__LINE__, 0x0007bc82L, "0507010", "%0.7d",
-__LINE__, 0x0005bb93L, "375699", "%ld",
-__LINE__, 0x0ec11cc8L, "0XEC11CC8", "%+#6.2X",
-__LINE__, 0xfffff9c6L, "fffff9c6", "%.5x",
-__LINE__, 0xff05ab70L, "0XFF05AB70", "%-#.3X",
-__LINE__, 0x2328b716L, "589870870", "%d",
-__LINE__, 0x00001a79L, "6777", "%.1d",
-__LINE__, 0xfffee573L, "fffee573", "%0.1x",
-__LINE__, -0x0000929L, " -2345", "%7.d",
-__LINE__, 0xffffff9aL, "FFFFFF9A", "%2.X",
-__LINE__, 0xfffffe60L, "fffffe60", "%.5x",
-__LINE__, 0xfffffcd2L, "fffffcd2", "%.7x",
-__LINE__, 0x00000001L, " 001", "%6.3X",
-__LINE__, 0x00011e9cL, "+73372", "%+0ld",
-__LINE__, 0x0000002aL, "2a", "% x",
-__LINE__, 0xffffffffL, "ffffffff", "%.7x",
-__LINE__, -0x0008ee8L, "-36584", "%ld",
-__LINE__, 0x0000001cL, "28", "%-d",
-__LINE__, 0x000abedaL, "704218", "%d",
-__LINE__, 0x001347f7L, "1347f7", "%3.0x",
-__LINE__, 0x0000023eL, "574", "%3.3ld",
-__LINE__, 0x00000000L, "0", "%-ld",
-__LINE__, -0x0016de0L, "-93664", "%0ld",
-__LINE__, 0xffffff45L, "FFFFFF45", "% X",
-__LINE__, 0x02dfb08cL, "48214156", "%#ld",
-__LINE__, 0x003d73a2L, "3d73a2", "%6.x",
-__LINE__, 0x00147da7L, "1342887", "%#d",
-__LINE__, -0x5ff0f1eL, "-100601630", "%-01ld",
-__LINE__, -0x000000bL, "-11", "%ld",
-__LINE__, 0x00000168L, " 168", "%+6.x",
-__LINE__, 0xffffc28eL, "ffffc28e", "%0x",
-__LINE__, -0x00003a2L, "-930", "%ld",
-__LINE__, 0x0002e56fL, " 189807", "% 1.ld",
-__LINE__, 0x51abf44fL, "0x51abf44f", "%#.7x",
-__LINE__, 0x00000000L, "0", "%d",
-__LINE__, 0x9581268fL, "9581268F", "%+X",
-__LINE__, 0xffffff3bL, "FFFFFF3B", "%X",
-__LINE__, 0x000083d4L, " 33748", "% #d",
-__LINE__, 0x00000001L, "1", "%x",
-__LINE__, -0x000e51fL, "-58655", "%.0ld",
-__LINE__, 0x0003eacbL, "256715", "%6ld",
-__LINE__, 0x02be09dbL, " 46008795", "% 0.ld",
-__LINE__, 0xfffffffbL, "FFFFFFFB", "% X",
-__LINE__, 0x000084f5L, " 34037", "%6ld",
-__LINE__, -0x1127f99L, "-17989529", "%#d",
-__LINE__, 0x5f6512deL, "5f6512de", "%.7x",
-__LINE__, 0x00000001L, "1", "%x",
-__LINE__, 0xfff74ab5L, "fff74ab5", "%x",
-__LINE__, 0x0eebeb94L, "250342292", "%4.ld",
-__LINE__, 0x0001b846L, "0x1b846", "%#1x",
-__LINE__, 0x001e8c32L, "1E8C32", "%2X",
-__LINE__, -0x0dae932L, "-14346546", "%5.1d",
-__LINE__, 0x00000001L, "1", "%ld",
-__LINE__, -0x0000042L, "-66", "%ld",
-__LINE__, 0xffffff51L, "FFFFFF51", "%0.1X",
-__LINE__, 0x00000043L, "43", "%x",
-__LINE__, 0x04c21f39L, " 79830841", "% 0ld",
-__LINE__, 0x0000061eL, "1566", "%03.3d",
-__LINE__, -0x0000003L, "-3", "%+d",
-__LINE__, 0x015b32dbL, " 22754011", "% .4d",
-__LINE__, 0xfffff181L, "FFFFF181", "%-X",
-__LINE__, 0x000017ecL, "0X17EC", "%#X",
-__LINE__, 0x000d703eL, "880702", "%#ld",
-__LINE__, -0x6d7533a0L, "-1836397472", "%ld",
-__LINE__, 0x0000008aL, " 138", "% d",
-__LINE__, -0x7368794bL, "-1936226635", "%+#d",
-__LINE__, 0x0000000dL, "0XD", "%#X",
-__LINE__, 0x0000030dL, "30D", "% X",
-__LINE__, 0xfffff9feL, "FFFFF9FE", "%5X",
-__LINE__, 0x00001bb2L, "7090", "%d",
-__LINE__, 0x041d2a0cL, "41D2A0C", "%0X",
-__LINE__, 0x00012aeeL, " 76526", "% d",
-__LINE__, 0x0000055fL, "55f", "%.1x",
-__LINE__, 0xffffffffL, "0XFFFFFFFF", "%#1X",
-__LINE__, 0x07b0a971L, "+129018225", "%+.2ld",
-__LINE__, 0xfffffff8L, "FFFFFFF8", "%4X",
-__LINE__, 0x00000001L, "1", "%d",
-__LINE__, 0x00000038L, "+56", "%+2ld",
-__LINE__, 0xfffffc2fL, "fffffc2f", "%+7.x",
-__LINE__, 0x00004477L, "0x4477", "% #x",
-__LINE__, 0x0000000dL, "0XD", "%+#3X",
-__LINE__, 0xf5bf37b1L, "F5BF37B1", "%1.X",
-__LINE__, 0x1a96f431L, "446100529", "%d",
-__LINE__, 0x0037edf3L, "+3665395", "%+#4.5ld",
-__LINE__, 0x0007f2aaL, "520874", "%0ld",
-__LINE__, -0x00051a3L, "-20899", "%+#1.ld",
-__LINE__, 0x0000037fL, "37F", "%0X",
-__LINE__, 0xffffffb4L, "ffffffb4", "%x",
-__LINE__, -0xd984c00L, "-228084736", "%+06ld",
-__LINE__, 0xffffe1beL, "FFFFE1BE", "%X",
-__LINE__, 0xfff20d48L, "FFF20D48", "%+6.0X",
-__LINE__, 0x000028b7L, "0x028b7", "%-#7.5x",
-__LINE__, -0x0000001L, "-1", "%ld",
-__LINE__, 0x03f37945L, "66287941", "%d",
-__LINE__, 0xffffffedL, "0XFFFFFFED", "%+#6.4X",
-__LINE__, 0x0000f046L, "f046", "%x",
-__LINE__, 0xe9772b51L, "E9772B51", "%-1.X",
-__LINE__, 0xfffffffeL, "fffffffe", "% x",
-__LINE__, 0xfffffffaL, "0xfffffffa", "%#x",
-__LINE__, 0x00000015L, "15", "%-X",
-__LINE__, 0x0000003cL, "60", "%#ld",
-__LINE__, 0x3103952dL, "822318381", "%0.ld",
-__LINE__, 0x17ba68bbL, "398092475", "%2d",
-__LINE__, 0x000006c4L, "+1732", "%+.2d",
-__LINE__, 0x00000043L, "67", "%#d",
-__LINE__, 0x0043fb55L, "4455253", "%.1ld",
-__LINE__, 0x00004b76L, "4b76", "% 0x",
-__LINE__, 0xfff4c56bL, "FFF4C56B", "%7X",
-__LINE__, 0x00766055L, "766055", "%+5x",
-__LINE__, -0x000009fL, "-159", "%+d",
-__LINE__, 0xffff063fL, "ffff063f", "%-2x",
-__LINE__, 0x00808fc8L, "808fc8", "%x",
-__LINE__, 0xffffffffL, "ffffffff", "%x",
-__LINE__, 0x000000f1L, "00000f1", "%+02.7x",
-__LINE__, 0x00000002L, "2", "%X",
-__LINE__, 0x00000000L, "000", "%03d",
-__LINE__, 0xe63f73b2L, "E63F73B2", "% 1X",
-__LINE__, 0xfffffffeL, "FFFFFFFE", "%5.1X",
-__LINE__, 0x0d3fa38bL, "222274443", "%1d",
-__LINE__, 0x00000000L, "0", "% X",
-__LINE__, 0x00000001L, " 1", "%04.ld",
-__LINE__, 0x00000046L, "46", "%0X",
-__LINE__, 0x0000761fL, " 30239", "% ld",
-__LINE__, -0x0002517L, "-9495", "%+d",
-__LINE__, 0x00000156L, "156", "% 0x",
-__LINE__, 0x1c55eba2L, "1c55eba2", "%.6x",
-__LINE__, 0x005af80dL, "5af80d", "%.6x",
-__LINE__, 0x0000002eL, "46", "%d",
-__LINE__, -0x0007c0fL, "-31759", "%ld",
-__LINE__, 0xffffe924L, "FFFFE924", "%7X",
-__LINE__, 0x00000174L, "372", "%ld",
-__LINE__, 0xffffffc9L, "0xffffffc9", "%-#x",
-__LINE__, 0x00000020L, "+000032", "%+07d",
-__LINE__, 0xffffe5d9L, "FFFFE5D9", "%4.5X",
-__LINE__, 0xffffffa3L, "FFFFFFA3", "%+.3X",
-__LINE__, 0x00000a03L, "+2563", "%+2d",
-__LINE__, 0x001b58caL, "+1792202", "%+4d",
-__LINE__, 0xffffffc9L, "0xffffffc9", "%+#5x",
-__LINE__, -0x0000003L, "-3", "% d",
-__LINE__, 0xfffffffcL, "fffffffc", "%+0x",
-__LINE__, -0x0000002L, "-02", "%.2d",
-__LINE__, 0x000243fbL, "148475", "%-ld",
-__LINE__, 0x00000001L, "1", "%0d",
-__LINE__, -0x0000672L, "-1650", "%ld",
-__LINE__, -0x0005413L, "-0021523", "% 7.7d",
-__LINE__, 0x00000017L, "0X17", "%#X",
-__LINE__, 0x00000e48L, "3656", "%0d",
-__LINE__, 0xffe79b38L, "ffe79b38", "%-x",
-__LINE__, 0xffffff15L, "FFFFFF15", "%+6.1X",
-__LINE__, 0xfff0272cL, "fff0272c", "%-.5x",
-__LINE__, -0x00b706fL, "-749679", "%1.ld",
-__LINE__, 0x0176aeecL, "176AEEC", "%.1X",
-__LINE__, -0x00005a1L, "-1441", "% 0ld",
-__LINE__, -0x0000002L, "-00002", "%.5d",
-__LINE__, -0xd2e6f5dL, "-221146973", "%1ld",
-__LINE__, -0x0000001L, " -001", "%5.3ld",
-__LINE__, 0x00000001L, " 1", "%05.ld",
-__LINE__, 0x0000749eL, "+29854", "%+#d",
-__LINE__, 0x00000005L, "5", "%d",
-__LINE__, 0xfa7128b0L, "fa7128b0", "%1.x",
-__LINE__, 0xffffbbb4L, "0XFFFFBBB4", "%#.1X",
-__LINE__, 0x0006862fL, "427567", "%d",
-__LINE__, 0x00000002L, "2", "%X",
-__LINE__, 0x000005d4L, "5d4", "% x",
-__LINE__, 0x001387e1L, "1279969", "%-05.0ld",
-__LINE__, -0x0035a56L, "-219734", "%ld",
-__LINE__, -0x4064ecc6L, "-1080356038", "%ld",
-__LINE__, 0x0000360dL, "13837", "%0ld",
-__LINE__, -0xea1a85bL, "-245475419", "%-.2ld",
-__LINE__, 0xffffff2dL, "FFFFFF2D", "%X",
-__LINE__, 0x00000004L, " 0004", "%7.4x",
-__LINE__, 0x00f72ffdL, "F72FFD", "%-X",
-__LINE__, 0x00000fa2L, "fa2 ", "%-5x",
-__LINE__, 0x05ae1f9aL, "95297434", "%#ld",
-__LINE__, 0x0000bf2eL, "48942", "%3.d",
-__LINE__, 0x00000000L, " ", "%1.X",
-__LINE__, 0x01bcb097L, "29143191", "%ld",
-__LINE__, 0x0000009cL, "156 ", "%-4.0d",
-__LINE__, 0xfffffffeL, "fffffffe", "% x",
-__LINE__, 0x00000001L, "1 ", "%-6.d",
-__LINE__, 0xffffffefL, "ffffffef", "%7.x",
-__LINE__, 0xfffffec1L, "fffffec1", "%.5x",
-__LINE__, -0x000000fL, "-15", "%-1d",
-__LINE__, -0x0008426L, "-33830", "%0ld",
-__LINE__, 0x005be0aeL, "5BE0AE", "% X",
-__LINE__, 0x00000009L, " 9", "%+7X",
-__LINE__, -0x0007e18L, "-32280", "%+0.d",
-__LINE__, 0x01697ba1L, " 23690145", "% 5.ld",
-__LINE__, -0x0012042L, "-073794", "%7.6d",
-__LINE__, 0x04e9bd0dL, "4e9bd0d", "%-2x",
-__LINE__, 0xffffffd9L, "FFFFFFD9", "%.2X",
-__LINE__, -0x01b9632L, "-1807922", "%.6ld",
-__LINE__, 0x000000cdL, "205", "%1.ld",
-__LINE__, 0x00000000L, " ", "% .0d",
-__LINE__, 0xff17bbb1L, "ff17bbb1", "%x",
-__LINE__, -0x00146d7L, "-83671", "%+1.ld",
-__LINE__, 0xfffff144L, "fffff144", "%x",
-__LINE__, 0x000f8dbeL, "F8DBE", "%3.X",
-__LINE__, -0x000381cL, "-14364", "%d",
-__LINE__, 0x0000001eL, " 30", "%4.1d",
-__LINE__, 0x00000016L, "22", "%-0d",
-__LINE__, 0x00000002L, "+02", "%+1.2ld",
-__LINE__, 0x0000e803L, "59395", "%d",
-__LINE__, 0xb4c2448dL, "b4c2448d", "%-7x",
-__LINE__, 0x000e697dL, "944509", "%ld",
-__LINE__, 0xfffe6e32L, "0XFFFE6E32", "%#X",
-__LINE__, 0x00000190L, " 190", "%+5.X",
-__LINE__, -0x03a2219L, "-3809817", "%#6.ld",
-__LINE__, -0x000003cL, "-60 ", "%-#4.ld",
-__LINE__, 0x00000000L, " ", "% 03.ld",
-__LINE__, -0x074f922L, "-7665954", "%ld",
-__LINE__, -0x00000f0L, "-240", "%-ld",
-__LINE__, 0xfffe42d2L, "0XFFFE42D2", "%#X",
-__LINE__, 0x000000ddL, "DD", "%X",
-__LINE__, 0x00359abeL, "359ABE", "%.1X",
-__LINE__, 0xffec7bdfL, "FFEC7BDF", "%0.1X",
-__LINE__, 0x0ecddcbaL, "248372410", "%-#3.d",
-__LINE__, 0x00ad0dbcL, "11341244", "%ld",
-__LINE__, -0x0000001L, "-1", "%-d",
-__LINE__, 0x00050841L, "50841", "% .5x",
-__LINE__, 0x01d359e7L, "1d359e7", "%1.x",
-__LINE__, 0xff9efaa3L, "FF9EFAA3", "%X",
-__LINE__, 0x0007ea10L, "+518672", "%+ld",
-__LINE__, -0x000671cL, "-26396", "%1d",
-__LINE__, 0xffffff91L, "0xffffff91", "%#4.4x",
-__LINE__, 0x00000000L, "+", "%+0.0ld",
-__LINE__, -0x002c53eL, "-181566", "%3.d",
-__LINE__, 0xffffff56L, "ffffff56", "%x",
-__LINE__, 0xfffff589L, "FFFFF589", "%+X",
-__LINE__, 0x00024d13L, "24D13", "%-5.2X",
-__LINE__, 0x00000000L, " 0", "%6.1d",
-__LINE__, 0x00a64f33L, "A64F33", "%4.4X",
-__LINE__, 0xffebb57aL, "FFEBB57A", "%5.4X",
-__LINE__, 0xfff3b4a0L, "fff3b4a0", "%2.x",
-__LINE__, 0xffffffd9L, "FFFFFFD9", "%.2X",
-__LINE__, 0x00d37b84L, "13859716", "%d",
-__LINE__, 0x00001e85L, "0001E85", "%0.7X",
-__LINE__, -0x756148fL, "-123081871", "% 7.d",
-__LINE__, -0x0319339L, "-3248953", "%+#.4d",
-__LINE__, -0x00798b8L, "-497848", "%#5ld",
-__LINE__, -0x0000039L, "-57", "%0d",
-__LINE__, -0x000b1d7L, "-45527", "%+0.ld",
-__LINE__, 0xff811fbaL, "FF811FBA", "%+X",
-__LINE__, 0x00000042L, " 66", "% ld",
-__LINE__, 0xfffffe31L, "0XFFFFFE31", "%#X",
-__LINE__, 0x00000073L, "115", "%ld",
-__LINE__, 0x45091a39L, "0x45091a39", "%+#3.x",
-__LINE__, 0x001270f5L, "1270f5", "%-5.6x",
-__LINE__, 0xfffd91fdL, "fffd91fd", "%x",
-__LINE__, -0x0817badL, "-8485805", "%#ld",
-__LINE__, -0x32ad55fL, "-53138783", "%0d",
-__LINE__, 0x00003e57L, "15959", "%0ld",
-__LINE__, -0x0048756L, "-296790", "%2.6d",
-__LINE__, 0xff90f45fL, "FF90F45F", "% X",
-__LINE__, 0x0000e454L, "0e454", "% .5x",
-__LINE__, 0xfffffffcL, "fffffffc", "%x",
-__LINE__, 0xfffffff7L, "FFFFFFF7", "%-2X",
-__LINE__, 0xffdabf0eL, "FFDABF0E", "%+X",
-__LINE__, 0xffffffffL, "0XFFFFFFFF", "%#1X",
-__LINE__, 0x01516650L, "1516650", "% x",
-__LINE__, 0xffffff51L, "FFFFFF51", "%X",
-__LINE__, 0x000000eaL, "234", "%00.d",
-__LINE__, 0x06db60caL, "115040458", "%5.d",
-__LINE__, 0x00000f01L, " 3841", "% d",
-__LINE__, 0x00000009L, "9", "%x",
-__LINE__, 0x299b3ba0L, "299b3ba0", "%6.7x",
-__LINE__, 0x0067f298L, "67f298", "%-2.6x",
-__LINE__, 0xfffffff5L, "FFFFFFF5", "% 2X",
-__LINE__, 0x00102ff9L, "102FF9", "%-.0X",
-__LINE__, 0xffc22393L, "0xffc22393", "% #6x",
-__LINE__, 0x00007db5L, "32181", "%-2ld",
-__LINE__, 0x0000b0a3L, "0xb0a3", "%#0x",
-__LINE__, 0x001ceebbL, "1CEEBB", "%-3.4X",
-__LINE__, 0x00025101L, "0x25101", "%#x",
-__LINE__, -0x0000001L, "-1", "%0ld",
-__LINE__, 0xffffd846L, "FFFFD846", "%+2.3X",
-__LINE__, 0x00001d79L, " 7545", "% 0.1ld",
-__LINE__, -0x0000002L, " -2", "%5d",
-__LINE__, 0xf93b9fdcL, "f93b9fdc", "%5x",
-__LINE__, 0xffff0021L, "FFFF0021", "%6X",
-__LINE__, 0x00007cf9L, "7cf9", "%3.1x",
-__LINE__, -0x0000002L, "-2", "%d",
-__LINE__, 0x00001d84L, "1d84", "%0x",
-__LINE__, -0x033201eL, "-3350558", "%-2.0d",
-__LINE__, 0xfff8a6fbL, "FFF8A6FB", "%+.7X",
-__LINE__, 0x00006fffL, " 28671", "% ld",
-__LINE__, -0x02a274aL, "-2762570", "%d",
-__LINE__, -0x0006628L, "-26152", "%00ld",
-__LINE__, 0x00000011L, "11", "%-x",
-__LINE__, -0x0000ed9L, "-3801", "%0.ld",
-__LINE__, 0xfc5b725dL, "FC5B725D", "%X",
-__LINE__, 0x3530bd4eL, "892386638", "%7.d",
-__LINE__, 0x03bb4ff7L, "62607351", "%#4.7ld",
-__LINE__, 0x00009f86L, "9f86", "%x",
-__LINE__, 0x0000e727L, "59175", "%1d",
-__LINE__, 0xfffffdf2L, "0XFFFFFDF2", "%#X",
-__LINE__, 0x00e60dbfL, "0XE60DBF", "% #1.X",
-__LINE__, 0xffffffffL, "FFFFFFFF", "%+X",
-__LINE__, 0x0a16f44eL, "0XA16F44E", "%#.0X",
-__LINE__, 0x0001f97cL, "1f97c", "% x",
-__LINE__, 0x0000000dL, "13", "%#0ld",
-__LINE__, 0x0000002aL, "42", "%0ld",
-__LINE__, 0x00000007L, " +7", "%+5ld",
-__LINE__, 0xffffff7fL, "FFFFFF7F", "%-X",
-__LINE__, 0x000006a6L, "1702", "%ld",
-__LINE__, 0xfaff2fb1L, "faff2fb1", "% x",
-__LINE__, 0xffff94abL, "ffff94ab", "%x",
-__LINE__, 0x011d611bL, "0X11D611B", "%#2.3X",
-__LINE__, 0x00000000L, " +000", "%+#5.3ld",
-__LINE__, -0x87fcc37L, "-142593079", "%+d",
-__LINE__, -0x0417424L, "-4289572", "%+d",
-__LINE__, 0x03fabc0cL, "3fabc0c", "%x",
-__LINE__, 0xfffff880L, "fffff880", "%-x",
-__LINE__, 0x000002d7L, "2d7", "%-02.x",
-__LINE__, 0x00003e82L, "16002", "%#d",
-__LINE__, -0x0003713L, "-14099", "% 5d",
-__LINE__, -0x0000027L, "-39", "%ld",
-__LINE__, 0x00013098L, "0077976", "%01.7d",
-__LINE__, -0x000000cL, "-12", "%ld",
-__LINE__, -0x00000c0L, "-192", "% ld",
-__LINE__, 0xffbe9285L, "FFBE9285", "%3.X",
-__LINE__, 0x00000046L, "46", "%x",
-__LINE__, 0x00000000L, " ", "%+4.x",
-__LINE__, 0x00011e72L, "73330", "%2.3d",
-__LINE__, -0x5276dd7L, "-86470103", "%d",
-__LINE__, 0x00000013L, "19", "%-02.ld",
-__LINE__, 0x384118a7L, "0X384118A7", "%-#X",
-__LINE__, 0x00000000L, "0", "% #X",
-__LINE__, 0x00000009L, "9", "%#ld",
-__LINE__, 0x00021145L, "135493", "%-ld",
-__LINE__, 0xff188a0cL, "FF188A0C", "%1.X",
-__LINE__, 0xffffffd5L, "ffffffd5", "%0x",
-__LINE__, 0xfffffffeL, "FFFFFFFE", "% 0X",
-__LINE__, 0xffff74a3L, "ffff74a3", "%x",
-__LINE__, 0x01d5a2f8L, "1d5a2f8", "%-0.x",
-__LINE__, 0xfffffef6L, "fffffef6", "%+06.x",
-__LINE__, 0x00000001L, "1", "%ld",
-__LINE__, 0x00000000L, "+0", "%+ld",
-__LINE__, 0xfffffffcL, "fffffffc", "%4.x",
-__LINE__, -0x0000344L, "-0836", "% .4d",
-__LINE__, 0xfffffffdL, "FFFFFFFD", "%0X",
-__LINE__, 0x000a3121L, "667937", "%#4.4ld",
-__LINE__, 0x0001e211L, "0X1E211", "%#X",
-__LINE__, 0x00000c8bL, "00C8B", "%05X",
-__LINE__, 0xfffffffeL, "fffffffe", "%+0x",
-__LINE__, 0x001a53ceL, "1725390", "%d",
-__LINE__, 0x0000057fL, "57f ", "%-7.x",
-__LINE__, -0x0073e4dL, "-474701", "%#ld",
-__LINE__, -0x0000002L, " -2", "% 3.d",
-__LINE__, 0x482dc404L, "482DC404", "%X",
-__LINE__, 0x0000011cL, "11c", "%-.1x",
-__LINE__, 0x00000c12L, " 3090", "%5.3ld",
-__LINE__, 0xfffe1068L, "FFFE1068", "%-.4X",
-__LINE__, -0x0055e88L, "-351880", "%ld",
-__LINE__, 0x000c9cefL, "+826607", "%+d",
-__LINE__, 0xffffffe3L, "ffffffe3", "%0x",
-__LINE__, -0x0000ee9L, "-3817", "%#ld",
-__LINE__, 0xff1f6daaL, "FF1F6DAA", "%X",
-__LINE__, 0xfffffc4eL, "FFFFFC4E", "%5.2X",
-__LINE__, -0x000040aL, "-1034", "%d",
-__LINE__, -0x0000085L, "-00133", "% 01.5d",
-__LINE__, -0x126c797cL, "-309098876", "%5.ld",
-__LINE__, 0x00000039L, " 57", "% d",
-__LINE__, 0xfffffff6L, "0xfffffff6", "%#5.x",
-__LINE__, 0xfffffff4L, "fffffff4", "%7.6x",
-__LINE__, 0x00000003L, "3", "%ld",
-__LINE__, 0x0000f8aeL, "f8ae", "%.0x",
-__LINE__, 0x003ca1cfL, "3973583", "%#3.7d",
-__LINE__, 0x14687009L, "0x14687009", "%+#3x",
-__LINE__, 0xfffff1f7L, "0xfffff1f7", "%#4.5x",
-__LINE__, 0xfffff17aL, "fffff17a", "%3.x",
-__LINE__, 0x0011ea18L, "1174040", "%ld",
-__LINE__, -0x0000019L, "-25", "%03.d",
-__LINE__, 0x00015d72L, "0X15D72", "%-#X",
-__LINE__, 0xffde4a41L, "ffde4a41", "%x",
-__LINE__, 0x00006f1fL, "28447", "%d",
-__LINE__, 0xffffffbdL, "0xffffffbd", "%#.1x",
-__LINE__, 0x000013b9L, "13B9", "%0X",
-__LINE__, -0x00001b9L, "-00441", "%1.5d",
-__LINE__, 0x00000001L, "000001", "%-.6d",
-__LINE__, 0x7b602d8fL, "+2069900687", "%+0ld",
-__LINE__, 0x0005e323L, "+385827", "%+ld",
-__LINE__, 0x00002fceL, "2FCE", "%+0X",
-__LINE__, 0x0000000eL, "0014", "%.4d",
-__LINE__, 0xffffffd6L, "0XFFFFFFD6", "%#4.X",
-__LINE__, 0x037bf361L, "58454881", "%5.ld",
-__LINE__, 0xffffffffL, "FFFFFFFF", "%-7.5X",
-__LINE__, -0x016d4dcL, "-1496284", "%6ld",
-__LINE__, 0x0005be9aL, "0x5be9a", "%-#.5x",
-__LINE__, 0xffffffffL, "ffffffff", "%1x",
-__LINE__, 0x00000055L, " 85", "% 7.d",
-__LINE__, 0xffffffffL, "ffffffff", "%x",
-__LINE__, -0x0135392L, "-1266578", "% ld",
-__LINE__, 0x00850f26L, "8720166", "%d",
-__LINE__, 0xffffee39L, "ffffee39", "%0x",
-__LINE__, 0x000000ddL, "221", "%ld",
-__LINE__, 0x00000000L, " ", "%6.d",
-__LINE__, 0x000000d8L, "d8", "%x",
-__LINE__, 0x000007ecL, "002028", "%4.6ld",
-__LINE__, 0x0dab4e67L, "0XDAB4E67", "%#X",
-__LINE__, 0xfffd7c95L, "FFFD7C95", "% 4X",
-__LINE__, 0x0009302dL, "9302D", "%3.1X",
-__LINE__, 0x00000003L, " 3", "% d",
-__LINE__, 0x0000082fL, "82f", "%-x",
-__LINE__, 0x0652517fL, "652517F", "%-.2X",
-__LINE__, -0x1fd8f4e3L, "-534312163", "%d",
-__LINE__, 0x00000176L, "176", "%-x",
-__LINE__, 0x00000001L, "1", "%ld",
-__LINE__, 0x0000001aL, "1A", "%X",
-__LINE__, -0x0005740L, "-22336", "% 0ld",
-__LINE__, 0xffffffffL, "ffffffff", "%6x",
-__LINE__, 0x1b273b80L, "0x1b273b80", "%#x",
-__LINE__, 0x00000065L, "65", "%X",
-__LINE__, 0x6a62138aL, "1784812426", "%2ld",
-__LINE__, 0x000001a2L, "1A2", "%X",
-__LINE__, -0x002aafdL, "-174845", "%02.ld",
-__LINE__, 0x00000014L, "20", "%d",
-__LINE__, -0x00000c7L, " -199", "%7.0ld",
-__LINE__, 0xff545bfdL, "ff545bfd", "%-x",
-__LINE__, -0x002beb9L, "-179897", "%02.2ld",
-__LINE__, -0x00000dfL, "-223", "% 02.d",
-__LINE__, -0x000d569L, "-54633", "%1.ld",
-__LINE__, 0x0000000eL, "14", "%d",
-__LINE__, -0x0077407L, "-488455", "% ld",
-__LINE__, 0x0001be09L, "114185", "%ld",
-__LINE__, -0x0000514L, "-01300", "%+05.5d",
-__LINE__, 0xf1fb397fL, "f1fb397f", "%+x",
-__LINE__, 0xfdb6707cL, "FDB6707C", "%X",
-__LINE__, 0x03cad111L, "3cad111", "%5.x",
-__LINE__, -0x022e72fL, "-2287407", "%d",
-__LINE__, -0xda35f48L, "-228810568", "%d",
-__LINE__, -0x02d1fd4L, "-2957268", "%1.3d",
-__LINE__, 0x0000005fL, "+95", "%+2d",
-__LINE__, 0xfffbf8a1L, "FFFBF8A1", "%4.2X",
-__LINE__, 0x0000071eL, " 71e", "%6.x",
-__LINE__, 0x000cc8a5L, "+837797", "%+03ld",
-__LINE__, 0x000eebe9L, " EEBE9", "%6.X",
-__LINE__, -0x2896b204L, "-680964612", "%d",
-__LINE__, -0x09553f8L, "-9786360", "%d",
-__LINE__, 0x000015d3L, "5587", "%0d",
-__LINE__, 0x0000056dL, " 56d", "%+4.x",
-__LINE__, -0x00624adL, "-402605", "% ld",
-__LINE__, 0xfea64ba5L, "0xfea64ba5", "%#1x",
-__LINE__, 0x004f35c6L, "5191110", "%-ld",
-__LINE__, -0x1441fe4L, "-21241828", "%d",
-__LINE__, 0xffffff95L, "FFFFFF95", "%X",
-__LINE__, 0xfffecf81L, "FFFECF81", "%-2.X",
-__LINE__, -0x00002bbL, "-699", "%-d",
-__LINE__, -0x0000c29L, "-3113", "% 02ld",
-__LINE__, 0x000026a3L, " 9891", "% .4d",
-__LINE__, 0x00000003L, "3", "%-x",
-__LINE__, 0x000007dbL, "+02011", "%+.5ld",
-__LINE__, 0xfff99558L, "FFF99558", "%.1X",
-__LINE__, 0x0000fce6L, "64742", "%4.0d",
-__LINE__, 0x000b7ea2L, "753314", "%ld",
-__LINE__, 0x13e5df30L, "0X13E5DF30", "%#2.X",
-__LINE__, 0x006761c4L, "06761C4", "%6.7X",
-__LINE__, 0xffffff78L, "FFFFFF78", "%0.X",
-__LINE__, 0xfffff1c0L, "0xfffff1c0", "% #x",
-__LINE__, -0x034af1cL, "-3452700", "% 06.1d",
-__LINE__, 0x000000deL, "0000222", "%2.7ld",
-__LINE__, 0x000003d8L, "0x3d8", "%#4.x",
-__LINE__, -0x001a1d1L, "-106961", "%3.1d",
-__LINE__, -0x0000002L, "-2", "% d",
-__LINE__, 0x00001de6L, "+7654", "%+0ld",
-__LINE__, 0x00000001L, "001", "%#.3d",
-__LINE__, -0x53dacf9fL, "-1406848927", "%ld",
-__LINE__, 0xfffffffcL, "fffffffc", "%3.3x",
-__LINE__, -0x00950e8L, "-610536", "%3.6ld",
-__LINE__, 0xff14ade9L, "FF14ADE9", "%6X",
-__LINE__, 0x012f5284L, "0X12F5284", "% #5X",
-__LINE__, 0x00005a21L, " 5a21", "%5x",
-__LINE__, 0x00000638L, "1592", "%2.4ld",
-__LINE__, -0x063017bL, "-6488443", "%ld",
-__LINE__, 0x00000000L, "0", "% X",
-__LINE__, 0xfffe8ef2L, "FFFE8EF2", "%+0X",
-__LINE__, -0x0001c96L, "-7318", "%.3d",
-__LINE__, 0x0000ca7dL, "51837", "%ld",
-__LINE__, 0x00000001L, "1", "%+1x",
-__LINE__, 0xfffff7bcL, "FFFFF7BC", "%X",
-__LINE__, -0x03d15e2L, "-4003298", "%ld",
-__LINE__, 0xfffffffeL, "fffffffe", "% x",
-__LINE__, 0x00066183L, "+418179", "%+7.1ld",
-__LINE__, 0xffffef2eL, "ffffef2e", "%-2.x",
-__LINE__, 0x00000000L, " 000", "%04.3x",
-__LINE__, -0x000000fL, "-15", "% d",
-__LINE__, -0x00001f5L, "-501", "%d",
-__LINE__, 0x0c67f159L, "c67f159", "%6.2x",
-__LINE__, -0x0000006L, "-6", "%.1d",
-__LINE__, 0x00000005L, "0X5", "%+#1X",
-__LINE__, -0x0000002L, " -2", "%6.ld",
-__LINE__, 0xeb2183ecL, "eb2183ec", "% x",
-__LINE__, -0x5e12a322L, "-1578279714", "%d",
-__LINE__, 0x00000001L, "0x1", "%#x",
-__LINE__, -0x0001ea4L, "-7844", "%0d",
-__LINE__, -0x19955a3L, "-26826147", "%d",
-__LINE__, 0x000002a6L, "2A6", "%2.X",
-__LINE__, 0x00000002L, "2", "%X",
-__LINE__, 0xfffffeecL, "fffffeec", "%0.4x",
-__LINE__, 0xfffffffcL, "fffffffc", "%0x",
-__LINE__, 0xffdfe740L, "FFDFE740", "% X",
-__LINE__, -0x0b0b3e7L, "-11580391", "%.1d",
-__LINE__, 0x8e01077cL, "8E01077C", "%5.7X",
-__LINE__, 0x3b6b6d55L, "996896085", "%1.1d",
-__LINE__, 0x000016afL, "5807", "%ld",
-__LINE__, -0x0004900L, "-18688", "%d",
-__LINE__, 0xfffd77bcL, "FFFD77BC", "%X",
-__LINE__, 0x004cbd74L, "5029236", "%0d",
-__LINE__, 0x00000003L, " 00003", "%6.5d",
-__LINE__, 0x0004720fL, "4720f", "% x",
-__LINE__, 0x0e44535dL, "e44535d", "%4x",
-__LINE__, 0xfffffff9L, "FFFFFFF9", "%3.3X",
-__LINE__, -0x0000005L, "-5", "%-d",
-__LINE__, 0x000001a6L, "00001A6", "%1.7X",
-__LINE__, 0x0000004aL, "4A", "%-2.X",
-__LINE__, 0xfffff249L, "FFFFF249", "%X",
-__LINE__, 0x00004345L, "4345", "%x",
-__LINE__, 0x0197041dL, "197041d", "%+0x",
-__LINE__, 0x0000019aL, " 19a", "% 6.x",
-__LINE__, 0xfff98376L, "FFF98376", "%X",
-__LINE__, 0xfc536c41L, "FC536C41", "%X",
-__LINE__, -0x0008d91L, "-36241", "% d",
-__LINE__, 0xf058d69dL, "f058d69d", "%4.x",
-__LINE__, -0x00013efL, "-5103", "%d",
-__LINE__, -0x0000003L, "-3", "%00ld",
-__LINE__, -0x09e80f0L, "-10387696", "%+07ld",
-__LINE__, -0x0222c15L, "-2239509", "%#0.4ld",
-__LINE__, 0x00000004L, "4", "%0ld",
-__LINE__, -0x02c6b0dL, "-2910989", "% 0ld",
-__LINE__, 0xfffffffeL, "FFFFFFFE", "%-4X",
-__LINE__, 0xffffff3dL, "FFFFFF3D", "%-.0X",
-__LINE__, -0x0000015L, "-21", "%0d",
-__LINE__, 0x131dfc90L, "+320732304", "%+d",
-__LINE__, 0xffffffffL, "ffffffff", "%+x",
-__LINE__, 0x000035c8L, "13768", "%0ld",
-__LINE__, 0x00000033L, "0x0033", "%#.4x",
-__LINE__, 0x0ce7e8c1L, "0xce7e8c1", "%#.7x",
-__LINE__, 0xfc18b5d2L, "FC18B5D2", "%+.3X",
-__LINE__, 0x00000015L, "21", "%d",
-__LINE__, 0x001a5e7cL, "1a5e7c", "%05x",
-__LINE__, -0x000fbf0L, "-64496", "%ld",
-__LINE__, -0x000a4f7L, "-042231", "%+2.6d",
-__LINE__, -0x0000002L, "-002", "%3.3ld",
-__LINE__, 0x00728878L, "728878", "%0X",
-__LINE__, -0x0000002L, "-2", "%#.1ld",
-__LINE__, -0x00002efL, "-751", "%-0ld",
-__LINE__, 0xfffffff7L, "fffffff7", "%.3x",
-__LINE__, 0x00491867L, "0491867", "%.7X",
-__LINE__, 0x00000d4dL, "3405", "%-ld",
-__LINE__, 0x00234e86L, "234E86", "%0X",
-__LINE__, -0x000001bL, "-27", "%ld",
-__LINE__, 0x00275255L, "2576981", "%.5ld",
-__LINE__, 0xfeacc214L, "0XFEACC214", "%-#3.X",
-__LINE__, -0x0001ce5L, "-7397", "%+#2.2ld",
-__LINE__, 0x089ddb6aL, "144563050", "%d",
-__LINE__, 0x003d5a95L, "3D5A95", "%1X",
-__LINE__, 0x002f0b6dL, "3083117", "%d",
-__LINE__, 0x1e79e228L, "511304232", "%ld",
-__LINE__, 0xfffffe6bL, "FFFFFE6B", "%+0X",
-__LINE__, -0x5104ff3L, "-84955123", "%.4ld",
-__LINE__, 0xfffff1deL, "FFFFF1DE", "%X",
-__LINE__, 0x000000cfL, "+207", "%+.1ld",
-__LINE__, -0x16ad0164L, "-380436836", "%+5.d",
-__LINE__, 0x001fefa6L, "2092966", "%ld",
-__LINE__, 0x00000000L, "00", "%-.2d",
-__LINE__, 0x00195f45L, "195f45", "%+0x",
-__LINE__, 0x00000001L, " 1", "%3.ld",
-__LINE__, -0x00001c9L, "-457", "% ld",
-__LINE__, 0x0002479eL, "149406", "%#ld",
-__LINE__, 0x001ab18bL, "1749387", "%04d",
-__LINE__, 0x00000045L, "69", "%ld",
-__LINE__, 0xfbb13f7dL, "fbb13f7d", "%.2x",
-__LINE__, 0x03ddc208L, "3ddc208", "%x",
-__LINE__, 0x00000007L, "000007", "%#.6d",
-__LINE__, 0x00000000L, "0", "%01X",
-__LINE__, -0x0023110L, "-143632", "%+0.3d",
-__LINE__, 0x00000006L, "06", "%#.2d",
-__LINE__, 0xffff9ec9L, "ffff9ec9", "%7x",
-__LINE__, -0x08afb12L, "-9108242", "% #0.ld",
-__LINE__, 0x00000004L, "4", "%X",
-__LINE__, 0x00059684L, "59684", "%x",
-__LINE__, 0xfff8d8f5L, "FFF8D8F5", "%X",
-__LINE__, 0x00b7027dL, "+11993725", "%+0.7ld",
-__LINE__, 0x0000d814L, "55316", "%0ld",
-__LINE__, 0x03c95a08L, "3c95a08", "%3x",
-__LINE__, -0x0b65f9aL, "-11952026", "%d",
-__LINE__, 0xfd956021L, "fd956021", "%0x",
-__LINE__, 0x000000edL, "ed", "%0x",
-__LINE__, -0x006a80cL, "-436236", "%.6ld",
-__LINE__, 0xfedb109dL, "fedb109d", "%x",
-__LINE__, 0x00000001L, "1", "%X",
-__LINE__, 0x00b3eb71L, " 11791217", "% d",
-__LINE__, 0x00000016L, "16", "%0X",
-__LINE__, 0x000001dbL, " 475", "% ld",
-__LINE__, 0x00465eafL, "4611759", "%0d",
-__LINE__, 0x0001b423L, "1B423", "%0X",
-__LINE__, 0x05df95eaL, "5df95ea", "%+.5x",
-__LINE__, 0x0000000eL, " 14", "%7ld",
-__LINE__, 0xffffb89eL, "ffffb89e", "%+x",
-__LINE__, 0x01259918L, " 19241240", "% d",
-__LINE__, -0x0000f8dL, "-003981", "%+#.6d",
-__LINE__, 0x00054ae0L, "54AE0", "%X",
-__LINE__, -0x4589ed4L, "-72916692", "% ld",
-__LINE__, 0x01017516L, "1017516", "%6X",
-__LINE__, 0xfffb9f15L, "FFFB9F15", "%.2X",
-__LINE__, 0x005f8394L, "5F8394", "%.2X",
-__LINE__, 0xffffffffL, "ffffffff", "%x",
-__LINE__, -0x0000001L, " -1", "%7.1ld",
-__LINE__, 0x004367afL, "4417455", "%4.ld",
-__LINE__, 0xffffff86L, "ffffff86", "%4.5x",
-__LINE__, -0x0000d17L, "-3351", "%2.0ld",
-__LINE__, 0xffffff31L, "ffffff31", "%.6x",
-__LINE__, -0x0000001L, "-1", "%ld",
-__LINE__, -0x3d785fabL, "-1031298987", "%d",
-__LINE__, -0x0000002L, "-2", "%-0ld",
-__LINE__, 0x0000019cL, "412", "%d",
-__LINE__, -0x0006f54L, "-28500", "%d",
-__LINE__, 0xfffe3524L, "FFFE3524", "% 6.2X",
-__LINE__, -0x128d3c00L, "-311245824", "%2d",
-__LINE__, -0x3be71293L, "-1004999315", "%d",
-__LINE__, 0x0000659dL, "26013", "%d",
-__LINE__, 0x2d947538L, "+764704056", "%+5d",
-__LINE__, 0xffa2a420L, "FFA2A420", "%0X",
-__LINE__, 0x00000001L, "1", "%d",
-__LINE__, 0x04477c14L, "4477c14", "%.6x",
-__LINE__, -0x06e145bL, "-7214171", "%d",
-__LINE__, 0x00009c01L, "39937", "%-.1d",
-__LINE__, 0xffde174bL, "ffde174b", "% 0x",
-__LINE__, 0x0001fbaeL, "1FBAE", "%01.X",
-__LINE__, -0x06b8406L, "-7046150", "%d",
-__LINE__, 0x000005b8L, "005b8", "%05x",
-__LINE__, -0x02d780bL, "-2979851", "%1d",
-__LINE__, 0x00209e26L, "2137638", "%2d",
-__LINE__, 0x0000041aL, "41A", "%0X",
-__LINE__, 0x2a77f42cL, "2A77F42C", "%02X",
-__LINE__, 0x13b6ee14L, "+330755604", "%+0d",
-__LINE__, -0x0000002L, "-2 ", "%-6.d",
-__LINE__, -0x0001eeeL, "-7918", "% #2.ld",
-__LINE__, 0xffffffffL, "FFFFFFFF", "% .5X",
-__LINE__, 0x20d11927L, "20d11927", "% 0.x",
-__LINE__, -0x0018690L, "-99984", "% ld",
-__LINE__, 0x000002a0L, "2A0", "%-0X",
-__LINE__, -0x0000511L, "-1297", "%+d",
-__LINE__, 0x0e782f31L, "242757425", "%-0.ld",
-__LINE__, 0x2ce06da0L, "752905632", "%#0ld",
-__LINE__, 0x00000062L, "62 ", "%-07x",
-__LINE__, -0x015d9d8L, "-1432024", "% 7d",
-__LINE__, 0xc9125ea8L, "c9125ea8", "%x",
-__LINE__, 0x00000006L, "6", "%.0ld",
-__LINE__, 0x0000019cL, "19c", "%x",
-__LINE__, 0x00000000L, " ", "%6.d",
-__LINE__, 0x00043e89L, "278153", "%0ld",
-__LINE__, 0x3e422abdL, "1044523709", "%ld",
-__LINE__, 0x0220a75dL, "35694429", "%#7.6d",
-__LINE__, 0x0000c21cL, "C21C", "% X",
-__LINE__, 0x000074abL, "29867", "%d",
-__LINE__, 0x056b22aaL, "56B22AA", "%+0.X",
-__LINE__, 0xfffffff9L, "FFFFFFF9", "%X",
-__LINE__, 0x00000000L, "0", "%X",
-__LINE__, 0xf094a4f4L, "f094a4f4", "%+4.x",
-__LINE__, -0x1dad0244L, "-497877572", "%d",
-__LINE__, 0xffffffffL, "FFFFFFFF", "%.1X",
-__LINE__, 0xfffffe2dL, "fffffe2d", "%7.x",
-__LINE__, 0x0000042bL, "0x42b", "%#x",
-__LINE__, -0x0000001L, "-1", "% d",
-__LINE__, 0x00e77ef5L, " 15171317", "% 7.ld",
-__LINE__, 0x00006210L, " 25104", "% 06d",
-__LINE__, 0x0011187aL, "1120378", "%-ld",
-__LINE__, -0x000000bL, "-11", "% #ld",
-__LINE__, 0x14cfaff0L, "14cfaff0", "%-2.3x",
-__LINE__, 0xffff74eaL, "FFFF74EA", "%3.X",
-__LINE__, 0x000bfb9dL, "bfb9d", "%x",
-__LINE__, 0xfffffffeL, "FFFFFFFE", "%X",
-__LINE__, 0x00014500L, "0X14500", "%#4.X",
-__LINE__, -0x0000001L, "-1", "%#1d",
-__LINE__, -0x0000024L, "-36", "%-0d",
-__LINE__, -0x6528828L, "-106072104", "%d",
-__LINE__, 0x00000075L, " 117", "% #d",
-__LINE__, 0xff027d67L, "ff027d67", "%0x",
-__LINE__, 0x0012b8b3L, "12b8b3", "%0.1x",
-__LINE__, 0x1070147bL, "275780731", "%.6ld",
-__LINE__, 0xffffe88eL, "FFFFE88E", "%1.3X",
-__LINE__, 0xfffffc0dL, "fffffc0d", "%00.6x",
-__LINE__, 0xffd889f5L, "ffd889f5", "%x",
-__LINE__, 0x00000470L, "1136", "%0ld",
-__LINE__, 0x000297f8L, "169976", "%ld",
-__LINE__, 0xfffffffeL, "fffffffe", "%+1x",
-__LINE__, 0x0000064aL, "64a", "%x",
-__LINE__, -0x3d71e43bL, "-1030874171", "%1.d",
-__LINE__, -0x0000004L, "-4 ", "%-3.d",
-__LINE__, 0xfffff132L, "FFFFF132", "%0.0X",
-__LINE__, 0x37b6356fL, "37b6356f", "%-x",
-__LINE__, 0xffffff7aL, "FFFFFF7A", "%.0X",
-__LINE__, 0x00023553L, "23553", "%x",
-__LINE__, 0x39a4c29fL, "39a4c29f", "%+5.x",
-__LINE__, 0xffffffccL, "ffffffcc", "%x",
-__LINE__, 0x0003a83bL, "239675", "%#6ld",
-__LINE__, 0x00000002L, "2", "%0x",
-__LINE__, -0x09b4e8cL, "-10178188", "%+03.ld",
-__LINE__, 0x00000002L, "0000002", "%-#.7ld",
-__LINE__, 0x00000b5eL, "2910", "%-04ld",
-__LINE__, -0x0000254L, "-596", "%+0d",
-__LINE__, 0x00000001L, "1", "%+1.x",
-__LINE__, 0xf8290d3eL, "0XF8290D3E", "% #X",
-__LINE__, 0x00000035L, "035", "%3.3X",
-__LINE__, 0x00131d7dL, "131D7D ", "%-7.6X",
-__LINE__, 0xffdbb36aL, "0xffdbb36a", "%#.6x",
-__LINE__, 0xc7275816L, "c7275816", "%04.x",
-__LINE__, 0x00bae994L, "12249492", "%0ld",
-__LINE__, 0x00000002L, "+2", "%+0.0ld",
-__LINE__, 0xffffffffL, "ffffffff", "%0x",
-__LINE__, 0xffffffe0L, "ffffffe0", "%x",
-__LINE__, 0x00000036L, "36", "%.0X",
-__LINE__, 0xfffffffdL, "FFFFFFFD", "%1X",
-__LINE__, 0xffffffc8L, "ffffffc8", "%+x",
-__LINE__, 0xe71c3689L, "e71c3689", "%x",
-__LINE__, 0x00000007L, "7 ", "%-3.ld",
-__LINE__, 0xffffffffL, "ffffffff", "%x",
-__LINE__, 0x00030400L, "030400", "%-4.6x",
-__LINE__, 0xbd8c6fa7L, "BD8C6FA7", "%-6X",
-__LINE__, 0x00000233L, "0000563", "%.7ld",
-__LINE__, 0xfef92e35L, "fef92e35", "%x",
-__LINE__, 0xffff2172L, "ffff2172", "%3x",
-__LINE__, 0x00001233L, "1233", "% X",
-__LINE__, -0x000d2e1L, "-53985", "%-0d",
-__LINE__, -0x3ba8cb5bL, "-1000917851", "%0d",
-__LINE__, -0x4fefb9aL, "-83819418", "%5.ld",
-__LINE__, 0xffffe9ebL, "FFFFE9EB", "%X",
-__LINE__, 0x1e472dc3L, "507981251", "%ld",
-__LINE__, -0x0077046L, "-487494", "%0d",
-__LINE__, 0x0002c4c9L, "+181449", "%+7.d",
-__LINE__, 0xfffffe63L, "fffffe63", "%x",
-__LINE__, 0xfff5a6dbL, "FFF5A6DB", "%X",
-__LINE__, 0x00174442L, "174442", "%-5.0X",
-__LINE__, 0x017891d9L, "17891D9", "%+5.X",
-__LINE__, 0x0261966bL, "261966B", "%-X",
-__LINE__, -0x3e58614dL, "-1045979469", "%ld",
-__LINE__, 0x002c4c41L, "+2903105", "%+01ld",
-__LINE__, 0x0000000cL, "012", "%#.3d",
-__LINE__, 0x0380f73aL, "58783546", "%ld",
-__LINE__, 0x000002c7L, "0000711", "%2.7ld",
-__LINE__, 0x00000002L, " 002", "% 04ld",
-__LINE__, 0x00687ca0L, "687CA0", "%X",
-__LINE__, 0x0000058aL, "1418", "%0ld",
-__LINE__, -0x0000642L, "-1602", "% ld",
-__LINE__, 0x0001f4f1L, "1F4F1", "%X",
-__LINE__, 0x0026d6fcL, "+2545404", "%+4.ld",
-__LINE__, 0x05dd423cL, "+98386492", "%+#ld",
-__LINE__, 0x0000782cL, "0782C", "%3.5X",
-__LINE__, 0xf67d91f8L, "f67d91f8", "%-x",
-__LINE__, 0xffffcf2dL, "ffffcf2d", "%+0x",
-__LINE__, -0x00af8a6L, "-719014", "%0ld",
-__LINE__, -0xe606ef9L, "-241200889", "%ld",
-__LINE__, 0xfe9d87f7L, "fe9d87f7", "%+x",
-__LINE__, 0x00000d44L, "d44", "% 1.x",
-__LINE__, 0x008716f5L, "8716f5", "%2x",
-__LINE__, 0x000027d4L, "27D4", "% X",
-__LINE__, 0xfdfd92eaL, "FDFD92EA", "%-.4X",
-__LINE__, 0xfffe764fL, "FFFE764F", "%X",
-__LINE__, 0xff699032L, "ff699032", "%3.x",
-__LINE__, 0xffffffffL, "FFFFFFFF", "%-3X",
-__LINE__, -0x368ba995L, "-915122581", "%+#.6ld",
-__LINE__, 0xffffffffL, "ffffffff", "%0x",
-__LINE__, 0x0000035eL, " 862", "% 1d",
-__LINE__, 0xfe703e67L, "fe703e67", "%07.0x",
-__LINE__, 0xfffffffeL, "fffffffe", "%4.x",
-__LINE__, 0x000e20cfL, "e20cf", "%0x",
-__LINE__, 0x000063b5L, "0X63B5", "%-#X",
-__LINE__, 0xfffffffaL, "fffffffa", "%+2.x",
-__LINE__, 0xffffffffL, "FFFFFFFF", "%2.X",
-__LINE__, 0xfdfd69daL, "FDFD69DA", "%.0X",
-__LINE__, 0x00002f61L, "0x2f61", "%#3.x",
-__LINE__, 0x00000009L, "9", "%x",
-__LINE__, 0xffffff86L, "ffffff86", "%6x",
-__LINE__, 0xffffffe4L, "ffffffe4", "%0x",
-__LINE__, 0x0062e73bL, "+6481723", "%+0ld",
-__LINE__, -0x2b059130L, "-721785136", "%+d",
-__LINE__, -0x0000073L, "-115", "%d",
-__LINE__, 0xf596efcfL, "f596efcf", "%x",
-__LINE__, 0x0002f1cbL, "2F1CB", "%0X",
-__LINE__, -0x0000635L, "-01589", "%.5ld",
-__LINE__, 0xfffa011aL, "FFFA011A", "%0X",
-__LINE__, 0x00000047L, " 47", "%4X",
-__LINE__, 0xfffffbc0L, "FFFFFBC0", "%5.2X",
-__LINE__, 0x00000015L, "15", "% X",
-__LINE__, 0x002a87a6L, "2a87a6", "%.1x",
-__LINE__, -0x000069cL, "-1692", "%+ld",
-__LINE__, 0xfffffffdL, "fffffffd", "%+x",
-__LINE__, 0xfeda51f5L, "FEDA51F5", "%0X",
-__LINE__, 0x001781a4L, "1781a4", "%-0x",
-__LINE__, 0xe77358d4L, "e77358d4", "%+0x",
-__LINE__, 0x00000084L, " 84", "%3.x",
-__LINE__, 0xffff0cb2L, "FFFF0CB2", "%+5.X",
-__LINE__, 0x0009fa17L, "653847", "%0.0ld",
-__LINE__, -0x0000c92L, "-3218", "%d",
-__LINE__, 0x0004ebbbL, "4ebbb", "%x",
-__LINE__, 0x2e72568cL, "+779245196", "%+#ld",
-__LINE__, 0xffae86a7L, "ffae86a7", "%.7x",
-__LINE__, 0xffdf3f04L, "ffdf3f04", "%x",
-__LINE__, 0x000000c7L, "199", "%2.d",
-__LINE__, -0x0004a55L, "-19029", "%ld",
-__LINE__, 0x00564ef9L, "5656313", "%.6ld",
-__LINE__, 0xffffc205L, "ffffc205", "%+.0x",
-__LINE__, -0x135085d0L, "-324044240", "%#.5d",
-__LINE__, 0xfffffffeL, "fffffffe", "%-7x",
-__LINE__, -0x0000003L, "-3", "%.1ld",
-__LINE__, 0xffda9e0bL, "ffda9e0b", "%+0x",
-__LINE__, 0x00000001L, "1", "%d",
-__LINE__, 0xffffffdaL, "ffffffda", "%.6x",
-__LINE__, 0x5efdb3d1L, "+1593684945", "%+0d",
-__LINE__, -0x00000caL, "-202", "% 4.d",
-__LINE__, -0x0014433L, "-82995", "%.3d",
-__LINE__, -0x0000002L, "-000002", "% .6ld",
-__LINE__, 0x24aac879L, "615172217", "%.7d",
-__LINE__, -0x1db3c1dL, "-31144989", "%+#4ld",
-__LINE__, 0x000945adL, "0x945ad", "%#1x",
-__LINE__, 0x0000000aL, "10", "%#.1ld",
-__LINE__, -0x002a2e5L, "-172773", "%d",
-__LINE__, 0xfffffff3L, "FFFFFFF3", "%5X",
-__LINE__, 0x0000000eL, "e", "%+x",
-__LINE__, 0x335333dcL, "861090780", "%6.d",
-__LINE__, 0xfffa16f4L, "FFFA16F4", "%6X",
-__LINE__, 0xffffc727L, "ffffc727", "%+2.x",
-__LINE__, 0x00000273L, "273", "%x",
-__LINE__, -0x000000fL, "-15", "%-0d",
-__LINE__, 0x00065fbdL, "417725", "%5.1d",
-__LINE__, 0x00000ed5L, "3797", "%d",
-__LINE__, 0x30a40024L, "30A40024", "%3.7X",
-__LINE__, 0x00000054L, "84", "%ld",
-__LINE__, 0x00000515L, "01301", "%.5ld",
-__LINE__, 0x00000897L, "+02199", "%+.5d",
-__LINE__, -0x0001bccL, "-7116", "% ld",
-__LINE__, 0xfffffffeL, "FFFFFFFE", "%7X",
-__LINE__, 0x00000013L, "0X13", "%#X",
-__LINE__, 0xffffffffL, "0xffffffff", "% #x",
-__LINE__, 0x00000006L, "6", "%ld",
-__LINE__, -0x00000c3L, "-195", "%1.ld",
-__LINE__, -0x005291eL, "-338206", "%+d",
-__LINE__, 0xffb437a7L, "FFB437A7", "%-0X",
-__LINE__, 0xff8335cbL, "ff8335cb", "%x",
-__LINE__, 0x0000006aL, "6A", "%2X",
-__LINE__, -0x004f629L, "-325161", "% .4d",
-__LINE__, 0x003698efL, "3578095", "%0ld",
-__LINE__, 0x6b5cdf3aL, "6b5cdf3a", "%-x",
-__LINE__, 0xe9bc5c21L, "e9bc5c21", "%+x",
-__LINE__, -0x0000001L, " -1", "%+6.ld",
-__LINE__, 0xfffeffc8L, "FFFEFFC8", "%6.X",
-__LINE__, 0xff070a73L, "ff070a73", "%+.7x",
-__LINE__, 0x0023f8aeL, "2357422", "%07.4ld",
-__LINE__, 0x00000000L, "0", "%X",
-__LINE__, 0x00000016L, "16", "%0X",
-__LINE__, -0x000005aL, " -90", "%4d",
-__LINE__, 0x00000116L, "116", "% .3x",
-__LINE__, 0xfffed024L, "fffed024", "%-x",
-__LINE__, 0xfb907950L, "fb907950", "%.0x",
-__LINE__, 0x0101a1e5L, "101a1e5", "%x",
-__LINE__, -0x09e7684L, "-10385028", "%-#ld",
-__LINE__, 0xffffffffL, "ffffffff", "%1x",
-__LINE__, 0xfffffff6L, "fffffff6", "%x",
-__LINE__, 0x00000078L, "78", "%x",
-__LINE__, 0xe6bca9c9L, "0XE6BCA9C9", "%#.5X",
-__LINE__, -0x0000010L, "-16", "%d",
-__LINE__, -0x1348f685L, "-323548805", "%d",
-__LINE__, 0x4dd85797L, "1306023831", "%ld",
-__LINE__, -0x0000080L, "-128", "%.2d",
-__LINE__, -0xaed13a7L, "-183309223", "%+ld",
-__LINE__, -0x000002fL, "-47", "% d",
-__LINE__, -0x679911fL, "-108630303", "%ld",
-__LINE__, 0xfffff221L, "FFFFF221", "% .7X",
-__LINE__, 0x0007476cL, "7476c", "%x",
-__LINE__, 0xffffe02aL, "0xffffe02a", "%#7x",
-__LINE__, 0x00000ebbL, "0XEBB", "%#X",
-__LINE__, 0xffffffffL, "0XFFFFFFFF", "%-#X",
-__LINE__, 0x00281896L, "281896", "%+1.x",
-__LINE__, 0x0000085dL, " 0X85D", "%#6.3X",
-__LINE__, 0x000112bfL, "112BF", "%X",
-__LINE__, 0xf5518fbfL, "F5518FBF", "% X",
-__LINE__, -0x00c945bL, "-824411", "%ld",
-__LINE__, 0x00001b43L, "0x1b43", "%-#x",
-__LINE__, -0x5872a246L, "-1483907654", "%#7.7ld",
-__LINE__, 0x00001f96L, "8086", "%#d",
-__LINE__, 0xfffffff9L, "FFFFFFF9", "%X",
-__LINE__, -0x006e244L, "-451140", "% .3d",
-__LINE__, -0x0382188L, "-3678600", "%0.2ld",
-__LINE__, 0x00000006L, "6", "%-x",
-__LINE__, 0x00000036L, "54 ", "%-5.d",
-__LINE__, -0x0000439L, " -1081", "%#6.3ld",
-__LINE__, 0xfff911c6L, "FFF911C6", "%X",
-__LINE__, -0x03454dcL, "-3429596", "%d",
-__LINE__, -0x0363e8dL, "-3554957", "%-.2ld",
-__LINE__, 0x00000000L, "000", "%.3X",
-__LINE__, -0x59bb030fL, "-1505428239", "%0ld",
-__LINE__, 0x073c94d8L, "121410776", "%-d",
-__LINE__, -0x001ef94L, "-126868", "%5.1ld",
-__LINE__, 0xfff65fc5L, "FFF65FC5", "%0X",
-__LINE__, 0xfffffff4L, "fffffff4", "%-x",
-__LINE__, 0x00001d83L, "07555", "%5.5d",
-__LINE__, 0x0012b40aL, "1225738", "%ld",
-__LINE__, -0x0000006L, "-6", "%0ld",
-__LINE__, 0xfffffffcL, "fffffffc", "%06.0x",
-__LINE__, -0x0000002L, "-00002", "%#.5ld",
-__LINE__, 0xf9932c1dL, "f9932c1d", "%-x",
-__LINE__, -0x46a31d9L, "-74068441", "%.3ld",
-__LINE__, 0x000987e9L, "987E9", "%1X",
-__LINE__, 0x0000000fL, "15", "%-ld",
-__LINE__, -0x0001c4dL, "-7245", "%ld",
-__LINE__, -0x007deeeL, "-515822", "%2.6d",
-__LINE__, 0xffffffa2L, "FFFFFFA2", "%.6X",
-__LINE__, 0x00000001L, "1", "%-ld",
-__LINE__, 0xfc106bdeL, "fc106bde", "%.4x",
-__LINE__, 0x0002f1f8L, "0x2f1f8", "%#7.x",
-__LINE__, -0x06a290bL, "-6957323", "%-ld",
-__LINE__, -0x0000037L, " -55", "%4ld",
-__LINE__, 0x0000152eL, "5422", "%2.d",
-__LINE__, 0xfffffcb2L, "0XFFFFFCB2", "%#3.X",
-__LINE__, 0x1b7ca086L, "1b7ca086", "%+x",
-__LINE__, 0x00000001L, "1", "%ld",
-__LINE__, 0x006775fcL, "6775fc", "%3.2x",
-__LINE__, 0x0000000eL, "0XE", "%#3.X",
-__LINE__, 0xffffffffL, "0xffffffff", "%+#4.x",
-__LINE__, 0x00001246L, "1246", "%X",
-__LINE__, 0xffffaed6L, "ffffaed6", "%2x",
-__LINE__, -0x3a2dec78L, "-976088184", "% 0ld",
-__LINE__, 0x0001423bL, "1423b", "%01x",
-__LINE__, 0x00000007L, " 0X7", "%#4.X",
-__LINE__, 0x01a7ff5aL, "27787098", "%.4ld",
-__LINE__, -0x0020d05L, "-134405", "%-d",
-__LINE__, 0xffffff9aL, "ffffff9a", "%-.1x",
-__LINE__, 0xffff3557L, "ffff3557", "%x",
-__LINE__, 0x08828e35L, "8828e35", "%+.1x",
-__LINE__, 0x000006b2L, "001714", "%04.6ld",
-__LINE__, 0x00000013L, "19", "%.0ld",
-__LINE__, -0x00341a5L, "-213413", "%#d",
-__LINE__, -0x0000043L, "-67", "%d",
-__LINE__, -0x074dce3L, "-7658723", "%.1d",
-__LINE__, -0x16de2df3L, "-383659507", "% ld",
-__LINE__, 0x00000000L, "0", "%x",
-__LINE__, 0x00000ce7L, "ce7", "% 2.1x",
-__LINE__, 0xffecd377L, "ffecd377", "% 0x",
-__LINE__, 0xa4e8465cL, "a4e8465c", "% x",
-__LINE__, 0x000005e8L, "1512", "%d",
-__LINE__, 0x00000513L, "1299", "%d",
-__LINE__, 0xffffffb8L, "FFFFFFB8", "%X",
-__LINE__, 0x00000003L, "00003", "%3.5x",
-__LINE__, -0x0000003L, "-3 ", "%-3.ld",
-__LINE__, 0xad53f01dL, "ad53f01d", "%0x",
-__LINE__, 0x0f1c1daeL, "253500846", "%-#.0d",
-__LINE__, 0xff1753c0L, "0xff1753c0", "%#3.x",
-__LINE__, -0x00389c5L, "-231877", "%d",
-__LINE__, 0x0000016eL, "00016E", "%.6X",
-__LINE__, -0x54d3310fL, "-1423126799", "%-d",
-__LINE__, 0x00000005L, "0X5", "%#.1X",
-__LINE__, 0xfffffffdL, "0XFFFFFFFD", "%#5.3X",
-__LINE__, 0xfffffe0eL, "fffffe0e", "%-x",
-__LINE__, 0xa3c02157L, "a3c02157", "%.5x",
-__LINE__, 0x00005765L, "22373", "%d",
-__LINE__, -0x12668cdL, "-19294413", "%+ld",
-__LINE__, -0x66544daL, "-107300058", "%2d",
-__LINE__, 0x8646c605L, "0X8646C605", "% #X",
-__LINE__, 0x000001f5L, "1F5", "%X",
-__LINE__, 0x01b33ae4L, "28523236", "%5ld",
-__LINE__, 0x000007ceL, "7ce", "%3.x",
-__LINE__, 0x00000355L, "355", "%X",
-__LINE__, 0x000001ceL, "1CE", "% X",
-__LINE__, 0xfffffccdL, "fffffccd", "%7.0x",
-__LINE__, -0x0000001L, "-1", "%0ld",
-__LINE__, 0x000640b6L, "640b6", "%5.x",
-__LINE__, 0x0038c4ecL, "3720428", "%5.4d",
-__LINE__, -0x0f10b5eL, "-15797086", "%2ld",
-__LINE__, 0x256c815fL, "256c815f", "%4.x",
-__LINE__, 0x00000682L, " 1666", "%6ld",
-__LINE__, -0x00000abL, "-171", "%2ld",
-__LINE__, 0x00000003L, "3", "%0d",
-__LINE__, 0x063f5075L, "63F5075", "%X",
-__LINE__, 0xff83b5d0L, "FF83B5D0", "%7.X",
-__LINE__, 0xffffffecL, "ffffffec", "%x",
-__LINE__, 0xffb551c4L, "0XFFB551C4", "% #4.X",
-__LINE__, -0x071f057L, "-7467095", "%3.7d",
-__LINE__, 0x00634879L, "6506617", "%#ld",
-__LINE__, 0x000001d7L, "471", "%d",
-__LINE__, 0x00a7da92L, "A7DA92", "% .4X",
-__LINE__, 0x00000003L, "3 ", "%-2.ld",
-__LINE__, -0x0000004L, "-0004", "%.4d",
-__LINE__, -0x01dea32L, "-1960498", "% #7.d",
-__LINE__, 0x53c4159fL, "53C4159F", "%1.7X",
-__LINE__, -0x1ad7904L, "-28145924", "%#d",
-__LINE__, -0x0000a85L, "-2693", "%ld",
-__LINE__, -0x0000c7dL, "-3197", "%d",
-__LINE__, 0xfffffffcL, "FFFFFFFC", "%+0X",
-__LINE__, 0x00000004L, "00004", "%1.5d",
-__LINE__, 0x0000b761L, "46945", "%5ld",
-__LINE__, -0x0ee3b2cL, "-15612716", "%.6d",
-__LINE__, 0x0677a73dL, "677a73d", "% x",
-__LINE__, -0x5f96020L, "-100229152", "% d",
-__LINE__, 0x00000000L, " 0", "%#7X",
-__LINE__, -0x5d1cb5bL, "-97635163", "% ld",
-__LINE__, -0x00a8d8bL, "-691595", "%-0ld",
-__LINE__, 0xffffffa2L, "FFFFFFA2", "%X",
-__LINE__, 0xffffffc9L, "FFFFFFC9", "%X",
-__LINE__, 0x0b180d35L, "B180D35", "%X",
-__LINE__, 0xfc0b94ceL, "fc0b94ce", "%.1x",
-__LINE__, 0x0012cd7bL, "12CD7B", "% X",
-__LINE__, -0x02f1da8L, "-3087784", "%ld",
-__LINE__, -0x000a6f9L, "-42745", "%-ld",
-__LINE__, -0x000006dL, "-109 ", "%-6d",
-__LINE__, 0x00000001L, "+1", "%+0d",
-__LINE__, 0x00000001L, "1", "%1d",
-__LINE__, 0xfffffff8L, "fffffff8", "%5.x",
-__LINE__, -0x00fc4d7L, "-1033431", "%+0.5ld",
-__LINE__, 0xffff41b4L, "0xffff41b4", "%#x",
-__LINE__, -0x0000d37L, "-3383", "%ld",
-__LINE__, 0xffc4e405L, "ffc4e405", "%7x",
-__LINE__, 0xffffffb0L, "FFFFFFB0", "%04X",
-__LINE__, -0x0054477L, "-345207", "%01.ld",
-__LINE__, 0x00512778L, "0x512778", "%#3.0x",
-__LINE__, 0x00000007L, " 7", "%7.d",
-__LINE__, 0x00000008L, " 00008", "% .5ld",
-__LINE__, 0x000053fdL, "21501", "%.4ld",
-__LINE__, 0x0000370cL, "370c", "%2x",
-__LINE__, -0x44670a7L, "-71725223", "%3d",
-__LINE__, 0x00000064L, " 64", "%+5x",
-__LINE__, 0xfffffffcL, "FFFFFFFC", "%X",
-__LINE__, 0xf7bbf094L, "f7bbf094", "%3x",
-__LINE__, 0xfffeb268L, "FFFEB268", "%X",
-__LINE__, 0x00001ef0L, "1ef0", "%4.x",
-__LINE__, 0x05ad9aa4L, " 95263396", "% 0.ld",
-__LINE__, 0xf294dca7L, "F294DCA7", "% 4.X",
-__LINE__, -0x0000003L, "-000003", "%.6d",
-__LINE__, 0xfff57471L, "fff57471", "% x",
-__LINE__, 0x0a848cfdL, "176459005", "%d",
-__LINE__, -0x000002eL, "-46", "%.0d",
-__LINE__, 0x00000051L, " +81", "%+5d",
-__LINE__, -0x000072bL, "-0001835", "%06.7d",
-__LINE__, -0x0000002L, " -2", "%+#6ld",
-__LINE__, 0x00000003L, "3", "%x",
-__LINE__, 0xfffd1799L, "FFFD1799", "%6.X",
-__LINE__, 0x00000005L, "5", "%ld",
-__LINE__, 0x0052138bL, "5378955", "%#7.7ld",
-__LINE__, 0x000000c0L, " 192", "% 7ld",
-__LINE__, 0x005b26cdL, "5B26CD", "%X",
-__LINE__, -0x008df17L, "-581399", "%.4ld",
-__LINE__, 0xfffffad8L, "fffffad8", "%-x",
-__LINE__, 0x000006a9L, "6a9", "%.0x",
-__LINE__, -0x003b7f9L, "-243705", "%+0ld",
-__LINE__, 0x005d7ea4L, "6127268", "%ld",
-__LINE__, -0x003cceaL, "-249066", "%+.0ld",
-__LINE__, 0x0000846fL, "846F", "%X",
-__LINE__, 0x00004f79L, "4F79", "%4.X",
-__LINE__, 0xe3e1409cL, "E3E1409C", "%-X",
-__LINE__, 0x07cce2f4L, "7CCE2F4", "%2.X",
-__LINE__, 0x004bcc8bL, "4967563", "%-.5ld",
-__LINE__, 0x7d49665eL, "2101962334", "%ld",
-__LINE__, 0xfffffffcL, "FFFFFFFC", "%.5X",
-__LINE__, 0x0000019eL, "+000414", "%+.6d",
-__LINE__, 0x000027efL, "10223", "%d",
-__LINE__, -0x0000261L, "-609", "%3ld",
-__LINE__, -0x000000eL, "-14", "% 2.ld",
-__LINE__, 0xff3ba3c7L, "ff3ba3c7", "%+5.7x",
-__LINE__, 0xffffffc4L, "FFFFFFC4", "%-1.X",
-__LINE__, 0xfffc5a70L, "0xfffc5a70", "%#4.4x",
-__LINE__, 0x0000d156L, " 53590", "% d",
-__LINE__, -0x0486258L, "-4743768", "%0ld",
-__LINE__, 0x00000000L, " ", "% 2.d",
-__LINE__, 0x04a0ef9fL, "77655967", "%0.6ld",
-__LINE__, 0xffffffffL, "FFFFFFFF", "%X",
-__LINE__, 0x00000019L, "0000019", "%.7x",
-__LINE__, -0x0058d3aL, "-363834", "%ld",
-__LINE__, 0xfffff6b3L, "fffff6b3", "%x",
-__LINE__, 0xfffffff5L, "FFFFFFF5", "%.0X",
-__LINE__, 0x005e1fcbL, "5E1FCB", "%+6X",
-__LINE__, 0xffc3c866L, "0xffc3c866", "%-#.4x",
-__LINE__, 0x00000003L, "3", "%X",
-__LINE__, 0xffa2e961L, "FFA2E961", "%7.4X",
-__LINE__, 0x00000029L, "41", "%d",
-__LINE__, -0x0000035L, "-53", "%d",
-__LINE__, 0x0001b033L, "110643", "%ld",
-__LINE__, 0x004dd51bL, "5100827", "%-2ld",
-__LINE__, -0x000252dL, "-9517", "% d",
-__LINE__, 0xffffdeb2L, "ffffdeb2", "%4.x",
-__LINE__, 0xffe94eabL, "0xffe94eab", "%#x",
-__LINE__, 0xf921edf6L, "f921edf6", "%4.2x",
-__LINE__, 0x0007df97L, "515991", "%4.ld",
-__LINE__, 0x00709bc5L, "709BC5", "%0X",
-__LINE__, -0x0000001L, "-1", "%d",
-__LINE__, 0xfffffffbL, "FFFFFFFB", "%7.3X",
-__LINE__, -0x0063f74L, "-409460", "%+05.0d",
-__LINE__, 0xfffffe9aL, "FFFFFE9A", "%.2X",
-__LINE__, -0x0001ce2L, "-7394", "%.4d",
-__LINE__, 0x000038c5L, "14533", "%ld",
-__LINE__, 0x000000adL, "000ad", "% 5.5x",
-__LINE__, 0xffffbcc4L, "ffffbcc4", "%-5x",
-__LINE__, 0x00000000L, "0", "% X",
-__LINE__, 0x00372877L, "372877", "%.6X",
-__LINE__, 0xffffffd7L, "FFFFFFD7", "%1.X",
-__LINE__, 0xfa58b14bL, "fa58b14b", "%x",
-__LINE__, 0xfffffd9fL, "FFFFFD9F", "%0.7X",
-__LINE__, 0x00000710L, "+1808", "%+#.2ld",
-__LINE__, 0x00000006L, " 6", "%5.0ld",
-__LINE__, 0x0fba9706L, "263886598", "%-6.3d",
-__LINE__, 0xffff420aL, "ffff420a", "%-2x",
-__LINE__, 0x14b9a825L, "14b9a825", "%x",
-__LINE__, 0x0077ffe4L, "77FFE4", "%+.2X",
-__LINE__, 0x00067108L, "422152 ", "%-7.ld",
-__LINE__, 0x00000001L, " 00001", "%6.5X",
-__LINE__, 0x00000000L, "0", "%ld",
-__LINE__, -0x0000001L, " -1", "% 7ld",
-__LINE__, 0x01ddc7a3L, "31311779", "%d",
-__LINE__, -0x2a92f9bL, "-44642203", "% 3ld",
-__LINE__, 0xfffffff9L, "fffffff9", "%4.6x",
-__LINE__, 0x0279a274L, "279a274", "%x",
-__LINE__, 0x2e37ed8eL, "775417230", "%d",
-__LINE__, 0x5ba59f58L, "1537580888", "%-ld",
-__LINE__, 0xffffffe0L, "ffffffe0", "%x",
-__LINE__, 0x3110ae47L, "0X3110AE47", "%+#X",
-__LINE__, 0x000e00b9L, "917689", "%d",
-__LINE__, 0x0000002eL, " 0046", "% 7.4d",
-__LINE__, 0x00000363L, " 867", "%7.d",
-__LINE__, -0x000000bL, "-0011", "% 0.4d",
-__LINE__, 0x000349c8L, " 349C8", "% 7.X",
-__LINE__, -0x01358f1L, "-1267953", "%d",
-__LINE__, -0x0039d3cL, "-236860", "%-.3d",
-__LINE__, 0xffd6de19L, "ffd6de19", "%04.0x",
-__LINE__, -0x0003c54L, "-0015444", "%1.7d",
-__LINE__, -0x0000e17L, "-3607", "%d",
-__LINE__, 0xff0fa3a9L, "ff0fa3a9", "%+3x",
-__LINE__, 0x00000009L, "0000009", "%1.7x",
-__LINE__, 0xfffffc81L, "FFFFFC81", "% X",
-__LINE__, -0x4ef2df5L, "-82783733", "%ld",
-__LINE__, 0x00000013L, "19", "%-ld",
-__LINE__, 0x00000000L, " 0", "%#7x",
-__LINE__, -0x3b9485fdL, "-999589373", "%1.d",
-__LINE__, -0x0000006L, "-00006", "%6.5d",
-__LINE__, 0x0000003fL, "+63", "%+ld",
-__LINE__, 0x000004c5L, "1221", "%1.d",
-__LINE__, 0x003f8a8cL, "4164236", "%d",
-__LINE__, -0x000001eL, "-30", "%-#3d",
-__LINE__, 0xfff9d230L, "FFF9D230", "%+07.3X",
-__LINE__, 0x0147cf17L, "147cf17", "% x",
-__LINE__, 0xffffffebL, "ffffffeb", "%x",
-__LINE__, 0x0000007dL, "00125", "%.5ld",
-__LINE__, 0x000fff56L, "1048406", "%#3d",
-__LINE__, 0x064307a0L, " 105056160", "% 0.3ld",
-__LINE__, 0x007d2860L, "8202336", "%-.2d",
-__LINE__, 0x00a05711L, "a05711", "%x",
-__LINE__, 0x179a7f9eL, "0x179a7f9e", "%+#.3x",
-__LINE__, 0x00000003L, "3", "%X",
-__LINE__, -0x0001d7dL, "-7549", "%#5d",
-__LINE__, 0x0025d3f2L, "+2479090", "%+2.d",
-__LINE__, -0x0000001L, "-1", "%#ld",
-__LINE__, 0xfffffdd5L, "fffffdd5", "%.7x",
-__LINE__, 0x003462b9L, "3433145", "%d",
-__LINE__, 0x00005a81L, "23169", "%d",
-__LINE__, 0xfffffcdbL, "fffffcdb", "%-x",
-__LINE__, 0x00000000L, "0", "%d",
-__LINE__, 0xfff22085L, "fff22085", "%x",
-__LINE__, 0x00016d72L, " 93554", "% d",
-__LINE__, -0x0000002L, "-2", "%0ld",
-__LINE__, 0xfffffd21L, "fffffd21", "% 0x",
-__LINE__, 0x00000931L, "2353", "%ld",
-__LINE__, 0x00010021L, "10021", "%5.1X",
-__LINE__, -0x000007eL, "-126", "%1.0ld",
-__LINE__, 0xfffffff8L, "fffffff8", "%01.x",
-__LINE__, -0x001d148L, "-119112", "%d",
-__LINE__, -0x0000008L, "-8", "%ld",
-__LINE__, -0x000038eL, "-910", "% ld",
-__LINE__, 0x0039e3e5L, "3793893", "%0.1d",
-__LINE__, 0x0038fb8eL, "38FB8E", "%.2X",
-__LINE__, -0x002dafaL, "-187130", "%ld",
-__LINE__, -0xbec275bL, "-200025947", "%ld",
-__LINE__, 0x1a32f999L, "1A32F999", "%05.4X",
-__LINE__, 0x0000002fL, "2f", "%x",
-__LINE__, -0x0001a5bL, "-6747", "%+3.ld",
-__LINE__, 0x00000762L, " 1890", "%7.ld",
-__LINE__, 0x000000c2L, "000194", "%0.6ld",
-__LINE__, 0xffff002bL, "FFFF002B", "%.4X",
-__LINE__, -0x0019daeL, "-105902", "% .2d",
-__LINE__, 0x0000125fL, "125f", "%+1x",
-__LINE__, -0x000b688L, " -46728", "%#7.d",
-__LINE__, 0x000401caL, "401ca", "%0x",
-__LINE__, 0x00000192L, "402", "%#ld",
-__LINE__, 0xffffffffL, "ffffffff", "%x",
-__LINE__, 0x1e505a0cL, "0X1E505A0C", "%#1.3X",
-__LINE__, 0x000f8f6cL, "1019756", "%d",
-__LINE__, 0x0004a296L, "4a296", "%5.2x",
-__LINE__, 0x00000003L, "3", "% x",
-__LINE__, -0x000d44cL, "-54348", "%#ld",
-__LINE__, 0x00009ae2L, "39650", "%-d",
-__LINE__, 0xffffff3aL, "FFFFFF3A", "% .7X",
-__LINE__, 0x0042350bL, "4338955", "%d",
-__LINE__, 0x000071afL, "71af", "%+.4x",
-__LINE__, 0x00000001L, "0x1", "%#0x",
-__LINE__, 0x00000033L, "00051", "%3.5d",
-__LINE__, 0x00000001L, "1", "%X",
-__LINE__, -0xebfb0e7L, "-247443687", "%+3ld",
-__LINE__, 0x00000027L, "27 ", "%-07.X",
-__LINE__, -0x0004837L, "-18487", "%01d",
-__LINE__, 0x1a8c53daL, "1A8C53DA", "%X",
-__LINE__, -0x0bdb8a9L, "-12433577", "%d",
-__LINE__, -0x0000098L, "-152", "%#ld",
-__LINE__, -0x003b554L, "-243028", "%d",
-__LINE__, 0x000000cbL, "00000CB", "%+.7X",
-__LINE__, 0xfffffedaL, "FFFFFEDA", "%X",
-__LINE__, -0x0000010L, "-16", "%-#d",
-__LINE__, 0x00000006L, "+6", "%+d",
-__LINE__, 0x003c294aL, "+3942730", "%+4.ld",
-__LINE__, 0x00000009L, "9", "%ld",
-__LINE__, 0xfbbdd2bcL, "FBBDD2BC", "% X",
-__LINE__, 0x71c86678L, "+1908958840", "%+0.6ld",
-__LINE__, -0x0b49bffL, "-11836415", "% 6.ld",
-__LINE__, 0xfff416beL, "fff416be", "%3.x",
-__LINE__, 0x00000077L, "+119", "%+d",
-__LINE__, 0xfff1cfaaL, "FFF1CFAA", "% 0.2X",
-__LINE__, 0xfffffffbL, "fffffffb", "% x",
-__LINE__, 0x0000127eL, "4734", "%d",
-__LINE__, 0x00107ad2L, "107ad2", "%+2.6x",
-__LINE__, 0x0006b8e9L, "440553", "%-#d",
-__LINE__, 0x0000eb6fL, "eb6f", "% x",
-__LINE__, 0x00001f18L, "7960", "%0d",
-__LINE__, 0xfffff225L, "fffff225", "%1.5x",
-__LINE__, 0xfffffff9L, "fffffff9", "%+6.x",
-__LINE__, 0x000005b9L, "01465", "%.5ld",
-__LINE__, 0xfffc26b8L, "FFFC26B8", "% X",
-__LINE__, 0x540d580dL, "0X540D580D", "%+#X",
-__LINE__, 0x05ad7094L, "5AD7094", "% 4.7X",
-__LINE__, -0x000019bL, "-411", "% d",
-__LINE__, 0x00000006L, "000006", "%6.6ld",
-__LINE__, 0x0000026aL, "+618", "%+ld",
-__LINE__, 0x0000000bL, "11", "%ld",
-__LINE__, -0x26985d5L, "-40469973", "%#.0ld",
-__LINE__, 0x0000007dL, "7D", "%+02.0X",
-__LINE__, -0x0079ddfL, "-0499167", "%+.7ld",
-__LINE__, 0x0000375fL, "14175", "%0d",
-__LINE__, -0x18de7f99L, "-417234841", "%ld",
-__LINE__, -0x00507ccL, "-329676", "%.0d",
-__LINE__, 0x000029d5L, "29D5", "%-2.1X",
-__LINE__, 0x0000328cL, "328C", "%-3.X",
-__LINE__, 0x016f6234L, "24076852", "%3.ld",
-__LINE__, 0xfffffffcL, "0XFFFFFFFC", "%#.5X",
-__LINE__, 0xfe6163caL, "FE6163CA", "%5.X",
-__LINE__, 0xffffffc2L, "FFFFFFC2", "%X",
-__LINE__, 0x00000087L, "+135", "%+ld",
-__LINE__, 0x00310166L, "310166", "% x",
-__LINE__, 0x00e8c871L, "15255665", "%d",
-__LINE__, 0x000005eeL, "1518", "%ld",
-__LINE__, 0xfcb24306L, "FCB24306", "%X",
-__LINE__, 0x0000000bL, " 11", "%5ld",
-__LINE__, 0x006d11d0L, "0x6d11d0", "%#.0x",
-__LINE__, 0x0010d416L, "1102870", "%#6.5d",
-__LINE__, -0x0047cb3L, "-294067", "%.3d",
-__LINE__, 0x000000c0L, "c0", "%x",
-__LINE__, 0xffffffffL, "FFFFFFFF", "%+X",
-__LINE__, -0x000000aL, "-10", "%d",
-__LINE__, -0x0000007L, "-7", "% ld",
-__LINE__, 0xfffffffeL, "FFFFFFFE", "%-X",
-__LINE__, 0x00000014L, "0x14", "%-#3.1x",
-__LINE__, 0x00003319L, "3319", "% x",
-__LINE__, 0x00000000L, "00", "%+#.2X",
-__LINE__, -0x0000009L, "-9", "% ld",
-__LINE__, -0x0000001L, "-1 ", "%-3ld",
-__LINE__, 0x00262909L, "2500873", "%.5ld",
-__LINE__, 0x33e76560L, "33e76560", "%7.0x",
-__LINE__, -0x0000002L, "-2", "%ld",
-__LINE__, 0x00035ee9L, "35EE9", "%-3.X",
-__LINE__, -0x0000235L, "-565", "%+4.ld",
-__LINE__, -0x3ea63c5L, "-65692613", "%d",
-__LINE__, 0x00000003L, "3", "%ld",
-__LINE__, -0x003362fL, "-210479", "% d",
-__LINE__, -0x1a819f8aL, "-444702602", "%.7d",
-__LINE__, 0x027a4668L, "41567848", "%d",
-__LINE__, 0x0002b025L, "2b025", "%x",
-__LINE__, -0x0000001L, "-001", "%.3ld",
-__LINE__, 0xfffffff0L, "fffffff0", "%-0x",
-__LINE__, -0x0000d4fL, "-3407", "%-ld",
-__LINE__, 0x00000146L, " 326", "% 1.d",
-__LINE__, -0x0000006L, "-6", "%d",
-__LINE__, 0xffffffffL, "FFFFFFFF", "%06.4X",
-__LINE__, 0x376fddaeL, "+930078126", "%+#0ld",
-__LINE__, 0x006d9da3L, "6d9da3", "%1.x",
-__LINE__, -0x0000f28L, "-3880", "%3.2ld",
-__LINE__, 0x0006962cL, " 431660", "% 5d",
-__LINE__, 0x000011dbL, " 4571", "%6.ld",
-__LINE__, 0xffffffa8L, "ffffffa8", "%+x",
-__LINE__, 0x0d886db3L, "D886DB3", "%.7X",
-__LINE__, 0x00000000L, "000000", "%2.6ld",
-__LINE__, 0xfffff6b6L, "FFFFF6B6", "% X",
-__LINE__, -0x0739068L, "-7573608", "%+6.ld",
-__LINE__, 0xfba62553L, "0XFBA62553", "%#X",
-__LINE__, -0x4474bc5L, "-71781317", "%-2ld",
-__LINE__, 0xffffff95L, "FFFFFF95", "% 2.X",
-__LINE__, -0x1d0e1caL, "-30466506", "%+.0d",
-__LINE__, -0x000f3aaL, "-62378", "%ld",
-__LINE__, 0x00000026L, "26", "%1x",
-__LINE__, 0x001c5400L, "1856512", "%-#d",
-__LINE__, 0x03808442L, "3808442", "%X",
-__LINE__, -0x0000081L, "-129", "%+#ld",
-__LINE__, 0x000004aeL, " 1198", "% 3.4d",
-__LINE__, -0x7f4ed54L, "-133492052", "%d",
-__LINE__, 0x00000000L, "+0", "%+ld",
-__LINE__, 0x00000000L, "0", "%+x",
-__LINE__, 0x004c7e46L, "5013062", "%.0d",
-__LINE__, -0x647d7a65L, "-1685944933", "%0.2d",
-__LINE__, 0x00003b59L, "15193", "%-#1d",
-__LINE__, 0xfff3e64dL, "FFF3E64D", "%-X",
-__LINE__, 0x00007022L, "28706", "%-d",
-__LINE__, 0xc28d0ad8L, "c28d0ad8", "%+x",
-__LINE__, -0x005c208L, "-377352", "% ld",
-__LINE__, 0x00cfbadcL, "13613788", "%d",
-__LINE__, 0x000016eaL, "5866", "%0d",
-__LINE__, 0x00000029L, "29", "%X",
-__LINE__, 0xffe16813L, "0XFFE16813", "%+#X",
-__LINE__, 0x00000004L, "4", "%0X",
-__LINE__, -0x0000096L, " -150", "%5d",
-__LINE__, 0x00027ac7L, "162503", "%ld",
-__LINE__, -0x0075de0L, "-482784", "%d",
-__LINE__, 0x005fcff6L, "6279158", "%d",
-__LINE__, 0xffffffefL, "FFFFFFEF", "%3X",
-__LINE__, 0x267b05ecL, "645596652", "%4ld",
-__LINE__, 0xa487b724L, "a487b724", "%x",
-__LINE__, 0x01da2a11L, "31074833", "%-.0ld",
-__LINE__, 0xffffffffL, "FFFFFFFF", "%X",
-__LINE__, 0x0000037aL, "37a", "%x",
-__LINE__, 0x003d0314L, "+3998484", "%+#1d",
-__LINE__, 0x0000011bL, " 283", "%5.2d",
-__LINE__, 0x094f6066L, "94f6066", "%x",
-__LINE__, 0x00000004L, "4", "%X",
-__LINE__, -0x102e14bdL, "-271455421", "% 7.ld",
-__LINE__, 0x000048daL, "0018650", "%07ld",
-__LINE__, -0x24ae0390L, "-615383952", "%0.6d",
-__LINE__, 0xffff5159L, "0XFFFF5159", "%#0X",
-__LINE__, 0xfffd38c3L, "fffd38c3", "%x",
-__LINE__, 0xfffff9eaL, "FFFFF9EA", "%-X",
-__LINE__, -0x000fd28L, "-64808", "% ld",
-__LINE__, 0x002c1bf4L, "2890740", "%-.1d",
-__LINE__, 0x00d00ee7L, "D00EE7", "%0.4X",
-__LINE__, 0x00000cf9L, "3321", "%0d",
-__LINE__, -0x0000001L, "-1", "%-#ld",
-__LINE__, 0xfffffd75L, "FFFFFD75", "%.2X",
-__LINE__, 0x00000012L, "18", "%-d",
-__LINE__, 0xfd44b4b2L, "fd44b4b2", "%+5.x",
-__LINE__, -0x001c53fL, "-116031", "%-#6.d",
-__LINE__, 0x000ff6fdL, "ff6fd", "%2x",
-__LINE__, 0x00000001L, "1", "%0d",
-__LINE__, 0x0120b478L, "120B478", "%.7X",
-__LINE__, 0x0145591eL, "145591E", "%1.4X",
-__LINE__, 0x001f99b9L, "1F99B9", "%.1X",
-__LINE__, 0xffffd078L, "ffffd078", "%-1.5x",
-__LINE__, 0xffffff1aL, "FFFFFF1A", "%-4.6X",
-__LINE__, 0xfffffffaL, "fffffffa", "%x",
-__LINE__, -0x00000b9L, "-185", "%3ld",
-__LINE__, 0x00001cf0L, "7408", "%-ld",
-__LINE__, 0xffffffffL, "FFFFFFFF", "%X",
-__LINE__, 0x00151f30L, "151F30", "%X",
-__LINE__, -0x0000103L, "-259", "%d",
-__LINE__, -0x000303fL, "-12351", "%d",
-__LINE__, 0x000002caL, "714", "%ld",
-__LINE__, -0x0000c55L, "-3157", "%1d",
-__LINE__, 0x00000691L, "01681", "%#.5ld",
-__LINE__, 0x00230537L, "2295095", "%#d",
-__LINE__, 0x032a1faaL, "53092266", "%.4d",
-__LINE__, 0x000050d7L, "20695", "%d",
-__LINE__, -0x0c7ad4cL, "-13086028", "%#.4ld",
-__LINE__, -0x00009d9L, "-2521", "%+d",
-__LINE__, 0xfffffffeL, "fffffffe", "%0x",
-__LINE__, 0xffdec2d9L, "FFDEC2D9", "%5.1X",
-__LINE__, -0x000563cL, "-22076", "%-.2ld",
-__LINE__, 0x0073b36aL, "0x73b36a", "%-#x",
-__LINE__, 0xfffffffdL, "fffffffd", "%x",
-__LINE__, 0x0193ba5aL, "193ba5a", "%1.x",
-__LINE__, 0x00d147b5L, "13715381", "%2.d",
-__LINE__, 0xffffff10L, "ffffff10", "%4x",
-__LINE__, 0x000648d5L, "648d5", "%1.3x",
-__LINE__, 0x00000011L, "11", "%X",
-__LINE__, 0xff259f5bL, "0xff259f5b", "% #.1x",
-__LINE__, 0x00000175L, "175", "%x",
-__LINE__, 0x00000000L, "0", "%ld",
-__LINE__, 0x00000015L, "21", "%#ld",
-__LINE__, 0xfffffffeL, "fffffffe", "%-x",
-__LINE__, 0x00000013L, " 19", "% 0ld",
-__LINE__, -0x0000001L, "-0000001", "% 5.7ld",
-__LINE__, 0x0000139dL, "139D", "%X",
-__LINE__, 0x0041ad18L, "41ad18", "%-.6x",
-__LINE__, -0x00000f9L, "-249", "% 3.d",
-__LINE__, 0x00000076L, "118", "%ld",
-__LINE__, 0x000006f8L, "1784", "%d",
-__LINE__, -0x0000005L, "-5", "%ld",
-__LINE__, -0x00008e7L, "-2279", "%+ld",
-__LINE__, 0x00003f77L, "3F77", "%+0X",
-__LINE__, 0x000ca3f8L, "0XCA3F8", "%+#X",
-__LINE__, -0x00004bfL, "-001215", "%#5.6ld",
-__LINE__, 0x319129abL, "0x319129ab", "%+#x",
-__LINE__, -0x0000002L, "-2", "%ld",
-__LINE__, -0x0f6686eL, "-16148590", "%.6ld",
-__LINE__, 0x0329576bL, "53041003", "%2.d",
-__LINE__, -0x000179eL, "-6046", "%d",
-__LINE__, 0x000002ccL, "+716", "%+1.3ld",
-__LINE__, 0xfffffff7L, "0xfffffff7", "% #x",
-__LINE__, 0x0016eb40L, "1502016", "%ld",
-__LINE__, 0x00000003L, "3", "%-0ld",
-__LINE__, 0x0023e0d6L, "23E0D6", "%-05.X",
-__LINE__, 0xffffa6a4L, "0XFFFFA6A4", "%#X",
-__LINE__, 0x00087664L, "87664", "% .2x",
-__LINE__, -0x0000002L, " -2", "%3.ld",
-__LINE__, 0x003ad85dL, "3AD85D", "%X",
-__LINE__, 0x00002f20L, "12064", "%ld",
-__LINE__, 0x02030bfcL, "2030BFC", "%02.3X",
-__LINE__, 0xfffff36aL, "FFFFF36A", "%X",
-__LINE__, 0xfe0729ffL, "0xfe0729ff", "% #.0x",
-__LINE__, 0xfec15164L, "FEC15164", "%0.2X",
-__LINE__, -0x00169ecL, "-92652", "%+d",
-__LINE__, 0x006d7990L, "0x6d7990", "%#x",
-__LINE__, 0xffcc89e6L, "ffcc89e6", "%x",
-__LINE__, 0x002d7ccaL, "2981066", "%7.7ld",
-__LINE__, -0x1649692bL, "-373909803", "%#ld",
-__LINE__, 0x00664f47L, "664f47", "%+6.x",
-__LINE__, 0x00000000L, "0", "% X",
-__LINE__, 0x00000047L, "000047", "%.6X",
-__LINE__, 0x00000007L, "0000007", "%.7ld",
-__LINE__, 0x00000030L, "30", "%-x",
-__LINE__, -0x25bcbabbL, "-633125563", "% ld",
-__LINE__, 0xfe11c031L, "FE11C031", "%4.6X",
-__LINE__, -0x0000001L, "-0000001", "%.7d",
-__LINE__, 0x00b56d84L, "11890052", "%ld",
-__LINE__, -0x0000b01L, "-0002817", "%+07.7ld",
-__LINE__, 0xffffe4adL, "ffffe4ad", "% 0.0x",
-__LINE__, 0x007760fcL, "7760fc", "%+x",
-__LINE__, 0xffef44d8L, "FFEF44D8", "%X",
-__LINE__, 0xfcb6862eL, "fcb6862e", "%+x",
-__LINE__, -0x0000001L, "-1", "%0d",
-__LINE__, 0xffffffe6L, "FFFFFFE6", "%3.1X",
-__LINE__, 0xff816e27L, "FF816E27", "% 6.X",
-__LINE__, 0x00006415L, "25621", "%ld",
-__LINE__, -0xfae5449L, "-263083081", "%0ld",
-__LINE__, 0x00000001L, " 1", "% 0d",
-__LINE__, 0x00000009L, " 9", "%2.X",
-__LINE__, 0x002d7e18L, "2981400", "%7d",
-__LINE__, -0x00000fcL, "-0000252", "%-#.7d",
-__LINE__, 0x00000003L, "3", "%0x",
-__LINE__, 0x0d46e47fL, "222749823", "%ld",
-__LINE__, 0xfffcbc52L, "FFFCBC52", "%+X",
-__LINE__, 0x00000000L, "0", "%-X",
-__LINE__, 0xfffff0e5L, "fffff0e5", "%x",
-__LINE__, 0xffffffd9L, "FFFFFFD9", "%07X",
-__LINE__, 0x000004eeL, "4ee", "%0x",
-__LINE__, 0xffffffffL, "ffffffff", "%0x",
-__LINE__, -0x0008cb4L, "-036020", "%+3.6ld",
-__LINE__, 0x0000dadaL, "0xdada", "%#0.x",
-__LINE__, 0x0000001aL, "26 ", "%-4d",
-__LINE__, -0x000000cL, " -12", "%04.d",
-__LINE__, 0x0000025cL, " 25c", "%7.x",
-__LINE__, 0xfe9b091eL, "FE9B091E", "%X",
-__LINE__, 0x00000002L, " 2", "%07.ld",
-__LINE__, -0x0004930L, "-18736", "% 6.d",
-__LINE__, 0xffffffe9L, "FFFFFFE9", "%X",
-__LINE__, 0x00000003L, " 3", "%2.ld",
-__LINE__, 0x00000e00L, "3584", "%.4d",
-__LINE__, 0xffff38c2L, "ffff38c2", "%0.x",
-__LINE__, 0xffffffffL, "FFFFFFFF", "% .3X",
-__LINE__, 0xff7c1b2fL, "FF7C1B2F", "%-3.2X",
-__LINE__, -0x0000005L, "-5", "%2d",
-__LINE__, 0x00098775L, "98775", "%x",
-__LINE__, 0x000015ffL, " 15FF", "%6.X",
-__LINE__, 0xfffbe3efL, "FFFBE3EF", "%0.3X",
-__LINE__, -0x0000048L, "-72", "%ld",
-__LINE__, 0x0001488aL, "84106", "%d",
-__LINE__, 0x00000001L, "1", "%x",
-__LINE__, -0x0000002L, "-2", "%-0.0ld",
-__LINE__, -0x0000001L, "-1", "%-d",
-__LINE__, 0x0006616fL, "6616f", "%x",
-__LINE__, 0x3657856dL, "911705453", "%6.d",
-__LINE__, -0x0007222L, "-0029218", "%.7d",
-__LINE__, 0x00041606L, "267782", "%04.5d",
-__LINE__, 0x00000001L, " 1", "%2.ld",
-__LINE__, 0x00000219L, "219", "%0x",
-__LINE__, 0x0ae0184cL, "ae0184c", "%x",
-__LINE__, 0x00003a7dL, " 14973", "%7.ld",
-__LINE__, 0xffffffffL, "0XFFFFFFFF", "%#X",
-__LINE__, -0x0000002L, "-2", "%0ld",
-__LINE__, 0x00002cdfL, "11487", "%0ld",
-__LINE__, -0x000000cL, "-12", "%d",
-__LINE__, -0x000000eL, "-14", "%-#2d",
-__LINE__, 0x00000371L, "881", "%#ld",
-__LINE__, 0x000015beL, " 5566", "%5.ld",
-__LINE__, 0x01525b91L, "22174609", "%#0.0ld",
-__LINE__, 0xff8fc22fL, "FF8FC22F", "% X",
-__LINE__, -0x0007f7bL, "-32635", "%4.ld",
-__LINE__, 0x00007bcaL, "7bca", "%x",
-__LINE__, -0x0000582L, "-1410", "%ld",
-__LINE__, 0x00000047L, " +71", "%+04.2d",
-__LINE__, 0xf8a8dce2L, "f8a8dce2", "%+.6x",
-__LINE__, -0x000de2eL, "-56878", "%.0d",
-__LINE__, 0x019c03c1L, "0X19C03C1", "%#X",
-__LINE__, -0x0f3a43eL, "-15967294", "%ld",
-__LINE__, 0x00009e87L, "40583", "%#5.1d",
-__LINE__, 0x000000b8L, "184", "%0ld",
-__LINE__, -0x000befeL, "-48894", "%2ld",
-__LINE__, -0x002ee1aL, "-192026", "%.2d",
-__LINE__, 0x00004fd8L, "4fd8", "%x",
-__LINE__, 0x0006d57bL, "447867", "%2d",
-__LINE__, 0xfffffa9cL, "FFFFFA9C", "%-X",
-__LINE__, 0x0000000fL, "15", "%ld",
-__LINE__, 0x0005deb2L, "5DEB2", "% X",
-__LINE__, 0x00000007L, "7", "%X",
-__LINE__, 0xffffffc8L, "0XFFFFFFC8", "% #.1X",
-__LINE__, 0xfffff62fL, "FFFFF62F", "%X",
-__LINE__, -0x1a935bbaL, "-445864890", "% 3.5d",
-__LINE__, 0x000b34b4L, "0x0b34b4", "%-#3.6x",
-__LINE__, 0xfffff430L, "FFFFF430", "%X",
-__LINE__, 0x00000b5fL, "+0002911", "%+#.7d",
-__LINE__, 0x00000007L, " 7", "%3ld",
-__LINE__, 0xffffffd8L, "FFFFFFD8", "% .7X",
-__LINE__, 0xfffff544L, "FFFFF544", "%0X",
-__LINE__, -0x353667b9L, "-892757945", "%d",
-__LINE__, 0x00000058L, "0x00058", "%+#.5x",
-__LINE__, 0x39dbcc4aL, "+970705994", "%+0.6ld",
-__LINE__, 0xfffffffdL, "fffffffd", "% 01x",
-__LINE__, 0x00b1c28eL, "+11649678", "%+0ld",
-__LINE__, 0x000066c2L, "0X66C2", "%-#4X",
-__LINE__, 0x007171a2L, "+7434658", "%+07.ld",
-__LINE__, -0x0000001L, "-1", "%-d",
-__LINE__, 0x00000ae0L, "+2784", "%+0d",
-__LINE__, 0x13786a57L, "326658647", "%#5d",
-__LINE__, -0x0000001L, "-1", "%2.ld",
-__LINE__, -0x0168a16L, "-1477142", "%d",
-__LINE__, 0x12df7dd6L, "316636630", "%ld",
-__LINE__, 0x00000000L, "000000", "%1.6d",
-__LINE__, 0x266da2a9L, "644719273", "%ld",
-__LINE__, 0x0000004aL, "74", "%d",
-__LINE__, 0x000102ffL, "00102FF", "%+06.7X",
-__LINE__, 0x17916237L, "0x17916237", "%#5x",
-__LINE__, -0x0003cbbL, "-0015547", "%-.7d",
-__LINE__, 0xe7da2010L, "e7da2010", "%2.4x",
-__LINE__, 0xfffffff3L, "fffffff3", "% .7x",
-__LINE__, 0xfc9b64f8L, "FC9B64F8", "% 7.X",
-__LINE__, 0x000001afL, "431", "%0d",
-__LINE__, 0xffc81796L, "0xffc81796", "%#.5x",
-__LINE__, 0x057a1fbcL, "+91889596", "%+04d",
-__LINE__, 0x00001ae1L, "6881", "%ld",
-__LINE__, 0xfffffff6L, "fffffff6", "%3.0x",
-__LINE__, -0x6b7d5dbL, "-112711131", "%-06.1d",
-__LINE__, 0x008e8a5cL, " 8e8a5c", "%7.0x",
-__LINE__, 0xfe07a9bdL, "fe07a9bd", "%.1x",
-__LINE__, -0x00278e6L, "-162022", "%0ld",
-__LINE__, 0xf98709f5L, "F98709F5", "%X",
-__LINE__, -0x00000c9L, "-201", "% 1.d",
-__LINE__, -0x000001dL, "-00029", "%+2.5ld",
-__LINE__, 0x00000030L, " 48", "% d",
-__LINE__, 0xffd753f4L, "FFD753F4", "%0X",
-__LINE__, 0xfffffffdL, "FFFFFFFD", "%X",
-__LINE__, 0x0000a765L, "a765", "%x",
-__LINE__, 0x0026e2c8L, "26E2C8", "%-0X",
-__LINE__, -0x00003ebL, "-1003", "%3.1ld",
-__LINE__, 0x015d53caL, "22893514", "%0ld",
-__LINE__, -0x0000020L, "-32", "%ld",
-__LINE__, -0x03558ddL, "-3496157", "%1.0ld",
-__LINE__, -0x000007fL, "-127", "%1.d",
-__LINE__, 0xffffc737L, "0xffffc737", "%+#x",
-__LINE__, 0x0000a70dL, " a70d", "%6.x",
-__LINE__, 0x01ea0e31L, "0X1EA0E31", "% #1.X",
-__LINE__, 0x00b5f406L, "0X0B5F406", "%-#.7X",
-__LINE__, 0x0e58fa9aL, "240712346", "%.2d",
-__LINE__, 0xf43ff8a9L, "f43ff8a9", "%+0.6x",
-__LINE__, -0x5d0d3d3L, "-97571795", "%.3ld",
-__LINE__, -0x000027aL, "-634", "%0d",
-__LINE__, 0xffcef248L, "FFCEF248", "%07.X",
-__LINE__, 0x000002dcL, "2dc", "%0x",
-__LINE__, -0x31fa6c1L, "-52405953", "%.2d",
-__LINE__, 0x00000014L, "14", "%X",
-__LINE__, -0x0282f98L, "-2633624", "%ld",
-__LINE__, 0x00005f55L, "24405", "%#d",
-__LINE__, -0x0000004L, "-4", "%d",
-__LINE__, 0x00000001L, "1", "%+x",
-__LINE__, 0x013f47ceL, "13f47ce", "%0.x",
-__LINE__, 0x00143fceL, "1327054", "%.3d",
-__LINE__, 0x00000000L, "0", "%d",
-__LINE__, 0x00001f9aL, "1F9A", "% X",
-__LINE__, 0x00000cf5L, "cf5", "%x",
-__LINE__, 0xffea9c24L, "ffea9c24", "%x",
-__LINE__, 0xf09f85a7L, "F09F85A7", "%X",
-__LINE__, 0x00001e04L, "7684", "%ld",
-__LINE__, 0xffffc82aL, "ffffc82a", "%7x",
-__LINE__, -0x0000a77L, "-2679", "% d",
-__LINE__, 0x0019a859L, "+1681497", "%+2.6ld",
-__LINE__, -0x00002d7L, "-727", "%ld",
-__LINE__, 0x00011b82L, "72578", "%-#ld",
-__LINE__, 0x00000c32L, "3122", "%ld",
-__LINE__, -0x0000337L, "-823", "%1.d",
-__LINE__, 0x00000004L, "4", "%1ld",
-__LINE__, 0x0000062cL, "1580", "%.1ld",
-__LINE__, 0xffffffd3L, "FFFFFFD3", "% X",
-__LINE__, -0x07b1bf8L, "-8068088", "%#d",
-__LINE__, 0xfffffff9L, "fffffff9", "%x",
-__LINE__, 0x159e6cfbL, "159e6cfb", "%0.x",
-__LINE__, 0x0001148dL, "1148d", "%-.1x",
-__LINE__, 0x003373b7L, "3371959", "%#.0d",
-__LINE__, 0x00001af2L, "1af2", "%.4x",
-__LINE__, -0x0000001L, "-000001", "%+.6ld",
-__LINE__, -0x00001a3L, "-419", "%d",
-__LINE__, 0xfdb232e7L, "fdb232e7", "%5.4x",
-__LINE__, -0x000000dL, "-13", "%d",
-__LINE__, 0x98ec1c74L, "98ec1c74", "% 3x",
-__LINE__, 0xfffffff8L, "fffffff8", "%+1.4x",
-__LINE__, -0x0000d58L, "-3416", "%+#0ld",
-__LINE__, -0x65d1973L, "-106764659", "%.6d",
-__LINE__, -0x0737641L, "-7566913", "%-d",
-__LINE__, 0x0000037cL, "37c", "%+0x",
-__LINE__, 0x0000012cL, "0000300", "%#3.7d",
-__LINE__, 0x00c12d9bL, "12660123", "%1.5ld",
-__LINE__, 0xe7e5e77dL, "e7e5e77d", "%6x",
-__LINE__, 0x1fe0e820L, "1FE0E820", "%-4X",
-__LINE__, 0xc85a793aL, "C85A793A", "%X",
-__LINE__, 0x05f9fe2cL, "100269612", "%#ld",
-__LINE__, 0x00000032L, "0X32", "%+#4.1X",
-__LINE__, 0xfab4ce81L, "fab4ce81", "%3.x",
-__LINE__, -0x0000009L, "-9", "%2.d",
-__LINE__, 0xffff8d2eL, "ffff8d2e", "% 6x",
-__LINE__, 0xfffffffeL, "0xfffffffe", "%#x",
-__LINE__, 0x02960f60L, "2960f60", "%1.x",
-__LINE__, 0x34cf3cbcL, " 885996732", "% 5ld",
-__LINE__, -0x000006eL, "-110", "% d",
-__LINE__, -0x0000001L, "-1", "%-.0d",
-__LINE__, 0x000000b1L, " B1", "%+7X",
-__LINE__, 0xfffff5b4L, "FFFFF5B4", "%01.7X",
-__LINE__, 0x00000086L, "86", "%0X",
-__LINE__, 0x00074367L, " 74367", "% 6x",
-__LINE__, 0x001000d7L, "+1048791", "%+ld",
-__LINE__, 0x00000f35L, " 3893", "% d",
-__LINE__, -0x00000e1L, "-225", "%d",
-__LINE__, 0xffff6694L, "FFFF6694", "%6.X",
-__LINE__, 0x00019cf7L, "19cf7", "%0.x",
-__LINE__, 0x00000046L, "0046", "%+.4X",
-__LINE__, -0x000001fL, "-31", "%ld",
-__LINE__, 0xfff25859L, "fff25859", "%6x",
-__LINE__, 0x21884061L, "562577505", "%#ld",
-__LINE__, 0x01448b7aL, "1448B7A", "%0.1X",
-__LINE__, 0xffffffc0L, "ffffffc0", "%x",
-__LINE__, 0xfffffed5L, "fffffed5", "% 1.0x",
-__LINE__, 0x0e349767L, "E349767", "%.5X",
-__LINE__, 0x00000330L, "816", "%0d",
-__LINE__, -0x0000016L, "-22", "%d",
-__LINE__, 0xffff9babL, "FFFF9BAB", "%X",
-__LINE__, 0xffffee4eL, "ffffee4e", "%x",
-__LINE__, 0x0026beebL, "2539243", "%6.d",
-__LINE__, 0x00002c6cL, "11372", "%.2d",
-__LINE__, -0x000002cL, "-44", "%ld",
-__LINE__, -0x001dcfaL, "-122106", "% d",
-__LINE__, 0x0001683cL, "92220", "%#4.ld",
-__LINE__, 0x09b51fc9L, "9b51fc9", "%+.7x",
-__LINE__, 0x0000001dL, "29", "%0ld",
-__LINE__, -0x83f17e5L, "-138352613", "%ld",
-__LINE__, 0xfa4e2c1bL, "fa4e2c1b", "%x",
-__LINE__, 0x000001f3L, "499", "%0ld",
-__LINE__, 0xffff03e4L, "ffff03e4", "%x",
-__LINE__, 0x000000acL, "+0172", "%+.4ld",
-__LINE__, 0x03c3903bL, "63148091", "%00d",
-__LINE__, 0x0000000dL, "13", "%#d",
-__LINE__, 0x0000002eL, "0X2E", "%#X",
-__LINE__, 0x00006b2dL, "6B2D", "%X",
-__LINE__, 0x0000010bL, " 0010b", "%7.5x",
-__LINE__, 0x0000017aL, " 17a", "%4x",
-__LINE__, 0xfffffffbL, "fffffffb", "%+x",
-__LINE__, 0xffffac6aL, "ffffac6a", "%-.3x",
-__LINE__, -0x0005870L, "-22640", "%0d",
-__LINE__, 0x189c17bcL, "189c17bc", "%x",
-__LINE__, -0x01bbc38L, "-1817656", "%#6.ld",
-__LINE__, -0x3382b55L, "-54012757", "%d",
-__LINE__, -0x0000007L, "-7", "%-ld",
-__LINE__, -0x000c74bL, "-51019", "%ld",
-__LINE__, 0x0001a6f2L, "+108274", "%+#1.ld",
-__LINE__, 0x00077448L, "77448", "%x",
-__LINE__, 0x00000000L, "0", "%x",
-__LINE__, 0xfffff056L, "FFFFF056", "%.3X",
-__LINE__, -0x6f3f9451L, "-1866437713", "%-#3.0ld",
-__LINE__, 0x000000acL, "AC", "%X",
-__LINE__, 0xffc8752fL, "ffc8752f", "%-x",
-__LINE__, 0xfffffe6dL, "FFFFFE6D", "%2.X",
-__LINE__, -0x377f1a5L, "-58192293", "% .2d",
-__LINE__, -0x0000294L, "-660", "%d",
-__LINE__, 0xfffffffeL, "fffffffe", "%-x",
-__LINE__, 0xfffcbbe8L, "0xfffcbbe8", "%-#4.x",
-__LINE__, 0x0022e510L, "+2286864", "%+ld",
-__LINE__, 0xfffffe2aL, "FFFFFE2A", "%0.3X",
-__LINE__, 0xfe29f7c0L, "fe29f7c0", "%x",
-__LINE__, 0xfffe957eL, "FFFE957E", "%X",
-__LINE__, 0x000080f8L, "33016", "%ld",
-__LINE__, 0x0003ee2cL, " 257580", "%7d",
-__LINE__, 0x000003a1L, "929", "%d",
-__LINE__, 0x0000021fL, "21f", "%+x",
-__LINE__, 0xffffffffL, "ffffffff", "%.5x",
-__LINE__, -0x040a988L, "-4237704", "%-d",
-__LINE__, 0x027c8b69L, "41716585", "%ld",
-__LINE__, 0x00000003L, "3", "%-X",
-__LINE__, -0x0000368L, " -872", "%7.d",
-__LINE__, 0x00000d3cL, "3388", "%0.2d",
-__LINE__, -0x33734ccL, "-53949644", "%2ld",
-__LINE__, 0x000003dbL, "3DB", "%X",
-__LINE__, -0x00f154dL, "-988493", "%5d",
-__LINE__, 0x0000000bL, " 11", "%4.ld",
-__LINE__, 0x00000067L, "103", "%-ld",
-__LINE__, -0x0199fceL, "-1679310", "%4d",
-__LINE__, 0x02b6266bL, "2b6266b", "% x",
-__LINE__, -0x006b39dL, "-439197", "%+d",
-__LINE__, 0x00000007L, "7", "%ld",
-__LINE__, 0x0141fc98L, "21101720", "%0ld",
-__LINE__, -0x0008420L, "-33824", "%d",
-__LINE__, 0x0011622bL, "1139243", "%6ld",
-__LINE__, 0x0000001bL, "27", "%-d",
-__LINE__, -0x0030935L, "-198965", "%3d",
-__LINE__, 0x0000001fL, " 1f", "%4.x",
-__LINE__, -0x10782a19L, "-276310553", "%#ld",
-__LINE__, -0x007eac4L, "-518852", "%06.ld",
-__LINE__, 0x0bc4c681L, "197445249", "%6ld",
-__LINE__, 0x000000f5L, "245", "%.3ld",
-__LINE__, 0x00000197L, "197", "%X",
-__LINE__, 0xfffffeabL, "FFFFFEAB", "% X",
-__LINE__, 0x00000f05L, "F05", "%+X",
-__LINE__, 0xffe1b785L, "0xffe1b785", "%#x",
-__LINE__, -0x02d3581L, "-2962817", "%05d",
-__LINE__, 0xffffb994L, "FFFFB994", "%X",
-__LINE__, 0x03d139a3L, "64043427", "%ld",
-__LINE__, -0x0000002L, " -2", "%+4.d",
-__LINE__, -0x043da83L, "-4446851", "%#ld",
-__LINE__, -0x6aad891L, "-111859857", "%7.ld",
-__LINE__, 0x00003e68L, "15976", "%-4.5ld",
-__LINE__, 0xffe4d3eeL, "FFE4D3EE", "%X",
-__LINE__, 0x00000002L, "000002", "%4.6ld",
-__LINE__, 0xffffee32L, "ffffee32", "%4x",
-__LINE__, 0x0cb7dd25L, "cb7dd25", "%3x",
-__LINE__, 0xf773d422L, "F773D422", "%X",
-__LINE__, -0x0b590f7L, "-11899127", "%#d",
-__LINE__, -0x0002c45L, "-11333", "%-#5ld",
-__LINE__, -0x1efc9e4L, "-32492004", "%ld",
-__LINE__, -0x0003b9cL, "-15260", "%d",
-__LINE__, 0x000001b6L, "0X1B6", "%#4X",
-__LINE__, 0x3ce93ec3L, "1021918915", "%.6d",
-__LINE__, 0xffffffffL, "ffffffff", "%-x",
-__LINE__, 0xfffaf0e4L, "fffaf0e4", "%2.x",
-__LINE__, 0x00000002L, "0x2", "%#x",
-__LINE__, 0x0000e806L, "e806", "%4x",
-__LINE__, 0xfffffff0L, "fffffff0", "% 2.x",
-__LINE__, 0xfffffc0eL, "fffffc0e", "%+.4x",
-__LINE__, 0xfd45716eL, "FD45716E", "%.4X",
-__LINE__, 0xfff96fdaL, "FFF96FDA", "%-X",
-__LINE__, 0xff99d08aL, "FF99D08A", "%.5X",
-__LINE__, 0x00000002L, "2", "%-00.d",
-__LINE__, -0x000000fL, " -15", "%6.ld",
-__LINE__, -0x00d321cL, "-864796", "%#1ld",
-__LINE__, 0xff19ff8dL, "ff19ff8d", "%1.5x",
-__LINE__, 0x00000000L, "0000000", "%-.7x",
-__LINE__, 0x0000f50dL, " F50D", "%5X",
-__LINE__, 0x00001688L, " 5768", "%7.ld",
-__LINE__, 0x00000157L, "343", "%2ld",
-__LINE__, 0xfffffffdL, "0xfffffffd", "%+#3x",
-__LINE__, 0x00000d52L, "3410", "%ld",
-__LINE__, 0x00000003L, "3", "%d",
-__LINE__, 0x0001c6d2L, "01c6d2", "%.6x",
-__LINE__, 0x242d65d2L, "606954962", "%#7.ld",
-__LINE__, 0x00000e9fL, "0000E9F", "%5.7X",
-__LINE__, 0x0002d785L, "2D785", "%0X",
-__LINE__, 0x00000167L, "167", "%0X",
-__LINE__, 0xfffff5e5L, "fffff5e5", "% x",
-__LINE__, 0xffb69a04L, "0xffb69a04", "%#0.x",
-__LINE__, 0xfffa012eL, "FFFA012E", "%X",
-__LINE__, 0x0000001aL, "0x1a", "% #x",
-__LINE__, 0xfffb26d3L, "fffb26d3", "%+x",
-__LINE__, -0x00003e6L, " -998", "%7ld",
-__LINE__, 0x00000004L, "4", "%-d",
-__LINE__, 0xfffffd76L, "0XFFFFFD76", "%#7X",
-__LINE__, 0x00000035L, "53", "%ld",
-__LINE__, 0xffc6c190L, "0XFFC6C190", "%#X",
-__LINE__, 0xffffffe2L, "ffffffe2", "%7.0x",
-__LINE__, 0x03ff1b87L, "67050375", "%2.d",
-__LINE__, 0x00020c47L, "0X20C47", "%#X",
-__LINE__, 0x00000000L, "0", "%d",
-__LINE__, 0x0000000eL, "0X000E", "% #.4X",
-__LINE__, -0x00035cdL, "-13773", "%+2.d",
-__LINE__, 0x00005eecL, "5eec", "%1x",
-__LINE__, 0x001da0ffL, "1941759", "%0d",
-__LINE__, 0xf8a9e96aL, "f8a9e96a", "%+x",
-__LINE__, -0x0000120L, "-288 ", "%-#6.d",
-__LINE__, 0x00000000L, "0", "%-X",
-__LINE__, 0x0000152eL, "152E", "%+X",
-__LINE__, -0x0001077L, "-4215", "% 0d",
-__LINE__, 0xffffffd7L, "FFFFFFD7", "%0X",
-__LINE__, 0xfffe097dL, "FFFE097D", "%2X",
-__LINE__, 0xcb982712L, "cb982712", "%x",
-__LINE__, 0xfff39f2eL, "FFF39F2E", "%.5X",
-__LINE__, -0x0058caeL, "-363694", "%+.1d",
-__LINE__, -0x000002bL, "-043", "%#1.3d",
-__LINE__, -0x001e989L, "-125321", "%1d",
-__LINE__, 0x00959ecdL, "9805517", "%d",
-__LINE__, 0xf49df846L, "F49DF846", "%+3X",
-__LINE__, 0xfffffffdL, "fffffffd", "%+.5x",
-__LINE__, -0x000ac76L, "-44150", "%3.ld",
-__LINE__, 0x00000028L, " 0028", "%06.4x",
-__LINE__, 0x000003e8L, "3E8", "%-02X",
-__LINE__, 0x00000012L, "012", "%.3X",
-__LINE__, 0x00000006L, "0X6", "%#X",
-__LINE__, 0x00ef8479L, "+15697017", "%+0.6d",
-__LINE__, 0xffffffe8L, "FFFFFFE8", "%-X",
-__LINE__, 0x773a90f7L, "773a90f7", "%3.5x",
-__LINE__, 0x00096d44L, "96D44", "%-X",
-__LINE__, -0x08a3d96L, "-9059734", "%ld",
-__LINE__, -0x000001aL, "-26", "%00.ld",
-__LINE__, 0x32f57585L, "32f57585", "% x",
-__LINE__, 0x2825f175L, "2825F175", "%X",
-__LINE__, 0x000054ffL, "21759", "%-2d",
-__LINE__, -0x0266cdcL, "-2518236", "%ld",
-__LINE__, 0x0000031dL, "0X31D", "%+#4X",
-__LINE__, 0x0003fc99L, "3fc99", "%x",
-__LINE__, -0x0064624L, "-411172", "%-#d",
-__LINE__, 0x0001b2d9L, "111321", "%-ld",
-__LINE__, -0x000007cL, "-124", "%#d",
-__LINE__, 0xfffffffaL, "FFFFFFFA", "%+X",
-__LINE__, -0x007a5b8L, "-501176", "%+ld",
-__LINE__, 0x0213b583L, "213B583", "%2.X",
-__LINE__, 0xfff12e51L, "FFF12E51", "%+X",
-__LINE__, 0x00052403L, "0336899", "%-0.7d",
-__LINE__, 0xffffffffL, "ffffffff", "%-04.4x",
-__LINE__, 0x00000010L, "0010", "%0.4X",
-__LINE__, 0xffffffb5L, "FFFFFFB5", "%-1.3X",
-__LINE__, -0x0000001L, "-1", "%d",
-__LINE__, 0x0003a2d1L, "3a2d1", "% x",
-__LINE__, 0x00000424L, "1060", "%0ld",
-__LINE__, -0x0000078L, "-120", "%1d",
-__LINE__, 0x00000000L, "0", "%ld",
-__LINE__, 0x00000414L, "1044", "%ld",
-__LINE__, 0x00000072L, "0x072", "%#5.3x",
-__LINE__, 0x0000007aL, "7A", "% X",
-__LINE__, 0x081542a3L, "135611043", "%0d",
-__LINE__, 0xfffb4ce6L, "fffb4ce6", "%4.6x",
-__LINE__, 0x00002ab2L, "2ab2", "%-1x",
-__LINE__, 0x00000000L, " 0", "% 2x",
-__LINE__, 0xfffffa59L, "FFFFFA59", "%2.X",
-__LINE__, 0xffffe22bL, "ffffe22b", "%-x",
-__LINE__, 0xfffffd52L, "FFFFFD52", "%+.2X",
-__LINE__, 0x0000039fL, "927", "%-d",
-__LINE__, 0x0002dea6L, "2dea6", "%0x",
-__LINE__, 0x000216dbL, "136923", "%ld",
-__LINE__, 0x00000013L, "19", "%0d",
-__LINE__, 0x000047ccL, "18380", "%2.2ld",
-__LINE__, -0x0007d10L, "-32016", "%d",
-__LINE__, 0xff9af906L, "FF9AF906", "%0X",
-__LINE__, 0x02cfa224L, "+47161892", "%+0.7d",
-__LINE__, -0x0000022L, "-34", "%1.d",
-__LINE__, 0xfffffff0L, "FFFFFFF0", "%-4X",
-__LINE__, 0x00000029L, " 41", "%6.ld",
-__LINE__, 0xffffff76L, "ffffff76", "%x",
-__LINE__, 0x00000000L, "0", "%+X",
-__LINE__, 0x00000001L, "1", "%d",
-__LINE__, 0xfff6de5aL, "FFF6DE5A", "%X",
-__LINE__, 0x00000002L, "2", "%ld",
-__LINE__, 0x00000025L, "25", "%+x",
-__LINE__, 0xfffffffbL, "FFFFFFFB", "%5.0X",
-__LINE__, 0x0011bbb5L, "1162165", "%0.0ld",
-__LINE__, 0xfffcdc96L, "0XFFFCDC96", "%#X",
-__LINE__, 0x00008f5fL, "8f5f", "%3.1x",
-__LINE__, 0xffa0fa5dL, "0XFFA0FA5D", "%#X",
-__LINE__, 0x00004534L, "4534", "% 0X",
-__LINE__, 0xfffffff9L, "fffffff9", "%.2x",
-__LINE__, 0xffeeae50L, "ffeeae50", "%-x",
-__LINE__, 0x00002964L, " 0010596", "% 0.7d",
-__LINE__, 0x000021c9L, " 21c9", "%6x",
-__LINE__, 0x00000001L, " 1", "% d",
-__LINE__, 0x0002abd8L, "+175064", "%+d",
-__LINE__, 0xffffffadL, "FFFFFFAD", "%+0X",
-__LINE__, 0x00000003L, "3", "%ld",
-__LINE__, 0x0c036da3L, " 201551267", "% .3d",
-__LINE__, -0x004343cL, "-275516", "%+ld",
-__LINE__, 0x00000003L, "003", "% .3x",
-__LINE__, 0xffffe34eL, "ffffe34e", "%x",
-__LINE__, 0x0000e118L, "e118", "%x",
-__LINE__, -0x007d945L, "-514373", "%+#0ld",
-__LINE__, 0x277f1cc5L, "277f1cc5", "% x",
-__LINE__, 0x00003befL, "03bef", "% 0.5x",
-__LINE__, 0xfffffcb9L, "fffffcb9", "%x",
-__LINE__, 0x0003311aL, "209178", "%ld",
-__LINE__, 0x00000000L, " ", "%3.ld",
-__LINE__, 0x05942225L, "5942225", "%x",
-__LINE__, 0xfffceb4cL, "FFFCEB4C", "%-X",
-__LINE__, 0xffd08633L, "ffd08633", "%2.x",
-__LINE__, -0x0000001L, " -1", "%6d",
-__LINE__, 0x000fdb12L, "1039122", "%d",
-__LINE__, 0x00000003L, "3", "% 0X",
-__LINE__, -0x2fd5bf1L, "-50158577", "% 5.ld",
-__LINE__, -0x0089a03L, "-563715", "%-d",
-__LINE__, 0xfffffffeL, "FFFFFFFE", "% X",
-__LINE__, 0x29fdb2baL, "29fdb2ba", "% 0x",
-__LINE__, 0x0000008fL, "8F", "% X",
-__LINE__, 0x00000003L, "3", "%ld",
-__LINE__, 0xffc58445L, "FFC58445", "%.2X",
-__LINE__, -0x00023f6L, "-9206", "%+d",
-__LINE__, 0x00000011L, "11", "%X",
-__LINE__, -0x0000003L, "-0000003", "%-.7d",
-__LINE__, -0x0000003L, "-3", "%#ld",
-__LINE__, 0x001242d9L, "1242D9", "%X",
-__LINE__, -0x48d0c81L, "-76352641", "%7.d",
-__LINE__, -0x001b675L, "-112245", "%#ld",
-__LINE__, 0x00000003L, "3", "%-d",
-__LINE__, 0xfff93fdfL, "0XFFF93FDF", "% #X",
-__LINE__, 0x001a9414L, "1741844", "%#ld",
-__LINE__, 0x0001fd86L, "130438", "%ld",
-__LINE__, 0x010f37a8L, "17774504", "%4.7d",
-__LINE__, 0x00382838L, "0382838", "%3.7X",
-__LINE__, -0x47fd56c2L, "-1207785154", "%ld",
-__LINE__, 0x001981ddL, "1981dd", "%x",
-__LINE__, 0xffffefbaL, "ffffefba", "% 06.x",
-__LINE__, -0x3f402b29L, "-1061169961", "%+#ld",
-__LINE__, -0x395aae44L, "-962244164", "%-1d",
-__LINE__, 0x1fa39f42L, "530816834", "%#d",
-__LINE__, -0x000358dL, "-13709", "%d",
-__LINE__, -0xdc17b8fL, "-230783887", "%ld",
-__LINE__, -0x23c41583L, "-600053123", "%+3.d",
-__LINE__, 0xfffffc16L, "fffffc16", "%x",
-__LINE__, 0x003f1364L, "4133732", "%7.ld",
-__LINE__, 0xffffe691L, "FFFFE691", "%07X",
-__LINE__, 0x07b31d71L, "129178993", "%.7d",
-__LINE__, -0x0019732L, "-104242", "% ld",
-__LINE__, 0x02428167L, "0x2428167", "%#x",
-__LINE__, -0x06c1ecdL, "-7085773", "%.7ld",
-__LINE__, 0xfb01cb4eL, "fb01cb4e", "%x",
-__LINE__, 0x00005a41L, "+23105", "%+ld",
-__LINE__, 0xfffffff4L, "FFFFFFF4", "%-5.X",
-__LINE__, 0x00000005L, " 5", "%4.ld",
-__LINE__, 0xf4ab4b2dL, "F4AB4B2D", "%0.X",
-__LINE__, -0x000fce3L, "-64739", "%+#3.ld",
-__LINE__, 0x000076eaL, " 30442", "%6.2ld",
-__LINE__, 0x00000cb9L, " cb9", "%4.x",
-__LINE__, 0x002f43efL, "3097583", "%1.1ld",
-__LINE__, 0xf5bd0105L, "F5BD0105", "%+X",
-__LINE__, 0x0037954aL, "3642698", "%d",
-__LINE__, 0xfffffff7L, "0XFFFFFFF7", "%-#X",
-__LINE__, 0xffffcedfL, "0xffffcedf", "%#6.7x",
-__LINE__, 0xfffffde4L, "FFFFFDE4", "%2.4X",
-__LINE__, 0x01a6f103L, "1a6f103", "%5.x",
-__LINE__, 0x00000191L, " 191", "%7.0X",
-__LINE__, 0x00000003L, "03", "% .2X",
-__LINE__, -0xd4e3219L, "-223228441", "%6.ld",
-__LINE__, 0x00b0efbdL, "11595709", "%d",
-__LINE__, -0x00000eaL, "-234", "%#3d",
-__LINE__, 0x00000be8L, "BE8 ", "%-5X",
-__LINE__, 0xffffffffL, "ffffffff", "%5.3x",
-__LINE__, -0x267f8c6L, "-40368326", "%d",
-__LINE__, 0x000006edL, "6ED", "%X",
-__LINE__, 0xfdd6c9b6L, "FDD6C9B6", "%X",
-__LINE__, 0x0007ac29L, "7ac29", "%-x",
-__LINE__, 0x00000014L, "14", "%2x",
-__LINE__, 0x123ca563L, "+305964387", "%+ld",
-__LINE__, 0x00000004L, " 4", "%5.d",
-__LINE__, 0xffff877aL, "ffff877a", "%x",
-__LINE__, -0x00003e7L, "-999", "%+0.3d",
-__LINE__, 0x0a68ba6eL, "a68ba6e", "%3.1x",
-__LINE__, 0xfe29c810L, "FE29C810", "%+X",
-#endif
-
-__LINE__, 0x00000000L, "0", "%o",
-__LINE__, 0000000123L, "123", "%o",
-__LINE__, 0000123456L, "0123456", "%#o",
-__LINE__, 0000123456L, "00123456", "%#.8o",
-__LINE__, 0000123456L, " 00123456", "%#10.8o",
-__LINE__, 0x00000123L, "0x00123", "%#07x",
-
-0,
-};
-
-int main()
-{
- int errcount = 0;
- int testcount = 0;
-#define BSIZE 1024
- char buffer[BSIZE];
- sprint_int_type *iptr;
-#if defined(__cplusplus) && !defined(TEST_LIBIO)
-
- ostrstream sstr(buffer, BSIZE);
-
- for (iptr = sprint_ints; iptr->line; iptr++) {
- sstr.seekp(0);
- sstr.form(iptr->format_string, iptr->value);
- sstr << ends;
- if (strcmp(buffer, iptr->result) != 0) {
- errcount++;
- cerr << "Error in line " << iptr->line;
- cerr << " using \"" << iptr->format_string;
- cerr << "\". Result is \"" << buffer << "\"; should be: \"";
- cerr << iptr->result << "\".\n";
- }
- testcount++;
- }
-
-
- if (errcount == 0) {
- cerr << "Encountered no errors in " << testcount << " tests.\n";
- return 0;
- }
- else {
- cerr << "Encountered " << errcount << " errors in "
- << testcount << " tests.\n";
- return 1;
- }
-#else
- for (iptr = sprint_ints; iptr->line; iptr++)
- {
- if (sizeof(int)==2)
- {
- /* Cheezy, but effective. */
- char buf[30];
- int len = strlen(iptr->format_string);
-
- strcpy(buf, iptr->format_string);
- if(buf[len-2] != 'l') {
- buf[len] = buf[len-1];
- buf[len-1] = 'l';
- buf[len+1] = 0;
- }
- sprintf(buffer, buf, iptr->value);
- }
- else
- {
- sprintf(buffer, iptr->format_string, iptr->value);
- }
- if (strcmp(buffer, iptr->result) != 0) {
- errcount++;
- fprintf(stderr,
- "Error in line %d using \"%s\". Result is \"%s\"; should be: \"%s\".\n",
- iptr->line, iptr->format_string, buffer, iptr->result);
- fprintf(stderr,"%ld\n",iptr->value);
- }
- testcount++;
- }
-
- if (errcount == 0) {
- fprintf(stderr, "Encountered no errors in %d tests.\n", testcount);
- return 0;
- }
- else {
- fprintf(stderr, "Encountered %d errors in %d tests.\n",
- errcount, testcount);
- return 1;
- }
-#endif
-}
diff --git a/contrib/libio/tests/tiomanip.cc b/contrib/libio/tests/tiomanip.cc
deleted file mode 100644
index b7dd08a4618e..000000000000
--- a/contrib/libio/tests/tiomanip.cc
+++ /dev/null
@@ -1,35 +0,0 @@
-// test the parametrized manipulators
-
-#include <stdlib.h>
-#include <iomanip.h>
-
-main()
-{
-#ifdef _G_NO_TEMPLATES
- cerr << "(IO manipulators are not supported with this compiler)\n");
- exit(-1);
-#else
-
- cout << dec << 1234 << ' '
- << hex << 1234 << ' '
- << oct << 1234 << endl;
-
- //SMANIP<int> x = setw(4);
- //operator<<(cout, x);
-
- cout
- << "("
- << dec << setw(4) << setfill('*')
- << 12 << ")\n";
-
- cout << "(" << 12 << ")\n";
-
- cout << setiosflags(ios::internal);
- cout << "(" << setw(6) << -12 << ")\n";
-
- exit(0);
-#endif
-}
-
-
-
diff --git a/contrib/libio/tests/tiomanip.exp b/contrib/libio/tests/tiomanip.exp
deleted file mode 100644
index 7a0a7ea5cb21..000000000000
--- a/contrib/libio/tests/tiomanip.exp
+++ /dev/null
@@ -1,4 +0,0 @@
-1234 4d2 2322
-(**12)
-(12)
-(-***12)
diff --git a/contrib/libio/tests/tiomisc.cc b/contrib/libio/tests/tiomisc.cc
deleted file mode 100644
index 207a3f16e2b4..000000000000
--- a/contrib/libio/tests/tiomisc.cc
+++ /dev/null
@@ -1,236 +0,0 @@
-/* Random regression tests etc. */
-
-#include <fstream.h>
-#include <stdio.h>
-#include <strstream.h>
-#include <string.h>
-#include <fcntl.h>
-#include <stdlib.h>
-#include <assert.h>
-
-#define BUF_SIZE 4096
-
-void
-test1 ()
-{
- fstream f;
- char buf[BUF_SIZE];
-
- f.setbuf( buf, BUF_SIZE );
-}
-
-void
-test2 ( )
-{
- char string[BUF_SIZE];
- ostrstream s( string, BUF_SIZE );
-
- s << "Bla bla bla " << 55 << ' ' << 3.23 << '\0' << endl;
- cout << "Test2: " << string << endl;
-}
-
-
-/* Test case from Joe Buck <jbuck@Synopsys.COM>. */
-
-class special_ofstream : public ofstream {
-public:
- special_ofstream() : ofstream() {}
- special_ofstream(int fd) : ofstream(fd) {}
- special_ofstream(const char *name, int mode=ios::out, int prot=0664) {
- open(name,mode,prot);
- }
- void open(const char *name, int mode=ios::out, int prot=0664);
-};
-
-void special_ofstream::open(const char* name, int mode, int prot) {
- if (strcmp(name, "<cout>") == 0) {
- rdbuf()->attach(1);
- }
- else if (strcmp(name, "<cerr>") == 0) {
- rdbuf()->attach(2);
- setf(unitbuf);
- }
- else ofstream::open(name,mode,prot);
-}
-
-void
-test3 ()
-{
- {
- special_ofstream o("<cout>");
- o << "Hello\n";
- // o is destructed now. This should not close cout
- }
- {
- special_ofstream o("<cout>");
- o << "Line 2\n";
- }
-}
-
-void
-getline_test1 ()
-{
- char buf[1000];
- char data[] = "#include <iostream.h>\n#include <fstream.h>\n";
- istrstream infile(data, strlen(data));
- infile.getline(buf,1000);
- infile.getline(buf,1000);
-
- cout << buf << '\n';
-}
-
-// test istream::getline on readng overlong lines.
-void
-getline_test2 ()
-{
- char data[] = "Line one.\nline 2.\n";
- char line[100];
- istrstream strin(data, strlen(data));
- strin.getline(line, 10);
- cout << "line: " << line << ", count: " << strin.gcount () << "\n";
-}
-
-void
-getline_test3 ()
-{
- char data[] = "123456789\nabcdefghijkl.\n";
- char line[10];
- istrstream strin(data, strlen(data));
- strin.getline(line, 10);
- cout << "line: " << line << ", count: " << strin.gcount () << "\n";
- strin.getline(line, 10);
- cout << "line: " << line << ", count: " << strin.gcount () << "\n";
- assert (!strin.good());
- strin.clear ();
- strin.getline(line, 10);
- cout << "line: " << line << ", count: " << strin.gcount () << "\n";
-}
-
-class A : private ostream
-{
-public:
- A(streambuf* s);
- ostream::flush;
-};
-A::A(streambuf* s)
-: ostream(s)
-{
-}
-
-void
-flush1_test()
-{
- A os(cout.rdbuf());
- os.flush();
-}
-
-void
-reread_test ()
-{ // This is PR 5486.
- int tag_char;
- char *fname = "Makefile";
- int mode = O_RDONLY;
- filebuf file_p;
-
- int fd = ::open(fname, mode, 0666);
- file_p.attach(fd);
-
- istream d_istream(&file_p);
-
- // Read a character from the stream, save it and put it back.
- tag_char = d_istream.get();
- int save_char = tag_char;
- d_istream.putback((char) tag_char);
-
- // Uncomment then next statement and the next get will be EOF.
- streampos pos = d_istream.tellg();
-
- // Re-read the first character
- tag_char = d_istream.get();
-
- cout << "reread_test: " << (char)save_char << " " << (char)tag_char << "\n";
- cout.flush();
-
-}
-
-void *danger_pointer;
-void operator delete (void *p) throw()
-{
- if (p)
- {
- if (p == danger_pointer)
- fprintf (stderr, "maybe deleted\n");
-
- free (p);
- }
-}
-
-struct my_ostream: virtual public ios, public ostream
-{
- my_ostream (ostream &s): ios (s.rdbuf()) { }
-};
-
-void
-test_destroy ()
-{
- ofstream fstr ("foo.dat");
- my_ostream wa (fstr);
-
- /* Check that sure wa.rdbuf() is only freed once. */
- danger_pointer = wa.rdbuf ();
-
- wa << "Hi there" << endl;
-#ifdef _IO_NEW_STREAMS
- fprintf (stderr, "maybe deleted\n");
-#endif
-}
-
-/* Submitted by Luke Blanshard <luke@cs.wisc.edu>.
-
- In certain circumstances, the library will write past the end of the
- buffer it has allocated for a file: You must read from the file,
- exactly enough bytes that the read pointer is at the end of the
- buffer. Then you must write to the file, at the same place you just
- finished reading from.
-
- "Your patch looks great, and you're welcome to use the test code for any
- purpose whatever. I hereby renounce my implicit copyright on it." */
-
-void
-test_read_write_flush ()
-{
- fstream f;
- char buf[8192];
-
- for ( int index=0; index < sizeof buf; ++index )
- buf[index] = (index+1)&63? 'x' : '\n';
-
- f.open( "foo.dat", ios::in|ios::out|ios::trunc );
- f.write( buf, sizeof buf );
-
- f.seekg( 0, ios::beg );
- f.read( buf, sizeof buf );
-
-// f.seekp( sizeof buf, ios::beg ); // Present or absent, bug still happens.
- f.write( "a", 1 );
-
- if ( f.rdbuf()->_IO_write_ptr > f.rdbuf()->_IO_buf_end )
- cerr << "test_read_write_flush: it's broken.\n";
- else
- cout << "test_read_write_flush: the problem isn't showing itself.\n";
-}
-
-int main( )
-{
- test1 ();
- test2 ();
- test3 ();
- getline_test1 ();
- getline_test2 ();
- getline_test3 ();
- flush1_test ();
- reread_test ();
- test_destroy ();
- test_read_write_flush ();
- return 0;
-}
diff --git a/contrib/libio/tests/tiomisc.exp b/contrib/libio/tests/tiomisc.exp
deleted file mode 100644
index 26a3acd33fb1..000000000000
--- a/contrib/libio/tests/tiomisc.exp
+++ /dev/null
@@ -1,11 +0,0 @@
-Test2: Bla bla bla 55 3.23
-Hello
-Line 2
-#include <fstream.h>
-line: Line one., count: 10
-line: 123456789, count: 10
-line: abcdefghi, count: 9
-line: jkl., count: 5
-reread_test: # #
-maybe deleted
-test_read_write_flush: the problem isn't showing itself.
diff --git a/contrib/libio/tests/tstdiomisc.c b/contrib/libio/tests/tstdiomisc.c
deleted file mode 100644
index cd8e88fd6cec..000000000000
--- a/contrib/libio/tests/tstdiomisc.c
+++ /dev/null
@@ -1,43 +0,0 @@
-#ifndef STDIO_H
-#define STDIO_H <iostdio.h>
-#endif
-#include STDIO_H
-
-void
-t1 ()
-{
- int n = -1;
- sscanf ("abc ", "abc %n", &n);
- printf ("t1: count=%d\n", n);
-}
-
-void
-t2 ()
-{
- int n;
- long N;
- int retval;
-#define SCAN(INPUT, FORMAT, VAR) \
- VAR = -1; \
- retval = sscanf (INPUT, FORMAT, &VAR); \
- printf ("sscanf (\"%s\", \"%s\", &x) => %d, x = %ld\n", \
- INPUT, FORMAT, retval, (long)VAR);
-
- SCAN ("12345", "%ld", N);
- SCAN ("12345", "%llllld", N);
- SCAN ("12345", "%LLLLLd", N);
- SCAN ("test ", "%*s%n", n);
- SCAN ("test ", "%2*s%n", n);
- SCAN ("12 ", "%l2d", n);
- SCAN ("12 ", "%2ld", N);
-}
-
-int
-main ()
-{
- t1 ();
- t2 ();
-
- fflush (stdout);
- return 0;
-}
diff --git a/contrib/libio/tests/tstdiomisc.exp b/contrib/libio/tests/tstdiomisc.exp
deleted file mode 100644
index b8ee02dcd6a3..000000000000
--- a/contrib/libio/tests/tstdiomisc.exp
+++ /dev/null
@@ -1,8 +0,0 @@
-t1: count=5
-sscanf ("12345", "%ld", &x) => 1, x = 12345
-sscanf ("12345", "%llllld", &x) => 0, x = -1
-sscanf ("12345", "%LLLLLd", &x) => 0, x = -1
-sscanf ("test ", "%*s%n", &x) => 0, x = 4
-sscanf ("test ", "%2*s%n", &x) => 0, x = -1
-sscanf ("12 ", "%l2d", &x) => 0, x = -1
-sscanf ("12 ", "%2ld", &x) => 1, x = 12
diff --git a/contrib/libio/testsuite/ChangeLog b/contrib/libio/testsuite/ChangeLog
deleted file mode 100644
index ead33b2e1b72..000000000000
--- a/contrib/libio/testsuite/ChangeLog
+++ /dev/null
@@ -1,99 +0,0 @@
-Fri Mar 16 12:46:19 GMT 2001 Bernd Schmidt (bernds@redhat.com)
-
- * gcc-2.95.3 Released.
-
-Sun Oct 24 23:54:10 PDT 1999 Jeff Law (law@cygnus.com)
-
- * gcc-2.95.2 Released.
-
-Mon Aug 16 01:29:24 PDT 1999 Jeff Law (law@cygnus.com)
-
- * gcc-2.95.1 Released.
-
-Wed Jul 28 21:39:31 PDT 1999 Jeff Law (law@cygnus.com)
-
- * gcc-2.95 Released.
-
-Sun Jul 25 23:40:51 PDT 1999 Jeff Law (law@cygnus.com)
-
- * gcc-2.95 Released.
-
-Wed Nov 25 01:00:07 1998 Marc Espie <espie@quatramaran.ens.fr>
-
- * Makefile.in (just-check): Ignore errors.
-
-Sat Jun 27 23:59:35 1998 Carlo Wood <carlo@runaway.xs4all.nl>
-
- * lib/libio.exp (test_libio): Reset ld_library_path before appending
- the same path(s) again.
-
-Tue Jun 9 11:23:42 1998 Gavin Koch <gavin@cygnus.com>
-
- * Makefile.in (EXPECT) : Look for "expect" in the correct
- place.
-
-Sat Sep 6 00:49:31 1997 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * lib/libio.exp (test_libio): Lose -L.. before -lio, may as well
- require things be fully usable. Not ideal, but...also no longer
- have the -liostream approach.
-
-Fri Sep 5 15:38:37 1997 Jeffrey A Law (law@cygnus.com)
-
- * lib/libio.exp (test_libio): Use libstdc++_{include,link}_flags
- instead of g++_{include,link}_flags.
-
-Thu Sep 4 15:22:46 1997 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * lib/libio.exp (test_libio): Add `-L..' before -lio.
- Use `-L.. -liostream' for now.
-
-Fri Jun 27 18:19:21 1997 Bob Manson <manson@charmed.cygnus.com>
-
- * lib/libio.exp(libio_init): New procedure.
- (test_libio): Link with a status wrapper if necessary. Strip
- leading newlines before comparing output. Look for a multilib
- libiberty directory.
-
-Tue Jun 3 15:17:31 1997 Bob Manson <manson@charmed.cygnus.com>
-
- * lib/libio.exp: Don't use global exec_output variable; the output
- is returned from remote_load instead.
-
-Tue May 20 17:59:31 1997 Jeffrey A Law (law@cygnus.com)
-
- * lib/libio.exp: If "slow_simulator" is set, then add
- -DSLOW_SIMULATOR to the compiler's arguments.
-
-Fri May 16 19:33:39 1997 Bob Manson <manson@charmed.cygnus.com>
-
- * lib/libio.exp: Name the executables after the testcases.
-
- * libio.tests/tiomisc.exp: Turn off warnings when conpiling.
-
-Thu May 1 17:01:47 1997 Bob Manson <manson@charmed.cygnus.com>
-
- * lib/libio.exp: Link in libiberty.a.
-
-Tue Apr 29 16:34:37 1997 Mike Stump <mrs@cygnus.com>
-
- * testsuite/lib/libio.exp: Fixup so that we always have the same
- number of testcases, and so that we have meaningful testcase
- names.
-
-Tue Apr 29 13:08:41 1997 Bob Manson <manson@charmed.cygnus.com>
-
- * lib/libio.exp: Add support for --tool_opts.
-
-Mon Apr 28 11:26:06 1997 Bob Manson <manson@charmed.cygnus.com>
-
- * Makefile.in: Removed clean rule, as it is added by configure.
- Remove a lot of unused rules.
-
-Sun Apr 27 15:02:48 1997 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * Makefile.in (clean): Add empty rule for now.
-
-Sat Apr 26 13:41:44 1997 Bob Manson <manson@charmed.cygnus.com>
-
- * New DejaGnu-style testsuite.
diff --git a/contrib/libio/testsuite/Makefile.in b/contrib/libio/testsuite/Makefile.in
deleted file mode 100644
index d1795d00df60..000000000000
--- a/contrib/libio/testsuite/Makefile.in
+++ /dev/null
@@ -1,90 +0,0 @@
-# Copyright (C) 1997 Free Software Foundation
-#
-# This file is part of the GNU IO Library. This library is free
-# software; you can redistribute it and/or modify it under the
-# terms of the GNU General Public License as published by the
-# Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# 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. */
-
-srcdir = libio.tests
-
-CFLAGS = -g
-C_FLAGS = $(CFLAGS) -I. -I.. -I$(srcdir) -I$(srcdir)/..
-CXXFLAGS = -g
-CC = gcc
-CXX = gcc
-
-EXPECT = `if [ -f $${rootme}/../../../expect/expect ] ; then \
- echo $${rootme}/../../../expect/expect ; \
- else echo expect ; fi`
-
-RUNTEST = $(RUNTEST_FOR_TARGET)
-
-RUNTESTFLAGS =
-
-RUNTEST_FOR_TARGET = `\
- if [ -f $${srcdir}/../../dejagnu/runtest ]; then \
- echo $${srcdir}/../../dejagnu/runtest; \
- else \
- if [ "$(host_canonical)" = "$(target_canonical)" ]; then \
- echo runtest; \
- else \
- t='$(program_transform_name)'; echo runtest | sed -e '' $$t; \
- fi; \
- fi`
-
-#### package, host, target, and site dependent Makefile fragments come in here.
-##
-
-# See ${MOSTLYCLEAN} in configure.in
-JUNK_TO_CLEAN = tFile tiomisc hounddog putbackdog tiomanip \
- t?format *.out streamfile ftmp* tstdiomisc foo.dat
-
-.PHONY: info
-info:
-.PHONY: clean-info
-clean-info:
-.PHONY: install-info
-install-info:
-
-check: all just-check
-
-site.exp: ./config.status Makefile
- @echo "Making a new config file..."
- -@rm -f ./tmp?
- @touch site.exp
- -@mv site.exp site.bak
- @echo "## these variables are automatically generated by make ##" > ./tmp0
- @echo "# Do not edit here. If you wish to override these values" >> ./tmp0
- @echo "# add them to the last section" >> ./tmp0
- @echo "set host_alias $(host_alias)" >> ./tmp0
- @echo "set host_triplet ${host_canonical}" >> ./tmp0
- @echo "set target_alias $(target_alias)" >> ./tmp0
- @echo "set target_triplet ${target_canonical}" >> ./tmp0
- @echo "set build_triplet ${build_canonical}" >> ./tmp0
- @echo "set srcdir ${srcdir}" >> ./tmp0
- @echo "set tool libio" >> ./tmp0
- @echo "## All variables above are generated by configure. Do Not Edit ##" >> ./tmp0
- @cat ./tmp0 > site.exp
- @cat site.bak | sed \
- -e '1,/^## All variables above are.*##/ d' >> site.exp
- -@rm -f ./tmp?
-
-just-check: site.exp
- -rootme=`pwd`; export rootme; \
- srcdir=${srcdir} ; export srcdir ; \
- EXPECT=${EXPECT} ; export EXPECT ; \
- if [ -f $${rootme}/../../../expect/expect ] ; then \
- TCL_LIBRARY=$${srcdir}/../../tcl/library ; \
- export TCL_LIBRARY ; fi ; \
- $(RUNTEST) $(RUNTESTFLAGS)
diff --git a/contrib/libio/testsuite/config/default.exp b/contrib/libio/testsuite/config/default.exp
deleted file mode 100644
index 90967cccc18a..000000000000
--- a/contrib/libio/testsuite/config/default.exp
+++ /dev/null
@@ -1 +0,0 @@
-load_lib "standard.exp"
diff --git a/contrib/libio/testsuite/configure.in b/contrib/libio/testsuite/configure.in
deleted file mode 100644
index cd400c84ba2c..000000000000
--- a/contrib/libio/testsuite/configure.in
+++ /dev/null
@@ -1,22 +0,0 @@
-# This file is a shell script fragment that supplies the information
-# necessary for a configure script to process the program in
-# this directory. For more information, look at ../../configure.
-
-configdirs=
-srctrigger=libio.tests/hounddog.exp
-srcname="test C++ input/output library, dejagnu style"
-package_makefile_frag=Make.pack
-package_makefile_rules_frag=Make.pack.r
-
-# per-host:
-
-# per-target:
-
-TO_TOPDIR=../../
-ALL=' '
-XCINCLUDES='-I. -I.. -I$(srcdir) -I$(srcdir)/..'
-XCXXINCLUDES='-I. -I.. -I$(srcdir) -I$(srcdir)/..'
-MOSTLYCLEAN='*.o core $(JUNK_TO_CLEAN)'
-(. ${srcdir}/../config.shared) >${package_makefile_frag} 2>${package_makefile_rules_frag}
-
-# post-target:
diff --git a/contrib/libio/testsuite/lib/libio.exp b/contrib/libio/testsuite/lib/libio.exp
deleted file mode 100644
index d9f01b449fc9..000000000000
--- a/contrib/libio/testsuite/lib/libio.exp
+++ /dev/null
@@ -1,167 +0,0 @@
-# Copyright (C) 1997 Free Software Foundation, Inc.
-
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-# Please email any bugs, comments, and/or additions to this file to:
-# bug-lib-g++@prep.ai.mit.edu
-
-# This file was written by Bob Manson. (manson@cygnus.com)
-
-load_lib "libgloss.exp"
-
-global base_dir
-
-proc libio_init { args } {
- global wrapper_file;
- global wrap_compile_flags;
- set wrapper_file "";
- set wrap_compile_flags "";
- if [target_info exists needs_status_wrapper] {
- set result [build_wrapper "testglue.o"];
- if { $result != "" } {
- set wrapper_file [lindex $result 0];
- set wrap_compile_flags [lindex $result 1];
- } else {
- warning "Status wrapper failed to build."
- }
- }
-}
-#
-# Run the test specified by srcfile and resultfile. compile_args and
-# exec_args are additional arguments to be passed in when compiling and
-# running the testcase, respectively.
-#
-
-proc test_libio { srcfile compile_args inpfile resultfile exec_args } {
- global LIBIO
- global srcdir subdir objdir
- global TOOL_OPTIONS
- global wrapper_file wrap_compile_flags
- global ld_library_path
-
- if { $inpfile != "" } {
- set inpfile "$srcdir/../tests/$inpfile"
- }
-
- set args ""
- set ld_library_path ""
- lappend args "additional_flags=-O3";
- lappend args "additional_flags=-I.. -I$srcdir/.."
- lappend args "additional_flags=$wrap_compile_flags";
- lappend args "libs=$wrapper_file";
- if { $compile_args != "" } {
- lappend args "additional_flags=$compile_args"
- }
-
- if [regexp "\.cc$" $srcfile] {
- lappend args "additional_flags=-nostdinc++"
- lappend args "additional_flags=[libstdc++_include_flags]";
- lappend args "additional_flags=[libstdc++_link_flags]";
- lappend args "libs=-lstdc++"
- } else {
- if [info exists LIBIO] {
- lappend args "libdir=$LIBIO"
- } else {
- lappend args "additional_flags=[libio_link_flags]";
- }
- lappend args "additional_flags=[libio_link_flags]";
- lappend args "libs=-lio"
- }
-
- if [target_info exists slow_simulator] then {
- lappend args "additional_flags=-DSLOW_SIMULATOR"
- }
-
- if [info exists TOOL_OPTIONS] {
- lappend args "additional_options=$TOOL_OPTIONS"
- }
-
- set gp [get_multilibs];
- if { $gp != "" } {
- if [file exists $gp/libiberty/libiberty.a] {
- lappend args "libdir=$gp/libiberty";
- set found_libiberty 1;
- }
- }
- if ![info exists found_libiberty] {
- set lib [lookfor_file "$objdir" "libiberty/libiberty.a"];
- if { $lib != "" } {
- lappend args "libdir=[file dirname $lib]";
- }
- }
- lappend args "libs=-liberty"
- lappend args "debug";
-
- set errname "$srcfile"
- set srcfile "$srcdir/../tests/$srcfile"
- regsub "\\..*$" "[file tail $srcfile]" "" executable
- set executable "$objdir/$executable"
-
- if { [target_compile $srcfile $executable executable $args] != "" } {
- fail "$errname compilation $exec_args";
- setup_xfail "*-*-*"
- fail "$errname execution $exec_args"
- if { $resultfile != "" } {
- setup_xfail "*-*-*"
- fail "$errname output $exec_args"
- }
- return;
- }
- pass "$errname compilation $exec_args"
-
- set result [libio_load $executable $exec_args $inpfile];
- set status [lindex $result 0];
- set output [lindex $result 1];
- if { $status == "unsupported" } {
- unsupported "target does not support loading $srcfile"
- return;
- }
- if { $status != "pass" } {
- $status "$errname execution $exec_args"
- setup_xfail "*-*-*"
- fail "$errname output $exec_args"
- return;
- }
- pass "$errname execution $exec_args"
-
- if { $resultfile != "" } {
- set id [open $srcdir/../tests/$resultfile r];
- set expected ""
- append expected [read $id];
- verbose "expected is $expected"
- verbose "actual is $output"
- regsub -all "\r" $output "" output
- regsub "\n+$" $expected "" expected
- regsub "\n+$" $output "" output
- regsub "^\n+" $expected "" expected
- regsub "^\n+" $output "" output
- if { $expected == $output } {
- pass "$errname output $exec_args"
- } else {
- fail "$errname output $exec_args"
- }
- close $id;
- }
-}
-
-#
-# libio_version -- extract and print the version number of libio
-#
-proc default_libio_version {} {
- global LIBIO
-}
-
-proc default_libio_start { } {
-}
diff --git a/contrib/libio/testsuite/libio.tests/hounddog.exp b/contrib/libio/testsuite/libio.tests/hounddog.exp
deleted file mode 100644
index b51f9f0a4d39..000000000000
--- a/contrib/libio/testsuite/libio.tests/hounddog.exp
+++ /dev/null
@@ -1,3 +0,0 @@
-test_libio hounddog.cc "" hounddog.inp hounddog.exp ""
-test_libio hounddog.cc "" hounddog.inp hounddog.exp "-b0"
-test_libio hounddog.cc "" hounddog.inp hounddog.exp "-b2"
diff --git a/contrib/libio/testsuite/libio.tests/putbackdog.exp b/contrib/libio/testsuite/libio.tests/putbackdog.exp
deleted file mode 100644
index 30d91a8a5b8d..000000000000
--- a/contrib/libio/testsuite/libio.tests/putbackdog.exp
+++ /dev/null
@@ -1,3 +0,0 @@
-test_libio putbackdog.cc "" hounddog.inp hounddog.exp ""
-test_libio putbackdog.cc "" hounddog.inp hounddog.exp "-b0"
-test_libio putbackdog.cc "" hounddog.inp hounddog.exp "-b2"
diff --git a/contrib/libio/testsuite/libio.tests/tFile.exp b/contrib/libio/testsuite/libio.tests/tFile.exp
deleted file mode 100644
index f190916d8636..000000000000
--- a/contrib/libio/testsuite/libio.tests/tFile.exp
+++ /dev/null
@@ -1,3 +0,0 @@
-test_libio tFile.cc "" tFile.inp tFile.exp ""
-test_libio tFile.cc "" tFile.inp tFile.exp "-b0"
-test_libio tFile.cc "" tFile.inp tFile.exp "-b3"
diff --git a/contrib/libio/testsuite/libio.tests/tfformat.exp b/contrib/libio/testsuite/libio.tests/tfformat.exp
deleted file mode 100644
index f0f7113c3199..000000000000
--- a/contrib/libio/testsuite/libio.tests/tfformat.exp
+++ /dev/null
@@ -1 +0,0 @@
-test_libio tfformat.c "-DTEST_LIBIO -DTEST_EXACTNESS" "" "" ""
diff --git a/contrib/libio/testsuite/libio.tests/tiformat.exp b/contrib/libio/testsuite/libio.tests/tiformat.exp
deleted file mode 100644
index f2d14db5236e..000000000000
--- a/contrib/libio/testsuite/libio.tests/tiformat.exp
+++ /dev/null
@@ -1 +0,0 @@
-test_libio tiformat.c "-DTEST_LIBIO" "" "" ""
diff --git a/contrib/libio/testsuite/libio.tests/tiomanip.exp b/contrib/libio/testsuite/libio.tests/tiomanip.exp
deleted file mode 100644
index 856cefc3cd05..000000000000
--- a/contrib/libio/testsuite/libio.tests/tiomanip.exp
+++ /dev/null
@@ -1 +0,0 @@
-test_libio tiomanip.cc "" "" tiomanip.exp ""
diff --git a/contrib/libio/testsuite/libio.tests/tiomisc.exp b/contrib/libio/testsuite/libio.tests/tiomisc.exp
deleted file mode 100644
index 71309951bb07..000000000000
--- a/contrib/libio/testsuite/libio.tests/tiomisc.exp
+++ /dev/null
@@ -1 +0,0 @@
-test_libio tiomisc.cc "-w" "" tiomisc.exp ""
diff --git a/contrib/libio/testsuite/libio.tests/tstdiomisc.exp b/contrib/libio/testsuite/libio.tests/tstdiomisc.exp
deleted file mode 100644
index 01dae9ffe1a6..000000000000
--- a/contrib/libio/testsuite/libio.tests/tstdiomisc.exp
+++ /dev/null
@@ -1 +0,0 @@
-test_libio tstdiomisc.c "" "" tstdiomisc.exp ""
diff --git a/contrib/libobjc/objc-features.texi b/contrib/libobjc/objc-features.texi
deleted file mode 100644
index 819caf6cff0b..000000000000
--- a/contrib/libobjc/objc-features.texi
+++ /dev/null
@@ -1,392 +0,0 @@
-\input texinfo @c -*-texinfo-*-
-@c %**start of header
-@setfilename objc-features.info
-@settitle GNU Objective-C runtime features
-@setchapternewpage odd
-@c %**end of header
-
-@node Top, Executing code before main, , (dir), (dir)
-@comment node-name, next, previous, up
-
-@chapter GNU Objective-C runtime features
-
-This document is meant to describe some of the GNU Objective-C runtime
-features. It is not intended to teach you Objective-C, there are several
-resources on the Internet that present the language. Questions and
-comments about this document to Ovidiu Predescu
-@code{<ovidiu@@cup.hp.com>}.
-
-@menu
-* Executing code before main::
-* Type encoding::
-* Garbage Collection::
-@end menu
-
-
-@node Executing code before main, What you can and what you cannot do in +load, Top, Top
-@section @code{+load}: Executing code before main
-
-
-The GNU Objective-C runtime provides a way that allows you to execute
-code before the execution of the program enters the @code{main}
-function. The code is executed on a per-class and a per-category basis,
-through a special class method @code{+load}.
-
-This facility is very useful if you want to initialize global variables
-which can be accessed by the program directly, without sending a message
-to the class first. The usual way to initialize global variables, in the
-@code{+initialize} method, might not be useful because
-@code{+initialize} is only called when the first message is sent to a
-class object, which in some cases could be too late.
-
-Suppose for example you have a @code{FileStream} class that declares
-@code{Stdin}, @code{Stdout} and @code{Stderr} as global variables, like
-below:
-
-@example
-
-FileStream *Stdin = nil;
-FileStream *Stdout = nil;
-FileStream *Stderr = nil;
-
-@@implementation FileStream
-
-+ (void)initialize
-@{
- Stdin = [[FileStream new] initWithFd:0];
- Stdout = [[FileStream new] initWithFd:1];
- Stderr = [[FileStream new] initWithFd:2];
-@}
-
-/* Other methods here */
-@@end
-
-@end example
-
-In this example, the initialization of @code{Stdin}, @code{Stdout} and
-@code{Stderr} in @code{+initialize} occurs too late. The programmer can
-send a message to one of these objects before the variables are actually
-initialized, thus sending messages to the @code{nil} object. The
-@code{+initialize} method which actually initializes the global
-variables is not invoked until the first message is sent to the class
-object. The solution would require these variables to be initialized
-just before entering @code{main}.
-
-The correct solution of the above problem is to use the @code{+load}
-method instead of @code{+initialize}:
-
-@example
-
-@@implementation FileStream
-
-+ (void)load
-@{
- Stdin = [[FileStream new] initWithFd:0];
- Stdout = [[FileStream new] initWithFd:1];
- Stderr = [[FileStream new] initWithFd:2];
-@}
-
-/* Other methods here */
-@@end
-
-@end example
-
-The @code{+load} is a method that is not overridden by categories. If a
-class and a category of it both implement @code{+load}, both methods are
-invoked. This allows some additional initializations to be performed in
-a category.
-
-This mechanism is not intended to be a replacement for @code{+initialize}.
-You should be aware of its limitations when you decide to use it
-instead of @code{+initialize}.
-
-@menu
-* What you can and what you cannot do in +load::
-@end menu
-
-
-@node What you can and what you cannot do in +load, Type encoding, Executing code before main, Executing code before main
-@subsection What you can and what you cannot do in @code{+load}
-
-The +load implementation in the GNU runtime guarantees you the following
-things:
-
-@itemize @bullet
-
-@item
-you can write whatever C code you like;
-
-@item
-you can send messages to Objective-C constant strings (@@"this is a
-constant string");
-
-@item
-you can allocate and send messages to objects whose class is implemented
-in the same file;
-
-@item
-the @code{+load} implementation of all super classes of a class are executed before the @code{+load} of that class is executed;
-
-@item
-the @code{+load} implementation of a class is executed before the
-@code{+load} implementation of any category.
-
-@end itemize
-
-In particular, the following things, even if they can work in a
-particular case, are not guaranteed:
-
-@itemize @bullet
-
-@item
-allocation of or sending messages to arbitrary objects;
-
-@item
-allocation of or sending messages to objects whose classes have a
-category implemented in the same file;
-
-@end itemize
-
-You should make no assumptions about receiving @code{+load} in sibling
-classes when you write @code{+load} of a class. The order in which
-sibling classes receive @code{+load} is not guaranteed.
-
-The order in which @code{+load} and @code{+initialize} are called could
-be problematic if this matters. If you don't allocate objects inside
-@code{+load}, it is guaranteed that @code{+load} is called before
-@code{+initialize}. If you create an object inside @code{+load} the
-@code{+initialize} method of object's class is invoked even if
-@code{+load} was not invoked. Note if you explicitly call @code{+load}
-on a class, @code{+initialize} will be called first. To avoid possible
-problems try to implement only one of these methods.
-
-The @code{+load} method is also invoked when a bundle is dynamically
-loaded into your running program. This happens automatically without any
-intervening operation from you. When you write bundles and you need to
-write @code{+load} you can safely create and send messages to objects whose
-classes already exist in the running program. The same restrictions as
-above apply to classes defined in bundle.
-
-
-
-@node Type encoding, Garbage Collection, What you can and what you cannot do in +load, Top
-@section Type encoding
-
-The Objective-C compiler generates type encodings for all the
-types. These type encodings are used at runtime to find out information
-about selectors and methods and about objects and classes.
-
-The types are encoded in the following way:
-
-@c @sp 1
-
-@multitable @columnfractions .25 .75
-@item @code{char}
-@tab @code{c}
-@item @code{unsigned char}
-@tab @code{C}
-@item @code{short}
-@tab @code{s}
-@item @code{unsigned short}
-@tab @code{S}
-@item @code{int}
-@tab @code{i}
-@item @code{unsigned int}
-@tab @code{I}
-@item @code{long}
-@tab @code{l}
-@item @code{unsigned long}
-@tab @code{L}
-@item @code{long long}
-@tab @code{q}
-@item @code{unsigned long long}
-@tab @code{Q}
-@item @code{float}
-@tab @code{f}
-@item @code{double}
-@tab @code{d}
-@item @code{void}
-@tab @code{v}
-@item @code{id}
-@tab @code{@@}
-@item @code{Class}
-@tab @code{#}
-@item @code{SEL}
-@tab @code{:}
-@item @code{char*}
-@tab @code{*}
-@item unknown type
-@tab @code{?}
-@item bitfields
-@tab @code{b} followed by the starting position of the bitfield, the type of the bitfield and the size of the bitfield (the bitfields encoding was changed from the NeXT's compiler encoding, see below)
-@end multitable
-
-@c @sp 1
-
-The encoding of bitfields has changed to allow bitfields to be properly
-handled by the runtime functions that compute sizes and alignments of
-types that contain bitfields. The previous encoding contained only the
-size of the bitfield. Using only this information it is not possible to
-reliably compute the size occupied by the bitfield. This is very
-important in the presence of the Boehm's garbage collector because the
-objects are allocated using the typed memory facility available in this
-collector. The typed memory allocation requires information about where
-the pointers are located inside the object.
-
-The position in the bitfield is the position, counting in bits, of the
-bit closest to the beginning of the structure.
-
-The non-atomic types are encoded as follows:
-
-@c @sp 1
-
-@multitable @columnfractions .2 .8
-@item pointers
-@tab @code{'^'} followed by the pointed type.
-@item arrays
-@tab @code{'['} followed by the number of elements in the array followed by the type of the elements followed by @code{']'}
-@item structures
-@tab @code{'@{'} followed by the name of the structure (or '?' if the structure is unnamed), the '=' sign, the type of the members and by @code{'@}'}
-@item unions
-@tab @code{'('} followed by the name of the structure (or '?' if the union is unnamed), the '=' sign, the type of the members followed by @code{')'}
-@end multitable
-
-Here are some types and their encodings, as they are generated by the
-compiler on a i386 machine:
-
-@sp 1
-
-@multitable @columnfractions .25 .75
-@item Objective-C type
-@tab Compiler encoding
-@item
-@example
-int a[10];
-@end example
-@tab @code{[10i]}
-@item
-@example
-struct @{
- int i;
- float f[3];
- int a:3;
- int b:2;
- char c;
-@}
-@end example
-@tab @code{@{?=i[3f]b128i3b131i2c@}}
-@end multitable
-
-@sp 1
-
-In addition to the types the compiler also encodes the type
-specifiers. The table below describes the encoding of the current
-Objective-C type specifiers:
-
-@sp 1
-
-@multitable @columnfractions .25 .75
-@item Specifier
-@tab Encoding
-@item @code{const}
-@tab @code{r}
-@item @code{in}
-@tab @code{n}
-@item @code{inout}
-@tab @code{N}
-@item @code{out}
-@tab @code{o}
-@item @code{bycopy}
-@tab @code{O}
-@item @code{oneway}
-@tab @code{V}
-@end multitable
-
-@sp 1
-
-The type specifiers are encoded just before the type. Unlike types
-however, the type specifiers are only encoded when they appear in method
-argument types.
-
-
-@node Garbage Collection, , Type encoding, Top
-
-@page
-@section Garbage Collection
-
-Support for a new memory management policy has been added by using a
-powerful conservative garbage collector, known as the
-Boehm-Demers-Weiser conservative garbage collector. It is available from
-@w{@uref{http://reality.sgi.com/boehm_mti/gc.html}}.
-
-To enable the support for it you have to configure the compiler using an
-additional argument, @w{@kbd{--enable-objc-gc}}. You need to have
-garbage collector installed before building the compiler. This will
-build an additional runtime library which has several enhancements to
-support the garbage collector. The new library has a new name,
-@kbd{libobjc_gc.a} to not conflict with the non-garbage-collected
-library.
-
-When the garbage collector is used, the objects are allocated using the
-so-called typed memory allocation mechanism available in the
-Boehm-Demers-Weiser collector. This mode requires precise information on
-where pointers are located inside objects. This information is computed
-once per class, immediately after the class has been initialized.
-
-There is a new runtime function @code{class_ivar_set_gcinvisible()}
-which can be used to declare a so-called @strong{weak pointer}
-reference. Such a pointer is basically hidden for the garbage collector;
-this can be useful in certain situations, especially when you want to
-keep track of the allocated objects, yet allow them to be
-collected. This kind of pointers can only be members of objects, you
-cannot declare a global pointer as a weak reference. Every type which is
-a pointer type can be declared a weak pointer, including @code{id},
-@code{Class} and @code{SEL}.
-
-Here is an example of how to use this feature. Suppose you want to
-implement a class whose instances hold a weak pointer reference; the
-following class does this:
-
-@example
-
-@@interface WeakPointer : Object
-@{
- const void* weakPointer;
-@}
-
-- initWithPointer:(const void*)p;
-- (const void*)weakPointer;
-@@end
-
-
-@@implementation WeakPointer
-
-+ (void)initialize
-@{
- class_ivar_set_gcinvisible (self, "weakPointer", YES);
-@}
-
-- initWithPointer:(const void*)p
-@{
- weakPointer = p;
- return self;
-@}
-
-- (const void*)weakPointer
-@{
- return weakPointer;
-@}
-
-@@end
-
-@end example
-
-Weak pointers are supported through a new type character specifier
-represented by the @code{'!'} character. The
-@code{class_ivar_set_gcinvisible()} function adds or removes this
-specifier to the string type description of the instance variable named
-as argument.
-
-
-@bye
-
diff --git a/contrib/libstdc++/FREEBSD-upgrade b/contrib/libstdc++/FREEBSD-upgrade
deleted file mode 100644
index 137023ee0a76..000000000000
--- a/contrib/libstdc++/FREEBSD-upgrade
+++ /dev/null
@@ -1,18 +0,0 @@
-# ex:ts=8
-$FreeBSD$
-
-For the import of libstdc++, files were pruned by:
-
- tar xvypf gcc-2.95.1.tar.bz2 '*/libobjc'
-
-Then imported by:
- cvs -d /home/ncvs import -m "Virgin import of GCC 2.95.2's libstdc++" \
- src/contrib/libstdc++ FSF gcc_2_95_2
-
-To make local changes to libstdc++, simply patch and commit to the main
-branch (aka HEAD). Never make local changes on the vendor (FSF) branch.
-
-All local changes should be submitted to "gcc-patches@gcc.gnu.org".
-
-obrien@NUXI.com
-31-October-1999
diff --git a/contrib/libstdc++/NEWS b/contrib/libstdc++/NEWS
deleted file mode 100644
index 89e866e7d3f8..000000000000
--- a/contrib/libstdc++/NEWS
+++ /dev/null
@@ -1,9 +0,0 @@
-SUMMARY OF RECENT MAJOR CHANGES to LIBSTDC++.
-(Also check ../libio/NEWS.)
-
-*** Noteworthy changes in libstdc++ for EGCS
-
-* EGCS includes the SGI STL implementation without changes.
-
-* As a result of these and other changes, libstc++ for EGCS is not binary
- compatible with previous releases of libstdc++.
diff --git a/contrib/libstdc++/cassert b/contrib/libstdc++/cassert
deleted file mode 100644
index b4165bfae7fe..000000000000
--- a/contrib/libstdc++/cassert
+++ /dev/null
@@ -1,7 +0,0 @@
-// -*- C++ -*- forwarding header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __CASSERT__
-#define __CASSERT__
-#include <assert.h>
-#endif
diff --git a/contrib/libstdc++/cctype b/contrib/libstdc++/cctype
deleted file mode 100644
index e2765aed50a6..000000000000
--- a/contrib/libstdc++/cctype
+++ /dev/null
@@ -1,7 +0,0 @@
-// The -*- C++ -*- character type header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __CCTYPE__
-#define __CCTYPE__
-#include <ctype.h>
-#endif
diff --git a/contrib/libstdc++/cerrno b/contrib/libstdc++/cerrno
deleted file mode 100644
index ce493469597e..000000000000
--- a/contrib/libstdc++/cerrno
+++ /dev/null
@@ -1,7 +0,0 @@
-// The -*- C++ -*- error number header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __CERRNO__
-#define __CERRNO__
-#include <errno.h>
-#endif
diff --git a/contrib/libstdc++/cfloat b/contrib/libstdc++/cfloat
deleted file mode 100644
index cf59eadfb793..000000000000
--- a/contrib/libstdc++/cfloat
+++ /dev/null
@@ -1,7 +0,0 @@
-// -*- C++ -*- forwarding header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __CFLOAT__
-#define __CFLOAT__
-#include <float.h>
-#endif
diff --git a/contrib/libstdc++/cinst.cc b/contrib/libstdc++/cinst.cc
deleted file mode 100644
index 983e8a9caa76..000000000000
--- a/contrib/libstdc++/cinst.cc
+++ /dev/null
@@ -1,154 +0,0 @@
-// Instantiation file for the -*- C++ -*- complex number classes.
-// Copyright (C) 1994 Free Software Foundation
-
-#ifdef F
-typedef float f;
-#endif
-#ifdef D
-typedef double f;
-#endif
-#ifdef LD
-typedef long double f;
-#endif
-
-#if defined (MAIN) && defined (__GNUG__)
-#ifdef F
-#pragma implementation "fcomplex"
-#endif
-#ifdef D
-#pragma implementation "dcomplex"
-#endif
-#ifdef LD
-#pragma implementation "ldcomplex"
-#endif
-#endif
-
-#if 0
-#define _G_NO_EXTERN_TEMPLATES
-#endif
-#include <std/complext.cc>
-
-typedef complex<f> c;
-typedef const c& ccr;
-
-#ifdef MAIN
-template c& __doapl (c*, ccr);
-template c& __doaml (c*, ccr);
-template c& __doami (c*, ccr);
-template c& __doadv (c*, ccr);
-#endif
-
-#ifdef ADDCC
-template c operator+ (ccr, ccr);
-#endif
-#ifdef ADDCF
-template c operator+ (ccr, f);
-#endif
-#ifdef ADDFC
-template c operator+ (f, ccr);
-#endif
-#ifdef SUBCC
-template c operator- (ccr, ccr);
-#endif
-#ifdef SUBCF
-template c operator- (ccr, f);
-#endif
-#ifdef SUBFC
-template c operator- (f, ccr);
-#endif
-#ifdef MULCC
-template c operator* (ccr, ccr);
-#endif
-#ifdef MULCF
-template c operator* (ccr, f);
-#endif
-#ifdef MULFC
-template c operator* (f, ccr);
-#endif
-#ifdef DIVCC
-template c operator/ (ccr, ccr);
-#endif
-#ifdef DIVCF
-template c operator/ (ccr, f);
-#endif
-#ifdef DIVFC
-template c operator/ (f, ccr);
-#endif
-#ifdef PLUS
-template c operator+ (ccr);
-#endif
-#ifdef MINUS
-template c operator- (ccr);
-#endif
-#ifdef EQCC
-template bool operator== (ccr, ccr);
-#endif
-#ifdef EQCF
-template bool operator== (ccr, f);
-#endif
-#ifdef EQFC
-template bool operator== (f, ccr);
-#endif
-#ifdef NECC
-template bool operator!= (ccr, ccr);
-#endif
-#ifdef NECF
-template bool operator!= (ccr, f);
-#endif
-#ifdef NEFC
-template bool operator!= (f, ccr);
-#endif
-#ifdef ABS
-template f abs (ccr);
-#endif
-#ifdef ARG
-template f arg (ccr);
-#endif
-#ifdef POLAR
-template c polar (f, f);
-#endif
-#ifdef CONJ
-template c conj (ccr);
-#endif
-#ifdef NORM
-template f norm (ccr);
-#endif
-#ifdef COS
-template c cos (ccr);
-#endif
-#ifdef COSH
-template c cosh (ccr);
-#endif
-#ifdef EXP
-template c exp (ccr);
-#endif
-#ifdef LOG
-template c log (ccr);
-#endif
-#ifdef POWCC
-template c pow (ccr, ccr);
-#endif
-#ifdef POWCF
-template c pow (ccr, f);
-#endif
-#ifdef POWCI
-template c pow (ccr, int);
-#endif
-#ifdef POWFC
-template c pow (f, ccr);
-#endif
-#ifdef SIN
-template c sin (ccr);
-#endif
-#ifdef SINH
-template c sinh (ccr);
-#endif
-#ifdef SQRT
-template c sqrt (ccr);
-#endif
-#ifdef EXTRACT
-template istream& operator>> (istream&, complex<f>&);
-#endif
-#ifdef INSERT
-template ostream& operator<< (ostream&, const complex<f>&);
-#endif
diff --git a/contrib/libstdc++/ciso646 b/contrib/libstdc++/ciso646
deleted file mode 100644
index 4d8200d73dc6..000000000000
--- a/contrib/libstdc++/ciso646
+++ /dev/null
@@ -1,7 +0,0 @@
-// -*- C++ -*- forwarding header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __CISO646__
-#define __CISO646__
-#include <iso646.h>
-#endif
diff --git a/contrib/libstdc++/climits b/contrib/libstdc++/climits
deleted file mode 100644
index 1b29b3af01ec..000000000000
--- a/contrib/libstdc++/climits
+++ /dev/null
@@ -1,7 +0,0 @@
-// -*- C++ -*- forwarding header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __CLIMITS__
-#define __CLIMITS__
-#include <limits.h>
-#endif
diff --git a/contrib/libstdc++/clocale b/contrib/libstdc++/clocale
deleted file mode 100644
index b67cf31c9d2e..000000000000
--- a/contrib/libstdc++/clocale
+++ /dev/null
@@ -1,7 +0,0 @@
-// The -*- C++ -*- locale support header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __CLOCALE__
-#define __CLOCALE__
-#include <locale.h>
-#endif
diff --git a/contrib/libstdc++/cmath b/contrib/libstdc++/cmath
deleted file mode 100644
index b18ea0b428c6..000000000000
--- a/contrib/libstdc++/cmath
+++ /dev/null
@@ -1,76 +0,0 @@
-// The -*- C++ -*- math functions header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __CMATH__
-#define __CMATH__
-#include <_G_config.h>
-#include <math.h>
-
-#ifdef __GNUG__
-#pragma interface "cmath"
-#endif
-
-extern "C++" {
-#if 0
-float acos (float);
-float asin (float);
-float atan (float);
-float atan2(float, float);
-float ceil (float);
-float cos (float);
-float cosh (float);
-float exp (float);
-float fabs (float);
-float floor(float);
-float fmod (float, float);
-float frexp(float, int*);
-float modf (float, float*);
-float ldexp(float, int);
-float log (float);
-float log10(float);
-float pow (float, float);
-float pow (float, int);
-float sin (float);
-float sinh (float);
-float sqrt (float);
-float tan (float);
-float tanh (float);
-#endif
-
-inline float abs (float x) { return fabs (x); }
-#if ! _G_MATH_H_INLINES /* hpux and SCO define this in math.h */
-inline double abs (double x) { return fabs (x); }
-#endif
-
-#if 0
-double pow(double, int);
-
-long double acos (long double);
-long double asin (long double);
-long double atan (long double);
-long double atan2(long double, long double);
-long double ceil (long double);
-long double cos (long double);
-long double cosh (long double);
-long double exp (long double);
-long double fabs (long double);
-long double floor(long double);
-long double frexp(long double, int*);
-long double fmod (long double, long double);
-long double frexp(long double, int*);
-long double log (long double);
-long double log10(long double);
-long double modf (long double, long double*);
-long double pow (long double, long double);
-long double pow (long double, int);
-long double sin (long double);
-long double sinh (long double);
-long double sqrt (long double);
-long double tan (long double);
-long double tanh (long double);
-#endif
-inline long double abs (long double x) { return fabs (x); }
-
-} // extern "C++"
-
-#endif
diff --git a/contrib/libstdc++/cmathi.cc b/contrib/libstdc++/cmathi.cc
deleted file mode 100644
index afd740f013e9..000000000000
--- a/contrib/libstdc++/cmathi.cc
+++ /dev/null
@@ -1,7 +0,0 @@
-// Implementation file for the -*- C++ -*- math functions header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifdef __GNUG__
-#pragma implementation "cmath"
-#endif
-#include <cmath>
diff --git a/contrib/libstdc++/complex b/contrib/libstdc++/complex
deleted file mode 100644
index bfdd352b4623..000000000000
--- a/contrib/libstdc++/complex
+++ /dev/null
@@ -1,18 +0,0 @@
-// Main header for the -*- C++ -*- complex number classes.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __COMPLEX__
-#define __COMPLEX__
-
-#include <std/complext.h>
-
-extern "C++" {
-#define __STD_COMPLEX
-
-// ANSI complex types
-typedef complex<float> float_complex;
-typedef complex<double> double_complex;
-typedef complex<long double> long_double_complex;
-}
-
-#endif
diff --git a/contrib/libstdc++/complex.h b/contrib/libstdc++/complex.h
deleted file mode 100644
index 2e88de854a68..000000000000
--- a/contrib/libstdc++/complex.h
+++ /dev/null
@@ -1,6 +0,0 @@
-// -*- C++ -*- backward compatiblity header.
-// Copyright (C) 1994 Free Software Foundation
-
-#ifndef __COMPLEX_H__
-#include <complex>
-#endif
diff --git a/contrib/libstdc++/config/aix.ml b/contrib/libstdc++/config/aix.ml
deleted file mode 100644
index dec7a905a343..000000000000
--- a/contrib/libstdc++/config/aix.ml
+++ /dev/null
@@ -1,9 +0,0 @@
-# AIX has wierd shared/non-shared libraries.
-
-ARLIB = libstdc++-ar.a.$(VERSION)
-ARLINK = libstdc++-ar.a
-SHLINK = libstdc++.a
-LIBS = $(ARLIB) $(ARLINK) $(SHLIB) $(SHLINK)
-DEPLIBS = ../$(SHLIB)
-SHDEPS = -lm
-SHFLAGS = -Wl,-unix
diff --git a/contrib/libstdc++/config/cpu/sparc/sparc32/bits/atomicity.h b/contrib/libstdc++/config/cpu/sparc/sparc32/bits/atomicity.h
deleted file mode 100644
index aa639e42efb4..000000000000
--- a/contrib/libstdc++/config/cpu/sparc/sparc32/bits/atomicity.h
+++ /dev/null
@@ -1,88 +0,0 @@
-// Low-level functions for atomic operations: Sparc32 version -*- C++ -*-
-
-// Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction. Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License. This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-#ifndef _BITS_ATOMICITY_H
-#define _BITS_ATOMICITY_H 1
-
-typedef int _Atomic_word;
-
-template <int __inst>
-struct __Atomicity_lock
-{
- static unsigned char _S_atomicity_lock;
-};
-
-template <int __inst>
-unsigned char __Atomicity_lock<__inst>::_S_atomicity_lock = 0;
-
-template unsigned char __Atomicity_lock<0>::_S_atomicity_lock;
-
-static int
-__attribute__ ((__unused__))
-__exchange_and_add (volatile _Atomic_word* __mem, int __val)
-{
- _Atomic_word __result, __tmp;
-
- __asm__ __volatile__("1: ldstub [%1], %0\n\t"
- " cmp %0, 0\n\t"
- " bne 1b\n\t"
- " nop"
- : "=&r" (__tmp)
- : "r" (&__Atomicity_lock<0>::_S_atomicity_lock)
- : "memory");
- __result = *__mem;
- *__mem += __val;
- __asm__ __volatile__("stb %%g0, [%0]"
- : /* no outputs */
- : "r" (&__Atomicity_lock<0>::_S_atomicity_lock)
- : "memory");
- return __result;
-}
-
-static void
-__attribute__ ((__unused__))
-__atomic_add (volatile _Atomic_word* __mem, int __val)
-{
- _Atomic_word __tmp;
-
- __asm__ __volatile__("1: ldstub [%1], %0\n\t"
- " cmp %0, 0\n\t"
- " bne 1b\n\t"
- " nop"
- : "=&r" (__tmp)
- : "r" (&__Atomicity_lock<0>::_S_atomicity_lock)
- : "memory");
- *__mem += __val;
- __asm__ __volatile__("stb %%g0, [%0]"
- : /* no outputs */
- : "r" (&__Atomicity_lock<0>::_S_atomicity_lock)
- : "memory");
-}
-
-#endif /* atomicity.h */
diff --git a/contrib/libstdc++/config/cpu/sparc/sparc64/bits/atomicity.h b/contrib/libstdc++/config/cpu/sparc/sparc64/bits/atomicity.h
deleted file mode 100644
index e13ca82fad2d..000000000000
--- a/contrib/libstdc++/config/cpu/sparc/sparc64/bits/atomicity.h
+++ /dev/null
@@ -1,70 +0,0 @@
-// Low-level functions for atomic operations: Sparc64 version -*- C++ -*-
-
-// Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction. Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License. This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-#ifndef _BITS_ATOMICITY_H
-#define _BITS_ATOMICITY_H 1
-
-typedef long _Atomic_word;
-
-static inline _Atomic_word
-__attribute__ ((__unused__))
-__exchange_and_add (volatile _Atomic_word *__mem, int __val)
-{
- _Atomic_word __tmp1, __tmp2;
-
- __asm__ __volatile__("1: ldx [%2], %0\n\t"
- " add %0, %3, %1\n\t"
- " casx [%2], %0, %1\n\t"
- " sub %0, %1, %0\n\t"
- " brnz,pn %0, 1b\n\t"
- " nop"
- : "=&r" (__tmp1), "=&r" (__tmp2)
- : "r" (__mem), "r" (__val)
- : "memory");
- return __tmp2;
-}
-
-static inline void
-__attribute__ ((__unused__))
-__atomic_add (volatile _Atomic_word* __mem, int __val)
-{
- _Atomic_word __tmp1, __tmp2;
-
- __asm__ __volatile__("1: ldx [%2], %0\n\t"
- " add %0, %3, %1\n\t"
- " casx [%2], %0, %1\n\t"
- " sub %0, %1, %0\n\t"
- " brnz,pn %0, 1b\n\t"
- " nop"
- : "=&r" (__tmp1), "=&r" (__tmp2)
- : "r" (__mem), "r" (__val)
- : "memory");
-}
-
-#endif /* atomicity.h */
diff --git a/contrib/libstdc++/config/dec-osf.ml b/contrib/libstdc++/config/dec-osf.ml
deleted file mode 100644
index a11f373d84c1..000000000000
--- a/contrib/libstdc++/config/dec-osf.ml
+++ /dev/null
@@ -1,6 +0,0 @@
-# We don't need -fpic on the alpha, so let's install both the shared and
-# non-shared versions.
-
-LIBS = $(ARLIB) $(ARLINK) $(SHLIB) $(SHLINK)
-DEPLIBS = ../$(SHLIB)
-SHDEPS = -lm
diff --git a/contrib/libstdc++/config/delta.mt b/contrib/libstdc++/config/delta.mt
deleted file mode 100644
index b0b36db1062c..000000000000
--- a/contrib/libstdc++/config/delta.mt
+++ /dev/null
@@ -1,2 +0,0 @@
-# If FPU instructions are generated by default, we have to use a special libm.a
-MLDLIBS = $(LDLIBS) `case "$(CXXFLAGS)" in *-m68000* | *-mc68000* | *-msoft-float* ) echo -lm ;; * ) echo -lm881 ;; esac`
diff --git a/contrib/libstdc++/config/elf.ml b/contrib/libstdc++/config/elf.ml
deleted file mode 100644
index bd711debf836..000000000000
--- a/contrib/libstdc++/config/elf.ml
+++ /dev/null
@@ -1,8 +0,0 @@
-# Elf without shared libm -- we have to link with the archive library, even
-# for programs that don't use complex.
-
-LIBS = $(ARLIB) $(ARLINK) $(SHLIB) $(SHLINK)
-SHFLAGS = -h $(SHLIB)
-DEPLIBS = ../$(SHLIB)
-LDLIBS = -L.. -lstdc++ -lm
-MLDLIBS = -L.. -lstdc++ -lm
diff --git a/contrib/libstdc++/config/elfshlibm.ml b/contrib/libstdc++/config/elfshlibm.ml
deleted file mode 100644
index 826f0bc0917e..000000000000
--- a/contrib/libstdc++/config/elfshlibm.ml
+++ /dev/null
@@ -1,6 +0,0 @@
-# Elf with shared libm, so we can link it into the shared libstdc++.
-
-LIBS = $(ARLIB) $(ARLINK) $(SHLIB) $(SHLINK)
-SHFLAGS = -h $(SHLIB)
-SHDEPS = -lm
-DEPLIBS = ../$(SHLIB)
diff --git a/contrib/libstdc++/config/freebsd.ml b/contrib/libstdc++/config/freebsd.ml
deleted file mode 100644
index 3ee682690ad5..000000000000
--- a/contrib/libstdc++/config/freebsd.ml
+++ /dev/null
@@ -1,6 +0,0 @@
-# Elf with shared libm, so we can link it into the shared libstdc++.
-
-LIBS = $(ARLIB) $(ARLINK) $(SHLIB) $(SHLINK) mshlink
-SHFLAGS = -Wl,-soname,$(MSHLINK)
-SHDEPS = -lm
-DEPLIBS = ../$(SHLIB)
diff --git a/contrib/libstdc++/config/gnu.ml b/contrib/libstdc++/config/gnu.ml
deleted file mode 100644
index 2a0380327f7c..000000000000
--- a/contrib/libstdc++/config/gnu.ml
+++ /dev/null
@@ -1,6 +0,0 @@
-# Elf with shared libm, so we can link it into the shared libstdc++.
-
-LIBS = $(ARLIB) $(ARLINK) $(SHLIB) $(SHLINK)
-SHFLAGS = -Wl,-soname,$(SHLIB)
-SHDEPS = -lm
-DEPLIBS = ../$(SHLIB)
diff --git a/contrib/libstdc++/config/hpux.ml b/contrib/libstdc++/config/hpux.ml
deleted file mode 100644
index a39602a64032..000000000000
--- a/contrib/libstdc++/config/hpux.ml
+++ /dev/null
@@ -1,6 +0,0 @@
-# HPUX uses the .sl suffix for shared libraries.
-
-SHLIB = libstdc++.sl
-LIBS = $(ARLIB) $(ARLINK) $(SHLIB)
-DEPLIBS = ../$(SHLIB)
-SHFLAGS = $(PICFLAG)
diff --git a/contrib/libstdc++/config/irix5.ml b/contrib/libstdc++/config/irix5.ml
deleted file mode 100644
index 055c832c26e6..000000000000
--- a/contrib/libstdc++/config/irix5.ml
+++ /dev/null
@@ -1,6 +0,0 @@
-# We don't need -fpic on IRIX, so let's install both the shared and
-# non-shared versions.
-
-LIBS = $(ARLIB) $(ARLINK) $(SHLIB) $(SHLINK)
-DEPLIBS = ../$(SHLIB)
-SHDEPS = -lm
diff --git a/contrib/libstdc++/config/linux.ml b/contrib/libstdc++/config/linux.ml
deleted file mode 100644
index 14dcb45b79df..000000000000
--- a/contrib/libstdc++/config/linux.ml
+++ /dev/null
@@ -1,11 +0,0 @@
-# Elf with shared libm, so we can link it into the shared libstdc++.
-
-ARLIB = libstdc++-$(LIBSTDCXX_INTERFACE)$(LIBC_INTERFACE)$(CXX_INTERFACE)-$(VERSION).a
-MARLINK = libstdc++$(LIBC_INTERFACE)$(CXX_INTERFACE).a.$(LIBSTDCXX_INTERFACE)
-SHLIB = libstdc++-$(LIBSTDCXX_INTERFACE)$(LIBC_INTERFACE)$(CXX_INTERFACE)-$(VERSION).so
-MSHLINK = libstdc++$(LIBC_INTERFACE)$(CXX_INTERFACE).so.$(LIBSTDCXX_INTERFACE)
-
-LIBS = $(ARLIB) marlink $(ARLINK) $(SHLIB) mshlink $(SHLINK)
-SHFLAGS = -Wl,-soname,$(MSHLINK)
-SHDEPS = -lm
-DEPLIBS = ../$(SHLIB)
diff --git a/contrib/libstdc++/config/linux.mt b/contrib/libstdc++/config/linux.mt
deleted file mode 100644
index 5848851be8ac..000000000000
--- a/contrib/libstdc++/config/linux.mt
+++ /dev/null
@@ -1,2 +0,0 @@
-# tell we want the mt-safe version
-MT_CFLAGS = -D_IO_MTSAFE_IO
diff --git a/contrib/libstdc++/config/openbsd.ml b/contrib/libstdc++/config/openbsd.ml
deleted file mode 100644
index 09c40235adf6..000000000000
--- a/contrib/libstdc++/config/openbsd.ml
+++ /dev/null
@@ -1,7 +0,0 @@
-# Base shared lib for OpenBSD i386
-
-LIBS = $(ARLIB) $(ARLINK) $(SHLIB) $(SHLINK) mshlink
-SHFLAGS = -nostdlib -Wl,-Bshareable,-Bforcearchive
-SHDEPS = -lm
-DEPLIBS = ../$(SHLIB)
-
diff --git a/contrib/libstdc++/config/openbsd.mt b/contrib/libstdc++/config/openbsd.mt
deleted file mode 100644
index 29da11cf454e..000000000000
--- a/contrib/libstdc++/config/openbsd.mt
+++ /dev/null
@@ -1,3 +0,0 @@
-# tell we want the mt-safe version
-MT_CFLAGS = -D_IO_MTSAFE_IO -D_PTHREADS
-
diff --git a/contrib/libstdc++/config/posix.mt b/contrib/libstdc++/config/posix.mt
deleted file mode 100644
index 6afe1e514d93..000000000000
--- a/contrib/libstdc++/config/posix.mt
+++ /dev/null
@@ -1 +0,0 @@
-MT_CFLAGS = -D_PTHREADS
diff --git a/contrib/libstdc++/config/sol2pth.mt b/contrib/libstdc++/config/sol2pth.mt
deleted file mode 100644
index 6afe1e514d93..000000000000
--- a/contrib/libstdc++/config/sol2pth.mt
+++ /dev/null
@@ -1 +0,0 @@
-MT_CFLAGS = -D_PTHREADS
diff --git a/contrib/libstdc++/config/sol2shm.ml b/contrib/libstdc++/config/sol2shm.ml
deleted file mode 100644
index e87f079e46cb..000000000000
--- a/contrib/libstdc++/config/sol2shm.ml
+++ /dev/null
@@ -1,6 +0,0 @@
-# Solaris2 with shared libm, so we can link it into the shared libstdc++.
-
-LIBS = $(ARLIB) $(ARLINK) $(SHLIB) $(SHLINK)
-SHFLAGS = -h $(SHLIB)
-SHDEPS = -lm
-DEPLIBS = ../$(SHLIB)
diff --git a/contrib/libstdc++/config/sol2solth.mt b/contrib/libstdc++/config/sol2solth.mt
deleted file mode 100644
index f809d0ace861..000000000000
--- a/contrib/libstdc++/config/sol2solth.mt
+++ /dev/null
@@ -1 +0,0 @@
-MT_CFLAGS = -D_SOLTHREADS
diff --git a/contrib/libstdc++/config/sunos4.ml b/contrib/libstdc++/config/sunos4.ml
deleted file mode 100644
index 3c5de27ab508..000000000000
--- a/contrib/libstdc++/config/sunos4.ml
+++ /dev/null
@@ -1,9 +0,0 @@
-# SunOS doesn't provide a shared libm, so we have to link with the archive
-# library, even for programs that don't use complex.
-# SunOS requires a version number in shared library filenames.
-
-LIBS = $(ARLIB) $(ARLINK) $(SHLIB)
-SHFLAGS = $(PICFLAG)
-DEPLIBS = ../$(SHLIB)
-LDLIBS = -L.. -lstdc++ -lm
-MLDLIBS = -L.. -lstdc++ -lm
diff --git a/contrib/libstdc++/config/x86-interix.ml b/contrib/libstdc++/config/x86-interix.ml
deleted file mode 100644
index 8b8774e3a7a3..000000000000
--- a/contrib/libstdc++/config/x86-interix.ml
+++ /dev/null
@@ -1,9 +0,0 @@
-# x86 Interix. SHLINK is defined to be .dummy to avoid running into
-# the lack of symbolic links.
-
-SHLINK = .dummy
-SHLIB = libstdc++.so
-LIBS = $(ARLIB) $(SHLIB)
-DEPLIBS = ../$(SHLIB)
-SHFLAGS = $(PICFLAG)
-
diff --git a/contrib/libstdc++/csetjmp b/contrib/libstdc++/csetjmp
deleted file mode 100644
index 4bba048dcb5e..000000000000
--- a/contrib/libstdc++/csetjmp
+++ /dev/null
@@ -1,8 +0,0 @@
-// The -*- C++ -*- setjmp/longjmp header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __CSETJMP__
-#define __CSETJMP__
-#include <setjmp.h>
-#endif
-
diff --git a/contrib/libstdc++/csignal b/contrib/libstdc++/csignal
deleted file mode 100644
index 6febfb7b2ed5..000000000000
--- a/contrib/libstdc++/csignal
+++ /dev/null
@@ -1,7 +0,0 @@
-// The -*- C++ -*- signal handling header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __CSIGNAL__
-#define __CSIGNAL__
-#include <signal.h>
-#endif
diff --git a/contrib/libstdc++/cstdarg b/contrib/libstdc++/cstdarg
deleted file mode 100644
index 324f5a1c19b1..000000000000
--- a/contrib/libstdc++/cstdarg
+++ /dev/null
@@ -1,7 +0,0 @@
-// -*- C++ -*- forwarding header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __CSTDARG__
-#define __CSTDARG__
-#include <stdarg.h>
-#endif
diff --git a/contrib/libstdc++/cstddef b/contrib/libstdc++/cstddef
deleted file mode 100644
index db5cbe400374..000000000000
--- a/contrib/libstdc++/cstddef
+++ /dev/null
@@ -1,7 +0,0 @@
-// -*- C++ -*- forwarding header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __CSTDDEF__
-#define __CSTDDEF__
-#include <stddef.h>
-#endif
diff --git a/contrib/libstdc++/cstdio b/contrib/libstdc++/cstdio
deleted file mode 100644
index 1fe1456b5bdf..000000000000
--- a/contrib/libstdc++/cstdio
+++ /dev/null
@@ -1,7 +0,0 @@
-// The -*- C++ -*- standard I/O header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __CSTDIO__
-#define __CSTDIO__
-#include <stdio.h>
-#endif
diff --git a/contrib/libstdc++/cstdlib b/contrib/libstdc++/cstdlib
deleted file mode 100644
index e7c1a5160a56..000000000000
--- a/contrib/libstdc++/cstdlib
+++ /dev/null
@@ -1,23 +0,0 @@
-// The -*- C++ -*- standard library header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __CSTDLIB__
-#define __CSTDLIB__
-#include <stdlib.h>
-
-#ifdef __GNUG__
-#pragma interface "cstdlib"
-#endif
-
-extern "C++" {
-
-#if _G_HAS_LABS
-inline long abs(long x) { return labs (x); }
-#else
-inline long abs(long x) { return x >= 0 ? x : -x; }
-#endif
-//inline ldiv_t div(long x, long y) { return ldiv (x, y); }
-
-} // extern "C++"
-
-#endif
diff --git a/contrib/libstdc++/cstdlibi.cc b/contrib/libstdc++/cstdlibi.cc
deleted file mode 100644
index abbfa03464a5..000000000000
--- a/contrib/libstdc++/cstdlibi.cc
+++ /dev/null
@@ -1,7 +0,0 @@
-// Implementation file for the -*- C++ -*- standard library header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifdef __GNUG__
-#pragma implementation "cstdlib"
-#endif
-#include <cstdlib>
diff --git a/contrib/libstdc++/cstring b/contrib/libstdc++/cstring
deleted file mode 100644
index d8d03a765b65..000000000000
--- a/contrib/libstdc++/cstring
+++ /dev/null
@@ -1,96 +0,0 @@
-// The -*- C++ -*- null-terminated string header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __CSTRING__
-#define __CSTRING__
-
-#include <string.h>
-
-#if 0 // Let's not bother with this just yet.
-#include <cstddef>
-
-#ifdef __GNUG__
-#pragma interface "cstring"
-#endif
-
-// The ANSI C prototypes for these functions have a const argument type and
-// non-const return type, so we can't use them.
-
-extern "C++" {
-extern inline const char *
-_G_strchr (const char *s, int c)
-{
- return strchr (s, c);
-}
-
-extern inline char *
-_G_strchr (char *s, int c)
-{
- return const_cast<char *> (strchr (s, c));
-}
-
-extern inline const char *
-_G_strpbrk (const char *s1, const char *s2)
-{
- return strpbrk (s1, s2);
-}
-
-extern inline char *
-_G_strpbrk (char *s1, const char *s2)
-{
- return const_cast<char *> (strpbrk (s1, s2));
-}
-
-extern inline const char *
-_G_strrchr (const char *s, int c)
-{
- return strrchr (s, c);
-}
-
-extern inline char *
-_G_strrchr (char *s, int c)
-{
- return const_cast<char *> (strrchr (s, c));
-}
-
-extern inline const char *
-_G_strstr (const char *s1, const char *s2)
-{
- return strstr (s1, s2);
-}
-
-extern inline char *
-_G_strstr (char *s1, const char *s2)
-{
- return const_cast<char *> (strstr (s1, s2));
-}
-
-extern inline const void *
-_G_memchr (const void *s, int c, size_t n)
-{
- return memchr (s, c, n);
-}
-
-extern inline void *
-_G_memchr (void *s, int c, size_t n)
-{
- return const_cast<void *> (memchr (s, c, n));
-}
-} // extern "C++"
-
-// Lose any vendor macros for these functions.
-#undef strchr
-#undef strpbrk
-#undef strrchr
-#undef strstr
-#undef memchr
-
-// Ewww, namespace pollution. Anyone have a better idea?
-#define strchr _G_strchr
-#define strpbrk _G_strpbrk
-#define strrchr _G_strrchr
-#define strstr _G_strstr
-#define memchr _G_memchr
-#endif // 0
-
-#endif // !defined (__CSTRING__)
diff --git a/contrib/libstdc++/cstringi.cc b/contrib/libstdc++/cstringi.cc
deleted file mode 100644
index 2676febc9b0f..000000000000
--- a/contrib/libstdc++/cstringi.cc
+++ /dev/null
@@ -1,7 +0,0 @@
-// Implementation file for the -*- C++ -*- null-terminated string header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifdef __GNUG__
-#pragma implementation "cstring"
-#endif
-#include <cstring>
diff --git a/contrib/libstdc++/ctime b/contrib/libstdc++/ctime
deleted file mode 100644
index 0184da5929f3..000000000000
--- a/contrib/libstdc++/ctime
+++ /dev/null
@@ -1,7 +0,0 @@
-// The -*- C++ -*- time header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __CTIME__
-#define __CTIME__
-#include <time.h>
-#endif
diff --git a/contrib/libstdc++/cwchar b/contrib/libstdc++/cwchar
deleted file mode 100644
index 1674c12b61f0..000000000000
--- a/contrib/libstdc++/cwchar
+++ /dev/null
@@ -1,7 +0,0 @@
-// The -*- C++ -*- wide character header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __CWCHAR__
-#define __CWCHAR__
-#include <wchar.h>
-#endif
diff --git a/contrib/libstdc++/cwctype b/contrib/libstdc++/cwctype
deleted file mode 100644
index 81122012bd04..000000000000
--- a/contrib/libstdc++/cwctype
+++ /dev/null
@@ -1,7 +0,0 @@
-// The -*- C++ -*- wide character type header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __CWCTYPE__
-#define __CWCTYPE__
-#include <wctype.h>
-#endif
diff --git a/contrib/libstdc++/fstream b/contrib/libstdc++/fstream
deleted file mode 100644
index 2c35ca92b039..000000000000
--- a/contrib/libstdc++/fstream
+++ /dev/null
@@ -1,7 +0,0 @@
-// -*- C++ -*- forwarding header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __FSTREAM__
-#define __FSTREAM__
-#include <fstream.h>
-#endif
diff --git a/contrib/libstdc++/iomanip b/contrib/libstdc++/iomanip
deleted file mode 100644
index 817948579ce7..000000000000
--- a/contrib/libstdc++/iomanip
+++ /dev/null
@@ -1,7 +0,0 @@
-// -*- C++ -*- forwarding header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __IOMANIP__
-#define __IOMANIP__
-#include <iomanip.h>
-#endif
diff --git a/contrib/libstdc++/iosfwd b/contrib/libstdc++/iosfwd
deleted file mode 100644
index 8314cf7b73f6..000000000000
--- a/contrib/libstdc++/iosfwd
+++ /dev/null
@@ -1,15 +0,0 @@
-// -*- C++ -*- I/O forward declaration header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __IOSFWD__
-#define __IOSFWD__
-class ios;
-class streambuf;
-class istream;
-class ostream;
-class iostream;
-class filebuf;
-class ifstream;
-class ofstream;
-class fstream;
-#endif
diff --git a/contrib/libstdc++/iostream b/contrib/libstdc++/iostream
deleted file mode 100644
index 7ecba6e8dafc..000000000000
--- a/contrib/libstdc++/iostream
+++ /dev/null
@@ -1,7 +0,0 @@
-// -*- C++ -*- forwarding header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __IOSTREAM__
-#define __IOSTREAM__
-#include <iostream.h>
-#endif
diff --git a/contrib/libstdc++/libio/ChangeLog b/contrib/libstdc++/libio/ChangeLog
deleted file mode 100644
index 86c09034435d..000000000000
--- a/contrib/libstdc++/libio/ChangeLog
+++ /dev/null
@@ -1,2774 +0,0 @@
-2001-02-03 Alexandre Oliva <aoliva@redhat.com>
- Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
-
- * Makefile.am (mkinstalldirs): Set.
-
-2001-01-28 Benjamin Kosnik <bkoz@gnu.org>
-
- * Makefile.am (LIBIO_SRCS): Remove stdio.c.
-
-2000-10-29 Benjamin Kosnik <bkoz@gnu.org>
-
- * Makefile.am (INCLUDES): Change to $(top_builddir)/include.
-
-2000-10-29 Mark Mitchell <mark@codesourcery.com>
-
- * iofopen.c (_IO_new_fopen): Don't define `_IO_wide_data wd'
- if _GLIBCPP_USE_WCHAR_T is not defined.
- * iofwide.c: Don't define codecvt functions when
- _GLIBCPP_USE_WCHAR_T is not defined.
- (_IO_fwide): Don't try to put the stream in wide mode when
- _GLIBCPP_USE_WCHAR_T is not defined.
- * libio.h (_IO_wide_data): Define it as an incomplete struct
- when _GLIBCPP_USE_WCHAR_T is not defined.
- * wfiledoalloc.c: Don't define anything when
- _GLIBCPP_USE_WCHAR_T is not defined.
- * wfileops.c: Likewise.
- * wgenops.c: Likewise.
-
- * _G_config.h (_G_USING_THUNKS): Allow overrides from
- OS-configuration files.
- * libioP.h: Test _G_USING_THUNKS with #if, rather than #ifdef.
-
-2000-10-17 Benjamin Kosnik <bkoz@gnu.org>
-
- * libioP.h: Break up extern "C" bits around includes.
- * libio.h: Only include C headers, or else _C_legacy namespaces
- will be nested.
- * libioP.h: Same here.
-
-2000-10-11 Benjamin Kosnik <bkoz@gnu.org>
-
- * Makefile.am: Add includes from GLIBCPP_EXPORT_INCLUDES.
-
-2000-10-10 Benjamin Kosnik <bkoz@gnu.org>
-
- * _G_config.h (__need_ptrdiff_t): Add.
-
-2000-10-08 Benjamin Kosnik <bkoz@gnu.org>
-
- * Makefile.am (INCLUDES): Simplify.
- * libioP.h (JUMP1): If compiling c++, use std headers.
- * _G_config.h: Same.
-
-2000-10-07 Benjamin Kosnik <bkoz@gnu.org>
-
- * Makefile.am (CONFIG_INCLUDES): Remove.
-
-2000-10-06 Benjamin Kosnik <bkoz@gnu.org>
-
- * Makefile.am (libio_la_DEPENDENCIES): Remove extaneous cruft.
- (libio_la_SOURCES): Remove.
-
-2000-10-05 Benjamin Kosnik <bkoz@gnu.org>
-
- * Makefile.am (INCLUDES): Add glibcpp_includedir.
-
-2000-10-04 Benjamin Kosnik <bkoz@gnu.org>
-
- * _G_config.h : Re-guard the __mbstate_t declaration.
-
-2000-09-27 Benjamin Kosnik <bkoz@gnu.org>
-
- * libioP.h: Remove fcntl.h include.
-
-2000-08-22 Benjamin Kosnik <bkoz@gnu.org>
-
- * iofwide.c (_IO_fwide): Simplify, as nl_langinfo is assumed.
-
-2000-08-14 Benjamin Kosnik <bkoz@gnu.org>
-
- * *: Merge with mainline glibc sources.
- * filedoalloc.c (_IO_file_doallocate): Don't call
- _IO_cleanup_registration_needed, even if not libc.
- * iofwide.c (_IO_fwide): Correct placement of defines.
- * cleanup.c: Remove.
-
-2000-08-04 benjamin kosnik <bkoz@haight.constant.com>
-
- * genops.c (_IO_unbuffer_write): Don't call _IO_SETBUF if the
- stream is not orientated.
-
-2000-08-04 Benjamin Kosnik <bkoz@gnu.org>
-
- * Makefile.am (LIBIO_SRCS): Add c_codecvt.c
-
-2000-07-12 benjamin kosnik <bkoz@gnu.org>
-
- * _G_config.h: Smoke less crack, don't define _G_HAVE_ST_BLKSIZE.
-
-2000-04-25 Benjamin Kosnik <bkoz@gnu.org>
-
- * libio.h: Change decls for seekoff/seekpos.
- * Makefile.am: Add bits to not generate _G_config.h on linux.
- * gen-params: Remove sigset_t declaration.
-
-2000-02-29 Benjamin Kosnik <bkoz@gnu.org>
-
- * Makefile.am (libio_headers): Strip out deadweight.
-
-2000-02-21 Benjamin Kosnik <bkoz@cygnus.com>
-
- * gen-params (CONFIG_NM): Specifically add in nm as the
- default CONFIG_NM.
-
-2000-02-10 Benjamin Kosnik <bkoz@gnu.org>
-
- * Makefile.am: Add bits for _G_config.h generation.
- * gen-params: New file.
-
-2000-02-07 Benjamin Kosnik <bkoz@gnu.org>
-
- * Makefile.am: Change license.
-
-1999-07-28 Benjamin Kosnik <bkoz@gnu.org>
-
- * Makefile.am (libio_la_SOURCES): Remove cleanup.c, so that
- _IO_cleanup will not be undefined.
-
-1998-11-26 Manfred Hollstein <manfred@s-direktnet.de>
-
- * configure.in (compiler_name): Add check to detect if this
- language's compiler has been built.
-
-1998-10-12 Alexandre Oliva <oliva@dcc.unicamp.br>
-
- * config.shared (depend.new): delete libc-lock.h from
- dependencies, and fix _G_config.h -> $(_G_CONFIG_H) rule
- * depend: Rebuilt.
-
-Sun Oct 11 01:51:42 1998 Jeffrey A Law (law@cygnus.com)
-
- * config.shared (depend.new): Fix typo.
- * depend: Rebuilt.
-
-1998-09-09 Manfred Hollstein <manfred@s-direktnet.de>
-
- * configure.in (INSTALLDIR): Fix comment about changing INSTALLDIR's
- value; don't change its value if --enable-version-specific-runtime-libs
- has been specified.
-
-Wed Sep 2 21:05:39 1998 H.J. Lu (hjl@gnu.org)
-
- * configure.in: Fix INSTALLDIR replacement for cross-compile.
-
-Sun Aug 30 22:27:02 1998 Lutz Wohlrab <lutz.wohlrab@informatik.tu-chemnitz.de>
-
- * dbz/Makefile.in: Avoid assumptions about "tr" behaves when
- LANG is set to something other than English.
-
-Sun Aug 30 22:17:00 1998 H.J. Lu (hjl@gnu.org)
-
- * config.shared: Set libsubdir.
-
-1998-08-25 14:34 Ulrich Drepper <drepper@cygnus.com>
-
- * libio/iogetline.c (_IO_getline_info): Don't read anything for
- N == 0. Patch by HJ Lu.
-
-1998-08-23 Mark Mitchell <mark@markmitchell.com>
-
- * iomanip.h: Use __extension__ for `extern' explicit template
- instantiations.
-
-1998-08-17 Ulrich Drepper <drepper@cygnus.com>
-
- * strfile.h: Define __PMT if not already defined.
-
-1998-08-03 Andreas Jaeger <aj@arthur.rhein-neckar.de>
-
- * libioP.h: Use __PMT in typedefs.
- * strfile.h: Likewise.
-
-1998-06-29 Ulrich Drepper <drepper@cygnus.com>
-
- * libio.h: Rewrite __PMT change so that it works with platforms
- defining __P but not __PMT.
-
- * libio.h (__PMT): New macro. Defined like __P. Use is for
- function pointers.
-
-1998-06-27 Manfred Hollstein <manfred@s-direktnet.de>
-
- * Makefile.in (install): Remove superfluous /include.
-
-1998-06-26 Manfred Hollstein <manfred@s-direktnet.de>
-
- * config.shared (FLAGS_TO_PASS): Add gcc_version_trigger.
- (Makefile): Add dependency upon $(gcc_version_trigger).
-
-1998-06-24 Manfred Hollstein <manfred@s-direktnet.de>
-
- * Makefile.in (install): Install _G_config.h depending on new flag
- --enable-version-specific-runtime-libs.
- * config/linux.mt (gxx_include_dir): Remove definition here as we use
- gcc's default anyway.
-
-1998-06-24 Manfred Hollstein <manfred@s-direktnet.de>
-
- * config.shared (FLAGS_TO_PASS): Add gcc_version.
-
-1998-06-19 Manfred Hollstein <manfred@s-direktnet.de>
-
- * config.shared (FLAGS_TO_PASS): Add libsubdir.
-
-1998-06-07 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
-
- * genops.c (__underflow): Read character from read pointer as unsigned.
- (__uflow): Likewise.
-
-1998-05-22 Ulrich Drepper <drepper@cygnus.com>
-
- * strops.c (_IO_str_underflow): Read newly available character
- from buffer as unsigned.
-
-Sun Apr 19 22:13:36 1998 H.J. Lu (hjl@gnu.org)
-
- * isgetline.cc (istream::get): Fix a typo.
-
-Thu Mar 5 09:23:28 1998 Manfred Hollstein <manfred@s-direktnet.de>
-
- * configure.in: Make locating frag files failsafe even for the
- special case if configuring and building in srcdir.
-
-1998-02-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
-
- Changes for _G_IO_IO_FILE_VERSION == 0x20001:
- * libioP.h (_IO_showmanyc_t, _IO_SHOWMANYC, _IO_imbue_t,
- _IO_IMBUE): New definitions.
- (struct _IO_jump_t): Add __showmanyc and __imbue fields.
- (_IO_file_fopen): Add new fourth argument.
- * filebuf.cc (filebuf::open): Pass new fourth argument to
- _IO_file_fopen.
- * iolibio.h (_IO_freopen): Likewise.
- * streambuf.cc (streambuf::showmanyc, streambuf::imbue): New
- functions.
- * streambuf.h (_IO_wchar_t): Define to _G_wchar_t.
- (ios::fill): Remove casts.
- (struct streambuf): Add showmanyc and imbue members.
-
- * iostream.cc (ostream::operator<<(double n)) [__GLIBC_MINOR__ >=
- 1]: Initialize new fields is_char of struct printf_info.
- (ostream::operator<<(long double n)) [__GLIBC_MINOR__ >= 1]:
- Likewise.
-
-Sun Feb 22 17:24:53 1998 Jeffrey A Law (law@cygnus.com)
-
- * config.shared: Bring back changes from Ian and Fred that were
- accidentally clobbered. Should eliminate the need for Dave's
- recent change.
-
-Tue Feb 17 21:56:25 1998 H.J. Lu (hjl@gnu.org)
-
- * config/linux.mt (IO_OBJECTS): Add iogetline.o.
- * config/linuxlibc1.mt: Ditto.
-
- * iogetline.c (_IO_getline_info): Renamed from _IO_getline.
- (_IO_getline): Just call _IO_getline_info.
-
- * isgetline.cc (istream::getline, istream::get, _sb_readline):
- Call _IO_getline_info instead of _IO_getline and get the EOF
- information.
- * sbgetline.cc (streambuf::sgetline): Ditto.
-
- * libioP.h (_IO_getline_info): New declaration.
-
- * iogetline.c (_IO_getline): Handle the case when there is no
- buffer.
-
-Fri Feb 13 00:57:20 1998 Krister Walfridsson (cato@df.lth.se)
-
- * fileops.c: #include <unistd.h>.
- * ioprims.c: Likewise.
-
-1998-02-10 Mark Mitchell <mmitchell@usa.net>
-
- * iostream.cc (ostream::operator<<(long double)): Don't use
- labeled initializers.
-
-Fri Feb 6 01:35:56 1998 Manfred Hollstein <manfred@s-direktnet.de>
-
- * config.shared (FLAGS_TO_PASS): Don't emit PICFLAG.
- (.c.o): Check value of enable_shared, not PICFLAG.
- (.C.o): Dito.
- (.cc.o): Dito.
- (stamp-picdir): Dito.
-
-Thu Feb 5 17:41:26 1998 Dave Brolley <brolley@cygnus.com>
-
- * config.shared (LIBS): Change to -L../../libstdc++ (was -L../libstdc++)
- if ${DOING_GPERF} is true.
-
-1998-01-20 Andreas Schwab (schwab@issan.informatik.uni-dortmund.de)
-
- * iostream.cc (istream::operator>>(long double&))
- [!_G_HAVE_LONG_DOUBLE_IO]: Scan value into separate variable, in
- case long double is bigger than double.
- (ostream::operator<<(double)) [_G_HAVE_PRINTF_FP]: Fix order of
- initializers of struct printf_info to match declaration order,
- to work around g++ bug.
- (ostream::operator<<(long double)) [_G_HAVE_PRINTF_FP]: Likewise.
-
- * gen-params: Add missing quotes. Avoid useless use of command
- substitution.
-
-Sun Feb 1 13:29:47 1998 H.J. Lu (hjl@gnu.org)
-
- * filebuf.cc (filebuf::open): Call _IO_file_open if
- _G_HAVE_IO_FILE_OPEN is 1.
-
- * libio.h (_IO_fpos64_t, _IO_off64_t): Defined if
- _G_IO_IO_FILE_VERSION == 0x20001.
-
- * libioP.h (_IO_file_open): New declaration.
-
- * libio.h (_IO_FILE, _IO_stdin_, _IO_stdout_, _IO_stderr_,
- _IO_seekoff, _IO_seekpos): Add support for libio in glibc 2.1.
- * libioP.h (_IO_seekoff_t, _IO_seekpos_t, _IO_seek_t,
- _IO_seekoff, _IO_seekpos, _IO_default_seekoff,
- _IO_default_seekpos, _IO_default_seek, _IO_file_seekoff,
- _IO_file_seek, _IO_str_seekoff, _IO_pos_BAD, _IO_pos_as_off,
- _IO_pos_0): Ditto.
- * streambuf.h (streamoff, streampos): Ditto.
-
- * gen-params (__extension__): Use only if gcc version >= 2.8.
-
-Sun Feb 1 13:08:18 1998 Krister Walfridsson (cato@df.lth.se)
-
- * dbz/dbz.c (putconf): Handle systems which use "long long" as type
- for "off_t".
- * dbz/dbzmain.c (mkfiles): Likewise.
-
-Wed Jan 28 10:27:11 1998 Manfred Hollstein <manfred@s-direktnet.de>
-
- * config.shared (FLAGS_TO_PASS): Add gxx_include_dir.
-
- * stdio/configure.in, tests/configure.in: Update with yesterday's
- toplevel configure.in changes.
- * testsuite/configure.in: Likewise.
-
- * config.shared: Fix typo in yesterday's changes.
-
-Tue Jan 27 23:26:07 1998 Manfred Hollstein <manfred@s-direktnet.de>
-
- * config.shared: Emit everything which needs to be re-definable
- via file descriptor 1; the generic stuff is emitted using redirection
- onto fd 2.
-
- * configure.in (package_makefile_rules_frag): New variable
- which is used in the call to config.shared; redirect file descriptor 2
- to ${package_makefile_rules_frag}.
-
-Tue Jan 27 10:35:22 1998 H.J. Lu (hjl@gnu.org)
-
- * configure.in (topsrcdir): New.
- (CHECK_SUBDIRS, configdirs): Check ${topsrcdir}/gcc instead.
- (config-ml.in): Use ${topsrcdir}/config-ml.in.
-
- * tests/configure.in (topsrcdir): New.
- (CHECK): Check ${topsrcdir}/gcc instead.
-
-Fri Jan 16 00:48:03 1998 Manfred Hollstein <manfred@lts.sel.alcatel.de>
-
- * config.shared (FLAGS_TO_PASS): Add SHELL.
-
-Thu Jan 15 00:21:58 1998 Ian Lance Taylor <ian@cygnus.com>
-
- * configure.in: For *-*-cygwin32*, add a -I for winsup to both
- XCINCLUDES and XCXXINCLUDES.
- * config.shared: Use ${host_includes} when setting CXXINCLUDES in
- the DOING_LIBGXX case.
- * Makefile.in (_G_config.h): Pass $(CINCLUDES) in CC and
- $(CXXINCLUDES) in CXX when running gen-params.
-
-Tue Jan 13 21:32:08 1998 H.J. Lu (hjl@gnu.org)
-
- * configure.in (CHECK_SUBDIRS): Set to testsuite only if
- ${srcdir}/../gcc exists.
- (configdirs): Include testsuite only if ${srcdir}/../gcc exists.
-
- * tests/Makefile.in (check): Depend on $(CHECK).
-
- * tests/configure.in (CHECK): Set to "check-iostream
- check-stdio" if ${srcdir}/../../gcc doesn't exists.
-
-Thu Jan 8 18:09:03 1998 Fred Fish <fnf@cygnus.com>
-
- * config.shared (THIS_FILE): Really found via TOLIBIO instead
- of TOLIBCXX, which is empty when configuring gperf.
- (LIBS): When linking gperf, find libstdc++ relative to TO_TOPDIR
- instead of hardcoded "../".
-
-1997-12-12 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- Don't make gperf depend upon libg++.
- * config.shared (TOLIBGCXX) [DOING_GPERF]: Delete.
- (LIBS) [DOING_GPERF]: Make it just `-L../libstdc++ -lstdc++'.
-
-Thu Dec 11 11:20:59 1997 H.J. Lu (hjl@gnu.org)
-
- * configure.in (target frags): Add *-linux-gnu.
-
-Fri Dec 5 16:22:15 1997 H.J. Lu (hjl@gnu.org)
-
- * streambuf.cc (streambuf::~streambuf): Don't delete _lock
- for _IO_stdin/_IO_stdout/_IO_stderr.
-
-Thu Nov 27 01:32:43 1997 Jeffrey A Law (law@cygnus.com)
-
- * Makefile.in (install): Change gxx_includedir to gcc_include_dir.
- * config.shared (gxx_includedir): Remove default definition.
- * config/linux.mt: Change gxx_includedir to gxx_include_dir.
- * config/linuxaxp1.mt: Likewise.
-
-Wed Nov 26 16:08:50 1997 Richard Henderson (rth@cygnus.com)
-
- * configure.in (target frags): Add powerpc*-linux-gnulibc1.
- (stdio-lock): Similarly.
-
- * configure.in (target frags): Add alpha*-linux-gnulibc1.
- (pic frags): Its alpha*- not alpha-.
- (stdio-lock): Kill everything. Add alpha*-linux-gnulibc1.
- * libio.h: Check __GLIBC_MINOR__ to find stdio-lock.h. If not
- _IO_MTSAFE_IO & GLIBC, make sure the lock pointer is still there.
- * libioP.h: Check __GLIBC_MINOR__ to find libc-lock.h.
-
- * config/linuxaxp1-libc-lock.h: New file.
- * config/linuxaxp1-stdio-lock.h: New file.
- * config/linuxaxp1.mt: New file.
-
- * gen-params (va_list): Check for and use __gnuc_va_list.
- (NULL): Work around some linux kernel headers and redefine NULL.
-
-Mon Nov 24 17:04:18 1997 Michael Meissner <meissner@cygnus.com>
-
- * stdiostream.cc (sys_read): Declare ch with int type, rather than
- without a type.
-
-Tue Nov 18 09:53:58 1997 H.J. Lu (hjl@gnu.ai.mit.edu)
-
- * stdstrbufs.cc (DEF_STDFILE): Use STD_VTABLE.
-
-Tue Nov 11 01:40:17 1997 Oleg Krivosheev <kriol@fnal.gov>
-
- * iomanip.h: Fix guiding decls.
-
-1997-11-05 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * libio.h (__P): Name its arg `p' instead of `params'.
- Avoids problems with an unchanged Solaris math.h header.
-
-Wed Oct 29 23:01:47 1997 Jason Merrill <jason@yorick.cygnus.com>
-
- * gen-params: Override NULL.
-
-1997-10-27 03:53 Ulrich Drepper <drepper@cygnus.com>
-
- * stdio-lock.h: Removed. Was never needed.
-
-Wed Oct 22 19:19:32 1997 H.J. Lu (hjl@gnu.ai.mit.edu)
-
- * libio.h (_IO_LOCK_T): Handle glibc 2 when _IO_MTSAFE_IO is
- not defined.
-
- * iovsscanf.c (vsscanf): Make it weak alias of _IO_vsscanf if
- __linux__ is defined instead of __ELF__
-
- * config/linuxlibc1.mt (USER_INCLUDES): Add libio.h.
-
-1997-10-15 Ulrich Drepper <drepper@cygnus.com>
-
- * configure.in: Create compatibility code in bits/libc-lock.h file.
-
-Thu Oct 9 07:08:41 1997 H.J. Lu (hjl@gnu.ai.mit.edu)
-
- * libio.h (_IO_LOCK_T): Handle glibc 2 when _IO_MTSAFE_IO is
- not defined.
-
- * filedoalloc.c (_IO_file_doallocate): Don't call
- _IO_cleanup_registration_needed if __linux__ is defined.
-
- * iofclose.c (fclose): Make it weak alias of _IO_fclose if
- __ELF__ is defined.
-
- * iovsprintf.c (vsprintf): Make it weak alias of _IO_vsprintf
- if __ELF__ is defined.
-
- * iovsscanf.c (vsscanf): Make it weak alias of _IO_vsscanf if
- __ELF__ is defined.
-
- * config/linuxlibc1.mt (MT_CFLAGS): Defined as -D_G_HAVE_MMAP.
- (IO_OBJECTS): Add filedoalloc.o fileops.o genops.o iofclose.o
- iovsprintf.o iovsscanf.o strops.o.
-
-Fri Oct 3 10:13:13 1997 Jason Merrill <jason@yorick.cygnus.com>
-
- * iostream.cc, libio.h: Convert other uses of #ifdef
- _G_HAVE_PRINTF_FP to #if.
-
-1997-10-02 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * iostream.cc (operator<<): Use `#if _G_HAVE_PRINTF_FP', not ifdef.
-
-Thu Oct 2 10:36:49 1997 Jason Merrill <jason@yorick.cygnus.com>
-
- * gen-params: Fix __printf_fp test.
- * config/linuxlibc1.mt (gxx_includedir): Don't define.
-
-Thu Oct 2 10:36:26 1997 Ulrich Drepper <drepper@rtl.cygnus.com>
-
- * config/linuxlibc1.mt (_G_CONFIG_H): Don't define.
- * gen-params: Add test for __printf_fp.
-
-Sun Sep 28 12:09:04 1997 Mark Mitchell <mmitchell@usa.net>
-
- * iomanip.h: Use new friend <> syntax.
-
-Sun Sep 28 12:04:21 1997 Jason Merrill <jason@yorick.cygnus.com>
-
- * libio.h: Don't use _IO_LOCK_T if it's not defined.
-
-Fri Sep 26 20:56:41 1997
-
- Based on a patch by H.J. Lu (hjl@gnu.ai.mit.edu).
-
- * Makefile.in (STDIO_OBJECTS): New. Defined as stdfiles.o.
- (LIBIO_OBJECTS): Add $(STDIO_OBJECTS).
- (PICFLAG): New, empty. moved to here from config.shared.
-
- * config.shared (DISTCLEAN): Add target-mkfrag.
- (PICFLAG): Removed.
-
- * configure.in (*-linux-gnulibc1): Remove warning.
- (*-linux-gnu): Use linux.mt mtsafe.mt.
- (alpha-*-linux*): Use mh-elfalphapic.
-
- * gen-params (_G_ullong): Also check unsigned long long int.
- (_G_llong): Also check long long int.
-
- * libio.h (_IO_lock_t): Add support for the Linux libc 5.
- (_IO_peekc): Defined as _IO_peekc_unlocked if _IO_MTSAFE_IO
- is not defined.
-
- * iostream.cc (__cvt_double): Fix a typo in declaration.
- (info): Use expr != 0 to initialize the bit fields. Don't
- initialize "extra" for the Linux libc 5.
-
- * streambuf.h (_G_NEED_STDARG_H): Changed from _IO_NEED_STDARG_H.
-
- * config/linux.mt (STDIO_OBJECTS): New, empty.
- (MT_CFLAGS): Removed.
-
- * config/linuxlibc1.mt: Rewrite. it's identical to linux.mt but
- IO_OBJECTS mentions files not in early libc5 versions.
-
- * config/mtsafe.mt: New.
-
- * dbz/Makefile.in (check): Support make -j.
-
- * tests/tFile.cc (tempfile): Fix a typo.
-
-1997-09-19 11:52 Jim Wilson <wilson@cygnus.com>
-
- * Makefile.in (LIBIO_OBJECTS): Depend on _G_CONFIG_H.
-
-1997-09-17 04:08 Ulrich Drepper <drepper@cygnus.com>
-
- * iostream.cc: Add forward declaration for __cvt_double.
- * libio.h: Define _IO_USE_DTOA is _G_HAVE_PRINTF_FP is not defined.
- * strops.c (_IO_str_count): Correct last change.
-
-1997-09-17 02:50 Ulrich Drepper <drepper@cygnus.com>
-
- * libioP.h: Define __set_errno if not already defined.
-
-1997-09-15 02:37 Ulrich Drepper <drepper@cygnus.com>
-
- * config/linux.mt: Rewrite for use with glibc 2.
- * config/linuxlibc1.mt: Old content of linux.mt, fir libc4 and
- libc5.
-
- * config.shared (COMPILE.c): Allow new flags in MT_CFLAGS be
- passed.
- (COMPILE.cc): Likewise.
-
- * configure.in (*-linux*): Remove goal. We now have...
- (*-linux-gnulibc1): For libc4 and libc5. Emit warning.
- (*-linux-gnu)): For glibc 2.
- Create links to find headers for multi-threading if necessary.
-
- * fileops.c: Make thread-safe by using _IO_cleanup_region_start
- etc to handle cancelation. Acquire locks in functions which are
- called directly.
- (_IO_file_read, _IO_file_write): Remove dead code.
-
- * include/empty.h: Define stub macros for locking.
-
- * iolibio.h: Add prototypes for obstack printing functions.
-
- * ioseekoff.c (_IO_seekoff): Lock stream before working.
- * ioseekpos.c (_IO_seekpos): Likewise.
-
- * iostream.cc: Add support for long double I/O.
- Use __printf_fp from glibc is available.
- Use _IO_cleanup_region_start to handle cancelation correctly.
- * iostream.h (class ostream): Change opfx and osfx to lock/unlock
- stream
- (class istream): Likewise for ipfx, ipfx0, ipfx1, and isfx.
- Declare new function lock and unlock for ostream and istream.
- * osform.cc: Use _IO_cleanup_region_start to handle cancelation
- correctly.
-
- * libio.h: Update from glibc version. Pretty printing.
- * libioP.h: Likewise.
-
- * outfloat.c: Only compile if _IO_USE_DTOA is defined.
-
- * stdio/feof.c: Make thread safe.
- * stdio/ferror.c: Likewise.
- * stdio/getc.c : Likewise.
- * stdio/putc.c : Likewise.
- * stdio/stdio.h: Declare function of thread-safe API.
-
- * stdio/obprintf.c: New file.
- * stdio/vasprintf.c: New file.
-
- * stdio-lock.h: Removed.
-
- * stdstrbufs.c: Add definitions for thread-safe streams.
-
- * streambuf.cc: Initialize lock.
-
- * strops.c (_IO_str_count): Undo last change.
-
- * tests/tFile.cc: Support parallel builds by avoiding fixed
- name for test file.
-
-Thu Sep 11 18:43:56 1997 Jason Merrill <jason@yorick.cygnus.com>
-
- * Makefile.in (iostream.list): Remove STDIO_WRAP_OBJECTS.
-
-Mon Sep 8 01:30:27 1997 Weiwen Liu <liu@hepunix.physics.yale.edu>
-
- * libio.h: Fix typo.
-
-Sun Sep 7 23:00:18 1997 Jim Wilson (wilson@cygnus.com)
-
- * linux.mt (LIBIOSTREAM_DEP): Change stdio.list to stmp-stdio.
-
-Fri Sep 5 09:58:43 1997 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * Makefile.in (iostream.list): Instead of adding stdio.list, add
- STDIO_WRAP_OBJECTS.
- (iostream.list): Lose dependency on stmp-stdio, not necessary for
- our stuff. The stdio stuff is present here just for uniformity
- with glibc.
-
-Thu Sep 4 17:26:22 1997 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * parsestream.cc (general_parsebuf): Cast return of malloc to char*.
-
-1997-09-04 16:11 Ulrich Drepper <drepper@cygnus.com>
-
- Change compared to version initially intended to in:
- * strops.c (_IO_str_count): Still use _IO_write_ptr, not
- _IO_write_end, for now.
-
- * iofeof.c, ioferror.c, iofflush_u.c, iogetc.c, ioputc.c, peekc.c,
- stdio-lock.h: New files.
-
- * include: New dir.
- * include/empty.h: New header.
-
- * filedoalloc.c: Update and reformat copyright.
- Don't use DEFUN.
- Use __set_errno throughout the code to support multi-threaded
- programs.
- Correct layout to follow the Coding Standard.
- Add casts to prevent warnings.
- * fileops.c: Likewise.
- * genops.c: Likewise.
- * iofclose.c: Likewise.
- * iofdopen.c: Likewise.
- * iofflush.c: Likewise.
- * iofgetpos.c: Likewise.
- * iofgets.c: Likewise.
- * iofopen.c: Likewise.
- * iofprintf.c: Likewise.
- * iofputs.c: Likewise.
- * iofread.c: Likewise.
- * iofsetpos.c: Likewise.
- * ioftell.c: Likewise.
- * iofwrite.c: Likewise.
- * iogetdelim.c: Likewise.
- * iogetline.c: Likewise.
- * iogets.c: Likewise.
- * iopadn.c: Likewise.
- * iopopen.c: Likewise.
- * ioputs.c: Likewise.
- * ioseekoff.c: Likewise.
- * iosetbuffer.c: Likewise.
- * iosetvbuf.c: Likewise.
- * iosprintf.c: Likewise.
- * ioungetc.c: Likewise.
- * iovsprintf.c: Likewise.
- * iovsscanf.c: Likewise.
- * libio.h: Likewise.
- * libioP.h: Likewise.
- * stdfiles.c: Likewise.
- * strfile.h: Likewise.
- * strops.c: Likewise.
-
- * Makefile.in (IO_OBJECTS): Add peekc.o, iogetc.o, ioputc.o,
- iofeof.o, and ioferror.o.
- (iostream.list): Depend upon stmp-stdio. Add the entries
- from stdio.list to iostream.list.
- (stmp-stdio): New name for what was the stdio/stdio.list rule.
- All it now does is cd down into stdio and build stdio.list.
-
- * configure.in (ALL): Add libiostream.a.
-
- * libio.h [_IO_MTSFE_IO]: Include header declaring locking code.
- Otherwise define opaque _IO_lock_t.
- Define _IO_cookie_file.
- Rename _IO_getc to _IO_getc_unlocked, _IO_peekc to _IO_peekc_unlocked,
- _IO_putc to _IO_putc_unlocked, _IO_feof to _IO_feof_unclocked, and
- _IO_ferror to _IO_ferror_unlocked.
- Add prototypes for _IO_getc, _IO_putc, _IO_feof, _IO_ferror,
- and _IO_peekc_locked.
- Add declarations for _IO_flockfile, _IO_funlockfile, and
- _IO_ftrylockfile. If !_IO_MTSAFE_IO define _IO_flockfile,
- _IO_funlockfile, _IO_ftrylockfile, _IO_cleanup_region_start, and
- _IO_cleanup_region_end as empty macros.
-
- * libioP.h: Change type of finish function to take an additional int
- argument and change declaration of finish functions.
- Add prototypes for _IO_seekoff and _IO_seekpos.
- If _G_HAVE_MMAP is defined use stream buffers allocated with mmap.
- Redefine FREE_BUF and ALLOC_BUF macros to help in both situations.
- (FILEBUF_LITERAL): If we compile for a thread-safe library also
- initialize lock member.
-
- * filedoalloc.c: Take care for systems already defining _POSIX_SOURCE.
- Keep name space clean on systems which require this.
- (_IO_file_doallocate): Adopt ALLOC_BUF call for changed semantic.
-
- * fileops.c: Keep name space clean on systems which require this.
- (_IO_file_attach): Don't fail if seek failed because it's used on a
- pipe.
- (_IO_file_underflow): Update buffer pointers before calling `read'
- since the `read' might not return anymore.
- (_IO_file_overflow): If stream allows no writes set error flag.
- (_IO_seekoff): Make sure that after flushing the file pointer in
- the underlying file is exact.
- (_IO_file_read): Don't restart `read' syscall if it return EINTR.
- This violates POSIX.
- (_IO_file_write): Likewise for `write'.
- (_IO_cleanup): Install as exit handler in glibc.
-
- * genops.c (_IO_setb): Correctly use FREE_BUF.
- (_IO_default_doallocate): Correctly use ALLOC_BUF.
- (_IO_init): Initialize lock in stream structure.
- (_IO_default_finish): Destroy lock.
- (_IO_get_column): Don't compile since it's not needed.
- (_IO_nobackup_default): Likewise.
-
- * iopopen.c: Take care for systems already defining _POSIX_SOURCE.
- Correct _IO_fork and _IO_dup2 prototypes.
-
- * iofclose.c: Acquire lock before starting the work.
- * iofflush.c: Likewise.
- * iofgetpos.c: Likewise.
- * iofgets.c: Likewise.
- * iofputs.c: Likewise.
- * iofread.c: Likewise.
- * iofsetpos.c: Likewise.
- * ioftell.c: Likewise.
- * iofwrite.c: Likewise.
- * iogetdelim.c: Likewise.
- * iogets.c: Likewise.
- * ioputs.c: Likewise.
- * iosetbuffer.c: Likewise.
- * iosetvbuf.c: Likewise.
- * ioungetc.c: Likewise.
-
- * iofdopen.c: Create and initialize lock for new stream.
- * iofopen.c: Likewise.
- * iopopen.c (_IO_popen): Likewise.
- * iovsprintf.c: Likewise.
- * iovsscanf.c: Likewise.
-
- * genops.c: Make weak aliases for various functions.
- * iofclose.c: Likewise.
- * iofdopen.c: Likewise.
- * iofflush.c: Likewise.
- * iofgetpos.c: Likewise.
- * iofgets.c: Likewise.
- * iofopen.c: Likewise.
- * iofputs.c: Likewise.
- * iofread.c: Likewise.
- * iofsetpos.c: Likewise.
- * ioftell.c: Likewise.
- * iofwrite.c: Likewise.
- * iogetdelim.c: Likewise.
- * iogets.c: Likewise.
- * ioputs.c: Likewise.
- * iosetbuffer.c: Likewise.
- * iosetvbuf.c: Likewise.
- * ioungetc.c: Likewise.
- * iovsprintf.c: Likewise.
- * iovsscanf.c: Likewise.
-
- * iofflush_u.c: New file. fflush_unlocked implementation.
-
- * iostream.h [_G_HAVE_LONG_DOUBLE_IO]: Declare real long double
- output operator.
-
- * peekc.c: New file. Implement _IO_peekc_locked function.
-
- * stdfiles.c: If we compile for a thread-safe library also define
- lock variable.
-
-Tue Aug 26 12:24:01 1997 H.J. Lu (hjl@gnu.ai.mit.edu)
-
- * testsuite/Makefile.in (check): Don't depend on site.exp.
- (just-check): Depend on site.exp.
-
-Wed Aug 20 02:01:34 1997 Jason Merrill <jason@yorick.cygnus.com>
-
- * iostream.h: Add copy assignment ops for _IO_?stream_withassign.
-
-Tue Jul 22 10:31:41 1997 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * config.shared (CHECK_SUBDIRS): Use install-sh, not install.sh.
-
-Wed Jun 25 12:20:55 1997 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * config.shared (DOING_GPERF): Look for this, defining TOLIBGXX
- and LIBS for it.
-
-Wed Jun 18 11:03:34 1997 Bob Manson <manson@charmed.cygnus.com>
-
- * config.shared (FLAGS_TO_PASS): Don't include RUNTEST.
-
-Tue Jun 17 22:23:48 1997 Bob Manson <manson@charmed.cygnus.com>
-
- * config.shared (FLAGS_TO_PASS): Pass RUNTEST and RUNTESTFLAGS.
-
-Fri May 16 21:08:53 1997 Bob Manson <manson@charmed.cygnus.com>
-
- * iovfprintf.c: Declare __cvt_double before use.
-
- * floatconv.c (d2b): Use _G_int32_t instead of int for the
- e and bits parameters.
- (_IO_strtod): Use _G_int32_t.
-
- * gen-params: Look for NO_USE_DTOA and USE_INT32_FLAGS.
-
- * strops.c (_IO_str_init_static): use _G_int32_t appropriately.
-
- * libio.h: If _G_NO_USE_DTOA is set, then don't define
- _IO_USE_DTOA.
-
- * config/mn10200.mt: Don't use dtoa, it only works
- for "real" doubles.
-
-Thu May 15 17:44:12 1997 Bob Manson <manson@charmed.cygnus.com>
-
- * configure.in: Set CHECK_SUBDIRS to testsuite if we're doing
- a cross compile.
-
- * config.shared(check): Only run make check in the directories
- specified by CHECK_SUBDIRS. Set CHECK_SUBDIRS to SUBDIRS
- if it has no previous value.
-
-Thu May 1 17:35:19 1997 Jason Merrill <jason@yorick.cygnus.com>
-
- * Makefile.in (test, tpipe): Add $(CFLAGS).
-
-Wed Apr 30 12:16:29 1997 Jason Merrill <jason@yorick.cygnus.com>
-
- * configure.in: Don't turn on multilib here.
-
-Sat Apr 26 13:38:21 1997 Bob Manson <manson@charmed.cygnus.com>
-
- * configure.in (configdirs): Add testsuite directory.
-
- * testsuite/ChangeLog:
- * testsuite/Makefile.in:
- * testsuite/libio.tests/tiomanip.exp:
- * testsuite/libio.tests/tstdiomisc.exp:
- * testsuite/libio.tests/tiomisc.exp:
- * testsuite/libio.tests/tFile.exp:
- * testsuite/libio.tests/tfformat.exp:
- * testsuite/libio.tests/tiformat.exp:
- * testsuite/libio.tests/hounddog.exp:
- * testsuite/libio.tests/putbackdog.exp:
- * testsuite/configure.in:
- * testsuite/lib/libio.exp:
- * testsuite/config/default.exp:
- New files for DejaGnu-style testsuite.
-
-Fri Apr 4 03:16:44 1997 Ulrich Drepper <drepepr@cygnus.com>
-
- * configure.in: Enable multilibing by default.
- Update multilib template to read config-ml.in.
-
- * floatconv.c: Enable use in cross targets which use the
- newlib ieeefp.h header.
-
-Thu Jan 23 09:16:16 1997 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * libioP.h (_IO_file_attach): Delete redundant decl.
-
-Tue Jan 21 22:13:45 1997 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * streambuf.h (class ios): Take out STREAMSIZE member, since we
- only need (and should only have) the global one.
-
-Tue Jan 7 14:02:40 1997 Jason Merrill <jason@yorick.cygnus.com>
-
- * iostream.h (long long fns): Use __extension__.
-
- * gen-params: Use _G_llong and _G_ullong instead of long long for
- deduced types.
-
-Fri Dec 6 13:13:30 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * dbz/dbz.c: Use off_t.
-
-Sat Nov 23 15:44:37 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * Makefile.in (install): Don't install _G_config.h with other headers.
-
-Mon Nov 18 17:12:41 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * config.shared (SUBDIRS): Use -O instead of -O3 for debugging.
-
-Sun Nov 3 12:43:34 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * iostream.cc (write_int): Treat string literals as const.
-
-Thu Sep 26 10:09:18 1996 Michael Meissner <meissner@tiktok.cygnus.com>
-
- * depend: Regenerate.
-
-Wed Sep 25 22:54:45 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * config.shared (depend.new): Deal with headers that don't end in .h.
-
-Thu Aug 29 17:05:53 1996 Michael Meissner <meissner@tiktok.cygnus.com>
-
- * configure.in (i[345]86-*-*): Recognize i686 for pentium pro.
-
-Mon Aug 5 01:26:32 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * config{ure.in,.shared} (DISTCLEAN): Add multilib.out.
-
-Fri Aug 2 17:39:35 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * libio.h (NULL): Use __null.
- * libioP.h (NULL): Ditto.
- * streambuf.h (NULL): Ditto.
- * ioextend.cc (get_array_element): Use NULL instead of (void*)0.
-
-Fri Jul 5 18:26:41 1996 Jim Wilson <wilson@cygnus.com>
-
- * strfile.h (struct _IO_streambuf): New struct type.
- (struct _IO_strfile): Use it.
-
-Tue Jun 18 18:24:21 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * fstream.h (fstreambase): Make __my_fb mutable.
- From Joe Buck.
-
-Tue Jun 18 11:03:53 1996 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * dbz/fake.c (main): Set return type to int.
- * dbz/dbzmain.c (main): Likewise.
- * dbz/byteflip.c (main): Likewise.
-
-Mon Jun 17 14:05:36 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * gen-params: Check if clog conflicts with system libraries.
- * stdstreams.cc: If it does, use __IO_clog.
- * iostream.h: Likewise.
-
-Tue Jun 11 13:39:31 1996 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * stdiostream.h (istdiostream (FILE*)): Put istream base
- initializer before init for __f.
- (ostdiostream (FILE*)): Likewise for ostream base init.
-
-Tue May 14 11:47:21 1996 Per Bothner <bothner@andros.cygnus.com>
-
- * strfile.h (_IO_str_fields): Removed _len field.
- (_IO_STR_DYNAMIC, _IO_STR_FROZEN): new macros.
- * strstream.h (strstreambuf::is_static): Removed.
- (strstreambuf::frozen): Use _IO_STR_DYNAMIC instead of is_static.
- * strstream.h, strstream.cc: Remove support for !_IO_NEW_STREAMS.
- * strstream.cc (strstreambuf::init_dynamic): Don't set _s._len.
- * strops.c (_IO_str_init_static): Better handling of the
- negative (== unbounded) size case.
- (_IO_str_overflow, _IO_str_underflow, _IO_str_count): Re-write
- to not use _s._len, and otherwise cleanup/fix.
- * strstream.h, strstream.cc (strstreambase::strstreambase()): Call
- ios::init here.
- (other constructors): Simplify - init already called.
-
-Tue May 14 10:55:21 1996 Per Bothner <bothner@deneb.cygnus.com>
-
- Change so that strstreambuf default constructor does no allocation.
- * strstream.h (strstreambuf::init_dynamic): Default initial size = 0.
- * strstream.cc (strstreambuf::init_dynamic): Don't allocate a
- buffer (yet) if initial_size is 0.
- * strops.c (_IO_str_overflow): Add 100 to size of re-allocated
- buffer, to handle case when initial size is 0.
-
- * iostdio.h (remove, rename, tmpfile, tempnam): Comment out.
-
-Mon May 13 23:19:39 1996 Per Bothner <bothner@deneb.cygnus.com>
-
- * fileops.c (_IO_file_close_it): Just call _IO_do_flush rather
- than _IO_file_sync, to avoid useless lseek.
-
-Tue May 14 10:48:48 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * floatconv.c (_IO_strtod): Force rv into the stack.
-
- * config.shared (gxx_includedir): Now $(includedir)/g++.
-
-Sat Apr 27 02:37:49 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * libioP.h (JUMP*): Implement for thunks.
- (_IO_jump_t): Add second dummy field for thunks.
-
-Thu Apr 25 13:20:00 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * config.shared (CXX): Use gcc, not g++.
-
-Wed Apr 24 10:29:50 1996 Doug Evans <dje@blues.cygnus.com>
-
- * config.shared (depend.new): Delete $(srcdir)/ from foo.{c,cc}
- for SunOS VPATH.
- * depend: Regenerated.
-
-Fri Apr 19 17:24:51 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * Version 2.8.0b3.
-
-Wed Apr 10 17:16:01 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * configure.in (ALL): Don't build iostream.a.
-
-Mon Apr 8 14:44:11 1996 Per Bothner <bothner@kalessin.cygnus.com>
-
- * iosetvbuf.c (_IO_setvbuf): Clear _IO_UNBUFFERED unless _IONBF.
-
-Mon Apr 8 15:08:23 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * configure.in: Permit --enable-shared to specify a list of
- directories.
-
-Fri Apr 5 17:48:56 1996 Per Bothner <bothner@kalessin.cygnus.com>
-
- * config.shared (MOSTLYCLEAN): Also remove ${EXTRA_MOSTLYCLEAN}.
-
-Fri Mar 22 23:25:00 1996 Ulrich Drepper <drepepr@gnu.ai.mit.edu>
-
- * genops.c (_IO_sputbackc, _IO_sungetc): Clear EOF flag if putsh
- back was successful.
-
-Wed Mar 27 11:54:08 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * Version 2.8.0b2.
-
-Fri Mar 22 15:39:36 1996 Per Bothner <bothner@kalessin.cygnus.com>
-
- * fileops.c (_IO_do_write): Revert previous fix. (It fails to
- handle the case that fp->_IO_read_end != fp->_IO_write_base.)
- (_IO_file_overflow): Instead, if _IO_read_ptr is at the end of
- the buffer, reset all the read pointers to _IO_buf_base.
-
-Tue Mar 12 12:03:17 1996 Per Bothner <bothner@kalessin.cygnus.com>
-
- * fileops.c (_IO_do_write): Even if to_do==0, must re-set buffer
- pointers. Bug and solution from Luke Blanshard <luke@cs.wisc.edu>.
-
-Wed Feb 28 10:00:24 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * Version 2.8.0b1.
-
-Tue Feb 27 18:08:16 1996 Per Bothner <bothner@kalessin.cygnus.com>
-
- * iopopen.c (_IO_proc_open): Use (char*)0 rather than imprecise NULL.
-
- * streambuf.h (ios): Add ios::binary; deprecate ios::bin.
- * filebuf.cc (filebuf::open): Handle ios::binary.
-
-Fri Feb 9 12:40:19 1996 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * cleanup.c (_IO_cleanup_registration_needed) [!_G_HAVE_ATEXIT]: Init
- to NULL.
- * filedoalloc.c (_IO_cleanup_registration_needed): Remove decl.
-
-Thu Feb 8 08:12:50 1996 Brendan Kehoe <brendan@cygnus.com>
-
- * filedoalloc.c (_IO_cleanup_registration_needed): Revert previous
- change, since cleanup.c only defines it if _G_HAVE_ATEXIT.
-
-Wed Feb 7 15:10:17 1996 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * filedoalloc.c (_IO_cleanup_registration_needed): Declare as extern.
-
-Tue Dec 12 17:21:13 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * indstream.h, instream.cc (indirectbuf::uflow): New method.
- * indstream.cc (indirectbuf::underflow): Fix to use sgetc, not sbumpc.
- Fixes bug reported by Kevin Beyer <beyer@cs.wisc.edu>.
-
- * indstream.cc (indirectbuf::seekpos): Add paranoia test.
-
-Fri Dec 8 14:55:34 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * stream.h: Add warning to not use these functions.
- * stream.cc (str, chr): Re-implement here (from libg++).
-
-Tue Nov 28 15:07:01 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * config.shared: Use test instead of [ to avoid DEC Unix lossage.
-
-Thu Nov 23 14:51:43 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * iopopen.c: Move #include <sys/types.h> ahead of #include <signal.h>
- to deal with BSDI's literal implementation of Posix.
-
-Sat Nov 25 11:21:55 1995 Doug Evans <dje@canuck.cygnus.com>
-
- * Makefile.in (install): Set rootme.
- * config.shared (TOPDIR): Set with ${foo-...} rather than ${foo=...}.
- (INSTALL): Handle absolute, dot, relative-not-dot values of srcdir.
- (TEXIDIR): Likewise.
-
-Tue Nov 21 14:12:05 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * configure.in: Check ${with_cross_host} rather than comparing
- ${host} and ${target}.
-
-Mon Nov 20 13:55:29 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * configure.in: Match *-sco3.2v[45]*.
-
-Wed Nov 15 20:19:31 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * config.shared (FLAGS_TO_PASS): Also pass SHLIB and SHCURSES.
-
-Tue Nov 14 01:41:08 1995 Doug Evans <dje@canuck.cygnus.com>
-
- * config.shared (TO_REAL_TOPDIR): Define.
- (MULTITOP): Deleted.
- (MULTISRCTOP, MULTIBUILDTOP): New.
- (TOPDIR): Change MULTITOP to MULTIBUILDTOP, and use TO_REAL_TOPDIR.
- (INSTALL): Add with_multisrctop, TO_REAL_TOPDIR.
- (TEXIDIR): Use TO_REAL_TOPDIR.
- (LIBS): Delete MULTITOP.
- (FLAGS_TO_PASS): Add NM.
- (CXXINCLUDES): Delete MULTITOP.
- (depend.new): Delete adding MULTITOP to ../ build tree references.
- Add MULTISRCTOP to ../ source tree references.
- * configure.in: Delete call to cfg-ml-com.in. Call config-ml.in
- instead of cfg-ml-pos.in.
-
-Sun Nov 12 16:30:48 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * Makefile.in (VERSION): Set to 2.7.1.
- * configure.in: Add warning for Linux.
- * config.shared (DISTCLEAN): Add EXTRA_DISTCLEAN.
-
- * editbuf.h (edit_mark::index_in_buffer): Avoid unused param warning.
-
- * iostream.cc (istream::operator>> (char*)): Improve ANSI compliance.
-
-Fri Nov 10 08:41:37 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * config.shared (check): Add missing semicolon.
-
-Thu Nov 9 17:27:22 1995 Jason Merrill <jason@yorick.cygnus.com>
-
- * configure.in (ALL): Remove $(OSPRIM_OBJECTS).
- * config.shared (check): Set LD_LIBRARY_PATH.
- * NEWS: Fix typo.
- * iogetdelim.c (_IO_getdelim): Index *lineptr, rather than lineptr.
- From alan@spri.levels.unisa.edu.au (Alan Modra).
-
-Mon Nov 6 15:03:33 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * streambuf.cc, editbuf.cc, isgetline.cc, parsestream.cc:
- Fixes to avoid -Wall warnings.
-
-Fri Nov 3 16:41:41 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * gen-params [!__STDC__]: Include varargs.h instead of stdarg.h.
-
-Thu Nov 2 15:04:03 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * config.shared: Re-write if X then Y else true fi to (not X) || Y.
-
-Wed Nov 1 13:26:44 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * iostream.h (istream::ipfx): Add default argument value.
- Reported by Yotam Medini <yotam_medini@tmai.com>.
-
- * libioP.h (_IO_blen): Fix typo.
- Reported by Bryan T. Vold <btv@ldl.healthpartners.com>.
-
-Fri Oct 27 19:26:20 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * Makefile.in (_G_config.h): Set CC to $(CC) rather than to $(CXX),
- now that CXX defaults to g++ and CC default to gcc (when found).
- * config.shared: Simplify CXX and CC, since they get overridden
- by ../configure anyway.
-
-Wed Oct 25 19:45:50 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * iostdio.h: Wrap including the file with #ifndef _IOSTDIO_H.
-
-Wed Oct 25 11:14:25 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * libio.h (_IO_seekoff, _IO_seekpos): New declarations.
- * libioP.h (_IO_seekoff, _IO_seekpos): Remove declarations.
- * libioP.h: Cleanup; remove old !_IO_UNIFIED_JUMPTABLES stuff.
-
- * filebuf.cc (filebuf::~filebuf): Only call SYSYCLOSE if currently
- open. Bug found by Martin Gerbershagen <ger@ezis-ulm.de>.
-
- * streambuf.h (streambuf::pubseekoff, streambuf::pubseekpos):
- Added, from ANSI draft.
- * filebuf.cc (filebuf::open), iostream.cc (variables places), SFile.cc:
- Use pubseekoff/pubseekpos rather than sseekoff/sseekpos.
-
- * Makefile.in (install): Don't install libiostream.a.
-
- * filedoalloc.c: Also #include <unistd.h>.
-
-Mon Oct 9 18:09:54 1995 Jason Molenda <crash@phydeaux.cygnus.com>
-
- * config.shared (SUFFIXES): add .c.
-
-Tue Sep 26 16:08:01 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * procbuf.cc: Move #pragma implementation to beginning.
-
-Wed Sep 20 17:53:33 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * procbuf.h, procbuf.cc: Add #pragma interface/implementation stuff.
-
-Wed Sep 20 18:59:00 1995 John Eaton <jwe@bevo.che.wisc.edu>
-
- * procbuf.h: Protect from being included multiple times.
-
-Wed Sep 20 15:47:14 1995 John Eaton <jwe@bevo.che.wisc.edu>
-
- * procbuf.h (procbuf): Add '_next' pointer field for compatibility
- with _IO_proc_file.
-
-Wed Sep 20 13:54:02 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * config.shared: Add support for maintainer-clean target as a
- synonym for realclean.
- * dbz/Makefile.in: Likewise.
-
-Mon Sep 11 12:11:19 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * iopopen.c: #include <sys/types.h> before <sys/wait.h>.
- This is in accordance with Posix, and needed for ISC.
-
-Fri Sep 8 00:11:55 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * gen-params: Use double quotes in the eval setting $TYPE to
- $VALUE, to preserve any single quotes in $VALUE.
-
-Mon Aug 21 11:39:09 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * gen-params: Test for an appropriate version of gcc before using
- mode attributes.
-
- * config.shared: Add $(PICDIR) to $ALL.
-
-Mon Aug 7 17:51:40 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * gen-params: Generate new macro _G_HAVE_SYS_CDEFS.
- * libio.h: If _G_HAVE_SYS_CDEFS, get __P from <sys/cdefs.h>.
-
-Fri Aug 4 23:21:17 1995 Paul Eggert <eggert@twinsun.com>
-
- * gen-params: When following typedef changes, allow typedefs
- that do not have a space before the defined type name,
- e.g. `typedef void *__gnuc_va_list;' as in Linux. Also,
- not require a space in the definiens, e.g. `typedef void*foo;'.
-
-Thu Aug 3 17:54:15 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * iostream.h, iostream.cc (istream::sync): Added missing method.
-
-Thu Aug 3 17:49:34 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * configure.in: Remove netbsd special case.
- * config/netbsd.mt: Removed; no longer used.
-
-Tue Jun 20 16:07:12 1995 Paul Eggert <eggert@twinsun.com>
-
- * gen-params: Take transitive closure of `typedef' relation.
- This is needed for BSD/OS 2.0, which has
- fpos_t -> off_t -> quad_t -> long long.
-
-Mon Jul 24 18:28:10 1995 Doug Evans <dje@canuck.cygnus.com>
-
- * config.shared (TOPDIR): Delete extra '/', $rootme may be empty.
-
-Sat Jul 22 13:27:45 1995 Doug Evans <dje@canuck.cygnus.com>
-
- * config.shared (depend.new): Fix quoting in DO NOT EDIT line.
-
- * Makefile.in (_G_config.h): Add multilib support.
- (install): Likewise.
- * config.shared: Likewise.
- * configure.in: Likewise.
-
-Wed Jun 28 17:40:25 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * PlotFile.h, SFile.h, builtinbuf.h, editbuf.h, fstream.h,
- indstream.h, iomanip.h, iostream.h, parsestream.h, pfstream.h,
- procbuf.h, stdiostream.h, stream.h, streambuf.h, strstream.h: Wrap
- with extern "C++".
-
-Thu Jun 22 04:34:01 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * gen-params: Surround attributes with __.
-
-Mon Jun 19 00:33:22 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * config.shared (SUBDIRS): Massage broken shells that require
- 'else true'.
-
-Sat Jun 17 11:25:38 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * streambuf.h: Declare inline members inline in class.
-
-Thu Jun 15 20:45:13 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * Makefile.in (VERSION): Update to version 2.7.0.
-
-Wed Jun 14 21:41:11 1995 Jason Merrill <jason@python.cygnus.com>
-
- * Makefile.in (STDIO_WRAP_OBJECTS): Remove stdfiles.o.
- (LIBIO_OBJECTS): Add stdfiles.o.
-
-Wed Jun 7 16:11:36 1995 Jason Merrill <jason@python.cygnus.com>
-
- * config.shared (all): Appease bash.
-
-Wed Jun 7 11:16:38 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * configure.in (MOSTLYCLEAN): Remove stamp-picdir.
-
- * config.shared (MOSTLYCLEAN): Ditto.
- (CLEAN): Don't.
-
-Mon Jun 5 18:29:39 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * config/mh-*pic: Removed.
-
- * configure.in (MOSTLYCLEAN): Remove pic objects.
- (frags): Use toplevel pic fragments.
-
- * config.shared (CXXFLAGS): Use -O3.
- (PICFLAG, PICDIR): New macros.
- (all): Depend on $(PICDIR).
- (FLAGS_TO_PASS): Pass PICFLAG.
- (.x.o): Also build pic object.
- (stamp-picdir): Create directory for pic objects.
- (MOSTLYCLEAN): Remove pic objects.
- (CLEAN): Remove stamp-picdir.
-
- * Makefile.in (iostream.list): Depend on stamp-picdir.
- (c++clean): Don't remove _G_config.h.
-
-Mon Jun 5 15:03:47 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * strstream.h, strstream.cc (strstream::strstream()): Re-implement to
- be like ostrstream::ostrestream(), and not leak memory.
-
- * streambuf.h: Use #if !_IO_UNIFIED_JUMPTABLES instead of #ifndef.
-
- * iolibio.h (_IO_rewind): Add missing flags when calling _IO_seekoff.
-
-Thu May 25 22:30:21 1995 J.T. Conklin <jtc@rtl.cygnus.com>
-
- * config/netbsd.mt (G_CONFIG_ARGS): Add defn for off_t. Another
- layer of typedefs has been added and the gen-params script can
- not handle it.
-
-Wed May 10 03:02:58 1995 Jason Merrill <jason@python.cygnus.com>
-
- * iolibio.h (_IO_rewind): Add new argument to _IO_seekoff.
-
- * config/linux.mt (LIBIOSTREAM_OBJECTS): Include $(STDIO_WRAP_OBJECTS).
- (LIBIOSTREAM_DEP): Include stdio.list.
- (LIBIOSTREAM_USE): Include `cat stdio.list`.
-
- * Makefile.in (LIBIOSTREAM_DEP): New variable.
- (LIBIOSTREAM_USE): Ditto.
- (libiostream.a): Use them.
- (iostream.list): Ditto.
- (stdio.list): New rule.
- (stdio/stdio.list): Ditto.
-
-Tue May 9 18:29:38 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * libioP.h (_IO_jump_t): Change TYPE for __dummy from int to
- _G_size_t.
-
-Sat May 6 13:50:37 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * libio.h (_IO_UNIFIED_JUMPTABLES): #define as true.
- (_IO_FILE): Remove _jumps field (#if _IO_UNIFIED_JUMPTABLES).
-
- * libioP.h (enum _IO_seekflags_): Removed.
-
- * libioP.h (_IO_setbuf_t): Change return value of setpos jumptable
- function to match C++ streambuf::setpos. (Return NULL on failure.)
- * fileops.c (_IO_file_setbuf), genops.c (_IO_default_setbuf),
- filebuf.cc, iosetvbuf.c: Update to use new setbuf conventions.
-
- * streambuf.h (streambuf): Re-order virtual functions more logically.
- * streambuf.cc (streambuf::uflow), streambuf.h: New virtual.
- * libioP.h (struct _IO_jump_t): Define using new JUMP_FIELD macro.
- And re-order in more logical order consistent with streambuf vtable.
- * fileops.c (_IO_file_jumps), iopopen.c (_IO_proc_jumps), iovfprintf.c
- (_IO_helper_jumps), streambuf.cc (_IO_streambuf_jumps), strops.c
- (_IO_str_jumps): Update accordingly, using JUMP_INIT macro.
- * stdfiles.c: Set vtable to point to _IO_file_jumps.
- * filebuf.cc, iopopen.c, iovfprintf.c (helper_vfprintf), iovsprintf.c,
- iovsscanf.c: Use macros and #if to set jumptables.
-
- * streambuf.c: _IO_streambuf_jumps and the _IO_sb_* methods are not
- needed #if _IO_UNIFIED_JUMPTABLES.
- * filebuf.cc (filebuf::__new): Also no longer needed.
- * fstream.cc (fstreambase::__fb_init, fstreambase::fstreambase): Fix.
- * stdstrbufs.c: Use filebuf vtable instead of builtinbuf's.
- * builtinbuf.h, builtinbuf.cc (builtinbuf): Commented out #if
- _IO_UNIFIED_JUMPTABLES - no longer needed.
- * strstream.cc (SET_STR_JUMPS): Does nothing now.
-
- * builtinbuf.cc, fileops.c, genops.c, iofgetpos.c, iofsetpos.c,
- ioftell.c, iopopen.c, ioseekoff.c, ioseekpos.c, iosetvbuf.c,
- iovfprintf.c, iovfscanf.c, strops.c: Use DEFUN and DEFUN_VOID.
- * filebuf.cc, fileops.c, genops.c, iopopen.c, ioseekoff.c, ioseekpos.c,
- iosetvbuf.c, iovfscanf.c: Use new JUMP_* and IO_OVERFLOW/... macros.
-
- * libioP.h (_IO_seekpos_t): Third arg is now an int (using _IOS_INPUT
- and _IOS_OUTPUT), not an enum _IO_seekflags_. Flags values are
- changed, and their sense inverted (to match streambuf::seekpos).
- * libioP.h (_IO_seekoff_t): Similarly match streambuf::seekoff.
- * filebuf.cc, fileops.c (_IO_file_fopen, _IO_file_seekoff), genops.c
- (_IO_default_seekpos, _IO_default_seekpos), iofgetpos.c, iofsetpos.c,
- iolibio.h (_IO_fseek), ioftell.c, ioseekoff.c, ioseekpos.c,
- iostream.cc, streambuf.cc, strops.c (_IO_str_seekoff), strstream.cc:
- New seekpos/seekoff conventions.
- * iostreamP.h (convert_to_seekflags): Removed - no longer needed.
-
- * iolibio.h (_IO_fread): New declaration.
-
- * dbz/Makefile.in: Re-arrange for cleaner dependencies.
-
-Fri May 5 15:55:22 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * libioP.h (_IO_JUMPS. JUMP_FIELD, JUMP0, JUMP1, JUMP2, JUMP3,
- JUMP_INIT, _IO_FINISH, _IO_OVERFLOW, ... _IO_SYSSTAT): New macros
- in preparation for new unified jumptable/vtable implementation.
- * cleanup.c, filedoalloc.c, iofclose.c, iofflush.c, iofiledoalloc.c,
- ioprims.c, iosetbuffer.c, iostrerror.c, ioungetc.c: Use DEFUN.
- * filedoalloc.c, iofclose, iofflush, iosetbuffer.c: Use new macros.
-
- * iofopen.c, iofdopen.c: Use macros and #if for new jumptables.
-
- * gen-params: Do not #include <sys/types.h>.
- Add missing quote in 'eval'.
- Do add #include <sys/types.h> in test for <sys/resource.h>.
- * config/netbsd.mt: New file, defining _G_CONFIG_ARGS (for fpos_t).
- * configure.in: Use netbsd.mt for NetBSD.
-
-Wed May 3 15:03:47 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * libioP.h (DEFUN, DEFUN_VOID, AND): New macros, from ansidecl.h.
- * iofdopen.c, iofgets.c, iofopen.c, iofputs.c, iofread.c, iofwrite.c,
- iogetdelim.c, iogetline.c, iogets.c, ioignore.c, iopadn.c, ioperror.c,
- ioputs.c, iovsprintf.c, iovsscanf.c, outfloat.c: Use DEFUN.
-
-Mon May 1 16:22:30 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * gen-params: #include <sys/types.h>. Don't use __WCHAR_TYPE__ in
- definition of _G_wchar_t. Use __attribute__ ((mode)) to get
- specific-sized ints under gcc, don't worry about int8 or int64
- otherwise. Provide defaults if deduction fails.
-
-Thu Apr 27 18:27:53 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * streambuf.h (ios::~ios): Delete _arrays.
- (_IO_NEW_STREAMS): Turn on.
- * libio.h (__adjust_column): Remove bogus declaration.
- * genops.c (_IO_set_column): Fix typo (in commented-out code).
-
-Tue Apr 25 17:14:29 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * config.shared (CXXINCLUDES): Use a shell variable with a
- different name from the make variable.
- * configure.in: Update accordingly.
-
-Mon Apr 17 17:19:40 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * streambuf.h (__adjust_column): Remove redundant declaration.
-
-Sat Apr 15 11:39:25 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * config.shared (do-clean-dvi): Also remove *.cps.
-
- * gen-params: Use ${SED} instead of sed.
-
- * libio.h: Remove #if'd out stuff (confuses makedepend).
-
- * stdstreams.cc (STD_STR): Standard streams start with ios::dec set.
-
-Fri Apr 14 23:46:31 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * iostream.h, iostream.cc (istream::read, ostream::write):
- Use streamsize for the length parameter.
-
- * streambuf.h: Removed redundant __overflow and __underflow.
-
- * fstream.h, fstream.cc: Add void fstreambase::attach(int).
-
- * iosscanf.c (_IO_sscanf): Fix non-__STDC__ missing declaration.
-
-Mon Apr 3 15:40:55 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * indstream.*: Fix prototypes of xsputn and xsgetn.
-
- * fileops.c: Avoid ??? trigraph.
-
-Mon Mar 27 16:16:38 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * iomanip.h (operator<< (ostream&, const omanip<TP>&): Define
- separately.
- (operator>> (istream&, const imanip<TP>&): Ditto.
-
-Mon Mar 27 08:56:00 1995 Brendan Kehoe (brendan@lisa.cygnus.com)
-
- * builtinbuf.cc (builtinbuf::setbuf): Cast NULL to streambuf*, to
- avoid warning/error about conversion from void*.
- * indstream.cc (indirectbuf::seekoff): Likewise.
- (indirectbuf::seekpos): Likewise.
- * filebuf.cc (filebuf::setbuf): Likewise.
- (filebuf::close): Cast NULL to filebuf*.
-
-Wed Mar 1 14:23:18 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * configure.in (DISTCLEAN): Add, with target-mkfrag.
-
-Fri Feb 24 01:01:08 1995 Jason Merrill <jason@python.cygnus.com>
-
- * configure.in (frags): Don't require so many dashes in the
- canonical target name.
-
-Sat Feb 18 13:18:30 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * streambuf.cc (streambuf::sync): Always return 0, even for
- non-flushed output. This is required by the ANSI/ISO draft.
- * genops.c (_IO_sync): Likewise always return 0.
-
-Fri Feb 17 16:33:28 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * fileops.c (_IO_file_close_it): Call _IO_file_sync, rather
- than _IO_do_flush, because we want to adjust the file pointer
- if reading and not at end (as in SVR4, and as in fflush).
- Also, make sure to return error indication if sync fails.
- (_IO_file_sync): Ignore seek error if it is ESPIPE.
- (_IO_file_seekoff): If not readable, do dumb lseek.
- * iofclose.c (_IO_fclose): If closing a non-filebuf, return -1
- if _IO_ERR_SEEN.
-
-Fri Feb 17 19:31:00 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * gen-params: Check for struct tms in <sys/times.h>, defining
- HAVE_SYS_TIMES accordingly.
-
-Wed Feb 15 21:05:11 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * strops.c (_IO_str_count): Use LEN macro.
- (_IO_str_seekoff): Update _len field.
-
-Mon Feb 6 19:29:00 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * gen-params: Default to short, long and long long for 16, 32 and
- 64 bit types, in case detection fails.
-
-Wed Jan 25 18:07:30 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * gen-params (_G_wint_t): Allow for broken promotions.
-
-Tue Jan 24 16:15:40 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * stdstrbufs.cc (_IO_fake_stdiobufs): Add an extra layer of struct,
- to force correct alignment on i960s.
- (DEF_STDIOBUF, _IO_{stdin,stdout,stderr}_buf): Update accordingly.
-
-Thu Jan 19 18:30:53 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * config.shared (CXXINCLUDES): Add libstdc++ to includes for
- building libg++.
- (LIBS): Also link with libstdc++ when building libg++ toys.
- Don't set EXPORT_ALL_VARIABLES; users will have to set
- LD_LIBRARY_PATH themselves.
-
-Fri Dec 30 16:38:13 1994 Mike Stump <mrs@cygnus.com>
-
- * config/linux.mt: Fix build problem on linux 1.0.8.
-
-Thu Dec 22 11:49:45 1994 J.T. Conklin (jtc@phishhead.cygnus.com)
-
- * config/netware.mt: Use gcc to pre-link iostream.nlm's objects
- instead of using nlmconv, so that references to functions in
- libgcc.a are resolved.
-
- * configure.in: Append .mt to target makefile fragment file names.
-
- * floatconv.c (tens, tinytens, bigtens): Added const qualifier.
-
-Tue Dec 20 09:59:50 1994 Mike Stump <mrs@cygnus.com>
-
- * gen-params (VTABLE_LABEL_PREFIX): Since some systems have GNU nm
- as nm, and they demangle by default, we have to notice this, and
- try --no-cplus (linux) or --no-demangle when running nm.
-
-Wed Dec 14 18:13:58 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * gen-params: To determine vt-name-mangling using dummy.C add
- #include and #prama interface/implementation to avoid problem with
- assemblers that don't emit local symbols. Reported under HPUX 8
- by Thomas Arend <arend@blasius.Chemietechnik.Uni-Dortmund.DE>.
-
- * streambuf.h (ios::ios): Move inline definition after
- that of ios::init (which ios::ios calls).
-
-Sun Dec 4 19:50:32 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * fileops.c (_IO_file_init, _IO_file_close_it, _IO_file_sync):
- Set _offset to _IO_pos_BAD, to support applications that follow
- POSIX.1 rules on mixing file handles.
-
- * fileops.c (_IO_file_overflow): Handle case that buffer was
- allocated (perhaps by setvbuf) but _IO_write_base is still 0.
-
- * iostdio.h (setbuffer): #define as _IO_setbuffer.
- * streambuf.h, filebuf.cc: Removed filebuf::do_write.
-
-Tue Nov 29 23:38:57 1994 Per Bothner (bothner@rtl.cygnus.com)
-
- * floatconv.c (setword0, setword1): Fix typo.
-
-Tue Nov 29 15:37:29 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * config.shared: Move -fno-implicit-template from CXXFLAGS
- to LIBCXXFLAGS. Tests are better run without it.
-
- * floatconv.c (word0, word1): Re-place/re-implement using unions
- instead of casts to avoid optimizer problems.
-
- * dbz/dbzmain.c: Renamed dirname -> dir_name to avoid OSF
- header file braindamage.
-
-Sat Nov 5 19:44:00 1994 Jason Merrill (jason@phydeaux.cygnus.com)
-
- * config.shared (LIBCFLAGS): Define.
- (LIBCXXFLAGS): Define.
- (DOING_LIBGXX): Define TOLIBGXX. Change LIBS to use -lg++. Add
- LD_LIBRARY_PATH and .EXPORT_ALL_VARIABLES:.
- (FLAGS_TO_PASS): Add LIBC{,XX}FLAGS.
- (XC{,XX}FLAGS): Set to LIBCFLAGS or CFLAGS depending on $LIBDIR.
- (COMPILE.c): Define, use in .c.o rule.
- (COMPILE.cc): Define, use in .cc.o rule.
-
-Sat Nov 5 15:12:12 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * Makefile.in (VERSION): Update to 0.67.
-
- * streambuf.h (ios::dont_close): Is now set by default.
- * fstream.h, fstream.cc (__fb_init): New function. Clears
- ios::dont_close. Change fstreambase constructors to call it.
- * strstream.cc: *strstream constructors must clear ios::dont_close.
- * iostream.cc: Simplify - don't need to set ios::dont_close.
- * ioassign.cc: Simplify - assume ios::dont_close is always set.
-
- * fstream.h, fstream.cc: If _IO_NEW_STREAMS, put the
- filebuf as a member __my_fb.
- * strstream.{h,cc}: Likewile use a strstreambuf member __my_sb.
- * streambuf.h, stdstreams.cc, ioextend.cc:
- Fix if _IO_NEW_STREAMS to not use ios::dont_close.
-
- * streambuf.h (class ios): Move rdbuf later, to avoid
- inability of g++ to inline.
- * filebuf.cc (filebuf::~filebuf): Call _IO_do_flush.
-
- * config.shared: Emit rules to make depend.
- * depend: New file.
-
-Fri Nov 4 17:19:11 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * README: Fix typos.
- * libio.h: Add comment. Update Copyright notice.
-
-Fri Nov 4 21:46:30 1994 Paul Eggert <eggert@twinsun.com>
-
- * libio.h (__P): Change argument name spelling from
- `paramlist' to `protos' for compatibility with BSDI 1.1.
-
-Thu Nov 3 00:45:16 1994 Jason Merrill (jason@phydeaux.cygnus.com)
-
- * config.shared (CXXFLAGS): Add -fno-implicit-templates.
-
-Mon Oct 24 15:57:35 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * config.shared: Define NOSTDIC and use it for libio too.
-
-Thu Oct 20 19:45:35 1994 Jason Merrill (jason@phydeaux.cygnus.com)
-
- * iogetdelim.c: #include <stdlib.h>.
-
-Thu Oct 20 17:09:52 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * iostream.h: Add classes _IO_istream_withassign and
- _IO_ostream_withassign. Re-type cin, cout, cerr, clog.
- (class iostream): Don't add extra _gcount field.
- * ioassign.cc: New file. Implement operator= for cin etc.
- * streambuf.h (class ios): Change return type of operator=.
- * Makefile.in (IOSTREAM_OBJECTS): Add ioassign.o.
-
- * Makefile.in: Re-arrange, so linux.mt overrides can work.
-
- * fileops.c (_IO_file_seekoff): Optimize seeks within buffer.
-
-Wed Oct 19 14:25:47 1994 Jason Merrill (jason@phydeaux.cygnus.com)
-
- * gen-params (wint_t): Return to using __WCHAR_TYPE__ for
- compatibility with gcc versions prior to 2.6.1.
-
-Tue Oct 18 17:08:18 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * Makefile.in: Define _G_CONFOG_H as _G_config.h for Linux. Use it.
- (IO_OBJECTS): Add iogetdelim.o.
- * config/linux.mt: New file.
- * configure.in: Select config/linux.mt if Linux.
- * iogetdelim.c: Verious cleanups, many from
- Ulrich Drepper <drepper@ipd.info.uni-karlsruhe.de>.
- * libioP.h: Add _IO_getdelim. Use (void) for no-parameter functions.
-
-Thu Oct 13 16:30:56 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * libio.h: Rename USE_DTOA to _IO_USE_DTOA for namespace reasons.
- * iostream.cc, iovfscanf.c, iovfprintf, floatconv.c:
- Update USE_DTOA -> _IO_USE_DTOA.
-
- * libio.h (_IO_feof, _IO_ferror): Move to here ...
- * iolibio: ... from here
-
- * iostream.cc (istream::get, istream::ignore, istream::read):
- Set _gcount to 0 if ipfx0 failed.
-
- * iostream.cc (flush): Do virtual function call, rather than
- going through jumptable. (To get correct method in derived class.)
- Bug and fix from John Wiegley <jw@cis.ohio-state.edu>.
-
- * iofdopen.c (O_ACCMODE): Define using O_RDWR, not O_RDWRITE.
-
- * streambuf.h (ios::rdbuf(streambuf*)): New.
- * streambuf.h (ios::operator=): Make private (i.e. dis-allow).
-
-Wed Oct 12 19:09:20 1994 Jason Merrill (jason@phydeaux.cygnus.com)
-
- * gen-params: Define _G_NO_NRV and _G_NO_EXTERN_TEMPLATES if not
- compiling with g++.
-
-Thu Oct 6 16:03:43 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * iostream.texi (ostrstream::str): Note that NUL is not written
- automatically.
-
-Wed Oct 5 17:28:29 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * iogetdelim.c (_IO_getdelim): New function.
-
-Wed Oct 5 15:40:22 1994 J.T. Conklin (jtc@phishhead.cygnus.com)
-
- * config/netware.mt: New file, first cut at Netware NLM support.
- * configure.in (*-*-netware*): Use config/netware.mt.
-
- * config.shared (NLMCONV, LD): New definition.
-
- * gen-params: check for nm in ${binutils}/nm.new.
- * config.shared: Likewise.
-
-Tue Oct 4 12:20:01 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * iomanip.h (omanip::operator<<): Make 2nd arg be const.
- Bug and fix reported by Greg McGary <gkm@magilla.cichlid.com>.
-
- * strstream.cc (strstreambuf::pcount): Simplify, to match
- ANSI/ISO specification.
-
-Mon Sep 26 15:19:52 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * gen-params: Include <wchar.h> and <wctype.h> if they exist.
-
-Thu Sep 8 14:41:41 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * iostream.h (class istream): Declare operator>>(long double&).
- (class ostream): Define operator<<(long double).
-
- * iostream.cc (istream::operator>>(long double&)): Define.
-
-Wed Sep 7 14:42:29 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * iostream.texi (Overflow): Fix bugs in example.
-
-Fri Sep 2 17:45:57 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * iostream.tex: Document a little on how to write your
- own streambuf-derived class, with an example.
-
-Tue Aug 30 13:03:57 1994 Brendan Kehoe (brendan@lisa.cygnus.com)
-
- * floatconv.c (s2b): Declare X and Y to be _G_int32_t.
- (diff, quorem): Declare BORROW, Y, and Z likewise.
- (ulp): Declare L likewise.
- (_IO_strtod): Declare L and AADJ likewise.
- (_IO_dtoa): Declare L and D likewise. Cast division of D by DS to
- _G_int32_t.
-
-Mon Aug 29 16:01:54 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * iosetvbuf.c (_IO_setvbuf): If setting _IOFBF and no
- buffer was specified, call __doallocate.
-
- * fileops.c, floatconv.c: Add a bunch of parentheses to
- shut up gcc warnings. Patch from H.J.Lu.
-
- * stdiostream.cc (stdiobuf::sys_read): Inline call to getc
- for the normal case (size==1).
-
-Sat Aug 20 12:14:52 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * Makefile.in (VERSION): Increase to 0.66.
-
-Fri Aug 19 17:28:41 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * iolibio.h: Added _IO_printf prototype.
- Added extern "C" { ... } wrappers #ifdef __cplusplus.
- Bugs reported by Neal Becker <neal@ctd.comsat.com>.
-
-Wed Aug 17 18:17:15 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * fileops.c (_IO_file_seekoff): For _IO_seek_cur, adjust for
- read-ahead before jumping to label dumb.
-
-Wed Aug 3 13:15:01 1994 H.J. Lu (hjl@nynexst.com)
-
- * libioP.h (CHECK_FILE(FILE,RET)): new, which checks for
- FILE == NULL and _IO_MAGIC_MASK.
- (COERCE_FILE(FILE)): merged into CHECK_FILE(FILE,RET)
- with typo fixes.
-
- * iofread.c, iofwrite.c: add CHECK_FILE(fp, 0);
- * iofclose.c: add CHECK_FILE(fp, EOF); remove _IO_MAGIC_MASK check.
-
- * iofflush.c, iofgetpos.c, iofputs.c, iofscanf.c,
- iofsetpos.c, iofvbuf.c, ioungetc.c:
- Add CHECK_FILE(fp, EOF) and remove COERCE_FILE(fp).
-
- * iofgets.c: add CHECK_FILE(fp, NULL) and remove COERCE_FILE(fp).
- * iofprintf.c: add CHECK_FILE(fp, -1) and remove COERCE_FILE(fp).
- * ioftell.c: add CHECK_FILE(fp, -1L) and remove COERCE_FILE(fp).
- * iosetbuffer.c: add CHECK_FILE(fp, ) and remove COERCE_FILE(fp).
-
-Fri Aug 12 15:35:39 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * iofdopen.c (_IO_fdopen): #define O_ACCMODE if it isn't.
- Still set O_APPEND if "a" is given, but don't unset it
- if it isn't. Added comment.
-
-Mon Aug 8 13:11:00 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * gen-params (VTABLE_LABEL_PREFIX): Changes in the implementation.
- For look for _*vt[$_.]7*filebuf in the nm output, because that
- matches what g++ produces and has produced. Thus it should be
- somewhat more robust.
-
-Sun Aug 7 22:52:49 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * gen-params (CC): Remove no-longer-needed -I options
- passed to xgcc (now they are implied by the -B options).
-
-Wed Jul 20 16:41:13 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * Makefile.in (tooldir): Added definition, so we can do
- 'make install' in this directory.
- Bug reported by Klamer Schutte <schutte@tpd.tno.nl>.
-
-Mon Jul 18 18:02:34 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * gen-params (VTABLE_LABEL_PREFIX): Remove filename sppearing
- by itself. Add comment explaining what is going on.
-
-Tue Dec 21 13:02:48 1993 H.J. Lu (hjl@jalod)
-
- * libio.h: define _IO_uid_t and _IO_HAVE_ST_BLKSIZE
- as _G_xxxxxxxx.
-
-Tue Dec 21 13:02:48 1993 H.J. Lu (hjl@jalod)
-
- * iopopen.c: Don't include <errno.h>. It is included in "libioP.h".
-
- * iopopen.c (_IO_proc_close) : check if fp is on the list
- before close it.
-
-Thu Jul 14 16:38:47 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * gen-params (CONFIG_NM): Make sed scripts to find vtable name
- mangling more robost for different forms of nm output.
-
-Tue Dec 21 13:02:48 1993 H.J. Lu (hjl@jalod)
-
- * iofopen.c (_IO_fopen): don't check [redundantly] fp == NULL after
- IO_file_init(&fp->_file).
-
- * iomanip.h (template<class TP> class iapp):
- change ostream to istream.
-
-Tue Jul 12 14:09:02 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * Makefile.in (VERSION): Increase to 0.65.
- * libioP.h (builtinbuf_vtable): Only define #ifdef __cplusplus.
-
- * gen-params (_G_int8_t): Only define if defined(__STDC__),
- because K&R C compilers don't have signed char.
- (_G_int64_t, _G_uint64_t): Only define if defined(__GNUC__)
- because other compilers may not have long long.
-
-Sun Mar 06 13:10:21 1994 H.J. Lu (hjl@nynexst.com)
-
- * floatconv.c (_IO_dtoa ()): fix a small memory leak, set the
- "on_stack" field to be 0 if "result" is not NULL.
-
-Sat Mar 05 13:18:20 1994 H.J. Lu (hjl@nynexst.com)
-
- * floatconv.c (_IO_dtoa ()): if the number of digits of the
- floating point number is more than the previous one, free the
- old string and allocate a new one.
- [Minor optimization to avoid Bcopy. -PB]
-
-Mon Jul 11 10:53:41 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * fileops.c (_IO_file_underflow): 'count' should be unsigned,
- since it contains the return value of read. Reported by
- Teemu Torma <tot@trema.fi>.
-
-Tue Dec 21 13:02:48 1993 H.J. Lu (hjl@nynexst.com)
-
- * floatconv.c (_IO_strtod ()): make "+" and "-" as error.
-
-Sat Jul 9 15:09:21 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- Make sure _IO_FILE::_flags is always initialized correctly, for the
- C functions (fopen, fdopen, popen), and not just the C++ functions.
- * fileops.c (_IO_file_init): Set _flags to CLOSED_FILEBUF_FLAGS.
- * fileops.c (_IO_file_fopen): Remove bogus assignment.
- * filebuf.cc (filebuf constructors): Don't pass CLOSED_FILEBUF_FLAGS
- to streambuf constructor - _IO_file_init does it instead.
- * filebuf.cc (CLOSED_FILEBUF_FLAGS): Removed.
- * iopopen.c (_IO_proc_open): Use _IO_mask_flags.
-
-Thu Jun 30 08:49:53 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * dbz/Makefile.in (mostlyclean): Add target.
-
-Wed Jun 29 09:30:12 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * gen-params: Woops, can't run a C program to determine target
- characteristics. Sigh.
-
-Tue Jun 28 03:11:33 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * gen-params: Add _G_{,u}int{8,16,64}_t, use a short C program to
- determine what all these should be rather than trying to compare
- the MAX numbers in the shell.
-
-Sun Jun 26 21:04:24 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * stdiostream.h, stdiostream.cc (stdiobuf::xsgetn): Removed.
- Too hairy. If we want to optimize it, we should do so in
- filebuf::xsgetn (or rather _IO_file_xsgetn).
-
- * stdiostream.h (class stdiobuf), stdiostream.cc: Fix parameter
- and return types of virtual function to matcher base types (Oops!).
- * streamstream.cc (stdiobuf::xsgetn, stdiobuf::xsputn):
- Optimize to call fread.fwrite directly if !buffered.
- * fileops.c: Fix comment.
-
-Fri Jun 24 11:28:18 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * stdiostream.h (istdiostream, ostdiostream): New classes.
-
- More robust final cleanup.
- * cleanup.c (_IO_register_cleanup): Register _IO_cleanup,
- rather than _IO_flush_all.
- * filedoalloc.c: Update comment.
- * genops.c (_IO_unbuffer_all): New. Makes all files unbuffered.
- * genops.c (_IO_cleanup), libioP.h: New function. Call
- _IO_flush_all, and then _IO_unbuffer_all. This is in case C++
- destructors try to do output *after* _IO_cleanup is called.
-
- Construct standard stdiobufs statically (using type punning).
- * stdstrbufs.c; Unless _STDIO_USES_IOSTREAM declare standard
- stdiobufs (for stdin, stdout, and stderr), using type punning
- (struct _IO_fake_stdiobuf). This avoids constructor-time problems.
- * stdstreams.cc: Remove the declarations of the stdiobufs.
- Instead use the new (fake) ones in stdstrbufs.cc. We no longer
- have to call ios::sync_with_stdio at constructor time.
-
- Preliminary support for new ANSI streambuf::uflow virtual.
- * libioP.h (struct _IO_jump_t): Add __uflow field.
- * genops.c (_IO_default_uflow), libioP.h: New function.
- * fileops.c (_IO_file_jumps), iopopen.c (IO_proc_jumps),
- iovfprintf.c (_IO_helper_jumps), strops.c (_IO_str_jumps),
- streambuf.cc (_IO_streambuf_jumps): Add _IO_default_uflow.
- * genops.c (__uflow): New function.
- (save_for_backup): New function. Some code shared by
- __underflow and __uflow, moved out from the former.
- (_IO_default_uflow): New function.
- * libio.h (_IO_getc): Call __uflow, not __underflow.
-
-Wed Jun 22 20:22:49 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- Make sure that the vtable of a streambuf is always valid,
- which makes ios::rdbuf simpler and faster.
- * gen-params: Add code to determine _G_VTABLE_LABEL_HAS_LENGTH,
- _G_VTABLE_LABEL_PREFIX, _G_VTABLE_LABEL_PREFIX_ID, and
- _G_USING_THUNKS, which describe how virtual function tables are named.
- * stdfiles.c (FILEBUF_LITERAL): Moved to libioP.h.
- * libioP.h (builtinbuf_vtable): New (complicated) declaration.
- * filebuf.cc (filebuf::__new), strstream.cc (SET_STR_JUMPS):
- Initialize vtable to builtinbuf_vtable, not NULL.
- * stdstrbufs.cc: New file. Same as stdfiles.c, except that
- vtable is initialized to builtinbuf_vtable, not NULL.
- * streambuf.h (ios::rdbuf): Can now simplify/optimize, due to
- above changes. Always, just return _strbuf.
- * builtinbuf.h, builtinbuf.cc (builtinbuf::vtable,
- builtinbuf::get_builtin_vtable): Removed. No longer needed.
- * streambuf.h, builtinbuf.cc (ios::_IO_fix_vtable): No longer needed.
- Only defined #ifdef _STREAM_COMPAT, for binary compatibility.
- * Makefile.in: Move stdfiles.o from IO_OBJECTS to STDIO_WRAP_OBJECTS.
- (IOSTREAM_OBJECT): Add stdstrbufs.o.
- * Makefile.in (_G_config.h): Pass $(CXXFLAGS) as part of $(CXX).
-
-Fri Feb 11 11:08:01 1994 SBPM Marc GINGOLD (marc@david.saclay.cea.fr)
-
- * iovfprintf.c (helper_vfprintf): add
- hp->_IO_file_flags = _IO_MAGIC|(_IO_IS_FILEBUF+_IO_NO_READS);
- [This is needed because _IO_vfprintf checks for _IO_UNBUFFERED. -PB]
- [Actually: don't set _IO_IS_FILEBUF. -PB]
-
-Wed Jun 22 13:49:22 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * stdiostream.cc, stdiostream.h (stdiobuf::buffered): New methods.
-
- * iofdopen.c (_IO_fdopen): Various minor improvements.
-
- * iovfscanf.c: Don't return EOF on control_failure.
-
-Tue Dec 21 13:02:48 1993 H.J. Lu (hjl@nynexst.com)
-
- * iovfscanf.c: Enforce the sequence of the conversion specifications.
-
-Fri Jun 17 20:57:22 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * iofdopen.c: Use fcntl to check that requested access mode is
- compatible with existing access mode, and to change the
- O_APPEND file status flag if need be.
-
-Thu Jun 16 17:33:50 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * streambuf.h (ios::init): Initialize all the fields.
- This may be overkill, but the current ANSI working paper requires it.
- * streambuf.h (ios::ios): Reimplement in terms of ios::init.
- * iostream.cc (Non-default constructors istream::istream,
- ostream::ostream, iostream::iostream): Cannot use a mem-initializer,
- because it is ignored if initializing a derived class. Instead,
- call ios::init.
-
-Wed Jun 15 13:35:37 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * stdstreams.cc (ISTREAM_DEF): Fix typo (it's a _fake_istream, not
- a _fake_ostream). Reported by Jason Shirk <jshirk@gomez.intel.com>.
-
- * stdiostream.h, stdiostream.cc (stdiobuf::~stdiobuf): New.
- Call _IO_do_flush.
- * stdiostream.cc (stdiobuf::sync): Call _IO_do_flush rather
- than filebuf::sync (to avoid bad seeks).
-
- * libioP.h (_IO_do_flush): Add missing parentheses.
-
-Fri Jun 3 19:16:57 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * config.shared (CXXFLAGS): Remove -fno-implicit-templates.
-
- * iomanip.h: Add explicit external instantiations.
-
-Wed Jun 1 14:14:44 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * libio.h (struct _IO_FILE_plus): Move definition from here ...
- * libioP.h (struct _IO_FILE_plus): ... to here. Since this
- file is private to the implementation, we can rename the fields
- from the implementor's to the user's name anme space.
- (This avoids a lossage on SCO, whose stdio.h has a #define _file.)
- * iofdopen.c, iofopen.c, stdfiles.c: Fix field references accordingly.
- * iopopen.c (struct_IO_proc_file): Rename fields from
- implementor's name space to user's, and update usages.
- * streambuf.h (streambuf::_vtable): Re-implement to not need
- struct _IO_FILE_plus.
- * strfile.h (struct _IO_strfile_): Likewise.
-
-Wed Jun 1 13:57:48 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * config.shared (CXXFLAGS): Use -fno-implicit-templates instead of
- -fexternal-templates.
-
-Tue May 31 08:49:28 1994 Mike Stump (mrs@cygnus.com)
-
- * genops.c, iofclose.c, iofdopen.c, iofopen.c, iopopen.c: Be
- consistent about protecting #include <stdlib.h>.
-
- * ioputs.c: Add #include <string.h>, to avoid warning on alpha.
-
- * iofdopen.c: Add #include <stdlib.h>, so that malloc works on
- machines where sizeof(int) != sizeof(void *).
-
-Mon May 30 17:26:49 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * pfstream.cc (ipfstream::ipfstream, opfstream::opfstream):
- Reverse sense of test of return value of procbuf::open.
- (It returns NULL on failure.)
-
- * filedoalloc.c (_IO_file_doallocate): Remove dead code for
- USE_MALLOC_BUF. Add code to return EOF if ALLOC_BUF fails.
-
-Sat May 28 13:47:47 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * iomanip.cc: Explicitly instantiate smanip<int> and
- smanip<ios::fmtflags>.
-
-Wed May 25 16:04:12 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * strfile.h: Use __P instead of _PARAMS.
-
-Fri May 20 11:42:17 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * libio.h: Rename _PARAMS macro to __P for better glibc and BSD
- compatibility. (Also define _PARAMS for backwards compatibility.)
- * cleanup.c, iolibio.h, ioperror.c, iovfprintf.c, iovfscanf.c,
- libioP.h: Use __P instead of _PARAMS.
- * iostdio.h: Use __P instead of _ARGS.
-
- * fileops.c (_IO_file_read): Minor stylistic tweak. (It is
- preferable to test errno *after* the error return.)
-
-Fri May 13 15:25:36 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * iostream.*: Add insertor and extractor for bool (just pretend
- it's an int).
-
-Fri May 13 14:12:03 1994 Mike Stump (mrs@cygnus.com)
-
- * gen-params: Check for builtin bool support.
-
-Wed May 11 00:48:35 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- Make libg++ build with gcc -ansi -pedantic-errors
- * gen-params: #ifdef __STRICT_ANSI__, #define _G_NO_NRV.
- * pfstream.cc (ipfstream::ipfstream): Wrap use of variable-size
- array in #ifndef __STRICT_ANSI__.
-
-Fri May 6 12:42:21 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * Makefile.in (VERSION): Increase to 0.64.
-
- * isgetline.cc (istream::getline): The delimiter should *not*
- be included in the gcount().
-
- * filedoalloc.c: #include <stdlib.h> (If __STDC__) to get malloc.
- * iostream.h (ostream::put): Remove overloaded versions, to match
- new working paper. (Actually just put inside _STREAM_COMPAT, for now.)
-
-Tue May 3 14:14:57 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * genops.c (_IO_default_finish): Make robust when called
- multiple times on the same _IO_FILE*. (One way this can
- happen is by the builtinbuf destructor being followed by the
- streambuf destructor.)
-
-Mon May 2 13:55:26 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * gen-params: Actually determine wint_t rather than depending on
- cpp to provide it or defaulting to the underlying type for
- wchar_t.
-
-Sat Apr 30 14:47:30 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * gen-params: Add _G_wint_t, allow __*_TYPE__ to override values
- at compile time, fix definition of _G_ARGS.
-
-Fri Apr 29 16:55:37 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * libio.h: Remove #pragma interface. (There is no implementation.)
-
-Mon Mar 28 14:22:26 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * iostream.cc (ostream::operator<<(double)): Add/fix support
- for printing '+' when ios::showpos is set.
- (Fixes bug reported by Doug Moore <dougm@cs.rice.edu>.)
- * iostream.cc (istream::read): Set eofbit as well as failbit on eof.
- * iostream.cc (ostream::operator<<(int)): Fix conversion
- to unsigned (used to lose on INT_MIN).
- * iostream.cc (ostream::operator<<(long)): Use (unsigned long),
- rather than (unsigned) for temporary.
-
- * config.shared, Makefile.in: Remove definitions and uses
- of XTRAFLAGS. It is no longer needed, since it is
- now implied by the -B flag.
-
-Fri Mar 25 00:31:22 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * builtinbuf.h: Add put /**/ around comment on trailing #endif.
-
- * Makefile.in (c++clean): Make clean in tests subdir, too.
-
-Wed Mar 23 16:42:09 1994 Doug Evans (dje@canuck.cygnus.com)
-
- * configure.in: Remove Makefile.tem before creating it.
- Needed when configuring from read-only source trees.
-
-Wed Mar 16 14:06:42 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * stdstreams.cc: Fix so that stdiobuf are used for cin/cout/cerr,
- unless _STDIO_USES_IOSTREAM is defined.
- * filebuf.cc (filebuf::setbuf): Fix confusion about return
- value from _IO_file_setbuf.
-
-Sun Mar 13 00:54:12 1994 Paul Eggert (eggert@twinsun.com)
-
- * config.shared: Ensure that `all' precedes `.PHONY';
- BSDI 1.1 needs this.
-
-Sat Mar 12 03:58:00 1994 Paul Eggert (eggert@twinsun.com)
-
- * config.shared: Output a definition of INSTALL that uses
- $${rootme}, not ${rootme}. Most `make's don't care, but BSDI
- 1.1 `make' does.
-
-Fri Mar 4 17:33:01 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * iopopen.c: #define _POSIX_SOURCE.
- * isgetline.c (istream::getline): Various fixes.
-
-Thu Mar 3 17:58:20 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * iostream.cc (write_int): Fix test for when to add initial '0'
- when ios::oct and ios::showbase are set.
- For hex, showbase adds initial 0x (or 0X) regardless of val==0.
- Bugs reported by Phil Roth <proth@cs.uiuc.edu>.
-
-Mon Feb 21 13:18:20 1994 H.J. Lu (hjl@nynexst.com)
-
- * libio.h (_IO_PENDING_OUTPUT_COUNT(_fp)): return the
- pending output count in _fp.
-
-Fri Feb 25 09:26:57 1994 Ian Lance Taylor (ian@cygnus.com)
-
- * gen-params: For HAVE_SYS_WAIT, compile dummy.c, not dummy.C.
-
-Tue Feb 22 11:19:09 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * streambuf.h, genops.c, libioP.h: Rename references to
- _IO_FILE fields other_gbase => _IO_save_base,
- _aux_limit => _IO_backup_base, and _other_egptr => _IO_save_end.
- * libio.h: Remove no-longer needed macros _other_gbase,
- _aux_limit, and _other_egptr.
- * genops.c (__underflow, _IO_default_finishh, _IO_unsave_markers):
- Check _IO_save_base for NULL before FREEing it or calling
- _IO_free_backup_area.
-
-Thu Feb 17 15:26:59 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * gen-params: Improve deduction of _G_uint32 and _G_int32.
- Should now work for 16-bit, 32-bit, or 64-bit targets.
- * gen-params: Check for sys/wait.h using ${CC}, since it's
- now used in a C file, not a C++ file.
- * floatconv.c: Typedef _G_uint32_t as unsigned32, and use
- unsigned32 in place of unsigned long. (Needed for Alpha.)
-
-Tue Feb 8 13:40:15 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * fileops.c (_IO_file_close_it): Simplify by using _IO_do_flush.
- * fileops.c (_IO_file_finish): Don't call _IO_file_close_it -
- do it inline. Call _IO_do_flush even if _IO_DELETE_DONT_CLOSE.
- * fileops.c (_IO_file_attach): Set _IO_DELETE_DONT_CLOSE.
- * genops.c (_IO_flush_all): Only call overflow if there is
- something to write.
- * iofclose.c (_IO_fclose): Check that magic number is correct,
- and clear it when done. Avoids crashing some buggy applications.
- * iogetline.c (_IO_getline): Don't gratuitously increment old_len.
- * iogets.c (_IO_gets): Take care to get required ANSi semantics.
-
-Sun Feb 6 19:50:39 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * iomanip.cc: Explicitly instantiate operator<< and >>.
-
-Fri Feb 4 12:28:22 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * config.shared (CXXFLAGS): Use -fexternal-templates.
-
- * iomanip.h: Uncomment #pragma interface.
-
-Thu Jan 20 13:48:40 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- If no characters are read by fgets, ANSI C doesn't allow '\0' to
- be written to the buffer, but it is required by ANSI C++
- for istream::get and istream::getline. Both use _IO_getline ...
- * iogetline.c (_IO_getline): Don't write a '\0' at the end
- of the read data. The input buffer length does not include
- space for a '\0'.
- * iofgets.c, iogets.c: Change appropriately.
- Also check for _IO_ERR_SEEN, as required by ANSI.
- * isgetline.cc: Update accordingly.
-
-Mon Jan 17 13:24:26 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * Makefile.in (c++clean): Added target for compiler testing
- (i.e. make c++clean all).
-
-Mon Jan 10 11:20:42 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * libio.h (_IO_putc): Add parentheses.
- Patch from Rik Faith <faith@cs.unc.edu>.
-
-Tue Jan 4 01:32:28 1993 Hongjiu Lu (hjl@nynexst.com)
-
- * genops.c (_IO_default_xsputn):
- (_IO_default_xsgetn):
- * ioignore.c: change "_IO_size_t count" to
- "_IO_ssize_t count".
- * iogetline.c: change "_IO_size_t len" to
- "_IO_ssize_t len".
-
-Mon Dec 20 00:31:21 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * config.shared (CXXINCLUDES): Fix quoting of $(NOSTDINC).
-
-Sun Dec 19 21:03:45 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * Makefile.in (VERSION): Increase to 0.63.
-
-Fri Dec 17 13:02:44 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * iofread.c (_IO_fread): Return 0 if either size or count is 0.
- * iofwrite.c (_IO_fwrite): Return 0 if either size or count is 0.
- (This is consistent with fread, and most implementations, but not
- with a literal reading of the ANSI spec.)
- * iovfscanf.c (_IO_vfscanf): If got EOF while skipping spaces,
- set seen_eof and break (instead of returning).
- * sbscan.cc (streambuf::vscan): Set error state before returning.
- * streambuf.h: Add a forward declarations for class istream
- to work around a g++ vtable name mangling bug. (Patch from
- harry@pdsrc.hilco.com via Jeffrey A Law <law@snake.cs.utah.edu>.)
- * NEWS: New file.
-
-Sat Dec 11 16:21:08 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * iovfprintf.c (struct helper_file, _IO_helper_overflow,
- helper_vfprintf, _IO_helper_jumps): New structs and functions.
- (_IO_vfprintf): Use helper_vfprintf to make printing to
- unbuffered files more efficient.
- * genops.c (_IO_default_underflow), libioP.h: New function.
-
- * iovsscanf.c (_IO_vsscanf): The input string's length marks
- its logical end-of-file.
-
-Wed Dec 8 13:20:46 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * indstream.cc (indirectbuf::sync()): Don't crash if get_stream()
- or put_stream() are NULL; sync() both streams even if error.
-
-Sun Dec 5 19:24:29 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
-
- * iostreamP.h (convert_to_seekflags): Use _IO_seek_set instead of
- 0 inside the conditial expressions.
-
- * iofsetpos.c (_IO_fsetpos): Delete unused var `pos'.
-
-Sat Dec 4 15:57:26 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * filedoalloc.c (_IO_file_doallocate): Change type of couldbetty
- to int, and type of size to _IO_size_t, instead of size_t.
- (Change needed for Ultrix, which incorrectly deliberately doesn't
- define size_t in <sys/types.h> if _POSIX_SOURCE is defined.)
-
-Thu Dec 2 22:43:03 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * fileops.c (_IO_file_finish): Remove redundant call to _IO_un_link.
- * iofclose.c (_IO_fclose): Don't call fp->_jumps->__close; it's
- too low-level. Instead call _IO_file_close_it.
- * dbz/Makefile.in (rclean, distclean): Add some missing files.
-
-Wed Dec 1 13:19:14 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * config/hpux.mt (MATH_H_INLINES): No longer define.
- Patch from Jeffrey A Law <law@snake.cs.utah.edu>.
-
-Fri Nov 26 13:28:36 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * config.shared (CINCLUDES): Define default if libg++.
- * iofread.c: Use _IO_sgetn.c.
- * iolibio.h (_IO_clearerr): Fix typo.
- * genops.c (_IO_seekmark): Return 0 on success.
- * floactconv.c (Binit): Change to static.
- * iofclose.c (_IO_fclose): Check if file is _IO_stdin, _IO_stdout,
- or _IO_stderr; if so don't try to free it. Fix from hjl@nynexst.com.
-
- * genops.c (_IO_default_sync), libioP.h: New function.
- * libioP.h (_IO_default_close): Use _IO_default_sync -same interface.
-
- * Makefile.in: Increase version to 0.62.
- * iopopen.c (_IO_proc_close): Use waitpid (available in libibarty,
- if needed), rather than wait. Don't block/ignore SIGINT etc,
- as this is counter to Posix.2.
- * iopopen.c: Chain open proc_files, and have the child close
- the ones that are open (as required by Posix.2).
-
- * fstream.h (fstreambase::rdbuf), strstream.h (strstreambase
- ::rdbuf): Call ios::rdbuf() instead of getting _strbuf directly.
-
- * sbscan.cc (streambuf::vscan): Comment out duplicate default arg.
- * floatconv.c: Recognize Alpha and i860 as little-endian.
- * streambuf.cc: Return two bogus value returns from void functions.
- * iolibio.h, iofwrite.c: Fix buffer type to (const void*).
- * libio.h: Predefine of struct _IO_FILE to help non-g++-compilers.
- * libioP.h, pfstream.cc, stdfiles.c, iovfscanf.c: Cleanup syntax junk.
- * stdstreams.cc: Minor simplification.
- * streambuf.h, builtinbuf.cc: Add non-const ios::_IO_fix_vtable()
- for temporary binary compatibility.
-
- * filedoalloc.c, fileops.c: Add _POSIX_SOURCE.
- * fileops.c, iofopen.c, iofputs.c, iostream.cc, strops.c,
- strstream.cc, genops.c: Add some missing #includes.
- * iofopen.c, iofdopen.c: Return NULL if malloc fails.
- * iovfscanf.c: Fix return type in strtol prototype.
- * fwrite.c: Remove bogus file.
-
-Wed Nov 17 14:09:42 1993 Per Bothner (bothner@cygnus.com)
-
- * builtinbuf.cc (ios::_IO_fix_vtable), streambuf.h: Make method
- const, to reduce problems with -Wcast-qual.
-
-Tue Nov 16 19:30:42 1993 david d `zoo' zuhn (zoo@rtl.cygnus.com)
-
- * config.shared (CXXINCLUDE): use ${} instead of $() for NOSTDINC
-
-Tue Nov 16 14:15:45 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * iopopen.c (_IO_proc_close): Re-structure to avoid
- declarations after statements.
- * floatconv.c: If not __STDC__, #define DBL_MANT_DIG.
- * config/isc.mt (G_CONFIG_ARGS): Remove bogus spaces.
- Patch from David A. Avery <daa@nic.cerf.net>.
-
-Tue Nov 16 15:58:31 1993 Mark Eichin (eichin@cygnus.com)
-
- * Makefile.in (_G_config.h): explicitly use $(SHELL) to run
- gen-params, since we know it is a script (we're explicitly looking
- in ${srcdir} for it) and /bin/sh might not be good enough.
-
-Mon Nov 15 13:26:22 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * builtinbuf.cc: Don't depend on initialization of static
- variable builtinbuf::vtable, since that might happen after
- we need it (for a static constructor). Instead, initialize
- it when needed by inlining the code from get_builtin_vtable
- into ios::_IO_fix_vtable().
-
- * floatconv.c: Avoid using #elif, which some C compilers lack.
- * iogetline.c, libioP.h: Make char parameter be int, to avoid
- some default promotion anomalies.
-
-Fri Nov 5 11:49:46 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * config.shared (do-clean-dvi): Remove TeX work files.
- * iopopen.c (extern _IO_fork): Don't use parameter type void.
- * strops.c (_IO_str_init_static): Clear the allocate_buffer
- function pointer, to mark the strfile as being static.
- Bug fix from Mike Raisbeck <mike@pudding.rtr.COM>.
-
-Thu Nov 4 10:44:24 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * filebuf.cc (filebuf:): Use sseekoff rather than seekoff
- (which loses if vtable pointer is NULL).
-
- * iostream.cc (ostream::operator<<(long long n)): Fix thinko.
-
- * Makefile.in (VERSION): Increase to 0.60.
- * Makefile.in (IO_OBJECTS): Added iopopen.o.
- * config.shared (DISTCLEAN): Also remove Make.pack.
- * config.shared (CXXINCLUDES): Add $(NOSTDINC).
-
- * config.shared (INSTALL): Fix so it ues the correct install.sh
- whether $srcdir is absolute or relative.
-
- * floatconv.c (DBL_MAX_10_EXP): Fix default value.
-
-Wed Nov 3 10:20:49 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * gen-params: Make more robust to allow random junk (NeXT
- has spaces) before typedefs.
-
- * fileops.c (_IO_file_overflow): Reduce code duplication.
- * Makefile.in (IO_OBJECTS): Remove ioputs.o.
-
- * iovfscanf.c, libio.h: Extra parameter to _IO_vfscanf,
- for optionally setting an error indication..
- * iofscanf.c, ioscanf.c, iofscanf.c, iovsscanf.c: Fix calls to
- _IO_vfscanf to pass an extra NULL.
- * sbscan.cc (streambuf::vscan): If passed an extra stream,
- set its error state (using new _IO_vfscanf parameter.
-
- * filedoalloc.c, fileops.c, genops.c, iogetline.c, ioignore.c,
- libio.h, libioP.h, streambuf.cc streambuf.h, strfile.h, strops.c,
- strstream.cc: Replace macros (_base, _ebuf, _eback, _gptr, _egptr,
- _pbase, _pptr, _epptr) by field names (_IO_buf_base, _IO_buf_end,
- _IO_read_base, _IO_read_pre, IO_read_end, _IO_write_base,
- _IO_write_ptr, _IO_write_end).
- * libio.h: Remove the old macros (which fixes a conflict.
-
-Mon Nov 1 15:22:12 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * iostream.cc: Use _IO_sputn instead of sputn. _IO_sputn does
- not require a vtable pointer, and is also slightly faster.
-
- * builtinbuf.{h,cc} (builtinbuf::setbuf): Fix return and
- parameter types.
-
-Mon Oct 25 12:56:33 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- Kludge to make sure _IO_FILE buffers get flushed before exit.
- * dbz/dbzmain.c, dbz/fake.c, dbz/byteflip.c:
- Invoke DBZ_FINISH macro (if defined) before (normal) exits.
- * dbz/Makefile.in (CFLAGS): Define DBZ_FINISH to call _IO_flush_all.
-
-Sat Oct 23 22:10:53 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * Makefile.in (VERSION): Set to 0.60 for libg++ release.
- * fileops.c (_IO_file_attach): Set _offset to _IO_pos_BAD.
- * iostream.cc (ostream::flush): Fix thinkp.
- * editbuf.cc, isgetsb.cc, isscan.cc, osform.cc, parsestream.cc,
- pfstream.cc, sbform.cc, sbscan.cc, stdstreams.cc, stream.cc:
- Replace #include "ioprivate.h" by #include "libioP.h" (and
- sometimes stdarg.h, stdlib.h and/or string.h).
- * ioprivate.h: Removed.
-
-
-Thu Oct 21 19:24:02 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * PlotFile.h, SFile.h, editbuf.cc, editbuf.h, filebuf.cc,
- fstream.cc, fstream.h, indstream.cc, indstream.h, iomanip.cc,
- iomanip.h, ioprivate.h, iostream.cc, iostream.h, isgetline.cc,
- isgetsb.cc, parsestream.cc, parsestream.h, pfstream.cc,
- pfstream.h, procbuf.cc, procbuf.h, stdiostream.cc, stdiostream.h,
- stdstreams.cc, streambuf.cc, streambuf.h, strstream.cc,
- strstream.h: Remove old (duplicate) copyright notices.
-
- * iostream.cc: Fix calls to sync() to be safe in the presence
- of vtable-less streambufs.
-
-Wed Oct 20 15:22:04 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * streambuf.h (streambuf::underflow, streambuf::overflow):
- Don't make virtual functions pure.
- * streambuf.cc (streambuf::underflow, streambuf::overflow):
- Default definitions (return EOF).
- * fstream.h: Add new (int fd, char* buf, int len) constructors.
- These are deprecated, but added for AT&T compatibility.
- * fstream.cc fstreambase::fstreambase(int fd, char *p, int l): New.
-
-Thu Oct 14 14:57:01 1993 david d `zoo' zuhn (zoo@rtl.cygnus.com)
-
- * configure.in: use 'mv -f' instead of 'mv'
-
-Tue Oct 12 05:01:44 1993 Mike Stump (mrs@cygnus.com)
-
- * floatconv.c: Fix typo, change __STDC to __STDC__.
-
-Mon Oct 11 17:03:12 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * cleanup.c: It should be #if _G_HAVE_ATEXIT, not #ifdef.
-
- * floatconv.c, iostrerror.c, iovfprintf.c, iovfscanf.c, libioP.h:
- Bunch of fixes to allow use of non-ANSI (K&R) C compilers.
-
- * Makefile.in (iostream.list): Use CC=$(CXX) to force use of gcc.
- * README: New file.
-
-Fri Oct 8 16:19:58 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * Makefile.in: Move ioungetc.o from STDIO_WRAP_OBJECTS to
- IO_OBJECTS (since it is needed for iovfscanf.c).
- * iostrerror.c: Add declaration of strerror.
-
-Thu Oct 7 12:02:28 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * cleanup.c: New file, to cause flushing at exit.
- * filedoalloc.c: Cause flushing on exit.
- * Makefile.in (OSPRIM_OBJECTS): Add cleanup.o.
- * gen-params: Check for atexit.
-
-Tue Oct 5 19:11:14 1993 Mike Stump (mrs@cygnus.com)
-
- * ioperror.c (_IO_strerror): Add missing ()s in _PARAMS usage.
-
-Tue Oct 5 10:33:37 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * iofprintf.c, iofscanf.c, ioprintf.c, ioscanf.c, iosprintf.c,
- iosscanf.c: Remove bogus semi-colon after va_dcl.
- * ioperror.c: Fix typos in declaration.
-
-Mon Oct 4 17:12:22 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * configure.in (CLEAN): Define (as _G_config.h *.a).
-
- * fileops.c (_IO_file_read): Don't assume EINTR is defined.
- * iosetbuf.c: Replace by generalized ...
- * iosetbuffer.c: ... variant, derived from BSD.
- * Makefile.in (STDIO_WRAP_OBJECTS): Change correspondingly.
- * iosetvbuf.c (iosetvbuf): Minor ANSI tweak.
- * iostdio.h (setbuf, setlinebuf): New #defines.
- * iolibio.h (_IO_setbuf, _IO_setlinebuf): (Re-)define as macros.
- * Makefile.in (LIBIO_OBJECTS): New macro.
-
-Tue Sep 28 14:15:52 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * libioP.h (_IO_proc_open, _IO_proc_close): Add missing return types.
- * procbuf.cc: Belated fixes.
-
-Mon Sep 27 14:04:47 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * Makefile.in: List new files. Add STDIO_WRAP_OBJECTS macro.
- * floatconv.c (d2b): Use Exp_msk11 instead of Exp_msk1.
- * iofgetpos.c (_IO_fgetpos), iofsetpos.c (_IO_fsetpos): Clean up.
- * iolibio.h: New file. Declarations of _IO_foo, for most foo
- where foo is a stdio function. (Remove these from libio.h.)
- * iostream.h (istream::istreambuf, ostream::ostreambuf): Move
- obsolete functions inside #ifdef _STREAM_COMPAT.
- * libio.h, libioP.h, streambuf.h, parsestream.h, stdiostream.h:
- Use _IO_fpos_t rather than _IO_pos_t.
- * iopopen.c: New file type, for pipe (popen-like) streams.
- * procbuf.cc: Now just a C++ wrapper for the files in iopopen.c.
- * streambuf.h (ios::unsetf): Return complete old value of flags.
- * iogets.c (_IO_gets(), ioungetc.c (_IO_ungetc), ioperror.c
- (_IO_perror), iostrerror.c (_IO_strerror): New files and
- functions, for stdio implementation.
- * iostdio.h: Add declarations for various recently-added functions.
-
-Sun Sep 12 14:24:55 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * streambuf.h (ios::showpos):: Fix typo.
-
-Fri Aug 27 12:05:47 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * iopadn.c (_IO_padn): Change to return count of chars written.
- * outfloat.c, iovfprintf.c: Change for new _IO_padn interface.
- * iostream.cc (ostream::operator<<): Make sure to set badbit
- on a failure (many places). Use _IO_padn more.
- * iostream.cc (ostream& ostream::operator<<(const void *p): Move to
- * osform.cc: ... here, to reduce linking-in-the-world syndrome.
- * osform.cc: Use rdbuf(), instead of _strbuf directly.
-
- * genops.c (_IO_sgetn), libio.h: New function.
- * streambuf.h (streambuf.h::sgetn): Use _IO_sgetn.
- * SFile.cc (SFile::operator[]): Use sseekoff, not seekoff.
-
-Thu Aug 26 10:16:31 1993 david d `zoo' zuhn (zoo@rtl.cygnus.com)
-
- * config.shared (SUBDIRS): only recurse if the directory is configured
-
-Wed Aug 25 12:56:12 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * config/{hpux.mt, isc.mt, sco4.mt}:
- Moved from ../libg++/config (since they affect _G_config.h).
- * configure.in: Set target_make_frag to one of the above files.
-
-Fri Aug 20 00:53:14 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * iofopen.c (iofopen): Fix type passed to _IO_un_link().
- * Makefile.in (_G_config.h): Pass $CC (not $CXX) as CC.
-
- * configure.in (configdirs): Add dbz and stdio.
- * fileops.c (_IO_file_seekoff): Convert more old functionality.
- * iofdopen.c: Use mode parameter to set _flags.
- * iofscanf.c, ioputs.c, ioscanf.c, iosprintf.c: New files.
- * Makefile.in (IO_OBJECTS): Added new objects.
- * iostdio.h: Add feof. fscanf, puts, sprintf, vsprintf.
- * libio.h: Add _IO_vprintf macro.
- * iofopen.c: Invoke _IO_un_link if failure.
- * iovsprintf.c: Write terminating NUL.
-
- * libioP.h: Add COERCE_FILE macro (by default does nothing).
- * iofclose.c, iofflush.c, iofgets.c, iofprintf.c, iofputs.c,
- iofread.c, ioftell.c, iofwrite.c, iosetbuf.c, iosetvbuf.c:
- Invoke COERCE_FILE macro.
- * ioftell.c: Use _IO_seekoff.
-
-Wed Aug 18 22:49:56 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * sbform.cc (streambuf::form), sbscan.cc (streambuf::scan):
- Remove cast to _IO_va_list. (Loses if array type.)
-
- * libio.h: Handle _IO_va_list for systems that need <stdarg.h>.
- * floatconv.h: Fix typo (reported by H.J.Lu).
-
-Wed Aug 18 19:34:04 1993 david d `zoo' zuhn (zoo@rtl.cygnus.com)
-
- * configure.in (INSTALLDIR): handle native vs. cross case
-
- * Makefile.in (install): don't use $TARGETLIB, set INSTALLDIR to
- $(libdir)
-
-Wed Aug 18 12:10:03 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * Makefile.in: Rename iostream-files to iostream.list.
- * configure.in: Add iostream.list to MOSTLYCLEAN.
-
-Tue Aug 17 18:56:59 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * Makefile.in: Depend on _G_config.h where appropriate.
- * config.shared (CXXINCLUDES): If doing libg++, search ../libio.
-
-Tue Aug 17 17:34:24 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- New directory. Based on old libg++/iostream code,
- but extensively re-written.
diff --git a/contrib/libstdc++/libio/Makefile.am b/contrib/libstdc++/libio/Makefile.am
deleted file mode 100644
index dbba6ff51d75..000000000000
--- a/contrib/libstdc++/libio/Makefile.am
+++ /dev/null
@@ -1,67 +0,0 @@
-## Makefile for the libio subdirectory of the GNU C++ Standard library.
-##
-## Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
-##
-## This file is part of the libstdc++ version 3 distribution.
-## Process this file with automake to produce Makefile.in.
-
-## This file is part of the GNU ISO C++ Library. This library is free
-## software; you can redistribute it and/or modify it under the
-## terms of the GNU General Public License as published by the
-## Free Software Foundation; either version 2, or (at your option)
-## any later version.
-
-## This library is distributed in the hope that it will be useful,
-## but WITHOUT ANY WARRANTY; without even the implied warranty of
-## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-## GNU General Public License for more details.
-
-## You should have received a copy of the GNU General Public License along
-## with this library; see the file COPYING. If not, write to the Free
-## Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-## USA.
-
-AUTOMAKE_OPTIONS = 1.3 cygnus
-
-mkinstalldirs = $(SHELL) $(toplevel_srcdir)/mkinstalldirs
-
-if GLIBCPP_BUILD_LIBIO
-noinst_LTLIBRARIES = libio.la
-else
-noinst_LTLIBRARIES =
-endif
-
-# Use common includes from acinclude.m4/GLIBCPP_EXPORT_INCLUDES
-GLIBCPP_INCLUDES = @GLIBCPP_INCLUDES@
-TOPLEVEL_INCLUDES = @TOPLEVEL_INCLUDES@
-LIBIO_INCLUDES = @LIBIO_INCLUDES@
-
-INCLUDES = \
- -nostdinc++ \
- $(GLIBCPP_INCLUDES) $(LIBIO_INCLUDES) $(TOPLEVEL_INCLUDES)
-
-libio_headers = \
- libio.h libioP.h iolibio.h
-
-if GLIBCPP_NEED_LIBIO
-LIBIO_SRCS = \
- filedoalloc.c genops.c fileops.c stdfiles.c c_codecvt.c \
- iofclose.c iofopen.c
-else
-LIBIO_SRCS =
-endif
-
-if GLIBCPP_NEED_WLIBIO
-LIBIO_WSRCS = \
- wfiledoalloc.c wfileops.c wgenops.c iofwide.c
-else
-LIBIO_WSRCS =
-endif
-
-
-EXTRA_DIST = iostreamP.h
-
-libio_la_SOURCES = $(LIBIO_SRCS) $(LIBIO_WSRCS)
-
-
-AM_CFLAGS = -D_GNU_SOURCE @DEBUG_FLAGS@
diff --git a/contrib/libstdc++/libio/Makefile.in b/contrib/libstdc++/libio/Makefile.in
deleted file mode 100644
index 085c1afce8a2..000000000000
--- a/contrib/libstdc++/libio/Makefile.in
+++ /dev/null
@@ -1,426 +0,0 @@
-# Makefile.in generated automatically by automake 1.4-p5 from Makefile.am
-
-# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-
-SHELL = @SHELL@
-
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
-VPATH = @srcdir@
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-
-bindir = @bindir@
-sbindir = @sbindir@
-libexecdir = @libexecdir@
-datadir = @datadir@
-sysconfdir = @sysconfdir@
-sharedstatedir = @sharedstatedir@
-localstatedir = @localstatedir@
-libdir = @libdir@
-infodir = @infodir@
-mandir = @mandir@
-includedir = @includedir@
-oldincludedir = /usr/include
-
-DESTDIR =
-
-pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-
-top_builddir = ..
-
-ACLOCAL = @ACLOCAL@
-AUTOCONF = @AUTOCONF@
-AUTOMAKE = @AUTOMAKE@
-AUTOHEADER = @AUTOHEADER@
-
-INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-transform = @program_transform_name@
-
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_alias = @build_alias@
-build_triplet = @build@
-host_alias = @host_alias@
-host_triplet = @host@
-target_alias = @target_alias@
-target_triplet = @target@
-AR = @AR@
-AS = @AS@
-ATOMICITY_INC_SRCDIR = @ATOMICITY_INC_SRCDIR@
-AWK = @AWK@
-BASIC_FILE_H = @BASIC_FILE_H@
-BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@
-CATALOGS = @CATALOGS@
-CATOBJEXT = @CATOBJEXT@
-CC = @CC@
-CCODECVT_C = @CCODECVT_C@
-CCODECVT_H = @CCODECVT_H@
-CLOCALE_H = @CLOCALE_H@
-CMESSAGES_H = @CMESSAGES_H@
-CPP = @CPP@
-CPU_LIMITS_INC_SRCDIR = @CPU_LIMITS_INC_SRCDIR@
-CSHADOW_FLAGS = @CSHADOW_FLAGS@
-CSTDIO_H = @CSTDIO_H@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-C_INCLUDE_DIR = @C_INCLUDE_DIR@
-DATADIRNAME = @DATADIRNAME@
-DEBUG_FLAGS = @DEBUG_FLAGS@
-DLLTOOL = @DLLTOOL@
-EXEEXT = @EXEEXT@
-EXTRA_CXX_FLAGS = @EXTRA_CXX_FLAGS@
-GCJ = @GCJ@
-GCJFLAGS = @GCJFLAGS@
-GENCAT = @GENCAT@
-GLIBC21 = @GLIBC21@
-GLIBCPP_IS_CROSS_COMPILING = @GLIBCPP_IS_CROSS_COMPILING@
-GMOFILES = @GMOFILES@
-GMSGFMT = @GMSGFMT@
-INSTOBJEXT = @INSTOBJEXT@
-INTLBISON = @INTLBISON@
-INTLLIBS = @INTLLIBS@
-INTLOBJS = @INTLOBJS@
-INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
-LIBICONV = @LIBICONV@
-LIBMATHOBJS = @LIBMATHOBJS@
-LIBMATH_INCLUDES = @LIBMATH_INCLUDES@
-LIBSUPCXX_INCLUDES = @LIBSUPCXX_INCLUDES@
-LIBSUPCXX_PICFLAGS = @LIBSUPCXX_PICFLAGS@
-LIBTOOL = @LIBTOOL@
-LIBUNWIND_FLAG = @LIBUNWIND_FLAG@
-LN_S = @LN_S@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MKINSTALLDIRS = @MKINSTALLDIRS@
-MSGFMT = @MSGFMT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OPTIMIZE_CXXFLAGS = @OPTIMIZE_CXXFLAGS@
-OPT_LDFLAGS = @OPT_LDFLAGS@
-OS_INC_SRCDIR = @OS_INC_SRCDIR@
-PACKAGE = @PACKAGE@
-POFILES = @POFILES@
-POSUB = @POSUB@
-RANLIB = @RANLIB@
-SECTION_FLAGS = @SECTION_FLAGS@
-SECTION_LDFLAGS = @SECTION_LDFLAGS@
-STRIP = @STRIP@
-USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
-USE_NLS = @USE_NLS@
-VERSION = @VERSION@
-WARN_FLAGS = @WARN_FLAGS@
-WERROR = @WERROR@
-check_msgfmt = @check_msgfmt@
-enable_shared = @enable_shared@
-enable_static = @enable_static@
-glibcpp_CXX = @glibcpp_CXX@
-glibcpp_MOFILES = @glibcpp_MOFILES@
-glibcpp_POFILES = @glibcpp_POFILES@
-glibcpp_basedir = @glibcpp_basedir@
-glibcpp_builddir = @glibcpp_builddir@
-glibcpp_localedir = @glibcpp_localedir@
-glibcpp_prefixdir = @glibcpp_prefixdir@
-glibcpp_srcdir = @glibcpp_srcdir@
-glibcpp_thread_h = @glibcpp_thread_h@
-glibcpp_toolexecdir = @glibcpp_toolexecdir@
-glibcpp_toolexeclibdir = @glibcpp_toolexeclibdir@
-gxx_include_dir = @gxx_include_dir@
-ifGNUmake = @ifGNUmake@
-libio_la = @libio_la@
-libtool_VERSION = @libtool_VERSION@
-release_VERSION = @release_VERSION@
-toplevel_srcdir = @toplevel_srcdir@
-
-AUTOMAKE_OPTIONS = 1.3 cygnus
-
-mkinstalldirs = $(SHELL) $(toplevel_srcdir)/mkinstalldirs
-@GLIBCPP_BUILD_LIBIO_TRUE@noinst_LTLIBRARIES = @GLIBCPP_BUILD_LIBIO_TRUE@libio.la
-@GLIBCPP_BUILD_LIBIO_FALSE@noinst_LTLIBRARIES =
-
-# Use common includes from acinclude.m4/GLIBCPP_EXPORT_INCLUDES
-GLIBCPP_INCLUDES = @GLIBCPP_INCLUDES@
-TOPLEVEL_INCLUDES = @TOPLEVEL_INCLUDES@
-LIBIO_INCLUDES = @LIBIO_INCLUDES@
-
-INCLUDES = \
- -nostdinc++ \
- $(GLIBCPP_INCLUDES) $(LIBIO_INCLUDES) $(TOPLEVEL_INCLUDES)
-
-
-libio_headers = \
- libio.h libioP.h iolibio.h
-
-@GLIBCPP_NEED_LIBIO_TRUE@LIBIO_SRCS = @GLIBCPP_NEED_LIBIO_TRUE@\
-@GLIBCPP_NEED_LIBIO_TRUE@ filedoalloc.c genops.c fileops.c stdfiles.c c_codecvt.c \
-@GLIBCPP_NEED_LIBIO_TRUE@ iofclose.c iofopen.c
-@GLIBCPP_NEED_LIBIO_FALSE@LIBIO_SRCS =
-@GLIBCPP_NEED_WLIBIO_TRUE@LIBIO_WSRCS = @GLIBCPP_NEED_WLIBIO_TRUE@\
-@GLIBCPP_NEED_WLIBIO_TRUE@ wfiledoalloc.c wfileops.c wgenops.c iofwide.c
-@GLIBCPP_NEED_WLIBIO_FALSE@LIBIO_WSRCS =
-
-EXTRA_DIST = iostreamP.h
-
-libio_la_SOURCES = $(LIBIO_SRCS) $(LIBIO_WSRCS)
-
-AM_CFLAGS = -D_GNU_SOURCE @DEBUG_FLAGS@
-CONFIG_HEADER = ../config.h
-CONFIG_CLEAN_FILES =
-LTLIBRARIES = $(noinst_LTLIBRARIES)
-
-
-DEFS = @DEFS@ -I. -I$(srcdir) -I..
-CPPFLAGS = @CPPFLAGS@
-LDFLAGS = @LDFLAGS@
-LIBS = @LIBS@
-libio_la_LDFLAGS =
-libio_la_LIBADD =
-@GLIBCPP_NEED_WLIBIO_TRUE@@GLIBCPP_NEED_LIBIO_TRUE@libio_la_OBJECTS = \
-@GLIBCPP_NEED_WLIBIO_TRUE@@GLIBCPP_NEED_LIBIO_TRUE@filedoalloc.lo \
-@GLIBCPP_NEED_WLIBIO_TRUE@@GLIBCPP_NEED_LIBIO_TRUE@genops.lo fileops.lo \
-@GLIBCPP_NEED_WLIBIO_TRUE@@GLIBCPP_NEED_LIBIO_TRUE@stdfiles.lo \
-@GLIBCPP_NEED_WLIBIO_TRUE@@GLIBCPP_NEED_LIBIO_TRUE@c_codecvt.lo \
-@GLIBCPP_NEED_WLIBIO_TRUE@@GLIBCPP_NEED_LIBIO_TRUE@iofclose.lo \
-@GLIBCPP_NEED_WLIBIO_TRUE@@GLIBCPP_NEED_LIBIO_TRUE@iofopen.lo \
-@GLIBCPP_NEED_WLIBIO_TRUE@@GLIBCPP_NEED_LIBIO_TRUE@wfiledoalloc.lo \
-@GLIBCPP_NEED_WLIBIO_TRUE@@GLIBCPP_NEED_LIBIO_TRUE@wfileops.lo \
-@GLIBCPP_NEED_WLIBIO_TRUE@@GLIBCPP_NEED_LIBIO_TRUE@wgenops.lo \
-@GLIBCPP_NEED_WLIBIO_TRUE@@GLIBCPP_NEED_LIBIO_TRUE@iofwide.lo
-@GLIBCPP_NEED_WLIBIO_TRUE@@GLIBCPP_NEED_LIBIO_FALSE@libio_la_OBJECTS = \
-@GLIBCPP_NEED_WLIBIO_TRUE@@GLIBCPP_NEED_LIBIO_FALSE@wfiledoalloc.lo \
-@GLIBCPP_NEED_WLIBIO_TRUE@@GLIBCPP_NEED_LIBIO_FALSE@wfileops.lo \
-@GLIBCPP_NEED_WLIBIO_TRUE@@GLIBCPP_NEED_LIBIO_FALSE@wgenops.lo \
-@GLIBCPP_NEED_WLIBIO_TRUE@@GLIBCPP_NEED_LIBIO_FALSE@iofwide.lo
-@GLIBCPP_NEED_WLIBIO_FALSE@@GLIBCPP_NEED_LIBIO_TRUE@libio_la_OBJECTS = \
-@GLIBCPP_NEED_WLIBIO_FALSE@@GLIBCPP_NEED_LIBIO_TRUE@filedoalloc.lo \
-@GLIBCPP_NEED_WLIBIO_FALSE@@GLIBCPP_NEED_LIBIO_TRUE@genops.lo \
-@GLIBCPP_NEED_WLIBIO_FALSE@@GLIBCPP_NEED_LIBIO_TRUE@fileops.lo \
-@GLIBCPP_NEED_WLIBIO_FALSE@@GLIBCPP_NEED_LIBIO_TRUE@stdfiles.lo \
-@GLIBCPP_NEED_WLIBIO_FALSE@@GLIBCPP_NEED_LIBIO_TRUE@c_codecvt.lo \
-@GLIBCPP_NEED_WLIBIO_FALSE@@GLIBCPP_NEED_LIBIO_TRUE@iofclose.lo \
-@GLIBCPP_NEED_WLIBIO_FALSE@@GLIBCPP_NEED_LIBIO_TRUE@iofopen.lo
-@GLIBCPP_NEED_WLIBIO_FALSE@@GLIBCPP_NEED_LIBIO_FALSE@libio_la_OBJECTS =
-CFLAGS = @CFLAGS@
-COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
-DIST_COMMON = ChangeLog Makefile.am Makefile.in
-
-
-DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
-
-TAR = gtar
-GZIP_ENV = --best
-SOURCES = $(libio_la_SOURCES)
-OBJECTS = $(libio_la_OBJECTS)
-
-all: all-redirect
-.SUFFIXES:
-.SUFFIXES: .S .c .lo .o .obj .s
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
- cd $(top_srcdir) && $(AUTOMAKE) --cygnus libio/Makefile
-
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
- cd $(top_builddir) \
- && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
-
-
-mostlyclean-noinstLTLIBRARIES:
-
-clean-noinstLTLIBRARIES:
- -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
-
-distclean-noinstLTLIBRARIES:
-
-maintainer-clean-noinstLTLIBRARIES:
-
-.c.o:
- $(COMPILE) -c $<
-
-# FIXME: We should only use cygpath when building on Windows,
-# and only if it is available.
-.c.obj:
- $(COMPILE) -c `cygpath -w $<`
-
-.s.o:
- $(COMPILE) -c $<
-
-.S.o:
- $(COMPILE) -c $<
-
-mostlyclean-compile:
- -rm -f *.o core *.core
- -rm -f *.$(OBJEXT)
-
-clean-compile:
-
-distclean-compile:
- -rm -f *.tab.c
-
-maintainer-clean-compile:
-
-.c.lo:
- $(LIBTOOL) --mode=compile $(COMPILE) -c $<
-
-.s.lo:
- $(LIBTOOL) --mode=compile $(COMPILE) -c $<
-
-.S.lo:
- $(LIBTOOL) --mode=compile $(COMPILE) -c $<
-
-mostlyclean-libtool:
- -rm -f *.lo
-
-clean-libtool:
- -rm -rf .libs _libs
-
-distclean-libtool:
-
-maintainer-clean-libtool:
-
-libio.la: $(libio_la_OBJECTS) $(libio_la_DEPENDENCIES)
- $(LINK) $(libio_la_LDFLAGS) $(libio_la_OBJECTS) $(libio_la_LIBADD) $(LIBS)
-
-tags: TAGS
-
-ID: $(HEADERS) $(SOURCES) $(LISP)
- list='$(SOURCES) $(HEADERS)'; \
- unique=`for i in $$list; do echo $$i; done | \
- awk ' { files[$$0] = 1; } \
- END { for (i in files) print i; }'`; \
- here=`pwd` && cd $(srcdir) \
- && mkid -f$$here/ID $$unique $(LISP)
-
-TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP)
- tags=; \
- here=`pwd`; \
- list='$(SOURCES) $(HEADERS)'; \
- unique=`for i in $$list; do echo $$i; done | \
- awk ' { files[$$0] = 1; } \
- END { for (i in files) print i; }'`; \
- test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
- || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS)
-
-mostlyclean-tags:
-
-clean-tags:
-
-distclean-tags:
- -rm -f TAGS ID
-
-maintainer-clean-tags:
-
-distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
-
-subdir = libio
-
-distdir: $(DISTFILES)
- @for file in $(DISTFILES); do \
- if test -f $$file; then d=.; else d=$(srcdir); fi; \
- if test -d $$d/$$file; then \
- cp -pr $$d/$$file $(distdir)/$$file; \
- else \
- test -f $(distdir)/$$file \
- || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
- || cp -p $$d/$$file $(distdir)/$$file || :; \
- fi; \
- done
-info-am:
-info: info-am
-dvi-am:
-dvi: dvi-am
-check-am:
-check: check-am
-installcheck-am:
-installcheck: installcheck-am
-install-info-am:
-install-info: install-info-am
-install-exec-am:
-install-exec: install-exec-am
-
-install-data-am:
-install-data: install-data-am
-
-install-am: all-am
- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-install: install-am
-uninstall-am:
-uninstall: uninstall-am
-all-am: Makefile $(LTLIBRARIES)
-all-redirect: all-am
-install-strip:
- $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
-installdirs:
-
-
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
- -rm -f Makefile $(CONFIG_CLEAN_FILES)
- -rm -f config.cache config.log stamp-h stamp-h[0-9]*
-
-maintainer-clean-generic:
-mostlyclean-am: mostlyclean-noinstLTLIBRARIES mostlyclean-compile \
- mostlyclean-libtool mostlyclean-tags \
- mostlyclean-generic
-
-mostlyclean: mostlyclean-am
-
-clean-am: clean-noinstLTLIBRARIES clean-compile clean-libtool \
- clean-tags clean-generic mostlyclean-am
-
-clean: clean-am
-
-distclean-am: distclean-noinstLTLIBRARIES distclean-compile \
- distclean-libtool distclean-tags distclean-generic \
- clean-am
- -rm -f libtool
-
-distclean: distclean-am
-
-maintainer-clean-am: maintainer-clean-noinstLTLIBRARIES \
- maintainer-clean-compile maintainer-clean-libtool \
- maintainer-clean-tags maintainer-clean-generic \
- distclean-am
- @echo "This command is intended for maintainers to use;"
- @echo "it deletes files that may require special tools to rebuild."
-
-maintainer-clean: maintainer-clean-am
-
-.PHONY: mostlyclean-noinstLTLIBRARIES distclean-noinstLTLIBRARIES \
-clean-noinstLTLIBRARIES maintainer-clean-noinstLTLIBRARIES \
-mostlyclean-compile distclean-compile clean-compile \
-maintainer-clean-compile mostlyclean-libtool distclean-libtool \
-clean-libtool maintainer-clean-libtool tags mostlyclean-tags \
-distclean-tags clean-tags maintainer-clean-tags distdir info-am info \
-dvi-am dvi check check-am installcheck-am installcheck install-info-am \
-install-info install-exec-am install-exec install-data-am install-data \
-install-am install uninstall-am uninstall all-redirect all-am all \
-installdirs mostlyclean-generic distclean-generic clean-generic \
-maintainer-clean-generic clean mostlyclean distclean maintainer-clean
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/contrib/libstdc++/libio/_G_config.h b/contrib/libstdc++/libio/_G_config.h
deleted file mode 100644
index d6738c2bf7be..000000000000
--- a/contrib/libstdc++/libio/_G_config.h
+++ /dev/null
@@ -1,136 +0,0 @@
-/* This file is needed by libio to define various configuration parameters.
- These are always the same in the GNU C library. */
-
-#ifndef _G_config_h
-#define _G_config_h 1
-
-#ifndef _LIBC
-# include <bits/c++config.h>
-# ifdef _GLIBCPP_USE_THREADS
-# define _IO_MTSAFE_IO
-# endif
-#endif
-
-/* Define types for libio in terms of the standard internal type names. */
-
-#include <sys/types.h>
-#define __need_size_t
-#define __need_wchar_t
-#define __need_wint_t
-#define __need_NULL
-#define __need_ptrdiff_t
-#ifdef __cplusplus
-# include <cstddef>
-#else
-# include <stddef.h>
-#endif
-
-
-#ifndef _WINT_T
-/* Integral type unchanged by default argument promotions that can
- hold any value corresponding to members of the extended character
- set, as well as at least one value that does not correspond to any
- member of the extended character set. */
-# define _WINT_T
-typedef unsigned int wint_t;
-#endif
-
-/* For use as part of glibc (native) or as part of libstdc++ (maybe
- not glibc) */
-#ifndef __c_mbstate_t_defined
-# define __c_mbstate_t_defined 1
-/*# ifdef _GLIBCPP_USE_WCHAR_T*/
-typedef struct
-{
- int count;
- wint_t value;
-}__c_mbstate_t;
-/*# endif*/
-#endif
-#undef __need_mbstate_t
-
-typedef size_t _G_size_t;
-
-
-#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
-typedef struct
-{
- __off_t __pos;
- __c_mbstate_t __state;
-} _G_fpos_t;
-
-typedef struct
-{
- __off64_t __pos;
- __c_mbstate_t __state;
-} _G_fpos64_t;
-#else
-typedef __off_t _G_fpos_t;
-typedef __off64_t _G_fpos64_t;
-#endif
-#define _G_ssize_t __ssize_t
-#define _G_off_t __off_t
-#define _G_off64_t __off64_t
-#define _G_pid_t __pid_t
-#define _G_uid_t __uid_t
-#define _G_wchar_t wchar_t
-#define _G_wint_t wint_t
-#define _G_stat64 stat64
-#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
-# include <iconv.h>
-typedef iconv_t _G_iconv_t;
-#endif
-
-typedef int _G_int16_t __attribute__ ((__mode__ (__HI__)));
-typedef int _G_int32_t __attribute__ ((__mode__ (__SI__)));
-typedef unsigned int _G_uint16_t __attribute__ ((__mode__ (__HI__)));
-typedef unsigned int _G_uint32_t __attribute__ ((__mode__ (__SI__)));
-
-#define _G_HAVE_BOOL 1
-
-
-/* These library features are always available in the GNU C library. */
-#define _G_HAVE_ATEXIT 1
-#define _G_HAVE_SYS_CDEFS 1
-#define _G_HAVE_SYS_WAIT 1
-#define _G_NEED_STDARG_H 1
-#define _G_va_list __gnuc_va_list
-
-#define _G_HAVE_PRINTF_FP 1
-#define _G_HAVE_MMAP 1
-#define _G_HAVE_LONG_DOUBLE_IO 1
-#define _G_HAVE_IO_FILE_OPEN 1
-#define _G_HAVE_IO_GETLINE_INFO 1
-
-#define _G_IO_IO_FILE_VERSION 0x20001
-
-//#define _G_OPEN64 __open64
-//#define _G_LSEEK64 __lseek64
-//#define _G_FSTAT64(fd,buf) __fxstat64 (_STAT_VER, fd, buf)
-
-/* This is defined by <bits/stat.h> if `st_blksize' exists. */
-/*#define _G_HAVE_ST_BLKSIZE defined (_STATBUF_ST_BLKSIZE)*/
-
-#define _G_BUFSIZ 8192
-
-/* These are the vtbl details for ELF. */
-#define _G_NAMES_HAVE_UNDERSCORE 0
-#define _G_VTABLE_LABEL_HAS_LENGTH 1
-#ifndef _G_USING_THUNKS
-# define _G_USING_THUNKS 1
-#endif /* _G_USING_THUNKS */
-#define _G_VTABLE_LABEL_PREFIX "__vt_"
-#define _G_VTABLE_LABEL_PREFIX_ID __vt_
-
-#define _G_INTERNAL_CCS "UCS4"
-#define _G_HAVE_WEAK_SYMBOL 1
-#define _G_STDIO_USES_LIBIO 1
-
-#if defined __cplusplus || defined __STDC__
-# define _G_ARGS(ARGLIST) ARGLIST
-#else
-# define _G_ARGS(ARGLIST) ()
-#endif
-
-#endif /* _G_config.h */
-
diff --git a/contrib/libstdc++/libio/filedoalloc.c b/contrib/libstdc++/libio/filedoalloc.c
deleted file mode 100644
index 12c1135bcbe0..000000000000
--- a/contrib/libstdc++/libio/filedoalloc.c
+++ /dev/null
@@ -1,101 +0,0 @@
-/* Copyright (C) 1993, 1997 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-/*
- * Copyright (c) 1990 The Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms are permitted
- * provided that the above copyright notice and this paragraph are
- * duplicated in all such forms and that any documentation,
- * advertising materials, and other materials related to such
- * distribution and use acknowledge that the software was developed
- * by the University of California, Berkeley. The name of the
- * University may not be used to endorse or promote products derived
- * from this software without specific prior written permission.
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- */
-
-/* Modified for GNU iostream by Per Bothner 1991, 1992. */
-
-#ifndef _POSIX_SOURCE
-# define _POSIX_SOURCE
-#endif
-#include "libioP.h"
-#include <sys/types.h>
-#include <sys/stat.h>
-#ifdef __STDC__
-#include <stdlib.h>
-#include <unistd.h>
-#endif
-
-#ifdef _LIBC
-# undef isatty
-# define isatty(Fd) __isatty (Fd)
-#endif
-
-/*
- * Allocate a file buffer, or switch to unbuffered I/O.
- * Per the ANSI C standard, ALL tty devices default to line buffered.
- *
- * As a side effect, we set __SOPT or __SNPT (en/dis-able fseek
- * optimisation) right after the _fstat() that finds the buffer size.
- */
-
-int
-_IO_file_doallocate (fp)
- _IO_FILE *fp;
-{
- _IO_size_t size;
- int couldbetty;
- char *p;
- struct _G_stat64 st;
-
- if (fp->_fileno < 0 || _IO_SYSSTAT (fp, &st) < 0)
- {
- couldbetty = 0;
- size = _IO_BUFSIZ;
-#if 0
- /* do not try to optimise fseek() */
- fp->_flags |= __SNPT;
-#endif
- }
- else
- {
- couldbetty = S_ISCHR (st.st_mode);
-#if _IO_HAVE_ST_BLKSIZE
- size = st.st_blksize <= 0 ? _IO_BUFSIZ : st.st_blksize;
-#else
- size = _IO_BUFSIZ;
-#endif
- }
- ALLOC_BUF (p, size, EOF);
- _IO_setb (fp, p, p + size, 1);
- if (couldbetty && isatty (fp->_fileno))
- fp->_flags |= _IO_LINE_BUF;
- return 1;
-}
diff --git a/contrib/libstdc++/libio/fileops.c b/contrib/libstdc++/libio/fileops.c
deleted file mode 100644
index a830b5cd4395..000000000000
--- a/contrib/libstdc++/libio/fileops.c
+++ /dev/null
@@ -1,1049 +0,0 @@
-/* Copyright (C) 1993, 1995, 1997-1999, 2000 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
- Written by Per Bothner <bothner@cygnus.com>.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-
-#ifndef _POSIX_SOURCE
-# define _POSIX_SOURCE
-#endif
-#include "libioP.h"
-#include <fcntl.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <string.h>
-#include <errno.h>
-#ifdef __STDC__
-#include <stdlib.h>
-#endif
-#if _LIBC
-# include "../wcsmbs/wcsmbsload.h"
-# include <shlib-compat.h>
-#endif
-#ifndef errno
-extern int errno;
-#endif
-#ifndef __set_errno
-# define __set_errno(Val) errno = (Val)
-#endif
-
-
-#ifdef _LIBC
-# define open(Name, Flags, Prot) __open (Name, Flags, Prot)
-# define close(FD) __close (FD)
-# define lseek(FD, Offset, Whence) __lseek (FD, Offset, Whence)
-# define read(FD, Buf, NBytes) __read (FD, Buf, NBytes)
-# define write(FD, Buf, NBytes) __write (FD, Buf, NBytes)
-#else
-# define _IO_new_do_write _IO_do_write
-# define _IO_new_file_attach _IO_file_attach
-# define _IO_new_file_close_it _IO_file_close_it
-# define _IO_new_file_finish _IO_file_finish
-# define _IO_new_file_fopen _IO_file_fopen
-# define _IO_new_file_init _IO_file_init
-# define _IO_new_file_setbuf _IO_file_setbuf
-# define _IO_new_file_sync _IO_file_sync
-# define _IO_new_file_overflow _IO_file_overflow
-# define _IO_new_file_seekoff _IO_file_seekoff
-# define _IO_new_file_underflow _IO_file_underflow
-# define _IO_new_file_write _IO_file_write
-# define _IO_new_file_xsputn _IO_file_xsputn
-#endif
-
-/* An fstream can be in at most one of put mode, get mode, or putback mode.
- Putback mode is a variant of get mode.
-
- In a filebuf, there is only one current position, instead of two
- separate get and put pointers. In get mode, the current position
- is that of gptr(); in put mode that of pptr().
-
- The position in the buffer that corresponds to the position
- in external file system is normally _IO_read_end, except in putback
- mode, when it is _IO_save_end.
- If the field _fb._offset is >= 0, it gives the offset in
- the file as a whole corresponding to eGptr(). (?)
-
- PUT MODE:
- If a filebuf is in put mode, then all of _IO_read_ptr, _IO_read_end,
- and _IO_read_base are equal to each other. These are usually equal
- to _IO_buf_base, though not necessarily if we have switched from
- get mode to put mode. (The reason is to maintain the invariant
- that _IO_read_end corresponds to the external file position.)
- _IO_write_base is non-NULL and usually equal to _IO_base_base.
- We also have _IO_write_end == _IO_buf_end, but only in fully buffered mode.
- The un-flushed character are those between _IO_write_base and _IO_write_ptr.
-
- GET MODE:
- If a filebuf is in get or putback mode, eback() != egptr().
- In get mode, the unread characters are between gptr() and egptr().
- The OS file position corresponds to that of egptr().
-
- PUTBACK MODE:
- Putback mode is used to remember "excess" characters that have
- been sputbackc'd in a separate putback buffer.
- In putback mode, the get buffer points to the special putback buffer.
- The unread characters are the characters between gptr() and egptr()
- in the putback buffer, as well as the area between save_gptr()
- and save_egptr(), which point into the original reserve buffer.
- (The pointers save_gptr() and save_egptr() are the values
- of gptr() and egptr() at the time putback mode was entered.)
- The OS position corresponds to that of save_egptr().
-
- LINE BUFFERED OUTPUT:
- During line buffered output, _IO_write_base==base() && epptr()==base().
- However, ptr() may be anywhere between base() and ebuf().
- This forces a call to filebuf::overflow(int C) on every put.
- If there is more space in the buffer, and C is not a '\n',
- then C is inserted, and pptr() incremented.
-
- UNBUFFERED STREAMS:
- If a filebuf is unbuffered(), the _shortbuf[1] is used as the buffer.
-*/
-
-#define CLOSED_FILEBUF_FLAGS \
- (_IO_IS_FILEBUF+_IO_NO_READS+_IO_NO_WRITES+_IO_TIED_PUT_GET)
-
-
-void
-_IO_new_file_init (fp)
- struct _IO_FILE_plus *fp;
-{
- /* POSIX.1 allows another file handle to be used to change the position
- of our file descriptor. Hence we actually don't know the actual
- position before we do the first fseek (and until a following fflush). */
- fp->file._offset = _IO_pos_BAD;
- fp->file._IO_file_flags |= CLOSED_FILEBUF_FLAGS;
-
- _IO_link_in (fp);
- fp->file._fileno = -1;
-}
-
-int
-_IO_new_file_close_it (fp)
- _IO_FILE *fp;
-{
- int write_status, close_status;
- if (!_IO_file_is_open (fp))
- return EOF;
-
- write_status = _IO_do_flush (fp);
-
- _IO_unsave_markers(fp);
-
- close_status = _IO_SYSCLOSE (fp);
-
- /* Free buffer. */
- if (fp->_mode <= 0)
- {
- _IO_setb (fp, NULL, NULL, 0);
- _IO_setg (fp, NULL, NULL, NULL);
- _IO_setp (fp, NULL, NULL);
- }
-#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
- else
- {
- _IO_wsetb (fp, NULL, NULL, 0);
- _IO_wsetg (fp, NULL, NULL, NULL);
- _IO_wsetp (fp, NULL, NULL);
- }
-#endif
-
- _IO_un_link ((struct _IO_FILE_plus *) fp);
- fp->_flags = _IO_MAGIC|CLOSED_FILEBUF_FLAGS;
- fp->_fileno = -1;
- fp->_offset = _IO_pos_BAD;
-
- return close_status ? close_status : write_status;
-}
-
-void
-_IO_new_file_finish (fp, dummy)
- _IO_FILE *fp;
- int dummy;
-{
- if (_IO_file_is_open (fp))
- {
- _IO_do_flush (fp);
- if (!(fp->_flags & _IO_DELETE_DONT_CLOSE))
- _IO_SYSCLOSE (fp);
- }
- _IO_default_finish (fp, 0);
-}
-
-#if defined __GNUC__ && __GNUC__ >= 2
-__inline__
-#endif
-_IO_FILE *
-_IO_file_open (fp, filename, posix_mode, prot, read_write, is32not64)
- _IO_FILE *fp;
- const char *filename;
- int posix_mode;
- int prot;
- int read_write;
- int is32not64;
-{
- int fdesc;
-#ifdef _G_OPEN64
- fdesc = (is32not64
- ? open (filename, posix_mode, prot)
- : _G_OPEN64 (filename, posix_mode, prot));
-#else
- fdesc = open (filename, posix_mode, prot);
-#endif
- if (fdesc < 0)
- return NULL;
- fp->_fileno = fdesc;
- _IO_mask_flags (fp, read_write,_IO_NO_READS+_IO_NO_WRITES+_IO_IS_APPENDING);
- if (read_write & _IO_IS_APPENDING)
- if (_IO_SEEKOFF (fp, (_IO_off64_t)0, _IO_seek_end, _IOS_INPUT|_IOS_OUTPUT)
- == _IO_pos_BAD && errno != ESPIPE)
- return NULL;
- _IO_link_in ((struct _IO_FILE_plus *) fp);
- return fp;
-}
-
-_IO_FILE *
-_IO_new_file_fopen (fp, filename, mode, is32not64)
- _IO_FILE *fp;
- const char *filename;
- const char *mode;
- int is32not64;
-{
- int oflags = 0, omode;
- int read_write;
- int oprot = 0666;
- int i;
- _IO_FILE *result;
-#if _LIBC
- const char *cs;
-#endif
-
- if (_IO_file_is_open (fp))
- return 0;
- switch (*mode)
- {
- case 'r':
- omode = O_RDONLY;
- read_write = _IO_NO_WRITES;
- break;
- case 'w':
- omode = O_WRONLY;
- oflags = O_CREAT|O_TRUNC;
- read_write = _IO_NO_READS;
- break;
- case 'a':
- omode = O_WRONLY;
- oflags = O_CREAT|O_APPEND;
- read_write = _IO_NO_READS|_IO_IS_APPENDING;
- break;
- default:
- __set_errno (EINVAL);
- return NULL;
- }
- for (i = 1; i < 4; ++i)
- {
- switch (*++mode)
- {
- case '\0':
- break;
- case '+':
- omode = O_RDWR;
- read_write &= _IO_IS_APPENDING;
- continue;
- case 'x':
- oflags |= O_EXCL;
- continue;
- case 'b':
- default:
- /* Ignore. */
- continue;
- }
- break;
- }
-
- result = _IO_file_open (fp, filename, omode|oflags, oprot, read_write,
- is32not64);
-
-
-#if _LIBC
- /* Test whether the mode string specifies the conversion. */
- cs = strstr (mode, ",ccs=");
- if (cs != NULL)
- {
- /* Yep. Load the appropriate conversions and set the orientation
- to wide. */
- struct gconv_fcts fcts;
- struct _IO_codecvt *cc;
-
- if (! _IO_CHECK_WIDE (fp) || __wcsmbs_named_conv (&fcts, cs + 5) != 0)
- {
- /* Something went wrong, we cannot load the conversion modules.
- This means we cannot proceed since the user explicitly asked
- for these. */
- _IO_new_fclose (result);
- return NULL;
- }
-
- cc = fp->_codecvt = &fp->_wide_data->_codecvt;
-
- /* The functions are always the same. */
- *cc = __libio_codecvt;
-
- cc->__cd_in.__cd.__nsteps = 1; /* Only one step allowed. */
- cc->__cd_in.__cd.__steps = fcts.towc;
-
- cc->__cd_in.__cd.__data[0].__invocation_counter = 0;
- cc->__cd_in.__cd.__data[0].__internal_use = 1;
- cc->__cd_in.__cd.__data[0].__flags = __GCONV_IS_LAST;
- cc->__cd_in.__cd.__data[0].__statep = &result->_wide_data->_IO_state;
-
- cc->__cd_out.__cd.__nsteps = 1; /* Only one step allowed. */
- cc->__cd_out.__cd.__steps = fcts.tomb;
-
- cc->__cd_out.__cd.__data[0].__invocation_counter = 0;
- cc->__cd_out.__cd.__data[0].__internal_use = 1;
- cc->__cd_out.__cd.__data[0].__flags = __GCONV_IS_LAST;
- cc->__cd_out.__cd.__data[0].__statep = &result->_wide_data->_IO_state;
-
- /* Set the mode now. */
- result->_mode = 1;
- }
-#endif /* GNU libc */
-
- return result;
-}
-
-_IO_FILE *
-_IO_new_file_attach (fp, fd)
- _IO_FILE *fp;
- int fd;
-{
- if (_IO_file_is_open (fp))
- return NULL;
- fp->_fileno = fd;
- fp->_flags &= ~(_IO_NO_READS+_IO_NO_WRITES);
- fp->_flags |= _IO_DELETE_DONT_CLOSE;
- /* Get the current position of the file. */
- /* We have to do that since that may be junk. */
- fp->_offset = _IO_pos_BAD;
- if (_IO_SEEKOFF (fp, (_IO_off64_t)0, _IO_seek_cur, _IOS_INPUT|_IOS_OUTPUT)
- == _IO_pos_BAD && errno != ESPIPE)
- return NULL;
- return fp;
-}
-
-_IO_FILE *
-_IO_new_file_setbuf (fp, p, len)
- _IO_FILE *fp;
- char *p;
- _IO_ssize_t len;
-{
- if (_IO_default_setbuf (fp, p, len) == NULL)
- return NULL;
-
- fp->_IO_write_base = fp->_IO_write_ptr = fp->_IO_write_end
- = fp->_IO_buf_base;
- _IO_setg (fp, fp->_IO_buf_base, fp->_IO_buf_base, fp->_IO_buf_base);
-
- return fp;
-}
-
-static int new_do_write __P ((_IO_FILE *, const char *, _IO_size_t));
-
-/* Write TO_DO bytes from DATA to FP.
- Then mark FP as having empty buffers. */
-
-int
-_IO_new_do_write (fp, data, to_do)
- _IO_FILE *fp;
- const char *data;
- _IO_size_t to_do;
-{
- return (to_do == 0 || new_do_write (fp, data, to_do) == to_do) ? 0 : EOF;
-}
-
-static
-int
-new_do_write (fp, data, to_do)
- _IO_FILE *fp;
- const char *data;
- _IO_size_t to_do;
-{
- _IO_size_t count;
- if (fp->_flags & _IO_IS_APPENDING)
- /* On a system without a proper O_APPEND implementation,
- you would need to sys_seek(0, SEEK_END) here, but is
- is not needed nor desirable for Unix- or Posix-like systems.
- Instead, just indicate that offset (before and after) is
- unpredictable. */
- fp->_offset = _IO_pos_BAD;
- else if (fp->_IO_read_end != fp->_IO_write_base)
- {
- _IO_off64_t new_pos
- = _IO_SYSSEEK (fp, fp->_IO_write_base - fp->_IO_read_end, 1);
- if (new_pos == _IO_pos_BAD)
- return 0;
- fp->_offset = new_pos;
- }
- count = _IO_SYSWRITE (fp, data, to_do);
- if (fp->_cur_column && count)
- fp->_cur_column = _IO_adjust_column (fp->_cur_column - 1, data, count) + 1;
- _IO_setg (fp, fp->_IO_buf_base, fp->_IO_buf_base, fp->_IO_buf_base);
- fp->_IO_write_base = fp->_IO_write_ptr = fp->_IO_buf_base;
- fp->_IO_write_end = (fp->_mode < 0
- && (fp->_flags & (_IO_LINE_BUF+_IO_UNBUFFERED))
- ? fp->_IO_buf_base : fp->_IO_buf_end);
- return count;
-}
-
-int
-_IO_new_file_underflow (fp)
- _IO_FILE *fp;
-{
- _IO_ssize_t count;
-#if 0
- /* SysV does not make this test; take it out for compatibility */
- if (fp->_flags & _IO_EOF_SEEN)
- return (EOF);
-#endif
-
- if (fp->_flags & _IO_NO_READS)
- {
- fp->_flags |= _IO_ERR_SEEN;
- __set_errno (EBADF);
- return EOF;
- }
- if (fp->_IO_read_ptr < fp->_IO_read_end)
- return *(unsigned char *) fp->_IO_read_ptr;
-
- if (fp->_IO_buf_base == NULL)
- {
- /* Maybe we already have a push back pointer. */
- if (fp->_IO_save_base != NULL)
- {
- free (fp->_IO_save_base);
- fp->_flags &= ~_IO_IN_BACKUP;
- }
- _IO_doallocbuf (fp);
- }
-
- /* Flush all line buffered files before reading. */
- /* FIXME This can/should be moved to genops ?? */
- if (fp->_flags & (_IO_LINE_BUF|_IO_UNBUFFERED))
- _IO_flush_all_linebuffered ();
-
- _IO_switch_to_get_mode (fp);
-
- /* This is very tricky. We have to adjust those
- pointers before we call _IO_SYSREAD () since
- we may longjump () out while waiting for
- input. Those pointers may be screwed up. H.J. */
- fp->_IO_read_base = fp->_IO_read_ptr = fp->_IO_buf_base;
- fp->_IO_read_end = fp->_IO_buf_base;
- fp->_IO_write_base = fp->_IO_write_ptr = fp->_IO_write_end
- = fp->_IO_buf_base;
-
- count = _IO_SYSREAD (fp, fp->_IO_buf_base,
- fp->_IO_buf_end - fp->_IO_buf_base);
- if (count <= 0)
- {
- if (count == 0)
- fp->_flags |= _IO_EOF_SEEN;
- else
- fp->_flags |= _IO_ERR_SEEN, count = 0;
- }
- fp->_IO_read_end += count;
- if (count == 0)
- return EOF;
- if (fp->_offset != _IO_pos_BAD)
- _IO_pos_adjust (fp->_offset, count);
- return *(unsigned char *) fp->_IO_read_ptr;
-}
-
-int
-_IO_new_file_overflow (f, ch)
- _IO_FILE *f;
- int ch;
-{
- if (f->_flags & _IO_NO_WRITES) /* SET ERROR */
- {
- f->_flags |= _IO_ERR_SEEN;
- __set_errno (EBADF);
- return EOF;
- }
- /* If currently reading or no buffer allocated. */
- if ((f->_flags & _IO_CURRENTLY_PUTTING) == 0 || f->_IO_write_base == 0)
- {
- /* Allocate a buffer if needed. */
- if (f->_IO_write_base == 0)
- {
- _IO_doallocbuf (f);
- _IO_setg (f, f->_IO_buf_base, f->_IO_buf_base, f->_IO_buf_base);
- }
- /* Otherwise must be currently reading.
- If _IO_read_ptr (and hence also _IO_read_end) is at the buffer end,
- logically slide the buffer forwards one block (by setting the
- read pointers to all point at the beginning of the block). This
- makes room for subsequent output.
- Otherwise, set the read pointers to _IO_read_end (leaving that
- alone, so it can continue to correspond to the external position). */
- if (f->_IO_read_ptr == f->_IO_buf_end)
- f->_IO_read_end = f->_IO_read_ptr = f->_IO_buf_base;
- f->_IO_write_ptr = f->_IO_read_ptr;
- f->_IO_write_base = f->_IO_write_ptr;
- f->_IO_write_end = f->_IO_buf_end;
- f->_IO_read_base = f->_IO_read_ptr = f->_IO_read_end;
-
- f->_flags |= _IO_CURRENTLY_PUTTING;
- if (f->_mode < 0 && f->_flags & (_IO_LINE_BUF+_IO_UNBUFFERED))
- f->_IO_write_end = f->_IO_write_ptr;
- }
- if (ch == EOF)
- return _IO_new_do_write(f, f->_IO_write_base,
- f->_IO_write_ptr - f->_IO_write_base);
- if (f->_IO_write_ptr == f->_IO_buf_end ) /* Buffer is really full */
- if (_IO_do_flush (f) == EOF)
- return EOF;
- *f->_IO_write_ptr++ = ch;
- if ((f->_flags & _IO_UNBUFFERED)
- || ((f->_flags & _IO_LINE_BUF) && ch == '\n'))
- if (_IO_new_do_write(f, f->_IO_write_base,
- f->_IO_write_ptr - f->_IO_write_base) == EOF)
- return EOF;
- return (unsigned char) ch;
-}
-
-int
-_IO_new_file_sync (fp)
- _IO_FILE *fp;
-{
- _IO_ssize_t delta;
- int retval = 0;
-
- /* char* ptr = cur_ptr(); */
- if (fp->_IO_write_ptr > fp->_IO_write_base)
- if (_IO_do_flush(fp)) return EOF;
- delta = fp->_IO_read_ptr - fp->_IO_read_end;
- if (delta != 0)
- {
-#ifdef TODO
- if (_IO_in_backup (fp))
- delta -= eGptr () - Gbase ();
-#endif
- _IO_off64_t new_pos = _IO_SYSSEEK (fp, delta, 1);
- if (new_pos != (_IO_off64_t) EOF)
- fp->_IO_read_end = fp->_IO_read_ptr;
-#ifdef ESPIPE
- else if (errno == ESPIPE)
- ; /* Ignore error from unseekable devices. */
-#endif
- else
- retval = EOF;
- }
- if (retval != EOF)
- fp->_offset = _IO_pos_BAD;
- /* FIXME: Cleanup - can this be shared? */
- /* setg(base(), ptr, ptr); */
- return retval;
-}
-
-_IO_off64_t
-_IO_new_file_seekoff (fp, offset, dir, mode)
- _IO_FILE *fp;
- _IO_off64_t offset;
- int dir;
- int mode;
-{
- _IO_off64_t result;
- _IO_off64_t delta, new_offset;
- long count;
- /* POSIX.1 8.2.3.7 says that after a call the fflush() the file
- offset of the underlying file must be exact. */
- int must_be_exact = (fp->_IO_read_base == fp->_IO_read_end
- && fp->_IO_write_base == fp->_IO_write_ptr);
-
- if (mode == 0)
- dir = _IO_seek_cur, offset = 0; /* Don't move any pointers. */
-
- /* Flush unwritten characters.
- (This may do an unneeded write if we seek within the buffer.
- But to be able to switch to reading, we would need to set
- egptr to ptr. That can't be done in the current design,
- which assumes file_ptr() is eGptr. Anyway, since we probably
- end up flushing when we close(), it doesn't make much difference.)
- FIXME: simulate mem-papped files. */
-
- if (fp->_IO_write_ptr > fp->_IO_write_base || _IO_in_put_mode (fp))
- if (_IO_switch_to_get_mode (fp))
- return EOF;
-
- if (fp->_IO_buf_base == NULL)
- {
- /* It could be that we already have a pushback buffer. */
- if (fp->_IO_read_base != NULL)
- {
- free (fp->_IO_read_base);
- fp->_flags &= ~_IO_IN_BACKUP;
- }
- _IO_doallocbuf (fp);
- _IO_setp (fp, fp->_IO_buf_base, fp->_IO_buf_base);
- _IO_setg (fp, fp->_IO_buf_base, fp->_IO_buf_base, fp->_IO_buf_base);
- }
-
- switch (dir)
- {
- case _IO_seek_cur:
- /* Adjust for read-ahead (bytes is buffer). */
- offset -= fp->_IO_read_end - fp->_IO_read_ptr;
- if (fp->_offset == _IO_pos_BAD)
- goto dumb;
- /* Make offset absolute, assuming current pointer is file_ptr(). */
- offset += fp->_offset;
-
- dir = _IO_seek_set;
- break;
- case _IO_seek_set:
- break;
- case _IO_seek_end:
- {
- struct _G_stat64 st;
- if (_IO_SYSSTAT (fp, &st) == 0 && S_ISREG (st.st_mode))
- {
- offset += st.st_size;
- dir = _IO_seek_set;
- }
- else
- goto dumb;
- }
- }
- /* At this point, dir==_IO_seek_set. */
-
- /* If we are only interested in the current position we've found it now. */
- if (mode == 0)
- return offset;
-
- /* If destination is within current buffer, optimize: */
- if (fp->_offset != _IO_pos_BAD && fp->_IO_read_base != NULL
- && !_IO_in_backup (fp))
- {
- /* Offset relative to start of main get area. */
- _IO_off64_t rel_offset = (offset - fp->_offset
- + (fp->_IO_read_end - fp->_IO_read_base));
- if (rel_offset >= 0)
- {
-#if 0
- if (_IO_in_backup (fp))
- _IO_switch_to_main_get_area (fp);
-#endif
- if (rel_offset <= fp->_IO_read_end - fp->_IO_read_base)
- {
- _IO_setg (fp, fp->_IO_buf_base, fp->_IO_buf_base + rel_offset,
- fp->_IO_read_end);
- _IO_setp (fp, fp->_IO_buf_base, fp->_IO_buf_base);
- {
- _IO_mask_flags (fp, 0, _IO_EOF_SEEN);
- goto resync;
- }
- }
-#ifdef TODO
- /* If we have streammarkers, seek forward by reading ahead. */
- if (_IO_have_markers (fp))
- {
- int to_skip = rel_offset
- - (fp->_IO_read_ptr - fp->_IO_read_base);
- if (ignore (to_skip) != to_skip)
- goto dumb;
- _IO_mask_flags (fp, 0, _IO_EOF_SEEN);
- goto resync;
- }
-#endif
- }
-#ifdef TODO
- if (rel_offset < 0 && rel_offset >= Bbase () - Bptr ())
- {
- if (!_IO_in_backup (fp))
- _IO_switch_to_backup_area (fp);
- gbump (fp->_IO_read_end + rel_offset - fp->_IO_read_ptr);
- _IO_mask_flags (fp, 0, _IO_EOF_SEEN);
- goto resync;
- }
-#endif
- }
-
-#ifdef TODO
- _IO_unsave_markers (fp);
-#endif
-
- if (fp->_flags & _IO_NO_READS)
- goto dumb;
-
- /* Try to seek to a block boundary, to improve kernel page management. */
- new_offset = offset & ~(fp->_IO_buf_end - fp->_IO_buf_base - 1);
- delta = offset - new_offset;
- if (delta > fp->_IO_buf_end - fp->_IO_buf_base)
- {
- new_offset = offset;
- delta = 0;
- }
- result = _IO_SYSSEEK (fp, new_offset, 0);
- if (result < 0)
- return EOF;
- if (delta == 0)
- count = 0;
- else
- {
- count = _IO_SYSREAD (fp, fp->_IO_buf_base,
- (must_be_exact
- ? delta : fp->_IO_buf_end - fp->_IO_buf_base));
- if (count < delta)
- {
- /* We weren't allowed to read, but try to seek the remainder. */
- offset = count == EOF ? delta : delta-count;
- dir = _IO_seek_cur;
- goto dumb;
- }
- }
- _IO_setg (fp, fp->_IO_buf_base, fp->_IO_buf_base + delta,
- fp->_IO_buf_base + count);
- _IO_setp (fp, fp->_IO_buf_base, fp->_IO_buf_base);
- fp->_offset = result + count;
- _IO_mask_flags (fp, 0, _IO_EOF_SEEN);
- return offset;
- dumb:
-
- _IO_unsave_markers (fp);
- result = _IO_SYSSEEK (fp, offset, dir);
- if (result != EOF)
- {
- _IO_mask_flags (fp, 0, _IO_EOF_SEEN);
- fp->_offset = result;
- _IO_setg (fp, fp->_IO_buf_base, fp->_IO_buf_base, fp->_IO_buf_base);
- _IO_setp (fp, fp->_IO_buf_base, fp->_IO_buf_base);
- }
- return result;
-
-resync:
- /* We need to do it since it is possible that the file offset in
- the kernel may be changed behind our back. It may happen when
- we fopen a file and then do a fork. One process may access the
- the file and the kernel file offset will be changed. */
- if (fp->_offset >= 0)
- _IO_SYSSEEK (fp, fp->_offset, 0);
-
- return offset;
-}
-
-_IO_ssize_t
-_IO_file_read (fp, buf, size)
- _IO_FILE *fp;
- void *buf;
- _IO_ssize_t size;
-{
- return read (fp->_fileno, buf, size);
-}
-
-_IO_off64_t
-_IO_file_seek (fp, offset, dir)
- _IO_FILE *fp;
- _IO_off64_t offset;
- int dir;
-{
-#ifdef _G_LSEEK64
- return _G_LSEEK64 (fp->_fileno, offset, dir);
-#else
- return lseek (fp->_fileno, offset, dir);
-#endif
-}
-
-int
-_IO_file_stat (fp, st)
- _IO_FILE *fp;
- void *st;
-{
-#ifdef _G_FSTAT64
- return _G_FSTAT64 (fp->_fileno, (struct _G_stat64 *) st);
-#else
- return fstat (fp->_fileno, (struct stat *) st);
-#endif
-}
-
-int
-_IO_file_close (fp)
- _IO_FILE *fp;
-{
- return close (fp->_fileno);
-}
-
-_IO_ssize_t
-_IO_new_file_write (f, data, n)
- _IO_FILE *f;
- const void *data;
- _IO_ssize_t n;
-{
- _IO_ssize_t to_do = n;
- while (to_do > 0)
- {
- _IO_ssize_t count = write (f->_fileno, data, to_do);
- if (count < 0)
- {
- f->_flags |= _IO_ERR_SEEN;
- break;
- }
- to_do -= count;
- data = (void *) ((char *) data + count);
- }
- n -= to_do;
- if (f->_offset >= 0)
- f->_offset += n;
- return n;
-}
-
-_IO_size_t
-_IO_new_file_xsputn (f, data, n)
- _IO_FILE *f;
- const void *data;
- _IO_size_t n;
-{
- register const char *s = (const char *) data;
- _IO_size_t to_do = n;
- int must_flush = 0;
- _IO_size_t count;
-
- if (n <= 0)
- return 0;
- /* This is an optimized implementation.
- If the amount to be written straddles a block boundary
- (or the filebuf is unbuffered), use sys_write directly. */
-
- /* First figure out how much space is available in the buffer. */
- count = f->_IO_write_end - f->_IO_write_ptr; /* Space available. */
- if ((f->_flags & _IO_LINE_BUF) && (f->_flags & _IO_CURRENTLY_PUTTING))
- {
- count = f->_IO_buf_end - f->_IO_write_ptr;
- if (count >= n)
- {
- register const char *p;
- for (p = s + n; p > s; )
- {
- if (*--p == '\n')
- {
- count = p - s + 1;
- must_flush = 1;
- break;
- }
- }
- }
- }
- /* Then fill the buffer. */
- if (count > 0)
- {
- if (count > to_do)
- count = to_do;
- if (count > 20)
- {
-#ifdef _LIBC
- f->_IO_write_ptr = __mempcpy (f->_IO_write_ptr, s, count);
-#else
- memcpy (f->_IO_write_ptr, s, count);
- f->_IO_write_ptr += count;
-#endif
- s += count;
- }
- else
- {
- register char *p = f->_IO_write_ptr;
- register int i = (int) count;
- while (--i >= 0)
- *p++ = *s++;
- f->_IO_write_ptr = p;
- }
- to_do -= count;
- }
- if (to_do + must_flush > 0)
- {
- _IO_size_t block_size, do_write;
- /* Next flush the (full) buffer. */
- if (_IO_OVERFLOW (f, EOF) == EOF)
- return n - to_do;
-
- /* Try to maintain alignment: write a whole number of blocks.
- dont_write is what gets left over. */
- block_size = f->_IO_buf_end - f->_IO_buf_base;
- do_write = to_do - (block_size >= 128 ? to_do % block_size : 0);
-
- if (do_write)
- {
- count = new_do_write (f, s, do_write);
- to_do -= count;
- if (count < do_write)
- return n - to_do;
- }
-
- /* Now write out the remainder. Normally, this will fit in the
- buffer, but it's somewhat messier for line-buffered files,
- so we let _IO_default_xsputn handle the general case. */
- if (to_do)
- to_do -= _IO_default_xsputn (f, s+do_write, to_do);
- }
- return n - to_do;
-}
-
-_IO_size_t
-_IO_file_xsgetn (fp, data, n)
- _IO_FILE *fp;
- void *data;
- _IO_size_t n;
-{
- register _IO_size_t want, have;
- register _IO_ssize_t count;
- register char *s = data;
-
- want = n;
-
- if (fp->_IO_buf_base == NULL)
- {
- /* Maybe we already have a push back pointer. */
- if (fp->_IO_save_base != NULL)
- {
- free (fp->_IO_save_base);
- fp->_flags &= ~_IO_IN_BACKUP;
- }
- _IO_doallocbuf (fp);
- }
-
- while (want > 0)
- {
- have = fp->_IO_read_end - fp->_IO_read_ptr;
- if (want <= have)
- {
- memcpy (s, fp->_IO_read_ptr, want);
- fp->_IO_read_ptr += want;
- want = 0;
- }
- else
- {
- if (have > 0)
- {
-#ifdef _LIBC
- s = __mempcpy (s, fp->_IO_read_ptr, have);
-#else
- memcpy (s, fp->_IO_read_ptr, have);
- s += have;
-#endif
- want -= have;
- fp->_IO_read_ptr += have;
- }
-
- /* Check for backup and repeat */
- if (_IO_in_backup (fp))
- {
- _IO_switch_to_main_get_area (fp);
- continue;
- }
-
- /* If we now want less than a buffer, underflow and repeat
- the copy. Otherwise, _IO_SYSREAD directly to
- the user buffer. */
- if (fp->_IO_buf_base && want < fp->_IO_buf_end - fp->_IO_buf_base)
- {
- if (__underflow (fp) == EOF)
- break;
-
- continue;
- }
-
- /* These must be set before the sysread as we might longjmp out
- waiting for input. */
- _IO_setg (fp, fp->_IO_buf_base, fp->_IO_buf_base, fp->_IO_buf_base);
- _IO_setp (fp, fp->_IO_buf_base, fp->_IO_buf_base);
-
- /* Try to maintain alignment: read a whole number of blocks. */
- count = want;
- if (fp->_IO_buf_base)
- {
- _IO_size_t block_size = fp->_IO_buf_end - fp->_IO_buf_base;
- if (block_size >= 128)
- count -= want % block_size;
- }
-
- count = _IO_SYSREAD (fp, s, count);
- if (count <= 0)
- {
- if (count == 0)
- fp->_flags |= _IO_EOF_SEEN;
- else
- fp->_flags |= _IO_ERR_SEEN;
-
- break;
- }
-
- s += count;
- want -= count;
- if (fp->_offset != _IO_pos_BAD)
- _IO_pos_adjust (fp->_offset, count);
- }
- }
-
- return n - want;
-}
-
-struct _IO_jump_t _IO_file_jumps =
-{
- JUMP_INIT_DUMMY,
- JUMP_INIT(finish, _IO_new_file_finish),
- JUMP_INIT(overflow, _IO_new_file_overflow),
- JUMP_INIT(underflow, _IO_new_file_underflow),
- JUMP_INIT(uflow, _IO_default_uflow),
- JUMP_INIT(pbackfail, _IO_default_pbackfail),
- JUMP_INIT(xsputn, _IO_new_file_xsputn),
- JUMP_INIT(xsgetn, _IO_file_xsgetn),
- JUMP_INIT(seekoff, _IO_new_file_seekoff),
- JUMP_INIT(seekpos, _IO_default_seekpos),
- JUMP_INIT(setbuf, _IO_new_file_setbuf),
- JUMP_INIT(sync, _IO_new_file_sync),
- JUMP_INIT(doallocate, _IO_file_doallocate),
- JUMP_INIT(read, _IO_file_read),
- JUMP_INIT(write, _IO_new_file_write),
- JUMP_INIT(seek, _IO_file_seek),
- JUMP_INIT(close, _IO_file_close),
- JUMP_INIT(stat, _IO_file_stat),
- JUMP_INIT(showmanyc, _IO_default_showmanyc),
- JUMP_INIT(imbue, _IO_default_imbue)
-};
-
-#ifdef _LIBC
-versioned_symbol (libc, _IO_new_do_write, _IO_do_write, GLIBC_2_1);
-versioned_symbol (libc, _IO_new_file_attach, _IO_file_attach, GLIBC_2_1);
-versioned_symbol (libc, _IO_new_file_close_it, _IO_file_close_it, GLIBC_2_1);
-versioned_symbol (libc, _IO_new_file_finish, _IO_file_finish, GLIBC_2_1);
-versioned_symbol (libc, _IO_new_file_fopen, _IO_file_fopen, GLIBC_2_1);
-versioned_symbol (libc, _IO_new_file_init, _IO_file_init, GLIBC_2_1);
-versioned_symbol (libc, _IO_new_file_setbuf, _IO_file_setbuf, GLIBC_2_1);
-versioned_symbol (libc, _IO_new_file_sync, _IO_file_sync, GLIBC_2_1);
-versioned_symbol (libc, _IO_new_file_overflow, _IO_file_overflow, GLIBC_2_1);
-versioned_symbol (libc, _IO_new_file_seekoff, _IO_file_seekoff, GLIBC_2_1);
-versioned_symbol (libc, _IO_new_file_underflow, _IO_file_underflow, GLIBC_2_1);
-versioned_symbol (libc, _IO_new_file_write, _IO_file_write, GLIBC_2_1);
-versioned_symbol (libc, _IO_new_file_xsputn, _IO_file_xsputn, GLIBC_2_1);
-#endif
diff --git a/contrib/libstdc++/libio/genops.c b/contrib/libstdc++/libio/genops.c
deleted file mode 100644
index b1ae5afc506f..000000000000
--- a/contrib/libstdc++/libio/genops.c
+++ /dev/null
@@ -1,1123 +0,0 @@
-/* Copyright (C) 1993, 1995, 1997-1999, 2000 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-/* Generic or default I/O operations. */
-
-#include "libioP.h"
-#ifdef __STDC__
-#include <stdlib.h>
-#endif
-#include <string.h>
-
-#ifdef _IO_MTSAFE_IO
-static _IO_lock_t list_all_lock = _IO_lock_initializer;
-#endif
-
-void
-_IO_un_link (fp)
- struct _IO_FILE_plus *fp;
-{
- if (fp->file._flags & _IO_LINKED)
- {
- struct _IO_FILE_plus **f;
-#ifdef _IO_MTSAFE_IO
- _IO_lock_lock (list_all_lock);
-#endif
- for (f = &_IO_list_all; *f; f = (struct _IO_FILE_plus **) &(*f)->file._chain)
- {
- if (*f == fp)
- {
- *f = (struct _IO_FILE_plus *) fp->file._chain;
- break;
- }
- }
-#ifdef _IO_MTSAFE_IO
- _IO_lock_unlock (list_all_lock);
-#endif
- fp->file._flags &= ~_IO_LINKED;
- }
-}
-
-void
-_IO_link_in (fp)
- struct _IO_FILE_plus *fp;
-{
- if ((fp->file._flags & _IO_LINKED) == 0)
- {
- fp->file._flags |= _IO_LINKED;
-#ifdef _IO_MTSAFE_IO
- _IO_lock_lock (list_all_lock);
-#endif
- fp->file._chain = (_IO_FILE *) _IO_list_all;
- _IO_list_all = fp;
-#ifdef _IO_MTSAFE_IO
- _IO_lock_unlock (list_all_lock);
-#endif
- }
-}
-
-/* Return minimum _pos markers
- Assumes the current get area is the main get area. */
-_IO_ssize_t _IO_least_marker __P ((_IO_FILE *fp, char *end_p));
-
-_IO_ssize_t
-_IO_least_marker (fp, end_p)
- _IO_FILE *fp;
- char *end_p;
-{
- _IO_ssize_t least_so_far = end_p - fp->_IO_read_base;
- struct _IO_marker *mark;
- for (mark = fp->_markers; mark != NULL; mark = mark->_next)
- if (mark->_pos < least_so_far)
- least_so_far = mark->_pos;
- return least_so_far;
-}
-
-/* Switch current get area from backup buffer to (start of) main get area. */
-
-void
-_IO_switch_to_main_get_area (fp)
- _IO_FILE *fp;
-{
- char *tmp;
- fp->_flags &= ~_IO_IN_BACKUP;
- /* Swap _IO_read_end and _IO_save_end. */
- tmp = fp->_IO_read_end;
- fp->_IO_read_end = fp->_IO_save_end;
- fp->_IO_save_end= tmp;
- /* Swap _IO_read_base and _IO_save_base. */
- tmp = fp->_IO_read_base;
- fp->_IO_read_base = fp->_IO_save_base;
- fp->_IO_save_base = tmp;
- /* Set _IO_read_ptr. */
- fp->_IO_read_ptr = fp->_IO_read_base;
-}
-
-/* Switch current get area from main get area to (end of) backup area. */
-
-void
-_IO_switch_to_backup_area (fp)
- _IO_FILE *fp;
-{
- char *tmp;
- fp->_flags |= _IO_IN_BACKUP;
- /* Swap _IO_read_end and _IO_save_end. */
- tmp = fp->_IO_read_end;
- fp->_IO_read_end = fp->_IO_save_end;
- fp->_IO_save_end = tmp;
- /* Swap _IO_read_base and _IO_save_base. */
- tmp = fp->_IO_read_base;
- fp->_IO_read_base = fp->_IO_save_base;
- fp->_IO_save_base = tmp;
- /* Set _IO_read_ptr. */
- fp->_IO_read_ptr = fp->_IO_read_end;
-}
-
-int
-_IO_switch_to_get_mode (fp)
- _IO_FILE *fp;
-{
- if (fp->_IO_write_ptr > fp->_IO_write_base)
- if (_IO_OVERFLOW (fp, EOF) == EOF)
- return EOF;
- if (_IO_in_backup (fp))
- fp->_IO_read_base = fp->_IO_backup_base;
- else
- {
- fp->_IO_read_base = fp->_IO_buf_base;
- if (fp->_IO_write_ptr > fp->_IO_read_end)
- fp->_IO_read_end = fp->_IO_write_ptr;
- }
- fp->_IO_read_ptr = fp->_IO_write_ptr;
-
- fp->_IO_write_base = fp->_IO_write_ptr = fp->_IO_write_end = fp->_IO_read_ptr;
-
- fp->_flags &= ~_IO_CURRENTLY_PUTTING;
- return 0;
-}
-
-void
-_IO_free_backup_area (fp)
- _IO_FILE *fp;
-{
- if (_IO_in_backup (fp))
- _IO_switch_to_main_get_area (fp); /* Just in case. */
- free (fp->_IO_save_base);
- fp->_IO_save_base = NULL;
- fp->_IO_save_end = NULL;
- fp->_IO_backup_base = NULL;
-}
-
-#if 0
-int
-_IO_switch_to_put_mode (fp)
- _IO_FILE *fp;
-{
- fp->_IO_write_base = fp->_IO_read_ptr;
- fp->_IO_write_ptr = fp->_IO_read_ptr;
- /* Following is wrong if line- or un-buffered? */
- fp->_IO_write_end = (fp->_flags & _IO_IN_BACKUP
- ? fp->_IO_read_end : fp->_IO_buf_end);
-
- fp->_IO_read_ptr = fp->_IO_read_end;
- fp->_IO_read_base = fp->_IO_read_end;
-
- fp->_flags |= _IO_CURRENTLY_PUTTING;
- return 0;
-}
-#endif
-
-int
-__overflow (f, ch)
- _IO_FILE *f;
- int ch;
-{
- /* This is a single-byte stream. */
- if (f->_mode == 0)
- _IO_fwide (f, -1);
- return _IO_OVERFLOW (f, ch);
-}
-
-static int save_for_backup __P ((_IO_FILE *fp, char *end_p))
-#ifdef _LIBC
- internal_function
-#endif
- ;
-
-static int
-#ifdef _LIBC
-internal_function
-#endif
-save_for_backup (fp, end_p)
- _IO_FILE *fp;
- char *end_p;
-{
- /* Append [_IO_read_base..end_p] to backup area. */
- _IO_ssize_t least_mark = _IO_least_marker (fp, end_p);
- /* needed_size is how much space we need in the backup area. */
- _IO_size_t needed_size = (end_p - fp->_IO_read_base) - least_mark;
- /* FIXME: Dubious arithmetic if pointers are NULL */
- _IO_size_t current_Bsize = fp->_IO_save_end - fp->_IO_save_base;
- _IO_size_t avail; /* Extra space available for future expansion. */
- _IO_ssize_t delta;
- struct _IO_marker *mark;
- if (needed_size > current_Bsize)
- {
- char *new_buffer;
- avail = 100;
- new_buffer = (char *) malloc (avail + needed_size);
- if (new_buffer == NULL)
- return EOF; /* FIXME */
- if (least_mark < 0)
- {
-#ifdef _LIBC
- __mempcpy (__mempcpy (new_buffer + avail,
- fp->_IO_save_end + least_mark,
- -least_mark),
- fp->_IO_read_base,
- end_p - fp->_IO_read_base);
-#else
- memcpy (new_buffer + avail,
- fp->_IO_save_end + least_mark,
- -least_mark);
- memcpy (new_buffer + avail - least_mark,
- fp->_IO_read_base,
- end_p - fp->_IO_read_base);
-#endif
- }
- else
- memcpy (new_buffer + avail,
- fp->_IO_read_base + least_mark,
- needed_size);
- if (fp->_IO_save_base)
- free (fp->_IO_save_base);
- fp->_IO_save_base = new_buffer;
- fp->_IO_save_end = new_buffer + avail + needed_size;
- }
- else
- {
- avail = current_Bsize - needed_size;
- if (least_mark < 0)
- {
- memmove (fp->_IO_save_base + avail,
- fp->_IO_save_end + least_mark,
- -least_mark);
- memcpy (fp->_IO_save_base + avail - least_mark,
- fp->_IO_read_base,
- end_p - fp->_IO_read_base);
- }
- else if (needed_size > 0)
- memcpy (fp->_IO_save_base + avail,
- fp->_IO_read_base + least_mark,
- needed_size);
- }
- fp->_IO_backup_base = fp->_IO_save_base + avail;
- /* Adjust all the streammarkers. */
- delta = end_p - fp->_IO_read_base;
- for (mark = fp->_markers; mark != NULL; mark = mark->_next)
- mark->_pos -= delta;
- return 0;
-}
-
-int
-__underflow (fp)
- _IO_FILE *fp;
-{
-#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
- if (fp->_vtable_offset == 0 && _IO_fwide (fp, -1) != -1)
- return EOF;
-#endif
-
- if (fp->_mode == 0)
- _IO_fwide (fp, -1);
- if (_IO_in_put_mode (fp))
- if (_IO_switch_to_get_mode (fp) == EOF)
- return EOF;
- if (fp->_IO_read_ptr < fp->_IO_read_end)
- return *(unsigned char *) fp->_IO_read_ptr;
- if (_IO_in_backup (fp))
- {
- _IO_switch_to_main_get_area (fp);
- if (fp->_IO_read_ptr < fp->_IO_read_end)
- return *(unsigned char *) fp->_IO_read_ptr;
- }
- if (_IO_have_markers (fp))
- {
- if (save_for_backup (fp, fp->_IO_read_end))
- return EOF;
- }
- else if (_IO_have_backup (fp))
- _IO_free_backup_area (fp);
- return _IO_UNDERFLOW (fp);
-}
-
-int
-__uflow (fp)
- _IO_FILE *fp;
-{
-#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
- if (fp->_vtable_offset == 0 && _IO_fwide (fp, -1) != -1)
- return EOF;
-#endif
-
- if (fp->_mode == 0)
- _IO_fwide (fp, -11);
- if (_IO_in_put_mode (fp))
- if (_IO_switch_to_get_mode (fp) == EOF)
- return EOF;
- if (fp->_IO_read_ptr < fp->_IO_read_end)
- return *(unsigned char *) fp->_IO_read_ptr++;
- if (_IO_in_backup (fp))
- {
- _IO_switch_to_main_get_area (fp);
- if (fp->_IO_read_ptr < fp->_IO_read_end)
- return *(unsigned char *) fp->_IO_read_ptr++;
- }
- if (_IO_have_markers (fp))
- {
- if (save_for_backup (fp, fp->_IO_read_end))
- return EOF;
- }
- else if (_IO_have_backup (fp))
- _IO_free_backup_area (fp);
- return _IO_UFLOW (fp);
-}
-
-void
-_IO_setb (f, b, eb, a)
- _IO_FILE *f;
- char *b;
- char *eb;
- int a;
-{
- if (f->_IO_buf_base && !(f->_flags & _IO_USER_BUF))
- FREE_BUF (f->_IO_buf_base, _IO_blen (f));
- f->_IO_buf_base = b;
- f->_IO_buf_end = eb;
- if (a)
- f->_flags &= ~_IO_USER_BUF;
- else
- f->_flags |= _IO_USER_BUF;
-}
-
-void
-_IO_doallocbuf (fp)
- _IO_FILE *fp;
-{
- if (fp->_IO_buf_base)
- return;
- if (!(fp->_flags & _IO_UNBUFFERED))
- if (_IO_DOALLOCATE (fp) != EOF)
- return;
- _IO_setb (fp, fp->_shortbuf, fp->_shortbuf+1, 0);
-}
-
-int
-_IO_default_underflow (fp)
- _IO_FILE *fp;
-{
- return EOF;
-}
-
-int
-_IO_default_uflow (fp)
- _IO_FILE *fp;
-{
- int ch = _IO_UNDERFLOW (fp);
- if (ch == EOF)
- return EOF;
- return *(unsigned char *) fp->_IO_read_ptr++;
-}
-
-_IO_size_t
-_IO_default_xsputn (f, data, n)
- _IO_FILE *f;
- const void *data;
- _IO_size_t n;
-{
- const char *s = (char *) data;
- _IO_size_t more = n;
- if (more <= 0)
- return 0;
- for (;;)
- {
- /* Space available. */
- _IO_ssize_t count = f->_IO_write_end - f->_IO_write_ptr;
- if (count > 0)
- {
- if ((_IO_size_t) count > more)
- count = more;
- if (count > 20)
- {
-#ifdef _LIBC
- f->_IO_write_ptr = __mempcpy (f->_IO_write_ptr, s, count);
-#else
- memcpy (f->_IO_write_ptr, s, count);
- f->_IO_write_ptr += count;
-#endif
- s += count;
- }
- else if (count <= 0)
- count = 0;
- else
- {
- char *p = f->_IO_write_ptr;
- _IO_ssize_t i;
- for (i = count; --i >= 0; )
- *p++ = *s++;
- f->_IO_write_ptr = p;
- }
- more -= count;
- }
- if (more == 0 || _IO_OVERFLOW (f, (unsigned char) *s++) == EOF)
- break;
- more--;
- }
- return n - more;
-}
-
-_IO_size_t
-_IO_sgetn (fp, data, n)
- _IO_FILE *fp;
- void *data;
- _IO_size_t n;
-{
- /* FIXME handle putback buffer here! */
- return _IO_XSGETN (fp, data, n);
-}
-
-_IO_size_t
-_IO_default_xsgetn (fp, data, n)
- _IO_FILE *fp;
- void *data;
- _IO_size_t n;
-{
- _IO_size_t more = n;
- char *s = (char*) data;
- for (;;)
- {
- /* Data available. */
- _IO_ssize_t count = fp->_IO_read_end - fp->_IO_read_ptr;
- if (count > 0)
- {
- if ((_IO_size_t) count > more)
- count = more;
- if (count > 20)
- {
-#ifdef _LIBC
- s = __mempcpy (s, fp->_IO_read_ptr, count);
-#else
- memcpy (s, fp->_IO_read_ptr, count);
- s += count;
-#endif
- fp->_IO_read_ptr += count;
- }
- else if (count <= 0)
- count = 0;
- else
- {
- char *p = fp->_IO_read_ptr;
- int i = (int) count;
- while (--i >= 0)
- *s++ = *p++;
- fp->_IO_read_ptr = p;
- }
- more -= count;
- }
- if (more == 0 || __underflow (fp) == EOF)
- break;
- }
- return n - more;
-}
-
-#if 0
-/* Seems not to be needed. --drepper */
-int
-_IO_sync (fp)
- _IO_FILE *fp;
-{
- return 0;
-}
-#endif
-
-_IO_FILE *
-_IO_default_setbuf (fp, p, len)
- _IO_FILE *fp;
- char *p;
- _IO_ssize_t len;
-{
- if (_IO_SYNC (fp) == EOF)
- return NULL;
- if (p == NULL || len == 0)
- {
- fp->_flags |= _IO_UNBUFFERED;
- _IO_setb (fp, fp->_shortbuf, fp->_shortbuf+1, 0);
- }
- else
- {
- fp->_flags &= ~_IO_UNBUFFERED;
- _IO_setb (fp, p, p+len, 0);
- }
- fp->_IO_write_base = fp->_IO_write_ptr = fp->_IO_write_end = 0;
- fp->_IO_read_base = fp->_IO_read_ptr = fp->_IO_read_end = 0;
- return fp;
-}
-
-_IO_off64_t
-_IO_default_seekpos (fp, pos, mode)
- _IO_FILE *fp;
- _IO_off64_t pos;
- int mode;
-{
- return _IO_SEEKOFF (fp, pos, 0, mode);
-}
-
-int
-_IO_default_doallocate (fp)
- _IO_FILE *fp;
-{
- char *buf;
-
- ALLOC_BUF (buf, _IO_BUFSIZ, EOF);
- _IO_setb (fp, buf, buf+_IO_BUFSIZ, 1);
- return 1;
-}
-
-void
-_IO_init (fp, flags)
- _IO_FILE *fp;
- int flags;
-{
- _IO_no_init (fp, flags, -1, NULL, NULL);
-}
-
-void
-_IO_no_init (fp, flags, orientation, wd, jmp)
- _IO_FILE *fp;
- int flags;
- int orientation;
- struct _IO_wide_data *wd;
- struct _IO_jump_t *jmp;
-{
- fp->_flags = _IO_MAGIC|flags;
- fp->_IO_buf_base = NULL;
- fp->_IO_buf_end = NULL;
- fp->_IO_read_base = NULL;
- fp->_IO_read_ptr = NULL;
- fp->_IO_read_end = NULL;
- fp->_IO_write_base = NULL;
- fp->_IO_write_ptr = NULL;
- fp->_IO_write_end = NULL;
- fp->_chain = NULL; /* Not necessary. */
-
- fp->_IO_save_base = NULL;
- fp->_IO_backup_base = NULL;
- fp->_IO_save_end = NULL;
- fp->_markers = NULL;
- fp->_cur_column = 0;
-#if _IO_JUMPS_OFFSET
- fp->_vtable_offset = 0;
-#endif
-#ifdef _IO_MTSAFE_IO
- _IO_lock_init (*fp->_lock);
-#endif
- fp->_mode = orientation;
-#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
- if (orientation >= 0)
- {
- fp->_wide_data = wd;
- fp->_wide_data->_IO_buf_base = NULL;
- fp->_wide_data->_IO_buf_end = NULL;
- fp->_wide_data->_IO_read_base = NULL;
- fp->_wide_data->_IO_read_ptr = NULL;
- fp->_wide_data->_IO_read_end = NULL;
- fp->_wide_data->_IO_write_base = NULL;
- fp->_wide_data->_IO_write_ptr = NULL;
- fp->_wide_data->_IO_write_end = NULL;
- fp->_wide_data->_IO_save_base = NULL;
- fp->_wide_data->_IO_backup_base = NULL;
- fp->_wide_data->_IO_save_end = NULL;
-
- fp->_wide_data->_wide_vtable = jmp;
- }
-#endif
-}
-
-int
-_IO_default_sync (fp)
- _IO_FILE *fp;
-{
- return 0;
-}
-
-/* The way the C++ classes are mapped into the C functions in the
- current implementation, this function can get called twice! */
-
-void
-_IO_default_finish (fp, dummy)
- _IO_FILE *fp;
- int dummy;
-{
- struct _IO_marker *mark;
- if (fp->_IO_buf_base && !(fp->_flags & _IO_USER_BUF))
- {
- FREE_BUF (fp->_IO_buf_base, _IO_blen (fp));
- fp->_IO_buf_base = fp->_IO_buf_end = NULL;
- }
-
- for (mark = fp->_markers; mark != NULL; mark = mark->_next)
- mark->_sbuf = NULL;
-
- if (fp->_IO_save_base)
- {
- free (fp->_IO_save_base);
- fp->_IO_save_base = NULL;
- }
-
-#ifdef _IO_MTSAFE_IO
- _IO_lock_fini (*fp->_lock);
-#endif
-
- _IO_un_link ((struct _IO_FILE_plus *) fp);
-}
-
-_IO_off64_t
-_IO_default_seekoff (fp, offset, dir, mode)
- _IO_FILE *fp;
- _IO_off64_t offset;
- int dir;
- int mode;
-{
- return _IO_pos_BAD;
-}
-
-int
-_IO_sputbackc (fp, c)
- _IO_FILE *fp;
- int c;
-{
- int result;
-
- if (fp->_IO_read_ptr > fp->_IO_read_base
- && (unsigned char)fp->_IO_read_ptr[-1] == (unsigned char)c)
- {
- fp->_IO_read_ptr--;
- result = (unsigned char) c;
- }
- else
- result = _IO_PBACKFAIL (fp, c);
-
- if (result != EOF)
- fp->_flags &= ~_IO_EOF_SEEN;
-
- return result;
-}
-
-int
-_IO_sungetc (fp)
- _IO_FILE *fp;
-{
- int result;
-
- if (fp->_IO_read_ptr > fp->_IO_read_base)
- {
- fp->_IO_read_ptr--;
- result = (unsigned char) *fp->_IO_read_ptr;
- }
- else
- result = _IO_PBACKFAIL (fp, EOF);
-
- if (result != EOF)
- fp->_flags &= ~_IO_EOF_SEEN;
-
- return result;
-}
-
-#if 0 /* Work in progress */
-/* Seems not to be needed. */
-#if 0
-void
-_IO_set_column (fp, c)
- _IO_FILE *fp;
- int c;
-{
- if (c == -1)
- fp->_column = -1;
- else
- fp->_column = c - (fp->_IO_write_ptr - fp->_IO_write_base);
-}
-#else
-int
-_IO_set_column (fp, i)
- _IO_FILE *fp;
- int i;
-{
- fp->_cur_column = i + 1;
- return 0;
-}
-#endif
-#endif
-
-
-unsigned
-_IO_adjust_column (start, line, count)
- unsigned start;
- const char *line;
- int count;
-{
- const char *ptr = line + count;
- while (ptr > line)
- if (*--ptr == '\n')
- return line + count - ptr - 1;
- return start + count;
-}
-
-#if 0
-/* Seems not to be needed. --drepper */
-int
-_IO_get_column (fp)
- _IO_FILE *fp;
-{
- if (fp->_cur_column)
- return _IO_adjust_column (fp->_cur_column - 1,
- fp->_IO_write_base,
- fp->_IO_write_ptr - fp->_IO_write_base);
- return -1;
-}
-#endif
-
-int
-_IO_flush_all ()
-{
- int result = 0;
- struct _IO_FILE *fp;
- for (fp = (_IO_FILE *) _IO_list_all; fp; fp = fp->_chain)
- if (((fp->_mode < 0 && fp->_IO_write_ptr > fp->_IO_write_base)
-#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
- || (fp->_vtable_offset == 0
- && fp->_mode > 0 && (fp->_wide_data->_IO_write_ptr
- > fp->_wide_data->_IO_write_base))
-#endif
- )
- && _IO_OVERFLOW (fp, EOF) == EOF)
- result = EOF;
- return result;
-}
-
-void
-_IO_flush_all_linebuffered ()
-{
- struct _IO_FILE *fp;
- for (fp = (_IO_FILE *) _IO_list_all; fp; fp = fp->_chain)
- if ((fp->_flags & _IO_NO_WRITES) == 0 && fp->_flags & _IO_LINE_BUF)
- _IO_OVERFLOW (fp, EOF);
-}
-
-static void _IO_unbuffer_write __P ((void));
-
-static void
-_IO_unbuffer_write ()
-{
- struct _IO_FILE *fp;
- for (fp = (_IO_FILE *) _IO_list_all; fp; fp = fp->_chain)
- if (! (fp->_flags & _IO_UNBUFFERED)
- && (! (fp->_flags & _IO_NO_WRITES)
- || (fp->_flags & _IO_IS_APPENDING))
- /* Iff stream is un-orientated, it wasn't used. */
- && fp->_mode != 0)
- _IO_SETBUF (fp, NULL, 0);
-}
-
-int
-_IO_cleanup ()
-{
- int result = _IO_flush_all ();
-
- /* We currently don't have a reliable mechanism for making sure that
- C++ static destructors are executed in the correct order.
- So it is possible that other static destructors might want to
- write to cout - and they're supposed to be able to do so.
-
- The following will make the standard streambufs be unbuffered,
- which forces any output from late destructors to be written out. */
- _IO_unbuffer_write ();
-
- return result;
-}
-
-
-void
-_IO_init_marker (marker, fp)
- struct _IO_marker *marker;
- _IO_FILE *fp;
-{
- marker->_sbuf = fp;
- if (_IO_in_put_mode (fp))
- _IO_switch_to_get_mode (fp);
- if (_IO_in_backup (fp))
- marker->_pos = fp->_IO_read_ptr - fp->_IO_read_end;
- else
- marker->_pos = fp->_IO_read_ptr - fp->_IO_read_base;
-
- /* Should perhaps sort the chain? */
- marker->_next = fp->_markers;
- fp->_markers = marker;
-}
-
-void
-_IO_remove_marker (marker)
- struct _IO_marker *marker;
-{
- /* Unlink from sb's chain. */
- struct _IO_marker **ptr = &marker->_sbuf->_markers;
- for (; ; ptr = &(*ptr)->_next)
- {
- if (*ptr == NULL)
- break;
- else if (*ptr == marker)
- {
- *ptr = marker->_next;
- return;
- }
- }
-#if 0
- if _sbuf has a backup area that is no longer needed, should we delete
- it now, or wait until the next underflow?
-#endif
-}
-
-#define BAD_DELTA EOF
-
-int
-_IO_marker_difference (mark1, mark2)
- struct _IO_marker *mark1;
- struct _IO_marker *mark2;
-{
- return mark1->_pos - mark2->_pos;
-}
-
-/* Return difference between MARK and current position of MARK's stream. */
-int
-_IO_marker_delta (mark)
- struct _IO_marker *mark;
-{
- int cur_pos;
- if (mark->_sbuf == NULL)
- return BAD_DELTA;
- if (_IO_in_backup (mark->_sbuf))
- cur_pos = mark->_sbuf->_IO_read_ptr - mark->_sbuf->_IO_read_end;
- else
- cur_pos = mark->_sbuf->_IO_read_ptr - mark->_sbuf->_IO_read_base;
- return mark->_pos - cur_pos;
-}
-
-int
-_IO_seekmark (fp, mark, delta)
- _IO_FILE *fp;
- struct _IO_marker *mark;
- int delta;
-{
- if (mark->_sbuf != fp)
- return EOF;
- if (mark->_pos >= 0)
- {
- if (_IO_in_backup (fp))
- _IO_switch_to_main_get_area (fp);
- fp->_IO_read_ptr = fp->_IO_read_base + mark->_pos;
- }
- else
- {
- if (!_IO_in_backup (fp))
- _IO_switch_to_backup_area (fp);
- fp->_IO_read_ptr = fp->_IO_read_end + mark->_pos;
- }
- return 0;
-}
-
-void
-_IO_unsave_markers (fp)
- _IO_FILE *fp;
-{
- struct _IO_marker *mark = fp->_markers;
- if (mark)
- {
-#ifdef TODO
- streampos offset = seekoff (0, ios::cur, ios::in);
- if (offset != EOF)
- {
- offset += eGptr () - Gbase ();
- for ( ; mark != NULL; mark = mark->_next)
- mark->set_streampos (mark->_pos + offset);
- }
- else
- {
- for ( ; mark != NULL; mark = mark->_next)
- mark->set_streampos (EOF);
- }
-#endif
- fp->_markers = 0;
- }
-
- if (_IO_have_backup (fp))
- _IO_free_backup_area (fp);
-}
-
-#if 0
-/* Seems not to be needed. --drepper */
-int
-_IO_nobackup_pbackfail (fp, c)
- _IO_FILE *fp;
- int c;
-{
- if (fp->_IO_read_ptr > fp->_IO_read_base)
- fp->_IO_read_ptr--;
- if (c != EOF && *fp->_IO_read_ptr != c)
- *fp->_IO_read_ptr = c;
- return (unsigned char) c;
-}
-#endif
-
-int
-_IO_default_pbackfail (fp, c)
- _IO_FILE *fp;
- int c;
-{
- if (fp->_IO_read_ptr > fp->_IO_read_base && !_IO_in_backup (fp)
- && (unsigned char) fp->_IO_read_ptr[-1] == c)
- --fp->_IO_read_ptr;
- else
- {
- /* Need to handle a filebuf in write mode (switch to read mode). FIXME!*/
- if (!_IO_in_backup (fp))
- {
- /* We need to keep the invariant that the main get area
- logically follows the backup area. */
- if (fp->_IO_read_ptr > fp->_IO_read_base && _IO_have_backup (fp))
- {
- if (save_for_backup (fp, fp->_IO_read_ptr))
- return EOF;
- }
- else if (!_IO_have_backup (fp))
- {
- /* No backup buffer: allocate one. */
- /* Use nshort buffer, if unused? (probably not) FIXME */
- int backup_size = 128;
- char *bbuf = (char *) malloc (backup_size);
- if (bbuf == NULL)
- return EOF;
- fp->_IO_save_base = bbuf;
- fp->_IO_save_end = fp->_IO_save_base + backup_size;
- fp->_IO_backup_base = fp->_IO_save_end;
- }
- fp->_IO_read_base = fp->_IO_read_ptr;
- _IO_switch_to_backup_area (fp);
- }
- else if (fp->_IO_read_ptr <= fp->_IO_read_base)
- {
- /* Increase size of existing backup buffer. */
- _IO_size_t new_size;
- _IO_size_t old_size = fp->_IO_read_end - fp->_IO_read_base;
- char *new_buf;
- new_size = 2 * old_size;
- new_buf = (char *) malloc (new_size);
- if (new_buf == NULL)
- return EOF;
- memcpy (new_buf + (new_size - old_size), fp->_IO_read_base,
- old_size);
- free (fp->_IO_read_base);
- _IO_setg (fp, new_buf, new_buf + (new_size - old_size),
- new_buf + new_size);
- fp->_IO_backup_base = fp->_IO_read_ptr;
- }
-
- *--fp->_IO_read_ptr = c;
- }
- return (unsigned char) c;
-}
-
-_IO_off64_t
-_IO_default_seek (fp, offset, dir)
- _IO_FILE *fp;
- _IO_off64_t offset;
- int dir;
-{
- return _IO_pos_BAD;
-}
-
-int
-_IO_default_stat (fp, st)
- _IO_FILE *fp;
- void* st;
-{
- return EOF;
-}
-
-_IO_ssize_t
-_IO_default_read (fp, data, n)
- _IO_FILE* fp;
- void *data;
- _IO_ssize_t n;
-{
- return -1;
-}
-
-_IO_ssize_t
-_IO_default_write (fp, data, n)
- _IO_FILE *fp;
- const void *data;
- _IO_ssize_t n;
-{
- return 0;
-}
-
-int
-_IO_default_showmanyc (fp)
- _IO_FILE *fp;
-{
- return -1;
-}
-
-void
-_IO_default_imbue (fp, locale)
- _IO_FILE *fp;
- void *locale;
-{
-}
-
-_IO_ITER
-_IO_iter_begin()
-{
- return (_IO_ITER) _IO_list_all;
-}
-
-_IO_ITER
-_IO_iter_end()
-{
- return NULL;
-}
-
-_IO_ITER
-_IO_iter_next(iter)
- _IO_ITER iter;
-{
- return iter->_chain;
-}
-
-_IO_FILE *
-_IO_iter_file(iter)
- _IO_ITER iter;
-{
- return iter;
-}
-
-void
-_IO_list_lock()
-{
-#ifdef _IO_MTSAFE_IO
- _IO_lock_lock (list_all_lock);
-#endif
-}
-
-void
-_IO_list_unlock()
-{
-#ifdef _IO_MTSAFE_IO
- _IO_lock_unlock (list_all_lock);
-#endif
-}
-
-void
-_IO_list_resetlock()
-{
-#ifdef _IO_MTSAFE_IO
- _IO_lock_init (list_all_lock);
-#endif
-}
-
-
-#ifdef TODO
-#if defined(linux)
-#define IO_CLEANUP ;
-#endif
-
-#ifdef IO_CLEANUP
- IO_CLEANUP
-#else
-struct __io_defs {
- __io_defs() { }
- ~__io_defs() { _IO_cleanup (); }
-};
-__io_defs io_defs__;
-#endif
-
-#endif /* TODO */
-
-#ifdef weak_alias
-weak_alias (_IO_cleanup, _cleanup)
-#endif
-
-#ifdef text_set_element
-text_set_element(__libc_atexit, _cleanup);
-#endif
diff --git a/contrib/libstdc++/libio/iofclose.c b/contrib/libstdc++/libio/iofclose.c
deleted file mode 100644
index 43a3f5833fc5..000000000000
--- a/contrib/libstdc++/libio/iofclose.c
+++ /dev/null
@@ -1,97 +0,0 @@
-/* Copyright (C) 1993, 1995, 1997-1999, 2000 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#include "libioP.h"
-#ifdef __STDC__
-#include <stdlib.h>
-#endif
-#if _LIBC
-# include "../iconv/gconv_int.h"
-# include <shlib-compat.h>
-#else
-# define SHLIB_COMPAT(a, b, c) 0
-# define _IO_new_fclose fclose
-#endif
-
-int
-_IO_new_fclose (fp)
- _IO_FILE *fp;
-{
- int status;
-
- CHECK_FILE(fp, EOF);
-
-#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
- /* We desperately try to help programs which are using streams in a
- strange way and mix old and new functions. Detect old streams
- here. */
- if (fp->_vtable_offset != 0)
- return _IO_old_fclose (fp);
-#endif
-
- _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
- _IO_flockfile (fp);
- if (fp->_IO_file_flags & _IO_IS_FILEBUF)
- status = _IO_file_close_it (fp);
- else
- status = fp->_flags & _IO_ERR_SEEN ? -1 : 0;
- _IO_FINISH (fp);
- _IO_funlockfile (fp);
- if (fp->_mode > 0)
- {
-#if _LIBC
- /* This stream has a wide orientation. This means we have to free
- the conversion functions. */
- struct _IO_codecvt *cc = fp->_codecvt;
-
- if (cc->__cd_in.__cd.__steps->__shlib_handle != NULL)
- {
- --cc->__cd_in.__cd.__steps->__counter;
- __gconv_close_transform (cc->__cd_in.__cd.__steps, 1);
- }
- if (cc->__cd_out.__cd.__steps->__shlib_handle != NULL)
- {
- --cc->__cd_out.__cd.__steps->__counter;
- __gconv_close_transform (cc->__cd_out.__cd.__steps, 1);
- }
-#endif
- }
- _IO_cleanup_region_end (0);
- if (_IO_have_backup (fp))
- _IO_free_backup_area (fp);
- if (fp != _IO_stdin && fp != _IO_stdout && fp != _IO_stderr)
- {
- fp->_IO_file_flags = 0;
- free(fp);
- }
-
- return status;
-}
-
-#ifdef _LIBC
-versioned_symbol (libc, _IO_new_fclose, _IO_fclose, GLIBC_2_1);
-strong_alias (_IO_new_fclose, __new_fclose)
-versioned_symbol (libc, __new_fclose, fclose, GLIBC_2_1);
-#endif
diff --git a/contrib/libstdc++/libio/iofopen.c b/contrib/libstdc++/libio/iofopen.c
deleted file mode 100644
index 2dcdee0235cb..000000000000
--- a/contrib/libstdc++/libio/iofopen.c
+++ /dev/null
@@ -1,78 +0,0 @@
-/* Copyright (C) 1993, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#include "libioP.h"
-#ifdef __STDC__
-#include <stdlib.h>
-#endif
-#ifdef _LIBC
-# include <shlib-compat.h>
-#else
-# define _IO_new_fopen fopen
-#endif
-
-_IO_FILE *
-_IO_new_fopen (filename, mode)
- const char *filename;
- const char *mode;
-{
- struct locked_FILE
- {
- struct _IO_FILE_plus fp;
-#ifdef _IO_MTSAFE_IO
- _IO_lock_t lock;
-#endif
-#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
- struct _IO_wide_data wd;
-#endif /* !(defined _LIBC || defined _GLIBCPP_USE_WCHAR_T) */
- } *new_f = (struct locked_FILE *) malloc (sizeof (struct locked_FILE));
-
- if (new_f == NULL)
- return NULL;
-#ifdef _IO_MTSAFE_IO
- new_f->fp.file._lock = &new_f->lock;
-#endif
-#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
- _IO_no_init (&new_f->fp.file, 0, 0, &new_f->wd, &_IO_wfile_jumps);
-#else
- _IO_no_init (&new_f->fp.file, 1, 0, NULL, NULL);
-#endif
- _IO_JUMPS (&new_f->fp) = &_IO_file_jumps;
- _IO_file_init (&new_f->fp);
-#if !_IO_UNIFIED_JUMPTABLES
- new_f->fp.vtable = NULL;
-#endif
- if (_IO_file_fopen ((_IO_FILE *) new_f, filename, mode, 1) != NULL)
- return (_IO_FILE *) &new_f->fp;
- _IO_un_link (&new_f->fp);
- free (new_f);
- return NULL;
-}
-
-#ifdef _LIBC
-strong_alias (_IO_new_fopen, __new_fopen)
-versioned_symbol (libc, _IO_new_fopen, _IO_fopen, GLIBC_2_1);
-versioned_symbol (libc, __new_fopen, fopen, GLIBC_2_1);
-#endif
diff --git a/contrib/libstdc++/libio/iofwide.c b/contrib/libstdc++/libio/iofwide.c
deleted file mode 100644
index 76a20ce3fb43..000000000000
--- a/contrib/libstdc++/libio/iofwide.c
+++ /dev/null
@@ -1,476 +0,0 @@
-/* Copyright (C) 1999, 2000 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#include <libioP.h>
-#ifdef _LIBC
-# include <dlfcn.h>
-# include <wchar.h>
-# include <locale/localeinfo.h>
-# include <wcsmbs/wcsmbsload.h>
-# include <iconv/gconv_int.h>
-#endif
-#include <stdlib.h>
-#include <string.h>
-
-#if defined(_LIBC) || defined(_GLIBCPP_USE_WCHAR_T)
-# include <langinfo.h>
-#endif
-
-#ifdef _GLIBCPP_USE_WCHAR_T
-/* Prototypes of libio's codecvt functions. */
-static enum __codecvt_result do_out (struct _IO_codecvt *codecvt,
- __c_mbstate_t *statep,
- const wchar_t *from_start,
- const wchar_t *from_end,
- const wchar_t **from_stop, char *to_start,
- char *to_end, char **to_stop);
-static enum __codecvt_result do_unshift (struct _IO_codecvt *codecvt,
- __c_mbstate_t *statep, char *to_start,
- char *to_end, char **to_stop);
-static enum __codecvt_result do_in (struct _IO_codecvt *codecvt,
- __c_mbstate_t *statep,
- const char *from_start,
- const char *from_end,
- const char **from_stop, wchar_t *to_start,
- wchar_t *to_end, wchar_t **to_stop);
-static int do_encoding (struct _IO_codecvt *codecvt);
-static int do_length (struct _IO_codecvt *codecvt, __c_mbstate_t *statep,
- const char *from_start,
- const char *from_end, _IO_size_t max);
-static int do_max_length (struct _IO_codecvt *codecvt);
-static int do_always_noconv (struct _IO_codecvt *codecvt);
-
-
-/* The functions used in `codecvt' for libio are always the same. */
-struct _IO_codecvt __libio_codecvt =
-{
- .__codecvt_destr = NULL, /* Destructor, never used. */
- .__codecvt_do_out = do_out,
- .__codecvt_do_unshift = do_unshift,
- .__codecvt_do_in = do_in,
- .__codecvt_do_encoding = do_encoding,
- .__codecvt_do_always_noconv = do_always_noconv,
- .__codecvt_do_length = do_length,
- .__codecvt_do_max_length = do_max_length
-};
-
-
-#ifdef _LIBC
-static struct __gconv_trans_data libio_translit =
-{
- .__trans_fct = __gconv_transliterate
-};
-#endif
-#endif /* defined(GLIBCPP_USE_WCHAR_T) */
-
-/* Return orientation of stream. If mode is nonzero try to change
- the orientation first. */
-#undef _IO_fwide
-int
-_IO_fwide (fp, mode)
- _IO_FILE *fp;
- int mode;
-{
- /* Normalize the value. */
- mode = mode < 0 ? -1 : (mode == 0 ? 0 : 1);
-
- if (mode == 0 || fp->_mode != 0)
- /* The caller simply wants to know about the current orientation
- or the orientation already has been determined. */
- return fp->_mode;
-
- /* Set the orientation appropriately. */
- if (mode > 0)
- {
-#ifdef _GLIBCPP_USE_WCHAR_T
- struct _IO_codecvt *cc = fp->_codecvt;
-
- fp->_wide_data->_IO_read_ptr = fp->_wide_data->_IO_read_end;
- fp->_wide_data->_IO_write_ptr = fp->_wide_data->_IO_write_base;
-
-#ifdef _LIBC
- /* Get the character conversion functions based on the currently
- selected locale for LC_CTYPE. */
- {
- struct gconv_fcts fcts;
-
- /* Clear the state. We start all over again. */
- memset (&fp->_wide_data->_IO_state, '\0', sizeof (__c_mbstate_t));
- memset (&fp->_wide_data->_IO_last_state, '\0', sizeof (__c_mbstate_t));
-
- __wcsmbs_clone_conv (&fcts);
-
- /* The functions are always the same. */
- *cc = __libio_codecvt;
-
- cc->__cd_in.__cd.__nsteps = 1; /* Only one step allowed. */
- cc->__cd_in.__cd.__steps = fcts.towc;
-
- cc->__cd_in.__cd.__data[0].__invocation_counter = 0;
- cc->__cd_in.__cd.__data[0].__internal_use = 1;
- cc->__cd_in.__cd.__data[0].__flags = __GCONV_IS_LAST;
- cc->__cd_in.__cd.__data[0].__statep = &fp->_wide_data->_IO_state;
-
- /* XXX For now no transliteration. */
- cc->__cd_in.__cd.__data[0].__trans = NULL;
-
- cc->__cd_out.__cd.__nsteps = 1; /* Only one step allowed. */
- cc->__cd_out.__cd.__steps = fcts.tomb;
-
- cc->__cd_out.__cd.__data[0].__invocation_counter = 0;
- cc->__cd_out.__cd.__data[0].__internal_use = 1;
- cc->__cd_out.__cd.__data[0].__flags = __GCONV_IS_LAST;
- cc->__cd_out.__cd.__data[0].__statep = &fp->_wide_data->_IO_state;
-
- /* And now the transliteration. */
- cc->__cd_out.__cd.__data[0].__trans = &libio_translit;
- }
-#else
-# ifdef _GLIBCPP_USE_WCHAR_T
- {
- /* Determine internal and external character sets.
- XXX For now we make our life easy: we assume a fixed internal
- encoding (as most sane systems have; hi HP/UX!). If somebody
- cares about systems which changing internal charsets they
- should come up with a solution for the determination of the
- currently used internal character set. */
-#if 0
- const char *internal_ccs = _G_INTERNAL_CCS;
- const char *external_ccs = nl_langinfo(CODESET);
-
- if (external_ccs == NULL)
- external_ccs = "ISO-8859-1";
-
- cc->__cd_in = iconv_open (internal_ccs, external_ccs);
- if (cc->__cd_in != (iconv_t) -1)
- cc->__cd_out = iconv_open (external_ccs, internal_ccs);
-#endif
- }
-# else
-# error "somehow determine this from LC_CTYPE"
-# endif
-#endif
-
- /* From now on use the wide character callback functions. */
- ((struct _IO_FILE_plus *) fp)->vtable = fp->_wide_data->_wide_vtable;
-#else /* !defined(_GLIBCPP_USE_WCHAR_T) */
- mode = fp->_mode;
-#endif /* !defined(_GLIBCPP_USE_WCHAR_T) */
- }
-
- /* Set the mode now. */
- fp->_mode = mode;
-
- return mode;
-}
-
-#ifdef weak_alias
-weak_alias (_IO_fwide, fwide)
-#endif
-
-#ifdef _GLIBCPP_USE_WCHAR_T
-
-static enum __codecvt_result
-do_out (struct _IO_codecvt *codecvt, __c_mbstate_t *statep,
- const wchar_t *from_start, const wchar_t *from_end,
- const wchar_t **from_stop, char *to_start, char *to_end,
- char **to_stop)
-{
- enum __codecvt_result result;
-
-#ifdef _LIBC
- struct __gconv_step *gs = codecvt->__cd_out.__cd.__steps;
- int status;
- size_t dummy;
- const unsigned char *from_start_copy = (unsigned char *) from_start;
-
- codecvt->__cd_out.__cd.__data[0].__outbuf = to_start;
- codecvt->__cd_out.__cd.__data[0].__outbufend = to_end;
- codecvt->__cd_out.__cd.__data[0].__statep = statep;
-
- status = DL_CALL_FCT (gs->__fct,
- (gs, codecvt->__cd_out.__cd.__data, &from_start_copy,
- (const unsigned char *) from_end, NULL,
- &dummy, 0, 0));
-
- *from_stop = (wchar_t *) from_start_copy;
- *to_stop = codecvt->__cd_out.__cd.__data[0].__outbuf;
-
- switch (status)
- {
- case __GCONV_OK:
- case __GCONV_EMPTY_INPUT:
- result = __codecvt_ok;
- break;
-
- case __GCONV_FULL_OUTPUT:
- case __GCONV_INCOMPLETE_INPUT:
- result = __codecvt_partial;
- break;
-
- default:
- result = __codecvt_error;
- break;
- }
-#else
-# ifdef _GLIBCPP_USE_WCHAR_T
- size_t res;
- const char *from_start_copy = (const char *) from_start;
- size_t from_len = from_end - from_start;
- char *to_start_copy = to_start;
- size_t to_len = to_end - to_start;
- res = iconv (codecvt->__cd_out, &from_start_copy, &from_len,
- &to_start_copy, &to_len);
-
- if (res == 0 || from_len == 0)
- result = __codecvt_ok;
- else if (to_len < codecvt->__codecvt_do_max_length (codecvt))
- result = __codecvt_partial;
- else
- result = __codecvt_error;
-
-# else
- /* Decide what to do. */
- result = __codecvt_error;
-# endif
-#endif
-
- return result;
-}
-
-
-static enum __codecvt_result
-do_unshift (struct _IO_codecvt *codecvt, __c_mbstate_t *statep,
- char *to_start, char *to_end, char **to_stop)
-{
- enum __codecvt_result result;
-
-#ifdef _LIBC
- struct __gconv_step *gs = codecvt->__cd_out.__cd.__steps;
- int status;
- size_t dummy;
-
- codecvt->__cd_out.__cd.__data[0].__outbuf = to_start;
- codecvt->__cd_out.__cd.__data[0].__outbufend = to_end;
- codecvt->__cd_out.__cd.__data[0].__statep = statep;
-
- status = DL_CALL_FCT (gs->__fct,
- (gs, codecvt->__cd_out.__cd.__data, NULL, NULL,
- NULL, &dummy, 1, 0));
-
- *to_stop = codecvt->__cd_out.__cd.__data[0].__outbuf;
-
- switch (status)
- {
- case __GCONV_OK:
- case __GCONV_EMPTY_INPUT:
- result = __codecvt_ok;
- break;
-
- case __GCONV_FULL_OUTPUT:
- case __GCONV_INCOMPLETE_INPUT:
- result = __codecvt_partial;
- break;
-
- default:
- result = __codecvt_error;
- break;
- }
-#else
-# ifdef _GLIBCPP_USE_WCHAR_T
- size_t res;
- char *to_start_copy = (char *) to_start;
- size_t to_len = to_end - to_start;
-
- res = iconv (codecvt->__cd_out, NULL, NULL, &to_start_copy, &to_len);
-
- if (res == 0)
- result = __codecvt_ok;
- else if (to_len < codecvt->__codecvt_do_max_length (codecvt))
- result = __codecvt_partial;
- else
- result = __codecvt_error;
-# else
- /* Decide what to do. */
- result = __codecvt_error;
-# endif
-#endif
-
- return result;
-}
-
-
-static enum __codecvt_result
-do_in (struct _IO_codecvt *codecvt, __c_mbstate_t *statep,
- const char *from_start, const char *from_end, const char **from_stop,
- wchar_t *to_start, wchar_t *to_end, wchar_t **to_stop)
-{
- enum __codecvt_result result;
-
-#ifdef _LIBC
- struct __gconv_step *gs = codecvt->__cd_in.__cd.__steps;
- int status;
- size_t dummy;
- const unsigned char *from_start_copy = (unsigned char *) from_start;
-
- codecvt->__cd_in.__cd.__data[0].__outbuf = (char *) to_start;
- codecvt->__cd_in.__cd.__data[0].__outbufend = (char *) to_end;
- codecvt->__cd_in.__cd.__data[0].__statep = statep;
-
- status = DL_CALL_FCT (gs->__fct,
- (gs, codecvt->__cd_in.__cd.__data, &from_start_copy,
- from_end, NULL, &dummy, 0, 0));
-
- *from_stop = from_start_copy;
- *to_stop = (wchar_t *) codecvt->__cd_in.__cd.__data[0].__outbuf;
-
- switch (status)
- {
- case __GCONV_OK:
- case __GCONV_EMPTY_INPUT:
- result = __codecvt_ok;
- break;
-
- case __GCONV_FULL_OUTPUT:
- case __GCONV_INCOMPLETE_INPUT:
- result = __codecvt_partial;
- break;
-
- default:
- result = __codecvt_error;
- break;
- }
-#else
-# ifdef _GLIBCPP_USE_WCHAR_T
- size_t res;
- const char *from_start_copy = (const char *) from_start;
- size_t from_len = from_end - from_start;
- char *to_start_copy = (char *) from_start;
- size_t to_len = to_end - to_start;
-
- res = iconv (codecvt->__cd_in, &from_start_copy, &from_len,
- &to_start_copy, &to_len);
-
- if (res == 0)
- result = __codecvt_ok;
- else if (to_len == 0)
- result = __codecvt_partial;
- else if (from_len < codecvt->__codecvt_do_max_length (codecvt))
- result = __codecvt_partial;
- else
- result = __codecvt_error;
-# else
- /* Decide what to do. */
- result = __codecvt_error;
-# endif
-#endif
-
- return result;
-}
-
-
-static int
-do_encoding (struct _IO_codecvt *codecvt)
-{
-#ifdef _LIBC
- /* See whether the encoding is stateful. */
- if (codecvt->__cd_in.__cd.__steps[0].__stateful)
- return -1;
- /* Fortunately not. Now determine the input bytes for the conversion
- necessary for each wide character. */
- if (codecvt->__cd_in.__cd.__steps[0].__min_needed_from
- != codecvt->__cd_in.__cd.__steps[0].__max_needed_from)
- /* Not a constant value. */
- return 0;
-
- return codecvt->__cd_in.__cd.__steps[0].__min_needed_from;
-#else
- /* Worst case scenario. */
- return -1;
-#endif
-}
-
-
-static int
-do_always_noconv (struct _IO_codecvt *codecvt)
-{
- return 0;
-}
-
-
-static int
-do_length (struct _IO_codecvt *codecvt, __c_mbstate_t *statep,
- const char *from_start, const char *from_end, _IO_size_t max)
-{
- int result;
-#ifdef _LIBC
- const unsigned char *cp = (const unsigned char *) from_start;
- wchar_t to_buf[max];
- struct __gconv_step *gs = codecvt->__cd_in.__cd.__steps;
- int status;
- size_t dummy;
-
- codecvt->__cd_in.__cd.__data[0].__outbuf = (char *) to_buf;
- codecvt->__cd_in.__cd.__data[0].__outbufend = (char *) &to_buf[max];
- codecvt->__cd_in.__cd.__data[0].__statep = statep;
-
- status = DL_CALL_FCT (gs->__fct,
- (gs, codecvt->__cd_in.__cd.__data, &cp, from_end,
- NULL, &dummy, 0, 0));
-
- result = cp - (const unsigned char *) from_start;
-#else
-# ifdef _GLIBCPP_USE_WCHAR_T
- const char *from_start_copy = (const char *) from_start;
- size_t from_len = from_end - from_start;
- wchar_t to_buf[max];
- size_t res;
- char *to_start = (char *) to_buf;
-
- res = iconv (codecvt->__cd_in, &from_start_copy, &from_len,
- &to_start, &max);
-
- result = from_start_copy - (char *) from_start;
-# else
- /* Decide what to do. */
- result = 0;
-# endif
-#endif
-
- return result;
-}
-
-
-static int
-do_max_length (struct _IO_codecvt *codecvt)
-{
-#ifdef _LIBC
- return codecvt->__cd_in.__cd.__steps[0].__max_needed_from;
-#else
- return MB_CUR_MAX;
-#endif
-}
-
-#endif /* defined(_GLIBCPP_USE_WCHAR_T) */
diff --git a/contrib/libstdc++/libio/iolibio.h b/contrib/libstdc++/libio/iolibio.h
deleted file mode 100644
index 61be4b73b94d..000000000000
--- a/contrib/libstdc++/libio/iolibio.h
+++ /dev/null
@@ -1,82 +0,0 @@
-#include "libio.h"
-
-/* These emulate stdio functionality, but with a different name
- (_IO_ungetc instead of ungetc), and using _IO_FILE instead of FILE. */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-extern int _IO_fclose __P((_IO_FILE*));
-extern int _IO_new_fclose __P((_IO_FILE*));
-extern int _IO_old_fclose __P((_IO_FILE*));
-extern _IO_FILE *_IO_fdopen __P((int, const char*));
-extern _IO_FILE *_IO_old_fdopen __P((int, const char*));
-extern _IO_FILE *_IO_new_fdopen __P((int, const char*));
-extern int _IO_fflush __P((_IO_FILE*));
-extern int _IO_fgetpos __P((_IO_FILE*, _IO_fpos_t*));
-extern int _IO_fgetpos64 __P((_IO_FILE*, _IO_fpos64_t*));
-extern char* _IO_fgets __P((char*, int, _IO_FILE*));
-extern _IO_FILE *_IO_fopen __P((const char*, const char*));
-extern _IO_FILE *_IO_old_fopen __P((const char*, const char*));
-extern _IO_FILE *_IO_new_fopen __P((const char*, const char*));
-extern _IO_FILE *_IO_fopen64 __P((const char*, const char*));
-extern int _IO_fprintf __P((_IO_FILE*, const char*, ...));
-extern int _IO_fputs __P((const char*, _IO_FILE*));
-extern int _IO_fsetpos __P((_IO_FILE*, const _IO_fpos_t *));
-extern int _IO_fsetpos64 __P((_IO_FILE*, const _IO_fpos64_t *));
-extern long int _IO_ftell __P((_IO_FILE*));
-extern _IO_size_t _IO_fread __P((void*, _IO_size_t, _IO_size_t, _IO_FILE*));
-extern _IO_size_t _IO_fwrite __P((const void*,
- _IO_size_t, _IO_size_t, _IO_FILE*));
-extern char* _IO_gets __P((char*));
-extern void _IO_perror __P((const char*));
-extern int _IO_printf __P((const char*, ...));
-extern int _IO_puts __P((const char*));
-extern int _IO_scanf __P((const char*, ...));
-extern void _IO_setbuffer __P((_IO_FILE *, char*, _IO_size_t));
-extern int _IO_setvbuf __P((_IO_FILE*, char*, int, _IO_size_t));
-extern int _IO_sscanf __P((const char*, const char*, ...));
-extern int _IO_sprintf __P((char *, const char*, ...));
-extern int _IO_ungetc __P((int, _IO_FILE*));
-extern int _IO_vsscanf __P((const char *, const char *, _IO_va_list));
-extern int _IO_vsprintf __P((char*, const char*, _IO_va_list));
-extern int _IO_vswprintf __P((wchar_t*, _IO_size_t, const wchar_t*,
- _IO_va_list));
-
-struct obstack;
-extern int _IO_obstack_vprintf __P ((struct obstack *, const char *,
- _IO_va_list));
-extern int _IO_obstack_printf __P ((struct obstack *, const char *, ...));
-#ifndef _IO_pos_BAD
-#define _IO_pos_BAD ((_IO_off64_t)(-1))
-#endif
-#define _IO_clearerr(FP) ((FP)->_flags &= ~(_IO_ERR_SEEN|_IO_EOF_SEEN))
-#define _IO_fseek(__fp, __offset, __whence) \
- (_IO_seekoff(__fp, __offset, __whence, _IOS_INPUT|_IOS_OUTPUT) == _IO_pos_BAD ? EOF : 0)
-#define _IO_rewind(FILE) (void)_IO_seekoff(FILE, 0, 0, _IOS_INPUT|_IOS_OUTPUT)
-#define _IO_vprintf(FORMAT, ARGS) _IO_vfprintf(_IO_stdout, FORMAT, ARGS)
-#define _IO_freopen(FILENAME, MODE, FP) \
- (_IO_file_close_it(FP), _IO_file_fopen(FP, FILENAME, MODE, 0))
-#define _IO_old_freopen(FILENAME, MODE, FP) \
- (_IO_old_file_close_it (FP), _IO_old_file_fopen(FP, FILENAME, MODE))
-#define _IO_freopen64(FILENAME, MODE, FP) \
- (_IO_file_close_it(FP), _IO_file_fopen(FP, FILENAME, MODE, 1))
-#define _IO_fileno(FP) ((FP)->_fileno)
-extern _IO_FILE* _IO_popen __P((const char*, const char*));
-extern _IO_FILE* _IO_new_popen __P((const char*, const char*));
-extern _IO_FILE* _IO_old_popen __P((const char*, const char*));
-extern int __new_pclose __P((_IO_FILE *));
-extern int __old_pclose __P((_IO_FILE *));
-#define _IO_pclose _IO_fclose
-#define _IO_setbuf(_FP, _BUF) _IO_setbuffer(_FP, _BUF, _IO_BUFSIZ)
-#define _IO_setlinebuf(_FP) _IO_setvbuf(_FP, NULL, 1, 0)
-
-_IO_FILE *__new_freopen __P ((const char *, const char *, _IO_FILE *));
-_IO_FILE *__old_freopen __P ((const char *, const char *, _IO_FILE *));
-
-#ifdef __cplusplus
-}
-#endif
-
-
diff --git a/contrib/libstdc++/libio/libio.h b/contrib/libstdc++/libio/libio.h
deleted file mode 100644
index e2a2a15bcb0d..000000000000
--- a/contrib/libstdc++/libio/libio.h
+++ /dev/null
@@ -1,511 +0,0 @@
-/* Copyright (C) 1991,92,93,94,95,97,98,99,2000,2001 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
- Written by Per Bothner <bothner@cygnus.com>.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#ifndef _IO_STDIO_H
-#define _IO_STDIO_H
-
-#include <_G_config.h>
-/* ALL of these should be defined in _G_config.h */
-#define _IO_pos_t _G_fpos_t /* obsolete */
-#define _IO_fpos_t _G_fpos_t
-#define _IO_fpos64_t _G_fpos64_t
-#define _IO_size_t _G_size_t
-#define _IO_ssize_t _G_ssize_t
-#define _IO_off_t _G_off_t
-#define _IO_off64_t _G_off64_t
-#define _IO_pid_t _G_pid_t
-#define _IO_uid_t _G_uid_t
-#define _IO_iconv_t _G_iconv_t
-#define _IO_HAVE_SYS_WAIT _G_HAVE_SYS_WAIT
-#define _IO_HAVE_ST_BLKSIZE _G_HAVE_ST_BLKSIZE
-#define _IO_BUFSIZ _G_BUFSIZ
-#define _IO_va_list _G_va_list
-#define _IO_wint_t _G_wint_t
-
-#ifdef _G_NEED_STDARG_H
-/* This define avoids name pollution if we're using GNU stdarg.h */
-# define __need___va_list
-# include <stdarg.h>
-# ifdef __GNUC_VA_LIST
-# undef _IO_va_list
-# define _IO_va_list __gnuc_va_list
-# endif /* __GNUC_VA_LIST */
-#endif
-
-#ifndef __THROW
-# ifdef __cplusplus
-# define __THROW throw ()
-# else
-# define __THROW
-# endif
-#endif /* not __THROW */
-
-#ifndef __P
-# define __P(p) p __THROW
-#endif /* not __P */
-
-#ifndef __PMT
-# define __PMT(p) p
-#endif /* not __PMT */
-
-/* For backward compatibility */
-#ifndef _PARAMS
-# define _PARAMS(protos) __P(protos)
-#endif /*!_PARAMS*/
-
-#ifndef __STDC__
-# ifndef const
-# define const
-# endif
-#endif
-#define _IO_UNIFIED_JUMPTABLES 1
-#ifndef _G_HAVE_PRINTF_FP
-# define _IO_USE_DTOA 1
-#endif
-
-#ifndef EOF
-# define EOF (-1)
-#endif
-#ifndef NULL
-# if defined __GNUG__ && \
- (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 8))
-# define NULL (__null)
-# else
-# if !defined(__cplusplus)
-# define NULL ((void*)0)
-# else
-# define NULL (0)
-# endif
-# endif
-#endif
-
-#define _IOS_INPUT 1
-#define _IOS_OUTPUT 2
-#define _IOS_ATEND 4
-#define _IOS_APPEND 8
-#define _IOS_TRUNC 16
-#define _IOS_NOCREATE 32
-#define _IOS_NOREPLACE 64
-#define _IOS_BIN 128
-
-/* Magic numbers and bits for the _flags field.
- The magic numbers use the high-order bits of _flags;
- the remaining bits are available for variable flags.
- Note: The magic numbers must all be negative if stdio
- emulation is desired. */
-
-#define _IO_MAGIC 0xFBAD0000 /* Magic number */
-#define _OLD_STDIO_MAGIC 0xFABC0000 /* Emulate old stdio. */
-#define _IO_MAGIC_MASK 0xFFFF0000
-#define _IO_USER_BUF 1 /* User owns buffer; don't delete it on close. */
-#define _IO_UNBUFFERED 2
-#define _IO_NO_READS 4 /* Reading not allowed */
-#define _IO_NO_WRITES 8 /* Writing not allowd */
-#define _IO_EOF_SEEN 0x10
-#define _IO_ERR_SEEN 0x20
-#define _IO_DELETE_DONT_CLOSE 0x40 /* Don't call close(_fileno) on cleanup. */
-#define _IO_LINKED 0x80 /* Set if linked (using _chain) to streambuf::_list_all.*/
-#define _IO_IN_BACKUP 0x100
-#define _IO_LINE_BUF 0x200
-#define _IO_TIED_PUT_GET 0x400 /* Set if put and get pointer logicly tied. */
-#define _IO_CURRENTLY_PUTTING 0x800
-#define _IO_IS_APPENDING 0x1000
-#define _IO_IS_FILEBUF 0x2000
-#define _IO_BAD_SEEN 0x4000
-#define _IO_USER_LOCK 0x8000
-
-/* These are "formatting flags" matching the iostream fmtflags enum values. */
-#define _IO_SKIPWS 01
-#define _IO_LEFT 02
-#define _IO_RIGHT 04
-#define _IO_INTERNAL 010
-#define _IO_DEC 020
-#define _IO_OCT 040
-#define _IO_HEX 0100
-#define _IO_SHOWBASE 0200
-#define _IO_SHOWPOINT 0400
-#define _IO_UPPERCASE 01000
-#define _IO_SHOWPOS 02000
-#define _IO_SCIENTIFIC 04000
-#define _IO_FIXED 010000
-#define _IO_UNITBUF 020000
-#define _IO_STDIO 040000
-#define _IO_DONT_CLOSE 0100000
-#define _IO_BOOLALPHA 0200000
-
-
-struct _IO_jump_t; struct _IO_FILE;
-
-/* Handle lock. */
-#ifdef _IO_MTSAFE_IO
-# if defined __GLIBC__ && __GLIBC__ >= 2
-# if __GLIBC_MINOR__ == 0
-# include <stdio-lock.h>
-# else
-# include <bits/stdio-lock.h>
-# endif
-# else
-/*# include <comthread.h>*/
-# endif
-#else
-typedef void _IO_lock_t;
-#endif
-
-
-/* A streammarker remembers a position in a buffer. */
-
-struct _IO_marker {
- struct _IO_marker *_next;
- struct _IO_FILE *_sbuf;
- /* If _pos >= 0
- it points to _buf->Gbase()+_pos. FIXME comment */
- /* if _pos < 0, it points to _buf->eBptr()+_pos. FIXME comment */
- int _pos;
-#if 0
- void set_streampos(streampos sp) { _spos = sp; }
- void set_offset(int offset) { _pos = offset; _spos = (streampos)(-2); }
- public:
- streammarker(streambuf *sb);
- ~streammarker();
- int saving() { return _spos == -2; }
- int delta(streammarker&);
- int delta();
-#endif
-};
-
-/* This is the structure from the libstdc++ codecvt class. */
-enum __codecvt_result
-{
- __codecvt_ok,
- __codecvt_partial,
- __codecvt_error,
- __codecvt_noconv
-};
-
-#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
-/* The order of the elements in the following struct must match the order
- of the virtual functions in the libstdc++ codecvt class. */
-struct _IO_codecvt
-{
- void (*__codecvt_destr) (struct _IO_codecvt *);
- enum __codecvt_result (*__codecvt_do_out) (struct _IO_codecvt *,
- __c_mbstate_t *,
- const wchar_t *,
- const wchar_t *,
- const wchar_t **, char *,
- char *, char **);
- enum __codecvt_result (*__codecvt_do_unshift) (struct _IO_codecvt *,
- __c_mbstate_t *, char *,
- char *, char **);
- enum __codecvt_result (*__codecvt_do_in) (struct _IO_codecvt *,
- __c_mbstate_t *,
- const char *, const char *,
- const char **, wchar_t *,
- wchar_t *, wchar_t **);
- int (*__codecvt_do_encoding) (struct _IO_codecvt *);
- int (*__codecvt_do_always_noconv) (struct _IO_codecvt *);
- int (*__codecvt_do_length) (struct _IO_codecvt *, __c_mbstate_t *,
- const char *, const char *, _IO_size_t);
- int (*__codecvt_do_max_length) (struct _IO_codecvt *);
-
- _IO_iconv_t __cd_in;
- _IO_iconv_t __cd_out;
-};
-
-/* Extra data for wide character streams. */
-struct _IO_wide_data
-{
- wchar_t *_IO_read_ptr; /* Current read pointer */
- wchar_t *_IO_read_end; /* End of get area. */
- wchar_t *_IO_read_base; /* Start of putback+get area. */
- wchar_t *_IO_write_base; /* Start of put area. */
- wchar_t *_IO_write_ptr; /* Current put pointer. */
- wchar_t *_IO_write_end; /* End of put area. */
- wchar_t *_IO_buf_base; /* Start of reserve area. */
- wchar_t *_IO_buf_end; /* End of reserve area. */
- /* The following fields are used to support backing up and undo. */
- wchar_t *_IO_save_base; /* Pointer to start of non-current get area. */
- wchar_t *_IO_backup_base; /* Pointer to first valid character of
- backup area */
- wchar_t *_IO_save_end; /* Pointer to end of non-current get area. */
-
-#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
- __c_mbstate_t _IO_state;
- __c_mbstate_t _IO_last_state;
-#endif
- struct _IO_codecvt _codecvt;
-
- wchar_t _shortbuf[1];
-
-#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
- struct _IO_jump_t *_wide_vtable;
-#endif
-};
-#else /* !(defined _LIBC || defined _GLIBCPP_USE_WCHAR_T) */
-/* Because _IO_no_init unconditionally takes a `_IO_wide_data*' as its
- last parameter we must still define this type. We intentionally
- leave it incomplete to prevent any use of this type when we are not
- supporting wide characters. */
-struct _IO_wide_data;
-#endif /* !(defined _LIBC || defined _GLIBCPP_USE_WCHAR_T) */
-
-struct _IO_FILE {
- int _flags; /* High-order word is _IO_MAGIC; rest is flags. */
-#define _IO_file_flags _flags
-
- /* The following pointers correspond to the C++ streambuf protocol. */
- /* Note: Tk uses the _IO_read_ptr and _IO_read_end fields directly. */
- char* _IO_read_ptr; /* Current read pointer */
- char* _IO_read_end; /* End of get area. */
- char* _IO_read_base; /* Start of putback+get area. */
- char* _IO_write_base; /* Start of put area. */
- char* _IO_write_ptr; /* Current put pointer. */
- char* _IO_write_end; /* End of put area. */
- char* _IO_buf_base; /* Start of reserve area. */
- char* _IO_buf_end; /* End of reserve area. */
- /* The following fields are used to support backing up and undo. */
- char *_IO_save_base; /* Pointer to start of non-current get area. */
- char *_IO_backup_base; /* Pointer to first valid character of backup area */
- char *_IO_save_end; /* Pointer to end of non-current get area. */
-
- struct _IO_marker *_markers;
-
- struct _IO_FILE *_chain;
-
- int _fileno;
- int _blksize;
- _IO_off_t _old_offset; /* This used to be _offset but it's too small. */
-
-#define __HAVE_COLUMN /* temporary */
- /* 1+column number of pbase(); 0 is unknown. */
- unsigned short _cur_column;
- signed char _vtable_offset;
- char _shortbuf[1];
-
- /* char* _save_gptr; char* _save_egptr; */
-
- _IO_lock_t *_lock;
-#ifdef _IO_USE_OLD_IO_FILE
-};
-
-struct _IO_FILE_complete
-{
- struct _IO_FILE _file;
-#endif
-#if defined _G_IO_IO_FILE_VERSION && _G_IO_IO_FILE_VERSION == 0x20001
- _IO_off64_t _offset;
-# if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
- /* Wide character stream stuff. */
- struct _IO_codecvt *_codecvt;
- struct _IO_wide_data *_wide_data;
-# else
- void *__pad1;
- void *__pad2;
-# endif
- int _mode;
- /* Make sure we don't get into trouble again. */
- char _unused2[15 * sizeof (int) - 2 * sizeof (void *)];
-#endif
-};
-
-#ifndef __cplusplus
-typedef struct _IO_FILE _IO_FILE;
-#endif
-
-struct _IO_FILE_plus;
-
-extern struct _IO_FILE_plus _IO_2_1_stdin_;
-extern struct _IO_FILE_plus _IO_2_1_stdout_;
-extern struct _IO_FILE_plus _IO_2_1_stderr_;
-#ifndef _LIBC
-#define _IO_stdin ((_IO_FILE*)(&_IO_2_1_stdin_))
-#define _IO_stdout ((_IO_FILE*)(&_IO_2_1_stdout_))
-#define _IO_stderr ((_IO_FILE*)(&_IO_2_1_stderr_))
-#else
-extern _IO_FILE *_IO_stdin;
-extern _IO_FILE *_IO_stdout;
-extern _IO_FILE *_IO_stderr;
-#endif
-
-
-/* Functions to do I/O and file management for a stream. */
-
-/* Read NBYTES bytes from COOKIE into a buffer pointed to by BUF.
- Return number of bytes read. */
-typedef __ssize_t __io_read_fn (void *__cookie, char *__buf, size_t __nbytes);
-
-/* Write N bytes pointed to by BUF to COOKIE. Write all N bytes
- unless there is an error. Return number of bytes written, or -1 if
- there is an error without writing anything. If the file has been
- opened for append (__mode.__append set), then set the file pointer
- to the end of the file and then do the write; if not, just write at
- the current file pointer. */
-typedef __ssize_t __io_write_fn (void *__cookie, __const char *__buf,
- size_t __n);
-
-/* Move COOKIE's file position to *POS bytes from the
- beginning of the file (if W is SEEK_SET),
- the current position (if W is SEEK_CUR),
- or the end of the file (if W is SEEK_END).
- Set *POS to the new file position.
- Returns zero if successful, nonzero if not. */
-typedef int __io_seek_fn (void *__cookie, _IO_off64_t *__pos, int __w);
-
-/* Close COOKIE. */
-typedef int __io_close_fn (void *__cookie);
-
-
-#ifdef _GNU_SOURCE
-/* User-visible names for the above. */
-typedef __io_read_fn cookie_read_function_t;
-typedef __io_write_fn cookie_write_function_t;
-typedef __io_seek_fn cookie_seek_function_t;
-typedef __io_close_fn cookie_close_function_t;
-
-/* The structure with the cookie function pointers. */
-typedef struct
-{
- __io_read_fn *read; /* Read bytes. */
- __io_write_fn *write; /* Write bytes. */
- __io_seek_fn *seek; /* Seek/tell file position. */
- __io_close_fn *close; /* Close file. */
-} _IO_cookie_io_functions_t;
-typedef _IO_cookie_io_functions_t cookie_io_functions_t;
-
-struct _IO_cookie_file;
-
-/* Initialize one of those. */
-extern void _IO_cookie_init (struct _IO_cookie_file *__cfile, int __read_write,
- void *__cookie, _IO_cookie_io_functions_t __fns);
-#endif
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-extern int __underflow (_IO_FILE *) __THROW;
-extern int __uflow (_IO_FILE *) __THROW;
-extern int __overflow (_IO_FILE *, int) __THROW;
-extern _IO_wint_t __wunderflow (_IO_FILE *) __THROW;
-extern _IO_wint_t __wuflow (_IO_FILE *) __THROW;
-extern _IO_wint_t __woverflow (_IO_FILE *, _IO_wint_t) __THROW;
-
-#define _IO_getc_unlocked(_fp) \
- ((_fp)->_IO_read_ptr >= (_fp)->_IO_read_end ? __uflow (_fp) \
- : *(unsigned char *) (_fp)->_IO_read_ptr++)
-#define _IO_peekc_unlocked(_fp) \
- ((_fp)->_IO_read_ptr >= (_fp)->_IO_read_end \
- && __underflow (_fp) == EOF ? EOF \
- : *(unsigned char *) (_fp)->_IO_read_ptr)
-#define _IO_putc_unlocked(_ch, _fp) \
- (((_fp)->_IO_write_ptr >= (_fp)->_IO_write_end) \
- ? __overflow (_fp, (unsigned char) (_ch)) \
- : (unsigned char) (*(_fp)->_IO_write_ptr++ = (_ch)))
-
-#define _IO_getwc_unlocked(_fp) \
- ((_fp)->_wide_data->_IO_read_ptr >= (_fp)->_wide_data->_IO_read_end \
- ? __wuflow (_fp) : (_IO_wint_t) *(_fp)->_wide_data->_IO_read_ptr++)
-#define _IO_putwc_unlocked(_wch, _fp) \
- ((_fp)->_wide_data->_IO_write_ptr >= (_fp)->_wide_data->_IO_write_end \
- ? __woverflow (_fp, _wch) \
- : (_IO_wint_t) (*(_fp)->_wide_data->_IO_write_ptr++ = (_wch)))
-
-#define _IO_feof_unlocked(__fp) (((__fp)->_flags & _IO_EOF_SEEN) != 0)
-#define _IO_ferror_unlocked(__fp) (((__fp)->_flags & _IO_ERR_SEEN) != 0)
-
-extern int _IO_getc (_IO_FILE *__fp) __THROW;
-extern int _IO_putc (int __c, _IO_FILE *__fp) __THROW;
-extern int _IO_feof (_IO_FILE *__fp) __THROW;
-extern int _IO_ferror (_IO_FILE *__fp) __THROW;
-
-extern int _IO_peekc_locked (_IO_FILE *__fp) __THROW;
-
-/* This one is for Emacs. */
-#define _IO_PENDING_OUTPUT_COUNT(_fp) \
- ((_fp)->_IO_write_ptr - (_fp)->_IO_write_base)
-
-extern void _IO_flockfile (_IO_FILE *) __THROW;
-extern void _IO_funlockfile (_IO_FILE *) __THROW;
-extern int _IO_ftrylockfile (_IO_FILE *) __THROW;
-
-#ifdef _IO_MTSAFE_IO
-# define _IO_peekc(_fp) _IO_peekc_locked (_fp)
-#else
-# define _IO_peekc(_fp) _IO_peekc_unlocked (_fp)
-# define _IO_flockfile(_fp) /**/
-# define _IO_funlockfile(_fp) /**/
-# define _IO_ftrylockfile(_fp) /**/
-# define _IO_cleanup_region_start(_fct, _fp) /**/
-# define _IO_cleanup_region_end(_Doit) /**/
-#endif /* !_IO_MTSAFE_IO */
-
-extern int _IO_vfscanf (_IO_FILE * __restrict, const char * __restrict,
- _IO_va_list, int *__restrict) __THROW;
-extern int _IO_vfprintf (_IO_FILE *__restrict, const char *__restrict,
- _IO_va_list) __THROW;
-extern _IO_ssize_t _IO_padn (_IO_FILE *, int, _IO_ssize_t) __THROW;
-extern _IO_size_t _IO_sgetn (_IO_FILE *, void *, _IO_size_t) __THROW;
-
-extern _IO_off64_t _IO_seekoff (_IO_FILE *, _IO_off64_t, int, int) __THROW;
-extern _IO_off64_t _IO_seekpos (_IO_FILE *, _IO_off64_t, int) __THROW;
-
-extern void _IO_free_backup_area (_IO_FILE *) __THROW;
-
-#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
-extern _IO_wint_t _IO_getwc (_IO_FILE *__fp) __THROW;
-extern _IO_wint_t _IO_putwc (wchar_t __wc, _IO_FILE *__fp) __THROW;
-extern int _IO_fwide (_IO_FILE *__fp, int __mode) __THROW;
-# if __GNUC__ >= 2
-/* A special optimized version of the function above. It optimizes the
- case of initializing an unoriented byte stream. */
-# define _IO_fwide(__fp, __mode) \
- ({ int __result = (__mode); \
- if (__result < 0) \
- { \
- if ((__fp)->_mode == 0) \
- /* We know that all we have to do is to set the flag. */ \
- (__fp)->_mode = -1; \
- __result = (__fp)->_mode; \
- } \
- else \
- __result = _IO_fwide (__fp, __result); \
- __result; })
-# endif
-
-extern int _IO_vfwscanf (_IO_FILE * __restrict, const wchar_t * __restrict,
- _IO_va_list, int *__restrict) __THROW;
-extern int _IO_vfwprintf (_IO_FILE *__restrict, const wchar_t *__restrict,
- _IO_va_list) __THROW;
-extern _IO_ssize_t _IO_wpadn (_IO_FILE *, wint_t, _IO_ssize_t) __THROW;
-extern void _IO_free_wbackup_area (_IO_FILE *) __THROW;
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _IO_STDIO_H */
diff --git a/contrib/libstdc++/libio/libioP.h b/contrib/libstdc++/libio/libioP.h
deleted file mode 100644
index 4aecf4eaa1b2..000000000000
--- a/contrib/libstdc++/libio/libioP.h
+++ /dev/null
@@ -1,821 +0,0 @@
-/* Copyright (C) 1993, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-# include <errno.h>
-
-#ifndef __set_errno
-# define __set_errno(Val) errno = (Val)
-#endif
-#if defined __GLIBC__ && __GLIBC__ >= 2
-# include <bits/libc-lock.h>
-#else
-/*# include <comthread.h>*/
-#endif
-
-#include "iolibio.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define _IO_seek_set 0
-#define _IO_seek_cur 1
-#define _IO_seek_end 2
-
-/* THE JUMPTABLE FUNCTIONS.
-
- * The _IO_FILE type is used to implement the FILE type in GNU libc,
- * as well as the streambuf class in GNU iostreams for C++.
- * These are all the same, just used differently.
- * An _IO_FILE (or FILE) object is allows followed by a pointer to
- * a jump table (of pointers to functions). The pointer is accessed
- * with the _IO_JUMPS macro. The jump table has a eccentric format,
- * so as to be compatible with the layout of a C++ virtual function table.
- * (as implemented by g++). When a pointer to a streambuf object is
- * coerced to an (_IO_FILE*), then _IO_JUMPS on the result just
- * happens to point to the virtual function table of the streambuf.
- * Thus the _IO_JUMPS function table used for C stdio/libio does
- * double duty as the virtual function table for C++ streambuf.
- *
- * The entries in the _IO_JUMPS function table (and hence also the
- * virtual functions of a streambuf) are described below.
- * The first parameter of each function entry is the _IO_FILE/streambuf
- * object being acted on (i.e. the 'this' parameter).
- */
-
-#if (!defined _IO_USE_OLD_IO_FILE \
- && (!defined _G_IO_NO_BACKWARD_COMPAT || _G_IO_NO_BACKWARD_COMPAT == 0))
-# define _IO_JUMPS_OFFSET 1
-#endif
-
-#define _IO_JUMPS(THIS) (THIS)->vtable
-#define _IO_WIDE_JUMPS(THIS) ((struct _IO_FILE *) (THIS))->_wide_data->_wide_vtable
-#define _IO_CHECK_WIDE(THIS) (((struct _IO_FILE *) (THIS))->_wide_data != NULL)
-
-#if _IO_JUMPS_OFFSET
-# define _IO_JUMPS_FUNC(THIS) \
- (*(struct _IO_jump_t **) ((void *) &_IO_JUMPS ((struct _IO_FILE_plus *) (THIS)) \
- + (THIS)->_vtable_offset))
-#else
-# define _IO_JUMPS_FUNC(THIS) _IO_JUMPS ((struct _IO_FILE_plus *) (THIS))
-#endif
-#define _IO_WIDE_JUMPS_FUNC(THIS) _IO_WIDE_JUMPS(THIS)
-#if _G_USING_THUNKS
-# define JUMP_FIELD(TYPE, NAME) TYPE NAME
-# define JUMP0(FUNC, THIS) _IO_JUMPS_FUNC(THIS)->FUNC (THIS)
-# define JUMP1(FUNC, THIS, X1) _IO_JUMPS_FUNC(THIS)->FUNC (THIS, X1)
-# define JUMP2(FUNC, THIS, X1, X2) _IO_JUMPS_FUNC(THIS)->FUNC (THIS, X1, X2)
-# define JUMP3(FUNC, THIS, X1,X2,X3) _IO_JUMPS_FUNC(THIS)->FUNC (THIS, X1,X2, X3)
-# define JUMP_INIT(NAME, VALUE) VALUE
-# define JUMP_INIT_DUMMY JUMP_INIT(dummy, 0), JUMP_INIT (dummy2, 0)
-
-# define WJUMP0(FUNC, THIS) _IO_WIDE_JUMPS_FUNC(THIS)->FUNC (THIS)
-# define WJUMP1(FUNC, THIS, X1) _IO_WIDE_JUMPS_FUNC(THIS)->FUNC (THIS, X1)
-# define WJUMP2(FUNC, THIS, X1, X2) _IO_WIDE_JUMPS_FUNC(THIS)->FUNC (THIS, X1, X2)
-# define WJUMP3(FUNC, THIS, X1,X2,X3) _IO_WIDE_JUMPS_FUNC(THIS)->FUNC (THIS, X1,X2, X3)
-#else
-/* These macros will change when we re-implement vtables to use "thunks"! */
-# define JUMP_FIELD(TYPE, NAME) struct { short delta1, delta2; TYPE pfn; } NAME
-# define JUMP0(FUNC, THIS) _IO_JUMPS_FUNC(THIS)->FUNC.pfn (THIS)
-# define JUMP1(FUNC, THIS, X1) _IO_JUMPS_FUNC(THIS)->FUNC.pfn (THIS, X1)
-# define JUMP2(FUNC, THIS, X1, X2) _IO_JUMPS_FUNC(THIS)->FUNC.pfn (THIS, X1, X2)
-# define JUMP3(FUNC, THIS, X1,X2,X3) _IO_JUMPS_FUNC(THIS)->FUNC.pfn (THIS, X1,X2,X3)
-# define JUMP_INIT(NAME, VALUE) {0, 0, VALUE}
-# define JUMP_INIT_DUMMY JUMP_INIT(dummy, 0)
-
-# define WJUMP0(FUNC, THIS) _IO_WIDE_JUMPS_FUNC(THIS)->FUNC.pfn (THIS)
-# define WJUMP1(FUNC, THIS, X1) _IO_WIDE_JUMPS_FUNC(THIS)->FUNC.pfn (THIS, X1)
-# define WJUMP2(FUNC, THIS, X1, X2) _IO_WIDE_JUMPS_FUNC(THIS)->FUNC.pfn (THIS, X1, X2)
-# define WJUMP3(FUNC, THIS, X1,X2,X3) _IO_WIDE_JUMPS_FUNC(THIS)->FUNC.pfn (THIS, X1,X2,X3)
-#endif
-
-/* The 'finish' function does any final cleaning up of an _IO_FILE object.
- It does not delete (free) it, but does everything else to finalize it.
- It matches the streambuf::~streambuf virtual destructor. */
-typedef void (*_IO_finish_t) __PMT ((_IO_FILE *, int)); /* finalize */
-#define _IO_FINISH(FP) JUMP1 (__finish, FP, 0)
-#define _IO_WFINISH(FP) WJUMP1 (__finish, FP, 0)
-
-/* The 'overflow' hook flushes the buffer.
- The second argument is a character, or EOF.
- It matches the streambuf::overflow virtual function. */
-typedef int (*_IO_overflow_t) __PMT ((_IO_FILE *, int));
-#define _IO_OVERFLOW(FP, CH) JUMP1 (__overflow, FP, CH)
-#define _IO_WOVERFLOW(FP, CH) WJUMP1 (__overflow, FP, CH)
-
-/* The 'underflow' hook tries to fills the get buffer.
- It returns the next character (as an unsigned char) or EOF. The next
- character remains in the get buffer, and the get position is not changed.
- It matches the streambuf::underflow virtual function. */
-typedef int (*_IO_underflow_t) __PMT ((_IO_FILE *));
-#define _IO_UNDERFLOW(FP) JUMP0 (__underflow, FP)
-#define _IO_WUNDERFLOW(FP) WJUMP0 (__underflow, FP)
-
-/* The 'uflow' hook returns the next character in the input stream
- (cast to unsigned char), and increments the read position;
- EOF is returned on failure.
- It matches the streambuf::uflow virtual function, which is not in the
- cfront implementation, but was added to C++ by the ANSI/ISO committee. */
-#define _IO_UFLOW(FP) JUMP0 (__uflow, FP)
-#define _IO_WUFLOW(FP) WJUMP0 (__uflow, FP)
-
-/* The 'pbackfail' hook handles backing up.
- It matches the streambuf::pbackfail virtual function. */
-typedef int (*_IO_pbackfail_t) __PMT ((_IO_FILE *, int));
-#define _IO_PBACKFAIL(FP, CH) JUMP1 (__pbackfail, FP, CH)
-#define _IO_WPBACKFAIL(FP, CH) WJUMP1 (__pbackfail, FP, CH)
-
-/* The 'xsputn' hook writes upto N characters from buffer DATA.
- Returns the number of character actually written.
- It matches the streambuf::xsputn virtual function. */
-typedef _IO_size_t (*_IO_xsputn_t) __PMT ((_IO_FILE *FP, const void *DATA,
- _IO_size_t N));
-#define _IO_XSPUTN(FP, DATA, N) JUMP2 (__xsputn, FP, DATA, N)
-#define _IO_WXSPUTN(FP, DATA, N) WJUMP2 (__xsputn, FP, DATA, N)
-
-/* The 'xsgetn' hook reads upto N characters into buffer DATA.
- Returns the number of character actually read.
- It matches the streambuf::xsgetn virtual function. */
-typedef _IO_size_t (*_IO_xsgetn_t) __PMT ((_IO_FILE *FP, void *DATA,
- _IO_size_t N));
-#define _IO_XSGETN(FP, DATA, N) JUMP2 (__xsgetn, FP, DATA, N)
-#define _IO_WXSGETN(FP, DATA, N) WJUMP2 (__xsgetn, FP, DATA, N)
-
-/* The 'seekoff' hook moves the stream position to a new position
- relative to the start of the file (if DIR==0), the current position
- (MODE==1), or the end of the file (MODE==2).
- It matches the streambuf::seekoff virtual function.
- It is also used for the ANSI fseek function. */
-typedef _IO_off64_t (*_IO_seekoff_t) __PMT ((_IO_FILE *FP, _IO_off64_t OFF,
- int DIR, int MODE));
-#define _IO_SEEKOFF(FP, OFF, DIR, MODE) JUMP3 (__seekoff, FP, OFF, DIR, MODE)
-#define _IO_WSEEKOFF(FP, OFF, DIR, MODE) WJUMP3 (__seekoff, FP, OFF, DIR, MODE)
-
-/* The 'seekpos' hook also moves the stream position,
- but to an absolute position given by a fpos64_t (seekpos).
- It matches the streambuf::seekpos virtual function.
- It is also used for the ANSI fgetpos and fsetpos functions. */
-/* The _IO_seek_cur and _IO_seek_end options are not allowed. */
-typedef _IO_off64_t (*_IO_seekpos_t) __PMT ((_IO_FILE *, _IO_off64_t, int));
-#define _IO_SEEKPOS(FP, POS, FLAGS) JUMP2 (__seekpos, FP, POS, FLAGS)
-#define _IO_WSEEKPOS(FP, POS, FLAGS) WJUMP2 (__seekpos, FP, POS, FLAGS)
-
-/* The 'setbuf' hook gives a buffer to the file.
- It matches the streambuf::setbuf virtual function. */
-typedef _IO_FILE* (*_IO_setbuf_t) __PMT ((_IO_FILE *, char *, _IO_ssize_t));
-#define _IO_SETBUF(FP, BUFFER, LENGTH) JUMP2 (__setbuf, FP, BUFFER, LENGTH)
-#define _IO_WSETBUF(FP, BUFFER, LENGTH) WJUMP2 (__setbuf, FP, BUFFER, LENGTH)
-
-/* The 'sync' hook attempts to synchronize the internal data structures
- of the file with the external state.
- It matches the streambuf::sync virtual function. */
-typedef int (*_IO_sync_t) __PMT ((_IO_FILE *));
-#define _IO_SYNC(FP) JUMP0 (__sync, FP)
-#define _IO_WSYNC(FP) WJUMP0 (__sync, FP)
-
-/* The 'doallocate' hook is used to tell the file to allocate a buffer.
- It matches the streambuf::doallocate virtual function, which is not
- in the ANSI/ISO C++ standard, but is part traditional implementations. */
-typedef int (*_IO_doallocate_t) __PMT ((_IO_FILE *));
-#define _IO_DOALLOCATE(FP) JUMP0 (__doallocate, FP)
-#define _IO_WDOALLOCATE(FP) WJUMP0 (__doallocate, FP)
-
-/* The following four hooks (sysread, syswrite, sysclose, sysseek, and
- sysstat) are low-level hooks specific to this implementation.
- There is no correspondence in the ANSI/ISO C++ standard library.
- The hooks basically correspond to the Unix system functions
- (read, write, close, lseek, and stat) except that a _IO_FILE*
- parameter is used instead of a integer file descriptor; the default
- implementation used for normal files just calls those functions.
- The advantage of overriding these functions instead of the higher-level
- ones (underflow, overflow etc) is that you can leave all the buffering
- higher-level functions. */
-
-/* The 'sysread' hook is used to read data from the external file into
- an existing buffer. It generalizes the Unix read(2) function.
- It matches the streambuf::sys_read virtual function, which is
- specific to this implementation. */
-typedef _IO_ssize_t (*_IO_read_t) __PMT ((_IO_FILE *, void *, _IO_ssize_t));
-#define _IO_SYSREAD(FP, DATA, LEN) JUMP2 (__read, FP, DATA, LEN)
-#define _IO_WSYSREAD(FP, DATA, LEN) WJUMP2 (__read, FP, DATA, LEN)
-
-/* The 'syswrite' hook is used to write data from an existing buffer
- to an external file. It generalizes the Unix write(2) function.
- It matches the streambuf::sys_write virtual function, which is
- specific to this implementation. */
-typedef _IO_ssize_t (*_IO_write_t) __PMT ((_IO_FILE *, const void *,
- _IO_ssize_t));
-#define _IO_SYSWRITE(FP, DATA, LEN) JUMP2 (__write, FP, DATA, LEN)
-#define _IO_WSYSWRITE(FP, DATA, LEN) WJUMP2 (__write, FP, DATA, LEN)
-
-/* The 'sysseek' hook is used to re-position an external file.
- It generalizes the Unix lseek(2) function.
- It matches the streambuf::sys_seek virtual function, which is
- specific to this implementation. */
-typedef _IO_off64_t (*_IO_seek_t) __PMT ((_IO_FILE *, _IO_off64_t, int));
-#define _IO_SYSSEEK(FP, OFFSET, MODE) JUMP2 (__seek, FP, OFFSET, MODE)
-#define _IO_WSYSSEEK(FP, OFFSET, MODE) WJUMP2 (__seek, FP, OFFSET, MODE)
-
-/* The 'sysclose' hook is used to finalize (close, finish up) an
- external file. It generalizes the Unix close(2) function.
- It matches the streambuf::sys_close virtual function, which is
- specific to this implementation. */
-typedef int (*_IO_close_t) __PMT ((_IO_FILE *)); /* finalize */
-#define _IO_SYSCLOSE(FP) JUMP0 (__close, FP)
-#define _IO_WSYSCLOSE(FP) WJUMP0 (__close, FP)
-
-/* The 'sysstat' hook is used to get information about an external file
- into a struct stat buffer. It generalizes the Unix fstat(2) call.
- It matches the streambuf::sys_stat virtual function, which is
- specific to this implementation. */
-typedef int (*_IO_stat_t) __PMT ((_IO_FILE *, void *));
-#define _IO_SYSSTAT(FP, BUF) JUMP1 (__stat, FP, BUF)
-#define _IO_WSYSSTAT(FP, BUF) WJUMP1 (__stat, FP, BUF)
-
-/* The 'showmany' hook can be used to get an image how much input is
- available. In many cases the answer will be 0 which means unknown
- but some cases one can provide real information. */
-typedef int (*_IO_showmanyc_t) __PMT ((_IO_FILE *));
-#define _IO_SHOWMANYC(FP) JUMP0 (__showmanyc, FP)
-#define _IO_WSHOWMANYC(FP) WJUMP0 (__showmanyc, FP)
-
-/* The 'imbue' hook is used to get information about the currently
- installed locales. */
-typedef void (*_IO_imbue_t) __PMT ((_IO_FILE *, void *));
-#define _IO_IMBUE(FP, LOCALE) JUMP1 (__imbue, FP, LOCALE)
-#define _IO_WIMBUE(FP, LOCALE) WJUMP1 (__imbue, FP, LOCALE)
-
-
-#define _IO_CHAR_TYPE char /* unsigned char ? */
-#define _IO_INT_TYPE int
-
-struct _IO_jump_t
-{
- JUMP_FIELD(_G_size_t, __dummy);
-#if _G_USING_THUNKS
- JUMP_FIELD(_G_size_t, __dummy2);
-#endif
- JUMP_FIELD(_IO_finish_t, __finish);
- JUMP_FIELD(_IO_overflow_t, __overflow);
- JUMP_FIELD(_IO_underflow_t, __underflow);
- JUMP_FIELD(_IO_underflow_t, __uflow);
- JUMP_FIELD(_IO_pbackfail_t, __pbackfail);
- /* showmany */
- JUMP_FIELD(_IO_xsputn_t, __xsputn);
- JUMP_FIELD(_IO_xsgetn_t, __xsgetn);
- JUMP_FIELD(_IO_seekoff_t, __seekoff);
- JUMP_FIELD(_IO_seekpos_t, __seekpos);
- JUMP_FIELD(_IO_setbuf_t, __setbuf);
- JUMP_FIELD(_IO_sync_t, __sync);
- JUMP_FIELD(_IO_doallocate_t, __doallocate);
- JUMP_FIELD(_IO_read_t, __read);
- JUMP_FIELD(_IO_write_t, __write);
- JUMP_FIELD(_IO_seek_t, __seek);
- JUMP_FIELD(_IO_close_t, __close);
- JUMP_FIELD(_IO_stat_t, __stat);
- JUMP_FIELD(_IO_showmanyc_t, __showmanyc);
- JUMP_FIELD(_IO_imbue_t, __imbue);
-#if 0
- get_column;
- set_column;
-#endif
-};
-
-/* We always allocate an extra word following an _IO_FILE.
- This contains a pointer to the function jump table used.
- This is for compatibility with C++ streambuf; the word can
- be used to smash to a pointer to a virtual function table. */
-
-struct _IO_FILE_plus
-{
- _IO_FILE file;
- const struct _IO_jump_t *vtable;
-};
-
-/* Special file type for fopencookie function. */
-struct _IO_cookie_file
-{
- struct _IO_FILE_plus __fp;
- void *__cookie;
- _IO_cookie_io_functions_t __io_functions;
-};
-
-/* Iterator type for walking global linked list of _IO_FILE objects. */
-
-typedef struct _IO_FILE *_IO_ITER;
-
-/* Generic functions */
-
-extern void _IO_switch_to_main_get_area __P ((_IO_FILE *));
-extern void _IO_switch_to_backup_area __P ((_IO_FILE *));
-extern int _IO_switch_to_get_mode __P ((_IO_FILE *));
-extern void _IO_init __P ((_IO_FILE *, int));
-extern int _IO_sputbackc __P ((_IO_FILE *, int));
-extern int _IO_sungetc __P ((_IO_FILE *));
-extern void _IO_un_link __P ((struct _IO_FILE_plus *));
-extern void _IO_link_in __P ((struct _IO_FILE_plus *));
-extern void _IO_doallocbuf __P ((_IO_FILE *));
-extern void _IO_unsave_markers __P ((_IO_FILE *));
-extern void _IO_setb __P ((_IO_FILE *, char *, char *, int));
-extern unsigned _IO_adjust_column __P ((unsigned, const char *, int));
-#define _IO_sputn(__fp, __s, __n) _IO_XSPUTN (__fp, __s, __n)
-
-extern void _IO_switch_to_main_wget_area __P ((_IO_FILE *));
-extern void _IO_switch_to_wbackup_area __P ((_IO_FILE *));
-extern int _IO_switch_to_wget_mode __P ((_IO_FILE *));
-extern void _IO_wsetb __P ((_IO_FILE *, wchar_t *, wchar_t *, int));
-extern wint_t _IO_sputbackwc __P ((_IO_FILE *, wint_t));
-extern wint_t _IO_sungetwc __P ((_IO_FILE *));
-extern void _IO_wdoallocbuf __P ((_IO_FILE *));
-extern void _IO_unsave_wmarkers __P ((_IO_FILE *));
-extern unsigned _IO_adjust_wcolumn __P ((unsigned, const wchar_t *, int));
-
-/* Marker-related function. */
-
-extern void _IO_init_marker __P ((struct _IO_marker *, _IO_FILE *));
-extern void _IO_init_wmarker __P ((struct _IO_marker *, _IO_FILE *));
-extern void _IO_remove_marker __P ((struct _IO_marker *));
-extern int _IO_marker_difference __P ((struct _IO_marker *,
- struct _IO_marker *));
-extern int _IO_marker_delta __P ((struct _IO_marker *));
-extern int _IO_wmarker_delta __P ((struct _IO_marker *));
-extern int _IO_seekmark __P ((_IO_FILE *, struct _IO_marker *, int));
-extern int _IO_seekwmark __P ((_IO_FILE *, struct _IO_marker *, int));
-
-/* Functions for iterating global list and dealing with
- its lock */
-
-extern _IO_ITER _IO_iter_begin __P ((void));
-extern _IO_ITER _IO_iter_end __P ((void));
-extern _IO_ITER _IO_iter_next __P ((_IO_ITER));
-extern _IO_FILE *_IO_iter_file __P ((_IO_ITER));
-extern void _IO_list_lock __P ((void));
-extern void _IO_list_unlock __P ((void));
-extern void _IO_list_resetlock __P ((void));
-
-/* Default jumptable functions. */
-
-extern int _IO_default_underflow __P ((_IO_FILE *));
-extern int _IO_default_uflow __P ((_IO_FILE *));
-extern wint_t _IO_wdefault_uflow __P ((_IO_FILE *));
-extern int _IO_default_doallocate __P ((_IO_FILE *));
-extern int _IO_wdefault_doallocate __P ((_IO_FILE *));
-extern void _IO_default_finish __P ((_IO_FILE *, int));
-extern void _IO_wdefault_finish __P ((_IO_FILE *, int));
-extern int _IO_default_pbackfail __P ((_IO_FILE *, int));
-extern wint_t _IO_wdefault_pbackfail __P ((_IO_FILE *, wint_t));
-extern _IO_FILE* _IO_default_setbuf __P ((_IO_FILE *, char *, _IO_ssize_t));
-extern _IO_FILE* _IO_wdefault_setbuf __P ((_IO_FILE *, wchar_t *,
- _IO_ssize_t));
-extern _IO_size_t _IO_default_xsputn __P ((_IO_FILE *, const void *,
- _IO_size_t));
-extern _IO_size_t _IO_wdefault_xsputn __P ((_IO_FILE *, const void *,
- _IO_size_t));
-extern _IO_size_t _IO_default_xsgetn __P ((_IO_FILE *, void *, _IO_size_t));
-extern _IO_size_t _IO_wdefault_xsgetn __P ((_IO_FILE *, void *, _IO_size_t));
-extern _IO_off64_t _IO_default_seekoff __P ((_IO_FILE *,
- _IO_off64_t, int, int));
-extern _IO_off64_t _IO_default_seekpos __P ((_IO_FILE *, _IO_off64_t, int));
-extern _IO_ssize_t _IO_default_write __P ((_IO_FILE *, const void *,
- _IO_ssize_t));
-extern _IO_ssize_t _IO_default_read __P ((_IO_FILE *, void *, _IO_ssize_t));
-extern int _IO_default_stat __P ((_IO_FILE *, void *));
-extern _IO_off64_t _IO_default_seek __P ((_IO_FILE *, _IO_off64_t, int));
-extern int _IO_default_sync __P ((_IO_FILE *));
-#define _IO_default_close ((_IO_close_t) _IO_default_sync)
-extern int _IO_default_showmanyc __P ((_IO_FILE *));
-extern void _IO_default_imbue __P ((_IO_FILE *, void *));
-
-extern struct _IO_jump_t _IO_file_jumps;
-extern struct _IO_jump_t _IO_wfile_jumps;
-extern struct _IO_jump_t _IO_old_file_jumps;
-extern struct _IO_jump_t _IO_streambuf_jumps;
-extern struct _IO_jump_t _IO_proc_jumps;
-extern struct _IO_jump_t _IO_old_proc_jumps;
-extern struct _IO_jump_t _IO_str_jumps;
-extern struct _IO_jump_t _IO_wstr_jumps;
-extern struct _IO_codecvt __libio_codecvt;
-extern int _IO_do_write __P ((_IO_FILE *, const char *, _IO_size_t));
-extern int _IO_new_do_write __P ((_IO_FILE *, const char *, _IO_size_t));
-extern int _IO_old_do_write __P ((_IO_FILE *, const char *, _IO_size_t));
-extern int _IO_wdo_write __P ((_IO_FILE *, const wchar_t *, _IO_size_t));
-extern int _IO_flush_all __P ((void));
-extern int _IO_cleanup __P ((void));
-extern void _IO_flush_all_linebuffered __P ((void));
-extern int _IO_new_fgetpos __P ((_IO_FILE *, _IO_fpos_t *));
-extern int _IO_old_fgetpos __P ((_IO_FILE *, _IO_fpos_t *));
-extern int _IO_new_fsetpos __P ((_IO_FILE *, const _IO_fpos_t *));
-extern int _IO_old_fsetpos __P ((_IO_FILE *, const _IO_fpos_t *));
-extern int _IO_new_fgetpos64 __P ((_IO_FILE *, _IO_fpos64_t *));
-extern int _IO_old_fgetpos64 __P ((_IO_FILE *, _IO_fpos64_t *));
-extern int _IO_new_fsetpos64 __P ((_IO_FILE *, const _IO_fpos64_t *));
-extern int _IO_old_fsetpos64 __P ((_IO_FILE *, const _IO_fpos64_t *));
-
-
-#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
-# define _IO_do_flush(_f) \
- ((_f)->_mode <= 0 \
- ? _IO_do_write(_f, (_f)->_IO_write_base, \
- (_f)->_IO_write_ptr-(_f)->_IO_write_base) \
- : _IO_wdo_write(_f, (_f)->_wide_data->_IO_write_base, \
- ((_f)->_wide_data->_IO_write_ptr \
- - (_f)->_wide_data->_IO_write_base)))
-#else
-# define _IO_do_flush(_f) \
- _IO_do_write(_f, (_f)->_IO_write_base, \
- (_f)->_IO_write_ptr-(_f)->_IO_write_base)
-#endif
-#define _IO_old_do_flush(_f) \
- _IO_old_do_write(_f, (_f)->_IO_write_base, \
- (_f)->_IO_write_ptr-(_f)->_IO_write_base)
-#define _IO_in_put_mode(_fp) ((_fp)->_flags & _IO_CURRENTLY_PUTTING)
-#define _IO_mask_flags(fp, f, mask) \
- ((fp)->_flags = ((fp)->_flags & ~(mask)) | ((f) & (mask)))
-#define _IO_setg(fp, eb, g, eg) ((fp)->_IO_read_base = (eb),\
- (fp)->_IO_read_ptr = (g), (fp)->_IO_read_end = (eg))
-#define _IO_wsetg(fp, eb, g, eg) ((fp)->_wide_data->_IO_read_base = (eb),\
- (fp)->_wide_data->_IO_read_ptr = (g), \
- (fp)->_wide_data->_IO_read_end = (eg))
-#define _IO_setp(__fp, __p, __ep) \
- ((__fp)->_IO_write_base = (__fp)->_IO_write_ptr \
- = __p, (__fp)->_IO_write_end = (__ep))
-#define _IO_wsetp(__fp, __p, __ep) \
- ((__fp)->_wide_data->_IO_write_base \
- = (__fp)->_wide_data->_IO_write_ptr = __p, \
- (__fp)->_wide_data->_IO_write_end = (__ep))
-#define _IO_have_backup(fp) ((fp)->_IO_save_base != NULL)
-#define _IO_have_wbackup(fp) ((fp)->_wide_data->_IO_save_base != NULL)
-#define _IO_in_backup(fp) ((fp)->_flags & _IO_IN_BACKUP)
-#define _IO_have_markers(fp) ((fp)->_markers != NULL)
-#define _IO_blen(fp) ((fp)->_IO_buf_end - (fp)->_IO_buf_base)
-#define _IO_wblen(fp) ((fp)->_wide_data->_IO_buf_end \
- - (fp)->_wide_data->_IO_buf_base)
-
-/* Jumptable functions for files. */
-
-extern int _IO_file_doallocate __P ((_IO_FILE *));
-extern _IO_FILE* _IO_file_setbuf __P ((_IO_FILE *, char *, _IO_ssize_t));
-extern _IO_off64_t _IO_file_seekoff __P ((_IO_FILE *, _IO_off64_t, int, int));
-extern _IO_size_t _IO_file_xsputn __P ((_IO_FILE *, const void *, _IO_size_t));
-extern _IO_size_t _IO_file_xsgetn __P ((_IO_FILE *, void *, _IO_size_t));
-extern int _IO_file_stat __P ((_IO_FILE *, void *));
-extern int _IO_file_close __P ((_IO_FILE *));
-extern int _IO_file_underflow __P ((_IO_FILE *));
-extern int _IO_file_overflow __P ((_IO_FILE *, int));
-#define _IO_file_is_open(__fp) ((__fp)->_fileno != -1)
-extern void _IO_file_init __P ((struct _IO_FILE_plus *));
-extern _IO_FILE* _IO_file_attach __P ((_IO_FILE *, int));
-extern _IO_FILE* _IO_file_open __P ((_IO_FILE *, const char *, int, int,
- int, int));
-extern _IO_FILE* _IO_file_fopen __P ((_IO_FILE *, const char *, const char *,
- int));
-extern _IO_ssize_t _IO_file_write __P ((_IO_FILE *, const void *,
- _IO_ssize_t));
-extern _IO_ssize_t _IO_file_read __P ((_IO_FILE *, void *, _IO_ssize_t));
-extern int _IO_file_sync __P ((_IO_FILE *));
-extern int _IO_file_close_it __P ((_IO_FILE *));
-extern _IO_off64_t _IO_file_seek __P ((_IO_FILE *, _IO_off64_t, int));
-extern void _IO_file_finish __P ((_IO_FILE *, int));
-
-extern _IO_FILE* _IO_new_file_attach __P ((_IO_FILE *, int));
-extern int _IO_new_file_close_it __P ((_IO_FILE *));
-extern void _IO_new_file_finish __P ((_IO_FILE *, int));
-extern _IO_FILE* _IO_new_file_fopen __P ((_IO_FILE *, const char *, const char *,
- int));
-extern void _IO_no_init __P ((_IO_FILE *, int, int, struct _IO_wide_data *,
- struct _IO_jump_t *));
-extern void _IO_new_file_init __P ((struct _IO_FILE_plus *));
-extern _IO_FILE* _IO_new_file_setbuf __P ((_IO_FILE *, char *, _IO_ssize_t));
-extern int _IO_new_file_sync __P ((_IO_FILE *));
-extern int _IO_new_file_underflow __P ((_IO_FILE *));
-extern int _IO_new_file_overflow __P ((_IO_FILE *, int));
-extern _IO_off64_t _IO_new_file_seekoff __P ((_IO_FILE *, _IO_off64_t, int, int));
-extern _IO_ssize_t _IO_new_file_write __P ((_IO_FILE *, const void *,
- _IO_ssize_t));
-extern _IO_size_t _IO_new_file_xsputn __P ((_IO_FILE *, const void *, _IO_size_t));
-
-extern _IO_FILE* _IO_old_file_setbuf __P ((_IO_FILE *, char *, _IO_ssize_t));
-extern _IO_off64_t _IO_old_file_seekoff __P ((_IO_FILE *, _IO_off64_t, int,
- int));
-extern _IO_size_t _IO_old_file_xsputn __P ((_IO_FILE *, const void *,
- _IO_size_t));
-extern int _IO_old_file_underflow __P ((_IO_FILE *));
-extern int _IO_old_file_overflow __P ((_IO_FILE *, int));
-extern void _IO_old_file_init __P ((struct _IO_FILE_plus *));
-extern _IO_FILE* _IO_old_file_attach __P ((_IO_FILE *, int));
-extern _IO_FILE* _IO_old_file_fopen __P ((_IO_FILE *, const char *,
- const char *));
-extern _IO_ssize_t _IO_old_file_write __P ((_IO_FILE *, const void *,
- _IO_ssize_t));
-extern int _IO_old_file_sync __P ((_IO_FILE *));
-extern int _IO_old_file_close_it __P ((_IO_FILE *));
-extern void _IO_old_file_finish __P ((_IO_FILE *, int));
-
-extern int _IO_wfile_doallocate __P ((_IO_FILE *));
-extern _IO_size_t _IO_wfile_xsputn __P ((_IO_FILE *, const void *,
- _IO_size_t));
-extern _IO_FILE* _IO_wfile_setbuf __P ((_IO_FILE *, wchar_t *, _IO_ssize_t));
-extern wint_t _IO_wfile_sync __P ((_IO_FILE *));
-extern wint_t _IO_wfile_underflow __P ((_IO_FILE *));
-extern wint_t _IO_wfile_overflow __P ((_IO_FILE *, wint_t));
-extern _IO_off64_t _IO_wfile_seekoff __P ((_IO_FILE *, _IO_off64_t, int, int));
-
-/* Jumptable functions for proc_files. */
-extern _IO_FILE* _IO_proc_open __P ((_IO_FILE *, const char *, const char *));
-extern _IO_FILE* _IO_new_proc_open __P ((_IO_FILE *, const char *, const char *));
-extern _IO_FILE* _IO_old_proc_open __P ((_IO_FILE *, const char *, const char *));
-extern int _IO_proc_close __P ((_IO_FILE *));
-extern int _IO_new_proc_close __P ((_IO_FILE *));
-extern int _IO_old_proc_close __P ((_IO_FILE *));
-
-/* Jumptable functions for strfiles. */
-extern int _IO_str_underflow __P ((_IO_FILE *));
-extern int _IO_str_overflow __P ((_IO_FILE *, int));
-extern int _IO_str_pbackfail __P ((_IO_FILE *, int));
-extern _IO_off64_t _IO_str_seekoff __P ((_IO_FILE *, _IO_off64_t, int, int));
-extern void _IO_str_finish __P ((_IO_FILE *, int));
-
-/* Other strfile functions */
-struct _IO_strfile_;
-extern void _IO_str_init_static __P ((struct _IO_strfile_ *, char *, int, char *));
-extern void _IO_str_init_readonly __P ((struct _IO_strfile_ *, const char *, int));
-extern _IO_ssize_t _IO_str_count __P ((_IO_FILE *));
-
-/* And the wide character versions. */
-extern void _IO_wstr_init_static __P ((_IO_FILE *, wchar_t *, int, wchar_t *));
-extern void _IO_wstr_init_readonly __P ((_IO_FILE *, const char *, int));
-extern _IO_ssize_t _IO_wstr_count __P ((_IO_FILE *));
-extern _IO_wint_t _IO_wstr_overflow __P ((_IO_FILE *, _IO_wint_t));
-extern _IO_wint_t _IO_wstr_underflow __P ((_IO_FILE *));
-extern _IO_off64_t _IO_wstr_seekoff __P ((_IO_FILE *, _IO_off64_t, int, int));
-extern _IO_wint_t _IO_wstr_pbackfail __P ((_IO_FILE *, _IO_wint_t));
-extern void _IO_wstr_finish __P ((_IO_FILE *, int));
-
-extern int _IO_vasprintf __P ((char **result_ptr, __const char *format,
- _IO_va_list args));
-extern int _IO_vdprintf __P ((int d, __const char *format, _IO_va_list arg));
-extern int _IO_vsnprintf __P ((char *string, _IO_size_t maxlen,
- __const char *format, _IO_va_list args));
-
-
-extern _IO_size_t _IO_getline __P ((_IO_FILE *,char *, _IO_size_t, int, int));
-extern _IO_size_t _IO_getline_info __P ((_IO_FILE *,char *, _IO_size_t,
- int, int, int *));
-extern _IO_ssize_t _IO_getdelim __P ((char **, _IO_size_t *, int, _IO_FILE *));
-extern _IO_size_t _IO_getwline __P ((_IO_FILE *,wchar_t *, _IO_size_t, wint_t,
- int));
-extern _IO_size_t _IO_getwline_info __P ((_IO_FILE *,wchar_t *, _IO_size_t,
- wint_t, int, wint_t *));
-extern double _IO_strtod __P ((const char *, char **));
-extern char *_IO_dtoa __P ((double __d, int __mode, int __ndigits,
- int *__decpt, int *__sign, char **__rve));
-extern int _IO_outfloat __P ((double __value, _IO_FILE *__sb, int __type,
- int __width, int __precision, int __flags,
- int __sign_mode, int __fill));
-
-extern struct _IO_FILE_plus *_IO_list_all;
-extern void (*_IO_cleanup_registration_needed) __PMT ((void));
-
-#ifndef EOF
-# define EOF (-1)
-#endif
-#ifndef NULL
-# if defined __GNUG__ && \
- (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 8))
-# define NULL (__null)
-# else
-# if !defined(__cplusplus)
-# define NULL ((void*)0)
-# else
-# define NULL (0)
-# endif
-# endif
-#endif
-
-#if _G_HAVE_MMAP
-
-#ifdef __cplusplus
-}
-#endif
-
-# include <unistd.h>
-# include <fcntl.h>
-# include <sys/mman.h>
-# include <sys/param.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-# if !defined(MAP_ANONYMOUS) && defined(MAP_ANON)
-# define MAP_ANONYMOUS MAP_ANON
-# endif
-
-# if !defined(MAP_ANONYMOUS) || !defined(EXEC_PAGESIZE)
-# undef _G_HAVE_MMAP
-# define _G_HAVE_MMAP 0
-# endif
-
-#endif /* _G_HAVE_MMAP */
-
-#if _G_HAVE_MMAP
-
-# ifdef _LIBC
-/* When using this code in the GNU libc we must not pollute the name space. */
-# define mmap __mmap
-# define munmap __munmap
-# define ftruncate __ftruncate
-# endif
-
-# define ROUND_TO_PAGE(_S) \
- (((_S) + EXEC_PAGESIZE - 1) & ~(EXEC_PAGESIZE - 1))
-
-# define FREE_BUF(_B, _S) \
- munmap ((_B), ROUND_TO_PAGE (_S))
-# define ALLOC_BUF(_B, _S, _R) \
- do { \
- (_B) = (char *) mmap (0, ROUND_TO_PAGE (_S), \
- PROT_READ | PROT_WRITE, \
- MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); \
- if ((_B) == (char *) MAP_FAILED) \
- return (_R); \
- } while (0)
-# define ALLOC_WBUF(_B, _S, _R) \
- do { \
- (_B) = (wchar_t *) mmap (0, ROUND_TO_PAGE (_S), \
- PROT_READ | PROT_WRITE, \
- MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); \
- if ((_B) == (wchar_t *) MAP_FAILED) \
- return (_R); \
- } while (0)
-
-#else /* _G_HAVE_MMAP */
-
-# define FREE_BUF(_B, _S) \
- free(_B)
-# define ALLOC_BUF(_B, _S, _R) \
- do { \
- (_B) = (char*)malloc(_S); \
- if ((_B) == NULL) \
- return (_R); \
- } while (0)
-# define ALLOC_WBUF(_B, _S, _R) \
- do { \
- (_B) = (wchar_t *)malloc(_S); \
- if ((_B) == NULL) \
- return (_R); \
- } while (0)
-
-#endif /* _G_HAVE_MMAP */
-
-#ifndef OS_FSTAT
-# define OS_FSTAT fstat
-#endif
-struct stat;
-extern _IO_ssize_t _IO_read __P ((int, void *, _IO_size_t));
-extern _IO_ssize_t _IO_write __P ((int, const void *, _IO_size_t));
-extern _IO_off64_t _IO_lseek __P ((int, _IO_off64_t, int));
-extern int _IO_close __P ((int));
-extern int _IO_fstat __P ((int, struct stat *));
-extern int _IO_vscanf __P ((const char *, _IO_va_list));
-
-/* _IO_pos_BAD is an _IO_off64_t value indicating error, unknown, or EOF. */
-#ifndef _IO_pos_BAD
-# define _IO_pos_BAD ((_IO_off64_t) -1)
-#endif
-/* _IO_pos_adjust adjust an _IO_off64_t by some number of bytes. */
-#ifndef _IO_pos_adjust
-# define _IO_pos_adjust(pos, delta) ((pos) += (delta))
-#endif
-/* _IO_pos_0 is an _IO_off64_t value indicating beginning of file. */
-#ifndef _IO_pos_0
-# define _IO_pos_0 ((_IO_off64_t) 0)
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#ifdef _IO_MTSAFE_IO
-/* check following! */
-# ifdef _IO_USE_OLD_IO_FILE
-# define FILEBUF_LITERAL(CHAIN, FLAGS, FD, WDP) \
- { _IO_MAGIC+_IO_LINKED+_IO_IS_FILEBUF+FLAGS, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, (_IO_FILE *) CHAIN, FD, \
- 0, _IO_pos_BAD, 0, 0, { 0 }, &_IO_stdfile_##FD##_lock }
-# else
-# if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
-# define FILEBUF_LITERAL(CHAIN, FLAGS, FD, WDP) \
- { _IO_MAGIC+_IO_LINKED+_IO_IS_FILEBUF+FLAGS, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, (_IO_FILE *) CHAIN, FD, \
- 0, _IO_pos_BAD, 0, 0, { 0 }, &_IO_stdfile_##FD##_lock, _IO_pos_BAD,\
- NULL, WDP, 0 }
-# else
-# define FILEBUF_LITERAL(CHAIN, FLAGS, FD, WDP) \
- { _IO_MAGIC+_IO_LINKED+_IO_IS_FILEBUF+FLAGS, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, (_IO_FILE *) CHAIN, FD, \
- 0, _IO_pos_BAD, 0, 0, { 0 }, &_IO_stdfile_##FD##_lock, _IO_pos_BAD,\
- 0 }
-# endif
-# endif
-#else
-# ifdef _IO_USE_OLD_IO_FILE
-# define FILEBUF_LITERAL(CHAIN, FLAGS, FD, WDP) \
- { _IO_MAGIC+_IO_LINKED+_IO_IS_FILEBUF+FLAGS, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, (_IO_FILE *) CHAIN, FD, \
- 0, _IO_pos_BAD }
-# else
-# if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
-# define FILEBUF_LITERAL(CHAIN, FLAGS, FD, WDP) \
- { _IO_MAGIC+_IO_LINKED+_IO_IS_FILEBUF+FLAGS, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, (_IO_FILE *) CHAIN, FD, \
- 0, _IO_pos_BAD, 0, 0, { 0 }, 0, _IO_pos_BAD, \
- NULL, WDP, 0 }
-# else
-# define FILEBUF_LITERAL(CHAIN, FLAGS, FD, WDP) \
- { _IO_MAGIC+_IO_LINKED+_IO_IS_FILEBUF+FLAGS, \
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, (_IO_FILE *) CHAIN, FD, \
- 0, _IO_pos_BAD, 0, 0, { 0 }, 0, _IO_pos_BAD, \
- 0 }
-# endif
-# endif
-#endif
-
-/* VTABLE_LABEL defines NAME as of the CLASS class.
- CNLENGTH is strlen(#CLASS). */
-#ifdef __GNUC__
-# if _G_VTABLE_LABEL_HAS_LENGTH
-# define VTABLE_LABEL(NAME, CLASS, CNLENGTH) \
- extern char NAME[] asm (_G_VTABLE_LABEL_PREFIX #CNLENGTH #CLASS);
-# else
-# define VTABLE_LABEL(NAME, CLASS, CNLENGTH) \
- extern char NAME[] asm (_G_VTABLE_LABEL_PREFIX #CLASS);
-# endif
-#endif /* __GNUC__ */
-
-#if !defined(builtinbuf_vtable) && defined(__cplusplus)
-# ifdef __GNUC__
-VTABLE_LABEL(builtinbuf_vtable, builtinbuf, 10)
-# else
-# if _G_VTABLE_LABEL_HAS_LENGTH
-# define builtinbuf_vtable _G_VTABLE_LABEL_PREFIX_ID##10builtinbuf
-# else
-# define builtinbuf_vtable _G_VTABLE_LABEL_PREFIX_ID##builtinbuf
-# endif
-# endif
-#endif /* !defined(builtinbuf_vtable) && defined(__cplusplus) */
-
-#if defined(__STDC__) || defined(__cplusplus)
-# define _IO_va_start(args, last) va_start(args, last)
-#else
-# define _IO_va_start(args, last) va_start(args)
-#endif
-
-extern struct _IO_fake_stdiobuf _IO_stdin_buf, _IO_stdout_buf, _IO_stderr_buf;
-
-#if 1
-# define COERCE_FILE(FILE) /* Nothing */
-#else
-/* This is part of the kludge for binary compatibility with old stdio. */
-# define COERCE_FILE(FILE) \
- (((FILE)->_IO_file_flags & _IO_MAGIC_MASK) == _OLD_MAGIC_MASK \
- && (FILE) = *(FILE**)&((int*)fp)[1])
-#endif
-
-#ifdef EINVAL
-# define MAYBE_SET_EINVAL __set_errno (EINVAL)
-#else
-# define MAYBE_SET_EINVAL /* nothing */
-#endif
-
-#ifdef IO_DEBUG
-# define CHECK_FILE(FILE, RET) \
- if ((FILE) == NULL) { MAYBE_SET_EINVAL; return RET; } \
- else { COERCE_FILE(FILE); \
- if (((FILE)->_IO_file_flags & _IO_MAGIC_MASK) != _IO_MAGIC) \
- { MAYBE_SET_EINVAL; return RET; }}
-#else
-# define CHECK_FILE(FILE, RET) COERCE_FILE (FILE)
-#endif
diff --git a/contrib/libstdc++/libio/stdfiles.c b/contrib/libstdc++/libio/stdfiles.c
deleted file mode 100644
index b81fef8b8830..000000000000
--- a/contrib/libstdc++/libio/stdfiles.c
+++ /dev/null
@@ -1,71 +0,0 @@
-/* Copyright (C) 1993, 1994, 1996, 1997, 1999, 2000 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-
-/* This file provides definitions of _IO_stdin, _IO_stdout, and _IO_stderr
- for C code. Compare stdstreams.cc.
- (The difference is that here the vtable field is set to 0,
- so the objects defined are not valid C++ objects. On the other
- hand, we don't need a C++ compiler to build this file.) */
-
-#include "libioP.h"
-
-#ifdef _IO_MTSAFE_IO
-# if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
-# define DEF_STDFILE(NAME, FD, CHAIN, FLAGS) \
- static _IO_lock_t _IO_stdfile_##FD##_lock = _IO_lock_initializer; \
- static struct _IO_wide_data _IO_wide_data_##FD \
- = { ._wide_vtable = &_IO_wfile_jumps }; \
- struct _IO_FILE_plus NAME \
- = {FILEBUF_LITERAL(CHAIN, FLAGS, FD, &_IO_wide_data_##FD), \
- &_IO_file_jumps};
-# else
-# define DEF_STDFILE(NAME, FD, CHAIN, FLAGS) \
- static _IO_lock_t _IO_stdfile_##FD##_lock = _IO_lock_initializer; \
- struct _IO_FILE_plus NAME \
- = {FILEBUF_LITERAL(CHAIN, FLAGS, FD, NULL), \
- &_IO_file_jumps};
-# endif
-#else
-# if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
-# define DEF_STDFILE(NAME, FD, CHAIN, FLAGS) \
- static struct _IO_wide_data _IO_wide_data_##FD \
- = { ._wide_vtable = &_IO_wfile_jumps }; \
- struct _IO_FILE_plus NAME \
- = {FILEBUF_LITERAL(CHAIN, FLAGS, FD, &_IO_wide_data_##FD), \
- &_IO_file_jumps};
-# else
-# define DEF_STDFILE(NAME, FD, CHAIN, FLAGS) \
- struct _IO_FILE_plus NAME \
- = {FILEBUF_LITERAL(CHAIN, FLAGS, FD, NULL), \
- &_IO_file_jumps};
-# endif
-#endif
-
-DEF_STDFILE(_IO_2_1_stdin_, 0, 0, _IO_NO_WRITES);
-DEF_STDFILE(_IO_2_1_stdout_, 1, &_IO_2_1_stdin_, _IO_NO_READS);
-DEF_STDFILE(_IO_2_1_stderr_, 2, &_IO_2_1_stdout_, _IO_NO_READS+_IO_UNBUFFERED);
-
-struct _IO_FILE_plus *_IO_list_all = &_IO_2_1_stderr_;
diff --git a/contrib/libstdc++/libio/stdio.c b/contrib/libstdc++/libio/stdio.c
deleted file mode 100644
index 3b897ced1767..000000000000
--- a/contrib/libstdc++/libio/stdio.c
+++ /dev/null
@@ -1,43 +0,0 @@
-/* Copyright (C) 1993, 1994, 1996, 1997, 2000 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#include "libioP.h"
-#include "stdio.h"
-
-#undef stdin
-#undef stdout
-#undef stderr
-_IO_FILE *stdin = (FILE *) &_IO_2_1_stdin_;
-_IO_FILE *stdout = (FILE *) &_IO_2_1_stdout_;
-_IO_FILE *stderr = (FILE *) &_IO_2_1_stderr_;
-
-#undef _IO_stdin
-#undef _IO_stdout
-#undef _IO_stderr
-#ifdef _LIBC
-strong_alias (stdin, _IO_stdin);
-strong_alias (stdout, _IO_stdout);
-strong_alias (stderr, _IO_stderr);
-#endif
diff --git a/contrib/libstdc++/libio/wfiledoalloc.c b/contrib/libstdc++/libio/wfiledoalloc.c
deleted file mode 100644
index 9c0516204148..000000000000
--- a/contrib/libstdc++/libio/wfiledoalloc.c
+++ /dev/null
@@ -1,108 +0,0 @@
-/* Copyright (C) 1993, 1997, 1999, 2000 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-/*
- * Copyright (c) 1990 The Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms are permitted
- * provided that the above copyright notice and this paragraph are
- * duplicated in all such forms and that any documentation,
- * advertising materials, and other materials related to such
- * distribution and use acknowledge that the software was developed
- * by the University of California, Berkeley. The name of the
- * University may not be used to endorse or promote products derived
- * from this software without specific prior written permission.
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- */
-
-/* Modified for GNU iostream by Per Bothner 1991, 1992. */
-
-#ifndef _POSIX_SOURCE
-# define _POSIX_SOURCE
-#endif
-#include "libioP.h"
-#ifdef _GLIBCPP_USE_WCHAR_T
-#include <sys/types.h>
-#include <sys/stat.h>
-#ifdef __STDC__
-#include <stdlib.h>
-#include <unistd.h>
-#endif
-
-#ifdef _LIBC
-# undef isatty
-# define isatty(Fd) __isatty (Fd)
-#endif
-
-/*
- * Allocate a file buffer, or switch to unbuffered I/O.
- * Per the ANSI C standard, ALL tty devices default to line buffered.
- *
- * As a side effect, we set __SOPT or __SNPT (en/dis-able fseek
- * optimisation) right after the _fstat() that finds the buffer size.
- */
-
-int
-_IO_wfile_doallocate (fp)
- _IO_FILE *fp;
-{
- _IO_size_t size;
- int couldbetty;
- wchar_t *p;
- struct _G_stat64 st;
-
- /* Allocate room for the external buffer. */
- if (fp->_IO_buf_base == NULL)
- _IO_file_doallocate (fp);
-
- if (fp->_fileno < 0 || _IO_SYSSTAT (fp, &st) < 0)
- {
- couldbetty = 0;
- size = _IO_BUFSIZ;
-#if 0
- /* do not try to optimise fseek() */
- fp->_flags |= __SNPT;
-#endif
- }
- else
- {
- couldbetty = S_ISCHR (st.st_mode);
-#if _IO_HAVE_ST_BLKSIZE
- size = st.st_blksize <= 0 ? _IO_BUFSIZ : st.st_blksize;
-#else
- size = _IO_BUFSIZ;
-#endif
- }
- ALLOC_WBUF (p, size * sizeof (wchar_t), EOF);
- _IO_wsetb (fp, p, p + size, 1);
- if (couldbetty && isatty (fp->_fileno))
- fp->_flags |= _IO_LINE_BUF;
- return 1;
-}
-
-#endif /* _GLIBCPP_USE_WCHAR_T */
diff --git a/contrib/libstdc++/libio/wfileops.c b/contrib/libstdc++/libio/wfileops.c
deleted file mode 100644
index 1dd524a3ffb2..000000000000
--- a/contrib/libstdc++/libio/wfileops.c
+++ /dev/null
@@ -1,754 +0,0 @@
-/* Copyright (C) 1993, 95, 97, 98, 99, 2000 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
- Written by Ulrich Drepper <drepper@cygnus.com>.
- Based on the single byte version by Per Bothner <bothner@cygnus.com>.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-#include <assert.h>
-#include <libioP.h>
-#ifdef _GLIBCPP_USE_WCHAR_T
-#include <wchar.h>
-#ifdef HAVE_GCONV_H
-# include <gconv.h>
-#endif
-#include <stdlib.h>
-#include <string.h>
-
-
-#ifndef _LIBC
-# define _IO_new_do_write _IO_do_write
-# define _IO_new_file_attach _IO_file_attach
-# define _IO_new_file_close_it _IO_file_close_it
-# define _IO_new_file_finish _IO_file_finish
-# define _IO_new_file_fopen _IO_file_fopen
-# define _IO_new_file_init _IO_file_init
-# define _IO_new_file_setbuf _IO_file_setbuf
-# define _IO_new_file_sync _IO_file_sync
-# define _IO_new_file_overflow _IO_file_overflow
-# define _IO_new_file_seekoff _IO_file_seekoff
-# define _IO_new_file_underflow _IO_file_underflow
-# define _IO_new_file_write _IO_file_write
-# define _IO_new_file_xsputn _IO_file_xsputn
-#endif
-
-
-_IO_FILE *
-_IO_wfile_setbuf (fp, p, len)
- _IO_FILE *fp;
- wchar_t *p;
- _IO_ssize_t len;
-{
- if (_IO_wdefault_setbuf (fp, p, len) == NULL)
- return NULL;
-
- fp->_wide_data->_IO_write_base = fp->_wide_data->_IO_write_ptr =
- fp->_wide_data->_IO_write_end = fp->_wide_data->_IO_buf_base;
- _IO_wsetg (fp, fp->_wide_data->_IO_buf_base, fp->_wide_data->_IO_buf_base,
- fp->_wide_data->_IO_buf_base);
-
- return fp;
-}
-
-
-/* Convert TO_DO wide character from DATA to FP.
- Then mark FP as having empty buffers. */
-int
-_IO_wdo_write (fp, data, to_do)
- _IO_FILE *fp;
- const wchar_t *data;
- _IO_size_t to_do;
-{
- struct _IO_codecvt *cc = fp->_codecvt;
-
- if (to_do > 0)
- {
- if (fp->_IO_write_end == fp->_IO_write_ptr
- && fp->_IO_write_end != fp->_IO_write_base)
- {
- if (_IO_new_do_write (fp, fp->_IO_write_base,
- fp->_IO_write_ptr - fp->_IO_write_base) == EOF)
- return EOF;
- }
-
- do
- {
- enum __codecvt_result result;
- const wchar_t *new_data;
-
- /* Now convert from the internal format into the external buffer. */
- result = (*cc->__codecvt_do_out) (cc, &fp->_wide_data->_IO_state,
- data, data + to_do, &new_data,
- fp->_IO_write_ptr,
- fp->_IO_buf_end,
- &fp->_IO_write_ptr);
-
- /* Write out what we produced so far. */
- if (_IO_new_do_write (fp, fp->_IO_write_base,
- fp->_IO_write_ptr - fp->_IO_write_base) == EOF)
- /* Something went wrong. */
- return EOF;
-
- to_do -= new_data - data;
-
- /* Next see whether we had problems during the conversion. If yes,
- we cannot go on. */
- if (result != __codecvt_ok
- && (result != __codecvt_partial || new_data - data == 0))
- break;
-
- data = new_data;
- }
- while (to_do > 0);
- }
-
- _IO_wsetg (fp, fp->_wide_data->_IO_buf_base, fp->_wide_data->_IO_buf_base,
- fp->_wide_data->_IO_buf_base);
- fp->_wide_data->_IO_write_base = fp->_wide_data->_IO_write_ptr
- = fp->_wide_data->_IO_buf_base;
- fp->_wide_data->_IO_write_end = ((fp->_flags & (_IO_LINE_BUF+_IO_UNBUFFERED))
- ? fp->_wide_data->_IO_buf_base
- : fp->_wide_data->_IO_buf_end);
-
- return to_do == 0 ? 0 : WEOF;
-}
-
-
-wint_t
-_IO_wfile_underflow (fp)
- _IO_FILE *fp;
-{
- struct _IO_codecvt *cd;
- enum __codecvt_result status;
- _IO_ssize_t count;
- int tries;
- const char *read_ptr_copy;
-
- if (fp->_flags & _IO_NO_READS)
- {
- fp->_flags |= _IO_ERR_SEEN;
- __set_errno (EBADF);
- return WEOF;
- }
- if (fp->_wide_data->_IO_read_ptr < fp->_wide_data->_IO_read_end)
- return *fp->_wide_data->_IO_read_ptr;
-
- cd = fp->_codecvt;
-
- /* Maybe there is something left in the external buffer. */
- if (fp->_IO_read_ptr < fp->_IO_read_end)
- {
- /* Convert it. */
- size_t avail_bytes = fp->_IO_read_end - fp->_IO_read_ptr;
-
- if (avail_bytes >= (*cd->__codecvt_do_max_length) (cd))
- {
- /* There is more in the external. */
- const char *read_stop = (const char *) fp->_IO_read_ptr;
-
- fp->_wide_data->_IO_last_state = fp->_wide_data->_IO_state;
- status = (*cd->__codecvt_do_in) (cd, &fp->_wide_data->_IO_state,
- fp->_IO_read_ptr, fp->_IO_read_end,
- &read_stop,
- fp->_wide_data->_IO_read_end,
- fp->_wide_data->_IO_buf_end,
- &fp->_wide_data->_IO_read_end);
-
- fp->_IO_read_ptr = (char *) read_stop;
-
- /* If we managed to generate some text return the next character. */
- if (fp->_wide_data->_IO_read_ptr < fp->_wide_data->_IO_read_end)
- return *fp->_wide_data->_IO_read_ptr;
-
- if (status == __codecvt_error)
- {
- __set_errno (EILSEQ);
- fp->_flags |= _IO_ERR_SEEN;
- return WEOF;
- }
- }
-
- /* Move the remaining content of the read buffer to the beginning. */
- memmove (fp->_IO_buf_base, fp->_IO_read_ptr,
- fp->_IO_read_end - fp->_IO_read_ptr);
- fp->_IO_read_end = (fp->_IO_buf_base
- + (fp->_IO_read_end - fp->_IO_read_ptr));
- fp->_IO_read_base = fp->_IO_read_ptr = fp->_IO_buf_base;
- }
- else
- fp->_IO_read_base = fp->_IO_read_ptr = fp->_IO_read_end =
- fp->_IO_buf_base;
-
- if (fp->_IO_buf_base == NULL)
- {
- /* Maybe we already have a push back pointer. */
- if (fp->_IO_save_base != NULL)
- {
- free (fp->_IO_save_base);
- fp->_flags &= ~_IO_IN_BACKUP;
- }
- _IO_doallocbuf (fp);
-
- fp->_IO_read_base = fp->_IO_read_ptr = fp->_IO_read_end =
- fp->_IO_buf_base;
- }
-
- fp->_IO_write_base = fp->_IO_write_ptr = fp->_IO_write_end =
- fp->_IO_buf_base;
-
- if (fp->_wide_data->_IO_buf_base == NULL)
- {
- /* Maybe we already have a push back pointer. */
- if (fp->_wide_data->_IO_save_base != NULL)
- {
- free (fp->_wide_data->_IO_save_base);
- fp->_flags &= ~_IO_IN_BACKUP;
- }
- _IO_wdoallocbuf (fp);
- }
-
- /* Flush all line buffered files before reading. */
- /* FIXME This can/should be moved to genops ?? */
- if (fp->_flags & (_IO_LINE_BUF|_IO_UNBUFFERED))
- _IO_flush_all_linebuffered ();
-
- _IO_switch_to_get_mode (fp);
-
- fp->_wide_data->_IO_read_base = fp->_wide_data->_IO_read_ptr =
- fp->_wide_data->_IO_buf_base;
- fp->_wide_data->_IO_read_end = fp->_wide_data->_IO_buf_base;
- fp->_wide_data->_IO_write_base = fp->_wide_data->_IO_write_ptr =
- fp->_wide_data->_IO_write_end = fp->_wide_data->_IO_buf_base;
-
- tries = 0;
- again:
- count = _IO_SYSREAD (fp, fp->_IO_read_end,
- fp->_IO_buf_end - fp->_IO_read_end);
- if (count <= 0)
- {
- if (count == 0 && tries == 0)
- fp->_flags |= _IO_EOF_SEEN;
- else
- fp->_flags |= _IO_ERR_SEEN, count = 0;
- }
- fp->_IO_read_end += count;
- if (count == 0)
- {
- if (tries != 0)
- /* There are some bytes in the external buffer but they don't
- convert to anything. */
- __set_errno (EILSEQ);
- return WEOF;
- }
- if (fp->_offset != _IO_pos_BAD)
- _IO_pos_adjust (fp->_offset, count);
-
- /* Now convert the read input. */
- fp->_wide_data->_IO_last_state = fp->_wide_data->_IO_state;
- fp->_IO_read_base = fp->_IO_read_ptr;
- status = (*cd->__codecvt_do_in) (cd, &fp->_wide_data->_IO_state,
- fp->_IO_read_ptr, fp->_IO_read_end,
- &read_ptr_copy,
- fp->_wide_data->_IO_read_end,
- fp->_wide_data->_IO_buf_end,
- &fp->_wide_data->_IO_read_end);
-
- fp->_IO_read_ptr = (char *) read_ptr_copy;
- if (fp->_wide_data->_IO_read_end == fp->_wide_data->_IO_buf_base)
- {
- if (status == __codecvt_error || fp->_IO_read_end == fp->_IO_buf_end)
- {
- __set_errno (EILSEQ);
- fp->_flags |= _IO_ERR_SEEN;
- return WEOF;
- }
-
- /* The read bytes make no complete character. Try reading again. */
- assert (status == __codecvt_partial);
- ++tries;
- goto again;
- }
-
- return *fp->_wide_data->_IO_read_ptr;
-}
-
-
-wint_t
-_IO_wfile_overflow (f, wch)
- _IO_FILE *f;
- wint_t wch;
-{
- if (f->_flags & _IO_NO_WRITES) /* SET ERROR */
- {
- f->_flags |= _IO_ERR_SEEN;
- __set_errno (EBADF);
- return WEOF;
- }
- /* If currently reading or no buffer allocated. */
- if ((f->_flags & _IO_CURRENTLY_PUTTING) == 0)
- {
- /* Allocate a buffer if needed. */
- if (f->_wide_data->_IO_write_base == 0)
- {
- _IO_wdoallocbuf (f);
- _IO_wsetg (f, f->_wide_data->_IO_buf_base,
- f->_wide_data->_IO_buf_base, f->_wide_data->_IO_buf_base);
-
- if (f->_IO_write_base == NULL)
- {
- _IO_doallocbuf (f);
- _IO_setg (f, f->_IO_buf_base, f->_IO_buf_base, f->_IO_buf_base);
- }
- }
- else
- {
- /* Otherwise must be currently reading. If _IO_read_ptr
- (and hence also _IO_read_end) is at the buffer end,
- logically slide the buffer forwards one block (by setting
- the read pointers to all point at the beginning of the
- block). This makes room for subsequent output.
- Otherwise, set the read pointers to _IO_read_end (leaving
- that alone, so it can continue to correspond to the
- external position). */
- if (f->_wide_data->_IO_read_ptr == f->_wide_data->_IO_buf_end)
- {
- f->_IO_read_end = f->_IO_read_ptr = f->_IO_buf_base;
- f->_wide_data->_IO_read_end = f->_wide_data->_IO_read_ptr =
- f->_wide_data->_IO_buf_base;
- }
- }
- f->_wide_data->_IO_write_ptr = f->_wide_data->_IO_read_ptr;
- f->_wide_data->_IO_write_base = f->_wide_data->_IO_write_ptr;
- f->_wide_data->_IO_write_end = f->_wide_data->_IO_buf_end;
- f->_wide_data->_IO_read_base = f->_wide_data->_IO_read_ptr =
- f->_wide_data->_IO_read_end;
-
- f->_IO_write_ptr = f->_IO_read_ptr;
- f->_IO_write_base = f->_IO_write_ptr;
- f->_IO_write_end = f->_IO_buf_end;
- f->_IO_read_base = f->_IO_read_ptr = f->_IO_read_end;
-
- f->_flags |= _IO_CURRENTLY_PUTTING;
- if (f->_flags & (_IO_LINE_BUF+_IO_UNBUFFERED))
- f->_wide_data->_IO_write_end = f->_wide_data->_IO_write_ptr;
- }
- if (wch == WEOF)
- return _IO_do_flush (f);
- if (f->_wide_data->_IO_write_ptr == f->_wide_data->_IO_buf_end)
- /* Buffer is really full */
- if (_IO_do_flush (f) == WEOF)
- return WEOF;
- *f->_wide_data->_IO_write_ptr++ = wch;
- if ((f->_flags & _IO_UNBUFFERED)
- || ((f->_flags & _IO_LINE_BUF) && wch == L'\n'))
- if (_IO_do_flush (f) == WEOF)
- return WEOF;
- return wch;
-}
-
-wint_t
-_IO_wfile_sync (fp)
- _IO_FILE *fp;
-{
- _IO_ssize_t delta;
- wint_t retval = 0;
-
- /* char* ptr = cur_ptr(); */
- if (fp->_wide_data->_IO_write_ptr > fp->_wide_data->_IO_write_base)
- if (_IO_do_flush (fp))
- return WEOF;
- delta = fp->_wide_data->_IO_read_ptr - fp->_wide_data->_IO_read_end;
- if (delta != 0)
- {
- /* We have to find out how many bytes we have to go back in the
- external buffer. */
- struct _IO_codecvt *cv = fp->_codecvt;
- _IO_off64_t new_pos;
-
- int clen = (*cv->__codecvt_do_encoding) (cv);
-
- if (clen > 0)
- /* It is easy, a fixed number of input bytes are used for each
- wide character. */
- delta *= clen;
- else
- {
- /* We have to find out the hard way how much to back off.
- To do this we determine how much input we needed to
- generate the wide characters up to the current reading
- position. */
- int nread;
-
- fp->_wide_data->_IO_state = fp->_wide_data->_IO_last_state;
- nread = (*cv->__codecvt_do_length) (cv, &fp->_wide_data->_IO_state,
- fp->_IO_read_base,
- fp->_IO_read_end, delta);
- fp->_IO_read_ptr = fp->_IO_read_base + nread;
- delta = -(fp->_IO_read_end - fp->_IO_read_base - nread);
- }
-
- new_pos = _IO_SYSSEEK (fp, delta, 1);
- if (new_pos != (_IO_off64_t) EOF)
- {
- fp->_wide_data->_IO_read_end = fp->_wide_data->_IO_read_ptr;
- fp->_IO_read_end = fp->_IO_read_ptr;
- }
-#ifdef ESPIPE
- else if (errno == ESPIPE)
- ; /* Ignore error from unseekable devices. */
-#endif
- else
- retval = WEOF;
- }
- if (retval != WEOF)
- fp->_offset = _IO_pos_BAD;
- /* FIXME: Cleanup - can this be shared? */
- /* setg(base(), ptr, ptr); */
- return retval;
-}
-
-_IO_off64_t
-_IO_wfile_seekoff (fp, offset, dir, mode)
- _IO_FILE *fp;
- _IO_off64_t offset;
- int dir;
- int mode;
-{
- _IO_off64_t result;
- _IO_off64_t delta, new_offset;
- long int count;
- /* POSIX.1 8.2.3.7 says that after a call the fflush() the file
- offset of the underlying file must be exact. */
- int must_be_exact = ((fp->_wide_data->_IO_read_base
- == fp->_wide_data->_IO_read_end)
- && (fp->_wide_data->_IO_write_base
- == fp->_wide_data->_IO_write_ptr));
-
- if (mode == 0)
- dir = _IO_seek_cur, offset = 0; /* Don't move any pointers. */
-
- /* Flush unwritten characters.
- (This may do an unneeded write if we seek within the buffer.
- But to be able to switch to reading, we would need to set
- egptr to ptr. That can't be done in the current design,
- which assumes file_ptr() is eGptr. Anyway, since we probably
- end up flushing when we close(), it doesn't make much difference.)
- FIXME: simulate mem-papped files. */
-
- if (fp->_wide_data->_IO_write_ptr > fp->_wide_data->_IO_write_base
- || _IO_in_put_mode (fp))
- if (_IO_switch_to_wget_mode (fp))
- return WEOF;
-
- if (fp->_wide_data->_IO_buf_base == NULL)
- {
- /* It could be that we already have a pushback buffer. */
- if (fp->_wide_data->_IO_read_base != NULL)
- {
- free (fp->_wide_data->_IO_read_base);
- fp->_flags &= ~_IO_IN_BACKUP;
- }
- _IO_doallocbuf (fp);
- _IO_setp (fp, fp->_IO_buf_base, fp->_IO_buf_base);
- _IO_setg (fp, fp->_IO_buf_base, fp->_IO_buf_base, fp->_IO_buf_base);
- _IO_wsetp (fp, fp->_wide_data->_IO_buf_base,
- fp->_wide_data->_IO_buf_base);
- _IO_wsetg (fp, fp->_wide_data->_IO_buf_base,
- fp->_wide_data->_IO_buf_base, fp->_wide_data->_IO_buf_base);
- }
-
- switch (dir)
- {
- struct _IO_codecvt *cv;
- int clen;
-
- case _IO_seek_cur:
- /* Adjust for read-ahead (bytes is buffer). To do this we must
- find out which position in the external buffer corresponds to
- the current position in the internal buffer. */
- cv = fp->_codecvt;
- clen = (*cv->__codecvt_do_encoding) (cv);
-
- if (clen > 0)
- offset -= (fp->_wide_data->_IO_read_end
- - fp->_wide_data->_IO_read_ptr) * clen;
- else
- {
- int nread;
-
- delta = fp->_wide_data->_IO_read_ptr - fp->_wide_data->_IO_read_end;
- fp->_wide_data->_IO_state = fp->_wide_data->_IO_last_state;
- nread = (*cv->__codecvt_do_length) (cv, &fp->_wide_data->_IO_state,
- fp->_IO_read_base,
- fp->_IO_read_end, delta);
- fp->_IO_read_ptr = fp->_IO_read_base + nread;
- offset -= fp->_IO_read_end - fp->_IO_read_base - nread;
- }
-
- if (fp->_offset == _IO_pos_BAD)
- goto dumb;
- /* Make offset absolute, assuming current pointer is file_ptr(). */
- offset += fp->_offset;
-
- dir = _IO_seek_set;
- break;
- case _IO_seek_set:
- break;
- case _IO_seek_end:
- {
- struct _G_stat64 st;
- if (_IO_SYSSTAT (fp, &st) == 0 && S_ISREG (st.st_mode))
- {
- offset += st.st_size;
- dir = _IO_seek_set;
- }
- else
- goto dumb;
- }
- }
- /* At this point, dir==_IO_seek_set. */
-
- /* If we are only interested in the current position we've found it now. */
- if (mode == 0)
- return offset;
-
- /* If destination is within current buffer, optimize: */
- if (fp->_offset != _IO_pos_BAD && fp->_IO_read_base != NULL
- && !_IO_in_backup (fp))
- {
- /* Offset relative to start of main get area. */
- _IO_off64_t rel_offset = (offset - fp->_offset
- + (fp->_IO_read_end - fp->_IO_read_base));
- if (rel_offset >= 0)
- {
-#if 0
- if (_IO_in_backup (fp))
- _IO_switch_to_main_get_area (fp);
-#endif
- if (rel_offset <= fp->_IO_read_end - fp->_IO_read_base)
- {
- fp->_IO_read_ptr = fp->_IO_read_base + rel_offset;
- _IO_setp (fp, fp->_IO_buf_base, fp->_IO_buf_base);
-
- /* Now set the pointer for the internal buffer. This
- might be an iterative process. Though the read
- pointer is somewhere in the current external buffer
- this does not mean we can convert this whole buffer
- at once fitting in the internal buffer. */
- do
- {
-
- }
- while (0);
-
- _IO_mask_flags (fp, 0, _IO_EOF_SEEN);
- goto resync;
- }
-#ifdef TODO
- /* If we have streammarkers, seek forward by reading ahead. */
- if (_IO_have_markers (fp))
- {
- int to_skip = rel_offset
- - (fp->_IO_read_ptr - fp->_IO_read_base);
- if (ignore (to_skip) != to_skip)
- goto dumb;
- _IO_mask_flags (fp, 0, _IO_EOF_SEEN);
- goto resync;
- }
-#endif
- }
-#ifdef TODO
- if (rel_offset < 0 && rel_offset >= Bbase () - Bptr ())
- {
- if (!_IO_in_backup (fp))
- _IO_switch_to_backup_area (fp);
- gbump (fp->_IO_read_end + rel_offset - fp->_IO_read_ptr);
- _IO_mask_flags (fp, 0, _IO_EOF_SEEN);
- goto resync;
- }
-#endif
- }
-
-#ifdef TODO
- _IO_unsave_markers (fp);
-#endif
-
- if (fp->_flags & _IO_NO_READS)
- goto dumb;
-
- /* Try to seek to a block boundary, to improve kernel page management. */
- new_offset = offset & ~(fp->_IO_buf_end - fp->_IO_buf_base - 1);
- delta = offset - new_offset;
- if (delta > fp->_IO_buf_end - fp->_IO_buf_base)
- {
- new_offset = offset;
- delta = 0;
- }
- result = _IO_SYSSEEK (fp, new_offset, 0);
- if (result < 0)
- return EOF;
- if (delta == 0)
- count = 0;
- else
- {
- count = _IO_SYSREAD (fp, fp->_IO_buf_base,
- (must_be_exact
- ? delta : fp->_IO_buf_end - fp->_IO_buf_base));
- if (count < delta)
- {
- /* We weren't allowed to read, but try to seek the remainder. */
- offset = count == EOF ? delta : delta-count;
- dir = _IO_seek_cur;
- goto dumb;
- }
- }
- _IO_setg (fp, fp->_IO_buf_base, fp->_IO_buf_base + delta,
- fp->_IO_buf_base + count);
- _IO_setp (fp, fp->_IO_buf_base, fp->_IO_buf_base);
- fp->_offset = result + count;
- _IO_mask_flags (fp, 0, _IO_EOF_SEEN);
- return offset;
- dumb:
-
- _IO_unsave_markers (fp);
- result = _IO_SYSSEEK (fp, offset, dir);
- if (result != EOF)
- {
- _IO_mask_flags (fp, 0, _IO_EOF_SEEN);
- fp->_offset = result;
- _IO_setg (fp, fp->_IO_buf_base, fp->_IO_buf_base, fp->_IO_buf_base);
- _IO_setp (fp, fp->_IO_buf_base, fp->_IO_buf_base);
- }
- return result;
-
-resync:
- /* We need to do it since it is possible that the file offset in
- the kernel may be changed behind our back. It may happen when
- we fopen a file and then do a fork. One process may access the
- the file and the kernel file offset will be changed. */
- if (fp->_offset >= 0)
- _IO_SYSSEEK (fp, fp->_offset, 0);
-
- return offset;
-}
-
-
-_IO_size_t
-_IO_wfile_xsputn (f, data, n)
- _IO_FILE *f;
- const void *data;
- _IO_size_t n;
-{
- register const wchar_t *s = (const wchar_t *) data;
- _IO_size_t to_do = n;
- int must_flush = 0;
- _IO_size_t count;
-
- if (n <= 0)
- return 0;
- /* This is an optimized implementation.
- If the amount to be written straddles a block boundary
- (or the filebuf is unbuffered), use sys_write directly. */
-
- /* First figure out how much space is available in the buffer. */
- count = f->_wide_data->_IO_write_end - f->_wide_data->_IO_write_ptr;
- if ((f->_flags & _IO_LINE_BUF) && (f->_flags & _IO_CURRENTLY_PUTTING))
- {
- count = f->_wide_data->_IO_buf_end - f->_wide_data->_IO_write_ptr;
- if (count >= n)
- {
- register const wchar_t *p;
- for (p = s + n; p > s; )
- {
- if (*--p == L'\n')
- {
- count = p - s + 1;
- must_flush = 1;
- break;
- }
- }
- }
- }
- /* Then fill the buffer. */
- if (count > 0)
- {
- if (count > to_do)
- count = to_do;
- if (count > 20)
- {
-#ifdef _LIBC
- f->_wide_data->_IO_write_ptr =
- __wmempcpy (f->_wide_data->_IO_write_ptr, s, count);
-#else
- wmemcpy (f->_wide_data->_IO_write_ptr, s, count);
- f->_wide_data->_IO_write_ptr += count;
-#endif
- s += count;
- }
- else
- {
- register wchar_t *p = f->_wide_data->_IO_write_ptr;
- register int i = (int) count;
- while (--i >= 0)
- *p++ = *s++;
- f->_wide_data->_IO_write_ptr = p;
- }
- to_do -= count;
- }
- if (to_do > 0)
- to_do -= _IO_wdefault_xsputn (f, s, to_do);
- if (must_flush
- && f->_wide_data->_IO_write_ptr != f->_wide_data->_IO_write_base)
- _IO_wdo_write (f, f->_wide_data->_IO_write_base,
- f->_wide_data->_IO_write_ptr
- - f->_wide_data->_IO_write_base);
-
- return n - to_do;
-}
-
-
-struct _IO_jump_t _IO_wfile_jumps =
-{
- JUMP_INIT_DUMMY,
- JUMP_INIT(finish, _IO_new_file_finish),
- JUMP_INIT(overflow, (_IO_overflow_t) _IO_wfile_overflow),
- JUMP_INIT(underflow, (_IO_underflow_t) _IO_wfile_underflow),
- JUMP_INIT(uflow, (_IO_underflow_t) _IO_wdefault_uflow),
- JUMP_INIT(pbackfail, (_IO_pbackfail_t) _IO_wdefault_pbackfail),
- JUMP_INIT(xsputn, _IO_wfile_xsputn),
- JUMP_INIT(xsgetn, _IO_file_xsgetn),
- JUMP_INIT(seekoff, _IO_wfile_seekoff),
- JUMP_INIT(seekpos, _IO_default_seekpos),
- JUMP_INIT(setbuf, _IO_new_file_setbuf),
- JUMP_INIT(sync, (_IO_sync_t) _IO_wfile_sync),
- JUMP_INIT(doallocate, _IO_wfile_doallocate),
- JUMP_INIT(read, _IO_file_read),
- JUMP_INIT(write, _IO_new_file_write),
- JUMP_INIT(seek, _IO_file_seek),
- JUMP_INIT(close, _IO_file_close),
- JUMP_INIT(stat, _IO_file_stat),
- JUMP_INIT(showmanyc, _IO_default_showmanyc),
- JUMP_INIT(imbue, _IO_default_imbue)
-};
-
-#endif /* _GLIBCPP_USE_WCHAR_T */
diff --git a/contrib/libstdc++/libio/wgenops.c b/contrib/libstdc++/libio/wgenops.c
deleted file mode 100644
index 748545242953..000000000000
--- a/contrib/libstdc++/libio/wgenops.c
+++ /dev/null
@@ -1,756 +0,0 @@
-/* Copyright (C) 1993, 1995, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
- This file is part of the GNU IO Library.
- Written by Ulrich Drepper <drepper@cygnus.com>.
- Based on the single byte version by Per Bothner <bothner@cygnus.com>.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2, or (at
- your option) any later version.
-
- This library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this library; see the file COPYING. If not, write to
- the Free Software Foundation, 59 Temple Place - Suite 330, Boston,
- MA 02111-1307, USA.
-
- As a special exception, if you link this library with files
- compiled with a GNU compiler to produce an executable, this does
- not cause the resulting executable to be covered by the GNU General
- Public License. This exception does not however invalidate any
- other reasons why the executable file might be covered by the GNU
- General Public License. */
-
-/* Generic or default I/O operations. */
-
-#include "libioP.h"
-#ifdef _GLIBCPP_USE_WCHAR_T
-#ifdef __STDC__
-#include <stdlib.h>
-#endif
-#include <string.h>
-#include <wchar.h>
-
-
-#ifndef _LIBC
-# define __wmemcpy(dst, src, n) wmemcpy (dst, src, n)
-#endif
-
-
-static int save_for_wbackup __P ((_IO_FILE *fp, wchar_t *end_p))
-#ifdef _LIBC
- internal_function
-#endif
- ;
-
-/* Return minimum _pos markers
- Assumes the current get area is the main get area. */
-_IO_ssize_t _IO_least_wmarker __P ((_IO_FILE *fp, wchar_t *end_p));
-
-_IO_ssize_t
-_IO_least_wmarker (fp, end_p)
- _IO_FILE *fp;
- wchar_t *end_p;
-{
- _IO_ssize_t least_so_far = end_p - fp->_wide_data->_IO_read_base;
- struct _IO_marker *mark;
- for (mark = fp->_markers; mark != NULL; mark = mark->_next)
- if (mark->_pos < least_so_far)
- least_so_far = mark->_pos;
- return least_so_far;
-}
-
-/* Switch current get area from backup buffer to (start of) main get area. */
-void
-_IO_switch_to_main_wget_area (fp)
- _IO_FILE *fp;
-{
- wchar_t *tmp;
- fp->_flags &= ~_IO_IN_BACKUP;
- /* Swap _IO_read_end and _IO_save_end. */
- tmp = fp->_wide_data->_IO_read_end;
- fp->_wide_data->_IO_read_end = fp->_wide_data->_IO_save_end;
- fp->_wide_data->_IO_save_end= tmp;
- /* Swap _IO_read_base and _IO_save_base. */
- tmp = fp->_wide_data->_IO_read_base;
- fp->_wide_data->_IO_read_base = fp->_wide_data->_IO_save_base;
- fp->_wide_data->_IO_save_base = tmp;
- /* Set _IO_read_ptr. */
- fp->_wide_data->_IO_read_ptr = fp->_wide_data->_IO_read_base;
-}
-
-
-/* Switch current get area from main get area to (end of) backup area. */
-void
-_IO_switch_to_wbackup_area (fp)
- _IO_FILE *fp;
-{
- wchar_t *tmp;
- fp->_flags |= _IO_IN_BACKUP;
- /* Swap _IO_read_end and _IO_save_end. */
- tmp = fp->_wide_data->_IO_read_end;
- fp->_wide_data->_IO_read_end = fp->_wide_data->_IO_save_end;
- fp->_wide_data->_IO_save_end = tmp;
- /* Swap _IO_read_base and _IO_save_base. */
- tmp = fp->_wide_data->_IO_read_base;
- fp->_wide_data->_IO_read_base = fp->_wide_data->_IO_save_base;
- fp->_wide_data->_IO_save_base = tmp;
- /* Set _IO_read_ptr. */
- fp->_wide_data->_IO_read_ptr = fp->_wide_data->_IO_read_end;
-}
-
-
-void
-_IO_wsetb (f, b, eb, a)
- _IO_FILE *f;
- wchar_t *b;
- wchar_t *eb;
- int a;
-{
- if (f->_wide_data->_IO_buf_base && !(f->_flags & _IO_USER_BUF))
- FREE_BUF (f->_wide_data->_IO_buf_base, _IO_wblen (f));
- f->_wide_data->_IO_buf_base = b;
- f->_wide_data->_IO_buf_end = eb;
- if (a)
- f->_flags &= ~_IO_USER_BUF;
- else
- f->_flags |= _IO_USER_BUF;
-}
-
-
-wint_t
-_IO_wdefault_pbackfail (fp, c)
- _IO_FILE *fp;
- wint_t c;
-{
- if (fp->_wide_data->_IO_read_ptr > fp->_wide_data->_IO_read_base
- && !_IO_in_backup (fp)
- && (wint_t) fp->_IO_read_ptr[-1] == c)
- --fp->_IO_read_ptr;
- else
- {
- /* Need to handle a filebuf in write mode (switch to read mode). FIXME!*/
- if (!_IO_in_backup (fp))
- {
- /* We need to keep the invariant that the main get area
- logically follows the backup area. */
- if (fp->_wide_data->_IO_read_ptr > fp->_wide_data->_IO_read_base
- && _IO_have_wbackup (fp))
- {
- if (save_for_wbackup (fp, fp->_wide_data->_IO_read_ptr))
- return WEOF;
- }
- else if (!_IO_have_wbackup (fp))
- {
- /* No backup buffer: allocate one. */
- /* Use nshort buffer, if unused? (probably not) FIXME */
- int backup_size = 128;
- wchar_t *bbuf = (wchar_t *) malloc (backup_size
- * sizeof (wchar_t));
- if (bbuf == NULL)
- return WEOF;
- fp->_wide_data->_IO_save_base = bbuf;
- fp->_wide_data->_IO_save_end = (fp->_wide_data->_IO_save_base
- + backup_size);
- fp->_wide_data->_IO_backup_base = fp->_wide_data->_IO_save_end;
- }
- fp->_wide_data->_IO_read_base = fp->_wide_data->_IO_read_ptr;
- _IO_switch_to_wbackup_area (fp);
- }
- else if (fp->_wide_data->_IO_read_ptr <= fp->_wide_data->_IO_read_base)
- {
- /* Increase size of existing backup buffer. */
- _IO_size_t new_size;
- _IO_size_t old_size = (fp->_wide_data->_IO_read_end
- - fp->_wide_data->_IO_read_base);
- wchar_t *new_buf;
- new_size = 2 * old_size;
- new_buf = (wchar_t *) malloc (new_size * sizeof (wchar_t));
- if (new_buf == NULL)
- return WEOF;
- __wmemcpy (new_buf + (new_size - old_size),
- fp->_wide_data->_IO_read_base, old_size);
- free (fp->_wide_data->_IO_read_base);
- _IO_wsetg (fp, new_buf, new_buf + (new_size - old_size),
- new_buf + new_size);
- fp->_wide_data->_IO_backup_base = fp->_wide_data->_IO_read_ptr;
- }
-
- *--fp->_wide_data->_IO_read_ptr = c;
- }
- return c;
-}
-
-
-void
-_IO_wdefault_finish (fp, dummy)
- _IO_FILE *fp;
- int dummy;
-{
- struct _IO_marker *mark;
- if (fp->_wide_data->_IO_buf_base && !(fp->_flags & _IO_USER_BUF))
- {
- FREE_BUF (fp->_wide_data->_IO_buf_base,
- _IO_wblen (fp) * sizeof (wchar_t));
- fp->_wide_data->_IO_buf_base = fp->_wide_data->_IO_buf_end = NULL;
- }
-
- for (mark = fp->_markers; mark != NULL; mark = mark->_next)
- mark->_sbuf = NULL;
-
- if (fp->_IO_save_base)
- {
- free (fp->_wide_data->_IO_save_base);
- fp->_IO_save_base = NULL;
- }
-
-#ifdef _IO_MTSAFE_IO
- _IO_lock_fini (*fp->_lock);
-#endif
-
- _IO_un_link ((struct _IO_FILE_plus *) fp);
-}
-
-
-wint_t
-_IO_wdefault_uflow (fp)
- _IO_FILE *fp;
-{
- wint_t wch;
- wch = _IO_UNDERFLOW (fp);
- if (wch == WEOF)
- return WEOF;
- return *fp->_wide_data->_IO_read_ptr++;
-}
-
-
-wint_t
-__woverflow (f, wch)
- _IO_FILE *f;
- wint_t wch;
-{
- if (f->_mode == 0)
- _IO_fwide (f, 1);
- return _IO_OVERFLOW (f, wch);
-}
-
-
-wint_t
-__wuflow (fp)
- _IO_FILE *fp;
-{
- if (fp->_mode < 0 || (fp->_mode == 0 && _IO_fwide (fp, 1) != 1))
- return WEOF;
-
- if (fp->_mode == 0)
- _IO_fwide (fp, 1);
- if (_IO_in_put_mode (fp))
- if (_IO_switch_to_wget_mode (fp) == EOF)
- return WEOF;
- if (fp->_wide_data->_IO_read_ptr < fp->_wide_data->_IO_read_end)
- return *fp->_wide_data->_IO_read_ptr++;
- if (_IO_in_backup (fp))
- {
- _IO_switch_to_main_wget_area (fp);
- if (fp->_wide_data->_IO_read_ptr < fp->_wide_data->_IO_read_end)
- return *fp->_wide_data->_IO_read_ptr++;
- }
- if (_IO_have_markers (fp))
- {
- if (save_for_wbackup (fp, fp->_wide_data->_IO_read_end))
- return WEOF;
- }
- else if (_IO_have_wbackup (fp))
- _IO_free_wbackup_area (fp);
- return _IO_UFLOW (fp);
-}
-
-
-wint_t
-__wunderflow (fp)
- _IO_FILE *fp;
-{
- if (fp->_mode < 0 || (fp->_mode == 0 && _IO_fwide (fp, 1) != 1))
- return WEOF;
-
- if (fp->_mode == 0)
- _IO_fwide (fp, 1);
- if (_IO_in_put_mode (fp))
- if (_IO_switch_to_wget_mode (fp) == EOF)
- return WEOF;
- if (fp->_wide_data->_IO_read_ptr < fp->_wide_data->_IO_read_end)
- return *fp->_wide_data->_IO_read_ptr;
- if (_IO_in_backup (fp))
- {
- _IO_switch_to_main_wget_area (fp);
- if (fp->_wide_data->_IO_read_ptr < fp->_wide_data->_IO_read_end)
- return *fp->_wide_data->_IO_read_ptr;
- }
- if (_IO_have_markers (fp))
- {
- if (save_for_wbackup (fp, fp->_wide_data->_IO_read_end))
- return WEOF;
- }
- else if (_IO_have_backup (fp))
- _IO_free_wbackup_area (fp);
- return _IO_UNDERFLOW (fp);
-}
-
-
-_IO_size_t
-_IO_wdefault_xsputn (f, data, n)
- _IO_FILE *f;
- const void *data;
- _IO_size_t n;
-{
- const wchar_t *s = (const wchar_t *) data;
- _IO_size_t more = n;
- if (more <= 0)
- return 0;
- for (;;)
- {
- /* Space available. */
- _IO_ssize_t count = (f->_wide_data->_IO_write_end
- - f->_wide_data->_IO_write_ptr);
- if (count > 0)
- {
- if ((_IO_size_t) count > more)
- count = more;
- if (count > 20)
- {
-#ifdef _LIBC
- f->_wide_data->_IO_write_ptr =
- __wmempcpy (f->_wide_data->_IO_write_ptr, s, count);
-#else
- memcpy (f->_wide_data->_IO_write_ptr, s, count);
- f->_wide_data->_IO_write_ptr += count;
-#endif
- s += count;
- }
- else if (count <= 0)
- count = 0;
- else
- {
- wchar_t *p = f->_wide_data->_IO_write_ptr;
- _IO_ssize_t i;
- for (i = count; --i >= 0; )
- *p++ = *s++;
- f->_wide_data->_IO_write_ptr = p;
- }
- more -= count;
- }
- if (more == 0 || __woverflow (f, *s++) == WEOF)
- break;
- more--;
- }
- return n - more;
-}
-
-
-_IO_size_t
-_IO_wdefault_xsgetn (fp, data, n)
- _IO_FILE *fp;
- void *data;
- _IO_size_t n;
-{
- _IO_size_t more = n;
- wchar_t *s = (wchar_t*) data;
- for (;;)
- {
- /* Data available. */
- _IO_ssize_t count = (fp->_wide_data->_IO_read_end
- - fp->_wide_data->_IO_read_ptr);
- if (count > 0)
- {
- if ((_IO_size_t) count > more)
- count = more;
- if (count > 20)
- {
-#ifdef _LIBC
- s = __wmempcpy (s, fp->_wide_data->_IO_read_ptr, count);
-#else
- memcpy (s, fp->_wide_data->_IO_read_ptr, count);
- s += count;
-#endif
- fp->_wide_data->_IO_read_ptr += count;
- }
- else if (count <= 0)
- count = 0;
- else
- {
- wchar_t *p = fp->_wide_data->_IO_read_ptr;
- int i = (int) count;
- while (--i >= 0)
- *s++ = *p++;
- fp->_wide_data->_IO_read_ptr = p;
- }
- more -= count;
- }
- if (more == 0 || __wunderflow (fp) == WEOF)
- break;
- }
- return n - more;
-}
-
-
-void
-_IO_wdoallocbuf (fp)
- _IO_FILE *fp;
-{
- if (fp->_wide_data->_IO_buf_base)
- return;
- if (!(fp->_flags & _IO_UNBUFFERED))
- if (_IO_DOALLOCATE (fp) != WEOF)
- return;
- _IO_wsetb (fp, fp->_wide_data->_shortbuf, fp->_wide_data->_shortbuf + 1, 0);
-}
-
-
-_IO_FILE *
-_IO_wdefault_setbuf (fp, p, len)
- _IO_FILE *fp;
- wchar_t *p;
- _IO_ssize_t len;
-{
- if (_IO_SYNC (fp) == EOF)
- return NULL;
- if (p == NULL || len == 0)
- {
- fp->_flags |= _IO_UNBUFFERED;
- _IO_wsetb (fp, fp->_wide_data->_shortbuf, fp->_wide_data->_shortbuf + 1,
- 0);
- }
- else
- {
- fp->_flags &= ~_IO_UNBUFFERED;
- _IO_wsetb (fp, p, p + len, 0);
- }
- fp->_wide_data->_IO_write_base = fp->_wide_data->_IO_write_ptr
- = fp->_wide_data->_IO_write_end = 0;
- fp->_wide_data->_IO_read_base = fp->_wide_data->_IO_read_ptr
- = fp->_wide_data->_IO_read_end = 0;
- return fp;
-}
-
-
-int
-_IO_wdefault_doallocate (fp)
- _IO_FILE *fp;
-{
- wchar_t *buf;
-
- ALLOC_WBUF (buf, _IO_BUFSIZ, EOF);
- _IO_wsetb (fp, buf, buf + _IO_BUFSIZ, 1);
- return 1;
-}
-
-
-int
-_IO_switch_to_wget_mode (fp)
- _IO_FILE *fp;
-{
- if (fp->_wide_data->_IO_write_ptr > fp->_wide_data->_IO_write_base)
- if (_IO_OVERFLOW (fp, WEOF) == WEOF)
- return EOF;
- if (_IO_in_backup (fp))
- fp->_wide_data->_IO_read_base = fp->_wide_data->_IO_backup_base;
- else
- {
- fp->_wide_data->_IO_read_base = fp->_wide_data->_IO_buf_base;
- if (fp->_wide_data->_IO_write_ptr > fp->_wide_data->_IO_read_end)
- fp->_wide_data->_IO_read_end = fp->_wide_data->_IO_write_ptr;
- }
- fp->_wide_data->_IO_read_ptr = fp->_wide_data->_IO_write_ptr;
-
- fp->_wide_data->_IO_write_base = fp->_wide_data->_IO_write_ptr
- = fp->_wide_data->_IO_write_end = fp->_wide_data->_IO_read_ptr;
-
- fp->_flags &= ~_IO_CURRENTLY_PUTTING;
- return 0;
-}
-
-void
-_IO_free_wbackup_area (fp)
- _IO_FILE *fp;
-{
- if (_IO_in_backup (fp))
- _IO_switch_to_main_wget_area (fp); /* Just in case. */
- free (fp->_wide_data->_IO_save_base);
- fp->_wide_data->_IO_save_base = NULL;
- fp->_wide_data->_IO_save_end = NULL;
- fp->_wide_data->_IO_backup_base = NULL;
-}
-
-#if 0
-int
-_IO_switch_to_wput_mode (fp)
- _IO_FILE *fp;
-{
- fp->_wide_data->_IO_write_base = fp->_wide_data->_IO_read_ptr;
- fp->_wide_data->_IO_write_ptr = fp->_wide_data->_IO_read_ptr;
- /* Following is wrong if line- or un-buffered? */
- fp->_wide_data->_IO_write_end = (fp->_flags & _IO_IN_BACKUP
- ? fp->_wide_data->_IO_read_end
- : fp->_wide_data->_IO_buf_end);
-
- fp->_wide_data->_IO_read_ptr = fp->_wide_data->_IO_read_end;
- fp->_wide_data->_IO_read_base = fp->_wide_data->_IO_read_end;
-
- fp->_flags |= _IO_CURRENTLY_PUTTING;
- return 0;
-}
-#endif
-
-
-static int
-#ifdef _LIBC
-internal_function
-#endif
-save_for_wbackup (fp, end_p)
- _IO_FILE *fp;
- wchar_t *end_p;
-{
- /* Append [_IO_read_base..end_p] to backup area. */
- _IO_ssize_t least_mark = _IO_least_wmarker (fp, end_p);
- /* needed_size is how much space we need in the backup area. */
- _IO_size_t needed_size = ((end_p - fp->_wide_data->_IO_read_base)
- - least_mark);
- /* FIXME: Dubious arithmetic if pointers are NULL */
- _IO_size_t current_Bsize = (fp->_wide_data->_IO_save_end
- - fp->_wide_data->_IO_save_base);
- _IO_size_t avail; /* Extra space available for future expansion. */
- _IO_ssize_t delta;
- struct _IO_marker *mark;
- if (needed_size > current_Bsize)
- {
- wchar_t *new_buffer;
- avail = 100;
- new_buffer = (wchar_t *) malloc ((avail + needed_size)
- * sizeof (wchar_t));
- if (new_buffer == NULL)
- return EOF; /* FIXME */
- if (least_mark < 0)
- {
-#ifdef _LIBC
- __wmempcpy (__wmempcpy (new_buffer + avail,
- fp->_wide_data->_IO_save_end + least_mark,
- -least_mark),
- fp->_wide_data->_IO_read_base,
- end_p - fp->_wide_data->_IO_read_base);
-#else
- memcpy (new_buffer + avail,
- fp->_wide_data->_IO_save_end + least_mark,
- -least_mark * sizeof (wchar_t));
- memcpy (new_buffer + avail - least_mark,
- fp->_wide_data->_IO_read_base,
- (end_p - fp->_wide_data->_IO_read_base) * sizeof (wchar_t));
-#endif
- }
- else
- {
-#ifdef _LIBC
- __wmemcpy (new_buffer + avail,
- fp->_wide_data->_IO_read_base + least_mark,
- needed_size);
-#else
- memcpy (new_buffer + avail,
- fp->_wide_data->_IO_read_base + least_mark,
- needed_size * sizeof (wchar_t));
-#endif
- }
- if (fp->_wide_data->_IO_save_base)
- free (fp->_wide_data->_IO_save_base);
- fp->_wide_data->_IO_save_base = new_buffer;
- fp->_wide_data->_IO_save_end = new_buffer + avail + needed_size;
- }
- else
- {
- avail = current_Bsize - needed_size;
- if (least_mark < 0)
- {
-#ifdef _LIBC
- __wmemmove (fp->_wide_data->_IO_save_base + avail,
- fp->_wide_data->_IO_save_end + least_mark,
- -least_mark);
- __wmemcpy (fp->_wide_data->_IO_save_base + avail - least_mark,
- fp->_wide_data->_IO_read_base,
- end_p - fp->_wide_data->_IO_read_base);
-#else
- memmove (fp->_wide_data->_IO_save_base + avail,
- fp->_wide_data->_IO_save_end + least_mark,
- -least_mark * sizeof (wchar_t));
- memcpy (fp->_wide_data->_IO_save_base + avail - least_mark,
- fp->_wide_data->_IO_read_base,
- (end_p - fp->_wide_data->_IO_read_base) * sizeof (wchar_t));
-#endif
- }
- else if (needed_size > 0)
-#ifdef _LIBC
- __wmemcpy (fp->_wide_data->_IO_save_base + avail,
- fp->_wide_data->_IO_read_base + least_mark,
- needed_size);
-#else
- memcpy (fp->_wide_data->_IO_save_base + avail,
- fp->_wide_data->_IO_read_base + least_mark,
- needed_size * sizeof (wchar_t));
-#endif
- }
- fp->_wide_data->_IO_backup_base = fp->_wide_data->_IO_save_base + avail;
- /* Adjust all the streammarkers. */
- delta = end_p - fp->_wide_data->_IO_read_base;
- for (mark = fp->_markers; mark != NULL; mark = mark->_next)
- mark->_pos -= delta;
- return 0;
-}
-
-wint_t
-_IO_sputbackwc (fp, c)
- _IO_FILE *fp;
- wint_t c;
-{
- wint_t result;
-
- if (fp->_wide_data->_IO_read_ptr > fp->_wide_data->_IO_read_base
- && (wchar_t)fp->_wide_data->_IO_read_ptr[-1] == (wchar_t) c)
- {
- fp->_wide_data->_IO_read_ptr--;
- result = c;
- }
- else
- result = _IO_PBACKFAIL (fp, c);
-
- if (result != EOF)
- fp->_flags &= ~_IO_EOF_SEEN;
-
- return result;
-}
-
-wint_t
-_IO_sungetwc (fp)
- _IO_FILE *fp;
-{
- int result;
-
- if (fp->_wide_data->_IO_read_ptr > fp->_wide_data->_IO_read_base)
- {
- fp->_wide_data->_IO_read_ptr--;
- result = *fp->_wide_data->_IO_read_ptr;
- }
- else
- result = _IO_PBACKFAIL (fp, EOF);
-
- if (result != WEOF)
- fp->_flags &= ~_IO_EOF_SEEN;
-
- return result;
-}
-
-
-unsigned
-_IO_adjust_wcolumn (start, line, count)
- unsigned start;
- const wchar_t *line;
- int count;
-{
- const wchar_t *ptr = line + count;
- while (ptr > line)
- if (*--ptr == L'\n')
- return line + count - ptr - 1;
- return start + count;
-}
-
-void
-_IO_init_wmarker (marker, fp)
- struct _IO_marker *marker;
- _IO_FILE *fp;
-{
- marker->_sbuf = fp;
- if (_IO_in_put_mode (fp))
- _IO_switch_to_wget_mode (fp);
- if (_IO_in_backup (fp))
- marker->_pos = fp->_wide_data->_IO_read_ptr - fp->_wide_data->_IO_read_end;
- else
- marker->_pos = (fp->_wide_data->_IO_read_ptr
- - fp->_wide_data->_IO_read_base);
-
- /* Should perhaps sort the chain? */
- marker->_next = fp->_markers;
- fp->_markers = marker;
-}
-
-#define BAD_DELTA EOF
-
-/* Return difference between MARK and current position of MARK's stream. */
-int
-_IO_wmarker_delta (mark)
- struct _IO_marker *mark;
-{
- int cur_pos;
- if (mark->_sbuf == NULL)
- return BAD_DELTA;
- if (_IO_in_backup (mark->_sbuf))
- cur_pos = (mark->_sbuf->_wide_data->_IO_read_ptr
- - mark->_sbuf->_wide_data->_IO_read_end);
- else
- cur_pos = (mark->_sbuf->_wide_data->_IO_read_ptr
- - mark->_sbuf->_wide_data->_IO_read_base);
- return mark->_pos - cur_pos;
-}
-
-int
-_IO_seekwmark (fp, mark, delta)
- _IO_FILE *fp;
- struct _IO_marker *mark;
- int delta;
-{
- if (mark->_sbuf != fp)
- return EOF;
- if (mark->_pos >= 0)
- {
- if (_IO_in_backup (fp))
- _IO_switch_to_main_wget_area (fp);
- fp->_wide_data->_IO_read_ptr = (fp->_wide_data->_IO_read_base
- + mark->_pos);
- }
- else
- {
- if (!_IO_in_backup (fp))
- _IO_switch_to_wbackup_area (fp);
- fp->_wide_data->_IO_read_ptr = fp->_wide_data->_IO_read_end + mark->_pos;
- }
- return 0;
-}
-
-void
-_IO_unsave_wmarkers (fp)
- _IO_FILE *fp;
-{
- struct _IO_marker *mark = fp->_markers;
- if (mark)
- {
-#ifdef TODO
- streampos offset = seekoff (0, ios::cur, ios::in);
- if (offset != EOF)
- {
- offset += eGptr () - Gbase ();
- for ( ; mark != NULL; mark = mark->_next)
- mark->set_streampos (mark->_pos + offset);
- }
- else
- {
- for ( ; mark != NULL; mark = mark->_next)
- mark->set_streampos (EOF);
- }
-#endif
- fp->_markers = 0;
- }
-
- if (_IO_have_backup (fp))
- _IO_free_wbackup_area (fp);
-}
-
-#endif /* _GLIBCPP_USE_WCHAR_T */
diff --git a/contrib/libstdc++/sinst.cc b/contrib/libstdc++/sinst.cc
deleted file mode 100644
index 0b3617ece620..000000000000
--- a/contrib/libstdc++/sinst.cc
+++ /dev/null
@@ -1,135 +0,0 @@
-// Instantiation file for the -*- C++ -*- string classes.
-// Copyright (C) 1994 Free Software Foundation
-
-// This file is part of the GNU ANSI C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-// As a special exception, if you link this library with files
-// compiled with a GNU compiler to produce an executable, this does not cause
-// the resulting executable to be covered by the GNU General Public License.
-// This exception does not however invalidate any other reasons why
-// the executable file might be covered by the GNU General Public License.
-
-// Written by Jason Merrill based upon the specification by Takanori Adachi
-// in ANSI X3J16/94-0013R2.
-
-#ifdef __GNUG__
-#ifdef TRAITS
-#ifdef C
-#pragma implementation "std/straits.h"
-#endif
-#endif
-#endif
-
-#include <string>
-
-#ifdef C
-typedef char c;
-#endif
-#ifdef W
-typedef wchar_t c;
-#endif
-
-#if defined(TRAITS) && !defined(C)
-template class string_char_traits <c>;
-#else
-/* string_char_traits<char> is already explicitly specialized in
- std/straits.h. */
-#endif
-
-typedef basic_string <c> s;
-
-#ifdef MAIN
-template class basic_string <c>;
-#endif
-
-#ifdef ADDSS
-template s operator+ (const s&, const s&);
-#endif
-#ifdef ADDPS
-template s operator+ (const c*, const s&);
-#endif
-#ifdef ADDCS
-template s operator+ (c, const s&);
-#endif
-#ifdef ADDSP
-template s operator+ (const s&, const c*);
-#endif
-#ifdef ADDSC
-template s operator+ (const s&, c);
-#endif
-#ifdef EQSS
-template bool operator== (const s&, const s&);
-#endif
-#ifdef EQPS
-template bool operator== (const c*, const s&);
-#endif
-#ifdef EQSP
-template bool operator== (const s&, const c*);
-#endif
-#ifdef NESS
-template bool operator!= (const s&, const s&);
-#endif
-#ifdef NEPS
-template bool operator!= (const c*, const s&);
-#endif
-#ifdef NESP
-template bool operator!= (const s&, const c*);
-#endif
-#ifdef LTSS
-template bool operator< (const s&, const s&);
-#endif
-#ifdef LTPS
-template bool operator< (const c*, const s&);
-#endif
-#ifdef LTSP
-template bool operator< (const s&, const c*);
-#endif
-#ifdef GTSS
-template bool operator> (const s&, const s&);
-#endif
-#ifdef GTPS
-template bool operator> (const c*, const s&);
-#endif
-#ifdef GTSP
-template bool operator> (const s&, const c*);
-#endif
-#ifdef LESS
-template bool operator<= (const s&, const s&);
-#endif
-#ifdef LEPS
-template bool operator<= (const c*, const s&);
-#endif
-#ifdef LESP
-template bool operator<= (const s&, const c*);
-#endif
-#ifdef GESS
-template bool operator>= (const s&, const s&);
-#endif
-#ifdef GEPS
-template bool operator>= (const c*, const s&);
-#endif
-#ifdef GESP
-template bool operator>= (const s&, const c*);
-#endif
-#ifdef EXTRACT
-template istream& operator>> (istream&, s&);
-#endif // EXTRACT
-#ifdef INSERT
-template ostream& operator<< (ostream&, const s&);
-#endif // INSERT
-#ifdef GETLINE
-template istream& getline (istream&, s&, c);
-#endif
diff --git a/contrib/libstdc++/src/cmath.cc b/contrib/libstdc++/src/cmath.cc
deleted file mode 100644
index 7a7433a1cf38..000000000000
--- a/contrib/libstdc++/src/cmath.cc
+++ /dev/null
@@ -1,47 +0,0 @@
-// Explicit instantiation file for -*- C++ -*- math library.
-
-// Copyright (C) 2001 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction. Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License. This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-
-// These are explicit instantiations of the behind-the-scenes internal
-// helper functions used in the math routines of libstdc++.
-
-
-#include <cmath>
-
-namespace std
-{
- // This function is only declared/used in the cheaders=c_std case.
- template float
- __cmath_power<float>(float, unsigned int);
- template double
- __cmath_power<double>(double, unsigned int);
- template long double
- __cmath_power<long double>(long double, unsigned int);
-
-} // namespace std
diff --git a/contrib/libstdc++/sstream b/contrib/libstdc++/sstream
deleted file mode 100644
index 45393b14761e..000000000000
--- a/contrib/libstdc++/sstream
+++ /dev/null
@@ -1,343 +0,0 @@
-/* This is part of libio/iostream, providing -*- C++ -*- input/output.
-Copyright (C) 2000 Free Software Foundation
-
-This file is part of the GNU IO Library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this library; see the file COPYING. If not, write to the Free
-Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-/* Written by Magnus Fromreide (magfr@lysator.liu.se). */
-/* seekoff and ideas for overflow is largely borrowed from libstdc++-v3 */
-
-#ifndef __SSTREAM__
-#define __SSTREAM__
-
-#include <iostream.h>
-#include <streambuf.h>
-#include <string>
-
-namespace std
-{
- class stringbuf : public streambuf
- {
- public:
- typedef char char_type;
- typedef int int_type;
- typedef streampos pos_type;
- typedef streamoff off_type;
-
- explicit
- stringbuf(int which=ios::in|ios::out)
- : streambuf(), mode(static_cast<ios::open_mode>(which)),
- stream(NULL), stream_len(0)
- {
- stringbuf_init();
- }
-
- explicit
- stringbuf(const string &str, int which=ios::in|ios::out)
- : streambuf(), mode(static_cast<ios::open_mode>(which)),
- stream(NULL), stream_len(0)
- {
- if (mode & (ios::in|ios::out))
- {
- stream_len = str.size();
- stream = new char_type[stream_len];
- str.copy(stream, stream_len);
- }
- stringbuf_init();
- }
-
- virtual
- ~stringbuf()
- {
- delete[] stream;
- }
-
- string
- str() const
- {
- if (pbase() != 0)
- return string(stream, pptr()-pbase());
- else
- return string();
- }
-
- void
- str(const string& str)
- {
- delete[] stream;
- stream_len = str.size();
- stream = new char_type[stream_len];
- str.copy(stream, stream_len);
- stringbuf_init();
- }
-
- protected:
- // The buffer is already in gptr, so if it ends then it is out of data.
- virtual int
- underflow()
- {
- return EOF;
- }
-
- virtual int
- overflow(int c = EOF)
- {
- int res;
- if (mode & ios::out)
- {
- if (c != EOF)
- {
- streamsize old_stream_len = stream_len;
- stream_len += 1;
- char_type* new_stream = new char_type[stream_len];
- memcpy(new_stream, stream, old_stream_len);
- delete[] stream;
- stream = new_stream;
- stringbuf_sync(gptr()-eback(), pptr()-pbase());
- sputc(c);
- res = c;
- }
- else
- res = EOF;
- }
- else
- res = 0;
- return res;
- }
-
- virtual streambuf*
- setbuf(char_type* s, streamsize n)
- {
- if (n != 0)
- {
- delete[] stream;
- stream = new char_type[n];
- memcpy(stream, s, n);
- stream_len = n;
- stringbuf_sync(0, 0);
- }
- return this;
- }
-
- virtual pos_type
- seekoff(off_type off, ios::seek_dir way, int which = ios::in | ios::out)
- {
- pos_type ret = pos_type(off_type(-1));
- bool testin = which & ios::in && mode & ios::in;
- bool testout = which & ios::out && mode & ios::out;
- bool testboth = testin && testout && way != ios::cur;
-
- if (stream_len && ((testin != testout) || testboth))
- {
- char_type* beg = stream;
- char_type* curi = NULL;
- char_type* curo = NULL;
- char_type* endi = NULL;
- char_type* endo = NULL;
-
- if (testin)
- {
- curi = gptr();
- endi = egptr();
- }
- if (testout)
- {
- curo = pptr();
- endo = epptr();
- }
-
- off_type newoffi = 0;
- off_type newoffo = 0;
- if (way == ios::beg)
- {
- newoffi = beg - curi;
- newoffo = beg - curo;
- }
- else if (way == ios::end)
- {
- newoffi = endi - curi;
- newoffo = endo - curo;
- }
-
- if (testin && newoffi + off + curi - beg >= 0 &&
- endi - beg >= newoffi + off + curi - beg)
- {
- gbump(newoffi + off);
- ret = pos_type(newoffi + off + curi);
- }
- if (testout && newoffo + off + curo - beg >= 0 &&
- endo - beg >= newoffo + off + curo - beg)
- {
- pbump(newoffo + off);
- ret = pos_type(newoffo + off + curo);
- }
- }
- return ret;
- }
-
- virtual pos_type
- seekpos(pos_type sp, int which = ios::in | ios::out)
- {
- pos_type ret = seekoff(sp, ios::beg, which);
- return ret;
- }
-
- private:
- void
- stringbuf_sync(streamsize i, streamsize o)
- {
- if (mode & ios::in)
- setg(stream, stream + i, stream + stream_len);
- if (mode & ios::out)
- {
- setp(stream, stream + stream_len);
- pbump(o);
- }
- }
- void
- stringbuf_init()
- {
- if (mode & ios::ate)
- stringbuf_sync(0, stream_len);
- else
- stringbuf_sync(0, 0);
- }
-
- private:
- ios::open_mode mode;
- char_type* stream;
- streamsize stream_len;
- };
-
- class istringstream : public istream {
- public:
- typedef char char_type;
- typedef int int_type;
- typedef streampos pos_type;
- typedef streamoff off_type;
-
- explicit
- istringstream(int which=ios::in)
- : istream(&sb), sb(which | ios::in)
- { }
-
- explicit
- istringstream(const string& str, int which=ios::in)
- : istream(&sb), sb(str, which | ios::in)
- { }
-
- stringbuf*
- rdbuf() const
- {
- return const_cast<stringbuf*>(&sb);
- }
-
- string
- str() const
- {
- return rdbuf()->str();
- }
- void
- str(const string& s)
- {
- rdbuf()->str(s);
- }
- private:
- stringbuf sb;
- };
-
- class ostringstream : public ostream {
- public:
- typedef char char_type;
- typedef int int_type;
- typedef streampos pos_type;
- typedef streamoff off_type;
-
- explicit
- ostringstream(int which=ios::out)
- : ostream(&sb), sb(which | ios::out)
- { }
-
- explicit
- ostringstream(const string& str, int which=ios::out)
- : ostream(&sb), sb(str, which | ios::out)
- { }
-
- stringbuf*
- rdbuf() const
- {
- return const_cast<stringbuf*>(&sb);
- }
-
- string
- str() const
- {
- return rdbuf()->str();
- }
-
- void str(const string& s)
- {
- rdbuf()->str(s);
- }
- private:
- stringbuf sb;
- };
-
- class stringstream : public iostream {
- public:
- typedef char char_type;
- typedef int int_type;
- typedef streampos pos_type;
- typedef streamoff off_type;
-
- explicit
- stringstream(int which=ios::out|ios::in)
- : iostream(&sb), sb(which)
- { }
-
- explicit
- stringstream(const string& str, int which=ios::out|ios::in)
- : iostream(&sb), sb(str, which)
- { }
-
- stringbuf*
- rdbuf() const
- {
- return const_cast<stringbuf*>(&sb);
- }
-
- string
- str() const
- {
- return rdbuf()->str();
- }
-
- void
- str(const string& s)
- {
- rdbuf()->str(s);
- }
- private:
- stringbuf sb;
- };
-};
-
-#endif /* not __STRSTREAM__ */
diff --git a/contrib/libstdc++/std/bastring.cc b/contrib/libstdc++/std/bastring.cc
deleted file mode 100644
index f86f6d30157c..000000000000
--- a/contrib/libstdc++/std/bastring.cc
+++ /dev/null
@@ -1,524 +0,0 @@
-// Member templates for the -*- C++ -*- string classes.
-// Copyright (C) 1994, 1999 Free Software Foundation
-
-// This file is part of the GNU ANSI C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-// As a special exception, if you link this library with files
-// compiled with a GNU compiler to produce an executable, this does not cause
-// the resulting executable to be covered by the GNU General Public License.
-// This exception does not however invalidate any other reasons why
-// the executable file might be covered by the GNU General Public License.
-
-// Written by Jason Merrill based upon the specification by Takanori Adachi
-// in ANSI X3J16/94-0013R2.
-
-extern "C++" {
-template <class charT, class traits, class Allocator>
-inline void * basic_string <charT, traits, Allocator>::Rep::
-operator new (size_t s, size_t extra)
-{
- return Allocator::allocate(s + extra * sizeof (charT));
-}
-
-template <class charT, class traits, class Allocator>
-inline void basic_string <charT, traits, Allocator>::Rep::
-operator delete (void * ptr)
-{
- Allocator::deallocate(ptr, sizeof(Rep) +
- reinterpret_cast<Rep *>(ptr)->res *
- sizeof (charT));
-}
-
-template <class charT, class traits, class Allocator>
-inline size_t basic_string <charT, traits, Allocator>::Rep::
-frob_size (size_t s)
-{
- size_t i = 16;
- while (i < s) i *= 2;
- return i;
-}
-
-template <class charT, class traits, class Allocator>
-inline basic_string <charT, traits, Allocator>::Rep *
-basic_string <charT, traits, Allocator>::Rep::
-create (size_t extra)
-{
- extra = frob_size (extra + 1);
- Rep *p = new (extra) Rep;
- p->res = extra;
- p->ref = 1;
- p->selfish = false;
- return p;
-}
-
-template <class charT, class traits, class Allocator>
-charT * basic_string <charT, traits, Allocator>::Rep::
-clone ()
-{
- Rep *p = Rep::create (len);
- p->copy (0, data (), len);
- p->len = len;
- return p->data ();
-}
-
-template <class charT, class traits, class Allocator>
-inline bool basic_string <charT, traits, Allocator>::Rep::
-excess_slop (size_t s, size_t r)
-{
- return 2 * (s <= 16 ? 16 : s) < r;
-}
-
-template <class charT, class traits, class Allocator>
-inline bool basic_string <charT, traits, Allocator>::
-check_realloc (basic_string::size_type s) const
-{
- s += sizeof (charT);
- rep ()->selfish = false;
- return (rep ()->ref > 1
- || s > capacity ()
- || Rep::excess_slop (s, capacity ()));
-}
-
-template <class charT, class traits, class Allocator>
-void basic_string <charT, traits, Allocator>::
-alloc (basic_string::size_type __size, bool __save)
-{
- if (! check_realloc (__size))
- return;
-
- Rep *p = Rep::create (__size);
-
- if (__save)
- {
- p->copy (0, data (), length ());
- p->len = length ();
- }
- else
- p->len = 0;
-
- repup (p);
-}
-
-template <class charT, class traits, class Allocator>
-basic_string <charT, traits, Allocator>&
-basic_string <charT, traits, Allocator>::
-replace (size_type pos1, size_type n1,
- const basic_string& str, size_type pos2, size_type n2)
-{
- const size_t len2 = str.length ();
-
- if (pos1 == 0 && n1 >= length () && pos2 == 0 && n2 >= len2)
- return operator= (str);
-
- OUTOFRANGE (pos2 > len2);
-
- if (n2 > len2 - pos2)
- n2 = len2 - pos2;
-
- return replace (pos1, n1, str.data () + pos2, n2);
-}
-
-template <class charT, class traits, class Allocator>
-inline void basic_string <charT, traits, Allocator>::Rep::
-copy (size_t pos, const charT *s, size_t n)
-{
- if (n)
- traits::copy (data () + pos, s, n);
-}
-
-template <class charT, class traits, class Allocator>
-inline void basic_string <charT, traits, Allocator>::Rep::
-move (size_t pos, const charT *s, size_t n)
-{
- if (n)
- traits::move (data () + pos, s, n);
-}
-
-template <class charT, class traits, class Allocator>
-basic_string <charT, traits, Allocator>&
-basic_string <charT, traits, Allocator>::
-replace (size_type pos, size_type n1, const charT* s, size_type n2)
-{
- const size_type len = length ();
- OUTOFRANGE (pos > len);
- if (n1 > len - pos)
- n1 = len - pos;
- LENGTHERROR (len - n1 > max_size () - n2);
- size_t newlen = len - n1 + n2;
-
- if (check_realloc (newlen))
- {
- Rep *p = Rep::create (newlen);
- p->copy (0, data (), pos);
- p->copy (pos + n2, data () + pos + n1, len - (pos + n1));
- p->copy (pos, s, n2);
- repup (p);
- }
- else
- {
- rep ()->move (pos + n2, data () + pos + n1, len - (pos + n1));
- rep ()->copy (pos, s, n2);
- }
- rep ()->len = newlen;
-
- return *this;
-}
-
-template <class charT, class traits, class Allocator>
-inline void basic_string <charT, traits, Allocator>::Rep::
-set (size_t pos, const charT c, size_t n)
-{
- traits::set (data () + pos, c, n);
-}
-
-template <class charT, class traits, class Allocator>
-basic_string <charT, traits, Allocator>& basic_string <charT, traits, Allocator>::
-replace (size_type pos, size_type n1, size_type n2, charT c)
-{
- const size_t len = length ();
- OUTOFRANGE (pos > len);
- if (n1 > len - pos)
- n1 = len - pos;
- LENGTHERROR (len - n1 > max_size () - n2);
- size_t newlen = len - n1 + n2;
-
- if (check_realloc (newlen))
- {
- Rep *p = Rep::create (newlen);
- p->copy (0, data (), pos);
- p->copy (pos + n2, data () + pos + n1, len - (pos + n1));
- p->set (pos, c, n2);
- repup (p);
- }
- else
- {
- rep ()->move (pos + n2, data () + pos + n1, len - (pos + n1));
- rep ()->set (pos, c, n2);
- }
- rep ()->len = newlen;
-
- return *this;
-}
-
-template <class charT, class traits, class Allocator>
-void basic_string <charT, traits, Allocator>::
-resize (size_type n, charT c)
-{
- LENGTHERROR (n > max_size ());
-
- if (n > length ())
- append (n - length (), c);
- else
- erase (n);
-}
-
-template <class charT, class traits, class Allocator>
-basic_string <charT, traits, Allocator>::size_type
-basic_string <charT, traits, Allocator>::
-copy (charT* s, size_type n, size_type pos) const
-{
- OUTOFRANGE (pos > length ());
-
- if (n > length () - pos)
- n = length () - pos;
-
- traits::copy (s, data () + pos, n);
- return n;
-}
-
-template <class charT, class traits, class Allocator>
-basic_string <charT, traits, Allocator>::size_type
-basic_string <charT, traits, Allocator>::
-find (const charT* s, size_type pos, size_type n) const
-{
- size_t xpos = pos;
- for (; xpos + n <= length (); ++xpos)
- if (traits::eq (data () [xpos], *s)
- && traits::compare (data () + xpos, s, n) == 0)
- return xpos;
- return npos;
-}
-
-template <class charT, class traits, class Allocator>
-inline basic_string <charT, traits, Allocator>::size_type
-basic_string <charT, traits, Allocator>::
-_find (const charT* ptr, charT c, size_type xpos, size_type len)
-{
- for (; xpos < len; ++xpos)
- if (traits::eq (ptr [xpos], c))
- return xpos;
- return npos;
-}
-
-template <class charT, class traits, class Allocator>
-basic_string <charT, traits, Allocator>::size_type
-basic_string <charT, traits, Allocator>::
-find (charT c, size_type pos) const
-{
- return _find (data (), c, pos, length ());
-}
-
-template <class charT, class traits, class Allocator>
-basic_string <charT, traits, Allocator>::size_type
-basic_string <charT, traits, Allocator>::
-rfind (const charT* s, size_type pos, size_type n) const
-{
- if (n > length ())
- return npos;
-
- size_t xpos = length () - n;
- if (xpos > pos)
- xpos = pos;
-
- for (++xpos; xpos-- > 0; )
- if (traits::eq (data () [xpos], *s)
- && traits::compare (data () + xpos, s, n) == 0)
- return xpos;
- return npos;
-}
-
-template <class charT, class traits, class Allocator>
-basic_string <charT, traits, Allocator>::size_type
-basic_string <charT, traits, Allocator>::
-rfind (charT c, size_type pos) const
-{
- if (1 > length ())
- return npos;
-
- size_t xpos = length () - 1;
- if (xpos > pos)
- xpos = pos;
-
- for (++xpos; xpos-- > 0; )
- if (traits::eq (data () [xpos], c))
- return xpos;
- return npos;
-}
-
-template <class charT, class traits, class Allocator>
-basic_string <charT, traits, Allocator>::size_type
-basic_string <charT, traits, Allocator>::
-find_first_of (const charT* s, size_type pos, size_type n) const
-{
- size_t xpos = pos;
- for (; xpos < length (); ++xpos)
- if (_find (s, data () [xpos], 0, n) != npos)
- return xpos;
- return npos;
-}
-
-template <class charT, class traits, class Allocator>
-basic_string <charT, traits, Allocator>::size_type
-basic_string <charT, traits, Allocator>::
-find_last_of (const charT* s, size_type pos, size_type n) const
-{
- if (length() == 0)
- return npos;
- size_t xpos = length () - 1;
- if (xpos > pos)
- xpos = pos;
- for (++xpos; xpos-- > 0;)
- if (_find (s, data () [xpos], 0, n) != npos)
- return xpos;
- return npos;
-}
-
-template <class charT, class traits, class Allocator>
-basic_string <charT, traits, Allocator>::size_type
-basic_string <charT, traits, Allocator>::
-find_first_not_of (const charT* s, size_type pos, size_type n) const
-{
- size_t xpos = pos;
- for (; xpos < length (); ++xpos)
- if (_find (s, data () [xpos], 0, n) == npos)
- return xpos;
- return npos;
-}
-
-template <class charT, class traits, class Allocator>
-basic_string <charT, traits, Allocator>::size_type
-basic_string <charT, traits, Allocator>::
-find_first_not_of (charT c, size_type pos) const
-{
- size_t xpos = pos;
- for (; xpos < length (); ++xpos)
- if (traits::ne (data () [xpos], c))
- return xpos;
- return npos;
-}
-
-template <class charT, class traits, class Allocator>
-basic_string <charT, traits, Allocator>::size_type
-basic_string <charT, traits, Allocator>::
-find_last_not_of (const charT* s, size_type pos, size_type n) const
-{
- if (length() == 0)
- return npos;
- size_t xpos = length () - 1;
- if (xpos > pos)
- xpos = pos;
- for (++xpos; xpos-- > 0;)
- if (_find (s, data () [xpos], 0, n) == npos)
- return xpos;
- return npos;
-}
-
-template <class charT, class traits, class Allocator>
-basic_string <charT, traits, Allocator>::size_type
-basic_string <charT, traits, Allocator>::
-find_last_not_of (charT c, size_type pos) const
-{
- if (length() == 0)
- return npos;
- size_t xpos = length () - 1;
- if (xpos > pos)
- xpos = pos;
- for (++xpos; xpos-- > 0;)
- if (traits::ne (data () [xpos], c))
- return xpos;
- return npos;
-}
-
-template <class charT, class traits, class Allocator>
-int basic_string <charT, traits, Allocator>::
-compare (const basic_string& str, size_type pos, size_type n) const
-{
- OUTOFRANGE (pos > length ());
-
- size_t rlen = length () - pos;
- if (rlen > n)
- rlen = n;
- if (rlen > str.length ())
- rlen = str.length ();
- int r = traits::compare (data () + pos, str.data (), rlen);
- if (r != 0)
- return r;
- if (rlen == n)
- return 0;
- return (length () - pos) - str.length ();
-}
-
-template <class charT, class traits, class Allocator>
-int basic_string <charT, traits, Allocator>::
-compare (const charT* s, size_type pos, size_type n) const
-{
- OUTOFRANGE (pos > length ());
-
- size_t rlen = length () - pos;
- if (rlen > n)
- rlen = n;
- int r = traits::compare (data () + pos, s, rlen);
- if (r != 0)
- return r;
- return (length () - pos) - n;
-}
-
-#include <iostream.h>
-
-template <class charT, class traits, class Allocator>
-istream &
-operator>> (istream &is, basic_string <charT, traits, Allocator> &s)
-{
- int w = is.width (0);
- if (is.ipfx0 ())
- {
- register streambuf *sb = is.rdbuf ();
- s.resize (0);
- while (1)
- {
- int ch = sb->sbumpc ();
- if (ch == EOF)
- {
- is.setstate (ios::eofbit);
- break;
- }
- else if (traits::is_del (ch))
- {
- sb->sungetc ();
- break;
- }
- s += static_cast<charT> (ch);
- if (--w == 1)
- break;
- }
- }
-
- is.isfx ();
- if (s.length () == 0)
- is.setstate (ios::failbit);
-
- return is;
-}
-
-template <class charT, class traits, class Allocator>
-ostream &
-operator<< (ostream &o, const basic_string <charT, traits, Allocator>& s)
-{
- return o.write (s.data (), s.length ());
-}
-
-template <class charT, class traits, class Allocator>
-istream&
-getline (istream &is, basic_string <charT, traits, Allocator>& s, charT delim)
-{
- if (is.ipfx1 ())
- {
- _IO_size_t count = 0;
- streambuf *sb = is.rdbuf ();
- s.resize (0);
-
- while (1)
- {
- int ch = sb->sbumpc ();
- if (ch == EOF)
- {
- is.setstate (count == 0
- ? (ios::failbit|ios::eofbit)
- : ios::eofbit);
- break;
- }
-
- ++count;
-
- if (ch == delim)
- break;
-
- s += static_cast<charT> (ch);
-
- if (s.length () == s.npos - 1)
- {
- is.setstate (ios::failbit);
- break;
- }
- }
- }
-
- // We need to be friends with istream to do this.
- // is._gcount = count;
- is.isfx ();
-
- return is;
-}
-
-template <class charT, class traits, class Allocator>
-basic_string <charT, traits, Allocator>::Rep
-basic_string<charT, traits, Allocator>::nilRep = { 0, 0, 1, false };
-
-template <class charT, class traits, class Allocator>
-const basic_string <charT, traits, Allocator>::size_type
-basic_string <charT, traits, Allocator>::npos;
-
-} // extern "C++"
diff --git a/contrib/libstdc++/std/bastring.h b/contrib/libstdc++/std/bastring.h
deleted file mode 100644
index bbe873085eaa..000000000000
--- a/contrib/libstdc++/std/bastring.h
+++ /dev/null
@@ -1,657 +0,0 @@
-// Main templates for the -*- C++ -*- string classes.
-// Copyright (C) 1994, 1995, 1999 Free Software Foundation
-
-// This file is part of the GNU ANSI C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-// As a special exception, if you link this library with files
-// compiled with a GNU compiler to produce an executable, this does not cause
-// the resulting executable to be covered by the GNU General Public License.
-// This exception does not however invalidate any other reasons why
-// the executable file might be covered by the GNU General Public License.
-
-// Written by Jason Merrill based upon the specification by Takanori Adachi
-// in ANSI X3J16/94-0013R2.
-
-#ifndef __BASTRING__
-#define __BASTRING__
-
-#ifdef __GNUG__
-#pragma interface
-#endif
-
-#include <cstddef>
-#include <std/straits.h>
-
-// NOTE : This does NOT conform to the draft standard and is likely to change
-#include <alloc.h>
-
-extern "C++" {
-class istream; class ostream;
-
-#include <iterator>
-
-#ifdef __STL_USE_EXCEPTIONS
-
-extern void __out_of_range (const char *);
-extern void __length_error (const char *);
-
-#define OUTOFRANGE(cond) \
- do { if (cond) __out_of_range (#cond); } while (0)
-#define LENGTHERROR(cond) \
- do { if (cond) __length_error (#cond); } while (0)
-
-#else
-
-#include <cassert>
-#define OUTOFRANGE(cond) assert (!(cond))
-#define LENGTHERROR(cond) assert (!(cond))
-
-#endif
-
-template <class charT, class traits = string_char_traits<charT>,
- class Allocator = alloc >
-class basic_string
-{
-private:
- struct Rep {
- size_t len, res, ref;
- bool selfish;
-
- charT* data () { return reinterpret_cast<charT *>(this + 1); }
- charT& operator[] (size_t s) { return data () [s]; }
- charT* grab () { if (selfish) return clone (); ++ref; return data (); }
-#if defined __i486__ || defined __i586__ || defined __i686__
- void release ()
- {
- size_t __val;
- // This opcode exists as a .byte instead of as a mnemonic for the
- // benefit of SCO OpenServer 5. The system assembler (which is
- // essentially required on this target) can't assemble xaddl in
- //COFF mode.
- asm (".byte 0xf0, 0x0f, 0xc1, 0x02" // lock; xaddl %eax, (%edx)
- : "=a" (__val)
- : "0" (-1), "m" (ref), "d" (&ref)
- : "memory");
-
- if (__val == 1)
- delete this;
- }
-#elif defined __sparcv9__
- void release ()
- {
- size_t __newval, __oldval = ref;
- do
- {
- __newval = __oldval - 1;
- __asm__ ("cas [%4], %2, %0"
- : "=r" (__oldval), "=m" (ref)
- : "r" (__oldval), "m" (ref), "r"(&(ref)), "0" (__newval));
- }
- while (__newval != __oldval);
-
- if (__oldval == 0)
- delete this;
- }
-#else
- void release () { if (--ref == 0) delete this; }
-#endif
-
- inline static void * operator new (size_t, size_t);
- inline static void operator delete (void *);
- inline static Rep* create (size_t);
- charT* clone ();
-
- inline void copy (size_t, const charT *, size_t);
- inline void move (size_t, const charT *, size_t);
- inline void set (size_t, const charT, size_t);
-
- inline static bool excess_slop (size_t, size_t);
- inline static size_t frob_size (size_t);
-
- private:
- Rep &operator= (const Rep &);
- };
-
-public:
-// types:
- typedef traits traits_type;
- typedef typename traits::char_type value_type;
- typedef Allocator allocator_type;
-
- typedef size_t size_type;
- typedef ptrdiff_t difference_type;
- typedef charT& reference;
- typedef const charT& const_reference;
- typedef charT* pointer;
- typedef const charT* const_pointer;
- typedef pointer iterator;
- typedef const_pointer const_iterator;
- typedef ::reverse_iterator<iterator> reverse_iterator;
- typedef ::reverse_iterator<const_iterator> const_reverse_iterator;
- static const size_type npos = static_cast<size_type>(-1);
-
-private:
- Rep *rep () const { return reinterpret_cast<Rep *>(dat) - 1; }
- void repup (Rep *p) { rep ()->release (); dat = p->data (); }
-
-public:
- const charT* data () const
- { return rep ()->data(); }
- size_type length () const
- { return rep ()->len; }
- size_type size () const
- { return rep ()->len; }
- size_type capacity () const
- { return rep ()->res; }
- size_type max_size () const
- { return (npos - 1)/sizeof (charT); } // XXX
- bool empty () const
- { return size () == 0; }
-
-// _lib.string.cons_ construct/copy/destroy:
- basic_string& operator= (const basic_string& str)
- {
- if (&str != this) { rep ()->release (); dat = str.rep ()->grab (); }
- return *this;
- }
-
- explicit basic_string (): dat (nilRep.grab ()) { }
- basic_string (const basic_string& str): dat (str.rep ()->grab ()) { }
- basic_string (const basic_string& str, size_type pos, size_type n = npos)
- : dat (nilRep.grab ()) { assign (str, pos, n); }
- basic_string (const charT* s, size_type n)
- : dat (nilRep.grab ()) { assign (s, n); }
- basic_string (const charT* s)
- : dat (nilRep.grab ()) { assign (s); }
- basic_string (size_type n, charT c)
- : dat (nilRep.grab ()) { assign (n, c); }
-#ifdef __STL_MEMBER_TEMPLATES
- template<class InputIterator>
- basic_string(InputIterator __begin, InputIterator __end)
-#else
- basic_string(const_iterator __begin, const_iterator __end)
-#endif
- : dat (nilRep.grab ()) { assign (__begin, __end); }
-
- ~basic_string ()
- { rep ()->release (); }
-
- void swap (basic_string &s) { charT *d = dat; dat = s.dat; s.dat = d; }
-
- basic_string& append (const basic_string& str, size_type pos = 0,
- size_type n = npos)
- { return replace (length (), 0, str, pos, n); }
- basic_string& append (const charT* s, size_type n)
- { return replace (length (), 0, s, n); }
- basic_string& append (const charT* s)
- { return append (s, traits::length (s)); }
- basic_string& append (size_type n, charT c)
- { return replace (length (), 0, n, c); }
-#ifdef __STL_MEMBER_TEMPLATES
- template<class InputIterator>
- basic_string& append(InputIterator first, InputIterator last)
-#else
- basic_string& append(const_iterator first, const_iterator last)
-#endif
- { return replace (iend (), iend (), first, last); }
-
- void push_back(charT __c)
- { append(1, __c); }
-
- basic_string& assign (const basic_string& str, size_type pos = 0,
- size_type n = npos)
- { return replace (0, npos, str, pos, n); }
- basic_string& assign (const charT* s, size_type n)
- { return replace (0, npos, s, n); }
- basic_string& assign (const charT* s)
- { return assign (s, traits::length (s)); }
- basic_string& assign (size_type n, charT c)
- { return replace (0, npos, n, c); }
-#ifdef __STL_MEMBER_TEMPLATES
- template<class InputIterator>
- basic_string& assign(InputIterator first, InputIterator last)
-#else
- basic_string& assign(const_iterator first, const_iterator last)
-#endif
- { return replace (ibegin (), iend (), first, last); }
-
- basic_string& operator= (const charT* s)
- { return assign (s); }
- basic_string& operator= (charT c)
- { return assign (1, c); }
-
- basic_string& operator+= (const basic_string& rhs)
- { return append (rhs); }
- basic_string& operator+= (const charT* s)
- { return append (s); }
- basic_string& operator+= (charT c)
- { return append (1, c); }
-
- basic_string& insert (size_type pos1, const basic_string& str,
- size_type pos2 = 0, size_type n = npos)
- { return replace (pos1, 0, str, pos2, n); }
- basic_string& insert (size_type pos, const charT* s, size_type n)
- { return replace (pos, 0, s, n); }
- basic_string& insert (size_type pos, const charT* s)
- { return insert (pos, s, traits::length (s)); }
- basic_string& insert (size_type pos, size_type n, charT c)
- { return replace (pos, 0, n, c); }
- iterator insert(iterator p, charT c)
- { size_type __o = p - ibegin ();
- insert (p - ibegin (), 1, c); selfish ();
- return ibegin () + __o; }
- iterator insert(iterator p, size_type n, charT c)
- { size_type __o = p - ibegin ();
- insert (p - ibegin (), n, c); selfish ();
- return ibegin () + __o; }
-#ifdef __STL_MEMBER_TEMPLATES
- template<class InputIterator>
- void insert(iterator p, InputIterator first, InputIterator last)
-#else
- void insert(iterator p, const_iterator first, const_iterator last)
-#endif
- { replace (p, p, first, last); }
-
- basic_string& erase (size_type pos = 0, size_type n = npos)
- { return replace (pos, n, (size_type)0, (charT)0); }
- iterator erase(iterator p)
- { size_type __o = p - begin();
- replace (__o, 1, (size_type)0, (charT)0); selfish ();
- return ibegin() + __o; }
- iterator erase(iterator f, iterator l)
- { size_type __o = f - ibegin();
- replace (__o, l-f, (size_type)0, (charT)0);selfish ();
- return ibegin() + __o; }
-
- basic_string& replace (size_type pos1, size_type n1, const basic_string& str,
- size_type pos2 = 0, size_type n2 = npos);
- basic_string& replace (size_type pos, size_type n1, const charT* s,
- size_type n2);
- basic_string& replace (size_type pos, size_type n1, const charT* s)
- { return replace (pos, n1, s, traits::length (s)); }
- basic_string& replace (size_type pos, size_type n1, size_type n2, charT c);
- basic_string& replace (size_type pos, size_type n, charT c)
- { return replace (pos, n, 1, c); }
- basic_string& replace (iterator i1, iterator i2, const basic_string& str)
- { return replace (i1 - ibegin (), i2 - i1, str); }
- basic_string& replace (iterator i1, iterator i2, const charT* s, size_type n)
- { return replace (i1 - ibegin (), i2 - i1, s, n); }
- basic_string& replace (iterator i1, iterator i2, const charT* s)
- { return replace (i1 - ibegin (), i2 - i1, s); }
- basic_string& replace (iterator i1, iterator i2, size_type n, charT c)
- { return replace (i1 - ibegin (), i2 - i1, n, c); }
-#ifdef __STL_MEMBER_TEMPLATES
- template<class InputIterator>
- basic_string& replace(iterator i1, iterator i2,
- InputIterator j1, InputIterator j2);
-#else
- basic_string& replace(iterator i1, iterator i2,
- const_iterator j1, const_iterator j2);
-#endif
-
-private:
- static charT eos () { return traits::eos (); }
- void unique () { if (rep ()->ref > 1) alloc (length (), true); }
- void selfish () { unique (); rep ()->selfish = true; }
-
-public:
- charT operator[] (size_type pos) const
- {
- if (pos == length ())
- return eos ();
- return data ()[pos];
- }
-
- reference operator[] (size_type pos)
- { selfish (); return (*rep ())[pos]; }
-
- reference at (size_type pos)
- {
- OUTOFRANGE (pos >= length ());
- return (*this)[pos];
- }
- const_reference at (size_type pos) const
- {
- OUTOFRANGE (pos >= length ());
- return data ()[pos];
- }
-
-private:
- void terminate () const
- { traits::assign ((*rep ())[length ()], eos ()); }
-
-public:
- const charT* c_str () const
- { if (length () == 0) return ""; terminate (); return data (); }
- void resize (size_type n, charT c);
- void resize (size_type n)
- { resize (n, eos ()); }
- void reserve (size_type) { }
-
- size_type copy (charT* s, size_type n, size_type pos = 0) const;
-
- size_type find (const basic_string& str, size_type pos = 0) const
- { return find (str.data(), pos, str.length()); }
- size_type find (const charT* s, size_type pos, size_type n) const;
- size_type find (const charT* s, size_type pos = 0) const
- { return find (s, pos, traits::length (s)); }
- size_type find (charT c, size_type pos = 0) const;
-
- size_type rfind (const basic_string& str, size_type pos = npos) const
- { return rfind (str.data(), pos, str.length()); }
- size_type rfind (const charT* s, size_type pos, size_type n) const;
- size_type rfind (const charT* s, size_type pos = npos) const
- { return rfind (s, pos, traits::length (s)); }
- size_type rfind (charT c, size_type pos = npos) const;
-
- size_type find_first_of (const basic_string& str, size_type pos = 0) const
- { return find_first_of (str.data(), pos, str.length()); }
- size_type find_first_of (const charT* s, size_type pos, size_type n) const;
- size_type find_first_of (const charT* s, size_type pos = 0) const
- { return find_first_of (s, pos, traits::length (s)); }
- size_type find_first_of (charT c, size_type pos = 0) const
- { return find (c, pos); }
-
- size_type find_last_of (const basic_string& str, size_type pos = npos) const
- { return find_last_of (str.data(), pos, str.length()); }
- size_type find_last_of (const charT* s, size_type pos, size_type n) const;
- size_type find_last_of (const charT* s, size_type pos = npos) const
- { return find_last_of (s, pos, traits::length (s)); }
- size_type find_last_of (charT c, size_type pos = npos) const
- { return rfind (c, pos); }
-
- size_type find_first_not_of (const basic_string& str, size_type pos = 0) const
- { return find_first_not_of (str.data(), pos, str.length()); }
- size_type find_first_not_of (const charT* s, size_type pos, size_type n) const;
- size_type find_first_not_of (const charT* s, size_type pos = 0) const
- { return find_first_not_of (s, pos, traits::length (s)); }
- size_type find_first_not_of (charT c, size_type pos = 0) const;
-
- size_type find_last_not_of (const basic_string& str, size_type pos = npos) const
- { return find_last_not_of (str.data(), pos, str.length()); }
- size_type find_last_not_of (const charT* s, size_type pos, size_type n) const;
- size_type find_last_not_of (const charT* s, size_type pos = npos) const
- { return find_last_not_of (s, pos, traits::length (s)); }
- size_type find_last_not_of (charT c, size_type pos = npos) const;
-
- basic_string substr (size_type pos = 0, size_type n = npos) const
- { return basic_string (*this, pos, n); }
-
- int compare (const basic_string& str, size_type pos = 0, size_type n = npos) const;
- // There is no 'strncmp' equivalent for charT pointers.
- int compare (const charT* s, size_type pos, size_type n) const;
- int compare (const charT* s, size_type pos = 0) const
- { return compare (s, pos, traits::length (s)); }
-
- iterator begin () { selfish (); return &(*this)[0]; }
- iterator end () { selfish (); return &(*this)[length ()]; }
-
-private:
- iterator ibegin () const { return &(*rep ())[0]; }
- iterator iend () const { return &(*rep ())[length ()]; }
-
-public:
- const_iterator begin () const { return ibegin (); }
- const_iterator end () const { return iend (); }
-
- reverse_iterator rbegin() { return reverse_iterator (end ()); }
- const_reverse_iterator rbegin() const
- { return const_reverse_iterator (end ()); }
- reverse_iterator rend() { return reverse_iterator (begin ()); }
- const_reverse_iterator rend() const
- { return const_reverse_iterator (begin ()); }
-
-private:
- void alloc (size_type size, bool save);
- static size_type _find (const charT* ptr, charT c, size_type xpos, size_type len);
- inline bool check_realloc (size_type s) const;
-
- static Rep nilRep;
- charT *dat;
-};
-
-#ifdef __STL_MEMBER_TEMPLATES
-template <class charT, class traits, class Allocator> template <class InputIterator>
-basic_string <charT, traits, Allocator>& basic_string <charT, traits, Allocator>::
-replace (iterator i1, iterator i2, InputIterator j1, InputIterator j2)
-#else
-template <class charT, class traits, class Allocator>
-basic_string <charT, traits, Allocator>& basic_string <charT, traits, Allocator>::
-replace (iterator i1, iterator i2, const_iterator j1, const_iterator j2)
-#endif
-{
- const size_type len = length ();
- size_type pos = i1 - ibegin ();
- size_type n1 = i2 - i1;
- size_type n2 = j2 - j1;
-
- OUTOFRANGE (pos > len);
- if (n1 > len - pos)
- n1 = len - pos;
- LENGTHERROR (len - n1 > max_size () - n2);
- size_t newlen = len - n1 + n2;
-
- if (check_realloc (newlen))
- {
- Rep *p = Rep::create (newlen);
- p->copy (0, data (), pos);
- p->copy (pos + n2, data () + pos + n1, len - (pos + n1));
- for (; j1 != j2; ++j1, ++pos)
- traits::assign ((*p)[pos], *j1);
- repup (p);
- }
- else
- {
- rep ()->move (pos + n2, data () + pos + n1, len - (pos + n1));
- for (; j1 != j2; ++j1, ++pos)
- traits::assign ((*rep ())[pos], *j1);
- }
- rep ()->len = newlen;
-
- return *this;
-}
-
-template <class charT, class traits, class Allocator>
-inline basic_string <charT, traits, Allocator>
-operator+ (const basic_string <charT, traits, Allocator>& lhs,
- const basic_string <charT, traits, Allocator>& rhs)
-{
- basic_string <charT, traits, Allocator> str (lhs);
- str.append (rhs);
- return str;
-}
-
-template <class charT, class traits, class Allocator>
-inline basic_string <charT, traits, Allocator>
-operator+ (const charT* lhs, const basic_string <charT, traits, Allocator>& rhs)
-{
- basic_string <charT, traits, Allocator> str (lhs);
- str.append (rhs);
- return str;
-}
-
-template <class charT, class traits, class Allocator>
-inline basic_string <charT, traits, Allocator>
-operator+ (charT lhs, const basic_string <charT, traits, Allocator>& rhs)
-{
- basic_string <charT, traits, Allocator> str (1, lhs);
- str.append (rhs);
- return str;
-}
-
-template <class charT, class traits, class Allocator>
-inline basic_string <charT, traits, Allocator>
-operator+ (const basic_string <charT, traits, Allocator>& lhs, const charT* rhs)
-{
- basic_string <charT, traits, Allocator> str (lhs);
- str.append (rhs);
- return str;
-}
-
-template <class charT, class traits, class Allocator>
-inline basic_string <charT, traits, Allocator>
-operator+ (const basic_string <charT, traits, Allocator>& lhs, charT rhs)
-{
- basic_string <charT, traits, Allocator> str (lhs);
- str.append (1, rhs);
- return str;
-}
-
-template <class charT, class traits, class Allocator>
-inline bool
-operator== (const basic_string <charT, traits, Allocator>& lhs,
- const basic_string <charT, traits, Allocator>& rhs)
-{
- return (lhs.compare (rhs) == 0);
-}
-
-template <class charT, class traits, class Allocator>
-inline bool
-operator== (const charT* lhs, const basic_string <charT, traits, Allocator>& rhs)
-{
- return (rhs.compare (lhs) == 0);
-}
-
-template <class charT, class traits, class Allocator>
-inline bool
-operator== (const basic_string <charT, traits, Allocator>& lhs, const charT* rhs)
-{
- return (lhs.compare (rhs) == 0);
-}
-
-template <class charT, class traits, class Allocator>
-inline bool
-operator!= (const charT* lhs, const basic_string <charT, traits, Allocator>& rhs)
-{
- return (rhs.compare (lhs) != 0);
-}
-
-template <class charT, class traits, class Allocator>
-inline bool
-operator!= (const basic_string <charT, traits, Allocator>& lhs, const charT* rhs)
-{
- return (lhs.compare (rhs) != 0);
-}
-
-template <class charT, class traits, class Allocator>
-inline bool
-operator< (const basic_string <charT, traits, Allocator>& lhs,
- const basic_string <charT, traits, Allocator>& rhs)
-{
- return (lhs.compare (rhs) < 0);
-}
-
-template <class charT, class traits, class Allocator>
-inline bool
-operator< (const charT* lhs, const basic_string <charT, traits, Allocator>& rhs)
-{
- return (rhs.compare (lhs) > 0);
-}
-
-template <class charT, class traits, class Allocator>
-inline bool
-operator< (const basic_string <charT, traits, Allocator>& lhs, const charT* rhs)
-{
- return (lhs.compare (rhs) < 0);
-}
-
-template <class charT, class traits, class Allocator>
-inline bool
-operator> (const charT* lhs, const basic_string <charT, traits, Allocator>& rhs)
-{
- return (rhs.compare (lhs) < 0);
-}
-
-template <class charT, class traits, class Allocator>
-inline bool
-operator> (const basic_string <charT, traits, Allocator>& lhs, const charT* rhs)
-{
- return (lhs.compare (rhs) > 0);
-}
-
-template <class charT, class traits, class Allocator>
-inline bool
-operator<= (const charT* lhs, const basic_string <charT, traits, Allocator>& rhs)
-{
- return (rhs.compare (lhs) >= 0);
-}
-
-template <class charT, class traits, class Allocator>
-inline bool
-operator<= (const basic_string <charT, traits, Allocator>& lhs, const charT* rhs)
-{
- return (lhs.compare (rhs) <= 0);
-}
-
-template <class charT, class traits, class Allocator>
-inline bool
-operator>= (const charT* lhs, const basic_string <charT, traits, Allocator>& rhs)
-{
- return (rhs.compare (lhs) <= 0);
-}
-
-template <class charT, class traits, class Allocator>
-inline bool
-operator>= (const basic_string <charT, traits, Allocator>& lhs, const charT* rhs)
-{
- return (lhs.compare (rhs) >= 0);
-}
-
-template <class charT, class traits, class Allocator>
-inline bool
-operator!= (const basic_string <charT, traits, Allocator>& lhs,
- const basic_string <charT, traits, Allocator>& rhs)
-{
- return (lhs.compare (rhs) != 0);
-}
-
-template <class charT, class traits, class Allocator>
-inline bool
-operator> (const basic_string <charT, traits, Allocator>& lhs,
- const basic_string <charT, traits, Allocator>& rhs)
-{
- return (lhs.compare (rhs) > 0);
-}
-
-template <class charT, class traits, class Allocator>
-inline bool
-operator<= (const basic_string <charT, traits, Allocator>& lhs,
- const basic_string <charT, traits, Allocator>& rhs)
-{
- return (lhs.compare (rhs) <= 0);
-}
-
-template <class charT, class traits, class Allocator>
-inline bool
-operator>= (const basic_string <charT, traits, Allocator>& lhs,
- const basic_string <charT, traits, Allocator>& rhs)
-{
- return (lhs.compare (rhs) >= 0);
-}
-
-class istream; class ostream;
-template <class charT, class traits, class Allocator> istream&
-operator>> (istream&, basic_string <charT, traits, Allocator>&);
-template <class charT, class traits, class Allocator> ostream&
-operator<< (ostream&, const basic_string <charT, traits, Allocator>&);
-template <class charT, class traits, class Allocator> istream&
-getline (istream&, basic_string <charT, traits, Allocator>&, charT delim = '\n');
-
-} // extern "C++"
-
-#include <std/bastring.cc>
-
-#endif
diff --git a/contrib/libstdc++/std/complext.cc b/contrib/libstdc++/std/complext.cc
deleted file mode 100644
index 60227f213299..000000000000
--- a/contrib/libstdc++/std/complext.cc
+++ /dev/null
@@ -1,273 +0,0 @@
-// Member templates for the -*- C++ -*- complex number classes.
-// Copyright (C) 1994 Free Software Foundation
-
-// This file is part of the GNU ANSI C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-// As a special exception, if you link this library with files
-// compiled with a GNU compiler to produce an executable, this does not cause
-// the resulting executable to be covered by the GNU General Public License.
-// This exception does not however invalidate any other reasons why
-// the executable file might be covered by the GNU General Public License.
-
-// Written by Jason Merrill based upon the specification in the 27 May 1994
-// C++ working paper, ANSI document X3J16/94-0098.
-
-#include <complex>
-
-extern "C++" {
-template <class FLOAT> complex<FLOAT>
-cos (const complex<FLOAT>& x)
-{
- return complex<FLOAT> (cos (real (x)) * cosh (imag (x)),
- - sin (real (x)) * sinh (imag (x)));
-}
-
-template <class FLOAT> complex<FLOAT>
-cosh (const complex<FLOAT>& x)
-{
- return complex<FLOAT> (cosh (real (x)) * cos (imag (x)),
- sinh (real (x)) * sin (imag (x)));
-}
-
-template <class FLOAT> complex<FLOAT>
-exp (const complex<FLOAT>& x)
-{
- return polar (FLOAT (exp (real (x))), imag (x));
-}
-
-template <class FLOAT> complex<FLOAT>
-log (const complex<FLOAT>& x)
-{
- return complex<FLOAT> (log (abs (x)), arg (x));
-}
-
-template <class FLOAT> complex<FLOAT>
-pow (const complex<FLOAT>& x, const complex<FLOAT>& y)
-{
- FLOAT logr = log (abs (x));
- FLOAT t = arg (x);
-
- return polar (FLOAT (exp (logr * real (y) - imag (y) * t)),
- FLOAT (imag (y) * logr + real (y) * t));
-}
-
-template <class FLOAT> complex<FLOAT>
-pow (const complex<FLOAT>& x, FLOAT y)
-{
- return exp (FLOAT (y) * log (x));
-}
-
-template <class FLOAT> complex<FLOAT>
-pow (FLOAT x, const complex<FLOAT>& y)
-{
- return exp (y * FLOAT (log (x)));
-}
-
-template <class FLOAT> complex<FLOAT>
-sin (const complex<FLOAT>& x)
-{
- return complex<FLOAT> (sin (real (x)) * cosh (imag (x)),
- cos (real (x)) * sinh (imag (x)));
-}
-
-template <class FLOAT> complex<FLOAT>
-sinh (const complex<FLOAT>& x)
-{
- return complex<FLOAT> (sinh (real (x)) * cos (imag (x)),
- cosh (real (x)) * sin (imag (x)));
-}
-
-#include <iostream.h>
-
-template <class FLOAT> istream&
-operator >> (istream& is, complex<FLOAT>& x)
-{
- FLOAT re, im = 0;
- char ch = 0;
-
- if (is.ipfx0 ())
- {
- if (is.peek () == '(')
- is >> ch;
- is >> re;
- if (ch == '(')
- {
- is >> ch;
- if (ch == ',')
- is >> im >> ch;
- }
- }
- is.isfx ();
-
- if (ch != 0 && ch != ')')
- is.setstate (ios::failbit);
- else if (is.good ())
- x = complex<FLOAT> (re, im);
-
- return is;
-}
-
-template <class FLOAT> ostream&
-operator << (ostream& os, const complex<FLOAT>& x)
-{
- return os << '(' << real (x) << ',' << imag (x) << ')';
-}
-
-// The code below is adapted from f2c's libF77, and is subject to this
-// copyright:
-
-/****************************************************************
-Copyright 1990, 1991, 1992, 1993 by AT&T Bell Laboratories and Bellcore.
-
-Permission to use, copy, modify, and distribute this software
-and its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the names of AT&T Bell Laboratories or
-Bellcore or any of their entities not be used in advertising or
-publicity pertaining to distribution of the software without
-specific, written prior permission.
-
-AT&T and Bellcore disclaim all warranties with regard to this
-software, including all implied warranties of merchantability
-and fitness. In no event shall AT&T or Bellcore be liable for
-any special, indirect or consequential damages or any damages
-whatsoever resulting from loss of use, data or profits, whether
-in an action of contract, negligence or other tortious action,
-arising out of or in connection with the use or performance of
-this software.
-****************************************************************/
-
-template <class FLOAT> complex<FLOAT>&
-__doadv (complex<FLOAT>* ths, const complex<FLOAT>& y)
-{
- FLOAT ar = abs (y.re);
- FLOAT ai = abs (y.im);
- FLOAT nr, ni;
- FLOAT t, d;
- if (ar <= ai)
- {
- t = y.re / y.im;
- d = y.im * (1 + t*t);
- nr = (ths->re * t + ths->im) / d;
- ni = (ths->im * t - ths->re) / d;
- }
- else
- {
- t = y.im / y.re;
- d = y.re * (1 + t*t);
- nr = (ths->re + ths->im * t) / d;
- ni = (ths->im - ths->re * t) / d;
- }
- ths->re = nr;
- ths->im = ni;
- return *ths;
-}
-
-template <class FLOAT> complex<FLOAT>
-operator / (const complex<FLOAT>& x, const complex<FLOAT>& y)
-{
- FLOAT ar = abs (real (y));
- FLOAT ai = abs (imag (y));
- FLOAT nr, ni;
- FLOAT t, d;
- if (ar <= ai)
- {
- t = real (y) / imag (y);
- d = imag (y) * (1 + t*t);
- nr = (real (x) * t + imag (x)) / d;
- ni = (imag (x) * t - real (x)) / d;
- }
- else
- {
- t = imag (y) / real (y);
- d = real (y) * (1 + t*t);
- nr = (real (x) + imag (x) * t) / d;
- ni = (imag (x) - real (x) * t) / d;
- }
- return complex<FLOAT> (nr, ni);
-}
-
-template <class FLOAT> complex<FLOAT>
-operator / (FLOAT x, const complex<FLOAT>& y)
-{
- FLOAT ar = abs (real (y));
- FLOAT ai = abs (imag (y));
- FLOAT nr, ni;
- FLOAT t, d;
- if (ar <= ai)
- {
- t = real (y) / imag (y);
- d = imag (y) * (1 + t*t);
- nr = x * t / d;
- ni = -x / d;
- }
- else
- {
- t = imag (y) / real (y);
- d = real (y) * (1 + t*t);
- nr = x / d;
- ni = -x * t / d;
- }
- return complex<FLOAT> (nr, ni);
-}
-
-template <class FLOAT> complex<FLOAT>
-pow (const complex<FLOAT>& xin, int y)
-{
- if (y == 0)
- return complex<FLOAT> (1.0);
- complex<FLOAT> r (1.0);
- complex<FLOAT> x (xin);
- if (y < 0)
- {
- y = -y;
- x = FLOAT(1)/x;
- }
- for (;;)
- {
- if (y & 1)
- r *= x;
- if (y >>= 1)
- x *= x;
- else
- return r;
- }
-}
-
-template <class FLOAT> complex<FLOAT>
-sqrt (const complex<FLOAT>& x)
-{
- FLOAT r = abs (x);
- FLOAT nr, ni;
- if (r == 0.0)
- nr = ni = r;
- else if (real (x) > 0)
- {
- nr = sqrt (0.5 * (r + real (x)));
- ni = imag (x) / nr / 2;
- }
- else
- {
- ni = sqrt (0.5 * (r - real (x)));
- if (imag (x) < 0)
- ni = - ni;
- nr = imag (x) / ni / 2;
- }
- return complex<FLOAT> (nr, ni);
-}
-} // extern "C++"
diff --git a/contrib/libstdc++/std/complext.h b/contrib/libstdc++/std/complext.h
deleted file mode 100644
index 6c55037bf94b..000000000000
--- a/contrib/libstdc++/std/complext.h
+++ /dev/null
@@ -1,400 +0,0 @@
-// The template and inlines for the -*- C++ -*- complex number classes.
-// Copyright (C) 1994 Free Software Foundation
-
-// This file is part of the GNU ANSI C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms of
-// the GNU General Public License as published by the Free Software
-// Foundation; either version 2, or (at your option) any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-// As a special exception, if you link this library with files compiled
-// with a GNU compiler to produce an executable, this does not cause the
-// resulting executable to be covered by the GNU General Public License.
-// This exception does not however invalidate any other reasons why the
-// executable file might be covered by the GNU General Public License.
-
-// Written by Jason Merrill based upon the specification in the 27 May 1994
-// C++ working paper, ANSI document X3J16/94-0098.
-
-#ifndef __COMPLEXT__
-#define __COMPLEXT__
-
-#ifdef __GNUG__
-#pragma interface
-#endif
-
-#include <cmath>
-
-#if ! defined (__GNUG__) && ! defined (__attribute__)
-#define __attribute__(foo) /* Ignore. */
-#endif
-
-class istream;
-class ostream;
-
-extern "C++" {
-template <class _FLT> class complex;
-template <class _FLT> complex<_FLT>&
- __doapl (complex<_FLT>* ths, const complex<_FLT>& r);
-template <class _FLT> complex<_FLT>&
- __doami (complex<_FLT>* ths, const complex<_FLT>& r);
-template <class _FLT> complex<_FLT>&
- __doaml (complex<_FLT>* ths, const complex<_FLT>& r);
-template <class _FLT> complex<_FLT>&
- __doadv (complex<_FLT>* ths, const complex<_FLT>& r);
-
-template <class _FLT>
-class complex
-{
-public:
- complex (_FLT r = 0, _FLT i = 0): re (r), im (i) { }
- complex& operator += (const complex&);
- complex& operator -= (const complex&);
- complex& operator *= (const complex&);
- complex& operator /= (const complex&);
- _FLT real () const { return re; }
- _FLT imag () const { return im; }
-private:
- _FLT re, im;
-
- friend complex& __doapl<> (complex *, const complex&);
- friend complex& __doami<> (complex *, const complex&);
- friend complex& __doaml<> (complex *, const complex&);
- friend complex& __doadv<> (complex *, const complex&);
-};
-
-// Declare specializations.
-class complex<float>;
-class complex<double>;
-class complex<long double>;
-
-template <class _FLT>
-inline complex<_FLT>&
-__doapl (complex<_FLT>* ths, const complex<_FLT>& r)
-{
- ths->re += r.re;
- ths->im += r.im;
- return *ths;
-}
-template <class _FLT>
-inline complex<_FLT>&
-complex<_FLT>::operator += (const complex<_FLT>& r)
-{
- return __doapl (this, r);
-}
-
-template <class _FLT>
-inline complex<_FLT>&
-__doami (complex<_FLT>* ths, const complex<_FLT>& r)
-{
- ths->re -= r.re;
- ths->im -= r.im;
- return *ths;
-}
-template <class _FLT>
-inline complex<_FLT>&
-complex<_FLT>::operator -= (const complex<_FLT>& r)
-{
- return __doami (this, r);
-}
-
-template <class _FLT>
-inline complex<_FLT>&
-__doaml (complex<_FLT>* ths, const complex<_FLT>& r)
-{
- _FLT f = ths->re * r.re - ths->im * r.im;
- ths->im = ths->re * r.im + ths->im * r.re;
- ths->re = f;
- return *ths;
-}
-template <class _FLT>
-inline complex<_FLT>&
-complex<_FLT>::operator *= (const complex<_FLT>& r)
-{
- return __doaml (this, r);
-}
-
-template <class _FLT>
-inline complex<_FLT>&
-complex<_FLT>::operator /= (const complex<_FLT>& r)
-{
- return __doadv (this, r);
-}
-
-template <class _FLT> inline _FLT
-imag (const complex<_FLT>& x) __attribute__ ((const));
-
-template <class _FLT> inline _FLT
-imag (const complex<_FLT>& x)
-{
- return x.imag ();
-}
-
-template <class _FLT> inline _FLT
-real (const complex<_FLT>& x) __attribute__ ((const));
-
-template <class _FLT> inline _FLT
-real (const complex<_FLT>& x)
-{
- return x.real ();
-}
-
-template <class _FLT> inline complex<_FLT>
-operator + (const complex<_FLT>& x, const complex<_FLT>& y) __attribute__ ((const));
-
-template <class _FLT> inline complex<_FLT>
-operator + (const complex<_FLT>& x, const complex<_FLT>& y)
-{
- return complex<_FLT> (real (x) + real (y), imag (x) + imag (y));
-}
-
-template <class _FLT> inline complex<_FLT>
-operator + (const complex<_FLT>& x, _FLT y) __attribute__ ((const));
-
-template <class _FLT> inline complex<_FLT>
-operator + (const complex<_FLT>& x, _FLT y)
-{
- return complex<_FLT> (real (x) + y, imag (x));
-}
-
-template <class _FLT> inline complex<_FLT>
-operator + (_FLT x, const complex<_FLT>& y) __attribute__ ((const));
-
-template <class _FLT> inline complex<_FLT>
-operator + (_FLT x, const complex<_FLT>& y)
-{
- return complex<_FLT> (x + real (y), imag (y));
-}
-
-template <class _FLT> inline complex<_FLT>
-operator - (const complex<_FLT>& x, const complex<_FLT>& y) __attribute__ ((const));
-
-template <class _FLT> inline complex<_FLT>
-operator - (const complex<_FLT>& x, const complex<_FLT>& y)
-{
- return complex<_FLT> (real (x) - real (y), imag (x) - imag (y));
-}
-
-template <class _FLT> inline complex<_FLT>
-operator - (const complex<_FLT>& x, _FLT y) __attribute__ ((const));
-
-template <class _FLT> inline complex<_FLT>
-operator - (const complex<_FLT>& x, _FLT y)
-{
- return complex<_FLT> (real (x) - y, imag (x));
-}
-
-template <class _FLT> inline complex<_FLT>
-operator - (_FLT x, const complex<_FLT>& y) __attribute__ ((const));
-
-template <class _FLT> inline complex<_FLT>
-operator - (_FLT x, const complex<_FLT>& y)
-{
- return complex<_FLT> (x - real (y), - imag (y));
-}
-
-template <class _FLT> inline complex<_FLT>
-operator * (const complex<_FLT>& x, const complex<_FLT>& y) __attribute__ ((const));
-
-template <class _FLT> inline complex<_FLT>
-operator * (const complex<_FLT>& x, const complex<_FLT>& y)
-{
- return complex<_FLT> (real (x) * real (y) - imag (x) * imag (y),
- real (x) * imag (y) + imag (x) * real (y));
-}
-
-template <class _FLT> inline complex<_FLT>
-operator * (const complex<_FLT>& x, _FLT y) __attribute__ ((const));
-
-template <class _FLT> inline complex<_FLT>
-operator * (const complex<_FLT>& x, _FLT y)
-{
- return complex<_FLT> (real (x) * y, imag (x) * y);
-}
-
-template <class _FLT> inline complex<_FLT>
-operator * (_FLT x, const complex<_FLT>& y) __attribute__ ((const));
-
-template <class _FLT> inline complex<_FLT>
-operator * (_FLT x, const complex<_FLT>& y)
-{
- return complex<_FLT> (x * real (y), x * imag (y));
-}
-
-template <class _FLT> complex<_FLT>
-operator / (const complex<_FLT>& x, _FLT y) __attribute__ ((const));
-
-template <class _FLT> complex<_FLT>
-operator / (const complex<_FLT>& x, _FLT y)
-{
- return complex<_FLT> (real (x) / y, imag (x) / y);
-}
-
-template <class _FLT> inline complex<_FLT>
-operator + (const complex<_FLT>& x) __attribute__ ((const));
-
-template <class _FLT> inline complex<_FLT>
-operator + (const complex<_FLT>& x)
-{
- return x;
-}
-
-template <class _FLT> inline complex<_FLT>
-operator - (const complex<_FLT>& x) __attribute__ ((const));
-
-template <class _FLT> inline complex<_FLT>
-operator - (const complex<_FLT>& x)
-{
- return complex<_FLT> (-real (x), -imag (x));
-}
-
-template <class _FLT> inline bool
-operator == (const complex<_FLT>& x, const complex<_FLT>& y) __attribute__ ((const));
-
-template <class _FLT> inline bool
-operator == (const complex<_FLT>& x, const complex<_FLT>& y)
-{
- return real (x) == real (y) && imag (x) == imag (y);
-}
-
-template <class _FLT> inline bool
-operator == (const complex<_FLT>& x, _FLT y) __attribute__ ((const));
-
-template <class _FLT> inline bool
-operator == (const complex<_FLT>& x, _FLT y)
-{
- return real (x) == y && imag (x) == 0;
-}
-
-template <class _FLT> inline bool
-operator == (_FLT x, const complex<_FLT>& y) __attribute__ ((const));
-
-template <class _FLT> inline bool
-operator == (_FLT x, const complex<_FLT>& y)
-{
- return x == real (y) && imag (y) == 0;
-}
-
-template <class _FLT> inline bool
-operator != (const complex<_FLT>& x, const complex<_FLT>& y) __attribute__ ((const));
-
-template <class _FLT> inline bool
-operator != (const complex<_FLT>& x, const complex<_FLT>& y)
-{
- return real (x) != real (y) || imag (x) != imag (y);
-}
-
-template <class _FLT> inline bool
-operator != (const complex<_FLT>& x, _FLT y) __attribute__ ((const));
-
-template <class _FLT> inline bool
-operator != (const complex<_FLT>& x, _FLT y)
-{
- return real (x) != y || imag (x) != 0;
-}
-
-template <class _FLT> inline bool
-operator != (_FLT x, const complex<_FLT>& y) __attribute__ ((const));
-
-template <class _FLT> inline bool
-operator != (_FLT x, const complex<_FLT>& y)
-{
- return x != real (y) || imag (y) != 0;
-}
-
-// Some targets don't provide a prototype for hypot when -ansi.
-extern "C" double hypot (double, double) __attribute__ ((const));
-
-template <class _FLT> inline _FLT
-abs (const complex<_FLT>& x) __attribute__ ((const));
-
-template <class _FLT> inline _FLT
-abs (const complex<_FLT>& x)
-{
- return hypot (real (x), imag (x));
-}
-
-template <class _FLT> inline _FLT
-arg (const complex<_FLT>& x) __attribute__ ((const));
-
-template <class _FLT> inline _FLT
-arg (const complex<_FLT>& x)
-{
- return atan2 (imag (x), real (x));
-}
-
-template <class _FLT> inline complex<_FLT>
-polar (_FLT r, _FLT t) __attribute__ ((const));
-
-template <class _FLT> inline complex<_FLT>
-polar (_FLT r, _FLT t)
-{
- return complex<_FLT> (r * cos (t), r * sin (t));
-}
-
-template <class _FLT> inline complex<_FLT>
-conj (const complex<_FLT>& x) __attribute__ ((const));
-
-template <class _FLT> inline complex<_FLT>
-conj (const complex<_FLT>& x)
-{
- return complex<_FLT> (real (x), -imag (x));
-}
-
-template <class _FLT> inline _FLT
-norm (const complex<_FLT>& x) __attribute__ ((const));
-
-template <class _FLT> inline _FLT
-norm (const complex<_FLT>& x)
-{
- return real (x) * real (x) + imag (x) * imag (x);
-}
-
-// Declarations of templates in complext.ccI
-
-template <class _FLT> complex<_FLT>
- operator / (const complex<_FLT>&, const complex<_FLT>&) __attribute__ ((const));
-template <class _FLT> complex<_FLT>
- operator / (_FLT, const complex<_FLT>&) __attribute__ ((const));
-template <class _FLT> complex<_FLT>
- cos (const complex<_FLT>&) __attribute__ ((const));
-template <class _FLT> complex<_FLT>
- cosh (const complex<_FLT>&) __attribute__ ((const));
-template <class _FLT> complex<_FLT>
- exp (const complex<_FLT>&) __attribute__ ((const));
-template <class _FLT> complex<_FLT>
- log (const complex<_FLT>&) __attribute__ ((const));
-template <class _FLT> complex<_FLT>
- pow (const complex<_FLT>&, const complex<_FLT>&) __attribute__ ((const));
-template <class _FLT> complex<_FLT>
- pow (const complex<_FLT>&, _FLT) __attribute__ ((const));
-template <class _FLT> complex<_FLT>
- pow (const complex<_FLT>&, int) __attribute__ ((const));
-template <class _FLT> complex<_FLT>
- pow (_FLT, const complex<_FLT>&) __attribute__ ((const));
-template <class _FLT> complex<_FLT>
- sin (const complex<_FLT>&) __attribute__ ((const));
-template <class _FLT> complex<_FLT>
- sinh (const complex<_FLT>&) __attribute__ ((const));
-template <class _FLT> complex<_FLT>
- sqrt (const complex<_FLT>&) __attribute__ ((const));
-
-template <class _FLT> istream& operator >> (istream&, complex<_FLT>&);
-template <class _FLT> ostream& operator << (ostream&, const complex<_FLT>&);
-} // extern "C++"
-
-// Specializations and such
-
-#include <std/fcomplex.h>
-#include <std/dcomplex.h>
-#include <std/ldcomplex.h>
-
-#endif
diff --git a/contrib/libstdc++/std/dcomplex.h b/contrib/libstdc++/std/dcomplex.h
deleted file mode 100644
index 5812d9fa7dfd..000000000000
--- a/contrib/libstdc++/std/dcomplex.h
+++ /dev/null
@@ -1,91 +0,0 @@
-// The -*- C++ -*- double_complex class.
-// Copyright (C) 1994 Free Software Foundation
-
-// This file is part of the GNU ANSI C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-// As a special exception, if you link this library with files
-// compiled with a GNU compiler to produce an executable, this does not cause
-// the resulting executable to be covered by the GNU General Public License.
-// This exception does not however invalidate any other reasons why
-// the executable file might be covered by the GNU General Public License.
-
-// Written by Jason Merrill based upon the specification in the 27 May 1994
-// C++ working paper, ANSI document X3J16/94-0098.
-
-#ifndef __DCOMPLEX__
-#define __DCOMPLEX__
-
-#ifdef __GNUG__
-#pragma interface "dcomplex"
-#endif
-
-extern "C++" {
-class complex<double>
-{
-public:
- complex (double r = 0, double i = 0): re (r), im (i) { }
- complex (const complex<float>& r): re (r.real ()), im (r.imag ()) { }
- explicit complex (const complex<long double>& r);
-
- complex& operator+= (const complex& r) { return __doapl (this, r); }
- complex& operator-= (const complex& r) { return __doami (this, r); }
- complex& operator*= (const complex& r) { return __doaml (this, r); }
- complex& operator/= (const complex& r) { return __doadv (this, r); }
-
- double real () const { return re; }
- double imag () const { return im; }
-private:
- double re, im;
-
- friend complex& __doapl<> (complex *, const complex&);
- friend complex& __doami<> (complex *, const complex&);
- friend complex& __doaml<> (complex *, const complex&);
- friend complex& __doadv<> (complex *, const complex&);
-
-#ifndef __STRICT_ANSI__
- friend inline complex operator + (const complex& x, double y)
- { return operator+<> (x, y); }
- friend inline complex operator + (double x, const complex& y)
- { return operator+<> (x, y); }
- friend inline complex operator - (const complex& x, double y)
- { return operator-<> (x, y); }
- friend inline complex operator - (double x, const complex& y)
- { return operator-<> (x, y); }
- friend inline complex operator * (const complex& x, double y)
- { return operator*<> (x, y); }
- friend inline complex operator * (double x, const complex& y)
- { return operator*<> (x, y); }
- friend inline complex operator / (const complex& x, double y)
- { return operator/<> (x, y); }
- friend inline complex operator / (double x, const complex& y)
- { return operator/<> (x, y); }
- friend inline bool operator == (const complex& x, double y)
- { return operator==<> (x, y); }
- friend inline bool operator == (double x, const complex& y)
- { return operator==<> (x, y); }
- friend inline bool operator != (const complex& x, double y)
- { return operator!=<> (x, y); }
- friend inline bool operator != (double x, const complex& y)
- { return operator!=<> (x, y); }
-#endif /* __STRICT_ANSI__ */
-};
-
-inline complex<float>::complex (const complex<double>& r)
-: re (r.real ()), im (r.imag ())
-{ }
-} // extern "C++"
-
-#endif
diff --git a/contrib/libstdc++/std/fcomplex.h b/contrib/libstdc++/std/fcomplex.h
deleted file mode 100644
index cd9af1a2e0ce..000000000000
--- a/contrib/libstdc++/std/fcomplex.h
+++ /dev/null
@@ -1,87 +0,0 @@
-// The -*- C++ -*- float_complex class.
-// Copyright (C) 1994 Free Software Foundation
-
-// This file is part of the GNU ANSI C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-// As a special exception, if you link this library with files
-// compiled with a GNU compiler to produce an executable, this does not cause
-// the resulting executable to be covered by the GNU General Public License.
-// This exception does not however invalidate any other reasons why
-// the executable file might be covered by the GNU General Public License.
-
-// Written by Jason Merrill based upon the specification in the 27 May 1994
-// C++ working paper, ANSI document X3J16/94-0098.
-
-#ifndef __FCOMPLEX__
-#define __FCOMPLEX__
-
-#ifdef __GNUG__
-#pragma interface "fcomplex"
-#endif
-
-extern "C++" {
-class complex<float>
-{
-public:
- complex (float r = 0, float i = 0): re (r), im (i) { }
- explicit complex (const complex<double>& r);
- explicit complex (const complex<long double>& r);
-
- complex& operator+= (const complex& r) { return __doapl (this, r); }
- complex& operator-= (const complex& r) { return __doami (this, r); }
- complex& operator*= (const complex& r) { return __doaml (this, r); }
- complex& operator/= (const complex& r) { return __doadv (this, r); }
-
- float real () const { return re; }
- float imag () const { return im; }
-private:
- float re, im;
-
- friend complex& __doapl<> (complex *, const complex&);
- friend complex& __doami<> (complex *, const complex&);
- friend complex& __doaml<> (complex *, const complex&);
- friend complex& __doadv<> (complex *, const complex&);
-
-#ifndef __STRICT_ANSI__
- friend inline complex operator + (const complex& x, float y)
- { return operator+<> (x, y); }
- friend inline complex operator + (float x, const complex& y)
- { return operator+<> (x, y); }
- friend inline complex operator - (const complex& x, float y)
- { return operator-<> (x, y); }
- friend inline complex operator - (float x, const complex& y)
- { return operator-<> (x, y); }
- friend inline complex operator * (const complex& x, float y)
- { return operator*<> (x, y); }
- friend inline complex operator * (float x, const complex& y)
- { return operator*<> (x, y); }
- friend inline complex operator / (const complex& x, float y)
- { return operator/<> (x, y); }
- friend inline complex operator / (float x, const complex& y)
- { return operator/<> (x, y); }
- friend inline bool operator == (const complex& x, float y)
- { return operator==<> (x, y); }
- friend inline bool operator == (float x, const complex& y)
- { return operator==<> (x, y); }
- friend inline bool operator != (const complex& x, float y)
- { return operator!=<> (x, y); }
- friend inline bool operator != (float x, const complex& y)
- { return operator!=<> (x, y); }
-#endif /* __STRICT_ANSI__ */
-};
-} // extern "C++"
-
-#endif
diff --git a/contrib/libstdc++/std/gslice.h b/contrib/libstdc++/std/gslice.h
deleted file mode 100644
index 4f6e854a14c0..000000000000
--- a/contrib/libstdc++/std/gslice.h
+++ /dev/null
@@ -1,111 +0,0 @@
-// The template and inlines for the -*- C++ -*- gslice class.
-
-// Copyright (C) 1997-1999 Cygnus Solutions
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction. Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License. This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-// Written by Gabriel Dos Reis <Gabriel.Dos-Reis@DPTMaths.ENS-Cachan.Fr>
-
-#ifndef __GSLICE__
-#define __GSLICE__
-
-extern "C++" {
-
-struct _Indexer {
- size_t _M_count;
- size_t _M_start;
- valarray<size_t> _M_size;
- valarray<size_t> _M_stride;
- valarray<size_t> _M_index;
- _Indexer(size_t, const valarray<size_t>&, const valarray<size_t>&);
- void _M_increment_use() { ++_M_count; }
- size_t _M_decrement_use() { return --_M_count; }
-};
-
-
-class gslice
-{
-public:
- gslice ();
- gslice (size_t, const valarray<size_t>&, const valarray<size_t>&);
- gslice(const gslice&);
- ~gslice();
-
- gslice& operator= (const gslice&);
- size_t start () const;
- valarray<size_t> size () const;
- valarray<size_t> stride () const;
-
-private:
- _Indexer* _M_index;
-
- template<typename _Tp> friend class valarray;
-};
-
-inline size_t
-gslice::start () const
-{ return _M_index ? _M_index->_M_start : 0; }
-
-inline valarray<size_t>
-gslice::size () const
-{ return _M_index ? _M_index->_M_size : valarray<size_t>(); }
-
-inline valarray<size_t>
-gslice::stride () const
-{ return _M_index ? _M_index->_M_stride : valarray<size_t>(); }
-
-inline gslice::gslice () : _M_index(0) {}
-
-inline
-gslice::gslice(size_t __o, const valarray<size_t>& __l,
- const valarray<size_t>& __s)
- : _M_index(new _Indexer(__o, __l, __s)) {}
-
-inline
-gslice::gslice(const gslice& __g) : _M_index(__g._M_index)
-{ if (_M_index) _M_index->_M_increment_use(); }
-
-inline
-gslice::~gslice()
-{ if (_M_index && _M_index->_M_decrement_use() == 0) delete _M_index; }
-
-inline gslice&
-gslice::operator= (const gslice& __g)
-{
- if (__g._M_index) __g._M_index->_M_increment_use();
- if (_M_index && _M_index->_M_decrement_use() == 0) delete _M_index;
- _M_index = __g._M_index;
- return *this;
-}
-
-
-} // extern "C++"
-
-#endif // __GSLICE__
-
-// Local Variables:
-// mode:c++
-// End:
diff --git a/contrib/libstdc++/std/gslice_array.h b/contrib/libstdc++/std/gslice_array.h
deleted file mode 100644
index 8a67cac90502..000000000000
--- a/contrib/libstdc++/std/gslice_array.h
+++ /dev/null
@@ -1,170 +0,0 @@
-// The template and inlines for the -*- C++ -*- gslice_array class.
-
-// Copyright (C) 1997-1999 Cygnus Solutions
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction. Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License. This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-// Written by Gabriel Dos Reis <Gabriel.Dos-Reis@DPTMaths.ENS-Cachan.Fr>
-
-#ifndef __GSLICE_ARRAY__
-#define __GSLICE_ARRAY__
-
-extern "C++" {
-
-template<typename _Tp> class gslice_array
-{
-public:
- typedef _Tp value_type;
-
- void operator= (const valarray<_Tp>&) const;
- void operator*= (const valarray<_Tp>&) const;
- void operator/= (const valarray<_Tp>&) const;
- void operator%= (const valarray<_Tp>&) const;
- void operator+= (const valarray<_Tp>&) const;
- void operator-= (const valarray<_Tp>&) const;
- void operator^= (const valarray<_Tp>&) const;
- void operator&= (const valarray<_Tp>&) const;
- void operator|= (const valarray<_Tp>&) const;
- void operator<<=(const valarray<_Tp>&) const;
- void operator>>=(const valarray<_Tp>&) const;
- void operator=(const _Tp&);
-
- template<class _Dom>
- void operator= (const _Expr<_Dom,_Tp>&) const;
- template<class _Dom>
- void operator*= (const _Expr<_Dom,_Tp>&) const;
- template<class _Dom>
- void operator/= (const _Expr<_Dom,_Tp>&) const;
- template<class _Dom>
- void operator%= (const _Expr<_Dom,_Tp>&) const;
- template<class _Dom>
- void operator+= (const _Expr<_Dom,_Tp>&) const;
- template<class _Dom>
- void operator-= (const _Expr<_Dom,_Tp>&) const;
- template<class _Dom>
- void operator^= (const _Expr<_Dom,_Tp>&) const;
- template<class _Dom>
- void operator&= (const _Expr<_Dom,_Tp>&) const;
- template<class _Dom>
- void operator|= (const _Expr<_Dom,_Tp>&) const;
- template<class _Dom>
- void operator<<= (const _Expr<_Dom,_Tp>&) const;
- template<class _Dom>
- void operator>>= (const _Expr<_Dom,_Tp>&) const;
-
-private:
- _Array<_Tp> _M_array;
- const valarray<size_t>& _M_index;
-
- friend class valarray<_Tp>;
-
- gslice_array (_Array<_Tp>, const valarray<size_t>&);
-
- // this constructor needs to be implemented.
- gslice_array (const gslice_array&);
-
- // not implemented
- gslice_array();
- gslice_array& operator= (const gslice_array&);
-};
-
-template<typename _Tp>
-inline
-gslice_array<_Tp>::gslice_array (_Array<_Tp> __a,
- const valarray<size_t>& __i)
- : _M_array (__a), _M_index (__i) {}
-
-
-template<typename _Tp>
-inline
-gslice_array<_Tp>::gslice_array (const gslice_array<_Tp>& __a)
- : _M_array (__a._M_array), _M_index (__a._M_index) {}
-
-
-template<typename _Tp>
-inline void
-gslice_array<_Tp>::operator= (const _Tp& __t)
-{
- __valarray_fill (_M_array, _Array<size_t>(_M_index),
- _M_index.size(), __t);
-}
-
-template<typename _Tp>
-inline void
-gslice_array<_Tp>::operator= (const valarray<_Tp>& __v) const
-{
- __valarray_copy (_Array<_Tp> (__v), __v.size (),
- _M_array, _Array<size_t>(_M_index));
-}
-
-template<typename _Tp>
-template<class E>
-inline void
-gslice_array<_Tp>::operator= (const _Expr<E, _Tp>& __e) const
-{
- __valarray_copy (__e, _M_index.size(), _M_array,
- _Array<size_t>(_M_index));
-}
-
-#undef _DEFINE_VALARRAY_OPERATOR
-#define _DEFINE_VALARRAY_OPERATOR(op, name) \
-template<typename _Tp> \
-inline void \
-gslice_array<_Tp>::operator##op##= (const valarray<_Tp>& __v) const \
-{ \
- _Array_augmented_##name (_M_array, _Array<size_t>(_M_index), \
- _Array<_Tp> (__v), __v.size ()); \
-} \
- \
-template<typename _Tp> template<class E> \
-inline void \
-gslice_array<_Tp>::operator##op##= (const _Expr<E, _Tp>& __e) const \
-{ \
- _Array_augmented_##name (_M_array, _Array<size_t>(_M_index), __e, \
- _M_index.size()); \
-}
-
-_DEFINE_VALARRAY_OPERATOR(*, multiplies)
-_DEFINE_VALARRAY_OPERATOR(/, divides)
-_DEFINE_VALARRAY_OPERATOR(%, modulus)
-_DEFINE_VALARRAY_OPERATOR(+, plus)
-_DEFINE_VALARRAY_OPERATOR(-, minus)
-_DEFINE_VALARRAY_OPERATOR(^, xor)
-_DEFINE_VALARRAY_OPERATOR(&, and)
-_DEFINE_VALARRAY_OPERATOR(|, or)
-_DEFINE_VALARRAY_OPERATOR(<<, shift_left)
-_DEFINE_VALARRAY_OPERATOR(>>, shift_right)
-
-#undef _DEFINE_VALARRAY_OPERATOR
-
-} // extern "C++"
-
-
-#endif // __GSLICE_ARRAY__
-
-// Local Variables:
-// mode:c++
-// End:
diff --git a/contrib/libstdc++/std/indirect_array.h b/contrib/libstdc++/std/indirect_array.h
deleted file mode 100644
index bb5b79fb834d..000000000000
--- a/contrib/libstdc++/std/indirect_array.h
+++ /dev/null
@@ -1,157 +0,0 @@
-// The template and inlines for the -*- C++ -*- indirect_array class.
-
-// Copyright (C) 1997-1999 Cygnus Solutions
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction. Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License. This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-// Written by Gabriel Dos Reis <Gabriel.Dos-Reis@DPTMaths.ENS-Cachan.Fr>
-
-#ifndef __INDIRECT_ARRAY__
-#define __INDIRECT_ARRAY__
-
-extern "C++" {
-
-template <class _Tp> class indirect_array
-{
-public:
- typedef _Tp value_type;
-
- void operator= (const valarray<_Tp>&) const;
- void operator*= (const valarray<_Tp>&) const;
- void operator/= (const valarray<_Tp>&) const;
- void operator%= (const valarray<_Tp>&) const;
- void operator+= (const valarray<_Tp>&) const;
- void operator-= (const valarray<_Tp>&) const;
- void operator^= (const valarray<_Tp>&) const;
- void operator&= (const valarray<_Tp>&) const;
- void operator|= (const valarray<_Tp>&) const;
- void operator<<= (const valarray<_Tp>&) const;
- void operator>>= (const valarray<_Tp>&) const;
- void operator= (const _Tp&);
-
- template<class _Dom>
- void operator= (const _Expr<_Dom, _Tp>&) const;
- template<class _Dom>
- void operator*= (const _Expr<_Dom, _Tp>&) const;
- template<class _Dom>
- void operator/= (const _Expr<_Dom, _Tp>&) const;
- template<class _Dom>
- void operator%= (const _Expr<_Dom, _Tp>&) const;
- template<class _Dom>
- void operator+= (const _Expr<_Dom, _Tp>&) const;
- template<class _Dom>
- void operator-= (const _Expr<_Dom, _Tp>&) const;
- template<class _Dom>
- void operator^= (const _Expr<_Dom, _Tp>&) const;
- template<class _Dom>
- void operator&= (const _Expr<_Dom, _Tp>&) const;
- template<class _Dom>
- void operator|= (const _Expr<_Dom, _Tp>&) const;
- template<class _Dom>
- void operator<<= (const _Expr<_Dom, _Tp>&) const;
- template<class _Dom>
- void operator>>= (const _Expr<_Dom, _Tp>&) const;
-
-private:
- indirect_array (const indirect_array&);
- indirect_array (_Array<_Tp>, size_t, _Array<size_t>);
-
- friend class valarray<_Tp>;
- friend class gslice_array<_Tp>;
-
- const size_t _M_sz;
- const _Array<size_t> _M_index;
- const _Array<_Tp> _M_array;
-
- // not implemented
- indirect_array ();
- indirect_array& operator= (const indirect_array&);
-};
-
-template<typename _Tp>
-inline indirect_array<_Tp>::indirect_array(const indirect_array<_Tp>& __a)
- : _M_sz (__a._M_sz), _M_index (__a._M_index),
- _M_array (__a._M_array) {}
-
-template<typename _Tp>
-inline
-indirect_array<_Tp>::indirect_array (_Array<_Tp> __a, size_t __s,
- _Array<size_t> __i)
- : _M_sz (__s), _M_index (__i), _M_array (__a) {}
-
-
-template<typename _Tp>
-inline void
-indirect_array<_Tp>::operator= (const _Tp& __t)
-{ __valarray_fill(_M_array, _M_index, _M_sz, __t); }
-
-template<typename _Tp>
-inline void
-indirect_array<_Tp>::operator= (const valarray<_Tp>& __v) const
-{ __valarray_copy (_Array<_Tp> (__v), _M_sz, _M_array, _M_index); }
-
-template<typename _Tp>
-template<class _Dom>
-inline void
-indirect_array<_Tp>::operator= (const _Expr<_Dom,_Tp>& __e) const
-{ __valarray_copy (__e, _M_sz, _M_array, _M_index); }
-
-#undef _DEFINE_VALARRAY_OPERATOR
-#define _DEFINE_VALARRAY_OPERATOR(op, name) \
-template<typename _Tp> \
-inline void \
-indirect_array<_Tp>::operator##op##= (const valarray<_Tp>& __v) const \
-{ \
- _Array_augmented_##name (_M_array, _M_index, _Array<_Tp> (__v), _M_sz); \
-} \
- \
-template<typename _Tp> template<class _Dom> \
-inline void \
-indirect_array<_Tp>::operator##op##= (const _Expr<_Dom,_Tp>& __e) const \
-{ \
- _Array_augmented_##name (_M_array, _M_index, __e, _M_sz); \
-}
-
-_DEFINE_VALARRAY_OPERATOR(*, multiplies)
-_DEFINE_VALARRAY_OPERATOR(/, divides)
-_DEFINE_VALARRAY_OPERATOR(%, modulus)
-_DEFINE_VALARRAY_OPERATOR(+, plus)
-_DEFINE_VALARRAY_OPERATOR(-, minus)
-_DEFINE_VALARRAY_OPERATOR(^, xor)
-_DEFINE_VALARRAY_OPERATOR(&, and)
-_DEFINE_VALARRAY_OPERATOR(|, or)
-_DEFINE_VALARRAY_OPERATOR(<<, shift_left)
-_DEFINE_VALARRAY_OPERATOR(>>, shift_right)
-
-#undef _DEFINE_VALARRAY_OPERATOR
-
-} // extern "C++"
-
-#endif // __INDIRECT_ARRAY__
-
-// Local Variables:
-// mode:c++
-// End:
diff --git a/contrib/libstdc++/std/ldcomplex.h b/contrib/libstdc++/std/ldcomplex.h
deleted file mode 100644
index bc91fa422bf7..000000000000
--- a/contrib/libstdc++/std/ldcomplex.h
+++ /dev/null
@@ -1,95 +0,0 @@
-// The -*- C++ -*- long_double_complex class.
-// Copyright (C) 1994 Free Software Foundation
-
-// This file is part of the GNU ANSI C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-// As a special exception, if you link this library with files
-// compiled with a GNU compiler to produce an executable, this does not cause
-// the resulting executable to be covered by the GNU General Public License.
-// This exception does not however invalidate any other reasons why
-// the executable file might be covered by the GNU General Public License.
-
-// Written by Jason Merrill based upon the specification in the 27 May 1994
-// C++ working paper, ANSI document X3J16/94-0098.
-
-#ifndef __LDCOMPLEX__
-#define __LDCOMPLEX__
-
-#ifdef __GNUG__
-#pragma interface "ldcomplex"
-#endif
-
-extern "C++" {
-class complex<long double>
-{
-public:
- complex (long double r = 0, long double i = 0): re (r), im (i) { }
- complex (const complex<float>& r): re (r.real ()), im (r.imag ()) { }
- complex (const complex<double>& r): re (r.real ()), im (r.imag ()) { }
-
- complex& operator+= (const complex& r) { return __doapl (this, r); }
- complex& operator-= (const complex& r) { return __doami (this, r); }
- complex& operator*= (const complex& r) { return __doaml (this, r); }
- complex& operator/= (const complex& r) { return __doadv (this, r); }
-
- long double real () const { return re; }
- long double imag () const { return im; }
-private:
- long double re, im;
-
- friend complex& __doapl<> (complex *, const complex&);
- friend complex& __doami<> (complex *, const complex&);
- friend complex& __doaml<> (complex *, const complex&);
- friend complex& __doadv<> (complex *, const complex&);
-
-#ifndef __STRICT_ANSI__
- friend inline complex operator + (const complex& x, long double y)
- { return operator+<> (x, y); }
- friend inline complex operator + (long double x, const complex& y)
- { return operator+<> (x, y); }
- friend inline complex operator - (const complex& x, long double y)
- { return operator-<> (x, y); }
- friend inline complex operator - (long double x, const complex& y)
- { return operator-<> (x, y); }
- friend inline complex operator * (const complex& x, long double y)
- { return operator*<> (x, y); }
- friend inline complex operator * (long double x, const complex& y)
- { return operator*<> (x, y); }
- friend inline complex operator / (const complex& x, long double y)
- { return operator/<> (x, y); }
- friend inline complex operator / (long double x, const complex& y)
- { return operator/<> (x, y); }
- friend inline bool operator == (const complex& x, long double y)
- { return operator==<> (x, y); }
- friend inline bool operator == (long double x, const complex& y)
- { return operator==<> (x, y); }
- friend inline bool operator != (const complex& x, long double y)
- { return operator!=<> (x, y); }
- friend inline bool operator != (long double x, const complex& y)
- { return operator!=<> (x, y); }
-#endif /* __STRICT_ANSI__ */
-};
-
-inline complex<float>::complex (const complex<long double>& r)
-: re (r.real ()), im (r.imag ())
-{ }
-
-inline complex<double>::complex (const complex<long double>& r)
-: re (r.real ()), im (r.imag ())
-{ }
-} // extern "C++"
-
-#endif
diff --git a/contrib/libstdc++/std/mask_array.h b/contrib/libstdc++/std/mask_array.h
deleted file mode 100644
index d431be4e97fd..000000000000
--- a/contrib/libstdc++/std/mask_array.h
+++ /dev/null
@@ -1,154 +0,0 @@
-// The template and inlines for the -*- C++ -*- mask_array class.
-
-// Copyright (C) 1997-1999 Cygnus Solutions
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction. Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License. This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-// Written by Gabriel Dos Reis <Gabriel.Dos-Reis@DPTMaths.ENS-Cachan.Fr>
-
-#ifndef __MASK_ARRAY__
-#define __MASK_ARRAY__
-
-extern "C++" {
-
-template <class _T> class mask_array
-{
-public:
- typedef _T value_type;
-
- void operator= (const valarray<_T>&) const;
- void operator*= (const valarray<_T>&) const;
- void operator/= (const valarray<_T>&) const;
- void operator%= (const valarray<_T>&) const;
- void operator+= (const valarray<_T>&) const;
- void operator-= (const valarray<_T>&) const;
- void operator^= (const valarray<_T>&) const;
- void operator&= (const valarray<_T>&) const;
- void operator|= (const valarray<_T>&) const;
- void operator<<=(const valarray<_T>&) const;
- void operator>>=(const valarray<_T>&) const;
- void operator= (const _T&);
-
- template<class _Dom>
- void operator= (const _Expr<_Dom,_T>&) const;
- template<class _Dom>
- void operator*= (const _Expr<_Dom,_T>&) const;
- template<class _Dom>
- void operator/= (const _Expr<_Dom,_T>&) const;
- template<class _Dom>
- void operator%= (const _Expr<_Dom,_T>&) const;
- template<class _Dom>
- void operator+= (const _Expr<_Dom,_T>&) const;
- template<class _Dom>
- void operator-= (const _Expr<_Dom,_T>&) const;
- template<class _Dom>
- void operator^= (const _Expr<_Dom,_T>&) const;
- template<class _Dom>
- void operator&= (const _Expr<_Dom,_T>&) const;
- template<class _Dom>
- void operator|= (const _Expr<_Dom,_T>&) const;
- template<class _Dom>
- void operator<<=(const _Expr<_Dom,_T>&) const;
- template<class _Dom>
- void operator>>=(const _Expr<_Dom,_T>&) const;
-
-private:
- mask_array (_Array<_T>, size_t, _Array<bool>);
- friend class valarray<_T>;
-
- const size_t _M_sz;
- const _Array<bool> _M_mask;
- const _Array<_T> _M_array;
-
- mask_array (const mask_array&);
-
- // not implemented
- mask_array ();
- mask_array& operator= (const mask_array&);
-};
-
-template<typename _Tp>
-inline mask_array<_Tp>::mask_array (const mask_array<_Tp>& a)
- : _M_sz (a._M_sz), _M_mask (a._M_mask), _M_array (a._M_array) {}
-
-template<typename _T>
-inline
-mask_array<_T>::mask_array (_Array<_T> __a, size_t __s, _Array<bool> __m)
- : _M_sz (__s), _M_mask (__m), _M_array (__a) {}
-
-template<typename _T>
-inline void
-mask_array<_T>::operator= (const _T& __t)
-{ __valarray_fill (_M_array, _M_sz, _M_mask, __t); }
-
-template<typename _T>
-inline void
-mask_array<_T>::operator= (const valarray<_T>& __v) const
-{ __valarray_copy (_Array<_T> (__v), __v.size (), _M_array, _M_mask); }
-
-template<typename _T>
-template<class E>
-inline void
-mask_array<_T>::operator= (const _Expr<E, _T>& __e) const
-{ __valarray_copy (__e, __e.size (), _M_array, _M_mask); }
-
-#undef _DEFINE_VALARRAY_OPERATOR
-#define _DEFINE_VALARRAY_OPERATOR(op, name) \
-template<typename _T> \
-inline void \
-mask_array<_T>::operator##op##= (const valarray<_T>& __v) const \
-{ \
- _Array_augmented_##name (_M_array, _M_mask, \
- _Array<_T> (__v), __v.size ()); \
-} \
- \
-template<typename _T> template<class E> \
-inline void \
-mask_array<_T>::operator##op##= (const _Expr<E, _T>& __e) const \
-{ \
- _Array_augmented_##name (_M_array, _M_mask, __e, __e.size ()); \
-}
-
-_DEFINE_VALARRAY_OPERATOR(*, multiplies)
-_DEFINE_VALARRAY_OPERATOR(/, divides)
-_DEFINE_VALARRAY_OPERATOR(%, modulus)
-_DEFINE_VALARRAY_OPERATOR(+, plus)
-_DEFINE_VALARRAY_OPERATOR(-, minus)
-_DEFINE_VALARRAY_OPERATOR(^, xor)
-_DEFINE_VALARRAY_OPERATOR(&, and)
-_DEFINE_VALARRAY_OPERATOR(|, or)
-_DEFINE_VALARRAY_OPERATOR(<<, shift_left)
-_DEFINE_VALARRAY_OPERATOR(>>, shift_right)
-
-#undef _DEFINE_VALARRAY_OPERATOR
-
-} // extern "C++"
-
-#endif // __MASK_ARRAY__
-
-// Local Variables:
-// mode:c++
-// End:
diff --git a/contrib/libstdc++/std/slice.h b/contrib/libstdc++/std/slice.h
deleted file mode 100644
index cf2fb283de95..000000000000
--- a/contrib/libstdc++/std/slice.h
+++ /dev/null
@@ -1,76 +0,0 @@
-// The template and inlines for the -*- C++ -*- slice class.
-
-// Copyright (C) 1997-1999 Cygnus Solutions
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction. Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License. This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-// Written by Gabriel Dos Reis <Gabriel.Dos-Reis@DPTMaths.ENS-Cachan.Fr>
-
-#ifndef __SLICE__
-#define __SLICE__
-
-extern "C++" {
-
-class slice
-{
-public:
- slice ();
- slice (size_t, size_t, size_t);
-
- size_t start () const;
- size_t size () const;
- size_t stride () const;
-
-private:
- size_t _M_off; // offset
- size_t _M_sz; // size
- size_t _M_st; // stride unit
-};
-
-inline slice::slice () {}
-
-inline slice::slice (size_t __o, size_t __d, size_t __s)
- : _M_off (__o), _M_sz (__d), _M_st (__s) {}
-
-inline size_t
-slice::start () const
- { return _M_off; }
-
-inline size_t
-slice::size () const
- { return _M_sz; }
-
-inline size_t
-slice::stride () const
- { return _M_st; }
-
-} // extern "C++"
-
-#endif // __SLICE__
-
-// Local Variables:
-// mode:c++
-// End:
diff --git a/contrib/libstdc++/std/slice_array.h b/contrib/libstdc++/std/slice_array.h
deleted file mode 100644
index dc1aa34d3556..000000000000
--- a/contrib/libstdc++/std/slice_array.h
+++ /dev/null
@@ -1,156 +0,0 @@
-// The template and inlines for the -*- C++ -*- slice_array class.
-
-// Copyright (C) 1997-1999 Cygnus Solutions
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction. Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License. This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-// Written by Gabriel Dos Reis <Gabriel.Dos-Reis@DPTMaths.ENS-Cachan.Fr>
-
-#ifndef __SLICE_ARRAY__
-#define __SLICE_ARRAY__
-
-extern "C++" {
-
-template<typename _T>
-class slice_array
-{
-public:
- typedef _T value_type;
-
- void operator= (const valarray<_T>&) const;
- void operator*= (const valarray<_T>&) const;
- void operator/= (const valarray<_T>&) const;
- void operator%= (const valarray<_T>&) const;
- void operator+= (const valarray<_T>&) const;
- void operator-= (const valarray<_T>&) const;
- void operator^= (const valarray<_T>&) const;
- void operator&= (const valarray<_T>&) const;
- void operator|= (const valarray<_T>&) const;
- void operator<<= (const valarray<_T>&) const;
- void operator>>= (const valarray<_T>&) const;
- void operator= (const _T &);
-
- template<class _Dom>
- void operator= (const _Expr<_Dom,_T>&) const;
- template<class _Dom>
- void operator*= (const _Expr<_Dom,_T>&) const;
- template<class _Dom>
- void operator/= (const _Expr<_Dom,_T>&) const;
- template<class _Dom>
- void operator%= (const _Expr<_Dom,_T>&) const;
- template<class _Dom>
- void operator+= (const _Expr<_Dom,_T>&) const;
- template<class _Dom>
- void operator-= (const _Expr<_Dom,_T>&) const;
- template<class _Dom>
- void operator^= (const _Expr<_Dom,_T>&) const;
- template<class _Dom>
- void operator&= (const _Expr<_Dom,_T>&) const;
- template<class _Dom>
- void operator|= (const _Expr<_Dom,_T>&) const;
- template<class _Dom>
- void operator<<= (const _Expr<_Dom,_T>&) const;
- template<class _Dom>
- void operator>>= (const _Expr<_Dom,_T>&) const;
-
-private:
- friend class valarray<_T>;
- slice_array(_Array<_T>, const slice&);
-
- const size_t _M_sz;
- const size_t _M_stride;
- const _Array<_T> _M_array;
-
- // this constructor is implemented since we need to return a value.
- slice_array (const slice_array&);
-
- // not implemented
- slice_array ();
- slice_array& operator= (const slice_array&);
-};
-
-template<typename _T>
-inline slice_array<_T>::slice_array (_Array<_T> __a, const slice& __s)
- : _M_sz (__s.size ()), _M_stride (__s.stride ()),
- _M_array (__a.begin () + __s.start ()) {}
-
-template<typename _Tp>
-inline slice_array<_Tp>::slice_array(const slice_array<_Tp>& a)
- : _M_sz(a._M_sz), _M_stride(a._M_stride), _M_array(a._M_array) {}
-
-template<typename _T>
-inline void
-slice_array<_T>::operator= (const _T& __t)
-{ __valarray_fill (_M_array, _M_sz, _M_stride, __t); }
-
-template<typename _T>
-inline void
-slice_array<_T>::operator= (const valarray<_T>& __v) const
-{ __valarray_copy (_Array<_T> (__v), _M_array, _M_sz, _M_stride); }
-
-template<typename _T>
-template<class _Dom>
-inline void
-slice_array<_T>::operator= (const _Expr<_Dom,_T>& __e) const
-{ __valarray_copy (__e, _M_sz, _M_array, _M_stride); }
-
-#undef _DEFINE_VALARRAY_OPERATOR
-#define _DEFINE_VALARRAY_OPERATOR(op, name) \
-template<typename _T> \
-inline void \
-slice_array<_T>::operator##op##= (const valarray<_T>& __v) const \
-{ \
- _Array_augmented_##name (_M_array, _M_sz, _M_stride, _Array<_T> (__v));\
-} \
- \
-template<typename _T> template<class _Dom> \
-inline void \
-slice_array<_T>::operator##op##= (const _Expr<_Dom,_T>& __e) const \
-{ \
- _Array_augmented_##name (_M_array, _M_stride, __e, _M_sz); \
-}
-
-
-_DEFINE_VALARRAY_OPERATOR(*, multiplies)
-_DEFINE_VALARRAY_OPERATOR(/, divides)
-_DEFINE_VALARRAY_OPERATOR(%, modulus)
-_DEFINE_VALARRAY_OPERATOR(+, plus)
-_DEFINE_VALARRAY_OPERATOR(-, minus)
-_DEFINE_VALARRAY_OPERATOR(^, xor)
-_DEFINE_VALARRAY_OPERATOR(&, and)
-_DEFINE_VALARRAY_OPERATOR(|, or)
-_DEFINE_VALARRAY_OPERATOR(<<, shift_left)
-_DEFINE_VALARRAY_OPERATOR(>>, shift_right)
-
-#undef _DEFINE_VALARRAY_OPERATOR
-
-} // extern "C++"
-
-#endif // __SLICE_ARRAY__
-
-// Local Variables:
-// mode:c++
-// End:
diff --git a/contrib/libstdc++/std/std_valarray.h b/contrib/libstdc++/std/std_valarray.h
deleted file mode 100644
index b3006555547d..000000000000
--- a/contrib/libstdc++/std/std_valarray.h
+++ /dev/null
@@ -1,728 +0,0 @@
-// The template and inlines for the -*- C++ -*- valarray class.
-
-// Copyright (C) 1997-1999 Cygnus Solutions
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction. Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License. This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-// Written by Gabriel Dos Reis <Gabriel.Dos-Reis@DPTMaths.ENS-Cachan.Fr>
-
-#ifndef __STD_VALARRAY__
-#define __STD_VALARRAY__
-#define _G_NO_VALARRAY_TEMPLATE_EXPORT 1
-
-#include <cstddef>
-#include <cmath>
-#include <cstdlib>
-#include <numeric>
-#include <functional>
-#include <algorithm>
-
-#ifndef alloca
-#ifdef __GNUC__
-#define alloca __builtin_alloca
-#else /* not GNU C. */
-#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi)
-#include <alloca.h>
-#else /* not sparc */
-#if defined (MSDOS) && !defined (__TURBOC__)
-#include <malloc.h>
-#else /* not MSDOS, or __TURBOC__ */
-#if defined(_AIX)
-#include <malloc.h>
- #pragma alloca
-#else /* not MSDOS, __TURBOC__, or _AIX */
-#ifdef __hpux
-#endif /* __hpux */
-#endif /* not _AIX */
-#endif /* not MSDOS, or __TURBOC__ */
-#endif /* not sparc. */
-#endif /* not GNU C. */
-#endif /* alloca not defined. */
-
-extern "C" {
- void* alloca(size_t);
-}
-
-
-extern "C++" {
-
-template<class _Clos, typename _Tp> class _Expr;
-
-template<typename _Tp1, typename _Tp2> class _ValArray;
-
-template<template<class> class _Oper,
- template<class, class> class _Meta, class _Dom> struct _UnClos;
-
-template<template<class> class _Oper,
- template<class, class> class _Meta1,
- template<class, class> class _Meta2,
- class _Dom1, class _Dom2> class _BinClos;
-
-template<template<class, class> class _Meta, class _Dom> class _SClos;
-
-template<template<class, class> class _Meta, class _Dom> class _GClos;
-
-template<template<class, class> class _Meta, class _Dom> class _IClos;
-
-template<template<class, class> class _Meta, class _Dom> class _ValFunClos;
-
-template<template<class, class> class _Meta, class _Dom> class _RefFunClos;
-
-template<class _Tp> struct _Unary_plus;
-template<class _Tp> struct _Bitwise_and;
-template<class _Tp> struct _Bitwise_or;
-template<class _Tp> struct _Bitwise_xor;
-template<class _Tp> struct _Bitwise_not;
-template<class _Tp> struct _Shift_left;
-template<class _Tp> struct _Shift_right;
-
-template<class _Tp> class valarray; // An array of type _Tp
-class slice; // BLAS-like slice out of an array
-template<class _Tp> class slice_array;
-class gslice; // generalized slice out of an array
-template<class _Tp> class gslice_array;
-template<class _Tp> class mask_array; // masked array
-template<class _Tp> class indirect_array; // indirected array
-
-} // extern "C++"
-
-#include <std/valarray_array.h>
-#include <std/valarray_meta.h>
-
-extern "C++" {
-
-template<class _Tp> class valarray
-{
-public:
- typedef _Tp value_type;
-
- // _lib.valarray.cons_ construct/destroy:
- valarray();
- explicit valarray(size_t);
- valarray(const _Tp&, size_t);
- valarray(const _Tp* __restrict__, size_t);
- valarray(const valarray&);
- valarray(const slice_array<_Tp>&);
- valarray(const gslice_array<_Tp>&);
- valarray(const mask_array<_Tp>&);
- valarray(const indirect_array<_Tp>&);
- template<class _Dom>
- valarray(const _Expr<_Dom,_Tp>& __e);
- ~valarray();
-
- // _lib.valarray.assign_ assignment:
- valarray<_Tp>& operator=(const valarray<_Tp>&);
- valarray<_Tp>& operator=(const _Tp&);
- valarray<_Tp>& operator=(const slice_array<_Tp>&);
- valarray<_Tp>& operator=(const gslice_array<_Tp>&);
- valarray<_Tp>& operator=(const mask_array<_Tp>&);
- valarray<_Tp>& operator=(const indirect_array<_Tp>&);
-
- template<class _Dom> valarray<_Tp>&
- operator= (const _Expr<_Dom,_Tp>&);
-
- // _lib.valarray.access_ element access:
- _Tp operator[](size_t) const;
- _Tp& operator[](size_t);
- // _lib.valarray.sub_ subset operations:
- _Expr<_SClos<_ValArray,_Tp>, _Tp> operator[](slice) const;
- slice_array<_Tp> operator[](slice);
- _Expr<_GClos<_ValArray,_Tp>, _Tp> operator[](const gslice&) const;
- gslice_array<_Tp> operator[](const gslice&);
- valarray<_Tp> operator[](const valarray<bool>&) const;
- mask_array<_Tp> operator[](const valarray<bool>&);
- _Expr<_IClos<_ValArray, _Tp>, _Tp>
- operator[](const valarray<size_t>&) const;
- indirect_array<_Tp> operator[](const valarray<size_t>&);
-
- // _lib.valarray.unary_ unary operators:
- _Expr<_UnClos<_Unary_plus,_ValArray,_Tp>,_Tp> operator+ () const;
- _Expr<_UnClos<negate,_ValArray,_Tp>,_Tp> operator- () const;
- _Expr<_UnClos<_Bitwise_not,_ValArray,_Tp>,_Tp> operator~ () const;
- _Expr<_UnClos<logical_not,_ValArray,_Tp>,bool> operator! () const;
-
- // _lib.valarray.cassign_ computed assignment:
- valarray<_Tp>& operator*= (const _Tp&);
- valarray<_Tp>& operator/= (const _Tp&);
- valarray<_Tp>& operator%= (const _Tp&);
- valarray<_Tp>& operator+= (const _Tp&);
- valarray<_Tp>& operator-= (const _Tp&);
- valarray<_Tp>& operator^= (const _Tp&);
- valarray<_Tp>& operator&= (const _Tp&);
- valarray<_Tp>& operator|= (const _Tp&);
- valarray<_Tp>& operator<<=(const _Tp&);
- valarray<_Tp>& operator>>=(const _Tp&);
- valarray<_Tp>& operator*= (const valarray<_Tp>&);
- valarray<_Tp>& operator/= (const valarray<_Tp>&);
- valarray<_Tp>& operator%= (const valarray<_Tp>&);
- valarray<_Tp>& operator+= (const valarray<_Tp>&);
- valarray<_Tp>& operator-= (const valarray<_Tp>&);
- valarray<_Tp>& operator^= (const valarray<_Tp>&);
- valarray<_Tp>& operator|= (const valarray<_Tp>&);
- valarray<_Tp>& operator&= (const valarray<_Tp>&);
- valarray<_Tp>& operator<<=(const valarray<_Tp>&);
- valarray<_Tp>& operator>>=(const valarray<_Tp>&);
-
- template<class _Dom>
- valarray<_Tp>& operator*= (const _Expr<_Dom,_Tp>&);
- template<class _Dom>
- valarray<_Tp>& operator/= (const _Expr<_Dom,_Tp>&);
- template<class _Dom>
- valarray<_Tp>& operator%= (const _Expr<_Dom,_Tp>&);
- template<class _Dom>
- valarray<_Tp>& operator+= (const _Expr<_Dom,_Tp>&);
- template<class _Dom>
- valarray<_Tp>& operator-= (const _Expr<_Dom,_Tp>&);
- template<class _Dom>
- valarray<_Tp>& operator^= (const _Expr<_Dom,_Tp>&);
- template<class _Dom>
- valarray<_Tp>& operator|= (const _Expr<_Dom,_Tp>&);
- template<class _Dom>
- valarray<_Tp>& operator&= (const _Expr<_Dom,_Tp>&);
- template<class _Dom>
- valarray<_Tp>& operator<<=(const _Expr<_Dom,_Tp>&);
- template<class _Dom>
- valarray<_Tp>& operator>>=(const _Expr<_Dom,_Tp>&);
-
-
- // _lib.valarray.members_ member functions:
- size_t size() const;
- _Tp sum() const;
- _Tp min() const;
- _Tp max() const;
-
- // FIXME: Extension
- _Tp product () const;
-
- valarray<_Tp> shift (int) const;
- valarray<_Tp> cshift(int) const;
- _Expr<_ValFunClos<_ValArray,_Tp>,_Tp> apply(_Tp func(_Tp)) const;
- _Expr<_RefFunClos<_ValArray,_Tp>,_Tp> apply(_Tp func(const _Tp&)) const;
- void resize(size_t __size, _Tp __c = _Tp());
-
-private:
- size_t _M_size;
- _Tp* __restrict__ _M_data;
-
- friend class _Array<_Tp>;
-};
-
-
-template<typename _Tp> struct _Unary_plus : unary_function<_Tp,_Tp> {
- _Tp operator() (const _Tp& __t) const { return __t; }
-};
-
-template<typename _Tp> struct _Bitwise_and : binary_function<_Tp,_Tp,_Tp> {
- _Tp operator() (_Tp __x, _Tp __y) const { return __x & __y; }
-};
-
-template<typename _Tp> struct _Bitwise_or : binary_function<_Tp,_Tp,_Tp> {
- _Tp operator() (_Tp __x, _Tp __y) const { return __x | __y; }
-};
-
-template<typename _Tp> struct _Bitwise_xor : binary_function<_Tp,_Tp,_Tp> {
- _Tp operator() (_Tp __x, _Tp __y) const { return __x ^ __y; }
-};
-
-template<typename _Tp> struct _Bitwise_not : unary_function<_Tp,_Tp> {
- _Tp operator() (_Tp __t) const { return ~__t; }
-};
-
-template<typename _Tp> struct _Shift_left : unary_function<_Tp,_Tp> {
- _Tp operator() (_Tp __x, _Tp __y) const { return __x << __y; }
-};
-
-template<typename _Tp> struct _Shift_right : unary_function<_Tp,_Tp> {
- _Tp operator() (_Tp __x, _Tp __y) const { return __x >> __y; }
-};
-
-
-template<typename _Tp>
-inline _Tp
-valarray<_Tp>::operator[] (size_t __i) const
-{ return _M_data[__i]; }
-
-template<typename _Tp>
-inline _Tp&
-valarray<_Tp>::operator[] (size_t __i)
-{ return _M_data[__i]; }
-
-} // extern "C++"
-
-#include <std/slice.h>
-#include <std/slice_array.h>
-#include <std/gslice.h>
-#include <std/gslice_array.h>
-#include <std/mask_array.h>
-#include <std/indirect_array.h>
-
-extern "C++" {
-
-template<typename _Tp>
-inline valarray<_Tp>::valarray () : _M_size (0), _M_data (0) {}
-
-template<typename _Tp>
-inline valarray<_Tp>::valarray (size_t __n)
- : _M_size (__n), _M_data (new _Tp[__n]) {}
-
-template<typename _Tp>
-inline valarray<_Tp>::valarray (const _Tp& __t, size_t __n)
- : _M_size (__n), _M_data (new _Tp[__n])
-{ __valarray_fill (_M_data, _M_size, __t); }
-
-template<typename _Tp>
-inline valarray<_Tp>::valarray (const _Tp* __restrict__ __pT, size_t __n)
- : _M_size (__n), _M_data (new _Tp[__n])
-{ __valarray_copy (__pT, __n, _M_data); }
-
-template<typename _Tp>
-inline valarray<_Tp>::valarray (const valarray<_Tp>& __v)
- : _M_size (__v._M_size), _M_data (new _Tp[__v._M_size])
-{ __valarray_copy (__v._M_data, _M_size, _M_data); }
-
-template<typename _Tp>
-inline valarray<_Tp>::valarray (const slice_array<_Tp>& __sa)
- : _M_size (__sa._M_sz), _M_data (new _Tp[__sa._M_sz])
-{ __valarray_copy (__sa._M_array, __sa._M_sz, __sa._M_stride,
- _Array<_Tp>(_M_data)); }
-
-template<typename _Tp>
-inline valarray<_Tp>::valarray (const gslice_array<_Tp>& __ga)
- : _M_size (__ga._M_index.size()), _M_data (new _Tp[_M_size])
-{ __valarray_copy (__ga._M_array, _Array<size_t>(__ga._M_index),
- _Array<_Tp>(_M_data), _M_size); }
-
-template<typename _Tp>
-inline valarray<_Tp>::valarray (const mask_array<_Tp>& __ma)
- : _M_size (__ma._M_sz), _M_data (new _Tp[__ma._M_sz])
-{ __valarray_copy (__ma._M_array, __ma._M_mask,
- _Array<_Tp>(_M_data), _M_size); }
-
-template<typename _Tp>
-inline valarray<_Tp>::valarray (const indirect_array<_Tp>& __ia)
- : _M_size (__ia._M_sz), _M_data (new _Tp[__ia._M_sz])
-{ __valarray_copy (__ia._M_array, __ia._M_index,
- _Array<_Tp>(_M_data), _M_size); }
-
-template<typename _Tp> template<class _Dom>
-inline valarray<_Tp>::valarray (const _Expr<_Dom, _Tp>& __e)
- : _M_size (__e.size ()), _M_data (new _Tp[_M_size])
-{ __valarray_copy (__e, _M_size, _Array<_Tp>(_M_data)); }
-
-template<typename _Tp>
-inline valarray<_Tp>::~valarray () { delete[] _M_data; }
-
-template<typename _Tp>
-inline valarray<_Tp>&
-valarray<_Tp>::operator= (const valarray<_Tp>& __v)
-{
- __valarray_copy(__v._M_data, _M_size, _M_data);
- return *this;
-}
-
-template<typename _Tp>
-inline valarray<_Tp>&
-valarray<_Tp>::operator= (const _Tp& __t)
-{
- __valarray_fill (_M_data, _M_size, __t);
- return *this;
-}
-
-template<typename _Tp>
-inline valarray<_Tp>&
-valarray<_Tp>::operator= (const slice_array<_Tp>& __sa)
-{
- __valarray_copy (__sa._M_array, __sa._M_sz,
- __sa._M_stride, _Array<_Tp>(_M_data));
- return *this;
-}
-
-template<typename _Tp>
-inline valarray<_Tp>&
-valarray<_Tp>::operator= (const gslice_array<_Tp>& __ga)
-{
- __valarray_copy (__ga._M_array, _Array<size_t>(__ga._M_index),
- _Array<_Tp>(_M_data), _M_size);
- return *this;
-}
-
-template<typename _Tp>
-inline valarray<_Tp>&
-valarray<_Tp>::operator= (const mask_array<_Tp>& __ma)
-{
- __valarray_copy (__ma._M_array, __ma._M_mask,
- _Array<_Tp>(_M_data), _M_size);
- return *this;
-}
-
-template<typename _Tp>
-inline valarray<_Tp>&
-valarray<_Tp>::operator= (const indirect_array<_Tp>& __ia)
-{
- __valarray_copy (__ia._M_array, __ia._M_index,
- _Array<_Tp>(_M_data), _M_size);
- return *this;
-}
-
-template<typename _Tp> template<class _Dom>
-inline valarray<_Tp>&
-valarray<_Tp>::operator= (const _Expr<_Dom, _Tp>& __e)
-{
- __valarray_copy (__e, _M_size, _Array<_Tp>(_M_data));
- return *this;
-}
-
-template<typename _Tp>
-inline _Expr<_SClos<_ValArray,_Tp>, _Tp>
-valarray<_Tp>::operator[] (slice __s) const
-{
- typedef _SClos<_ValArray,_Tp> _Closure;
- return _Expr<_Closure, _Tp> (_Closure (_Array<_Tp>(_M_data), __s));
-}
-
-template<typename _Tp>
-inline slice_array<_Tp>
-valarray<_Tp>::operator[] (slice __s)
-{
- return slice_array<_Tp> (_Array<_Tp>(_M_data), __s);
-}
-
-template<typename _Tp>
-inline _Expr<_GClos<_ValArray,_Tp>, _Tp>
-valarray<_Tp>::operator[] (const gslice& __gs) const
-{
- typedef _GClos<_ValArray,_Tp> _Closure;
- return _Expr<_Closure, _Tp>
- (_Closure (_Array<_Tp>(_M_data), __gs._M_index->_M_index));
-}
-
-template<typename _Tp>
-inline gslice_array<_Tp>
-valarray<_Tp>::operator[] (const gslice& __gs)
-{
- return gslice_array<_Tp>
- (_Array<_Tp>(_M_data), __gs._M_index->_M_index);
-}
-
-template<typename _Tp>
-inline valarray<_Tp>
-valarray<_Tp>::operator[] (const valarray<bool>& __m) const
-{
- size_t __s (0);
- size_t __e (__m.size ());
- for (size_t __i=0; __i<__e; ++__i)
- if (__m[__i]) ++__s;
- return valarray<_Tp> (mask_array<_Tp> (_Array<_Tp>(_M_data), __s,
- _Array<bool> (__m)));
-}
-
-template<typename _Tp>
-inline mask_array<_Tp>
-valarray<_Tp>::operator[] (const valarray<bool>& __m)
-{
- size_t __s (0);
- size_t __e (__m.size ());
- for (size_t __i=0; __i<__e; ++__i)
- if (__m[__i]) ++__s;
- return mask_array<_Tp> (_Array<_Tp>(_M_data), __s, _Array<bool> (__m));
-}
-
-template<typename _Tp>
-inline _Expr<_IClos<_ValArray,_Tp>, _Tp>
-valarray<_Tp>::operator[] (const valarray<size_t>& __i) const
-{
- typedef _IClos<_ValArray,_Tp> _Closure;
- return _Expr<_Closure, _Tp> (_Closure (*this, __i));
-}
-
-template<typename _Tp>
-inline indirect_array<_Tp>
-valarray<_Tp>::operator[] (const valarray<size_t>& __i)
-{
- return indirect_array<_Tp> (_Array<_Tp>(_M_data), __i.size(),
- _Array<size_t> (__i));
-}
-
-template<class _Tp>
-inline size_t valarray<_Tp>::size () const { return _M_size; }
-
-template<class _Tp>
-inline _Tp
-valarray<_Tp>::sum () const
-{
- return accumulate (_M_data, _M_data + _M_size, _Tp ());
-}
-
-template<typename _Tp>
-inline _Tp
-valarray<_Tp>::product () const
-{
- return accumulate (_M_data, _M_data+_M_size, _Tp(1), multiplies<_Tp> ());
-}
-
-template <class _Tp>
-inline valarray<_Tp>
-valarray<_Tp>::shift (int __n) const
-{
- _Tp* const __a = static_cast<_Tp*> (alloca (sizeof(_Tp) * _M_size));
- if (! __n) // __n == 0: no shift
- __valarray_copy (_M_data, _M_size, __a);
- else if (__n > 0) { // __n > 0: shift left
- if (__n > _M_size)
- __valarray_fill(__a, __n, _Tp());
- else {
- __valarray_copy (_M_data+__n, _M_size-__n, __a);
- __valarray_fill (__a+_M_size-__n, __n, _Tp());
- }
- }
- else { // __n < 0: shift right
- __valarray_copy (_M_data, _M_size+__n, __a-__n);
- __valarray_fill(__a, -__n, _Tp());
- }
- return valarray<_Tp> (__a, _M_size);
-}
-
-template <class _Tp>
-inline valarray<_Tp>
-valarray<_Tp>::cshift (int __n) const
-{
- _Tp* const __a = static_cast<_Tp*> (alloca (sizeof(_Tp) * _M_size));
- if (! __n) // __n == 0: no cshift
- __valarray_copy(_M_data, _M_size, __a);
- else if (__n > 0) { // __n > 0: cshift left
- __valarray_copy (_M_data, __n, __a + _M_size-__n);
- __valarray_copy (_M_data + __n, _M_size-__n, __a);
- }
- else { // __n < 0: cshift right
- __valarray_copy (_M_data + _M_size + __n, -__n, __a);
- __valarray_copy (_M_data, _M_size + __n, __a - __n);
- }
- return valarray<_Tp> (__a, _M_size);
-}
-
-template <class _Tp>
-inline void
-valarray<_Tp>::resize (size_t __n, _Tp __c)
-{
- if (_M_size != __n) {
- delete[] _M_data;
- _M_size = __n;
- _M_data = new _Tp[_M_size];
- }
- __valarray_fill (_M_data, _M_size, __c);
-}
-
-template<typename _Tp>
-inline _Tp
-valarray<_Tp>::min() const
-{
- return *min_element (_M_data, _M_data+_M_size);
-}
-
-template<typename _Tp>
-inline _Tp
-valarray<_Tp>::max() const
-{
- return *max_element (_M_data, _M_data+_M_size);
-}
-
-template<class _Tp>
-inline _Expr<_ValFunClos<_ValArray,_Tp>,_Tp>
-valarray<_Tp>::apply (_Tp func (_Tp)) const
-{
- typedef _ValFunClos<_ValArray,_Tp> _Closure;
- return _Expr<_Closure,_Tp> (_Closure (*this, func));
-}
-
-template<class _Tp>
-inline _Expr<_RefFunClos<_ValArray,_Tp>,_Tp>
-valarray<_Tp>::apply (_Tp func (const _Tp &)) const
-{
- typedef _RefFunClos<_ValArray,_Tp> _Closure;
- return _Expr<_Closure,_Tp> (_Closure (*this, func));
-}
-
-#define _DEFINE_VALARRAY_UNARY_OPERATOR(_Op, _Name) \
- template<typename _Tp> \
- inline _Expr<_UnClos<_Name,_ValArray,_Tp>, _Tp> \
- valarray<_Tp>::operator##_Op() const \
- { \
- typedef _UnClos<_Name,_ValArray,_Tp> _Closure; \
- return _Expr<_Closure, _Tp> (_Closure (*this)); \
- }
-
- _DEFINE_VALARRAY_UNARY_OPERATOR(+, _Unary_plus)
- _DEFINE_VALARRAY_UNARY_OPERATOR(-, negate)
- _DEFINE_VALARRAY_UNARY_OPERATOR(~, _Bitwise_not)
-
-#undef _DEFINE_VALARRAY_UNARY_OPERATOR
-
- template<typename _Tp>
- inline _Expr<_UnClos<logical_not,_ValArray,_Tp>, bool>
- valarray<_Tp>::operator!() const
- {
- typedef _UnClos<logical_not,_ValArray,_Tp> _Closure;
- return _Expr<_Closure, bool> (_Closure (*this));
- }
-
-#define _DEFINE_VALARRAY_AUGMENTED_ASSIGNMENT(_Op, _Name) \
- template<class _Tp> \
- inline valarray<_Tp> & \
- valarray<_Tp>::operator##_Op##= (const _Tp &__t) \
- { \
- _Array_augmented_##_Name (_Array<_Tp>(_M_data), _M_size, __t); \
- return *this; \
- } \
- \
- template<class _Tp> \
- inline valarray<_Tp> & \
- valarray<_Tp>::operator##_Op##= (const valarray<_Tp> &__v) \
- { \
- _Array_augmented_##_Name (_Array<_Tp>(_M_data), _M_size, \
- _Array<_Tp>(__v._M_data)); \
- return *this; \
- }
-
-_DEFINE_VALARRAY_AUGMENTED_ASSIGNMENT(+, plus)
-_DEFINE_VALARRAY_AUGMENTED_ASSIGNMENT(-, minus)
-_DEFINE_VALARRAY_AUGMENTED_ASSIGNMENT(*, multiplies)
-_DEFINE_VALARRAY_AUGMENTED_ASSIGNMENT(/, divides)
-_DEFINE_VALARRAY_AUGMENTED_ASSIGNMENT(%, modulus)
-_DEFINE_VALARRAY_AUGMENTED_ASSIGNMENT(^, xor)
-_DEFINE_VALARRAY_AUGMENTED_ASSIGNMENT(&, and)
-_DEFINE_VALARRAY_AUGMENTED_ASSIGNMENT(|, or)
-_DEFINE_VALARRAY_AUGMENTED_ASSIGNMENT(<<, shift_left)
-_DEFINE_VALARRAY_AUGMENTED_ASSIGNMENT(>>, shift_right)
-
-#undef _DEFINE_VALARRAY_AUGMENTED_ASSIGNMENT
-
-
-#define _DEFINE_VALARRAY_EXPR_AUGMENTED_ASSIGNMENT(_Op, _Name) \
- template<class _Tp> template<class _Dom> \
- inline valarray<_Tp> & \
- valarray<_Tp>::operator##_Op##= (const _Expr<_Dom,_Tp> &__e) \
- { \
- _Array_augmented_##_Name (_Array<_Tp>(_M_data), __e, _M_size); \
- return *this; \
- }
-
-_DEFINE_VALARRAY_EXPR_AUGMENTED_ASSIGNMENT(+, plus)
-_DEFINE_VALARRAY_EXPR_AUGMENTED_ASSIGNMENT(-, minus)
-_DEFINE_VALARRAY_EXPR_AUGMENTED_ASSIGNMENT(*, multiplies)
-_DEFINE_VALARRAY_EXPR_AUGMENTED_ASSIGNMENT(/, divides)
-_DEFINE_VALARRAY_EXPR_AUGMENTED_ASSIGNMENT(%, modulus)
-_DEFINE_VALARRAY_EXPR_AUGMENTED_ASSIGNMENT(^, xor)
-_DEFINE_VALARRAY_EXPR_AUGMENTED_ASSIGNMENT(&, and)
-_DEFINE_VALARRAY_EXPR_AUGMENTED_ASSIGNMENT(|, or)
-_DEFINE_VALARRAY_EXPR_AUGMENTED_ASSIGNMENT(<<, shift_left)
-_DEFINE_VALARRAY_EXPR_AUGMENTED_ASSIGNMENT(>>, shift_right)
-
-#undef _DEFINE_VALARRAY_EXPR_AUGMENTED_ASSIGNMENT
-
-
-#define _DEFINE_BINARY_OPERATOR(_Op, _Name) \
- template<typename _Tp> \
- inline _Expr<_BinClos<_Name,_ValArray,_ValArray,_Tp,_Tp>, _Tp> \
- operator##_Op (const valarray<_Tp> &__v, const valarray<_Tp> &__w) \
- { \
- typedef _BinClos<_Name,_ValArray,_ValArray,_Tp,_Tp> _Closure; \
- return _Expr<_Closure, _Tp> (_Closure (__v, __w)); \
- } \
- \
- template<typename _Tp> \
- inline _Expr<_BinClos<_Name,_ValArray,_Constant,_Tp,_Tp>,_Tp> \
- operator##_Op (const valarray<_Tp> &__v, const _Tp &__t) \
- { \
- typedef _BinClos<_Name,_ValArray,_Constant,_Tp,_Tp> _Closure; \
- return _Expr<_Closure, _Tp> (_Closure (__v, __t)); \
- } \
- \
- template<typename _Tp> \
- inline _Expr<_BinClos<_Name,_Constant,_ValArray,_Tp,_Tp>,_Tp> \
- operator##_Op (const _Tp &__t, const valarray<_Tp> &__v) \
- { \
- typedef _BinClos<_Name,_Constant,_ValArray,_Tp,_Tp> _Closure; \
- return _Expr<_Closure, _Tp> (_Closure (__t, __v)); \
- }
-
-_DEFINE_BINARY_OPERATOR(+, plus)
-_DEFINE_BINARY_OPERATOR(-, minus)
-_DEFINE_BINARY_OPERATOR(*, multiplies)
-_DEFINE_BINARY_OPERATOR(/, divides)
-_DEFINE_BINARY_OPERATOR(%, modulus)
-_DEFINE_BINARY_OPERATOR(^, _Bitwise_xor)
-_DEFINE_BINARY_OPERATOR(&, _Bitwise_and)
-_DEFINE_BINARY_OPERATOR(|, _Bitwise_or)
-_DEFINE_BINARY_OPERATOR(<<, _Shift_left)
-_DEFINE_BINARY_OPERATOR(>>, _Shift_right)
-
-#undef _DEFINE_BINARY_OPERATOR
-
-#define _DEFINE_LOGICAL_OPERATOR(_Op, _Name) \
- template<typename _Tp> \
- inline _Expr<_BinClos<_Name,_ValArray,_ValArray,_Tp,_Tp>,bool> \
- operator##_Op (const valarray<_Tp> &__v, const valarray<_Tp> &__w) \
- { \
- typedef _BinClos<_Name,_ValArray,_ValArray,_Tp,_Tp> _Closure; \
- return _Expr<_Closure, bool> (_Closure (__v, __w)); \
- } \
- \
- template<class _Tp> \
- inline _Expr<_BinClos<_Name,_ValArray,_Constant,_Tp,_Tp>,bool> \
- operator##_Op (const valarray<_Tp> &__v, const _Tp &__t) \
- { \
- typedef _BinClos<_Name,_ValArray,_Constant,_Tp,_Tp> _Closure; \
- return _Expr<_Closure, bool> (_Closure (__v, __t)); \
- } \
- \
- template<class _Tp> \
- inline _Expr<_BinClos<_Name,_Constant,_ValArray,_Tp,_Tp>,bool> \
- operator##_Op (const _Tp &__t, const valarray<_Tp> &__v) \
- { \
- typedef _BinClos<_Name,_Constant,_ValArray,_Tp,_Tp> _Closure; \
- return _Expr<_Closure, bool> (_Closure (__t, __v)); \
- }
-
-_DEFINE_LOGICAL_OPERATOR(&&, logical_and)
-_DEFINE_LOGICAL_OPERATOR(||, logical_or)
-_DEFINE_LOGICAL_OPERATOR(==, equal_to)
-_DEFINE_LOGICAL_OPERATOR(!=, not_equal_to)
-_DEFINE_LOGICAL_OPERATOR(<, less)
-_DEFINE_LOGICAL_OPERATOR(>, greater)
-_DEFINE_LOGICAL_OPERATOR(<=, less_equal)
-_DEFINE_LOGICAL_OPERATOR(>=, greater_equal)
-
-#undef _DEFINE_VALARRAY_OPERATOR
-
-#undef _G_NO_VALARRAY_TEMPLATE_EXPORT
-
-} // extern "C++"
-
-#endif // __STD_VALARRAY__
-
-// Local Variables:
-// mode:c++
-// End:
diff --git a/contrib/libstdc++/std/straits.h b/contrib/libstdc++/std/straits.h
deleted file mode 100644
index c80e7ab7a681..000000000000
--- a/contrib/libstdc++/std/straits.h
+++ /dev/null
@@ -1,161 +0,0 @@
-// Character traits template for the -*- C++ -*- string classes.
-// Copyright (C) 1994 Free Software Foundation
-
-// This file is part of the GNU ANSI C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-// As a special exception, if you link this library with files
-// compiled with a GNU compiler to produce an executable, this does not cause
-// the resulting executable to be covered by the GNU General Public License.
-// This exception does not however invalidate any other reasons why
-// the executable file might be covered by the GNU General Public License.
-
-// Written by Jason Merrill based upon the specification by Takanori Adachi
-// in ANSI X3J16/94-0013R2.
-
-#ifndef __STRING_CHAR_TRAITS__
-#define __STRING_CHAR_TRAITS__
-
-#ifdef __GNUG__
-// For string_char_traits <char>
-#pragma interface "std/straits.h"
-#endif
-
-#include <cstddef>
-
-extern "C++" {
-template <class charT>
-struct string_char_traits {
- typedef charT char_type; // for users to acquire the basic character type
-
- // constraints
-
- static void assign (char_type& c1, const char_type& c2)
- { c1 = c2; }
- static bool eq (const char_type& c1, const char_type& c2)
- { return (c1 == c2); }
- static bool ne (const char_type& c1, const char_type& c2)
- { return !(c1 == c2); }
- static bool lt (const char_type& c1, const char_type& c2)
- { return (c1 < c2); }
- static char_type eos () { return char_type(); } // the null character
- static bool is_del(char_type a) { return 0; }
- // characteristic function for delimiters of charT
-
- // speed-up functions
-
- static int compare (const char_type* s1, const char_type* s2, size_t n)
- {
- size_t i;
- for (i = 0; i < n; ++i)
- if (ne (s1[i], s2[i]))
- return lt (s1[i], s2[i]) ? -1 : 1;
-
- return 0;
- }
-
- static size_t length (const char_type* s)
- {
- size_t l = 0;
- while (ne (*s++, eos ()))
- ++l;
- return l;
- }
-
- static char_type* copy (char_type* s1, const char_type* s2, size_t n)
- {
- for (; n--; )
- assign (s1[n], s2[n]);
- return s1;
- }
-
- static char_type* move (char_type* s1, const char_type* s2, size_t n)
- {
- char_type a[n];
- size_t i;
- for (i = 0; i < n; ++i)
- assign (a[i], s2[i]);
- for (i = 0; i < n; ++i)
- assign (s1[i], a[i]);
- return s1;
- }
-
- static char_type* set (char_type* s1, const char_type& c, size_t n)
- {
- for (; n--; )
- assign (s1[n], c);
- return s1;
- }
-};
-
-class istream;
-class ostream;
-#include <cctype>
-#include <cstring>
-
-struct string_char_traits <char> {
- typedef char char_type;
-
- static void assign (char_type& c1, const char_type& c2)
- { c1 = c2; }
- static bool eq (const char_type & c1, const char_type& c2)
- { return (c1 == c2); }
- static bool ne (const char_type& c1, const char_type& c2)
- { return (c1 != c2); }
- static bool lt (const char_type& c1, const char_type& c2)
- { return (c1 < c2); }
- static char_type eos () { return 0; }
- static bool is_del(char_type a) { return isspace(a); }
-
- static int compare (const char_type* s1, const char_type* s2, size_t n)
- { return memcmp (s1, s2, n); }
- static size_t length (const char_type* s)
- { return strlen (s); }
- static char_type* copy (char_type* s1, const char_type* s2, size_t n)
- { return (char_type*) memcpy (s1, s2, n); }
- static char_type* move (char_type* s1, const char_type* s2, size_t n)
- { return (char_type*) memmove (s1, s2, n); }
- static char_type* set (char_type* s1, const char_type& c, size_t n)
- { return (char_type*) memset (s1, c, n); }
-};
-
-#if 0
-#include <cwctype>
-struct string_char_traits <wchar_t> {
- typedef wchar_t char_type;
-
- static void assign (char_type& c1, const char_type& c2)
- { c1 = c2; }
- static bool eq (const char_type & c1, const char_type& c2)
- { return (c1 == c2); }
- static bool ne (const char_type& c1, const char_type& c2)
- { return (c1 != c2); }
- static bool lt (const char_type& c1, const char_type& c2)
- { return (c1 < c2); }
- static char_type eos () { return 0; }
- static bool is_del(char_type a) { return iswspace(a); }
-
- static int compare (const char_type* s1, const char_type* s2, size_t n)
- { return wmemcmp (s1, s2, n); }
- static size_t length (const char_type* s)
- { return wcslen (s); }
- static char_type* copy (char_type* s1, const char_type* s2, size_t n)
- { return wmemcpy (s1, s2, n); }
- static char_type* set (char_type* s1, const char_type& c, size_t n)
- { return wmemset (s1, c, n); }
-};
-#endif
-} // extern "C++"
-#endif
diff --git a/contrib/libstdc++/std/valarray_array.h b/contrib/libstdc++/std/valarray_array.h
deleted file mode 100644
index a0b5818fd8b0..000000000000
--- a/contrib/libstdc++/std/valarray_array.h
+++ /dev/null
@@ -1,346 +0,0 @@
-// The template and inlines for the -*- C++ -*- internal _Array helper class.
-
-// Copyright (C) 1997-1999 Cygnus Solutions
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction. Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License. This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-// Written by Gabriel Dos Reis <Gabriel.Dos-Reis@DPTMaths.ENS-Cachan.Fr>
-
-#ifndef __VALARRAY_ARRAY__
-#define __VALARRAY_ARRAY__
-
-#include <cstdlib>
-#include <cstring>
-
-extern "C++" {
-
-//
-// Helper functions on raw pointers
-//
-
-// fill plain array __a[<__n>] with __t
-template<typename _Tp>
-inline void
-__valarray_fill (_Tp* __restrict__ __a, size_t __n, const _Tp& __t)
-{ while (__n--) *__a++ = __t; }
-
-// fill strided array __a[<__n-1 : __s>] with __t
-template<typename _Tp>
-inline void
-__valarray_fill (_Tp* __restrict__ __a, size_t __n,
- size_t __s, const _Tp& __t)
-{ for (size_t __i=0; __i<__n; ++__i, __a+=__s) *__a = __t; }
-
-// fill indirect array __a[__i[<__n>]] with __i
-template<typename _Tp>
-inline void
-__valarray_fill(_Tp* __restrict__ __a, const size_t* __restrict__ __i,
- size_t __n, const _Tp& __t)
-{ for (size_t __j=0; __j<__n; ++__j, ++__i) __a[*__i] = __t; }
-
-// copy plain array __a[<__n>] in __b[<__n>]
-template<typename _Tp>
-inline void
-__valarray_copy (const _Tp* __restrict__ __a, size_t __n,
- _Tp* __restrict__ __b)
-{ memcpy (__b, __a, __n * sizeof(_Tp)); }
-
-// copy strided array __a[<__n : __s>] in plain __b[<__n>]
-template<typename _Tp>
-inline void
-__valarray_copy (const _Tp* __restrict__ __a, size_t __n, size_t __s,
- _Tp* __restrict__ __b)
-{ for (size_t __i=0; __i<__n; ++__i, ++__b, __a += __s) *__b = *__a; }
-
-// copy plain __a[<__n>] in strided __b[<__n : __s>]
-template<typename _Tp>
-inline void
-__valarray_copy (const _Tp* __restrict__ __a, _Tp* __restrict__ __b,
- size_t __n, size_t __s)
-{ for (size_t __i=0; __i<__n; ++__i, ++__a, __b+=__s) *__b = *__a; }
-
-// copy indexed __a[__i[<__n>]] in plain __b[<__n>]
-template<typename _Tp>
-inline void
-__valarray_copy (const _Tp* __restrict__ __a,
- const size_t* __restrict__ __i,
- _Tp* __restrict__ __b, size_t __n)
-{ for (size_t __j=0; __j<__n; ++__j, ++__b, ++__i) *__b = __a[*__i]; }
-
-// copy plain __a[<__n>] in indexed __b[__i[<__n>]]
-template<typename _Tp>
-inline void
-__valarray_copy (const _Tp* __restrict__ __a, size_t __n,
- _Tp* __restrict__ __b, const size_t* __restrict__ __i)
-{ for (size_t __j=0; __j<__n; ++__j, ++__a, ++__i) __b[*__i] = *__a; }
-
-//
-// Helper class _Array, first layer of valarray abstraction.
-// All operations on valarray should be forwarded to this class
-// whenever possible. -- gdr
-//
-
-template<typename _Tp> struct _Array {
-
- explicit _Array (size_t);
- explicit _Array (_Tp* const __restrict__);
- explicit _Array (const valarray<_Tp>&);
- _Array (const _Tp* __restrict__, size_t);
-
- void free_data() const;
- _Tp* begin () const;
-
- _Tp* const __restrict__ _M_data;
-};
-
-template<typename _Tp>
-inline void
-__valarray_fill (_Array<_Tp> __a, size_t __n, const _Tp& __t)
-{ __valarray_fill (__a._M_data, __n, __t); }
-
-template<typename _Tp>
-inline void
-__valarray_fill (_Array<_Tp> __a, size_t __n, size_t __s, const _Tp& __t)
-{ __valarray_fill (__a._M_data, __n, __s, __t); }
-
-template<typename _Tp>
-inline void
-__valarray_fill (_Array<_Tp> __a, _Array<size_t> __i,
- size_t __n, const _Tp& __t)
-{ __valarray_fill (__a._M_data, __i._M_data, __n, __t); }
-
-template<typename _Tp>
-inline void
-__valarray_copy (_Array<_Tp> __a, size_t __n, _Array<_Tp> __b)
-{ __valarray_copy (__a._M_data, __n, __b._M_data); }
-
-template<typename _Tp>
-inline void
-__valarray_copy (_Array<_Tp> __a, size_t __n, size_t __s, _Array<_Tp> __b)
-{ __valarray_copy(__a._M_data, __n, __s, __b._M_data); }
-
-template<typename _Tp>
-inline void
-__valarray_copy (_Array<_Tp> __a, _Array<_Tp> __b, size_t __n, size_t __s)
-{ __valarray_copy (__a._M_data, __b._M_data, __n, __s); }
-
-template<typename _Tp>
-inline void
-__valarray_copy (_Array<_Tp> __a, _Array<size_t> __i,
- _Array<_Tp> __b, size_t __n)
-{ __valarray_copy (__a._M_data, __i._M_data, __b._M_data, __n); }
-
-template<typename _Tp>
-inline void
-__valarray_copy (_Array<_Tp> __a, size_t __n, _Array<_Tp> __b,
- _Array<size_t> __i)
-{ __valarray_copy (__a._M_data, __n, __b._M_data, __i._M_data); }
-
-template<typename _Tp>
-inline
-_Array<_Tp>::_Array (size_t __n) : _M_data (new _Tp[__n]) {}
-
-template<typename _Tp>
-inline
-_Array<_Tp>::_Array (_Tp* const __restrict__ __p) : _M_data (__p) {}
-
-template<typename _Tp>
-inline _Array<_Tp>::_Array (const valarray<_Tp>& __v)
- : _M_data (__v._M_data) {}
-
-template<typename _Tp>
-inline
-_Array<_Tp>::_Array (const _Tp* __restrict__ __b, size_t __s)
- : _M_data (new _Tp[__s]) { __valarray_copy (__b, __s, _M_data); }
-
-template<typename _Tp>
-inline void
-_Array<_Tp>::free_data() const { delete[] _M_data; }
-
-template<typename _Tp>
-inline _Tp*
-_Array<_Tp>::begin () const
-{ return _M_data; }
-
-#define _DEFINE_ARRAY_FUNCTION(_Op, _Name) \
-template<typename _Tp> \
-inline void \
-_Array_augmented_##_Name (_Array<_Tp> __a, size_t __n, const _Tp& __t) \
-{ \
- for (_Tp* __p=__a._M_data; __p<__a._M_data+__n; ++__p) \
- *__p _Op##= __t; \
-} \
- \
-template<typename _Tp> \
-inline void \
-_Array_augmented_##_Name (_Array<_Tp> __a, size_t __n, _Array<_Tp> __b) \
-{ \
- _Tp* __p (__a._M_data); \
- for (_Tp* __q=__b._M_data; __q<__b._M_data+__n; ++__p, ++__q) \
- *__p _Op##= *__q; \
-} \
- \
-template<typename _Tp, class _Dom> \
-void \
-_Array_augmented_##_Name (_Array<_Tp> __a, \
- const _Expr<_Dom,_Tp>& __e, size_t __n) \
-{ \
- _Tp* __p (__a._M_data); \
- for (size_t __i=0; __i<__n; ++__i, ++__p) *__p _Op##= __e[__i]; \
-} \
- \
-template<typename _Tp> \
-inline void \
-_Array_augmented_##_Name (_Array<_Tp> __a, size_t __n, size_t __s, \
- _Array<_Tp> __b) \
-{ \
- _Tp* __q (__b._M_data); \
- for (_Tp* __p=__a._M_data; __p<__a._M_data+__s*__n; __p+=__s, ++__q) \
- *__p _Op##= *__q; \
-} \
- \
-template<typename _Tp> \
-inline void \
-_Array_augmented_##_Name (_Array<_Tp> __a, _Array<_Tp> __b, \
- size_t __n, size_t __s) \
-{ \
- _Tp* __q (__b._M_data); \
- for (_Tp* __p=__a._M_data; __p<__a._M_data+__n; ++__p, __q+=__s) \
- *__p _Op##= *__q; \
-} \
- \
-template<typename _Tp, class _Dom> \
-void \
-_Array_augmented_##_Name (_Array<_Tp> __a, size_t __s, \
- const _Expr<_Dom,_Tp>& __e, size_t __n) \
-{ \
- _Tp* __p (__a._M_data); \
- for (size_t __i=0; __i<__n; ++__i, __p+=__s) *__p _Op##= __e[__i]; \
-} \
- \
-template<typename _Tp> \
-inline void \
-_Array_augmented_##_Name (_Array<_Tp> __a, _Array<size_t> __i, \
- _Array<_Tp> __b, size_t __n) \
-{ \
- _Tp* __q (__b._M_data); \
- for (size_t* __j=__i._M_data; __j<__i._M_data+__n; ++__j, ++__q) \
- __a._M_data[*__j] _Op##= *__q; \
-} \
- \
-template<typename _Tp> \
-inline void \
-_Array_augmented_##_Name (_Array<_Tp> __a, size_t __n, \
- _Array<_Tp> __b, _Array<size_t> __i) \
-{ \
- _Tp* __p (__a._M_data); \
- for (size_t* __j=__i._M_data; __j<__i._M_data+__n; ++__j, ++__p) \
- *__p _Op##= __b._M_data[*__j]; \
-} \
- \
-template<typename _Tp, class _Dom> \
-void \
-_Array_augmented_##_Name (_Array<_Tp> __a, _Array<size_t> __i, \
- const _Expr<_Dom, _Tp>& __e, size_t __n) \
-{ \
- size_t* __j (__i._M_data); \
- for (size_t __k=0; __k<__n; ++__k, ++__j) \
- __a._M_data[*__j] _Op##= __e[__k]; \
-} \
- \
-template<typename _Tp> \
-void \
-_Array_augmented_##_Name (_Array<_Tp> __a, _Array<bool> __m, \
- _Array<_Tp> __b, size_t __n) \
-{ \
- bool* ok (__m._M_data); \
- _Tp* __p (__a._M_data); \
- for (_Tp* __q=__b._M_data; __q<__b._M_data+__n; ++__q, ++ok, ++__p) { \
- while (! *ok) { \
- ++ok; \
- ++__p; \
- } \
- *__p _Op##= *__q; \
- } \
-} \
- \
-template<typename _Tp> \
-void \
-_Array_augmented_##_Name (_Array<_Tp> __a, size_t __n, \
- _Array<_Tp> __b, _Array<bool> __m) \
-{ \
- bool* ok (__m._M_data); \
- _Tp* __q (__b._M_data); \
- for (_Tp* __p=__a._M_data; __p<__a._M_data+__n; ++__p, ++ok, ++__q) { \
- while (! *ok) { \
- ++ok; \
- ++__q; \
- } \
- *__p _Op##= *__q; \
- } \
-} \
- \
-template<typename _Tp, class _Dom> \
-void \
-_Array_augmented_##_Name (_Array<_Tp> __a, _Array<bool> __m, \
- const _Expr<_Dom, _Tp>& __e, size_t __n) \
-{ \
- bool* ok(__m._M_data); \
- _Tp* __p (__a._M_data); \
- for (size_t __i=0; __i<__n; ++__i, ++ok, ++__p) { \
- while (! *ok) { \
- ++ok; \
- ++__p; \
- } \
- *__p _Op##= __e[__i]; \
- } \
-}
-
-_DEFINE_ARRAY_FUNCTION(+, plus)
-_DEFINE_ARRAY_FUNCTION(-, minus)
-_DEFINE_ARRAY_FUNCTION(*, multiplies)
-_DEFINE_ARRAY_FUNCTION(/, divides)
-_DEFINE_ARRAY_FUNCTION(%, modulus)
-_DEFINE_ARRAY_FUNCTION(^, xor)
-_DEFINE_ARRAY_FUNCTION(|, or)
-_DEFINE_ARRAY_FUNCTION(&, and)
-_DEFINE_ARRAY_FUNCTION(<<, shift_left)
-_DEFINE_ARRAY_FUNCTION(>>, shift_right)
-
-#undef _DEFINE_ARRAY_FUNCTION
-
-} // extern "C++"
-
-#ifdef _G_NO_VALARRAY_TEMPLATE_EXPORT
-# define export
-# include <std/valarray_array.tcc>
-#endif
-
-#endif // __VALARRAY_ARRAY__
-
-// Local Variables:
-// mode:c++
-// End:
diff --git a/contrib/libstdc++/std/valarray_array.tcc b/contrib/libstdc++/std/valarray_array.tcc
deleted file mode 100644
index bd6692571fdd..000000000000
--- a/contrib/libstdc++/std/valarray_array.tcc
+++ /dev/null
@@ -1,130 +0,0 @@
-// The template and inlines for the -*- C++ -*- internal _Array helper class.
-
-// Copyright (C) 1997-1999 Cygnus Solutions
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction. Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License. This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-// Written by Gabriel Dos Reis <Gabriel.Dos-Reis@DPTMaths.ENS-Cachan.Fr>
-
-#ifndef __VALARRAY_ARRAY_TCC__
-#define __VALARRAY_ARRAY_TCC__
-
-extern "C++" {
-
-export template<typename _Tp>
-void
-__valarray_fill (_Array<_Tp> __a, size_t __n, _Array<bool> __m, const _Tp& __t)
-{
- _Tp* __p = __a._M_data;
- bool* __ok (__m._M_data);
- for (size_t __i=0; __i<__n; ++__i, ++__ok, ++__p) {
- while (! *__ok) {
- ++__ok;
- ++__p;
- }
- *__p = __t;
- }
-}
-
-export template<typename _Tp>
-void
-__valarray_copy (_Array<_Tp> __a, _Array<bool> __m, _Array<_Tp> __b, size_t __n)
-{
- _Tp* __p (__a._M_data);
- bool* __ok (__m._M_data);
- for (_Tp* __q=__b._M_data; __q<__b._M_data+__n; ++__q, ++__ok, ++__p) {
- while (! *__ok) {
- ++__ok;
- ++__p;
- }
- *__q = *__p;
- }
-}
-
-export template<typename _Tp>
-void
-__valarray_copy (_Array<_Tp> __a, size_t __n, _Array<_Tp> __b, _Array<bool> __m)
-{
- _Tp* __q (__b._M_data);
- bool* __ok (__m._M_data);
- for (_Tp* __p=__a._M_data; __p<__a._M_data+__n; ++__p, ++__ok, ++__q) {
- while (! *__ok) {
- ++__ok;
- ++__q;
- }
- *__q = *__p;
- }
-}
-
-export template<typename _Tp, class _Dom>
-void
-__valarray_copy (const _Expr<_Dom, _Tp>& __e, size_t __n, _Array<_Tp> __a)
-{
- _Tp* __p (__a._M_data);
- for (size_t __i=0; __i<__n; ++__i, ++__p) *__p = __e[__i];
-}
-
-export template<typename _Tp, class _Dom>
-void
-__valarray_copy (const _Expr<_Dom, _Tp>& __e, size_t __n,
- _Array<_Tp> __a, size_t __s)
-{
- _Tp* __p (__a._M_data);
- for (size_t __i=0; __i<__n; ++__i, __p+=__s) *__p = __e[__i];
-}
-
-export template<typename _Tp, class _Dom>
-void
-__valarray_copy (const _Expr<_Dom, _Tp>& __e, size_t __n,
- _Array<_Tp> __a, _Array<size_t> __i)
-{
- size_t* __j (__i._M_data);
- for (size_t __k=0; __k<__n; ++__k, ++__j) __a._M_data[*__j] = __e[__k];
-}
-
-export template<typename _Tp, class _Dom>
-void
-__valarray_copy (const _Expr<_Dom, _Tp>& __e, size_t __n,
- _Array<_Tp> __a, _Array<bool> __m)
-{
- bool* __ok (__m._M_data);
- _Tp* __p (__a._M_data);
- for (size_t __i=0; __i<__n; ++__i, ++__ok, ++__p) {
- while (! *__ok) {
- ++__ok;
- ++__p;
- }
- *__p = __e[__i];
- }
-}
-
-} // extern "C++"
-
-#endif // __VALARRAY_ARRAY_TCC__
-
-// Local Variables:
-// mode:c++
-// End:
diff --git a/contrib/libstdc++/std/valarray_meta.h b/contrib/libstdc++/std/valarray_meta.h
deleted file mode 100644
index 48fb21371f77..000000000000
--- a/contrib/libstdc++/std/valarray_meta.h
+++ /dev/null
@@ -1,1046 +0,0 @@
-// The template and inlines for the -*- C++ -*- internal _Meta class.
-
-// Copyright (C) 1997-1999 Cygnus Solutions
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// USA.
-
-// As a special exception, you may use this file as part of a free software
-// library without restriction. Specifically, if other files instantiate
-// templates or use macros or inline functions from this file, or you compile
-// this file and link it with other files to produce an executable, this
-// file does not by itself cause the resulting executable to be covered by
-// the GNU General Public License. This exception does not however
-// invalidate any other reasons why the executable file might be covered by
-// the GNU General Public License.
-
-// Written by Gabriel Dos Reis <Gabriel.Dos-Reis@cmla.ens-cachan.fr>
-
-#ifndef _CPP_VALARRAY_META_H
-#define _CPP_VALARRAY_META_H 1
-
-//
-// Implementing a loosened valarray return value is tricky.
-// First we need to meet 26.3.1/3: we should not add more than
-// two levels of template nesting. Therefore we resort to template
-// template to "flatten" loosened return value types.
-// At some point we use partial specialization to remove one level
-// template nesting due to _Expr<>
-//
-
-
-// This class is NOT defined. It doesn't need to.
-template<typename _Tp1, typename _Tp2> class _Constant;
-
-//
-// Unary function application closure.
-//
-template<class _Dom> class _UnFunBase {
-public:
- typedef typename _Dom::value_type value_type;
- typedef value_type _Vt;
-
- _UnFunBase (const _Dom& __e, _Vt __f(_Vt))
- : _M_expr(__e), _M_func(__f) {}
-
- _Vt operator[] (size_t __i) const { return _M_func(_M_expr[__i]); }
- size_t size () const { return _M_expr.size(); }
-
-private:
- const _Dom& _M_expr;
- _Vt (*_M_func)(_Vt);
-};
-
-template<template<class, class> class _Meta, class _Dom> class _UnFunClos;
-
-template<class _Dom>
-struct _UnFunClos<_Expr,_Dom> : _UnFunBase<_Dom> {
- typedef _UnFunBase<_Dom> _Base;
- typedef typename _Base::value_type value_type;
-
- _UnFunClos (const _Dom& __e, value_type __f(value_type))
- : _Base (__e, __f) {}
-};
-
-template<typename _Tp>
-struct _UnFunClos<_ValArray,_Tp> : _UnFunBase<valarray<_Tp> > {
- typedef _UnFunBase<valarray<_Tp> > _Base;
- typedef typename _Base::value_type value_type;
-
- _UnFunClos (const valarray<_Tp>& __v, _Tp __f(_Tp))
- : _Base (__v, __f) {}
-};
-
-//
-// Binary function application closure.
-//
-template<template<class, class> class _Meta1,
- template<class, class> class Meta2,
- class _Dom1, class _Dom2> class _BinFunClos;
-
-template<class _Dom1, class _Dom2> class _BinFunBase {
-public:
- typedef typename _Dom1::value_type value_type;
- typedef value_type _Vt;
-
- _BinFunBase (const _Dom1& __e1, const _Dom2& __e2,
- _Vt __f (_Vt, _Vt))
- : _M_expr1 (__e1), _M_expr2 (__e2), _M_func (__f) {}
-
- value_type operator[] (size_t __i) const
- { return _M_func (_M_expr1[__i], _M_expr2[__i]); }
- size_t size () const { return _M_expr1.size (); }
-
-private:
- const _Dom1& _M_expr1;
- const _Dom2& _M_expr2;
- _Vt (*_M_func)(_Vt, _Vt);
-};
-
-template<class _Dom> class _BinFunBase1 {
-public:
- typedef typename _Dom::value_type value_type ;
- typedef value_type _Vt;
-
- _BinFunBase1 (const _Vt& __c, const _Dom& __e, _Vt __f(_Vt, _Vt))
- : _M_expr1 (__c), _M_expr2 (__e), _M_func (__f) {}
-
- value_type operator[] (size_t __i) const
- { return _M_func (_M_expr1, _M_expr2[__i]); }
- size_t size () const { return _M_expr2.size (); }
-
-private:
- const _Vt& _M_expr1;
- const _Dom& _M_expr2;
- _Vt (*_M_func)(_Vt, _Vt);
-};
-
-template<class _Dom> class _BinFunBase2 {
-public:
- typedef typename _Dom::value_type value_type;
- typedef value_type _Vt;
-
- _BinFunBase2 (const _Dom& __e, const _Vt& __c, _Vt __f(_Vt, _Vt))
- : _M_expr1 (__e), _M_expr2 (__c), _M_func (__f) {}
-
- value_type operator[] (size_t __i) const
- { return _M_func (_M_expr1[__i], _M_expr2); }
- size_t size () const { return _M_expr1.size (); }
-
-private:
- const _Dom& _M_expr1;
- const _Vt& _M_expr2;
- _Vt (*_M_func)(_Vt, _Vt);
-};
-
-template<class _Dom1, class _Dom2>
-struct _BinFunClos<_Expr,_Expr,_Dom1,_Dom2> : _BinFunBase<_Dom1,_Dom2> {
- typedef _BinFunBase<_Dom1,_Dom2> _Base;
- typedef typename _Base::value_type value_type;
- typedef value_type _Tp;
-
- _BinFunClos (const _Dom1& __e1, const _Dom2& __e2,
- _Tp __f(_Tp, _Tp))
- : _Base (__e1, __e2, __f) {}
-};
-
-template<typename _Tp>
-struct _BinFunClos<_ValArray,_ValArray,_Tp,_Tp>
- : _BinFunBase<valarray<_Tp>, valarray<_Tp> > {
- typedef _BinFunBase<valarray<_Tp>, valarray<_Tp> > _Base;
- typedef _Tp value_type;
-
- _BinFunClos (const valarray<_Tp>& __v, const valarray<_Tp>& __w,
- _Tp __f(_Tp, _Tp))
- : _Base (__v, __w, __f) {}
-};
-
-template<class _Dom>
-struct _BinFunClos<_Expr,_ValArray,_Dom,typename _Dom::value_type>
- : _BinFunBase<_Dom,valarray<typename _Dom::value_type> > {
- typedef typename _Dom::value_type _Tp;
- typedef _BinFunBase<_Dom,valarray<_Tp> > _Base;
- typedef _Tp value_type;
-
- _BinFunClos (const _Dom& __e, const valarray<_Tp>& __v,
- _Tp __f(_Tp, _Tp))
- : _Base (__e, __v, __f) {}
-};
-
-template<class _Dom>
-struct _BinFunClos<_ValArray,_Expr,typename _Dom::value_type,_Dom>
- : _BinFunBase<valarray<typename _Dom::value_type>,_Dom> {
- typedef typename _Dom::value_type _Tp;
- typedef _BinFunBase<_Dom,valarray<_Tp> > _Base;
- typedef _Tp value_type;
-
- _BinFunClos (const valarray<_Tp>& __v, const _Dom& __e,
- _Tp __f(_Tp, _Tp))
- : _Base (__v, __e, __f) {}
-};
-
-template<class _Dom>
-struct _BinFunClos<_Expr,_Constant,_Dom,typename _Dom::value_type>
- : _BinFunBase2<_Dom> {
- typedef typename _Dom::value_type _Tp;
- typedef _Tp value_type;
- typedef _BinFunBase2<_Dom> _Base;
-
- _BinFunClos (const _Dom& __e, const _Tp& __t, _Tp __f (_Tp, _Tp))
- : _Base (__e, __t, __f) {}
-};
-
-template<class _Dom>
-struct _BinFunClos<_Constant,_Expr,_Dom,typename _Dom::value_type>
- : _BinFunBase1<_Dom> {
- typedef typename _Dom::value_type _Tp;
- typedef _Tp value_type;
- typedef _BinFunBase1<_Dom> _Base;
-
- _BinFunClos (const _Tp& __t, const _Dom& __e, _Tp __f (_Tp, _Tp))
- : _Base (__t, __e, __f) {}
-};
-
-template<typename _Tp>
-struct _BinFunClos<_ValArray,_Constant,_Tp,_Tp>
- : _BinFunBase2<valarray<_Tp> > {
- typedef _BinFunBase2<valarray<_Tp> > _Base;
- typedef _Tp value_type;
-
- _BinFunClos (const valarray<_Tp>& __v, const _Tp& __t,
- _Tp __f(_Tp, _Tp))
- : _Base (__v, __t, __f) {}
-};
-
-template<typename _Tp>
-struct _BinFunClos<_Constant,_ValArray,_Tp,_Tp>
- : _BinFunBase1<valarray<_Tp> > {
- typedef _BinFunBase1<valarray<_Tp> > _Base;
- typedef _Tp value_type;
-
- _BinFunClos (const _Tp& __t, const valarray<_Tp>& __v,
- _Tp __f (_Tp, _Tp))
- : _Base (__t, __v, __f) {}
-};
-
-//
-// Apply function taking a value/const reference closure
-//
-
-template<typename _Dom, typename _Arg> class _FunBase {
-public:
- typedef typename _Dom::value_type value_type;
-
- _FunBase (const _Dom& __e, value_type __f(_Arg))
- : _M_expr (__e), _M_func (__f) {}
-
- value_type operator[] (size_t __i) const
- { return _M_func (_M_expr[__i]); }
- size_t size() const { return _M_expr.size ();}
-
-private:
- const _Dom& _M_expr;
- value_type (*_M_func)(_Arg);
-};
-
-template<class _Dom>
-struct _ValFunClos<_Expr,_Dom>
- : _FunBase<_Dom, typename _Dom::value_type> {
- typedef _FunBase<_Dom, typename _Dom::value_type> _Base;
- typedef typename _Base::value_type value_type;
- typedef value_type _Tp;
-
- _ValFunClos (const _Dom& __e, _Tp __f (_Tp)) : _Base (__e, __f) {}
-};
-
-template<typename _Tp>
-struct _ValFunClos<_ValArray,_Tp>
- : _FunBase<valarray<_Tp>, _Tp> {
- typedef _FunBase<valarray<_Tp>, _Tp> _Base;
- typedef _Tp value_type;
-
- _ValFunClos (const valarray<_Tp>& __v, _Tp __f(_Tp))
- : _Base (__v, __f) {}
-};
-
-template<class _Dom>
-struct _RefFunClos<_Expr,_Dom> :
- _FunBase<_Dom, const typename _Dom::value_type&> {
- typedef _FunBase<_Dom, const typename _Dom::value_type&> _Base;
- typedef typename _Base::value_type value_type;
- typedef value_type _Tp;
-
- _RefFunClos (const _Dom& __e, _Tp __f (const _Tp&))
- : _Base (__e, __f) {}
-};
-
-template<typename _Tp>
-struct _RefFunClos<_ValArray,_Tp>
- : _FunBase<valarray<_Tp>, const _Tp&> {
- typedef _FunBase<valarray<_Tp>, const _Tp&> _Base;
- typedef _Tp value_type;
-
- _RefFunClos (const valarray<_Tp>& __v, _Tp __f(const _Tp&))
- : _Base (__v, __f) {}
-};
-
-//
-// Unary expression closure.
-//
-
-template<template<class> class _Oper, typename _Arg>
-class _UnBase {
-public:
- typedef _Oper<typename _Arg::value_type> _Op;
- typedef typename _Op::result_type value_type;
-
- _UnBase (const _Arg& __e) : _M_expr(__e) {}
- value_type operator[] (size_t) const;
- size_t size () const { return _M_expr.size (); }
-
-private:
- const _Arg& _M_expr;
-};
-
-template<template<class> class _Oper, typename _Arg>
-inline typename _UnBase<_Oper, _Arg>::value_type
-_UnBase<_Oper, _Arg>::operator[] (size_t __i) const
-{ return _Op() (_M_expr[__i]); }
-
-template<template<class> class _Oper, class _Dom>
-struct _UnClos<_Oper, _Expr, _Dom> : _UnBase<_Oper, _Dom> {
- typedef _Dom _Arg;
- typedef _UnBase<_Oper, _Dom> _Base;
- typedef typename _Base::value_type value_type;
-
- _UnClos (const _Arg& __e) : _Base(__e) {}
-};
-
-template<template<class> class _Oper, typename _Tp>
-struct _UnClos<_Oper, _ValArray, _Tp> : _UnBase<_Oper, valarray<_Tp> > {
- typedef valarray<_Tp> _Arg;
- typedef _UnBase<_Oper, valarray<_Tp> > _Base;
- typedef typename _Base::value_type value_type;
-
- _UnClos (const _Arg& __e) : _Base(__e) {}
-};
-
-
-//
-// Binary expression closure.
-//
-
-template<template<class> class _Oper, typename _FirstArg, typename _SecondArg>
-class _BinBase {
-public:
- typedef _Oper<typename _FirstArg::value_type> _Op;
- typedef typename _Op::result_type value_type;
-
- _BinBase (const _FirstArg& __e1, const _SecondArg& __e2)
- : _M_expr1 (__e1), _M_expr2 (__e2) {}
- value_type operator[] (size_t) const;
- size_t size () const { return _M_expr1.size (); }
-
-private:
- const _FirstArg& _M_expr1;
- const _SecondArg& _M_expr2;
-};
-
-template<template<class> class _Oper, typename _FirstArg, typename _SecondArg>
-inline typename _BinBase<_Oper,_FirstArg,_SecondArg>::value_type
-_BinBase<_Oper,_FirstArg,_SecondArg>::operator[] (size_t __i) const
-{ return _Op() (_M_expr1[__i], _M_expr2[__i]); }
-
-
-template<template<class> class _Oper, class _Clos>
-class _BinBase2 {
-public:
- typedef typename _Clos::value_type _Vt;
- typedef _Oper<_Vt> _Op;
- typedef typename _Op::result_type value_type;
-
- _BinBase2 (const _Clos& __e, const _Vt& __t)
- : _M_expr1 (__e), _M_expr2 (__t) {}
- value_type operator[] (size_t) const;
- size_t size () const { return _M_expr1.size (); }
-
-private:
- const _Clos& _M_expr1;
- const _Vt& _M_expr2;
-};
-
-template<template<class> class _Oper, class _Clos>
-inline typename _BinBase2<_Oper,_Clos>::value_type
-_BinBase2<_Oper,_Clos>::operator[] (size_t __i) const
-{ return _Op() (_M_expr1[__i], _M_expr2); }
-
-
-template<template<class> class _Oper, class _Clos>
-class _BinBase1 {
-public:
- typedef typename _Clos::value_type _Vt;
- typedef _Oper<_Vt> _Op;
- typedef typename _Op::result_type value_type;
-
- _BinBase1 (const _Vt& __t, const _Clos& __e)
- : _M_expr1 (__t), _M_expr2 (__e) {}
- value_type operator[] (size_t) const;
- size_t size () const { return _M_expr2.size (); }
-
-private:
- const _Vt& _M_expr1;
- const _Clos& _M_expr2;
-};
-
-template<template<class> class _Oper, class _Clos>
-inline typename
-_BinBase1<_Oper,_Clos>::value_type
-_BinBase1<_Oper,_Clos>:: operator[] (size_t __i) const
-{ return _Op() (_M_expr1, _M_expr2[__i]); }
-
-
-template<template<class> class _Oper, class _Dom1, class _Dom2>
-struct _BinClos<_Oper, _Expr, _Expr, _Dom1, _Dom2>
- : _BinBase<_Oper,_Dom1,_Dom2> {
- typedef _BinBase<_Oper,_Dom1,_Dom2> _Base;
- typedef typename _Base::value_type value_type;
-
- _BinClos(const _Dom1& __e1, const _Dom2& __e2) : _Base(__e1, __e2) {}
-};
-
-template<template<class> class _Oper, typename _Tp>
-struct _BinClos<_Oper,_ValArray,_ValArray,_Tp,_Tp>
- : _BinBase<_Oper,valarray<_Tp>,valarray<_Tp> > {
- typedef _BinBase<_Oper,valarray<_Tp>,valarray<_Tp> > _Base;
- typedef _Tp value_type;
-
- _BinClos (const valarray<_Tp>& __v, const valarray<_Tp>& __w)
- : _Base (__v, __w) {}
-};
-
-template<template<class> class _Oper, class _Dom>
-struct _BinClos<_Oper,_Expr,_ValArray,_Dom,typename _Dom::value_type>
- : _BinBase<_Oper,_Dom,valarray<typename _Dom::value_type> > {
- typedef typename _Dom::value_type _Tp;
- typedef _BinBase<_Oper,_Dom,valarray<_Tp> > _Base;
- typedef typename _Base::value_type value_type;
-
- _BinClos(const _Dom& __e1, const valarray<_Tp>& __e2)
- : _Base (__e1, __e2) {}
-};
-
-template<template<class> class _Oper, class _Dom>
-struct _BinClos<_Oper,_ValArray,_Expr,typename _Dom::value_type,_Dom>
- : _BinBase<_Oper,valarray<typename _Dom::value_type>,_Dom> {
- typedef typename _Dom::value_type _Tp;
- typedef _BinBase<_Oper,valarray<_Tp>,_Dom> _Base;
- typedef typename _Base::value_type value_type;
-
- _BinClos (const valarray<_Tp>& __e1, const _Dom& __e2)
- : _Base (__e1, __e2) {}
-};
-
-template<template<class> class _Oper, class _Dom>
-struct _BinClos<_Oper,_Expr,_Constant,_Dom,typename _Dom::value_type>
- : _BinBase2<_Oper,_Dom> {
- typedef typename _Dom::value_type _Tp;
- typedef _BinBase2<_Oper,_Dom> _Base;
- typedef typename _Base::value_type value_type;
-
- _BinClos (const _Dom& __e1, const _Tp& __e2) : _Base (__e1, __e2) {}
-};
-
-template<template<class> class _Oper, class _Dom>
-struct _BinClos<_Oper,_Constant,_Expr,typename _Dom::value_type,_Dom>
- : _BinBase1<_Oper,_Dom> {
- typedef typename _Dom::value_type _Tp;
- typedef _BinBase1<_Oper,_Dom> _Base;
- typedef typename _Base::value_type value_type;
-
- _BinClos (const _Tp& __e1, const _Dom& __e2) : _Base (__e1, __e2) {}
-};
-
-template<template<class> class _Oper, typename _Tp>
-struct _BinClos<_Oper,_ValArray,_Constant,_Tp,_Tp>
- : _BinBase2<_Oper,valarray<_Tp> > {
- typedef _BinBase2<_Oper,valarray<_Tp> > _Base;
- typedef typename _Base::value_type value_type;
-
- _BinClos (const valarray<_Tp>& __v, const _Tp& __t)
- : _Base (__v, __t) {}
-};
-
-template<template<class> class _Oper, typename _Tp>
-struct _BinClos<_Oper,_Constant,_ValArray,_Tp,_Tp>
- : _BinBase1<_Oper,valarray<_Tp> > {
- typedef _BinBase1<_Oper,valarray<_Tp> > _Base;
- typedef typename _Base::value_type value_type;
-
- _BinClos (const _Tp& __t, const valarray<_Tp>& __v)
- : _Base (__t, __v) {}
-};
-
-
-//
-// slice_array closure.
-//
-template<typename _Dom> class _SBase {
-public:
- typedef typename _Dom::value_type value_type;
-
- _SBase (const _Dom& __e, const slice& __s)
- : _M_expr (__e), _M_slice (__s) {}
- value_type operator[] (size_t __i) const
- { return _M_expr[_M_slice.start () + __i * _M_slice.stride ()]; }
- size_t size() const { return _M_slice.size (); }
-
-private:
- const _Dom& _M_expr;
- const slice& _M_slice;
-};
-
-template<typename _Tp> class _SBase<_Array<_Tp> > {
-public:
- typedef _Tp value_type;
-
- _SBase (_Array<_Tp> __a, const slice& __s)
- : _M_array (__a._M_data+__s.start()), _M_size (__s.size()),
- _M_stride (__s.stride()) {}
- value_type operator[] (size_t __i) const
- { return _M_array._M_data[__i * _M_stride]; }
- size_t size() const { return _M_size; }
-
-private:
- const _Array<_Tp> _M_array;
- const size_t _M_size;
- const size_t _M_stride;
-};
-
-template<class _Dom> struct _SClos<_Expr,_Dom> : _SBase<_Dom> {
- typedef _SBase<_Dom> _Base;
- typedef typename _Base::value_type value_type;
-
- _SClos (const _Dom& __e, const slice& __s) : _Base (__e, __s) {}
-};
-
-template<typename _Tp>
-struct _SClos<_ValArray,_Tp> : _SBase<_Array<_Tp> > {
- typedef _SBase<_Array<_Tp> > _Base;
- typedef _Tp value_type;
-
- _SClos (_Array<_Tp> __a, const slice& __s) : _Base (__a, __s) {}
-};
-
-//
-// gslice_array closure.
-//
-template<class _Dom> class _GBase {
-public:
- typedef typename _Dom::value_type value_type;
-
- _GBase (const _Dom& __e, const valarray<size_t>& __i)
- : _M_expr (__e), _M_index(__i) {}
- value_type operator[] (size_t __i) const
- { return _M_expr[_M_index[__i]]; }
- size_t size () const { return _M_index.size(); }
-
-private:
- const _Dom& _M_expr;
- const valarray<size_t>& _M_index;
-};
-
-template<typename _Tp> class _GBase<_Array<_Tp> > {
-public:
- typedef _Tp value_type;
-
- _GBase (_Array<_Tp> __a, const valarray<size_t>& __i)
- : _M_array (__a), _M_index(__i) {}
- value_type operator[] (size_t __i) const
- { return _M_array._M_data[_M_index[__i]]; }
- size_t size () const { return _M_index.size(); }
-
-private:
- const _Array<_Tp> _M_array;
- const valarray<size_t>& _M_index;
-};
-
-template<class _Dom> struct _GClos<_Expr,_Dom> : _GBase<_Dom> {
- typedef _GBase<_Dom> _Base;
- typedef typename _Base::value_type value_type;
-
- _GClos (const _Dom& __e, const valarray<size_t>& __i)
- : _Base (__e, __i) {}
-};
-
-template<typename _Tp>
-struct _GClos<_ValArray,_Tp> : _GBase<_Array<_Tp> > {
- typedef _GBase<_Array<_Tp> > _Base;
- typedef typename _Base::value_type value_type;
-
- _GClos (_Array<_Tp> __a, const valarray<size_t>& __i)
- : _Base (__a, __i) {}
-};
-
-//
-// indirect_array closure
-//
-
-template<class _Dom> class _IBase {
-public:
- typedef typename _Dom::value_type value_type;
-
- _IBase (const _Dom& __e, const valarray<size_t>& __i)
- : _M_expr (__e), _M_index (__i) {}
- value_type operator[] (size_t __i) const
- { return _M_expr[_M_index[__i]]; }
- size_t size() const { return _M_index.size(); }
-
-private:
- const _Dom& _M_expr;
- const valarray<size_t>& _M_index;
-};
-
-template<class _Dom> struct _IClos<_Expr,_Dom> : _IBase<_Dom> {
- typedef _IBase<_Dom> _Base;
- typedef typename _Base::value_type value_type;
-
- _IClos (const _Dom& __e, const valarray<size_t>& __i)
- : _Base (__e, __i) {}
-};
-
-template<typename _Tp>
-struct _IClos<_ValArray,_Tp> : _IBase<valarray<_Tp> > {
- typedef _IBase<valarray<_Tp> > _Base;
- typedef _Tp value_type;
-
- _IClos (const valarray<_Tp>& __a, const valarray<size_t>& __i)
- : _Base (__a, __i) {}
-};
-
-//
-// class _Expr
-//
-template<class _Clos, typename _Tp> class _Expr {
-public:
- typedef _Tp value_type;
-
- _Expr (const _Clos&);
-
- const _Clos& operator() () const;
-
- value_type operator[] (size_t) const;
- valarray<value_type> operator[] (slice) const;
- valarray<value_type> operator[] (const gslice&) const;
- valarray<value_type> operator[] (const valarray<bool>&) const;
- valarray<value_type> operator[] (const valarray<size_t>&) const;
-
- _Expr<_UnClos<_Unary_plus,_Expr,_Clos>, value_type>
- operator+ () const;
-
- _Expr<_UnClos<negate,_Expr,_Clos>, value_type>
- operator- () const;
-
- _Expr<_UnClos<_Bitwise_not,_Expr,_Clos>, value_type>
- operator~ () const;
-
- _Expr<_UnClos<logical_not,_Expr,_Clos>, bool>
- operator! () const;
-
- size_t size () const;
- value_type sum () const;
-
- valarray<value_type> shift (int) const;
- valarray<value_type> cshift (int) const;
-// _Meta<_ApplyFunctionWithValue<_Expr>, value_type>
-// apply (value_type _M_func (value_type)) const;
-// _Meta<_ApplyFunctionWithConstRef<_Expr>, value_type>
-// apply (value_type _M_func (const value_type&)) const;
-
-private:
- const _Clos _M_closure;
-};
-
-template<class _Clos, typename _Tp>
-inline
-_Expr<_Clos,_Tp>::_Expr (const _Clos& __c) : _M_closure(__c) {}
-
-template<class _Clos, typename _Tp>
-inline const _Clos&
-_Expr<_Clos,_Tp>::operator() () const
-{ return _M_closure; }
-
-template<class _Clos, typename _Tp>
-inline _Tp
-_Expr<_Clos,_Tp>::operator[] (size_t __i) const
-{ return _M_closure[__i]; }
-
-template<class _Clos, typename _Tp>
-inline valarray<_Tp>
-_Expr<_Clos,_Tp>::operator[] (slice __s) const
-{ return _M_closure[__s]; }
-
-template<class _Clos, typename _Tp>
-inline valarray<_Tp>
-_Expr<_Clos,_Tp>::operator[] (const gslice& __gs) const
-{ return _M_closure[__gs]; }
-
-template<class _Clos, typename _Tp>
-inline valarray<_Tp>
-_Expr<_Clos,_Tp>::operator[] (const valarray<bool>& __m) const
-{ return _M_closure[__m]; }
-
-template<class _Clos, typename _Tp>
-inline valarray<_Tp>
-_Expr<_Clos,_Tp>::operator[] (const valarray<size_t>& __i) const
-{ return _M_closure[__i]; }
-
-template<class _Clos, typename _Tp>
-inline size_t
-_Expr<_Clos,_Tp>::size () const { return _M_closure.size (); }
-
-// XXX: replace this with a more robust summation algorithm.
-template<class _Clos, typename _Tp>
-inline _Tp
-_Expr<_Clos,_Tp>::sum () const
-{
- _Tp __s(_Tp());
- size_t __n (_M_closure.size ());
- for (size_t __i=0; __i<__n; ++__i) __s += _M_closure[__i];
- return __s;
-}
-
-template<class _Dom, typename _Tp>
-inline _Tp
-min (const _Expr<_Dom,_Tp>& __e)
-{
- size_t __s (__e.size ());
- _Tp __m (__e[0]);
- for (size_t __i=1; __i<__s; ++__i)
- if (__m > __e[__i]) __m = __e[__i];
- return __m;
-}
-
-template<class _Dom, typename _Tp>
-inline _Tp
-max (const _Expr<_Dom,_Tp>& __e)
-{
- size_t __s (__e.size());
- _Tp __m (__e[0]);
- for (size_t __i=1; __i<__s; ++__i)
- if (__m < __e[__i]) __m = __e[__i];
- return __m;
-}
-
-template<class _Dom, typename _Tp>
-inline _Expr<_UnClos<logical_not,_Expr,_Dom>, bool>
-_Expr<_Dom,_Tp>::operator! () const
-{
- typedef _UnClos<logical_not,_Expr,_Dom> _Closure;
- return _Expr<_Closure,_Tp> (_Closure(this->_M_closure));
-}
-
-#define _DEFINE_EXPR_UNARY_OPERATOR(_Op, _Name) \
-template<class _Dom, typename _Tp> \
-inline _Expr<_UnClos<_Name,_Expr,_Dom>,_Tp> \
-_Expr<_Dom,_Tp>::operator##_Op () const \
-{ \
- typedef _UnClos<_Name,_Expr,_Dom> _Closure; \
- return _Expr<_Closure,_Tp> (_Closure (this->_M_closure)); \
-}
-
- _DEFINE_EXPR_UNARY_OPERATOR(+, _Unary_plus)
- _DEFINE_EXPR_UNARY_OPERATOR(-, negate)
- _DEFINE_EXPR_UNARY_OPERATOR(~, _Bitwise_not)
-
-#undef _DEFINE_EXPR_UNARY_OPERATOR
-
-
-#define _DEFINE_EXPR_BINARY_OPERATOR(_Op, _Name) \
-template<class _Dom1, class _Dom2> \
-inline _Expr<_BinClos<_Name,_Expr,_Expr,_Dom1,_Dom2>, \
- typename _Name<typename _Dom1::value_type>::result_type> \
-operator##_Op (const _Expr<_Dom1,typename _Dom1::value_type>& __v, \
- const _Expr<_Dom2,typename _Dom2::value_type>& __w) \
-{ \
- typedef typename _Dom1::value_type _Arg; \
- typedef typename _Name<_Arg>::result_type _Value; \
- typedef _BinClos<_Name,_Expr,_Expr,_Dom1,_Dom2> _Closure; \
- return _Expr<_Closure,_Value> (_Closure (__v (), __w ())); \
-} \
- \
-template<class _Dom> \
-inline _Expr<_BinClos<_Name,_Expr,_Constant,_Dom,typename _Dom::value_type>, \
- typename _Name<typename _Dom::value_type>::result_type> \
-operator##_Op (const _Expr<_Dom,typename _Dom::value_type>& __v, \
- const typename _Dom::value_type& __t) \
-{ \
- typedef typename _Dom::value_type _Arg; \
- typedef typename _Name<_Arg>::result_type _Value; \
- typedef _BinClos<_Name,_Expr,_Constant,_Dom,_Arg> _Closure; \
- return _Expr<_Closure,_Value> (_Closure (__v (), __t)); \
-} \
- \
-template<class _Dom> \
-inline _Expr<_BinClos<_Name,_Constant,_Expr,typename _Dom::value_type,_Dom>, \
- typename _Name<typename _Dom::value_type>::result_type> \
-operator##_Op (const typename _Dom::value_type& __t, \
- const _Expr<_Dom,typename _Dom::value_type>& __v) \
-{ \
- typedef typename _Dom::value_type _Arg; \
- typedef typename _Name<_Arg>::result_type _Value; \
- typedef _BinClos<_Name,_Constant,_Expr,_Arg,_Dom> _Closure; \
- return _Expr<_Closure,_Value> (_Closure (__t, __v ())); \
-} \
- \
-template<class _Dom> \
-inline _Expr<_BinClos<_Name,_Expr,_ValArray,_Dom,typename _Dom::value_type>, \
- typename _Name<typename _Dom::value_type>::result_type> \
-operator##_Op (const _Expr<_Dom,typename _Dom::value_type>& __e, \
- const valarray<typename _Dom::value_type>& __v) \
-{ \
- typedef typename _Dom::value_type _Arg; \
- typedef typename _Name<_Arg>::result_type _Value; \
- typedef _BinClos<_Name,_Expr,_ValArray,_Dom,_Arg> _Closure; \
- return _Expr<_Closure,_Value> (_Closure (__e (), __v)); \
-} \
- \
-template<class _Dom> \
-inline _Expr<_BinClos<_Name,_ValArray,_Expr,typename _Dom::value_type,_Dom>, \
- typename _Name<typename _Dom::value_type>::result_type> \
-operator##_Op (const valarray<typename _Dom::value_type>& __v, \
- const _Expr<_Dom,typename _Dom::value_type>& __e) \
-{ \
- typedef typename _Dom::value_type _Tp; \
- typedef typename _Name<_Tp>::result_type _Value; \
- typedef _BinClos<_Name,_ValArray,_Expr,_Tp,_Dom> _Closure; \
- return _Expr<_Closure,_Value> (_Closure (__v, __e ())); \
-}
-
- _DEFINE_EXPR_BINARY_OPERATOR(+, plus)
- _DEFINE_EXPR_BINARY_OPERATOR(-, minus)
- _DEFINE_EXPR_BINARY_OPERATOR(*, multiplies)
- _DEFINE_EXPR_BINARY_OPERATOR(/, divides)
- _DEFINE_EXPR_BINARY_OPERATOR(%, modulus)
- _DEFINE_EXPR_BINARY_OPERATOR(^, _Bitwise_xor)
- _DEFINE_EXPR_BINARY_OPERATOR(&, _Bitwise_and)
- _DEFINE_EXPR_BINARY_OPERATOR(|, _Bitwise_or)
- _DEFINE_EXPR_BINARY_OPERATOR(<<, _Shift_left)
- _DEFINE_EXPR_BINARY_OPERATOR(>>, _Shift_right)
-
-#undef _DEFINE_EXPR_BINARY_OPERATOR
-
-#define _DEFINE_EXPR_RELATIONAL_OPERATOR(_Op, _Name) \
-template<class _Dom1, class _Dom2> \
-inline _Expr<_BinClos<_Name,_Expr,_Expr,_Dom1,_Dom2>, bool> \
-operator##_Op (const _Expr<_Dom1,typename _Dom1::value_type>& __v, \
- const _Expr<_Dom2,typename _Dom2::value_type>& __w) \
-{ \
- typedef typename _Dom1::value_type _Arg; \
- typedef _BinClos<_Name,_Expr,_Expr,_Dom1,_Dom2> _Closure; \
- return _Expr<_Closure,bool> (_Closure (__v (), __w ())); \
-} \
- \
-template<class _Dom> \
-inline _Expr<_BinClos<_Name,_Expr,_Constant,_Dom,typename _Dom::value_type>, \
- bool> \
-operator##_Op (const _Expr<_Dom,typename _Dom::value_type>& __v, \
- const typename _Dom::value_type& __t) \
-{ \
- typedef typename _Dom::value_type _Arg; \
- typedef _BinClos<_Name,_Expr,_Constant,_Dom,_Arg> _Closure; \
- return _Expr<_Closure,bool> (_Closure (__v (), __t)); \
-} \
- \
-template<class _Dom> \
-inline _Expr<_BinClos<_Name,_Constant,_Expr,typename _Dom::value_type,_Dom>, \
- bool> \
-operator##_Op (const typename _Dom::value_type& __t, \
- const _Expr<_Dom,typename _Dom::value_type>& __v) \
-{ \
- typedef typename _Dom::value_type _Arg; \
- typedef _BinClos<_Name,_Constant,_Expr,_Arg,_Dom> _Closure; \
- return _Expr<_Closure,bool> (_Closure (__t, __v ())); \
-} \
- \
-template<class _Dom> \
-inline _Expr<_BinClos<_Name,_Expr,_ValArray,_Dom,typename _Dom::value_type>, \
- bool> \
-operator##_Op (const _Expr<_Dom,typename _Dom::value_type>& __e, \
- const valarray<typename _Dom::value_type>& __v) \
-{ \
- typedef typename _Dom::value_type _Tp; \
- typedef _BinClos<_Name,_Expr,_ValArray,_Dom,_Tp> _Closure; \
- return _Expr<_Closure,bool> (_Closure (__e (), __v)); \
-} \
- \
-template<class _Dom> \
-inline _Expr<_BinClos<_Name,_ValArray,_Expr,typename _Dom::value_type,_Dom>, \
- bool> \
-operator##_Op (const valarray<typename _Dom::value_type>& __v, \
- const _Expr<_Dom,typename _Dom::value_type>& __e) \
-{ \
- typedef typename _Dom::value_type _Tp; \
- typedef _BinClos<_Name,_ValArray,_Expr,_Tp,_Dom> _Closure; \
- return _Expr<_Closure,bool> (_Closure (__v, __e ())); \
-}
-
- _DEFINE_EXPR_RELATIONAL_OPERATOR(&&, logical_and)
- _DEFINE_EXPR_RELATIONAL_OPERATOR(||, logical_or)
- _DEFINE_EXPR_RELATIONAL_OPERATOR(==, equal_to)
- _DEFINE_EXPR_RELATIONAL_OPERATOR(!=, not_equal_to)
- _DEFINE_EXPR_RELATIONAL_OPERATOR(<, less)
- _DEFINE_EXPR_RELATIONAL_OPERATOR(>, greater)
- _DEFINE_EXPR_RELATIONAL_OPERATOR(<=, less_equal)
- _DEFINE_EXPR_RELATIONAL_OPERATOR(>=, greater_equal)
-
-#undef _DEFINE_EXPR_RELATIONAL_OPERATOR
-
-
-
-#define _DEFINE_EXPR_UNARY_FUNCTION(_Name) \
-template<class _Dom> \
-inline _Expr<_UnFunClos<_Expr,_Dom>,typename _Dom::value_type> \
-_Name(const _Expr<_Dom,typename _Dom::value_type>& __e) \
-{ \
- typedef typename _Dom::value_type _Tp; \
- typedef _UnFunClos<_Expr,_Dom> _Closure; \
- return _Expr<_Closure,_Tp>(_Closure(__e(), (_Tp(*)(_Tp))(&_Name))); \
-} \
- \
-template<typename _Tp> \
-inline _Expr<_UnFunClos<_ValArray,_Tp>,_Tp> \
-_Name(const valarray<_Tp>& __v) \
-{ \
- typedef _UnFunClos<_ValArray,_Tp> _Closure; \
- return _Expr<_Closure,_Tp> (_Closure (__v, (_Tp(*)(_Tp))(&_Name))); \
-}
-
-
- _DEFINE_EXPR_UNARY_FUNCTION(abs)
- _DEFINE_EXPR_UNARY_FUNCTION(cos)
- _DEFINE_EXPR_UNARY_FUNCTION(acos)
- _DEFINE_EXPR_UNARY_FUNCTION(cosh)
- _DEFINE_EXPR_UNARY_FUNCTION(sin)
- _DEFINE_EXPR_UNARY_FUNCTION(asin)
- _DEFINE_EXPR_UNARY_FUNCTION(sinh)
- _DEFINE_EXPR_UNARY_FUNCTION(tan)
- _DEFINE_EXPR_UNARY_FUNCTION(tanh)
- _DEFINE_EXPR_UNARY_FUNCTION(atan)
- _DEFINE_EXPR_UNARY_FUNCTION(exp)
- _DEFINE_EXPR_UNARY_FUNCTION(log)
- _DEFINE_EXPR_UNARY_FUNCTION(log10)
- _DEFINE_EXPR_UNARY_FUNCTION(sqrt)
-
-#undef _DEFINE_EXPR_UNARY_FUNCTION
-
-
-#define _DEFINE_EXPR_BINARY_FUNCTION(_Name) \
-template<class _Dom1, class _Dom2> \
-inline _Expr<_BinFunClos<_Expr,_Expr,_Dom1,_Dom2>,typename _Dom1::value_type>\
-_Name (const _Expr<_Dom1,typename _Dom1::value_type>& __e1, \
- const _Expr<_Dom2,typename _Dom2::value_type>& __e2) \
-{ \
- typedef typename _Dom1::value_type _Tp; \
- typedef _BinFunClos<_Expr,_Expr,_Dom1,_Dom2> _Closure; \
- return _Expr<_Closure,_Tp> \
- (_Closure (__e1 (), __e2 (), (_Tp(*)(_Tp, _Tp))(&_Name))); \
-} \
- \
-template<class _Dom> \
-inline _Expr<_BinFunClos<_Expr,_ValArray,_Dom,typename _Dom::value_type>, \
- typename _Dom::value_type> \
-_Name (const _Expr<_Dom,typename _Dom::value_type>& __e, \
- const valarray<typename _Dom::value_type>& __v) \
-{ \
- typedef typename _Dom::value_type _Tp; \
- typedef _BinFunClos<_Expr,_ValArray,_Dom,_Tp> _Closure; \
- return _Expr<_Closure,_Tp> \
- (_Closure (__e (), __v, (_Tp(*)(_Tp, _Tp))(&_Name))); \
-} \
- \
-template<class _Dom> \
-inline _Expr<_BinFunClos<_ValArray,_Expr,typename _Dom::value_type,_Dom>, \
- typename _Dom::value_type> \
-_Name (const valarray<typename _Dom::valarray>& __v, \
- const _Expr<_Dom,typename _Dom::value_type>& __e) \
-{ \
- typedef typename _Dom::value_type _Tp; \
- typedef _BinFunClos<_ValArray,_Expr,_Tp,_Dom> _Closure; \
- return _Expr<_Closure,_Tp> \
- (_Closure (__v, __e (), (_Tp(*)(_Tp, _Tp))(&_Name))); \
-} \
- \
-template<class _Dom> \
-inline _Expr<_BinFunClos<_Expr,_Constant,_Dom,typename _Dom::value_type>, \
- typename _Dom::value_type> \
-_Name (const _Expr<_Dom, typename _Dom::value_type>& __e, \
- const typename _Dom::value_type& __t) \
-{ \
- typedef typename _Dom::value_type _Tp; \
- typedef _BinFunClos<_Expr,_Constant,_Dom,_Tp> _Closure; \
- return _Expr<_Closure,_Tp> \
- (_Closure (__e (), __t, (_Tp(*)(_Tp, _Tp))(&_Name))); \
-} \
- \
-template<class _Dom> \
-inline _Expr<_BinFunClos<_Constant,_Expr,typename _Dom::value_type,_Dom>, \
- typename _Dom::value_type> \
-_Name (const typename _Dom::value_type& __t, \
- const _Expr<_Dom,typename _Dom::value_type>& __e) \
-{ \
- typedef typename _Dom::value_type _Tp; \
- typedef _BinFunClos<_Constant,_Expr,_Tp,_Dom> _Closure; \
- return _Expr<_Closure,_Tp> \
- (_Closure (__t, __e (), (_Tp(*)(_Tp, _Tp))(&_Name))); \
-} \
- \
-template<typename _Tp> \
-inline _Expr<_BinFunClos<_ValArray,_ValArray,_Tp,_Tp>, _Tp> \
-_Name (const valarray<_Tp>& __v, const valarray<_Tp>& __w) \
-{ \
- typedef _BinFunClos<_ValArray,_ValArray,_Tp,_Tp> _Closure; \
- return _Expr<_Closure,_Tp> \
- (_Closure (__v, __w, (_Tp(*)(_Tp,_Tp))(&_Name))); \
-} \
- \
-template<typename _Tp> \
-inline _Expr<_BinFunClos<_ValArray,_Constant,_Tp,_Tp>,_Tp> \
-_Name (const valarray<_Tp>& __v, const _Tp& __t) \
-{ \
- typedef _BinFunClos<_ValArray,_Constant,_Tp,_Tp> _Closure; \
- return _Expr<_Closure,_Tp> \
- (_Closure (__v, __t, (_Tp(*)(_Tp,_Tp))(&_Name))); \
-} \
- \
-template<typename _Tp> \
-inline _Expr<_BinFunClos<_Constant,_ValArray,_Tp,_Tp>,_Tp> \
-_Name (const _Tp& __t, const valarray<_Tp>& __v) \
-{ \
- typedef _BinFunClos<_Constant,_ValArray,_Tp,_Tp> _Closure; \
- return _Expr<_Closure,_Tp> \
- (_Closure (__t, __v, (_Tp(*)(_Tp,_Tp))(&_Name))); \
-}
-
-_DEFINE_EXPR_BINARY_FUNCTION(atan2)
-_DEFINE_EXPR_BINARY_FUNCTION(pow)
-
-#undef _DEFINE_EXPR_BINARY_FUNCTION
-
-#endif // _CPP_VALARRAY_META_H
-
-// Local Variables:
-// mode:c++
-// End:
diff --git a/contrib/libstdc++/stdexcept b/contrib/libstdc++/stdexcept
deleted file mode 100644
index 69e9627d5778..000000000000
--- a/contrib/libstdc++/stdexcept
+++ /dev/null
@@ -1,97 +0,0 @@
-// Methods for Exception Support for -*- C++ -*-
-// Copyright (C) 1994, 1995, 1997 Free Software Foundation
-
-// This file is part of the GNU ANSI C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-// As a special exception, if you link this library with files
-// compiled with a GNU compiler to produce an executable, this does not cause
-// the resulting executable to be covered by the GNU General Public License.
-// This exception does not however invalidate any other reasons why
-// the executable file might be covered by the GNU General Public License.
-
-// Written by Mike Stump based upon the specification in the 20 September 1994
-// C++ working paper, ANSI document X3J16/94-0158.
-
-#ifndef __STDEXCEPT__
-#define __STDEXCEPT__
-
-#ifdef __GNUG__
-#pragma interface "stdexcept"
-#endif
-
-#include <exception>
-#include <string>
-
-extern "C++" {
-
-namespace std {
-
-class logic_error : public exception {
- string _what;
-public:
- logic_error(const string& what_arg): _what (what_arg) { }
- virtual const char* what () const { return _what.c_str (); }
-};
-
-class domain_error : public logic_error {
-public:
- domain_error (const string& what_arg): logic_error (what_arg) { }
-};
-
-class invalid_argument : public logic_error {
-public:
- invalid_argument (const string& what_arg): logic_error (what_arg) { }
-};
-
-class length_error : public logic_error {
-public:
- length_error (const string& what_arg): logic_error (what_arg) { }
-};
-
-class out_of_range : public logic_error {
-public:
- out_of_range (const string& what_arg): logic_error (what_arg) { }
-};
-
-class runtime_error : public exception {
- string _what;
-public:
- runtime_error(const string& what_arg): _what (what_arg) { }
- virtual const char* what () const { return _what.c_str (); }
-protected:
- runtime_error(): exception () { }
-};
-
-class range_error : public runtime_error {
-public:
- range_error (const string& what_arg): runtime_error (what_arg) { }
-};
-
-class overflow_error : public runtime_error {
-public:
- overflow_error (const string& what_arg): runtime_error (what_arg) { }
-};
-
-class underflow_error : public runtime_error {
-public:
- underflow_error (const string& what_arg): runtime_error (what_arg) { }
-};
-
-} // namespace std
-
-} // extern "C++"
-
-#endif
diff --git a/contrib/libstdc++/stdexcepti.cc b/contrib/libstdc++/stdexcepti.cc
deleted file mode 100644
index 9c02c71f4976..000000000000
--- a/contrib/libstdc++/stdexcepti.cc
+++ /dev/null
@@ -1,21 +0,0 @@
-// Implementation file for Exception Support for -*- C++ -*-
-// This file is part of the GNU ANSI C++ Library.
-
-#ifdef __GNUG__
-#pragma implementation "stdexcept"
-#endif
-
-#include <stdexcept>
-
-// Entry points for string.
-
-void
-__out_of_range (const char *s)
-{
- throw std::out_of_range (s);
-}
-
-void __length_error (const char *s)
-{
- throw std::length_error (s);
-}
diff --git a/contrib/libstdc++/stl.h b/contrib/libstdc++/stl.h
deleted file mode 100644
index 4b270742c9cf..000000000000
--- a/contrib/libstdc++/stl.h
+++ /dev/null
@@ -1,15 +0,0 @@
-// -*- C++ -*- compatibility header.
-// This file is part of the GNU ANSI C++ Library.
-
-#include <algorithm>
-#include <deque>
-#include <functional>
-#include <iterator>
-#include <list>
-#include <map>
-#include <memory>
-#include <numeric>
-#include <set>
-#include <stack>
-#include <utility>
-#include <vector>
diff --git a/contrib/libstdc++/stl/ChangeLog b/contrib/libstdc++/stl/ChangeLog
deleted file mode 100644
index 14d56ac3e625..000000000000
--- a/contrib/libstdc++/stl/ChangeLog
+++ /dev/null
@@ -1,381 +0,0 @@
-Fri Mar 16 12:46:19 GMT 2001 Bernd Schmidt (bernds@redhat.com)
-
- * gcc-2.95.3 Released.
-
-1999-11-06 Martin v. Löwis <loewis@informatik.hu-berlin.de>
-
- * bitset (class bitset): Declare reference as our friend.
- * bitset: Include limits.h.
-
-Sun Oct 24 23:54:10 PDT 1999 Jeff Law (law@cygnus.com)
-
- * gcc-2.95.2 Released.
-
-Mon Aug 16 01:29:24 PDT 1999 Jeff Law (law@cygnus.com)
-
- * gcc-2.95.1 Released.
-
-Sun Aug 8 21:06:16 1999 Alexandre Oliva <oliva@dcc.unicamp.br>
-
- * pthread_alloc: Solaris' ctype.h defines _U to 01; use _Up as
- template parameter instead.
-
-Wed Jul 28 21:39:31 PDT 1999 Jeff Law (law@cygnus.com)
-
- * gcc-2.95 Released.
-
-Sun Jul 25 23:40:51 PDT 1999 Jeff Law (law@cygnus.com)
-
- * gcc-2.95 Released.
-
-1999-07-11 Martin v. Löwis (loewis@informatik.hu-berlin.de)
-
- * stl_function.h (bind1st, bind2nd): Rename __opr to __oper,
- as __opr is used internally by egcs.
- * stl_numeric.h (__power, power): Likewise.
-
-1999-06-18 Martin von Löwis <loewis@informatik.hu-berlin.de>
-
- * stl_queue.h: Rename _M_c to c, and _M_comp to comp.
-
-1999-06-17 Alexandre Oliva <oliva@dcc.unicamp.br>
-
- * stl_algo.h (transform): Rename __opr to __oper, as __opr is used
- internally by egcs.
- Reported by Harri Porten <porten@tu-harburg.de>
-
-1999-05-17 Mark Kettenis <kettenis@gnu.org>
-
- * stl_config.h: Only define __STL_PTHREADS with GLIBC >= 2 for
- Linux.
-
-Mon May 17 03:33:47 1999 Mumit Khan <khan@xraylith.wisc.edu>
-
- * stl_config.h (__CYGWIN__): Cygwin newlib RTL lacks drand48.
-
-1999-05-07 Ulrich Drepper <drepper@cygnus.com>
-
- * stl_alloc.h: Make it possible to compile with __USE_MALLOC.
-
-Tue Apr 13 00:32:57 1999 Mumit Khan <khan@xraylith.wisc.edu>
-
- * stl_config.h (__MINGW32__): Mingw32 RTL lacks drand48.
-
-Sun Apr 11 23:48:30 1999 Jeffrey A Law (law@cygnus.com)
-
- * bitset: Re-install Alexandre's lost patch from 1998-11-27.
-
-1999-01-20 Ulrich Drepper <drepper@cygnus.com>
-
- * stl_construct.h (__destroy_aux): Use != instead of < for
- ForwardIterator comparison.
- Patch by jmaurer@menuett.rhein-main.de (Jens Maurer).
-
-1999-01-20 Mark Mitchell <mark@markmitchell.com>
-
- * stl_config.h (__STL_USE_NAMESPACES): Define.
-
-1998-11-27 Alexandre Oliva <oliva@dcc.unicamp.br>
-
- * bitset: Explicitly convert basic_string<...>::npos to size_t in
- default argument to constructor, to avoid parse error at `>'.
- (__STL_EXPLICIT_FUNCTION_TMPL_ARGS): Replace #if with #ifdef.
-
-1998-11-01 Mark Mitchell <mark@markmitchell.com>
-
- * stl_alloc.h (default_alloc_template::_S_free_list): Don't
- qualify _NFREELISTS.
-
-1998-10-11 Mark Mitchell <mark@markmitchell.com>
-
- * stl_config.h (__SGI_STL_USE_AUTO_PTR_CONVERSIONS): Define.
- * memory (auto_ptr::operator auto_ptr_ref<_Tp1>): Fix typo.
- (auto_ptr::operator auto_ptr<_Tp1>): Add missing
- semicolon.
-
-1998-09-03 Jason Merrill <jason@yorick.cygnus.com>
-
- * stl_config.h: Define __STL_HAS_WCHAR_T,
- __STL_MEMBER_TEMPLATE_CLASSES, __STL_HAS_NAMESPACES,
- __STL_NO_NAMESPACES and __STL_LONG_LONG.
-
-1998-09-02 Jason Merrill <jason@yorick.cygnus.com>
-
- * algorithm alloc.h defalloc.h hash_map.h hash_set.h iterator
- memory pthread_alloc pthread_alloc.h rope ropeimpl.h stl_algo.h
- stl_algobase.h stl_alloc.h stl_bvector.h stl_config.h
- stl_construct.h stl_deque.h stl_function.h stl_hash_fun.h
- stl_hash_map.h stl_hash_set.h stl_hashtable.h stl_heap.h
- stl_iterator.h stl_list.h stl_map.h stl_multimap.h stl_multiset.h
- stl_numeric.h stl_pair.h stl_queue.h stl_raw_storage_iter.h
- stl_relops.h stl_rope.h stl_set.h stl_slist.h stl_stack.h
- stl_tempbuf.h stl_tree.h stl_uninitialized.h stl_vector.h
- tempbuf.h type_traits.h: Update to SGI STL 3.11.
-
-Fri Jul 10 15:20:09 1998 Klaus-Georg Adams <Klaus-Georg.Adams@chemie.uni-karlsruhe.de>
-
- * stl_tempbuf.h (temporary_buffer): Add missing typename.
- * type_traits.h: update comments.
-
-Sun Jun 28 00:49:42 1998 Jeffrey A Law (law@cygnus.com)
-
- * stl_config.h (__STL_PTHREADS): Don't define for glibc 2 if
- _G_USING_THUNKS is not defined.
-
-1998-04-07 18:32 Ulrich Drepper <drepper@cygnus.com>
-
- * stl_hashtable.h (__stl_prime_list): Mark last two numbers as
- unsigned long since they are otherwise too large for long int on
- 32bit machines.
-
-Fri Feb 20 16:15:05 1998 H.J. Lu (hjl@gnu.org)
- Jason Merrill <jason@yorick.cygnus.com>
-
- * ropeimpl.h: Check __STL_PTHREADS instead of _PTHREADS.
- * stl_alloc.h: Ditto.
- * stl_config.h: Ditto.
- * stl_rope.h: Ditto.
-
- * stl_config.h: include <_G_config.h> if __GNUG__ is defined.
- (__STL_PTHREADS): Defined if _PTHREADS is defined or
- __GLIBC__ >= 2.
-
-Tue Jan 27 12:01:25 1998 Jason Merrill <jason@yorick.cygnus.com>
-
- * stl_algo.h (__lg): Fix for n == 0.
-
-Sat Nov 8 00:45:17 1997 Jason Merrill <jason@yorick.cygnus.com>
-
- * stl_hash_set.h (swap): Fix typo.
-
-Fri Nov 7 10:27:40 1997 Jason Merrill <jason@yorick.cygnus.com>
-
- * stl_hashtable.h: Fix typo.
-
-Thu Nov 6 11:19:09 1997 Jason Merrill <jason@yorick.cygnus.com>
-
- * stl_algo.h, stl_algobase.h, stl_bvector.h,
- stl_deque.h: Update to October 28 SGI release.
-
-Sun Nov 2 12:14:56 1997 Jason Merrill <jason@yorick.cygnus.com>
-
- * algo.h, algobase.h, alloc.h, bvector.h, defalloc.h, deque.h,
- function.h, hash_map.h, hash_set.h, hashtable.h, heap.h, iterator.h,
- list.h, map.h, multimap.h, multiset.h, pair.h, pthread_alloc.h,
- rope.h, ropeimpl.h, set.h, slist.h, stack.h, stl_config.h, tempbuf.h,
- tree.h, type_traits.h, vector.h: Update to October 27 SGI snapshot.
- * algorithm, deque, functional, hash_map, hash_set, iterator, list,
- map, memory, numeric, pthread_alloc, queue, rope, set, slist, stack,
- stl_algo.h, stl_algobase.h, stl_alloc.h, stl_bvector.h,
- stl_construct.h, stl_deque.h, stl_function.h, stl_hash_fun.h,
- stl_hash_map.h, stl_hash_set.h, stl_hashtable.h, stl_heap.h,
- stl_iterator.h, stl_list.h, stl_map.h, stl_multimap.h, stl_multiset.h,
- stl_numeric.h, stl_pair.h, stl_queue.h, stl_raw_storage_iter.h,
- stl_relops.h, stl_rope.h, stl_set.h, stl_slist.h, stl_stack.h,
- stl_tempbuf.h, stl_tree.h, stl_uninitialized.h, stl_vector.h,
- utility, vector: New files in October 27 SGI snapshot.
-
-Fri Oct 17 19:07:42 1997 Jason Merrill <jason@yorick.cygnus.com>
-
- * tree.h, vector.h: Fix accidental divergence from SGI release.
-
-Tue Sep 9 19:47:28 1997 Jason Merrill <jason@yorick.cygnus.com>
-
- * algo.h, algobase.h, alloc.h, bvector.h, deque.h, hashtable.h,
- iterator.h, list.h, rope.h, ropeimpl.h, slist.h, stl_config.h,
- tree.h, vector.h: Update To September 8 SGI release.
-
-Tue Sep 9 17:38:47 1997 Mark Mitchell <mmitchell@usa.net>
-
- * stl_config.h (__STL_MEMBER_TEMPLATES): Enable.
-
-Tue Aug 5 17:06:01 1997 Jason Merrill <jason@yorick.cygnus.com>
-
- * deque.h, function.h, hashtable.h, list.h, rope.h, ropeimpl.h,
- tree.h: Update to July 31 SGI release.
-
-Fri Jul 18 10:06:56 1997 Jason Merrill <jason@yorick.cygnus.com>
-
- * algo.h, defalloc.h, hashtable.h, rope.h, ropeimpl.h, slist.h:
- Update to June 30 SGI release.
-
-Fri Jul 04 02:17:15 1997 Ulrich Drepper <drepper@cygnus.com>
-
- * tree.h (rb_tree): Reverse order of member initializations
- to prevent warnings.
-
-Sun Jun 15 18:17:21 1997 Jason Merrill <jason@yorick.cygnus.com>
-
- * *.h: Update to 6/13 SGI release.
-
-Fri May 23 10:56:18 1997 Jason Merrill <jason@yorick.cygnus.com>
-
- * stl_config.h: Add support for exceptions with g++.
-
- * *.h: Update to 5/8 SGI release.
-
-Thu Apr 24 19:00:23 1997 Jason Merrill <jason@yorick.cygnus.com>
-
- * *.h: Update to 3/24 SGI release.
-
-Wed Feb 19 18:19:18 1997 Jason Merrill <jason@yorick.cygnus.com>
-
- * *.h: Update to 2/18 SGI release.
-
- * bool.h: Lose.
-
-Mon Feb 10 16:33:23 1997 Jason Merrill <jason@yorick.cygnus.com>
-
- * alloc.h: Don't define __USE_MALLOC for g++.
- * bool.h: Lose g++ case.
-
- * *.h: Update to 2/4 SGI release.
-
-Mon Jan 13 14:39:16 1997 Jason Merrill <jason@yorick.cygnus.com>
-
- * *.h: Update to 1/8 SGI release.
-
-Mon Sep 30 17:56:43 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * alloc.h (__unlock): Never use __lock_release.
-
-Fri Sep 27 19:03:06 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * alloc.h (__default_alloc_template): lock is a friend.
-
-Thu Sep 19 20:10:37 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- Propagate these changes to new STL code:
- * tree.h: Rearrange member initializers in rb_tree constructors.
- * vector.h (insert): Cast iterator difference to size_type to
- avoid warning.
-
- * *.h: Update to SGI snapshot (fixed).
- * *.c, Makefile.in, configure.in: Removed.
-
-Sat Sep 14 09:43:06 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * deque.h, list.h, tree.h: Remove kludge obsoleted by new
- overloading code.
-
-Sat Aug 10 14:59:50 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * tempbuf.cc (__stl_temp_buffer): Align like a pointer.
-
-Wed Jun 26 13:00:44 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * iterator.h: Add default template parameters.
-
-Wed Apr 24 10:45:22 1996 Doug Evans <dje@blues.cygnus.com>
-
- * Makefile.in (tempbuf.o,random.o): Add rules for SunOS VPATH.
-
-Fri Apr 5 17:52:31 1996 Per Bothner <bothner@kalessin.cygnus.com>
-
- * configure.in (EXTRA_MOSTLYCLEAN): New, to remove stl.list.
-
-Fri Mar 22 14:58:30 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- Propagate these changes to new STL code:
- * tree.h: Rearrange member initializers in rb_tree constructors.
- * vector.h (insert): Cast iterator difference to size_type to
- avoid warning.
-
-Sun Mar 10 07:49:03 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * deque.h (distance_type): Add overload for g++.
- From Joe Buck.
-
-Thu Feb 22 14:07:12 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * bool.h: Revert.
- * algo.h bvector.h deque.h function.h iterator.h list.h
- pair.h stack.h tree.h vector.h: Wrap #include <bool.h> with
- #ifndef __GNUG__.
- * defalloc.h list.h deque.h tree.h: Use __GNUG__ to control
- workarounds.
-
-Wed Feb 21 17:13:02 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * bool.h (TRUE, FALSE): Define for people expecting the bool.h
- from libg++. Is this a good idea?
-
-Tue Feb 20 18:40:02 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * algo.h bool.h bvector.h defalloc.h deque.h function.h heap.h
- iterator.h list.h map.h pair.h random.cc stack.h tree.c tree.h
- vector.h: Revert to HP release with workarounds for missing
- overloading functionality.
- * Makefile.in (STL_OBJECTS): Remove tree.o.
-
-Thu Nov 9 17:05:23 1995 Jason Merrill <jason@yorick.cygnus.com>
-
- * algo.h algobase.h bvector.h defalloc.h deque.h function.h heap.h
- iterator.h list.h map.h multimap.h multiset.h pair.h projectn.h
- set.h stack.h tempbuf.h tree.h vector.h: Wrap #include <bool.h>
- with #ifndef __GNUG__.
-
-Thu Nov 2 17:05:44 1995 Jason Merrill <jason@yorick.cygnus.com>
-
- * deque.h (deque<T>::insert): Fix merge typo.
- * vector.h (value_type): Lose.
-
-Thu Nov 2 14:33:47 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * algo.h, algobase.h, deque.h, function.h, list.h, pair.h, random.cc:
- Merge in Oct 31 1995 release from HP.
-
-Fri Aug 11 17:11:12 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * list.h: Avoid duplicate construction and destruction of list_nodes.
- Patch from Klamer Schutte <klamer@ph.tn.tudelft.nl>.
-
-Fri Aug 11 16:45:18 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * algo.h, algobase.h, deque.h: Merged in Jul 12 1995 release from HP.
-
-Mon Jun 5 18:38:56 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * Makefile.in (stl.list): Depend on stamp-picdir.
-
-Wed May 17 02:30:47 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * tree.h: Rearrange member initializers in rb_tree constructors.
-
- * Update to HP's February 7, 1995 release.
-
-Fri May 5 10:45:31 1995 Mike Stump <mrs@cygnus.com>
-
- * random.cc (seed): Move `for' decl out of `for' statement.
-
-Wed Apr 26 13:09:16 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * configure.in (XCXXINCLUDES): Rename.
-
-Wed Mar 29 19:24:56 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * tree.h (insert): Return a value.
-
- * vector.h (insert): Cast iterator difference to size_type to
- avoid warning.
-
-Sun Feb 12 09:12:17 1995 Mike Stump <mrs@cygnus.com>
-
- * tree.h (rb_tree::max_size): Add definition when using GNU
- workaround.
-
-Thu Jan 12 01:37:42 1995 deanm@medulla.LABS.TEK.COM (Dean Messing)
-
- * configure.in (LIBDIR): Set to yes.
-
-Fri Dec 30 18:26:20 1994 Mike Stump <mrs@cygnus.com>
-
- * iterator.h: Add default template parameters where possible.
-
-Fri Dec 30 16:29:39 1994 Mike Stump <mrs@cygnus.com>
-
- * algo.h: Change rand to __rand to fix make check on linux systems.
-
-Tue Nov 29 15:30:30 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * Initial check-in, based on HP's October 21, 1994.
diff --git a/contrib/libstdc++/stl/README b/contrib/libstdc++/stl/README
deleted file mode 100644
index c319c08c7a45..000000000000
--- a/contrib/libstdc++/stl/README
+++ /dev/null
@@ -1,13 +0,0 @@
-This directory contains an SGI release of the C++ Standard Template
-Library, slightly modified to work with g++.
-
-Note that this is based on a pre-Draft Standard for C++.
-Things are likely to change. For example, the header file names
-are very likely to change. The Allocator interface will change. Etc, etc.
-CYGNUS MAKES NO COMMITTMENT (yet) TO SUPPORT BACKWARD COMPATIBILITY FOR STL.
-
-For examples of things that should work, look in the ../tests directory.
-
-DOCUMENTATION:
-See http://www.sgi.com/Technology/STL/ or http://www.dinkumware.com/
-on the World-Wide Web.
diff --git a/contrib/libstdc++/stl/algo.h b/contrib/libstdc++/stl/algo.h
deleted file mode 100644
index 1707868c7c43..000000000000
--- a/contrib/libstdc++/stl/algo.h
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- * Copyright (c) 1996,1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-#ifndef __SGI_STL_ALGO_H
-#define __SGI_STL_ALGO_H
-
-#include <algobase.h>
-#include <tempbuf.h>
-#include <stl_algo.h>
-#include <stl_numeric.h>
-
-#ifdef __STL_USE_NAMESPACES
-
-// Names from <stl_algo.h>
-using __STD::for_each;
-using __STD::find;
-using __STD::find_if;
-using __STD::adjacent_find;
-using __STD::count;
-using __STD::count_if;
-using __STD::search;
-using __STD::search_n;
-using __STD::swap_ranges;
-using __STD::transform;
-using __STD::replace;
-using __STD::replace_if;
-using __STD::replace_copy;
-using __STD::replace_copy_if;
-using __STD::generate;
-using __STD::generate_n;
-using __STD::remove;
-using __STD::remove_if;
-using __STD::remove_copy;
-using __STD::remove_copy_if;
-using __STD::unique;
-using __STD::unique_copy;
-using __STD::reverse;
-using __STD::reverse_copy;
-using __STD::rotate;
-using __STD::rotate_copy;
-using __STD::random_shuffle;
-using __STD::random_sample;
-using __STD::random_sample_n;
-using __STD::partition;
-using __STD::stable_partition;
-using __STD::sort;
-using __STD::stable_sort;
-using __STD::partial_sort;
-using __STD::partial_sort_copy;
-using __STD::nth_element;
-using __STD::lower_bound;
-using __STD::upper_bound;
-using __STD::equal_range;
-using __STD::binary_search;
-using __STD::merge;
-using __STD::inplace_merge;
-using __STD::includes;
-using __STD::set_union;
-using __STD::set_intersection;
-using __STD::set_difference;
-using __STD::set_symmetric_difference;
-using __STD::min_element;
-using __STD::max_element;
-using __STD::next_permutation;
-using __STD::prev_permutation;
-using __STD::find_first_of;
-using __STD::find_end;
-using __STD::is_sorted;
-using __STD::is_heap;
-
-// Names from stl_heap.h
-using __STD::push_heap;
-using __STD::pop_heap;
-using __STD::make_heap;
-using __STD::sort_heap;
-
-// Names from <stl_numeric.h>
-using __STD::accumulate;
-using __STD::inner_product;
-using __STD::partial_sum;
-using __STD::adjacent_difference;
-using __STD::power;
-using __STD::iota;
-
-#endif /* __STL_USE_NAMESPACES */
-
-#endif /* __SGI_STL_ALGO_H */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/algobase.h b/contrib/libstdc++/stl/algobase.h
deleted file mode 100644
index f35e7af4a976..000000000000
--- a/contrib/libstdc++/stl/algobase.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- * Copyright (c) 1996,1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-#ifndef __SGI_STL_ALGOBASE_H
-#define __SGI_STL_ALGOBASE_H
-
-#ifndef __SGI_STL_PAIR_H
-#include <pair.h>
-#endif
-#ifndef __SGI_STL_ITERATOR_H
-#include <iterator.h>
-#endif
-#ifndef __SGI_STL_INTERNAL_ALGOBASE_H
-#include <stl_algobase.h>
-#endif
-#ifndef __SGI_STL_INTERNAL_UNINITIALIZED_H
-#include <stl_uninitialized.h>
-#endif
-
-#ifdef __STL_USE_NAMESPACES
-
-// Names from stl_algobase.h
-using __STD::iter_swap;
-using __STD::swap;
-using __STD::min;
-using __STD::max;
-using __STD::copy;
-using __STD::copy_backward;
-using __STD::copy_n;
-using __STD::fill;
-using __STD::fill_n;
-using __STD::mismatch;
-using __STD::equal;
-using __STD::lexicographical_compare;
-using __STD::lexicographical_compare_3way;
-
-// Names from stl_uninitialized.h
-using __STD::uninitialized_copy;
-using __STD::uninitialized_copy_n;
-using __STD::uninitialized_fill;
-using __STD::uninitialized_fill_n;
-
-#endif /* __STL_USE_NAMESPACES */
-
-#endif /* __SGI_STL_ALGOBASE_H */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/algorithm b/contrib/libstdc++/stl/algorithm
deleted file mode 100644
index 1ba584f06d4a..000000000000
--- a/contrib/libstdc++/stl/algorithm
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- * Copyright (c) 1996,1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-#ifndef __SGI_STL_ALGORITHM
-#define __SGI_STL_ALGORITHM
-
-#include <stl_algobase.h>
-#include <stl_construct.h>
-#include <stl_uninitialized.h>
-#include <stl_tempbuf.h>
-#include <stl_algo.h>
-
-#endif /* __SGI_STL_ALGORITHM */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/alloc.h b/contrib/libstdc++/stl/alloc.h
deleted file mode 100644
index f99a862316ee..000000000000
--- a/contrib/libstdc++/stl/alloc.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (c) 1996-1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-#ifndef __SGI_STL_ALLOC_H
-#define __SGI_STL_ALLOC_H
-
-#ifndef __STL_CONFIG_H
-#include <stl_config.h>
-#endif
-#ifndef __SGI_STL_INTERNAL_ALLOC_H
-#include <stl_alloc.h>
-#endif
-
-#ifdef __STL_USE_NAMESPACES
-
-using __STD::__malloc_alloc_template;
-using __STD::malloc_alloc;
-using __STD::simple_alloc;
-using __STD::debug_alloc;
-using __STD::__default_alloc_template;
-using __STD::alloc;
-using __STD::single_client_alloc;
-#ifdef __STL_STATIC_TEMPLATE_MEMBER_BUG
-using __STD::__malloc_alloc_oom_handler;
-#endif /* __STL_STATIC_TEMPLATE_MEMBER_BUG */
-#ifdef __STL_USE_STD_ALLOCATORS
-using __STD::allocator;
-#endif /* __STL_USE_STD_ALLOCATORS */
-
-#endif /* __STL_USE_NAMESPACES */
-
-#endif /* __SGI_STL_ALLOC_H */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/bitset b/contrib/libstdc++/stl/bitset
deleted file mode 100644
index 8b4f8b1a0f80..000000000000
--- a/contrib/libstdc++/stl/bitset
+++ /dev/null
@@ -1,1066 +0,0 @@
-/*
- * Copyright (c) 1998
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-#ifndef __SGI_STL_BITSET
-#define __SGI_STL_BITSET
-
-// This implementation of bitset<> has a second template parameter,
-// _WordT, which defaults to unsigned long. *YOU SHOULD NOT USE
-// THIS FEATURE*. It is experimental, and it may be removed in
-// future releases.
-
-// A bitset of size N, using words of type _WordT, will have
-// N % (sizeof(_WordT) * CHAR_BIT) unused bits. (They are the high-
-// order bits in the highest word.) It is a class invariant
-// of class bitset<> that those unused bits are always zero.
-
-// Most of the actual code isn't contained in bitset<> itself, but in the
-// base class _Base_bitset. The base class works with whole words, not with
-// individual bits. This allows us to specialize _Base_bitset for the
-// important special case where the bitset is only a single word.
-
-// The C++ standard does not define the precise semantics of operator[].
-// In this implementation the const version of operator[] is equivalent
-// to test(), except that it does no range checking. The non-const version
-// returns a reference to a bit, again without doing any range checking.
-
-
-#include <stddef.h> // for size_t
-#include <limits.h> // for CHAR_BIT
-#include <string>
-#include <stdexcept> // for invalid_argument, out_of_range, overflow_error
-#include <iostream.h> // for istream, ostream
-
-#define __BITS_PER_WORDT(__wt) (CHAR_BIT*sizeof(__wt))
-#define __BITSET_WORDS(__n,__wt) \
- ((__n) < 1 ? 1 : ((__n) + __BITS_PER_WORDT(__wt) - 1)/__BITS_PER_WORDT(__wt))
-
-__STL_BEGIN_NAMESPACE
-
-#if defined(__sgi) && !defined(__GNUC__) && (_MIPS_SIM != _MIPS_SIM_ABI32)
-#pragma set woff 1209
-#endif
-
-// structure to aid in counting bits
-template<bool __dummy>
-struct _Bit_count {
- static unsigned char _S_bit_count[256];
-};
-
-// Mapping from 8 bit unsigned integers to the index of the first one
-// bit:
-template<bool __dummy>
-struct _First_one {
- static unsigned char _S_first_one[256];
-};
-
-//
-// Base class: general case.
-//
-
-template<size_t _Nw, class _WordT>
-struct _Base_bitset {
- _WordT _M_w[_Nw]; // 0 is the least significant word.
-
- _Base_bitset( void ) { _M_do_reset(); }
-
- _Base_bitset(unsigned long __val);
-
- static size_t _S_whichword( size_t __pos ) {
- return __pos / __BITS_PER_WORDT(_WordT);
- }
- static size_t _S_whichbyte( size_t __pos ) {
- return (__pos % __BITS_PER_WORDT(_WordT)) / CHAR_BIT;
- }
- static size_t _S_whichbit( size_t __pos ) {
- return __pos % __BITS_PER_WORDT(_WordT);
- }
- static _WordT _S_maskbit( size_t __pos ) {
- return (static_cast<_WordT>(1)) << _S_whichbit(__pos);
- }
-
- _WordT& _M_getword(size_t __pos) { return _M_w[_S_whichword(__pos)]; }
- _WordT _M_getword(size_t __pos) const { return _M_w[_S_whichword(__pos)]; }
-
- _WordT& _M_hiword() { return _M_w[_Nw - 1]; }
- _WordT _M_hiword() const { return _M_w[_Nw - 1]; }
-
- void _M_do_and(const _Base_bitset<_Nw,_WordT>& __x) {
- for ( size_t __i = 0; __i < _Nw; __i++ ) {
- _M_w[__i] &= __x._M_w[__i];
- }
- }
-
- void _M_do_or(const _Base_bitset<_Nw,_WordT>& __x) {
- for ( size_t __i = 0; __i < _Nw; __i++ ) {
- _M_w[__i] |= __x._M_w[__i];
- }
- }
-
- void _M_do_xor(const _Base_bitset<_Nw,_WordT>& __x) {
- for ( size_t __i = 0; __i < _Nw; __i++ ) {
- _M_w[__i] ^= __x._M_w[__i];
- }
- }
-
- void _M_do_left_shift(size_t __shift);
-
- void _M_do_right_shift(size_t __shift);
-
- void _M_do_flip() {
- for ( size_t __i = 0; __i < _Nw; __i++ ) {
- _M_w[__i] = ~_M_w[__i];
- }
- }
-
- void _M_do_set() {
- for ( size_t __i = 0; __i < _Nw; __i++ ) {
- _M_w[__i] = ~static_cast<_WordT>(0);
- }
- }
-
- void _M_do_reset() {
- for ( size_t __i = 0; __i < _Nw; __i++ ) {
- _M_w[__i] = 0;
- }
- }
-
- bool _M_is_equal(const _Base_bitset<_Nw,_WordT>& __x) const {
- for (size_t __i = 0; __i < _Nw; ++__i) {
- if (_M_w[__i] != __x._M_w[__i])
- return false;
- }
- return true;
- }
-
- bool _M_is_any() const {
- for ( size_t __i = 0; __i < __BITSET_WORDS(_Nw,_WordT); __i++ ) {
- if ( _M_w[__i] != static_cast<_WordT>(0) )
- return true;
- }
- return false;
- }
-
- size_t _M_do_count() const {
- size_t __result = 0;
- const unsigned char* __byte_ptr = (const unsigned char*)_M_w;
- const unsigned char* __end_ptr = (const unsigned char*)(_M_w+_Nw);
-
- while ( __byte_ptr < __end_ptr ) {
- __result += _Bit_count<true>::_S_bit_count[*__byte_ptr];
- __byte_ptr++;
- }
- return __result;
- }
-
- unsigned long _M_do_to_ulong() const;
-
- // find first "on" bit
- size_t _M_do_find_first(size_t __not_found) const;
-
- // find the next "on" bit that follows "prev"
- size_t _M_do_find_next(size_t __prev, size_t __not_found) const;
-};
-
-//
-// Definitions of non-inline functions from _Base_bitset.
-//
-
-template<size_t _Nw, class _WordT>
-_Base_bitset<_Nw, _WordT>::_Base_bitset(unsigned long __val)
-{
- _M_do_reset();
- const size_t __n = min(sizeof(unsigned long)*CHAR_BIT,
- __BITS_PER_WORDT(_WordT)*_Nw);
- for(size_t __i = 0; __i < __n; ++__i, __val >>= 1)
- if ( __val & 0x1 )
- _M_getword(__i) |= _S_maskbit(__i);
-}
-
-template<size_t _Nw, class _WordT>
-void _Base_bitset<_Nw, _WordT>::_M_do_left_shift(size_t __shift)
-{
- if (__shift != 0) {
- const size_t __wshift = __shift / __BITS_PER_WORDT(_WordT);
- const size_t __offset = __shift % __BITS_PER_WORDT(_WordT);
- const size_t __sub_offset = __BITS_PER_WORDT(_WordT) - __offset;
- size_t __n = _Nw - 1;
- for ( ; __n > __wshift; --__n)
- _M_w[__n] = (_M_w[__n - __wshift] << __offset) |
- (_M_w[__n - __wshift - 1] >> __sub_offset);
- if (__n == __wshift)
- _M_w[__n] = _M_w[0] << __offset;
- for (size_t __n1 = 0; __n1 < __n; ++__n1)
- _M_w[__n1] = static_cast<_WordT>(0);
- }
-}
-
-template<size_t _Nw, class _WordT>
-void _Base_bitset<_Nw, _WordT>::_M_do_right_shift(size_t __shift)
-{
- if (__shift != 0) {
- const size_t __wshift = __shift / __BITS_PER_WORDT(_WordT);
- const size_t __offset = __shift % __BITS_PER_WORDT(_WordT);
- const size_t __sub_offset = __BITS_PER_WORDT(_WordT) - __offset;
- const size_t __limit = _Nw - __wshift - 1;
- size_t __n = 0;
- for ( ; __n < __limit; ++__n)
- _M_w[__n] = (_M_w[__n + __wshift] >> __offset) |
- (_M_w[__n + __wshift + 1] << __sub_offset);
- _M_w[__limit] = _M_w[_Nw-1] >> __offset;
- for (size_t __n1 = __limit + 1; __n1 < _Nw; ++__n1)
- _M_w[__n1] = static_cast<_WordT>(0);
- }
-}
-
-template<size_t _Nw, class _WordT>
-unsigned long _Base_bitset<_Nw, _WordT>::_M_do_to_ulong() const
-{
- const overflow_error __overflow("bitset");
-
- if (sizeof(_WordT) >= sizeof(unsigned long)) {
- for (size_t __i = 1; __i < _Nw; ++__i)
- if (_M_w[__i])
- __STL_THROW(__overflow);
-
- const _WordT __mask = static_cast<_WordT>(static_cast<unsigned long>(-1));
- if (_M_w[0] & ~__mask)
- __STL_THROW(__overflow);
-
- return static_cast<unsigned long>(_M_w[0] & __mask);
- }
- else { // sizeof(_WordT) < sizeof(unsigned long).
- const size_t __nwords =
- (sizeof(unsigned long) + sizeof(_WordT) - 1) / sizeof(_WordT);
-
- size_t __min_nwords = __nwords;
- if (_Nw > __nwords) {
- for (size_t __i = __nwords; __i < _Nw; ++__i)
- if (_M_w[__i])
- __STL_THROW(__overflow);
- }
- else
- __min_nwords = _Nw;
-
- // If unsigned long is 8 bytes and _WordT is 6 bytes, then an unsigned
- // long consists of all of one word plus 2 bytes from another word.
- const size_t __part = sizeof(unsigned long) % sizeof(_WordT);
-
- if (__part != 0 && __nwords <= _Nw &&
- (_M_w[__min_nwords - 1] >> ((sizeof(_WordT) - __part) * CHAR_BIT)) != 0)
- __STL_THROW(__overflow);
-
- unsigned long __result = 0;
- for (size_t __i = 0; __i < __min_nwords; ++__i) {
- __result |= static_cast<unsigned long>(
- _M_w[__i]) << (__i * sizeof(_WordT) * CHAR_BIT);
- }
- return __result;
- }
-} // End _M_do_to_ulong
-
-template<size_t _Nw, class _WordT>
-size_t _Base_bitset<_Nw, _WordT>::_M_do_find_first(size_t __not_found) const
-{
- for ( size_t __i = 0; __i < _Nw; __i++ ) {
- _WordT __thisword = _M_w[__i];
- if ( __thisword != static_cast<_WordT>(0) ) {
- // find byte within word
- for ( size_t __j = 0; __j < sizeof(_WordT); __j++ ) {
- unsigned char __this_byte
- = static_cast<unsigned char>(__thisword & (~(unsigned char)0));
- if ( __this_byte )
- return __i*__BITS_PER_WORDT(_WordT) + __j*CHAR_BIT +
- _First_one<true>::_S_first_one[__this_byte];
-
- __thisword >>= CHAR_BIT;
- }
- }
- }
- // not found, so return an indication of failure.
- return __not_found;
-}
-
-template<size_t _Nw, class _WordT>
-size_t
-_Base_bitset<_Nw, _WordT>::_M_do_find_next(size_t __prev,
- size_t __not_found) const
-{
- // make bound inclusive
- ++__prev;
-
- // check out of bounds
- if ( __prev >= _Nw * __BITS_PER_WORDT(_WordT) )
- return __not_found;
-
- // search first word
- size_t __i = _S_whichword(__prev);
- _WordT __thisword = _M_w[__i];
-
- // mask off bits below bound
- __thisword &= (~static_cast<_WordT>(0)) << _S_whichbit(__prev);
-
- if ( __thisword != static_cast<_WordT>(0) ) {
- // find byte within word
- // get first byte into place
- __thisword >>= _S_whichbyte(__prev) * CHAR_BIT;
- for ( size_t __j = _S_whichbyte(__prev); __j < sizeof(_WordT); __j++ ) {
- unsigned char __this_byte
- = static_cast<unsigned char>(__thisword & (~(unsigned char)0));
- if ( __this_byte )
- return __i*__BITS_PER_WORDT(_WordT) + __j*CHAR_BIT +
- _First_one<true>::_S_first_one[__this_byte];
-
- __thisword >>= CHAR_BIT;
- }
- }
-
- // check subsequent words
- __i++;
- for ( ; __i < _Nw; __i++ ) {
- _WordT __thisword = _M_w[__i];
- if ( __thisword != static_cast<_WordT>(0) ) {
- // find byte within word
- for ( size_t __j = 0; __j < sizeof(_WordT); __j++ ) {
- unsigned char __this_byte
- = static_cast<unsigned char>(__thisword & (~(unsigned char)0));
- if ( __this_byte )
- return __i*__BITS_PER_WORDT(_WordT) + __j*CHAR_BIT +
- _First_one<true>::_S_first_one[__this_byte];
-
- __thisword >>= CHAR_BIT;
- }
- }
- }
-
- // not found, so return an indication of failure.
- return __not_found;
-} // end _M_do_find_next
-
-
-// ------------------------------------------------------------
-
-//
-// Base class: specialization for a single word.
-//
-
-template<class _WordT>
-struct _Base_bitset<1, _WordT> {
- _WordT _M_w;
-
- _Base_bitset( void ) { _M_do_reset(); }
-
- _Base_bitset(unsigned long __val);
-
- static size_t _S_whichword( size_t __pos ) {
- return __pos / __BITS_PER_WORDT(_WordT);
- }
- static size_t _S_whichbyte( size_t __pos ) {
- return (__pos % __BITS_PER_WORDT(_WordT)) / CHAR_BIT;
- }
- static size_t _S_whichbit( size_t __pos ) {
- return __pos % __BITS_PER_WORDT(_WordT);
- }
- static _WordT _S_maskbit( size_t __pos ) {
- return (static_cast<_WordT>(1)) << _S_whichbit(__pos);
- }
-
- _WordT& _M_getword(size_t) { return _M_w; }
- _WordT _M_getword(size_t) const { return _M_w; }
-
- _WordT& _M_hiword() { return _M_w; }
- _WordT _M_hiword() const { return _M_w; }
-
- void _M_do_and(const _Base_bitset<1,_WordT>& __x) { _M_w &= __x._M_w; }
- void _M_do_or(const _Base_bitset<1,_WordT>& __x) { _M_w |= __x._M_w; }
- void _M_do_xor(const _Base_bitset<1,_WordT>& __x) { _M_w ^= __x._M_w; }
- void _M_do_left_shift(size_t __shift) { _M_w <<= __shift; }
- void _M_do_right_shift(size_t __shift) { _M_w >>= __shift; }
- void _M_do_flip() { _M_w = ~_M_w; }
- void _M_do_set() { _M_w = ~static_cast<_WordT>(0); }
- void _M_do_reset() { _M_w = 0; }
-
- bool _M_is_equal(const _Base_bitset<1,_WordT>& __x) const {
- return _M_w == __x._M_w;
- }
- bool _M_is_any() const {
- return _M_w != 0;
- }
-
- size_t _M_do_count() const {
- size_t __result = 0;
- const unsigned char* __byte_ptr = (const unsigned char*)&_M_w;
- const unsigned char* __end_ptr = ((const unsigned char*)&_M_w)+sizeof(_M_w);
- while ( __byte_ptr < __end_ptr ) {
- __result += _Bit_count<true>::_S_bit_count[*__byte_ptr];
- __byte_ptr++;
- }
- return __result;
- }
-
- unsigned long _M_do_to_ulong() const {
- if (sizeof(_WordT) <= sizeof(unsigned long))
- return static_cast<unsigned long>(_M_w);
- else {
- const _WordT __mask = static_cast<_WordT>(static_cast<unsigned long>(-1));
- if (_M_w & ~__mask)
- __STL_THROW(overflow_error("bitset"));
- return static_cast<unsigned long>(_M_w);
- }
- }
-
- size_t _M_do_find_first(size_t __not_found) const;
-
- // find the next "on" bit that follows "prev"
- size_t _M_do_find_next(size_t __prev, size_t __not_found) const;
-
-};
-
-//
-// Definitions of non-inline functions from the single-word version of
-// _Base_bitset.
-//
-
-template <class _WordT>
-_Base_bitset<1, _WordT>::_Base_bitset(unsigned long __val)
-{
- _M_do_reset();
- const size_t __n = min(sizeof(unsigned long)*CHAR_BIT,
- __BITS_PER_WORDT(_WordT)*_Nw);
- for(size_t __i = 0; __i < __n; ++__i, __val >>= 1)
- if ( __val & 0x1 )
- _M_w |= _S_maskbit(__i);
-}
-
-template <class _WordT>
-size_t _Base_bitset<1, _WordT>::_M_do_find_first(size_t __not_found) const
-{
- _WordT __thisword = _M_w;
-
- if ( __thisword != static_cast<_WordT>(0) ) {
- // find byte within word
- for ( size_t __j = 0; __j < sizeof(_WordT); __j++ ) {
- unsigned char __this_byte
- = static_cast<unsigned char>(__thisword & (~(unsigned char)0));
- if ( __this_byte )
- return __j*CHAR_BIT + _First_one<true>::_S_first_one[__this_byte];
-
- __thisword >>= CHAR_BIT;
- }
- }
- // not found, so return a value that indicates failure.
- return __not_found;
-}
-
-template <class _WordT>
-size_t
-_Base_bitset<1, _WordT>::_M_do_find_next(size_t __prev,
- size_t __not_found ) const
-{
- // make bound inclusive
- ++__prev;
-
- // check out of bounds
- if ( __prev >= __BITS_PER_WORDT(_WordT) )
- return __not_found;
-
- // search first (and only) word
- _WordT __thisword = _M_w;
-
- // mask off bits below bound
- __thisword &= (~static_cast<_WordT>(0)) << _S_whichbit(__prev);
-
- if ( __thisword != static_cast<_WordT>(0) ) {
- // find byte within word
- // get first byte into place
- __thisword >>= _S_whichbyte(__prev) * CHAR_BIT;
- for ( size_t __j = _S_whichbyte(__prev); __j < sizeof(_WordT); __j++ ) {
- unsigned char __this_byte
- = static_cast<unsigned char>(__thisword & (~(unsigned char)0));
- if ( __this_byte )
- return __j*CHAR_BIT + _First_one<true>::_S_first_one[__this_byte];
-
- __thisword >>= CHAR_BIT;
- }
- }
-
- // not found, so return a value that indicates failure.
- return __not_found;
-} // end _M_do_find_next
-
-//
-// One last specialization: _M_do_to_ulong() and the constructor from
-// unsigned long are very simple if the bitset consists of a single
-// word of type unsigned long.
-//
-
-template<>
-inline unsigned long
-_Base_bitset<1, unsigned long>::_M_do_to_ulong() const { return _M_w; }
-
-template<>
-inline _Base_bitset<1, unsigned long>::_Base_bitset(unsigned long __val) {
- _M_w = __val;
-}
-
-
-// ------------------------------------------------------------
-// Helper class to zero out the unused high-order bits in the highest word.
-
-template <class _WordT, size_t _Extrabits> struct _Sanitize {
- static void _M_do_sanitize(_WordT& __val)
- { __val &= ~((~static_cast<_WordT>(0)) << _Extrabits); }
-};
-
-template <class _WordT> struct _Sanitize<_WordT, 0> {
- static void _M_do_sanitize(_WordT) {}
-};
-
-// ------------------------------------------------------------
-// Class bitset.
-// _Nb may be any nonzero number of type size_t.
-// Type _WordT may be any unsigned integral type.
-
-template<size_t _Nb, class _WordT = unsigned long>
-class bitset : private _Base_bitset<__BITSET_WORDS(_Nb,_WordT), _WordT>
-{
-private:
- typedef _Base_bitset<__BITSET_WORDS(_Nb,_WordT), _WordT> _Base;
-
- // Import base's protected interface. Necessary because of new template
- // name resolution rules.
- using _Base::_S_whichword;
- using _Base::_S_whichbyte;
- using _Base::_S_whichbit;
- using _Base::_S_maskbit;
- using _Base::_M_getword;
- using _Base::_M_hiword;
- using _Base::_M_do_and;
- using _Base::_M_do_or;
- using _Base::_M_do_xor;
- using _Base::_M_do_left_shift;
- using _Base::_M_do_right_shift;
- using _Base::_M_do_flip;
- using _Base::_M_do_set;
- using _Base::_M_do_reset;
- using _Base::_M_is_equal;
- using _Base::_M_is_any;
- using _Base::_M_do_count;
- using _Base::_M_do_to_ulong;
- using _Base::_M_do_find_first;
- using _Base::_M_do_find_next;
-
-private:
- void _M_do_sanitize() {
- _Sanitize<_WordT,_Nb%__BITS_PER_WORDT(_WordT) >
- ::_M_do_sanitize(_M_hiword());
- }
-
-public:
-
- // bit reference:
- class reference;
- friend class reference;
- class reference {
- friend class bitset;
-
- _WordT *_M_wp;
- size_t _M_bpos;
-
- // left undefined
- reference();
-
- reference( bitset& __b, size_t __pos ) {
- _M_wp = &__b._M_getword(__pos);
- _M_bpos = _S_whichbit(__pos);
- }
-
- public:
- ~reference() {}
-
- // for b[i] = __x;
- reference& operator=(bool __x) {
- if ( __x )
- *_M_wp |= _S_maskbit(_M_bpos);
- else
- *_M_wp &= ~_S_maskbit(_M_bpos);
-
- return *this;
- }
-
- // for b[i] = b[__j];
- reference& operator=(const reference& __j) {
- if ( (*(__j._M_wp) & _S_maskbit(__j._M_bpos)) )
- *_M_wp |= _S_maskbit(_M_bpos);
- else
- *_M_wp &= ~_S_maskbit(_M_bpos);
-
- return *this;
- }
-
- // flips the bit
- bool operator~() const { return (*(_M_wp) & _S_maskbit(_M_bpos)) == 0; }
-
- // for __x = b[i];
- operator bool() const { return (*(_M_wp) & _S_maskbit(_M_bpos)) != 0; }
-
- // for b[i].flip();
- reference& flip() {
- *_M_wp ^= _S_maskbit(_M_bpos);
- return *this;
- }
- };
-
- // 23.3.5.1 constructors:
- bitset() {}
- bitset(unsigned long __val) :
- _Base_bitset<__BITSET_WORDS(_Nb,_WordT), _WordT>(__val) {}
-
- template<class _CharT, class _Traits, class _Alloc>
- explicit bitset(const basic_string<_CharT,_Traits,_Alloc>& __s,
- size_t __pos = 0,
- size_t __n = size_t(basic_string<_CharT,_Traits,_Alloc>::npos))
- : _Base()
- {
- if (__pos > __s.size())
- __STL_THROW(out_of_range("bitset"));
- _M_copy_from_string(__s, __pos, __n);
- }
-
- // 23.3.5.2 bitset operations:
- bitset<_Nb,_WordT>& operator&=(const bitset<_Nb,_WordT>& __rhs) {
- _M_do_and(__rhs);
- return *this;
- }
-
- bitset<_Nb,_WordT>& operator|=(const bitset<_Nb,_WordT>& __rhs) {
- _M_do_or(__rhs);
- return *this;
- }
-
- bitset<_Nb,_WordT>& operator^=(const bitset<_Nb,_WordT>& __rhs) {
- _M_do_xor(__rhs);
- return *this;
- }
-
- bitset<_Nb,_WordT>& operator<<=(size_t __pos) {
- _M_do_left_shift(__pos);
- _M_do_sanitize();
- return *this;
- }
-
- bitset<_Nb,_WordT>& operator>>=(size_t __pos) {
- _M_do_right_shift(__pos);
- _M_do_sanitize();
- return *this;
- }
-
- //
- // Extension:
- // Versions of single-bit set, reset, flip, test with no range checking.
- //
-
- bitset<_Nb,_WordT>& _Unchecked_set(size_t __pos) {
- _M_getword(__pos) |= _S_maskbit(__pos);
- return *this;
- }
-
- bitset<_Nb,_WordT>& _Unchecked_set(size_t __pos, int __val) {
- if (__val)
- _M_getword(__pos) |= _S_maskbit(__pos);
- else
- _M_getword(__pos) &= ~_S_maskbit(__pos);
-
- return *this;
- }
-
- bitset<_Nb,_WordT>& _Unchecked_reset(size_t __pos) {
- _M_getword(__pos) &= ~_S_maskbit(__pos);
- return *this;
- }
-
- bitset<_Nb,_WordT>& _Unchecked_flip(size_t __pos) {
- _M_getword(__pos) ^= _S_maskbit(__pos);
- return *this;
- }
-
- bool _Unchecked_test(size_t __pos) const {
- return (_M_getword(__pos) & _S_maskbit(__pos)) != static_cast<_WordT>(0);
- }
-
- // Set, reset, and flip.
-
- bitset<_Nb,_WordT>& set() {
- _M_do_set();
- _M_do_sanitize();
- return *this;
- }
-
- bitset<_Nb,_WordT>& set(size_t __pos) {
- if (__pos >= _Nb)
- __STL_THROW(out_of_range("bitset"));
-
- return _Unchecked_set(__pos);
- }
-
- bitset<_Nb,_WordT>& set(size_t __pos, int __val) {
- if (__pos >= _Nb)
- __STL_THROW(out_of_range("bitset"));
-
- return _Unchecked_set(__pos, __val);
- }
-
- bitset<_Nb,_WordT>& reset() {
- _M_do_reset();
- return *this;
- }
-
- bitset<_Nb,_WordT>& reset(size_t __pos) {
- if (__pos >= _Nb)
- __STL_THROW(out_of_range("bitset"));
-
- return _Unchecked_reset(__pos);
- }
-
- bitset<_Nb,_WordT>& flip() {
- _M_do_flip();
- _M_do_sanitize();
- return *this;
- }
-
- bitset<_Nb,_WordT>& flip(size_t __pos) {
- if (__pos >= _Nb)
- __STL_THROW(out_of_range("bitset"));
-
- return _Unchecked_flip(__pos);
- }
-
- bitset<_Nb,_WordT> operator~() const {
- return bitset<_Nb,_WordT>(*this).flip();
- }
-
- // element access:
- //for b[i];
- reference operator[](size_t __pos) { return reference(*this,__pos); }
- bool operator[](size_t __pos) const { return _Unchecked_test(__pos); }
-
- unsigned long to_ulong() const { return _M_do_to_ulong(); }
-
-#ifdef __STL_EXPLICIT_FUNCTION_TMPL_ARGS
- template <class _CharT, class _Traits, class _Alloc>
- basic_string<_CharT, _Traits, _Alloc> to_string() const {
- basic_string<_CharT, _Traits, _Alloc> __result;
- _M_copy_to_string(__result);
- return __result;
- }
-#endif /* __STL_EXPLICIT_FUNCTION_TMPL_ARGS */
-
- // Helper functions for string operations.
- template<class _CharT, class _Traits, class _Alloc>
- void _M_copy_from_string(const basic_string<_CharT,_Traits,_Alloc>& __s,
- size_t,
- size_t);
-
- // Helper functions for string operations.
- template<class _CharT, class _Traits, class _Alloc>
- void _M_copy_to_string(basic_string<_CharT,_Traits,_Alloc>&) const;
-
- size_t count() const { return _M_do_count(); }
-
- size_t size() const { return _Nb; }
-
- bool operator==(const bitset<_Nb,_WordT>& __rhs) const {
- return _M_is_equal(__rhs);
- }
- bool operator!=(const bitset<_Nb,_WordT>& __rhs) const {
- return !_M_is_equal(__rhs);
- }
-
- bool test(size_t __pos) const {
- if (__pos > _Nb)
- __STL_THROW(out_of_range("bitset"));
-
- return _Unchecked_test(__pos);
- }
-
- bool any() const { return _M_is_any(); }
- bool none() const { return !_M_is_any(); }
-
- bitset<_Nb,_WordT> operator<<(size_t __pos) const
- { return bitset<_Nb,_WordT>(*this) <<= __pos; }
- bitset<_Nb,_WordT> operator>>(size_t __pos) const
- { return bitset<_Nb,_WordT>(*this) >>= __pos; }
-
- //
- // EXTENSIONS: bit-find operations. These operations are
- // experimental, and are subject to change or removal in future
- // versions.
- //
-
- // find the index of the first "on" bit
- size_t _Find_first() const
- { return _M_do_find_first(_Nb); }
-
- // find the index of the next "on" bit after prev
- size_t _Find_next( size_t __prev ) const
- { return _M_do_find_next(__prev, _Nb); }
-
-};
-
-//
-// Definitions of non-inline member functions.
-//
-
-template <size_t _Nb, class _WordT>
-template<class _CharT, class _Traits, class _Alloc>
-void bitset<_Nb, _WordT>
- ::_M_copy_from_string(const basic_string<_CharT,_Traits,_Alloc>& __s,
- size_t __pos,
- size_t __n)
-{
- reset();
- const size_t __nbits = min(_Nb, min(__n, __s.size() - __pos));
- for (size_t __i = 0; __i < __nbits; ++__i) {
- switch(__s[__pos + __nbits - __i - 1]) {
- case '0':
- break;
- case '1':
- set(__i);
- break;
- default:
- __STL_THROW(invalid_argument("bitset"));
- }
- }
-}
-
-template <size_t _Nb, class _WordT>
-template <class _CharT, class _Traits, class _Alloc>
-void bitset<_Nb, _WordT>
- ::_M_copy_to_string(basic_string<_CharT, _Traits, _Alloc>& __s) const
-{
- __s.assign(_Nb, '0');
-
- for (size_t __i = 0; __i < _Nb; ++__i)
- if (_Unchecked_test(__i))
- __s[_Nb - 1 - __i] = '1';
-}
-
-// ------------------------------------------------------------
-
-//
-// 23.3.5.3 bitset operations:
-//
-
-template <size_t _Nb, class _WordT>
-inline bitset<_Nb,_WordT> operator&(const bitset<_Nb,_WordT>& __x,
- const bitset<_Nb,_WordT>& __y) {
- bitset<_Nb,_WordT> __result(__x);
- __result &= __y;
- return __result;
-}
-
-
-template <size_t _Nb, class _WordT>
-inline bitset<_Nb,_WordT> operator|(const bitset<_Nb,_WordT>& __x,
- const bitset<_Nb,_WordT>& __y) {
- bitset<_Nb,_WordT> __result(__x);
- __result |= __y;
- return __result;
-}
-
-template <size_t _Nb, class _WordT>
-inline bitset<_Nb,_WordT> operator^(const bitset<_Nb,_WordT>& __x,
- const bitset<_Nb,_WordT>& __y) {
- bitset<_Nb,_WordT> __result(__x);
- __result ^= __y;
- return __result;
-}
-
-// NOTE: these must be rewritten once we have templatized iostreams.
-
-template <size_t _Nb, class _WordT>
-istream&
-operator>>(istream& __is, bitset<_Nb,_WordT>& __x) {
- string __tmp;
- __tmp.reserve(_Nb);
-
- // In new templatized iostreams, use istream::sentry
- if (__is.flags() & ios::skipws) {
- char __c;
- do
- __is.get(__c);
- while (__is && isspace(__c));
- if (__is)
- __is.putback(__c);
- }
-
- for (size_t __i = 0; __i < _Nb; ++__i) {
- char __c;
- __is.get(__c);
-
- if (!__is)
- break;
- else if (__c != '0' && __c != '1') {
- __is.putback(__c);
- break;
- }
- else
- __tmp.push_back(__c);
- }
-
- if (__tmp.empty())
- __is.clear(__is.rdstate() | ios::failbit);
- else
- __x._M_copy_from_string(__tmp, static_cast<size_t>(0), _Nb);
-
- return __is;
-}
-
-template <size_t _Nb, class _WordT>
-ostream& operator<<(ostream& __os, const bitset<_Nb,_WordT>& __x) {
- string __tmp;
- __x._M_copy_to_string(__tmp);
- return __os << __tmp;
-}
-
-// ------------------------------------------------------------
-// Lookup tables for find and count operations.
-
-template<bool __dummy>
-unsigned char _Bit_count<__dummy>::_S_bit_count[] = {
- 0, /* 0 */ 1, /* 1 */ 1, /* 2 */ 2, /* 3 */ 1, /* 4 */
- 2, /* 5 */ 2, /* 6 */ 3, /* 7 */ 1, /* 8 */ 2, /* 9 */
- 2, /* 10 */ 3, /* 11 */ 2, /* 12 */ 3, /* 13 */ 3, /* 14 */
- 4, /* 15 */ 1, /* 16 */ 2, /* 17 */ 2, /* 18 */ 3, /* 19 */
- 2, /* 20 */ 3, /* 21 */ 3, /* 22 */ 4, /* 23 */ 2, /* 24 */
- 3, /* 25 */ 3, /* 26 */ 4, /* 27 */ 3, /* 28 */ 4, /* 29 */
- 4, /* 30 */ 5, /* 31 */ 1, /* 32 */ 2, /* 33 */ 2, /* 34 */
- 3, /* 35 */ 2, /* 36 */ 3, /* 37 */ 3, /* 38 */ 4, /* 39 */
- 2, /* 40 */ 3, /* 41 */ 3, /* 42 */ 4, /* 43 */ 3, /* 44 */
- 4, /* 45 */ 4, /* 46 */ 5, /* 47 */ 2, /* 48 */ 3, /* 49 */
- 3, /* 50 */ 4, /* 51 */ 3, /* 52 */ 4, /* 53 */ 4, /* 54 */
- 5, /* 55 */ 3, /* 56 */ 4, /* 57 */ 4, /* 58 */ 5, /* 59 */
- 4, /* 60 */ 5, /* 61 */ 5, /* 62 */ 6, /* 63 */ 1, /* 64 */
- 2, /* 65 */ 2, /* 66 */ 3, /* 67 */ 2, /* 68 */ 3, /* 69 */
- 3, /* 70 */ 4, /* 71 */ 2, /* 72 */ 3, /* 73 */ 3, /* 74 */
- 4, /* 75 */ 3, /* 76 */ 4, /* 77 */ 4, /* 78 */ 5, /* 79 */
- 2, /* 80 */ 3, /* 81 */ 3, /* 82 */ 4, /* 83 */ 3, /* 84 */
- 4, /* 85 */ 4, /* 86 */ 5, /* 87 */ 3, /* 88 */ 4, /* 89 */
- 4, /* 90 */ 5, /* 91 */ 4, /* 92 */ 5, /* 93 */ 5, /* 94 */
- 6, /* 95 */ 2, /* 96 */ 3, /* 97 */ 3, /* 98 */ 4, /* 99 */
- 3, /* 100 */ 4, /* 101 */ 4, /* 102 */ 5, /* 103 */ 3, /* 104 */
- 4, /* 105 */ 4, /* 106 */ 5, /* 107 */ 4, /* 108 */ 5, /* 109 */
- 5, /* 110 */ 6, /* 111 */ 3, /* 112 */ 4, /* 113 */ 4, /* 114 */
- 5, /* 115 */ 4, /* 116 */ 5, /* 117 */ 5, /* 118 */ 6, /* 119 */
- 4, /* 120 */ 5, /* 121 */ 5, /* 122 */ 6, /* 123 */ 5, /* 124 */
- 6, /* 125 */ 6, /* 126 */ 7, /* 127 */ 1, /* 128 */ 2, /* 129 */
- 2, /* 130 */ 3, /* 131 */ 2, /* 132 */ 3, /* 133 */ 3, /* 134 */
- 4, /* 135 */ 2, /* 136 */ 3, /* 137 */ 3, /* 138 */ 4, /* 139 */
- 3, /* 140 */ 4, /* 141 */ 4, /* 142 */ 5, /* 143 */ 2, /* 144 */
- 3, /* 145 */ 3, /* 146 */ 4, /* 147 */ 3, /* 148 */ 4, /* 149 */
- 4, /* 150 */ 5, /* 151 */ 3, /* 152 */ 4, /* 153 */ 4, /* 154 */
- 5, /* 155 */ 4, /* 156 */ 5, /* 157 */ 5, /* 158 */ 6, /* 159 */
- 2, /* 160 */ 3, /* 161 */ 3, /* 162 */ 4, /* 163 */ 3, /* 164 */
- 4, /* 165 */ 4, /* 166 */ 5, /* 167 */ 3, /* 168 */ 4, /* 169 */
- 4, /* 170 */ 5, /* 171 */ 4, /* 172 */ 5, /* 173 */ 5, /* 174 */
- 6, /* 175 */ 3, /* 176 */ 4, /* 177 */ 4, /* 178 */ 5, /* 179 */
- 4, /* 180 */ 5, /* 181 */ 5, /* 182 */ 6, /* 183 */ 4, /* 184 */
- 5, /* 185 */ 5, /* 186 */ 6, /* 187 */ 5, /* 188 */ 6, /* 189 */
- 6, /* 190 */ 7, /* 191 */ 2, /* 192 */ 3, /* 193 */ 3, /* 194 */
- 4, /* 195 */ 3, /* 196 */ 4, /* 197 */ 4, /* 198 */ 5, /* 199 */
- 3, /* 200 */ 4, /* 201 */ 4, /* 202 */ 5, /* 203 */ 4, /* 204 */
- 5, /* 205 */ 5, /* 206 */ 6, /* 207 */ 3, /* 208 */ 4, /* 209 */
- 4, /* 210 */ 5, /* 211 */ 4, /* 212 */ 5, /* 213 */ 5, /* 214 */
- 6, /* 215 */ 4, /* 216 */ 5, /* 217 */ 5, /* 218 */ 6, /* 219 */
- 5, /* 220 */ 6, /* 221 */ 6, /* 222 */ 7, /* 223 */ 3, /* 224 */
- 4, /* 225 */ 4, /* 226 */ 5, /* 227 */ 4, /* 228 */ 5, /* 229 */
- 5, /* 230 */ 6, /* 231 */ 4, /* 232 */ 5, /* 233 */ 5, /* 234 */
- 6, /* 235 */ 5, /* 236 */ 6, /* 237 */ 6, /* 238 */ 7, /* 239 */
- 4, /* 240 */ 5, /* 241 */ 5, /* 242 */ 6, /* 243 */ 5, /* 244 */
- 6, /* 245 */ 6, /* 246 */ 7, /* 247 */ 5, /* 248 */ 6, /* 249 */
- 6, /* 250 */ 7, /* 251 */ 6, /* 252 */ 7, /* 253 */ 7, /* 254 */
- 8 /* 255 */
-}; // end _Bit_count
-
-template<bool __dummy>
-unsigned char _First_one<__dummy>::_S_first_one[] = {
- 0, /* 0 */ 0, /* 1 */ 1, /* 2 */ 0, /* 3 */ 2, /* 4 */
- 0, /* 5 */ 1, /* 6 */ 0, /* 7 */ 3, /* 8 */ 0, /* 9 */
- 1, /* 10 */ 0, /* 11 */ 2, /* 12 */ 0, /* 13 */ 1, /* 14 */
- 0, /* 15 */ 4, /* 16 */ 0, /* 17 */ 1, /* 18 */ 0, /* 19 */
- 2, /* 20 */ 0, /* 21 */ 1, /* 22 */ 0, /* 23 */ 3, /* 24 */
- 0, /* 25 */ 1, /* 26 */ 0, /* 27 */ 2, /* 28 */ 0, /* 29 */
- 1, /* 30 */ 0, /* 31 */ 5, /* 32 */ 0, /* 33 */ 1, /* 34 */
- 0, /* 35 */ 2, /* 36 */ 0, /* 37 */ 1, /* 38 */ 0, /* 39 */
- 3, /* 40 */ 0, /* 41 */ 1, /* 42 */ 0, /* 43 */ 2, /* 44 */
- 0, /* 45 */ 1, /* 46 */ 0, /* 47 */ 4, /* 48 */ 0, /* 49 */
- 1, /* 50 */ 0, /* 51 */ 2, /* 52 */ 0, /* 53 */ 1, /* 54 */
- 0, /* 55 */ 3, /* 56 */ 0, /* 57 */ 1, /* 58 */ 0, /* 59 */
- 2, /* 60 */ 0, /* 61 */ 1, /* 62 */ 0, /* 63 */ 6, /* 64 */
- 0, /* 65 */ 1, /* 66 */ 0, /* 67 */ 2, /* 68 */ 0, /* 69 */
- 1, /* 70 */ 0, /* 71 */ 3, /* 72 */ 0, /* 73 */ 1, /* 74 */
- 0, /* 75 */ 2, /* 76 */ 0, /* 77 */ 1, /* 78 */ 0, /* 79 */
- 4, /* 80 */ 0, /* 81 */ 1, /* 82 */ 0, /* 83 */ 2, /* 84 */
- 0, /* 85 */ 1, /* 86 */ 0, /* 87 */ 3, /* 88 */ 0, /* 89 */
- 1, /* 90 */ 0, /* 91 */ 2, /* 92 */ 0, /* 93 */ 1, /* 94 */
- 0, /* 95 */ 5, /* 96 */ 0, /* 97 */ 1, /* 98 */ 0, /* 99 */
- 2, /* 100 */ 0, /* 101 */ 1, /* 102 */ 0, /* 103 */ 3, /* 104 */
- 0, /* 105 */ 1, /* 106 */ 0, /* 107 */ 2, /* 108 */ 0, /* 109 */
- 1, /* 110 */ 0, /* 111 */ 4, /* 112 */ 0, /* 113 */ 1, /* 114 */
- 0, /* 115 */ 2, /* 116 */ 0, /* 117 */ 1, /* 118 */ 0, /* 119 */
- 3, /* 120 */ 0, /* 121 */ 1, /* 122 */ 0, /* 123 */ 2, /* 124 */
- 0, /* 125 */ 1, /* 126 */ 0, /* 127 */ 7, /* 128 */ 0, /* 129 */
- 1, /* 130 */ 0, /* 131 */ 2, /* 132 */ 0, /* 133 */ 1, /* 134 */
- 0, /* 135 */ 3, /* 136 */ 0, /* 137 */ 1, /* 138 */ 0, /* 139 */
- 2, /* 140 */ 0, /* 141 */ 1, /* 142 */ 0, /* 143 */ 4, /* 144 */
- 0, /* 145 */ 1, /* 146 */ 0, /* 147 */ 2, /* 148 */ 0, /* 149 */
- 1, /* 150 */ 0, /* 151 */ 3, /* 152 */ 0, /* 153 */ 1, /* 154 */
- 0, /* 155 */ 2, /* 156 */ 0, /* 157 */ 1, /* 158 */ 0, /* 159 */
- 5, /* 160 */ 0, /* 161 */ 1, /* 162 */ 0, /* 163 */ 2, /* 164 */
- 0, /* 165 */ 1, /* 166 */ 0, /* 167 */ 3, /* 168 */ 0, /* 169 */
- 1, /* 170 */ 0, /* 171 */ 2, /* 172 */ 0, /* 173 */ 1, /* 174 */
- 0, /* 175 */ 4, /* 176 */ 0, /* 177 */ 1, /* 178 */ 0, /* 179 */
- 2, /* 180 */ 0, /* 181 */ 1, /* 182 */ 0, /* 183 */ 3, /* 184 */
- 0, /* 185 */ 1, /* 186 */ 0, /* 187 */ 2, /* 188 */ 0, /* 189 */
- 1, /* 190 */ 0, /* 191 */ 6, /* 192 */ 0, /* 193 */ 1, /* 194 */
- 0, /* 195 */ 2, /* 196 */ 0, /* 197 */ 1, /* 198 */ 0, /* 199 */
- 3, /* 200 */ 0, /* 201 */ 1, /* 202 */ 0, /* 203 */ 2, /* 204 */
- 0, /* 205 */ 1, /* 206 */ 0, /* 207 */ 4, /* 208 */ 0, /* 209 */
- 1, /* 210 */ 0, /* 211 */ 2, /* 212 */ 0, /* 213 */ 1, /* 214 */
- 0, /* 215 */ 3, /* 216 */ 0, /* 217 */ 1, /* 218 */ 0, /* 219 */
- 2, /* 220 */ 0, /* 221 */ 1, /* 222 */ 0, /* 223 */ 5, /* 224 */
- 0, /* 225 */ 1, /* 226 */ 0, /* 227 */ 2, /* 228 */ 0, /* 229 */
- 1, /* 230 */ 0, /* 231 */ 3, /* 232 */ 0, /* 233 */ 1, /* 234 */
- 0, /* 235 */ 2, /* 236 */ 0, /* 237 */ 1, /* 238 */ 0, /* 239 */
- 4, /* 240 */ 0, /* 241 */ 1, /* 242 */ 0, /* 243 */ 2, /* 244 */
- 0, /* 245 */ 1, /* 246 */ 0, /* 247 */ 3, /* 248 */ 0, /* 249 */
- 1, /* 250 */ 0, /* 251 */ 2, /* 252 */ 0, /* 253 */ 1, /* 254 */
- 0, /* 255 */
-}; // end _First_one
-
-#if defined(__sgi) && !defined(__GNUC__) && (_MIPS_SIM != _MIPS_SIM_ABI32)
-#pragma reset woff 1209
-#endif
-
-__STL_END_NAMESPACE
-
-
-#undef __BITS_PER_WORDT
-#undef __BITSET_WORDS
-
-#endif /* __SGI_STL_BITSET */
-
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/bvector.h b/contrib/libstdc++/stl/bvector.h
deleted file mode 100644
index 03a3fb1c7f23..000000000000
--- a/contrib/libstdc++/stl/bvector.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- * Copyright (c) 1996
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-#ifndef __SGI_STL_BVECTOR_H
-#define __SGI_STL_BVECTOR_H
-
-#ifdef __STL_CLASS_PARTIAL_SPECIALIZATION
-#include <vector.h>
-#else
-#include <algobase.h>
-#include <alloc.h>
-#endif
-
-#include <stl_bvector.h>
-
-#ifdef __STL_USE_NAMESPACES
-
-using __STD::bit_vector;
-
-#endif /* __STL_USE_NAMESPACES */
-
-#endif /* __SGI_STL_BVECTOR_H */
-
-// Local Variables:
-// mode:C++
-// End:
-
-
diff --git a/contrib/libstdc++/stl/defalloc.h b/contrib/libstdc++/stl/defalloc.h
deleted file mode 100644
index 0bfcc2c20a51..000000000000
--- a/contrib/libstdc++/stl/defalloc.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-// Inclusion of this file is DEPRECATED. This is the original HP
-// default allocator. It is provided only for backward compatibility.
-// This file WILL BE REMOVED in a future release.
-//
-// DO NOT USE THIS FILE unless you have an old container implementation
-// that requires an allocator with the HP-style interface.
-//
-// Standard-conforming allocators have a very different interface. The
-// standard default allocator is declared in the header <memory>.
-
-#ifndef DEFALLOC_H
-#define DEFALLOC_H
-
-#include <new.h>
-#include <stddef.h>
-#include <stdlib.h>
-#include <limits.h>
-#include <iostream.h>
-#include <algobase.h>
-
-
-template <class T>
-inline T* allocate(ptrdiff_t size, T*) {
- set_new_handler(0);
- T* tmp = (T*)(::operator new((size_t)(size * sizeof(T))));
- if (tmp == 0) {
- cerr << "out of memory" << endl;
- exit(1);
- }
- return tmp;
-}
-
-
-template <class T>
-inline void deallocate(T* buffer) {
- ::operator delete(buffer);
-}
-
-template <class T>
-class allocator {
-public:
- typedef T value_type;
- typedef T* pointer;
- typedef const T* const_pointer;
- typedef T& reference;
- typedef const T& const_reference;
- typedef size_t size_type;
- typedef ptrdiff_t difference_type;
- pointer allocate(size_type n) {
- return ::allocate((difference_type)n, (pointer)0);
- }
- void deallocate(pointer p) { ::deallocate(p); }
- pointer address(reference x) { return (pointer)&x; }
- const_pointer const_address(const_reference x) {
- return (const_pointer)&x;
- }
- size_type init_page_size() {
- return max(size_type(1), size_type(4096/sizeof(T)));
- }
- size_type max_size() const {
- return max(size_type(1), size_type(UINT_MAX/sizeof(T)));
- }
-};
-
-class allocator<void> {
-public:
- typedef void* pointer;
-};
-
-
-
-#endif
diff --git a/contrib/libstdc++/stl/deque b/contrib/libstdc++/stl/deque
deleted file mode 100644
index 61654acad5bb..000000000000
--- a/contrib/libstdc++/stl/deque
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- * Copyright (c) 1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-#ifndef __SGI_STL_DEQUE
-#define __SGI_STL_DEQUE
-
-#include <stl_algobase.h>
-#include <stl_alloc.h>
-#include <stl_construct.h>
-#include <stl_uninitialized.h>
-#include <stl_deque.h>
-
-#endif /* __SGI_STL_DEQUE */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/deque.h b/contrib/libstdc++/stl/deque.h
deleted file mode 100644
index ede38b1ceba8..000000000000
--- a/contrib/libstdc++/stl/deque.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- * Copyright (c) 1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-#ifndef __SGI_STL_DEQUE_H
-#define __SGI_STL_DEQUE_H
-
-#include <algobase.h>
-#include <alloc.h>
-#include <stl_deque.h>
-
-#ifdef __STL_USE_NAMESPACES
-using __STD::deque;
-#endif /* __STL_USE_NAMESPACES */
-
-#endif /* __SGI_STL_DEQUE_H */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/function.h b/contrib/libstdc++/stl/function.h
deleted file mode 100644
index 6474dd99fa2e..000000000000
--- a/contrib/libstdc++/stl/function.h
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- * Copyright (c) 1996,1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-#ifndef __SGI_STL_FUNCTION_H
-#define __SGI_STL_FUNCTION_H
-
-#ifndef __STL_CONFIG_H
-#include <stl_config.h>
-#endif
-#ifndef __SGI_STL_INTERNAL_RELOPS
-#include <stl_relops.h>
-#endif
-#include <stddef.h>
-#ifndef __SGI_STL_INTERNAL_FUNCTION_H
-#include <stl_function.h>
-#endif
-
-#ifdef __STL_USE_NAMESPACE_FOR_RELOPS
-
-// Names from stl_relops.h
-using __STD_RELOPS::operator!=;
-using __STD_RELOPS::operator>;
-using __STD_RELOPS::operator<=;
-using __STD_RELOPS::operator>=;
-
-#endif /* __STL_USE_NAMESPACE_FOR_RELOPS */
-
-#ifdef __STL_USE_NAMESPACES
-
-// Names from stl_function.h
-using __STD::unary_function;
-using __STD::binary_function;
-using __STD::plus;
-using __STD::minus;
-using __STD::multiplies;
-using __STD::divides;
-using __STD::identity_element;
-using __STD::modulus;
-using __STD::negate;
-using __STD::equal_to;
-using __STD::not_equal_to;
-using __STD::greater;
-using __STD::less;
-using __STD::greater_equal;
-using __STD::less_equal;
-using __STD::logical_and;
-using __STD::logical_or;
-using __STD::logical_not;
-using __STD::unary_negate;
-using __STD::binary_negate;
-using __STD::not1;
-using __STD::not2;
-using __STD::binder1st;
-using __STD::binder2nd;
-using __STD::bind1st;
-using __STD::bind2nd;
-using __STD::unary_compose;
-using __STD::binary_compose;
-using __STD::compose1;
-using __STD::compose2;
-using __STD::pointer_to_unary_function;
-using __STD::pointer_to_binary_function;
-using __STD::ptr_fun;
-using __STD::identity;
-using __STD::select1st;
-using __STD::select2nd;
-using __STD::project1st;
-using __STD::project2nd;
-using __STD::constant_void_fun;
-using __STD::constant_unary_fun;
-using __STD::constant_binary_fun;
-using __STD::constant0;
-using __STD::constant1;
-using __STD::constant2;
-using __STD::subtractive_rng;
-using __STD::mem_fun_t;
-using __STD::const_mem_fun_t;
-using __STD::mem_fun_ref_t;
-using __STD::const_mem_fun_ref_t;
-using __STD::mem_fun1_t;
-using __STD::const_mem_fun1_t;
-using __STD::mem_fun1_ref_t;
-using __STD::const_mem_fun1_ref_t;
-using __STD::mem_fun;
-using __STD::mem_fun_ref;
-using __STD::mem_fun1;
-using __STD::mem_fun1_ref;
-
-#endif /* __STL_USE_NAMESPACES */
-
-#endif /* __SGI_STL_FUNCTION_H */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/functional b/contrib/libstdc++/stl/functional
deleted file mode 100644
index d046dbb036d6..000000000000
--- a/contrib/libstdc++/stl/functional
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (c) 1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-#ifndef __SGI_STL_FUNCTIONAL
-#define __SGI_STL_FUNCTIONAL
-
-#include <stl_config.h>
-#include <stddef.h>
-#include <stl_function.h>
-
-#endif /* __SGI_STL_FUNCTIONAL */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/hash_map b/contrib/libstdc++/stl/hash_map
deleted file mode 100644
index f7421e026fab..000000000000
--- a/contrib/libstdc++/stl/hash_map
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 1996
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-#ifndef __SGI_STL_HASH_MAP
-#define __SGI_STL_HASH_MAP
-
-#ifndef __SGI_STL_INTERNAL_HASHTABLE_H
-#include <stl_hashtable.h>
-#endif
-
-#include <stl_hash_map.h>
-
-#endif /* __SGI_STL_HASH_MAP */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/hash_map.h b/contrib/libstdc++/stl/hash_map.h
deleted file mode 100644
index f3471627044c..000000000000
--- a/contrib/libstdc++/stl/hash_map.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 1996
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-#ifndef __SGI_STL_HASH_MAP_H
-#define __SGI_STL_HASH_MAP_H
-
-#ifndef __SGI_STL_INTERNAL_HASHTABLE_H
-#include <stl_hashtable.h>
-#endif
-
-#include <algobase.h>
-#include <stl_hash_map.h>
-
-#ifdef __STL_USE_NAMESPACES
-using __STD::hash;
-using __STD::hashtable;
-using __STD::hash_map;
-using __STD::hash_multimap;
-#endif /* __STL_USE_NAMESPACES */
-
-
-#endif /* __SGI_STL_HASH_MAP_H */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/hash_set b/contrib/libstdc++/stl/hash_set
deleted file mode 100644
index 2244f47cfa01..000000000000
--- a/contrib/libstdc++/stl/hash_set
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 1996
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-#ifndef __SGI_STL_HASH_SET
-#define __SGI_STL_HASH_SET
-
-#ifndef __SGI_STL_INTERNAL_HASHTABLE_H
-#include <stl_hashtable.h>
-#endif
-
-#include <stl_hash_set.h>
-
-#endif /* __SGI_STL_HASH_SET */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/hash_set.h b/contrib/libstdc++/stl/hash_set.h
deleted file mode 100644
index d3e93c0c26be..000000000000
--- a/contrib/libstdc++/stl/hash_set.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 1996
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-#ifndef __SGI_STL_HASH_SET_H
-#define __SGI_STL_HASH_SET_H
-
-#ifndef __SGI_STL_INTERNAL_HASHTABLE_H
-#include <stl_hashtable.h>
-#endif
-
-#include <algobase.h>
-#include <stl_hash_set.h>
-
-#ifdef __STL_USE_NAMESPACES
-using __STD::hash;
-using __STD::hashtable;
-using __STD::hash_set;
-using __STD::hash_multiset;
-#endif /* __STL_USE_NAMESPACES */
-
-#endif /* __SGI_STL_HASH_SET_H */
diff --git a/contrib/libstdc++/stl/hashtable.h b/contrib/libstdc++/stl/hashtable.h
deleted file mode 100644
index 15dbfc916441..000000000000
--- a/contrib/libstdc++/stl/hashtable.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 1996,1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-/* NOTE: This is an internal header file, included by other STL headers.
- * You should not attempt to use it directly.
- */
-
-#ifndef __SGI_STL_HASHTABLE_H
-#define __SGI_STL_HASHTABLE_H
-
-#include <stl_hashtable.h>
-#include <algo.h>
-#include <alloc.h>
-#include <vector.h>
-
-#ifdef __STL_USE_NAMESPACES
-using __STD::hash;
-using __STD::hashtable;
-#endif /* __STL_USE_NAMESPACES */
-
-#endif /* __SGI_STL_HASHTABLE_H */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/heap.h b/contrib/libstdc++/stl/heap.h
deleted file mode 100644
index 2ec93c07b765..000000000000
--- a/contrib/libstdc++/stl/heap.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- * Copyright (c) 1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-#ifndef __SGI_STL_HEAP_H
-#define __SGI_STL_HEAP_H
-
-#include <stl_config.h>
-#include <stl_heap.h>
-
-#ifdef __STL_USE_NAMESPACES
-
-using __STD::push_heap;
-using __STD::pop_heap;
-using __STD::make_heap;
-using __STD::sort_heap;
-
-#endif /* __STL_USE_NAMESPACES */
-
-
-#endif /* __SGI_STL_HEAP_H */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/iterator b/contrib/libstdc++/stl/iterator
deleted file mode 100644
index 4ddd208f2755..000000000000
--- a/contrib/libstdc++/stl/iterator
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- * Copyright (c) 1996,1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-#ifndef __SGI_STL_ITERATOR
-#define __SGI_STL_ITERATOR
-
-#include <stl_config.h>
-#include <stl_relops.h>
-#include <stddef.h> /* XXX should use <cstddef> */
-#if 0 /* XXX define a flag for this */
-#include <iostream>
-#else
-#include <iostream.h>
-#endif
-#include <stl_iterator.h>
-
-#endif /* __SGI_STL_ITERATOR */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/iterator.h b/contrib/libstdc++/stl/iterator.h
deleted file mode 100644
index f8a023774228..000000000000
--- a/contrib/libstdc++/stl/iterator.h
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- * Copyright (c) 1996
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-#ifndef __SGI_STL_ITERATOR_H
-#define __SGI_STL_ITERATOR_H
-
-#ifndef __SGI_STL_FUNCTION_H
-#include <function.h>
-#endif
-#include <stddef.h>
-#include <iostream.h>
-#ifndef __SGI_STL_INTERNAL_ITERATOR_H
-#include <stl_iterator.h>
-#endif
-#ifndef __TYPE_TRAITS_H
-#include <type_traits.h>
-#endif
-#ifndef __SGI_STL_INTERNAL_CONSTRUCT_H
-#include <stl_construct.h>
-#endif
-#ifndef __SGI_STL_INTERNAL_RAW_STORAGE_ITERATOR_H
-#include <stl_raw_storage_iter.h>
-#endif
-
-#ifdef __STL_USE_NAMESPACES
-
-// Names from stl_iterator.h
-
-using __STD::input_iterator_tag;
-using __STD::output_iterator_tag;
-using __STD::forward_iterator_tag;
-using __STD::bidirectional_iterator_tag;
-using __STD::random_access_iterator_tag;
-
-#if 0
-using __STD::iterator;
-#endif
-using __STD::input_iterator;
-using __STD::output_iterator;
-using __STD::forward_iterator;
-using __STD::bidirectional_iterator;
-using __STD::random_access_iterator;
-
-#ifdef __STL_CLASS_PARTIAL_SPECIALIZATION
-using __STD::iterator_traits;
-#endif
-
-using __STD::iterator_category;
-using __STD::distance_type;
-using __STD::value_type;
-
-using __STD::distance;
-using __STD::advance;
-
-using __STD::insert_iterator;
-using __STD::front_insert_iterator;
-using __STD::back_insert_iterator;
-using __STD::inserter;
-using __STD::front_inserter;
-using __STD::back_inserter;
-
-using __STD::reverse_iterator;
-using __STD::reverse_bidirectional_iterator;
-
-using __STD::istream_iterator;
-using __STD::ostream_iterator;
-
-// Names from stl_construct.h
-using __STD::construct;
-using __STD::destroy;
-
-// Names from stl_raw_storage_iter.h
-using __STD::raw_storage_iterator;
-
-#endif /* __STL_USE_NAMESPACES */
-
-#endif /* __SGI_STL_ITERATOR_H */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/list b/contrib/libstdc++/stl/list
deleted file mode 100644
index 5294f39fea69..000000000000
--- a/contrib/libstdc++/stl/list
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- * Copyright (c) 1996,1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-#ifndef __SGI_STL_LIST
-#define __SGI_STL_LIST
-
-#include <stl_algobase.h>
-#include <stl_alloc.h>
-#include <stl_construct.h>
-#include <stl_uninitialized.h>
-#include <stl_list.h>
-
-#endif /* __SGI_STL_LIST */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/list.h b/contrib/libstdc++/stl/list.h
deleted file mode 100644
index 4e6ee0b4113b..000000000000
--- a/contrib/libstdc++/stl/list.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- * Copyright (c) 1996,1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-#ifndef __SGI_STL_LIST_H
-#define __SGI_STL_LIST_H
-
-#include <algobase.h>
-#include <alloc.h>
-#include <stl_list.h>
-
-#ifdef __STL_USE_NAMESPACES
-using __STD::list;
-#endif /* __STL_USE_NAMESPACES */
-
-#endif /* __SGI_STL_LIST_H */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/map b/contrib/libstdc++/stl/map
deleted file mode 100644
index 4cfb7652c545..000000000000
--- a/contrib/libstdc++/stl/map
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- * Copyright (c) 1996,1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-#ifndef __SGI_STL_MAP
-#define __SGI_STL_MAP
-
-#ifndef __SGI_STL_INTERNAL_TREE_H
-#include <stl_tree.h>
-#endif
-#include <stl_map.h>
-#include <stl_multimap.h>
-
-#endif /* __SGI_STL_MAP */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/map.h b/contrib/libstdc++/stl/map.h
deleted file mode 100644
index a89bd31e81cd..000000000000
--- a/contrib/libstdc++/stl/map.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- * Copyright (c) 1996,1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-#ifndef __SGI_STL_MAP_H
-#define __SGI_STL_MAP_H
-
-#include <tree.h>
-#include <stl_map.h>
-
-#ifdef __STL_USE_NAMESPACES
-using __STD::map;
-#endif /* __STL_USE_NAMESPACES */
-
-#endif /* __SGI_STL_MAP_H */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/memory b/contrib/libstdc++/stl/memory
deleted file mode 100644
index 64338dd313a6..000000000000
--- a/contrib/libstdc++/stl/memory
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Copyright (c) 1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-#ifndef __SGI_STL_MEMORY
-#define __SGI_STL_MEMORY
-
-#include <stl_algobase.h>
-#include <stl_alloc.h>
-#include <stl_construct.h>
-#include <stl_tempbuf.h>
-#include <stl_uninitialized.h>
-#include <stl_raw_storage_iter.h>
-
-
-#if defined(__STL_MEMBER_TEMPLATES)
-
-__STL_BEGIN_NAMESPACE
-
-template <class _Tp> class auto_ptr {
-private:
- _Tp* _M_ptr;
-
-public:
- typedef _Tp element_type;
- explicit auto_ptr(_Tp* __p = 0) __STL_NOTHROW : _M_ptr(__p) {}
- auto_ptr(auto_ptr& __a) __STL_NOTHROW : _M_ptr(__a.release()) {}
- template <class _Tp1> auto_ptr(auto_ptr<_Tp1>& __a) __STL_NOTHROW
- : _M_ptr(__a.release()) {}
- auto_ptr& operator=(auto_ptr& __a) __STL_NOTHROW {
- if (&__a != this) {
- delete _M_ptr;
- _M_ptr = __a.release();
- }
- return *this;
- }
- template <class _Tp1>
- auto_ptr& operator=(auto_ptr<_Tp1>& __a) __STL_NOTHROW {
- if (__a.get() != this->get()) {
- delete _M_ptr;
- _M_ptr = __a.release();
- }
- return *this;
- }
- ~auto_ptr() __STL_NOTHROW { delete _M_ptr; }
-
- _Tp& operator*() const __STL_NOTHROW {
- return *_M_ptr;
- }
- _Tp* operator->() const __STL_NOTHROW {
- return _M_ptr;
- }
- _Tp* get() const __STL_NOTHROW {
- return _M_ptr;
- }
- _Tp* release() __STL_NOTHROW {
- _Tp* __tmp = _M_ptr;
- _M_ptr = 0;
- return __tmp;
- }
- void reset(_Tp* __p = 0) __STL_NOTHROW {
- delete _M_ptr;
- _M_ptr = __p;
- }
-
- // According to the C++ standard, these conversions are required. Most
- // present-day compilers, however, do not enforce that requirement---and,
- // in fact, most present-day compilers do not support the language
- // features that these conversions rely on.
-
-#ifdef __SGI_STL_USE_AUTO_PTR_CONVERSIONS
-
-private:
- template<class _Tp1> struct auto_ptr_ref {
- _Tp1* _M_ptr;
- auto_ptr_ref(_Tp1* __p) : _M_ptr(__p) {}
- };
-
-public:
- auto_ptr(auto_ptr_ref<_Tp> __ref) __STL_NOTHROW
- : _M_ptr(__ref._M_ptr) {}
- template <class _Tp1> operator auto_ptr_ref<_Tp1>() __STL_NOTHROW
- { return auto_ptr_ref<_Tp>(this->release()); }
- template <class _Tp1> operator auto_ptr<_Tp1>() __STL_NOTHROW
- { return auto_ptr<_Tp1>(this->release()); }
-
-#endif /* __SGI_STL_USE_AUTO_PTR_CONVERSIONS */
-};
-
-__STL_END_NAMESPACE
-#endif /* member templates */
-
-#endif /* __SGI_STL_MEMORY */
-
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/multimap.h b/contrib/libstdc++/stl/multimap.h
deleted file mode 100644
index 1a8ec4af4f94..000000000000
--- a/contrib/libstdc++/stl/multimap.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- * Copyright (c) 1996,1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-#ifndef __SGI_STL_MULTIMAP_H
-#define __SGI_STL_MULTIMAP_H
-
-#include <tree.h>
-#include <stl_multimap.h>
-
-#ifdef __STL_USE_NAMESPACES
-using __STD::multimap;
-#endif /* __STL_USE_NAMESPACES */
-
-#endif /* __SGI_STL_MULTIMAP_H */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/multiset.h b/contrib/libstdc++/stl/multiset.h
deleted file mode 100644
index 3024fd74c03d..000000000000
--- a/contrib/libstdc++/stl/multiset.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- * Copyright (c) 1996,1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-#ifndef __SGI_STL_MULTISET_H
-#define __SGI_STL_MULTISET_H
-
-#include <tree.h>
-#include <stl_multiset.h>
-
-#ifdef __STL_USE_NAMESPACES
-using __STD::multiset;
-#endif /* __STL_USE_NAMESPACES */
-
-#endif /* __SGI_STL_MULTISET_H */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/numeric b/contrib/libstdc++/stl/numeric
deleted file mode 100644
index 7f048e11b568..000000000000
--- a/contrib/libstdc++/stl/numeric
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- * Copyright (c) 1996,1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-#ifndef __SGI_STL_NUMERIC
-#define __SGI_STL_NUMERIC
-
-#include <stl_config.h>
-#include <stl_relops.h>
-#include <stddef.h>
-#include <iostream.h>
-#include <stl_iterator.h>
-#include <stl_function.h>
-#include <stl_numeric.h>
-
-#endif /* __SGI_STL_NUMERIC */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/pair.h b/contrib/libstdc++/stl/pair.h
deleted file mode 100644
index 00f5caddb614..000000000000
--- a/contrib/libstdc++/stl/pair.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- * Copyright (c) 1996,1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-#ifndef __SGI_STL_PAIR_H
-#define __SGI_STL_PAIR_H
-
-#ifndef __STL_CONFIG_H
-#include <stl_config.h>
-#endif
-#ifndef __SGI_STL_INTERNAL_RELOPS
-#include <stl_relops.h>
-#endif
-#ifndef __SGI_STL_INTERNAL_PAIR_H
-#include <stl_pair.h>
-#endif
-
-#ifdef __STL_USE_NAMESPACES
-
-using __STD::pair;
-using __STD::make_pair;
-
-#endif /* __STL_USE_NAMESPACES */
-
-#endif /* __SGI_STL_PAIR_H */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/pthread_alloc b/contrib/libstdc++/stl/pthread_alloc
deleted file mode 100644
index 1852908095b0..000000000000
--- a/contrib/libstdc++/stl/pthread_alloc
+++ /dev/null
@@ -1,479 +0,0 @@
-/*
- * Copyright (c) 1996
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-#ifndef __SGI_STL_PTHREAD_ALLOC
-#define __SGI_STL_PTHREAD_ALLOC
-
-// Pthread-specific node allocator.
-// This is similar to the default allocator, except that free-list
-// information is kept separately for each thread, avoiding locking.
-// This should be reasonably fast even in the presence of threads.
-// The down side is that storage may not be well-utilized.
-// It is not an error to allocate memory in thread A and deallocate
-// it in thread B. But this effectively transfers ownership of the memory,
-// so that it can only be reallocated by thread B. Thus this can effectively
-// result in a storage leak if it's done on a regular basis.
-// It can also result in frequent sharing of
-// cache lines among processors, with potentially serious performance
-// consequences.
-
-#include <stl_config.h>
-#include <stl_alloc.h>
-#ifndef __RESTRICT
-# define __RESTRICT
-#endif
-
-__STL_BEGIN_NAMESPACE
-
-#define __STL_DATA_ALIGNMENT 8
-
-union _Pthread_alloc_obj {
- union _Pthread_alloc_obj * __free_list_link;
- char __client_data[__STL_DATA_ALIGNMENT]; /* The client sees this. */
-};
-
-// Pthread allocators don't appear to the client to have meaningful
-// instances. We do in fact need to associate some state with each
-// thread. That state is represented by
-// _Pthread_alloc_per_thread_state<_Max_size>.
-
-template<size_t _Max_size>
-struct _Pthread_alloc_per_thread_state {
- typedef _Pthread_alloc_obj __obj;
- enum { _S_NFREELISTS = _Max_size/__STL_DATA_ALIGNMENT };
- _Pthread_alloc_obj* volatile __free_list[_S_NFREELISTS];
- _Pthread_alloc_per_thread_state<_Max_size> * __next;
- // Free list link for list of available per thread structures.
- // When one of these becomes available for reuse due to thread
- // termination, any objects in its free list remain associated
- // with it. The whole structure may then be used by a newly
- // created thread.
- _Pthread_alloc_per_thread_state() : __next(0)
- {
- memset((void *)__free_list, 0, _S_NFREELISTS * sizeof(__obj *));
- }
- // Returns an object of size __n, and possibly adds to size n free list.
- void *_M_refill(size_t __n);
-};
-
-// Pthread-specific allocator.
-// The argument specifies the largest object size allocated from per-thread
-// free lists. Larger objects are allocated using malloc_alloc.
-// Max_size must be a power of 2.
-template <size_t _Max_size = 128>
-class _Pthread_alloc_template {
-
-public: // but only for internal use:
-
- typedef _Pthread_alloc_obj __obj;
-
- // Allocates a chunk for nobjs of size "size". nobjs may be reduced
- // if it is inconvenient to allocate the requested number.
- static char *_S_chunk_alloc(size_t __size, int &__nobjs);
-
- enum {_S_ALIGN = __STL_DATA_ALIGNMENT};
-
- static size_t _S_round_up(size_t __bytes) {
- return (((__bytes) + _S_ALIGN-1) & ~(_S_ALIGN - 1));
- }
- static size_t _S_freelist_index(size_t __bytes) {
- return (((__bytes) + _S_ALIGN-1)/_S_ALIGN - 1);
- }
-
-private:
- // Chunk allocation state. And other shared state.
- // Protected by _S_chunk_allocator_lock.
- static pthread_mutex_t _S_chunk_allocator_lock;
- static char *_S_start_free;
- static char *_S_end_free;
- static size_t _S_heap_size;
- static _Pthread_alloc_per_thread_state<_Max_size>* _S_free_per_thread_states;
- static pthread_key_t _S_key;
- static bool _S_key_initialized;
- // Pthread key under which per thread state is stored.
- // Allocator instances that are currently unclaimed by any thread.
- static void _S_destructor(void *instance);
- // Function to be called on thread exit to reclaim per thread
- // state.
- static _Pthread_alloc_per_thread_state<_Max_size> *_S_new_per_thread_state();
- // Return a recycled or new per thread state.
- static _Pthread_alloc_per_thread_state<_Max_size> *_S_get_per_thread_state();
- // ensure that the current thread has an associated
- // per thread state.
- friend class _M_lock;
- class _M_lock {
- public:
- _M_lock () { pthread_mutex_lock(&_S_chunk_allocator_lock); }
- ~_M_lock () { pthread_mutex_unlock(&_S_chunk_allocator_lock); }
- };
-
-public:
-
- /* n must be > 0 */
- static void * allocate(size_t __n)
- {
- __obj * volatile * __my_free_list;
- __obj * __RESTRICT __result;
- _Pthread_alloc_per_thread_state<_Max_size>* __a;
-
- if (__n > _Max_size) {
- return(malloc_alloc::allocate(__n));
- }
- if (!_S_key_initialized ||
- !(__a = (_Pthread_alloc_per_thread_state<_Max_size>*)
- pthread_getspecific(_S_key))) {
- __a = _S_get_per_thread_state();
- }
- __my_free_list = __a -> __free_list + _S_freelist_index(__n);
- __result = *__my_free_list;
- if (__result == 0) {
- void *__r = __a -> _M_refill(_S_round_up(__n));
- return __r;
- }
- *__my_free_list = __result -> __free_list_link;
- return (__result);
- };
-
- /* p may not be 0 */
- static void deallocate(void *__p, size_t __n)
- {
- __obj *__q = (__obj *)__p;
- __obj * volatile * __my_free_list;
- _Pthread_alloc_per_thread_state<_Max_size>* __a;
-
- if (__n > _Max_size) {
- malloc_alloc::deallocate(__p, __n);
- return;
- }
- if (!_S_key_initialized ||
- !(__a = (_Pthread_alloc_per_thread_state<_Max_size> *)
- pthread_getspecific(_S_key))) {
- __a = _S_get_per_thread_state();
- }
- __my_free_list = __a->__free_list + _S_freelist_index(__n);
- __q -> __free_list_link = *__my_free_list;
- *__my_free_list = __q;
- }
-
- static void * reallocate(void *__p, size_t __old_sz, size_t __new_sz);
-
-} ;
-
-typedef _Pthread_alloc_template<> pthread_alloc;
-
-
-template <size_t _Max_size>
-void _Pthread_alloc_template<_Max_size>::_S_destructor(void * __instance)
-{
- _M_lock __lock_instance; // Need to acquire lock here.
- _Pthread_alloc_per_thread_state<_Max_size>* __s =
- (_Pthread_alloc_per_thread_state<_Max_size> *)__instance;
- __s -> __next = _S_free_per_thread_states;
- _S_free_per_thread_states = __s;
-}
-
-template <size_t _Max_size>
-_Pthread_alloc_per_thread_state<_Max_size> *
-_Pthread_alloc_template<_Max_size>::_S_new_per_thread_state()
-{
- /* lock already held here. */
- if (0 != _S_free_per_thread_states) {
- _Pthread_alloc_per_thread_state<_Max_size> *__result =
- _S_free_per_thread_states;
- _S_free_per_thread_states = _S_free_per_thread_states -> __next;
- return __result;
- } else {
- return new _Pthread_alloc_per_thread_state<_Max_size>;
- }
-}
-
-template <size_t _Max_size>
-_Pthread_alloc_per_thread_state<_Max_size> *
-_Pthread_alloc_template<_Max_size>::_S_get_per_thread_state()
-{
- /*REFERENCED*/
- _M_lock __lock_instance; // Need to acquire lock here.
- _Pthread_alloc_per_thread_state<_Max_size> * __result;
- if (!_S_key_initialized) {
- if (pthread_key_create(&_S_key, _S_destructor)) {
- abort(); // failed
- }
- _S_key_initialized = true;
- }
- __result = _S_new_per_thread_state();
- if (pthread_setspecific(_S_key, __result)) abort();
- return __result;
-}
-
-/* We allocate memory in large chunks in order to avoid fragmenting */
-/* the malloc heap too much. */
-/* We assume that size is properly aligned. */
-template <size_t _Max_size>
-char *_Pthread_alloc_template<_Max_size>
-::_S_chunk_alloc(size_t __size, int &__nobjs)
-{
- {
- char * __result;
- size_t __total_bytes;
- size_t __bytes_left;
- /*REFERENCED*/
- _M_lock __lock_instance; // Acquire lock for this routine
-
- __total_bytes = __size * __nobjs;
- __bytes_left = _S_end_free - _S_start_free;
- if (__bytes_left >= __total_bytes) {
- __result = _S_start_free;
- _S_start_free += __total_bytes;
- return(__result);
- } else if (__bytes_left >= __size) {
- __nobjs = __bytes_left/__size;
- __total_bytes = __size * __nobjs;
- __result = _S_start_free;
- _S_start_free += __total_bytes;
- return(__result);
- } else {
- size_t __bytes_to_get =
- 2 * __total_bytes + _S_round_up(_S_heap_size >> 4);
- // Try to make use of the left-over piece.
- if (__bytes_left > 0) {
- _Pthread_alloc_per_thread_state<_Max_size>* __a =
- (_Pthread_alloc_per_thread_state<_Max_size>*)
- pthread_getspecific(_S_key);
- __obj * volatile * __my_free_list =
- __a->__free_list + _S_freelist_index(__bytes_left);
-
- ((__obj *)_S_start_free) -> __free_list_link = *__my_free_list;
- *__my_free_list = (__obj *)_S_start_free;
- }
-# ifdef _SGI_SOURCE
- // Try to get memory that's aligned on something like a
- // cache line boundary, so as to avoid parceling out
- // parts of the same line to different threads and thus
- // possibly different processors.
- {
- const int __cache_line_size = 128; // probable upper bound
- __bytes_to_get &= ~(__cache_line_size-1);
- _S_start_free = (char *)memalign(__cache_line_size, __bytes_to_get);
- if (0 == _S_start_free) {
- _S_start_free = (char *)malloc_alloc::allocate(__bytes_to_get);
- }
- }
-# else /* !SGI_SOURCE */
- _S_start_free = (char *)malloc_alloc::allocate(__bytes_to_get);
-# endif
- _S_heap_size += __bytes_to_get;
- _S_end_free = _S_start_free + __bytes_to_get;
- }
- }
- // lock is released here
- return(_S_chunk_alloc(__size, __nobjs));
-}
-
-
-/* Returns an object of size n, and optionally adds to size n free list.*/
-/* We assume that n is properly aligned. */
-/* We hold the allocation lock. */
-template <size_t _Max_size>
-void *_Pthread_alloc_per_thread_state<_Max_size>
-::_M_refill(size_t __n)
-{
- int __nobjs = 128;
- char * __chunk =
- _Pthread_alloc_template<_Max_size>::_S_chunk_alloc(__n, __nobjs);
- __obj * volatile * __my_free_list;
- __obj * __result;
- __obj * __current_obj, * __next_obj;
- int __i;
-
- if (1 == __nobjs) {
- return(__chunk);
- }
- __my_free_list = __free_list
- + _Pthread_alloc_template<_Max_size>::_S_freelist_index(__n);
-
- /* Build free list in chunk */
- __result = (__obj *)__chunk;
- *__my_free_list = __next_obj = (__obj *)(__chunk + __n);
- for (__i = 1; ; __i++) {
- __current_obj = __next_obj;
- __next_obj = (__obj *)((char *)__next_obj + __n);
- if (__nobjs - 1 == __i) {
- __current_obj -> __free_list_link = 0;
- break;
- } else {
- __current_obj -> __free_list_link = __next_obj;
- }
- }
- return(__result);
-}
-
-template <size_t _Max_size>
-void *_Pthread_alloc_template<_Max_size>
-::reallocate(void *__p, size_t __old_sz, size_t __new_sz)
-{
- void * __result;
- size_t __copy_sz;
-
- if (__old_sz > _Max_size
- && __new_sz > _Max_size) {
- return(realloc(__p, __new_sz));
- }
- if (_S_round_up(__old_sz) == _S_round_up(__new_sz)) return(__p);
- __result = allocate(__new_sz);
- __copy_sz = __new_sz > __old_sz? __old_sz : __new_sz;
- memcpy(__result, __p, __copy_sz);
- deallocate(__p, __old_sz);
- return(__result);
-}
-
-template <size_t _Max_size>
-_Pthread_alloc_per_thread_state<_Max_size> *
-_Pthread_alloc_template<_Max_size>::_S_free_per_thread_states = 0;
-
-template <size_t _Max_size>
-pthread_key_t _Pthread_alloc_template<_Max_size>::_S_key;
-
-template <size_t _Max_size>
-bool _Pthread_alloc_template<_Max_size>::_S_key_initialized = false;
-
-template <size_t _Max_size>
-pthread_mutex_t _Pthread_alloc_template<_Max_size>::_S_chunk_allocator_lock
-= PTHREAD_MUTEX_INITIALIZER;
-
-template <size_t _Max_size>
-char *_Pthread_alloc_template<_Max_size>
-::_S_start_free = 0;
-
-template <size_t _Max_size>
-char *_Pthread_alloc_template<_Max_size>
-::_S_end_free = 0;
-
-template <size_t _Max_size>
-size_t _Pthread_alloc_template<_Max_size>
-::_S_heap_size = 0;
-
-#ifdef __STL_USE_STD_ALLOCATORS
-
-template <class _Tp>
-class pthread_allocator {
- typedef pthread_alloc _S_Alloc; // The underlying allocator.
-public:
- typedef size_t size_type;
- typedef ptrdiff_t difference_type;
- typedef _Tp* pointer;
- typedef const _Tp* const_pointer;
- typedef _Tp& reference;
- typedef const _Tp& const_reference;
- typedef _Tp value_type;
-
- template <class _Up> struct rebind {
- typedef pthread_allocator<_Up> other;
- };
-
- pthread_allocator() __STL_NOTHROW {}
- pthread_allocator(const pthread_allocator& a) __STL_NOTHROW {}
- template <class _Up> pthread_allocator(const pthread_allocator<_Up>&)
- __STL_NOTHROW {}
- ~pthread_allocator() __STL_NOTHROW {}
-
- pointer address(reference __x) const { return &__x; }
- const_pointer address(const_reference __x) const { return &__x; }
-
- // __n is permitted to be 0. The C++ standard says nothing about what
- // the return value is when __n == 0.
- _Tp* allocate(size_type __n, const void* = 0) {
- return __n != 0 ? static_cast<_Tp*>(_S_Alloc::allocate(__n * sizeof(_Tp)))
- : 0;
- }
-
- // p is not permitted to be a null pointer.
- void deallocate(pointer __p, size_type __n)
- { _S_Alloc::deallocate(__p, __n * sizeof(_Tp)); }
-
- size_type max_size() const __STL_NOTHROW
- { return size_t(-1) / sizeof(_Tp); }
-
- void construct(pointer __p, const _Tp& __val) { new(__p) _Tp(__val); }
- void destroy(pointer _p) { _p->~_Tp(); }
-};
-
-template<>
-class pthread_allocator<void> {
-public:
- typedef size_t size_type;
- typedef ptrdiff_t difference_type;
- typedef void* pointer;
- typedef const void* const_pointer;
- typedef void value_type;
-
- template <class _Up> struct rebind {
- typedef pthread_allocator<_Up> other;
- };
-};
-
-template <size_t _Max_size>
-inline bool operator==(const _Pthread_alloc_template<_Max_size>&,
- const _Pthread_alloc_template<_Max_size>&)
-{
- return true;
-}
-
-template <class _T1, class _T2>
-inline bool operator==(const pthread_allocator<_T1>&,
- const pthread_allocator<_T2>& a2)
-{
- return true;
-}
-
-template <class _T1, class _T2>
-inline bool operator!=(const pthread_allocator<_T1>&,
- const pthread_allocator<_T2>&)
-{
- return false;
-}
-
-template <class _Tp, size_t _Max_size>
-struct _Alloc_traits<_Tp, _Pthread_alloc_template<_Max_size> >
-{
- static const bool _S_instanceless = true;
- typedef simple_alloc<_Tp, _Pthread_alloc_template<_Max_size> > _Alloc_type;
- typedef __allocator<_Tp, _Pthread_alloc_template<_Max_size> >
- allocator_type;
-};
-
-template <class _Tp, class _Up, size_t _Max>
-struct _Alloc_traits<_Tp, __allocator<_Up, _Pthread_alloc_template<_Max> > >
-{
- static const bool _S_instanceless = true;
- typedef simple_alloc<_Tp, _Pthread_alloc_template<_Max> > _Alloc_type;
- typedef __allocator<_Tp, _Pthread_alloc_template<_Max> > allocator_type;
-};
-
-template <class _Tp, class _Up>
-struct _Alloc_traits<_Tp, pthread_allocator<_Up> >
-{
- static const bool _S_instanceless = true;
- typedef simple_alloc<_Tp, _Pthread_alloc_template<> > _Alloc_type;
- typedef pthread_allocator<_Tp> allocator_type;
-};
-
-
-#endif /* __STL_USE_STD_ALLOCATORS */
-
-__STL_END_NAMESPACE
-
-#endif /* __SGI_STL_PTHREAD_ALLOC */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/pthread_alloc.h b/contrib/libstdc++/stl/pthread_alloc.h
deleted file mode 100644
index 774ef04edc82..000000000000
--- a/contrib/libstdc++/stl/pthread_alloc.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (c) 1996-1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-#ifndef __SGI_STL_PTHREAD_ALLOC_H
-#define __SGI_STL_PTHREAD_ALLOC_H
-
-#include <pthread_alloc>
-
-#ifdef __STL_USE_NAMESPACES
-
-using __STD::_Pthread_alloc_template;
-using __STD::pthread_alloc;
-
-#endif /* __STL_USE_NAMESPACES */
-
-
-#endif /* __SGI_STL_PTHREAD_ALLOC_H */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/queue b/contrib/libstdc++/stl/queue
deleted file mode 100644
index f9417fb1fbb6..000000000000
--- a/contrib/libstdc++/stl/queue
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- * Copyright (c) 1996,1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-#ifndef __SGI_STL_QUEUE
-#define __SGI_STL_QUEUE
-
-#include <stl_algobase.h>
-#include <stl_alloc.h>
-#include <stl_construct.h>
-#include <stl_uninitialized.h>
-#include <stl_vector.h>
-#include <stl_bvector.h>
-#include <stl_heap.h>
-#include <stl_deque.h>
-#include <stl_function.h>
-#include <stl_queue.h>
-
-#endif /* __SGI_STL_QUEUE */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/rope b/contrib/libstdc++/stl/rope
deleted file mode 100644
index f861500000b5..000000000000
--- a/contrib/libstdc++/stl/rope
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (c) 1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-#ifndef __SGI_STL_ROPE
-#define __SGI_STL_ROPE
-
-#include <stl_algobase.h>
-#include <stl_tempbuf.h>
-#include <stl_algo.h>
-#include <stl_function.h>
-#include <stl_numeric.h>
-#include <stl_alloc.h>
-#include <stl_construct.h>
-#include <stl_uninitialized.h>
-#include <stl_hash_fun.h>
-#include <stl_rope.h>
-
-#endif /* __SGI_STL_ROPE */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/rope.h b/contrib/libstdc++/stl/rope.h
deleted file mode 100644
index d767fa32e7a2..000000000000
--- a/contrib/libstdc++/stl/rope.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (c) 1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-#ifndef __SGI_STL_ROPE_H
-#define __SGI_STL_ROPE_H
-
-#include <hashtable.h>
-#include <stl_rope.h>
-
-#ifdef __STL_USE_NAMESPACES
-
-using __STD::char_producer;
-using __STD::sequence_buffer;
-using __STD::rope;
-using __STD::crope;
-using __STD::wrope;
-
-#endif /* __STL_USE_NAMESPACES */
-
-#endif /* __SGI_STL_ROPE_H */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/ropeimpl.h b/contrib/libstdc++/stl/ropeimpl.h
deleted file mode 100644
index 18bb2c9ec9d1..000000000000
--- a/contrib/libstdc++/stl/ropeimpl.h
+++ /dev/null
@@ -1,1550 +0,0 @@
-/*
- * Copyright (c) 1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-/* NOTE: This is an internal header file, included by other STL headers.
- * You should not attempt to use it directly.
- */
-
-# include <stdio.h> /* XXX should use <cstdio> */
-# include <iostream.h> /* XXX should use <iostream> */
-
-__STL_BEGIN_NAMESPACE
-
-#if defined(__sgi) && !defined(__GNUC__) && (_MIPS_SIM != _MIPS_SIM_ABI32)
-#pragma set woff 1174
-#endif
-
-// Set buf_start, buf_end, and buf_ptr appropriately, filling tmp_buf
-// if necessary. Assumes _M_path_end[leaf_index] and leaf_pos are correct.
-// Results in a valid buf_ptr if the iterator can be legitimately
-// dereferenced.
-template <class _CharT, class _Alloc>
-void _Rope_iterator_base<_CharT,_Alloc>::_S_setbuf(
- _Rope_iterator_base<_CharT,_Alloc>& __x)
-{
- const _RopeRep* __leaf = __x._M_path_end[__x._M_leaf_index];
- size_t __leaf_pos = __x._M_leaf_pos;
- size_t __pos = __x._M_current_pos;
-
- switch(__leaf->_M_tag) {
- case _RopeRep::_S_leaf:
- __x._M_buf_start =
- ((_Rope_RopeLeaf<_CharT,_Alloc>*)__leaf)->_M_data;
- __x._M_buf_ptr = __x._M_buf_start + (__pos - __leaf_pos);
- __x._M_buf_end = __x._M_buf_start + __leaf->_M_size;
- break;
- case _RopeRep::_S_function:
- case _RopeRep::_S_substringfn:
- {
- size_t __len = _S_iterator_buf_len;
- size_t __buf_start_pos = __leaf_pos;
- size_t __leaf_end = __leaf_pos + __leaf->_M_size;
- char_producer<_CharT>* __fn =
- ((_Rope_RopeFunction<_CharT,_Alloc>*)__leaf)->_M_fn;
-
- if (__buf_start_pos + __len <= __pos) {
- __buf_start_pos = __pos - __len/4;
- if (__buf_start_pos + __len > __leaf_end) {
- __buf_start_pos = __leaf_end - __len;
- }
- }
- if (__buf_start_pos + __len > __leaf_end) {
- __len = __leaf_end - __buf_start_pos;
- }
- (*__fn)(__buf_start_pos - __leaf_pos, __len, __x._M_tmp_buf);
- __x._M_buf_ptr = __x._M_tmp_buf + (__pos - __buf_start_pos);
- __x._M_buf_start = __x._M_tmp_buf;
- __x._M_buf_end = __x._M_tmp_buf + __len;
- }
- break;
- default:
- __stl_assert(0);
- }
-}
-
-// Set path and buffer inside a rope iterator. We assume that
-// pos and root are already set.
-template <class _CharT, class _Alloc>
-void _Rope_iterator_base<_CharT,_Alloc>::_S_setcache
-(_Rope_iterator_base<_CharT,_Alloc>& __x)
-{
- const _RopeRep* __path[_RopeRep::_S_max_rope_depth+1];
- const _RopeRep* __curr_rope;
- int __curr_depth = -1; /* index into path */
- size_t __curr_start_pos = 0;
- size_t __pos = __x._M_current_pos;
- unsigned char __dirns = 0; // Bit vector marking right turns in the path
-
- __stl_assert(__pos <= __x._M_root->_M_size);
- if (__pos >= __x._M_root->_M_size) {
- __x._M_buf_ptr = 0;
- return;
- }
- __curr_rope = __x._M_root;
- if (0 != __curr_rope->_M_c_string) {
- /* Treat the root as a leaf. */
- __x._M_buf_start = __curr_rope->_M_c_string;
- __x._M_buf_end = __curr_rope->_M_c_string + __curr_rope->_M_size;
- __x._M_buf_ptr = __curr_rope->_M_c_string + __pos;
- __x._M_path_end[0] = __curr_rope;
- __x._M_leaf_index = 0;
- __x._M_leaf_pos = 0;
- return;
- }
- for(;;) {
- ++__curr_depth;
- __stl_assert(__curr_depth <= _RopeRep::_S_max_rope_depth);
- __path[__curr_depth] = __curr_rope;
- switch(__curr_rope->_M_tag) {
- case _RopeRep::_S_leaf:
- case _RopeRep::_S_function:
- case _RopeRep::_S_substringfn:
- __x._M_leaf_pos = __curr_start_pos;
- goto done;
- case _RopeRep::_S_concat:
- {
- _Rope_RopeConcatenation<_CharT,_Alloc>* __c =
- (_Rope_RopeConcatenation<_CharT,_Alloc>*)__curr_rope;
- _RopeRep* __left = __c->_M_left;
- size_t __left_len = __left->_M_size;
-
- __dirns <<= 1;
- if (__pos >= __curr_start_pos + __left_len) {
- __dirns |= 1;
- __curr_rope = __c->_M_right;
- __curr_start_pos += __left_len;
- } else {
- __curr_rope = __left;
- }
- }
- break;
- }
- }
- done:
- // Copy last section of path into _M_path_end.
- {
- int __i = -1;
- int __j = __curr_depth + 1 - _S_path_cache_len;
-
- if (__j < 0) __j = 0;
- while (__j <= __curr_depth) {
- __x._M_path_end[++__i] = __path[__j++];
- }
- __x._M_leaf_index = __i;
- }
- __x._M_path_directions = __dirns;
- _S_setbuf(__x);
-}
-
-// Specialized version of the above. Assumes that
-// the path cache is valid for the previous position.
-template <class _CharT, class _Alloc>
-void _Rope_iterator_base<_CharT,_Alloc>::_S_setcache_for_incr
-(_Rope_iterator_base<_CharT,_Alloc>& __x)
-{
- int __current_index = __x._M_leaf_index;
- const _RopeRep* __current_node = __x._M_path_end[__current_index];
- size_t __len = __current_node->_M_size;
- size_t __node_start_pos = __x._M_leaf_pos;
- unsigned char __dirns = __x._M_path_directions;
- _Rope_RopeConcatenation<_CharT,_Alloc>* __c;
-
- __stl_assert(__x._M_current_pos <= __x._M_root->_M_size);
- if (__x._M_current_pos - __node_start_pos < __len) {
- /* More stuff in this leaf, we just didn't cache it. */
- _S_setbuf(__x);
- return;
- }
- __stl_assert(__node_start_pos + __len == __x._M_current_pos);
- // node_start_pos is starting position of last_node.
- while (--__current_index >= 0) {
- if (!(__dirns & 1) /* Path turned left */)
- break;
- __current_node = __x._M_path_end[__current_index];
- __c = (_Rope_RopeConcatenation<_CharT,_Alloc>*)__current_node;
- // Otherwise we were in the right child. Thus we should pop
- // the concatenation node.
- __node_start_pos -= __c->_M_left->_M_size;
- __dirns >>= 1;
- }
- if (__current_index < 0) {
- // We underflowed the cache. Punt.
- _S_setcache(__x);
- return;
- }
- __current_node = __x._M_path_end[__current_index];
- __c = (_Rope_RopeConcatenation<_CharT,_Alloc>*)__current_node;
- // current_node is a concatenation node. We are positioned on the first
- // character in its right child.
- // node_start_pos is starting position of current_node.
- __node_start_pos += __c->_M_left->_M_size;
- __current_node = __c->_M_right;
- __x._M_path_end[++__current_index] = __current_node;
- __dirns |= 1;
- while (_RopeRep::_S_concat == __current_node->_M_tag) {
- ++__current_index;
- if (_S_path_cache_len == __current_index) {
- int __i;
- for (__i = 0; __i < _S_path_cache_len-1; __i++) {
- __x._M_path_end[__i] = __x._M_path_end[__i+1];
- }
- --__current_index;
- }
- __current_node =
- ((_Rope_RopeConcatenation<_CharT,_Alloc>*)__current_node)->_M_left;
- __x._M_path_end[__current_index] = __current_node;
- __dirns <<= 1;
- // node_start_pos is unchanged.
- }
- __x._M_leaf_index = __current_index;
- __x._M_leaf_pos = __node_start_pos;
- __x._M_path_directions = __dirns;
- _S_setbuf(__x);
-}
-
-template <class _CharT, class _Alloc>
-void _Rope_iterator_base<_CharT,_Alloc>::_M_incr(size_t __n) {
- _M_current_pos += __n;
- if (0 != _M_buf_ptr) {
- size_t __chars_left = _M_buf_end - _M_buf_ptr;
- if (__chars_left > __n) {
- _M_buf_ptr += __n;
- } else if (__chars_left == __n) {
- _M_buf_ptr += __n;
- _S_setcache_for_incr(*this);
- } else {
- _M_buf_ptr = 0;
- }
- }
-}
-
-template <class _CharT, class _Alloc>
-void _Rope_iterator_base<_CharT,_Alloc>::_M_decr(size_t __n) {
- if (0 != _M_buf_ptr) {
- size_t __chars_left = _M_buf_ptr - _M_buf_start;
- if (__chars_left >= __n) {
- _M_buf_ptr -= __n;
- } else {
- _M_buf_ptr = 0;
- }
- }
- _M_current_pos -= __n;
-}
-
-template <class _CharT, class _Alloc>
-void _Rope_iterator<_CharT,_Alloc>::_M_check() {
- if (_M_root_rope->_M_tree_ptr != _M_root) {
- // _Rope was modified. Get things fixed up.
- _RopeRep::_S_unref(_M_root);
- _M_root = _M_root_rope->_M_tree_ptr;
- _RopeRep::_S_ref(_M_root);
- _M_buf_ptr = 0;
- }
-}
-
-template <class _CharT, class _Alloc>
-inline
-_Rope_const_iterator<_CharT, _Alloc>::_Rope_const_iterator(
- const _Rope_iterator<_CharT,_Alloc>& __x)
-: _Rope_iterator_base<_CharT,_Alloc>(__x)
-{ }
-
-template <class _CharT, class _Alloc>
-inline _Rope_iterator<_CharT,_Alloc>::_Rope_iterator(
- rope<_CharT,_Alloc>& __r, size_t __pos)
-: _Rope_iterator_base<_CharT,_Alloc>(__r._M_tree_ptr, __pos),
- _M_root_rope(&__r)
-{
- _RopeRep::_S_ref(_M_root);
-}
-
-template <class _CharT, class _Alloc>
-inline size_t
-rope<_CharT,_Alloc>::_S_char_ptr_len(const _CharT* __s)
-{
- const _CharT* __p = __s;
-
- while (!_S_is0(*__p)) { ++__p; }
- return (__p - __s);
-}
-
-
-#ifndef __GC
-
-template <class _CharT, class _Alloc>
-inline void _Rope_RopeRep<_CharT,_Alloc>::_M_free_c_string()
-{
- _CharT* __cstr = _M_c_string;
- if (0 != __cstr) {
- size_t __size = _M_size + 1;
- destroy(__cstr, __cstr + __size);
- _Data_deallocate(__cstr, __size);
- }
-}
-
-
-template <class _CharT, class _Alloc>
-#ifdef __STL_USE_STD_ALLOCATORS
- inline void _Rope_RopeRep<_CharT,_Alloc>::_S_free_string(_CharT* __s,
- size_t __n,
- allocator_type __a)
-#else
- inline void _Rope_RopeRep<_CharT,_Alloc>::_S_free_string(_CharT* __s,
- size_t __n)
-#endif
-{
- if (!_S_is_basic_char_type((_CharT*)0)) {
- destroy(__s, __s + __n);
- }
-// This has to be a static member, so this gets a bit messy
-# ifdef __STL_USE_STD_ALLOCATORS
- __a.deallocate(
- __s, _Rope_RopeLeaf<_CharT,_Alloc>::_S_rounded_up_size(__n));
-# else
- _Data_deallocate(
- __s, _Rope_RopeLeaf<_CharT,_Alloc>::_S_rounded_up_size(__n));
-# endif
-}
-
-
-// There are several reasons for not doing this with virtual destructors
-// and a class specific delete operator:
-// - A class specific delete operator can't easily get access to
-// allocator instances if we need them.
-// - Any virtual function would need a 4 or byte vtable pointer;
-// this only requires a one byte tag per object.
-template <class _CharT, class _Alloc>
-void _Rope_RopeRep<_CharT,_Alloc>::_M_free_tree()
-{
- switch(_M_tag) {
- case _S_leaf:
- {
- _Rope_RopeLeaf<_CharT,_Alloc>* __l
- = (_Rope_RopeLeaf<_CharT,_Alloc>*)this;
- __l->_Rope_RopeLeaf<_CharT,_Alloc>::~_Rope_RopeLeaf();
- _L_deallocate(__l, 1);
- break;
- }
- case _S_concat:
- {
- _Rope_RopeConcatenation<_CharT,_Alloc>* __c
- = (_Rope_RopeConcatenation<_CharT,_Alloc>*)this;
- __c->_Rope_RopeConcatenation<_CharT,_Alloc>::
- ~_Rope_RopeConcatenation();
- _C_deallocate(__c, 1);
- break;
- }
- case _S_function:
- {
- _Rope_RopeFunction<_CharT,_Alloc>* __f
- = (_Rope_RopeFunction<_CharT,_Alloc>*)this;
- __f->_Rope_RopeFunction<_CharT,_Alloc>::~_Rope_RopeFunction();
- _F_deallocate(__f, 1);
- break;
- }
- case _S_substringfn:
- {
- _Rope_RopeSubstring<_CharT,_Alloc>* __ss =
- (_Rope_RopeSubstring<_CharT,_Alloc>*)this;
- __ss->_Rope_RopeSubstring<_CharT,_Alloc>::
- ~_Rope_RopeSubstring();
- _S_deallocate(__ss, 1);
- break;
- }
- }
-}
-#else
-
-template <class _CharT, class _Alloc>
-#ifdef __STL_USE_STD_ALLOCATORS
- inline void _Rope_RopeRep<_CharT,_Alloc>::_S_free_string
- (const _CharT*, size_t, allocator_type)
-#else
- inline void _Rope_RopeRep<_CharT,_Alloc>::_S_free_string
- (const _CharT*, size_t)
-#endif
-{}
-
-#endif
-
-
-// Concatenate a C string onto a leaf rope by copying the rope data.
-// Used for short ropes.
-template <class _CharT, class _Alloc>
-rope<_CharT,_Alloc>::_RopeLeaf*
-rope<_CharT,_Alloc>::_S_leaf_concat_char_iter
- (_RopeLeaf* __r, const _CharT* __iter, size_t __len)
-{
- size_t __old_len = __r->_M_size;
- _CharT* __new_data = (_CharT*)
- _Data_allocate(_S_rounded_up_size(__old_len + __len));
- _RopeLeaf* __result;
-
- uninitialized_copy_n(__r->_M_data, __old_len, __new_data);
- uninitialized_copy_n(__iter, __len, __new_data + __old_len);
- _S_cond_store_eos(__new_data[__old_len + __len]);
- __STL_TRY {
- __result = _S_new_RopeLeaf(__new_data, __old_len + __len,
- __r->get_allocator());
- }
- __STL_UNWIND(_RopeRep::__STL_FREE_STRING(__new_data, __old_len + __len,
- __r->get_allocator()));
- return __result;
-}
-
-#ifndef __GC
-// As above, but it's OK to clobber original if refcount is 1
-template <class _CharT, class _Alloc>
-rope<_CharT,_Alloc>::_RopeLeaf*
-rope<_CharT,_Alloc>::_S_destr_leaf_concat_char_iter
- (_RopeLeaf* __r, const _CharT* __iter, size_t __len)
-{
- __stl_assert(__r->_M_refcount >= 1);
- if (__r->_M_refcount > 1)
- return _S_leaf_concat_char_iter(__r, __iter, __len);
- size_t __old_len = __r->_M_size;
- if (_S_allocated_capacity(__old_len) >= __old_len + __len) {
- // The space has been partially initialized for the standard
- // character types. But that doesn't matter for those types.
- uninitialized_copy_n(__iter, __len, __r->_M_data + __old_len);
- if (_S_is_basic_char_type((_CharT*)0)) {
- _S_cond_store_eos(__r->_M_data[__old_len + __len]);
- __stl_assert(__r->_M_c_string == __r->_M_data);
- } else if (__r->_M_c_string != __r->_M_data && 0 != __r->_M_c_string) {
- __r->_M_free_c_string();
- __r->_M_c_string = 0;
- }
- __r->_M_size = __old_len + __len;
- __stl_assert(__r->_M_refcount == 1);
- __r->_M_refcount = 2;
- return __r;
- } else {
- _RopeLeaf* __result = _S_leaf_concat_char_iter(__r, __iter, __len);
- __stl_assert(__result->_M_refcount == 1);
- return __result;
- }
-}
-#endif
-
-// Assumes left and right are not 0.
-// Does not increment (nor decrement on exception) child reference counts.
-// Result has ref count 1.
-template <class _CharT, class _Alloc>
-rope<_CharT,_Alloc>::_RopeRep*
-rope<_CharT,_Alloc>::_S_tree_concat (_RopeRep* __left, _RopeRep* __right)
-{
- _RopeConcatenation* __result =
- _S_new_RopeConcatenation(__left, __right, __left->get_allocator());
- size_t __depth = __result->_M_depth;
-
-# ifdef __STL_USE_STD_ALLOCATORS
- __stl_assert(__left->get_allocator() == __right->get_allocator());
-# endif
- if (__depth > 20 && (__result->_M_size < 1000 ||
- __depth > _RopeRep::_S_max_rope_depth)) {
- _RopeRep* __balanced;
-
- __STL_TRY {
- __balanced = _S_balance(__result);
-# ifndef __GC
- if (__result != __balanced) {
- __stl_assert(1 == __result->_M_refcount
- && 1 == __balanced->_M_refcount);
- }
-# endif
- __result->_M_unref_nonnil();
- }
- __STL_UNWIND((_C_deallocate(__result,1)));
- // In case of exception, we need to deallocate
- // otherwise dangling result node. But caller
- // still owns its children. Thus unref is
- // inappropriate.
- return __balanced;
- } else {
- return __result;
- }
-}
-
-template <class _CharT, class _Alloc>
-rope<_CharT,_Alloc>::_RopeRep* rope<_CharT,_Alloc>::_S_concat_char_iter
- (_RopeRep* __r, const _CharT*__s, size_t __slen)
-{
- _RopeRep* __result;
- if (0 == __slen) {
- _S_ref(__r);
- return __r;
- }
- if (0 == __r)
- return __STL_ROPE_FROM_UNOWNED_CHAR_PTR(__s, __slen,
- __r->get_allocator());
- if (_RopeRep::_S_leaf == __r->_M_tag &&
- __r->_M_size + __slen <= _S_copy_max) {
- __result = _S_leaf_concat_char_iter((_RopeLeaf*)__r, __s, __slen);
-# ifndef __GC
- __stl_assert(1 == __result->_M_refcount);
-# endif
- return __result;
- }
- if (_RopeRep::_S_concat == __r->_M_tag
- && _RopeRep::_S_leaf == ((_RopeConcatenation*)__r)->_M_right->_M_tag) {
- _RopeLeaf* __right =
- (_RopeLeaf* )(((_RopeConcatenation* )__r)->_M_right);
- if (__right->_M_size + __slen <= _S_copy_max) {
- _RopeRep* __left = ((_RopeConcatenation*)__r)->_M_left;
- _RopeRep* __nright =
- _S_leaf_concat_char_iter((_RopeLeaf*)__right, __s, __slen);
- __left->_M_ref_nonnil();
- __STL_TRY {
- __result = _S_tree_concat(__left, __nright);
- }
- __STL_UNWIND(_S_unref(__left); _S_unref(__nright));
-# ifndef __GC
- __stl_assert(1 == __result->_M_refcount);
-# endif
- return __result;
- }
- }
- _RopeRep* __nright =
- __STL_ROPE_FROM_UNOWNED_CHAR_PTR(__s, __slen, __r->get_allocator());
- __STL_TRY {
- __r->_M_ref_nonnil();
- __result = _S_tree_concat(__r, __nright);
- }
- __STL_UNWIND(_S_unref(__r); _S_unref(__nright));
-# ifndef __GC
- __stl_assert(1 == __result->_M_refcount);
-# endif
- return __result;
-}
-
-#ifndef __GC
-template <class _CharT, class _Alloc>
-rope<_CharT,_Alloc>::_RopeRep*
-rope<_CharT,_Alloc>::_S_destr_concat_char_iter(
- _RopeRep* __r, const _CharT* __s, size_t __slen)
-{
- _RopeRep* __result;
- if (0 == __r)
- return __STL_ROPE_FROM_UNOWNED_CHAR_PTR(__s, __slen,
- __r->get_allocator());
- size_t __count = __r->_M_refcount;
- size_t __orig_size = __r->_M_size;
- __stl_assert(__count >= 1);
- if (__count > 1) return _S_concat_char_iter(__r, __s, __slen);
- if (0 == __slen) {
- __r->_M_refcount = 2; // One more than before
- return __r;
- }
- if (__orig_size + __slen <= _S_copy_max &&
- _RopeRep::_S_leaf == __r->_M_tag) {
- __result = _S_destr_leaf_concat_char_iter((_RopeLeaf*)__r, __s, __slen);
- return __result;
- }
- if (_RopeRep::_S_concat == __r->_M_tag) {
- _RopeLeaf* __right = (_RopeLeaf*)(((_RopeConcatenation*)__r)->_M_right);
- if (_RopeRep::_S_leaf == __right->_M_tag
- && __right->_M_size + __slen <= _S_copy_max) {
- _RopeRep* __new_right =
- _S_destr_leaf_concat_char_iter(__right, __s, __slen);
- if (__right == __new_right) {
- __stl_assert(__new_right->_M_refcount == 2);
- __new_right->_M_refcount = 1;
- } else {
- __stl_assert(__new_right->_M_refcount >= 1);
- __right->_M_unref_nonnil();
- }
- __stl_assert(__r->_M_refcount == 1);
- __r->_M_refcount = 2; // One more than before.
- ((_RopeConcatenation*)__r)->_M_right = __new_right;
- __r->_M_size = __orig_size + __slen;
- if (0 != __r->_M_c_string) {
- __r->_M_free_c_string();
- __r->_M_c_string = 0;
- }
- return __r;
- }
- }
- _RopeRep* __right =
- __STL_ROPE_FROM_UNOWNED_CHAR_PTR(__s, __slen, __r->get_allocator());
- __r->_M_ref_nonnil();
- __STL_TRY {
- __result = _S_tree_concat(__r, __right);
- }
- __STL_UNWIND(_S_unref(__r); _S_unref(__right))
- __stl_assert(1 == __result->_M_refcount);
- return __result;
-}
-#endif /* !__GC */
-
-template <class _CharT, class _Alloc>
-rope<_CharT,_Alloc>::_RopeRep*
-rope<_CharT,_Alloc>::_S_concat(_RopeRep* __left, _RopeRep* __right)
-{
- if (0 == __left) {
- _S_ref(__right);
- return __right;
- }
- if (0 == __right) {
- __left->_M_ref_nonnil();
- return __left;
- }
- if (_RopeRep::_S_leaf == __right->_M_tag) {
- if (_RopeRep::_S_leaf == __left->_M_tag) {
- if (__right->_M_size + __left->_M_size <= _S_copy_max) {
- return _S_leaf_concat_char_iter((_RopeLeaf*)__left,
- ((_RopeLeaf*)__right)->_M_data,
- __right->_M_size);
- }
- } else if (_RopeRep::_S_concat == __left->_M_tag
- && _RopeRep::_S_leaf ==
- ((_RopeConcatenation*)__left)->_M_right->_M_tag) {
- _RopeLeaf* __leftright =
- (_RopeLeaf*)(((_RopeConcatenation*)__left)->_M_right);
- if (__leftright->_M_size + __right->_M_size <= _S_copy_max) {
- _RopeRep* __leftleft = ((_RopeConcatenation*)__left)->_M_left;
- _RopeRep* __rest = _S_leaf_concat_char_iter(__leftright,
- ((_RopeLeaf*)__right)->_M_data,
- __right->_M_size);
- __leftleft->_M_ref_nonnil();
- __STL_TRY {
- return(_S_tree_concat(__leftleft, __rest));
- }
- __STL_UNWIND(_S_unref(__leftleft); _S_unref(__rest))
- }
- }
- }
- __left->_M_ref_nonnil();
- __right->_M_ref_nonnil();
- __STL_TRY {
- return(_S_tree_concat(__left, __right));
- }
- __STL_UNWIND(_S_unref(__left); _S_unref(__right));
-}
-
-template <class _CharT, class _Alloc>
-rope<_CharT,_Alloc>::_RopeRep*
-rope<_CharT,_Alloc>::_S_substring(_RopeRep* __base,
- size_t __start, size_t __endp1)
-{
- if (0 == __base) return 0;
- size_t __len = __base->_M_size;
- size_t __adj_endp1;
- const size_t __lazy_threshold = 128;
-
- if (__endp1 >= __len) {
- if (0 == __start) {
- __base->_M_ref_nonnil();
- return __base;
- } else {
- __adj_endp1 = __len;
- }
- } else {
- __adj_endp1 = __endp1;
- }
- switch(__base->_M_tag) {
- case _RopeRep::_S_concat:
- {
- _RopeConcatenation* __c = (_RopeConcatenation*)__base;
- _RopeRep* __left = __c->_M_left;
- _RopeRep* __right = __c->_M_right;
- size_t __left_len = __left->_M_size;
- _RopeRep* __result;
-
- if (__adj_endp1 <= __left_len) {
- return _S_substring(__left, __start, __endp1);
- } else if (__start >= __left_len) {
- return _S_substring(__right, __start - __left_len,
- __adj_endp1 - __left_len);
- }
- _Self_destruct_ptr __left_result(
- _S_substring(__left, __start, __left_len));
- _Self_destruct_ptr __right_result(
- _S_substring(__right, 0, __endp1 - __left_len));
- __result = _S_concat(__left_result, __right_result);
-# ifndef __GC
- __stl_assert(1 == __result->_M_refcount);
-# endif
- return __result;
- }
- case _RopeRep::_S_leaf:
- {
- _RopeLeaf* __l = (_RopeLeaf*)__base;
- _RopeLeaf* __result;
- size_t __result_len;
- if (__start >= __adj_endp1) return 0;
- __result_len = __adj_endp1 - __start;
- if (__result_len > __lazy_threshold) goto lazy;
-# ifdef __GC
- const _CharT* __section = __l->_M_data + __start;
- __result = _S_new_RopeLeaf(__section, __result_len,
- __base->get_allocator());
- __result->_M_c_string = 0; // Not eos terminated.
-# else
- // We should sometimes create substring node instead.
- __result = __STL_ROPE_FROM_UNOWNED_CHAR_PTR(
- __l->_M_data + __start, __result_len,
- __base->get_allocator());
-# endif
- return __result;
- }
- case _RopeRep::_S_substringfn:
- // Avoid introducing multiple layers of substring nodes.
- {
- _RopeSubstring* __old = (_RopeSubstring*)__base;
- size_t __result_len;
- if (__start >= __adj_endp1) return 0;
- __result_len = __adj_endp1 - __start;
- if (__result_len > __lazy_threshold) {
- _RopeSubstring* __result =
- _S_new_RopeSubstring(__old->_M_base,
- __start + __old->_M_start,
- __adj_endp1 - __start,
- __base->get_allocator());
- return __result;
-
- } // *** else fall through: ***
- }
- case _RopeRep::_S_function:
- {
- _RopeFunction* __f = (_RopeFunction*)__base;
- _CharT* __section;
- size_t __result_len;
- if (__start >= __adj_endp1) return 0;
- __result_len = __adj_endp1 - __start;
-
- if (__result_len > __lazy_threshold) goto lazy;
- __section = (_CharT*)
- _Data_allocate(_S_rounded_up_size(__result_len));
- __STL_TRY {
- (*(__f->_M_fn))(__start, __result_len, __section);
- }
- __STL_UNWIND(_RopeRep::__STL_FREE_STRING(
- __section, __result_len, __base->get_allocator()));
- _S_cond_store_eos(__section[__result_len]);
- return _S_new_RopeLeaf(__section, __result_len,
- __base->get_allocator());
- }
- }
- /*NOTREACHED*/
- __stl_assert(false);
- lazy:
- {
- // Create substring node.
- return _S_new_RopeSubstring(__base, __start, __adj_endp1 - __start,
- __base->get_allocator());
- }
-}
-
-template<class _CharT>
-class _Rope_flatten_char_consumer : public _Rope_char_consumer<_CharT> {
- private:
- _CharT* _M_buf_ptr;
- public:
- // _CharT* _M_buffer; // XXX not used
-
- _Rope_flatten_char_consumer(_CharT* __buffer) {
- _M_buf_ptr = __buffer;
- };
- ~_Rope_flatten_char_consumer() {}
- bool operator() (const _CharT* __leaf, size_t __n) {
- uninitialized_copy_n(__leaf, __n, _M_buf_ptr);
- _M_buf_ptr += __n;
- return true;
- }
-};
-
-template<class _CharT>
-class _Rope_find_char_char_consumer : public _Rope_char_consumer<_CharT> {
- private:
- _CharT _M_pattern;
- public:
- size_t _M_count; // Number of nonmatching characters
- _Rope_find_char_char_consumer(_CharT __p)
- : _M_pattern(__p), _M_count(0) {}
- ~_Rope_find_char_char_consumer() {}
- bool operator() (const _CharT* __leaf, size_t __n) {
- size_t __i;
- for (__i = 0; __i < __n; __i++) {
- if (__leaf[__i] == _M_pattern) {
- _M_count += __i; return false;
- }
- }
- _M_count += __n; return true;
- }
-};
-
-template<class _CharT>
-class _Rope_insert_char_consumer : public _Rope_char_consumer<_CharT> {
- private:
- typedef ostream _Insert_ostream;
- _Insert_ostream& _M_o;
- public:
- // _CharT* buffer; // XXX not used
- _Rope_insert_char_consumer(_Insert_ostream& __writer)
- : _M_o(__writer) {};
- ~_Rope_insert_char_consumer() { };
- // Caller is presumed to own the ostream
- bool operator() (const _CharT* __leaf, size_t __n);
- // Returns true to continue traversal.
-};
-
-template<class _CharT>
-bool _Rope_insert_char_consumer<_CharT>::operator()
- (const _CharT* __leaf, size_t __n)
-{
- size_t __i;
- // We assume that formatting is set up correctly for each element.
- for (__i = 0; __i < __n; __i++) _M_o << __leaf[__i];
- return true;
-}
-
-inline bool _Rope_insert_char_consumer<char>::operator()
- (const char* __leaf, size_t __n)
-{
- size_t __i;
- for (__i = 0; __i < __n; __i++) _M_o.put(__leaf[__i]);
- return true;
-}
-
-#if 0
-// I couldn't get this to work work with the VC++ version of basic_ostream.
-// It also doesn't really do the right thing unless o is a wide stream.
-// Given that wchar_t is often 4 bytes, its not clear to me how useful
-// this stuff is anyway.
-inline bool _Rope_insert_char_consumer<wchar_t>::operator()
- (const wchar_t* __leaf, size_t __n)
-{
- size_t __i;
- for (__i = 0; __i < __n; __i++) _M_o.put(__leaf[__i]);
- return true;
-}
-#endif /* !_MSC_VER && !BORLAND */
-
-template <class _CharT, class _Alloc>
-bool rope<_CharT, _Alloc>::_S_apply_to_pieces(
- _Rope_char_consumer<_CharT>& __c,
- const _RopeRep* __r,
- size_t __begin, size_t __end)
-{
- if (0 == __r) return true;
- switch(__r->_M_tag) {
- case _RopeRep::_S_concat:
- {
- _RopeConcatenation* __conc = (_RopeConcatenation*)__r;
- _RopeRep* __left = __conc->_M_left;
- size_t __left_len = __left->_M_size;
- if (__begin < __left_len) {
- size_t __left_end = min(__left_len, __end);
- if (!_S_apply_to_pieces(__c, __left, __begin, __left_end))
- return false;
- }
- if (__end > __left_len) {
- _RopeRep* __right = __conc->_M_right;
- size_t __right_start = max(__left_len, __begin);
- if (!_S_apply_to_pieces(__c, __right,
- __right_start - __left_len,
- __end - __left_len)) {
- return false;
- }
- }
- }
- return true;
- case _RopeRep::_S_leaf:
- {
- _RopeLeaf* __l = (_RopeLeaf*)__r;
- return __c(__l->_M_data + __begin, __end - __begin);
- }
- case _RopeRep::_S_function:
- case _RopeRep::_S_substringfn:
- {
- _RopeFunction* __f = (_RopeFunction*)__r;
- size_t __len = __end - __begin;
- bool __result;
- _CharT* __buffer =
- (_CharT*)alloc::allocate(__len * sizeof(_CharT));
- __STL_TRY {
- (*(__f->_M_fn))(__begin, __end, __buffer);
- __result = __c(__buffer, __len);
- alloc::deallocate(__buffer, __len * sizeof(_CharT));
- }
- __STL_UNWIND((alloc::deallocate(__buffer,
- __len * sizeof(_CharT))))
- return __result;
- }
- default:
- __stl_assert(false);
- /*NOTREACHED*/
- return false;
- }
-}
-
-inline void _Rope_fill(ostream& __o, size_t __n)
-{
- char __f = __o.fill();
- size_t __i;
-
- for (__i = 0; __i < __n; __i++) __o.put(__f);
-}
-
-
-template <class _CharT> inline bool _Rope_is_simple(_CharT*) { return false; }
-inline bool _Rope_is_simple(char*) { return true; }
-inline bool _Rope_is_simple(wchar_t*) { return true; }
-
-
-template<class _CharT, class _Alloc>
-ostream& operator<< (ostream& __o, const rope<_CharT, _Alloc>& __r)
-{
- size_t __w = __o.width();
- bool __left = bool(__o.flags() & ios::left);
- size_t __pad_len;
- size_t __rope_len = __r.size();
- _Rope_insert_char_consumer<_CharT> __c(__o);
- bool __is_simple = _Rope_is_simple((_CharT*)0);
-
- if (__rope_len < __w) {
- __pad_len = __w - __rope_len;
- } else {
- __pad_len = 0;
- }
- if (!__is_simple) __o.width(__w/__rope_len);
- __STL_TRY {
- if (__is_simple && !__left && __pad_len > 0) {
- _Rope_fill(__o, __pad_len);
- }
- __r.apply_to_pieces(0, __r.size(), __c);
- if (__is_simple && __left && __pad_len > 0) {
- _Rope_fill(__o, __pad_len);
- }
- if (!__is_simple)
- __o.width(__w);
- }
- __STL_UNWIND(if (!__is_simple) __o.width(__w))
- return __o;
-}
-
-template <class _CharT, class _Alloc>
-_CharT*
-rope<_CharT,_Alloc>::_S_flatten(_RopeRep* __r,
- size_t __start, size_t __len,
- _CharT* __buffer)
-{
- _Rope_flatten_char_consumer<_CharT> __c(__buffer);
- _S_apply_to_pieces(__c, __r, __start, __start + __len);
- return(__buffer + __len);
-}
-
-template <class _CharT, class _Alloc>
-size_t
-rope<_CharT,_Alloc>::find(_CharT __pattern, size_t __start) const
-{
- _Rope_find_char_char_consumer<_CharT> __c(__pattern);
- _S_apply_to_pieces(__c, _M_tree_ptr, __start, size());
- size_type __result_pos = __start + __c._M_count;
-# ifndef __STL_OLD_ROPE_SEMANTICS
- if (__result_pos == size()) __result_pos = npos;
-# endif
- return __result_pos;
-}
-
-template <class _CharT, class _Alloc>
-_CharT*
-rope<_CharT,_Alloc>::_S_flatten(_RopeRep* __r, _CharT* __buffer)
-{
- if (0 == __r) return __buffer;
- switch(__r->_M_tag) {
- case _RopeRep::_S_concat:
- {
- _RopeConcatenation* __c = (_RopeConcatenation*)__r;
- _RopeRep* __left = __c->_M_left;
- _RopeRep* __right = __c->_M_right;
- _CharT* __rest = _S_flatten(__left, __buffer);
- return _S_flatten(__right, __rest);
- }
- case _RopeRep::_S_leaf:
- {
- _RopeLeaf* __l = (_RopeLeaf*)__r;
- return copy_n(__l->_M_data, __l->_M_size, __buffer).second;
- }
- case _RopeRep::_S_function:
- case _RopeRep::_S_substringfn:
- // We dont yet do anything with substring nodes.
- // This needs to be fixed before ropefiles will work well.
- {
- _RopeFunction* __f = (_RopeFunction*)__r;
- (*(__f->_M_fn))(0, __f->_M_size, __buffer);
- return __buffer + __f->_M_size;
- }
- default:
- __stl_assert(false);
- /*NOTREACHED*/
- return 0;
- }
-}
-
-
-// This needs work for _CharT != char
-template <class _CharT, class _Alloc>
-void
-rope<_CharT,_Alloc>::_S_dump(_RopeRep* __r, int __indent)
-{
- for (int __i = 0; __i < __indent; __i++) putchar(' ');
- if (0 == __r) {
- printf("NULL\n"); return;
- }
- if (_RopeRep::_S_concat == __r->_M_tag) {
- _RopeConcatenation* __c = (_RopeConcatenation*)__r;
- _RopeRep* __left = __c->_M_left;
- _RopeRep* __right = __c->_M_right;
-
-# ifdef __GC
- printf("Concatenation %p (depth = %d, len = %ld, %s balanced)\n",
- __r, __r->_M_depth, __r->_M_size, __r->_M_is_balanced? "" : "not");
-# else
- printf("Concatenation %p (rc = %ld, depth = %d, "
- "len = %ld, %s balanced)\n",
- __r, __r->_M_refcount, __r->_M_depth, __r->_M_size,
- __r->_M_is_balanced? "" : "not");
-# endif
- _S_dump(__left, __indent + 2);
- _S_dump(__right, __indent + 2);
- return;
- } else {
- char* __kind;
-
- switch (__r->_M_tag) {
- case _RopeRep::_S_leaf:
- __kind = "Leaf";
- break;
- case _RopeRep::_S_function:
- __kind = "Function";
- break;
- case _RopeRep::_S_substringfn:
- __kind = "Function representing substring";
- break;
- default:
- __kind = "(corrupted kind field!)";
- }
-# ifdef __GC
- printf("%s %p (depth = %d, len = %ld) ",
- __kind, __r, __r->_M_depth, __r->_M_size);
-# else
- printf("%s %p (rc = %ld, depth = %d, len = %ld) ",
- __kind, __r, __r->_M_refcount, __r->_M_depth, __r->_M_size);
-# endif
- if (_S_is_one_byte_char_type((_CharT*)0)) {
- const int __max_len = 40;
- _Self_destruct_ptr __prefix(_S_substring(__r, 0, __max_len));
- _CharT __buffer[__max_len + 1];
- bool __too_big = __r->_M_size > __prefix->_M_size;
-
- _S_flatten(__prefix, __buffer);
- __buffer[__prefix->_M_size] = _S_eos((_CharT*)0);
- printf("%s%s\n",
- (char*)__buffer, __too_big? "...\n" : "\n");
- } else {
- printf("\n");
- }
- }
-}
-
-template <class _CharT, class _Alloc>
-const unsigned long
-rope<_CharT,_Alloc>::_S_min_len[
- _Rope_RopeRep<_CharT,_Alloc>::_S_max_rope_depth + 1] = {
-/* 0 */1, /* 1 */2, /* 2 */3, /* 3 */5, /* 4 */8, /* 5 */13, /* 6 */21,
-/* 7 */34, /* 8 */55, /* 9 */89, /* 10 */144, /* 11 */233, /* 12 */377,
-/* 13 */610, /* 14 */987, /* 15 */1597, /* 16 */2584, /* 17 */4181,
-/* 18 */6765, /* 19 */10946, /* 20 */17711, /* 21 */28657, /* 22 */46368,
-/* 23 */75025, /* 24 */121393, /* 25 */196418, /* 26 */317811,
-/* 27 */514229, /* 28 */832040, /* 29 */1346269, /* 30 */2178309,
-/* 31 */3524578, /* 32 */5702887, /* 33 */9227465, /* 34 */14930352,
-/* 35 */24157817, /* 36 */39088169, /* 37 */63245986, /* 38 */102334155,
-/* 39 */165580141, /* 40 */267914296, /* 41 */433494437,
-/* 42 */701408733, /* 43 */1134903170, /* 44 */1836311903,
-/* 45 */2971215073u };
-// These are Fibonacci numbers < 2**32.
-
-template <class _CharT, class _Alloc>
-rope<_CharT,_Alloc>::_RopeRep*
-rope<_CharT,_Alloc>::_S_balance(_RopeRep* __r)
-{
- _RopeRep* __forest[_RopeRep::_S_max_rope_depth + 1];
- _RopeRep* __result = 0;
- int __i;
- // Invariant:
- // The concatenation of forest in descending order is equal to __r.
- // __forest[__i]._M_size >= _S_min_len[__i]
- // __forest[__i]._M_depth = __i
- // References from forest are included in refcount.
-
- for (__i = 0; __i <= _RopeRep::_S_max_rope_depth; ++__i)
- __forest[__i] = 0;
- __STL_TRY {
- _S_add_to_forest(__r, __forest);
- for (__i = 0; __i <= _RopeRep::_S_max_rope_depth; ++__i)
- if (0 != __forest[__i]) {
-# ifndef __GC
- _Self_destruct_ptr __old(__result);
-# endif
- __result = _S_concat(__forest[__i], __result);
- __forest[__i]->_M_unref_nonnil();
-# if !defined(__GC) && defined(__STL_USE_EXCEPTIONS)
- __forest[__i] = 0;
-# endif
- }
- }
- __STL_UNWIND(for(__i = 0; __i <= _RopeRep::_S_max_rope_depth; __i++)
- _S_unref(__forest[__i]))
- if (__result->_M_depth > _RopeRep::_S_max_rope_depth) abort();
- return(__result);
-}
-
-
-template <class _CharT, class _Alloc>
-void
-rope<_CharT,_Alloc>::_S_add_to_forest(_RopeRep* __r, _RopeRep** __forest)
-{
- if (__r->_M_is_balanced) {
- _S_add_leaf_to_forest(__r, __forest);
- return;
- }
- __stl_assert(__r->_M_tag == _RopeRep::_S_concat);
- {
- _RopeConcatenation* __c = (_RopeConcatenation*)__r;
-
- _S_add_to_forest(__c->_M_left, __forest);
- _S_add_to_forest(__c->_M_right, __forest);
- }
-}
-
-
-template <class _CharT, class _Alloc>
-void
-rope<_CharT,_Alloc>::_S_add_leaf_to_forest(_RopeRep* __r, _RopeRep** __forest)
-{
- _RopeRep* __insertee; // included in refcount
- _RopeRep* __too_tiny = 0; // included in refcount
- int __i; // forest[0..__i-1] is empty
- size_t __s = __r->_M_size;
-
- for (__i = 0; __s >= _S_min_len[__i+1]/* not this bucket */; ++__i) {
- if (0 != __forest[__i]) {
-# ifndef __GC
- _Self_destruct_ptr __old(__too_tiny);
-# endif
- __too_tiny = _S_concat_and_set_balanced(__forest[__i], __too_tiny);
- __forest[__i]->_M_unref_nonnil();
- __forest[__i] = 0;
- }
- }
- {
-# ifndef __GC
- _Self_destruct_ptr __old(__too_tiny);
-# endif
- __insertee = _S_concat_and_set_balanced(__too_tiny, __r);
- }
- // Too_tiny dead, and no longer included in refcount.
- // Insertee is live and included.
- __stl_assert(_S_is_almost_balanced(__insertee));
- __stl_assert(__insertee->_M_depth <= __r->_M_depth + 1);
- for (;; ++__i) {
- if (0 != __forest[__i]) {
-# ifndef __GC
- _Self_destruct_ptr __old(__insertee);
-# endif
- __insertee = _S_concat_and_set_balanced(__forest[__i], __insertee);
- __forest[__i]->_M_unref_nonnil();
- __forest[__i] = 0;
- __stl_assert(_S_is_almost_balanced(__insertee));
- }
- __stl_assert(_S_min_len[__i] <= __insertee->_M_size);
- __stl_assert(__forest[__i] == 0);
- if (__i == _RopeRep::_S_max_rope_depth ||
- __insertee->_M_size < _S_min_len[__i+1]) {
- __forest[__i] = __insertee;
- // refcount is OK since __insertee is now dead.
- return;
- }
- }
-}
-
-template <class _CharT, class _Alloc>
-_CharT
-rope<_CharT,_Alloc>::_S_fetch(_RopeRep* __r, size_type __i)
-{
- __GC_CONST _CharT* __cstr = __r->_M_c_string;
-
- __stl_assert(__i < __r->_M_size);
- if (0 != __cstr) return __cstr[__i];
- for(;;) {
- switch(__r->_M_tag) {
- case _RopeRep::_S_concat:
- {
- _RopeConcatenation* __c = (_RopeConcatenation*)__r;
- _RopeRep* __left = __c->_M_left;
- size_t __left_len = __left->_M_size;
-
- if (__i >= __left_len) {
- __i -= __left_len;
- __r = __c->_M_right;
- } else {
- __r = __left;
- }
- }
- break;
- case _RopeRep::_S_leaf:
- {
- _RopeLeaf* __l = (_RopeLeaf*)__r;
- return __l->_M_data[__i];
- }
- case _RopeRep::_S_function:
- case _RopeRep::_S_substringfn:
- {
- _RopeFunction* __f = (_RopeFunction*)__r;
- _CharT __result;
-
- (*(__f->_M_fn))(__i, 1, &__result);
- return __result;
- }
- }
- }
-}
-
-# ifndef __GC
-// Return a uniquely referenced character slot for the given
-// position, or 0 if that's not possible.
-template <class _CharT, class _Alloc>
-_CharT*
-rope<_CharT,_Alloc>::_S_fetch_ptr(_RopeRep* __r, size_type __i)
-{
- _RopeRep* __clrstack[_RopeRep::_S_max_rope_depth];
- size_t __csptr = 0;
-
- for(;;) {
- if (__r->_M_refcount > 1) return 0;
- switch(__r->_M_tag) {
- case _RopeRep::_S_concat:
- {
- _RopeConcatenation* __c = (_RopeConcatenation*)__r;
- _RopeRep* __left = __c->_M_left;
- size_t __left_len = __left->_M_size;
-
- if (__c->_M_c_string != 0) __clrstack[__csptr++] = __c;
- if (__i >= __left_len) {
- __i -= __left_len;
- __r = __c->_M_right;
- } else {
- __r = __left;
- }
- }
- break;
- case _RopeRep::_S_leaf:
- {
- _RopeLeaf* __l = (_RopeLeaf*)__r;
- if (__l->_M_c_string != __l->_M_data && __l->_M_c_string != 0)
- __clrstack[__csptr++] = __l;
- while (__csptr > 0) {
- -- __csptr;
- _RopeRep* __d = __clrstack[__csptr];
- __d->_M_free_c_string();
- __d->_M_c_string = 0;
- }
- return __l->_M_data + __i;
- }
- case _RopeRep::_S_function:
- case _RopeRep::_S_substringfn:
- return 0;
- }
- }
-}
-# endif /* __GC */
-
-// The following could be implemented trivially using
-// lexicographical_compare_3way.
-// We do a little more work to avoid dealing with rope iterators for
-// flat strings.
-template <class _CharT, class _Alloc>
-int
-rope<_CharT,_Alloc>::_S_compare (const _RopeRep* __left,
- const _RopeRep* __right)
-{
- size_t __left_len;
- size_t __right_len;
-
- if (0 == __right) return 0 != __left;
- if (0 == __left) return -1;
- __left_len = __left->_M_size;
- __right_len = __right->_M_size;
- if (_RopeRep::_S_leaf == __left->_M_tag) {
- _RopeLeaf* __l = (_RopeLeaf*) __left;
- if (_RopeRep::_S_leaf == __right->_M_tag) {
- _RopeLeaf* __r = (_RopeLeaf*) __right;
- return lexicographical_compare_3way(
- __l->_M_data, __l->_M_data + __left_len,
- __r->_M_data, __r->_M_data + __right_len);
- } else {
- const_iterator __rstart(__right, 0);
- const_iterator __rend(__right, __right_len);
- return lexicographical_compare_3way(
- __l->_M_data, __l->_M_data + __left_len,
- __rstart, __rend);
- }
- } else {
- const_iterator __lstart(__left, 0);
- const_iterator __lend(__left, __left_len);
- if (_RopeRep::_S_leaf == __right->_M_tag) {
- _RopeLeaf* __r = (_RopeLeaf*) __right;
- return lexicographical_compare_3way(
- __lstart, __lend,
- __r->_M_data, __r->_M_data + __right_len);
- } else {
- const_iterator __rstart(__right, 0);
- const_iterator __rend(__right, __right_len);
- return lexicographical_compare_3way(
- __lstart, __lend,
- __rstart, __rend);
- }
- }
-}
-
-// Assignment to reference proxies.
-template <class _CharT, class _Alloc>
-_Rope_char_ref_proxy<_CharT, _Alloc>&
-_Rope_char_ref_proxy<_CharT, _Alloc>::operator= (_CharT __c) {
- _RopeRep* __old = _M_root->_M_tree_ptr;
-# ifndef __GC
- // First check for the case in which everything is uniquely
- // referenced. In that case we can do this destructively.
- _CharT* __ptr = _My_rope::_S_fetch_ptr(__old, _M_pos);
- if (0 != __ptr) {
- *__ptr = __c;
- return *this;
- }
-# endif
- _Self_destruct_ptr __left(
- _My_rope::_S_substring(__old, 0, _M_pos));
- _Self_destruct_ptr __right(
- _My_rope::_S_substring(__old, _M_pos+1, __old->_M_size));
- _Self_destruct_ptr __result_left(
- _My_rope::_S_destr_concat_char_iter(__left, &__c, 1));
-
-# ifndef __GC
- __stl_assert(__left == __result_left || 1 == __result_left->_M_refcount);
-# endif
- _RopeRep* __result =
- _My_rope::_S_concat(__result_left, __right);
-# ifndef __GC
- __stl_assert(1 <= __result->_M_refcount);
- _RopeRep::_S_unref(__old);
-# endif
- _M_root->_M_tree_ptr = __result;
- return *this;
-}
-
-template <class _CharT, class _Alloc>
-inline _Rope_char_ref_proxy<_CharT, _Alloc>::operator _CharT () const
-{
- if (_M_current_valid) {
- return _M_current;
- } else {
- return _My_rope::_S_fetch(_M_root->_M_tree_ptr, _M_pos);
- }
-}
-template <class _CharT, class _Alloc>
-_Rope_char_ptr_proxy<_CharT, _Alloc>
-_Rope_char_ref_proxy<_CharT, _Alloc>::operator& () const {
- return _Rope_char_ptr_proxy<_CharT, _Alloc>(*this);
-}
-
-template <class _CharT, class _Alloc>
-rope<_CharT, _Alloc>::rope(size_t __n, _CharT __c,
- const allocator_type& __a)
-: _Base(__a)
-{
- rope<_CharT,_Alloc> __result;
- const size_t __exponentiate_threshold = 32;
- size_t __exponent;
- size_t __rest;
- _CharT* __rest_buffer;
- _RopeRep* __remainder;
- rope<_CharT,_Alloc> __remainder_rope;
-
- if (0 == __n)
- return;
-
- __exponent = __n / __exponentiate_threshold;
- __rest = __n % __exponentiate_threshold;
- if (0 == __rest) {
- __remainder = 0;
- } else {
- __rest_buffer = _Data_allocate(_S_rounded_up_size(__rest));
- uninitialized_fill_n(__rest_buffer, __rest, __c);
- _S_cond_store_eos(__rest_buffer[__rest]);
- __STL_TRY {
- __remainder = _S_new_RopeLeaf(__rest_buffer, __rest, __a);
- }
- __STL_UNWIND(_RopeRep::__STL_FREE_STRING(__rest_buffer, __rest, __a))
- }
- __remainder_rope._M_tree_ptr = __remainder;
- if (__exponent != 0) {
- _CharT* __base_buffer =
- _Data_allocate(_S_rounded_up_size(__exponentiate_threshold));
- _RopeLeaf* __base_leaf;
- rope __base_rope;
- uninitialized_fill_n(__base_buffer, __exponentiate_threshold, __c);
- _S_cond_store_eos(__base_buffer[__exponentiate_threshold]);
- __STL_TRY {
- __base_leaf = _S_new_RopeLeaf(__base_buffer,
- __exponentiate_threshold, __a);
- }
- __STL_UNWIND(_RopeRep::__STL_FREE_STRING(__base_buffer,
- __exponentiate_threshold, __a))
- __base_rope._M_tree_ptr = __base_leaf;
- if (1 == __exponent) {
- __result = __base_rope;
-# ifndef __GC
- __stl_assert(2 == __result._M_tree_ptr->_M_refcount);
- // One each for base_rope and __result
-# endif
- } else {
- // XXX what is power()?
- __result = power(__base_rope, __exponent, _Concat_fn());
- }
- if (0 != __remainder) {
- __result += __remainder_rope;
- }
- } else {
- __result = __remainder_rope;
- }
- _M_tree_ptr = __result._M_tree_ptr;
- _M_tree_ptr->_M_ref_nonnil();
-}
-
-template<class _CharT, class _Alloc>
- _CharT rope<_CharT,_Alloc>::_S_empty_c_str[1];
-
-# ifdef __STL_PTHREADS
- template<class _CharT, class _Alloc>
- pthread_mutex_t
- rope<_CharT,_Alloc>::_S_swap_lock = PTHREAD_MUTEX_INITIALIZER;
-# endif
-
-template<class _CharT, class _Alloc>
-const _CharT* rope<_CharT,_Alloc>::c_str() const {
- if (0 == _M_tree_ptr) {
- _S_empty_c_str[0] = _S_eos((_CharT*)0); // Possibly redundant,
- // but probably fast.
- return _S_empty_c_str;
- }
- __GC_CONST _CharT* __old_c_string = _M_tree_ptr->_M_c_string;
- if (0 != __old_c_string) return(__old_c_string);
- size_t __s = size();
- _CharT* __result = _Data_allocate(__s + 1);
- _S_flatten(_M_tree_ptr, __result);
- __result[__s] = _S_eos((_CharT*)0);
-# ifdef __GC
- _M_tree_ptr->_M_c_string = __result;
-# else
- if ((__old_c_string =
- _S_atomic_swap(&(_M_tree_ptr->_M_c_string), __result)) != 0) {
- // It must have been added in the interim. Hence it had to have been
- // separately allocated. Deallocate the old copy, since we just
- // replaced it.
- destroy(__old_c_string, __old_c_string + __s + 1);
- _Data_deallocate(__old_c_string, __s + 1);
- }
-# endif
- return(__result);
-}
-
-template<class _CharT, class _Alloc>
-const _CharT* rope<_CharT,_Alloc>::replace_with_c_str() {
- if (0 == _M_tree_ptr) {
- _S_empty_c_str[0] = _S_eos((_CharT*)0);
- return _S_empty_c_str;
- }
- __GC_CONST _CharT* __old_c_string = _M_tree_ptr->_M_c_string;
- if (_RopeRep::_S_leaf == _M_tree_ptr->_M_tag && 0 != __old_c_string) {
- return(__old_c_string);
- }
- size_t __s = size();
- _CharT* __result = _Data_allocate(_S_rounded_up_size(__s));
- _S_flatten(_M_tree_ptr, __result);
- __result[__s] = _S_eos((_CharT*)0);
- _M_tree_ptr->_M_unref_nonnil();
- _M_tree_ptr = _S_new_RopeLeaf(__result, __s, get_allocator());
- return(__result);
-}
-
-// Algorithm specializations. More should be added.
-
-#ifndef _MSC_VER
-// I couldn't get this to work with VC++
-template<class _CharT,class _Alloc>
-void
-_Rope_rotate(_Rope_iterator<_CharT,_Alloc> __first,
- _Rope_iterator<_CharT,_Alloc> __middle,
- _Rope_iterator<_CharT,_Alloc> __last)
-{
- __stl_assert(__first.container() == __middle.container()
- && __middle.container() == __last.container());
- rope<_CharT,_Alloc>& __r(__first.container());
- rope<_CharT,_Alloc> __prefix = __r.substr(0, __first.index());
- rope<_CharT,_Alloc> __suffix =
- __r.substr(__last.index(), __r.size() - __last.index());
- rope<_CharT,_Alloc> __part1 =
- __r.substr(__middle.index(), __last.index() - __middle.index());
- rope<_CharT,_Alloc> __part2 =
- __r.substr(__first.index(), __middle.index() - __first.index());
- __r = __prefix;
- __r += __part1;
- __r += __part2;
- __r += __suffix;
-}
-
-#if !defined(__GNUC__)
-// Appears to confuse g++
-inline void rotate(_Rope_iterator<char,__STL_DEFAULT_ALLOCATOR(char)> __first,
- _Rope_iterator<char,__STL_DEFAULT_ALLOCATOR(char)> __middle,
- _Rope_iterator<char,__STL_DEFAULT_ALLOCATOR(char)> __last) {
- _Rope_rotate(__first, __middle, __last);
-}
-#endif
-
-# if 0
-// Probably not useful for several reasons:
-// - for SGIs 7.1 compiler and probably some others,
-// this forces lots of rope<wchar_t, ...> instantiations, creating a
-// code bloat and compile time problem. (Fixed in 7.2.)
-// - wchar_t is 4 bytes wide on most UNIX platforms, making it unattractive
-// for unicode strings. Unsigned short may be a better character
-// type.
-inline void rotate(
- _Rope_iterator<wchar_t,__STL_DEFAULT_ALLOCATOR(char)> __first,
- _Rope_iterator<wchar_t,__STL_DEFAULT_ALLOCATOR(char)> __middle,
- _Rope_iterator<wchar_t,__STL_DEFAULT_ALLOCATOR(char)> __last) {
- _Rope_rotate(__first, __middle, __last);
-}
-# endif
-#endif /* _MSC_VER */
-
-#if defined(__sgi) && !defined(__GNUC__) && (_MIPS_SIM != _MIPS_SIM_ABI32)
-#pragma reset woff 1174
-#endif
-
-__STL_END_NAMESPACE
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/set b/contrib/libstdc++/stl/set
deleted file mode 100644
index c836c4596d28..000000000000
--- a/contrib/libstdc++/stl/set
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- * Copyright (c) 1996,1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-#ifndef __SGI_STL_SET
-#define __SGI_STL_SET
-
-#ifndef __SGI_STL_INTERNAL_TREE_H
-#include <stl_tree.h>
-#endif
-#include <stl_set.h>
-#include <stl_multiset.h>
-
-#endif /* __SGI_STL_SET */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/set.h b/contrib/libstdc++/stl/set.h
deleted file mode 100644
index 9004d2e04770..000000000000
--- a/contrib/libstdc++/stl/set.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- * Copyright (c) 1996,1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-#ifndef __SGI_STL_SET_H
-#define __SGI_STL_SET_H
-
-#include <tree.h>
-#include <stl_set.h>
-
-#ifdef __STL_USE_NAMESPACES
-using __STD::set;
-#endif /* __STL_USE_NAMESPACES */
-
-#endif /* __SGI_STL_SET_H */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/slist b/contrib/libstdc++/stl/slist
deleted file mode 100644
index c3ec74204c55..000000000000
--- a/contrib/libstdc++/stl/slist
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright (c) 1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-#ifndef __SGI_STL_SLIST
-#define __SGI_STL_SLIST
-
-#include <stl_algobase.h>
-#include <stl_alloc.h>
-#include <stl_construct.h>
-#include <stl_uninitialized.h>
-#include <stl_slist.h>
-
-#endif /* __SGI_STL_SLIST */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/slist.h b/contrib/libstdc++/stl/slist.h
deleted file mode 100644
index d2377b0cf5ae..000000000000
--- a/contrib/libstdc++/stl/slist.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (c) 1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-#ifndef __SGI_STL_SLIST_H
-#define __SGI_STL_SLIST_H
-
-#include <algobase.h>
-#include <alloc.h>
-#include <stl_slist.h>
-
-#ifdef __STL_USE_NAMESPACES
-using __STD::slist;
-#endif /* __STL_USE_NAMESPACES */
-
-#endif /* __SGI_STL_SLIST_H */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/stack b/contrib/libstdc++/stl/stack
deleted file mode 100644
index 36461d95b8c4..000000000000
--- a/contrib/libstdc++/stl/stack
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- * Copyright (c) 1996,1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-#ifndef __SGI_STL_STACK
-#define __SGI_STL_STACK
-
-#include <stl_algobase.h>
-#include <stl_alloc.h>
-#include <stl_construct.h>
-#include <stl_uninitialized.h>
-#include <stl_deque.h>
-#include <stl_stack.h>
-
-#endif /* __SGI_STL_STACK */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/stack.h b/contrib/libstdc++/stl/stack.h
deleted file mode 100644
index 89beca82f128..000000000000
--- a/contrib/libstdc++/stl/stack.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- * Copyright (c) 1996,1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-#ifndef __SGI_STL_STACK_H
-#define __SGI_STL_STACK_H
-
-#include <vector.h>
-#include <deque.h>
-#include <heap.h>
-#include <stl_stack.h>
-#include <stl_queue.h>
-
-#ifdef __STL_USE_NAMESPACES
-using __STD::stack;
-using __STD::queue;
-using __STD::priority_queue;
-#endif /* __STL_USE_NAMESPACES */
-
-#endif /* __SGI_STL_STACK_H */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/stl_algo.h b/contrib/libstdc++/stl/stl_algo.h
deleted file mode 100644
index e9beaee15f11..000000000000
--- a/contrib/libstdc++/stl/stl_algo.h
+++ /dev/null
@@ -1,2894 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- * Copyright (c) 1996
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-/* NOTE: This is an internal header file, included by other STL headers.
- * You should not attempt to use it directly.
- */
-
-#ifndef __SGI_STL_INTERNAL_ALGO_H
-#define __SGI_STL_INTERNAL_ALGO_H
-
-#include <stl_heap.h>
-
-__STL_BEGIN_NAMESPACE
-
-#if defined(__sgi) && !defined(__GNUC__) && (_MIPS_SIM != _MIPS_SIM_ABI32)
-#pragma set woff 1209
-#endif
-
-// __median (an extension, not present in the C++ standard).
-
-template <class _Tp>
-inline const _Tp& __median(const _Tp& __a, const _Tp& __b, const _Tp& __c) {
- if (__a < __b)
- if (__b < __c)
- return __b;
- else if (__a < __c)
- return __c;
- else
- return __a;
- else if (__a < __c)
- return __a;
- else if (__b < __c)
- return __c;
- else
- return __b;
-}
-
-template <class _Tp, class _Compare>
-inline const _Tp&
-__median(const _Tp& __a, const _Tp& __b, const _Tp& __c, _Compare __comp) {
- if (__comp(__a, __b))
- if (__comp(__b, __c))
- return __b;
- else if (__comp(__a, __c))
- return __c;
- else
- return __a;
- else if (__comp(__a, __c))
- return __a;
- else if (__comp(__b, __c))
- return __c;
- else
- return __b;
-}
-
-// for_each. Apply a function to every element of a range.
-template <class _InputIter, class _Function>
-_Function for_each(_InputIter __first, _InputIter __last, _Function __f) {
- for ( ; __first != __last; ++__first)
- __f(*__first);
- return __f;
-}
-
-// find and find_if.
-
-template <class _InputIter, class _Tp>
-inline _InputIter find(_InputIter __first, _InputIter __last,
- const _Tp& __val,
- input_iterator_tag)
-{
- while (__first != __last && *__first != __val)
- ++__first;
- return __first;
-}
-
-template <class _InputIter, class _Predicate>
-inline _InputIter find_if(_InputIter __first, _InputIter __last,
- _Predicate __pred,
- input_iterator_tag)
-{
- while (__first != __last && !__pred(*__first))
- ++__first;
- return __first;
-}
-
-#ifdef __STL_CLASS_PARTIAL_SPECIALIZATION
-
-template <class _RandomAccessIter, class _Tp>
-_RandomAccessIter find(_RandomAccessIter __first, _RandomAccessIter __last,
- const _Tp& __val,
- random_access_iterator_tag)
-{
- typename iterator_traits<_RandomAccessIter>::difference_type __trip_count
- = (__last - __first) >> 2;
-
- for ( ; __trip_count > 0 ; --__trip_count) {
- if (*__first == __val) return __first;
- ++__first;
-
- if (*__first == __val) return __first;
- ++__first;
-
- if (*__first == __val) return __first;
- ++__first;
-
- if (*__first == __val) return __first;
- ++__first;
- }
-
- switch(__last - __first) {
- case 3:
- if (*__first == __val) return __first;
- ++__first;
- case 2:
- if (*__first == __val) return __first;
- ++__first;
- case 1:
- if (*__first == __val) return __first;
- ++__first;
- case 0:
- default:
- return __last;
- }
-}
-
-template <class _RandomAccessIter, class _Predicate>
-_RandomAccessIter find_if(_RandomAccessIter __first, _RandomAccessIter __last,
- _Predicate __pred,
- random_access_iterator_tag)
-{
- typename iterator_traits<_RandomAccessIter>::difference_type __trip_count
- = (__last - __first) >> 2;
-
- for ( ; __trip_count > 0 ; --__trip_count) {
- if (__pred(*__first)) return __first;
- ++__first;
-
- if (__pred(*__first)) return __first;
- ++__first;
-
- if (__pred(*__first)) return __first;
- ++__first;
-
- if (__pred(*__first)) return __first;
- ++__first;
- }
-
- switch(__last - __first) {
- case 3:
- if (__pred(*__first)) return __first;
- ++__first;
- case 2:
- if (__pred(*__first)) return __first;
- ++__first;
- case 1:
- if (__pred(*__first)) return __first;
- ++__first;
- case 0:
- default:
- return __last;
- }
-}
-
-#endif /* __STL_CLASS_PARTIAL_SPECIALIZATION */
-
-template <class _InputIter, class _Tp>
-inline _InputIter find(_InputIter __first, _InputIter __last,
- const _Tp& __val)
-{
- return find(__first, __last, __val, __ITERATOR_CATEGORY(__first));
-}
-
-template <class _InputIter, class _Predicate>
-inline _InputIter find_if(_InputIter __first, _InputIter __last,
- _Predicate __pred) {
- return find_if(__first, __last, __pred, __ITERATOR_CATEGORY(__first));
-}
-
-// adjacent_find.
-
-template <class _ForwardIter>
-_ForwardIter adjacent_find(_ForwardIter __first, _ForwardIter __last) {
- if (__first == __last)
- return __last;
- _ForwardIter __next = __first;
- while(++__next != __last) {
- if (*__first == *__next)
- return __first;
- __first = __next;
- }
- return __last;
-}
-
-template <class _ForwardIter, class _BinaryPredicate>
-_ForwardIter adjacent_find(_ForwardIter __first, _ForwardIter __last,
- _BinaryPredicate __binary_pred) {
- if (__first == __last)
- return __last;
- _ForwardIter __next = __first;
- while(++__next != __last) {
- if (__binary_pred(*__first, *__next))
- return __first;
- __first = __next;
- }
- return __last;
-}
-
-// count and count_if. There are two version of each, one whose return type
-// type is void and one (present only if we have partial specialization)
-// whose return type is iterator_traits<_InputIter>::difference_type. The
-// C++ standard only has the latter version, but the former, which was present
-// in the HP STL, is retained for backward compatibility.
-
-template <class _InputIter, class _Tp, class _Size>
-void count(_InputIter __first, _InputIter __last, const _Tp& __value,
- _Size& __n) {
- for ( ; __first != __last; ++__first)
- if (*__first == __value)
- ++__n;
-}
-
-template <class _InputIter, class _Predicate, class _Size>
-void count_if(_InputIter __first, _InputIter __last, _Predicate __pred,
- _Size& __n) {
- for ( ; __first != __last; ++__first)
- if (__pred(*__first))
- ++__n;
-}
-
-#ifdef __STL_CLASS_PARTIAL_SPECIALIZATION
-
-template <class _InputIter, class _Tp>
-typename iterator_traits<_InputIter>::difference_type
-count(_InputIter __first, _InputIter __last, const _Tp& __value) {
- typename iterator_traits<_InputIter>::difference_type __n = 0;
- for ( ; __first != __last; ++__first)
- if (*__first == __value)
- ++__n;
- return __n;
-}
-
-template <class _InputIter, class _Predicate>
-typename iterator_traits<_InputIter>::difference_type
-count_if(_InputIter __first, _InputIter __last, _Predicate __pred) {
- typename iterator_traits<_InputIter>::difference_type __n = 0;
- for ( ; __first != __last; ++__first)
- if (__pred(*__first))
- ++__n;
- return __n;
-}
-
-
-#endif /* __STL_CLASS_PARTIAL_SPECIALIZATION */
-
-// search.
-
-template <class _ForwardIter1, class _ForwardIter2>
-_ForwardIter1 search(_ForwardIter1 __first1, _ForwardIter1 __last1,
- _ForwardIter2 __first2, _ForwardIter2 __last2)
-{
- // Test for empty ranges
- if (__first1 == __last1 || __first2 == __last2)
- return __first1;
-
- // Test for a pattern of length 1.
- _ForwardIter2 __tmp(__first2);
- ++__tmp;
- if (__tmp == __last2)
- return find(__first1, __last1, *__first2);
-
- // General case.
-
- _ForwardIter2 __p1, __p;
-
- __p1 = __first2; ++__p1;
-
- _ForwardIter1 __current = __first1;
-
- while (__first1 != __last1) {
- __first1 = find(__first1, __last1, *__first2);
- if (__first1 == __last1)
- return __last1;
-
- __p = __p1;
- __current = __first1;
- if (++__current == __last1)
- return __last1;
-
- while (*__current == *__p) {
- if (++__p == __last2)
- return __first1;
- if (++__current == __last1)
- return __last1;
- }
-
- ++__first1;
- }
- return __first1;
-}
-
-template <class _ForwardIter1, class _ForwardIter2, class _BinaryPred>
-_ForwardIter1 search(_ForwardIter1 __first1, _ForwardIter1 __last1,
- _ForwardIter2 __first2, _ForwardIter2 __last2,
- _BinaryPred __predicate)
-{
- // Test for empty ranges
- if (__first1 == __last1 || __first2 == __last2)
- return __first1;
-
- // Test for a pattern of length 1.
- _ForwardIter2 __tmp(__first2);
- ++__tmp;
- if (__tmp == __last2)
- return find(__first1, __last1, *__first2);
-
- // General case.
-
- _ForwardIter2 __p1, __p;
-
- __p1 = __first2; ++__p1;
-
- _ForwardIter1 __current = __first1;
-
- while (__first1 != __last1) {
- while (__first1 != __last1) {
- if (__predicate(*__first1, *__first2))
- break;
- ++__first1;
- }
- while (__first1 != __last1 && !__predicate(*__first1, *__first2))
- ++__first1;
- if (__first1 == __last1)
- return __last1;
-
- __p = __p1;
- __current = __first1;
- if (++__current == __last1) return __last1;
-
- while (__predicate(*__current, *__p)) {
- if (++__p == __last2)
- return __first1;
- if (++__current == __last1)
- return __last1;
- }
-
- ++__first1;
- }
- return __first1;
-}
-
-// search_n. Search for __count consecutive copies of __val.
-
-template <class _ForwardIter, class _Integer, class _Tp>
-_ForwardIter search_n(_ForwardIter __first, _ForwardIter __last,
- _Integer __count, const _Tp& __val) {
- if (__count <= 0)
- return __first;
- else {
- __first = find(__first, __last, __val);
- while (__first != __last) {
- _Integer __n = __count - 1;
- _ForwardIter __i = __first;
- ++__i;
- while (__i != __last && __n != 0 && *__i == __val) {
- ++__i;
- --__n;
- }
- if (__n == 0)
- return __first;
- else
- __first = find(__i, __last, __val);
- }
- return __last;
- }
-}
-
-template <class _ForwardIter, class _Integer, class _Tp, class _BinaryPred>
-_ForwardIter search_n(_ForwardIter __first, _ForwardIter __last,
- _Integer __count, const _Tp& __val,
- _BinaryPred __binary_pred) {
- if (__count <= 0)
- return __first;
- else {
- while (__first != __last) {
- if (__binary_pred(*__first, __val))
- break;
- ++__first;
- }
- while (__first != __last) {
- _Integer __n = __count - 1;
- _ForwardIter __i = __first;
- ++__i;
- while (__i != __last && __n != 0 && __binary_pred(*__i, __val)) {
- ++__i;
- --__n;
- }
- if (__n == 0)
- return __first;
- else {
- while (__i != __last) {
- if (__binary_pred(*__i, __val))
- break;
- ++__i;
- }
- __first = __i;
- }
- }
- return __last;
- }
-}
-
-// swap_ranges
-
-template <class _ForwardIter1, class _ForwardIter2>
-_ForwardIter2 swap_ranges(_ForwardIter1 __first1, _ForwardIter1 __last1,
- _ForwardIter2 __first2) {
- for ( ; __first1 != __last1; ++__first1, ++__first2)
- iter_swap(__first1, __first2);
- return __first2;
-}
-
-// transform
-
-template <class _InputIter, class _OutputIter, class _UnaryOperation>
-_OutputIter transform(_InputIter __first, _InputIter __last,
- _OutputIter __result, _UnaryOperation __oper) {
- for ( ; __first != __last; ++__first, ++__result)
- *__result = __oper(*__first);
- return __result;
-}
-
-template <class _InputIter1, class _InputIter2, class _OutputIter,
- class _BinaryOperation>
-_OutputIter transform(_InputIter1 __first1, _InputIter1 __last1,
- _InputIter2 __first2, _OutputIter __result,
- _BinaryOperation __binary_op) {
- for ( ; __first1 != __last1; ++__first1, ++__first2, ++__result)
- *__result = __binary_op(*__first1, *__first2);
- return __result;
-}
-
-// replace, replace_if, replace_copy, replace_copy_if
-
-template <class _ForwardIter, class _Tp>
-void replace(_ForwardIter __first, _ForwardIter __last,
- const _Tp& __old_value, const _Tp& __new_value) {
- for ( ; __first != __last; ++__first)
- if (*__first == __old_value)
- *__first = __new_value;
-}
-
-template <class _ForwardIter, class _Predicate, class _Tp>
-void replace_if(_ForwardIter __first, _ForwardIter __last,
- _Predicate __pred, const _Tp& __new_value) {
- for ( ; __first != __last; ++__first)
- if (__pred(*__first))
- *__first = __new_value;
-}
-
-template <class _InputIter, class _OutputIter, class _Tp>
-_OutputIter replace_copy(_InputIter __first, _InputIter __last,
- _OutputIter __result,
- const _Tp& __old_value, const _Tp& __new_value) {
- for ( ; __first != __last; ++__first, ++__result)
- *__result = *__first == __old_value ? __new_value : *__first;
- return __result;
-}
-
-template <class Iterator, class _OutputIter, class _Predicate, class _Tp>
-_OutputIter replace_copy_if(Iterator __first, Iterator __last,
- _OutputIter __result,
- _Predicate __pred, const _Tp& __new_value) {
- for ( ; __first != __last; ++__first, ++__result)
- *__result = __pred(*__first) ? __new_value : *__first;
- return __result;
-}
-
-// generate and generate_n
-
-template <class _ForwardIter, class _Generator>
-void generate(_ForwardIter __first, _ForwardIter __last, _Generator __gen) {
- for ( ; __first != __last; ++__first)
- *__first = __gen();
-}
-
-template <class _OutputIter, class _Size, class _Generator>
-_OutputIter generate_n(_OutputIter __first, _Size __n, _Generator __gen) {
- for ( ; __n > 0; --__n, ++__first)
- *__first = __gen();
- return __first;
-}
-
-// remove, remove_if, remove_copy, remove_copy_if
-
-template <class _InputIter, class _OutputIter, class _Tp>
-_OutputIter remove_copy(_InputIter __first, _InputIter __last,
- _OutputIter __result, const _Tp& __value) {
- for ( ; __first != __last; ++__first)
- if (*__first != __value) {
- *__result = *__first;
- ++__result;
- }
- return __result;
-}
-
-template <class _InputIter, class _OutputIter, class _Predicate>
-_OutputIter remove_copy_if(_InputIter __first, _InputIter __last,
- _OutputIter __result, _Predicate __pred) {
- for ( ; __first != __last; ++__first)
- if (!__pred(*__first)) {
- *__result = *__first;
- ++__result;
- }
- return __result;
-}
-
-template <class _ForwardIter, class _Tp>
-_ForwardIter remove(_ForwardIter __first, _ForwardIter __last,
- const _Tp& __value) {
- __first = find(__first, __last, __value);
- _ForwardIter __i = __first;
- return __first == __last ? __first
- : remove_copy(++__i, __last, __first, __value);
-}
-
-template <class _ForwardIter, class _Predicate>
-_ForwardIter remove_if(_ForwardIter __first, _ForwardIter __last,
- _Predicate __pred) {
- __first = find_if(__first, __last, __pred);
- _ForwardIter __i = __first;
- return __first == __last ? __first
- : remove_copy_if(++__i, __last, __first, __pred);
-}
-
-// unique and unique_copy
-
-template <class _InputIter, class _OutputIter, class _Tp>
-_OutputIter __unique_copy(_InputIter __first, _InputIter __last,
- _OutputIter __result, _Tp*) {
- _Tp __value = *__first;
- *__result = __value;
- while (++__first != __last)
- if (__value != *__first) {
- __value = *__first;
- *++__result = __value;
- }
- return ++__result;
-}
-
-template <class _InputIter, class _OutputIter>
-inline _OutputIter __unique_copy(_InputIter __first, _InputIter __last,
- _OutputIter __result,
- output_iterator_tag) {
- return __unique_copy(__first, __last, __result, __VALUE_TYPE(__first));
-}
-
-template <class _InputIter, class _ForwardIter>
-_ForwardIter __unique_copy(_InputIter __first, _InputIter __last,
- _ForwardIter __result, forward_iterator_tag) {
- *__result = *__first;
- while (++__first != __last)
- if (*__result != *__first) *++__result = *__first;
- return ++__result;
-}
-
-template <class _InputIter, class _OutputIter>
-inline _OutputIter unique_copy(_InputIter __first, _InputIter __last,
- _OutputIter __result) {
- if (__first == __last) return __result;
- return __unique_copy(__first, __last, __result,
- __ITERATOR_CATEGORY(__result));
-}
-
-template <class _InputIter, class _OutputIter, class _BinaryPredicate,
- class _Tp>
-_OutputIter __unique_copy(_InputIter __first, _InputIter __last,
- _OutputIter __result,
- _BinaryPredicate __binary_pred, _Tp*) {
- _Tp __value = *__first;
- *__result = __value;
- while (++__first != __last)
- if (!__binary_pred(__value, *__first)) {
- __value = *__first;
- *++__result = __value;
- }
- return ++__result;
-}
-
-template <class _InputIter, class _OutputIter, class _BinaryPredicate>
-inline _OutputIter __unique_copy(_InputIter __first, _InputIter __last,
- _OutputIter __result,
- _BinaryPredicate __binary_pred,
- output_iterator_tag) {
- return __unique_copy(__first, __last, __result, __binary_pred,
- __VALUE_TYPE(__first));
-}
-
-template <class _InputIter, class _ForwardIter, class _BinaryPredicate>
-_ForwardIter __unique_copy(_InputIter __first, _InputIter __last,
- _ForwardIter __result,
- _BinaryPredicate __binary_pred,
- forward_iterator_tag) {
- *__result = *__first;
- while (++__first != __last)
- if (!__binary_pred(*__result, *__first)) *++__result = *__first;
- return ++__result;
-}
-
-template <class _InputIter, class _OutputIter, class _BinaryPredicate>
-inline _OutputIter unique_copy(_InputIter __first, _InputIter __last,
- _OutputIter __result,
- _BinaryPredicate __binary_pred) {
- if (__first == __last) return __result;
- return __unique_copy(__first, __last, __result, __binary_pred,
- __ITERATOR_CATEGORY(__result));
-}
-
-template <class _ForwardIter>
-_ForwardIter unique(_ForwardIter __first, _ForwardIter __last) {
- __first = adjacent_find(__first, __last);
- return unique_copy(__first, __last, __first);
-}
-
-template <class _ForwardIter, class _BinaryPredicate>
-_ForwardIter unique(_ForwardIter __first, _ForwardIter __last,
- _BinaryPredicate __binary_pred) {
- __first = adjacent_find(__first, __last, __binary_pred);
- return unique_copy(__first, __last, __first, __binary_pred);
-}
-
-// reverse and reverse_copy, and their auxiliary functions
-
-template <class _BidirectionalIter>
-void __reverse(_BidirectionalIter __first, _BidirectionalIter __last,
- bidirectional_iterator_tag) {
- while (true)
- if (__first == __last || __first == --__last)
- return;
- else
- iter_swap(__first++, __last);
-}
-
-template <class _RandomAccessIter>
-void __reverse(_RandomAccessIter __first, _RandomAccessIter __last,
- random_access_iterator_tag) {
- while (__first < __last)
- iter_swap(__first++, --__last);
-}
-
-template <class _BidirectionalIter>
-inline void reverse(_BidirectionalIter __first, _BidirectionalIter __last) {
- __reverse(__first, __last, __ITERATOR_CATEGORY(__first));
-}
-
-template <class _BidirectionalIter, class _OutputIter>
-_OutputIter reverse_copy(_BidirectionalIter __first,
- _BidirectionalIter __last,
- _OutputIter __result) {
- while (__first != __last) {
- --__last;
- *__result = *__last;
- ++__result;
- }
- return __result;
-}
-
-// rotate and rotate_copy, and their auxiliary functions
-
-template <class _EuclideanRingElement>
-_EuclideanRingElement __gcd(_EuclideanRingElement __m,
- _EuclideanRingElement __n)
-{
- while (__n != 0) {
- _EuclideanRingElement __t = __m % __n;
- __m = __n;
- __n = __t;
- }
- return __m;
-}
-
-template <class _ForwardIter, class _Distance>
-_ForwardIter __rotate(_ForwardIter __first,
- _ForwardIter __middle,
- _ForwardIter __last,
- _Distance*,
- forward_iterator_tag) {
- if (__first == __middle)
- return __last;
- if (__last == __middle)
- return __first;
-
- _ForwardIter __first2 = __middle;
- do {
- swap(*__first++, *__first2++);
- if (__first == __middle)
- __middle = __first2;
- } while (__first2 != __last);
-
- _ForwardIter __new_middle = __first;
-
- __first2 = __middle;
-
- while (__first2 != __last) {
- swap (*__first++, *__first2++);
- if (__first == __middle)
- __middle = __first2;
- else if (__first2 == __last)
- __first2 = __middle;
- }
-
- return __new_middle;
-}
-
-
-template <class _BidirectionalIter, class _Distance>
-_BidirectionalIter __rotate(_BidirectionalIter __first,
- _BidirectionalIter __middle,
- _BidirectionalIter __last,
- _Distance*,
- bidirectional_iterator_tag) {
- if (__first == __middle)
- return __last;
- if (__last == __middle)
- return __first;
-
- __reverse(__first, __middle, bidirectional_iterator_tag());
- __reverse(__middle, __last, bidirectional_iterator_tag());
-
- while (__first != __middle && __middle != __last)
- swap (*__first++, *--__last);
-
- if (__first == __middle) {
- __reverse(__middle, __last, bidirectional_iterator_tag());
- return __last;
- }
- else {
- __reverse(__first, __middle, bidirectional_iterator_tag());
- return __first;
- }
-}
-
-template <class _RandomAccessIter, class _Distance, class _Tp>
-_RandomAccessIter __rotate(_RandomAccessIter __first,
- _RandomAccessIter __middle,
- _RandomAccessIter __last,
- _Distance *, _Tp *) {
-
- _Distance __n = __last - __first;
- _Distance __k = __middle - __first;
- _Distance __l = __n - __k;
- _RandomAccessIter __result = __first + (__last - __middle);
-
- if (__k == __l) {
- swap_ranges(__first, __middle, __middle);
- return __result;
- }
-
- _Distance __d = __gcd(__n, __k);
-
- for (_Distance __i = 0; __i < __d; __i++) {
- _Tp __tmp = *__first;
- _RandomAccessIter __p = __first;
-
- if (__k < __l) {
- for (_Distance __j = 0; __j < __l/__d; __j++) {
- if (__p > __first + __l) {
- *__p = *(__p - __l);
- __p -= __l;
- }
-
- *__p = *(__p + __k);
- __p += __k;
- }
- }
-
- else {
- for (_Distance __j = 0; __j < __k/__d - 1; __j ++) {
- if (__p < __last - __k) {
- *__p = *(__p + __k);
- __p += __k;
- }
-
- *__p = * (__p - __l);
- __p -= __l;
- }
- }
-
- *__p = __tmp;
- ++__first;
- }
-
- return __result;
-}
-
-template <class _ForwardIter>
-inline _ForwardIter rotate(_ForwardIter __first, _ForwardIter __middle,
- _ForwardIter __last) {
- return __rotate(__first, __middle, __last,
- __DISTANCE_TYPE(__first),
- __ITERATOR_CATEGORY(__first));
-}
-
-template <class _ForwardIter, class _OutputIter>
-_OutputIter rotate_copy(_ForwardIter __first, _ForwardIter __middle,
- _ForwardIter __last, _OutputIter __result) {
- return copy(__first, __middle, copy(__middle, __last, __result));
-}
-
-// Return a random number in the range [0, __n). This function encapsulates
-// whether we're using rand (part of the standard C library) or lrand48
-// (not standard, but a much better choice whenever it's available).
-
-template <class _Distance>
-inline _Distance __random_number(_Distance __n) {
-#ifdef __STL_NO_DRAND48
- return rand() % __n;
-#else
- return lrand48() % __n;
-#endif
-}
-
-// random_shuffle
-
-template <class _RandomAccessIter>
-inline void random_shuffle(_RandomAccessIter __first,
- _RandomAccessIter __last) {
- if (__first == __last) return;
- for (_RandomAccessIter __i = __first + 1; __i != __last; ++__i)
- iter_swap(__i, __first + __random_number((__i - __first) + 1));
-}
-
-template <class _RandomAccessIter, class _RandomNumberGenerator>
-void random_shuffle(_RandomAccessIter __first, _RandomAccessIter __last,
- _RandomNumberGenerator& __rand) {
- if (__first == __last) return;
- for (_RandomAccessIter __i = __first + 1; __i != __last; ++__i)
- iter_swap(__i, __first + __rand((__i - __first) + 1));
-}
-
-// random_sample and random_sample_n (extensions, not part of the standard).
-
-template <class _ForwardIter, class _OutputIter, class _Distance>
-_OutputIter random_sample_n(_ForwardIter __first, _ForwardIter __last,
- _OutputIter __out, const _Distance __n)
-{
- _Distance __remaining = 0;
- distance(__first, __last, __remaining);
- _Distance __m = min(__n, __remaining);
-
- while (__m > 0) {
- if (__random_number(__remaining) < __m) {
- *__out = *__first;
- ++__out;
- --__m;
- }
-
- --__remaining;
- ++__first;
- }
- return __out;
-}
-
-template <class _ForwardIter, class _OutputIter, class _Distance,
- class _RandomNumberGenerator>
-_OutputIter random_sample_n(_ForwardIter __first, _ForwardIter __last,
- _OutputIter __out, const _Distance __n,
- _RandomNumberGenerator& __rand)
-{
- _Distance __remaining = 0;
- distance(__first, __last, __remaining);
- _Distance __m = min(__n, __remaining);
-
- while (__m > 0) {
- if (__rand(__remaining) < __m) {
- *__out = *__first;
- ++__out;
- --__m;
- }
-
- --__remaining;
- ++__first;
- }
- return __out;
-}
-
-template <class _InputIter, class _RandomAccessIter, class _Distance>
-_RandomAccessIter __random_sample(_InputIter __first, _InputIter __last,
- _RandomAccessIter __out,
- const _Distance __n)
-{
- _Distance __m = 0;
- _Distance __t = __n;
- for ( ; __first != __last && __m < __n; ++__m, ++__first)
- __out[__m] = *__first;
-
- while (__first != __last) {
- ++__t;
- _Distance __M = __random_number(__t);
- if (__M < __n)
- __out[__M] = *__first;
- ++__first;
- }
-
- return __out + __m;
-}
-
-template <class _InputIter, class _RandomAccessIter,
- class _RandomNumberGenerator, class _Distance>
-_RandomAccessIter __random_sample(_InputIter __first, _InputIter __last,
- _RandomAccessIter __out,
- _RandomNumberGenerator& __rand,
- const _Distance __n)
-{
- _Distance __m = 0;
- _Distance __t = __n;
- for ( ; __first != __last && __m < __n; ++__m, ++__first)
- __out[__m] = *__first;
-
- while (__first != __last) {
- ++__t;
- _Distance __M = __rand(__t);
- if (__M < __n)
- __out[__M] = *__first;
- ++__first;
- }
-
- return __out + __m;
-}
-
-template <class _InputIter, class _RandomAccessIter>
-inline _RandomAccessIter
-random_sample(_InputIter __first, _InputIter __last,
- _RandomAccessIter __out_first, _RandomAccessIter __out_last)
-{
- return __random_sample(__first, __last,
- __out_first, __out_last - __out_first);
-}
-
-
-template <class _InputIter, class _RandomAccessIter,
- class _RandomNumberGenerator>
-inline _RandomAccessIter
-random_sample(_InputIter __first, _InputIter __last,
- _RandomAccessIter __out_first, _RandomAccessIter __out_last,
- _RandomNumberGenerator& __rand)
-{
- return __random_sample(__first, __last,
- __out_first, __rand,
- __out_last - __out_first);
-}
-
-// partition, stable_partition, and their auxiliary functions
-
-template <class _ForwardIter, class _Predicate>
-_ForwardIter __partition(_ForwardIter __first,
- _ForwardIter __last,
- _Predicate __pred,
- forward_iterator_tag) {
- if (__first == __last) return __first;
-
- while (__pred(*__first))
- if (++__first == __last) return __first;
-
- _ForwardIter __next = __first;
-
- while (++__next != __last)
- if (__pred(*__next)) {
- swap(*__first, *__next);
- ++__first;
- }
-
- return __first;
-}
-
-template <class _BidirectionalIter, class _Predicate>
-_BidirectionalIter __partition(_BidirectionalIter __first,
- _BidirectionalIter __last,
- _Predicate __pred,
- bidirectional_iterator_tag) {
- while (true) {
- while (true)
- if (__first == __last)
- return __first;
- else if (__pred(*__first))
- ++__first;
- else
- break;
- --__last;
- while (true)
- if (__first == __last)
- return __first;
- else if (!__pred(*__last))
- --__last;
- else
- break;
- iter_swap(__first, __last);
- ++__first;
- }
-}
-
-template <class _ForwardIter, class _Predicate>
-inline _ForwardIter partition(_ForwardIter __first,
- _ForwardIter __last,
- _Predicate __pred) {
- return __partition(__first, __last, __pred, __ITERATOR_CATEGORY(__first));
-}
-
-
-template <class _ForwardIter, class _Predicate, class _Distance>
-_ForwardIter __inplace_stable_partition(_ForwardIter __first,
- _ForwardIter __last,
- _Predicate __pred, _Distance __len) {
- if (__len == 1)
- return __pred(*__first) ? __last : __first;
- _ForwardIter __middle = __first;
- advance(__middle, __len / 2);
- return rotate(__inplace_stable_partition(__first, __middle, __pred,
- __len / 2),
- __middle,
- __inplace_stable_partition(__middle, __last, __pred,
- __len - __len / 2));
-}
-
-template <class _ForwardIter, class _Pointer, class _Predicate,
- class _Distance>
-_ForwardIter __stable_partition_adaptive(_ForwardIter __first,
- _ForwardIter __last,
- _Predicate __pred, _Distance __len,
- _Pointer __buffer,
- _Distance __buffer_size)
-{
- if (__len <= __buffer_size) {
- _ForwardIter __result1 = __first;
- _Pointer __result2 = __buffer;
- for ( ; __first != __last ; ++__first)
- if (__pred(*__first)) {
- *__result1 = *__first;
- ++__result1;
- }
- else {
- *__result2 = *__first;
- ++__result2;
- }
- copy(__buffer, __result2, __result1);
- return __result1;
- }
- else {
- _ForwardIter __middle = __first;
- advance(__middle, __len / 2);
- return rotate(__stable_partition_adaptive(
- __first, __middle, __pred,
- __len / 2, __buffer, __buffer_size),
- __middle,
- __stable_partition_adaptive(
- __middle, __last, __pred,
- __len - __len / 2, __buffer, __buffer_size));
- }
-}
-
-template <class _ForwardIter, class _Predicate, class _Tp, class _Distance>
-inline _ForwardIter
-__stable_partition_aux(_ForwardIter __first, _ForwardIter __last,
- _Predicate __pred, _Tp*, _Distance*)
-{
- _Temporary_buffer<_ForwardIter, _Tp> __buf(__first, __last);
- if (__buf.size() > 0)
- return __stable_partition_adaptive(__first, __last, __pred,
- _Distance(__buf.requested_size()),
- __buf.begin(), __buf.size());
- else
- return __inplace_stable_partition(__first, __last, __pred,
- _Distance(__buf.requested_size()));
-}
-
-template <class _ForwardIter, class _Predicate>
-inline _ForwardIter stable_partition(_ForwardIter __first,
- _ForwardIter __last,
- _Predicate __pred) {
- if (__first == __last)
- return __first;
- else
- return __stable_partition_aux(__first, __last, __pred,
- __VALUE_TYPE(__first),
- __DISTANCE_TYPE(__first));
-}
-
-template <class _RandomAccessIter, class _Tp>
-_RandomAccessIter __unguarded_partition(_RandomAccessIter __first,
- _RandomAccessIter __last,
- _Tp __pivot)
-{
- while (true) {
- while (*__first < __pivot)
- ++__first;
- --__last;
- while (__pivot < *__last)
- --__last;
- if (!(__first < __last))
- return __first;
- iter_swap(__first, __last);
- ++__first;
- }
-}
-
-template <class _RandomAccessIter, class _Tp, class _Compare>
-_RandomAccessIter __unguarded_partition(_RandomAccessIter __first,
- _RandomAccessIter __last,
- _Tp __pivot, _Compare __comp)
-{
- while (true) {
- while (__comp(*__first, __pivot))
- ++__first;
- --__last;
- while (__comp(__pivot, *__last))
- --__last;
- if (!(__first < __last))
- return __first;
- iter_swap(__first, __last);
- ++__first;
- }
-}
-
-const int __stl_threshold = 16;
-
-// sort() and its auxiliary functions.
-
-template <class _RandomAccessIter, class _Tp>
-void __unguarded_linear_insert(_RandomAccessIter __last, _Tp __val) {
- _RandomAccessIter __next = __last;
- --__next;
- while (__val < *__next) {
- *__last = *__next;
- __last = __next;
- --__next;
- }
- *__last = __val;
-}
-
-template <class _RandomAccessIter, class _Tp, class _Compare>
-void __unguarded_linear_insert(_RandomAccessIter __last, _Tp __val,
- _Compare __comp) {
- _RandomAccessIter __next = __last;
- --__next;
- while (__comp(__val, *__next)) {
- *__last = *__next;
- __last = __next;
- --__next;
- }
- *__last = __val;
-}
-
-template <class _RandomAccessIter, class _Tp>
-inline void __linear_insert(_RandomAccessIter __first,
- _RandomAccessIter __last, _Tp*) {
- _Tp __val = *__last;
- if (__val < *__first) {
- copy_backward(__first, __last, __last + 1);
- *__first = __val;
- }
- else
- __unguarded_linear_insert(__last, __val);
-}
-
-template <class _RandomAccessIter, class _Tp, class _Compare>
-inline void __linear_insert(_RandomAccessIter __first,
- _RandomAccessIter __last, _Tp*, _Compare __comp) {
- _Tp __val = *__last;
- if (__comp(__val, *__first)) {
- copy_backward(__first, __last, __last + 1);
- *__first = __val;
- }
- else
- __unguarded_linear_insert(__last, __val, __comp);
-}
-
-template <class _RandomAccessIter>
-void __insertion_sort(_RandomAccessIter __first, _RandomAccessIter __last) {
- if (__first == __last) return;
- for (_RandomAccessIter __i = __first + 1; __i != __last; ++__i)
- __linear_insert(__first, __i, __VALUE_TYPE(__first));
-}
-
-template <class _RandomAccessIter, class _Compare>
-void __insertion_sort(_RandomAccessIter __first,
- _RandomAccessIter __last, _Compare __comp) {
- if (__first == __last) return;
- for (_RandomAccessIter __i = __first + 1; __i != __last; ++__i)
- __linear_insert(__first, __i, __VALUE_TYPE(__first), __comp);
-}
-
-template <class _RandomAccessIter, class _Tp>
-void __unguarded_insertion_sort_aux(_RandomAccessIter __first,
- _RandomAccessIter __last, _Tp*) {
- for (_RandomAccessIter __i = __first; __i != __last; ++__i)
- __unguarded_linear_insert(__i, _Tp(*__i));
-}
-
-template <class _RandomAccessIter>
-inline void __unguarded_insertion_sort(_RandomAccessIter __first,
- _RandomAccessIter __last) {
- __unguarded_insertion_sort_aux(__first, __last, __VALUE_TYPE(__first));
-}
-
-template <class _RandomAccessIter, class _Tp, class _Compare>
-void __unguarded_insertion_sort_aux(_RandomAccessIter __first,
- _RandomAccessIter __last,
- _Tp*, _Compare __comp) {
- for (_RandomAccessIter __i = __first; __i != __last; ++__i)
- __unguarded_linear_insert(__i, _Tp(*__i), __comp);
-}
-
-template <class _RandomAccessIter, class _Compare>
-inline void __unguarded_insertion_sort(_RandomAccessIter __first,
- _RandomAccessIter __last,
- _Compare __comp) {
- __unguarded_insertion_sort_aux(__first, __last, __VALUE_TYPE(__first),
- __comp);
-}
-
-template <class _RandomAccessIter>
-void __final_insertion_sort(_RandomAccessIter __first,
- _RandomAccessIter __last) {
- if (__last - __first > __stl_threshold) {
- __insertion_sort(__first, __first + __stl_threshold);
- __unguarded_insertion_sort(__first + __stl_threshold, __last);
- }
- else
- __insertion_sort(__first, __last);
-}
-
-template <class _RandomAccessIter, class _Compare>
-void __final_insertion_sort(_RandomAccessIter __first,
- _RandomAccessIter __last, _Compare __comp) {
- if (__last - __first > __stl_threshold) {
- __insertion_sort(__first, __first + __stl_threshold, __comp);
- __unguarded_insertion_sort(__first + __stl_threshold, __last, __comp);
- }
- else
- __insertion_sort(__first, __last, __comp);
-}
-
-template <class _Size>
-inline _Size __lg(_Size __n) {
- _Size __k;
- for (__k = 0; __n != 1; __n >>= 1) ++__k;
- return __k;
-}
-
-template <class _RandomAccessIter, class _Tp, class _Size>
-void __introsort_loop(_RandomAccessIter __first,
- _RandomAccessIter __last, _Tp*,
- _Size __depth_limit)
-{
- while (__last - __first > __stl_threshold) {
- if (__depth_limit == 0) {
- partial_sort(__first, __last, __last);
- return;
- }
- --__depth_limit;
- _RandomAccessIter __cut =
- __unguarded_partition(__first, __last,
- _Tp(__median(*__first,
- *(__first + (__last - __first)/2),
- *(__last - 1))));
- __introsort_loop(__cut, __last, (_Tp*) 0, __depth_limit);
- __last = __cut;
- }
-}
-
-template <class _RandomAccessIter, class _Tp, class _Size, class _Compare>
-void __introsort_loop(_RandomAccessIter __first,
- _RandomAccessIter __last, _Tp*,
- _Size __depth_limit, _Compare __comp)
-{
- while (__last - __first > __stl_threshold) {
- if (__depth_limit == 0) {
- partial_sort(__first, __last, __last, __comp);
- return;
- }
- --__depth_limit;
- _RandomAccessIter __cut =
- __unguarded_partition(__first, __last,
- _Tp(__median(*__first,
- *(__first + (__last - __first)/2),
- *(__last - 1), __comp)),
- __comp);
- __introsort_loop(__cut, __last, (_Tp*) 0, __depth_limit, __comp);
- __last = __cut;
- }
-}
-
-template <class _RandomAccessIter>
-inline void sort(_RandomAccessIter __first, _RandomAccessIter __last) {
- if (__first != __last) {
- __introsort_loop(__first, __last,
- __VALUE_TYPE(__first),
- __lg(__last - __first) * 2);
- __final_insertion_sort(__first, __last);
- }
-}
-
-template <class _RandomAccessIter, class _Compare>
-inline void sort(_RandomAccessIter __first, _RandomAccessIter __last,
- _Compare __comp) {
- if (__first != __last) {
- __introsort_loop(__first, __last,
- __VALUE_TYPE(__first),
- __lg(__last - __first) * 2,
- __comp);
- __final_insertion_sort(__first, __last, __comp);
- }
-}
-
-// stable_sort() and its auxiliary functions.
-
-template <class _RandomAccessIter>
-void __inplace_stable_sort(_RandomAccessIter __first,
- _RandomAccessIter __last) {
- if (__last - __first < 15) {
- __insertion_sort(__first, __last);
- return;
- }
- _RandomAccessIter __middle = __first + (__last - __first) / 2;
- __inplace_stable_sort(__first, __middle);
- __inplace_stable_sort(__middle, __last);
- __merge_without_buffer(__first, __middle, __last,
- __middle - __first,
- __last - __middle);
-}
-
-template <class _RandomAccessIter, class _Compare>
-void __inplace_stable_sort(_RandomAccessIter __first,
- _RandomAccessIter __last, _Compare __comp) {
- if (__last - __first < 15) {
- __insertion_sort(__first, __last, __comp);
- return;
- }
- _RandomAccessIter __middle = __first + (__last - __first) / 2;
- __inplace_stable_sort(__first, __middle, __comp);
- __inplace_stable_sort(__middle, __last, __comp);
- __merge_without_buffer(__first, __middle, __last,
- __middle - __first,
- __last - __middle,
- __comp);
-}
-
-template <class _RandomAccessIter1, class _RandomAccessIter2,
- class _Distance>
-void __merge_sort_loop(_RandomAccessIter1 __first,
- _RandomAccessIter1 __last,
- _RandomAccessIter2 __result, _Distance __step_size) {
- _Distance __two_step = 2 * __step_size;
-
- while (__last - __first >= __two_step) {
- __result = merge(__first, __first + __step_size,
- __first + __step_size, __first + __two_step,
- __result);
- __first += __two_step;
- }
-
- __step_size = min(_Distance(__last - __first), __step_size);
- merge(__first, __first + __step_size, __first + __step_size, __last,
- __result);
-}
-
-template <class _RandomAccessIter1, class _RandomAccessIter2,
- class _Distance, class _Compare>
-void __merge_sort_loop(_RandomAccessIter1 __first,
- _RandomAccessIter1 __last,
- _RandomAccessIter2 __result, _Distance __step_size,
- _Compare __comp) {
- _Distance __two_step = 2 * __step_size;
-
- while (__last - __first >= __two_step) {
- __result = merge(__first, __first + __step_size,
- __first + __step_size, __first + __two_step,
- __result,
- __comp);
- __first += __two_step;
- }
- __step_size = min(_Distance(__last - __first), __step_size);
-
- merge(__first, __first + __step_size,
- __first + __step_size, __last,
- __result,
- __comp);
-}
-
-const int __stl_chunk_size = 7;
-
-template <class _RandomAccessIter, class _Distance>
-void __chunk_insertion_sort(_RandomAccessIter __first,
- _RandomAccessIter __last, _Distance __chunk_size)
-{
- while (__last - __first >= __chunk_size) {
- __insertion_sort(__first, __first + __chunk_size);
- __first += __chunk_size;
- }
- __insertion_sort(__first, __last);
-}
-
-template <class _RandomAccessIter, class _Distance, class _Compare>
-void __chunk_insertion_sort(_RandomAccessIter __first,
- _RandomAccessIter __last,
- _Distance __chunk_size, _Compare __comp)
-{
- while (__last - __first >= __chunk_size) {
- __insertion_sort(__first, __first + __chunk_size, __comp);
- __first += __chunk_size;
- }
- __insertion_sort(__first, __last, __comp);
-}
-
-template <class _RandomAccessIter, class _Pointer, class _Distance>
-void __merge_sort_with_buffer(_RandomAccessIter __first,
- _RandomAccessIter __last,
- _Pointer __buffer, _Distance*) {
- _Distance __len = __last - __first;
- _Pointer __buffer_last = __buffer + __len;
-
- _Distance __step_size = __stl_chunk_size;
- __chunk_insertion_sort(__first, __last, __step_size);
-
- while (__step_size < __len) {
- __merge_sort_loop(__first, __last, __buffer, __step_size);
- __step_size *= 2;
- __merge_sort_loop(__buffer, __buffer_last, __first, __step_size);
- __step_size *= 2;
- }
-}
-
-template <class _RandomAccessIter, class _Pointer, class _Distance,
- class _Compare>
-void __merge_sort_with_buffer(_RandomAccessIter __first,
- _RandomAccessIter __last, _Pointer __buffer,
- _Distance*, _Compare __comp) {
- _Distance __len = __last - __first;
- _Pointer __buffer_last = __buffer + __len;
-
- _Distance __step_size = __stl_chunk_size;
- __chunk_insertion_sort(__first, __last, __step_size, __comp);
-
- while (__step_size < __len) {
- __merge_sort_loop(__first, __last, __buffer, __step_size, __comp);
- __step_size *= 2;
- __merge_sort_loop(__buffer, __buffer_last, __first, __step_size, __comp);
- __step_size *= 2;
- }
-}
-
-template <class _RandomAccessIter, class _Pointer, class _Distance>
-void __stable_sort_adaptive(_RandomAccessIter __first,
- _RandomAccessIter __last, _Pointer __buffer,
- _Distance __buffer_size) {
- _Distance __len = (__last - __first + 1) / 2;
- _RandomAccessIter __middle = __first + __len;
- if (__len > __buffer_size) {
- __stable_sort_adaptive(__first, __middle, __buffer, __buffer_size);
- __stable_sort_adaptive(__middle, __last, __buffer, __buffer_size);
- }
- else {
- __merge_sort_with_buffer(__first, __middle, __buffer, (_Distance*)0);
- __merge_sort_with_buffer(__middle, __last, __buffer, (_Distance*)0);
- }
- __merge_adaptive(__first, __middle, __last, _Distance(__middle - __first),
- _Distance(__last - __middle), __buffer, __buffer_size);
-}
-
-template <class _RandomAccessIter, class _Pointer, class _Distance,
- class _Compare>
-void __stable_sort_adaptive(_RandomAccessIter __first,
- _RandomAccessIter __last, _Pointer __buffer,
- _Distance __buffer_size, _Compare __comp) {
- _Distance __len = (__last - __first + 1) / 2;
- _RandomAccessIter __middle = __first + __len;
- if (__len > __buffer_size) {
- __stable_sort_adaptive(__first, __middle, __buffer, __buffer_size,
- __comp);
- __stable_sort_adaptive(__middle, __last, __buffer, __buffer_size,
- __comp);
- }
- else {
- __merge_sort_with_buffer(__first, __middle, __buffer, (_Distance*)0,
- __comp);
- __merge_sort_with_buffer(__middle, __last, __buffer, (_Distance*)0,
- __comp);
- }
- __merge_adaptive(__first, __middle, __last, _Distance(__middle - __first),
- _Distance(__last - __middle), __buffer, __buffer_size,
- __comp);
-}
-
-template <class _RandomAccessIter, class _Tp, class _Distance>
-inline void __stable_sort_aux(_RandomAccessIter __first,
- _RandomAccessIter __last, _Tp*, _Distance*) {
- _Temporary_buffer<_RandomAccessIter, _Tp> buf(__first, __last);
- if (buf.begin() == 0)
- __inplace_stable_sort(__first, __last);
- else
- __stable_sort_adaptive(__first, __last, buf.begin(),
- _Distance(buf.size()));
-}
-
-template <class _RandomAccessIter, class _Tp, class _Distance, class _Compare>
-inline void __stable_sort_aux(_RandomAccessIter __first,
- _RandomAccessIter __last, _Tp*, _Distance*,
- _Compare __comp) {
- _Temporary_buffer<_RandomAccessIter, _Tp> buf(__first, __last);
- if (buf.begin() == 0)
- __inplace_stable_sort(__first, __last, __comp);
- else
- __stable_sort_adaptive(__first, __last, buf.begin(),
- _Distance(buf.size()),
- __comp);
-}
-
-template <class _RandomAccessIter>
-inline void stable_sort(_RandomAccessIter __first,
- _RandomAccessIter __last) {
- __stable_sort_aux(__first, __last,
- __VALUE_TYPE(__first),
- __DISTANCE_TYPE(__first));
-}
-
-template <class _RandomAccessIter, class _Compare>
-inline void stable_sort(_RandomAccessIter __first,
- _RandomAccessIter __last, _Compare __comp) {
- __stable_sort_aux(__first, __last,
- __VALUE_TYPE(__first),
- __DISTANCE_TYPE(__first),
- __comp);
-}
-
-// partial_sort, partial_sort_copy, and auxiliary functions.
-
-template <class _RandomAccessIter, class _Tp>
-void __partial_sort(_RandomAccessIter __first, _RandomAccessIter __middle,
- _RandomAccessIter __last, _Tp*) {
- make_heap(__first, __middle);
- for (_RandomAccessIter __i = __middle; __i < __last; ++__i)
- if (*__i < *__first)
- __pop_heap(__first, __middle, __i, _Tp(*__i),
- __DISTANCE_TYPE(__first));
- sort_heap(__first, __middle);
-}
-
-template <class _RandomAccessIter>
-inline void partial_sort(_RandomAccessIter __first,
- _RandomAccessIter __middle,
- _RandomAccessIter __last) {
- __partial_sort(__first, __middle, __last, __VALUE_TYPE(__first));
-}
-
-template <class _RandomAccessIter, class _Tp, class _Compare>
-void __partial_sort(_RandomAccessIter __first, _RandomAccessIter __middle,
- _RandomAccessIter __last, _Tp*, _Compare __comp) {
- make_heap(__first, __middle, __comp);
- for (_RandomAccessIter __i = __middle; __i < __last; ++__i)
- if (__comp(*__i, *__first))
- __pop_heap(__first, __middle, __i, _Tp(*__i), __comp,
- __DISTANCE_TYPE(__first));
- sort_heap(__first, __middle, __comp);
-}
-
-template <class _RandomAccessIter, class _Compare>
-inline void partial_sort(_RandomAccessIter __first,
- _RandomAccessIter __middle,
- _RandomAccessIter __last, _Compare __comp) {
- __partial_sort(__first, __middle, __last, __VALUE_TYPE(__first), __comp);
-}
-
-template <class _InputIter, class _RandomAccessIter, class _Distance,
- class _Tp>
-_RandomAccessIter __partial_sort_copy(_InputIter __first,
- _InputIter __last,
- _RandomAccessIter __result_first,
- _RandomAccessIter __result_last,
- _Distance*, _Tp*) {
- if (__result_first == __result_last) return __result_last;
- _RandomAccessIter __result_real_last = __result_first;
- while(__first != __last && __result_real_last != __result_last) {
- *__result_real_last = *__first;
- ++__result_real_last;
- ++__first;
- }
- make_heap(__result_first, __result_real_last);
- while (__first != __last) {
- if (*__first < *__result_first)
- __adjust_heap(__result_first, _Distance(0),
- _Distance(__result_real_last - __result_first),
- _Tp(*__first));
- ++__first;
- }
- sort_heap(__result_first, __result_real_last);
- return __result_real_last;
-}
-
-template <class _InputIter, class _RandomAccessIter>
-inline _RandomAccessIter
-partial_sort_copy(_InputIter __first, _InputIter __last,
- _RandomAccessIter __result_first,
- _RandomAccessIter __result_last) {
- return __partial_sort_copy(__first, __last, __result_first, __result_last,
- __DISTANCE_TYPE(__result_first),
- __VALUE_TYPE(__first));
-}
-
-template <class _InputIter, class _RandomAccessIter, class _Compare,
- class _Distance, class _Tp>
-_RandomAccessIter __partial_sort_copy(_InputIter __first,
- _InputIter __last,
- _RandomAccessIter __result_first,
- _RandomAccessIter __result_last,
- _Compare __comp, _Distance*, _Tp*) {
- if (__result_first == __result_last) return __result_last;
- _RandomAccessIter __result_real_last = __result_first;
- while(__first != __last && __result_real_last != __result_last) {
- *__result_real_last = *__first;
- ++__result_real_last;
- ++__first;
- }
- make_heap(__result_first, __result_real_last, __comp);
- while (__first != __last) {
- if (__comp(*__first, *__result_first))
- __adjust_heap(__result_first, _Distance(0),
- _Distance(__result_real_last - __result_first),
- _Tp(*__first),
- __comp);
- ++__first;
- }
- sort_heap(__result_first, __result_real_last, __comp);
- return __result_real_last;
-}
-
-template <class _InputIter, class _RandomAccessIter, class _Compare>
-inline _RandomAccessIter
-partial_sort_copy(_InputIter __first, _InputIter __last,
- _RandomAccessIter __result_first,
- _RandomAccessIter __result_last, _Compare __comp) {
- return __partial_sort_copy(__first, __last, __result_first, __result_last,
- __comp,
- __DISTANCE_TYPE(__result_first),
- __VALUE_TYPE(__first));
-}
-
-// nth_element() and its auxiliary functions.
-
-template <class _RandomAccessIter, class _Tp>
-void __nth_element(_RandomAccessIter __first, _RandomAccessIter __nth,
- _RandomAccessIter __last, _Tp*) {
- while (__last - __first > 3) {
- _RandomAccessIter __cut =
- __unguarded_partition(__first, __last,
- _Tp(__median(*__first,
- *(__first + (__last - __first)/2),
- *(__last - 1))));
- if (__cut <= __nth)
- __first = __cut;
- else
- __last = __cut;
- }
- __insertion_sort(__first, __last);
-}
-
-template <class _RandomAccessIter>
-inline void nth_element(_RandomAccessIter __first, _RandomAccessIter __nth,
- _RandomAccessIter __last) {
- __nth_element(__first, __nth, __last, __VALUE_TYPE(__first));
-}
-
-template <class _RandomAccessIter, class _Tp, class _Compare>
-void __nth_element(_RandomAccessIter __first, _RandomAccessIter __nth,
- _RandomAccessIter __last, _Tp*, _Compare __comp) {
- while (__last - __first > 3) {
- _RandomAccessIter __cut =
- __unguarded_partition(__first, __last,
- _Tp(__median(*__first,
- *(__first + (__last - __first)/2),
- *(__last - 1),
- __comp)),
- __comp);
- if (__cut <= __nth)
- __first = __cut;
- else
- __last = __cut;
- }
- __insertion_sort(__first, __last, __comp);
-}
-
-template <class _RandomAccessIter, class _Compare>
-inline void nth_element(_RandomAccessIter __first, _RandomAccessIter __nth,
- _RandomAccessIter __last, _Compare __comp) {
- __nth_element(__first, __nth, __last, __VALUE_TYPE(__first), __comp);
-}
-
-
-// Binary search (lower_bound, upper_bound, equal_range, binary_search).
-
-template <class _ForwardIter, class _Tp, class _Distance>
-_ForwardIter __lower_bound(_ForwardIter __first, _ForwardIter __last,
- const _Tp& __val, _Distance*)
-{
- _Distance __len = 0;
- distance(__first, __last, __len);
- _Distance __half;
- _ForwardIter __middle;
-
- while (__len > 0) {
- __half = __len >> 1;
- __middle = __first;
- advance(__middle, __half);
- if (*__middle < __val) {
- __first = __middle;
- ++__first;
- __len = __len - __half - 1;
- }
- else
- __len = __half;
- }
- return __first;
-}
-
-template <class _ForwardIter, class _Tp>
-inline _ForwardIter lower_bound(_ForwardIter __first, _ForwardIter __last,
- const _Tp& __val) {
- return __lower_bound(__first, __last, __val,
- __DISTANCE_TYPE(__first));
-}
-
-template <class _ForwardIter, class _Tp, class _Compare, class _Distance>
-_ForwardIter __lower_bound(_ForwardIter __first, _ForwardIter __last,
- const _Tp& __val, _Compare __comp, _Distance*)
-{
- _Distance __len = 0;
- distance(__first, __last, __len);
- _Distance __half;
- _ForwardIter __middle;
-
- while (__len > 0) {
- __half = __len >> 1;
- __middle = __first;
- advance(__middle, __half);
- if (__comp(*__middle, __val)) {
- __first = __middle;
- ++__first;
- __len = __len - __half - 1;
- }
- else
- __len = __half;
- }
- return __first;
-}
-
-template <class _ForwardIter, class _Tp, class _Compare>
-inline _ForwardIter lower_bound(_ForwardIter __first, _ForwardIter __last,
- const _Tp& __val, _Compare __comp) {
- return __lower_bound(__first, __last, __val, __comp,
- __DISTANCE_TYPE(__first));
-}
-
-template <class _ForwardIter, class _Tp, class _Distance>
-_ForwardIter __upper_bound(_ForwardIter __first, _ForwardIter __last,
- const _Tp& __val, _Distance*)
-{
- _Distance __len = 0;
- distance(__first, __last, __len);
- _Distance __half;
- _ForwardIter __middle;
-
- while (__len > 0) {
- __half = __len >> 1;
- __middle = __first;
- advance(__middle, __half);
- if (__val < *__middle)
- __len = __half;
- else {
- __first = __middle;
- ++__first;
- __len = __len - __half - 1;
- }
- }
- return __first;
-}
-
-template <class _ForwardIter, class _Tp>
-inline _ForwardIter upper_bound(_ForwardIter __first, _ForwardIter __last,
- const _Tp& __val) {
- return __upper_bound(__first, __last, __val,
- __DISTANCE_TYPE(__first));
-}
-
-template <class _ForwardIter, class _Tp, class _Compare, class _Distance>
-_ForwardIter __upper_bound(_ForwardIter __first, _ForwardIter __last,
- const _Tp& __val, _Compare __comp, _Distance*)
-{
- _Distance __len = 0;
- distance(__first, __last, __len);
- _Distance __half;
- _ForwardIter __middle;
-
- while (__len > 0) {
- __half = __len >> 1;
- __middle = __first;
- advance(__middle, __half);
- if (__comp(__val, *__middle))
- __len = __half;
- else {
- __first = __middle;
- ++__first;
- __len = __len - __half - 1;
- }
- }
- return __first;
-}
-
-template <class _ForwardIter, class _Tp, class _Compare>
-inline _ForwardIter upper_bound(_ForwardIter __first, _ForwardIter __last,
- const _Tp& __val, _Compare __comp) {
- return __upper_bound(__first, __last, __val, __comp,
- __DISTANCE_TYPE(__first));
-}
-
-template <class _ForwardIter, class _Tp, class _Distance>
-pair<_ForwardIter, _ForwardIter>
-__equal_range(_ForwardIter __first, _ForwardIter __last, const _Tp& __val,
- _Distance*)
-{
- _Distance __len = 0;
- distance(__first, __last, __len);
- _Distance __half;
- _ForwardIter __middle, __left, __right;
-
- while (__len > 0) {
- __half = __len >> 1;
- __middle = __first;
- advance(__middle, __half);
- if (*__middle < __val) {
- __first = __middle;
- ++__first;
- __len = __len - __half - 1;
- }
- else if (__val < *__middle)
- __len = __half;
- else {
- __left = lower_bound(__first, __middle, __val);
- advance(__first, __len);
- __right = upper_bound(++__middle, __first, __val);
- return pair<_ForwardIter, _ForwardIter>(__left, __right);
- }
- }
- return pair<_ForwardIter, _ForwardIter>(__first, __first);
-}
-
-template <class _ForwardIter, class _Tp>
-inline pair<_ForwardIter, _ForwardIter>
-equal_range(_ForwardIter __first, _ForwardIter __last, const _Tp& __val) {
- return __equal_range(__first, __last, __val,
- __DISTANCE_TYPE(__first));
-}
-
-template <class _ForwardIter, class _Tp, class _Compare, class _Distance>
-pair<_ForwardIter, _ForwardIter>
-__equal_range(_ForwardIter __first, _ForwardIter __last, const _Tp& __val,
- _Compare __comp, _Distance*)
-{
- _Distance __len = 0;
- distance(__first, __last, __len);
- _Distance __half;
- _ForwardIter __middle, __left, __right;
-
- while (__len > 0) {
- __half = __len >> 1;
- __middle = __first;
- advance(__middle, __half);
- if (__comp(*__middle, __val)) {
- __first = __middle;
- ++__first;
- __len = __len - __half - 1;
- }
- else if (__comp(__val, *__middle))
- __len = __half;
- else {
- __left = lower_bound(__first, __middle, __val, __comp);
- advance(__first, __len);
- __right = upper_bound(++__middle, __first, __val, __comp);
- return pair<_ForwardIter, _ForwardIter>(__left, __right);
- }
- }
- return pair<_ForwardIter, _ForwardIter>(__first, __first);
-}
-
-template <class _ForwardIter, class _Tp, class _Compare>
-inline pair<_ForwardIter, _ForwardIter>
-equal_range(_ForwardIter __first, _ForwardIter __last, const _Tp& __val,
- _Compare __comp) {
- return __equal_range(__first, __last, __val, __comp,
- __DISTANCE_TYPE(__first));
-}
-
-template <class _ForwardIter, class _Tp>
-bool binary_search(_ForwardIter __first, _ForwardIter __last,
- const _Tp& __val) {
- _ForwardIter __i = lower_bound(__first, __last, __val);
- return __i != __last && !(__val < *__i);
-}
-
-template <class _ForwardIter, class _Tp, class _Compare>
-bool binary_search(_ForwardIter __first, _ForwardIter __last,
- const _Tp& __val,
- _Compare __comp) {
- _ForwardIter __i = lower_bound(__first, __last, __val, __comp);
- return __i != __last && !__comp(__val, *__i);
-}
-
-// merge, with and without an explicitly supplied comparison function.
-
-template <class _InputIter1, class _InputIter2, class _OutputIter>
-_OutputIter merge(_InputIter1 __first1, _InputIter1 __last1,
- _InputIter2 __first2, _InputIter2 __last2,
- _OutputIter __result) {
- while (__first1 != __last1 && __first2 != __last2) {
- if (*__first2 < *__first1) {
- *__result = *__first2;
- ++__first2;
- }
- else {
- *__result = *__first1;
- ++__first1;
- }
- ++__result;
- }
- return copy(__first2, __last2, copy(__first1, __last1, __result));
-}
-
-template <class _InputIter1, class _InputIter2, class _OutputIter,
- class _Compare>
-_OutputIter merge(_InputIter1 __first1, _InputIter1 __last1,
- _InputIter2 __first2, _InputIter2 __last2,
- _OutputIter __result, _Compare __comp) {
- while (__first1 != __last1 && __first2 != __last2) {
- if (__comp(*__first2, *__first1)) {
- *__result = *__first2;
- ++__first2;
- }
- else {
- *__result = *__first1;
- ++__first1;
- }
- ++__result;
- }
- return copy(__first2, __last2, copy(__first1, __last1, __result));
-}
-
-// inplace_merge and its auxiliary functions.
-
-template <class _BidirectionalIter, class _Distance>
-void __merge_without_buffer(_BidirectionalIter __first,
- _BidirectionalIter __middle,
- _BidirectionalIter __last,
- _Distance __len1, _Distance __len2) {
- if (__len1 == 0 || __len2 == 0)
- return;
- if (__len1 + __len2 == 2) {
- if (*__middle < *__first)
- iter_swap(__first, __middle);
- return;
- }
- _BidirectionalIter __first_cut = __first;
- _BidirectionalIter __second_cut = __middle;
- _Distance __len11 = 0;
- _Distance __len22 = 0;
- if (__len1 > __len2) {
- __len11 = __len1 / 2;
- advance(__first_cut, __len11);
- __second_cut = lower_bound(__middle, __last, *__first_cut);
- distance(__middle, __second_cut, __len22);
- }
- else {
- __len22 = __len2 / 2;
- advance(__second_cut, __len22);
- __first_cut = upper_bound(__first, __middle, *__second_cut);
- distance(__first, __first_cut, __len11);
- }
- _BidirectionalIter __new_middle
- = rotate(__first_cut, __middle, __second_cut);
- __merge_without_buffer(__first, __first_cut, __new_middle,
- __len11, __len22);
- __merge_without_buffer(__new_middle, __second_cut, __last, __len1 - __len11,
- __len2 - __len22);
-}
-
-template <class _BidirectionalIter, class _Distance, class _Compare>
-void __merge_without_buffer(_BidirectionalIter __first,
- _BidirectionalIter __middle,
- _BidirectionalIter __last,
- _Distance __len1, _Distance __len2,
- _Compare __comp) {
- if (__len1 == 0 || __len2 == 0)
- return;
- if (__len1 + __len2 == 2) {
- if (__comp(*__middle, *__first))
- iter_swap(__first, __middle);
- return;
- }
- _BidirectionalIter __first_cut = __first;
- _BidirectionalIter __second_cut = __middle;
- _Distance __len11 = 0;
- _Distance __len22 = 0;
- if (__len1 > __len2) {
- __len11 = __len1 / 2;
- advance(__first_cut, __len11);
- __second_cut = lower_bound(__middle, __last, *__first_cut, __comp);
- distance(__middle, __second_cut, __len22);
- }
- else {
- __len22 = __len2 / 2;
- advance(__second_cut, __len22);
- __first_cut = upper_bound(__first, __middle, *__second_cut, __comp);
- distance(__first, __first_cut, __len11);
- }
- _BidirectionalIter __new_middle
- = rotate(__first_cut, __middle, __second_cut);
- __merge_without_buffer(__first, __first_cut, __new_middle, __len11, __len22,
- __comp);
- __merge_without_buffer(__new_middle, __second_cut, __last, __len1 - __len11,
- __len2 - __len22, __comp);
-}
-
-template <class _BidirectionalIter1, class _BidirectionalIter2,
- class _Distance>
-_BidirectionalIter1 __rotate_adaptive(_BidirectionalIter1 __first,
- _BidirectionalIter1 __middle,
- _BidirectionalIter1 __last,
- _Distance __len1, _Distance __len2,
- _BidirectionalIter2 __buffer,
- _Distance __buffer_size) {
- _BidirectionalIter2 __buffer_end;
- if (__len1 > __len2 && __len2 <= __buffer_size) {
- __buffer_end = copy(__middle, __last, __buffer);
- copy_backward(__first, __middle, __last);
- return copy(__buffer, __buffer_end, __first);
- }
- else if (__len1 <= __buffer_size) {
- __buffer_end = copy(__first, __middle, __buffer);
- copy(__middle, __last, __first);
- return copy_backward(__buffer, __buffer_end, __last);
- }
- else
- return rotate(__first, __middle, __last);
-}
-
-template <class _BidirectionalIter1, class _BidirectionalIter2,
- class _BidirectionalIter3>
-_BidirectionalIter3 __merge_backward(_BidirectionalIter1 __first1,
- _BidirectionalIter1 __last1,
- _BidirectionalIter2 __first2,
- _BidirectionalIter2 __last2,
- _BidirectionalIter3 __result) {
- if (__first1 == __last1)
- return copy_backward(__first2, __last2, __result);
- if (__first2 == __last2)
- return copy_backward(__first1, __last1, __result);
- --__last1;
- --__last2;
- while (true) {
- if (*__last2 < *__last1) {
- *--__result = *__last1;
- if (__first1 == __last1)
- return copy_backward(__first2, ++__last2, __result);
- --__last1;
- }
- else {
- *--__result = *__last2;
- if (__first2 == __last2)
- return copy_backward(__first1, ++__last1, __result);
- --__last2;
- }
- }
-}
-
-template <class _BidirectionalIter1, class _BidirectionalIter2,
- class _BidirectionalIter3, class _Compare>
-_BidirectionalIter3 __merge_backward(_BidirectionalIter1 __first1,
- _BidirectionalIter1 __last1,
- _BidirectionalIter2 __first2,
- _BidirectionalIter2 __last2,
- _BidirectionalIter3 __result,
- _Compare __comp) {
- if (__first1 == __last1)
- return copy_backward(__first2, __last2, __result);
- if (__first2 == __last2)
- return copy_backward(__first1, __last1, __result);
- --__last1;
- --__last2;
- while (true) {
- if (__comp(*__last2, *__last1)) {
- *--__result = *__last1;
- if (__first1 == __last1)
- return copy_backward(__first2, ++__last2, __result);
- --__last1;
- }
- else {
- *--__result = *__last2;
- if (__first2 == __last2)
- return copy_backward(__first1, ++__last1, __result);
- --__last2;
- }
- }
-}
-
-template <class _BidirectionalIter, class _Distance, class _Pointer>
-void __merge_adaptive(_BidirectionalIter __first,
- _BidirectionalIter __middle,
- _BidirectionalIter __last,
- _Distance __len1, _Distance __len2,
- _Pointer __buffer, _Distance __buffer_size) {
- if (__len1 <= __len2 && __len1 <= __buffer_size) {
- _Pointer __buffer_end = copy(__first, __middle, __buffer);
- merge(__buffer, __buffer_end, __middle, __last, __first);
- }
- else if (__len2 <= __buffer_size) {
- _Pointer __buffer_end = copy(__middle, __last, __buffer);
- __merge_backward(__first, __middle, __buffer, __buffer_end, __last);
- }
- else {
- _BidirectionalIter __first_cut = __first;
- _BidirectionalIter __second_cut = __middle;
- _Distance __len11 = 0;
- _Distance __len22 = 0;
- if (__len1 > __len2) {
- __len11 = __len1 / 2;
- advance(__first_cut, __len11);
- __second_cut = lower_bound(__middle, __last, *__first_cut);
- distance(__middle, __second_cut, __len22);
- }
- else {
- __len22 = __len2 / 2;
- advance(__second_cut, __len22);
- __first_cut = upper_bound(__first, __middle, *__second_cut);
- distance(__first, __first_cut, __len11);
- }
- _BidirectionalIter __new_middle =
- __rotate_adaptive(__first_cut, __middle, __second_cut, __len1 - __len11,
- __len22, __buffer, __buffer_size);
- __merge_adaptive(__first, __first_cut, __new_middle, __len11,
- __len22, __buffer, __buffer_size);
- __merge_adaptive(__new_middle, __second_cut, __last, __len1 - __len11,
- __len2 - __len22, __buffer, __buffer_size);
- }
-}
-
-template <class _BidirectionalIter, class _Distance, class _Pointer,
- class _Compare>
-void __merge_adaptive(_BidirectionalIter __first,
- _BidirectionalIter __middle,
- _BidirectionalIter __last,
- _Distance __len1, _Distance __len2,
- _Pointer __buffer, _Distance __buffer_size,
- _Compare __comp) {
- if (__len1 <= __len2 && __len1 <= __buffer_size) {
- _Pointer __buffer_end = copy(__first, __middle, __buffer);
- merge(__buffer, __buffer_end, __middle, __last, __first, __comp);
- }
- else if (__len2 <= __buffer_size) {
- _Pointer __buffer_end = copy(__middle, __last, __buffer);
- __merge_backward(__first, __middle, __buffer, __buffer_end, __last,
- __comp);
- }
- else {
- _BidirectionalIter __first_cut = __first;
- _BidirectionalIter __second_cut = __middle;
- _Distance __len11 = 0;
- _Distance __len22 = 0;
- if (__len1 > __len2) {
- __len11 = __len1 / 2;
- advance(__first_cut, __len11);
- __second_cut = lower_bound(__middle, __last, *__first_cut, __comp);
- distance(__middle, __second_cut, __len22);
- }
- else {
- __len22 = __len2 / 2;
- advance(__second_cut, __len22);
- __first_cut = upper_bound(__first, __middle, *__second_cut, __comp);
- distance(__first, __first_cut, __len11);
- }
- _BidirectionalIter __new_middle =
- __rotate_adaptive(__first_cut, __middle, __second_cut, __len1 - __len11,
- __len22, __buffer, __buffer_size);
- __merge_adaptive(__first, __first_cut, __new_middle, __len11,
- __len22, __buffer, __buffer_size, __comp);
- __merge_adaptive(__new_middle, __second_cut, __last, __len1 - __len11,
- __len2 - __len22, __buffer, __buffer_size, __comp);
- }
-}
-
-template <class _BidirectionalIter, class _Tp, class _Distance>
-inline void __inplace_merge_aux(_BidirectionalIter __first,
- _BidirectionalIter __middle,
- _BidirectionalIter __last, _Tp*, _Distance*) {
- _Distance __len1 = 0;
- distance(__first, __middle, __len1);
- _Distance __len2 = 0;
- distance(__middle, __last, __len2);
-
- _Temporary_buffer<_BidirectionalIter, _Tp> __buf(__first, __last);
- if (__buf.begin() == 0)
- __merge_without_buffer(__first, __middle, __last, __len1, __len2);
- else
- __merge_adaptive(__first, __middle, __last, __len1, __len2,
- __buf.begin(), _Distance(__buf.size()));
-}
-
-template <class _BidirectionalIter, class _Tp,
- class _Distance, class _Compare>
-inline void __inplace_merge_aux(_BidirectionalIter __first,
- _BidirectionalIter __middle,
- _BidirectionalIter __last, _Tp*, _Distance*,
- _Compare __comp) {
- _Distance __len1 = 0;
- distance(__first, __middle, __len1);
- _Distance __len2 = 0;
- distance(__middle, __last, __len2);
-
- _Temporary_buffer<_BidirectionalIter, _Tp> __buf(__first, __last);
- if (__buf.begin() == 0)
- __merge_without_buffer(__first, __middle, __last, __len1, __len2, __comp);
- else
- __merge_adaptive(__first, __middle, __last, __len1, __len2,
- __buf.begin(), _Distance(__buf.size()),
- __comp);
-}
-
-template <class _BidirectionalIter>
-inline void inplace_merge(_BidirectionalIter __first,
- _BidirectionalIter __middle,
- _BidirectionalIter __last) {
- if (__first == __middle || __middle == __last)
- return;
- __inplace_merge_aux(__first, __middle, __last,
- __VALUE_TYPE(__first), __DISTANCE_TYPE(__first));
-}
-
-template <class _BidirectionalIter, class _Compare>
-inline void inplace_merge(_BidirectionalIter __first,
- _BidirectionalIter __middle,
- _BidirectionalIter __last, _Compare __comp) {
- if (__first == __middle || __middle == __last)
- return;
- __inplace_merge_aux(__first, __middle, __last,
- __VALUE_TYPE(__first), __DISTANCE_TYPE(__first),
- __comp);
-}
-
-// Set algorithms: includes, set_union, set_intersection, set_difference,
-// set_symmetric_difference. All of these algorithms have the precondition
-// that their input ranges are sorted and the postcondition that their output
-// ranges are sorted.
-
-template <class _InputIter1, class _InputIter2>
-bool includes(_InputIter1 __first1, _InputIter1 __last1,
- _InputIter2 __first2, _InputIter2 __last2) {
- while (__first1 != __last1 && __first2 != __last2)
- if (*__first2 < *__first1)
- return false;
- else if(*__first1 < *__first2)
- ++__first1;
- else
- ++__first1, ++__first2;
-
- return __first2 == __last2;
-}
-
-template <class _InputIter1, class _InputIter2, class _Compare>
-bool includes(_InputIter1 __first1, _InputIter1 __last1,
- _InputIter2 __first2, _InputIter2 __last2, _Compare __comp) {
- while (__first1 != __last1 && __first2 != __last2)
- if (__comp(*__first2, *__first1))
- return false;
- else if(__comp(*__first1, *__first2))
- ++__first1;
- else
- ++__first1, ++__first2;
-
- return __first2 == __last2;
-}
-
-template <class _InputIter1, class _InputIter2, class _OutputIter>
-_OutputIter set_union(_InputIter1 __first1, _InputIter1 __last1,
- _InputIter2 __first2, _InputIter2 __last2,
- _OutputIter __result) {
- while (__first1 != __last1 && __first2 != __last2) {
- if (*__first1 < *__first2) {
- *__result = *__first1;
- ++__first1;
- }
- else if (*__first2 < *__first1) {
- *__result = *__first2;
- ++__first2;
- }
- else {
- *__result = *__first1;
- ++__first1;
- ++__first2;
- }
- ++__result;
- }
- return copy(__first2, __last2, copy(__first1, __last1, __result));
-}
-
-template <class _InputIter1, class _InputIter2, class _OutputIter,
- class _Compare>
-_OutputIter set_union(_InputIter1 __first1, _InputIter1 __last1,
- _InputIter2 __first2, _InputIter2 __last2,
- _OutputIter __result, _Compare __comp) {
- while (__first1 != __last1 && __first2 != __last2) {
- if (__comp(*__first1, *__first2)) {
- *__result = *__first1;
- ++__first1;
- }
- else if (__comp(*__first2, *__first1)) {
- *__result = *__first2;
- ++__first2;
- }
- else {
- *__result = *__first1;
- ++__first1;
- ++__first2;
- }
- ++__result;
- }
- return copy(__first2, __last2, copy(__first1, __last1, __result));
-}
-
-template <class _InputIter1, class _InputIter2, class _OutputIter>
-_OutputIter set_intersection(_InputIter1 __first1, _InputIter1 __last1,
- _InputIter2 __first2, _InputIter2 __last2,
- _OutputIter __result) {
- while (__first1 != __last1 && __first2 != __last2)
- if (*__first1 < *__first2)
- ++__first1;
- else if (*__first2 < *__first1)
- ++__first2;
- else {
- *__result = *__first1;
- ++__first1;
- ++__first2;
- ++__result;
- }
- return __result;
-}
-
-template <class _InputIter1, class _InputIter2, class _OutputIter,
- class _Compare>
-_OutputIter set_intersection(_InputIter1 __first1, _InputIter1 __last1,
- _InputIter2 __first2, _InputIter2 __last2,
- _OutputIter __result, _Compare __comp) {
- while (__first1 != __last1 && __first2 != __last2)
- if (__comp(*__first1, *__first2))
- ++__first1;
- else if (__comp(*__first2, *__first1))
- ++__first2;
- else {
- *__result = *__first1;
- ++__first1;
- ++__first2;
- ++__result;
- }
- return __result;
-}
-
-template <class _InputIter1, class _InputIter2, class _OutputIter>
-_OutputIter set_difference(_InputIter1 __first1, _InputIter1 __last1,
- _InputIter2 __first2, _InputIter2 __last2,
- _OutputIter __result) {
- while (__first1 != __last1 && __first2 != __last2)
- if (*__first1 < *__first2) {
- *__result = *__first1;
- ++__first1;
- ++__result;
- }
- else if (*__first2 < *__first1)
- ++__first2;
- else {
- ++__first1;
- ++__first2;
- }
- return copy(__first1, __last1, __result);
-}
-
-template <class _InputIter1, class _InputIter2, class _OutputIter,
- class _Compare>
-_OutputIter set_difference(_InputIter1 __first1, _InputIter1 __last1,
- _InputIter2 __first2, _InputIter2 __last2,
- _OutputIter __result, _Compare __comp) {
- while (__first1 != __last1 && __first2 != __last2)
- if (__comp(*__first1, *__first2)) {
- *__result = *__first1;
- ++__first1;
- ++__result;
- }
- else if (__comp(*__first2, *__first1))
- ++__first2;
- else {
- ++__first1;
- ++__first2;
- }
- return copy(__first1, __last1, __result);
-}
-
-template <class _InputIter1, class _InputIter2, class _OutputIter>
-_OutputIter
-set_symmetric_difference(_InputIter1 __first1, _InputIter1 __last1,
- _InputIter2 __first2, _InputIter2 __last2,
- _OutputIter __result) {
- while (__first1 != __last1 && __first2 != __last2)
- if (*__first1 < *__first2) {
- *__result = *__first1;
- ++__first1;
- ++__result;
- }
- else if (*__first2 < *__first1) {
- *__result = *__first2;
- ++__first2;
- ++__result;
- }
- else {
- ++__first1;
- ++__first2;
- }
- return copy(__first2, __last2, copy(__first1, __last1, __result));
-}
-
-template <class _InputIter1, class _InputIter2, class _OutputIter,
- class _Compare>
-_OutputIter
-set_symmetric_difference(_InputIter1 __first1, _InputIter1 __last1,
- _InputIter2 __first2, _InputIter2 __last2,
- _OutputIter __result,
- _Compare __comp) {
- while (__first1 != __last1 && __first2 != __last2)
- if (__comp(*__first1, *__first2)) {
- *__result = *__first1;
- ++__first1;
- ++__result;
- }
- else if (__comp(*__first2, *__first1)) {
- *__result = *__first2;
- ++__first2;
- ++__result;
- }
- else {
- ++__first1;
- ++__first2;
- }
- return copy(__first2, __last2, copy(__first1, __last1, __result));
-}
-
-// min_element and max_element, with and without an explicitly supplied
-// comparison function.
-
-template <class _ForwardIter>
-_ForwardIter max_element(_ForwardIter __first, _ForwardIter __last) {
- if (__first == __last) return __first;
- _ForwardIter __result = __first;
- while (++__first != __last)
- if (*__result < *__first)
- __result = __first;
- return __result;
-}
-
-template <class _ForwardIter, class _Compare>
-_ForwardIter max_element(_ForwardIter __first, _ForwardIter __last,
- _Compare __comp) {
- if (__first == __last) return __first;
- _ForwardIter __result = __first;
- while (++__first != __last)
- if (__comp(*__result, *__first)) __result = __first;
- return __result;
-}
-
-template <class _ForwardIter>
-_ForwardIter min_element(_ForwardIter __first, _ForwardIter __last) {
- if (__first == __last) return __first;
- _ForwardIter __result = __first;
- while (++__first != __last)
- if (*__first < *__result)
- __result = __first;
- return __result;
-}
-
-template <class _ForwardIter, class _Compare>
-_ForwardIter min_element(_ForwardIter __first, _ForwardIter __last,
- _Compare __comp) {
- if (__first == __last) return __first;
- _ForwardIter __result = __first;
- while (++__first != __last)
- if (__comp(*__first, *__result))
- __result = __first;
- return __result;
-}
-
-// next_permutation and prev_permutation, with and without an explicitly
-// supplied comparison function.
-
-template <class _BidirectionalIter>
-bool next_permutation(_BidirectionalIter __first, _BidirectionalIter __last) {
- if (__first == __last)
- return false;
- _BidirectionalIter __i = __first;
- ++__i;
- if (__i == __last)
- return false;
- __i = __last;
- --__i;
-
- for(;;) {
- _BidirectionalIter __ii = __i;
- --__i;
- if (*__i < *__ii) {
- _BidirectionalIter __j = __last;
- while (!(*__i < *--__j))
- {}
- iter_swap(__i, __j);
- reverse(__ii, __last);
- return true;
- }
- if (__i == __first) {
- reverse(__first, __last);
- return false;
- }
- }
-}
-
-template <class _BidirectionalIter, class _Compare>
-bool next_permutation(_BidirectionalIter __first, _BidirectionalIter __last,
- _Compare __comp) {
- if (__first == __last)
- return false;
- _BidirectionalIter __i = __first;
- ++__i;
- if (__i == __last)
- return false;
- __i = __last;
- --__i;
-
- for(;;) {
- _BidirectionalIter __ii = __i;
- --__i;
- if (__comp(*__i, *__ii)) {
- _BidirectionalIter __j = __last;
- while (!__comp(*__i, *--__j))
- {}
- iter_swap(__i, __j);
- reverse(__ii, __last);
- return true;
- }
- if (__i == __first) {
- reverse(__first, __last);
- return false;
- }
- }
-}
-
-template <class _BidirectionalIter>
-bool prev_permutation(_BidirectionalIter __first, _BidirectionalIter __last) {
- if (__first == __last)
- return false;
- _BidirectionalIter __i = __first;
- ++__i;
- if (__i == __last)
- return false;
- __i = __last;
- --__i;
-
- for(;;) {
- _BidirectionalIter __ii = __i;
- --__i;
- if (*__ii < *__i) {
- _BidirectionalIter __j = __last;
- while (!(*--__j < *__i))
- {}
- iter_swap(__i, __j);
- reverse(__ii, __last);
- return true;
- }
- if (__i == __first) {
- reverse(__first, __last);
- return false;
- }
- }
-}
-
-template <class _BidirectionalIter, class _Compare>
-bool prev_permutation(_BidirectionalIter __first, _BidirectionalIter __last,
- _Compare __comp) {
- if (__first == __last)
- return false;
- _BidirectionalIter __i = __first;
- ++__i;
- if (__i == __last)
- return false;
- __i = __last;
- --__i;
-
- for(;;) {
- _BidirectionalIter __ii = __i;
- --__i;
- if (__comp(*__ii, *__i)) {
- _BidirectionalIter __j = __last;
- while (!__comp(*--__j, *__i))
- {}
- iter_swap(__i, __j);
- reverse(__ii, __last);
- return true;
- }
- if (__i == __first) {
- reverse(__first, __last);
- return false;
- }
- }
-}
-
-// find_first_of, with and without an explicitly supplied comparison function.
-
-template <class _InputIter, class _ForwardIter>
-_InputIter find_first_of(_InputIter __first1, _InputIter __last1,
- _ForwardIter __first2, _ForwardIter __last2)
-{
- for ( ; __first1 != __last1; ++__first1)
- for (_ForwardIter __iter = __first2; __iter != __last2; ++__iter)
- if (*__first1 == *__iter)
- return __first1;
- return __last1;
-}
-
-template <class _InputIter, class _ForwardIter, class _BinaryPredicate>
-_InputIter find_first_of(_InputIter __first1, _InputIter __last1,
- _ForwardIter __first2, _ForwardIter __last2,
- _BinaryPredicate __comp)
-{
- for ( ; __first1 != __last1; ++__first1)
- for (_ForwardIter __iter = __first2; __iter != __last2; ++__iter)
- if (__comp(*__first1, *__iter))
- return __first1;
- return __last1;
-}
-
-
-// find_end, with and without an explicitly supplied comparison function.
-// Search [first2, last2) as a subsequence in [first1, last1), and return
-// the *last* possible match. Note that find_end for bidirectional iterators
-// is much faster than for forward iterators.
-
-// find_end for forward iterators.
-template <class _ForwardIter1, class _ForwardIter2>
-_ForwardIter1 __find_end(_ForwardIter1 __first1, _ForwardIter1 __last1,
- _ForwardIter2 __first2, _ForwardIter2 __last2,
- forward_iterator_tag, forward_iterator_tag)
-{
- if (__first2 == __last2)
- return __last1;
- else {
- _ForwardIter1 __result = __last1;
- while (1) {
- _ForwardIter1 __new_result
- = search(__first1, __last1, __first2, __last2);
- if (__new_result == __last1)
- return __result;
- else {
- __result = __new_result;
- __first1 = __new_result;
- ++__first1;
- }
- }
- }
-}
-
-template <class _ForwardIter1, class _ForwardIter2,
- class _BinaryPredicate>
-_ForwardIter1 __find_end(_ForwardIter1 __first1, _ForwardIter1 __last1,
- _ForwardIter2 __first2, _ForwardIter2 __last2,
- forward_iterator_tag, forward_iterator_tag,
- _BinaryPredicate __comp)
-{
- if (__first2 == __last2)
- return __last1;
- else {
- _ForwardIter1 __result = __last1;
- while (1) {
- _ForwardIter1 __new_result
- = search(__first1, __last1, __first2, __last2, __comp);
- if (__new_result == __last1)
- return __result;
- else {
- __result = __new_result;
- __first1 = __new_result;
- ++__first1;
- }
- }
- }
-}
-
-// find_end for bidirectional iterators. Requires partial specialization.
-#ifdef __STL_CLASS_PARTIAL_SPECIALIZATION
-
-template <class _BidirectionalIter1, class _BidirectionalIter2>
-_BidirectionalIter1
-__find_end(_BidirectionalIter1 __first1, _BidirectionalIter1 __last1,
- _BidirectionalIter2 __first2, _BidirectionalIter2 __last2,
- bidirectional_iterator_tag, bidirectional_iterator_tag)
-{
- typedef reverse_iterator<_BidirectionalIter1> _RevIter1;
- typedef reverse_iterator<_BidirectionalIter2> _RevIter2;
-
- _RevIter1 __rlast1(__first1);
- _RevIter2 __rlast2(__first2);
- _RevIter1 __rresult = search(_RevIter1(__last1), __rlast1,
- _RevIter2(__last2), __rlast2);
-
- if (__rresult == __rlast1)
- return __last1;
- else {
- _BidirectionalIter1 __result = __rresult.base();
- advance(__result, -distance(__first2, __last2));
- return __result;
- }
-}
-
-template <class _BidirectionalIter1, class _BidirectionalIter2,
- class _BinaryPredicate>
-_BidirectionalIter1
-__find_end(_BidirectionalIter1 __first1, _BidirectionalIter1 __last1,
- _BidirectionalIter2 __first2, _BidirectionalIter2 __last2,
- bidirectional_iterator_tag, bidirectional_iterator_tag,
- _BinaryPredicate __comp)
-{
- typedef reverse_iterator<_BidirectionalIter1> _RevIter1;
- typedef reverse_iterator<_BidirectionalIter2> _RevIter2;
-
- _RevIter1 __rlast1(__first1);
- _RevIter2 __rlast2(__first2);
- _RevIter1 __rresult = search(_RevIter1(__last1), __rlast1,
- _RevIter2(__last2), __rlast2,
- __comp);
-
- if (__rresult == __rlast1)
- return __last1;
- else {
- _BidirectionalIter1 __result = __rresult.base();
- advance(__result, -distance(__first2, __last2));
- return __result;
- }
-}
-#endif /* __STL_CLASS_PARTIAL_SPECIALIZATION */
-
-// Dispatching functions for find_end.
-
-template <class _ForwardIter1, class _ForwardIter2>
-inline _ForwardIter1
-find_end(_ForwardIter1 __first1, _ForwardIter1 __last1,
- _ForwardIter2 __first2, _ForwardIter2 __last2)
-{
- return __find_end(__first1, __last1, __first2, __last2,
- __ITERATOR_CATEGORY(__first1),
- __ITERATOR_CATEGORY(__first2));
-}
-
-template <class _ForwardIter1, class _ForwardIter2,
- class _BinaryPredicate>
-inline _ForwardIter1
-find_end(_ForwardIter1 __first1, _ForwardIter1 __last1,
- _ForwardIter2 __first2, _ForwardIter2 __last2,
- _BinaryPredicate __comp)
-{
- return __find_end(__first1, __last1, __first2, __last2,
- __ITERATOR_CATEGORY(__first1),
- __ITERATOR_CATEGORY(__first2),
- __comp);
-}
-
-// is_heap, a predicate testing whether or not a range is
-// a heap. This function is an extension, not part of the C++
-// standard.
-
-template <class _RandomAccessIter, class _Distance>
-bool __is_heap(_RandomAccessIter __first, _Distance __n)
-{
- _Distance __parent = 0;
- for (_Distance __child = 1; __child < __n; ++__child) {
- if (__first[__parent] < __first[__child])
- return false;
- if ((__child & 1) == 0)
- ++__parent;
- }
- return true;
-}
-
-template <class _RandomAccessIter, class _Distance, class _StrictWeakOrdering>
-bool __is_heap(_RandomAccessIter __first, _StrictWeakOrdering __comp,
- _Distance __n)
-{
- _Distance __parent = 0;
- for (_Distance __child = 1; __child < __n; ++__child) {
- if (__comp(__first[__parent], __first[__child]))
- return false;
- if ((__child & 1) == 0)
- ++__parent;
- }
- return true;
-}
-
-template <class _RandomAccessIter>
-inline bool is_heap(_RandomAccessIter __first, _RandomAccessIter __last)
-{
- return __is_heap(__first, __last - __first);
-}
-
-
-template <class _RandomAccessIter, class _StrictWeakOrdering>
-inline bool is_heap(_RandomAccessIter __first, _RandomAccessIter __last,
- _StrictWeakOrdering __comp)
-{
- return __is_heap(__first, __comp, __last - __first);
-}
-
-// is_sorted, a predicated testing whether a range is sorted in
-// nondescending order. This is an extension, not part of the C++
-// standard.
-
-template <class _ForwardIter>
-bool is_sorted(_ForwardIter __first, _ForwardIter __last)
-{
- if (__first == __last)
- return true;
-
- _ForwardIter __next = __first;
- for (++__next; __next != __last; __first = __next, ++__next) {
- if (*__next < *__first)
- return false;
- }
-
- return true;
-}
-
-template <class _ForwardIter, class _StrictWeakOrdering>
-bool is_sorted(_ForwardIter __first, _ForwardIter __last,
- _StrictWeakOrdering __comp)
-{
- if (__first == __last)
- return true;
-
- _ForwardIter __next = __first;
- for (++__next; __next != __last; __first = __next, ++__next) {
- if (__comp(*__next, *__first))
- return false;
- }
-
- return true;
-}
-
-#if defined(__sgi) && !defined(__GNUC__) && (_MIPS_SIM != _MIPS_SIM_ABI32)
-#pragma reset woff 1209
-#endif
-
-__STL_END_NAMESPACE
-
-#endif /* __SGI_STL_INTERNAL_ALGO_H */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/stl_algobase.h b/contrib/libstdc++/stl/stl_algobase.h
deleted file mode 100644
index 15e535f483d2..000000000000
--- a/contrib/libstdc++/stl/stl_algobase.h
+++ /dev/null
@@ -1,526 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- * Copyright (c) 1996-1998
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-/* NOTE: This is an internal header file, included by other STL headers.
- * You should not attempt to use it directly.
- */
-
-
-#ifndef __SGI_STL_INTERNAL_ALGOBASE_H
-#define __SGI_STL_INTERNAL_ALGOBASE_H
-
-#ifndef __STL_CONFIG_H
-#include <stl_config.h>
-#endif
-#ifndef __SGI_STL_INTERNAL_RELOPS
-#include <stl_relops.h>
-#endif
-#ifndef __SGI_STL_INTERNAL_PAIR_H
-#include <stl_pair.h>
-#endif
-#ifndef __TYPE_TRAITS_H_
-#include <type_traits.h>
-#endif
-
-#include <string.h>
-#include <limits.h>
-#include <stdlib.h>
-#include <stddef.h>
-#include <new.h>
-#include <iostream.h>
-
-#ifndef __SGI_STL_INTERNAL_ITERATOR_H
-#include <stl_iterator.h>
-#endif
-
-__STL_BEGIN_NAMESPACE
-
-// swap and iter_swap
-
-template <class _ForwardIter1, class _ForwardIter2, class _Tp>
-inline void __iter_swap(_ForwardIter1 __a, _ForwardIter2 __b, _Tp*) {
- _Tp __tmp = *__a;
- *__a = *__b;
- *__b = __tmp;
-}
-
-template <class _ForwardIter1, class _ForwardIter2>
-inline void iter_swap(_ForwardIter1 __a, _ForwardIter2 __b) {
- __iter_swap(__a, __b, __VALUE_TYPE(__a));
-}
-
-template <class _Tp>
-inline void swap(_Tp& __a, _Tp& __b) {
- _Tp __tmp = __a;
- __a = __b;
- __b = __tmp;
-}
-
-//--------------------------------------------------
-// min and max
-
-#ifndef __BORLANDC__
-
-#undef min
-#undef max
-
-template <class _Tp>
-inline const _Tp& min(const _Tp& __a, const _Tp& __b) {
- return __b < __a ? __b : __a;
-}
-
-template <class _Tp>
-inline const _Tp& max(const _Tp& __a, const _Tp& __b) {
- return __a < __b ? __b : __a;
-}
-
-#endif /* __BORLANDC__ */
-
-template <class _Tp, class _Compare>
-inline const _Tp& min(const _Tp& __a, const _Tp& __b, _Compare __comp) {
- return __comp(__b, __a) ? __b : __a;
-}
-
-template <class _Tp, class _Compare>
-inline const _Tp& max(const _Tp& __a, const _Tp& __b, _Compare __comp) {
- return __comp(__a, __b) ? __b : __a;
-}
-
-//--------------------------------------------------
-// copy
-
-// All of these auxiliary functions serve two purposes. (1) Replace
-// calls to copy with memmove whenever possible. (Memmove, not memcpy,
-// because the input and output ranges are permitted to overlap.)
-// (2) If we're using random access iterators, then write the loop as
-// a for loop with an explicit count. The auxiliary class __copy_dispatch
-// is a workaround for compilers that don't support partial ordering of
-// function templates.
-
-template <class _InputIter, class _OutputIter, class _Distance>
-inline _OutputIter __copy(_InputIter __first, _InputIter __last,
- _OutputIter __result,
- input_iterator_tag, _Distance*)
-{
- for ( ; __first != __last; ++__result, ++__first)
- *__result = *__first;
- return __result;
-}
-
-template <class _RandomAccessIter, class _OutputIter, class _Distance>
-inline _OutputIter
-__copy(_RandomAccessIter __first, _RandomAccessIter __last,
- _OutputIter __result, random_access_iterator_tag, _Distance*)
-{
- for (_Distance __n = __last - __first; __n > 0; --__n) {
- *__result = *__first;
- ++__first;
- ++__result;
- }
- return __result;
-}
-
-template <class _Tp>
-inline _Tp*
-__copy_trivial(const _Tp* __first, const _Tp* __last, _Tp* __result) {
- memmove(__result, __first, sizeof(_Tp) * (__last - __first));
- return __result + (__last - __first);
-}
-
-#ifdef __STL_CLASS_PARTIAL_SPECIALIZATION
-
-template <class _InputIter, class _OutputIter, class _BoolType>
-struct __copy_dispatch {
- static _OutputIter copy(_InputIter __first, _InputIter __last,
- _OutputIter __result) {
- typedef typename iterator_traits<_InputIter>::iterator_category _Category;
- typedef typename iterator_traits<_InputIter>::difference_type _Distance;
- return __copy(__first, __last, __result, _Category(), (_Distance*) 0);
- }
-};
-
-template <class _Tp>
-struct __copy_dispatch<_Tp*, _Tp*, __true_type>
-{
- static _Tp* copy(const _Tp* __first, const _Tp* __last, _Tp* __result) {
- return __copy_trivial(__first, __last, __result);
- }
-};
-
-template <class _Tp>
-struct __copy_dispatch<const _Tp*, _Tp*, __true_type>
-{
- static _Tp* copy(const _Tp* __first, const _Tp* __last, _Tp* __result) {
- return __copy_trivial(__first, __last, __result);
- }
-};
-
-template <class _InputIter, class _OutputIter>
-inline _OutputIter copy(_InputIter __first, _InputIter __last,
- _OutputIter __result) {
- typedef typename iterator_traits<_InputIter>::value_type _Tp;
- typedef typename __type_traits<_Tp>::has_trivial_assignment_operator
- _Trivial;
- return __copy_dispatch<_InputIter, _OutputIter, _Trivial>
- ::copy(__first, __last, __result);
-}
-
-#else /* __STL_CLASS_PARTIAL_SPECIALIZATION */
-
-template <class _InputIter, class _OutputIter>
-inline _OutputIter copy(_InputIter __first, _InputIter __last,
- _OutputIter __result)
-{
- return __copy(__first, __last, __result,
- __ITERATOR_CATEGORY(__first),
- __DISTANCE_TYPE(__first));
-}
-
-inline char* copy(const char* __first, const char* __last, char* __result) {
- memmove(__result, __first, __last - __first);
- return __result + (__last - __first);
-}
-
-inline wchar_t* copy(const wchar_t* __first, const wchar_t* __last,
- wchar_t* __result) {
- memmove(__result, __first, sizeof(wchar_t) * (__last - __first));
- return __result + (__last - __first);
-}
-
-#endif /* __STL_CLASS_PARTIAL_SPECIALIZATION */
-
-//--------------------------------------------------
-// copy_backward
-
-template <class _BidirectionalIter1, class _BidirectionalIter2,
- class _Distance>
-inline _BidirectionalIter2 __copy_backward(_BidirectionalIter1 __first,
- _BidirectionalIter1 __last,
- _BidirectionalIter2 __result,
- bidirectional_iterator_tag,
- _Distance*)
-{
- while (__first != __last)
- *--__result = *--__last;
- return __result;
-}
-
-template <class _RandomAccessIter, class _BidirectionalIter, class _Distance>
-inline _BidirectionalIter __copy_backward(_RandomAccessIter __first,
- _RandomAccessIter __last,
- _BidirectionalIter __result,
- random_access_iterator_tag,
- _Distance*)
-{
- for (_Distance __n = __last - __first; __n > 0; --__n)
- *--__result = *--__last;
- return __result;
-}
-
-#ifdef __STL_CLASS_PARTIAL_SPECIALIZATION
-
-// This dispatch class is a workaround for compilers that do not
-// have partial ordering of function templates. All we're doing is
-// creating a specialization so that we can turn a call to copy_backward
-// into a memmove whenever possible.
-
-template <class _BidirectionalIter1, class _BidirectionalIter2,
- class _BoolType>
-struct __copy_backward_dispatch
-{
- typedef typename iterator_traits<_BidirectionalIter1>::iterator_category
- _Cat;
- typedef typename iterator_traits<_BidirectionalIter1>::difference_type
- _Distance;
-
- static _BidirectionalIter2 copy(_BidirectionalIter1 __first,
- _BidirectionalIter1 __last,
- _BidirectionalIter2 __result) {
- return __copy_backward(__first, __last, __result, _Cat(), (_Distance*) 0);
- }
-};
-
-template <class _Tp>
-struct __copy_backward_dispatch<_Tp*, _Tp*, __true_type>
-{
- static _Tp* copy(const _Tp* __first, const _Tp* __last, _Tp* __result) {
- const ptrdiff_t _Num = __last - __first;
- memmove(__result - _Num, __first, sizeof(_Tp) * _Num);
- return __result - _Num;
- }
-};
-
-template <class _Tp>
-struct __copy_backward_dispatch<const _Tp*, _Tp*, __true_type>
-{
- static _Tp* copy(const _Tp* __first, const _Tp* __last, _Tp* __result) {
- return __copy_backward_dispatch<_Tp*, _Tp*, __true_type>
- ::copy(__first, __last, __result);
- }
-};
-
-template <class _BI1, class _BI2>
-inline _BI2 copy_backward(_BI1 __first, _BI1 __last, _BI2 __result) {
- typedef typename __type_traits<typename iterator_traits<_BI2>::value_type>
- ::has_trivial_assignment_operator
- _Trivial;
- return __copy_backward_dispatch<_BI1, _BI2, _Trivial>
- ::copy(__first, __last, __result);
-}
-
-#else /* __STL_CLASS_PARTIAL_SPECIALIZATION */
-
-template <class _BI1, class _BI2>
-inline _BI2 copy_backward(_BI1 __first, _BI1 __last, _BI2 __result) {
- return __copy_backward(__first, __last, __result,
- __ITERATOR_CATEGORY(__first),
- __DISTANCE_TYPE(__first));
-}
-
-#endif /* __STL_CLASS_PARTIAL_SPECIALIZATION */
-
-//--------------------------------------------------
-// copy_n (not part of the C++ standard)
-
-template <class _InputIter, class _Size, class _OutputIter>
-pair<_InputIter, _OutputIter> __copy_n(_InputIter __first, _Size __count,
- _OutputIter __result,
- input_iterator_tag) {
- for ( ; __count > 0; --__count) {
- *__result = *__first;
- ++__first;
- ++__result;
- }
- return pair<_InputIter, _OutputIter>(__first, __result);
-}
-
-template <class _RAIter, class _Size, class _OutputIter>
-inline pair<_RAIter, _OutputIter>
-__copy_n(_RAIter __first, _Size __count,
- _OutputIter __result,
- random_access_iterator_tag) {
- _RAIter __last = __first + __count;
- return pair<_RAIter, _OutputIter>(__last, copy(__first, __last, __result));
-}
-
-template <class _InputIter, class _Size, class _OutputIter>
-inline pair<_InputIter, _OutputIter>
-__copy_n(_InputIter __first, _Size __count, _OutputIter __result) {
- return __copy_n(__first, __count, __result,
- __ITERATOR_CATEGORY(__first));
-}
-
-template <class _InputIter, class _Size, class _OutputIter>
-inline pair<_InputIter, _OutputIter>
-copy_n(_InputIter __first, _Size __count, _OutputIter __result) {
- return __copy_n(__first, __count, __result);
-}
-
-//--------------------------------------------------
-// fill and fill_n
-
-
-template <class _ForwardIter, class _Tp>
-void fill(_ForwardIter __first, _ForwardIter __last, const _Tp& __value) {
- for ( ; __first != __last; ++__first)
- *__first = __value;
-}
-
-template <class _OutputIter, class _Size, class _Tp>
-_OutputIter fill_n(_OutputIter __first, _Size __n, const _Tp& __value) {
- for ( ; __n > 0; --__n, ++__first)
- *__first = __value;
- return __first;
-}
-
-//--------------------------------------------------
-// equal and mismatch
-
-template <class _InputIter1, class _InputIter2>
-pair<_InputIter1, _InputIter2> mismatch(_InputIter1 __first1,
- _InputIter1 __last1,
- _InputIter2 __first2) {
- while (__first1 != __last1 && *__first1 == *__first2) {
- ++__first1;
- ++__first2;
- }
- return pair<_InputIter1, _InputIter2>(__first1, __first2);
-}
-
-template <class _InputIter1, class _InputIter2, class _BinaryPredicate>
-pair<_InputIter1, _InputIter2> mismatch(_InputIter1 __first1,
- _InputIter1 __last1,
- _InputIter2 __first2,
- _BinaryPredicate __binary_pred) {
- while (__first1 != __last1 && __binary_pred(*__first1, *__first2)) {
- ++__first1;
- ++__first2;
- }
- return pair<_InputIter1, _InputIter2>(__first1, __first2);
-}
-
-template <class _InputIter1, class _InputIter2>
-inline bool equal(_InputIter1 __first1, _InputIter1 __last1,
- _InputIter2 __first2) {
- for ( ; __first1 != __last1; ++__first1, ++__first2)
- if (*__first1 != *__first2)
- return false;
- return true;
-}
-
-template <class _InputIter1, class _InputIter2, class _BinaryPredicate>
-inline bool equal(_InputIter1 __first1, _InputIter1 __last1,
- _InputIter2 __first2, _BinaryPredicate __binary_pred) {
- for ( ; __first1 != __last1; ++__first1, ++__first2)
- if (!__binary_pred(*__first1, *__first2))
- return false;
- return true;
-}
-
-//--------------------------------------------------
-// lexicographical_compare and lexicographical_compare_3way.
-// (the latter is not part of the C++ standard.)
-
-template <class _InputIter1, class _InputIter2>
-bool lexicographical_compare(_InputIter1 __first1, _InputIter1 __last1,
- _InputIter2 __first2, _InputIter2 __last2) {
- for ( ; __first1 != __last1 && __first2 != __last2
- ; ++__first1, ++__first2) {
- if (*__first1 < *__first2)
- return true;
- if (*__first2 < *__first1)
- return false;
- }
- return __first1 == __last1 && __first2 != __last2;
-}
-
-template <class _InputIter1, class _InputIter2, class _Compare>
-bool lexicographical_compare(_InputIter1 __first1, _InputIter1 __last1,
- _InputIter2 __first2, _InputIter2 __last2,
- _Compare __comp) {
- for ( ; __first1 != __last1 && __first2 != __last2
- ; ++__first1, ++__first2) {
- if (__comp(*__first1, *__first2))
- return true;
- if (__comp(*__first2, *__first1))
- return false;
- }
- return __first1 == __last1 && __first2 != __last2;
-}
-
-inline bool
-lexicographical_compare(const unsigned char* __first1,
- const unsigned char* __last1,
- const unsigned char* __first2,
- const unsigned char* __last2)
-{
- const size_t __len1 = __last1 - __first1;
- const size_t __len2 = __last2 - __first2;
- const int __result = memcmp(__first1, __first2, min(__len1, __len2));
- return __result != 0 ? __result < 0 : __len1 < __len2;
-}
-
-inline bool lexicographical_compare(const char* __first1, const char* __last1,
- const char* __first2, const char* __last2)
-{
-#if CHAR_MAX == SCHAR_MAX
- return lexicographical_compare((const signed char*) __first1,
- (const signed char*) __last1,
- (const signed char*) __first2,
- (const signed char*) __last2);
-#else /* CHAR_MAX == SCHAR_MAX */
- return lexicographical_compare((const unsigned char*) __first1,
- (const unsigned char*) __last1,
- (const unsigned char*) __first2,
- (const unsigned char*) __last2);
-#endif /* CHAR_MAX == SCHAR_MAX */
-}
-
-template <class _InputIter1, class _InputIter2>
-int __lexicographical_compare_3way(_InputIter1 __first1, _InputIter1 __last1,
- _InputIter2 __first2, _InputIter2 __last2)
-{
- while (__first1 != __last1 && __first2 != __last2) {
- if (*__first1 < *__first2)
- return -1;
- if (*__first2 < *__first1)
- return 1;
- ++__first1;
- ++__first2;
- }
- if (__first2 == __last2) {
- return !(__first1 == __last1);
- }
- else {
- return -1;
- }
-}
-
-inline int
-__lexicographical_compare_3way(const unsigned char* __first1,
- const unsigned char* __last1,
- const unsigned char* __first2,
- const unsigned char* __last2)
-{
- const ptrdiff_t __len1 = __last1 - __first1;
- const ptrdiff_t __len2 = __last2 - __first2;
- const int __result = memcmp(__first1, __first2, min(__len1, __len2));
- return __result != 0 ? __result
- : (__len1 == __len2 ? 0 : (__len1 < __len2 ? -1 : 1));
-}
-
-inline int
-__lexicographical_compare_3way(const char* __first1, const char* __last1,
- const char* __first2, const char* __last2)
-{
-#if CHAR_MAX == SCHAR_MAX
- return __lexicographical_compare_3way(
- (const signed char*) __first1,
- (const signed char*) __last1,
- (const signed char*) __first2,
- (const signed char*) __last2);
-#else
- return __lexicographical_compare_3way((const unsigned char*) __first1,
- (const unsigned char*) __last1,
- (const unsigned char*) __first2,
- (const unsigned char*) __last2);
-#endif
-}
-
-template <class _InputIter1, class _InputIter2>
-int lexicographical_compare_3way(_InputIter1 __first1, _InputIter1 __last1,
- _InputIter2 __first2, _InputIter2 __last2)
-{
- return __lexicographical_compare_3way(__first1, __last1, __first2, __last2);
-}
-
-__STL_END_NAMESPACE
-
-#endif /* __SGI_STL_INTERNAL_ALGOBASE_H */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/stl_alloc.h b/contrib/libstdc++/stl/stl_alloc.h
deleted file mode 100644
index 208309a389b5..000000000000
--- a/contrib/libstdc++/stl/stl_alloc.h
+++ /dev/null
@@ -1,1057 +0,0 @@
-/*
- * Copyright (c) 1996-1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-/* NOTE: This is an internal header file, included by other STL headers.
- * You should not attempt to use it directly.
- */
-
-#ifndef __SGI_STL_INTERNAL_ALLOC_H
-#define __SGI_STL_INTERNAL_ALLOC_H
-
-#ifdef __SUNPRO_CC
-# define __PRIVATE public
- // Extra access restrictions prevent us from really making some things
- // private.
-#else
-# define __PRIVATE private
-#endif
-
-#ifdef __STL_STATIC_TEMPLATE_MEMBER_BUG
-# define __USE_MALLOC
-#endif
-
-
-// This implements some standard node allocators. These are
-// NOT the same as the allocators in the C++ draft standard or in
-// in the original STL. They do not encapsulate different pointer
-// types; indeed we assume that there is only one pointer type.
-// The allocation primitives are intended to allocate individual objects,
-// not larger arenas as with the original STL allocators.
-
-#if 0
-# include <new>
-# define __THROW_BAD_ALLOC throw bad_alloc()
-#elif !defined(__THROW_BAD_ALLOC)
-# include <iostream.h>
-# define __THROW_BAD_ALLOC cerr << "out of memory" << endl; exit(1)
-#endif
-
-#ifdef __STL_WIN32THREADS
-# include <windows.h>
-#endif
-
-#include <stddef.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-#ifndef __RESTRICT
-# define __RESTRICT
-#endif
-
-#if !defined(__STL_PTHREADS) && !defined(__STL_SOLTHREADS) \
- && !defined(_NOTHREADS) \
- && !defined(__STL_SGI_THREADS) && !defined(__STL_WIN32THREADS)
-# define _NOTHREADS
-#endif
-
-# ifdef __STL_PTHREADS
- // POSIX Threads
- // This is dubious, since this is likely to be a high contention
- // lock. Performance may not be adequate.
-# include <pthread.h>
-# define __NODE_ALLOCATOR_LOCK \
- if (threads) pthread_mutex_lock(&_S_node_allocator_lock)
-# define __NODE_ALLOCATOR_UNLOCK \
- if (threads) pthread_mutex_unlock(&_S_node_allocator_lock)
-# define __NODE_ALLOCATOR_THREADS true
-# define __VOLATILE volatile // Needed at -O3 on SGI
-# endif
-# ifdef __STL_SOLTHREADS
-# include <thread.h>
-# define __NODE_ALLOCATOR_LOCK \
- if (threads) mutex_lock(&_S_node_allocator_lock)
-# define __NODE_ALLOCATOR_UNLOCK \
- if (threads) mutex_unlock(&_S_node_allocator_lock)
-# define __NODE_ALLOCATOR_THREADS true
-# define __VOLATILE
-# endif
-# ifdef __STL_WIN32THREADS
- // The lock needs to be initialized by constructing an allocator
- // objects of the right type. We do that here explicitly for alloc.
-# define __NODE_ALLOCATOR_LOCK \
- EnterCriticalSection(&_S_node_allocator_lock)
-# define __NODE_ALLOCATOR_UNLOCK \
- LeaveCriticalSection(&_S_node_allocator_lock)
-# define __NODE_ALLOCATOR_THREADS true
-# define __VOLATILE volatile // may not be needed
-# endif /* WIN32THREADS */
-# ifdef __STL_SGI_THREADS
- // This should work without threads, with sproc threads, or with
- // pthreads. It is suboptimal in all cases.
- // It is unlikely to even compile on nonSGI machines.
-
- extern "C" {
- extern int __us_rsthread_malloc;
- }
- // The above is copied from malloc.h. Including <malloc.h>
- // would be cleaner but fails with certain levels of standard
- // conformance.
-# define __NODE_ALLOCATOR_LOCK if (threads && __us_rsthread_malloc) \
- { _S_lock(&_S_node_allocator_lock); }
-# define __NODE_ALLOCATOR_UNLOCK if (threads && __us_rsthread_malloc) \
- { _S_unlock(&_S_node_allocator_lock); }
-# define __NODE_ALLOCATOR_THREADS true
-# define __VOLATILE volatile // Needed at -O3 on SGI
-# endif
-# ifdef _NOTHREADS
-// Thread-unsafe
-# define __NODE_ALLOCATOR_LOCK
-# define __NODE_ALLOCATOR_UNLOCK
-# define __NODE_ALLOCATOR_THREADS false
-# define __VOLATILE
-# endif
-
-__STL_BEGIN_NAMESPACE
-
-#if defined(__sgi) && !defined(__GNUC__) && (_MIPS_SIM != _MIPS_SIM_ABI32)
-#pragma set woff 1174
-#endif
-
-// Malloc-based allocator. Typically slower than default alloc below.
-// Typically thread-safe and more storage efficient.
-#ifdef __STL_STATIC_TEMPLATE_MEMBER_BUG
-# ifdef __DECLARE_GLOBALS_HERE
- void (* __malloc_alloc_oom_handler)() = 0;
- // g++ 2.7.2 does not handle static template data members.
-# else
- extern void (* __malloc_alloc_oom_handler)();
-# endif
-#endif
-
-template <int __inst>
-class __malloc_alloc_template {
-
-private:
-
- static void* _S_oom_malloc(size_t);
- static void* _S_oom_realloc(void*, size_t);
-
-#ifndef __STL_STATIC_TEMPLATE_MEMBER_BUG
- static void (* __malloc_alloc_oom_handler)();
-#endif
-
-public:
-
- static void* allocate(size_t __n)
- {
- void* __result = malloc(__n);
- if (0 == __result) __result = _S_oom_malloc(__n);
- return __result;
- }
-
- static void deallocate(void* __p, size_t /* __n */)
- {
- free(__p);
- }
-
- static void* reallocate(void* __p, size_t /* old_sz */, size_t __new_sz)
- {
- void* __result = realloc(__p, __new_sz);
- if (0 == __result) __result = _S_oom_realloc(__p, __new_sz);
- return __result;
- }
-
- static void (* __set_malloc_handler(void (*__f)()))()
- {
- void (* __old)() = __malloc_alloc_oom_handler;
- __malloc_alloc_oom_handler = __f;
- return(__old);
- }
-
-};
-
-// malloc_alloc out-of-memory handling
-
-#ifndef __STL_STATIC_TEMPLATE_MEMBER_BUG
-template <int __inst>
-void (* __malloc_alloc_template<__inst>::__malloc_alloc_oom_handler)() = 0;
-#endif
-
-template <int __inst>
-void*
-__malloc_alloc_template<__inst>::_S_oom_malloc(size_t __n)
-{
- void (* __my_malloc_handler)();
- void* __result;
-
- for (;;) {
- __my_malloc_handler = __malloc_alloc_oom_handler;
- if (0 == __my_malloc_handler) { __THROW_BAD_ALLOC; }
- (*__my_malloc_handler)();
- __result = malloc(__n);
- if (__result) return(__result);
- }
-}
-
-template <int __inst>
-void* __malloc_alloc_template<__inst>::_S_oom_realloc(void* __p, size_t __n)
-{
- void (* __my_malloc_handler)();
- void* __result;
-
- for (;;) {
- __my_malloc_handler = __malloc_alloc_oom_handler;
- if (0 == __my_malloc_handler) { __THROW_BAD_ALLOC; }
- (*__my_malloc_handler)();
- __result = realloc(__p, __n);
- if (__result) return(__result);
- }
-}
-
-typedef __malloc_alloc_template<0> malloc_alloc;
-
-template<class _Tp, class _Alloc>
-class simple_alloc {
-
-public:
- static _Tp* allocate(size_t __n)
- { return 0 == __n ? 0 : (_Tp*) _Alloc::allocate(__n * sizeof (_Tp)); }
- static _Tp* allocate(void)
- { return (_Tp*) _Alloc::allocate(sizeof (_Tp)); }
- static void deallocate(_Tp* __p, size_t __n)
- { if (0 != __n) _Alloc::deallocate(__p, __n * sizeof (_Tp)); }
- static void deallocate(_Tp* __p)
- { _Alloc::deallocate(__p, sizeof (_Tp)); }
-};
-
-// Allocator adaptor to check size arguments for debugging.
-// Reports errors using assert. Checking can be disabled with
-// NDEBUG, but it's far better to just use the underlying allocator
-// instead when no checking is desired.
-// There is some evidence that this can confuse Purify.
-template <class _Alloc>
-class debug_alloc {
-
-private:
-
- enum {_S_extra = 8}; // Size of space used to store size. Note
- // that this must be large enough to preserve
- // alignment.
-
-public:
-
- static void* allocate(size_t __n)
- {
- char* __result = (char*)_Alloc::allocate(__n + _S_extra);
- *(size_t*)__result = __n;
- return __result + _S_extra;
- }
-
- static void deallocate(void* __p, size_t __n)
- {
- char* __real_p = (char*)__p - _S_extra;
- assert(*(size_t*)__real_p == __n);
- _Alloc::deallocate(__real_p, __n + _S_extra);
- }
-
- static void* reallocate(void* __p, size_t __old_sz, size_t __new_sz)
- {
- char* __real_p = (char*)__p - _S_extra;
- assert(*(size_t*)__real_p == __old_sz);
- char* __result = (char*)
- _Alloc::reallocate(__real_p, __old_sz + _S_extra, __new_sz + _S_extra);
- *(size_t*)__result = __new_sz;
- return __result + _S_extra;
- }
-
-};
-
-
-# ifdef __USE_MALLOC
-
-typedef malloc_alloc alloc;
-typedef malloc_alloc single_client_alloc;
-
-# else
-
-
-// Default node allocator.
-// With a reasonable compiler, this should be roughly as fast as the
-// original STL class-specific allocators, but with less fragmentation.
-// Default_alloc_template parameters are experimental and MAY
-// DISAPPEAR in the future. Clients should just use alloc for now.
-//
-// Important implementation properties:
-// 1. If the client request an object of size > _MAX_BYTES, the resulting
-// object will be obtained directly from malloc.
-// 2. In all other cases, we allocate an object of size exactly
-// _S_round_up(requested_size). Thus the client has enough size
-// information that we can return the object to the proper free list
-// without permanently losing part of the object.
-//
-
-// The first template parameter specifies whether more than one thread
-// may use this allocator. It is safe to allocate an object from
-// one instance of a default_alloc and deallocate it with another
-// one. This effectively transfers its ownership to the second one.
-// This may have undesirable effects on reference locality.
-// The second parameter is unreferenced and serves only to allow the
-// creation of multiple default_alloc instances.
-// Node that containers built on different allocator instances have
-// different types, limiting the utility of this approach.
-#ifdef __SUNPRO_CC
-// breaks if we make these template class members:
- enum {_ALIGN = 8};
- enum {_MAX_BYTES = 128};
- enum {_NFREELISTS = _MAX_BYTES/_ALIGN};
-#endif
-
-template <bool threads, int inst>
-class __default_alloc_template {
-
-private:
- // Really we should use static const int x = N
- // instead of enum { x = N }, but few compilers accept the former.
-# ifndef __SUNPRO_CC
- enum {_ALIGN = 8};
- enum {_MAX_BYTES = 128};
- enum {_NFREELISTS = _MAX_BYTES/_ALIGN};
-# endif
- static size_t
- _S_round_up(size_t __bytes)
- { return (((__bytes) + _ALIGN-1) & ~(_ALIGN - 1)); }
-
-__PRIVATE:
- union _Obj {
- union _Obj* _M_free_list_link;
- char _M_client_data[1]; /* The client sees this. */
- };
-private:
-# ifdef __SUNPRO_CC
- static _Obj* __VOLATILE _S_free_list[];
- // Specifying a size results in duplicate def for 4.1
-# else
- static _Obj* __VOLATILE _S_free_list[_NFREELISTS];
-# endif
- static size_t _S_freelist_index(size_t __bytes) {
- return (((__bytes) + _ALIGN-1)/_ALIGN - 1);
- }
-
- // Returns an object of size __n, and optionally adds to size __n free list.
- static void* _S_refill(size_t __n);
- // Allocates a chunk for nobjs of size "size". nobjs may be reduced
- // if it is inconvenient to allocate the requested number.
- static char* _S_chunk_alloc(size_t __size, int& __nobjs);
-
- // Chunk allocation state.
- static char* _S_start_free;
- static char* _S_end_free;
- static size_t _S_heap_size;
-
-# ifdef __STL_SGI_THREADS
- static volatile unsigned long _S_node_allocator_lock;
- static void _S_lock(volatile unsigned long*);
- static inline void _S_unlock(volatile unsigned long*);
-# endif
-
-# ifdef __STL_PTHREADS
- static pthread_mutex_t _S_node_allocator_lock;
-# endif
-
-# ifdef __STL_SOLTHREADS
- static mutex_t _S_node_allocator_lock;
-# endif
-
-# ifdef __STL_WIN32THREADS
- static CRITICAL_SECTION _S_node_allocator_lock;
- static bool _S_node_allocator_lock_initialized;
-
- public:
- __default_alloc_template() {
- // This assumes the first constructor is called before threads
- // are started.
- if (!_S_node_allocator_lock_initialized) {
- InitializeCriticalSection(&_S_node_allocator_lock);
- _S_node_allocator_lock_initialized = true;
- }
- }
- private:
-# endif
-
- class _Lock {
- public:
- _Lock() { __NODE_ALLOCATOR_LOCK; }
- ~_Lock() { __NODE_ALLOCATOR_UNLOCK; }
- };
- friend class _Lock;
-
-public:
-
- /* __n must be > 0 */
- static void* allocate(size_t __n)
- {
- _Obj* __VOLATILE* __my_free_list;
- _Obj* __RESTRICT __result;
-
- if (__n > (size_t) _MAX_BYTES) {
- return(malloc_alloc::allocate(__n));
- }
- __my_free_list = _S_free_list + _S_freelist_index(__n);
- // Acquire the lock here with a constructor call.
- // This ensures that it is released in exit or during stack
- // unwinding.
-# ifndef _NOTHREADS
- /*REFERENCED*/
- _Lock __lock_instance;
-# endif
- __result = *__my_free_list;
- if (__result == 0) {
- void* __r = _S_refill(_S_round_up(__n));
- return __r;
- }
- *__my_free_list = __result -> _M_free_list_link;
- return (__result);
- };
-
- /* __p may not be 0 */
- static void deallocate(void* __p, size_t __n)
- {
- _Obj* __q = (_Obj*)__p;
- _Obj* __VOLATILE* __my_free_list;
-
- if (__n > (size_t) _MAX_BYTES) {
- malloc_alloc::deallocate(__p, __n);
- return;
- }
- __my_free_list = _S_free_list + _S_freelist_index(__n);
- // acquire lock
-# ifndef _NOTHREADS
- /*REFERENCED*/
- _Lock __lock_instance;
-# endif /* _NOTHREADS */
- __q -> _M_free_list_link = *__my_free_list;
- *__my_free_list = __q;
- // lock is released here
- }
-
- static void* reallocate(void* __p, size_t __old_sz, size_t __new_sz);
-
-} ;
-
-typedef __default_alloc_template<__NODE_ALLOCATOR_THREADS, 0> alloc;
-typedef __default_alloc_template<false, 0> single_client_alloc;
-
-
-
-/* We allocate memory in large chunks in order to avoid fragmenting */
-/* the malloc heap too much. */
-/* We assume that size is properly aligned. */
-/* We hold the allocation lock. */
-template <bool __threads, int __inst>
-char*
-__default_alloc_template<__threads, __inst>::_S_chunk_alloc(size_t __size,
- int& __nobjs)
-{
- char* __result;
- size_t __total_bytes = __size * __nobjs;
- size_t __bytes_left = _S_end_free - _S_start_free;
-
- if (__bytes_left >= __total_bytes) {
- __result = _S_start_free;
- _S_start_free += __total_bytes;
- return(__result);
- } else if (__bytes_left >= __size) {
- __nobjs = (int)(__bytes_left/__size);
- __total_bytes = __size * __nobjs;
- __result = _S_start_free;
- _S_start_free += __total_bytes;
- return(__result);
- } else {
- size_t __bytes_to_get =
- 2 * __total_bytes + _S_round_up(_S_heap_size >> 4);
- // Try to make use of the left-over piece.
- if (__bytes_left > 0) {
- _Obj* __VOLATILE* __my_free_list =
- _S_free_list + _S_freelist_index(__bytes_left);
-
- ((_Obj*)_S_start_free) -> _M_free_list_link = *__my_free_list;
- *__my_free_list = (_Obj*)_S_start_free;
- }
- _S_start_free = (char*)malloc(__bytes_to_get);
- if (0 == _S_start_free) {
- size_t __i;
- _Obj* __VOLATILE* __my_free_list;
- _Obj* __p;
- // Try to make do with what we have. That can't
- // hurt. We do not try smaller requests, since that tends
- // to result in disaster on multi-process machines.
- for (__i = __size; __i <= _MAX_BYTES; __i += _ALIGN) {
- __my_free_list = _S_free_list + _S_freelist_index(__i);
- __p = *__my_free_list;
- if (0 != __p) {
- *__my_free_list = __p -> _M_free_list_link;
- _S_start_free = (char*)__p;
- _S_end_free = _S_start_free + __i;
- return(_S_chunk_alloc(__size, __nobjs));
- // Any leftover piece will eventually make it to the
- // right free list.
- }
- }
- _S_end_free = 0; // In case of exception.
- _S_start_free = (char*)malloc_alloc::allocate(__bytes_to_get);
- // This should either throw an
- // exception or remedy the situation. Thus we assume it
- // succeeded.
- }
- _S_heap_size += __bytes_to_get;
- _S_end_free = _S_start_free + __bytes_to_get;
- return(_S_chunk_alloc(__size, __nobjs));
- }
-}
-
-
-/* Returns an object of size __n, and optionally adds to size __n free list.*/
-/* We assume that __n is properly aligned. */
-/* We hold the allocation lock. */
-template <bool __threads, int __inst>
-void*
-__default_alloc_template<__threads, __inst>::_S_refill(size_t __n)
-{
- int __nobjs = 20;
- char* __chunk = _S_chunk_alloc(__n, __nobjs);
- _Obj* __VOLATILE* __my_free_list;
- _Obj* __result;
- _Obj* __current_obj;
- _Obj* __next_obj;
- int __i;
-
- if (1 == __nobjs) return(__chunk);
- __my_free_list = _S_free_list + _S_freelist_index(__n);
-
- /* Build free list in chunk */
- __result = (_Obj*)__chunk;
- *__my_free_list = __next_obj = (_Obj*)(__chunk + __n);
- for (__i = 1; ; __i++) {
- __current_obj = __next_obj;
- __next_obj = (_Obj*)((char*)__next_obj + __n);
- if (__nobjs - 1 == __i) {
- __current_obj -> _M_free_list_link = 0;
- break;
- } else {
- __current_obj -> _M_free_list_link = __next_obj;
- }
- }
- return(__result);
-}
-
-template <bool threads, int inst>
-void*
-__default_alloc_template<threads, inst>::reallocate(void* __p,
- size_t __old_sz,
- size_t __new_sz)
-{
- void* __result;
- size_t __copy_sz;
-
- if (__old_sz > (size_t) _MAX_BYTES && __new_sz > (size_t) _MAX_BYTES) {
- return(realloc(__p, __new_sz));
- }
- if (_S_round_up(__old_sz) == _S_round_up(__new_sz)) return(__p);
- __result = allocate(__new_sz);
- __copy_sz = __new_sz > __old_sz? __old_sz : __new_sz;
- memcpy(__result, __p, __copy_sz);
- deallocate(__p, __old_sz);
- return(__result);
-}
-
-#ifdef __STL_PTHREADS
- template <bool __threads, int __inst>
- pthread_mutex_t
- __default_alloc_template<__threads, __inst>::_S_node_allocator_lock
- = PTHREAD_MUTEX_INITIALIZER;
-#endif
-
-#ifdef __STL_SOLTHREADS
- template <bool __threads, int __inst>
- mutex_t
- __default_alloc_template<__threads, __inst>::_S_node_allocator_lock
- = DEFAULTMUTEX;
-#endif
-
-#ifdef __STL_WIN32THREADS
- template <bool __threads, int __inst>
- CRITICAL_SECTION
- __default_alloc_template<__threads, __inst>::
- _S_node_allocator_lock;
-
- template <bool __threads, int __inst>
- bool
- __default_alloc_template<__threads, __inst>::
- _S_node_allocator_lock_initialized
- = false;
-#endif
-
-#ifdef __STL_SGI_THREADS
-__STL_END_NAMESPACE
-#include <mutex.h>
-#include <time.h> /* XXX should use <ctime> */
-__STL_BEGIN_NAMESPACE
-// Somewhat generic lock implementations. We need only test-and-set
-// and some way to sleep. These should work with both SGI pthreads
-// and sproc threads. They may be useful on other systems.
-template <bool __threads, int __inst>
-volatile unsigned long
-__default_alloc_template<__threads, __inst>::_S_node_allocator_lock = 0;
-
-#if __mips < 3 || !(defined (_ABIN32) || defined(_ABI64)) || defined(__GNUC__)
-# define __test_and_set(l,v) test_and_set(l,v)
-#endif
-
-template <bool __threads, int __inst>
-void
-__default_alloc_template<__threads, __inst>::
- _S_lock(volatile unsigned long* __lock)
-{
- const unsigned __low_spin_max = 30; // spins if we suspect uniprocessor
- const unsigned __high_spin_max = 1000; // spins for multiprocessor
- static unsigned __spin_max = __low_spin_max;
- unsigned __my_spin_max;
- static unsigned __last_spins = 0;
- unsigned __my_last_spins;
- unsigned __junk;
-# define __ALLOC_PAUSE \
- __junk *= __junk; __junk *= __junk; __junk *= __junk; __junk *= __junk
- int __i;
-
- if (!__test_and_set((unsigned long*)__lock, 1)) {
- return;
- }
- __my_spin_max = __spin_max;
- __my_last_spins = __last_spins;
- for (__i = 0; __i < __my_spin_max; __i++) {
- if (__i < __my_last_spins/2 || *__lock) {
- __ALLOC_PAUSE;
- continue;
- }
- if (!__test_and_set((unsigned long*)__lock, 1)) {
- // got it!
- // Spinning worked. Thus we're probably not being scheduled
- // against the other process with which we were contending.
- // Thus it makes sense to spin longer the next time.
- __last_spins = __i;
- __spin_max = __high_spin_max;
- return;
- }
- }
- // We are probably being scheduled against the other process. Sleep.
- __spin_max = __low_spin_max;
- for (__i = 0 ;; ++__i) {
- struct timespec __ts;
- int __log_nsec = __i + 6;
-
- if (!__test_and_set((unsigned long *)__lock, 1)) {
- return;
- }
- if (__log_nsec > 27) __log_nsec = 27;
- /* Max sleep is 2**27nsec ~ 60msec */
- __ts.tv_sec = 0;
- __ts.tv_nsec = 1 << __log_nsec;
- nanosleep(&__ts, 0);
- }
-}
-
-template <bool __threads, int __inst>
-inline void
-__default_alloc_template<__threads, __inst>::_S_unlock(
- volatile unsigned long* __lock)
-{
-# if defined(__GNUC__) && __mips >= 3
- asm("sync");
- *__lock = 0;
-# elif __mips >= 3 && (defined (_ABIN32) || defined(_ABI64))
- __lock_release(__lock);
-# else
- *__lock = 0;
- // This is not sufficient on many multiprocessors, since
- // writes to protected variables and the lock may be reordered.
-# endif
-}
-#endif
-
-template <bool __threads, int __inst>
-char* __default_alloc_template<__threads, __inst>::_S_start_free = 0;
-
-template <bool __threads, int __inst>
-char* __default_alloc_template<__threads, __inst>::_S_end_free = 0;
-
-template <bool __threads, int __inst>
-size_t __default_alloc_template<__threads, __inst>::_S_heap_size = 0;
-
-template <bool __threads, int __inst>
-__default_alloc_template<__threads, __inst>::_Obj* __VOLATILE
-__default_alloc_template<__threads, __inst> ::_S_free_list[
- _NFREELISTS
-] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, };
-// The 16 zeros are necessary to make version 4.1 of the SunPro
-// compiler happy. Otherwise it appears to allocate too little
-// space for the array.
-
-# ifdef __STL_WIN32THREADS
- // Create one to get critical section initialized.
- // We do this onece per file, but only the first constructor
- // does anything.
- static alloc __node_allocator_dummy_instance;
-# endif
-
-#endif /* ! __USE_MALLOC */
-
-// This implements allocators as specified in the C++ standard.
-//
-// Note that standard-conforming allocators use many language features
-// that are not yet widely implemented. In particular, they rely on
-// member templates, partial specialization, partial ordering of function
-// templates, the typename keyword, and the use of the template keyword
-// to refer to a template member of a dependent type.
-
-#ifdef __STL_USE_STD_ALLOCATORS
-
-template <class _Tp>
-class allocator {
- typedef alloc _Alloc; // The underlying allocator.
-public:
- typedef size_t size_type;
- typedef ptrdiff_t difference_type;
- typedef _Tp* pointer;
- typedef const _Tp* const_pointer;
- typedef _Tp& reference;
- typedef const _Tp& const_reference;
- typedef _Tp value_type;
-
- template <class _Tp1> struct rebind {
- typedef allocator<_Tp1> other;
- };
-
- allocator() __STL_NOTHROW {}
- allocator(const allocator&) __STL_NOTHROW {}
- template <class _Tp1> allocator(const allocator<_Tp1>&) __STL_NOTHROW {}
- ~allocator() __STL_NOTHROW {}
-
- pointer address(reference __x) const { return &__x; }
- const_pointer address(const_reference __x) const { return &__x; }
-
- // __n is permitted to be 0. The C++ standard says nothing about what
- // the return value is when __n == 0.
- _Tp* allocate(size_type __n, const void* = 0) {
- return __n != 0 ? static_cast<_Tp*>(_Alloc::allocate(__n * sizeof(_Tp)))
- : 0;
- }
-
- // __p is not permitted to be a null pointer.
- void deallocate(pointer __p, size_type __n)
- { _Alloc::deallocate(__p, __n * sizeof(_Tp)); }
-
- size_type max_size() const __STL_NOTHROW
- { return size_t(-1) / sizeof(_Tp); }
-
- void construct(pointer __p, const _Tp& __val) { new(__p) _Tp(__val); }
- void destroy(pointer __p) { __p->~_Tp(); }
-};
-
-template<>
-class allocator<void> {
- typedef size_t size_type;
- typedef ptrdiff_t difference_type;
- typedef void* pointer;
- typedef const void* const_pointer;
- typedef void value_type;
-
- template <class _Tp1> struct rebind {
- typedef allocator<_Tp1> other;
- };
-};
-
-
-template <class _T1, class _T2>
-inline bool operator==(const allocator<_T1>&, const allocator<_T2>&)
-{
- return true;
-}
-
-template <class _T1, class _T2>
-inline bool operator!=(const allocator<_T1>&, const allocator<_T2>&)
-{
- return false;
-}
-
-// Allocator adaptor to turn an SGI-style allocator (e.g. alloc, malloc_alloc)
-// into a standard-conforming allocator. Note that this adaptor does
-// *not* assume that all objects of the underlying alloc class are
-// identical, nor does it assume that all of the underlying alloc's
-// member functions are static member functions. Note, also, that
-// __allocator<_Tp, alloc> is essentially the same thing as allocator<_Tp>.
-
-template <class _Tp, class _Alloc>
-struct __allocator {
- _Alloc __underlying_alloc;
-
- typedef size_t size_type;
- typedef ptrdiff_t difference_type;
- typedef _Tp* pointer;
- typedef const _Tp* const_pointer;
- typedef _Tp& reference;
- typedef const _Tp& const_reference;
- typedef _Tp value_type;
-
- template <class _Tp1> struct rebind {
- typedef __allocator<_Tp1, _Alloc> other;
- };
-
- __allocator() __STL_NOTHROW {}
- __allocator(const __allocator& __a) __STL_NOTHROW
- : __underlying_alloc(__a.__underlying_alloc) {}
- template <class _Tp1>
- __allocator(const __allocator<_Tp1, _Alloc>& __a) __STL_NOTHROW
- : __underlying_alloc(__a.__underlying_alloc) {}
- ~__allocator() __STL_NOTHROW {}
-
- pointer address(reference __x) const { return &__x; }
- const_pointer address(const_reference __x) const { return &__x; }
-
- // __n is permitted to be 0.
- _Tp* allocate(size_type __n, const void* = 0) {
- return __n != 0
- ? static_cast<_Tp*>(__underlying_alloc.allocate(__n * sizeof(_Tp)))
- : 0;
- }
-
- // __p is not permitted to be a null pointer.
- void deallocate(pointer __p, size_type __n)
- { __underlying_alloc.deallocate(__p, __n * sizeof(_Tp)); }
-
- size_type max_size() const __STL_NOTHROW
- { return size_t(-1) / sizeof(_Tp); }
-
- void construct(pointer __p, const _Tp& __val) { new(__p) _Tp(__val); }
- void destroy(pointer __p) { __p->~_Tp(); }
-};
-
-template <class _Alloc>
-class __allocator<void, _Alloc> {
- typedef size_t size_type;
- typedef ptrdiff_t difference_type;
- typedef void* pointer;
- typedef const void* const_pointer;
- typedef void value_type;
-
- template <class _Tp1> struct rebind {
- typedef __allocator<_Tp1, _Alloc> other;
- };
-};
-
-template <class _Tp, class _Alloc>
-inline bool operator==(const __allocator<_Tp, _Alloc>& __a1,
- const __allocator<_Tp, _Alloc>& __a2)
-{
- return __a1.__underlying_alloc == __a2.__underlying_alloc;
-}
-
-#ifdef __STL_FUNCTION_TMPL_PARTIAL_ORDER
-template <class _Tp, class _Alloc>
-inline bool operator!=(const __allocator<_Tp, _Alloc>& __a1,
- const __allocator<_Tp, _Alloc>& __a2)
-{
- return __a1.__underlying_alloc != __a2.__underlying_alloc;
-}
-#endif /* __STL_FUNCTION_TMPL_PARTIAL_ORDER */
-
-// Comparison operators for all of the predifined SGI-style allocators.
-// This ensures that __allocator<malloc_alloc> (for example) will
-// work correctly.
-
-template <int inst>
-inline bool operator==(const __malloc_alloc_template<inst>&,
- const __malloc_alloc_template<inst>&)
-{
- return true;
-}
-
-#ifdef __STL_FUNCTION_TMPL_PARTIAL_ORDER
-template <int __inst>
-inline bool operator!=(const __malloc_alloc_template<__inst>&,
- const __malloc_alloc_template<__inst>&)
-{
- return false;
-}
-#endif /* __STL_FUNCTION_TMPL_PARTIAL_ORDER */
-
-#ifndef __USE_MALLOC
-template <bool __threads, int __inst>
-inline bool operator==(const __default_alloc_template<__threads, __inst>&,
- const __default_alloc_template<__threads, __inst>&)
-{
- return true;
-}
-
-# ifdef __STL_FUNCTION_TMPL_PARTIAL_ORDER
-template <bool __threads, int __inst>
-inline bool operator!=(const __default_alloc_template<__threads, __inst>&,
- const __default_alloc_template<__threads, __inst>&)
-{
- return false;
-}
-# endif /* __STL_FUNCTION_TMPL_PARTIAL_ORDER */
-#endif
-
-template <class _Alloc>
-inline bool operator==(const debug_alloc<_Alloc>&,
- const debug_alloc<_Alloc>&) {
- return true;
-}
-
-#ifdef __STL_FUNCTION_TMPL_PARTIAL_ORDER
-template <class _Alloc>
-inline bool operator!=(const debug_alloc<_Alloc>&,
- const debug_alloc<_Alloc>&) {
- return false;
-}
-#endif /* __STL_FUNCTION_TMPL_PARTIAL_ORDER */
-
-// Another allocator adaptor: _Alloc_traits. This serves two
-// purposes. First, make it possible to write containers that can use
-// either SGI-style allocators or standard-conforming allocator.
-// Second, provide a mechanism so that containers can query whether or
-// not the allocator has distinct instances. If not, the container
-// can avoid wasting a word of memory to store an empty object.
-
-// This adaptor uses partial specialization. The general case of
-// _Alloc_traits<_Tp, _Alloc> assumes that _Alloc is a
-// standard-conforming allocator, possibly with non-equal instances
-// and non-static members. (It still behaves correctly even if _Alloc
-// has static member and if all instances are equal. Refinements
-// affect performance, not correctness.)
-
-// There are always two members: allocator_type, which is a standard-
-// conforming allocator type for allocating objects of type _Tp, and
-// _S_instanceless, a static const member of type bool. If
-// _S_instanceless is true, this means that there is no difference
-// between any two instances of type allocator_type. Furthermore, if
-// _S_instanceless is true, then _Alloc_traits has one additional
-// member: _Alloc_type. This type encapsulates allocation and
-// deallocation of objects of type _Tp through a static interface; it
-// has two member functions, whose signatures are
-// static _Tp* allocate(size_t)
-// static void deallocate(_Tp*, size_t)
-
-// The fully general version.
-
-template <class _Tp, class _Allocator>
-struct _Alloc_traits
-{
- static const bool _S_instanceless = false;
- typedef typename _Allocator::__STL_TEMPLATE rebind<_Tp>::other
- allocator_type;
-};
-
-template <class _Tp, class _Allocator>
-const bool _Alloc_traits<_Tp, _Allocator>::_S_instanceless;
-
-// The version for the default allocator.
-
-template <class _Tp, class _Tp1>
-struct _Alloc_traits<_Tp, allocator<_Tp1> >
-{
- static const bool _S_instanceless = true;
- typedef simple_alloc<_Tp, alloc> _Alloc_type;
- typedef allocator<_Tp> allocator_type;
-};
-
-// Versions for the predefined SGI-style allocators.
-
-template <class _Tp, int __inst>
-struct _Alloc_traits<_Tp, __malloc_alloc_template<__inst> >
-{
- static const bool _S_instanceless = true;
- typedef simple_alloc<_Tp, __malloc_alloc_template<__inst> > _Alloc_type;
- typedef __allocator<_Tp, __malloc_alloc_template<__inst> > allocator_type;
-};
-
-#ifndef __USE_MALLOC
-template <class _Tp, bool __threads, int __inst>
-struct _Alloc_traits<_Tp, __default_alloc_template<__threads, __inst> >
-{
- static const bool _S_instanceless = true;
- typedef simple_alloc<_Tp, __default_alloc_template<__threads, __inst> >
- _Alloc_type;
- typedef __allocator<_Tp, __default_alloc_template<__threads, __inst> >
- allocator_type;
-};
-#endif
-
-template <class _Tp, class _Alloc>
-struct _Alloc_traits<_Tp, debug_alloc<_Alloc> >
-{
- static const bool _S_instanceless = true;
- typedef simple_alloc<_Tp, debug_alloc<_Alloc> > _Alloc_type;
- typedef __allocator<_Tp, debug_alloc<_Alloc> > allocator_type;
-};
-
-// Versions for the __allocator adaptor used with the predefined
-// SGI-style allocators.
-
-template <class _Tp, class _Tp1, int __inst>
-struct _Alloc_traits<_Tp,
- __allocator<_Tp1, __malloc_alloc_template<__inst> > >
-{
- static const bool _S_instanceless = true;
- typedef simple_alloc<_Tp, __malloc_alloc_template<__inst> > _Alloc_type;
- typedef __allocator<_Tp, __malloc_alloc_template<__inst> > allocator_type;
-};
-
-#ifndef __USE_MALLOC
-template <class _Tp, class _Tp1, bool __thr, int __inst>
-struct _Alloc_traits<_Tp,
- __allocator<_Tp1,
- __default_alloc_template<__thr, __inst> > >
-{
- static const bool _S_instanceless = true;
- typedef simple_alloc<_Tp, __default_alloc_template<__thr,__inst> >
- _Alloc_type;
- typedef __allocator<_Tp, __default_alloc_template<__thr,__inst> >
- allocator_type;
-};
-#endif
-
-template <class _Tp, class _Tp1, class _Alloc>
-struct _Alloc_traits<_Tp, __allocator<_Tp1, debug_alloc<_Alloc> > >
-{
- static const bool _S_instanceless = true;
- typedef simple_alloc<_Tp, debug_alloc<_Alloc> > _Alloc_type;
- typedef __allocator<_Tp, debug_alloc<_Alloc> > allocator_type;
-};
-
-
-#endif /* __STL_USE_STD_ALLOCATORS */
-
-#if defined(__sgi) && !defined(__GNUC__) && (_MIPS_SIM != _MIPS_SIM_ABI32)
-#pragma reset woff 1174
-#endif
-
-__STL_END_NAMESPACE
-
-#undef __PRIVATE
-
-#endif /* __SGI_STL_INTERNAL_ALLOC_H */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/stl_bvector.h b/contrib/libstdc++/stl/stl_bvector.h
deleted file mode 100644
index 0d0cdb6c828f..000000000000
--- a/contrib/libstdc++/stl/stl_bvector.h
+++ /dev/null
@@ -1,838 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- * Copyright (c) 1996,1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-/* NOTE: This is an internal header file, included by other STL headers.
- * You should not attempt to use it directly.
- */
-
-#ifndef __SGI_STL_INTERNAL_BVECTOR_H
-#define __SGI_STL_INTERNAL_BVECTOR_H
-
-__STL_BEGIN_NAMESPACE
-
-static const int __WORD_BIT = int(CHAR_BIT*sizeof(unsigned int));
-
-#if defined(__sgi) && !defined(__GNUC__) && (_MIPS_SIM != _MIPS_SIM_ABI32)
-#pragma set woff 1174
-#pragma set woff 1375
-#endif
-
-struct _Bit_reference {
- unsigned int* _M_p;
- unsigned int _M_mask;
- _Bit_reference(unsigned int* __x, unsigned int __y)
- : _M_p(__x), _M_mask(__y) {}
-
-public:
- _Bit_reference() : _M_p(0), _M_mask(0) {}
- operator bool() const { return !(!(*_M_p & _M_mask)); }
- _Bit_reference& operator=(bool __x)
- {
- if (__x) *_M_p |= _M_mask;
- else *_M_p &= ~_M_mask;
- return *this;
- }
- _Bit_reference& operator=(const _Bit_reference& __x)
- { return *this = bool(__x); }
- bool operator==(const _Bit_reference& __x) const
- { return bool(*this) == bool(__x); }
- bool operator<(const _Bit_reference& __x) const {
- return !bool(*this) && bool(__x);
- }
- void flip() { *_M_p ^= _M_mask; }
-};
-
-inline void swap(_Bit_reference __x, _Bit_reference __y)
-{
- bool __tmp = __x;
- __x = __y;
- __y = __tmp;
-}
-
-struct _Bit_iterator : public random_access_iterator<bool, ptrdiff_t> {
- typedef _Bit_reference reference;
- typedef _Bit_reference* pointer;
- typedef _Bit_iterator iterator;
-
- unsigned int* _M_p;
- unsigned int _M_offset;
- void bump_up() {
- if (_M_offset++ == __WORD_BIT - 1) {
- _M_offset = 0;
- ++_M_p;
- }
- }
- void bump_down() {
- if (_M_offset-- == 0) {
- _M_offset = __WORD_BIT - 1;
- --_M_p;
- }
- }
-
- _Bit_iterator() : _M_p(0), _M_offset(0) {}
- _Bit_iterator(unsigned int* __x, unsigned int __y)
- : _M_p(__x), _M_offset(__y) {}
- reference operator*() const { return reference(_M_p, 1U << _M_offset); }
- iterator& operator++() {
- bump_up();
- return *this;
- }
- iterator operator++(int) {
- iterator __tmp = *this;
- bump_up();
- return __tmp;
- }
- iterator& operator--() {
- bump_down();
- return *this;
- }
- iterator operator--(int) {
- iterator __tmp = *this;
- bump_down();
- return __tmp;
- }
- iterator& operator+=(difference_type __i) {
- difference_type __n = __i + _M_offset;
- _M_p += __n / __WORD_BIT;
- __n = __n % __WORD_BIT;
- if (__n < 0) {
- _M_offset = (unsigned int) __n + __WORD_BIT;
- --_M_p;
- } else
- _M_offset = (unsigned int) __n;
- return *this;
- }
- iterator& operator-=(difference_type __i) {
- *this += -__i;
- return *this;
- }
- iterator operator+(difference_type __i) const {
- iterator __tmp = *this;
- return __tmp += __i;
- }
- iterator operator-(difference_type __i) const {
- iterator __tmp = *this;
- return __tmp -= __i;
- }
- difference_type operator-(iterator __x) const {
- return __WORD_BIT * (_M_p - __x._M_p) + _M_offset - __x._M_offset;
- }
- reference operator[](difference_type __i) { return *(*this + __i); }
- bool operator==(const iterator& __x) const {
- return _M_p == __x._M_p && _M_offset == __x._M_offset;
- }
- bool operator!=(const iterator& __x) const {
- return _M_p != __x._M_p || _M_offset != __x._M_offset;
- }
- bool operator<(iterator __x) const {
- return _M_p < __x._M_p || (_M_p == __x._M_p && _M_offset < __x._M_offset);
- }
-};
-
-struct _Bit_const_iterator
- : public random_access_iterator<bool, ptrdiff_t>
-{
- typedef bool reference;
- typedef bool const_reference;
- typedef const bool* pointer;
- typedef _Bit_const_iterator const_iterator;
-
- unsigned int* _M_p;
- unsigned int _M_offset;
- void bump_up() {
- if (_M_offset++ == __WORD_BIT - 1) {
- _M_offset = 0;
- ++_M_p;
- }
- }
- void bump_down() {
- if (_M_offset-- == 0) {
- _M_offset = __WORD_BIT - 1;
- --_M_p;
- }
- }
-
- _Bit_const_iterator() : _M_p(0), _M_offset(0) {}
- _Bit_const_iterator(unsigned int* __x, unsigned int __y)
- : _M_p(__x), _M_offset(__y) {}
- _Bit_const_iterator(const _Bit_iterator& __x)
- : _M_p(__x._M_p), _M_offset(__x._M_offset) {}
- const_reference operator*() const {
- return _Bit_reference(_M_p, 1U << _M_offset);
- }
- const_iterator& operator++() {
- bump_up();
- return *this;
- }
- const_iterator operator++(int) {
- const_iterator __tmp = *this;
- bump_up();
- return __tmp;
- }
- const_iterator& operator--() {
- bump_down();
- return *this;
- }
- const_iterator operator--(int) {
- const_iterator __tmp = *this;
- bump_down();
- return __tmp;
- }
- const_iterator& operator+=(difference_type __i) {
- difference_type __n = __i + _M_offset;
- _M_p += __n / __WORD_BIT;
- __n = __n % __WORD_BIT;
- if (__n < 0) {
- _M_offset = (unsigned int) __n + __WORD_BIT;
- --_M_p;
- } else
- _M_offset = (unsigned int) __n;
- return *this;
- }
- const_iterator& operator-=(difference_type __i) {
- *this += -__i;
- return *this;
- }
- const_iterator operator+(difference_type __i) const {
- const_iterator __tmp = *this;
- return __tmp += __i;
- }
- const_iterator operator-(difference_type __i) const {
- const_iterator __tmp = *this;
- return __tmp -= __i;
- }
- difference_type operator-(const_iterator __x) const {
- return __WORD_BIT * (_M_p - __x._M_p) + _M_offset - __x._M_offset;
- }
- const_reference operator[](difference_type __i) {
- return *(*this + __i);
- }
- bool operator==(const const_iterator& __x) const {
- return _M_p == __x._M_p && _M_offset == __x._M_offset;
- }
- bool operator!=(const const_iterator& __x) const {
- return _M_p != __x._M_p || _M_offset != __x._M_offset;
- }
- bool operator<(const_iterator __x) const {
- return _M_p < __x._M_p || (_M_p == __x._M_p && _M_offset < __x._M_offset);
- }
-};
-
-// Bit-vector base class, which encapsulates the difference between
-// old SGI-style allocators and standard-conforming allocators.
-
-#ifdef __STL_USE_STD_ALLOCATORS
-
-// Base class for ordinary allocators.
-template <class _Allocator, bool __is_static>
-class _Bvector_alloc_base {
-public:
- typedef typename _Alloc_traits<bool, _Allocator>::allocator_type
- allocator_type;
- allocator_type get_allocator() const { return _M_data_allocator; }
-
- _Bvector_alloc_base(const allocator_type& __a)
- : _M_data_allocator(__a), _M_start(), _M_finish(), _M_end_of_storage(0) {}
-
-protected:
- unsigned int* _M_bit_alloc(size_t __n)
- { return _M_data_allocator.allocate((__n + __WORD_BIT - 1)/__WORD_BIT); }
- void _M_deallocate() {
- if (_M_start._M_p)
- _M_data_allocator.deallocate(_M_start._M_p,
- _M_end_of_storage - _M_start._M_p);
- }
-
- typename _Alloc_traits<unsigned int, _Allocator>::allocator_type
- _M_data_allocator;
- _Bit_iterator _M_start;
- _Bit_iterator _M_finish;
- unsigned int* _M_end_of_storage;
-};
-
-// Specialization for instanceless allocators.
-template <class _Allocator>
-class _Bvector_alloc_base<_Allocator, true> {
-public:
- typedef typename _Alloc_traits<bool, _Allocator>::allocator_type
- allocator_type;
- allocator_type get_allocator() const { return allocator_type(); }
-
- _Bvector_alloc_base(const allocator_type&)
- : _M_start(), _M_finish(), _M_end_of_storage(0) {}
-
-protected:
- typedef typename _Alloc_traits<unsigned int, _Allocator>::_Alloc_type
- _Alloc_type;
-
- unsigned int* _M_bit_alloc(size_t __n)
- { return _Alloc_type::allocate((__n + __WORD_BIT - 1)/__WORD_BIT); }
- void _M_deallocate() {
- if (_M_start._M_p)
- _Alloc_type::deallocate(_M_start._M_p,
- _M_end_of_storage - _M_start._M_p);
- }
-
- _Bit_iterator _M_start;
- _Bit_iterator _M_finish;
- unsigned int* _M_end_of_storage;
-};
-
-template <class _Alloc>
-class _Bvector_base
- : public _Bvector_alloc_base<_Alloc,
- _Alloc_traits<bool, _Alloc>::_S_instanceless>
-{
- typedef _Bvector_alloc_base<_Alloc,
- _Alloc_traits<bool, _Alloc>::_S_instanceless>
- _Base;
-public:
- typedef typename _Base::allocator_type allocator_type;
-
- _Bvector_base(const allocator_type& __a) : _Base(__a) {}
- ~_Bvector_base() { _Base::_M_deallocate(); }
-};
-
-#else /* __STL_USE_STD_ALLOCATORS */
-
-template <class _Alloc>
-class _Bvector_base
-{
-public:
- typedef _Alloc allocator_type;
- allocator_type get_allocator() const { return allocator_type(); }
-
- _Bvector_base(const allocator_type&)
- : _M_start(), _M_finish(), _M_end_of_storage(0) {}
- ~_Bvector_base() { _M_deallocate(); }
-
-protected:
- typedef simple_alloc<unsigned int, _Alloc> _Alloc_type;
-
- unsigned int* _M_bit_alloc(size_t __n)
- { return _Alloc_type::allocate((__n + __WORD_BIT - 1)/__WORD_BIT); }
- void _M_deallocate() {
- if (_M_start._M_p)
- _Alloc_type::deallocate(_M_start._M_p,
- _M_end_of_storage - _M_start._M_p);
- }
-
- _Bit_iterator _M_start;
- _Bit_iterator _M_finish;
- unsigned int* _M_end_of_storage;
-};
-
-#endif /* __STL_USE_STD_ALLOCATORS */
-
-// The next few lines are confusing. What we're doing is declaring a
-// partial specialization of vector<T, Alloc> if we have the necessary
-// compiler support. Otherwise, we define a class bit_vector which uses
-// the default allocator.
-
-#if defined(__STL_CLASS_PARTIAL_SPECIALIZATION) && !defined(__STL_NO_BOOL)
-#define __SGI_STL_VECBOOL_TEMPLATE
-#define __BVECTOR vector
-#else
-#undef __SGI_STL_VECBOOL_TEMPLATE
-#define __BVECTOR bit_vector
-#endif
-
-# ifdef __SGI_STL_VECBOOL_TEMPLATE
- __STL_END_NAMESPACE
-# include <stl_vector.h>
- __STL_BEGIN_NAMESPACE
-template<class _Alloc> class vector<bool,_Alloc>
- : public _Bvector_base<_Alloc>
-# else /* __SGI_STL_VECBOOL_TEMPLATE */
-class bit_vector
- : public _Bvector_base<__STL_DEFAULT_ALLOCATOR(bool) >
-# endif /* __SGI_STL_VECBOOL_TEMPLATE */
-{
-# ifdef __SGI_STL_VECBOOL_TEMPLATE
- typedef _Bvector_base<_Alloc> _Base;
-# else /* __SGI_STL_VECBOOL_TEMPLATE */
- typedef _Bvector_base<__STL_DEFAULT_ALLOCATOR(bool) > _Base;
-# endif /* __SGI_STL_VECBOOL_TEMPLATE */
-public:
- typedef bool value_type;
- typedef size_t size_type;
- typedef ptrdiff_t difference_type;
- typedef _Bit_reference reference;
- typedef bool const_reference;
- typedef _Bit_reference* pointer;
- typedef const bool* const_pointer;
-
- typedef _Bit_iterator iterator;
- typedef _Bit_const_iterator const_iterator;
-
-#ifdef __STL_CLASS_PARTIAL_SPECIALIZATION
- typedef reverse_iterator<const_iterator> const_reverse_iterator;
- typedef reverse_iterator<iterator> reverse_iterator;
-#else /* __STL_CLASS_PARTIAL_SPECIALIZATION */
- typedef reverse_iterator<const_iterator, value_type, const_reference,
- difference_type> const_reverse_iterator;
- typedef reverse_iterator<iterator, value_type, reference, difference_type>
- reverse_iterator;
-#endif /* __STL_CLASS_PARTIAL_SPECIALIZATION */
-
- typedef typename _Base::allocator_type allocator_type;
- allocator_type get_allocator() const { return _Base::get_allocator(); }
-
-protected:
-#ifdef __STL_USE_NAMESPACES
- using _Base::_M_bit_alloc;
- using _Base::_M_deallocate;
- using _Base::_M_start;
- using _Base::_M_finish;
- using _Base::_M_end_of_storage;
-#endif /* __STL_USE_NAMESPACES */
-
-protected:
- void _M_initialize(size_type __n) {
- unsigned int* __q = _M_bit_alloc(__n);
- _M_end_of_storage = __q + (__n + __WORD_BIT - 1)/__WORD_BIT;
- _M_start = iterator(__q, 0);
- _M_finish = _M_start + difference_type(__n);
- }
- void _M_insert_aux(iterator __position, bool __x) {
- if (_M_finish._M_p != _M_end_of_storage) {
- copy_backward(__position, _M_finish, _M_finish + 1);
- *__position = __x;
- ++_M_finish;
- }
- else {
- size_type __len = size() ? 2 * size() : __WORD_BIT;
- unsigned int* __q = _M_bit_alloc(__len);
- iterator __i = copy(begin(), __position, iterator(__q, 0));
- *__i++ = __x;
- _M_finish = copy(__position, end(), __i);
- _M_deallocate();
- _M_end_of_storage = __q + (__len + __WORD_BIT - 1)/__WORD_BIT;
- _M_start = iterator(__q, 0);
- }
- }
-
-#ifdef __STL_MEMBER_TEMPLATES
- template <class _InputIterator>
- void _M_initialize_range(_InputIterator __first, _InputIterator __last,
- input_iterator_tag) {
- _M_start = iterator();
- _M_finish = iterator();
- _M_end_of_storage = 0;
- for ( ; __first != __last; ++__first)
- push_back(*__first);
- }
-
- template <class _ForwardIterator>
- void _M_initialize_range(_ForwardIterator __first, _ForwardIterator __last,
- forward_iterator_tag) {
- size_type __n = 0;
- distance(__first, __last, __n);
- _M_initialize(__n);
- copy(__first, __last, _M_start);
- }
-
- template <class _InputIterator>
- void _M_insert_range(iterator __pos,
- _InputIterator __first, _InputIterator __last,
- input_iterator_tag) {
- for ( ; __first != __last; ++__first) {
- __pos = insert(__pos, *__first);
- ++__pos;
- }
- }
-
- template <class _ForwardIterator>
- void _M_insert_range(iterator __position,
- _ForwardIterator __first, _ForwardIterator __last,
- forward_iterator_tag) {
- if (__first != __last) {
- size_type __n = 0;
- distance(__first, __last, __n);
- if (capacity() - size() >= __n) {
- copy_backward(__position, end(), _M_finish + difference_type(__n));
- copy(__first, __last, __position);
- _M_finish += difference_type(__n);
- }
- else {
- size_type __len = size() + max(size(), __n);
- unsigned int* __q = _M_bit_alloc(__len);
- iterator __i = copy(begin(), __position, iterator(__q, 0));
- __i = copy(__first, __last, __i);
- _M_finish = copy(__position, end(), __i);
- _M_deallocate();
- _M_end_of_storage = __q + (__len + __WORD_BIT - 1)/__WORD_BIT;
- _M_start = iterator(__q, 0);
- }
- }
- }
-
-#endif /* __STL_MEMBER_TEMPLATES */
-
-public:
- iterator begin() { return _M_start; }
- const_iterator begin() const { return _M_start; }
- iterator end() { return _M_finish; }
- const_iterator end() const { return _M_finish; }
-
- reverse_iterator rbegin() { return reverse_iterator(end()); }
- const_reverse_iterator rbegin() const {
- return const_reverse_iterator(end());
- }
- reverse_iterator rend() { return reverse_iterator(begin()); }
- const_reverse_iterator rend() const {
- return const_reverse_iterator(begin());
- }
-
- size_type size() const { return size_type(end() - begin()); }
- size_type max_size() const { return size_type(-1); }
- size_type capacity() const {
- return size_type(const_iterator(_M_end_of_storage, 0) - begin());
- }
- bool empty() const { return begin() == end(); }
- reference operator[](size_type __n) {
- return *(begin() + difference_type(__n));
- }
- const_reference operator[](size_type __n) const {
- return *(begin() + difference_type(__n));
- }
-
- explicit __BVECTOR(const allocator_type& __a = allocator_type())
- : _Base(__a) {}
-
- __BVECTOR(size_type __n, bool __value,
- const allocator_type& __a = allocator_type())
- : _Base(__a)
- {
- _M_initialize(__n);
- fill(_M_start._M_p, _M_end_of_storage, __value ? ~0 : 0);
- }
-
- explicit __BVECTOR(size_type __n)
- : _Base(allocator_type())
- {
- _M_initialize(__n);
- fill(_M_start._M_p, _M_end_of_storage, 0);
- }
-
- __BVECTOR(const __BVECTOR& __x) : _Base(__x.get_allocator()) {
- _M_initialize(__x.size());
- copy(__x.begin(), __x.end(), _M_start);
- }
-
-#ifdef __STL_MEMBER_TEMPLATES
- // Check whether it's an integral type. If so, it's not an iterator.
- template <class _InputIterator>
- __BVECTOR(_InputIterator __first, _InputIterator __last,
- const allocator_type& __a = allocator_type())
- : _Base(__a)
- {
- typedef typename _Is_integer<_InputIterator>::_Integral _Integral;
- _M_initialize_dispatch(__first, __last, _Integral());
- }
-
- template <class _Integer>
- void _M_initialize_dispatch(_Integer __n, _Integer __x, __true_type) {
- _M_initialize(__n);
- fill(_M_start._M_p, _M_end_of_storage, __x ? ~0 : 0);
- }
-
- template <class _InputIterator>
- void _M_initialize_dispatch(_InputIterator __first, _InputIterator __last,
- __false_type) {
- _M_initialize_range(__first, __last, __ITERATOR_CATEGORY(__first));
- }
-#else /* __STL_MEMBER_TEMPLATES */
- __BVECTOR(const_iterator __first, const_iterator __last,
- const allocator_type& __a = allocator_type())
- : _Base(__a)
- {
- size_type __n = 0;
- distance(__first, __last, __n);
- _M_initialize(__n);
- copy(__first, __last, _M_start);
- }
- __BVECTOR(const bool* __first, const bool* __last,
- const allocator_type& __a = allocator_type())
- : _Base(__a)
- {
- size_type __n = 0;
- distance(__first, __last, __n);
- _M_initialize(__n);
- copy(__first, __last, _M_start);
- }
-#endif /* __STL_MEMBER_TEMPLATES */
-
- ~__BVECTOR() { }
-
- __BVECTOR& operator=(const __BVECTOR& __x) {
- if (&__x == this) return *this;
- if (__x.size() > capacity()) {
- _M_deallocate();
- _M_initialize(__x.size());
- }
- copy(__x.begin(), __x.end(), begin());
- _M_finish = begin() + difference_type(__x.size());
- return *this;
- }
-
- // assign(), a generalized assignment member function. Two
- // versions: one that takes a count, and one that takes a range.
- // The range version is a member template, so we dispatch on whether
- // or not the type is an integer.
-
- void assign(size_t __n, bool __x) {
- if (__n > size()) {
- fill(_M_start._M_p, _M_end_of_storage, __x ? ~0 : 0);
- insert(end(), __n - size(), __x);
- }
- else {
- erase(begin() + __n, end());
- fill(_M_start._M_p, _M_end_of_storage, __x ? ~0 : 0);
- }
- }
-
-#ifdef __STL_MEMBER_TEMPLATES
-
- template <class _InputIterator>
- void assign(_InputIterator __first, _InputIterator __last) {
- typedef typename _Is_integer<_InputIterator>::_Integral _Integral;
- _M_assign_dispatch(__first, __last, _Integral());
- }
-
- template <class _Integer>
- void _M_assign_dispatch(_Integer __n, _Integer __val, __true_type)
- { assign((size_t) __n, (bool) __val); }
-
- template <class _InputIter>
- void _M_assign_dispatch(_InputIter __first, _InputIter __last, __false_type)
- { _M_assign_aux(__first, __last, __ITERATOR_CATEGORY(__first)); }
-
- template <class _InputIterator>
- void _M_assign_aux(_InputIterator __first, _InputIterator __last,
- input_iterator_tag) {
- iterator __cur = begin();
- for ( ; __first != __last && __cur != end(); ++__cur, ++__first)
- *__cur = *__first;
- if (__first == __last)
- erase(__cur, end());
- else
- insert(end(), __first, __last);
- }
-
- template <class _ForwardIterator>
- void _M_assign_aux(_ForwardIterator __first, _ForwardIterator __last,
- forward_iterator_tag) {
- size_type __len = 0;
- distance(__first, __last, __len);
- if (__len < size())
- erase(copy(__first, __last, begin()), end());
- else {
- _ForwardIterator __mid = __first;
- advance(__mid, size());
- copy(__first, __mid, begin());
- insert(end(), __mid, __last);
- }
- }
-
-#endif /* __STL_MEMBER_TEMPLATES */
-
- void reserve(size_type __n) {
- if (capacity() < __n) {
- unsigned int* __q = _M_bit_alloc(__n);
- _M_finish = copy(begin(), end(), iterator(__q, 0));
- _M_deallocate();
- _M_start = iterator(__q, 0);
- _M_end_of_storage = __q + (__n + __WORD_BIT - 1)/__WORD_BIT;
- }
- }
-
- reference front() { return *begin(); }
- const_reference front() const { return *begin(); }
- reference back() { return *(end() - 1); }
- const_reference back() const { return *(end() - 1); }
- void push_back(bool __x) {
- if (_M_finish._M_p != _M_end_of_storage)
- *_M_finish++ = __x;
- else
- _M_insert_aux(end(), __x);
- }
- void swap(__BVECTOR& __x) {
- __STD::swap(_M_start, __x._M_start);
- __STD::swap(_M_finish, __x._M_finish);
- __STD::swap(_M_end_of_storage, __x._M_end_of_storage);
- }
- iterator insert(iterator __position, bool __x = bool()) {
- difference_type __n = __position - begin();
- if (_M_finish._M_p != _M_end_of_storage && __position == end())
- *_M_finish++ = __x;
- else
- _M_insert_aux(__position, __x);
- return begin() + __n;
- }
-
-#ifdef __STL_MEMBER_TEMPLATES
- // Check whether it's an integral type. If so, it's not an iterator.
- template <class _InputIterator>
- void insert(iterator __position,
- _InputIterator __first, _InputIterator __last) {
- typedef typename _Is_integer<_InputIterator>::_Integral _Integral;
- _M_insert_dispatch(__position, __first, __last, _Integral());
- }
-
- template <class _Integer>
- void _M_insert_dispatch(iterator __pos, _Integer __n, _Integer __x,
- __true_type) {
- insert(__pos, (size_type) __n, (bool) __x);
- }
-
- template <class _InputIterator>
- void _M_insert_dispatch(iterator __pos,
- _InputIterator __first, _InputIterator __last,
- __false_type) {
- _M_insert_range(__pos, __first, __last, __ITERATOR_CATEGORY(__first));
- }
-#else /* __STL_MEMBER_TEMPLATES */
- void insert(iterator __position,
- const_iterator __first, const_iterator __last) {
- if (__first == __last) return;
- size_type __n = 0;
- distance(__first, __last, __n);
- if (capacity() - size() >= __n) {
- copy_backward(__position, end(), _M_finish + __n);
- copy(__first, __last, __position);
- _M_finish += __n;
- }
- else {
- size_type __len = size() + max(size(), __n);
- unsigned int* __q = _M_bit_alloc(__len);
- iterator __i = copy(begin(), __position, iterator(__q, 0));
- __i = copy(__first, __last, __i);
- _M_finish = copy(__position, end(), __i);
- _M_deallocate();
- _M_end_of_storage = __q + (__len + __WORD_BIT - 1)/__WORD_BIT;
- _M_start = iterator(__q, 0);
- }
- }
-
- void insert(iterator __position, const bool* __first, const bool* __last) {
- if (__first == __last) return;
- size_type __n = 0;
- distance(__first, __last, __n);
- if (capacity() - size() >= __n) {
- copy_backward(__position, end(), _M_finish + __n);
- copy(__first, __last, __position);
- _M_finish += __n;
- }
- else {
- size_type __len = size() + max(size(), __n);
- unsigned int* __q = _M_bit_alloc(__len);
- iterator __i = copy(begin(), __position, iterator(__q, 0));
- __i = copy(__first, __last, __i);
- _M_finish = copy(__position, end(), __i);
- _M_deallocate();
- _M_end_of_storage = __q + (__len + __WORD_BIT - 1)/__WORD_BIT;
- _M_start = iterator(__q, 0);
- }
- }
-#endif /* __STL_MEMBER_TEMPLATES */
-
- void insert(iterator __position, size_type __n, bool __x) {
- if (__n == 0) return;
- if (capacity() - size() >= __n) {
- copy_backward(__position, end(), _M_finish + difference_type(__n));
- fill(__position, __position + difference_type(__n), __x);
- _M_finish += difference_type(__n);
- }
- else {
- size_type __len = size() + max(size(), __n);
- unsigned int* __q = _M_bit_alloc(__len);
- iterator __i = copy(begin(), __position, iterator(__q, 0));
- fill_n(__i, __n, __x);
- _M_finish = copy(__position, end(), __i + difference_type(__n));
- _M_deallocate();
- _M_end_of_storage = __q + (__len + __WORD_BIT - 1)/__WORD_BIT;
- _M_start = iterator(__q, 0);
- }
- }
-
- void pop_back() { --_M_finish; }
- iterator erase(iterator __position) {
- if (__position + 1 != end())
- copy(__position + 1, end(), __position);
- --_M_finish;
- return __position;
- }
- iterator erase(iterator __first, iterator __last) {
- _M_finish = copy(__last, end(), __first);
- return __first;
- }
- void resize(size_type __new_size, bool __x = bool()) {
- if (__new_size < size())
- erase(begin() + difference_type(__new_size), end());
- else
- insert(end(), __new_size - size(), __x);
- }
- void clear() { erase(begin(), end()); }
-};
-
-#ifdef __SGI_STL_VECBOOL_TEMPLATE
-
-typedef vector<bool, alloc> bit_vector;
-
-#else /* __SGI_STL_VECBOOL_TEMPLATE */
-
-inline bool
-operator==(const bit_vector& __x, const bit_vector& __y)
-{
- return (__x.size() == __y.size() &&
- equal(__x.begin(), __x.end(), __y.begin()));
-}
-
-inline bool
-operator<(const bit_vector& __x, const bit_vector& __y)
-{
- return lexicographical_compare(__x.begin(), __x.end(),
- __y.begin(), __y.end());
-}
-
-#endif /* __SGI_STL_VECBOOL_TEMPLATE */
-
-#undef __SGI_STL_VECBOOL_TEMPLATE
-#undef __BVECTOR
-
-#if defined(__sgi) && !defined(__GNUC__) && (_MIPS_SIM != _MIPS_SIM_ABI32)
-#pragma reset woff 1174
-#pragma reset woff 1375
-#endif
-
-__STL_END_NAMESPACE
-
-#endif /* __SGI_STL_INTERNAL_BVECTOR_H */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/stl_config.h b/contrib/libstdc++/stl/stl_config.h
deleted file mode 100644
index d72f9e1c7466..000000000000
--- a/contrib/libstdc++/stl/stl_config.h
+++ /dev/null
@@ -1,356 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- * Copyright (c) 1997
- * Silicon Graphics
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-#ifndef __STL_CONFIG_H
-# define __STL_CONFIG_H
-
-// Flags:
-// * __STL_NO_BOOL: defined if the compiler doesn't have bool as a builtin
-// type.
-// * __STL_HAS_WCHAR_T: defined if the compier has wchar_t as a builtin type.
-// * __STL_NO_DRAND48: defined if the compiler doesn't have the drand48
-// function.
-// * __STL_STATIC_TEMPLATE_MEMBER_BUG: defined if the compiler can't handle
-// static members of template classes.
-// * __STL_CLASS_PARTIAL_SPECIALIZATION: defined if the compiler supports
-// partial specialization of template classes.
-// * __STL_PARTIAL_SPECIALIZATION_SYNTAX: defined if the compiler
-// supports partial specialization syntax for full specialization of
-// class templates. (Even if it doesn't actually support partial
-// specialization itself.)
-// * __STL_FUNCTION_TMPL_PARTIAL_ORDER: defined if the compiler supports
-// partial ordering of function templates. (a.k.a partial specialization
-// of function templates.)
-// * __STL_MEMBER_TEMPLATES: defined if the compiler supports template
-// member functions of classes.
-// * __STL_MEMBER_TEMPLATE_CLASSES: defined if the compiler supports
-// nested classes that are member templates of other classes.
-// * __STL_EXPLICIT_FUNCTION_TMPL_ARGS: defined if the compiler
-// supports calling a function template by providing its template
-// arguments explicitly.
-// * __STL_LIMITED_DEFAULT_TEMPLATES: defined if the compiler is unable
-// to handle default template parameters that depend on previous template
-// parameters.
-// * __STL_NON_TYPE_TMPL_PARAM_BUG: defined if the compiler has trouble with
-// function template argument deduction for non-type template parameters.
-// * __SGI_STL_NO_ARROW_OPERATOR: defined if the compiler is unable
-// to support the -> operator for iterators.
-// * __STL_USE_EXCEPTIONS: defined if the compiler (in the current compilation
-// mode) supports exceptions.
-// * __STL_USE_NAMESPACES: defined if the compiler has the necessary
-// support for namespaces.
-// * __STL_NO_EXCEPTION_HEADER: defined if the compiler does not have a
-// standard-conforming header <exception>.
-// * __STL_SGI_THREADS: defined if this is being compiled for an SGI IRIX
-// system in multithreaded mode, using native SGI threads instead of
-// pthreads.
-// * __STL_WIN32THREADS: defined if this is being compiled on a WIN32
-// compiler in multithreaded mode.
-// * __STL_LONG_LONG if the compiler has long long and unsigned long long
-// types. (They're not in the C++ standard, but they are expected to be
-// included in the forthcoming C9X standard.)
-
-
-// User-settable macros that control compilation:
-// * __STL_USE_SGI_ALLOCATORS: if defined, then the STL will use older
-// SGI-style allocators, instead of standard-conforming allocators,
-// even if the compiler supports all of the language features needed
-// for standard-conforming allocators.
-// * __STL_NO_NAMESPACES: if defined, don't put the library in namespace
-// std, even if the compiler supports namespaces.
-// * __STL_ASSERTIONS: if defined, then enable runtime checking through the
-// __stl_assert macro.
-// * _PTHREADS: if defined, use Posix threads for multithreading support.
-// * _NOTHREADS: if defined, don't use any multithreading support.
-
-
-// Other macros defined by this file:
-
-// * bool, true, and false, if __STL_NO_BOOL is defined.
-// * typename, as a null macro if it's not already a keyword.
-// * explicit, as a null macro if it's not already a keyword.
-// * namespace-related macros (__STD, __STL_BEGIN_NAMESPACE, etc.)
-// * exception-related macros (__STL_TRY, __STL_UNWIND, etc.)
-// * __stl_assert, either as a test or as a null macro, depending on
-// whether or not __STL_ASSERTIONS is defined.
-
-#ifdef _PTHREADS
-# define __STL_PTHREADS
-#endif
-#ifdef _SOLTHREADS
-# define __STL_SOLTHREADS
-#endif
-
-# if defined(__sgi) && !defined(__GNUC__)
-# if !defined(_BOOL)
-# define __STL_NO_BOOL
-# endif
-# if defined(_WCHAR_T_IS_KEYWORD)
-# define __STL_HAS_WCHAR_T
-# endif
-# if !defined(_TYPENAME_IS_KEYWORD)
-# define __STL_NEED_TYPENAME
-# endif
-# ifdef _PARTIAL_SPECIALIZATION_OF_CLASS_TEMPLATES
-# define __STL_CLASS_PARTIAL_SPECIALIZATION
-# endif
-# ifdef _MEMBER_TEMPLATES
-# define __STL_MEMBER_TEMPLATES
-# define __STL_MEMBER_TEMPLATE_CLASSES
-# endif
-# if defined(_MEMBER_TEMPLATE_KEYWORD)
-# define __STL_MEMBER_TEMPLATE_KEYWORD
-# endif
-# if (_COMPILER_VERSION >= 730) && defined(_MIPS_SIM) && _MIPS_SIM != _ABIO32
-# define __STL_MEMBER_TEMPLATE_KEYWORD
-# endif
-# if !defined(_EXPLICIT_IS_KEYWORD)
-# define __STL_NEED_EXPLICIT
-# endif
-# ifdef __EXCEPTIONS
-# define __STL_USE_EXCEPTIONS
-# endif
-# if (_COMPILER_VERSION >= 721) && defined(_NAMESPACES)
-# define __STL_HAS_NAMESPACES
-# endif
-# if (_COMPILER_VERSION < 721)
-# define __STL_NO_EXCEPTION_HEADER
-# endif
-# if !defined(_NOTHREADS) && !defined(__STL_PTHREADS)
-# define __STL_SGI_THREADS
-# endif
-# if defined(_LONGLONG) && defined(_SGIAPI) && _SGIAPI
-# define __STL_LONG_LONG
-# endif
-# endif
-
-# ifdef __GNUC__
-# include <_G_config.h>
-# define __STL_HAS_WCHAR_T
-# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8)
-# define __STL_STATIC_TEMPLATE_MEMBER_BUG
-# define __STL_NEED_TYPENAME
-# define __STL_NEED_EXPLICIT
-# else
-# define __STL_CLASS_PARTIAL_SPECIALIZATION
-# define __STL_FUNCTION_TMPL_PARTIAL_ORDER
-# define __STL_MEMBER_TEMPLATES
-# define __STL_MEMBER_TEMPLATE_CLASSES
-# define __STL_EXPLICIT_FUNCTION_TMPL_ARGS
-# define __STL_HAS_NAMESPACES
-# define __STL_NO_NAMESPACES
-# define __SGI_STL_USE_AUTO_PTR_CONVERSIONS
-# define __STL_USE_NAMESPACES
-# endif
-# if defined(__linux__)
- /* glibc pre 2.0 is very buggy. We have to disable thread for it.
- It should be upgraded to glibc 2.0 or later. */
-# if !defined(_NOTHREADS) && __GLIBC__ >= 2 && defined(_G_USING_THUNKS)
-# define __STL_PTHREADS
-# ifdef __STRICT_ANSI__
- /* Work around a bug in the glibc 2.0.x pthread.h. */
-# define sigset_t __sigset_t
-# endif
-# endif
-# endif
-# ifdef __EXCEPTIONS
-# define __STL_USE_EXCEPTIONS
-# endif
-# ifndef __STRICT_ANSI__
-# define __STL_LONG_LONG
-# endif
-# endif
-
-# if defined(__SUNPRO_CC)
-# define __STL_NO_BOOL
-# define __STL_NEED_TYPENAME
-# define __STL_NEED_EXPLICIT
-# define __STL_USE_EXCEPTIONS
-# endif
-
-# if defined(__COMO__)
-# define __STL_MEMBER_TEMPLATES
-# define __STL_MEMBER_TEMPLATE_CLASSES
-# define __STL_CLASS_PARTIAL_SPECIALIZATION
-# define __STL_USE_EXCEPTIONS
-# define __STL_HAS_NAMESPACES
-# endif
-
-# if defined(__MINGW32__)
-# define __STL_NO_DRAND48
-# endif
-
-# if defined(__CYGWIN__)
-# define __STL_NO_DRAND48
-# endif
-
-# if defined(_MSC_VER)
-# define __STL_NO_DRAND48
-# define __STL_NEED_TYPENAME
-# if _MSC_VER < 1100 /* 1000 is version 4.0, 1100 is 5.0, 1200 is 6.0. */
-# define __STL_NEED_EXPLICIT
-# define __STL_NO_BOOL
-# if _MSC_VER > 1000
-# include <yvals.h>
-# define __STL_DONT_USE_BOOL_TYPEDEF
-# endif
-# endif
-# define __STL_NON_TYPE_TMPL_PARAM_BUG
-# define __SGI_STL_NO_ARROW_OPERATOR
-# ifdef _CPPUNWIND
-# define __STL_USE_EXCEPTIONS
-# endif
-# ifdef _MT
-# define __STL_WIN32THREADS
-# endif
-# if _MSC_VER >= 1200
-# define __STL_PARTIAL_SPECIALIZATION_SYNTAX
-# define __STL_HAS_NAMESPACES
-# define __STL_NO_NAMESPACES
-# endif
-# endif
-
-# if defined(__BORLANDC__)
-# define __STL_NO_DRAND48
-# define __STL_NEED_TYPENAME
-# define __STL_LIMITED_DEFAULT_TEMPLATES
-# define __SGI_STL_NO_ARROW_OPERATOR
-# define __STL_NON_TYPE_TMPL_PARAM_BUG
-# ifdef _CPPUNWIND
-# define __STL_USE_EXCEPTIONS
-# endif
-# ifdef __MT__
-# define __STL_WIN32THREADS
-# endif
-# endif
-
-# if defined(__STL_NO_BOOL) && !defined(__STL_DONT_USE_BOOL_TYPEDEF)
- typedef int bool;
-# define true 1
-# define false 0
-# endif
-
-# ifdef __STL_NEED_TYPENAME
-# define typename
-# endif
-
-# ifdef __STL_MEMBER_TEMPLATE_KEYWORD
-# define __STL_TEMPLATE template
-# else
-# define __STL_TEMPLATE
-# endif
-
-# ifdef __STL_NEED_EXPLICIT
-# define explicit
-# endif
-
-# ifdef __STL_EXPLICIT_FUNCTION_TMPL_ARGS
-# define __STL_NULL_TMPL_ARGS <>
-# else
-# define __STL_NULL_TMPL_ARGS
-# endif
-
-# if defined(__STL_CLASS_PARTIAL_SPECIALIZATION) \
- || defined (__STL_PARTIAL_SPECIALIZATION_SYNTAX)
-# define __STL_TEMPLATE_NULL template<>
-# else
-# define __STL_TEMPLATE_NULL
-# endif
-
-// Use standard-conforming allocators if we have the necessary language
-// features. __STL_USE_SGI_ALLOCATORS is a hook so that users can
-// disable new-style allocators, and continue to use the same kind of
-// allocators as before, without having to edit library headers.
-# if defined(__STL_CLASS_PARTIAL_SPECIALIZATION) && \
- defined(__STL_MEMBER_TEMPLATES) && \
- defined(__STL_MEMBER_TEMPLATE_CLASSES) && \
- !defined(__STL_NO_BOOL) && \
- !defined(__STL_NON_TYPE_TMPL_PARAM_BUG) && \
- !defined(__STL_LIMITED_DEFAULT_TEMPLATES) && \
- !defined(__STL_USE_SGI_ALLOCATORS)
-# define __STL_USE_STD_ALLOCATORS
-# endif
-
-# ifndef __STL_DEFAULT_ALLOCATOR
-# ifdef __STL_USE_STD_ALLOCATORS
-# define __STL_DEFAULT_ALLOCATOR(T) allocator<T>
-# else
-# define __STL_DEFAULT_ALLOCATOR(T) alloc
-# endif
-# endif
-
-// __STL_NO_NAMESPACES is a hook so that users can disable namespaces
-// without having to edit library headers.
-# if defined(__STL_HAS_NAMESPACES) && !defined(__STL_NO_NAMESPACES)
-# define __STD std
-# define __STL_BEGIN_NAMESPACE namespace std {
-# define __STL_END_NAMESPACE }
-# define __STL_USE_NAMESPACE_FOR_RELOPS
-# define __STL_BEGIN_RELOPS_NAMESPACE namespace std {
-# define __STL_END_RELOPS_NAMESPACE }
-# define __STD_RELOPS std
-# define __STL_USE_NAMESPACES
-# else
-# define __STD
-# define __STL_BEGIN_NAMESPACE
-# define __STL_END_NAMESPACE
-# undef __STL_USE_NAMESPACE_FOR_RELOPS
-# define __STL_BEGIN_RELOPS_NAMESPACE
-# define __STL_END_RELOPS_NAMESPACE
-# define __STD_RELOPS
-# undef __STL_USE_NAMESPACES
-# endif
-
-# ifdef __STL_USE_EXCEPTIONS
-# define __STL_TRY try
-# define __STL_CATCH_ALL catch(...)
-# define __STL_THROW(x) throw x
-# define __STL_RETHROW throw
-# define __STL_NOTHROW throw()
-# define __STL_UNWIND(action) catch(...) { action; throw; }
-# else
-# define __STL_TRY
-# define __STL_CATCH_ALL if (false)
-# define __STL_THROW(x)
-# define __STL_RETHROW
-# define __STL_NOTHROW
-# define __STL_UNWIND(action)
-# endif
-
-#ifdef __STL_ASSERTIONS
-# include <stdio.h>
-# define __stl_assert(expr) \
- if (!(expr)) { fprintf(stderr, "%s:%d STL assertion failure: %s\n", \
- __FILE__, __LINE__, # expr); abort(); }
-#else
-# define __stl_assert(expr)
-#endif
-
-#endif /* __STL_CONFIG_H */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/stl_construct.h b/contrib/libstdc++/stl/stl_construct.h
deleted file mode 100644
index 761784d57da0..000000000000
--- a/contrib/libstdc++/stl/stl_construct.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- * Copyright (c) 1996,1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-/* NOTE: This is an internal header file, included by other STL headers.
- * You should not attempt to use it directly.
- */
-
-#ifndef __SGI_STL_INTERNAL_CONSTRUCT_H
-#define __SGI_STL_INTERNAL_CONSTRUCT_H
-
-#include <new.h>
-
-__STL_BEGIN_NAMESPACE
-
-// construct and destroy. These functions are not part of the C++ standard,
-// and are provided for backward compatibility with the HP STL.
-
-template <class _Tp>
-inline void destroy(_Tp* __pointer) {
- __pointer->~_Tp();
-}
-
-template <class _T1, class _T2>
-inline void construct(_T1* __p, const _T2& __value) {
- new (__p) _T1(__value);
-}
-
-template <class _T1>
-inline void construct(_T1* __p) {
- new (__p) _T1();
-}
-
-template <class _ForwardIterator>
-inline void
-__destroy_aux(_ForwardIterator __first, _ForwardIterator __last, __false_type)
-{
- for ( ; __first != __last; ++__first)
- destroy(&*__first);
-}
-
-template <class _ForwardIterator>
-inline void __destroy_aux(_ForwardIterator, _ForwardIterator, __true_type) {}
-
-template <class _ForwardIterator, class _Tp>
-inline void
-__destroy(_ForwardIterator __first, _ForwardIterator __last, _Tp*)
-{
- typedef typename __type_traits<_Tp>::has_trivial_destructor
- _Trivial_destructor;
- __destroy_aux(__first, __last, _Trivial_destructor());
-}
-
-template <class _ForwardIterator>
-inline void destroy(_ForwardIterator __first, _ForwardIterator __last) {
- __destroy(__first, __last, __VALUE_TYPE(__first));
-}
-
-inline void destroy(char*, char*) {}
-inline void destroy(wchar_t*, wchar_t*) {}
-
-__STL_END_NAMESPACE
-
-#endif /* __SGI_STL_INTERNAL_CONSTRUCT_H */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/stl_deque.h b/contrib/libstdc++/stl/stl_deque.h
deleted file mode 100644
index 24a8bfb1bc8f..000000000000
--- a/contrib/libstdc++/stl/stl_deque.h
+++ /dev/null
@@ -1,1698 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- * Copyright (c) 1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-/* NOTE: This is an internal header file, included by other STL headers.
- * You should not attempt to use it directly.
- */
-
-#ifndef __SGI_STL_INTERNAL_DEQUE_H
-#define __SGI_STL_INTERNAL_DEQUE_H
-
-/* Class invariants:
- * For any nonsingular iterator i:
- * i.node is the address of an element in the map array. The
- * contents of i.node is a pointer to the beginning of a node.
- * i.first == *(i.node)
- * i.last == i.first + node_size
- * i.cur is a pointer in the range [i.first, i.last). NOTE:
- * the implication of this is that i.cur is always a dereferenceable
- * pointer, even if i is a past-the-end iterator.
- * Start and Finish are always nonsingular iterators. NOTE: this means
- * that an empty deque must have one node, and that a deque
- * with N elements, where N is the buffer size, must have two nodes.
- * For every node other than start.node and finish.node, every element
- * in the node is an initialized object. If start.node == finish.node,
- * then [start.cur, finish.cur) are initialized objects, and
- * the elements outside that range are uninitialized storage. Otherwise,
- * [start.cur, start.last) and [finish.first, finish.cur) are initialized
- * objects, and [start.first, start.cur) and [finish.cur, finish.last)
- * are uninitialized storage.
- * [map, map + map_size) is a valid, non-empty range.
- * [start.node, finish.node] is a valid range contained within
- * [map, map + map_size).
- * A pointer in the range [map, map + map_size) points to an allocated node
- * if and only if the pointer is in the range [start.node, finish.node].
- */
-
-
-/*
- * In previous versions of deque, node_size was fixed by the
- * implementation. In this version, however, users can select
- * the node size. Deque has three template parameters; the third,
- * a number of type size_t, is the number of elements per node.
- * If the third template parameter is 0 (which is the default),
- * then deque will use a default node size.
- *
- * The only reason for using an alternate node size is if your application
- * requires a different performance tradeoff than the default. If,
- * for example, your program contains many deques each of which contains
- * only a few elements, then you might want to save memory (possibly
- * by sacrificing some speed) by using smaller nodes.
- *
- * Unfortunately, some compilers have trouble with non-type template
- * parameters; stl_config.h defines __STL_NON_TYPE_TMPL_PARAM_BUG if
- * that is the case. If your compiler is one of them, then you will
- * not be able to use alternate node sizes; you will have to use the
- * default value.
- */
-
-__STL_BEGIN_NAMESPACE
-
-#if defined(__sgi) && !defined(__GNUC__) && (_MIPS_SIM != _MIPS_SIM_ABI32)
-#pragma set woff 1174
-#pragma set woff 1375
-#endif
-
-// Note: this function is simply a kludge to work around several compilers'
-// bugs in handling constant expressions.
-inline size_t
-__deque_buf_size(size_t __n, size_t __size)
-{
- return __n != 0 ? __n : (__size < 512 ? size_t(512 / __size) : size_t(1));
-}
-
-#ifndef __STL_NON_TYPE_TMPL_PARAM_BUG
-template <class _Tp, class _Ref, class _Ptr, size_t __bufsiz>
-struct _Deque_iterator {
- typedef _Deque_iterator<_Tp,_Tp&,_Tp*,__bufsiz> iterator;
- typedef _Deque_iterator<_Tp,const _Tp&,const _Tp*,__bufsiz> const_iterator;
- static size_t
- _S_buffer_size() { return __deque_buf_size(__bufsiz, sizeof(_Tp)); }
-#else /* __STL_NON_TYPE_TMPL_PARAM_BUG */
-template <class _Tp, class _Ref, class _Ptr>
-struct _Deque_iterator {
- typedef _Deque_iterator<_Tp, _Tp&, _Tp*> iterator;
- typedef _Deque_iterator<_Tp, const _Tp&, const _Tp*> const_iterator;
- static size_t
- _S_buffer_size() { return __deque_buf_size(0, sizeof(_Tp)); }
-#endif
-
- typedef random_access_iterator_tag iterator_category;
- typedef _Tp value_type;
- typedef _Ptr pointer;
- typedef _Ref reference;
- typedef size_t size_type;
- typedef ptrdiff_t difference_type;
- typedef _Tp** _Map_pointer;
-
- typedef _Deque_iterator _Self;
-
- _Tp* _M_cur;
- _Tp* _M_first;
- _Tp* _M_last;
- _Map_pointer _M_node;
-
- _Deque_iterator(_Tp* __x, _Map_pointer __y)
- : _M_cur(__x), _M_first(*__y),
- _M_last(*__y + _S_buffer_size()), _M_node(__y) {}
- _Deque_iterator() : _M_cur(0), _M_first(0), _M_last(0), _M_node(0) {}
- _Deque_iterator(const iterator& __x)
- : _M_cur(__x._M_cur), _M_first(__x._M_first),
- _M_last(__x._M_last), _M_node(__x._M_node) {}
-
- reference operator*() const { return *_M_cur; }
-#ifndef __SGI_STL_NO_ARROW_OPERATOR
- pointer operator->() const { return _M_cur; }
-#endif /* __SGI_STL_NO_ARROW_OPERATOR */
-
- difference_type operator-(const _Self& __x) const {
- return difference_type(_S_buffer_size()) * (_M_node - __x._M_node - 1) +
- (_M_cur - _M_first) + (__x._M_last - __x._M_cur);
- }
-
- _Self& operator++() {
- ++_M_cur;
- if (_M_cur == _M_last) {
- _M_set_node(_M_node + 1);
- _M_cur = _M_first;
- }
- return *this;
- }
- _Self operator++(int) {
- _Self __tmp = *this;
- ++*this;
- return __tmp;
- }
-
- _Self& operator--() {
- if (_M_cur == _M_first) {
- _M_set_node(_M_node - 1);
- _M_cur = _M_last;
- }
- --_M_cur;
- return *this;
- }
- _Self operator--(int) {
- _Self __tmp = *this;
- --*this;
- return __tmp;
- }
-
- _Self& operator+=(difference_type __n)
- {
- difference_type __offset = __n + (_M_cur - _M_first);
- if (__offset >= 0 && __offset < difference_type(_S_buffer_size()))
- _M_cur += __n;
- else {
- difference_type __node_offset =
- __offset > 0 ? __offset / difference_type(_S_buffer_size())
- : -difference_type((-__offset - 1) / _S_buffer_size()) - 1;
- _M_set_node(_M_node + __node_offset);
- _M_cur = _M_first +
- (__offset - __node_offset * difference_type(_S_buffer_size()));
- }
- return *this;
- }
-
- _Self operator+(difference_type __n) const
- {
- _Self __tmp = *this;
- return __tmp += __n;
- }
-
- _Self& operator-=(difference_type __n) { return *this += -__n; }
-
- _Self operator-(difference_type __n) const {
- _Self __tmp = *this;
- return __tmp -= __n;
- }
-
- reference operator[](difference_type __n) const { return *(*this + __n); }
-
- bool operator==(const _Self& __x) const { return _M_cur == __x._M_cur; }
- bool operator!=(const _Self& __x) const { return !(*this == __x); }
- bool operator<(const _Self& __x) const {
- return (_M_node == __x._M_node) ?
- (_M_cur < __x._M_cur) : (_M_node < __x._M_node);
- }
-
- void _M_set_node(_Map_pointer __new_node) {
- _M_node = __new_node;
- _M_first = *__new_node;
- _M_last = _M_first + difference_type(_S_buffer_size());
- }
-};
-
-#ifndef __STL_CLASS_PARTIAL_SPECIALIZATION
-
-#ifndef __STL_NON_TYPE_TMPL_PARAM_BUG
-
-template <class _Tp, class _Ref, class _Ptr, size_t __bufsiz>
-inline random_access_iterator_tag
-iterator_category(const _Deque_iterator<_Tp,_Ref,_Ptr,__bufsiz>&) {
- return random_access_iterator_tag();
-}
-
-template <class _Tp, class _Ref, class _Ptr, size_t __bufsiz>
-inline _Tp*
-value_type(const _Deque_iterator<_Tp,_Ref,_Ptr,__bufsiz>&) {
- return 0;
-}
-
-template <class _Tp, class _Ref, class _Ptr, size_t __bufsiz>
-inline ptrdiff_t*
-distance_type(const _Deque_iterator<_Tp,_Ref,_Ptr,__bufsiz>&) {
- return 0;
-}
-
-#else /* __STL_NON_TYPE_TMPL_PARAM_BUG */
-
-template <class _Tp, class _Ref, class _Ptr>
-inline random_access_iterator_tag
-iterator_category(const _Deque_iterator<_Tp,_Ref,_Ptr>&)
-{
- return random_access_iterator_tag();
-}
-
-template <class _Tp, class _Ref, class _Ptr>
-inline _Tp*
-value_type(const _Deque_iterator<_Tp,_Ref,_Ptr>&) { return 0; }
-
-template <class _Tp, class _Ref, class _Ptr>
-inline ptrdiff_t*
-distance_type(const _Deque_iterator<_Tp,_Ref,_Ptr>&) {
- return 0;
-}
-
-#endif /* __STL_NON_TYPE_TMPL_PARAM_BUG */
-
-#endif /* __STL_CLASS_PARTIAL_SPECIALIZATION */
-
-// Deque base class. It has two purposes. First, its constructor
-// and destructor allocate (but don't initialize) storage. This makes
-// exception safety easier. Second, the base class encapsulates all of
-// the differences between SGI-style allocators and standard-conforming
-// allocators.
-
-#ifdef __STL_USE_STD_ALLOCATORS
-
-// Base class for ordinary allocators.
-template <class _Tp, class _Alloc, size_t __bufsiz, bool __is_static>
-class _Deque_alloc_base {
-public:
- typedef typename _Alloc_traits<_Tp,_Alloc>::allocator_type allocator_type;
- allocator_type get_allocator() const { return node_allocator; }
-
- _Deque_alloc_base(const allocator_type& __a)
- : node_allocator(__a), map_allocator(__a), _M_map(0), _M_map_size(0)
- {}
-
-protected:
- typedef typename _Alloc_traits<_Tp*, _Alloc>::allocator_type
- map_allocator_type;
-
- allocator_type node_allocator;
- map_allocator_type map_allocator;
-
- _Tp* _M_allocate_node() {
- return node_allocator.allocate(__deque_buf_size(__bufsiz,sizeof(_Tp)));
- }
- void _M_deallocate_node(_Tp* __p) {
- node_allocator.deallocate(__p, __deque_buf_size(__bufsiz,sizeof(_Tp)));
- }
- _Tp** _M_allocate_map(size_t __n)
- { return map_allocator.allocate(__n); }
- void _M_deallocate_map(_Tp** __p, size_t __n)
- { map_allocator.deallocate(__p, __n); }
-
- _Tp** _M_map;
- size_t _M_map_size;
-};
-
-// Specialization for instanceless allocators.
-template <class _Tp, class _Alloc, size_t __bufsiz>
-class _Deque_alloc_base<_Tp, _Alloc, __bufsiz, true>
-{
-public:
- typedef typename _Alloc_traits<_Tp,_Alloc>::allocator_type allocator_type;
- allocator_type get_allocator() const { return allocator_type(); }
-
- _Deque_alloc_base(const allocator_type&) : _M_map(0), _M_map_size(0) {}
-
-protected:
- typedef typename _Alloc_traits<_Tp, _Alloc>::_Alloc_type _Node_alloc_type;
- typedef typename _Alloc_traits<_Tp*, _Alloc>::_Alloc_type _Map_alloc_type;
-
- _Tp* _M_allocate_node()
- { return _Node_alloc_type::allocate(__deque_buf_size(__bufsiz,
- sizeof(_Tp))); }
- void _M_deallocate_node(_Tp* __p)
- { _Node_alloc_type::deallocate(__p, __deque_buf_size(__bufsiz,
- sizeof(_Tp))); }
- _Tp** _M_allocate_map(size_t __n)
- { return _Map_alloc_type::allocate(__n); }
- void _M_deallocate_map(_Tp** __p, size_t __n)
- { _Map_alloc_type::deallocate(__p, __n); }
-
- _Tp** _M_map;
- size_t _M_map_size;
-};
-
-template <class _Tp, class _Alloc, size_t __bufsiz>
-class _Deque_base
- : public _Deque_alloc_base<_Tp,_Alloc,__bufsiz,
- _Alloc_traits<_Tp, _Alloc>::_S_instanceless>
-{
-public:
- typedef _Deque_alloc_base<_Tp,_Alloc,__bufsiz,
- _Alloc_traits<_Tp, _Alloc>::_S_instanceless>
- _Base;
- typedef typename _Base::allocator_type allocator_type;
- typedef _Deque_iterator<_Tp,_Tp&,_Tp*,__bufsiz> iterator;
- typedef _Deque_iterator<_Tp,const _Tp&,const _Tp*, __bufsiz> const_iterator;
-
- _Deque_base(const allocator_type& __a, size_t __num_elements)
- : _Base(__a), _M_start(), _M_finish()
- { _M_initialize_map(__num_elements); }
- _Deque_base(const allocator_type& __a)
- : _Base(__a), _M_start(), _M_finish() {}
- ~_Deque_base();
-
-protected:
- void _M_initialize_map(size_t);
- void _M_create_nodes(_Tp** __nstart, _Tp** __nfinish);
- void _M_destroy_nodes(_Tp** __nstart, _Tp** __nfinish);
- enum { _S_initial_map_size = 8 };
-
-protected:
- iterator _M_start;
- iterator _M_finish;
-};
-
-#else /* __STL_USE_STD_ALLOCATORS */
-
-template <class _Tp, class _Alloc, size_t __bufsiz>
-class _Deque_base {
-public:
-#ifndef __STL_NON_TYPE_TMPL_PARAM_BUG
- typedef _Deque_iterator<_Tp,_Tp&,_Tp*,__bufsiz> iterator;
- typedef _Deque_iterator<_Tp,const _Tp&,const _Tp*, __bufsiz> const_iterator;
-#else /* __STL_NON_TYPE_TMPL_PARAM_BUG */
- typedef _Deque_iterator<_Tp,_Tp&,_Tp*> iterator;
- typedef _Deque_iterator<_Tp,const _Tp&,const _Tp*> const_iterator;
-#endif /* __STL_NON_TYPE_TMPL_PARAM_BUG */
-
- typedef _Alloc allocator_type;
- allocator_type get_allocator() const { return allocator_type(); }
-
- _Deque_base(const allocator_type&, size_t __num_elements)
- : _M_map(0), _M_map_size(0), _M_start(), _M_finish() {
- _M_initialize_map(__num_elements);
- }
- _Deque_base(const allocator_type&)
- : _M_map(0), _M_map_size(0), _M_start(), _M_finish() {}
- ~_Deque_base();
-
-protected:
- void _M_initialize_map(size_t);
- void _M_create_nodes(_Tp** __nstart, _Tp** __nfinish);
- void _M_destroy_nodes(_Tp** __nstart, _Tp** __nfinish);
- enum { _S_initial_map_size = 8 };
-
-protected:
- _Tp** _M_map;
- size_t _M_map_size;
- iterator _M_start;
- iterator _M_finish;
-
- typedef simple_alloc<_Tp, _Alloc> _Node_alloc_type;
- typedef simple_alloc<_Tp*, _Alloc> _Map_alloc_type;
-
- _Tp* _M_allocate_node()
- { return _Node_alloc_type::allocate(__deque_buf_size(__bufsiz,
- sizeof(_Tp))); }
- void _M_deallocate_node(_Tp* __p)
- { _Node_alloc_type::deallocate(__p, __deque_buf_size(__bufsiz,
- sizeof(_Tp))); }
- _Tp** _M_allocate_map(size_t __n)
- { return _Map_alloc_type::allocate(__n); }
- void _M_deallocate_map(_Tp** __p, size_t __n)
- { _Map_alloc_type::deallocate(__p, __n); }
-};
-
-#endif /* __STL_USE_STD_ALLOCATORS */
-
-// Non-inline member functions from _Deque_base.
-
-template <class _Tp, class _Alloc, size_t __bufsiz>
-_Deque_base<_Tp,_Alloc,__bufsiz>::~_Deque_base() {
- if (_M_map) {
- _M_destroy_nodes(_M_start._M_node, _M_finish._M_node + 1);
- _M_deallocate_map(_M_map, _M_map_size);
- }
-}
-
-template <class _Tp, class _Alloc, size_t __bufsiz>
-void
-_Deque_base<_Tp,_Alloc,__bufsiz>::_M_initialize_map(size_t __num_elements)
-{
- size_t __num_nodes =
- __num_elements / __deque_buf_size(__bufsiz, sizeof(_Tp)) + 1;
-
- _M_map_size = max((size_t) _S_initial_map_size, __num_nodes + 2);
- _M_map = _M_allocate_map(_M_map_size);
-
- _Tp** __nstart = _M_map + (_M_map_size - __num_nodes) / 2;
- _Tp** __nfinish = __nstart + __num_nodes;
-
- __STL_TRY {
- _M_create_nodes(__nstart, __nfinish);
- }
- __STL_UNWIND((_M_deallocate_map(_M_map, _M_map_size),
- _M_map = 0, _M_map_size = 0));
- _M_start._M_set_node(__nstart);
- _M_finish._M_set_node(__nfinish - 1);
- _M_start._M_cur = _M_start._M_first;
- _M_finish._M_cur = _M_finish._M_first +
- __num_elements % __deque_buf_size(__bufsiz, sizeof(_Tp));
-}
-
-template <class _Tp, class _Alloc, size_t __bufsiz>
-void
-_Deque_base<_Tp,_Alloc,__bufsiz>::_M_create_nodes(_Tp** __nstart,
- _Tp** __nfinish)
-{
- _Tp** __cur;
- __STL_TRY {
- for (__cur = __nstart; __cur < __nfinish; ++__cur)
- *__cur = _M_allocate_node();
- }
- __STL_UNWIND(_M_destroy_nodes(__nstart, __cur));
-}
-
-template <class _Tp, class _Alloc, size_t __bufsiz>
-void
-_Deque_base<_Tp,_Alloc,__bufsiz>::_M_destroy_nodes(_Tp** __nstart,
- _Tp** __nfinish)
-{
- for (_Tp** __n = __nstart; __n < __nfinish; ++__n)
- _M_deallocate_node(*__n);
-}
-
-// See __deque_buf_size(). The only reason that the default value is 0
-// is as a workaround for bugs in the way that some compilers handle
-// constant expressions.
-template <class _Tp, class _Alloc = __STL_DEFAULT_ALLOCATOR(_Tp),
- size_t __bufsiz = 0>
-class deque : protected _Deque_base<_Tp, _Alloc, __bufsiz> {
- typedef _Deque_base<_Tp, _Alloc, __bufsiz> _Base;
-public: // Basic types
- typedef _Tp value_type;
- typedef value_type* pointer;
- typedef const value_type* const_pointer;
- typedef value_type& reference;
- typedef const value_type& const_reference;
- typedef size_t size_type;
- typedef ptrdiff_t difference_type;
-
- typedef typename _Base::allocator_type allocator_type;
- allocator_type get_allocator() const { return _Base::get_allocator(); }
-
-public: // Iterators
- typedef typename _Base::iterator iterator;
- typedef typename _Base::const_iterator const_iterator;
-
-#ifdef __STL_CLASS_PARTIAL_SPECIALIZATION
- typedef reverse_iterator<const_iterator> const_reverse_iterator;
- typedef reverse_iterator<iterator> reverse_iterator;
-#else /* __STL_CLASS_PARTIAL_SPECIALIZATION */
- typedef reverse_iterator<const_iterator, value_type, const_reference,
- difference_type>
- const_reverse_iterator;
- typedef reverse_iterator<iterator, value_type, reference, difference_type>
- reverse_iterator;
-#endif /* __STL_CLASS_PARTIAL_SPECIALIZATION */
-
-protected: // Internal typedefs
- typedef pointer* _Map_pointer;
- static size_t _S_buffer_size()
- { return __deque_buf_size(__bufsiz, sizeof(_Tp)); }
-
-protected:
-#ifdef __STL_USE_NAMESPACES
- using _Base::_M_initialize_map;
- using _Base::_M_create_nodes;
- using _Base::_M_destroy_nodes;
- using _Base::_M_allocate_node;
- using _Base::_M_deallocate_node;
- using _Base::_M_allocate_map;
- using _Base::_M_deallocate_map;
-
- using _Base::_M_map;
- using _Base::_M_map_size;
- using _Base::_M_start;
- using _Base::_M_finish;
-#endif /* __STL_USE_NAMESPACES */
-
-public: // Basic accessors
- iterator begin() { return _M_start; }
- iterator end() { return _M_finish; }
- const_iterator begin() const { return _M_start; }
- const_iterator end() const { return _M_finish; }
-
- reverse_iterator rbegin() { return reverse_iterator(_M_finish); }
- reverse_iterator rend() { return reverse_iterator(_M_start); }
- const_reverse_iterator rbegin() const
- { return const_reverse_iterator(_M_finish); }
- const_reverse_iterator rend() const
- { return const_reverse_iterator(_M_start); }
-
- reference operator[](size_type __n)
- { return _M_start[difference_type(__n)]; }
- const_reference operator[](size_type __n) const
- { return _M_start[difference_type(__n)]; }
-
- reference front() { return *_M_start; }
- reference back() {
- iterator __tmp = _M_finish;
- --__tmp;
- return *__tmp;
- }
- const_reference front() const { return *_M_start; }
- const_reference back() const {
- const_iterator __tmp = _M_finish;
- --__tmp;
- return *__tmp;
- }
-
- size_type size() const { return _M_finish - _M_start;; }
- size_type max_size() const { return size_type(-1); }
- bool empty() const { return _M_finish == _M_start; }
-
-public: // Constructor, destructor.
- explicit deque(const allocator_type& __a = allocator_type())
- : _Base(__a, 0) {}
- deque(const deque& __x) : _Base(__x.get_allocator(), __x.size())
- { uninitialized_copy(__x.begin(), __x.end(), _M_start); }
- deque(size_type __n, const value_type& __value,
- const allocator_type& __a = allocator_type()) : _Base(__a, __n)
- { _M_fill_initialize(__value); }
- explicit deque(size_type __n) : _Base(allocator_type(), __n)
- { _M_fill_initialize(value_type()); }
-
-#ifdef __STL_MEMBER_TEMPLATES
-
- // Check whether it's an integral type. If so, it's not an iterator.
- template <class _InputIterator>
- deque(_InputIterator __first, _InputIterator __last,
- const allocator_type& __a = allocator_type()) : _Base(__a) {
- typedef typename _Is_integer<_InputIterator>::_Integral _Integral;
- _M_initialize_dispatch(__first, __last, _Integral());
- }
-
- template <class _Integer>
- void _M_initialize_dispatch(_Integer __n, _Integer __x, __true_type) {
- _M_initialize_map(__n);
- _M_fill_initialize(__x);
- }
-
- template <class _InputIter>
- void _M_initialize_dispatch(_InputIter __first, _InputIter __last,
- __false_type) {
- _M_range_initialize(__first, __last, __ITERATOR_CATEGORY(__first));
- }
-
-#else /* __STL_MEMBER_TEMPLATES */
-
- deque(const value_type* __first, const value_type* __last,
- const allocator_type& __a = allocator_type())
- : _Base(__a, __last - __first)
- { uninitialized_copy(__first, __last, _M_start); }
- deque(const_iterator __first, const_iterator __last,
- const allocator_type& __a = allocator_type())
- : _Base(__a, __last - __first)
- { uninitialized_copy(__first, __last, _M_start); }
-
-#endif /* __STL_MEMBER_TEMPLATES */
-
- ~deque() { destroy(_M_start, _M_finish); }
-
- deque& operator= (const deque& __x) {
- const size_type __len = size();
- if (&__x != this) {
- if (__len >= __x.size())
- erase(copy(__x.begin(), __x.end(), _M_start), _M_finish);
- else {
- const_iterator __mid = __x.begin() + difference_type(__len);
- copy(__x.begin(), __mid, _M_start);
- insert(_M_finish, __mid, __x.end());
- }
- }
- return *this;
- }
-
- void swap(deque& __x) {
- __STD::swap(_M_start, __x._M_start);
- __STD::swap(_M_finish, __x._M_finish);
- __STD::swap(_M_map, __x._M_map);
- __STD::swap(_M_map_size, __x._M_map_size);
- }
-
-public:
- // assign(), a generalized assignment member function. Two
- // versions: one that takes a count, and one that takes a range.
- // The range version is a member template, so we dispatch on whether
- // or not the type is an integer.
-
- void assign(size_type __n, const _Tp& __val) {
- if (__n > size()) {
- fill(begin(), end(), __val);
- insert(end(), __n - size(), __val);
- }
- else {
- erase(begin() + __n, end());
- fill(begin(), end(), __val);
- }
- }
-
-#ifdef __STL_MEMBER_TEMPLATES
-
- template <class _InputIterator>
- void assign(_InputIterator __first, _InputIterator __last) {
- typedef typename _Is_integer<_InputIterator>::_Integral _Integral;
- _M_assign_dispatch(__first, __last, _Integral());
- }
-
-private: // helper functions for assign()
-
- template <class _Integer>
- void _M_assign_dispatch(_Integer __n, _Integer __val, __true_type)
- { assign((size_type) __n, (_Tp) __val); }
-
- template <class _InputIterator>
- void _M_assign_dispatch(_InputIterator __first, _InputIterator __last,
- __false_type) {
- _M_assign_aux(__first, __last, __ITERATOR_CATEGORY(__first));
- }
-
- template <class _InputIterator>
- void _M_assign_aux(_InputIterator __first, _InputIterator __last,
- input_iterator_tag);
-
- template <class _ForwardIterator>
- void _M_assign_aux(_ForwardIterator __first, _ForwardIterator __last,
- forward_iterator_tag) {
- size_type __len = 0;
- distance(__first, __last, __len);
- if (__len > size()) {
- _ForwardIterator __mid = __first;
- advance(__mid, size());
- copy(__first, __mid, begin());
- insert(end(), __mid, __last);
- }
- else
- erase(copy(__first, __last, begin()), end());
- }
-
-#endif /* __STL_MEMBER_TEMPLATES */
-
-public: // push_* and pop_*
-
- void push_back(const value_type& __t) {
- if (_M_finish._M_cur != _M_finish._M_last - 1) {
- construct(_M_finish._M_cur, __t);
- ++_M_finish._M_cur;
- }
- else
- _M_push_back_aux(__t);
- }
-
- void push_back() {
- if (_M_finish._M_cur != _M_finish._M_last - 1) {
- construct(_M_finish._M_cur);
- ++_M_finish._M_cur;
- }
- else
- _M_push_back_aux();
- }
-
- void push_front(const value_type& __t) {
- if (_M_start._M_cur != _M_start._M_first) {
- construct(_M_start._M_cur - 1, __t);
- --_M_start._M_cur;
- }
- else
- _M_push_front_aux(__t);
- }
-
- void push_front() {
- if (_M_start._M_cur != _M_start._M_first) {
- construct(_M_start._M_cur - 1);
- --_M_start._M_cur;
- }
- else
- _M_push_front_aux();
- }
-
-
- void pop_back() {
- if (_M_finish._M_cur != _M_finish._M_first) {
- --_M_finish._M_cur;
- destroy(_M_finish._M_cur);
- }
- else
- _M_pop_back_aux();
- }
-
- void pop_front() {
- if (_M_start._M_cur != _M_start._M_last - 1) {
- destroy(_M_start._M_cur);
- ++_M_start._M_cur;
- }
- else
- _M_pop_front_aux();
- }
-
-public: // Insert
-
- iterator insert(iterator position, const value_type& __x) {
- if (position._M_cur == _M_start._M_cur) {
- push_front(__x);
- return _M_start;
- }
- else if (position._M_cur == _M_finish._M_cur) {
- push_back(__x);
- iterator __tmp = _M_finish;
- --__tmp;
- return __tmp;
- }
- else {
- return _M_insert_aux(position, __x);
- }
- }
-
- iterator insert(iterator __position)
- { return insert(__position, value_type()); }
-
- void insert(iterator __pos, size_type __n, const value_type& __x);
-
-#ifdef __STL_MEMBER_TEMPLATES
-
- // Check whether it's an integral type. If so, it's not an iterator.
- template <class _InputIterator>
- void insert(iterator __pos, _InputIterator __first, _InputIterator __last) {
- typedef typename _Is_integer<_InputIterator>::_Integral _Integral;
- _M_insert_dispatch(__pos, __first, __last, _Integral());
- }
-
- template <class _Integer>
- void _M_insert_dispatch(iterator __pos, _Integer __n, _Integer __x,
- __true_type) {
- insert(__pos, (size_type) __n, (value_type) __x);
- }
-
- template <class _InputIterator>
- void _M_insert_dispatch(iterator __pos,
- _InputIterator __first, _InputIterator __last,
- __false_type) {
- insert(__pos, __first, __last, __ITERATOR_CATEGORY(__first));
- }
-
-#else /* __STL_MEMBER_TEMPLATES */
-
- void insert(iterator __pos,
- const value_type* __first, const value_type* __last);
- void insert(iterator __pos,
- const_iterator __first, const_iterator __last);
-
-#endif /* __STL_MEMBER_TEMPLATES */
-
- void resize(size_type __new_size, const value_type& __x) {
- const size_type __len = size();
- if (__new_size < __len)
- erase(_M_start + __new_size, _M_finish);
- else
- insert(_M_finish, __new_size - __len, __x);
- }
-
- void resize(size_type new_size) { resize(new_size, value_type()); }
-
-public: // Erase
- iterator erase(iterator __pos) {
- iterator __next = __pos;
- ++__next;
- difference_type __index = __pos - _M_start;
- if (static_cast<size_type>(__index) < (size() >> 1)) {
- copy_backward(_M_start, __pos, __next);
- pop_front();
- }
- else {
- copy(__next, _M_finish, __pos);
- pop_back();
- }
- return _M_start + __index;
- }
-
- iterator erase(iterator __first, iterator __last);
- void clear();
-
-protected: // Internal construction/destruction
-
- void _M_fill_initialize(const value_type& __value);
-
-#ifdef __STL_MEMBER_TEMPLATES
-
- template <class _InputIterator>
- void _M_range_initialize(_InputIterator __first, _InputIterator __last,
- input_iterator_tag);
-
- template <class _ForwardIterator>
- void _M_range_initialize(_ForwardIterator __first, _ForwardIterator __last,
- forward_iterator_tag);
-
-#endif /* __STL_MEMBER_TEMPLATES */
-
-protected: // Internal push_* and pop_*
-
- void _M_push_back_aux(const value_type&);
- void _M_push_back_aux();
- void _M_push_front_aux(const value_type&);
- void _M_push_front_aux();
- void _M_pop_back_aux();
- void _M_pop_front_aux();
-
-protected: // Internal insert functions
-
-#ifdef __STL_MEMBER_TEMPLATES
-
- template <class _InputIterator>
- void insert(iterator __pos, _InputIterator __first, _InputIterator __last,
- input_iterator_tag);
-
- template <class _ForwardIterator>
- void insert(iterator __pos,
- _ForwardIterator __first, _ForwardIterator __last,
- forward_iterator_tag);
-
-#endif /* __STL_MEMBER_TEMPLATES */
-
- iterator _M_insert_aux(iterator __pos, const value_type& __x);
- iterator _M_insert_aux(iterator __pos);
- void _M_insert_aux(iterator __pos, size_type __n, const value_type& __x);
-
-#ifdef __STL_MEMBER_TEMPLATES
-
- template <class _ForwardIterator>
- void _M_insert_aux(iterator __pos,
- _ForwardIterator __first, _ForwardIterator __last,
- size_type __n);
-
-#else /* __STL_MEMBER_TEMPLATES */
-
- void _M_insert_aux(iterator __pos,
- const value_type* __first, const value_type* __last,
- size_type __n);
-
- void _M_insert_aux(iterator __pos,
- const_iterator __first, const_iterator __last,
- size_type __n);
-
-#endif /* __STL_MEMBER_TEMPLATES */
-
- iterator _M_reserve_elements_at_front(size_type __n) {
- size_type __vacancies = _M_start._M_cur - _M_start._M_first;
- if (__n > __vacancies)
- _M_new_elements_at_front(__n - __vacancies);
- return _M_start - difference_type(__n);
- }
-
- iterator _M_reserve_elements_at_back(size_type __n) {
- size_type __vacancies = (_M_finish._M_last - _M_finish._M_cur) - 1;
- if (__n > __vacancies)
- _M_new_elements_at_back(__n - __vacancies);
- return _M_finish + difference_type(__n);
- }
-
- void _M_new_elements_at_front(size_type __new_elements);
- void _M_new_elements_at_back(size_type __new_elements);
-
-protected: // Allocation of _M_map and nodes
-
- // Makes sure the _M_map has space for new nodes. Does not actually
- // add the nodes. Can invalidate _M_map pointers. (And consequently,
- // deque iterators.)
-
- void _M_reserve_map_at_back (size_type __nodes_to_add = 1) {
- if (__nodes_to_add + 1 > _M_map_size - (_M_finish._M_node - _M_map))
- _M_reallocate_map(__nodes_to_add, false);
- }
-
- void _M_reserve_map_at_front (size_type __nodes_to_add = 1) {
- if (__nodes_to_add > size_type(_M_start._M_node - _M_map))
- _M_reallocate_map(__nodes_to_add, true);
- }
-
- void _M_reallocate_map(size_type __nodes_to_add, bool __add_at_front);
-
-#ifdef __STL_NON_TYPE_TMPL_PARAM_BUG
-public:
- bool operator==(const deque<_Tp,_Alloc,0>& __x) const {
- return size() == __x.size() && equal(begin(), end(), __x.begin());
- }
- bool operator!=(const deque<_Tp,_Alloc,0>& __x) const {
- return size() != __x.size() || !equal(begin(), end(), __x.begin());
- }
- bool operator<(const deque<_Tp,_Alloc,0>& __x) const {
- return lexicographical_compare(begin(), end(), __x.begin(), __x.end());
- }
-#endif /* __STL_NON_TYPE_TMPL_PARAM_BUG */
-};
-
-// Non-inline member functions
-
-#ifdef __STL_MEMBER_TEMPLATES
-
-template <class _Tp, class _Alloc, size_t __bufsize>
-template <class _InputIter>
-void deque<_Tp, _Alloc, __bufsize>
- ::_M_assign_aux(_InputIter __first, _InputIter __last, input_iterator_tag)
-{
- iterator __cur = begin();
- for ( ; __first != __last && __cur != end(); ++__cur, ++__first)
- *__cur = *__first;
- if (__first == __last)
- erase(__cur, end());
- else
- insert(end(), __first, __last);
-}
-
-#endif /* __STL_MEMBER_TEMPLATES */
-
-template <class _Tp, class _Alloc, size_t __bufsize>
-void
-deque<_Tp, _Alloc, __bufsize>::insert(iterator __pos,
- size_type __n, const value_type& __x)
-{
- if (__pos._M_cur == _M_start._M_cur) {
- iterator __new_start = _M_reserve_elements_at_front(__n);
- uninitialized_fill(__new_start, _M_start, __x);
- _M_start = __new_start;
- }
- else if (__pos._M_cur == _M_finish._M_cur) {
- iterator __new_finish = _M_reserve_elements_at_back(__n);
- uninitialized_fill(_M_finish, __new_finish, __x);
- _M_finish = __new_finish;
- }
- else
- _M_insert_aux(__pos, __n, __x);
-}
-
-#ifndef __STL_MEMBER_TEMPLATES
-
-template <class _Tp, class _Alloc, size_t __bufsize>
-void deque<_Tp, _Alloc, __bufsize>::insert(iterator __pos,
- const value_type* __first,
- const value_type* __last) {
- size_type __n = __last - __first;
- if (__pos._M_cur == _M_start._M_cur) {
- iterator __new_start = _M_reserve_elements_at_front(__n);
- __STL_TRY {
- uninitialized_copy(__first, __last, __new_start);
- _M_start = __new_start;
- }
- __STL_UNWIND(_M_destroy_nodes(__new_start._M_node, _M_start._M_node));
- }
- else if (__pos._M_cur == _M_finish._M_cur) {
- iterator __new_finish = _M_reserve_elements_at_back(__n);
- __STL_TRY {
- uninitialized_copy(__first, __last, _M_finish);
- _M_finish = __new_finish;
- }
- __STL_UNWIND(_M_destroy_nodes(_M_finish._M_node + 1,
- __new_finish._M_node + 1));
- }
- else
- _M_insert_aux(__pos, __first, __last, __n);
-}
-
-template <class _Tp, class _Alloc, size_t __bufsize>
-void deque<_Tp,_Alloc,__bufsize>::insert(iterator __pos,
- const_iterator __first,
- const_iterator __last)
-{
- size_type __n = __last - __first;
- if (__pos._M_cur == _M_start._M_cur) {
- iterator __new_start = _M_reserve_elements_at_front(__n);
- __STL_TRY {
- uninitialized_copy(__first, __last, __new_start);
- _M_start = __new_start;
- }
- __STL_UNWIND(_M_destroy_nodes(__new_start._M_node, _M_start._M_node));
- }
- else if (__pos._M_cur == _M_finish._M_cur) {
- iterator __new_finish = _M_reserve_elements_at_back(__n);
- __STL_TRY {
- uninitialized_copy(__first, __last, _M_finish);
- _M_finish = __new_finish;
- }
- __STL_UNWIND(_M_destroy_nodes(_M_finish._M_node + 1,
- __new_finish._M_node + 1));
- }
- else
- _M_insert_aux(__pos, __first, __last, __n);
-}
-
-#endif /* __STL_MEMBER_TEMPLATES */
-
-template <class _Tp, class _Alloc, size_t __bufsize>
-deque<_Tp,_Alloc,__bufsize>::iterator
-deque<_Tp,_Alloc,__bufsize>::erase(iterator __first, iterator __last)
-{
- if (__first == _M_start && __last == _M_finish) {
- clear();
- return _M_finish;
- }
- else {
- difference_type __n = __last - __first;
- difference_type __elems_before = __first - _M_start;
- if (static_cast<size_type>(__elems_before) < (size() - __n) / 2) {
- copy_backward(_M_start, __first, __last);
- iterator __new_start = _M_start + __n;
- destroy(_M_start, __new_start);
- _M_destroy_nodes(__new_start._M_node, _M_start._M_node);
- _M_start = __new_start;
- }
- else {
- copy(__last, _M_finish, __first);
- iterator __new_finish = _M_finish - __n;
- destroy(__new_finish, _M_finish);
- _M_destroy_nodes(__new_finish._M_node + 1, _M_finish._M_node + 1);
- _M_finish = __new_finish;
- }
- return _M_start + __elems_before;
- }
-}
-
-template <class _Tp, class _Alloc, size_t __bufsize>
-void deque<_Tp,_Alloc,__bufsize>::clear()
-{
- for (_Map_pointer __node = _M_start._M_node + 1;
- __node < _M_finish._M_node;
- ++__node) {
- destroy(*__node, *__node + _S_buffer_size());
- _M_deallocate_node(*__node);
- }
-
- if (_M_start._M_node != _M_finish._M_node) {
- destroy(_M_start._M_cur, _M_start._M_last);
- destroy(_M_finish._M_first, _M_finish._M_cur);
- _M_deallocate_node(_M_finish._M_first);
- }
- else
- destroy(_M_start._M_cur, _M_finish._M_cur);
-
- _M_finish = _M_start;
-}
-
-// Precondition: _M_start and _M_finish have already been initialized,
-// but none of the deque's elements have yet been constructed.
-template <class _Tp, class _Alloc, size_t __bufsize>
-void
-deque<_Tp,_Alloc,__bufsize>::_M_fill_initialize(const value_type& __value) {
- _Map_pointer __cur;
- __STL_TRY {
- for (__cur = _M_start._M_node; __cur < _M_finish._M_node; ++__cur)
- uninitialized_fill(*__cur, *__cur + _S_buffer_size(), __value);
- uninitialized_fill(_M_finish._M_first, _M_finish._M_cur, __value);
- }
- __STL_UNWIND(destroy(_M_start, iterator(*__cur, __cur)));
-}
-
-#ifdef __STL_MEMBER_TEMPLATES
-
-template <class _Tp, class _Alloc, size_t __bufsize>
-template <class _InputIterator>
-void
-deque<_Tp,_Alloc,__bufsize>::_M_range_initialize(_InputIterator __first,
- _InputIterator __last,
- input_iterator_tag)
-{
- _M_initialize_map(0);
- for ( ; __first != __last; ++__first)
- push_back(*__first);
-}
-
-template <class _Tp, class _Alloc, size_t __bufsize>
-template <class _ForwardIterator>
-void
-deque<_Tp,_Alloc,__bufsize>::_M_range_initialize(_ForwardIterator __first,
- _ForwardIterator __last,
- forward_iterator_tag)
-{
- size_type __n = 0;
- distance(__first, __last, __n);
- _M_initialize_map(__n);
-
- _Map_pointer __cur_node;
- __STL_TRY {
- for (__cur_node = _M_start._M_node;
- __cur_node < _M_finish._M_node;
- ++__cur_node) {
- _ForwardIterator __mid = __first;
- advance(__mid, _S_buffer_size());
- uninitialized_copy(__first, __mid, *__cur_node);
- __first = __mid;
- }
- uninitialized_copy(__first, __last, _M_finish._M_first);
- }
- __STL_UNWIND(destroy(_M_start, iterator(*__cur_node, __cur_node)));
-}
-
-#endif /* __STL_MEMBER_TEMPLATES */
-
-// Called only if _M_finish._M_cur == _M_finish._M_last - 1.
-template <class _Tp, class _Alloc, size_t __bufsize>
-void
-deque<_Tp,_Alloc,__bufsize>::_M_push_back_aux(const value_type& __t)
-{
- value_type __t_copy = __t;
- _M_reserve_map_at_back();
- *(_M_finish._M_node + 1) = _M_allocate_node();
- __STL_TRY {
- construct(_M_finish._M_cur, __t_copy);
- _M_finish._M_set_node(_M_finish._M_node + 1);
- _M_finish._M_cur = _M_finish._M_first;
- }
- __STL_UNWIND(_M_deallocate_node(*(_M_finish._M_node + 1)));
-}
-
-// Called only if _M_finish._M_cur == _M_finish._M_last - 1.
-template <class _Tp, class _Alloc, size_t __bufsize>
-void
-deque<_Tp,_Alloc,__bufsize>::_M_push_back_aux()
-{
- _M_reserve_map_at_back();
- *(_M_finish._M_node + 1) = _M_allocate_node();
- __STL_TRY {
- construct(_M_finish._M_cur);
- _M_finish._M_set_node(_M_finish._M_node + 1);
- _M_finish._M_cur = _M_finish._M_first;
- }
- __STL_UNWIND(_M_deallocate_node(*(_M_finish._M_node + 1)));
-}
-
-// Called only if _M_start._M_cur == _M_start._M_first.
-template <class _Tp, class _Alloc, size_t __bufsize>
-void
-deque<_Tp,_Alloc,__bufsize>::_M_push_front_aux(const value_type& __t)
-{
- value_type __t_copy = __t;
- _M_reserve_map_at_front();
- *(_M_start._M_node - 1) = _M_allocate_node();
- __STL_TRY {
- _M_start._M_set_node(_M_start._M_node - 1);
- _M_start._M_cur = _M_start._M_last - 1;
- construct(_M_start._M_cur, __t_copy);
- }
- __STL_UNWIND((++_M_start, _M_deallocate_node(*(_M_start._M_node - 1))));
-}
-
-// Called only if _M_start._M_cur == _M_start._M_first.
-template <class _Tp, class _Alloc, size_t __bufsize>
-void
-deque<_Tp,_Alloc,__bufsize>::_M_push_front_aux()
-{
- _M_reserve_map_at_front();
- *(_M_start._M_node - 1) = _M_allocate_node();
- __STL_TRY {
- _M_start._M_set_node(_M_start._M_node - 1);
- _M_start._M_cur = _M_start._M_last - 1;
- construct(_M_start._M_cur);
- }
- __STL_UNWIND((++_M_start, _M_deallocate_node(*(_M_start._M_node - 1))));
-}
-
-// Called only if _M_finish._M_cur == _M_finish._M_first.
-template <class _Tp, class _Alloc, size_t __bufsize>
-void
-deque<_Tp,_Alloc,__bufsize>::_M_pop_back_aux()
-{
- _M_deallocate_node(_M_finish._M_first);
- _M_finish._M_set_node(_M_finish._M_node - 1);
- _M_finish._M_cur = _M_finish._M_last - 1;
- destroy(_M_finish._M_cur);
-}
-
-// Called only if _M_start._M_cur == _M_start._M_last - 1. Note that
-// if the deque has at least one element (a precondition for this member
-// function), and if _M_start._M_cur == _M_start._M_last, then the deque
-// must have at least two nodes.
-template <class _Tp, class _Alloc, size_t __bufsize>
-void
-deque<_Tp,_Alloc,__bufsize>::_M_pop_front_aux()
-{
- destroy(_M_start._M_cur);
- _M_deallocate_node(_M_start._M_first);
- _M_start._M_set_node(_M_start._M_node + 1);
- _M_start._M_cur = _M_start._M_first;
-}
-
-#ifdef __STL_MEMBER_TEMPLATES
-
-template <class _Tp, class _Alloc, size_t __bufsize>
-template <class _InputIterator>
-void
-deque<_Tp,_Alloc,__bufsize>::insert(iterator __pos,
- _InputIterator __first,
- _InputIterator __last,
- input_iterator_tag)
-{
- copy(__first, __last, inserter(*this, __pos));
-}
-
-template <class _Tp, class _Alloc, size_t __bufsize>
-template <class _ForwardIterator>
-void
-deque<_Tp,_Alloc,__bufsize>::insert(iterator __pos,
- _ForwardIterator __first,
- _ForwardIterator __last,
- forward_iterator_tag) {
- size_type __n = 0;
- distance(__first, __last, __n);
- if (__pos._M_cur == _M_start._M_cur) {
- iterator __new_start = _M_reserve_elements_at_front(__n);
- __STL_TRY {
- uninitialized_copy(__first, __last, __new_start);
- _M_start = __new_start;
- }
- __STL_UNWIND(_M_destroy_nodes(__new_start._M_node, _M_start._M_node));
- }
- else if (__pos._M_cur == _M_finish._M_cur) {
- iterator __new_finish = _M_reserve_elements_at_back(__n);
- __STL_TRY {
- uninitialized_copy(__first, __last, _M_finish);
- _M_finish = __new_finish;
- }
- __STL_UNWIND(_M_destroy_nodes(_M_finish._M_node + 1,
- __new_finish._M_node + 1));
- }
- else
- _M_insert_aux(__pos, __first, __last, __n);
-}
-
-#endif /* __STL_MEMBER_TEMPLATES */
-
-template <class _Tp, class _Alloc, size_t __bufsize>
-typename deque<_Tp, _Alloc, __bufsize>::iterator
-deque<_Tp,_Alloc,__bufsize>::_M_insert_aux(iterator __pos,
- const value_type& __x)
-{
- difference_type __index = __pos - _M_start;
- value_type __x_copy = __x;
- if (static_cast<size_type>(__index) < size() / 2) {
- push_front(front());
- iterator __front1 = _M_start;
- ++__front1;
- iterator __front2 = __front1;
- ++__front2;
- __pos = _M_start + __index;
- iterator __pos1 = __pos;
- ++__pos1;
- copy(__front2, __pos1, __front1);
- }
- else {
- push_back(back());
- iterator __back1 = _M_finish;
- --__back1;
- iterator __back2 = __back1;
- --__back2;
- __pos = _M_start + __index;
- copy_backward(__pos, __back2, __back1);
- }
- *__pos = __x_copy;
- return __pos;
-}
-
-template <class _Tp, class _Alloc, size_t __bufsize>
-typename deque<_Tp,_Alloc,__bufsize>::iterator
-deque<_Tp,_Alloc,__bufsize>::_M_insert_aux(iterator __pos)
-{
- difference_type __index = __pos - _M_start;
- if (static_cast<size_type>(__index) < size() / 2) {
- push_front(front());
- iterator __front1 = _M_start;
- ++__front1;
- iterator __front2 = __front1;
- ++__front2;
- __pos = _M_start + __index;
- iterator __pos1 = __pos;
- ++__pos1;
- copy(__front2, __pos1, __front1);
- }
- else {
- push_back(back());
- iterator __back1 = _M_finish;
- --__back1;
- iterator __back2 = __back1;
- --__back2;
- __pos = _M_start + __index;
- copy_backward(__pos, __back2, __back1);
- }
- *__pos = value_type();
- return __pos;
-}
-
-template <class _Tp, class _Alloc, size_t __bufsize>
-void
-deque<_Tp,_Alloc,__bufsize>::_M_insert_aux(iterator __pos,
- size_type __n,
- const value_type& __x)
-{
- const difference_type __elems_before = __pos - _M_start;
- size_type __length = size();
- value_type __x_copy = __x;
- if (static_cast<size_type>(__elems_before) < __length / 2) {
- iterator __new_start = _M_reserve_elements_at_front(__n);
- iterator __old_start = _M_start;
- __pos = _M_start + __elems_before;
- __STL_TRY {
- if (__elems_before >= difference_type(__n)) {
- iterator __start_n = _M_start + difference_type(__n);
- uninitialized_copy(_M_start, __start_n, __new_start);
- _M_start = __new_start;
- copy(__start_n, __pos, __old_start);
- fill(__pos - difference_type(__n), __pos, __x_copy);
- }
- else {
- __uninitialized_copy_fill(_M_start, __pos, __new_start,
- _M_start, __x_copy);
- _M_start = __new_start;
- fill(__old_start, __pos, __x_copy);
- }
- }
- __STL_UNWIND(_M_destroy_nodes(__new_start._M_node, _M_start._M_node));
- }
- else {
- iterator __new_finish = _M_reserve_elements_at_back(__n);
- iterator __old_finish = _M_finish;
- const difference_type __elems_after =
- difference_type(__length) - __elems_before;
- __pos = _M_finish - __elems_after;
- __STL_TRY {
- if (__elems_after > difference_type(__n)) {
- iterator __finish_n = _M_finish - difference_type(__n);
- uninitialized_copy(__finish_n, _M_finish, _M_finish);
- _M_finish = __new_finish;
- copy_backward(__pos, __finish_n, __old_finish);
- fill(__pos, __pos + difference_type(__n), __x_copy);
- }
- else {
- __uninitialized_fill_copy(_M_finish, __pos + difference_type(__n),
- __x_copy, __pos, _M_finish);
- _M_finish = __new_finish;
- fill(__pos, __old_finish, __x_copy);
- }
- }
- __STL_UNWIND(_M_destroy_nodes(_M_finish._M_node + 1,
- __new_finish._M_node + 1));
- }
-}
-
-#ifdef __STL_MEMBER_TEMPLATES
-
-template <class _Tp, class _Alloc, size_t __bufsize>
-template <class _ForwardIterator>
-void
-deque<_Tp,_Alloc,__bufsize>::_M_insert_aux(iterator __pos,
- _ForwardIterator __first,
- _ForwardIterator __last,
- size_type __n)
-{
- const difference_type __elemsbefore = __pos - _M_start;
- size_type __length = size();
- if (static_cast<size_type>(__elemsbefore) < __length / 2) {
- iterator __new_start = _M_reserve_elements_at_front(__n);
- iterator __old_start = _M_start;
- __pos = _M_start + __elemsbefore;
- __STL_TRY {
- if (__elemsbefore >= difference_type(__n)) {
- iterator __start_n = _M_start + difference_type(__n);
- uninitialized_copy(_M_start, __start_n, __new_start);
- _M_start = __new_start;
- copy(__start_n, __pos, __old_start);
- copy(__first, __last, __pos - difference_type(__n));
- }
- else {
- _ForwardIterator __mid = __first;
- advance(__mid, difference_type(__n) - __elemsbefore);
- __uninitialized_copy_copy(_M_start, __pos, __first, __mid,
- __new_start);
- _M_start = __new_start;
- copy(__mid, __last, __old_start);
- }
- }
- __STL_UNWIND(_M_destroy_nodes(__new_start._M_node, _M_start._M_node));
- }
- else {
- iterator __new_finish = _M_reserve_elements_at_back(__n);
- iterator __old_finish = _M_finish;
- const difference_type __elemsafter =
- difference_type(__length) - __elemsbefore;
- __pos = _M_finish - __elemsafter;
- __STL_TRY {
- if (__elemsafter > difference_type(__n)) {
- iterator __finish_n = _M_finish - difference_type(__n);
- uninitialized_copy(__finish_n, _M_finish, _M_finish);
- _M_finish = __new_finish;
- copy_backward(__pos, __finish_n, __old_finish);
- copy(__first, __last, __pos);
- }
- else {
- _ForwardIterator __mid = __first;
- advance(__mid, __elemsafter);
- __uninitialized_copy_copy(__mid, __last, __pos, _M_finish, _M_finish);
- _M_finish = __new_finish;
- copy(__first, __mid, __pos);
- }
- }
- __STL_UNWIND(_M_destroy_nodes(_M_finish._M_node + 1,
- __new_finish._M_node + 1));
- }
-}
-
-#else /* __STL_MEMBER_TEMPLATES */
-
-template <class _Tp, class _Alloc, size_t __bufsize>
-void
-deque<_Tp,_Alloc,__bufsize>::_M_insert_aux(iterator __pos,
- const value_type* __first,
- const value_type* __last,
- size_type __n)
-{
- const difference_type __elemsbefore = __pos - _M_start;
- size_type __length = size();
- if (__elemsbefore < __length / 2) {
- iterator __new_start = _M_reserve_elements_at_front(__n);
- iterator __old_start = _M_start;
- __pos = _M_start + __elemsbefore;
- __STL_TRY {
- if (__elemsbefore >= difference_type(__n)) {
- iterator __start_n = _M_start + difference_type(__n);
- uninitialized_copy(_M_start, __start_n, __new_start);
- _M_start = __new_start;
- copy(__start_n, __pos, __old_start);
- copy(__first, __last, __pos - difference_type(__n));
- }
- else {
- const value_type* __mid =
- __first + (difference_type(__n) - __elemsbefore);
- __uninitialized_copy_copy(_M_start, __pos, __first, __mid,
- __new_start);
- _M_start = __new_start;
- copy(__mid, __last, __old_start);
- }
- }
- __STL_UNWIND(_M_destroy_nodes(__new_start._M_node, _M_start._M_node));
- }
- else {
- iterator __new_finish = _M_reserve_elements_at_back(__n);
- iterator __old_finish = _M_finish;
- const difference_type __elemsafter =
- difference_type(__length) - __elemsbefore;
- __pos = _M_finish - __elemsafter;
- __STL_TRY {
- if (__elemsafter > difference_type(__n)) {
- iterator __finish_n = _M_finish - difference_type(__n);
- uninitialized_copy(__finish_n, _M_finish, _M_finish);
- _M_finish = __new_finish;
- copy_backward(__pos, __finish_n, __old_finish);
- copy(__first, __last, __pos);
- }
- else {
- const value_type* __mid = __first + __elemsafter;
- __uninitialized_copy_copy(__mid, __last, __pos, _M_finish, _M_finish);
- _M_finish = __new_finish;
- copy(__first, __mid, __pos);
- }
- }
- __STL_UNWIND(_M_destroy_nodes(_M_finish._M_node + 1,
- __new_finish._M_node + 1));
- }
-}
-
-template <class _Tp, class _Alloc, size_t __bufsize>
-void
-deque<_Tp,_Alloc,__bufsize>::_M_insert_aux(iterator __pos,
- const_iterator __first,
- const_iterator __last,
- size_type __n)
-{
- const difference_type __elemsbefore = __pos - _M_start;
- size_type __length = size();
- if (__elemsbefore < __length / 2) {
- iterator __new_start = _M_reserve_elements_at_front(__n);
- iterator __old_start = _M_start;
- __pos = _M_start + __elemsbefore;
- __STL_TRY {
- if (__elemsbefore >= __n) {
- iterator __start_n = _M_start + __n;
- uninitialized_copy(_M_start, __start_n, __new_start);
- _M_start = __new_start;
- copy(__start_n, __pos, __old_start);
- copy(__first, __last, __pos - difference_type(__n));
- }
- else {
- const_iterator __mid = __first + (__n - __elemsbefore);
- __uninitialized_copy_copy(_M_start, __pos, __first, __mid,
- __new_start);
- _M_start = __new_start;
- copy(__mid, __last, __old_start);
- }
- }
- __STL_UNWIND(_M_destroy_nodes(__new_start._M_node, _M_start._M_node));
- }
- else {
- iterator __new_finish = _M_reserve_elements_at_back(__n);
- iterator __old_finish = _M_finish;
- const difference_type __elemsafter = __length - __elemsbefore;
- __pos = _M_finish - __elemsafter;
- __STL_TRY {
- if (__elemsafter > __n) {
- iterator __finish_n = _M_finish - difference_type(__n);
- uninitialized_copy(__finish_n, _M_finish, _M_finish);
- _M_finish = __new_finish;
- copy_backward(__pos, __finish_n, __old_finish);
- copy(__first, __last, __pos);
- }
- else {
- const_iterator __mid = __first + __elemsafter;
- __uninitialized_copy_copy(__mid, __last, __pos, _M_finish, _M_finish);
- _M_finish = __new_finish;
- copy(__first, __mid, __pos);
- }
- }
- __STL_UNWIND(_M_destroy_nodes(_M_finish._M_node + 1,
- __new_finish._M_node + 1));
- }
-}
-
-#endif /* __STL_MEMBER_TEMPLATES */
-
-template <class _Tp, class _Alloc, size_t __bufsize>
-void
-deque<_Tp,_Alloc,__bufsize>::_M_new_elements_at_front(size_type __new_elems)
-{
- size_type __new_nodes
- = (__new_elems + _S_buffer_size() - 1) / _S_buffer_size();
- _M_reserve_map_at_front(__new_nodes);
- size_type __i;
- __STL_TRY {
- for (__i = 1; __i <= __new_nodes; ++__i)
- *(_M_start._M_node - __i) = _M_allocate_node();
- }
-# ifdef __STL_USE_EXCEPTIONS
- catch(...) {
- for (size_type __j = 1; __j < __i; ++__j)
- _M_deallocate_node(*(_M_start._M_node - __j));
- throw;
- }
-# endif /* __STL_USE_EXCEPTIONS */
-}
-
-template <class _Tp, class _Alloc, size_t __bufsize>
-void
-deque<_Tp,_Alloc,__bufsize>::_M_new_elements_at_back(size_type __new_elems)
-{
- size_type __new_nodes
- = (__new_elems + _S_buffer_size() - 1) / _S_buffer_size();
- _M_reserve_map_at_back(__new_nodes);
- size_type __i;
- __STL_TRY {
- for (__i = 1; __i <= __new_nodes; ++__i)
- *(_M_finish._M_node + __i) = _M_allocate_node();
- }
-# ifdef __STL_USE_EXCEPTIONS
- catch(...) {
- for (size_type __j = 1; __j < __i; ++__j)
- _M_deallocate_node(*(_M_finish._M_node + __j));
- throw;
- }
-# endif /* __STL_USE_EXCEPTIONS */
-}
-
-template <class _Tp, class _Alloc, size_t __bufsize>
-void
-deque<_Tp,_Alloc,__bufsize>::_M_reallocate_map(size_type __nodes_to_add,
- bool __add_at_front)
-{
- size_type __old_num_nodes = _M_finish._M_node - _M_start._M_node + 1;
- size_type __new_num_nodes = __old_num_nodes + __nodes_to_add;
-
- _Map_pointer __new_nstart;
- if (_M_map_size > 2 * __new_num_nodes) {
- __new_nstart = _M_map + (_M_map_size - __new_num_nodes) / 2
- + (__add_at_front ? __nodes_to_add : 0);
- if (__new_nstart < _M_start._M_node)
- copy(_M_start._M_node, _M_finish._M_node + 1, __new_nstart);
- else
- copy_backward(_M_start._M_node, _M_finish._M_node + 1,
- __new_nstart + __old_num_nodes);
- }
- else {
- size_type __new_map_size =
- _M_map_size + max(_M_map_size, __nodes_to_add) + 2;
-
- _Map_pointer __new_map = _M_allocate_map(__new_map_size);
- __new_nstart = __new_map + (__new_map_size - __new_num_nodes) / 2
- + (__add_at_front ? __nodes_to_add : 0);
- copy(_M_start._M_node, _M_finish._M_node + 1, __new_nstart);
- _M_deallocate_map(_M_map, _M_map_size);
-
- _M_map = __new_map;
- _M_map_size = __new_map_size;
- }
-
- _M_start._M_set_node(__new_nstart);
- _M_finish._M_set_node(__new_nstart + __old_num_nodes - 1);
-}
-
-
-// Nonmember functions.
-
-#ifndef __STL_NON_TYPE_TMPL_PARAM_BUG
-
-template <class _Tp, class _Alloc, size_t __bufsiz>
-bool operator==(const deque<_Tp, _Alloc, __bufsiz>& __x,
- const deque<_Tp, _Alloc, __bufsiz>& __y)
-{
- return __x.size() == __y.size() &&
- equal(__x.begin(), __x.end(), __y.begin());
-}
-
-template <class _Tp, class _Alloc, size_t __bufsiz>
-bool operator<(const deque<_Tp, _Alloc, __bufsiz>& __x,
- const deque<_Tp, _Alloc, __bufsiz>& __y)
-{
- return lexicographical_compare(__x.begin(), __x.end(),
- __y.begin(), __y.end());
-}
-
-#endif /* __STL_NON_TYPE_TMPL_PARAM_BUG */
-
-#if defined(__STL_FUNCTION_TMPL_PARTIAL_ORDER) && \
- !defined(__STL_NON_TYPE_TMPL_PARAM_BUG)
-
-template <class _Tp, class _Alloc, size_t __bufsiz>
-inline void
-swap(deque<_Tp,_Alloc,__bufsiz>& __x, deque<_Tp,_Alloc,__bufsiz>& __y)
-{
- __x.swap(__y);
-}
-
-#endif
-
-#if defined(__sgi) && !defined(__GNUC__) && (_MIPS_SIM != _MIPS_SIM_ABI32)
-#pragma reset woff 1174
-#pragma reset woff 1375
-#endif
-
-__STL_END_NAMESPACE
-
-#endif /* __SGI_STL_INTERNAL_DEQUE_H */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/stl_function.h b/contrib/libstdc++/stl/stl_function.h
deleted file mode 100644
index a5a8486576e9..000000000000
--- a/contrib/libstdc++/stl/stl_function.h
+++ /dev/null
@@ -1,700 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- * Copyright (c) 1996-1998
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-/* NOTE: This is an internal header file, included by other STL headers.
- * You should not attempt to use it directly.
- */
-
-#ifndef __SGI_STL_INTERNAL_FUNCTION_H
-#define __SGI_STL_INTERNAL_FUNCTION_H
-
-__STL_BEGIN_NAMESPACE
-
-template <class _Arg, class _Result>
-struct unary_function {
- typedef _Arg argument_type;
- typedef _Result result_type;
-};
-
-template <class _Arg1, class _Arg2, class _Result>
-struct binary_function {
- typedef _Arg1 first_argument_type;
- typedef _Arg2 second_argument_type;
- typedef _Result result_type;
-};
-
-template <class _Tp>
-struct plus : public binary_function<_Tp,_Tp,_Tp> {
- _Tp operator()(const _Tp& __x, const _Tp& __y) const { return __x + __y; }
-};
-
-template <class _Tp>
-struct minus : public binary_function<_Tp,_Tp,_Tp> {
- _Tp operator()(const _Tp& __x, const _Tp& __y) const { return __x - __y; }
-};
-
-template <class _Tp>
-struct multiplies : public binary_function<_Tp,_Tp,_Tp> {
- _Tp operator()(const _Tp& __x, const _Tp& __y) const { return __x * __y; }
-};
-
-template <class _Tp>
-struct divides : public binary_function<_Tp,_Tp,_Tp> {
- _Tp operator()(const _Tp& __x, const _Tp& __y) const { return __x / __y; }
-};
-
-// identity_element (not part of the C++ standard).
-
-template <class _Tp> inline _Tp identity_element(plus<_Tp>) {
- return _Tp(0);
-}
-template <class _Tp> inline _Tp identity_element(multiplies<_Tp>) {
- return _Tp(1);
-}
-
-template <class _Tp>
-struct modulus : public binary_function<_Tp,_Tp,_Tp>
-{
- _Tp operator()(const _Tp& __x, const _Tp& __y) const { return __x % __y; }
-};
-
-template <class _Tp>
-struct negate : public unary_function<_Tp,_Tp>
-{
- _Tp operator()(const _Tp& __x) const { return -__x; }
-};
-
-template <class _Tp>
-struct equal_to : public binary_function<_Tp,_Tp,bool>
-{
- bool operator()(const _Tp& __x, const _Tp& __y) const { return __x == __y; }
-};
-
-template <class _Tp>
-struct not_equal_to : public binary_function<_Tp,_Tp,bool>
-{
- bool operator()(const _Tp& __x, const _Tp& __y) const { return __x != __y; }
-};
-
-template <class _Tp>
-struct greater : public binary_function<_Tp,_Tp,bool>
-{
- bool operator()(const _Tp& __x, const _Tp& __y) const { return __x > __y; }
-};
-
-template <class _Tp>
-struct less : public binary_function<_Tp,_Tp,bool>
-{
- bool operator()(const _Tp& __x, const _Tp& __y) const { return __x < __y; }
-};
-
-template <class _Tp>
-struct greater_equal : public binary_function<_Tp,_Tp,bool>
-{
- bool operator()(const _Tp& __x, const _Tp& __y) const { return __x >= __y; }
-};
-
-template <class _Tp>
-struct less_equal : public binary_function<_Tp,_Tp,bool>
-{
- bool operator()(const _Tp& __x, const _Tp& __y) const { return __x <= __y; }
-};
-
-template <class _Tp>
-struct logical_and : public binary_function<_Tp,_Tp,bool>
-{
- bool operator()(const _Tp& __x, const _Tp& __y) const { return __x && __y; }
-};
-
-template <class _Tp>
-struct logical_or : public binary_function<_Tp,_Tp,bool>
-{
- bool operator()(const _Tp& __x, const _Tp& __y) const { return __x || __y; }
-};
-
-template <class _Tp>
-struct logical_not : public unary_function<_Tp,bool>
-{
- bool operator()(const _Tp& __x) const { return !__x; }
-};
-
-template <class _Predicate>
-class unary_negate
- : public unary_function<typename _Predicate::argument_type, bool> {
-protected:
- _Predicate _M_pred;
-public:
- explicit unary_negate(const _Predicate& __x) : _M_pred(__x) {}
- bool operator()(const typename _Predicate::argument_type& __x) const {
- return !_M_pred(__x);
- }
-};
-
-template <class _Predicate>
-inline unary_negate<_Predicate>
-not1(const _Predicate& __pred)
-{
- return unary_negate<_Predicate>(__pred);
-}
-
-template <class _Predicate>
-class binary_negate
- : public binary_function<typename _Predicate::first_argument_type,
- typename _Predicate::second_argument_type,
- bool> {
-protected:
- _Predicate _M_pred;
-public:
- explicit binary_negate(const _Predicate& __x) : _M_pred(__x) {}
- bool operator()(const typename _Predicate::first_argument_type& __x,
- const typename _Predicate::second_argument_type& __y) const
- {
- return !_M_pred(__x, __y);
- }
-};
-
-template <class _Predicate>
-inline binary_negate<_Predicate>
-not2(const _Predicate& __pred)
-{
- return binary_negate<_Predicate>(__pred);
-}
-
-template <class _Operation>
-class binder1st
- : public unary_function<typename _Operation::second_argument_type,
- typename _Operation::result_type> {
-protected:
- _Operation op;
- typename _Operation::first_argument_type value;
-public:
- binder1st(const _Operation& __x,
- const typename _Operation::first_argument_type& __y)
- : op(__x), value(__y) {}
- typename _Operation::result_type
- operator()(const typename _Operation::second_argument_type& __x) const {
- return op(value, __x);
- }
-};
-
-template <class _Operation, class _Tp>
-inline binder1st<_Operation>
-bind1st(const _Operation& __oper, const _Tp& __x)
-{
- typedef typename _Operation::first_argument_type _Arg1_type;
- return binder1st<_Operation>(__oper, _Arg1_type(__x));
-}
-
-template <class _Operation>
-class binder2nd
- : public unary_function<typename _Operation::first_argument_type,
- typename _Operation::result_type> {
-protected:
- _Operation op;
- typename _Operation::second_argument_type value;
-public:
- binder2nd(const _Operation& __x,
- const typename _Operation::second_argument_type& __y)
- : op(__x), value(__y) {}
- typename _Operation::result_type
- operator()(const typename _Operation::first_argument_type& __x) const {
- return op(__x, value);
- }
-};
-
-template <class _Operation, class _Tp>
-inline binder2nd<_Operation>
-bind2nd(const _Operation& __oper, const _Tp& __x)
-{
- typedef typename _Operation::second_argument_type _Arg2_type;
- return binder2nd<_Operation>(__oper, _Arg2_type(__x));
-}
-
-// unary_compose and binary_compose (extensions, not part of the standard).
-
-template <class _Operation1, class _Operation2>
-class unary_compose
- : public unary_function<typename _Operation2::argument_type,
- typename _Operation1::result_type>
-{
-protected:
- _Operation1 __op1;
- _Operation2 __op2;
-public:
- unary_compose(const _Operation1& __x, const _Operation2& __y)
- : __op1(__x), __op2(__y) {}
- typename _Operation1::result_type
- operator()(const typename _Operation2::argument_type& __x) const {
- return __op1(__op2(__x));
- }
-};
-
-template <class _Operation1, class _Operation2>
-inline unary_compose<_Operation1,_Operation2>
-compose1(const _Operation1& __op1, const _Operation2& __op2)
-{
- return unary_compose<_Operation1,_Operation2>(__op1, __op2);
-}
-
-template <class _Operation1, class _Operation2, class _Operation3>
-class binary_compose
- : public unary_function<typename _Operation2::argument_type,
- typename _Operation1::result_type> {
-protected:
- _Operation1 _M_op1;
- _Operation2 _M_op2;
- _Operation3 _M_op3;
-public:
- binary_compose(const _Operation1& __x, const _Operation2& __y,
- const _Operation3& __z)
- : _M_op1(__x), _M_op2(__y), _M_op3(__z) { }
- typename _Operation1::result_type
- operator()(const typename _Operation2::argument_type& __x) const {
- return _M_op1(_M_op2(__x), _M_op3(__x));
- }
-};
-
-template <class _Operation1, class _Operation2, class _Operation3>
-inline binary_compose<_Operation1, _Operation2, _Operation3>
-compose2(const _Operation1& __op1, const _Operation2& __op2,
- const _Operation3& __op3)
-{
- return binary_compose<_Operation1,_Operation2,_Operation3>
- (__op1, __op2, __op3);
-}
-
-template <class _Arg, class _Result>
-class pointer_to_unary_function : public unary_function<_Arg, _Result> {
-protected:
- _Result (*_M_ptr)(_Arg);
-public:
- pointer_to_unary_function() {}
- explicit pointer_to_unary_function(_Result (*__x)(_Arg)) : _M_ptr(__x) {}
- _Result operator()(_Arg __x) const { return _M_ptr(__x); }
-};
-
-template <class _Arg, class _Result>
-inline pointer_to_unary_function<_Arg, _Result> ptr_fun(_Result (*__x)(_Arg))
-{
- return pointer_to_unary_function<_Arg, _Result>(__x);
-}
-
-template <class _Arg1, class _Arg2, class _Result>
-class pointer_to_binary_function :
- public binary_function<_Arg1,_Arg2,_Result> {
-protected:
- _Result (*_M_ptr)(_Arg1, _Arg2);
-public:
- pointer_to_binary_function() {}
- explicit pointer_to_binary_function(_Result (*__x)(_Arg1, _Arg2))
- : _M_ptr(__x) {}
- _Result operator()(_Arg1 __x, _Arg2 __y) const {
- return _M_ptr(__x, __y);
- }
-};
-
-template <class _Arg1, class _Arg2, class _Result>
-inline pointer_to_binary_function<_Arg1,_Arg2,_Result>
-ptr_fun(_Result (*__x)(_Arg1, _Arg2)) {
- return pointer_to_binary_function<_Arg1,_Arg2,_Result>(__x);
-}
-
-// identity is an extensions: it is not part of the standard.
-template <class _Tp>
-struct _Identity : public unary_function<_Tp,_Tp> {
- const _Tp& operator()(const _Tp& __x) const { return __x; }
-};
-
-template <class _Tp> struct identity : public _Identity<_Tp> {};
-
-// select1st and select2nd are extensions: they are not part of the standard.
-template <class _Pair>
-struct _Select1st : public unary_function<_Pair, typename _Pair::first_type> {
- const typename _Pair::first_type& operator()(const _Pair& __x) const {
- return __x.first;
- }
-};
-
-template <class _Pair>
-struct _Select2nd : public unary_function<_Pair, typename _Pair::second_type>
-{
- const typename _Pair::second_type& operator()(const _Pair& __x) const {
- return __x.second;
- }
-};
-
-template <class _Pair> struct select1st : public _Select1st<_Pair> {};
-template <class _Pair> struct select2nd : public _Select2nd<_Pair> {};
-
-// project1st and project2nd are extensions: they are not part of the standard
-template <class _Arg1, class _Arg2>
-struct _Project1st : public binary_function<_Arg1, _Arg2, _Arg1> {
- _Arg1 operator()(const _Arg1& __x, const _Arg2&) const { return __x; }
-};
-
-template <class _Arg1, class _Arg2>
-struct _Project2nd : public binary_function<_Arg1, _Arg2, _Arg2> {
- _Arg2 operator()(const _Arg1&, const _Arg2& __y) const { return __y; }
-};
-
-template <class _Arg1, class _Arg2>
-struct project1st : public _Project1st<_Arg1, _Arg2> {};
-
-template <class _Arg1, class _Arg2>
-struct project2nd : public _Project2nd<_Arg1, _Arg2> {};
-
-// constant_void_fun, constant_unary_fun, and constant_binary_fun are
-// extensions: they are not part of the standard. (The same, of course,
-// is true of the helper functions constant0, constant1, and constant2.)
-template <class _Result>
-struct constant_void_fun
-{
- typedef _Result result_type;
- result_type __val;
- constant_void_fun(const result_type& __v) : __val(__v) {}
- const result_type& operator()() const { return __val; }
-};
-
-#ifndef __STL_LIMITED_DEFAULT_TEMPLATES
-template <class _Result, class _Argument = _Result>
-#else
-template <class _Result, class _Argument>
-#endif
-struct constant_unary_fun : public unary_function<_Argument, _Result> {
- _Result _M_val;
- constant_unary_fun(const _Result& __v) : _M_val(__v) {}
- const _Result& operator()(const _Argument&) const { return _M_val; }
-};
-
-#ifndef __STL_LIMITED_DEFAULT_TEMPLATES
-template <class _Result, class _Arg1 = _Result, class _Arg2 = _Arg1>
-#else
-template <class _Result, class _Arg1, class _Arg2>
-#endif
-struct constant_binary_fun : public binary_function<_Arg1, _Arg2, _Result> {
- _Result _M_val;
- constant_binary_fun(const _Result& __v) : _M_val(__v) {}
- const _Result& operator()(const _Arg1&, const _Arg2&) const {
- return _M_val;
- }
-};
-
-template <class _Result>
-inline constant_void_fun<_Result> constant0(const _Result& __val)
-{
- return constant_void_fun<_Result>(__val);
-}
-
-template <class _Result>
-inline constant_unary_fun<_Result,_Result> constant1(const _Result& __val)
-{
- return constant_unary_fun<_Result,_Result>(__val);
-}
-
-template <class _Result>
-inline constant_binary_fun<_Result,_Result,_Result>
-constant2(const _Result& __val)
-{
- return constant_binary_fun<_Result,_Result,_Result>(__val);
-}
-
-// subtractive_rng is an extension: it is not part of the standard.
-// Note: this code assumes that int is 32 bits.
-class subtractive_rng : public unary_function<unsigned int, unsigned int> {
-private:
- unsigned int _M_table[55];
- size_t _M_index1;
- size_t _M_index2;
-public:
- unsigned int operator()(unsigned int __limit) {
- _M_index1 = (_M_index1 + 1) % 55;
- _M_index2 = (_M_index2 + 1) % 55;
- _M_table[_M_index1] = _M_table[_M_index1] - _M_table[_M_index2];
- return _M_table[_M_index1] % __limit;
- }
-
- void _M_initialize(unsigned int __seed)
- {
- unsigned int __k = 1;
- _M_table[54] = __seed;
- size_t __i;
- for (__i = 0; __i < 54; __i++) {
- size_t __ii = (21 * (__i + 1) % 55) - 1;
- _M_table[__ii] = __k;
- __k = __seed - __k;
- __seed = _M_table[__ii];
- }
- for (int __loop = 0; __loop < 4; __loop++) {
- for (__i = 0; __i < 55; __i++)
- _M_table[__i] = _M_table[__i] - _M_table[(1 + __i + 30) % 55];
- }
- _M_index1 = 0;
- _M_index2 = 31;
- }
-
- subtractive_rng(unsigned int __seed) { _M_initialize(__seed); }
- subtractive_rng() { _M_initialize(161803398u); }
-};
-
-
-// Adaptor function objects: pointers to member functions.
-
-// There are a total of 16 = 2^4 function objects in this family.
-// (1) Member functions taking no arguments vs member functions taking
-// one argument.
-// (2) Call through pointer vs call through reference.
-// (3) Member function with void return type vs member function with
-// non-void return type.
-// (4) Const vs non-const member function.
-
-// Note that choice (3) is nothing more than a workaround: according
-// to the draft, compilers should handle void and non-void the same way.
-// This feature is not yet widely implemented, though. You can only use
-// member functions returning void if your compiler supports partial
-// specialization.
-
-// All of this complexity is in the function objects themselves. You can
-// ignore it by using the helper function mem_fun and mem_fun_ref,
-// which create whichever type of adaptor is appropriate.
-// (mem_fun1 and mem_fun1_ref are no longer part of the C++ standard,
-// but they are provided for backward compatibility.)
-
-
-template <class _Ret, class _Tp>
-class mem_fun_t : public unary_function<_Tp*,_Ret> {
-public:
- explicit mem_fun_t(_Ret (_Tp::*__pf)()) : _M_f(__pf) {}
- _Ret operator()(_Tp* __p) const { return (__p->*_M_f)(); }
-private:
- _Ret (_Tp::*_M_f)();
-};
-
-template <class _Ret, class _Tp>
-class const_mem_fun_t : public unary_function<const _Tp*,_Ret> {
-public:
- explicit const_mem_fun_t(_Ret (_Tp::*__pf)() const) : _M_f(__pf) {}
- _Ret operator()(const _Tp* __p) const { return (__p->*_M_f)(); }
-private:
- _Ret (_Tp::*_M_f)() const;
-};
-
-
-template <class _Ret, class _Tp>
-class mem_fun_ref_t : public unary_function<_Tp,_Ret> {
-public:
- explicit mem_fun_ref_t(_Ret (_Tp::*__pf)()) : _M_f(__pf) {}
- _Ret operator()(_Tp& __r) const { return (__r.*_M_f)(); }
-private:
- _Ret (_Tp::*_M_f)();
-};
-
-template <class _Ret, class _Tp>
-class const_mem_fun_ref_t : public unary_function<_Tp,_Ret> {
-public:
- explicit const_mem_fun_ref_t(_Ret (_Tp::*__pf)() const) : _M_f(__pf) {}
- _Ret operator()(const _Tp& __r) const { return (__r.*_M_f)(); }
-private:
- _Ret (_Tp::*_M_f)() const;
-};
-
-template <class _Ret, class _Tp, class _Arg>
-class mem_fun1_t : public binary_function<_Tp*,_Arg,_Ret> {
-public:
- explicit mem_fun1_t(_Ret (_Tp::*__pf)(_Arg)) : _M_f(__pf) {}
- _Ret operator()(_Tp* __p, _Arg __x) const { return (__p->*_M_f)(__x); }
-private:
- _Ret (_Tp::*_M_f)(_Arg);
-};
-
-template <class _Ret, class _Tp, class _Arg>
-class const_mem_fun1_t : public binary_function<const _Tp*,_Arg,_Ret> {
-public:
- explicit const_mem_fun1_t(_Ret (_Tp::*__pf)(_Arg) const) : _M_f(__pf) {}
- _Ret operator()(const _Tp* __p, _Arg __x) const
- { return (__p->*_M_f)(__x); }
-private:
- _Ret (_Tp::*_M_f)(_Arg) const;
-};
-
-template <class _Ret, class _Tp, class _Arg>
-class mem_fun1_ref_t : public binary_function<_Tp,_Arg,_Ret> {
-public:
- explicit mem_fun1_ref_t(_Ret (_Tp::*__pf)(_Arg)) : _M_f(__pf) {}
- _Ret operator()(_Tp& __r, _Arg __x) const { return (__r.*_M_f)(__x); }
-private:
- _Ret (_Tp::*_M_f)(_Arg);
-};
-
-template <class _Ret, class _Tp, class _Arg>
-class const_mem_fun1_ref_t : public binary_function<_Tp,_Arg,_Ret> {
-public:
- explicit const_mem_fun1_ref_t(_Ret (_Tp::*__pf)(_Arg) const) : _M_f(__pf) {}
- _Ret operator()(const _Tp& __r, _Arg __x) const { return (__r.*_M_f)(__x); }
-private:
- _Ret (_Tp::*_M_f)(_Arg) const;
-};
-
-#ifdef __STL_CLASS_PARTIAL_SPECIALIZATION
-
-template <class _Tp>
-class mem_fun_t<void, _Tp> : public unary_function<_Tp*,void> {
-public:
- explicit mem_fun_t(void (_Tp::*__pf)()) : _M_f(__pf) {}
- void operator()(_Tp* __p) const { (__p->*_M_f)(); }
-private:
- void (_Tp::*_M_f)();
-};
-
-template <class _Tp>
-class const_mem_fun_t<void, _Tp> : public unary_function<const _Tp*,void> {
-public:
- explicit const_mem_fun_t(void (_Tp::*__pf)() const) : _M_f(__pf) {}
- void operator()(const _Tp* __p) const { (__p->*_M_f)(); }
-private:
- void (_Tp::*_M_f)() const;
-};
-
-template <class _Tp>
-class mem_fun_ref_t<void, _Tp> : public unary_function<_Tp,void> {
-public:
- explicit mem_fun_ref_t(void (_Tp::*__pf)()) : _M_f(__pf) {}
- void operator()(_Tp& __r) const { (__r.*_M_f)(); }
-private:
- void (_Tp::*_M_f)();
-};
-
-template <class _Tp>
-class const_mem_fun_ref_t<void, _Tp> : public unary_function<_Tp,void> {
-public:
- explicit const_mem_fun_ref_t(void (_Tp::*__pf)() const) : _M_f(__pf) {}
- void operator()(const _Tp& __r) const { (__r.*_M_f)(); }
-private:
- void (_Tp::*_M_f)() const;
-};
-
-template <class _Tp, class _Arg>
-class mem_fun1_t<void, _Tp, _Arg> : public binary_function<_Tp*,_Arg,void> {
-public:
- explicit mem_fun1_t(void (_Tp::*__pf)(_Arg)) : _M_f(__pf) {}
- void operator()(_Tp* __p, _Arg __x) const { (__p->*_M_f)(__x); }
-private:
- void (_Tp::*_M_f)(_Arg);
-};
-
-template <class _Tp, class _Arg>
-class const_mem_fun1_t<void, _Tp, _Arg>
- : public binary_function<const _Tp*,_Arg,void> {
-public:
- explicit const_mem_fun1_t(void (_Tp::*__pf)(_Arg) const) : _M_f(__pf) {}
- void operator()(const _Tp* __p, _Arg __x) const { (__p->*_M_f)(__x); }
-private:
- void (_Tp::*_M_f)(_Arg) const;
-};
-
-template <class _Tp, class _Arg>
-class mem_fun1_ref_t<void, _Tp, _Arg>
- : public binary_function<_Tp,_Arg,void> {
-public:
- explicit mem_fun1_ref_t(void (_Tp::*__pf)(_Arg)) : _M_f(__pf) {}
- void operator()(_Tp& __r, _Arg __x) const { (__r.*_M_f)(__x); }
-private:
- void (_Tp::*_M_f)(_Arg);
-};
-
-template <class _Tp, class _Arg>
-class const_mem_fun1_ref_t<void, _Tp, _Arg>
- : public binary_function<_Tp,_Arg,void> {
-public:
- explicit const_mem_fun1_ref_t(void (_Tp::*__pf)(_Arg) const) : _M_f(__pf) {}
- void operator()(const _Tp& __r, _Arg __x) const { (__r.*_M_f)(__x); }
-private:
- void (_Tp::*_M_f)(_Arg) const;
-};
-
-#endif /* __STL_CLASS_PARTIAL_SPECIALIZATION */
-
-// Mem_fun adaptor helper functions. There are only two:
-// mem_fun and mem_fun_ref. (mem_fun1 and mem_fun1_ref
-// are provided for backward compatibility, but they are no longer
-// part of the C++ standard.)
-
-template <class _Ret, class _Tp>
-inline mem_fun_t<_Ret,_Tp> mem_fun(_Ret (_Tp::*__f)())
- { return mem_fun_t<_Ret,_Tp>(__f); }
-
-template <class _Ret, class _Tp>
-inline const_mem_fun_t<_Ret,_Tp> mem_fun(_Ret (_Tp::*__f)() const)
- { return const_mem_fun_t<_Ret,_Tp>(__f); }
-
-template <class _Ret, class _Tp>
-inline mem_fun_ref_t<_Ret,_Tp> mem_fun_ref(_Ret (_Tp::*__f)())
- { return mem_fun_ref_t<_Ret,_Tp>(__f); }
-
-template <class _Ret, class _Tp>
-inline const_mem_fun_ref_t<_Ret,_Tp> mem_fun_ref(_Ret (_Tp::*__f)() const)
- { return const_mem_fun_ref_t<_Ret,_Tp>(__f); }
-
-template <class _Ret, class _Tp, class _Arg>
-inline mem_fun1_t<_Ret,_Tp,_Arg> mem_fun(_Ret (_Tp::*__f)(_Arg))
- { return mem_fun1_t<_Ret,_Tp,_Arg>(__f); }
-
-template <class _Ret, class _Tp, class _Arg>
-inline const_mem_fun1_t<_Ret,_Tp,_Arg> mem_fun(_Ret (_Tp::*__f)(_Arg) const)
- { return const_mem_fun1_t<_Ret,_Tp,_Arg>(__f); }
-
-template <class _Ret, class _Tp, class _Arg>
-inline mem_fun1_ref_t<_Ret,_Tp,_Arg> mem_fun_ref(_Ret (_Tp::*__f)(_Arg))
- { return mem_fun1_ref_t<_Ret,_Tp,_Arg>(__f); }
-
-template <class _Ret, class _Tp, class _Arg>
-inline const_mem_fun1_ref_t<_Ret,_Tp,_Arg>
-mem_fun_ref(_Ret (_Tp::*__f)(_Arg) const)
- { return const_mem_fun1_ref_t<_Ret,_Tp,_Arg>(__f); }
-
-template <class _Ret, class _Tp, class _Arg>
-inline mem_fun1_t<_Ret,_Tp,_Arg> mem_fun1(_Ret (_Tp::*__f)(_Arg))
- { return mem_fun1_t<_Ret,_Tp,_Arg>(__f); }
-
-template <class _Ret, class _Tp, class _Arg>
-inline const_mem_fun1_t<_Ret,_Tp,_Arg> mem_fun1(_Ret (_Tp::*__f)(_Arg) const)
- { return const_mem_fun1_t<_Ret,_Tp,_Arg>(__f); }
-
-template <class _Ret, class _Tp, class _Arg>
-inline mem_fun1_ref_t<_Ret,_Tp,_Arg> mem_fun1_ref(_Ret (_Tp::*__f)(_Arg))
- { return mem_fun1_ref_t<_Ret,_Tp,_Arg>(__f); }
-
-template <class _Ret, class _Tp, class _Arg>
-inline const_mem_fun1_ref_t<_Ret,_Tp,_Arg>
-mem_fun1_ref(_Ret (_Tp::*__f)(_Arg) const)
- { return const_mem_fun1_ref_t<_Ret,_Tp,_Arg>(__f); }
-
-__STL_END_NAMESPACE
-
-#endif /* __SGI_STL_INTERNAL_FUNCTION_H */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/stl_hash_fun.h b/contrib/libstdc++/stl/stl_hash_fun.h
deleted file mode 100644
index 44ab9bb56793..000000000000
--- a/contrib/libstdc++/stl/stl_hash_fun.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright (c) 1996-1998
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-/* NOTE: This is an internal header file, included by other STL headers.
- * You should not attempt to use it directly.
- */
-
-#ifndef __SGI_STL_HASH_FUN_H
-#define __SGI_STL_HASH_FUN_H
-
-#include <stddef.h>
-
-__STL_BEGIN_NAMESPACE
-
-template <class _Key> struct hash { };
-
-inline size_t __stl_hash_string(const char* __s)
-{
- unsigned long __h = 0;
- for ( ; *__s; ++__s)
- __h = 5*__h + *__s;
-
- return size_t(__h);
-}
-
-__STL_TEMPLATE_NULL struct hash<char*>
-{
- size_t operator()(const char* __s) const { return __stl_hash_string(__s); }
-};
-
-__STL_TEMPLATE_NULL struct hash<const char*>
-{
- size_t operator()(const char* __s) const { return __stl_hash_string(__s); }
-};
-
-__STL_TEMPLATE_NULL struct hash<char> {
- size_t operator()(char __x) const { return __x; }
-};
-__STL_TEMPLATE_NULL struct hash<unsigned char> {
- size_t operator()(unsigned char __x) const { return __x; }
-};
-__STL_TEMPLATE_NULL struct hash<signed char> {
- size_t operator()(unsigned char __x) const { return __x; }
-};
-__STL_TEMPLATE_NULL struct hash<short> {
- size_t operator()(short __x) const { return __x; }
-};
-__STL_TEMPLATE_NULL struct hash<unsigned short> {
- size_t operator()(unsigned short __x) const { return __x; }
-};
-__STL_TEMPLATE_NULL struct hash<int> {
- size_t operator()(int __x) const { return __x; }
-};
-__STL_TEMPLATE_NULL struct hash<unsigned int> {
- size_t operator()(unsigned int __x) const { return __x; }
-};
-__STL_TEMPLATE_NULL struct hash<long> {
- size_t operator()(long __x) const { return __x; }
-};
-__STL_TEMPLATE_NULL struct hash<unsigned long> {
- size_t operator()(unsigned long __x) const { return __x; }
-};
-
-__STL_END_NAMESPACE
-
-#endif /* __SGI_STL_HASH_FUN_H */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/stl_hash_map.h b/contrib/libstdc++/stl/stl_hash_map.h
deleted file mode 100644
index bf16f60ecad7..000000000000
--- a/contrib/libstdc++/stl/stl_hash_map.h
+++ /dev/null
@@ -1,416 +0,0 @@
-/*
- * Copyright (c) 1996
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-/* NOTE: This is an internal header file, included by other STL headers.
- * You should not attempt to use it directly.
- */
-
-#ifndef __SGI_STL_INTERNAL_HASH_MAP_H
-#define __SGI_STL_INTERNAL_HASH_MAP_H
-
-
-__STL_BEGIN_NAMESPACE
-
-#if defined(__sgi) && !defined(__GNUC__) && (_MIPS_SIM != _MIPS_SIM_ABI32)
-#pragma set woff 1174
-#pragma set woff 1375
-#endif
-
-#ifndef __STL_LIMITED_DEFAULT_TEMPLATES
-template <class _Key, class _Tp, class _HashFcn = hash<_Key>,
- class _EqualKey = equal_to<_Key>,
- class _Alloc = __STL_DEFAULT_ALLOCATOR(_Tp) >
-#else
-template <class _Key, class _Tp, class _HashFcn, class _EqualKey,
- class _Alloc = __STL_DEFAULT_ALLOCATOR(_Tp) >
-#endif
-class hash_map
-{
-private:
- typedef hashtable<pair<const _Key,_Tp>,_Key,_HashFcn,
- _Select1st<pair<const _Key,_Tp> >,_EqualKey,_Alloc> _Ht;
- _Ht _M_ht;
-
-public:
- typedef typename _Ht::key_type key_type;
- typedef _Tp data_type;
- typedef _Tp mapped_type;
- typedef typename _Ht::value_type value_type;
- typedef typename _Ht::hasher hasher;
- typedef typename _Ht::key_equal key_equal;
-
- typedef typename _Ht::size_type size_type;
- typedef typename _Ht::difference_type difference_type;
- typedef typename _Ht::pointer pointer;
- typedef typename _Ht::const_pointer const_pointer;
- typedef typename _Ht::reference reference;
- typedef typename _Ht::const_reference const_reference;
-
- typedef typename _Ht::iterator iterator;
- typedef typename _Ht::const_iterator const_iterator;
-
- typedef typename _Ht::allocator_type allocator_type;
-
- hasher hash_funct() const { return _M_ht.hash_funct(); }
- key_equal key_eq() const { return _M_ht.key_eq(); }
- allocator_type get_allocator() const { return _M_ht.get_allocator(); }
-
-public:
- hash_map() : _M_ht(100, hasher(), key_equal(), allocator_type()) {}
- explicit hash_map(size_type __n)
- : _M_ht(__n, hasher(), key_equal(), allocator_type()) {}
- hash_map(size_type __n, const hasher& __hf)
- : _M_ht(__n, __hf, key_equal(), allocator_type()) {}
- hash_map(size_type __n, const hasher& __hf, const key_equal& __eql,
- const allocator_type& __a = allocator_type())
- : _M_ht(__n, __hf, __eql, __a) {}
-
-#ifdef __STL_MEMBER_TEMPLATES
- template <class _InputIterator>
- hash_map(_InputIterator __f, _InputIterator __l)
- : _M_ht(100, hasher(), key_equal(), allocator_type())
- { _M_ht.insert_unique(__f, __l); }
- template <class _InputIterator>
- hash_map(_InputIterator __f, _InputIterator __l, size_type __n)
- : _M_ht(__n, hasher(), key_equal(), allocator_type())
- { _M_ht.insert_unique(__f, __l); }
- template <class _InputIterator>
- hash_map(_InputIterator __f, _InputIterator __l, size_type __n,
- const hasher& __hf)
- : _M_ht(__n, __hf, key_equal(), allocator_type())
- { _M_ht.insert_unique(__f, __l); }
- template <class _InputIterator>
- hash_map(_InputIterator __f, _InputIterator __l, size_type __n,
- const hasher& __hf, const key_equal& __eql,
- const allocator_type& __a = allocator_type())
- : _M_ht(__n, __hf, __eql, __a)
- { _M_ht.insert_unique(__f, __l); }
-
-#else
- hash_map(const value_type* __f, const value_type* __l)
- : _M_ht(100, hasher(), key_equal(), allocator_type())
- { _M_ht.insert_unique(__f, __l); }
- hash_map(const value_type* __f, const value_type* __l, size_type __n)
- : _M_ht(__n, hasher(), key_equal(), allocator_type())
- { _M_ht.insert_unique(__f, __l); }
- hash_map(const value_type* __f, const value_type* __l, size_type __n,
- const hasher& __hf)
- : _M_ht(__n, __hf, key_equal(), allocator_type())
- { _M_ht.insert_unique(__f, __l); }
- hash_map(const value_type* __f, const value_type* __l, size_type __n,
- const hasher& __hf, const key_equal& __eql,
- const allocator_type& __a = allocator_type())
- : _M_ht(__n, __hf, __eql, __a)
- { _M_ht.insert_unique(__f, __l); }
-
- hash_map(const_iterator __f, const_iterator __l)
- : _M_ht(100, hasher(), key_equal(), allocator_type())
- { _M_ht.insert_unique(__f, __l); }
- hash_map(const_iterator __f, const_iterator __l, size_type __n)
- : _M_ht(__n, hasher(), key_equal(), allocator_type())
- { _M_ht.insert_unique(__f, __l); }
- hash_map(const_iterator __f, const_iterator __l, size_type __n,
- const hasher& __hf)
- : _M_ht(__n, __hf, key_equal(), allocator_type())
- { _M_ht.insert_unique(__f, __l); }
- hash_map(const_iterator __f, const_iterator __l, size_type __n,
- const hasher& __hf, const key_equal& __eql,
- const allocator_type& __a = allocator_type())
- : _M_ht(__n, __hf, __eql, __a)
- { _M_ht.insert_unique(__f, __l); }
-#endif /*__STL_MEMBER_TEMPLATES */
-
-public:
- size_type size() const { return _M_ht.size(); }
- size_type max_size() const { return _M_ht.max_size(); }
- bool empty() const { return _M_ht.empty(); }
- void swap(hash_map& __hs) { _M_ht.swap(__hs._M_ht); }
- friend bool
- operator== __STL_NULL_TMPL_ARGS (const hash_map&, const hash_map&);
-
- iterator begin() { return _M_ht.begin(); }
- iterator end() { return _M_ht.end(); }
- const_iterator begin() const { return _M_ht.begin(); }
- const_iterator end() const { return _M_ht.end(); }
-
-public:
- pair<iterator,bool> insert(const value_type& __obj)
- { return _M_ht.insert_unique(__obj); }
-#ifdef __STL_MEMBER_TEMPLATES
- template <class _InputIterator>
- void insert(_InputIterator __f, _InputIterator __l)
- { _M_ht.insert_unique(__f,__l); }
-#else
- void insert(const value_type* __f, const value_type* __l) {
- _M_ht.insert_unique(__f,__l);
- }
- void insert(const_iterator __f, const_iterator __l)
- { _M_ht.insert_unique(__f, __l); }
-#endif /*__STL_MEMBER_TEMPLATES */
- pair<iterator,bool> insert_noresize(const value_type& __obj)
- { return _M_ht.insert_unique_noresize(__obj); }
-
- iterator find(const key_type& __key) { return _M_ht.find(__key); }
- const_iterator find(const key_type& __key) const
- { return _M_ht.find(__key); }
-
- _Tp& operator[](const key_type& __key) {
- return _M_ht.find_or_insert(value_type(__key, _Tp())).second;
- }
-
- size_type count(const key_type& __key) const { return _M_ht.count(__key); }
-
- pair<iterator, iterator> equal_range(const key_type& __key)
- { return _M_ht.equal_range(__key); }
- pair<const_iterator, const_iterator>
- equal_range(const key_type& __key) const
- { return _M_ht.equal_range(__key); }
-
- size_type erase(const key_type& __key) {return _M_ht.erase(__key); }
- void erase(iterator __it) { _M_ht.erase(__it); }
- void erase(iterator __f, iterator __l) { _M_ht.erase(__f, __l); }
- void clear() { _M_ht.clear(); }
-
- void resize(size_type __hint) { _M_ht.resize(__hint); }
- size_type bucket_count() const { return _M_ht.bucket_count(); }
- size_type max_bucket_count() const { return _M_ht.max_bucket_count(); }
- size_type elems_in_bucket(size_type __n) const
- { return _M_ht.elems_in_bucket(__n); }
-};
-
-template <class _Key, class _Tp, class _HashFcn, class _EqlKey, class _Alloc>
-inline bool
-operator==(const hash_map<_Key,_Tp,_HashFcn,_EqlKey,_Alloc>& __hm1,
- const hash_map<_Key,_Tp,_HashFcn,_EqlKey,_Alloc>& __hm2)
-{
- return __hm1._M_ht == __hm2._M_ht;
-}
-
-#ifdef __STL_FUNCTION_TMPL_PARTIAL_ORDER
-
-template <class _Key, class _Tp, class _HashFcn, class _EqlKey, class _Alloc>
-inline void
-swap(hash_map<_Key,_Tp,_HashFcn,_EqlKey,_Alloc>& __hm1,
- hash_map<_Key,_Tp,_HashFcn,_EqlKey,_Alloc>& __hm2)
-{
- __hm1.swap(__hm2);
-}
-
-#endif /* __STL_FUNCTION_TMPL_PARTIAL_ORDER */
-
-#ifndef __STL_LIMITED_DEFAULT_TEMPLATES
-template <class _Key, class _Tp, class _HashFcn = hash<_Key>,
- class _EqualKey = equal_to<_Key>,
- class _Alloc = __STL_DEFAULT_ALLOCATOR(_Tp) >
-#else
-template <class _Key, class _Tp, class _HashFcn, class _EqualKey,
- class _Alloc = __STL_DEFAULT_ALLOCATOR(_Tp) >
-#endif
-class hash_multimap
-{
-private:
- typedef hashtable<pair<const _Key, _Tp>, _Key, _HashFcn,
- _Select1st<pair<const _Key, _Tp> >, _EqualKey, _Alloc>
- _Ht;
- _Ht _M_ht;
-
-public:
- typedef typename _Ht::key_type key_type;
- typedef _Tp data_type;
- typedef _Tp mapped_type;
- typedef typename _Ht::value_type value_type;
- typedef typename _Ht::hasher hasher;
- typedef typename _Ht::key_equal key_equal;
-
- typedef typename _Ht::size_type size_type;
- typedef typename _Ht::difference_type difference_type;
- typedef typename _Ht::pointer pointer;
- typedef typename _Ht::const_pointer const_pointer;
- typedef typename _Ht::reference reference;
- typedef typename _Ht::const_reference const_reference;
-
- typedef typename _Ht::iterator iterator;
- typedef typename _Ht::const_iterator const_iterator;
-
- typedef typename _Ht::allocator_type allocator_type;
-
- hasher hash_funct() const { return _M_ht.hash_funct(); }
- key_equal key_eq() const { return _M_ht.key_eq(); }
- allocator_type get_allocator() const { return _M_ht.get_allocator(); }
-
-public:
- hash_multimap() : _M_ht(100, hasher(), key_equal(), allocator_type()) {}
- explicit hash_multimap(size_type __n)
- : _M_ht(__n, hasher(), key_equal(), allocator_type()) {}
- hash_multimap(size_type __n, const hasher& __hf)
- : _M_ht(__n, __hf, key_equal(), allocator_type()) {}
- hash_multimap(size_type __n, const hasher& __hf, const key_equal& __eql,
- const allocator_type& __a = allocator_type())
- : _M_ht(__n, __hf, __eql, __a) {}
-
-#ifdef __STL_MEMBER_TEMPLATES
- template <class _InputIterator>
- hash_multimap(_InputIterator __f, _InputIterator __l)
- : _M_ht(100, hasher(), key_equal(), allocator_type())
- { _M_ht.insert_equal(__f, __l); }
- template <class _InputIterator>
- hash_multimap(_InputIterator __f, _InputIterator __l, size_type __n)
- : _M_ht(__n, hasher(), key_equal(), allocator_type())
- { _M_ht.insert_equal(__f, __l); }
- template <class _InputIterator>
- hash_multimap(_InputIterator __f, _InputIterator __l, size_type __n,
- const hasher& __hf)
- : _M_ht(__n, __hf, key_equal(), allocator_type())
- { _M_ht.insert_equal(__f, __l); }
- template <class _InputIterator>
- hash_multimap(_InputIterator __f, _InputIterator __l, size_type __n,
- const hasher& __hf, const key_equal& __eql,
- const allocator_type& __a = allocator_type())
- : _M_ht(__n, __hf, __eql, __a)
- { _M_ht.insert_equal(__f, __l); }
-
-#else
- hash_multimap(const value_type* __f, const value_type* __l)
- : _M_ht(100, hasher(), key_equal(), allocator_type())
- { _M_ht.insert_equal(__f, __l); }
- hash_multimap(const value_type* __f, const value_type* __l, size_type __n)
- : _M_ht(__n, hasher(), key_equal(), allocator_type())
- { _M_ht.insert_equal(__f, __l); }
- hash_multimap(const value_type* __f, const value_type* __l, size_type __n,
- const hasher& __hf)
- : _M_ht(__n, __hf, key_equal(), allocator_type())
- { _M_ht.insert_equal(__f, __l); }
- hash_multimap(const value_type* __f, const value_type* __l, size_type __n,
- const hasher& __hf, const key_equal& __eql,
- const allocator_type& __a = allocator_type())
- : _M_ht(__n, __hf, __eql, __a)
- { _M_ht.insert_equal(__f, __l); }
-
- hash_multimap(const_iterator __f, const_iterator __l)
- : _M_ht(100, hasher(), key_equal(), allocator_type())
- { _M_ht.insert_equal(__f, __l); }
- hash_multimap(const_iterator __f, const_iterator __l, size_type __n)
- : _M_ht(__n, hasher(), key_equal(), allocator_type())
- { _M_ht.insert_equal(__f, __l); }
- hash_multimap(const_iterator __f, const_iterator __l, size_type __n,
- const hasher& __hf)
- : _M_ht(__n, __hf, key_equal(), allocator_type())
- { _M_ht.insert_equal(__f, __l); }
- hash_multimap(const_iterator __f, const_iterator __l, size_type __n,
- const hasher& __hf, const key_equal& __eql,
- const allocator_type& __a = allocator_type())
- : _M_ht(__n, __hf, __eql, __a)
- { _M_ht.insert_equal(__f, __l); }
-#endif /*__STL_MEMBER_TEMPLATES */
-
-public:
- size_type size() const { return _M_ht.size(); }
- size_type max_size() const { return _M_ht.max_size(); }
- bool empty() const { return _M_ht.empty(); }
- void swap(hash_multimap& __hs) { _M_ht.swap(__hs._M_ht); }
- friend bool
- operator== __STL_NULL_TMPL_ARGS (const hash_multimap&,
- const hash_multimap&);
-
- iterator begin() { return _M_ht.begin(); }
- iterator end() { return _M_ht.end(); }
- const_iterator begin() const { return _M_ht.begin(); }
- const_iterator end() const { return _M_ht.end(); }
-
-public:
- iterator insert(const value_type& __obj)
- { return _M_ht.insert_equal(__obj); }
-#ifdef __STL_MEMBER_TEMPLATES
- template <class _InputIterator>
- void insert(_InputIterator __f, _InputIterator __l)
- { _M_ht.insert_equal(__f,__l); }
-#else
- void insert(const value_type* __f, const value_type* __l) {
- _M_ht.insert_equal(__f,__l);
- }
- void insert(const_iterator __f, const_iterator __l)
- { _M_ht.insert_equal(__f, __l); }
-#endif /*__STL_MEMBER_TEMPLATES */
- iterator insert_noresize(const value_type& __obj)
- { return _M_ht.insert_equal_noresize(__obj); }
-
- iterator find(const key_type& __key) { return _M_ht.find(__key); }
- const_iterator find(const key_type& __key) const
- { return _M_ht.find(__key); }
-
- size_type count(const key_type& __key) const { return _M_ht.count(__key); }
-
- pair<iterator, iterator> equal_range(const key_type& __key)
- { return _M_ht.equal_range(__key); }
- pair<const_iterator, const_iterator>
- equal_range(const key_type& __key) const
- { return _M_ht.equal_range(__key); }
-
- size_type erase(const key_type& __key) {return _M_ht.erase(__key); }
- void erase(iterator __it) { _M_ht.erase(__it); }
- void erase(iterator __f, iterator __l) { _M_ht.erase(__f, __l); }
- void clear() { _M_ht.clear(); }
-
-public:
- void resize(size_type __hint) { _M_ht.resize(__hint); }
- size_type bucket_count() const { return _M_ht.bucket_count(); }
- size_type max_bucket_count() const { return _M_ht.max_bucket_count(); }
- size_type elems_in_bucket(size_type __n) const
- { return _M_ht.elems_in_bucket(__n); }
-};
-
-template <class _Key, class _Tp, class _HF, class _EqKey, class _Alloc>
-inline bool
-operator==(const hash_multimap<_Key,_Tp,_HF,_EqKey,_Alloc>& __hm1,
- const hash_multimap<_Key,_Tp,_HF,_EqKey,_Alloc>& __hm2)
-{
- return __hm1._M_ht == __hm2._M_ht;
-}
-
-#ifdef __STL_FUNCTION_TMPL_PARTIAL_ORDER
-
-template <class _Key, class _Tp, class _HashFcn, class _EqlKey, class _Alloc>
-inline void
-swap(hash_multimap<_Key,_Tp,_HashFcn,_EqlKey,_Alloc>& __hm1,
- hash_multimap<_Key,_Tp,_HashFcn,_EqlKey,_Alloc>& __hm2)
-{
- __hm1.swap(__hm2);
-}
-
-#endif /* __STL_FUNCTION_TMPL_PARTIAL_ORDER */
-
-#if defined(__sgi) && !defined(__GNUC__) && (_MIPS_SIM != _MIPS_SIM_ABI32)
-#pragma reset woff 1174
-#pragma reset woff 1375
-#endif
-
-__STL_END_NAMESPACE
-
-#endif /* __SGI_STL_INTERNAL_HASH_MAP_H */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/stl_hash_set.h b/contrib/libstdc++/stl/stl_hash_set.h
deleted file mode 100644
index b623a642cfc0..000000000000
--- a/contrib/libstdc++/stl/stl_hash_set.h
+++ /dev/null
@@ -1,401 +0,0 @@
-/*
- * Copyright (c) 1996
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-/* NOTE: This is an internal header file, included by other STL headers.
- * You should not attempt to use it directly.
- */
-
-#ifndef __SGI_STL_INTERNAL_HASH_SET_H
-#define __SGI_STL_INTERNAL_HASH_SET_H
-
-__STL_BEGIN_NAMESPACE
-
-#if defined(__sgi) && !defined(__GNUC__) && (_MIPS_SIM != _MIPS_SIM_ABI32)
-#pragma set woff 1174
-#pragma set woff 1375
-#endif
-
-#ifndef __STL_LIMITED_DEFAULT_TEMPLATES
-template <class _Value, class _HashFcn = hash<_Value>,
- class _EqualKey = equal_to<_Value>,
- class _Alloc = __STL_DEFAULT_ALLOCATOR(_Value) >
-#else
-template <class _Value, class _HashFcn, class _EqualKey,
- class _Alloc = __STL_DEFAULT_ALLOCATOR(_Value) >
-#endif
-class hash_set
-{
-private:
- typedef hashtable<_Value, _Value, _HashFcn, _Identity<_Value>,
- _EqualKey, _Alloc> _Ht;
- _Ht _M_ht;
-
-public:
- typedef typename _Ht::key_type key_type;
- typedef typename _Ht::value_type value_type;
- typedef typename _Ht::hasher hasher;
- typedef typename _Ht::key_equal key_equal;
-
- typedef typename _Ht::size_type size_type;
- typedef typename _Ht::difference_type difference_type;
- typedef typename _Ht::const_pointer pointer;
- typedef typename _Ht::const_pointer const_pointer;
- typedef typename _Ht::const_reference reference;
- typedef typename _Ht::const_reference const_reference;
-
- typedef typename _Ht::const_iterator iterator;
- typedef typename _Ht::const_iterator const_iterator;
-
- typedef typename _Ht::allocator_type allocator_type;
-
- hasher hash_funct() const { return _M_ht.hash_funct(); }
- key_equal key_eq() const { return _M_ht.key_eq(); }
- allocator_type get_allocator() const { return _M_ht.get_allocator(); }
-
-public:
- hash_set()
- : _M_ht(100, hasher(), key_equal(), allocator_type()) {}
- explicit hash_set(size_type __n)
- : _M_ht(__n, hasher(), key_equal(), allocator_type()) {}
- hash_set(size_type __n, const hasher& __hf)
- : _M_ht(__n, __hf, key_equal(), allocator_type()) {}
- hash_set(size_type __n, const hasher& __hf, const key_equal& __eql,
- const allocator_type& __a = allocator_type())
- : _M_ht(__n, __hf, __eql, __a) {}
-
-#ifdef __STL_MEMBER_TEMPLATES
- template <class _InputIterator>
- hash_set(_InputIterator __f, _InputIterator __l)
- : _M_ht(100, hasher(), key_equal(), allocator_type())
- { _M_ht.insert_unique(__f, __l); }
- template <class _InputIterator>
- hash_set(_InputIterator __f, _InputIterator __l, size_type __n)
- : _M_ht(__n, hasher(), key_equal(), allocator_type())
- { _M_ht.insert_unique(__f, __l); }
- template <class _InputIterator>
- hash_set(_InputIterator __f, _InputIterator __l, size_type __n,
- const hasher& __hf)
- : _M_ht(__n, __hf, key_equal(), allocator_type())
- { _M_ht.insert_unique(__f, __l); }
- template <class _InputIterator>
- hash_set(_InputIterator __f, _InputIterator __l, size_type __n,
- const hasher& __hf, const key_equal& __eql,
- const allocator_type& __a = allocator_type())
- : _M_ht(__n, __hf, __eql, __a)
- { _M_ht.insert_unique(__f, __l); }
-#else
-
- hash_set(const value_type* __f, const value_type* __l)
- : _M_ht(100, hasher(), key_equal(), allocator_type())
- { _M_ht.insert_unique(__f, __l); }
- hash_set(const value_type* __f, const value_type* __l, size_type __n)
- : _M_ht(__n, hasher(), key_equal(), allocator_type())
- { _M_ht.insert_unique(__f, __l); }
- hash_set(const value_type* __f, const value_type* __l, size_type __n,
- const hasher& __hf)
- : _M_ht(__n, __hf, key_equal(), allocator_type())
- { _M_ht.insert_unique(__f, __l); }
- hash_set(const value_type* __f, const value_type* __l, size_type __n,
- const hasher& __hf, const key_equal& __eql,
- const allocator_type& __a = allocator_type())
- : _M_ht(__n, __hf, __eql, __a)
- { _M_ht.insert_unique(__f, __l); }
-
- hash_set(const_iterator __f, const_iterator __l)
- : _M_ht(100, hasher(), key_equal(), allocator_type())
- { _M_ht.insert_unique(__f, __l); }
- hash_set(const_iterator __f, const_iterator __l, size_type __n)
- : _M_ht(__n, hasher(), key_equal(), allocator_type())
- { _M_ht.insert_unique(__f, __l); }
- hash_set(const_iterator __f, const_iterator __l, size_type __n,
- const hasher& __hf)
- : _M_ht(__n, __hf, key_equal(), allocator_type())
- { _M_ht.insert_unique(__f, __l); }
- hash_set(const_iterator __f, const_iterator __l, size_type __n,
- const hasher& __hf, const key_equal& __eql,
- const allocator_type& __a = allocator_type())
- : _M_ht(__n, __hf, __eql, __a)
- { _M_ht.insert_unique(__f, __l); }
-#endif /*__STL_MEMBER_TEMPLATES */
-
-public:
- size_type size() const { return _M_ht.size(); }
- size_type max_size() const { return _M_ht.max_size(); }
- bool empty() const { return _M_ht.empty(); }
- void swap(hash_set& __hs) { _M_ht.swap(__hs._M_ht); }
- friend bool operator== __STL_NULL_TMPL_ARGS (const hash_set&,
- const hash_set&);
-
- iterator begin() const { return _M_ht.begin(); }
- iterator end() const { return _M_ht.end(); }
-
-public:
- pair<iterator, bool> insert(const value_type& __obj)
- {
- pair<typename _Ht::iterator, bool> __p = _M_ht.insert_unique(__obj);
- return pair<iterator,bool>(__p.first, __p.second);
- }
-#ifdef __STL_MEMBER_TEMPLATES
- template <class _InputIterator>
- void insert(_InputIterator __f, _InputIterator __l)
- { _M_ht.insert_unique(__f,__l); }
-#else
- void insert(const value_type* __f, const value_type* __l) {
- _M_ht.insert_unique(__f,__l);
- }
- void insert(const_iterator __f, const_iterator __l)
- {_M_ht.insert_unique(__f, __l); }
-#endif /*__STL_MEMBER_TEMPLATES */
- pair<iterator, bool> insert_noresize(const value_type& __obj)
- {
- pair<typename _Ht::iterator, bool> __p =
- _M_ht.insert_unique_noresize(__obj);
- return pair<iterator, bool>(__p.first, __p.second);
- }
-
- iterator find(const key_type& __key) const { return _M_ht.find(__key); }
-
- size_type count(const key_type& __key) const { return _M_ht.count(__key); }
-
- pair<iterator, iterator> equal_range(const key_type& __key) const
- { return _M_ht.equal_range(__key); }
-
- size_type erase(const key_type& __key) {return _M_ht.erase(__key); }
- void erase(iterator __it) { _M_ht.erase(__it); }
- void erase(iterator __f, iterator __l) { _M_ht.erase(__f, __l); }
- void clear() { _M_ht.clear(); }
-
-public:
- void resize(size_type __hint) { _M_ht.resize(__hint); }
- size_type bucket_count() const { return _M_ht.bucket_count(); }
- size_type max_bucket_count() const { return _M_ht.max_bucket_count(); }
- size_type elems_in_bucket(size_type __n) const
- { return _M_ht.elems_in_bucket(__n); }
-};
-
-template <class _Value, class _HashFcn, class _EqualKey, class _Alloc>
-inline bool
-operator==(const hash_set<_Value,_HashFcn,_EqualKey,_Alloc>& __hs1,
- const hash_set<_Value,_HashFcn,_EqualKey,_Alloc>& __hs2)
-{
- return __hs1._M_ht == __hs2._M_ht;
-}
-
-#ifdef __STL_FUNCTION_TMPL_PARTIAL_ORDER
-
-template <class _Val, class _HashFcn, class _EqualKey, class _Alloc>
-inline void
-swap(hash_set<_Val,_HashFcn,_EqualKey,_Alloc>& __hs1,
- hash_set<_Val,_HashFcn,_EqualKey,_Alloc>& __hs2)
-{
- __hs1.swap(__hs2);
-}
-
-#endif /* __STL_FUNCTION_TMPL_PARTIAL_ORDER */
-
-
-#ifndef __STL_LIMITED_DEFAULT_TEMPLATES
-template <class _Value, class _HashFcn = hash<_Value>,
- class _EqualKey = equal_to<_Value>,
- class _Alloc = __STL_DEFAULT_ALLOCATOR(_Value) >
-#else
-template <class _Value, class _HashFcn, class _EqualKey,
- class _Alloc = __STL_DEFAULT_ALLOCATOR(_Value) >
-#endif
-class hash_multiset
-{
-private:
- typedef hashtable<_Value, _Value, _HashFcn, _Identity<_Value>,
- _EqualKey, _Alloc> _Ht;
- _Ht _M_ht;
-
-public:
- typedef typename _Ht::key_type key_type;
- typedef typename _Ht::value_type value_type;
- typedef typename _Ht::hasher hasher;
- typedef typename _Ht::key_equal key_equal;
-
- typedef typename _Ht::size_type size_type;
- typedef typename _Ht::difference_type difference_type;
- typedef typename _Ht::const_pointer pointer;
- typedef typename _Ht::const_pointer const_pointer;
- typedef typename _Ht::const_reference reference;
- typedef typename _Ht::const_reference const_reference;
-
- typedef typename _Ht::const_iterator iterator;
- typedef typename _Ht::const_iterator const_iterator;
-
- typedef typename _Ht::allocator_type allocator_type;
-
- hasher hash_funct() const { return _M_ht.hash_funct(); }
- key_equal key_eq() const { return _M_ht.key_eq(); }
- allocator_type get_allocator() const { return _M_ht.get_allocator(); }
-
-public:
- hash_multiset()
- : _M_ht(100, hasher(), key_equal(), allocator_type()) {}
- explicit hash_multiset(size_type __n)
- : _M_ht(__n, hasher(), key_equal(), allocator_type()) {}
- hash_multiset(size_type __n, const hasher& __hf)
- : _M_ht(__n, __hf, key_equal(), allocator_type()) {}
- hash_multiset(size_type __n, const hasher& __hf, const key_equal& __eql,
- const allocator_type& __a = allocator_type())
- : _M_ht(__n, __hf, __eql, __a) {}
-
-#ifdef __STL_MEMBER_TEMPLATES
- template <class _InputIterator>
- hash_multiset(_InputIterator __f, _InputIterator __l)
- : _M_ht(100, hasher(), key_equal(), allocator_type())
- { _M_ht.insert_equal(__f, __l); }
- template <class _InputIterator>
- hash_multiset(_InputIterator __f, _InputIterator __l, size_type __n)
- : _M_ht(__n, hasher(), key_equal(), allocator_type())
- { _M_ht.insert_equal(__f, __l); }
- template <class _InputIterator>
- hash_multiset(_InputIterator __f, _InputIterator __l, size_type __n,
- const hasher& __hf)
- : _M_ht(__n, __hf, key_equal(), allocator_type())
- { _M_ht.insert_equal(__f, __l); }
- template <class _InputIterator>
- hash_multiset(_InputIterator __f, _InputIterator __l, size_type __n,
- const hasher& __hf, const key_equal& __eql,
- const allocator_type& __a = allocator_type())
- : _M_ht(__n, __hf, __eql, __a)
- { _M_ht.insert_equal(__f, __l); }
-#else
-
- hash_multiset(const value_type* __f, const value_type* __l)
- : _M_ht(100, hasher(), key_equal(), allocator_type())
- { _M_ht.insert_equal(__f, __l); }
- hash_multiset(const value_type* __f, const value_type* __l, size_type __n)
- : _M_ht(__n, hasher(), key_equal(), allocator_type())
- { _M_ht.insert_equal(__f, __l); }
- hash_multiset(const value_type* __f, const value_type* __l, size_type __n,
- const hasher& __hf)
- : _M_ht(__n, __hf, key_equal(), allocator_type())
- { _M_ht.insert_equal(__f, __l); }
- hash_multiset(const value_type* __f, const value_type* __l, size_type __n,
- const hasher& __hf, const key_equal& __eql,
- const allocator_type& __a = allocator_type())
- : _M_ht(__n, __hf, __eql, __a)
- { _M_ht.insert_equal(__f, __l); }
-
- hash_multiset(const_iterator __f, const_iterator __l)
- : _M_ht(100, hasher(), key_equal(), allocator_type())
- { _M_ht.insert_equal(__f, __l); }
- hash_multiset(const_iterator __f, const_iterator __l, size_type __n)
- : _M_ht(__n, hasher(), key_equal(), allocator_type())
- { _M_ht.insert_equal(__f, __l); }
- hash_multiset(const_iterator __f, const_iterator __l, size_type __n,
- const hasher& __hf)
- : _M_ht(__n, __hf, key_equal(), allocator_type())
- { _M_ht.insert_equal(__f, __l); }
- hash_multiset(const_iterator __f, const_iterator __l, size_type __n,
- const hasher& __hf, const key_equal& __eql,
- const allocator_type& __a = allocator_type())
- : _M_ht(__n, __hf, __eql, __a)
- { _M_ht.insert_equal(__f, __l); }
-#endif /*__STL_MEMBER_TEMPLATES */
-
-public:
- size_type size() const { return _M_ht.size(); }
- size_type max_size() const { return _M_ht.max_size(); }
- bool empty() const { return _M_ht.empty(); }
- void swap(hash_multiset& hs) { _M_ht.swap(hs._M_ht); }
- friend bool operator== __STL_NULL_TMPL_ARGS (const hash_multiset&,
- const hash_multiset&);
-
- iterator begin() const { return _M_ht.begin(); }
- iterator end() const { return _M_ht.end(); }
-
-public:
- iterator insert(const value_type& __obj)
- { return _M_ht.insert_equal(__obj); }
-#ifdef __STL_MEMBER_TEMPLATES
- template <class _InputIterator>
- void insert(_InputIterator __f, _InputIterator __l)
- { _M_ht.insert_equal(__f,__l); }
-#else
- void insert(const value_type* __f, const value_type* __l) {
- _M_ht.insert_equal(__f,__l);
- }
- void insert(const_iterator __f, const_iterator __l)
- { _M_ht.insert_equal(__f, __l); }
-#endif /*__STL_MEMBER_TEMPLATES */
- iterator insert_noresize(const value_type& __obj)
- { return _M_ht.insert_equal_noresize(__obj); }
-
- iterator find(const key_type& __key) const { return _M_ht.find(__key); }
-
- size_type count(const key_type& __key) const { return _M_ht.count(__key); }
-
- pair<iterator, iterator> equal_range(const key_type& __key) const
- { return _M_ht.equal_range(__key); }
-
- size_type erase(const key_type& __key) {return _M_ht.erase(__key); }
- void erase(iterator __it) { _M_ht.erase(__it); }
- void erase(iterator __f, iterator __l) { _M_ht.erase(__f, __l); }
- void clear() { _M_ht.clear(); }
-
-public:
- void resize(size_type __hint) { _M_ht.resize(__hint); }
- size_type bucket_count() const { return _M_ht.bucket_count(); }
- size_type max_bucket_count() const { return _M_ht.max_bucket_count(); }
- size_type elems_in_bucket(size_type __n) const
- { return _M_ht.elems_in_bucket(__n); }
-};
-
-template <class _Val, class _HashFcn, class _EqualKey, class _Alloc>
-inline bool
-operator==(const hash_multiset<_Val,_HashFcn,_EqualKey,_Alloc>& __hs1,
- const hash_multiset<_Val,_HashFcn,_EqualKey,_Alloc>& __hs2)
-{
- return __hs1._M_ht == __hs2._M_ht;
-}
-
-#ifdef __STL_FUNCTION_TMPL_PARTIAL_ORDER
-
-template <class _Val, class _HashFcn, class _EqualKey, class _Alloc>
-inline void
-swap(hash_multiset<_Val,_HashFcn,_EqualKey,_Alloc>& __hs1,
- hash_multiset<_Val,_HashFcn,_EqualKey,_Alloc>& __hs2) {
- __hs1.swap(__hs2);
-}
-
-#endif /* __STL_FUNCTION_TMPL_PARTIAL_ORDER */
-
-#if defined(__sgi) && !defined(__GNUC__) && (_MIPS_SIM != _MIPS_SIM_ABI32)
-#pragma reset woff 1174
-#pragma reset woff 1375
-#endif
-
-__STL_END_NAMESPACE
-
-#endif /* __SGI_STL_INTERNAL_HASH_SET_H */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/stl_hashtable.h b/contrib/libstdc++/stl/stl_hashtable.h
deleted file mode 100644
index 78b36c1d5a04..000000000000
--- a/contrib/libstdc++/stl/stl_hashtable.h
+++ /dev/null
@@ -1,1039 +0,0 @@
-/*
- * Copyright (c) 1996,1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-/* NOTE: This is an internal header file, included by other STL headers.
- * You should not attempt to use it directly.
- */
-
-#ifndef __SGI_STL_INTERNAL_HASHTABLE_H
-#define __SGI_STL_INTERNAL_HASHTABLE_H
-
-// Hashtable class, used to implement the hashed associative containers
-// hash_set, hash_map, hash_multiset, and hash_multimap.
-
-#include <stl_algobase.h>
-#include <stl_alloc.h>
-#include <stl_construct.h>
-#include <stl_tempbuf.h>
-#include <stl_algo.h>
-#include <stl_uninitialized.h>
-#include <stl_function.h>
-#include <stl_vector.h>
-#include <stl_hash_fun.h>
-
-__STL_BEGIN_NAMESPACE
-
-template <class _Val>
-struct _Hashtable_node
-{
- _Hashtable_node* _M_next;
- _Val _M_val;
-};
-
-template <class _Val, class _Key, class _HashFcn,
- class _ExtractKey, class _EqualKey, class _Alloc = alloc>
-class hashtable;
-
-template <class _Val, class _Key, class _HashFcn,
- class _ExtractKey, class _EqualKey, class _Alloc>
-struct _Hashtable_iterator;
-
-template <class _Val, class _Key, class _HashFcn,
- class _ExtractKey, class _EqualKey, class _Alloc>
-struct _Hashtable_const_iterator;
-
-template <class _Val, class _Key, class _HashFcn,
- class _ExtractKey, class _EqualKey, class _Alloc>
-struct _Hashtable_iterator {
- typedef hashtable<_Val,_Key,_HashFcn,_ExtractKey,_EqualKey,_Alloc>
- _Hashtable;
- typedef _Hashtable_iterator<_Val, _Key, _HashFcn,
- _ExtractKey, _EqualKey, _Alloc>
- iterator;
- typedef _Hashtable_const_iterator<_Val, _Key, _HashFcn,
- _ExtractKey, _EqualKey, _Alloc>
- const_iterator;
- typedef _Hashtable_node<_Val> _Node;
-
- typedef forward_iterator_tag iterator_category;
- typedef _Val value_type;
- typedef ptrdiff_t difference_type;
- typedef size_t size_type;
- typedef _Val& reference;
- typedef _Val* pointer;
-
- _Node* _M_cur;
- _Hashtable* _M_ht;
-
- _Hashtable_iterator(_Node* __n, _Hashtable* __tab)
- : _M_cur(__n), _M_ht(__tab) {}
- _Hashtable_iterator() {}
- reference operator*() const { return _M_cur->_M_val; }
-#ifndef __SGI_STL_NO_ARROW_OPERATOR
- pointer operator->() const { return &(operator*()); }
-#endif /* __SGI_STL_NO_ARROW_OPERATOR */
- iterator& operator++();
- iterator operator++(int);
- bool operator==(const iterator& __it) const
- { return _M_cur == __it._M_cur; }
- bool operator!=(const iterator& __it) const
- { return _M_cur != __it._M_cur; }
-};
-
-
-template <class _Val, class _Key, class _HashFcn,
- class _ExtractKey, class _EqualKey, class _Alloc>
-struct _Hashtable_const_iterator {
- typedef hashtable<_Val,_Key,_HashFcn,_ExtractKey,_EqualKey,_Alloc>
- _Hashtable;
- typedef _Hashtable_iterator<_Val,_Key,_HashFcn,
- _ExtractKey,_EqualKey,_Alloc>
- iterator;
- typedef _Hashtable_const_iterator<_Val, _Key, _HashFcn,
- _ExtractKey, _EqualKey, _Alloc>
- const_iterator;
- typedef _Hashtable_node<_Val> _Node;
-
- typedef forward_iterator_tag iterator_category;
- typedef _Val value_type;
- typedef ptrdiff_t difference_type;
- typedef size_t size_type;
- typedef const _Val& reference;
- typedef const _Val* pointer;
-
- const _Node* _M_cur;
- const _Hashtable* _M_ht;
-
- _Hashtable_const_iterator(const _Node* __n, const _Hashtable* __tab)
- : _M_cur(__n), _M_ht(__tab) {}
- _Hashtable_const_iterator() {}
- _Hashtable_const_iterator(const iterator& __it)
- : _M_cur(__it._M_cur), _M_ht(__it._M_ht) {}
- reference operator*() const { return _M_cur->_M_val; }
-#ifndef __SGI_STL_NO_ARROW_OPERATOR
- pointer operator->() const { return &(operator*()); }
-#endif /* __SGI_STL_NO_ARROW_OPERATOR */
- const_iterator& operator++();
- const_iterator operator++(int);
- bool operator==(const const_iterator& __it) const
- { return _M_cur == __it._M_cur; }
- bool operator!=(const const_iterator& __it) const
- { return _M_cur != __it._M_cur; }
-};
-
-// Note: assumes long is at least 32 bits.
-static const int __stl_num_primes = 28;
-static const unsigned long __stl_prime_list[__stl_num_primes] =
-{
- 53ul, 97ul, 193ul, 389ul, 769ul,
- 1543ul, 3079ul, 6151ul, 12289ul, 24593ul,
- 49157ul, 98317ul, 196613ul, 393241ul, 786433ul,
- 1572869ul, 3145739ul, 6291469ul, 12582917ul, 25165843ul,
- 50331653ul, 100663319ul, 201326611ul, 402653189ul, 805306457ul,
- 1610612741ul, 3221225473ul, 4294967291ul
-};
-
-inline unsigned long __stl_next_prime(unsigned long __n)
-{
- const unsigned long* __first = __stl_prime_list;
- const unsigned long* __last = __stl_prime_list + __stl_num_primes;
- const unsigned long* pos = lower_bound(__first, __last, __n);
- return pos == __last ? *(__last - 1) : *pos;
-}
-
-// Forward declaration of operator==.
-
-template <class _Val, class _Key, class _HF, class _Ex, class _Eq, class _All>
-class hashtable;
-
-template <class _Val, class _Key, class _HF, class _Ex, class _Eq, class _All>
-bool operator==(const hashtable<_Val,_Key,_HF,_Ex,_Eq,_All>& __ht1,
- const hashtable<_Val,_Key,_HF,_Ex,_Eq,_All>& __ht2);
-
-
-// Hashtables handle allocators a bit differently than other containers
-// do. If we're using standard-conforming allocators, then a hashtable
-// unconditionally has a member variable to hold its allocator, even if
-// it so happens that all instances of the allocator type are identical.
-// This is because, for hashtables, this extra storage is negligible.
-// Additionally, a base class wouldn't serve any other purposes; it
-// wouldn't, for example, simplify the exception-handling code.
-
-template <class _Val, class _Key, class _HashFcn,
- class _ExtractKey, class _EqualKey, class _Alloc>
-class hashtable {
-public:
- typedef _Key key_type;
- typedef _Val value_type;
- typedef _HashFcn hasher;
- typedef _EqualKey key_equal;
-
- typedef size_t size_type;
- typedef ptrdiff_t difference_type;
- typedef value_type* pointer;
- typedef const value_type* const_pointer;
- typedef value_type& reference;
- typedef const value_type& const_reference;
-
- hasher hash_funct() const { return _M_hash; }
- key_equal key_eq() const { return _M_equals; }
-
-private:
- typedef _Hashtable_node<_Val> _Node;
-
-#ifdef __STL_USE_STD_ALLOCATORS
-public:
- typedef typename _Alloc_traits<_Val,_Alloc>::allocator_type allocator_type;
- allocator_type get_allocator() const { return _M_node_allocator; }
-private:
- typename _Alloc_traits<_Node, _Alloc>::allocator_type _M_node_allocator;
- _Node* _M_get_node() { return _M_node_allocator.allocate(1); }
- void _M_put_node(_Node* __p) { _M_node_allocator.deallocate(__p, 1); }
-# define __HASH_ALLOC_INIT(__a) _M_node_allocator(__a),
-#else /* __STL_USE_STD_ALLOCATORS */
-public:
- typedef _Alloc allocator_type;
- allocator_type get_allocator() const { return allocator_type(); }
-private:
- typedef simple_alloc<_Node, _Alloc> _M_node_allocator_type;
- _Node* _M_get_node() { return _M_node_allocator_type::allocate(1); }
- void _M_put_node(_Node* __p) { _M_node_allocator_type::deallocate(__p, 1); }
-# define __HASH_ALLOC_INIT(__a)
-#endif /* __STL_USE_STD_ALLOCATORS */
-
-private:
- hasher _M_hash;
- key_equal _M_equals;
- _ExtractKey _M_get_key;
- vector<_Node*,_Alloc> _M_buckets;
- size_type _M_num_elements;
-
-public:
- typedef _Hashtable_iterator<_Val,_Key,_HashFcn,_ExtractKey,_EqualKey,_Alloc>
- iterator;
- typedef _Hashtable_const_iterator<_Val,_Key,_HashFcn,_ExtractKey,_EqualKey,
- _Alloc>
- const_iterator;
-
- friend struct
- _Hashtable_iterator<_Val,_Key,_HashFcn,_ExtractKey,_EqualKey,_Alloc>;
- friend struct
- _Hashtable_const_iterator<_Val,_Key,_HashFcn,_ExtractKey,_EqualKey,_Alloc>;
-
-public:
- hashtable(size_type __n,
- const _HashFcn& __hf,
- const _EqualKey& __eql,
- const _ExtractKey& __ext,
- const allocator_type& __a = allocator_type())
- : __HASH_ALLOC_INIT(__a)
- _M_hash(__hf),
- _M_equals(__eql),
- _M_get_key(__ext),
- _M_buckets(__a),
- _M_num_elements(0)
- {
- _M_initialize_buckets(__n);
- }
-
- hashtable(size_type __n,
- const _HashFcn& __hf,
- const _EqualKey& __eql,
- const allocator_type& __a = allocator_type())
- : __HASH_ALLOC_INIT(__a)
- _M_hash(__hf),
- _M_equals(__eql),
- _M_get_key(_ExtractKey()),
- _M_buckets(__a),
- _M_num_elements(0)
- {
- _M_initialize_buckets(__n);
- }
-
- hashtable(const hashtable& __ht)
- : __HASH_ALLOC_INIT(__ht.get_allocator())
- _M_hash(__ht._M_hash),
- _M_equals(__ht._M_equals),
- _M_get_key(__ht._M_get_key),
- _M_buckets(__ht.get_allocator()),
- _M_num_elements(0)
- {
- _M_copy_from(__ht);
- }
-
-#undef __HASH_ALLOC_INIT
-
- hashtable& operator= (const hashtable& __ht)
- {
- if (&__ht != this) {
- clear();
- _M_hash = __ht._M_hash;
- _M_equals = __ht._M_equals;
- _M_get_key = __ht._M_get_key;
- _M_copy_from(__ht);
- }
- return *this;
- }
-
- ~hashtable() { clear(); }
-
- size_type size() const { return _M_num_elements; }
- size_type max_size() const { return size_type(-1); }
- bool empty() const { return size() == 0; }
-
- void swap(hashtable& __ht)
- {
- __STD::swap(_M_hash, __ht._M_hash);
- __STD::swap(_M_equals, __ht._M_equals);
- __STD::swap(_M_get_key, __ht._M_get_key);
- _M_buckets.swap(__ht._M_buckets);
- __STD::swap(_M_num_elements, __ht._M_num_elements);
- }
-
- iterator begin()
- {
- for (size_type __n = 0; __n < _M_buckets.size(); ++__n)
- if (_M_buckets[__n])
- return iterator(_M_buckets[__n], this);
- return end();
- }
-
- iterator end() { return iterator(0, this); }
-
- const_iterator begin() const
- {
- for (size_type __n = 0; __n < _M_buckets.size(); ++__n)
- if (_M_buckets[__n])
- return const_iterator(_M_buckets[__n], this);
- return end();
- }
-
- const_iterator end() const { return const_iterator(0, this); }
-
- friend bool
- operator== __STL_NULL_TMPL_ARGS (const hashtable&, const hashtable&);
-
-public:
-
- size_type bucket_count() const { return _M_buckets.size(); }
-
- size_type max_bucket_count() const
- { return __stl_prime_list[__stl_num_primes - 1]; }
-
- size_type elems_in_bucket(size_type __bucket) const
- {
- size_type __result = 0;
- for (_Node* __cur = _M_buckets[__bucket]; __cur; __cur = __cur->_M_next)
- __result += 1;
- return __result;
- }
-
- pair<iterator, bool> insert_unique(const value_type& __obj)
- {
- resize(_M_num_elements + 1);
- return insert_unique_noresize(__obj);
- }
-
- iterator insert_equal(const value_type& __obj)
- {
- resize(_M_num_elements + 1);
- return insert_equal_noresize(__obj);
- }
-
- pair<iterator, bool> insert_unique_noresize(const value_type& __obj);
- iterator insert_equal_noresize(const value_type& __obj);
-
-#ifdef __STL_MEMBER_TEMPLATES
- template <class _InputIterator>
- void insert_unique(_InputIterator __f, _InputIterator __l)
- {
- insert_unique(__f, __l, __ITERATOR_CATEGORY(__f));
- }
-
- template <class _InputIterator>
- void insert_equal(_InputIterator __f, _InputIterator __l)
- {
- insert_equal(__f, __l, __ITERATOR_CATEGORY(__f));
- }
-
- template <class _InputIterator>
- void insert_unique(_InputIterator __f, _InputIterator __l,
- input_iterator_tag)
- {
- for ( ; __f != __l; ++__f)
- insert_unique(*__f);
- }
-
- template <class _InputIterator>
- void insert_equal(_InputIterator __f, _InputIterator __l,
- input_iterator_tag)
- {
- for ( ; __f != __l; ++__f)
- insert_equal(*__f);
- }
-
- template <class _ForwardIterator>
- void insert_unique(_ForwardIterator __f, _ForwardIterator __l,
- forward_iterator_tag)
- {
- size_type __n = 0;
- distance(__f, __l, __n);
- resize(_M_num_elements + __n);
- for ( ; __n > 0; --__n, ++__f)
- insert_unique_noresize(*__f);
- }
-
- template <class _ForwardIterator>
- void insert_equal(_ForwardIterator __f, _ForwardIterator __l,
- forward_iterator_tag)
- {
- size_type __n = 0;
- distance(__f, __l, __n);
- resize(_M_num_elements + __n);
- for ( ; __n > 0; --__n, ++__f)
- insert_equal_noresize(*__f);
- }
-
-#else /* __STL_MEMBER_TEMPLATES */
- void insert_unique(const value_type* __f, const value_type* __l)
- {
- size_type __n = __l - __f;
- resize(_M_num_elements + __n);
- for ( ; __n > 0; --__n, ++__f)
- insert_unique_noresize(*__f);
- }
-
- void insert_equal(const value_type* __f, const value_type* __l)
- {
- size_type __n = __l - __f;
- resize(_M_num_elements + __n);
- for ( ; __n > 0; --__n, ++__f)
- insert_equal_noresize(*__f);
- }
-
- void insert_unique(const_iterator __f, const_iterator __l)
- {
- size_type __n = 0;
- distance(__f, __l, __n);
- resize(_M_num_elements + __n);
- for ( ; __n > 0; --__n, ++__f)
- insert_unique_noresize(*__f);
- }
-
- void insert_equal(const_iterator __f, const_iterator __l)
- {
- size_type __n = 0;
- distance(__f, __l, __n);
- resize(_M_num_elements + __n);
- for ( ; __n > 0; --__n, ++__f)
- insert_equal_noresize(*__f);
- }
-#endif /*__STL_MEMBER_TEMPLATES */
-
- reference find_or_insert(const value_type& __obj);
-
- iterator find(const key_type& __key)
- {
- size_type __n = _M_bkt_num_key(__key);
- _Node* __first;
- for ( __first = _M_buckets[__n];
- __first && !_M_equals(_M_get_key(__first->_M_val), __key);
- __first = __first->_M_next)
- {}
- return iterator(__first, this);
- }
-
- const_iterator find(const key_type& __key) const
- {
- size_type __n = _M_bkt_num_key(__key);
- const _Node* __first;
- for ( __first = _M_buckets[__n];
- __first && !_M_equals(_M_get_key(__first->_M_val), __key);
- __first = __first->_M_next)
- {}
- return const_iterator(__first, this);
- }
-
- size_type count(const key_type& __key) const
- {
- const size_type __n = _M_bkt_num_key(__key);
- size_type __result = 0;
-
- for (const _Node* __cur = _M_buckets[__n]; __cur; __cur = __cur->_M_next)
- if (_M_equals(_M_get_key(__cur->_M_val), __key))
- ++__result;
- return __result;
- }
-
- pair<iterator, iterator>
- equal_range(const key_type& __key);
-
- pair<const_iterator, const_iterator>
- equal_range(const key_type& __key) const;
-
- size_type erase(const key_type& __key);
- void erase(const iterator& __it);
- void erase(iterator __first, iterator __last);
-
- void erase(const const_iterator& __it);
- void erase(const_iterator __first, const_iterator __last);
-
- void resize(size_type __num_elements_hint);
- void clear();
-
-private:
- size_type _M_next_size(size_type __n) const
- { return __stl_next_prime(__n); }
-
- void _M_initialize_buckets(size_type __n)
- {
- const size_type __n_buckets = _M_next_size(__n);
- _M_buckets.reserve(__n_buckets);
- _M_buckets.insert(_M_buckets.end(), __n_buckets, (_Node*) 0);
- _M_num_elements = 0;
- }
-
- size_type _M_bkt_num_key(const key_type& __key) const
- {
- return _M_bkt_num_key(__key, _M_buckets.size());
- }
-
- size_type _M_bkt_num(const value_type& __obj) const
- {
- return _M_bkt_num_key(_M_get_key(__obj));
- }
-
- size_type _M_bkt_num_key(const key_type& __key, size_t __n) const
- {
- return _M_hash(__key) % __n;
- }
-
- size_type _M_bkt_num(const value_type& __obj, size_t __n) const
- {
- return _M_bkt_num_key(_M_get_key(__obj), __n);
- }
-
- _Node* _M_new_node(const value_type& __obj)
- {
- _Node* __n = _M_get_node();
- __n->_M_next = 0;
- __STL_TRY {
- construct(&__n->_M_val, __obj);
- return __n;
- }
- __STL_UNWIND(_M_put_node(__n));
- }
-
- void _M_delete_node(_Node* __n)
- {
- destroy(&__n->_M_val);
- _M_put_node(__n);
- }
-
- void _M_erase_bucket(const size_type __n, _Node* __first, _Node* __last);
- void _M_erase_bucket(const size_type __n, _Node* __last);
-
- void _M_copy_from(const hashtable& __ht);
-
-};
-
-template <class _Val, class _Key, class _HF, class _ExK, class _EqK,
- class _All>
-_Hashtable_iterator<_Val,_Key,_HF,_ExK,_EqK,_All>&
-_Hashtable_iterator<_Val,_Key,_HF,_ExK,_EqK,_All>::operator++()
-{
- const _Node* __old = _M_cur;
- _M_cur = _M_cur->_M_next;
- if (!_M_cur) {
- size_type __bucket = _M_ht->_M_bkt_num(__old->_M_val);
- while (!_M_cur && ++__bucket < _M_ht->_M_buckets.size())
- _M_cur = _M_ht->_M_buckets[__bucket];
- }
- return *this;
-}
-
-template <class _Val, class _Key, class _HF, class _ExK, class _EqK,
- class _All>
-inline _Hashtable_iterator<_Val,_Key,_HF,_ExK,_EqK,_All>
-_Hashtable_iterator<_Val,_Key,_HF,_ExK,_EqK,_All>::operator++(int)
-{
- iterator __tmp = *this;
- ++*this;
- return __tmp;
-}
-
-template <class _Val, class _Key, class _HF, class _ExK, class _EqK,
- class _All>
-_Hashtable_const_iterator<_Val,_Key,_HF,_ExK,_EqK,_All>&
-_Hashtable_const_iterator<_Val,_Key,_HF,_ExK,_EqK,_All>::operator++()
-{
- const _Node* __old = _M_cur;
- _M_cur = _M_cur->_M_next;
- if (!_M_cur) {
- size_type __bucket = _M_ht->_M_bkt_num(__old->_M_val);
- while (!_M_cur && ++__bucket < _M_ht->_M_buckets.size())
- _M_cur = _M_ht->_M_buckets[__bucket];
- }
- return *this;
-}
-
-template <class _Val, class _Key, class _HF, class _ExK, class _EqK,
- class _All>
-inline _Hashtable_const_iterator<_Val,_Key,_HF,_ExK,_EqK,_All>
-_Hashtable_const_iterator<_Val,_Key,_HF,_ExK,_EqK,_All>::operator++(int)
-{
- const_iterator __tmp = *this;
- ++*this;
- return __tmp;
-}
-
-#ifndef __STL_CLASS_PARTIAL_SPECIALIZATION
-
-template <class _Val, class _Key, class _HF, class _ExK, class _EqK,
- class _All>
-inline forward_iterator_tag
-iterator_category(const _Hashtable_iterator<_Val,_Key,_HF,_ExK,_EqK,_All>&)
-{
- return forward_iterator_tag();
-}
-
-template <class _Val, class _Key, class _HF, class _ExK, class _EqK,
- class _All>
-inline _Val*
-value_type(const _Hashtable_iterator<_Val,_Key,_HF,_ExK,_EqK,_All>&)
-{
- return (_Val*) 0;
-}
-
-template <class _Val, class _Key, class _HF, class _ExK, class _EqK,
- class _All>
-inline hashtable<_Val,_Key,_HF,_ExK,_EqK,_All>::difference_type*
-distance_type(const _Hashtable_iterator<_Val,_Key,_HF,_ExK,_EqK,_All>&)
-{
- return (hashtable<_Val,_Key,_HF,_ExK,_EqK,_All>::difference_type*) 0;
-}
-
-template <class _Val, class _Key, class _HF, class _ExK, class _EqK,
- class _All>
-inline forward_iterator_tag
-iterator_category(const _Hashtable_const_iterator<_Val,_Key,_HF,
- _ExK,_EqK,_All>&)
-{
- return forward_iterator_tag();
-}
-
-template <class _Val, class _Key, class _HF, class _ExK, class _EqK,
- class _All>
-inline _Val*
-value_type(const _Hashtable_const_iterator<_Val,_Key,_HF,_ExK,_EqK,_All>&)
-{
- return (_Val*) 0;
-}
-
-template <class _Val, class _Key, class _HF, class _ExK, class _EqK,
- class _All>
-inline hashtable<_Val,_Key,_HF,_ExK,_EqK,_All>::difference_type*
-distance_type(const _Hashtable_const_iterator<_Val,_Key,_HF,_ExK,_EqK,_All>&)
-{
- return (hashtable<_Val,_Key,_HF,_ExK,_EqK,_All>::difference_type*) 0;
-}
-
-#endif /* __STL_CLASS_PARTIAL_SPECIALIZATION */
-
-template <class _Val, class _Key, class _HF, class _Ex, class _Eq, class _All>
-inline bool operator==(const hashtable<_Val,_Key,_HF,_Ex,_Eq,_All>& __ht1,
- const hashtable<_Val,_Key,_HF,_Ex,_Eq,_All>& __ht2)
-{
- typedef typename hashtable<_Val,_Key,_HF,_Ex,_Eq,_All>::_Node _Node;
- if (__ht1._M_buckets.size() != __ht2._M_buckets.size())
- return false;
- for (int __n = 0; __n < __ht1._M_buckets.size(); ++__n) {
- _Node* __cur1 = __ht1._M_buckets[__n];
- _Node* __cur2 = __ht2._M_buckets[__n];
- for ( ; __cur1 && __cur2 && __cur1->_M_val == __cur2->_M_val;
- __cur1 = __cur1->_M_next, __cur2 = __cur2->_M_next)
- {}
- if (__cur1 || __cur2)
- return false;
- }
- return true;
-}
-
-#ifdef __STL_FUNCTION_TMPL_PARTIAL_ORDER
-
-template <class _Val, class _Key, class _HF, class _Extract, class _EqKey,
- class _All>
-inline void swap(hashtable<_Val, _Key, _HF, _Extract, _EqKey, _All>& __ht1,
- hashtable<_Val, _Key, _HF, _Extract, _EqKey, _All>& __ht2) {
- __ht1.swap(__ht2);
-}
-
-#endif /* __STL_FUNCTION_TMPL_PARTIAL_ORDER */
-
-
-template <class _Val, class _Key, class _HF, class _Ex, class _Eq, class _All>
-pair<typename hashtable<_Val,_Key,_HF,_Ex,_Eq,_All>::iterator, bool>
-hashtable<_Val,_Key,_HF,_Ex,_Eq,_All>
- ::insert_unique_noresize(const value_type& __obj)
-{
- const size_type __n = _M_bkt_num(__obj);
- _Node* __first = _M_buckets[__n];
-
- for (_Node* __cur = __first; __cur; __cur = __cur->_M_next)
- if (_M_equals(_M_get_key(__cur->_M_val), _M_get_key(__obj)))
- return pair<iterator, bool>(iterator(__cur, this), false);
-
- _Node* __tmp = _M_new_node(__obj);
- __tmp->_M_next = __first;
- _M_buckets[__n] = __tmp;
- ++_M_num_elements;
- return pair<iterator, bool>(iterator(__tmp, this), true);
-}
-
-template <class _Val, class _Key, class _HF, class _Ex, class _Eq, class _All>
-typename hashtable<_Val,_Key,_HF,_Ex,_Eq,_All>::iterator
-hashtable<_Val,_Key,_HF,_Ex,_Eq,_All>
- ::insert_equal_noresize(const value_type& __obj)
-{
- const size_type __n = _M_bkt_num(__obj);
- _Node* __first = _M_buckets[__n];
-
- for (_Node* __cur = __first; __cur; __cur = __cur->_M_next)
- if (_M_equals(_M_get_key(__cur->_M_val), _M_get_key(__obj))) {
- _Node* __tmp = _M_new_node(__obj);
- __tmp->_M_next = __cur->_M_next;
- __cur->_M_next = __tmp;
- ++_M_num_elements;
- return iterator(__tmp, this);
- }
-
- _Node* __tmp = _M_new_node(__obj);
- __tmp->_M_next = __first;
- _M_buckets[__n] = __tmp;
- ++_M_num_elements;
- return iterator(__tmp, this);
-}
-
-template <class _Val, class _Key, class _HF, class _Ex, class _Eq, class _All>
-typename hashtable<_Val,_Key,_HF,_Ex,_Eq,_All>::reference
-hashtable<_Val,_Key,_HF,_Ex,_Eq,_All>::find_or_insert(const value_type& __obj)
-{
- resize(_M_num_elements + 1);
-
- size_type __n = _M_bkt_num(__obj);
- _Node* __first = _M_buckets[__n];
-
- for (_Node* __cur = __first; __cur; __cur = __cur->_M_next)
- if (_M_equals(_M_get_key(__cur->_M_val), _M_get_key(__obj)))
- return __cur->_M_val;
-
- _Node* __tmp = _M_new_node(__obj);
- __tmp->_M_next = __first;
- _M_buckets[__n] = __tmp;
- ++_M_num_elements;
- return __tmp->_M_val;
-}
-
-template <class _Val, class _Key, class _HF, class _Ex, class _Eq, class _All>
-pair<typename hashtable<_Val,_Key,_HF,_Ex,_Eq,_All>::iterator,
- typename hashtable<_Val,_Key,_HF,_Ex,_Eq,_All>::iterator>
-hashtable<_Val,_Key,_HF,_Ex,_Eq,_All>::equal_range(const key_type& __key)
-{
- typedef pair<iterator, iterator> _Pii;
- const size_type __n = _M_bkt_num_key(__key);
-
- for (_Node* __first = _M_buckets[__n]; __first; __first = __first->_M_next)
- if (_M_equals(_M_get_key(__first->_M_val), __key)) {
- for (_Node* __cur = __first->_M_next; __cur; __cur = __cur->_M_next)
- if (!_M_equals(_M_get_key(__cur->_M_val), __key))
- return _Pii(iterator(__first, this), iterator(__cur, this));
- for (size_type __m = __n + 1; __m < _M_buckets.size(); ++__m)
- if (_M_buckets[__m])
- return _Pii(iterator(__first, this),
- iterator(_M_buckets[__m], this));
- return _Pii(iterator(__first, this), end());
- }
- return _Pii(end(), end());
-}
-
-template <class _Val, class _Key, class _HF, class _Ex, class _Eq, class _All>
-pair<typename hashtable<_Val,_Key,_HF,_Ex,_Eq,_All>::const_iterator,
- typename hashtable<_Val,_Key,_HF,_Ex,_Eq,_All>::const_iterator>
-hashtable<_Val,_Key,_HF,_Ex,_Eq,_All>
- ::equal_range(const key_type& __key) const
-{
- typedef pair<const_iterator, const_iterator> _Pii;
- const size_type __n = _M_bkt_num_key(__key);
-
- for (const _Node* __first = _M_buckets[__n] ;
- __first;
- __first = __first->_M_next) {
- if (_M_equals(_M_get_key(__first->_M_val), __key)) {
- for (const _Node* __cur = __first->_M_next;
- __cur;
- __cur = __cur->_M_next)
- if (!_M_equals(_M_get_key(__cur->_M_val), __key))
- return _Pii(const_iterator(__first, this),
- const_iterator(__cur, this));
- for (size_type __m = __n + 1; __m < _M_buckets.size(); ++__m)
- if (_M_buckets[__m])
- return _Pii(const_iterator(__first, this),
- const_iterator(_M_buckets[__m], this));
- return _Pii(const_iterator(__first, this), end());
- }
- }
- return _Pii(end(), end());
-}
-
-template <class _Val, class _Key, class _HF, class _Ex, class _Eq, class _All>
-typename hashtable<_Val,_Key,_HF,_Ex,_Eq,_All>::size_type
-hashtable<_Val,_Key,_HF,_Ex,_Eq,_All>::erase(const key_type& __key)
-{
- const size_type __n = _M_bkt_num_key(__key);
- _Node* __first = _M_buckets[__n];
- size_type __erased = 0;
-
- if (__first) {
- _Node* __cur = __first;
- _Node* __next = __cur->_M_next;
- while (__next) {
- if (_M_equals(_M_get_key(__next->_M_val), __key)) {
- __cur->_M_next = __next->_M_next;
- _M_delete_node(__next);
- __next = __cur->_M_next;
- ++__erased;
- --_M_num_elements;
- }
- else {
- __cur = __next;
- __next = __cur->_M_next;
- }
- }
- if (_M_equals(_M_get_key(__first->_M_val), __key)) {
- _M_buckets[__n] = __first->_M_next;
- _M_delete_node(__first);
- ++__erased;
- --_M_num_elements;
- }
- }
- return __erased;
-}
-
-template <class _Val, class _Key, class _HF, class _Ex, class _Eq, class _All>
-void hashtable<_Val,_Key,_HF,_Ex,_Eq,_All>::erase(const iterator& __it)
-{
- if (_Node* const __p = __it._M_cur) {
- const size_type __n = _M_bkt_num(__p->_M_val);
- _Node* __cur = _M_buckets[__n];
-
- if (__cur == __p) {
- _M_buckets[__n] = __cur->_M_next;
- _M_delete_node(__cur);
- --_M_num_elements;
- }
- else {
- _Node* __next = __cur->_M_next;
- while (__next) {
- if (__next == __p) {
- __cur->_M_next = __next->_M_next;
- _M_delete_node(__next);
- --_M_num_elements;
- break;
- }
- else {
- __cur = __next;
- __next = __cur->_M_next;
- }
- }
- }
- }
-}
-
-template <class _Val, class _Key, class _HF, class _Ex, class _Eq, class _All>
-void hashtable<_Val,_Key,_HF,_Ex,_Eq,_All>
- ::erase(iterator __first, iterator __last)
-{
- size_type __f_bucket = __first._M_cur ?
- _M_bkt_num(__first._M_cur->_M_val) : _M_buckets.size();
- size_type __l_bucket = __last._M_cur ?
- _M_bkt_num(__last._M_cur->_M_val) : _M_buckets.size();
-
- if (__first._M_cur == __last._M_cur)
- return;
- else if (__f_bucket == __l_bucket)
- _M_erase_bucket(__f_bucket, __first._M_cur, __last._M_cur);
- else {
- _M_erase_bucket(__f_bucket, __first._M_cur, 0);
- for (size_type __n = __f_bucket + 1; __n < __l_bucket; ++__n)
- _M_erase_bucket(__n, 0);
- if (__l_bucket != _M_buckets.size())
- _M_erase_bucket(__l_bucket, __last._M_cur);
- }
-}
-
-template <class _Val, class _Key, class _HF, class _Ex, class _Eq, class _All>
-inline void
-hashtable<_Val,_Key,_HF,_Ex,_Eq,_All>::erase(const_iterator __first,
- const_iterator __last)
-{
- erase(iterator(const_cast<_Node*>(__first._M_cur),
- const_cast<hashtable*>(__first._M_ht)),
- iterator(const_cast<_Node*>(__last._M_cur),
- const_cast<hashtable*>(__last._M_ht)));
-}
-
-template <class _Val, class _Key, class _HF, class _Ex, class _Eq, class _All>
-inline void
-hashtable<_Val,_Key,_HF,_Ex,_Eq,_All>::erase(const const_iterator& __it)
-{
- erase(iterator(const_cast<_Node*>(__it._M_cur),
- const_cast<hashtable*>(__it._M_ht)));
-}
-
-template <class _Val, class _Key, class _HF, class _Ex, class _Eq, class _All>
-void hashtable<_Val,_Key,_HF,_Ex,_Eq,_All>
- ::resize(size_type __num_elements_hint)
-{
- const size_type __old_n = _M_buckets.size();
- if (__num_elements_hint > __old_n) {
- const size_type __n = _M_next_size(__num_elements_hint);
- if (__n > __old_n) {
- vector<_Node*, _All> __tmp(__n, (_Node*)(0),
- _M_buckets.get_allocator());
- __STL_TRY {
- for (size_type __bucket = 0; __bucket < __old_n; ++__bucket) {
- _Node* __first = _M_buckets[__bucket];
- while (__first) {
- size_type __new_bucket = _M_bkt_num(__first->_M_val, __n);
- _M_buckets[__bucket] = __first->_M_next;
- __first->_M_next = __tmp[__new_bucket];
- __tmp[__new_bucket] = __first;
- __first = _M_buckets[__bucket];
- }
- }
- _M_buckets.swap(__tmp);
- }
-# ifdef __STL_USE_EXCEPTIONS
- catch(...) {
- for (size_type __bucket = 0; __bucket < __tmp.size(); ++__bucket) {
- while (__tmp[__bucket]) {
- _Node* __next = __tmp[__bucket]->_M_next;
- _M_delete_node(__tmp[__bucket]);
- __tmp[__bucket] = __next;
- }
- }
- throw;
- }
-# endif /* __STL_USE_EXCEPTIONS */
- }
- }
-}
-
-template <class _Val, class _Key, class _HF, class _Ex, class _Eq, class _All>
-void hashtable<_Val,_Key,_HF,_Ex,_Eq,_All>
- ::_M_erase_bucket(const size_type __n, _Node* __first, _Node* __last)
-{
- _Node* __cur = _M_buckets[__n];
- if (__cur == __first)
- _M_erase_bucket(__n, __last);
- else {
- _Node* __next;
- for (__next = __cur->_M_next;
- __next != __first;
- __cur = __next, __next = __cur->_M_next)
- ;
- while (__next) {
- __cur->_M_next = __next->_M_next;
- _M_delete_node(__next);
- __next = __cur->_M_next;
- --_M_num_elements;
- }
- }
-}
-
-template <class _Val, class _Key, class _HF, class _Ex, class _Eq, class _All>
-void hashtable<_Val,_Key,_HF,_Ex,_Eq,_All>
- ::_M_erase_bucket(const size_type __n, _Node* __last)
-{
- _Node* __cur = _M_buckets[__n];
- while (__cur != __last) {
- _Node* __next = __cur->_M_next;
- _M_delete_node(__cur);
- __cur = __next;
- _M_buckets[__n] = __cur;
- --_M_num_elements;
- }
-}
-
-template <class _Val, class _Key, class _HF, class _Ex, class _Eq, class _All>
-void hashtable<_Val,_Key,_HF,_Ex,_Eq,_All>::clear()
-{
- for (size_type __i = 0; __i < _M_buckets.size(); ++__i) {
- _Node* __cur = _M_buckets[__i];
- while (__cur != 0) {
- _Node* __next = __cur->_M_next;
- _M_delete_node(__cur);
- __cur = __next;
- }
- _M_buckets[__i] = 0;
- }
- _M_num_elements = 0;
-}
-
-
-template <class _Val, class _Key, class _HF, class _Ex, class _Eq, class _All>
-void hashtable<_Val,_Key,_HF,_Ex,_Eq,_All>
- ::_M_copy_from(const hashtable& __ht)
-{
- _M_buckets.clear();
- _M_buckets.reserve(__ht._M_buckets.size());
- _M_buckets.insert(_M_buckets.end(), __ht._M_buckets.size(), (_Node*) 0);
- __STL_TRY {
- for (size_type __i = 0; __i < __ht._M_buckets.size(); ++__i) {
- if (const _Node* __cur = __ht._M_buckets[__i]) {
- _Node* __copy = _M_new_node(__cur->_M_val);
- _M_buckets[__i] = __copy;
-
- for (_Node* __next = __cur->_M_next;
- __next;
- __cur = __next, __next = __cur->_M_next) {
- __copy->_M_next = _M_new_node(__next->_M_val);
- __copy = __copy->_M_next;
- }
- }
- }
- _M_num_elements = __ht._M_num_elements;
- }
- __STL_UNWIND(clear());
-}
-
-__STL_END_NAMESPACE
-
-#endif /* __SGI_STL_INTERNAL_HASHTABLE_H */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/stl_heap.h b/contrib/libstdc++/stl/stl_heap.h
deleted file mode 100644
index 62f142ec9706..000000000000
--- a/contrib/libstdc++/stl/stl_heap.h
+++ /dev/null
@@ -1,281 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- * Copyright (c) 1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-/* NOTE: This is an internal header file, included by other STL headers.
- * You should not attempt to use it directly.
- */
-
-#ifndef __SGI_STL_INTERNAL_HEAP_H
-#define __SGI_STL_INTERNAL_HEAP_H
-
-__STL_BEGIN_NAMESPACE
-
-#if defined(__sgi) && !defined(__GNUC__) && (_MIPS_SIM != _MIPS_SIM_ABI32)
-#pragma set woff 1209
-#endif
-
-// Heap-manipulation functions: push_heap, pop_heap, make_heap, sort_heap.
-
-template <class _RandomAccessIterator, class _Distance, class _Tp>
-void
-__push_heap(_RandomAccessIterator __first,
- _Distance __holeIndex, _Distance __topIndex, _Tp __value)
-{
- _Distance __parent = (__holeIndex - 1) / 2;
- while (__holeIndex > __topIndex && *(__first + __parent) < __value) {
- *(__first + __holeIndex) = *(__first + __parent);
- __holeIndex = __parent;
- __parent = (__holeIndex - 1) / 2;
- }
- *(__first + __holeIndex) = __value;
-}
-
-template <class _RandomAccessIterator, class _Distance, class _Tp>
-inline void
-__push_heap_aux(_RandomAccessIterator __first,
- _RandomAccessIterator __last, _Distance*, _Tp*)
-{
- __push_heap(__first, _Distance((__last - __first) - 1), _Distance(0),
- _Tp(*(__last - 1)));
-}
-
-template <class _RandomAccessIterator>
-inline void
-push_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
-{
- __push_heap_aux(__first, __last,
- __DISTANCE_TYPE(__first), __VALUE_TYPE(__first));
-}
-
-template <class _RandomAccessIterator, class _Distance, class _Tp,
- class _Compare>
-void
-__push_heap(_RandomAccessIterator __first, _Distance __holeIndex,
- _Distance __topIndex, _Tp __value, _Compare __comp)
-{
- _Distance __parent = (__holeIndex - 1) / 2;
- while (__holeIndex > __topIndex && __comp(*(__first + __parent), __value)) {
- *(__first + __holeIndex) = *(__first + __parent);
- __holeIndex = __parent;
- __parent = (__holeIndex - 1) / 2;
- }
- *(__first + __holeIndex) = __value;
-}
-
-template <class _RandomAccessIterator, class _Compare,
- class _Distance, class _Tp>
-inline void
-__push_heap_aux(_RandomAccessIterator __first,
- _RandomAccessIterator __last, _Compare __comp,
- _Distance*, _Tp*)
-{
- __push_heap(__first, _Distance((__last - __first) - 1), _Distance(0),
- _Tp(*(__last - 1)), __comp);
-}
-
-template <class _RandomAccessIterator, class _Compare>
-inline void
-push_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
- _Compare __comp)
-{
- __push_heap_aux(__first, __last, __comp,
- __DISTANCE_TYPE(__first), __VALUE_TYPE(__first));
-}
-
-template <class _RandomAccessIterator, class _Distance, class _Tp>
-void
-__adjust_heap(_RandomAccessIterator __first, _Distance __holeIndex,
- _Distance __len, _Tp __value)
-{
- _Distance __topIndex = __holeIndex;
- _Distance __secondChild = 2 * __holeIndex + 2;
- while (__secondChild < __len) {
- if (*(__first + __secondChild) < *(__first + (__secondChild - 1)))
- __secondChild--;
- *(__first + __holeIndex) = *(__first + __secondChild);
- __holeIndex = __secondChild;
- __secondChild = 2 * (__secondChild + 1);
- }
- if (__secondChild == __len) {
- *(__first + __holeIndex) = *(__first + (__secondChild - 1));
- __holeIndex = __secondChild - 1;
- }
- __push_heap(__first, __holeIndex, __topIndex, __value);
-}
-
-template <class _RandomAccessIterator, class _Tp, class _Distance>
-inline void
-__pop_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
- _RandomAccessIterator __result, _Tp __value, _Distance*)
-{
- *__result = *__first;
- __adjust_heap(__first, _Distance(0), _Distance(__last - __first), __value);
-}
-
-template <class _RandomAccessIterator, class _Tp>
-inline void
-__pop_heap_aux(_RandomAccessIterator __first, _RandomAccessIterator __last,
- _Tp*)
-{
- __pop_heap(__first, __last - 1, __last - 1,
- _Tp(*(__last - 1)), __DISTANCE_TYPE(__first));
-}
-
-template <class _RandomAccessIterator>
-inline void pop_heap(_RandomAccessIterator __first,
- _RandomAccessIterator __last)
-{
- __pop_heap_aux(__first, __last, __VALUE_TYPE(__first));
-}
-
-template <class _RandomAccessIterator, class _Distance,
- class _Tp, class _Compare>
-void
-__adjust_heap(_RandomAccessIterator __first, _Distance __holeIndex,
- _Distance __len, _Tp __value, _Compare __comp)
-{
- _Distance __topIndex = __holeIndex;
- _Distance __secondChild = 2 * __holeIndex + 2;
- while (__secondChild < __len) {
- if (__comp(*(__first + __secondChild), *(__first + (__secondChild - 1))))
- __secondChild--;
- *(__first + __holeIndex) = *(__first + __secondChild);
- __holeIndex = __secondChild;
- __secondChild = 2 * (__secondChild + 1);
- }
- if (__secondChild == __len) {
- *(__first + __holeIndex) = *(__first + (__secondChild - 1));
- __holeIndex = __secondChild - 1;
- }
- __push_heap(__first, __holeIndex, __topIndex, __value, __comp);
-}
-
-template <class _RandomAccessIterator, class _Tp, class _Compare,
- class _Distance>
-inline void
-__pop_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
- _RandomAccessIterator __result, _Tp __value, _Compare __comp,
- _Distance*)
-{
- *__result = *__first;
- __adjust_heap(__first, _Distance(0), _Distance(__last - __first),
- __value, __comp);
-}
-
-template <class _RandomAccessIterator, class _Tp, class _Compare>
-inline void
-__pop_heap_aux(_RandomAccessIterator __first,
- _RandomAccessIterator __last, _Tp*, _Compare __comp)
-{
- __pop_heap(__first, __last - 1, __last - 1, _Tp(*(__last - 1)), __comp,
- __DISTANCE_TYPE(__first));
-}
-
-template <class _RandomAccessIterator, class _Compare>
-inline void
-pop_heap(_RandomAccessIterator __first,
- _RandomAccessIterator __last, _Compare __comp)
-{
- __pop_heap_aux(__first, __last, __VALUE_TYPE(__first), __comp);
-}
-
-template <class _RandomAccessIterator, class _Tp, class _Distance>
-void
-__make_heap(_RandomAccessIterator __first,
- _RandomAccessIterator __last, _Tp*, _Distance*)
-{
- if (__last - __first < 2) return;
- _Distance __len = __last - __first;
- _Distance __parent = (__len - 2)/2;
-
- while (true) {
- __adjust_heap(__first, __parent, __len, _Tp(*(__first + __parent)));
- if (__parent == 0) return;
- __parent--;
- }
-}
-
-template <class _RandomAccessIterator>
-inline void
-make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
-{
- __make_heap(__first, __last,
- __VALUE_TYPE(__first), __DISTANCE_TYPE(__first));
-}
-
-template <class _RandomAccessIterator, class _Compare,
- class _Tp, class _Distance>
-void
-__make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last,
- _Compare __comp, _Tp*, _Distance*)
-{
- if (__last - __first < 2) return;
- _Distance __len = __last - __first;
- _Distance __parent = (__len - 2)/2;
-
- while (true) {
- __adjust_heap(__first, __parent, __len, _Tp(*(__first + __parent)),
- __comp);
- if (__parent == 0) return;
- __parent--;
- }
-}
-
-template <class _RandomAccessIterator, class _Compare>
-inline void
-make_heap(_RandomAccessIterator __first,
- _RandomAccessIterator __last, _Compare __comp)
-{
- __make_heap(__first, __last, __comp,
- __VALUE_TYPE(__first), __DISTANCE_TYPE(__first));
-}
-
-template <class _RandomAccessIterator>
-void sort_heap(_RandomAccessIterator __first, _RandomAccessIterator __last)
-{
- while (__last - __first > 1)
- pop_heap(__first, __last--);
-}
-
-template <class _RandomAccessIterator, class _Compare>
-void
-sort_heap(_RandomAccessIterator __first,
- _RandomAccessIterator __last, _Compare __comp)
-{
- while (__last - __first > 1)
- pop_heap(__first, __last--, __comp);
-}
-
-#if defined(__sgi) && !defined(__GNUC__) && (_MIPS_SIM != _MIPS_SIM_ABI32)
-#pragma reset woff 1209
-#endif
-
-__STL_END_NAMESPACE
-
-#endif /* __SGI_STL_INTERNAL_HEAP_H */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/stl_iterator.h b/contrib/libstdc++/stl/stl_iterator.h
deleted file mode 100644
index e2bd7149692c..000000000000
--- a/contrib/libstdc++/stl/stl_iterator.h
+++ /dev/null
@@ -1,915 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- * Copyright (c) 1996-1998
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-/* NOTE: This is an internal header file, included by other STL headers.
- * You should not attempt to use it directly.
- */
-
-#ifndef __SGI_STL_INTERNAL_ITERATOR_H
-#define __SGI_STL_INTERNAL_ITERATOR_H
-
-__STL_BEGIN_NAMESPACE
-
-struct input_iterator_tag {};
-struct output_iterator_tag {};
-struct forward_iterator_tag : public input_iterator_tag {};
-struct bidirectional_iterator_tag : public forward_iterator_tag {};
-struct random_access_iterator_tag : public bidirectional_iterator_tag {};
-
-// The base classes input_iterator, output_iterator, forward_iterator,
-// bidirectional_iterator, and random_access_iterator are not part of
-// the C++ standard. (they have been replaced by struct iterator.)
-// They are included for backward compatibility with the HP STL.
-
-template <class _Tp, class _Distance> struct input_iterator {
- typedef input_iterator_tag iterator_category;
- typedef _Tp value_type;
- typedef _Distance difference_type;
- typedef _Tp* pointer;
- typedef _Tp& reference;
-};
-
-struct output_iterator {
- typedef output_iterator_tag iterator_category;
- typedef void value_type;
- typedef void difference_type;
- typedef void pointer;
- typedef void reference;
-};
-
-template <class _Tp, class _Distance> struct forward_iterator {
- typedef forward_iterator_tag iterator_category;
- typedef _Tp value_type;
- typedef _Distance difference_type;
- typedef _Tp* pointer;
- typedef _Tp& reference;
-};
-
-
-template <class _Tp, class _Distance> struct bidirectional_iterator {
- typedef bidirectional_iterator_tag iterator_category;
- typedef _Tp value_type;
- typedef _Distance difference_type;
- typedef _Tp* pointer;
- typedef _Tp& reference;
-};
-
-template <class _Tp, class _Distance> struct random_access_iterator {
- typedef random_access_iterator_tag iterator_category;
- typedef _Tp value_type;
- typedef _Distance difference_type;
- typedef _Tp* pointer;
- typedef _Tp& reference;
-};
-
-#ifdef __STL_USE_NAMESPACES
-template <class _Category, class _Tp, class _Distance = ptrdiff_t,
- class _Pointer = _Tp*, class _Reference = _Tp&>
-struct iterator {
- typedef _Category iterator_category;
- typedef _Tp value_type;
- typedef _Distance difference_type;
- typedef _Pointer pointer;
- typedef _Reference reference;
-};
-#endif /* __STL_USE_NAMESPACES */
-
-#ifdef __STL_CLASS_PARTIAL_SPECIALIZATION
-
-template <class _Iterator>
-struct iterator_traits {
- typedef typename _Iterator::iterator_category iterator_category;
- typedef typename _Iterator::value_type value_type;
- typedef typename _Iterator::difference_type difference_type;
- typedef typename _Iterator::pointer pointer;
- typedef typename _Iterator::reference reference;
-};
-
-template <class _Tp>
-struct iterator_traits<_Tp*> {
- typedef random_access_iterator_tag iterator_category;
- typedef _Tp value_type;
- typedef ptrdiff_t difference_type;
- typedef _Tp* pointer;
- typedef _Tp& reference;
-};
-
-template <class _Tp>
-struct iterator_traits<const _Tp*> {
- typedef random_access_iterator_tag iterator_category;
- typedef _Tp value_type;
- typedef ptrdiff_t difference_type;
- typedef const _Tp* pointer;
- typedef const _Tp& reference;
-};
-
-// The overloaded functions iterator_category, distance_type, and
-// value_type are not part of the C++ standard. (They have been
-// replaced by struct iterator_traits.) They are included for
-// backward compatibility with the HP STL.
-
-// We introduce internal names for these functions.
-
-template <class _Iter>
-inline typename iterator_traits<_Iter>::iterator_category
-__iterator_category(const _Iter&)
-{
- typedef typename iterator_traits<_Iter>::iterator_category _Category;
- return _Category();
-}
-
-template <class _Iter>
-inline typename iterator_traits<_Iter>::difference_type*
-__distance_type(const _Iter&)
-{
- return static_cast<typename iterator_traits<_Iter>::difference_type*>(0);
-}
-
-template <class _Iter>
-inline typename iterator_traits<_Iter>::value_type*
-__value_type(const _Iter&)
-{
- return static_cast<typename iterator_traits<_Iter>::value_type*>(0);
-}
-
-template <class _Iter>
-inline typename iterator_traits<_Iter>::iterator_category
-iterator_category(const _Iter& __i) { return __iterator_category(__i); }
-
-
-template <class _Iter>
-inline typename iterator_traits<_Iter>::difference_type*
-distance_type(const _Iter& __i) { return __distance_type(__i); }
-
-template <class _Iter>
-inline typename iterator_traits<_Iter>::value_type*
-value_type(const _Iter& __i) { return __value_type(__i); }
-
-#define __ITERATOR_CATEGORY(__i) __iterator_category(__i)
-#define __DISTANCE_TYPE(__i) __distance_type(__i)
-#define __VALUE_TYPE(__i) __value_type(__i)
-
-#else /* __STL_CLASS_PARTIAL_SPECIALIZATION */
-
-template <class _Tp, class _Distance>
-inline input_iterator_tag
-iterator_category(const input_iterator<_Tp, _Distance>&)
- { return input_iterator_tag(); }
-
-inline output_iterator_tag iterator_category(const output_iterator&)
- { return output_iterator_tag(); }
-
-template <class _Tp, class _Distance>
-inline forward_iterator_tag
-iterator_category(const forward_iterator<_Tp, _Distance>&)
- { return forward_iterator_tag(); }
-
-template <class _Tp, class _Distance>
-inline bidirectional_iterator_tag
-iterator_category(const bidirectional_iterator<_Tp, _Distance>&)
- { return bidirectional_iterator_tag(); }
-
-template <class _Tp, class _Distance>
-inline random_access_iterator_tag
-iterator_category(const random_access_iterator<_Tp, _Distance>&)
- { return random_access_iterator_tag(); }
-
-template <class _Tp>
-inline random_access_iterator_tag iterator_category(const _Tp*)
- { return random_access_iterator_tag(); }
-
-template <class _Tp, class _Distance>
-inline _Tp* value_type(const input_iterator<_Tp, _Distance>&)
- { return (_Tp*)(0); }
-
-template <class _Tp, class _Distance>
-inline _Tp* value_type(const forward_iterator<_Tp, _Distance>&)
- { return (_Tp*)(0); }
-
-template <class _Tp, class _Distance>
-inline _Tp* value_type(const bidirectional_iterator<_Tp, _Distance>&)
- { return (_Tp*)(0); }
-
-template <class _Tp, class _Distance>
-inline _Tp* value_type(const random_access_iterator<_Tp, _Distance>&)
- { return (_Tp*)(0); }
-
-template <class _Tp>
-inline _Tp* value_type(const _Tp*) { return (_Tp*)(0); }
-
-template <class _Tp, class _Distance>
-inline _Distance* distance_type(const input_iterator<_Tp, _Distance>&)
-{
- return (_Distance*)(0);
-}
-
-template <class _Tp, class _Distance>
-inline _Distance* distance_type(const forward_iterator<_Tp, _Distance>&)
-{
- return (_Distance*)(0);
-}
-
-template <class _Tp, class _Distance>
-inline _Distance*
-distance_type(const bidirectional_iterator<_Tp, _Distance>&)
-{
- return (_Distance*)(0);
-}
-
-template <class _Tp, class _Distance>
-inline _Distance*
-distance_type(const random_access_iterator<_Tp, _Distance>&)
-{
- return (_Distance*)(0);
-}
-
-template <class _Tp>
-inline ptrdiff_t* distance_type(const _Tp*) { return (ptrdiff_t*)(0); }
-
-// Without partial specialization we can't use iterator_traits, so
-// we must keep the old iterator query functions around.
-
-#define __ITERATOR_CATEGORY(__i) iterator_category(__i)
-#define __DISTANCE_TYPE(__i) distance_type(__i)
-#define __VALUE_TYPE(__i) value_type(__i)
-
-#endif /* __STL_CLASS_PARTIAL_SPECIALIZATION */
-
-template <class _InputIterator, class _Distance>
-inline void __distance(_InputIterator __first, _InputIterator __last,
- _Distance& __n, input_iterator_tag)
-{
- while (__first != __last) { ++__first; ++__n; }
-}
-
-template <class _RandomAccessIterator, class _Distance>
-inline void __distance(_RandomAccessIterator __first,
- _RandomAccessIterator __last,
- _Distance& __n, random_access_iterator_tag)
-{
- __n += __last - __first;
-}
-
-template <class _InputIterator, class _Distance>
-inline void distance(_InputIterator __first,
- _InputIterator __last, _Distance& __n)
-{
- __distance(__first, __last, __n, iterator_category(__first));
-}
-
-#ifdef __STL_CLASS_PARTIAL_SPECIALIZATION
-
-template <class _InputIterator>
-inline typename iterator_traits<_InputIterator>::difference_type
-__distance(_InputIterator __first, _InputIterator __last, input_iterator_tag)
-{
- typename iterator_traits<_InputIterator>::difference_type __n = 0;
- while (__first != __last) {
- ++__first; ++__n;
- }
- return __n;
-}
-
-template <class _RandomAccessIterator>
-inline typename iterator_traits<_RandomAccessIterator>::difference_type
-__distance(_RandomAccessIterator __first, _RandomAccessIterator __last,
- random_access_iterator_tag) {
- return __last - __first;
-}
-
-template <class _InputIterator>
-inline typename iterator_traits<_InputIterator>::difference_type
-distance(_InputIterator __first, _InputIterator __last) {
- typedef typename iterator_traits<_InputIterator>::iterator_category
- _Category;
- return __distance(__first, __last, _Category());
-}
-
-#endif /* __STL_CLASS_PARTIAL_SPECIALIZATION */
-
-template <class _InputIter, class _Distance>
-inline void __advance(_InputIter& __i, _Distance __n, input_iterator_tag) {
- while (__n--) ++__i;
-}
-
-#if defined(__sgi) && !defined(__GNUC__) && (_MIPS_SIM != _MIPS_SIM_ABI32)
-#pragma set woff 1183
-#endif
-
-template <class _BidirectionalIterator, class _Distance>
-inline void __advance(_BidirectionalIterator& __i, _Distance __n,
- bidirectional_iterator_tag) {
- if (__n >= 0)
- while (__n--) ++__i;
- else
- while (__n++) --__i;
-}
-
-#if defined(__sgi) && !defined(__GNUC__) && (_MIPS_SIM != _MIPS_SIM_ABI32)
-#pragma reset woff 1183
-#endif
-
-template <class _RandomAccessIterator, class _Distance>
-inline void __advance(_RandomAccessIterator& __i, _Distance __n,
- random_access_iterator_tag) {
- __i += __n;
-}
-
-template <class _InputIterator, class _Distance>
-inline void advance(_InputIterator& __i, _Distance __n) {
- __advance(__i, __n, iterator_category(__i));
-}
-
-template <class _Container>
-class back_insert_iterator {
-protected:
- _Container* container;
-public:
- typedef _Container container_type;
- typedef output_iterator_tag iterator_category;
- typedef void value_type;
- typedef void difference_type;
- typedef void pointer;
- typedef void reference;
-
- explicit back_insert_iterator(_Container& __x) : container(&__x) {}
- back_insert_iterator<_Container>&
- operator=(const typename _Container::value_type& __value) {
- container->push_back(__value);
- return *this;
- }
- back_insert_iterator<_Container>& operator*() { return *this; }
- back_insert_iterator<_Container>& operator++() { return *this; }
- back_insert_iterator<_Container>& operator++(int) { return *this; }
-};
-
-#ifndef __STL_CLASS_PARTIAL_SPECIALIZATION
-
-template <class _Container>
-inline output_iterator_tag
-iterator_category(const back_insert_iterator<_Container>&)
-{
- return output_iterator_tag();
-}
-
-#endif /* __STL_CLASS_PARTIAL_SPECIALIZATION */
-
-template <class _Container>
-inline back_insert_iterator<_Container> back_inserter(_Container& __x) {
- return back_insert_iterator<_Container>(__x);
-}
-
-template <class _Container>
-class front_insert_iterator {
-protected:
- _Container* container;
-public:
- typedef _Container container_type;
- typedef output_iterator_tag iterator_category;
- typedef void value_type;
- typedef void difference_type;
- typedef void pointer;
- typedef void reference;
-
- explicit front_insert_iterator(_Container& __x) : container(&__x) {}
- front_insert_iterator<_Container>&
- operator=(const typename _Container::value_type& __value) {
- container->push_front(__value);
- return *this;
- }
- front_insert_iterator<_Container>& operator*() { return *this; }
- front_insert_iterator<_Container>& operator++() { return *this; }
- front_insert_iterator<_Container>& operator++(int) { return *this; }
-};
-
-#ifndef __STL_CLASS_PARTIAL_SPECIALIZATION
-
-template <class _Container>
-inline output_iterator_tag
-iterator_category(const front_insert_iterator<_Container>&)
-{
- return output_iterator_tag();
-}
-
-#endif /* __STL_CLASS_PARTIAL_SPECIALIZATION */
-
-template <class _Container>
-inline front_insert_iterator<_Container> front_inserter(_Container& __x) {
- return front_insert_iterator<_Container>(__x);
-}
-
-template <class _Container>
-class insert_iterator {
-protected:
- _Container* container;
- typename _Container::iterator iter;
-public:
- typedef _Container container_type;
- typedef output_iterator_tag iterator_category;
- typedef void value_type;
- typedef void difference_type;
- typedef void pointer;
- typedef void reference;
-
- insert_iterator(_Container& __x, typename _Container::iterator __i)
- : container(&__x), iter(__i) {}
- insert_iterator<_Container>&
- operator=(const typename _Container::value_type& __value) {
- iter = container->insert(iter, __value);
- ++iter;
- return *this;
- }
- insert_iterator<_Container>& operator*() { return *this; }
- insert_iterator<_Container>& operator++() { return *this; }
- insert_iterator<_Container>& operator++(int) { return *this; }
-};
-
-#ifndef __STL_CLASS_PARTIAL_SPECIALIZATION
-
-template <class _Container>
-inline output_iterator_tag
-iterator_category(const insert_iterator<_Container>&)
-{
- return output_iterator_tag();
-}
-
-#endif /* __STL_CLASS_PARTIAL_SPECIALIZATION */
-
-template <class _Container, class _Iterator>
-inline
-insert_iterator<_Container> inserter(_Container& __x, _Iterator __i)
-{
- typedef typename _Container::iterator __iter;
- return insert_iterator<_Container>(__x, __iter(__i));
-}
-
-#ifndef __STL_LIMITED_DEFAULT_TEMPLATES
-template <class _BidirectionalIterator, class _Tp, class _Reference = _Tp&,
- class _Distance = ptrdiff_t>
-#else
-template <class _BidirectionalIterator, class _Tp, class _Reference,
- class _Distance>
-#endif
-class reverse_bidirectional_iterator {
- typedef reverse_bidirectional_iterator<_BidirectionalIterator, _Tp,
- _Reference, _Distance> _Self;
-protected:
- _BidirectionalIterator current;
-public:
- typedef bidirectional_iterator_tag iterator_category;
- typedef _Tp value_type;
- typedef _Distance difference_type;
- typedef _Tp* pointer;
- typedef _Reference reference;
-
- reverse_bidirectional_iterator() {}
- explicit reverse_bidirectional_iterator(_BidirectionalIterator __x)
- : current(__x) {}
- _BidirectionalIterator base() const { return current; }
- _Reference operator*() const {
- _BidirectionalIterator __tmp = current;
- return *--__tmp;
- }
-#ifndef __SGI_STL_NO_ARROW_OPERATOR
- pointer operator->() const { return &(operator*()); }
-#endif /* __SGI_STL_NO_ARROW_OPERATOR */
- _Self& operator++() {
- --current;
- return *this;
- }
- _Self operator++(int) {
- _Self __tmp = *this;
- --current;
- return __tmp;
- }
- _Self& operator--() {
- ++current;
- return *this;
- }
- _Self operator--(int) {
- _Self __tmp = *this;
- ++current;
- return __tmp;
- }
-};
-
-#ifndef __STL_CLASS_PARTIAL_SPECIALIZATION
-
-template <class _BidirectionalIterator, class _Tp, class _Reference,
- class _Distance>
-inline bidirectional_iterator_tag
-iterator_category(const reverse_bidirectional_iterator<_BidirectionalIterator,
- _Tp, _Reference,
- _Distance>&)
-{
- return bidirectional_iterator_tag();
-}
-
-template <class _BidirectionalIterator, class _Tp, class _Reference,
- class _Distance>
-inline _Tp*
-value_type(const reverse_bidirectional_iterator<_BidirectionalIterator, _Tp,
- _Reference, _Distance>&)
-{
- return (_Tp*) 0;
-}
-
-template <class _BidirectionalIterator, class _Tp, class _Reference,
- class _Distance>
-inline _Distance*
-distance_type(const reverse_bidirectional_iterator<_BidirectionalIterator,
- _Tp,
- _Reference, _Distance>&)
-{
- return (_Distance*) 0;
-}
-
-#endif /* __STL_CLASS_PARTIAL_SPECIALIZATION */
-
-template <class _BiIter, class _Tp, class _Ref,
- class _Distance>
-inline bool operator==(
- const reverse_bidirectional_iterator<_BiIter, _Tp, _Ref, _Distance>& __x,
- const reverse_bidirectional_iterator<_BiIter, _Tp, _Ref, _Distance>& __y)
-{
- return __x.base() == __y.base();
-}
-
-#ifdef __STL_CLASS_PARTIAL_SPECIALIZATION
-
-// This is the new version of reverse_iterator, as defined in the
-// draft C++ standard. It relies on the iterator_traits template,
-// which in turn relies on partial specialization. The class
-// reverse_bidirectional_iterator is no longer part of the draft
-// standard, but it is retained for backward compatibility.
-
-template <class _Iterator>
-class reverse_iterator
-{
-protected:
- _Iterator current;
-public:
- typedef typename iterator_traits<_Iterator>::iterator_category
- iterator_category;
- typedef typename iterator_traits<_Iterator>::value_type
- value_type;
- typedef typename iterator_traits<_Iterator>::difference_type
- difference_type;
- typedef typename iterator_traits<_Iterator>::pointer
- pointer;
- typedef typename iterator_traits<_Iterator>::reference
- reference;
-
- typedef _Iterator iterator_type;
- typedef reverse_iterator<_Iterator> _Self;
-
-public:
- reverse_iterator() {}
- explicit reverse_iterator(iterator_type __x) : current(__x) {}
-
- reverse_iterator(const _Self& __x) : current(__x.current) {}
-#ifdef __STL_MEMBER_TEMPLATES
- template <class _Iter>
- reverse_iterator(const reverse_iterator<_Iter>& __x)
- : current(__x.base()) {}
-#endif /* __STL_MEMBER_TEMPLATES */
-
- iterator_type base() const { return current; }
- reference operator*() const {
- _Iterator __tmp = current;
- return *--__tmp;
- }
-#ifndef __SGI_STL_NO_ARROW_OPERATOR
- pointer operator->() const { return &(operator*()); }
-#endif /* __SGI_STL_NO_ARROW_OPERATOR */
-
- _Self& operator++() {
- --current;
- return *this;
- }
- _Self operator++(int) {
- _Self __tmp = *this;
- --current;
- return __tmp;
- }
- _Self& operator--() {
- ++current;
- return *this;
- }
- _Self operator--(int) {
- _Self __tmp = *this;
- ++current;
- return __tmp;
- }
-
- _Self operator+(difference_type __n) const {
- return _Self(current - __n);
- }
- _Self& operator+=(difference_type __n) {
- current -= __n;
- return *this;
- }
- _Self operator-(difference_type __n) const {
- return _Self(current + __n);
- }
- _Self& operator-=(difference_type __n) {
- current += __n;
- return *this;
- }
- reference operator[](difference_type __n) const { return *(*this + __n); }
-};
-
-template <class _Iterator>
-inline bool operator==(const reverse_iterator<_Iterator>& __x,
- const reverse_iterator<_Iterator>& __y) {
- return __x.base() == __y.base();
-}
-
-template <class _Iterator>
-inline bool operator<(const reverse_iterator<_Iterator>& __x,
- const reverse_iterator<_Iterator>& __y) {
- return __y.base() < __x.base();
-}
-
-template <class _Iterator>
-inline typename reverse_iterator<_Iterator>::difference_type
-operator-(const reverse_iterator<_Iterator>& __x,
- const reverse_iterator<_Iterator>& __y) {
- return __y.base() - __x.base();
-}
-
-template <class _Iterator>
-inline reverse_iterator<_Iterator>
-operator+(typename reverse_iterator<_Iterator>::difference_type __n,
- const reverse_iterator<_Iterator>& __x) {
- return reverse_iterator<_Iterator>(__x.base() - __n);
-}
-
-#else /* __STL_CLASS_PARTIAL_SPECIALIZATION */
-
-// This is the old version of reverse_iterator, as found in the original
-// HP STL. It does not use partial specialization.
-
-#ifndef __STL_LIMITED_DEFAULT_TEMPLATES
-template <class _RandomAccessIterator, class _Tp, class _Reference = _Tp&,
- class _Distance = ptrdiff_t>
-#else
-template <class _RandomAccessIterator, class _Tp, class _Reference,
- class _Distance>
-#endif
-class reverse_iterator {
- typedef reverse_iterator<_RandomAccessIterator, _Tp, _Reference, _Distance>
- _Self;
-protected:
- _RandomAccessIterator current;
-public:
- typedef random_access_iterator_tag iterator_category;
- typedef _Tp value_type;
- typedef _Distance difference_type;
- typedef _Tp* pointer;
- typedef _Reference reference;
-
- reverse_iterator() {}
- explicit reverse_iterator(_RandomAccessIterator __x) : current(__x) {}
- _RandomAccessIterator base() const { return current; }
- _Reference operator*() const { return *(current - 1); }
-#ifndef __SGI_STL_NO_ARROW_OPERATOR
- pointer operator->() const { return &(operator*()); }
-#endif /* __SGI_STL_NO_ARROW_OPERATOR */
- _Self& operator++() {
- --current;
- return *this;
- }
- _Self operator++(int) {
- _Self __tmp = *this;
- --current;
- return __tmp;
- }
- _Self& operator--() {
- ++current;
- return *this;
- }
- _Self operator--(int) {
- _Self __tmp = *this;
- ++current;
- return __tmp;
- }
- _Self operator+(_Distance __n) const {
- return _Self(current - __n);
- }
- _Self& operator+=(_Distance __n) {
- current -= __n;
- return *this;
- }
- _Self operator-(_Distance __n) const {
- return _Self(current + __n);
- }
- _Self& operator-=(_Distance __n) {
- current += __n;
- return *this;
- }
- _Reference operator[](_Distance __n) const { return *(*this + __n); }
-};
-
-template <class _RandomAccessIterator, class _Tp,
- class _Reference, class _Distance>
-inline random_access_iterator_tag
-iterator_category(const reverse_iterator<_RandomAccessIterator, _Tp,
- _Reference, _Distance>&)
-{
- return random_access_iterator_tag();
-}
-
-template <class _RandomAccessIterator, class _Tp,
- class _Reference, class _Distance>
-inline _Tp* value_type(const reverse_iterator<_RandomAccessIterator, _Tp,
- _Reference, _Distance>&)
-{
- return (_Tp*) 0;
-}
-
-template <class _RandomAccessIterator, class _Tp,
- class _Reference, class _Distance>
-inline _Distance*
-distance_type(const reverse_iterator<_RandomAccessIterator,
- _Tp, _Reference, _Distance>&)
-{
- return (_Distance*) 0;
-}
-
-
-template <class _RandomAccessIterator, class _Tp,
- class _Reference, class _Distance>
-inline bool
-operator==(const reverse_iterator<_RandomAccessIterator, _Tp,
- _Reference, _Distance>& __x,
- const reverse_iterator<_RandomAccessIterator, _Tp,
- _Reference, _Distance>& __y)
-{
- return __x.base() == __y.base();
-}
-
-template <class _RandomAccessIterator, class _Tp,
- class _Reference, class _Distance>
-inline bool
-operator<(const reverse_iterator<_RandomAccessIterator, _Tp,
- _Reference, _Distance>& __x,
- const reverse_iterator<_RandomAccessIterator, _Tp,
- _Reference, _Distance>& __y)
-{
- return __y.base() < __x.base();
-}
-
-template <class _RandomAccessIterator, class _Tp,
- class _Reference, class _Distance>
-inline _Distance
-operator-(const reverse_iterator<_RandomAccessIterator, _Tp,
- _Reference, _Distance>& __x,
- const reverse_iterator<_RandomAccessIterator, _Tp,
- _Reference, _Distance>& __y)
-{
- return __y.base() - __x.base();
-}
-
-template <class _RandAccIter, class _Tp, class _Ref, class _Dist>
-inline reverse_iterator<_RandAccIter, _Tp, _Ref, _Dist>
-operator+(_Dist __n,
- const reverse_iterator<_RandAccIter, _Tp, _Ref, _Dist>& __x)
-{
- return reverse_iterator<_RandAccIter, _Tp, _Ref, _Dist>(__x.base() - __n);
-}
-
-#endif /* __STL_CLASS_PARTIAL_SPECIALIZATION */
-
-// When we have templatized iostreams, istream_iterator and ostream_iterator
-// must be rewritten.
-
-template <class _Tp, class _Dist = ptrdiff_t>
-class istream_iterator {
- friend bool operator== __STL_NULL_TMPL_ARGS (const istream_iterator&,
- const istream_iterator&);
-protected:
- istream* _M_stream;
- _Tp _M_value;
- bool _M_end_marker;
- void _M_read() {
- _M_end_marker = (*_M_stream) ? true : false;
- if (_M_end_marker) *_M_stream >> _M_value;
- _M_end_marker = (*_M_stream) ? true : false;
- }
-public:
- typedef input_iterator_tag iterator_category;
- typedef _Tp value_type;
- typedef _Dist difference_type;
- typedef const _Tp* pointer;
- typedef const _Tp& reference;
-
- istream_iterator() : _M_stream(&cin), _M_end_marker(false) {}
- istream_iterator(istream& __s) : _M_stream(&__s) { _M_read(); }
- reference operator*() const { return _M_value; }
-#ifndef __SGI_STL_NO_ARROW_OPERATOR
- pointer operator->() const { return &(operator*()); }
-#endif /* __SGI_STL_NO_ARROW_OPERATOR */
- istream_iterator<_Tp, _Dist>& operator++() {
- _M_read();
- return *this;
- }
- istream_iterator<_Tp, _Dist> operator++(int) {
- istream_iterator<_Tp, _Dist> __tmp = *this;
- _M_read();
- return __tmp;
- }
-};
-
-#ifndef __STL_CLASS_PARTIAL_SPECIALIZATION
-
-template <class _Tp, class _Dist>
-inline input_iterator_tag
-iterator_category(const istream_iterator<_Tp, _Dist>&)
-{
- return input_iterator_tag();
-}
-
-template <class _Tp, class _Dist>
-inline _Tp*
-value_type(const istream_iterator<_Tp, _Dist>&) { return (_Tp*) 0; }
-
-template <class _Tp, class _Dist>
-inline _Dist*
-distance_type(const istream_iterator<_Tp, _Dist>&) { return (_Dist*)0; }
-
-#endif /* __STL_CLASS_PARTIAL_SPECIALIZATION */
-
-template <class _Tp, class _Distance>
-inline bool operator==(const istream_iterator<_Tp, _Distance>& __x,
- const istream_iterator<_Tp, _Distance>& __y) {
- return (__x._M_stream == __y._M_stream &&
- __x._M_end_marker == __y._M_end_marker) ||
- __x._M_end_marker == false && __y._M_end_marker == false;
-}
-
-template <class _Tp>
-class ostream_iterator {
-protected:
- ostream* _M_stream;
- const char* _M_string;
-public:
- typedef output_iterator_tag iterator_category;
- typedef void value_type;
- typedef void difference_type;
- typedef void pointer;
- typedef void reference;
-
- ostream_iterator(ostream& __s) : _M_stream(&__s), _M_string(0) {}
- ostream_iterator(ostream& __s, const char* __c)
- : _M_stream(&__s), _M_string(__c) {}
- ostream_iterator<_Tp>& operator=(const _Tp& __value) {
- *_M_stream << __value;
- if (_M_string) *_M_stream << _M_string;
- return *this;
- }
- ostream_iterator<_Tp>& operator*() { return *this; }
- ostream_iterator<_Tp>& operator++() { return *this; }
- ostream_iterator<_Tp>& operator++(int) { return *this; }
-};
-
-#ifndef __STL_CLASS_PARTIAL_SPECIALIZATION
-
-template <class _Tp>
-inline output_iterator_tag
-iterator_category(const ostream_iterator<_Tp>&) {
- return output_iterator_tag();
-}
-
-#endif /* __STL_CLASS_PARTIAL_SPECIALIZATION */
-
-__STL_END_NAMESPACE
-
-#endif /* __SGI_STL_INTERNAL_ITERATOR_H */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/stl_list.h b/contrib/libstdc++/stl/stl_list.h
deleted file mode 100644
index 5d95d641e52d..000000000000
--- a/contrib/libstdc++/stl/stl_list.h
+++ /dev/null
@@ -1,840 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- * Copyright (c) 1996,1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-/* NOTE: This is an internal header file, included by other STL headers.
- * You should not attempt to use it directly.
- */
-
-#ifndef __SGI_STL_INTERNAL_LIST_H
-#define __SGI_STL_INTERNAL_LIST_H
-
-__STL_BEGIN_NAMESPACE
-
-#if defined(__sgi) && !defined(__GNUC__) && (_MIPS_SIM != _MIPS_SIM_ABI32)
-#pragma set woff 1174
-#pragma set woff 1375
-#endif
-
-template <class _Tp>
-struct _List_node {
- typedef void* _Void_pointer;
- _Void_pointer _M_next;
- _Void_pointer _M_prev;
- _Tp _M_data;
-};
-
-template<class _Tp, class _Ref, class _Ptr>
-struct _List_iterator {
- typedef _List_iterator<_Tp,_Tp&,_Tp*> iterator;
- typedef _List_iterator<_Tp,const _Tp&,const _Tp*> const_iterator;
- typedef _List_iterator<_Tp,_Ref,_Ptr> _Self;
-
- typedef bidirectional_iterator_tag iterator_category;
- typedef _Tp value_type;
- typedef _Ptr pointer;
- typedef _Ref reference;
- typedef _List_node<_Tp> _Node;
- typedef size_t size_type;
- typedef ptrdiff_t difference_type;
-
- _Node* _M_node;
-
- _List_iterator(_Node* __x) : _M_node(__x) {}
- _List_iterator() {}
- _List_iterator(const iterator& __x) : _M_node(__x._M_node) {}
-
- bool operator==(const _Self& __x) const { return _M_node == __x._M_node; }
- bool operator!=(const _Self& __x) const { return _M_node != __x._M_node; }
- reference operator*() const { return (*_M_node)._M_data; }
-
-#ifndef __SGI_STL_NO_ARROW_OPERATOR
- pointer operator->() const { return &(operator*()); }
-#endif /* __SGI_STL_NO_ARROW_OPERATOR */
-
- _Self& operator++() {
- _M_node = (_Node*)(_M_node->_M_next);
- return *this;
- }
- _Self operator++(int) {
- _Self __tmp = *this;
- ++*this;
- return __tmp;
- }
- _Self& operator--() {
- _M_node = (_Node*)(_M_node->_M_prev);
- return *this;
- }
- _Self operator--(int) {
- _Self __tmp = *this;
- --*this;
- return __tmp;
- }
-};
-
-#ifndef __STL_CLASS_PARTIAL_SPECIALIZATION
-
-template <class _Tp, class _Ref, class _Ptr>
-inline bidirectional_iterator_tag
-iterator_category(const _List_iterator<_Tp, _Ref, _Ptr>&)
-{
- return bidirectional_iterator_tag();
-}
-
-template <class _Tp, class _Ref, class _Ptr>
-inline _Tp*
-value_type(const _List_iterator<_Tp, _Ref, _Ptr>&)
-{
- return 0;
-}
-
-template <class _Tp, class _Ref, class _Ptr>
-inline ptrdiff_t*
-distance_type(const _List_iterator<_Tp, _Ref, _Ptr>&)
-{
- return 0;
-}
-
-#endif /* __STL_CLASS_PARTIAL_SPECIALIZATION */
-
-
-// Base class that encapsulates details of allocators. Three cases:
-// an ordinary standard-conforming allocator, a standard-conforming
-// allocator with no non-static data, and an SGI-style allocator.
-// This complexity is necessary only because we're worrying about backward
-// compatibility and because we want to avoid wasting storage on an
-// allocator instance if it isn't necessary.
-
-#ifdef __STL_USE_STD_ALLOCATORS
-
-// Base for general standard-conforming allocators.
-template <class _Tp, class _Allocator, bool _IsStatic>
-class _List_alloc_base {
-public:
- typedef typename _Alloc_traits<_Tp, _Allocator>::allocator_type
- allocator_type;
- allocator_type get_allocator() const { return _Node_allocator; }
-
- _List_alloc_base(const allocator_type& __a) : _Node_allocator(__a) {}
-
-protected:
- _List_node<_Tp>* _M_get_node()
- { return _Node_allocator.allocate(1); }
- void _M_put_node(_List_node<_Tp>* __p)
- { _Node_allocator.deallocate(__p, 1); }
-
-protected:
- typename _Alloc_traits<_List_node<_Tp>, _Allocator>::allocator_type
- _Node_allocator;
- _List_node<_Tp>* _M_node;
-};
-
-// Specialization for instanceless allocators.
-
-template <class _Tp, class _Allocator>
-class _List_alloc_base<_Tp, _Allocator, true> {
-public:
- typedef typename _Alloc_traits<_Tp, _Allocator>::allocator_type
- allocator_type;
- allocator_type get_allocator() const { return allocator_type(); }
-
- _List_alloc_base(const allocator_type&) {}
-
-protected:
- typedef typename _Alloc_traits<_List_node<_Tp>, _Allocator>::_Alloc_type
- _Alloc_type;
- _List_node<_Tp>* _M_get_node() { return _Alloc_type::allocate(1); }
- void _M_put_node(_List_node<_Tp>* __p) { _Alloc_type::deallocate(__p, 1); }
-
-protected:
- _List_node<_Tp>* _M_node;
-};
-
-template <class _Tp, class _Alloc>
-class _List_base
- : public _List_alloc_base<_Tp, _Alloc,
- _Alloc_traits<_Tp, _Alloc>::_S_instanceless>
-{
-public:
- typedef _List_alloc_base<_Tp, _Alloc,
- _Alloc_traits<_Tp, _Alloc>::_S_instanceless>
- _Base;
- typedef typename _Base::allocator_type allocator_type;
-
- _List_base(const allocator_type& __a) : _Base(__a) {
- _M_node = _M_get_node();
- _M_node->_M_next = _M_node;
- _M_node->_M_prev = _M_node;
- }
- ~_List_base() {
- clear();
- _M_put_node(_M_node);
- }
-
- void clear();
-};
-
-#else /* __STL_USE_STD_ALLOCATORS */
-
-template <class _Tp, class _Alloc>
-class _List_base
-{
-public:
- typedef _Alloc allocator_type;
- allocator_type get_allocator() const { return allocator_type(); }
-
- _List_base(const allocator_type&) {
- _M_node = _M_get_node();
- _M_node->_M_next = _M_node;
- _M_node->_M_prev = _M_node;
- }
- ~_List_base() {
- clear();
- _M_put_node(_M_node);
- }
-
- void clear();
-
-protected:
- typedef simple_alloc<_List_node<_Tp>, _Alloc> _Alloc_type;
- _List_node<_Tp>* _M_get_node() { return _Alloc_type::allocate(1); }
- void _M_put_node(_List_node<_Tp>* __p) { _Alloc_type::deallocate(__p, 1); }
-
-protected:
- _List_node<_Tp>* _M_node;
-};
-
-#endif /* __STL_USE_STD_ALLOCATORS */
-
-template <class _Tp, class _Alloc>
-void
-_List_base<_Tp,_Alloc>::clear()
-{
- _List_node<_Tp>* __cur = (_List_node<_Tp>*) _M_node->_M_next;
- while (__cur != _M_node) {
- _List_node<_Tp>* __tmp = __cur;
- __cur = (_List_node<_Tp>*) __cur->_M_next;
- destroy(&__tmp->_M_data);
- _M_put_node(__tmp);
- }
- _M_node->_M_next = _M_node;
- _M_node->_M_prev = _M_node;
-}
-
-template <class _Tp, class _Alloc = __STL_DEFAULT_ALLOCATOR(_Tp) >
-class list : protected _List_base<_Tp, _Alloc> {
- typedef _List_base<_Tp, _Alloc> _Base;
-protected:
- typedef void* _Void_pointer;
-
-public:
- typedef _Tp value_type;
- typedef value_type* pointer;
- typedef const value_type* const_pointer;
- typedef value_type& reference;
- typedef const value_type& const_reference;
- typedef _List_node<_Tp> _Node;
- typedef size_t size_type;
- typedef ptrdiff_t difference_type;
-
- typedef typename _Base::allocator_type allocator_type;
- allocator_type get_allocator() const { return _Base::get_allocator(); }
-
-public:
- typedef _List_iterator<_Tp,_Tp&,_Tp*> iterator;
- typedef _List_iterator<_Tp,const _Tp&,const _Tp*> const_iterator;
-
-#ifdef __STL_CLASS_PARTIAL_SPECIALIZATION
- typedef reverse_iterator<const_iterator> const_reverse_iterator;
- typedef reverse_iterator<iterator> reverse_iterator;
-#else /* __STL_CLASS_PARTIAL_SPECIALIZATION */
- typedef reverse_bidirectional_iterator<const_iterator,value_type,
- const_reference,difference_type>
- const_reverse_iterator;
- typedef reverse_bidirectional_iterator<iterator,value_type,reference,
- difference_type>
- reverse_iterator;
-#endif /* __STL_CLASS_PARTIAL_SPECIALIZATION */
-
-protected:
-#ifdef __STL_HAS_NAMESPACES
- using _Base::_M_node;
- using _Base::_M_put_node;
- using _Base::_M_get_node;
-#endif /* __STL_HAS_NAMESPACES */
-
-protected:
- _Node* _M_create_node(const _Tp& __x)
- {
- _Node* __p = _M_get_node();
- __STL_TRY {
- construct(&__p->_M_data, __x);
- }
- __STL_UNWIND(_M_put_node(__p));
- return __p;
- }
-
- _Node* _M_create_node()
- {
- _Node* __p = _M_get_node();
- __STL_TRY {
- construct(&__p->_M_data);
- }
- __STL_UNWIND(_M_put_node(__p));
- return __p;
- }
-
-public:
- explicit list(const allocator_type& __a = allocator_type()) : _Base(__a) {}
-
- iterator begin() { return (_Node*)(_M_node->_M_next); }
- const_iterator begin() const { return (_Node*)(_M_node->_M_next); }
-
- iterator end() { return _M_node; }
- const_iterator end() const { return _M_node; }
-
- reverse_iterator rbegin()
- { return reverse_iterator(end()); }
- const_reverse_iterator rbegin() const
- { return const_reverse_iterator(end()); }
-
- reverse_iterator rend()
- { return reverse_iterator(begin()); }
- const_reverse_iterator rend() const
- { return const_reverse_iterator(begin()); }
-
- bool empty() const { return _M_node->_M_next == _M_node; }
- size_type size() const {
- size_type __result = 0;
- distance(begin(), end(), __result);
- return __result;
- }
- size_type max_size() const { return size_type(-1); }
-
- reference front() { return *begin(); }
- const_reference front() const { return *begin(); }
- reference back() { return *(--end()); }
- const_reference back() const { return *(--end()); }
-
- void swap(list<_Tp, _Alloc>& __x) { __STD::swap(_M_node, __x._M_node); }
-
- iterator insert(iterator __position, const _Tp& __x) {
- _Node* __tmp = _M_create_node(__x);
- __tmp->_M_next = __position._M_node;
- __tmp->_M_prev = __position._M_node->_M_prev;
- ((_Node*) (__position._M_node->_M_prev))->_M_next = __tmp;
- __position._M_node->_M_prev = __tmp;
- return __tmp;
- }
- iterator insert(iterator __position) { return insert(__position, _Tp()); }
-#ifdef __STL_MEMBER_TEMPLATES
- // Check whether it's an integral type. If so, it's not an iterator.
-
- template<class _Integer>
- void _M_insert_dispatch(iterator __pos, _Integer __n, _Integer __x,
- __true_type) {
- insert(__pos, (size_type) __n, (_Tp) __x);
- }
-
- template <class _InputIterator>
- void _M_insert_dispatch(iterator __pos,
- _InputIterator __first, _InputIterator __last,
- __false_type);
-
- template <class _InputIterator>
- void insert(iterator __pos, _InputIterator __first, _InputIterator __last) {
- typedef typename _Is_integer<_InputIterator>::_Integral _Integral;
- _M_insert_dispatch(__pos, __first, __last, _Integral());
- }
-
-#else /* __STL_MEMBER_TEMPLATES */
- void insert(iterator __position, const _Tp* __first, const _Tp* __last);
- void insert(iterator __position,
- const_iterator __first, const_iterator __last);
-#endif /* __STL_MEMBER_TEMPLATES */
- void insert(iterator __pos, size_type __n, const _Tp& __x);
-
- void push_front(const _Tp& __x) { insert(begin(), __x); }
- void push_front() {insert(begin());}
- void push_back(const _Tp& __x) { insert(end(), __x); }
- void push_back() {insert(end());}
-
- iterator erase(iterator __position) {
- _Node* __next_node = (_Node*) (__position._M_node->_M_next);
- _Node* __prev_node = (_Node*) (__position._M_node->_M_prev);
- __prev_node->_M_next = __next_node;
- __next_node->_M_prev = __prev_node;
- destroy(&__position._M_node->_M_data);
- _M_put_node(__position._M_node);
- return iterator(__next_node);
- }
- iterator erase(iterator __first, iterator __last);
- void clear() { _Base::clear(); }
-
- void resize(size_type __new_size, const _Tp& __x);
- void resize(size_type __new_size) { resize(__new_size, _Tp()); }
-
- void pop_front() { erase(begin()); }
- void pop_back() {
- iterator __tmp = end();
- erase(--__tmp);
- }
- list(size_type __n, const _Tp& __value,
- const allocator_type& __a = allocator_type())
- : _Base(__a)
- { insert(begin(), __n, __value); }
- explicit list(size_type __n)
- : _Base(allocator_type())
- { insert(begin(), __n, _Tp()); }
-
-#ifdef __STL_MEMBER_TEMPLATES
-
- // We don't need any dispatching tricks here, because insert does all of
- // that anyway.
- template <class _InputIterator>
- list(_InputIterator __first, _InputIterator __last,
- const allocator_type& __a = allocator_type())
- : _Base(__a)
- { insert(begin(), __first, __last); }
-
-#else /* __STL_MEMBER_TEMPLATES */
-
- list(const _Tp* __first, const _Tp* __last,
- const allocator_type& __a = allocator_type())
- : _Base(__a)
- { insert(begin(), __first, __last); }
- list(const_iterator __first, const_iterator __last,
- const allocator_type& __a = allocator_type())
- : _Base(__a)
- { insert(begin(), __first, __last); }
-
-#endif /* __STL_MEMBER_TEMPLATES */
- list(const list<_Tp, _Alloc>& __x) : _Base(__x.get_allocator())
- { insert(begin(), __x.begin(), __x.end()); }
-
- ~list() { }
-
- list<_Tp, _Alloc>& operator=(const list<_Tp, _Alloc>& __x);
-
-public:
- // assign(), a generalized assignment member function. Two
- // versions: one that takes a count, and one that takes a range.
- // The range version is a member template, so we dispatch on whether
- // or not the type is an integer.
-
- void assign(size_type __n, const _Tp& __val);
-
-#ifdef __STL_MEMBER_TEMPLATES
-
- template <class _InputIterator>
- void assign(_InputIterator __first, _InputIterator __last) {
- typedef typename _Is_integer<_InputIterator>::_Integral _Integral;
- _M_assign_dispatch(__first, __last, _Integral());
- }
-
- template <class _Integer>
- void _M_assign_dispatch(_Integer __n, _Integer __val, __true_type)
- { assign((size_type) __n, (_Tp) __val); }
-
- template <class _InputIterator>
- void _M_assign_dispatch(_InputIterator __first, _InputIterator __last,
- __false_type);
-
-#endif /* __STL_MEMBER_TEMPLATES */
-
-protected:
- void transfer(iterator __position, iterator __first, iterator __last) {
- if (__position != __last) {
- // Remove [first, last) from its old position.
- ((_Node*) (__last._M_node->_M_prev))->_M_next = __position._M_node;
- ((_Node*) (__first._M_node->_M_prev))->_M_next = __last._M_node;
- ((_Node*) (__position._M_node->_M_prev))->_M_next = __first._M_node;
-
- // Splice [first, last) into its new position.
- _Node* __tmp = (_Node*) (__position._M_node->_M_prev);
- __position._M_node->_M_prev = __last._M_node->_M_prev;
- __last._M_node->_M_prev = __first._M_node->_M_prev;
- __first._M_node->_M_prev = __tmp;
- }
- }
-
-public:
- void splice(iterator __position, list& __x) {
- if (!__x.empty())
- transfer(__position, __x.begin(), __x.end());
- }
- void splice(iterator __position, list&, iterator __i) {
- iterator __j = __i;
- ++__j;
- if (__position == __i || __position == __j) return;
- transfer(__position, __i, __j);
- }
- void splice(iterator __position, list&, iterator __first, iterator __last) {
- if (__first != __last)
- transfer(__position, __first, __last);
- }
- void remove(const _Tp& __value);
- void unique();
- void merge(list& __x);
- void reverse();
- void sort();
-
-#ifdef __STL_MEMBER_TEMPLATES
- template <class _Predicate> void remove_if(_Predicate);
- template <class _BinaryPredicate> void unique(_BinaryPredicate);
- template <class _StrictWeakOrdering> void merge(list&, _StrictWeakOrdering);
- template <class _StrictWeakOrdering> void sort(_StrictWeakOrdering);
-#endif /* __STL_MEMBER_TEMPLATES */
-
- friend bool operator== __STL_NULL_TMPL_ARGS (
- const list& __x, const list& __y);
-};
-
-template <class _Tp, class _Alloc>
-inline bool operator==(const list<_Tp,_Alloc>& __x,
- const list<_Tp,_Alloc>& __y)
-{
- typedef typename list<_Tp,_Alloc>::_Node _Node;
- _Node* __e1 = __x._M_node;
- _Node* __e2 = __y._M_node;
- _Node* __n1 = (_Node*) __e1->_M_next;
- _Node* __n2 = (_Node*) __e2->_M_next;
- for ( ; __n1 != __e1 && __n2 != __e2 ;
- __n1 = (_Node*) __n1->_M_next, __n2 = (_Node*) __n2->_M_next)
- if (__n1->_M_data != __n2->_M_data)
- return false;
- return __n1 == __e1 && __n2 == __e2;
-}
-
-template <class _Tp, class _Alloc>
-inline bool operator<(const list<_Tp,_Alloc>& __x,
- const list<_Tp,_Alloc>& __y)
-{
- return lexicographical_compare(__x.begin(), __x.end(),
- __y.begin(), __y.end());
-}
-
-#ifdef __STL_FUNCTION_TMPL_PARTIAL_ORDER
-
-template <class _Tp, class _Alloc>
-inline void
-swap(list<_Tp, _Alloc>& __x, list<_Tp, _Alloc>& __y)
-{
- __x.swap(__y);
-}
-
-#endif /* __STL_FUNCTION_TMPL_PARTIAL_ORDER */
-
-#ifdef __STL_MEMBER_TEMPLATES
-
-template <class _Tp, class _Alloc> template <class _InputIter>
-void
-list<_Tp, _Alloc>::_M_insert_dispatch(iterator __position,
- _InputIter __first, _InputIter __last,
- __false_type)
-{
- for ( ; __first != __last; ++__first)
- insert(__position, *__first);
-}
-
-#else /* __STL_MEMBER_TEMPLATES */
-
-template <class _Tp, class _Alloc>
-void
-list<_Tp, _Alloc>::insert(iterator __position,
- const _Tp* __first, const _Tp* __last)
-{
- for ( ; __first != __last; ++__first)
- insert(__position, *__first);
-}
-
-template <class _Tp, class _Alloc>
-void
-list<_Tp, _Alloc>::insert(iterator __position,
- const_iterator __first, const_iterator __last)
-{
- for ( ; __first != __last; ++__first)
- insert(__position, *__first);
-}
-
-#endif /* __STL_MEMBER_TEMPLATES */
-
-template <class _Tp, class _Alloc>
-void
-list<_Tp, _Alloc>::insert(iterator __position, size_type __n, const _Tp& __x)
-{
- for ( ; __n > 0; --__n)
- insert(__position, __x);
-}
-
-template <class _Tp, class _Alloc>
-list<_Tp,_Alloc>::iterator list<_Tp, _Alloc>::erase(iterator __first,
- iterator __last)
-{
- while (__first != __last)
- erase(__first++);
- return __last;
-}
-
-template <class _Tp, class _Alloc>
-void list<_Tp, _Alloc>::resize(size_type __new_size, const _Tp& __x)
-{
- iterator __i = begin();
- size_type __len = 0;
- for ( ; __i != end() && __len < __new_size; ++__i, ++__len)
- ;
- if (__len == __new_size)
- erase(__i, end());
- else // __i == end()
- insert(end(), __new_size - __len, __x);
-}
-
-template <class _Tp, class _Alloc>
-list<_Tp, _Alloc>& list<_Tp, _Alloc>::operator=(const list<_Tp, _Alloc>& __x)
-{
- if (this != &__x) {
- iterator __first1 = begin();
- iterator __last1 = end();
- const_iterator __first2 = __x.begin();
- const_iterator __last2 = __x.end();
- while (__first1 != __last1 && __first2 != __last2)
- *__first1++ = *__first2++;
- if (__first2 == __last2)
- erase(__first1, __last1);
- else
- insert(__last1, __first2, __last2);
- }
- return *this;
-}
-
-template <class _Tp, class _Alloc>
-void list<_Tp, _Alloc>::assign(size_type __n, const _Tp& __val) {
- iterator __i = begin();
- for ( ; __i != end() && __n > 0; ++__i, --__n)
- *__i = __val;
- if (__n > 0)
- insert(end(), __n, __val);
- else
- erase(__i, end());
-}
-
-#ifdef __STL_MEMBER_TEMPLATES
-
-template <class _Tp, class _Alloc> template <class _InputIter>
-void
-list<_Tp, _Alloc>::_M_assign_dispatch(_InputIter __first2, _InputIter __last2,
- __false_type)
-{
- iterator __first1 = begin();
- iterator __last1 = end();
- for ( ; __first1 != __last1 && __first2 != __last2; ++__first1, ++__first2)
- *__first1 = *__first2;
- if (__first2 == __last2)
- erase(__first1, __last1);
- else
- insert(__last1, __first2, __last2);
-}
-
-#endif /* __STL_MEMBER_TEMPLATES */
-
-template <class _Tp, class _Alloc>
-void list<_Tp, _Alloc>::remove(const _Tp& __value)
-{
- iterator __first = begin();
- iterator __last = end();
- while (__first != __last) {
- iterator __next = __first;
- ++__next;
- if (*__first == __value) erase(__first);
- __first = __next;
- }
-}
-
-template <class _Tp, class _Alloc>
-void list<_Tp, _Alloc>::unique()
-{
- iterator __first = begin();
- iterator __last = end();
- if (__first == __last) return;
- iterator __next = __first;
- while (++__next != __last) {
- if (*__first == *__next)
- erase(__next);
- else
- __first = __next;
- __next = __first;
- }
-}
-
-template <class _Tp, class _Alloc>
-void list<_Tp, _Alloc>::merge(list<_Tp, _Alloc>& __x)
-{
- iterator __first1 = begin();
- iterator __last1 = end();
- iterator __first2 = __x.begin();
- iterator __last2 = __x.end();
- while (__first1 != __last1 && __first2 != __last2)
- if (*__first2 < *__first1) {
- iterator __next = __first2;
- transfer(__first1, __first2, ++__next);
- __first2 = __next;
- }
- else
- ++__first1;
- if (__first2 != __last2) transfer(__last1, __first2, __last2);
-}
-
-template <class _Tp, class _Alloc>
-void list<_Tp, _Alloc>::reverse()
-{
- // Do nothing if the list has length 0 or 1.
- if (_M_node->_M_next != _M_node &&
- ((_Node*) (_M_node->_M_next))->_M_next != _M_node) {
- iterator __first = begin();
- ++__first;
- while (__first != end()) {
- iterator __old = __first;
- ++__first;
- transfer(begin(), __old, __first);
- }
- }
-}
-
-template <class _Tp, class _Alloc>
-void list<_Tp, _Alloc>::sort()
-{
- // Do nothing if the list has length 0 or 1.
- if (_M_node->_M_next != _M_node &&
- ((_Node*) (_M_node->_M_next))->_M_next != _M_node) {
- list<_Tp, _Alloc> __carry;
- list<_Tp, _Alloc> __counter[64];
- int __fill = 0;
- while (!empty()) {
- __carry.splice(__carry.begin(), *this, begin());
- int __i = 0;
- while(__i < __fill && !__counter[__i].empty()) {
- __counter[__i].merge(__carry);
- __carry.swap(__counter[__i++]);
- }
- __carry.swap(__counter[__i]);
- if (__i == __fill) ++__fill;
- }
-
- for (int __i = 1; __i < __fill; ++__i)
- __counter[__i].merge(__counter[__i-1]);
- swap(__counter[__fill-1]);
- }
-}
-
-#ifdef __STL_MEMBER_TEMPLATES
-
-template <class _Tp, class _Alloc> template <class _Predicate>
-void list<_Tp, _Alloc>::remove_if(_Predicate __pred)
-{
- iterator __first = begin();
- iterator __last = end();
- while (__first != __last) {
- iterator __next = __first;
- ++__next;
- if (__pred(*__first)) erase(__first);
- __first = __next;
- }
-}
-
-template <class _Tp, class _Alloc> template <class _BinaryPredicate>
-void list<_Tp, _Alloc>::unique(_BinaryPredicate __binary_pred)
-{
- iterator __first = begin();
- iterator __last = end();
- if (__first == __last) return;
- iterator __next = __first;
- while (++__next != __last) {
- if (__binary_pred(*__first, *__next))
- erase(__next);
- else
- __first = __next;
- __next = __first;
- }
-}
-
-template <class _Tp, class _Alloc> template <class _StrictWeakOrdering>
-void list<_Tp, _Alloc>::merge(list<_Tp, _Alloc>& __x,
- _StrictWeakOrdering __comp)
-{
- iterator __first1 = begin();
- iterator __last1 = end();
- iterator __first2 = __x.begin();
- iterator __last2 = __x.end();
- while (__first1 != __last1 && __first2 != __last2)
- if (__comp(*__first2, *__first1)) {
- iterator __next = __first2;
- transfer(__first1, __first2, ++__next);
- __first2 = __next;
- }
- else
- ++__first1;
- if (__first2 != __last2) transfer(__last1, __first2, __last2);
-}
-
-template <class _Tp, class _Alloc> template <class _StrictWeakOrdering>
-void list<_Tp, _Alloc>::sort(_StrictWeakOrdering __comp)
-{
- // Do nothing if the list has length 0 or 1.
- if (_M_node->_M_next != _M_node &&
- ((_Node*) (_M_node->_M_next))->_M_next != _M_node) {
- list<_Tp, _Alloc> __carry;
- list<_Tp, _Alloc> __counter[64];
- int __fill = 0;
- while (!empty()) {
- __carry.splice(__carry.begin(), *this, begin());
- int __i = 0;
- while(__i < __fill && !__counter[__i].empty()) {
- __counter[__i].merge(__carry, __comp);
- __carry.swap(__counter[__i++]);
- }
- __carry.swap(__counter[__i]);
- if (__i == __fill) ++__fill;
- }
-
- for (int __i = 1; __i < __fill; ++__i)
- __counter[__i].merge(__counter[__i-1], __comp);
- swap(__counter[__fill-1]);
- }
-}
-
-#endif /* __STL_MEMBER_TEMPLATES */
-
-#if defined(__sgi) && !defined(__GNUC__) && (_MIPS_SIM != _MIPS_SIM_ABI32)
-#pragma reset woff 1174
-#pragma reset woff 1375
-#endif
-
-__STL_END_NAMESPACE
-
-#endif /* __SGI_STL_INTERNAL_LIST_H */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/stl_map.h b/contrib/libstdc++/stl/stl_map.h
deleted file mode 100644
index a702e8023efa..000000000000
--- a/contrib/libstdc++/stl/stl_map.h
+++ /dev/null
@@ -1,242 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- * Copyright (c) 1996,1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-/* NOTE: This is an internal header file, included by other STL headers.
- * You should not attempt to use it directly.
- */
-
-#ifndef __SGI_STL_INTERNAL_MAP_H
-#define __SGI_STL_INTERNAL_MAP_H
-
-__STL_BEGIN_NAMESPACE
-
-#if defined(__sgi) && !defined(__GNUC__) && (_MIPS_SIM != _MIPS_SIM_ABI32)
-#pragma set woff 1174
-#pragma set woff 1375
-#endif
-
-#ifndef __STL_LIMITED_DEFAULT_TEMPLATES
-template <class _Key, class _Tp, class _Compare = less<_Key>,
- class _Alloc = __STL_DEFAULT_ALLOCATOR(_Tp) >
-#else
-template <class _Key, class _Tp, class _Compare,
- class _Alloc = __STL_DEFAULT_ALLOCATOR(_Tp) >
-#endif
-class map {
-public:
-
-// typedefs:
-
- typedef _Key key_type;
- typedef _Tp data_type;
- typedef _Tp mapped_type;
- typedef pair<const _Key, _Tp> value_type;
- typedef _Compare key_compare;
-
- class value_compare
- : public binary_function<value_type, value_type, bool> {
- friend class map<_Key,_Tp,_Compare,_Alloc>;
- protected :
- _Compare _M_comp;
- value_compare(_Compare __c) : _M_comp(__c) {}
- public:
- bool operator()(const value_type& __x, const value_type& __y) const {
- return _M_comp(__x.first, __y.first);
- }
- };
-
-private:
- typedef _Rb_tree<key_type, value_type,
- _Select1st<value_type>, key_compare, _Alloc> _Rep_type;
- _Rep_type _M_t; // red-black tree representing map
-public:
- typedef typename _Rep_type::pointer pointer;
- typedef typename _Rep_type::const_pointer const_pointer;
- typedef typename _Rep_type::reference reference;
- typedef typename _Rep_type::const_reference const_reference;
- typedef typename _Rep_type::iterator iterator;
- typedef typename _Rep_type::const_iterator const_iterator;
- typedef typename _Rep_type::reverse_iterator reverse_iterator;
- typedef typename _Rep_type::const_reverse_iterator const_reverse_iterator;
- typedef typename _Rep_type::size_type size_type;
- typedef typename _Rep_type::difference_type difference_type;
- typedef typename _Rep_type::allocator_type allocator_type;
-
- // allocation/deallocation
-
- map() : _M_t(_Compare(), allocator_type()) {}
- explicit map(const _Compare& __comp,
- const allocator_type& __a = allocator_type())
- : _M_t(__comp, __a) {}
-
-#ifdef __STL_MEMBER_TEMPLATES
- template <class _InputIterator>
- map(_InputIterator __first, _InputIterator __last)
- : _M_t(_Compare(), allocator_type())
- { _M_t.insert_unique(__first, __last); }
-
- template <class _InputIterator>
- map(_InputIterator __first, _InputIterator __last, const _Compare& __comp,
- const allocator_type& __a = allocator_type())
- : _M_t(__comp, __a) { _M_t.insert_unique(__first, __last); }
-#else
- map(const value_type* __first, const value_type* __last)
- : _M_t(_Compare(), allocator_type())
- { _M_t.insert_unique(__first, __last); }
-
- map(const value_type* __first,
- const value_type* __last, const _Compare& __comp,
- const allocator_type& __a = allocator_type())
- : _M_t(__comp, __a) { _M_t.insert_unique(__first, __last); }
-
- map(const_iterator __first, const_iterator __last)
- : _M_t(_Compare(), allocator_type())
- { _M_t.insert_unique(__first, __last); }
-
- map(const_iterator __first, const_iterator __last, const _Compare& __comp,
- const allocator_type& __a = allocator_type())
- : _M_t(__comp, __a) { _M_t.insert_unique(__first, __last); }
-
-#endif /* __STL_MEMBER_TEMPLATES */
-
- map(const map<_Key,_Tp,_Compare,_Alloc>& __x) : _M_t(__x._M_t) {}
- map<_Key,_Tp,_Compare,_Alloc>&
- operator=(const map<_Key, _Tp, _Compare, _Alloc>& __x)
- {
- _M_t = __x._M_t;
- return *this;
- }
-
- // accessors:
-
- key_compare key_comp() const { return _M_t.key_comp(); }
- value_compare value_comp() const { return value_compare(_M_t.key_comp()); }
- allocator_type get_allocator() const { return _M_t.get_allocator(); }
-
- iterator begin() { return _M_t.begin(); }
- const_iterator begin() const { return _M_t.begin(); }
- iterator end() { return _M_t.end(); }
- const_iterator end() const { return _M_t.end(); }
- reverse_iterator rbegin() { return _M_t.rbegin(); }
- const_reverse_iterator rbegin() const { return _M_t.rbegin(); }
- reverse_iterator rend() { return _M_t.rend(); }
- const_reverse_iterator rend() const { return _M_t.rend(); }
- bool empty() const { return _M_t.empty(); }
- size_type size() const { return _M_t.size(); }
- size_type max_size() const { return _M_t.max_size(); }
- _Tp& operator[](const key_type& __k) {
- iterator __i = lower_bound(__k);
- // __i->first is greater than or equivalent to __k.
- if (__i == end() || key_comp()(__k, (*__i).first))
- __i = insert(__i, value_type(__k, _Tp()));
- return (*__i).second;
- }
- void swap(map<_Key,_Tp,_Compare,_Alloc>& __x) { _M_t.swap(__x._M_t); }
-
- // insert/erase
-
- pair<iterator,bool> insert(const value_type& __x)
- { return _M_t.insert_unique(__x); }
- iterator insert(iterator position, const value_type& __x)
- { return _M_t.insert_unique(position, __x); }
-#ifdef __STL_MEMBER_TEMPLATES
- template <class _InputIterator>
- void insert(_InputIterator __first, _InputIterator __last) {
- _M_t.insert_unique(__first, __last);
- }
-#else
- void insert(const value_type* __first, const value_type* __last) {
- _M_t.insert_unique(__first, __last);
- }
- void insert(const_iterator __first, const_iterator __last) {
- _M_t.insert_unique(__first, __last);
- }
-#endif /* __STL_MEMBER_TEMPLATES */
-
- void erase(iterator __position) { _M_t.erase(__position); }
- size_type erase(const key_type& __x) { return _M_t.erase(__x); }
- void erase(iterator __first, iterator __last)
- { _M_t.erase(__first, __last); }
- void clear() { _M_t.clear(); }
-
- // map operations:
-
- iterator find(const key_type& __x) { return _M_t.find(__x); }
- const_iterator find(const key_type& __x) const { return _M_t.find(__x); }
- size_type count(const key_type& __x) const { return _M_t.count(__x); }
- iterator lower_bound(const key_type& __x) {return _M_t.lower_bound(__x); }
- const_iterator lower_bound(const key_type& __x) const {
- return _M_t.lower_bound(__x);
- }
- iterator upper_bound(const key_type& __x) {return _M_t.upper_bound(__x); }
- const_iterator upper_bound(const key_type& __x) const {
- return _M_t.upper_bound(__x);
- }
-
- pair<iterator,iterator> equal_range(const key_type& __x) {
- return _M_t.equal_range(__x);
- }
- pair<const_iterator,const_iterator> equal_range(const key_type& __x) const {
- return _M_t.equal_range(__x);
- }
- friend bool operator== __STL_NULL_TMPL_ARGS (const map&, const map&);
- friend bool operator< __STL_NULL_TMPL_ARGS (const map&, const map&);
-};
-
-template <class _Key, class _Tp, class _Compare, class _Alloc>
-inline bool operator==(const map<_Key,_Tp,_Compare,_Alloc>& __x,
- const map<_Key,_Tp,_Compare,_Alloc>& __y) {
- return __x._M_t == __y._M_t;
-}
-
-template <class _Key, class _Tp, class _Compare, class _Alloc>
-inline bool operator<(const map<_Key,_Tp,_Compare,_Alloc>& __x,
- const map<_Key,_Tp,_Compare,_Alloc>& __y) {
- return __x._M_t < __y._M_t;
-}
-
-#ifdef __STL_FUNCTION_TMPL_PARTIAL_ORDER
-
-template <class _Key, class _Tp, class _Compare, class _Alloc>
-inline void swap(map<_Key,_Tp,_Compare,_Alloc>& __x,
- map<_Key,_Tp,_Compare,_Alloc>& __y) {
- __x.swap(__y);
-}
-
-#endif /* __STL_FUNCTION_TMPL_PARTIAL_ORDER */
-
-#if defined(__sgi) && !defined(__GNUC__) && (_MIPS_SIM != _MIPS_SIM_ABI32)
-#pragma reset woff 1174
-#pragma reset woff 1375
-#endif
-
-__STL_END_NAMESPACE
-
-#endif /* __SGI_STL_INTERNAL_MAP_H */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/stl_multimap.h b/contrib/libstdc++/stl/stl_multimap.h
deleted file mode 100644
index b7d3b87e52d1..000000000000
--- a/contrib/libstdc++/stl/stl_multimap.h
+++ /dev/null
@@ -1,232 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- * Copyright (c) 1996,1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-/* NOTE: This is an internal header file, included by other STL headers.
- * You should not attempt to use it directly.
- */
-
-#ifndef __SGI_STL_INTERNAL_MULTIMAP_H
-#define __SGI_STL_INTERNAL_MULTIMAP_H
-
-__STL_BEGIN_NAMESPACE
-
-#if defined(__sgi) && !defined(__GNUC__) && (_MIPS_SIM != _MIPS_SIM_ABI32)
-#pragma set woff 1174
-#pragma set woff 1375
-#endif
-
-#ifndef __STL_LIMITED_DEFAULT_TEMPLATES
-template <class _Key, class _Tp, class _Compare = less<_Key>,
- class _Alloc = __STL_DEFAULT_ALLOCATOR(_Tp) >
-#else
-template <class _Key, class _Tp, class _Compare,
- class _Alloc = __STL_DEFAULT_ALLOCATOR(_Tp) >
-#endif
-class multimap {
-public:
-
-// typedefs:
-
- typedef _Key key_type;
- typedef _Tp data_type;
- typedef _Tp mapped_type;
- typedef pair<const _Key, _Tp> value_type;
- typedef _Compare key_compare;
-
- class value_compare : public binary_function<value_type, value_type, bool> {
- friend class multimap<_Key,_Tp,_Compare,_Alloc>;
- protected:
- _Compare _M_comp;
- value_compare(_Compare __c) : _M_comp(__c) {}
- public:
- bool operator()(const value_type& __x, const value_type& __y) const {
- return _M_comp(__x.first, __y.first);
- }
- };
-
-private:
- typedef _Rb_tree<key_type, value_type,
- _Select1st<value_type>, key_compare, _Alloc> _Rep_type;
- _Rep_type _M_t; // red-black tree representing multimap
-public:
- typedef typename _Rep_type::pointer pointer;
- typedef typename _Rep_type::const_pointer const_pointer;
- typedef typename _Rep_type::reference reference;
- typedef typename _Rep_type::const_reference const_reference;
- typedef typename _Rep_type::iterator iterator;
- typedef typename _Rep_type::const_iterator const_iterator;
- typedef typename _Rep_type::reverse_iterator reverse_iterator;
- typedef typename _Rep_type::const_reverse_iterator const_reverse_iterator;
- typedef typename _Rep_type::size_type size_type;
- typedef typename _Rep_type::difference_type difference_type;
- typedef typename _Rep_type::allocator_type allocator_type;
-
-// allocation/deallocation
-
- multimap() : _M_t(_Compare(), allocator_type()) { }
- explicit multimap(const _Compare& __comp,
- const allocator_type& __a = allocator_type())
- : _M_t(__comp, __a) { }
-
-#ifdef __STL_MEMBER_TEMPLATES
- template <class _InputIterator>
- multimap(_InputIterator __first, _InputIterator __last)
- : _M_t(_Compare(), allocator_type())
- { _M_t.insert_equal(__first, __last); }
-
- template <class _InputIterator>
- multimap(_InputIterator __first, _InputIterator __last,
- const _Compare& __comp,
- const allocator_type& __a = allocator_type())
- : _M_t(__comp, __a) { _M_t.insert_equal(__first, __last); }
-#else
- multimap(const value_type* __first, const value_type* __last)
- : _M_t(_Compare(), allocator_type())
- { _M_t.insert_equal(__first, __last); }
- multimap(const value_type* __first, const value_type* __last,
- const _Compare& __comp,
- const allocator_type& __a = allocator_type())
- : _M_t(__comp, __a) { _M_t.insert_equal(__first, __last); }
-
- multimap(const_iterator __first, const_iterator __last)
- : _M_t(_Compare(), allocator_type())
- { _M_t.insert_equal(__first, __last); }
- multimap(const_iterator __first, const_iterator __last,
- const _Compare& __comp,
- const allocator_type& __a = allocator_type())
- : _M_t(__comp, __a) { _M_t.insert_equal(__first, __last); }
-#endif /* __STL_MEMBER_TEMPLATES */
-
- multimap(const multimap<_Key,_Tp,_Compare,_Alloc>& __x) : _M_t(__x._M_t) { }
- multimap<_Key,_Tp,_Compare,_Alloc>&
- operator=(const multimap<_Key,_Tp,_Compare,_Alloc>& __x) {
- _M_t = __x._M_t;
- return *this;
- }
-
- // accessors:
-
- key_compare key_comp() const { return _M_t.key_comp(); }
- value_compare value_comp() const { return value_compare(_M_t.key_comp()); }
- allocator_type get_allocator() const { return _M_t.get_allocator(); }
-
- iterator begin() { return _M_t.begin(); }
- const_iterator begin() const { return _M_t.begin(); }
- iterator end() { return _M_t.end(); }
- const_iterator end() const { return _M_t.end(); }
- reverse_iterator rbegin() { return _M_t.rbegin(); }
- const_reverse_iterator rbegin() const { return _M_t.rbegin(); }
- reverse_iterator rend() { return _M_t.rend(); }
- const_reverse_iterator rend() const { return _M_t.rend(); }
- bool empty() const { return _M_t.empty(); }
- size_type size() const { return _M_t.size(); }
- size_type max_size() const { return _M_t.max_size(); }
- void swap(multimap<_Key,_Tp,_Compare,_Alloc>& __x) { _M_t.swap(__x._M_t); }
-
- // insert/erase
-
- iterator insert(const value_type& __x) { return _M_t.insert_equal(__x); }
- iterator insert(iterator __position, const value_type& __x) {
- return _M_t.insert_equal(__position, __x);
- }
-#ifdef __STL_MEMBER_TEMPLATES
- template <class _InputIterator>
- void insert(_InputIterator __first, _InputIterator __last) {
- _M_t.insert_equal(__first, __last);
- }
-#else
- void insert(const value_type* __first, const value_type* __last) {
- _M_t.insert_equal(__first, __last);
- }
- void insert(const_iterator __first, const_iterator __last) {
- _M_t.insert_equal(__first, __last);
- }
-#endif /* __STL_MEMBER_TEMPLATES */
- void erase(iterator __position) { _M_t.erase(__position); }
- size_type erase(const key_type& __x) { return _M_t.erase(__x); }
- void erase(iterator __first, iterator __last)
- { _M_t.erase(__first, __last); }
- void clear() { _M_t.clear(); }
-
- // multimap operations:
-
- iterator find(const key_type& __x) { return _M_t.find(__x); }
- const_iterator find(const key_type& __x) const { return _M_t.find(__x); }
- size_type count(const key_type& __x) const { return _M_t.count(__x); }
- iterator lower_bound(const key_type& __x) {return _M_t.lower_bound(__x); }
- const_iterator lower_bound(const key_type& __x) const {
- return _M_t.lower_bound(__x);
- }
- iterator upper_bound(const key_type& __x) {return _M_t.upper_bound(__x); }
- const_iterator upper_bound(const key_type& __x) const {
- return _M_t.upper_bound(__x);
- }
- pair<iterator,iterator> equal_range(const key_type& __x) {
- return _M_t.equal_range(__x);
- }
- pair<const_iterator,const_iterator> equal_range(const key_type& __x) const {
- return _M_t.equal_range(__x);
- }
- friend bool operator== __STL_NULL_TMPL_ARGS (const multimap&,
- const multimap&);
- friend bool operator< __STL_NULL_TMPL_ARGS (const multimap&,
- const multimap&);
-};
-
-template <class _Key, class _Tp, class _Compare, class _Alloc>
-inline bool operator==(const multimap<_Key,_Tp,_Compare,_Alloc>& __x,
- const multimap<_Key,_Tp,_Compare,_Alloc>& __y) {
- return __x._M_t == __y._M_t;
-}
-
-template <class _Key, class _Tp, class _Compare, class _Alloc>
-inline bool operator<(const multimap<_Key,_Tp,_Compare,_Alloc>& __x,
- const multimap<_Key,_Tp,_Compare,_Alloc>& __y) {
- return __x._M_t < __y._M_t;
-}
-
-#ifdef __STL_FUNCTION_TMPL_PARTIAL_ORDER
-
-template <class _Key, class _Tp, class _Compare, class _Alloc>
-inline void swap(multimap<_Key,_Tp,_Compare,_Alloc>& __x,
- multimap<_Key,_Tp,_Compare,_Alloc>& __y) {
- __x.swap(__y);
-}
-
-#endif /* __STL_FUNCTION_TMPL_PARTIAL_ORDER */
-
-#if defined(__sgi) && !defined(__GNUC__) && (_MIPS_SIM != _MIPS_SIM_ABI32)
-#pragma reset woff 1174
-#pragma reset woff 1375
-#endif
-
-__STL_END_NAMESPACE
-
-#endif /* __SGI_STL_INTERNAL_MULTIMAP_H */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/stl_multiset.h b/contrib/libstdc++/stl/stl_multiset.h
deleted file mode 100644
index 7378e43f8b36..000000000000
--- a/contrib/libstdc++/stl/stl_multiset.h
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- * Copyright (c) 1996
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-/* NOTE: This is an internal header file, included by other STL headers.
- * You should not attempt to use it directly.
- */
-
-#ifndef __SGI_STL_INTERNAL_MULTISET_H
-#define __SGI_STL_INTERNAL_MULTISET_H
-
-__STL_BEGIN_NAMESPACE
-
-#if defined(__sgi) && !defined(__GNUC__) && (_MIPS_SIM != _MIPS_SIM_ABI32)
-#pragma set woff 1174
-#pragma set woff 1375
-#endif
-
-#ifndef __STL_LIMITED_DEFAULT_TEMPLATES
-template <class _Key, class _Compare = less<_Key>,
- class _Alloc = __STL_DEFAULT_ALLOCATOR(_Key) >
-#else
-template <class _Key, class _Compare,
- class _Alloc = __STL_DEFAULT_ALLOCATOR(_Key) >
-#endif
-class multiset {
-public:
- // typedefs:
-
- typedef _Key key_type;
- typedef _Key value_type;
- typedef _Compare key_compare;
- typedef _Compare value_compare;
-private:
- typedef _Rb_tree<key_type, value_type,
- _Identity<value_type>, key_compare, _Alloc> _Rep_type;
- _Rep_type _M_t; // red-black tree representing multiset
-public:
- typedef typename _Rep_type::const_pointer pointer;
- typedef typename _Rep_type::const_pointer const_pointer;
- typedef typename _Rep_type::const_reference reference;
- typedef typename _Rep_type::const_reference const_reference;
- typedef typename _Rep_type::const_iterator iterator;
- typedef typename _Rep_type::const_iterator const_iterator;
- typedef typename _Rep_type::const_reverse_iterator reverse_iterator;
- typedef typename _Rep_type::const_reverse_iterator const_reverse_iterator;
- typedef typename _Rep_type::size_type size_type;
- typedef typename _Rep_type::difference_type difference_type;
- typedef typename _Rep_type::allocator_type allocator_type;
-
- // allocation/deallocation
-
- multiset() : _M_t(_Compare(), allocator_type()) {}
- explicit multiset(const _Compare& __comp,
- const allocator_type& __a = allocator_type())
- : _M_t(__comp, __a) {}
-
-#ifdef __STL_MEMBER_TEMPLATES
-
- template <class _InputIterator>
- multiset(_InputIterator __first, _InputIterator __last)
- : _M_t(_Compare(), allocator_type())
- { _M_t.insert_equal(__first, __last); }
-
- template <class _InputIterator>
- multiset(_InputIterator __first, _InputIterator __last,
- const _Compare& __comp,
- const allocator_type& __a = allocator_type())
- : _M_t(__comp, __a) { _M_t.insert_equal(__first, __last); }
-
-#else
-
- multiset(const value_type* __first, const value_type* __last)
- : _M_t(_Compare(), allocator_type())
- { _M_t.insert_equal(__first, __last); }
-
- multiset(const value_type* __first, const value_type* __last,
- const _Compare& __comp,
- const allocator_type& __a = allocator_type())
- : _M_t(__comp, __a) { _M_t.insert_equal(__first, __last); }
-
- multiset(const_iterator __first, const_iterator __last)
- : _M_t(_Compare(), allocator_type())
- { _M_t.insert_equal(__first, __last); }
-
- multiset(const_iterator __first, const_iterator __last,
- const _Compare& __comp,
- const allocator_type& __a = allocator_type())
- : _M_t(__comp, __a) { _M_t.insert_equal(__first, __last); }
-
-#endif /* __STL_MEMBER_TEMPLATES */
-
- multiset(const multiset<_Key,_Compare,_Alloc>& __x) : _M_t(__x._M_t) {}
- multiset<_Key,_Compare,_Alloc>&
- operator=(const multiset<_Key,_Compare,_Alloc>& __x) {
- _M_t = __x._M_t;
- return *this;
- }
-
- // accessors:
-
- key_compare key_comp() const { return _M_t.key_comp(); }
- value_compare value_comp() const { return _M_t.key_comp(); }
- allocator_type get_allocator() const { return _M_t.get_allocator(); }
-
- iterator begin() const { return _M_t.begin(); }
- iterator end() const { return _M_t.end(); }
- reverse_iterator rbegin() const { return _M_t.rbegin(); }
- reverse_iterator rend() const { return _M_t.rend(); }
- bool empty() const { return _M_t.empty(); }
- size_type size() const { return _M_t.size(); }
- size_type max_size() const { return _M_t.max_size(); }
- void swap(multiset<_Key,_Compare,_Alloc>& __x) { _M_t.swap(__x._M_t); }
-
- // insert/erase
- iterator insert(const value_type& __x) {
- return _M_t.insert_equal(__x);
- }
- iterator insert(iterator __position, const value_type& __x) {
- typedef typename _Rep_type::iterator _Rep_iterator;
- return _M_t.insert_equal((_Rep_iterator&)__position, __x);
- }
-
-#ifdef __STL_MEMBER_TEMPLATES
- template <class _InputIterator>
- void insert(_InputIterator __first, _InputIterator __last) {
- _M_t.insert_equal(__first, __last);
- }
-#else
- void insert(const value_type* __first, const value_type* __last) {
- _M_t.insert_equal(__first, __last);
- }
- void insert(const_iterator __first, const_iterator __last) {
- _M_t.insert_equal(__first, __last);
- }
-#endif /* __STL_MEMBER_TEMPLATES */
- void erase(iterator __position) {
- typedef typename _Rep_type::iterator _Rep_iterator;
- _M_t.erase((_Rep_iterator&)__position);
- }
- size_type erase(const key_type& __x) {
- return _M_t.erase(__x);
- }
- void erase(iterator __first, iterator __last) {
- typedef typename _Rep_type::iterator _Rep_iterator;
- _M_t.erase((_Rep_iterator&)__first, (_Rep_iterator&)__last);
- }
- void clear() { _M_t.clear(); }
-
- // multiset operations:
-
- iterator find(const key_type& __x) const { return _M_t.find(__x); }
- size_type count(const key_type& __x) const { return _M_t.count(__x); }
- iterator lower_bound(const key_type& __x) const {
- return _M_t.lower_bound(__x);
- }
- iterator upper_bound(const key_type& __x) const {
- return _M_t.upper_bound(__x);
- }
- pair<iterator,iterator> equal_range(const key_type& __x) const {
- return _M_t.equal_range(__x);
- }
- friend bool operator== __STL_NULL_TMPL_ARGS (const multiset&,
- const multiset&);
- friend bool operator< __STL_NULL_TMPL_ARGS (const multiset&,
- const multiset&);
-};
-
-template <class _Key, class _Compare, class _Alloc>
-inline bool operator==(const multiset<_Key,_Compare,_Alloc>& __x,
- const multiset<_Key,_Compare,_Alloc>& __y) {
- return __x._M_t == __y._M_t;
-}
-
-template <class _Key, class _Compare, class _Alloc>
-inline bool operator<(const multiset<_Key,_Compare,_Alloc>& __x,
- const multiset<_Key,_Compare,_Alloc>& __y) {
- return __x._M_t < __y._M_t;
-}
-
-#ifdef __STL_FUNCTION_TMPL_PARTIAL_ORDER
-
-template <class _Key, class _Compare, class _Alloc>
-inline void swap(multiset<_Key,_Compare,_Alloc>& __x,
- multiset<_Key,_Compare,_Alloc>& __y) {
- __x.swap(__y);
-}
-
-#endif /* __STL_FUNCTION_TMPL_PARTIAL_ORDER */
-
-#if defined(__sgi) && !defined(__GNUC__) && (_MIPS_SIM != _MIPS_SIM_ABI32)
-#pragma reset woff 1174
-#pragma reset woff 1375
-#endif
-
-__STL_END_NAMESPACE
-
-#endif /* __SGI_STL_INTERNAL_MULTISET_H */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/stl_numeric.h b/contrib/libstdc++/stl/stl_numeric.h
deleted file mode 100644
index 392515a3d87d..000000000000
--- a/contrib/libstdc++/stl/stl_numeric.h
+++ /dev/null
@@ -1,239 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- * Copyright (c) 1996,1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-/* NOTE: This is an internal header file, included by other STL headers.
- * You should not attempt to use it directly.
- */
-
-
-#ifndef __SGI_STL_INTERNAL_NUMERIC_H
-#define __SGI_STL_INTERNAL_NUMERIC_H
-
-__STL_BEGIN_NAMESPACE
-
-template <class _InputIterator, class _Tp>
-_Tp accumulate(_InputIterator __first, _InputIterator __last, _Tp __init)
-{
- for ( ; __first != __last; ++__first)
- __init = __init + *__first;
- return __init;
-}
-
-template <class _InputIterator, class _Tp, class _BinaryOperation>
-_Tp accumulate(_InputIterator __first, _InputIterator __last, _Tp __init,
- _BinaryOperation __binary_op)
-{
- for ( ; __first != __last; ++__first)
- __init = __binary_op(__init, *__first);
- return __init;
-}
-
-template <class _InputIterator1, class _InputIterator2, class _Tp>
-_Tp inner_product(_InputIterator1 __first1, _InputIterator1 __last1,
- _InputIterator2 __first2, _Tp __init)
-{
- for ( ; __first1 != __last1; ++__first1, ++__first2)
- __init = __init + (*__first1 * *__first2);
- return __init;
-}
-
-template <class _InputIterator1, class _InputIterator2, class _Tp,
- class _BinaryOperation1, class _BinaryOperation2>
-_Tp inner_product(_InputIterator1 __first1, _InputIterator1 __last1,
- _InputIterator2 __first2, _Tp __init,
- _BinaryOperation1 __binary_op1,
- _BinaryOperation2 __binary_op2)
-{
- for ( ; __first1 != __last1; ++__first1, ++__first2)
- __init = __binary_op1(__init, __binary_op2(*__first1, *__first2));
- return __init;
-}
-
-template <class _InputIterator, class _OutputIterator, class _Tp>
-_OutputIterator
-__partial_sum(_InputIterator __first, _InputIterator __last,
- _OutputIterator __result, _Tp*)
-{
- _Tp __value = *__first;
- while (++__first != __last) {
- __value = __value + *__first;
- *++__result = __value;
- }
- return ++__result;
-}
-
-template <class _InputIterator, class _OutputIterator>
-_OutputIterator
-partial_sum(_InputIterator __first, _InputIterator __last,
- _OutputIterator __result)
-{
- if (__first == __last) return __result;
- *__result = *__first;
- return __partial_sum(__first, __last, __result, __VALUE_TYPE(__first));
-}
-
-template <class _InputIterator, class _OutputIterator, class _Tp,
- class _BinaryOperation>
-_OutputIterator
-__partial_sum(_InputIterator __first, _InputIterator __last,
- _OutputIterator __result, _Tp*, _BinaryOperation __binary_op)
-{
- _Tp __value = *__first;
- while (++__first != __last) {
- __value = __binary_op(__value, *__first);
- *++__result = __value;
- }
- return ++__result;
-}
-
-template <class _InputIterator, class _OutputIterator, class _BinaryOperation>
-_OutputIterator
-partial_sum(_InputIterator __first, _InputIterator __last,
- _OutputIterator __result, _BinaryOperation __binary_op)
-{
- if (__first == __last) return __result;
- *__result = *__first;
- return __partial_sum(__first, __last, __result, __VALUE_TYPE(__first),
- __binary_op);
-}
-
-template <class _InputIterator, class _OutputIterator, class _Tp>
-_OutputIterator
-__adjacent_difference(_InputIterator __first, _InputIterator __last,
- _OutputIterator __result, _Tp*)
-{
- _Tp __value = *__first;
- while (++__first != __last) {
- _Tp __tmp = *__first;
- *++__result = __tmp - __value;
- __value = __tmp;
- }
- return ++__result;
-}
-
-template <class _InputIterator, class _OutputIterator>
-_OutputIterator
-adjacent_difference(_InputIterator __first,
- _InputIterator __last, _OutputIterator __result)
-{
- if (__first == __last) return __result;
- *__result = *__first;
- return __adjacent_difference(__first, __last, __result,
- __VALUE_TYPE(__first));
-}
-
-template <class _InputIterator, class _OutputIterator, class _Tp,
- class _BinaryOperation>
-_OutputIterator
-__adjacent_difference(_InputIterator __first, _InputIterator __last,
- _OutputIterator __result, _Tp*,
- _BinaryOperation __binary_op) {
- _Tp __value = *__first;
- while (++__first != __last) {
- _Tp __tmp = *__first;
- *++__result = __binary_op(__tmp, __value);
- __value = __tmp;
- }
- return ++__result;
-}
-
-template <class _InputIterator, class _OutputIterator, class _BinaryOperation>
-_OutputIterator
-adjacent_difference(_InputIterator __first, _InputIterator __last,
- _OutputIterator __result, _BinaryOperation __binary_op)
-{
- if (__first == __last) return __result;
- *__result = *__first;
- return __adjacent_difference(__first, __last, __result,
- __VALUE_TYPE(__first),
- __binary_op);
-}
-
-// Returns __x ** __n, where __n >= 0. _Note that "multiplication"
-// is required to be associative, but not necessarily commutative.
-
-
-template <class _Tp, class _Integer, class _MonoidOperation>
-_Tp __power(_Tp __x, _Integer __n, _MonoidOperation __oper)
-{
- if (__n == 0)
- return identity_element(__oper);
- else {
- while ((__n & 1) == 0) {
- __n >>= 1;
- __x = __oper(__x, __x);
- }
-
- _Tp __result = __x;
- __n >>= 1;
- while (__n != 0) {
- __x = __oper(__x, __x);
- if ((__n & 1) != 0)
- __result = __oper(__result, __x);
- __n >>= 1;
- }
- return __result;
- }
-}
-
-template <class _Tp, class _Integer>
-inline _Tp __power(_Tp __x, _Integer __n)
-{
- return __power(__x, __n, multiplies<_Tp>());
-}
-
-// Alias for the internal name __power. Note that power is an extension,
-// not part of the C++ standard.
-
-template <class _Tp, class _Integer, class _MonoidOperation>
-inline _Tp power(_Tp __x, _Integer __n, _MonoidOperation __oper)
-{
- return __power(__x, __n, __oper);
-}
-
-template <class _Tp, class _Integer>
-inline _Tp power(_Tp __x, _Integer __n)
-{
- return __power(__x, __n);
-}
-
-// iota is not part of the C++ standard. It is an extension.
-
-template <class _ForwardIterator, class _Tp>
-void
-iota(_ForwardIterator __first, _ForwardIterator __last, _Tp __value)
-{
- while (__first != __last)
- *__first++ = __value++;
-}
-
-__STL_END_NAMESPACE
-
-#endif /* __SGI_STL_INTERNAL_NUMERIC_H */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/stl_pair.h b/contrib/libstdc++/stl/stl_pair.h
deleted file mode 100644
index 3aa290b59edb..000000000000
--- a/contrib/libstdc++/stl/stl_pair.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- * Copyright (c) 1996,1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-/* NOTE: This is an internal header file, included by other STL headers.
- * You should not attempt to use it directly.
- */
-
-#ifndef __SGI_STL_INTERNAL_PAIR_H
-#define __SGI_STL_INTERNAL_PAIR_H
-
-__STL_BEGIN_NAMESPACE
-
-template <class _T1, class _T2>
-struct pair {
- typedef _T1 first_type;
- typedef _T2 second_type;
-
- _T1 first;
- _T2 second;
- pair() : first(_T1()), second(_T2()) {}
- pair(const _T1& __a, const _T2& __b) : first(__a), second(__b) {}
-
-#ifdef __STL_MEMBER_TEMPLATES
- template <class _U1, class _U2>
- pair(const pair<_U1, _U2>& __p) : first(__p.first), second(__p.second) {}
-#endif
-};
-
-template <class _T1, class _T2>
-inline bool operator==(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
-{
- return __x.first == __y.first && __x.second == __y.second;
-}
-
-template <class _T1, class _T2>
-inline bool operator<(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
-{
- return __x.first < __y.first ||
- (!(__y.first < __x.first) && __x.second < __y.second);
-}
-
-template <class _T1, class _T2>
-inline pair<_T1, _T2> make_pair(const _T1& __x, const _T2& __y)
-{
- return pair<_T1, _T2>(__x, __y);
-}
-
-__STL_END_NAMESPACE
-
-#endif /* __SGI_STL_INTERNAL_PAIR_H */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/stl_queue.h b/contrib/libstdc++/stl/stl_queue.h
deleted file mode 100644
index c1e2b6984403..000000000000
--- a/contrib/libstdc++/stl/stl_queue.h
+++ /dev/null
@@ -1,202 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- * Copyright (c) 1996,1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-/* NOTE: This is an internal header file, included by other STL headers.
- * You should not attempt to use it directly.
- */
-
-#ifndef __SGI_STL_INTERNAL_QUEUE_H
-#define __SGI_STL_INTERNAL_QUEUE_H
-
-__STL_BEGIN_NAMESPACE
-
-#ifndef __STL_LIMITED_DEFAULT_TEMPLATES
-template <class _Tp, class _Sequence = deque<_Tp> >
-#else
-template <class _Tp, class _Sequence>
-#endif
-class queue {
- friend bool operator== __STL_NULL_TMPL_ARGS (const queue&, const queue&);
- friend bool operator< __STL_NULL_TMPL_ARGS (const queue&, const queue&);
-public:
- typedef typename _Sequence::value_type value_type;
- typedef typename _Sequence::size_type size_type;
- typedef _Sequence container_type;
-
- typedef typename _Sequence::reference reference;
- typedef typename _Sequence::const_reference const_reference;
-protected:
- _Sequence c;
-public:
- queue() : c() {}
- explicit queue(const _Sequence& __c) : c(__c) {}
-
- bool empty() const { return c.empty(); }
- size_type size() const { return c.size(); }
- reference front() { return c.front(); }
- const_reference front() const { return c.front(); }
- reference back() { return c.back(); }
- const_reference back() const { return c.back(); }
- void push(const value_type& __x) { c.push_back(__x); }
- void pop() { c.pop_front(); }
-};
-
-template <class _Tp, class _Sequence>
-bool
-operator==(const queue<_Tp, _Sequence>& __x, const queue<_Tp, _Sequence>& __y)
-{
- return __x.c == __y.c;
-}
-
-template <class _Tp, class _Sequence>
-bool
-operator<(const queue<_Tp, _Sequence>& __x, const queue<_Tp, _Sequence>& __y)
-{
- return __x.c < __y.c;
-}
-
-#ifdef __STL_FUNCTION_TMPL_PARTIAL_ORDER
-
-template <class _Tp, class _Sequence>
-bool
-operator!=(const queue<_Tp, _Sequence>& __x, const queue<_Tp, _Sequence>& __y)
-{
- return !(__x == __y);
-}
-
-template <class _Tp, class _Sequence>
-bool
-operator>(const queue<_Tp, _Sequence>& __x, const queue<_Tp, _Sequence>& __y)
-{
- return __y < __x;
-}
-
-template <class _Tp, class _Sequence>
-bool
-operator<=(const queue<_Tp, _Sequence>& __x, const queue<_Tp, _Sequence>& __y)
-{
- return !(__y < __x);
-}
-
-template <class _Tp, class _Sequence>
-bool
-operator>=(const queue<_Tp, _Sequence>& __x, const queue<_Tp, _Sequence>& __y)
-{
- return !(__x < __y);
-}
-
-#endif /* __STL_FUNCTION_TMPL_PARTIAL_ORDER */
-
-#ifndef __STL_LIMITED_DEFAULT_TEMPLATES
-template <class _Tp, class _Sequence = vector<_Tp>,
- class _Compare = less<typename _Sequence::value_type> >
-#else
-template <class _Tp, class _Sequence, class _Compare>
-#endif
-class priority_queue {
-public:
- typedef typename _Sequence::value_type value_type;
- typedef typename _Sequence::size_type size_type;
- typedef _Sequence container_type;
-
- typedef typename _Sequence::reference reference;
- typedef typename _Sequence::const_reference const_reference;
-protected:
- _Sequence c;
- _Compare comp;
-public:
- priority_queue() : c() {}
- explicit priority_queue(const _Compare& __x) : c(), comp(__x) {}
- priority_queue(const _Compare& __x, const _Sequence& __s)
- : c(__s), comp(__x)
- { make_heap(c.begin(), c.end(), comp); }
-
-#ifdef __STL_MEMBER_TEMPLATES
- template <class _InputIterator>
- priority_queue(_InputIterator __first, _InputIterator __last)
- : c(__first, __last) { make_heap(c.begin(), c.end(), comp); }
-
- template <class _InputIterator>
- priority_queue(_InputIterator __first,
- _InputIterator __last, const _Compare& __x)
- : c(__first, __last), comp(__x)
- { make_heap(c.begin(), c.end(), comp); }
-
- template <class _InputIterator>
- priority_queue(_InputIterator __first, _InputIterator __last,
- const _Compare& __x, const _Sequence& __s)
- : c(__s), comp(__x)
- {
- c.insert(c.end(), __first, __last);
- make_heap(c.begin(), c.end(), comp);
- }
-
-#else /* __STL_MEMBER_TEMPLATES */
- priority_queue(const value_type* __first, const value_type* __last)
- : c(__first, __last) { make_heap(c.begin(), c.end(), comp); }
-
- priority_queue(const value_type* __first, const value_type* __last,
- const _Compare& __x)
- : c(__first, __last), comp(__x)
- { make_heap(c.begin(), c.end(), comp); }
-
- priority_queue(const value_type* __first, const value_type* __last,
- const _Compare& __x, const _Sequence& __c)
- : c(__c), comp(__x)
- {
- c.insert(c.end(), __first, __last);
- make_heap(c.begin(), c.end(), comp);
- }
-#endif /* __STL_MEMBER_TEMPLATES */
-
- bool empty() const { return c.empty(); }
- size_type size() const { return c.size(); }
- const_reference top() const { return c.front(); }
- void push(const value_type& __x) {
- __STL_TRY {
- c.push_back(__x);
- push_heap(c.begin(), c.end(), comp);
- }
- __STL_UNWIND(c.clear());
- }
- void pop() {
- __STL_TRY {
- pop_heap(c.begin(), c.end(), comp);
- c.pop_back();
- }
- __STL_UNWIND(c.clear());
- }
-};
-
-// no equality is provided
-
-__STL_END_NAMESPACE
-
-#endif /* __SGI_STL_INTERNAL_QUEUE_H */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/stl_raw_storage_iter.h b/contrib/libstdc++/stl/stl_raw_storage_iter.h
deleted file mode 100644
index 6f3951cb8af8..000000000000
--- a/contrib/libstdc++/stl/stl_raw_storage_iter.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- * Copyright (c) 1996
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-/* NOTE: This is an internal header file, included by other STL headers.
- * You should not attempt to use it directly.
- */
-
-#ifndef __SGI_STL_INTERNAL_RAW_STORAGE_ITERATOR_H
-#define __SGI_STL_INTERNAL_RAW_STORAGE_ITERATOR_H
-
-__STL_BEGIN_NAMESPACE
-
-template <class _ForwardIterator, class _Tp>
-class raw_storage_iterator {
-protected:
- _ForwardIterator _M_iter;
-public:
- typedef output_iterator_tag iterator_category;
- typedef void value_type;
- typedef void difference_type;
- typedef void pointer;
- typedef void reference;
-
- explicit raw_storage_iterator(_ForwardIterator __x) : _M_iter(__x) {}
- raw_storage_iterator& operator*() { return *this; }
- raw_storage_iterator& operator=(const _Tp& __element) {
- construct(&*_M_iter, __element);
- return *this;
- }
- raw_storage_iterator<_ForwardIterator, _Tp>& operator++() {
- ++_M_iter;
- return *this;
- }
- raw_storage_iterator<_ForwardIterator, _Tp> operator++(int) {
- raw_storage_iterator<_ForwardIterator, _Tp> __tmp = *this;
- ++_M_iter;
- return __tmp;
- }
-};
-
-#ifndef __STL_CLASS_PARTIAL_SPECIALIZATION
-
-template <class _ForwardIterator, class _Tp>
-inline output_iterator_tag
-iterator_category(const raw_storage_iterator<_ForwardIterator, _Tp>&)
-{
- return output_iterator_tag();
-}
-
-#endif /* __STL_CLASS_PARTIAL_SPECIALIZATION */
-
-__STL_END_NAMESPACE
-
-#endif /* __SGI_STL_INTERNAL_RAW_STORAGE_ITERATOR_H */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/stl_relops.h b/contrib/libstdc++/stl/stl_relops.h
deleted file mode 100644
index 16cad1b84e20..000000000000
--- a/contrib/libstdc++/stl/stl_relops.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- * Copyright (c) 1996,1997
- * Silicon Graphics
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-/* NOTE: This is an internal header file, included by other STL headers.
- * You should not attempt to use it directly.
- */
-
-#ifndef __SGI_STL_INTERNAL_RELOPS
-#define __SGI_STL_INTERNAL_RELOPS
-
-__STL_BEGIN_RELOPS_NAMESPACE
-
-template <class _Tp>
-inline bool operator!=(const _Tp& __x, const _Tp& __y) {
- return !(__x == __y);
-}
-
-template <class _Tp>
-inline bool operator>(const _Tp& __x, const _Tp& __y) {
- return __y < __x;
-}
-
-template <class _Tp>
-inline bool operator<=(const _Tp& __x, const _Tp& __y) {
- return !(__y < __x);
-}
-
-template <class _Tp>
-inline bool operator>=(const _Tp& __x, const _Tp& __y) {
- return !(__x < __y);
-}
-
-__STL_END_RELOPS_NAMESPACE
-
-#endif /* __SGI_STL_INTERNAL_RELOPS */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/stl_rope.h b/contrib/libstdc++/stl/stl_rope.h
deleted file mode 100644
index fa1e848c0652..000000000000
--- a/contrib/libstdc++/stl/stl_rope.h
+++ /dev/null
@@ -1,2541 +0,0 @@
-/*
- * Copyright (c) 1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-/* NOTE: This is an internal header file, included by other STL headers.
- * You should not attempt to use it directly.
- */
-
-// rope<_CharT,_Alloc> is a sequence of _CharT.
-// Ropes appear to be mutable, but update operations
-// really copy enough of the data structure to leave the original
-// valid. Thus ropes can be logically copied by just copying
-// a pointer value.
-
-#ifndef __SGI_STL_INTERNAL_ROPE_H
-# define __SGI_STL_INTERNAL_ROPE_H
-
-# ifdef __GC
-# define __GC_CONST const
-# else
-# define __GC_CONST // constant except for deallocation
-# endif
-# ifdef __STL_SGI_THREADS
-# include <mutex.h>
-# endif
-
-__STL_BEGIN_NAMESPACE
-
-#if defined(__sgi) && !defined(__GNUC__) && (_MIPS_SIM != _MIPS_SIM_ABI32)
-#pragma set woff 1174
-#endif
-
-// The _S_eos function is used for those functions that
-// convert to/from C-like strings to detect the end of the string.
-
-// The end-of-C-string character.
-// This is what the draft standard says it should be.
-template <class _CharT>
-inline _CharT _S_eos(_CharT*) { return _CharT(); }
-
-// Test for basic character types.
-// For basic character types leaves having a trailing eos.
-template <class _CharT>
-inline bool _S_is_basic_char_type(_CharT*) { return false; }
-template <class _CharT>
-inline bool _S_is_one_byte_char_type(_CharT*) { return false; }
-
-inline bool _S_is_basic_char_type(char*) { return true; }
-inline bool _S_is_one_byte_char_type(char*) { return true; }
-inline bool _S_is_basic_char_type(wchar_t*) { return true; }
-
-// Store an eos iff _CharT is a basic character type.
-// Do not reference _S_eos if it isn't.
-template <class _CharT>
-inline void _S_cond_store_eos(_CharT&) {}
-
-inline void _S_cond_store_eos(char& __c) { __c = 0; }
-inline void _S_cond_store_eos(wchar_t& __c) { __c = 0; }
-
-// char_producers are logically functions that generate a section of
-// a string. These can be convereted to ropes. The resulting rope
-// invokes the char_producer on demand. This allows, for example,
-// files to be viewed as ropes without reading the entire file.
-template <class _CharT>
-class char_producer {
- public:
- virtual ~char_producer() {};
- virtual void operator()(size_t __start_pos, size_t __len,
- _CharT* __buffer) = 0;
- // Buffer should really be an arbitrary output iterator.
- // That way we could flatten directly into an ostream, etc.
- // This is thoroughly impossible, since iterator types don't
- // have runtime descriptions.
-};
-
-// Sequence buffers:
-//
-// Sequence must provide an append operation that appends an
-// array to the sequence. Sequence buffers are useful only if
-// appending an entire array is cheaper than appending element by element.
-// This is true for many string representations.
-// This should perhaps inherit from ostream<sequence::value_type>
-// and be implemented correspondingly, so that they can be used
-// for formatted. For the sake of portability, we don't do this yet.
-//
-// For now, sequence buffers behave as output iterators. But they also
-// behave a little like basic_ostringstream<sequence::value_type> and a
-// little like containers.
-
-template<class _Sequence, size_t _Buf_sz = 100
-# if defined(__sgi) && !defined(__GNUC__)
-# define __TYPEDEF_WORKAROUND
- ,class _V = typename _Sequence::value_type
-# endif
- >
-// The 3rd parameter works around a common compiler bug.
-class sequence_buffer : public output_iterator {
- public:
-# ifndef __TYPEDEF_WORKAROUND
- typedef typename _Sequence::value_type value_type;
-# else
- typedef _V value_type;
-# endif
- protected:
- _Sequence* _M_prefix;
- value_type _M_buffer[_Buf_sz];
- size_t _M_buf_count;
- public:
- void flush() {
- _M_prefix->append(_M_buffer, _M_buffer + _M_buf_count);
- _M_buf_count = 0;
- }
- ~sequence_buffer() { flush(); }
- sequence_buffer() : _M_prefix(0), _M_buf_count(0) {}
- sequence_buffer(const sequence_buffer& __x) {
- _M_prefix = __x._M_prefix;
- _M_buf_count = __x._M_buf_count;
- copy(__x._M_buffer, __x._M_buffer + __x._M_buf_count, _M_buffer);
- }
- sequence_buffer(sequence_buffer& __x) {
- __x.flush();
- _M_prefix = __x._M_prefix;
- _M_buf_count = 0;
- }
- sequence_buffer(_Sequence& __s) : _M_prefix(&__s), _M_buf_count(0) {}
- sequence_buffer& operator= (sequence_buffer& __x) {
- __x.flush();
- _M_prefix = __x._M_prefix;
- _M_buf_count = 0;
- return *this;
- }
- sequence_buffer& operator= (const sequence_buffer& __x) {
- _M_prefix = __x._M_prefix;
- _M_buf_count = __x._M_buf_count;
- copy(__x._M_buffer, __x._M_buffer + __x._M_buf_count, _M_buffer);
- return *this;
- }
- void push_back(value_type __x)
- {
- if (_M_buf_count < _Buf_sz) {
- _M_buffer[_M_buf_count] = __x;
- ++_M_buf_count;
- } else {
- flush();
- _M_buffer[0] = __x;
- _M_buf_count = 1;
- }
- }
- void append(value_type* __s, size_t __len)
- {
- if (__len + _M_buf_count <= _Buf_sz) {
- size_t __i = _M_buf_count;
- size_t __j = 0;
- for (; __j < __len; __i++, __j++) {
- _M_buffer[__i] = __s[__j];
- }
- _M_buf_count += __len;
- } else if (0 == _M_buf_count) {
- _M_prefix->append(__s, __s + __len);
- } else {
- flush();
- append(__s, __len);
- }
- }
- sequence_buffer& write(value_type* __s, size_t __len)
- {
- append(__s, __len);
- return *this;
- }
- sequence_buffer& put(value_type __x)
- {
- push_back(__x);
- return *this;
- }
- sequence_buffer& operator=(const value_type& __rhs)
- {
- push_back(__rhs);
- return *this;
- }
- sequence_buffer& operator*() { return *this; }
- sequence_buffer& operator++() { return *this; }
- sequence_buffer& operator++(int) { return *this; }
-};
-
-// The following should be treated as private, at least for now.
-template<class _CharT>
-class _Rope_char_consumer {
- public:
- // If we had member templates, these should not be virtual.
- // For now we need to use run-time parametrization where
- // compile-time would do. _Hence this should all be private
- // for now.
- // The symmetry with char_producer is accidental and temporary.
- virtual ~_Rope_char_consumer() {};
- virtual bool operator()(const _CharT* __buffer, size_t __len) = 0;
-};
-
-//
-// What follows should really be local to rope. Unfortunately,
-// that doesn't work, since it makes it impossible to define generic
-// equality on rope iterators. According to the draft standard, the
-// template parameters for such an equality operator cannot be inferred
-// from the occurence of a member class as a parameter.
-// (SGI compilers in fact allow this, but the __result wouldn't be
-// portable.)
-// Similarly, some of the static member functions are member functions
-// only to avoid polluting the global namespace, and to circumvent
-// restrictions on type inference for template functions.
-//
-
-template<class _CharT, class _Alloc=__STL_DEFAULT_ALLOCATOR(_CharT)> class rope;
-template<class _CharT, class _Alloc> struct _Rope_RopeConcatenation;
-template<class _CharT, class _Alloc> struct _Rope_RopeLeaf;
-template<class _CharT, class _Alloc> struct _Rope_RopeFunction;
-template<class _CharT, class _Alloc> struct _Rope_RopeSubstring;
-template<class _CharT, class _Alloc> class _Rope_iterator;
-template<class _CharT, class _Alloc> class _Rope_const_iterator;
-template<class _CharT, class _Alloc> class _Rope_char_ref_proxy;
-template<class _CharT, class _Alloc> class _Rope_char_ptr_proxy;
-
-//
-// The internal data structure for representing a rope. This is
-// private to the implementation. A rope is really just a pointer
-// to one of these.
-//
-// A few basic functions for manipulating this data structure
-// are members of _RopeRep. Most of the more complex algorithms
-// are implemented as rope members.
-//
-// Some of the static member functions of _RopeRep have identically
-// named functions in rope that simply invoke the _RopeRep versions.
-//
-// A macro to introduce various allocation and deallocation functions
-// These need to be defined differently depending on whether or not
-// we are using standard conforming allocators, and whether the allocator
-// instances have real state. Thus this macro is invoked repeatedly
-// with different definitions of __ROPE_DEFINE_ALLOC.
-// __ROPE_DEFINE_ALLOC(type,name) defines
-// type * name_allocate(size_t) and
-// void name_deallocate(tipe *, size_t)
-// Both functions may or may not be static.
-
-#define __ROPE_DEFINE_ALLOCS(__a) \
- __ROPE_DEFINE_ALLOC(_CharT,_Data) /* character data */ \
- typedef _Rope_RopeConcatenation<_CharT,__a> __C; \
- __ROPE_DEFINE_ALLOC(__C,_C) \
- typedef _Rope_RopeLeaf<_CharT,__a> __L; \
- __ROPE_DEFINE_ALLOC(__L,_L) \
- typedef _Rope_RopeFunction<_CharT,__a> __F; \
- __ROPE_DEFINE_ALLOC(__F,_F) \
- typedef _Rope_RopeSubstring<_CharT,__a> __S; \
- __ROPE_DEFINE_ALLOC(__S,_S)
-
-// Internal rope nodes potentially store a copy of the allocator
-// instance used to allocate them. This is mostly redundant.
-// But the alternative would be to pass allocator instances around
-// in some form to nearly all internal functions, since any pointer
-// assignment may result in a zero reference count and thus require
-// deallocation.
-// The _Rope_rep_base class encapsulates
-// the differences between SGI-style allocators and standard-conforming
-// allocators.
-
-#ifdef __STL_USE_STD_ALLOCATORS
-
-#define __STATIC_IF_SGI_ALLOC /* not static */
-
-// Base class for ordinary allocators.
-template <class _CharT, class _Allocator, bool _IsStatic>
-class _Rope_rep_alloc_base {
-public:
- typedef typename _Alloc_traits<_CharT,_Allocator>::allocator_type
- allocator_type;
- allocator_type get_allocator() const { return _M_data_allocator; }
- _Rope_rep_alloc_base(size_t __size, const allocator_type& __a)
- : _M_size(__size), _M_data_allocator(__a) {}
- size_t _M_size; // This is here only to avoid wasting space
- // for an otherwise empty base class.
-
-
-protected:
- allocator_type _M_data_allocator;
-
-# define __ROPE_DEFINE_ALLOC(_Tp, __name) \
- typedef typename \
- _Alloc_traits<_Tp,_Allocator>::allocator_type __name##Allocator; \
- /*static*/ _Tp * __name##_allocate(size_t __n) \
- { return __name##Allocator(_M_data_allocator).allocate(__n); } \
- void __name##_deallocate(_Tp* __p, size_t __n) \
- { __name##Allocator(_M_data_allocator).deallocate(__p, __n); }
- __ROPE_DEFINE_ALLOCS(_Allocator);
-# undef __ROPE_DEFINE_ALLOC
-};
-
-// Specialization for allocators that have the property that we don't
-// actually have to store an allocator object.
-template <class _CharT, class _Allocator>
-class _Rope_rep_alloc_base<_CharT,_Allocator,true> {
-public:
- typedef typename _Alloc_traits<_CharT,_Allocator>::allocator_type
- allocator_type;
- allocator_type get_allocator() const { return allocator_type(); }
- _Rope_rep_alloc_base(size_t __size, const allocator_type&)
- : _M_size(__size) {}
- size_t _M_size;
-
-protected:
-
-# define __ROPE_DEFINE_ALLOC(_Tp, __name) \
- typedef typename \
- _Alloc_traits<_Tp,_Allocator>::_Alloc_type __name##Alloc; \
- typedef typename \
- _Alloc_traits<_Tp,_Allocator>::allocator_type __name##Allocator; \
- static _Tp* __name##_allocate(size_t __n) \
- { return __name##Alloc::allocate(__n); } \
- void __name##_deallocate(_Tp *__p, size_t __n) \
- { __name##Alloc::deallocate(__p, __n); }
- __ROPE_DEFINE_ALLOCS(_Allocator);
-# undef __ROPE_DEFINE_ALLOC
-};
-
-template <class _CharT, class _Alloc>
-struct _Rope_rep_base
- : public _Rope_rep_alloc_base<_CharT,_Alloc,
- _Alloc_traits<_CharT,_Alloc>::_S_instanceless>
-{
- typedef _Rope_rep_alloc_base<_CharT,_Alloc,
- _Alloc_traits<_CharT,_Alloc>::_S_instanceless>
- _Base;
- typedef typename _Base::allocator_type allocator_type;
- _Rope_rep_base(size_t __size, const allocator_type& __a)
- : _Base(__size, __a) {}
-};
-
-#else /* !__STL_USE_STD_ALLOCATORS */
-
-#define __STATIC_IF_SGI_ALLOC static
-
-template <class _CharT, class _Alloc>
-class _Rope_rep_base {
-public:
- typedef _Alloc allocator_type;
- static allocator_type get_allocator() { return allocator_type(); }
- _Rope_rep_base(size_t __size, const allocator_type&) : _M_size(__size) {}
- size_t _M_size;
-
-protected:
-
-# define __ROPE_DEFINE_ALLOC(_Tp, __name) \
- typedef simple_alloc<_Tp, _Alloc> __name##Alloc; \
- static _Tp* __name##_allocate(size_t __n) \
- { return __name##Alloc::allocate(__n); } \
- static void __name##_deallocate(_Tp* __p, size_t __n) \
- { __name##Alloc::deallocate(__p, __n); }
- __ROPE_DEFINE_ALLOCS(_Alloc);
-# undef __ROPE_DEFINE_ALLOC
-};
-
-#endif /* __STL_USE_STD_ALLOCATORS */
-
-
-template<class _CharT, class _Alloc>
-struct _Rope_RopeRep : public _Rope_rep_base<_CharT,_Alloc> {
- public:
- enum { _S_max_rope_depth = 45 };
- enum _Tag {_S_leaf, _S_concat, _S_substringfn, _S_function};
- _Tag _M_tag:8;
- bool _M_is_balanced:8;
- unsigned char _M_depth;
- __GC_CONST _CharT* _M_c_string;
- /* Flattened version of string, if needed. */
- /* typically 0. */
- /* If it's not 0, then the memory is owned */
- /* by this node. */
- /* In the case of a leaf, this may point to */
- /* the same memory as the data field. */
- typedef _Rope_rep_base<_CharT,_Alloc>::allocator_type allocator_type;
- _Rope_RopeRep(_Tag __t, int __d, bool __b, size_t __size,
- allocator_type __a)
- : _Rope_rep_base<_CharT,_Alloc>(__size, __a),
- _M_tag(__t), _M_depth(__d), _M_is_balanced(__b), _M_c_string(0)
- {
-# ifndef __GC
- _M_refcount = 1;
- _M_init_refcount_lock();
-# endif
- }
-# ifndef __GC
-# if defined(__STL_WIN32THREADS)
- long _M_refcount; // InterlockedIncrement wants a long *
-# else
- size_t _M_refcount;
-# endif
- // We count references from rope instances
- // and references from other rope nodes. We
- // do not count const_iterator references.
- // Iterator references are counted so that rope modifications
- // can be detected after the fact.
- // Generally function results are counted, i.__e.
- // a pointer returned by a function is included at the
- // point at which the pointer is returned.
- // The recipient should decrement the count if the
- // __result is not needed.
- // Generally function arguments are not reflected
- // in the reference count. The callee should increment
- // the count before saving the argument someplace that
- // will outlive the call.
-# endif
-# ifndef __GC
-# ifdef __STL_SGI_THREADS
- // Reference counting with multiple threads and no
- // hardware or thread package support is pretty awful.
- // Mutexes are normally too expensive.
- // We'll assume a COMPARE_AND_SWAP(destp, __old, new)
- // operation, which might be cheaper.
-# if __mips < 3 || !(defined (_ABIN32) || defined(_ABI64))
-# define __add_and_fetch(l,v) add_then_test((unsigned long*)l,v)
-# endif
- void _M_init_refcount_lock() {}
- void _M_incr_refcount ()
- {
- __add_and_fetch(&_M_refcount, 1);
- }
- size_t _M_decr_refcount ()
- {
- return __add_and_fetch(&_M_refcount, (size_t)(-1));
- }
-# elif defined(__STL_WIN32THREADS)
- void _M_init_refcount_lock() {}
- void _M_incr_refcount ()
- {
- InterlockedIncrement(&_M_refcount);
- }
- size_t _M_decr_refcount ()
- {
- return InterlockedDecrement(&_M_refcount);
- }
-# elif defined(__STL_PTHREADS)
- // This should be portable, but performance is expected
- // to be quite awful. This really needs platform specific
- // code.
- pthread_mutex_t _M_refcount_lock;
- void _M_init_refcount_lock() {
- pthread_mutex_init(&_M_refcount_lock, 0);
- }
- void _M_incr_refcount ()
- {
- pthread_mutex_lock(&_M_refcount_lock);
- ++_M_refcount;
- pthread_mutex_unlock(&_M_refcount_lock);
- }
- size_t _M_decr_refcount ()
- {
- size_t __result;
- pthread_mutex_lock(&_M_refcount_lock);
- __result = --_M_refcount;
- pthread_mutex_unlock(&_M_refcount_lock);
- return __result;
- }
-# else
- void _M_init_refcount_lock() {}
- void _M_incr_refcount ()
- {
- ++_M_refcount;
- }
- size_t _M_decr_refcount ()
- {
- --_M_refcount;
- return _M_refcount;
- }
-# endif
-# else
- void _M_incr_refcount () {}
-# endif
-# ifdef __STL_USE_STD_ALLOCATORS
- static void _S_free_string(__GC_CONST _CharT*, size_t __len,
- allocator_type __a);
-# define __STL_FREE_STRING(__s, __l, __a) _S_free_string(__s, __l, __a);
-# else
- static void _S_free_string(__GC_CONST _CharT*, size_t __len);
-# define __STL_FREE_STRING(__s, __l, __a) _S_free_string(__s, __l);
-# endif
- // Deallocate data section of a leaf.
- // This shouldn't be a member function.
- // But its hard to do anything else at the
- // moment, because it's templatized w.r.t.
- // an allocator.
- // Does nothing if __GC is defined.
-# ifndef __GC
- void _M_free_c_string();
- void _M_free_tree();
- // Deallocate t. Assumes t is not 0.
- void _M_unref_nonnil()
- {
- if (0 == _M_decr_refcount()) _M_free_tree();
- }
- void _M_ref_nonnil()
- {
- _M_incr_refcount();
- }
- static void _S_unref(_Rope_RopeRep* __t)
- {
- if (0 != __t) {
- __t->_M_unref_nonnil();
- }
- }
- static void _S_ref(_Rope_RopeRep* __t)
- {
- if (0 != __t) __t->_M_incr_refcount();
- }
- static void _S_free_if_unref(_Rope_RopeRep* __t)
- {
- if (0 != __t && 0 == __t->_M_refcount) __t->_M_free_tree();
- }
-# else /* __GC */
- void _M_unref_nonnil() {}
- void _M_ref_nonnil() {}
- static void _S_unref(_Rope_RopeRep*) {}
- static void _S_ref(_Rope_RopeRep*) {}
- static void _S_free_if_unref(_Rope_RopeRep*) {}
-# endif
-
-};
-
-template<class _CharT, class _Alloc>
-struct _Rope_RopeLeaf : public _Rope_RopeRep<_CharT,_Alloc> {
- public:
- // Apparently needed by VC++
- // The data fields of leaves are allocated with some
- // extra space, to accomodate future growth and for basic
- // character types, to hold a trailing eos character.
- enum { _S_alloc_granularity = 8 };
- static size_t _S_rounded_up_size(size_t __n) {
- size_t __size_with_eos;
-
- if (_S_is_basic_char_type((_CharT*)0)) {
- __size_with_eos = __n + 1;
- } else {
- __size_with_eos = __n;
- }
-# ifdef __GC
- return __size_with_eos;
-# else
- // Allow slop for in-place expansion.
- return (__size_with_eos + _S_alloc_granularity-1)
- &~ (_S_alloc_granularity-1);
-# endif
- }
- __GC_CONST _CharT* _M_data; /* Not necessarily 0 terminated. */
- /* The allocated size is */
- /* _S_rounded_up_size(size), except */
- /* in the GC case, in which it */
- /* doesn't matter. */
- typedef _Rope_rep_base<_CharT,_Alloc>::allocator_type allocator_type;
- _Rope_RopeLeaf(__GC_CONST _CharT* __d, size_t __size, allocator_type __a)
- : _Rope_RopeRep<_CharT,_Alloc>(_S_leaf, 0, true, __size, __a),
- _M_data(__d)
- {
- __stl_assert(__size > 0);
- if (_S_is_basic_char_type((_CharT *)0)) {
- // already eos terminated.
- _M_c_string = __d;
- }
- }
- // The constructor assumes that d has been allocated with
- // the proper allocator and the properly padded size.
- // In contrast, the destructor deallocates the data:
-# ifndef __GC
- ~_Rope_RopeLeaf() {
- if (_M_data != _M_c_string) {
- _M_free_c_string();
- }
- __STL_FREE_STRING(_M_data, _M_size, get_allocator());
- }
-# endif
-};
-
-template<class _CharT, class _Alloc>
-struct _Rope_RopeConcatenation : public _Rope_RopeRep<_CharT,_Alloc> {
- public:
- _Rope_RopeRep<_CharT,_Alloc>* _M_left;
- _Rope_RopeRep<_CharT,_Alloc>* _M_right;
- typedef _Rope_rep_base<_CharT,_Alloc>::allocator_type allocator_type;
- _Rope_RopeConcatenation(_Rope_RopeRep<_CharT,_Alloc>* __l,
- _Rope_RopeRep<_CharT,_Alloc>* __r,
- allocator_type __a)
- : _Rope_RopeRep<_CharT,_Alloc>(
- _S_concat, max(__l->_M_depth, __r->_M_depth) + 1, false,
- __l->_M_size + __r->_M_size, __a),
- _M_left(__l), _M_right(__r)
- {}
-# ifndef __GC
- ~_Rope_RopeConcatenation() {
- _M_free_c_string();
- _M_left->_M_unref_nonnil();
- _M_right->_M_unref_nonnil();
- }
-# endif
-};
-
-template<class _CharT, class _Alloc>
-struct _Rope_RopeFunction : public _Rope_RopeRep<_CharT,_Alloc> {
- public:
- char_producer<_CharT>* _M_fn;
-# ifndef __GC
- bool _M_delete_when_done; // Char_producer is owned by the
- // rope and should be explicitly
- // deleted when the rope becomes
- // inaccessible.
-# else
- // In the GC case, we either register the rope for
- // finalization, or not. Thus the field is unnecessary;
- // the information is stored in the collector data structures.
- // We do need a finalization procedure to be invoked by the
- // collector.
- static void _S_fn_finalization_proc(void * __tree, void *) {
- delete ((_Rope_RopeFunction *)__tree) -> _M_fn;
- }
-# endif
- typedef _Rope_rep_base<_CharT,_Alloc>::allocator_type allocator_type;
- _Rope_RopeFunction(char_producer<_CharT>* __f, size_t __size,
- bool __d, allocator_type __a)
- :_Rope_RopeRep<_CharT,_Alloc>(_S_function, 0, true, __size, __a),
- _M_fn(__f)
-# ifndef __GC
- , _M_delete_when_done(__d)
-# endif
- {
- __stl_assert(__size > 0);
-# ifdef __GC
- if (__d) {
- GC_REGISTER_FINALIZER(
- this, _Rope_RopeFunction::_S_fn_finalization_proc, 0, 0, 0);
- }
-# endif
- }
-# ifndef __GC
- ~_Rope_RopeFunction() {
- _M_free_c_string();
- if (_M_delete_when_done) {
- delete _M_fn;
- }
- }
-# endif
-};
-// Substring results are usually represented using just
-// concatenation nodes. But in the case of very long flat ropes
-// or ropes with a functional representation that isn't practical.
-// In that case, we represent the __result as a special case of
-// RopeFunction, whose char_producer points back to the rope itself.
-// In all cases except repeated substring operations and
-// deallocation, we treat the __result as a RopeFunction.
-template<class _CharT, class _Alloc>
-struct _Rope_RopeSubstring : public _Rope_RopeFunction<_CharT,_Alloc>,
- public char_producer<_CharT> {
- public:
- // XXX this whole class should be rewritten.
- _Rope_RopeRep<_CharT,_Alloc>* _M_base; // not 0
- size_t _M_start;
- virtual void operator()(size_t __start_pos, size_t __req_len,
- _CharT* __buffer) {
- switch(_M_base->_M_tag) {
- case _S_function:
- case _S_substringfn:
- {
- char_producer<_CharT>* __fn =
- ((_Rope_RopeFunction<_CharT,_Alloc>*)_M_base)->_M_fn;
- __stl_assert(__start_pos + __req_len <= _M_size);
- __stl_assert(_M_start + _M_size <= _M_base->_M_size);
- (*__fn)(__start_pos + _M_start, __req_len, __buffer);
- }
- break;
- case _S_leaf:
- {
- __GC_CONST _CharT* __s =
- ((_Rope_RopeLeaf<_CharT,_Alloc>*)_M_base)->_M_data;
- uninitialized_copy_n(__s + __start_pos + _M_start, __req_len,
- __buffer);
- }
- break;
- default:
- __stl_assert(false);
- }
- }
- typedef _Rope_rep_base<_CharT,_Alloc>::allocator_type allocator_type;
- _Rope_RopeSubstring(_Rope_RopeRep<_CharT,_Alloc>* __b, size_t __s,
- size_t __l, allocator_type __a)
- : _Rope_RopeFunction<_CharT,_Alloc>(this, __l, false, __a), _M_base(__b)
- , _M_start(__s)
- {
- __stl_assert(__l > 0);
- __stl_assert(__s + __l <= __b->_M_size);
-# ifndef __GC
- _M_base->_M_ref_nonnil();
-# endif
- _M_tag = _S_substringfn;
- }
- virtual ~_Rope_RopeSubstring()
- {
-# ifndef __GC
- _M_base->_M_unref_nonnil();
- // _M_free_c_string(); -- done by parent class
-# endif
- }
-};
-
-
-// Self-destructing pointers to Rope_rep.
-// These are not conventional smart pointers. Their
-// only purpose in life is to ensure that unref is called
-// on the pointer either at normal exit or if an exception
-// is raised. It is the caller's responsibility to
-// adjust reference counts when these pointers are initialized
-// or assigned to. (This convention significantly reduces
-// the number of potentially expensive reference count
-// updates.)
-#ifndef __GC
- template<class _CharT, class _Alloc>
- struct _Rope_self_destruct_ptr {
- _Rope_RopeRep<_CharT,_Alloc>* _M_ptr;
- ~_Rope_self_destruct_ptr()
- { _Rope_RopeRep<_CharT,_Alloc>::_S_unref(_M_ptr); }
-# ifdef __STL_USE_EXCEPTIONS
- _Rope_self_destruct_ptr() : _M_ptr(0) {};
-# else
- _Rope_self_destruct_ptr() {};
-# endif
- _Rope_self_destruct_ptr(_Rope_RopeRep<_CharT,_Alloc>* __p) : _M_ptr(__p) {}
- _Rope_RopeRep<_CharT,_Alloc>& operator*() { return *_M_ptr; }
- _Rope_RopeRep<_CharT,_Alloc>* operator->() { return _M_ptr; }
- operator _Rope_RopeRep<_CharT,_Alloc>*() { return _M_ptr; }
- _Rope_self_destruct_ptr& operator= (_Rope_RopeRep<_CharT,_Alloc>* __x)
- { _M_ptr = __x; return *this; }
- };
-#endif
-
-// Dereferencing a nonconst iterator has to return something
-// that behaves almost like a reference. It's not possible to
-// return an actual reference since assignment requires extra
-// work. And we would get into the same problems as with the
-// CD2 version of basic_string.
-template<class _CharT, class _Alloc>
-class _Rope_char_ref_proxy {
- friend class rope<_CharT,_Alloc>;
- friend class _Rope_iterator<_CharT,_Alloc>;
- friend class _Rope_char_ptr_proxy<_CharT,_Alloc>;
-# ifdef __GC
- typedef _Rope_RopeRep<_CharT,_Alloc>* _Self_destruct_ptr;
-# else
- typedef _Rope_self_destruct_ptr<_CharT,_Alloc> _Self_destruct_ptr;
-# endif
- typedef _Rope_RopeRep<_CharT,_Alloc> _RopeRep;
- typedef rope<_CharT,_Alloc> _My_rope;
- size_t _M_pos;
- _CharT _M_current;
- bool _M_current_valid;
- _My_rope* _M_root; // The whole rope.
- public:
- _Rope_char_ref_proxy(_My_rope* __r, size_t __p) :
- _M_pos(__p), _M_current_valid(false), _M_root(__r) {}
- _Rope_char_ref_proxy(const _Rope_char_ref_proxy& __x) :
- _M_pos(__x._M_pos), _M_current_valid(false), _M_root(__x._M_root) {}
- // Don't preserve cache if the reference can outlive the
- // expression. We claim that's not possible without calling
- // a copy constructor or generating reference to a proxy
- // reference. We declare the latter to have undefined semantics.
- _Rope_char_ref_proxy(_My_rope* __r, size_t __p,
- _CharT __c) :
- _M_pos(__p), _M_current(__c), _M_current_valid(true), _M_root(__r) {}
- inline operator _CharT () const;
- _Rope_char_ref_proxy& operator= (_CharT __c);
- _Rope_char_ptr_proxy<_CharT,_Alloc> operator& () const;
- _Rope_char_ref_proxy& operator= (const _Rope_char_ref_proxy& __c) {
- return operator=((_CharT)__c);
- }
-};
-
-#ifdef __STL_FUNCTION_TMPL_PARTIAL_ORDER
- template<class _CharT, class __Alloc>
- inline void swap(_Rope_char_ref_proxy <_CharT, __Alloc > __a,
- _Rope_char_ref_proxy <_CharT, __Alloc > __b) {
- _CharT __tmp = __a;
- __a = __b;
- __b = __tmp;
- }
-#else
-// There is no really acceptable way to handle this. The default
-// definition of swap doesn't work for proxy references.
-// It can't really be made to work, even with ugly hacks, since
-// the only unusual operation it uses is the copy constructor, which
-// is needed for other purposes. We provide a macro for
-// full specializations, and instantiate the most common case.
-# define _ROPE_SWAP_SPECIALIZATION(_CharT, __Alloc) \
- inline void swap(_Rope_char_ref_proxy <_CharT, __Alloc > __a, \
- _Rope_char_ref_proxy <_CharT, __Alloc > __b) { \
- _CharT __tmp = __a; \
- __a = __b; \
- __b = __tmp; \
- }
-
-_ROPE_SWAP_SPECIALIZATION(char,__STL_DEFAULT_ALLOCATOR(char))
-
-#endif /* !__STL_FUNCTION_TMPL_PARTIAL_ORDER */
-
-template<class _CharT, class _Alloc>
-class _Rope_char_ptr_proxy {
- // XXX this class should be rewritten.
- friend class _Rope_char_ref_proxy<_CharT,_Alloc>;
- size_t _M_pos;
- rope<_CharT,_Alloc>* _M_root; // The whole rope.
- public:
- _Rope_char_ptr_proxy(const _Rope_char_ref_proxy<_CharT,_Alloc>& __x)
- : _M_pos(__x._M_pos), _M_root(__x._M_root) {}
- _Rope_char_ptr_proxy(const _Rope_char_ptr_proxy& __x)
- : _M_pos(__x._M_pos), _M_root(__x._M_root) {}
- _Rope_char_ptr_proxy() {}
- _Rope_char_ptr_proxy(_CharT* __x) : _M_root(0), _M_pos(0) {
- __stl_assert(0 == __x);
- }
- _Rope_char_ptr_proxy&
- operator= (const _Rope_char_ptr_proxy& __x) {
- _M_pos = __x._M_pos;
- _M_root = __x._M_root;
- return *this;
- }
- friend bool operator== __STL_NULL_TMPL_ARGS
- (const _Rope_char_ptr_proxy<_CharT,_Alloc>& __x,
- const _Rope_char_ptr_proxy<_CharT,_Alloc>& __y);
-
- _Rope_char_ref_proxy<_CharT,_Alloc> operator*() const {
- return _Rope_char_ref_proxy<_CharT,_Alloc>(_M_root, _M_pos);
- }
-};
-
-
-// Rope iterators:
-// Unlike in the C version, we cache only part of the stack
-// for rope iterators, since they must be efficiently copyable.
-// When we run out of cache, we have to reconstruct the iterator
-// value.
-// Pointers from iterators are not included in reference counts.
-// Iterators are assumed to be thread private. Ropes can
-// be shared.
-
-#if defined(__sgi) && !defined(__GNUC__) && (_MIPS_SIM != _MIPS_SIM_ABI32)
-#pragma set woff 1375
-#endif
-
-template<class _CharT, class _Alloc>
-class _Rope_iterator_base
- : public random_access_iterator<_CharT, ptrdiff_t> {
- friend class rope<_CharT,_Alloc>;
- public:
- typedef _Rope_RopeRep<_CharT,_Alloc> _RopeRep;
- // Borland doesnt want this to be protected.
- protected:
- enum { _S_path_cache_len = 4 }; // Must be <= 9.
- enum { _S_iterator_buf_len = 15 };
- size_t _M_current_pos;
- _RopeRep* _M_root; // The whole rope.
- size_t _M_leaf_pos; // Starting position for current leaf
- __GC_CONST _CharT* _M_buf_start;
- // Buffer possibly
- // containing current char.
- __GC_CONST _CharT* _M_buf_ptr;
- // Pointer to current char in buffer.
- // != 0 ==> buffer valid.
- __GC_CONST _CharT* _M_buf_end;
- // One past __last valid char in buffer.
- // What follows is the path cache. We go out of our
- // way to make this compact.
- // Path_end contains the bottom section of the path from
- // the root to the current leaf.
- const _RopeRep* _M_path_end[_S_path_cache_len];
- int _M_leaf_index; // Last valid __pos in path_end;
- // _M_path_end[0] ... _M_path_end[leaf_index-1]
- // point to concatenation nodes.
- unsigned char _M_path_directions;
- // (path_directions >> __i) & 1 is 1
- // iff we got from _M_path_end[leaf_index - __i - 1]
- // to _M_path_end[leaf_index - __i] by going to the
- // __right. Assumes path_cache_len <= 9.
- _CharT _M_tmp_buf[_S_iterator_buf_len];
- // Short buffer for surrounding chars.
- // This is useful primarily for
- // RopeFunctions. We put the buffer
- // here to avoid locking in the
- // multithreaded case.
- // The cached path is generally assumed to be valid
- // only if the buffer is valid.
- static void _S_setbuf(_Rope_iterator_base& __x);
- // Set buffer contents given
- // path cache.
- static void _S_setcache(_Rope_iterator_base& __x);
- // Set buffer contents and
- // path cache.
- static void _S_setcache_for_incr(_Rope_iterator_base& __x);
- // As above, but assumes path
- // cache is valid for previous posn.
- _Rope_iterator_base() {}
- _Rope_iterator_base(_RopeRep* __root, size_t __pos)
- : _M_root(__root), _M_current_pos(__pos), _M_buf_ptr(0) {}
- void _M_incr(size_t __n);
- void _M_decr(size_t __n);
- public:
- size_t index() const { return _M_current_pos; }
- _Rope_iterator_base(const _Rope_iterator_base& __x) {
- if (0 != __x._M_buf_ptr) {
- *this = __x;
- } else {
- _M_current_pos = __x._M_current_pos;
- _M_root = __x._M_root;
- _M_buf_ptr = 0;
- }
- }
-};
-
-template<class _CharT, class _Alloc> class _Rope_iterator;
-
-template<class _CharT, class _Alloc>
-class _Rope_const_iterator : public _Rope_iterator_base<_CharT,_Alloc> {
- friend class rope<_CharT,_Alloc>;
- protected:
- _Rope_const_iterator(const _RopeRep* __root, size_t __pos):
- _Rope_iterator_base<_CharT,_Alloc>(
- const_cast<_RopeRep*>(__root), __pos)
- // Only nonconst iterators modify root ref count
- {}
- public:
- typedef _CharT reference; // Really a value. Returning a reference
- // Would be a mess, since it would have
- // to be included in refcount.
- typedef const _CharT* pointer;
-
- public:
- _Rope_const_iterator() {};
- _Rope_const_iterator(const _Rope_const_iterator& __x) :
- _Rope_iterator_base<_CharT,_Alloc>(__x) { }
- _Rope_const_iterator(const _Rope_iterator<_CharT,_Alloc>& __x);
- _Rope_const_iterator(const rope<_CharT,_Alloc>& __r, size_t __pos) :
- _Rope_iterator_base<_CharT,_Alloc>(__r._M_tree_ptr, __pos) {}
- _Rope_const_iterator& operator= (const _Rope_const_iterator& __x) {
- if (0 != __x._M_buf_ptr) {
- *(static_cast<_Rope_iterator_base<_CharT,_Alloc>*>(this)) = __x;
- } else {
- _M_current_pos = __x._M_current_pos;
- _M_root = __x._M_root;
- _M_buf_ptr = 0;
- }
- return(*this);
- }
- reference operator*() {
- if (0 == _M_buf_ptr) _S_setcache(*this);
- return *_M_buf_ptr;
- }
- _Rope_const_iterator& operator++() {
- __GC_CONST _CharT* __next;
- if (0 != _M_buf_ptr && (__next = _M_buf_ptr + 1) < _M_buf_end) {
- _M_buf_ptr = __next;
- ++_M_current_pos;
- } else {
- _M_incr(1);
- }
- return *this;
- }
- _Rope_const_iterator& operator+=(ptrdiff_t __n) {
- if (__n >= 0) {
- _M_incr(__n);
- } else {
- _M_decr(-__n);
- }
- return *this;
- }
- _Rope_const_iterator& operator--() {
- _M_decr(1);
- return *this;
- }
- _Rope_const_iterator& operator-=(ptrdiff_t __n) {
- if (__n >= 0) {
- _M_decr(__n);
- } else {
- _M_incr(-__n);
- }
- return *this;
- }
- _Rope_const_iterator operator++(int) {
- size_t __old_pos = _M_current_pos;
- _M_incr(1);
- return _Rope_const_iterator<_CharT,_Alloc>(_M_root, __old_pos);
- // This makes a subsequent dereference expensive.
- // Perhaps we should instead copy the iterator
- // if it has a valid cache?
- }
- _Rope_const_iterator operator--(int) {
- size_t __old_pos = _M_current_pos;
- _M_decr(1);
- return _Rope_const_iterator<_CharT,_Alloc>(_M_root, __old_pos);
- }
- friend _Rope_const_iterator<_CharT,_Alloc> operator- __STL_NULL_TMPL_ARGS
- (const _Rope_const_iterator<_CharT,_Alloc>& __x,
- ptrdiff_t __n);
- friend _Rope_const_iterator<_CharT,_Alloc> operator+ __STL_NULL_TMPL_ARGS
- (const _Rope_const_iterator<_CharT,_Alloc>& __x,
- ptrdiff_t __n);
- friend _Rope_const_iterator<_CharT,_Alloc> operator+ __STL_NULL_TMPL_ARGS
- (ptrdiff_t __n,
- const _Rope_const_iterator<_CharT,_Alloc>& __x);
- reference operator[](size_t __n) {
- return rope<_CharT,_Alloc>::_S_fetch(_M_root, _M_current_pos + __n);
- }
- friend bool operator== __STL_NULL_TMPL_ARGS
- (const _Rope_const_iterator<_CharT,_Alloc>& __x,
- const _Rope_const_iterator<_CharT,_Alloc>& __y);
- friend bool operator< __STL_NULL_TMPL_ARGS
- (const _Rope_const_iterator<_CharT,_Alloc>& __x,
- const _Rope_const_iterator<_CharT,_Alloc>& __y);
- friend ptrdiff_t operator- __STL_NULL_TMPL_ARGS
- (const _Rope_const_iterator<_CharT,_Alloc>& __x,
- const _Rope_const_iterator<_CharT,_Alloc>& __y);
-};
-
-template<class _CharT, class _Alloc>
-class _Rope_iterator : public _Rope_iterator_base<_CharT,_Alloc> {
- friend class rope<_CharT,_Alloc>;
- protected:
- rope<_CharT,_Alloc>* _M_root_rope;
- // root is treated as a cached version of this,
- // and is used to detect changes to the underlying
- // rope.
- // Root is included in the reference count.
- // This is necessary so that we can detect changes reliably.
- // Unfortunately, it requires careful bookkeeping for the
- // nonGC case.
- _Rope_iterator(rope<_CharT,_Alloc>* __r, size_t __pos)
- : _Rope_iterator_base<_CharT,_Alloc>(__r->_M_tree_ptr, __pos),
- _M_root_rope(__r)
- { _RopeRep::_S_ref(_M_root); }
-
- void _M_check();
- public:
- typedef _Rope_char_ref_proxy<_CharT,_Alloc> reference;
- typedef _Rope_char_ref_proxy<_CharT,_Alloc>* pointer;
-
- public:
- rope<_CharT,_Alloc>& container() { return *_M_root_rope; }
- _Rope_iterator() {
- _M_root = 0; // Needed for reference counting.
- };
- _Rope_iterator(const _Rope_iterator& __x) :
- _Rope_iterator_base<_CharT,_Alloc>(__x) {
- _M_root_rope = __x._M_root_rope;
- _RopeRep::_S_ref(_M_root);
- }
- _Rope_iterator(rope<_CharT,_Alloc>& __r, size_t __pos);
- ~_Rope_iterator() {
- _RopeRep::_S_unref(_M_root);
- }
- _Rope_iterator& operator= (const _Rope_iterator& __x) {
- _RopeRep* __old = _M_root;
-
- _RopeRep::_S_ref(__x._M_root);
- if (0 != __x._M_buf_ptr) {
- _M_root_rope = __x._M_root_rope;
- *(static_cast<_Rope_iterator_base<_CharT,_Alloc>*>(this)) = __x;
- } else {
- _M_current_pos = __x._M_current_pos;
- _M_root = __x._M_root;
- _M_root_rope = __x._M_root_rope;
- _M_buf_ptr = 0;
- }
- _RopeRep::_S_unref(__old);
- return(*this);
- }
- reference operator*() {
- _M_check();
- if (0 == _M_buf_ptr) {
- return _Rope_char_ref_proxy<_CharT,_Alloc>(
- _M_root_rope, _M_current_pos);
- } else {
- return _Rope_char_ref_proxy<_CharT,_Alloc>(
- _M_root_rope, _M_current_pos, *_M_buf_ptr);
- }
- }
- _Rope_iterator& operator++() {
- _M_incr(1);
- return *this;
- }
- _Rope_iterator& operator+=(difference_type __n) {
- if (__n >= 0) {
- _M_incr(__n);
- } else {
- _M_decr(-__n);
- }
- return *this;
- }
- _Rope_iterator& operator--() {
- _M_decr(1);
- return *this;
- }
- _Rope_iterator& operator-=(difference_type __n) {
- if (__n >= 0) {
- _M_decr(__n);
- } else {
- _M_incr(-__n);
- }
- return *this;
- }
- _Rope_iterator operator++(int) {
- size_t __old_pos = _M_current_pos;
- _M_incr(1);
- return _Rope_iterator<_CharT,_Alloc>(_M_root_rope, __old_pos);
- }
- _Rope_iterator operator--(int) {
- size_t __old_pos = _M_current_pos;
- _M_decr(1);
- return _Rope_iterator<_CharT,_Alloc>(_M_root_rope, __old_pos);
- }
- reference operator[](ptrdiff_t __n) {
- return _Rope_char_ref_proxy<_CharT,_Alloc>(
- _M_root_rope, _M_current_pos + __n);
- }
- friend bool operator== __STL_NULL_TMPL_ARGS
- (const _Rope_iterator<_CharT,_Alloc>& __x,
- const _Rope_iterator<_CharT,_Alloc>& __y);
- friend bool operator< __STL_NULL_TMPL_ARGS
- (const _Rope_iterator<_CharT,_Alloc>& __x,
- const _Rope_iterator<_CharT,_Alloc>& __y);
- friend ptrdiff_t operator- __STL_NULL_TMPL_ARGS
- (const _Rope_iterator<_CharT,_Alloc>& __x,
- const _Rope_iterator<_CharT,_Alloc>& __y);
- friend _Rope_iterator<_CharT,_Alloc> operator- __STL_NULL_TMPL_ARGS
- (const _Rope_iterator<_CharT,_Alloc>& __x,
- ptrdiff_t __n);
- friend _Rope_iterator<_CharT,_Alloc> operator+ __STL_NULL_TMPL_ARGS
- (const _Rope_iterator<_CharT,_Alloc>& __x,
- ptrdiff_t __n);
- friend _Rope_iterator<_CharT,_Alloc> operator+ __STL_NULL_TMPL_ARGS
- (ptrdiff_t __n,
- const _Rope_iterator<_CharT,_Alloc>& __x);
-
-};
-
-#if defined(__sgi) && !defined(__GNUC__) && (_MIPS_SIM != _MIPS_SIM_ABI32)
-#pragma reset woff 1375
-#endif
-
-// The rope base class encapsulates
-// the differences between SGI-style allocators and standard-conforming
-// allocators.
-
-#ifdef __STL_USE_STD_ALLOCATORS
-
-// Base class for ordinary allocators.
-template <class _CharT, class _Allocator, bool _IsStatic>
-class _Rope_alloc_base {
-public:
- typedef _Rope_RopeRep<_CharT,_Allocator> _RopeRep;
- typedef typename _Alloc_traits<_CharT,_Allocator>::allocator_type
- allocator_type;
- allocator_type get_allocator() const { return _M_data_allocator; }
- _Rope_alloc_base(_RopeRep *__t, const allocator_type& __a)
- : _M_tree_ptr(__t), _M_data_allocator(__a) {}
- _Rope_alloc_base(const allocator_type& __a)
- : _M_data_allocator(__a) {}
-
-protected:
- // The only data members of a rope:
- allocator_type _M_data_allocator;
- _RopeRep* _M_tree_ptr;
-
-# define __ROPE_DEFINE_ALLOC(_Tp, __name) \
- typedef typename \
- _Alloc_traits<_Tp,_Allocator>::allocator_type __name##Allocator; \
- _Tp* __name##_allocate(size_t __n) const \
- { return __name##Allocator(_M_data_allocator).allocate(__n); } \
- void __name##_deallocate(_Tp *__p, size_t __n) const \
- { __name##Allocator(_M_data_allocator).deallocate(__p, __n); }
- __ROPE_DEFINE_ALLOCS(_Allocator)
-# undef __ROPE_DEFINE_ALLOC
-};
-
-// Specialization for allocators that have the property that we don't
-// actually have to store an allocator object.
-template <class _CharT, class _Allocator>
-class _Rope_alloc_base<_CharT,_Allocator,true> {
-public:
- typedef _Rope_RopeRep<_CharT,_Allocator> _RopeRep;
- typedef typename _Alloc_traits<_CharT,_Allocator>::allocator_type
- allocator_type;
- allocator_type get_allocator() const { return allocator_type(); }
- _Rope_alloc_base(_RopeRep *__t, const allocator_type&)
- : _M_tree_ptr(__t) {}
- _Rope_alloc_base(const allocator_type&) {}
-
-protected:
- // The only data member of a rope:
- _RopeRep *_M_tree_ptr;
-
-# define __ROPE_DEFINE_ALLOC(_Tp, __name) \
- typedef typename \
- _Alloc_traits<_Tp,_Allocator>::_Alloc_type __name##Alloc; \
- typedef typename \
- _Alloc_traits<_Tp,_Allocator>::allocator_type __name##Allocator; \
- static _Tp* __name##_allocate(size_t __n) \
- { return __name##Alloc::allocate(__n); } \
- static void __name##_deallocate(_Tp *__p, size_t __n) \
- { __name##Alloc::deallocate(__p, __n); }
- __ROPE_DEFINE_ALLOCS(_Allocator)
-# undef __ROPE_DEFINE_ALLOC
-};
-
-template <class _CharT, class _Alloc>
-struct _Rope_base
- : public _Rope_alloc_base<_CharT,_Alloc,
- _Alloc_traits<_CharT,_Alloc>::_S_instanceless>
-{
- typedef _Rope_alloc_base<_CharT,_Alloc,
- _Alloc_traits<_CharT,_Alloc>::_S_instanceless>
- _Base;
- typedef typename _Base::allocator_type allocator_type;
- _Rope_base(_RopeRep* __t, const allocator_type& __a) : _Base(__t, __a) {}
- _Rope_base(const allocator_type& __a) : _Base(__a) {}
-};
-
-#else /* !__STL_USE_STD_ALLOCATORS */
-
-template <class _CharT, class _Alloc>
-class _Rope_base {
-public:
- typedef _Rope_RopeRep<_CharT, _Alloc> _RopeRep;
- typedef _Alloc allocator_type;
- static allocator_type get_allocator() { return allocator_type(); }
- _Rope_base(_RopeRep * __t, const allocator_type&) : _M_tree_ptr(__t) {}
- _Rope_base(const allocator_type&) {}
-
-protected:
- // The only data member of a rope:
- _RopeRep* _M_tree_ptr;
-
-# define __ROPE_DEFINE_ALLOC(_Tp, __name) \
- typedef simple_alloc<_Tp, _Alloc> __name##Alloc; \
- static _Tp* __name##_allocate(size_t __n) \
- { return __name##Alloc::allocate(__n); } \
- static void __name##_deallocate(_Tp *__p, size_t __n) \
- { __name##Alloc::deallocate(__p, __n); }
- __ROPE_DEFINE_ALLOCS(_Alloc)
-# undef __ROPE_DEFINE_ALLOC
-};
-
-#endif /* __STL_USE_STD_ALLOCATORS */
-
-
-template <class _CharT, class _Alloc>
-class rope : public _Rope_base<_CharT,_Alloc> {
- public:
- typedef _CharT value_type;
- typedef ptrdiff_t difference_type;
- typedef size_t size_type;
- typedef _CharT const_reference;
- typedef const _CharT* const_pointer;
- typedef _Rope_iterator<_CharT,_Alloc> iterator;
- typedef _Rope_const_iterator<_CharT,_Alloc> const_iterator;
- typedef _Rope_char_ref_proxy<_CharT,_Alloc> reference;
- typedef _Rope_char_ptr_proxy<_CharT,_Alloc> pointer;
-
- friend class _Rope_iterator<_CharT,_Alloc>;
- friend class _Rope_const_iterator<_CharT,_Alloc>;
- friend struct _Rope_RopeRep<_CharT,_Alloc>;
- friend class _Rope_iterator_base<_CharT,_Alloc>;
- friend class _Rope_char_ptr_proxy<_CharT,_Alloc>;
- friend class _Rope_char_ref_proxy<_CharT,_Alloc>;
- friend struct _Rope_RopeSubstring<_CharT,_Alloc>;
-
- protected:
- typedef _Rope_base<_CharT,_Alloc> _Base;
- typedef typename _Base::allocator_type allocator_type;
-# ifdef __STL_USE_NAMESPACES
- using _Base::_M_tree_ptr;
-# endif
- typedef __GC_CONST _CharT* _Cstrptr;
-# ifdef __STL_SGI_THREADS
- static _Cstrptr _S_atomic_swap(_Cstrptr* __p, _Cstrptr __q) {
-# if __mips < 3 || !(defined (_ABIN32) || defined(_ABI64))
- return (_Cstrptr) test_and_set((unsigned long*)__p,
- (unsigned long)__q);
-# else
- return (_Cstrptr) __test_and_set((unsigned long*)__p,
- (unsigned long)__q);
-# endif
- }
-# elif defined(__STL_WIN32THREADS)
- static _Cstrptr _S_atomic_swap(_Cstrptr* __p, _Cstrptr __q) {
- return (_Cstrptr) InterlockedExchange(
- (LPLONG)__p, (LONG)__q);
- }
-# elif defined(__STL_PTHREADS)
- // This should be portable, but performance is expected
- // to be quite awful. This really needs platform specific
- // code.
- static pthread_mutex_t _S_swap_lock;
- static _Cstrptr _S_atomic_swap(_Cstrptr* __p, _Cstrptr __q) {
- pthread_mutex_lock(&_S_swap_lock);
- _Cstrptr __result = *__p;
- *__p = __q;
- pthread_mutex_unlock(&_S_swap_lock);
- return __result;
- }
-# else
- static _Cstrptr _S_atomic_swap(_Cstrptr* __p, _Cstrptr __q) {
- _Cstrptr __result = *__p;
- *__p = __q;
- return __result;
- }
-# endif
-
- static _CharT _S_empty_c_str[1];
-
- static bool _S_is0(_CharT __c) { return __c == _S_eos((_CharT*)0); }
- enum { _S_copy_max = 23 };
- // For strings shorter than _S_copy_max, we copy to
- // concatenate.
-
- typedef _Rope_RopeRep<_CharT,_Alloc> _RopeRep;
- typedef _Rope_RopeConcatenation<_CharT,_Alloc> _RopeConcatenation;
- typedef _Rope_RopeLeaf<_CharT,_Alloc> _RopeLeaf;
- typedef _Rope_RopeFunction<_CharT,_Alloc> _RopeFunction;
- typedef _Rope_RopeSubstring<_CharT,_Alloc> _RopeSubstring;
-
- // Retrieve a character at the indicated position.
- static _CharT _S_fetch(_RopeRep* __r, size_type __pos);
-
-# ifndef __GC
- // Obtain a pointer to the character at the indicated position.
- // The pointer can be used to change the character.
- // If such a pointer cannot be produced, as is frequently the
- // case, 0 is returned instead.
- // (Returns nonzero only if all nodes in the path have a refcount
- // of 1.)
- static _CharT* _S_fetch_ptr(_RopeRep* __r, size_type __pos);
-# endif
-
- static bool _S_apply_to_pieces(
- // should be template parameter
- _Rope_char_consumer<_CharT>& __c,
- const _RopeRep* __r,
- size_t __begin, size_t __end);
- // begin and end are assumed to be in range.
-
-# ifndef __GC
- static void _S_unref(_RopeRep* __t)
- {
- _RopeRep::_S_unref(__t);
- }
- static void _S_ref(_RopeRep* __t)
- {
- _RopeRep::_S_ref(__t);
- }
-# else /* __GC */
- static void _S_unref(_RopeRep*) {}
- static void _S_ref(_RopeRep*) {}
-# endif
-
-
-# ifdef __GC
- typedef _Rope_RopeRep<_CharT,_Alloc>* _Self_destruct_ptr;
-# else
- typedef _Rope_self_destruct_ptr<_CharT,_Alloc> _Self_destruct_ptr;
-# endif
-
- // _Result is counted in refcount.
- static _RopeRep* _S_substring(_RopeRep* __base,
- size_t __start, size_t __endp1);
-
- static _RopeRep* _S_concat_char_iter(_RopeRep* __r,
- const _CharT* __iter, size_t __slen);
- // Concatenate rope and char ptr, copying __s.
- // Should really take an arbitrary iterator.
- // Result is counted in refcount.
- static _RopeRep* _S_destr_concat_char_iter(_RopeRep* __r,
- const _CharT* __iter, size_t __slen)
- // As above, but one reference to __r is about to be
- // destroyed. Thus the pieces may be recycled if all
- // relevent reference counts are 1.
-# ifdef __GC
- // We can't really do anything since refcounts are unavailable.
- { return _S_concat_char_iter(__r, __iter, __slen); }
-# else
- ;
-# endif
-
- static _RopeRep* _S_concat(_RopeRep* __left, _RopeRep* __right);
- // General concatenation on _RopeRep. _Result
- // has refcount of 1. Adjusts argument refcounts.
-
- public:
- void apply_to_pieces( size_t __begin, size_t __end,
- _Rope_char_consumer<_CharT>& __c) const {
- _S_apply_to_pieces(__c, _M_tree_ptr, __begin, __end);
- }
-
-
- protected:
-
- static size_t _S_rounded_up_size(size_t __n) {
- return _RopeLeaf::_S_rounded_up_size(__n);
- }
-
- static size_t _S_allocated_capacity(size_t __n) {
- if (_S_is_basic_char_type((_CharT*)0)) {
- return _S_rounded_up_size(__n) - 1;
- } else {
- return _S_rounded_up_size(__n);
- }
- }
-
- // Allocate and construct a RopeLeaf using the supplied allocator
- // Takes ownership of s instead of copying.
- static _RopeLeaf* _S_new_RopeLeaf(__GC_CONST _CharT *__s,
- size_t __size, allocator_type __a)
- {
-# ifdef __STL_USE_STD_ALLOCATORS
- _RopeLeaf* __space = _LAllocator(__a).allocate(1);
-# else
- _RopeLeaf* __space = _L_allocate(1);
-# endif
- return new(__space) _RopeLeaf(__s, __size, __a);
- }
-
- static _RopeConcatenation* _S_new_RopeConcatenation(
- _RopeRep* __left, _RopeRep* __right,
- allocator_type __a)
- {
-# ifdef __STL_USE_STD_ALLOCATORS
- _RopeConcatenation* __space = _CAllocator(__a).allocate(1);
-# else
- _RopeConcatenation* __space = _C_allocate(1);
-# endif
- return new(__space) _RopeConcatenation(__left, __right, __a);
- }
-
- static _RopeFunction* _S_new_RopeFunction(char_producer<_CharT>* __f,
- size_t __size, bool __d, allocator_type __a)
- {
-# ifdef __STL_USE_STD_ALLOCATORS
- _RopeFunction* __space = _FAllocator(__a).allocate(1);
-# else
- _RopeFunction* __space = _F_allocate(1);
-# endif
- return new(__space) _RopeFunction(__f, __size, __d, __a);
- }
-
- static _RopeSubstring* _S_new_RopeSubstring(
- _Rope_RopeRep<_CharT,_Alloc>* __b, size_t __s,
- size_t __l, allocator_type __a)
- {
-# ifdef __STL_USE_STD_ALLOCATORS
- _RopeSubstring* __space = _SAllocator(__a).allocate(1);
-# else
- _RopeSubstring* __space = _S_allocate(1);
-# endif
- return new(__space) _RopeSubstring(__b, __s, __l, __a);
- }
-
-# ifdef __STL_USE_STD_ALLOCATORS
- static
- _RopeLeaf* _S_RopeLeaf_from_unowned_char_ptr(const _CharT *__s,
- size_t __size, allocator_type __a)
-# define __STL_ROPE_FROM_UNOWNED_CHAR_PTR(__s, __size, __a) \
- _S_RopeLeaf_from_unowned_char_ptr(__s, __size, __a)
-# else
- static
- _RopeLeaf* _S_RopeLeaf_from_unowned_char_ptr2(const _CharT* __s,
- size_t __size)
-# define __STL_ROPE_FROM_UNOWNED_CHAR_PTR(__s, __size, __a) \
- _S_RopeLeaf_from_unowned_char_ptr2(__s, __size)
-# endif
- {
- if (0 == __size) return 0;
-# ifdef __STL_USE_STD_ALLOCATORS
- _CharT* __buf = __a.allocate(_S_rounded_up_size(__size));
-# else
- _CharT* __buf = _Data_allocate(_S_rounded_up_size(__size));
- allocator_type __a = allocator_type();
-# endif
-
- uninitialized_copy_n(__s, __size, __buf);
- _S_cond_store_eos(__buf[__size]);
- __STL_TRY {
- return _S_new_RopeLeaf(__buf, __size, __a);
- }
- __STL_UNWIND(_RopeRep::__STL_FREE_STRING(__buf, __size, __a))
- }
-
-
- // Concatenation of nonempty strings.
- // Always builds a concatenation node.
- // Rebalances if the result is too deep.
- // Result has refcount 1.
- // Does not increment left and right ref counts even though
- // they are referenced.
- static _RopeRep*
- _S_tree_concat(_RopeRep* __left, _RopeRep* __right);
-
- // Concatenation helper functions
- static _RopeLeaf*
- _S_leaf_concat_char_iter(_RopeLeaf* __r,
- const _CharT* __iter, size_t __slen);
- // Concatenate by copying leaf.
- // should take an arbitrary iterator
- // result has refcount 1.
-# ifndef __GC
- static _RopeLeaf* _S_destr_leaf_concat_char_iter
- (_RopeLeaf* __r, const _CharT* __iter, size_t __slen);
- // A version that potentially clobbers __r if __r->_M_refcount == 1.
-# endif
-
- // A helper function for exponentiating strings.
- // This uses a nonstandard refcount convention.
- // The result has refcount 0.
- struct _Concat_fn
- : public binary_function<rope<_CharT,_Alloc>,
- rope<_CharT,_Alloc>,
- rope<_CharT,_Alloc> > {
- rope operator() (const rope& __x, const rope& __y) {
- return __x + __y;
- }
- };
-
- // Needed by the call to "power" used to build ropes
- // consisting of n copies of a character.
- friend rope identity_element(_Concat_fn)
- { return rope<_CharT,_Alloc>(); }
-
- static size_t _S_char_ptr_len(const _CharT* __s);
- // slightly generalized strlen
-
- rope(_RopeRep* __t, const allocator_type& __a = allocator_type())
- : _Base(__t,__a) { }
-
-
- // Copy __r to the _CharT buffer.
- // Returns __buffer + __r->_M_size.
- // Assumes that buffer is uninitialized.
- static _CharT* _S_flatten(_RopeRep* __r, _CharT* __buffer);
-
- // Again, with explicit starting position and length.
- // Assumes that buffer is uninitialized.
- static _CharT* _S_flatten(_RopeRep* __r,
- size_t __start, size_t __len,
- _CharT* __buffer);
-
- static const unsigned long
- _S_min_len[_RopeRep::_S_max_rope_depth + 1];
-
- static bool _S_is_balanced(_RopeRep* __r)
- { return (__r->_M_size >= _S_min_len[__r->_M_depth]); }
-
- static bool _S_is_almost_balanced(_RopeRep* __r)
- { return (__r->_M_depth == 0 ||
- __r->_M_size >= _S_min_len[__r->_M_depth - 1]); }
-
- static bool _S_is_roughly_balanced(_RopeRep* __r)
- { return (__r->_M_depth <= 1 ||
- __r->_M_size >= _S_min_len[__r->_M_depth - 2]); }
-
- // Assumes the result is not empty.
- static _RopeRep* _S_concat_and_set_balanced(_RopeRep* __left,
- _RopeRep* __right)
- {
- _RopeRep* __result = _S_concat(__left, __right);
- if (_S_is_balanced(__result)) __result->_M_is_balanced = true;
- return __result;
- }
-
- // The basic rebalancing operation. Logically copies the
- // rope. The result has refcount of 1. The client will
- // usually decrement the reference count of __r.
- // The result is within height 2 of balanced by the above
- // definition.
- static _RopeRep* _S_balance(_RopeRep* __r);
-
- // Add all unbalanced subtrees to the forest of balanceed trees.
- // Used only by balance.
- static void _S_add_to_forest(_RopeRep*__r, _RopeRep** __forest);
-
- // Add __r to forest, assuming __r is already balanced.
- static void _S_add_leaf_to_forest(_RopeRep* __r, _RopeRep** __forest);
-
- // Print to stdout, exposing structure
- static void _S_dump(_RopeRep* __r, int __indent = 0);
-
- // Return -1, 0, or 1 if __x < __y, __x == __y, or __x > __y resp.
- static int _S_compare(const _RopeRep* __x, const _RopeRep* __y);
-
- public:
- bool empty() const { return 0 == _M_tree_ptr; }
-
- // Comparison member function. This is public only for those
- // clients that need a ternary comparison. Others
- // should use the comparison operators below.
- int compare(const rope& __y) const {
- return _S_compare(_M_tree_ptr, __y._M_tree_ptr);
- }
-
- rope(const _CharT* __s, const allocator_type& __a = allocator_type())
- : _Base(__STL_ROPE_FROM_UNOWNED_CHAR_PTR(__s, _S_char_ptr_len(__s),
- __a),__a)
- { }
-
- rope(const _CharT* __s, size_t __len,
- const allocator_type& __a = allocator_type())
- : _Base(__STL_ROPE_FROM_UNOWNED_CHAR_PTR(__s, __len, __a), __a)
- { }
-
- // Should perhaps be templatized with respect to the iterator type
- // and use Sequence_buffer. (It should perhaps use sequence_buffer
- // even now.)
- rope(const _CharT *__s, const _CharT *__e,
- const allocator_type& __a = allocator_type())
- : _Base(__STL_ROPE_FROM_UNOWNED_CHAR_PTR(__s, __e - __s, __a), __a)
- { }
-
- rope(const const_iterator& __s, const const_iterator& __e,
- const allocator_type& __a = allocator_type())
- : _Base(_S_substring(__s._M_root, __s._M_current_pos,
- __e._M_current_pos), __a)
- { }
-
- rope(const iterator& __s, const iterator& __e,
- const allocator_type& __a = allocator_type())
- : _Base(_S_substring(__s._M_root, __s._M_current_pos,
- __e._M_current_pos), __a)
- { }
-
- rope(_CharT __c, const allocator_type& __a = allocator_type())
- : _Base(__a)
- {
- _CharT* __buf = _Data_allocate(_S_rounded_up_size(1));
-
- construct(__buf, __c);
- __STL_TRY {
- _M_tree_ptr = _S_new_RopeLeaf(__buf, 1, __a);
- }
- __STL_UNWIND(_RopeRep::__STL_FREE_STRING(__buf, 1, __a))
- }
-
- rope(size_t __n, _CharT __c,
- const allocator_type& __a = allocator_type());
-
- rope(const allocator_type& __a = allocator_type())
- : _Base(0, __a) {}
-
- // Construct a rope from a function that can compute its members
- rope(char_producer<_CharT> *__fn, size_t __len, bool __delete_fn,
- const allocator_type& __a = allocator_type())
- : _Base(__a)
- {
- _M_tree_ptr = (0 == __len) ?
- 0 : _S_new_RopeFunction(__fn, __len, __delete_fn, __a);
- }
-
- rope(const rope& __x, const allocator_type& __a = allocator_type())
- : _Base(__x._M_tree_ptr, __a)
- {
- _S_ref(_M_tree_ptr);
- }
-
- ~rope()
- {
- _S_unref(_M_tree_ptr);
- }
-
- rope& operator=(const rope& __x)
- {
- _RopeRep* __old = _M_tree_ptr;
-# ifdef __STL_USE_STD_ALLOCATORS
- __stl_assert(get_allocator() == __x.get_allocator());
-# endif
- _M_tree_ptr = __x._M_tree_ptr;
- _S_ref(_M_tree_ptr);
- _S_unref(__old);
- return(*this);
- }
-
- void push_back(_CharT __x)
- {
- _RopeRep* __old = _M_tree_ptr;
- _M_tree_ptr = _S_concat_char_iter(_M_tree_ptr, &__x, 1);
- _S_unref(__old);
- }
-
- void pop_back()
- {
- _RopeRep* __old = _M_tree_ptr;
- _M_tree_ptr =
- _S_substring(_M_tree_ptr, 0, _M_tree_ptr->_M_size - 1);
- _S_unref(__old);
- }
-
- _CharT back() const
- {
- return _S_fetch(_M_tree_ptr, _M_tree_ptr->_M_size - 1);
- }
-
- void push_front(_CharT __x)
- {
- _RopeRep* __old = _M_tree_ptr;
- _RopeRep* __left =
- __STL_ROPE_FROM_UNOWNED_CHAR_PTR(&__x, 1, get_allocator());
- __STL_TRY {
- _M_tree_ptr = _S_concat(__left, _M_tree_ptr);
- _S_unref(__old);
- _S_unref(__left);
- }
- __STL_UNWIND(_S_unref(__left))
- }
-
- void pop_front()
- {
- _RopeRep* __old = _M_tree_ptr;
- _M_tree_ptr = _S_substring(_M_tree_ptr, 1, _M_tree_ptr->_M_size);
- _S_unref(__old);
- }
-
- _CharT front() const
- {
- return _S_fetch(_M_tree_ptr, 0);
- }
-
- void balance()
- {
- _RopeRep* __old = _M_tree_ptr;
- _M_tree_ptr = _S_balance(_M_tree_ptr);
- _S_unref(__old);
- }
-
- void copy(_CharT* __buffer) const {
- destroy(__buffer, __buffer + size());
- _S_flatten(_M_tree_ptr, __buffer);
- }
-
- // This is the copy function from the standard, but
- // with the arguments reordered to make it consistent with the
- // rest of the interface.
- // Note that this guaranteed not to compile if the draft standard
- // order is assumed.
- size_type copy(size_type __pos, size_type __n, _CharT* __buffer) const
- {
- size_t __size = size();
- size_t __len = (__pos + __n > __size? __size - __pos : __n);
-
- destroy(__buffer, __buffer + __len);
- _S_flatten(_M_tree_ptr, __pos, __len, __buffer);
- return __len;
- }
-
- // Print to stdout, exposing structure. May be useful for
- // performance debugging.
- void dump() {
- _S_dump(_M_tree_ptr);
- }
-
- // Convert to 0 terminated string in new allocated memory.
- // Embedded 0s in the input do not terminate the copy.
- const _CharT* c_str() const;
-
- // As above, but lso use the flattened representation as the
- // the new rope representation.
- const _CharT* replace_with_c_str();
-
- // Reclaim memory for the c_str generated flattened string.
- // Intentionally undocumented, since it's hard to say when this
- // is safe for multiple threads.
- void delete_c_str () {
- if (0 == _M_tree_ptr) return;
- if (_RopeRep::_S_leaf == _M_tree_ptr->_M_tag &&
- ((_RopeLeaf*)_M_tree_ptr)->_M_data ==
- _M_tree_ptr->_M_c_string) {
- // Representation shared
- return;
- }
-# ifndef __GC
- _M_tree_ptr->_M_free_c_string();
-# endif
- _M_tree_ptr->_M_c_string = 0;
- }
-
- _CharT operator[] (size_type __pos) const {
- return _S_fetch(_M_tree_ptr, __pos);
- }
-
- _CharT at(size_type __pos) const {
- // if (__pos >= size()) throw out_of_range; // XXX
- return (*this)[__pos];
- }
-
- const_iterator begin() const {
- return(const_iterator(_M_tree_ptr, 0));
- }
-
- // An easy way to get a const iterator from a non-const container.
- const_iterator const_begin() const {
- return(const_iterator(_M_tree_ptr, 0));
- }
-
- const_iterator end() const {
- return(const_iterator(_M_tree_ptr, size()));
- }
-
- const_iterator const_end() const {
- return(const_iterator(_M_tree_ptr, size()));
- }
-
- size_type size() const {
- return(0 == _M_tree_ptr? 0 : _M_tree_ptr->_M_size);
- }
-
- size_type length() const {
- return size();
- }
-
- size_type max_size() const {
- return _S_min_len[_RopeRep::_S_max_rope_depth-1] - 1;
- // Guarantees that the result can be sufficirntly
- // balanced. Longer ropes will probably still work,
- // but it's harder to make guarantees.
- }
-
-# ifdef __STL_CLASS_PARTIAL_SPECIALIZATION
- typedef reverse_iterator<const_iterator> const_reverse_iterator;
-# else /* __STL_CLASS_PARTIAL_SPECIALIZATION */
- typedef reverse_iterator<const_iterator, value_type, const_reference,
- difference_type> const_reverse_iterator;
-# endif /* __STL_CLASS_PARTIAL_SPECIALIZATION */
-
- const_reverse_iterator rbegin() const {
- return const_reverse_iterator(end());
- }
-
- const_reverse_iterator const_rbegin() const {
- return const_reverse_iterator(end());
- }
-
- const_reverse_iterator rend() const {
- return const_reverse_iterator(begin());
- }
-
- const_reverse_iterator const_rend() const {
- return const_reverse_iterator(begin());
- }
-
- friend rope<_CharT,_Alloc>
- operator+ __STL_NULL_TMPL_ARGS (const rope<_CharT,_Alloc>& __left,
- const rope<_CharT,_Alloc>& __right);
-
- friend rope<_CharT,_Alloc>
- operator+ __STL_NULL_TMPL_ARGS (const rope<_CharT,_Alloc>& __left,
- const _CharT* __right);
-
- friend rope<_CharT,_Alloc>
- operator+ __STL_NULL_TMPL_ARGS (const rope<_CharT,_Alloc>& __left,
- _CharT __right);
-
- // The symmetric cases are intentionally omitted, since they're presumed
- // to be less common, and we don't handle them as well.
-
- // The following should really be templatized.
- // The first argument should be an input iterator or
- // forward iterator with value_type _CharT.
- rope& append(const _CharT* __iter, size_t __n) {
- _RopeRep* __result =
- _S_destr_concat_char_iter(_M_tree_ptr, __iter, __n);
- _S_unref(_M_tree_ptr);
- _M_tree_ptr = __result;
- return *this;
- }
-
- rope& append(const _CharT* __c_string) {
- size_t __len = _S_char_ptr_len(__c_string);
- append(__c_string, __len);
- return(*this);
- }
-
- rope& append(const _CharT* __s, const _CharT* __e) {
- _RopeRep* __result =
- _S_destr_concat_char_iter(_M_tree_ptr, __s, __e - __s);
- _S_unref(_M_tree_ptr);
- _M_tree_ptr = __result;
- return *this;
- }
-
- rope& append(const_iterator __s, const_iterator __e) {
- __stl_assert(__s._M_root == __e._M_root);
-# ifdef __STL_USE_STD_ALLOCATORS
- __stl_assert(get_allocator() == __s._M_root->get_allocator());
-# endif
- _Self_destruct_ptr __appendee(_S_substring(
- __s._M_root, __s._M_current_pos, __e._M_current_pos));
- _RopeRep* __result =
- _S_concat(_M_tree_ptr, (_RopeRep*)__appendee);
- _S_unref(_M_tree_ptr);
- _M_tree_ptr = __result;
- return *this;
- }
-
- rope& append(_CharT __c) {
- _RopeRep* __result =
- _S_destr_concat_char_iter(_M_tree_ptr, &__c, 1);
- _S_unref(_M_tree_ptr);
- _M_tree_ptr = __result;
- return *this;
- }
-
- rope& append() { return append(_CharT()); } // XXX why?
-
- rope& append(const rope& __y) {
-# ifdef __STL_USE_STD_ALLOCATORS
- __stl_assert(__y.get_allocator() == get_allocator());
-# endif
- _RopeRep* __result = _S_concat(_M_tree_ptr, __y._M_tree_ptr);
- _S_unref(_M_tree_ptr);
- _M_tree_ptr = __result;
- return *this;
- }
-
- rope& append(size_t __n, _CharT __c) {
- rope<_CharT,_Alloc> __last(__n, __c);
- return append(__last);
- }
-
- void swap(rope& __b) {
-# ifdef __STL_USE_STD_ALLOCATORS
- __stl_assert(get_allocator() == __b.get_allocator());
-# endif
- _RopeRep* __tmp = _M_tree_ptr;
- _M_tree_ptr = __b._M_tree_ptr;
- __b._M_tree_ptr = __tmp;
- }
-
-
- protected:
- // Result is included in refcount.
- static _RopeRep* replace(_RopeRep* __old, size_t __pos1,
- size_t __pos2, _RopeRep* __r) {
- if (0 == __old) { _S_ref(__r); return __r; }
- _Self_destruct_ptr __left(
- _S_substring(__old, 0, __pos1));
- _Self_destruct_ptr __right(
- _S_substring(__old, __pos2, __old->_M_size));
- _RopeRep* __result;
-
-# ifdef __STL_USE_STD_ALLOCATORS
- __stl_assert(__old->get_allocator() == __r->get_allocator());
-# endif
- if (0 == __r) {
- __result = _S_concat(__left, __right);
- } else {
- _Self_destruct_ptr __left_result(_S_concat(__left, __r));
- __result = _S_concat(__left_result, __right);
- }
- return __result;
- }
-
- public:
- void insert(size_t __p, const rope& __r) {
- _RopeRep* __result =
- replace(_M_tree_ptr, __p, __p, __r._M_tree_ptr);
-# ifdef __STL_USE_STD_ALLOCATORS
- __stl_assert(get_allocator() == __r.get_allocator());
-# endif
- _S_unref(_M_tree_ptr);
- _M_tree_ptr = __result;
- }
-
- void insert(size_t __p, size_t __n, _CharT __c) {
- rope<_CharT,_Alloc> __r(__n,__c);
- insert(__p, __r);
- }
-
- void insert(size_t __p, const _CharT* __i, size_t __n) {
- _Self_destruct_ptr __left(_S_substring(_M_tree_ptr, 0, __p));
- _Self_destruct_ptr __right(_S_substring(_M_tree_ptr, __p, size()));
- _Self_destruct_ptr __left_result(
- _S_concat_char_iter(__left, __i, __n));
- _RopeRep* __result = _S_concat(__left_result, __right);
- _S_unref(_M_tree_ptr);
- _M_tree_ptr = __result;
- }
-
- void insert(size_t __p, const _CharT* __c_string) {
- insert(__p, __c_string, _S_char_ptr_len(__c_string));
- }
-
- void insert(size_t __p, _CharT __c) {
- insert(__p, &__c, 1);
- }
-
- void insert(size_t __p) {
- _CharT __c = _CharT();
- insert(__p, &__c, 1);
- }
-
- void insert(size_t __p, const _CharT* __i, const _CharT* __j) {
- rope __r(__i, __j);
- insert(__p, __r);
- }
-
- void insert(size_t __p, const const_iterator& __i,
- const const_iterator& __j) {
- rope __r(__i, __j);
- insert(__p, __r);
- }
-
- void insert(size_t __p, const iterator& __i,
- const iterator& __j) {
- rope __r(__i, __j);
- insert(__p, __r);
- }
-
- // (position, length) versions of replace operations:
-
- void replace(size_t __p, size_t __n, const rope& __r) {
- _RopeRep* __result =
- replace(_M_tree_ptr, __p, __p + __n, __r._M_tree_ptr);
- _S_unref(_M_tree_ptr);
- _M_tree_ptr = __result;
- }
-
- void replace(size_t __p, size_t __n,
- const _CharT* __i, size_t __i_len) {
- rope __r(__i, __i_len);
- replace(__p, __n, __r);
- }
-
- void replace(size_t __p, size_t __n, _CharT __c) {
- rope __r(__c);
- replace(__p, __n, __r);
- }
-
- void replace(size_t __p, size_t __n, const _CharT* __c_string) {
- rope __r(__c_string);
- replace(__p, __n, __r);
- }
-
- void replace(size_t __p, size_t __n,
- const _CharT* __i, const _CharT* __j) {
- rope __r(__i, __j);
- replace(__p, __n, __r);
- }
-
- void replace(size_t __p, size_t __n,
- const const_iterator& __i, const const_iterator& __j) {
- rope __r(__i, __j);
- replace(__p, __n, __r);
- }
-
- void replace(size_t __p, size_t __n,
- const iterator& __i, const iterator& __j) {
- rope __r(__i, __j);
- replace(__p, __n, __r);
- }
-
- // Single character variants:
- void replace(size_t __p, _CharT __c) {
- iterator __i(this, __p);
- *__i = __c;
- }
-
- void replace(size_t __p, const rope& __r) {
- replace(__p, 1, __r);
- }
-
- void replace(size_t __p, const _CharT* __i, size_t __i_len) {
- replace(__p, 1, __i, __i_len);
- }
-
- void replace(size_t __p, const _CharT* __c_string) {
- replace(__p, 1, __c_string);
- }
-
- void replace(size_t __p, const _CharT* __i, const _CharT* __j) {
- replace(__p, 1, __i, __j);
- }
-
- void replace(size_t __p, const const_iterator& __i,
- const const_iterator& __j) {
- replace(__p, 1, __i, __j);
- }
-
- void replace(size_t __p, const iterator& __i,
- const iterator& __j) {
- replace(__p, 1, __i, __j);
- }
-
- // Erase, (position, size) variant.
- void erase(size_t __p, size_t __n) {
- _RopeRep* __result = replace(_M_tree_ptr, __p, __p + __n, 0);
- _S_unref(_M_tree_ptr);
- _M_tree_ptr = __result;
- }
-
- // Erase, single character
- void erase(size_t __p) {
- erase(__p, __p + 1);
- }
-
- // Insert, iterator variants.
- iterator insert(const iterator& __p, const rope& __r)
- { insert(__p.index(), __r); return __p; }
- iterator insert(const iterator& __p, size_t __n, _CharT __c)
- { insert(__p.index(), __n, __c); return __p; }
- iterator insert(const iterator& __p, _CharT __c)
- { insert(__p.index(), __c); return __p; }
- iterator insert(const iterator& __p )
- { insert(__p.index()); return __p; }
- iterator insert(const iterator& __p, const _CharT* c_string)
- { insert(__p.index(), c_string); return __p; }
- iterator insert(const iterator& __p, const _CharT* __i, size_t __n)
- { insert(__p.index(), __i, __n); return __p; }
- iterator insert(const iterator& __p, const _CharT* __i,
- const _CharT* __j)
- { insert(__p.index(), __i, __j); return __p; }
- iterator insert(const iterator& __p,
- const const_iterator& __i, const const_iterator& __j)
- { insert(__p.index(), __i, __j); return __p; }
- iterator insert(const iterator& __p,
- const iterator& __i, const iterator& __j)
- { insert(__p.index(), __i, __j); return __p; }
-
- // Replace, range variants.
- void replace(const iterator& __p, const iterator& __q,
- const rope& __r)
- { replace(__p.index(), __q.index() - __p.index(), __r); }
- void replace(const iterator& __p, const iterator& __q, _CharT __c)
- { replace(__p.index(), __q.index() - __p.index(), __c); }
- void replace(const iterator& __p, const iterator& __q,
- const _CharT* __c_string)
- { replace(__p.index(), __q.index() - __p.index(), __c_string); }
- void replace(const iterator& __p, const iterator& __q,
- const _CharT* __i, size_t __n)
- { replace(__p.index(), __q.index() - __p.index(), __i, __n); }
- void replace(const iterator& __p, const iterator& __q,
- const _CharT* __i, const _CharT* __j)
- { replace(__p.index(), __q.index() - __p.index(), __i, __j); }
- void replace(const iterator& __p, const iterator& __q,
- const const_iterator& __i, const const_iterator& __j)
- { replace(__p.index(), __q.index() - __p.index(), __i, __j); }
- void replace(const iterator& __p, const iterator& __q,
- const iterator& __i, const iterator& __j)
- { replace(__p.index(), __q.index() - __p.index(), __i, __j); }
-
- // Replace, iterator variants.
- void replace(const iterator& __p, const rope& __r)
- { replace(__p.index(), __r); }
- void replace(const iterator& __p, _CharT __c)
- { replace(__p.index(), __c); }
- void replace(const iterator& __p, const _CharT* __c_string)
- { replace(__p.index(), __c_string); }
- void replace(const iterator& __p, const _CharT* __i, size_t __n)
- { replace(__p.index(), __i, __n); }
- void replace(const iterator& __p, const _CharT* __i, const _CharT* __j)
- { replace(__p.index(), __i, __j); }
- void replace(const iterator& __p, const_iterator __i,
- const_iterator __j)
- { replace(__p.index(), __i, __j); }
- void replace(const iterator& __p, iterator __i, iterator __j)
- { replace(__p.index(), __i, __j); }
-
- // Iterator and range variants of erase
- iterator erase(const iterator& __p, const iterator& __q) {
- size_t __p_index = __p.index();
- erase(__p_index, __q.index() - __p_index);
- return iterator(this, __p_index);
- }
- iterator erase(const iterator& __p) {
- size_t __p_index = __p.index();
- erase(__p_index, 1);
- return iterator(this, __p_index);
- }
-
- rope substr(size_t __start, size_t __len = 1) const {
- return rope<_CharT,_Alloc>(
- _S_substring(_M_tree_ptr, __start, __start + __len));
- }
-
- rope substr(iterator __start, iterator __end) const {
- return rope<_CharT,_Alloc>(
- _S_substring(_M_tree_ptr, __start.index(), __end.index()));
- }
-
- rope substr(iterator __start) const {
- size_t __pos = __start.index();
- return rope<_CharT,_Alloc>(
- _S_substring(_M_tree_ptr, __pos, __pos + 1));
- }
-
- rope substr(const_iterator __start, const_iterator __end) const {
- // This might eventually take advantage of the cache in the
- // iterator.
- return rope<_CharT,_Alloc>(
- _S_substring(_M_tree_ptr, __start.index(), __end.index()));
- }
-
- rope<_CharT,_Alloc> substr(const_iterator __start) {
- size_t __pos = __start.index();
- return rope<_CharT,_Alloc>(
- _S_substring(_M_tree_ptr, __pos, __pos + 1));
- }
-
- static const size_type npos;
-
- size_type find(_CharT __c, size_type __pos = 0) const;
- size_type find(_CharT* __s, size_type __pos = 0) const {
- size_type __result_pos;
- const_iterator __result = search(const_begin() + __pos, const_end(),
- __s, __s + _S_char_ptr_len(__s));
- __result_pos = __result.index();
-# ifndef __STL_OLD_ROPE_SEMANTICS
- if (__result_pos == size()) __result_pos = npos;
-# endif
- return __result_pos;
- }
-
- iterator mutable_begin() {
- return(iterator(this, 0));
- }
-
- iterator mutable_end() {
- return(iterator(this, size()));
- }
-
-# ifdef __STL_CLASS_PARTIAL_SPECIALIZATION
- typedef reverse_iterator<iterator> reverse_iterator;
-# else /* __STL_CLASS_PARTIAL_SPECIALIZATION */
- typedef reverse_iterator<iterator, value_type, reference,
- difference_type> reverse_iterator;
-# endif /* __STL_CLASS_PARTIAL_SPECIALIZATION */
-
- reverse_iterator mutable_rbegin() {
- return reverse_iterator(mutable_end());
- }
-
- reverse_iterator mutable_rend() {
- return reverse_iterator(mutable_begin());
- }
-
- reference mutable_reference_at(size_type __pos) {
- return reference(this, __pos);
- }
-
-# ifdef __STD_STUFF
- reference operator[] (size_type __pos) {
- return _char_ref_proxy(this, __pos);
- }
-
- reference at(size_type __pos) {
- // if (__pos >= size()) throw out_of_range; // XXX
- return (*this)[__pos];
- }
-
- void resize(size_type __n, _CharT __c) {}
- void resize(size_type __n) {}
- void reserve(size_type __res_arg = 0) {}
- size_type capacity() const {
- return max_size();
- }
-
- // Stuff below this line is dangerous because it's error prone.
- // I would really like to get rid of it.
- // copy function with funny arg ordering.
- size_type copy(_CharT* __buffer, size_type __n,
- size_type __pos = 0) const {
- return copy(__pos, __n, __buffer);
- }
-
- iterator end() { return mutable_end(); }
-
- iterator begin() { return mutable_begin(); }
-
- reverse_iterator rend() { return mutable_rend(); }
-
- reverse_iterator rbegin() { return mutable_rbegin(); }
-
-# else
-
- const_iterator end() { return const_end(); }
-
- const_iterator begin() { return const_begin(); }
-
- const_reverse_iterator rend() { return const_rend(); }
-
- const_reverse_iterator rbegin() { return const_rbegin(); }
-
-# endif
-
-};
-
-template <class _CharT, class _Alloc>
-const rope<_CharT, _Alloc>::size_type rope<_CharT, _Alloc>::npos =
- (size_type)(-1);
-
-template <class _CharT, class _Alloc>
-inline bool operator== (const _Rope_const_iterator<_CharT,_Alloc>& __x,
- const _Rope_const_iterator<_CharT,_Alloc>& __y) {
- return (__x._M_current_pos == __y._M_current_pos &&
- __x._M_root == __y._M_root);
-}
-
-template <class _CharT, class _Alloc>
-inline bool operator< (const _Rope_const_iterator<_CharT,_Alloc>& __x,
- const _Rope_const_iterator<_CharT,_Alloc>& __y) {
- return (__x._M_current_pos < __y._M_current_pos);
-}
-
-template <class _CharT, class _Alloc>
-inline ptrdiff_t operator-(const _Rope_const_iterator<_CharT,_Alloc>& __x,
- const _Rope_const_iterator<_CharT,_Alloc>& __y) {
- return (ptrdiff_t)__x._M_current_pos - (ptrdiff_t)__y._M_current_pos;
-}
-
-template <class _CharT, class _Alloc>
-inline _Rope_const_iterator<_CharT,_Alloc>
-operator-(const _Rope_const_iterator<_CharT,_Alloc>& __x, ptrdiff_t __n) {
- return _Rope_const_iterator<_CharT,_Alloc>(
- __x._M_root, __x._M_current_pos - __n);
-}
-
-template <class _CharT, class _Alloc>
-inline _Rope_const_iterator<_CharT,_Alloc>
-operator+(const _Rope_const_iterator<_CharT,_Alloc>& __x, ptrdiff_t __n) {
- return _Rope_const_iterator<_CharT,_Alloc>(
- __x._M_root, __x._M_current_pos + __n);
-}
-
-template <class _CharT, class _Alloc>
-inline _Rope_const_iterator<_CharT,_Alloc>
-operator+(ptrdiff_t __n, const _Rope_const_iterator<_CharT,_Alloc>& __x) {
- return _Rope_const_iterator<_CharT,_Alloc>(
- __x._M_root, __x._M_current_pos + __n);
-}
-
-template <class _CharT, class _Alloc>
-inline bool operator== (const _Rope_iterator<_CharT,_Alloc>& __x,
- const _Rope_iterator<_CharT,_Alloc>& __y) {
- return (__x._M_current_pos == __y._M_current_pos &&
- __x._M_root_rope == __y._M_root_rope);
-}
-
-template <class _CharT, class _Alloc>
-inline bool operator< (const _Rope_iterator<_CharT,_Alloc>& __x,
- const _Rope_iterator<_CharT,_Alloc>& __y) {
- return (__x._M_current_pos < __y._M_current_pos);
-}
-
-template <class _CharT, class _Alloc>
-inline ptrdiff_t operator-(const _Rope_iterator<_CharT,_Alloc>& __x,
- const _Rope_iterator<_CharT,_Alloc>& __y) {
- return (ptrdiff_t)__x._M_current_pos - (ptrdiff_t)__y._M_current_pos;
-}
-
-template <class _CharT, class _Alloc>
-inline _Rope_iterator<_CharT,_Alloc>
-operator-(const _Rope_iterator<_CharT,_Alloc>& __x,
- ptrdiff_t __n) {
- return _Rope_iterator<_CharT,_Alloc>(
- __x._M_root_rope, __x._M_current_pos - __n);
-}
-
-template <class _CharT, class _Alloc>
-inline _Rope_iterator<_CharT,_Alloc>
-operator+(const _Rope_iterator<_CharT,_Alloc>& __x,
- ptrdiff_t __n) {
- return _Rope_iterator<_CharT,_Alloc>(
- __x._M_root_rope, __x._M_current_pos + __n);
-}
-
-template <class _CharT, class _Alloc>
-inline _Rope_iterator<_CharT,_Alloc>
-operator+(ptrdiff_t __n, const _Rope_iterator<_CharT,_Alloc>& __x) {
- return _Rope_iterator<_CharT,_Alloc>(
- __x._M_root_rope, __x._M_current_pos + __n);
-}
-
-template <class _CharT, class _Alloc>
-inline
-rope<_CharT,_Alloc>
-operator+ (const rope<_CharT,_Alloc>& __left,
- const rope<_CharT,_Alloc>& __right)
-{
-# ifdef __STL_USE_STD_ALLOCATORS
- __stl_assert(__left.get_allocator() == __right.get_allocator());
-# endif
- return rope<_CharT,_Alloc>(
- rope<_CharT,_Alloc>::_S_concat(__left._M_tree_ptr, __right._M_tree_ptr));
- // Inlining this should make it possible to keep __left and
- // __right in registers.
-}
-
-template <class _CharT, class _Alloc>
-inline
-rope<_CharT,_Alloc>&
-operator+= (rope<_CharT,_Alloc>& __left,
- const rope<_CharT,_Alloc>& __right)
-{
- __left.append(__right);
- return __left;
-}
-
-template <class _CharT, class _Alloc>
-inline
-rope<_CharT,_Alloc>
-operator+ (const rope<_CharT,_Alloc>& __left,
- const _CharT* __right) {
- size_t __rlen = rope<_CharT,_Alloc>::_S_char_ptr_len(__right);
- return rope<_CharT,_Alloc>(
- rope<_CharT,_Alloc>::_S_concat_char_iter(
- __left._M_tree_ptr, __right, __rlen));
-}
-
-template <class _CharT, class _Alloc>
-inline
-rope<_CharT,_Alloc>&
-operator+= (rope<_CharT,_Alloc>& __left,
- const _CharT* __right) {
- __left.append(__right);
- return __left;
-}
-
-template <class _CharT, class _Alloc>
-inline
-rope<_CharT,_Alloc>
-operator+ (const rope<_CharT,_Alloc>& __left, _CharT __right) {
- return rope<_CharT,_Alloc>(
- rope<_CharT,_Alloc>::_S_concat_char_iter(
- __left._M_tree_ptr, &__right, 1));
-}
-
-template <class _CharT, class _Alloc>
-inline
-rope<_CharT,_Alloc>&
-operator+= (rope<_CharT,_Alloc>& __left, _CharT __right) {
- __left.append(__right);
- return __left;
-}
-
-template <class _CharT, class _Alloc>
-bool
-operator< (const rope<_CharT,_Alloc>& __left,
- const rope<_CharT,_Alloc>& __right) {
- return __left.compare(__right) < 0;
-}
-
-template <class _CharT, class _Alloc>
-bool
-operator== (const rope<_CharT,_Alloc>& __left,
- const rope<_CharT,_Alloc>& __right) {
- return __left.compare(__right) == 0;
-}
-
-template <class _CharT, class _Alloc>
-inline bool operator== (const _Rope_char_ptr_proxy<_CharT,_Alloc>& __x,
- const _Rope_char_ptr_proxy<_CharT,_Alloc>& __y) {
- return (__x._M_pos == __y._M_pos && __x._M_root == __y._M_root);
-}
-
-template<class _CharT, class _Alloc>
-ostream& operator<< (ostream& __o, const rope<_CharT,_Alloc>& __r);
-
-typedef rope<char> crope;
-typedef rope<wchar_t> wrope;
-
-inline crope::reference __mutable_reference_at(crope& __c, size_t __i)
-{
- return __c.mutable_reference_at(__i);
-}
-
-inline wrope::reference __mutable_reference_at(wrope& __c, size_t __i)
-{
- return __c.mutable_reference_at(__i);
-}
-
-#ifdef __STL_FUNCTION_TMPL_PARTIAL_ORDER
-
-template <class _CharT, class _Alloc>
-inline void swap(rope<_CharT,_Alloc>& __x, rope<_CharT,_Alloc>& __y) {
- __x.swap(__y);
-}
-
-#else
-
-inline void swap(crope __x, crope __y) { __x.swap(__y); }
-inline void swap(wrope __x, wrope __y) { __x.swap(__y); }
-
-#endif /* __STL_FUNCTION_TMPL_PARTIAL_ORDER */
-
-// Hash functions should probably be revisited later:
-__STL_TEMPLATE_NULL struct hash<crope>
-{
- size_t operator()(const crope& __str) const
- {
- size_t __size = __str.size();
-
- if (0 == __size) return 0;
- return 13*__str[0] + 5*__str[__size - 1] + __size;
- }
-};
-
-
-__STL_TEMPLATE_NULL struct hash<wrope>
-{
- size_t operator()(const wrope& __str) const
- {
- size_t __size = __str.size();
-
- if (0 == __size) return 0;
- return 13*__str[0] + 5*__str[__size - 1] + __size;
- }
-};
-
-#if defined(__sgi) && !defined(__GNUC__) && (_MIPS_SIM != _MIPS_SIM_ABI32)
-#pragma reset woff 1174
-#endif
-
-__STL_END_NAMESPACE
-
-# include <ropeimpl.h>
-
-# endif /* __SGI_STL_INTERNAL_ROPE_H */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/stl_set.h b/contrib/libstdc++/stl/stl_set.h
deleted file mode 100644
index 003069cb074b..000000000000
--- a/contrib/libstdc++/stl/stl_set.h
+++ /dev/null
@@ -1,216 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- * Copyright (c) 1996,1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-/* NOTE: This is an internal header file, included by other STL headers.
- * You should not attempt to use it directly.
- */
-
-#ifndef __SGI_STL_INTERNAL_SET_H
-#define __SGI_STL_INTERNAL_SET_H
-
-__STL_BEGIN_NAMESPACE
-
-#if defined(__sgi) && !defined(__GNUC__) && (_MIPS_SIM != _MIPS_SIM_ABI32)
-#pragma set woff 1174
-#pragma set woff 1375
-#endif
-
-#ifndef __STL_LIMITED_DEFAULT_TEMPLATES
-template <class _Key, class _Compare = less<_Key>,
- class _Alloc = __STL_DEFAULT_ALLOCATOR(_Key) >
-#else
-template <class _Key, class _Compare,
- class _Alloc = __STL_DEFAULT_ALLOCATOR(_Key) >
-#endif
-class set {
-public:
- // typedefs:
-
- typedef _Key key_type;
- typedef _Key value_type;
- typedef _Compare key_compare;
- typedef _Compare value_compare;
-private:
- typedef _Rb_tree<key_type, value_type,
- _Identity<value_type>, key_compare, _Alloc> _Rep_type;
- _Rep_type _M_t; // red-black tree representing set
-public:
- typedef typename _Rep_type::const_pointer pointer;
- typedef typename _Rep_type::const_pointer const_pointer;
- typedef typename _Rep_type::const_reference reference;
- typedef typename _Rep_type::const_reference const_reference;
- typedef typename _Rep_type::const_iterator iterator;
- typedef typename _Rep_type::const_iterator const_iterator;
- typedef typename _Rep_type::const_reverse_iterator reverse_iterator;
- typedef typename _Rep_type::const_reverse_iterator const_reverse_iterator;
- typedef typename _Rep_type::size_type size_type;
- typedef typename _Rep_type::difference_type difference_type;
- typedef typename _Rep_type::allocator_type allocator_type;
-
- // allocation/deallocation
-
- set() : _M_t(_Compare(), allocator_type()) {}
- explicit set(const _Compare& __comp,
- const allocator_type& __a = allocator_type())
- : _M_t(__comp, __a) {}
-
-#ifdef __STL_MEMBER_TEMPLATES
- template <class _InputIterator>
- set(_InputIterator __first, _InputIterator __last)
- : _M_t(_Compare(), allocator_type())
- { _M_t.insert_unique(__first, __last); }
-
- template <class _InputIterator>
- set(_InputIterator __first, _InputIterator __last, const _Compare& __comp,
- const allocator_type& __a = allocator_type())
- : _M_t(__comp, __a) { _M_t.insert_unique(__first, __last); }
-#else
- set(const value_type* __first, const value_type* __last)
- : _M_t(_Compare(), allocator_type())
- { _M_t.insert_unique(__first, __last); }
-
- set(const value_type* __first,
- const value_type* __last, const _Compare& __comp,
- const allocator_type& __a = allocator_type())
- : _M_t(__comp, __a) { _M_t.insert_unique(__first, __last); }
-
- set(const_iterator __first, const_iterator __last)
- : _M_t(_Compare(), allocator_type())
- { _M_t.insert_unique(__first, __last); }
-
- set(const_iterator __first, const_iterator __last, const _Compare& __comp,
- const allocator_type& __a = allocator_type())
- : _M_t(__comp, __a) { _M_t.insert_unique(__first, __last); }
-#endif /* __STL_MEMBER_TEMPLATES */
-
- set(const set<_Key,_Compare,_Alloc>& __x) : _M_t(__x._M_t) {}
- set<_Key,_Compare,_Alloc>& operator=(const set<_Key, _Compare, _Alloc>& __x)
- {
- _M_t = __x._M_t;
- return *this;
- }
-
- // accessors:
-
- key_compare key_comp() const { return _M_t.key_comp(); }
- value_compare value_comp() const { return _M_t.key_comp(); }
- allocator_type get_allocator() const { return _M_t.get_allocator(); }
-
- iterator begin() const { return _M_t.begin(); }
- iterator end() const { return _M_t.end(); }
- reverse_iterator rbegin() const { return _M_t.rbegin(); }
- reverse_iterator rend() const { return _M_t.rend(); }
- bool empty() const { return _M_t.empty(); }
- size_type size() const { return _M_t.size(); }
- size_type max_size() const { return _M_t.max_size(); }
- void swap(set<_Key,_Compare,_Alloc>& __x) { _M_t.swap(__x._M_t); }
-
- // insert/erase
- pair<iterator,bool> insert(const value_type& __x) {
- pair<typename _Rep_type::iterator, bool> __p = _M_t.insert_unique(__x);
- return pair<iterator, bool>(__p.first, __p.second);
- }
- iterator insert(iterator __position, const value_type& __x) {
- typedef typename _Rep_type::iterator _Rep_iterator;
- return _M_t.insert_unique((_Rep_iterator&)__position, __x);
- }
-#ifdef __STL_MEMBER_TEMPLATES
- template <class _InputIterator>
- void insert(_InputIterator __first, _InputIterator __last) {
- _M_t.insert_unique(__first, __last);
- }
-#else
- void insert(const_iterator __first, const_iterator __last) {
- _M_t.insert_unique(__first, __last);
- }
- void insert(const value_type* __first, const value_type* __last) {
- _M_t.insert_unique(__first, __last);
- }
-#endif /* __STL_MEMBER_TEMPLATES */
- void erase(iterator __position) {
- typedef typename _Rep_type::iterator _Rep_iterator;
- _M_t.erase((_Rep_iterator&)__position);
- }
- size_type erase(const key_type& __x) {
- return _M_t.erase(__x);
- }
- void erase(iterator __first, iterator __last) {
- typedef typename _Rep_type::iterator _Rep_iterator;
- _M_t.erase((_Rep_iterator&)__first, (_Rep_iterator&)__last);
- }
- void clear() { _M_t.clear(); }
-
- // set operations:
-
- iterator find(const key_type& __x) const { return _M_t.find(__x); }
- size_type count(const key_type& __x) const { return _M_t.count(__x); }
- iterator lower_bound(const key_type& __x) const {
- return _M_t.lower_bound(__x);
- }
- iterator upper_bound(const key_type& __x) const {
- return _M_t.upper_bound(__x);
- }
- pair<iterator,iterator> equal_range(const key_type& __x) const {
- return _M_t.equal_range(__x);
- }
- friend bool operator== __STL_NULL_TMPL_ARGS (const set&, const set&);
- friend bool operator< __STL_NULL_TMPL_ARGS (const set&, const set&);
-};
-
-template <class _Key, class _Compare, class _Alloc>
-inline bool operator==(const set<_Key,_Compare,_Alloc>& __x,
- const set<_Key,_Compare,_Alloc>& __y) {
- return __x._M_t == __y._M_t;
-}
-
-template <class _Key, class _Compare, class _Alloc>
-inline bool operator<(const set<_Key,_Compare,_Alloc>& __x,
- const set<_Key,_Compare,_Alloc>& __y) {
- return __x._M_t < __y._M_t;
-}
-
-#ifdef __STL_FUNCTION_TMPL_PARTIAL_ORDER
-
-template <class _Key, class _Compare, class _Alloc>
-inline void swap(set<_Key,_Compare,_Alloc>& __x,
- set<_Key,_Compare,_Alloc>& __y) {
- __x.swap(__y);
-}
-
-#endif /* __STL_FUNCTION_TMPL_PARTIAL_ORDER */
-
-#if defined(__sgi) && !defined(__GNUC__) && (_MIPS_SIM != _MIPS_SIM_ABI32)
-#pragma reset woff 1174
-#pragma reset woff 1375
-#endif
-
-__STL_END_NAMESPACE
-
-#endif /* __SGI_STL_INTERNAL_SET_H */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/stl_slist.h b/contrib/libstdc++/stl/stl_slist.h
deleted file mode 100644
index 6da234d92c2c..000000000000
--- a/contrib/libstdc++/stl/stl_slist.h
+++ /dev/null
@@ -1,945 +0,0 @@
-/*
- * Copyright (c) 1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- */
-
-/* NOTE: This is an internal header file, included by other STL headers.
- * You should not attempt to use it directly.
- */
-
-#ifndef __SGI_STL_INTERNAL_SLIST_H
-#define __SGI_STL_INTERNAL_SLIST_H
-
-
-__STL_BEGIN_NAMESPACE
-
-#if defined(__sgi) && !defined(__GNUC__) && (_MIPS_SIM != _MIPS_SIM_ABI32)
-#pragma set woff 1174
-#pragma set woff 1375
-#endif
-
-struct _Slist_node_base
-{
- _Slist_node_base* _M_next;
-};
-
-inline _Slist_node_base*
-__slist_make_link(_Slist_node_base* __prev_node,
- _Slist_node_base* __new_node)
-{
- __new_node->_M_next = __prev_node->_M_next;
- __prev_node->_M_next = __new_node;
- return __new_node;
-}
-
-inline _Slist_node_base*
-__slist_previous(_Slist_node_base* __head,
- const _Slist_node_base* __node)
-{
- while (__head && __head->_M_next != __node)
- __head = __head->_M_next;
- return __head;
-}
-
-inline const _Slist_node_base*
-__slist_previous(const _Slist_node_base* __head,
- const _Slist_node_base* __node)
-{
- while (__head && __head->_M_next != __node)
- __head = __head->_M_next;
- return __head;
-}
-
-inline void __slist_splice_after(_Slist_node_base* __pos,
- _Slist_node_base* __before_first,
- _Slist_node_base* __before_last)
-{
- if (__pos != __before_first && __pos != __before_last) {
- _Slist_node_base* __first = __before_first->_M_next;
- _Slist_node_base* __after = __pos->_M_next;
- __before_first->_M_next = __before_last->_M_next;
- __pos->_M_next = __first;
- __before_last->_M_next = __after;
- }
-}
-
-inline _Slist_node_base* __slist_reverse(_Slist_node_base* __node)
-{
- _Slist_node_base* __result = __node;
- __node = __node->_M_next;
- __result->_M_next = 0;
- while(__node) {
- _Slist_node_base* __next = __node->_M_next;
- __node->_M_next = __result;
- __result = __node;
- __node = __next;
- }
- return __result;
-}
-
-inline size_t __slist_size(_Slist_node_base* __node)
-{
- size_t __result = 0;
- for ( ; __node != 0; __node = __node->_M_next)
- ++__result;
- return __result;
-}
-
-template <class _Tp>
-struct _Slist_node : public _Slist_node_base
-{
- _Tp _M_data;
-};
-
-struct _Slist_iterator_base
-{
- typedef size_t size_type;
- typedef ptrdiff_t difference_type;
- typedef forward_iterator_tag iterator_category;
-
- _Slist_node_base* _M_node;
-
- _Slist_iterator_base(_Slist_node_base* __x) : _M_node(__x) {}
- void _M_incr() { _M_node = _M_node->_M_next; }
-
- bool operator==(const _Slist_iterator_base& __x) const {
- return _M_node == __x._M_node;
- }
- bool operator!=(const _Slist_iterator_base& __x) const {
- return _M_node != __x._M_node;
- }
-};
-
-template <class _Tp, class _Ref, class _Ptr>
-struct _Slist_iterator : public _Slist_iterator_base
-{
- typedef _Slist_iterator<_Tp, _Tp&, _Tp*> iterator;
- typedef _Slist_iterator<_Tp, const _Tp&, const _Tp*> const_iterator;
- typedef _Slist_iterator<_Tp, _Ref, _Ptr> _Self;
-
- typedef _Tp value_type;
- typedef _Ptr pointer;
- typedef _Ref reference;
- typedef _Slist_node<_Tp> _Node;
-
- _Slist_iterator(_Node* __x) : _Slist_iterator_base(__x) {}
- _Slist_iterator() : _Slist_iterator_base(0) {}
- _Slist_iterator(const iterator& __x) : _Slist_iterator_base(__x._M_node) {}
-
- reference operator*() const { return ((_Node*) _M_node)->_M_data; }
-#ifndef __SGI_STL_NO_ARROW_OPERATOR
- pointer operator->() const { return &(operator*()); }
-#endif /* __SGI_STL_NO_ARROW_OPERATOR */
-
- _Self& operator++()
- {
- _M_incr();
- return *this;
- }
- _Self operator++(int)
- {
- _Self __tmp = *this;
- _M_incr();
- return __tmp;
- }
-};
-
-#ifndef __STL_CLASS_PARTIAL_SPECIALIZATION
-
-inline ptrdiff_t* distance_type(const _Slist_iterator_base&) {
- return 0;
-}
-
-inline forward_iterator_tag iterator_category(const _Slist_iterator_base&) {
- return forward_iterator_tag();
-}
-
-template <class _Tp, class _Ref, class _Ptr>
-inline _Tp* value_type(const _Slist_iterator<_Tp, _Ref, _Ptr>&) {
- return 0;
-}
-
-#endif /* __STL_CLASS_PARTIAL_SPECIALIZATION */
-
-// Base class that encapsulates details of allocators. Three cases:
-// an ordinary standard-conforming allocator, a standard-conforming
-// allocator with no non-static data, and an SGI-style allocator.
-// This complexity is necessary only because we're worrying about backward
-// compatibility and because we want to avoid wasting storage on an
-// allocator instance if it isn't necessary.
-
-#ifdef __STL_USE_STD_ALLOCATORS
-
-// Base for general standard-conforming allocators.
-template <class _Tp, class _Allocator, bool _IsStatic>
-class _Slist_alloc_base {
-public:
- typedef typename _Alloc_traits<_Tp,_Allocator>::allocator_type
- allocator_type;
- allocator_type get_allocator() const { return _M_node_allocator; }
-
- _Slist_alloc_base(const allocator_type& __a) : _M_node_allocator(__a) {}
-
-protected:
- _Slist_node<_Tp>* _M_get_node()
- { return _M_node_allocator.allocate(1); }
- void _M_put_node(_Slist_node<_Tp>* __p)
- { _M_node_allocator.deallocate(__p, 1); }
-
-protected:
- typename _Alloc_traits<_Slist_node<_Tp>,_Allocator>::allocator_type
- _M_node_allocator;
- _Slist_node_base _M_head;
-};
-
-// Specialization for instanceless allocators.
-template <class _Tp, class _Allocator>
-class _Slist_alloc_base<_Tp,_Allocator, true> {
-public:
- typedef typename _Alloc_traits<_Tp,_Allocator>::allocator_type
- allocator_type;
- allocator_type get_allocator() const { return allocator_type(); }
-
- _Slist_alloc_base(const allocator_type&) {}
-
-protected:
- typedef typename _Alloc_traits<_Slist_node<_Tp>, _Allocator>::_Alloc_type
- _Alloc_type;
- _Slist_node<_Tp>* _M_get_node() { return _Alloc_type::allocate(1); }
- void _M_put_node(_Slist_node<_Tp>* __p) { _Alloc_type::deallocate(__p, 1); }
-
-protected:
- _Slist_node_base _M_head;
-};
-
-
-template <class _Tp, class _Alloc>
-struct _Slist_base
- : public _Slist_alloc_base<_Tp, _Alloc,
- _Alloc_traits<_Tp, _Alloc>::_S_instanceless>
-{
- typedef _Slist_alloc_base<_Tp, _Alloc,
- _Alloc_traits<_Tp, _Alloc>::_S_instanceless>
- _Base;
- typedef typename _Base::allocator_type allocator_type;
-
- _Slist_base(const allocator_type& __a) : _Base(__a) { _M_head._M_next = 0; }
- ~_Slist_base() { _M_erase_after(&_M_head, 0); }
-
-protected:
-
- _Slist_node_base* _M_erase_after(_Slist_node_base* __pos)
- {
- _Slist_node<_Tp>* __next = (_Slist_node<_Tp>*) (__pos->_M_next);
- _Slist_node_base* __next_next = __next->_M_next;
- __pos->_M_next = __next_next;
- destroy(&__next->_M_data);
- _M_put_node(__next);
- return __next_next;
- }
- _Slist_node_base* _M_erase_after(_Slist_node_base*, _Slist_node_base*);
-};
-
-#else /* __STL_USE_STD_ALLOCATORS */
-
-template <class _Tp, class _Alloc>
-struct _Slist_base {
- typedef _Alloc allocator_type;
- allocator_type get_allocator() const { return allocator_type(); }
-
- _Slist_base(const allocator_type&) { _M_head._M_next = 0; }
- ~_Slist_base() { _M_erase_after(&_M_head, 0); }
-
-protected:
- typedef simple_alloc<_Slist_node<_Tp>, _Alloc> _Alloc_type;
- _Slist_node<_Tp>* _M_get_node() { return _Alloc_type::allocate(1); }
- void _M_put_node(_Slist_node<_Tp>* __p) { _Alloc_type::deallocate(__p, 1); }
-
- _Slist_node_base* _M_erase_after(_Slist_node_base* __pos)
- {
- _Slist_node<_Tp>* __next = (_Slist_node<_Tp>*) (__pos->_M_next);
- _Slist_node_base* __next_next = __next->_M_next;
- __pos->_M_next = __next_next;
- destroy(&__next->_M_data);
- _M_put_node(__next);
- return __next_next;
- }
- _Slist_node_base* _M_erase_after(_Slist_node_base*, _Slist_node_base*);
-
-protected:
- _Slist_node_base _M_head;
-};
-
-#endif /* __STL_USE_STD_ALLOCATORS */
-
-template <class _Tp, class _Alloc>
-_Slist_node_base*
-_Slist_base<_Tp,_Alloc>::_M_erase_after(_Slist_node_base* __before_first,
- _Slist_node_base* __last_node) {
- _Slist_node<_Tp>* __cur = (_Slist_node<_Tp>*) (__before_first->_M_next);
- while (__cur != __last_node) {
- _Slist_node<_Tp>* __tmp = __cur;
- __cur = (_Slist_node<_Tp>*) __cur->_M_next;
- destroy(&__tmp->_M_data);
- _M_put_node(__tmp);
- }
- __before_first->_M_next = __last_node;
- return __last_node;
-}
-
-template <class _Tp, class _Alloc = __STL_DEFAULT_ALLOCATOR(_Tp) >
-class slist : private _Slist_base<_Tp,_Alloc>
-{
-private:
- typedef _Slist_base<_Tp,_Alloc> _Base;
-public:
- typedef _Tp value_type;
- typedef value_type* pointer;
- typedef const value_type* const_pointer;
- typedef value_type& reference;
- typedef const value_type& const_reference;
- typedef size_t size_type;
- typedef ptrdiff_t difference_type;
-
- typedef _Slist_iterator<_Tp, _Tp&, _Tp*> iterator;
- typedef _Slist_iterator<_Tp, const _Tp&, const _Tp*> const_iterator;
-
- typedef typename _Base::allocator_type allocator_type;
- allocator_type get_allocator() const { return _Base::get_allocator(); }
-
-private:
- typedef _Slist_node<_Tp> _Node;
- typedef _Slist_node_base _Node_base;
- typedef _Slist_iterator_base _Iterator_base;
-
- _Node* _M_create_node(const value_type& __x) {
- _Node* __node = _M_get_node();
- __STL_TRY {
- construct(&__node->_M_data, __x);
- __node->_M_next = 0;
- }
- __STL_UNWIND(_M_put_node(__node));
- return __node;
- }
-
- _Node* _M_create_node() {
- _Node* __node = _M_get_node();
- __STL_TRY {
- construct(&__node->_M_data);
- __node->_M_next = 0;
- }
- __STL_UNWIND(_M_put_node(__node));
- return __node;
- }
-
-private:
-#ifdef __STL_USE_NAMESPACES
- using _Base::_M_get_node;
- using _Base::_M_put_node;
- using _Base::_M_erase_after;
- using _Base::_M_head;
-#endif /* __STL_USE_NAMESPACES */
-
-public:
- explicit slist(const allocator_type& __a = allocator_type()) : _Base(__a) {}
-
- slist(size_type __n, const value_type& __x,
- const allocator_type& __a = allocator_type()) : _Base(__a)
- { _M_insert_after_fill(&_M_head, __n, __x); }
-
- explicit slist(size_type __n) : _Base(allocator_type())
- { _M_insert_after_fill(&_M_head, __n, value_type()); }
-
-#ifdef __STL_MEMBER_TEMPLATES
- // We don't need any dispatching tricks here, because _M_insert_after_range
- // already does them.
- template <class _InputIterator>
- slist(_InputIterator __first, _InputIterator __last,
- const allocator_type& __a = allocator_type()) : _Base(__a)
- { _M_insert_after_range(&_M_head, __first, __last); }
-
-#else /* __STL_MEMBER_TEMPLATES */
- slist(const_iterator __first, const_iterator __last,
- const allocator_type& __a = allocator_type()) : _Base(__a)
- { _M_insert_after_range(&_M_head, __first, __last); }
- slist(const value_type* __first, const value_type* __last,
- const allocator_type& __a = allocator_type()) : _Base(__a)
- { _M_insert_after_range(&_M_head, __first, __last); }
-#endif /* __STL_MEMBER_TEMPLATES */
-
- slist(const slist& __x) : _Base(__x.get_allocator())
- { _M_insert_after_range(&_M_head, __x.begin(), __x.end()); }
-
- slist& operator= (const slist& __x);
-
- ~slist() {}
-
-public:
- // assign(), a generalized assignment member function. Two
- // versions: one that takes a count, and one that takes a range.
- // The range version is a member template, so we dispatch on whether
- // or not the type is an integer.
-
- void assign(size_type __n, const _Tp& __val);
-
-#ifdef __STL_MEMBER_TEMPLATES
-
- template <class _InputIterator>
- void assign(_InputIterator __first, _InputIterator __last) {
- typedef typename _Is_integer<_InputIterator>::_Integral _Integral;
- _M_assign_dispatch(__first, __last, _Integral());
- }
-
- template <class _Integer>
- void _M_assign_dispatch(_Integer __n, _Integer __val, __true_type)
- { assign((size_type) __n, (_Tp) __val); }
-
- template <class _InputIterator>
- void _M_assign_dispatch(_InputIterator __first, _InputIterator __last,
- __false_type);
-
-#endif /* __STL_MEMBER_TEMPLATES */
-
-public:
-
- iterator begin() { return iterator((_Node*)_M_head._M_next); }
- const_iterator begin() const
- { return const_iterator((_Node*)_M_head._M_next);}
-
- iterator end() { return iterator(0); }
- const_iterator end() const { return const_iterator(0); }
-
- size_type size() const { return __slist_size(_M_head._M_next); }
-
- size_type max_size() const { return size_type(-1); }
-
- bool empty() const { return _M_head._M_next == 0; }
-
- void swap(slist& __x) { __STD::swap(_M_head._M_next, __x._M_head._M_next); }
-
-public:
- friend bool operator== __STL_NULL_TMPL_ARGS (const slist<_Tp,_Alloc>& _SL1,
- const slist<_Tp,_Alloc>& _SL2);
-
-public:
-
- reference front() { return ((_Node*) _M_head._M_next)->_M_data; }
- const_reference front() const
- { return ((_Node*) _M_head._M_next)->_M_data; }
- void push_front(const value_type& __x) {
- __slist_make_link(&_M_head, _M_create_node(__x));
- }
- void push_front() { __slist_make_link(&_M_head, _M_create_node());}
- void pop_front() {
- _Node* __node = (_Node*) _M_head._M_next;
- _M_head._M_next = __node->_M_next;
- destroy(&__node->_M_data);
- _M_put_node(__node);
- }
-
- iterator previous(const_iterator __pos) {
- return iterator((_Node*) __slist_previous(&_M_head, __pos._M_node));
- }
- const_iterator previous(const_iterator __pos) const {
- return const_iterator((_Node*) __slist_previous(&_M_head, __pos._M_node));
- }
-
-private:
- _Node* _M_insert_after(_Node_base* __pos, const value_type& __x) {
- return (_Node*) (__slist_make_link(__pos, _M_create_node(__x)));
- }
-
- _Node* _M_insert_after(_Node_base* __pos) {
- return (_Node*) (__slist_make_link(__pos, _M_create_node()));
- }
-
- void _M_insert_after_fill(_Node_base* __pos,
- size_type __n, const value_type& __x) {
- for (size_type __i = 0; __i < __n; ++__i)
- __pos = __slist_make_link(__pos, _M_create_node(__x));
- }
-
-#ifdef __STL_MEMBER_TEMPLATES
-
- // Check whether it's an integral type. If so, it's not an iterator.
- template <class _InIter>
- void _M_insert_after_range(_Node_base* __pos,
- _InIter __first, _InIter __last) {
- typedef typename _Is_integer<_InIter>::_Integral _Integral;
- _M_insert_after_range(__pos, __first, __last, _Integral());
- }
-
- template <class _Integer>
- void _M_insert_after_range(_Node_base* __pos, _Integer __n, _Integer __x,
- __true_type) {
- _M_insert_after_fill(__pos, __n, __x);
- }
-
- template <class _InIter>
- void _M_insert_after_range(_Node_base* __pos,
- _InIter __first, _InIter __last,
- __false_type) {
- while (__first != __last) {
- __pos = __slist_make_link(__pos, _M_create_node(*__first));
- ++__first;
- }
- }
-
-#else /* __STL_MEMBER_TEMPLATES */
-
- void _M_insert_after_range(_Node_base* __pos,
- const_iterator __first, const_iterator __last) {
- while (__first != __last) {
- __pos = __slist_make_link(__pos, _M_create_node(*__first));
- ++__first;
- }
- }
- void _M_insert_after_range(_Node_base* __pos,
- const value_type* __first,
- const value_type* __last) {
- while (__first != __last) {
- __pos = __slist_make_link(__pos, _M_create_node(*__first));
- ++__first;
- }
- }
-
-#endif /* __STL_MEMBER_TEMPLATES */
-
-public:
-
- iterator insert_after(iterator __pos, const value_type& __x) {
- return iterator(_M_insert_after(__pos._M_node, __x));
- }
-
- iterator insert_after(iterator __pos) {
- return insert_after(__pos, value_type());
- }
-
- void insert_after(iterator __pos, size_type __n, const value_type& __x) {
- _M_insert_after_fill(__pos._M_node, __n, __x);
- }
-
-#ifdef __STL_MEMBER_TEMPLATES
-
- // We don't need any dispatching tricks here, because _M_insert_after_range
- // already does them.
- template <class _InIter>
- void insert_after(iterator __pos, _InIter __first, _InIter __last) {
- _M_insert_after_range(__pos._M_node, __first, __last);
- }
-
-#else /* __STL_MEMBER_TEMPLATES */
-
- void insert_after(iterator __pos,
- const_iterator __first, const_iterator __last) {
- _M_insert_after_range(__pos._M_node, __first, __last);
- }
- void insert_after(iterator __pos,
- const value_type* __first, const value_type* __last) {
- _M_insert_after_range(__pos._M_node, __first, __last);
- }
-
-#endif /* __STL_MEMBER_TEMPLATES */
-
- iterator insert(iterator __pos, const value_type& __x) {
- return iterator(_M_insert_after(__slist_previous(&_M_head, __pos._M_node),
- __x));
- }
-
- iterator insert(iterator __pos) {
- return iterator(_M_insert_after(__slist_previous(&_M_head, __pos._M_node),
- value_type()));
- }
-
- void insert(iterator __pos, size_type __n, const value_type& __x) {
- _M_insert_after_fill(__slist_previous(&_M_head, __pos._M_node), __n, __x);
- }
-
-#ifdef __STL_MEMBER_TEMPLATES
-
- // We don't need any dispatching tricks here, because _M_insert_after_range
- // already does them.
- template <class _InIter>
- void insert(iterator __pos, _InIter __first, _InIter __last) {
- _M_insert_after_range(__slist_previous(&_M_head, __pos._M_node),
- __first, __last);
- }
-
-#else /* __STL_MEMBER_TEMPLATES */
-
- void insert(iterator __pos, const_iterator __first, const_iterator __last) {
- _M_insert_after_range(__slist_previous(&_M_head, __pos._M_node),
- __first, __last);
- }
- void insert(iterator __pos, const value_type* __first,
- const value_type* __last) {
- _M_insert_after_range(__slist_previous(&_M_head, __pos._M_node),
- __first, __last);
- }
-
-#endif /* __STL_MEMBER_TEMPLATES */
-
-
-public:
- iterator erase_after(iterator __pos) {
- return iterator((_Node*) _M_erase_after(__pos._M_node));
- }
- iterator erase_after(iterator __before_first, iterator __last) {
- return iterator((_Node*) _M_erase_after(__before_first._M_node,
- __last._M_node));
- }
-
- iterator erase(iterator __pos) {
- return (_Node*) _M_erase_after(__slist_previous(&_M_head,
- __pos._M_node));
- }
- iterator erase(iterator __first, iterator __last) {
- return (_Node*) _M_erase_after(
- __slist_previous(&_M_head, __first._M_node), __last._M_node);
- }
-
- void resize(size_type new_size, const _Tp& __x);
- void resize(size_type new_size) { resize(new_size, _Tp()); }
- void clear() { _M_erase_after(&_M_head, 0); }
-
-public:
- // Moves the range [__before_first + 1, __before_last + 1) to *this,
- // inserting it immediately after __pos. This is constant time.
- void splice_after(iterator __pos,
- iterator __before_first, iterator __before_last)
- {
- if (__before_first != __before_last)
- __slist_splice_after(__pos._M_node, __before_first._M_node,
- __before_last._M_node);
- }
-
- // Moves the element that follows __prev to *this, inserting it immediately
- // after __pos. This is constant time.
- void splice_after(iterator __pos, iterator __prev)
- {
- __slist_splice_after(__pos._M_node,
- __prev._M_node, __prev._M_node->_M_next);
- }
-
-
- // Linear in distance(begin(), __pos), and linear in __x.size().
- void splice(iterator __pos, slist& __x) {
- if (__x._M_head._M_next)
- __slist_splice_after(__slist_previous(&_M_head, __pos._M_node),
- &__x._M_head, __slist_previous(&__x._M_head, 0));
- }
-
- // Linear in distance(begin(), __pos), and in distance(__x.begin(), __i).
- void splice(iterator __pos, slist& __x, iterator __i) {
- __slist_splice_after(__slist_previous(&_M_head, __pos._M_node),
- __slist_previous(&__x._M_head, __i._M_node),
- __i._M_node);
- }
-
- // Linear in distance(begin(), __pos), in distance(__x.begin(), __first),
- // and in distance(__first, __last).
- void splice(iterator __pos, slist& __x, iterator __first, iterator __last)
- {
- if (__first != __last)
- __slist_splice_after(__slist_previous(&_M_head, __pos._M_node),
- __slist_previous(&__x._M_head, __first._M_node),
- __slist_previous(__first._M_node, __last._M_node));
- }
-
-public:
- void reverse() {
- if (_M_head._M_next)
- _M_head._M_next = __slist_reverse(_M_head._M_next);
- }
-
- void remove(const _Tp& __val);
- void unique();
- void merge(slist& __x);
- void sort();
-
-#ifdef __STL_MEMBER_TEMPLATES
- template <class _Predicate>
- void remove_if(_Predicate __pred);
-
- template <class _BinaryPredicate>
- void unique(_BinaryPredicate __pred);
-
- template <class _StrictWeakOrdering>
- void merge(slist&, _StrictWeakOrdering);
-
- template <class _StrictWeakOrdering>
- void sort(_StrictWeakOrdering __comp);
-#endif /* __STL_MEMBER_TEMPLATES */
-};
-
-template <class _Tp, class _Alloc>
-slist<_Tp,_Alloc>& slist<_Tp,_Alloc>::operator=(const slist<_Tp,_Alloc>& __x)
-{
- if (&__x != this) {
- _Node_base* __p1 = &_M_head;
- _Node* __n1 = (_Node*) _M_head._M_next;
- const _Node* __n2 = (const _Node*) __x._M_head._M_next;
- while (__n1 && __n2) {
- __n1->_M_data = __n2->_M_data;
- __p1 = __n1;
- __n1 = (_Node*) __n1->_M_next;
- __n2 = (const _Node*) __n2->_M_next;
- }
- if (__n2 == 0)
- _M_erase_after(__p1, 0);
- else
- _M_insert_after_range(__p1, const_iterator((_Node*)__n2),
- const_iterator(0));
- }
- return *this;
-}
-
-template <class _Tp, class _Alloc>
-void slist<_Tp, _Alloc>::assign(size_type __n, const _Tp& __val) {
- _Node_base* __prev = &_M_head;
- _Node* __node = (_Node*) _M_head._M_next;
- for ( ; __node != 0 && __n > 0 ; --__n) {
- __node->_M_data = __val;
- __prev = __node;
- __node = (_Node*) __node->_M_next;
- }
- if (__n > 0)
- _M_insert_after_fill(__prev, __n, __val);
- else
- _M_erase_after(__prev, 0);
-}
-
-#ifdef __STL_MEMBER_TEMPLATES
-
-template <class _Tp, class _Alloc> template <class _InputIter>
-void
-slist<_Tp, _Alloc>::_M_assign_dispatch(_InputIter __first, _InputIter __last,
- __false_type)
-{
- _Node_base* __prev = &_M_head;
- _Node* __node = (_Node*) _M_head._M_next;
- while (__node != 0 && __first != __last) {
- __node->_M_data = *__first;
- __prev = __node;
- __node = (_Node*) __node->_M_next;
- ++__first;
- }
- if (__first != __last)
- _M_insert_after_range(__prev, __first, __last);
- else
- _M_erase_after(__prev, 0);
-}
-
-#endif /* __STL_MEMBER_TEMPLATES */
-
-template <class _Tp, class _Alloc>
-inline bool
-operator==(const slist<_Tp,_Alloc>& _SL1, const slist<_Tp,_Alloc>& _SL2)
-{
- typedef typename slist<_Tp,_Alloc>::_Node _Node;
- _Node* __n1 = (_Node*) _SL1._M_head._M_next;
- _Node* __n2 = (_Node*) _SL2._M_head._M_next;
- while (__n1 && __n2 && __n1->_M_data == __n2->_M_data) {
- __n1 = (_Node*) __n1->_M_next;
- __n2 = (_Node*) __n2->_M_next;
- }
- return __n1 == 0 && __n2 == 0;
-}
-
-template <class _Tp, class _Alloc>
-inline bool operator<(const slist<_Tp,_Alloc>& _SL1,
- const slist<_Tp,_Alloc>& _SL2)
-{
- return lexicographical_compare(_SL1.begin(), _SL1.end(),
- _SL2.begin(), _SL2.end());
-}
-
-#ifdef __STL_FUNCTION_TMPL_PARTIAL_ORDER
-
-template <class _Tp, class _Alloc>
-inline void swap(slist<_Tp,_Alloc>& __x, slist<_Tp,_Alloc>& __y) {
- __x.swap(__y);
-}
-
-#endif /* __STL_FUNCTION_TMPL_PARTIAL_ORDER */
-
-
-template <class _Tp, class _Alloc>
-void slist<_Tp,_Alloc>::resize(size_type __len, const _Tp& __x)
-{
- _Node_base* __cur = &_M_head;
- while (__cur->_M_next != 0 && __len > 0) {
- --__len;
- __cur = __cur->_M_next;
- }
- if (__cur->_M_next)
- _M_erase_after(__cur, 0);
- else
- _M_insert_after_fill(__cur, __len, __x);
-}
-
-template <class _Tp, class _Alloc>
-void slist<_Tp,_Alloc>::remove(const _Tp& __val)
-{
- _Node_base* __cur = &_M_head;
- while (__cur && __cur->_M_next) {
- if (((_Node*) __cur->_M_next)->_M_data == __val)
- _M_erase_after(__cur);
- else
- __cur = __cur->_M_next;
- }
-}
-
-template <class _Tp, class _Alloc>
-void slist<_Tp,_Alloc>::unique()
-{
- _Node_base* __cur = _M_head._M_next;
- if (__cur) {
- while (__cur->_M_next) {
- if (((_Node*)__cur)->_M_data ==
- ((_Node*)(__cur->_M_next))->_M_data)
- _M_erase_after(__cur);
- else
- __cur = __cur->_M_next;
- }
- }
-}
-
-template <class _Tp, class _Alloc>
-void slist<_Tp,_Alloc>::merge(slist<_Tp,_Alloc>& __x)
-{
- _Node_base* __n1 = &_M_head;
- while (__n1->_M_next && __x._M_head._M_next) {
- if (((_Node*) __x._M_head._M_next)->_M_data <
- ((_Node*) __n1->_M_next)->_M_data)
- __slist_splice_after(__n1, &__x._M_head, __x._M_head._M_next);
- __n1 = __n1->_M_next;
- }
- if (__x._M_head._M_next) {
- __n1->_M_next = __x._M_head._M_next;
- __x._M_head._M_next = 0;
- }
-}
-
-template <class _Tp, class _Alloc>
-void slist<_Tp,_Alloc>::sort()
-{
- if (_M_head._M_next && _M_head._M_next->_M_next) {
- slist __carry;
- slist __counter[64];
- int __fill = 0;
- while (!empty()) {
- __slist_splice_after(&__carry._M_head, &_M_head, _M_head._M_next);
- int __i = 0;
- while (__i < __fill && !__counter[__i].empty()) {
- __counter[__i].merge(__carry);
- __carry.swap(__counter[__i]);
- ++__i;
- }
- __carry.swap(__counter[__i]);
- if (__i == __fill)
- ++__fill;
- }
-
- for (int __i = 1; __i < __fill; ++__i)
- __counter[__i].merge(__counter[__i-1]);
- this->swap(__counter[__fill-1]);
- }
-}
-
-#ifdef __STL_MEMBER_TEMPLATES
-
-template <class _Tp, class _Alloc>
-template <class _Predicate>
-void slist<_Tp,_Alloc>::remove_if(_Predicate __pred)
-{
- _Node_base* __cur = &_M_head;
- while (__cur->_M_next) {
- if (__pred(((_Node*) __cur->_M_next)->_M_data))
- _M_erase_after(__cur);
- else
- __cur = __cur->_M_next;
- }
-}
-
-template <class _Tp, class _Alloc> template <class _BinaryPredicate>
-void slist<_Tp,_Alloc>::unique(_BinaryPredicate __pred)
-{
- _Node* __cur = (_Node*) _M_head._M_next;
- if (__cur) {
- while (__cur->_M_next) {
- if (__pred(((_Node*)__cur)->_M_data,
- ((_Node*)(__cur->_M_next))->_M_data))
- _M_erase_after(__cur);
- else
- __cur = (_Node*) __cur->_M_next;
- }
- }
-}
-
-template <class _Tp, class _Alloc> template <class _StrictWeakOrdering>
-void slist<_Tp,_Alloc>::merge(slist<_Tp,_Alloc>& __x,
- _StrictWeakOrdering __comp)
-{
- _Node_base* __n1 = &_M_head;
- while (__n1->_M_next && __x._M_head._M_next) {
- if (__comp(((_Node*) __x._M_head._M_next)->_M_data,
- ((_Node*) __n1->_M_next)->_M_data))
- __slist_splice_after(__n1, &__x._M_head, __x._M_head._M_next);
- __n1 = __n1->_M_next;
- }
- if (__x._M_head._M_next) {
- __n1->_M_next = __x._M_head._M_next;
- __x._M_head._M_next = 0;
- }
-}
-
-template <class _Tp, class _Alloc> template <class _StrictWeakOrdering>
-void slist<_Tp,_Alloc>::sort(_StrictWeakOrdering __comp)
-{
- if (_M_head._M_next && _M_head._M_next->_M_next) {
- slist __carry;
- slist __counter[64];
- int __fill = 0;
- while (!empty()) {
- __slist_splice_after(&__carry._M_head, &_M_head, _M_head._M_next);
- int __i = 0;
- while (__i < __fill && !__counter[__i].empty()) {
- __counter[__i].merge(__carry, __comp);
- __carry.swap(__counter[__i]);
- ++__i;
- }
- __carry.swap(__counter[__i]);
- if (__i == __fill)
- ++__fill;
- }
-
- for (int __i = 1; __i < __fill; ++__i)
- __counter[__i].merge(__counter[__i-1], __comp);
- this->swap(__counter[__fill-1]);
- }
-}
-
-#endif /* __STL_MEMBER_TEMPLATES */
-
-#if defined(__sgi) && !defined(__GNUC__) && (_MIPS_SIM != _MIPS_SIM_ABI32)
-#pragma reset woff 1174
-#pragma reset woff 1375
-#endif
-
-__STL_END_NAMESPACE
-
-#endif /* __SGI_STL_INTERNAL_SLIST_H */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/stl_stack.h b/contrib/libstdc++/stl/stl_stack.h
deleted file mode 100644
index 2a04b21e5070..000000000000
--- a/contrib/libstdc++/stl/stl_stack.h
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- * Copyright (c) 1996,1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-/* NOTE: This is an internal header file, included by other STL headers.
- * You should not attempt to use it directly.
- */
-
-#ifndef __SGI_STL_INTERNAL_STACK_H
-#define __SGI_STL_INTERNAL_STACK_H
-
-__STL_BEGIN_NAMESPACE
-
-#ifndef __STL_LIMITED_DEFAULT_TEMPLATES
-template <class _Tp, class _Sequence = deque<_Tp> >
-#else
-template <class _Tp, class _Sequence>
-#endif
-class stack {
- friend bool operator== __STL_NULL_TMPL_ARGS (const stack&, const stack&);
- friend bool operator< __STL_NULL_TMPL_ARGS (const stack&, const stack&);
-public:
- typedef typename _Sequence::value_type value_type;
- typedef typename _Sequence::size_type size_type;
- typedef _Sequence container_type;
-
- typedef typename _Sequence::reference reference;
- typedef typename _Sequence::const_reference const_reference;
-protected:
- _Sequence _M_c;
-public:
- stack() : _M_c() {}
- explicit stack(const _Sequence& __s) : _M_c(__s) {}
-
- bool empty() const { return _M_c.empty(); }
- size_type size() const { return _M_c.size(); }
- reference top() { return _M_c.back(); }
- const_reference top() const { return _M_c.back(); }
- void push(const value_type& __x) { _M_c.push_back(__x); }
- void pop() { _M_c.pop_back(); }
-};
-
-template <class _Tp, class _Seq>
-bool operator==(const stack<_Tp,_Seq>& __x, const stack<_Tp,_Seq>& __y)
-{
- return __x._M_c == __y._M_c;
-}
-
-template <class _Tp, class _Seq>
-bool operator<(const stack<_Tp,_Seq>& __x, const stack<_Tp,_Seq>& __y)
-{
- return __x._M_c < __y._M_c;
-}
-
-#ifdef __STL_FUNCTION_TMPL_PARTIAL_ORDER
-
-template <class _Tp, class _Seq>
-bool operator!=(const stack<_Tp,_Seq>& __x, const stack<_Tp,_Seq>& __y)
-{
- return !(__x == __y);
-}
-
-template <class _Tp, class _Seq>
-bool operator>(const stack<_Tp,_Seq>& __x, const stack<_Tp,_Seq>& __y)
-{
- return __y < __x;
-}
-
-template <class _Tp, class _Seq>
-bool operator<=(const stack<_Tp,_Seq>& __x, const stack<_Tp,_Seq>& __y)
-{
- return !(__y < __x);
-}
-
-template <class _Tp, class _Seq>
-bool operator>=(const stack<_Tp,_Seq>& __x, const stack<_Tp,_Seq>& __y)
-{
- return !(__x < __y);
-}
-
-#endif /* __STL_FUNCTION_TMPL_PARTIAL_ORDER */
-
-__STL_END_NAMESPACE
-
-#endif /* __SGI_STL_INTERNAL_STACK_H */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/stl_tempbuf.h b/contrib/libstdc++/stl/stl_tempbuf.h
deleted file mode 100644
index e1b2eadafcbf..000000000000
--- a/contrib/libstdc++/stl/stl_tempbuf.h
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- * Copyright (c) 1996,1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-/* NOTE: This is an internal header file, included by other STL headers.
- * You should not attempt to use it directly.
- */
-
-#ifndef __SGI_STL_INTERNAL_TEMPBUF_H
-#define __SGI_STL_INTERNAL_TEMPBUF_H
-
-
-__STL_BEGIN_NAMESPACE
-
-template <class _Tp>
-pair<_Tp*, ptrdiff_t>
-__get_temporary_buffer(ptrdiff_t __len, _Tp*)
-{
- if (__len > ptrdiff_t(INT_MAX / sizeof(_Tp)))
- __len = INT_MAX / sizeof(_Tp);
-
- while (__len > 0) {
- _Tp* __tmp = (_Tp*) malloc((size_t)__len * sizeof(_Tp));
- if (__tmp != 0)
- return pair<_Tp*, ptrdiff_t>(__tmp, __len);
- __len /= 2;
- }
-
- return pair<_Tp*, ptrdiff_t>((_Tp*)0, 0);
-}
-
-#ifdef __STL_EXPLICIT_FUNCTION_TMPL_ARGS
-
-template <class _Tp>
-inline pair<_Tp*, ptrdiff_t> get_temporary_buffer(ptrdiff_t __len) {
- return __get_temporary_buffer(__len, (_Tp*) 0);
-}
-
-#endif /* __STL_EXPLICIT_FUNCTION_TMPL_ARGS */
-
-// This overload is not required by the standard; it is an extension.
-// It is supported for backward compatibility with the HP STL, and
-// because not all compilers support the language feature (explicit
-// function template arguments) that is required for the standard
-// version of get_temporary_buffer.
-template <class _Tp>
-inline pair<_Tp*, ptrdiff_t> get_temporary_buffer(ptrdiff_t __len, _Tp*) {
- return __get_temporary_buffer(__len, (_Tp*) 0);
-}
-
-template <class _Tp>
-void return_temporary_buffer(_Tp* __p) {
- free(__p);
-}
-
-template <class _ForwardIterator, class _Tp>
-class _Temporary_buffer {
-private:
- ptrdiff_t _M_original_len;
- ptrdiff_t _M_len;
- _Tp* _M_buffer;
-
- void _M_allocate_buffer() {
- _M_original_len = _M_len;
- _M_buffer = 0;
-
- if (_M_len > (ptrdiff_t)(INT_MAX / sizeof(_Tp)))
- _M_len = INT_MAX / sizeof(_Tp);
-
- while (_M_len > 0) {
- _M_buffer = (_Tp*) malloc(_M_len * sizeof(_Tp));
- if (_M_buffer)
- break;
- _M_len /= 2;
- }
- }
-
- void _M_initialize_buffer(const _Tp&, __true_type) {}
- void _M_initialize_buffer(const _Tp& val, __false_type) {
- uninitialized_fill_n(_M_buffer, _M_len, val);
- }
-
-public:
- ptrdiff_t size() const { return _M_len; }
- ptrdiff_t requested_size() const { return _M_original_len; }
- _Tp* begin() { return _M_buffer; }
- _Tp* end() { return _M_buffer + _M_len; }
-
- _Temporary_buffer(_ForwardIterator __first, _ForwardIterator __last) {
- typedef typename __type_traits<_Tp>::has_trivial_default_constructor
- _Trivial;
- __STL_TRY {
- _M_len = 0;
- distance(__first, __last, _M_len);
- _M_allocate_buffer();
- if (_M_len > 0)
- _M_initialize_buffer(*__first, _Trivial());
- }
- __STL_UNWIND(free(_M_buffer); _M_buffer = 0; _M_len = 0);
- }
-
- ~_Temporary_buffer() {
- destroy(_M_buffer, _M_buffer + _M_len);
- free(_M_buffer);
- }
-
-private:
- // Disable copy constructor and assignment operator.
- _Temporary_buffer(const _Temporary_buffer&) {}
- void operator=(const _Temporary_buffer&) {}
-};
-
-// Class temporary_buffer is not part of the standard. It is an extension.
-
-template <class _ForwardIterator,
- class _Tp
-#ifdef __STL_CLASS_PARTIAL_SPECIALIZATION
- = typename iterator_traits<_ForwardIterator>::value_type
-#endif /* __STL_CLASS_PARTIAL_SPECIALIZATION */
- >
-struct temporary_buffer : public _Temporary_buffer<_ForwardIterator, _Tp>
-{
- temporary_buffer(_ForwardIterator __first, _ForwardIterator __last)
- : _Temporary_buffer<_ForwardIterator, _Tp>(__first, __last) {}
- ~temporary_buffer() {}
-};
-
-__STL_END_NAMESPACE
-
-#endif /* __SGI_STL_INTERNAL_TEMPBUF_H */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/stl_tree.h b/contrib/libstdc++/stl/stl_tree.h
deleted file mode 100644
index c82943f568ab..000000000000
--- a/contrib/libstdc++/stl/stl_tree.h
+++ /dev/null
@@ -1,1333 +0,0 @@
-/*
- *
- * Copyright (c) 1996,1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- */
-
-/* NOTE: This is an internal header file, included by other STL headers.
- * You should not attempt to use it directly.
- */
-
-#ifndef __SGI_STL_INTERNAL_TREE_H
-#define __SGI_STL_INTERNAL_TREE_H
-
-/*
-
-Red-black tree class, designed for use in implementing STL
-associative containers (set, multiset, map, and multimap). The
-insertion and deletion algorithms are based on those in Cormen,
-Leiserson, and Rivest, Introduction to Algorithms (MIT Press, 1990),
-except that
-
-(1) the header cell is maintained with links not only to the root
-but also to the leftmost node of the tree, to enable constant time
-begin(), and to the rightmost node of the tree, to enable linear time
-performance when used with the generic set algorithms (set_union,
-etc.);
-
-(2) when a node being deleted has two children its successor node is
-relinked into its place, rather than copied, so that the only
-iterators invalidated are those referring to the deleted node.
-
-*/
-
-#include <stl_algobase.h>
-#include <stl_alloc.h>
-#include <stl_construct.h>
-#include <stl_function.h>
-
-__STL_BEGIN_NAMESPACE
-
-#if defined(__sgi) && !defined(__GNUC__) && (_MIPS_SIM != _MIPS_SIM_ABI32)
-#pragma set woff 1375
-#endif
-
-typedef bool _Rb_tree_Color_type;
-const _Rb_tree_Color_type _S_rb_tree_red = false;
-const _Rb_tree_Color_type _S_rb_tree_black = true;
-
-struct _Rb_tree_node_base
-{
- typedef _Rb_tree_Color_type _Color_type;
- typedef _Rb_tree_node_base* _Base_ptr;
-
- _Color_type _M_color;
- _Base_ptr _M_parent;
- _Base_ptr _M_left;
- _Base_ptr _M_right;
-
- static _Base_ptr _S_minimum(_Base_ptr __x)
- {
- while (__x->_M_left != 0) __x = __x->_M_left;
- return __x;
- }
-
- static _Base_ptr _S_maximum(_Base_ptr __x)
- {
- while (__x->_M_right != 0) __x = __x->_M_right;
- return __x;
- }
-};
-
-template <class _Value>
-struct _Rb_tree_node : public _Rb_tree_node_base
-{
- typedef _Rb_tree_node<_Value>* _Link_type;
- _Value _M_value_field;
-};
-
-
-struct _Rb_tree_base_iterator
-{
- typedef _Rb_tree_node_base::_Base_ptr _Base_ptr;
- typedef bidirectional_iterator_tag iterator_category;
- typedef ptrdiff_t difference_type;
- _Base_ptr _M_node;
-
- void _M_increment()
- {
- if (_M_node->_M_right != 0) {
- _M_node = _M_node->_M_right;
- while (_M_node->_M_left != 0)
- _M_node = _M_node->_M_left;
- }
- else {
- _Base_ptr __y = _M_node->_M_parent;
- while (_M_node == __y->_M_right) {
- _M_node = __y;
- __y = __y->_M_parent;
- }
- if (_M_node->_M_right != __y)
- _M_node = __y;
- }
- }
-
- void _M_decrement()
- {
- if (_M_node->_M_color == _S_rb_tree_red &&
- _M_node->_M_parent->_M_parent == _M_node)
- _M_node = _M_node->_M_right;
- else if (_M_node->_M_left != 0) {
- _Base_ptr __y = _M_node->_M_left;
- while (__y->_M_right != 0)
- __y = __y->_M_right;
- _M_node = __y;
- }
- else {
- _Base_ptr __y = _M_node->_M_parent;
- while (_M_node == __y->_M_left) {
- _M_node = __y;
- __y = __y->_M_parent;
- }
- _M_node = __y;
- }
- }
-};
-
-template <class _Value, class _Ref, class _Ptr>
-struct _Rb_tree_iterator : public _Rb_tree_base_iterator
-{
- typedef _Value value_type;
- typedef _Ref reference;
- typedef _Ptr pointer;
- typedef _Rb_tree_iterator<_Value, _Value&, _Value*>
- iterator;
- typedef _Rb_tree_iterator<_Value, const _Value&, const _Value*>
- const_iterator;
- typedef _Rb_tree_iterator<_Value, _Ref, _Ptr>
- _Self;
- typedef _Rb_tree_node<_Value>* _Link_type;
-
- _Rb_tree_iterator() {}
- _Rb_tree_iterator(_Link_type __x) { _M_node = __x; }
- _Rb_tree_iterator(const iterator& __it) { _M_node = __it._M_node; }
-
- reference operator*() const { return _Link_type(_M_node)->_M_value_field; }
-#ifndef __SGI_STL_NO_ARROW_OPERATOR
- pointer operator->() const { return &(operator*()); }
-#endif /* __SGI_STL_NO_ARROW_OPERATOR */
-
- _Self& operator++() { _M_increment(); return *this; }
- _Self operator++(int) {
- _Self __tmp = *this;
- _M_increment();
- return __tmp;
- }
-
- _Self& operator--() { _M_decrement(); return *this; }
- _Self operator--(int) {
- _Self __tmp = *this;
- _M_decrement();
- return __tmp;
- }
-};
-
-inline bool operator==(const _Rb_tree_base_iterator& __x,
- const _Rb_tree_base_iterator& __y) {
- return __x._M_node == __y._M_node;
-}
-
-inline bool operator!=(const _Rb_tree_base_iterator& __x,
- const _Rb_tree_base_iterator& __y) {
- return __x._M_node != __y._M_node;
-}
-
-#ifndef __STL_CLASS_PARTIAL_SPECIALIZATION
-
-inline bidirectional_iterator_tag
-iterator_category(const _Rb_tree_base_iterator&) {
- return bidirectional_iterator_tag();
-}
-
-inline _Rb_tree_base_iterator::difference_type*
-distance_type(const _Rb_tree_base_iterator&) {
- return (_Rb_tree_base_iterator::difference_type*) 0;
-}
-
-template <class _Value, class _Ref, class _Ptr>
-inline _Value* value_type(const _Rb_tree_iterator<_Value, _Ref, _Ptr>&) {
- return (_Value*) 0;
-}
-
-#endif /* __STL_CLASS_PARTIAL_SPECIALIZATION */
-
-inline void
-_Rb_tree_rotate_left(_Rb_tree_node_base* __x, _Rb_tree_node_base*& __root)
-{
- _Rb_tree_node_base* __y = __x->_M_right;
- __x->_M_right = __y->_M_left;
- if (__y->_M_left !=0)
- __y->_M_left->_M_parent = __x;
- __y->_M_parent = __x->_M_parent;
-
- if (__x == __root)
- __root = __y;
- else if (__x == __x->_M_parent->_M_left)
- __x->_M_parent->_M_left = __y;
- else
- __x->_M_parent->_M_right = __y;
- __y->_M_left = __x;
- __x->_M_parent = __y;
-}
-
-inline void
-_Rb_tree_rotate_right(_Rb_tree_node_base* __x, _Rb_tree_node_base*& __root)
-{
- _Rb_tree_node_base* __y = __x->_M_left;
- __x->_M_left = __y->_M_right;
- if (__y->_M_right != 0)
- __y->_M_right->_M_parent = __x;
- __y->_M_parent = __x->_M_parent;
-
- if (__x == __root)
- __root = __y;
- else if (__x == __x->_M_parent->_M_right)
- __x->_M_parent->_M_right = __y;
- else
- __x->_M_parent->_M_left = __y;
- __y->_M_right = __x;
- __x->_M_parent = __y;
-}
-
-inline void
-_Rb_tree_rebalance(_Rb_tree_node_base* __x, _Rb_tree_node_base*& __root)
-{
- __x->_M_color = _S_rb_tree_red;
- while (__x != __root && __x->_M_parent->_M_color == _S_rb_tree_red) {
- if (__x->_M_parent == __x->_M_parent->_M_parent->_M_left) {
- _Rb_tree_node_base* __y = __x->_M_parent->_M_parent->_M_right;
- if (__y && __y->_M_color == _S_rb_tree_red) {
- __x->_M_parent->_M_color = _S_rb_tree_black;
- __y->_M_color = _S_rb_tree_black;
- __x->_M_parent->_M_parent->_M_color = _S_rb_tree_red;
- __x = __x->_M_parent->_M_parent;
- }
- else {
- if (__x == __x->_M_parent->_M_right) {
- __x = __x->_M_parent;
- _Rb_tree_rotate_left(__x, __root);
- }
- __x->_M_parent->_M_color = _S_rb_tree_black;
- __x->_M_parent->_M_parent->_M_color = _S_rb_tree_red;
- _Rb_tree_rotate_right(__x->_M_parent->_M_parent, __root);
- }
- }
- else {
- _Rb_tree_node_base* __y = __x->_M_parent->_M_parent->_M_left;
- if (__y && __y->_M_color == _S_rb_tree_red) {
- __x->_M_parent->_M_color = _S_rb_tree_black;
- __y->_M_color = _S_rb_tree_black;
- __x->_M_parent->_M_parent->_M_color = _S_rb_tree_red;
- __x = __x->_M_parent->_M_parent;
- }
- else {
- if (__x == __x->_M_parent->_M_left) {
- __x = __x->_M_parent;
- _Rb_tree_rotate_right(__x, __root);
- }
- __x->_M_parent->_M_color = _S_rb_tree_black;
- __x->_M_parent->_M_parent->_M_color = _S_rb_tree_red;
- _Rb_tree_rotate_left(__x->_M_parent->_M_parent, __root);
- }
- }
- }
- __root->_M_color = _S_rb_tree_black;
-}
-
-inline _Rb_tree_node_base*
-_Rb_tree_rebalance_for_erase(_Rb_tree_node_base* __z,
- _Rb_tree_node_base*& __root,
- _Rb_tree_node_base*& __leftmost,
- _Rb_tree_node_base*& __rightmost)
-{
- _Rb_tree_node_base* __y = __z;
- _Rb_tree_node_base* __x = 0;
- _Rb_tree_node_base* __x_parent = 0;
- if (__y->_M_left == 0) // __z has at most one non-null child. y == z.
- __x = __y->_M_right; // __x might be null.
- else
- if (__y->_M_right == 0) // __z has exactly one non-null child. y == z.
- __x = __y->_M_left; // __x is not null.
- else { // __z has two non-null children. Set __y to
- __y = __y->_M_right; // __z's successor. __x might be null.
- while (__y->_M_left != 0)
- __y = __y->_M_left;
- __x = __y->_M_right;
- }
- if (__y != __z) { // relink y in place of z. y is z's successor
- __z->_M_left->_M_parent = __y;
- __y->_M_left = __z->_M_left;
- if (__y != __z->_M_right) {
- __x_parent = __y->_M_parent;
- if (__x) __x->_M_parent = __y->_M_parent;
- __y->_M_parent->_M_left = __x; // __y must be a child of _M_left
- __y->_M_right = __z->_M_right;
- __z->_M_right->_M_parent = __y;
- }
- else
- __x_parent = __y;
- if (__root == __z)
- __root = __y;
- else if (__z->_M_parent->_M_left == __z)
- __z->_M_parent->_M_left = __y;
- else
- __z->_M_parent->_M_right = __y;
- __y->_M_parent = __z->_M_parent;
- __STD::swap(__y->_M_color, __z->_M_color);
- __y = __z;
- // __y now points to node to be actually deleted
- }
- else { // __y == __z
- __x_parent = __y->_M_parent;
- if (__x) __x->_M_parent = __y->_M_parent;
- if (__root == __z)
- __root = __x;
- else
- if (__z->_M_parent->_M_left == __z)
- __z->_M_parent->_M_left = __x;
- else
- __z->_M_parent->_M_right = __x;
- if (__leftmost == __z)
- if (__z->_M_right == 0) // __z->_M_left must be null also
- __leftmost = __z->_M_parent;
- // makes __leftmost == _M_header if __z == __root
- else
- __leftmost = _Rb_tree_node_base::_S_minimum(__x);
- if (__rightmost == __z)
- if (__z->_M_left == 0) // __z->_M_right must be null also
- __rightmost = __z->_M_parent;
- // makes __rightmost == _M_header if __z == __root
- else // __x == __z->_M_left
- __rightmost = _Rb_tree_node_base::_S_maximum(__x);
- }
- if (__y->_M_color != _S_rb_tree_red) {
- while (__x != __root && (__x == 0 || __x->_M_color == _S_rb_tree_black))
- if (__x == __x_parent->_M_left) {
- _Rb_tree_node_base* __w = __x_parent->_M_right;
- if (__w->_M_color == _S_rb_tree_red) {
- __w->_M_color = _S_rb_tree_black;
- __x_parent->_M_color = _S_rb_tree_red;
- _Rb_tree_rotate_left(__x_parent, __root);
- __w = __x_parent->_M_right;
- }
- if ((__w->_M_left == 0 ||
- __w->_M_left->_M_color == _S_rb_tree_black) &&
- (__w->_M_right == 0 ||
- __w->_M_right->_M_color == _S_rb_tree_black)) {
- __w->_M_color = _S_rb_tree_red;
- __x = __x_parent;
- __x_parent = __x_parent->_M_parent;
- } else {
- if (__w->_M_right == 0 ||
- __w->_M_right->_M_color == _S_rb_tree_black) {
- if (__w->_M_left) __w->_M_left->_M_color = _S_rb_tree_black;
- __w->_M_color = _S_rb_tree_red;
- _Rb_tree_rotate_right(__w, __root);
- __w = __x_parent->_M_right;
- }
- __w->_M_color = __x_parent->_M_color;
- __x_parent->_M_color = _S_rb_tree_black;
- if (__w->_M_right) __w->_M_right->_M_color = _S_rb_tree_black;
- _Rb_tree_rotate_left(__x_parent, __root);
- break;
- }
- } else { // same as above, with _M_right <-> _M_left.
- _Rb_tree_node_base* __w = __x_parent->_M_left;
- if (__w->_M_color == _S_rb_tree_red) {
- __w->_M_color = _S_rb_tree_black;
- __x_parent->_M_color = _S_rb_tree_red;
- _Rb_tree_rotate_right(__x_parent, __root);
- __w = __x_parent->_M_left;
- }
- if ((__w->_M_right == 0 ||
- __w->_M_right->_M_color == _S_rb_tree_black) &&
- (__w->_M_left == 0 ||
- __w->_M_left->_M_color == _S_rb_tree_black)) {
- __w->_M_color = _S_rb_tree_red;
- __x = __x_parent;
- __x_parent = __x_parent->_M_parent;
- } else {
- if (__w->_M_left == 0 ||
- __w->_M_left->_M_color == _S_rb_tree_black) {
- if (__w->_M_right) __w->_M_right->_M_color = _S_rb_tree_black;
- __w->_M_color = _S_rb_tree_red;
- _Rb_tree_rotate_left(__w, __root);
- __w = __x_parent->_M_left;
- }
- __w->_M_color = __x_parent->_M_color;
- __x_parent->_M_color = _S_rb_tree_black;
- if (__w->_M_left) __w->_M_left->_M_color = _S_rb_tree_black;
- _Rb_tree_rotate_right(__x_parent, __root);
- break;
- }
- }
- if (__x) __x->_M_color = _S_rb_tree_black;
- }
- return __y;
-}
-
-// Base class to encapsulate the differences between old SGI-style
-// allocators and standard-conforming allocators. In order to avoid
-// having an empty base class, we arbitrarily move one of rb_tree's
-// data members into the base class.
-
-#ifdef __STL_USE_STD_ALLOCATORS
-
-// _Base for general standard-conforming allocators.
-template <class _Tp, class _Alloc, bool _S_instanceless>
-class _Rb_tree_alloc_base {
-public:
- typedef typename _Alloc_traits<_Tp, _Alloc>::allocator_type allocator_type;
- allocator_type get_allocator() const { return _M_node_allocator; }
-
- _Rb_tree_alloc_base(const allocator_type& __a)
- : _M_node_allocator(__a), _M_header(0) {}
-
-protected:
- typename _Alloc_traits<_Rb_tree_node<_Tp>, _Alloc>::allocator_type
- _M_node_allocator;
- _Rb_tree_node<_Tp>* _M_header;
-
- _Rb_tree_node<_Tp>* _M_get_node()
- { return _M_node_allocator.allocate(1); }
- void _M_put_node(_Rb_tree_node<_Tp>* __p)
- { _M_node_allocator.deallocate(__p, 1); }
-};
-
-// Specialization for instanceless allocators.
-template <class _Tp, class _Alloc>
-class _Rb_tree_alloc_base<_Tp, _Alloc, true> {
-public:
- typedef typename _Alloc_traits<_Tp, _Alloc>::allocator_type allocator_type;
- allocator_type get_allocator() const { return allocator_type(); }
-
- _Rb_tree_alloc_base(const allocator_type&) : _M_header(0) {}
-
-protected:
- _Rb_tree_node<_Tp>* _M_header;
-
- typedef typename _Alloc_traits<_Rb_tree_node<_Tp>, _Alloc>::_Alloc_type
- _Alloc_type;
-
- _Rb_tree_node<_Tp>* _M_get_node()
- { return _Alloc_type::allocate(1); }
- void _M_put_node(_Rb_tree_node<_Tp>* __p)
- { _Alloc_type::deallocate(__p, 1); }
-};
-
-template <class _Tp, class _Alloc>
-struct _Rb_tree_base
- : public _Rb_tree_alloc_base<_Tp, _Alloc,
- _Alloc_traits<_Tp, _Alloc>::_S_instanceless>
-{
- typedef _Rb_tree_alloc_base<_Tp, _Alloc,
- _Alloc_traits<_Tp, _Alloc>::_S_instanceless>
- _Base;
- typedef typename _Base::allocator_type allocator_type;
-
- _Rb_tree_base(const allocator_type& __a)
- : _Base(__a) { _M_header = _M_get_node(); }
- ~_Rb_tree_base() { _M_put_node(_M_header); }
-
-};
-
-#else /* __STL_USE_STD_ALLOCATORS */
-
-template <class _Tp, class _Alloc>
-struct _Rb_tree_base
-{
- typedef _Alloc allocator_type;
- allocator_type get_allocator() const { return allocator_type(); }
-
- _Rb_tree_base(const allocator_type&)
- : _M_header(0) { _M_header = _M_get_node(); }
- ~_Rb_tree_base() { _M_put_node(_M_header); }
-
-protected:
- _Rb_tree_node<_Tp>* _M_header;
-
- typedef simple_alloc<_Rb_tree_node<_Tp>, _Alloc> _Alloc_type;
-
- _Rb_tree_node<_Tp>* _M_get_node()
- { return _Alloc_type::allocate(1); }
- void _M_put_node(_Rb_tree_node<_Tp>* __p)
- { _Alloc_type::deallocate(__p, 1); }
-};
-
-#endif /* __STL_USE_STD_ALLOCATORS */
-
-template <class _Key, class _Value, class _KeyOfValue, class _Compare,
- class _Alloc = __STL_DEFAULT_ALLOCATOR(_Value) >
-class _Rb_tree : protected _Rb_tree_base<_Value, _Alloc> {
- typedef _Rb_tree_base<_Value, _Alloc> _Base;
-protected:
- typedef _Rb_tree_node_base* _Base_ptr;
- typedef _Rb_tree_node<_Value> _Rb_tree_node;
- typedef _Rb_tree_Color_type _Color_type;
-public:
- typedef _Key key_type;
- typedef _Value value_type;
- typedef value_type* pointer;
- typedef const value_type* const_pointer;
- typedef value_type& reference;
- typedef const value_type& const_reference;
- typedef _Rb_tree_node* _Link_type;
- typedef size_t size_type;
- typedef ptrdiff_t difference_type;
-
- typedef typename _Base::allocator_type allocator_type;
- allocator_type get_allocator() const { return _Base::get_allocator(); }
-
-protected:
-#ifdef __STL_USE_NAMESPACES
- using _Base::_M_get_node;
- using _Base::_M_put_node;
- using _Base::_M_header;
-#endif /* __STL_USE_NAMESPACES */
-
-protected:
-
- _Link_type _M_create_node(const value_type& __x)
- {
- _Link_type __tmp = _M_get_node();
- __STL_TRY {
- construct(&__tmp->_M_value_field, __x);
- }
- __STL_UNWIND(_M_put_node(__tmp));
- return __tmp;
- }
-
- _Link_type _M_clone_node(_Link_type __x)
- {
- _Link_type __tmp = _M_create_node(__x->_M_value_field);
- __tmp->_M_color = __x->_M_color;
- __tmp->_M_left = 0;
- __tmp->_M_right = 0;
- return __tmp;
- }
-
- void destroy_node(_Link_type __p)
- {
- destroy(&__p->_M_value_field);
- _M_put_node(__p);
- }
-
-protected:
- size_type _M_node_count; // keeps track of size of tree
- _Compare _M_key_compare;
-
- _Link_type& _M_root() const
- { return (_Link_type&) _M_header->_M_parent; }
- _Link_type& _M_leftmost() const
- { return (_Link_type&) _M_header->_M_left; }
- _Link_type& _M_rightmost() const
- { return (_Link_type&) _M_header->_M_right; }
-
- static _Link_type& _S_left(_Link_type __x)
- { return (_Link_type&)(__x->_M_left); }
- static _Link_type& _S_right(_Link_type __x)
- { return (_Link_type&)(__x->_M_right); }
- static _Link_type& _S_parent(_Link_type __x)
- { return (_Link_type&)(__x->_M_parent); }
- static reference _S_value(_Link_type __x)
- { return __x->_M_value_field; }
- static const _Key& _S_key(_Link_type __x)
- { return _KeyOfValue()(_S_value(__x)); }
- static _Color_type& _S_color(_Link_type __x)
- { return (_Color_type&)(__x->_M_color); }
-
- static _Link_type& _S_left(_Base_ptr __x)
- { return (_Link_type&)(__x->_M_left); }
- static _Link_type& _S_right(_Base_ptr __x)
- { return (_Link_type&)(__x->_M_right); }
- static _Link_type& _S_parent(_Base_ptr __x)
- { return (_Link_type&)(__x->_M_parent); }
- static reference _S_value(_Base_ptr __x)
- { return ((_Link_type)__x)->_M_value_field; }
- static const _Key& _S_key(_Base_ptr __x)
- { return _KeyOfValue()(_S_value(_Link_type(__x)));}
- static _Color_type& _S_color(_Base_ptr __x)
- { return (_Color_type&)(_Link_type(__x)->_M_color); }
-
- static _Link_type _S_minimum(_Link_type __x)
- { return (_Link_type) _Rb_tree_node_base::_S_minimum(__x); }
-
- static _Link_type _S_maximum(_Link_type __x)
- { return (_Link_type) _Rb_tree_node_base::_S_maximum(__x); }
-
-public:
- typedef _Rb_tree_iterator<value_type, reference, pointer> iterator;
- typedef _Rb_tree_iterator<value_type, const_reference, const_pointer>
- const_iterator;
-
-#ifdef __STL_CLASS_PARTIAL_SPECIALIZATION
- typedef reverse_iterator<const_iterator> const_reverse_iterator;
- typedef reverse_iterator<iterator> reverse_iterator;
-#else /* __STL_CLASS_PARTIAL_SPECIALIZATION */
- typedef reverse_bidirectional_iterator<iterator, value_type, reference,
- difference_type>
- reverse_iterator;
- typedef reverse_bidirectional_iterator<const_iterator, value_type,
- const_reference, difference_type>
- const_reverse_iterator;
-#endif /* __STL_CLASS_PARTIAL_SPECIALIZATION */
-
-private:
- iterator _M_insert(_Base_ptr __x, _Base_ptr __y, const value_type& __v);
- _Link_type _M_copy(_Link_type __x, _Link_type __p);
- void _M_erase(_Link_type __x);
-
-public:
- // allocation/deallocation
- _Rb_tree()
- : _Base(allocator_type()), _M_node_count(0), _M_key_compare()
- { _M_empty_initialize(); }
-
- _Rb_tree(const _Compare& __comp)
- : _Base(allocator_type()), _M_node_count(0), _M_key_compare(__comp)
- { _M_empty_initialize(); }
-
- _Rb_tree(const _Compare& __comp, const allocator_type& __a)
- : _Base(__a), _M_node_count(0), _M_key_compare(__comp)
- { _M_empty_initialize(); }
-
- _Rb_tree(const _Rb_tree<_Key,_Value,_KeyOfValue,_Compare,_Alloc>& __x)
- : _Base(__x.get_allocator()),
- _M_node_count(0), _M_key_compare(__x._M_key_compare)
- {
- if (__x._M_root() == 0)
- _M_empty_initialize();
- else {
- _S_color(_M_header) = _S_rb_tree_red;
- _M_root() = _M_copy(__x._M_root(), _M_header);
- _M_leftmost() = _S_minimum(_M_root());
- _M_rightmost() = _S_maximum(_M_root());
- }
- _M_node_count = __x._M_node_count;
- }
- ~_Rb_tree() { clear(); }
- _Rb_tree<_Key,_Value,_KeyOfValue,_Compare,_Alloc>&
- operator=(const _Rb_tree<_Key,_Value,_KeyOfValue,_Compare,_Alloc>& __x);
-
-private:
- void _M_empty_initialize() {
- _S_color(_M_header) = _S_rb_tree_red; // used to distinguish header from
- // __root, in iterator.operator++
- _M_root() = 0;
- _M_leftmost() = _M_header;
- _M_rightmost() = _M_header;
- }
-
-public:
- // accessors:
- _Compare key_comp() const { return _M_key_compare; }
- iterator begin() { return _M_leftmost(); }
- const_iterator begin() const { return _M_leftmost(); }
- iterator end() { return _M_header; }
- const_iterator end() const { return _M_header; }
- reverse_iterator rbegin() { return reverse_iterator(end()); }
- const_reverse_iterator rbegin() const {
- return const_reverse_iterator(end());
- }
- reverse_iterator rend() { return reverse_iterator(begin()); }
- const_reverse_iterator rend() const {
- return const_reverse_iterator(begin());
- }
- bool empty() const { return _M_node_count == 0; }
- size_type size() const { return _M_node_count; }
- size_type max_size() const { return size_type(-1); }
-
- void swap(_Rb_tree<_Key,_Value,_KeyOfValue,_Compare,_Alloc>& __t) {
- __STD::swap(_M_header, __t._M_header);
- __STD::swap(_M_node_count, __t._M_node_count);
- __STD::swap(_M_key_compare, __t._M_key_compare);
- }
-
-public:
- // insert/erase
- pair<iterator,bool> insert_unique(const value_type& __x);
- iterator insert_equal(const value_type& __x);
-
- iterator insert_unique(iterator __position, const value_type& __x);
- iterator insert_equal(iterator __position, const value_type& __x);
-
-#ifdef __STL_MEMBER_TEMPLATES
- template <class _InputIterator>
- void insert_unique(_InputIterator __first, _InputIterator __last);
- template <class _InputIterator>
- void insert_equal(_InputIterator __first, _InputIterator __last);
-#else /* __STL_MEMBER_TEMPLATES */
- void insert_unique(const_iterator __first, const_iterator __last);
- void insert_unique(const value_type* __first, const value_type* __last);
- void insert_equal(const_iterator __first, const_iterator __last);
- void insert_equal(const value_type* __first, const value_type* __last);
-#endif /* __STL_MEMBER_TEMPLATES */
-
- void erase(iterator __position);
- size_type erase(const key_type& __x);
- void erase(iterator __first, iterator __last);
- void erase(const key_type* __first, const key_type* __last);
- void clear() {
- if (_M_node_count != 0) {
- _M_erase(_M_root());
- _M_leftmost() = _M_header;
- _M_root() = 0;
- _M_rightmost() = _M_header;
- _M_node_count = 0;
- }
- }
-
-public:
- // set operations:
- iterator find(const key_type& __x);
- const_iterator find(const key_type& __x) const;
- size_type count(const key_type& __x) const;
- iterator lower_bound(const key_type& __x);
- const_iterator lower_bound(const key_type& __x) const;
- iterator upper_bound(const key_type& __x);
- const_iterator upper_bound(const key_type& __x) const;
- pair<iterator,iterator> equal_range(const key_type& __x);
- pair<const_iterator, const_iterator> equal_range(const key_type& __x) const;
-
-public:
- // Debugging.
- bool __rb_verify() const;
-};
-
-template <class _Key, class _Value, class _KeyOfValue,
- class _Compare, class _Alloc>
-inline bool
-operator==(const _Rb_tree<_Key,_Value,_KeyOfValue,_Compare,_Alloc>& __x,
- const _Rb_tree<_Key,_Value,_KeyOfValue,_Compare,_Alloc>& __y)
-{
- return __x.size() == __y.size() &&
- equal(__x.begin(), __x.end(), __y.begin());
-}
-
-template <class _Key, class _Value, class _KeyOfValue,
- class _Compare, class _Alloc>
-inline bool
-operator<(const _Rb_tree<_Key,_Value,_KeyOfValue,_Compare,_Alloc>& __x,
- const _Rb_tree<_Key,_Value,_KeyOfValue,_Compare,_Alloc>& __y)
-{
- return lexicographical_compare(__x.begin(), __x.end(),
- __y.begin(), __y.end());
-}
-
-#ifdef __STL_FUNCTION_TMPL_PARTIAL_ORDER
-
-template <class _Key, class _Value, class _KeyOfValue,
- class _Compare, class _Alloc>
-inline void
-swap(_Rb_tree<_Key,_Value,_KeyOfValue,_Compare,_Alloc>& __x,
- _Rb_tree<_Key,_Value,_KeyOfValue,_Compare,_Alloc>& __y)
-{
- __x.swap(__y);
-}
-
-#endif /* __STL_FUNCTION_TMPL_PARTIAL_ORDER */
-
-
-template <class _Key, class _Value, class _KeyOfValue,
- class _Compare, class _Alloc>
-_Rb_tree<_Key,_Value,_KeyOfValue,_Compare,_Alloc>&
-_Rb_tree<_Key,_Value,_KeyOfValue,_Compare,_Alloc>
- ::operator=(const _Rb_tree<_Key,_Value,_KeyOfValue,_Compare,_Alloc>& __x)
-{
- if (this != &__x) {
- // Note that _Key may be a constant type.
- clear();
- _M_node_count = 0;
- _M_key_compare = __x._M_key_compare;
- if (__x._M_root() == 0) {
- _M_root() = 0;
- _M_leftmost() = _M_header;
- _M_rightmost() = _M_header;
- }
- else {
- _M_root() = _M_copy(__x._M_root(), _M_header);
- _M_leftmost() = _S_minimum(_M_root());
- _M_rightmost() = _S_maximum(_M_root());
- _M_node_count = __x._M_node_count;
- }
- }
- return *this;
-}
-
-template <class _Key, class _Value, class _KeyOfValue,
- class _Compare, class _Alloc>
-typename _Rb_tree<_Key,_Value,_KeyOfValue,_Compare,_Alloc>::iterator
-_Rb_tree<_Key,_Value,_KeyOfValue,_Compare,_Alloc>
- ::_M_insert(_Base_ptr __x_, _Base_ptr __y_, const _Value& __v)
-{
- _Link_type __x = (_Link_type) __x_;
- _Link_type __y = (_Link_type) __y_;
- _Link_type __z;
-
- if (__y == _M_header || __x != 0 ||
- _M_key_compare(_KeyOfValue()(__v), _S_key(__y))) {
- __z = _M_create_node(__v);
- _S_left(__y) = __z; // also makes _M_leftmost() = __z
- // when __y == _M_header
- if (__y == _M_header) {
- _M_root() = __z;
- _M_rightmost() = __z;
- }
- else if (__y == _M_leftmost())
- _M_leftmost() = __z; // maintain _M_leftmost() pointing to min node
- }
- else {
- __z = _M_create_node(__v);
- _S_right(__y) = __z;
- if (__y == _M_rightmost())
- _M_rightmost() = __z; // maintain _M_rightmost() pointing to max node
- }
- _S_parent(__z) = __y;
- _S_left(__z) = 0;
- _S_right(__z) = 0;
- _Rb_tree_rebalance(__z, _M_header->_M_parent);
- ++_M_node_count;
- return iterator(__z);
-}
-
-template <class _Key, class _Value, class _KeyOfValue,
- class _Compare, class _Alloc>
-typename _Rb_tree<_Key,_Value,_KeyOfValue,_Compare,_Alloc>::iterator
-_Rb_tree<_Key,_Value,_KeyOfValue,_Compare,_Alloc>
- ::insert_equal(const _Value& __v)
-{
- _Link_type __y = _M_header;
- _Link_type __x = _M_root();
- while (__x != 0) {
- __y = __x;
- __x = _M_key_compare(_KeyOfValue()(__v), _S_key(__x)) ?
- _S_left(__x) : _S_right(__x);
- }
- return _M_insert(__x, __y, __v);
-}
-
-
-template <class _Key, class _Value, class _KeyOfValue,
- class _Compare, class _Alloc>
-pair<typename _Rb_tree<_Key,_Value,_KeyOfValue,_Compare,_Alloc>::iterator,
- bool>
-_Rb_tree<_Key,_Value,_KeyOfValue,_Compare,_Alloc>
- ::insert_unique(const _Value& __v)
-{
- _Link_type __y = _M_header;
- _Link_type __x = _M_root();
- bool __comp = true;
- while (__x != 0) {
- __y = __x;
- __comp = _M_key_compare(_KeyOfValue()(__v), _S_key(__x));
- __x = __comp ? _S_left(__x) : _S_right(__x);
- }
- iterator __j = iterator(__y);
- if (__comp)
- if (__j == begin())
- return pair<iterator,bool>(_M_insert(__x, __y, __v), true);
- else
- --__j;
- if (_M_key_compare(_S_key(__j._M_node), _KeyOfValue()(__v)))
- return pair<iterator,bool>(_M_insert(__x, __y, __v), true);
- return pair<iterator,bool>(__j, false);
-}
-
-
-template <class _Key, class _Val, class _KeyOfValue,
- class _Compare, class _Alloc>
-typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator
-_Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>
- ::insert_unique(iterator __position, const _Val& __v)
-{
- if (__position._M_node == _M_header->_M_left) { // begin()
- if (size() > 0 &&
- _M_key_compare(_KeyOfValue()(__v), _S_key(__position._M_node)))
- return _M_insert(__position._M_node, __position._M_node, __v);
- // first argument just needs to be non-null
- else
- return insert_unique(__v).first;
- } else if (__position._M_node == _M_header) { // end()
- if (_M_key_compare(_S_key(_M_rightmost()), _KeyOfValue()(__v)))
- return _M_insert(0, _M_rightmost(), __v);
- else
- return insert_unique(__v).first;
- } else {
- iterator __before = __position;
- --__before;
- if (_M_key_compare(_S_key(__before._M_node), _KeyOfValue()(__v))
- && _M_key_compare(_KeyOfValue()(__v), _S_key(__position._M_node))) {
- if (_S_right(__before._M_node) == 0)
- return _M_insert(0, __before._M_node, __v);
- else
- return _M_insert(__position._M_node, __position._M_node, __v);
- // first argument just needs to be non-null
- } else
- return insert_unique(__v).first;
- }
-}
-
-template <class _Key, class _Val, class _KeyOfValue,
- class _Compare, class _Alloc>
-typename _Rb_tree<_Key,_Val,_KeyOfValue,_Compare,_Alloc>::iterator
-_Rb_tree<_Key,_Val,_KeyOfValue,_Compare,_Alloc>
- ::insert_equal(iterator __position, const _Val& __v)
-{
- if (__position._M_node == _M_header->_M_left) { // begin()
- if (size() > 0 &&
- _M_key_compare(_KeyOfValue()(__v), _S_key(__position._M_node)))
- return _M_insert(__position._M_node, __position._M_node, __v);
- // first argument just needs to be non-null
- else
- return insert_equal(__v);
- } else if (__position._M_node == _M_header) {// end()
- if (!_M_key_compare(_KeyOfValue()(__v), _S_key(_M_rightmost())))
- return _M_insert(0, _M_rightmost(), __v);
- else
- return insert_equal(__v);
- } else {
- iterator __before = __position;
- --__before;
- if (!_M_key_compare(_KeyOfValue()(__v), _S_key(__before._M_node))
- && !_M_key_compare(_S_key(__position._M_node), _KeyOfValue()(__v))) {
- if (_S_right(__before._M_node) == 0)
- return _M_insert(0, __before._M_node, __v);
- else
- return _M_insert(__position._M_node, __position._M_node, __v);
- // first argument just needs to be non-null
- } else
- return insert_equal(__v);
- }
-}
-
-#ifdef __STL_MEMBER_TEMPLATES
-
-template <class _Key, class _Val, class _KoV, class _Cmp, class _Alloc>
- template<class _II>
-void _Rb_tree<_Key,_Val,_KoV,_Cmp,_Alloc>
- ::insert_equal(_II __first, _II __last)
-{
- for ( ; __first != __last; ++__first)
- insert_equal(*__first);
-}
-
-template <class _Key, class _Val, class _KoV, class _Cmp, class _Alloc>
- template<class _II>
-void _Rb_tree<_Key,_Val,_KoV,_Cmp,_Alloc>
- ::insert_unique(_II __first, _II __last) {
- for ( ; __first != __last; ++__first)
- insert_unique(*__first);
-}
-
-#else /* __STL_MEMBER_TEMPLATES */
-
-template <class _Key, class _Val, class _KoV, class _Cmp, class _Alloc>
-void
-_Rb_tree<_Key,_Val,_KoV,_Cmp,_Alloc>
- ::insert_equal(const _Val* __first, const _Val* __last)
-{
- for ( ; __first != __last; ++__first)
- insert_equal(*__first);
-}
-
-template <class _Key, class _Val, class _KoV, class _Cmp, class _Alloc>
-void
-_Rb_tree<_Key,_Val,_KoV,_Cmp,_Alloc>
- ::insert_equal(const_iterator __first, const_iterator __last)
-{
- for ( ; __first != __last; ++__first)
- insert_equal(*__first);
-}
-
-template <class _Key, class _Val, class _KoV, class _Cmp, class _Alloc>
-void
-_Rb_tree<_Key,_Val,_KoV,_Cmp,_Alloc>
- ::insert_unique(const _Val* __first, const _Val* __last)
-{
- for ( ; __first != __last; ++__first)
- insert_unique(*__first);
-}
-
-template <class _Key, class _Val, class _KoV, class _Cmp, class _Alloc>
-void _Rb_tree<_Key,_Val,_KoV,_Cmp,_Alloc>
- ::insert_unique(const_iterator __first, const_iterator __last)
-{
- for ( ; __first != __last; ++__first)
- insert_unique(*__first);
-}
-
-#endif /* __STL_MEMBER_TEMPLATES */
-
-template <class _Key, class _Value, class _KeyOfValue,
- class _Compare, class _Alloc>
-inline void _Rb_tree<_Key,_Value,_KeyOfValue,_Compare,_Alloc>
- ::erase(iterator __position)
-{
- _Link_type __y =
- (_Link_type) _Rb_tree_rebalance_for_erase(__position._M_node,
- _M_header->_M_parent,
- _M_header->_M_left,
- _M_header->_M_right);
- destroy_node(__y);
- --_M_node_count;
-}
-
-template <class _Key, class _Value, class _KeyOfValue,
- class _Compare, class _Alloc>
-typename _Rb_tree<_Key,_Value,_KeyOfValue,_Compare,_Alloc>::size_type
-_Rb_tree<_Key,_Value,_KeyOfValue,_Compare,_Alloc>::erase(const _Key& __x)
-{
- pair<iterator,iterator> __p = equal_range(__x);
- size_type __n = 0;
- distance(__p.first, __p.second, __n);
- erase(__p.first, __p.second);
- return __n;
-}
-
-template <class _Key, class _Val, class _KoV, class _Compare, class _Alloc>
-typename _Rb_tree<_Key, _Val, _KoV, _Compare, _Alloc>::_Link_type
-_Rb_tree<_Key,_Val,_KoV,_Compare,_Alloc>
- ::_M_copy(_Link_type __x, _Link_type __p)
-{
- // structural copy. __x and __p must be non-null.
- _Link_type __top = _M_clone_node(__x);
- __top->_M_parent = __p;
-
- __STL_TRY {
- if (__x->_M_right)
- __top->_M_right = _M_copy(_S_right(__x), __top);
- __p = __top;
- __x = _S_left(__x);
-
- while (__x != 0) {
- _Link_type __y = _M_clone_node(__x);
- __p->_M_left = __y;
- __y->_M_parent = __p;
- if (__x->_M_right)
- __y->_M_right = _M_copy(_S_right(__x), __y);
- __p = __y;
- __x = _S_left(__x);
- }
- }
- __STL_UNWIND(_M_erase(__top));
-
- return __top;
-}
-
-template <class _Key, class _Value, class _KeyOfValue,
- class _Compare, class _Alloc>
-void _Rb_tree<_Key,_Value,_KeyOfValue,_Compare,_Alloc>
- ::_M_erase(_Link_type __x)
-{
- // erase without rebalancing
- while (__x != 0) {
- _M_erase(_S_right(__x));
- _Link_type __y = _S_left(__x);
- destroy_node(__x);
- __x = __y;
- }
-}
-
-template <class _Key, class _Value, class _KeyOfValue,
- class _Compare, class _Alloc>
-void _Rb_tree<_Key,_Value,_KeyOfValue,_Compare,_Alloc>
- ::erase(iterator __first, iterator __last)
-{
- if (__first == begin() && __last == end())
- clear();
- else
- while (__first != __last) erase(__first++);
-}
-
-template <class _Key, class _Value, class _KeyOfValue,
- class _Compare, class _Alloc>
-void _Rb_tree<_Key,_Value,_KeyOfValue,_Compare,_Alloc>
- ::erase(const _Key* __first, const _Key* __last)
-{
- while (__first != __last) erase(*__first++);
-}
-
-template <class _Key, class _Value, class _KeyOfValue,
- class _Compare, class _Alloc>
-typename _Rb_tree<_Key,_Value,_KeyOfValue,_Compare,_Alloc>::iterator
-_Rb_tree<_Key,_Value,_KeyOfValue,_Compare,_Alloc>::find(const _Key& __k)
-{
- _Link_type __y = _M_header; // Last node which is not less than __k.
- _Link_type __x = _M_root(); // Current node.
-
- while (__x != 0)
- if (!_M_key_compare(_S_key(__x), __k))
- __y = __x, __x = _S_left(__x);
- else
- __x = _S_right(__x);
-
- iterator __j = iterator(__y);
- return (__j == end() || _M_key_compare(__k, _S_key(__j._M_node))) ?
- end() : __j;
-}
-
-template <class _Key, class _Value, class _KeyOfValue,
- class _Compare, class _Alloc>
-typename _Rb_tree<_Key,_Value,_KeyOfValue,_Compare,_Alloc>::const_iterator
-_Rb_tree<_Key,_Value,_KeyOfValue,_Compare,_Alloc>::find(const _Key& __k) const
-{
- _Link_type __y = _M_header; /* Last node which is not less than __k. */
- _Link_type __x = _M_root(); /* Current node. */
-
- while (__x != 0) {
- if (!_M_key_compare(_S_key(__x), __k))
- __y = __x, __x = _S_left(__x);
- else
- __x = _S_right(__x);
- }
- const_iterator __j = const_iterator(__y);
- return (__j == end() || _M_key_compare(__k, _S_key(__j._M_node))) ?
- end() : __j;
-}
-
-template <class _Key, class _Value, class _KeyOfValue,
- class _Compare, class _Alloc>
-typename _Rb_tree<_Key,_Value,_KeyOfValue,_Compare,_Alloc>::size_type
-_Rb_tree<_Key,_Value,_KeyOfValue,_Compare,_Alloc>
- ::count(const _Key& __k) const
-{
- pair<const_iterator, const_iterator> __p = equal_range(__k);
- size_type __n = 0;
- distance(__p.first, __p.second, __n);
- return __n;
-}
-
-template <class _Key, class _Value, class _KeyOfValue,
- class _Compare, class _Alloc>
-typename _Rb_tree<_Key,_Value,_KeyOfValue,_Compare,_Alloc>::iterator
-_Rb_tree<_Key,_Value,_KeyOfValue,_Compare,_Alloc>
- ::lower_bound(const _Key& __k)
-{
- _Link_type __y = _M_header; /* Last node which is not less than __k. */
- _Link_type __x = _M_root(); /* Current node. */
-
- while (__x != 0)
- if (!_M_key_compare(_S_key(__x), __k))
- __y = __x, __x = _S_left(__x);
- else
- __x = _S_right(__x);
-
- return iterator(__y);
-}
-
-template <class _Key, class _Value, class _KeyOfValue,
- class _Compare, class _Alloc>
-typename _Rb_tree<_Key,_Value,_KeyOfValue,_Compare,_Alloc>::const_iterator
-_Rb_tree<_Key,_Value,_KeyOfValue,_Compare,_Alloc>
- ::lower_bound(const _Key& __k) const
-{
- _Link_type __y = _M_header; /* Last node which is not less than __k. */
- _Link_type __x = _M_root(); /* Current node. */
-
- while (__x != 0)
- if (!_M_key_compare(_S_key(__x), __k))
- __y = __x, __x = _S_left(__x);
- else
- __x = _S_right(__x);
-
- return const_iterator(__y);
-}
-
-template <class _Key, class _Value, class _KeyOfValue,
- class _Compare, class _Alloc>
-typename _Rb_tree<_Key,_Value,_KeyOfValue,_Compare,_Alloc>::iterator
-_Rb_tree<_Key,_Value,_KeyOfValue,_Compare,_Alloc>
- ::upper_bound(const _Key& __k)
-{
- _Link_type __y = _M_header; /* Last node which is greater than __k. */
- _Link_type __x = _M_root(); /* Current node. */
-
- while (__x != 0)
- if (_M_key_compare(__k, _S_key(__x)))
- __y = __x, __x = _S_left(__x);
- else
- __x = _S_right(__x);
-
- return iterator(__y);
-}
-
-template <class _Key, class _Value, class _KeyOfValue,
- class _Compare, class _Alloc>
-typename _Rb_tree<_Key,_Value,_KeyOfValue,_Compare,_Alloc>::const_iterator
-_Rb_tree<_Key,_Value,_KeyOfValue,_Compare,_Alloc>
- ::upper_bound(const _Key& __k) const
-{
- _Link_type __y = _M_header; /* Last node which is greater than __k. */
- _Link_type __x = _M_root(); /* Current node. */
-
- while (__x != 0)
- if (_M_key_compare(__k, _S_key(__x)))
- __y = __x, __x = _S_left(__x);
- else
- __x = _S_right(__x);
-
- return const_iterator(__y);
-}
-
-template <class _Key, class _Value, class _KeyOfValue,
- class _Compare, class _Alloc>
-inline
-pair<typename _Rb_tree<_Key,_Value,_KeyOfValue,_Compare,_Alloc>::iterator,
- typename _Rb_tree<_Key,_Value,_KeyOfValue,_Compare,_Alloc>::iterator>
-_Rb_tree<_Key,_Value,_KeyOfValue,_Compare,_Alloc>
- ::equal_range(const _Key& __k)
-{
- return pair<iterator, iterator>(lower_bound(__k), upper_bound(__k));
-}
-
-template <class _Key, class _Value, class _KoV, class _Compare, class _Alloc>
-inline
-pair<typename _Rb_tree<_Key, _Value, _KoV, _Compare, _Alloc>::const_iterator,
- typename _Rb_tree<_Key, _Value, _KoV, _Compare, _Alloc>::const_iterator>
-_Rb_tree<_Key, _Value, _KoV, _Compare, _Alloc>
- ::equal_range(const _Key& __k) const
-{
- return pair<const_iterator,const_iterator>(lower_bound(__k),
- upper_bound(__k));
-}
-
-inline int
-__black_count(_Rb_tree_node_base* __node, _Rb_tree_node_base* __root)
-{
- if (__node == 0)
- return 0;
- else {
- int __bc = __node->_M_color == _S_rb_tree_black ? 1 : 0;
- if (__node == __root)
- return __bc;
- else
- return __bc + __black_count(__node->_M_parent, __root);
- }
-}
-
-template <class _Key, class _Value, class _KeyOfValue,
- class _Compare, class _Alloc>
-bool _Rb_tree<_Key,_Value,_KeyOfValue,_Compare,_Alloc>::__rb_verify() const
-{
- if (_M_node_count == 0 || begin() == end())
- return _M_node_count == 0 && begin() == end() &&
- _M_header->_M_left == _M_header && _M_header->_M_right == _M_header;
-
- int __len = __black_count(_M_leftmost(), _M_root());
- for (const_iterator __it = begin(); __it != end(); ++__it) {
- _Link_type __x = (_Link_type) __it._M_node;
- _Link_type __L = _S_left(__x);
- _Link_type __R = _S_right(__x);
-
- if (__x->_M_color == _S_rb_tree_red)
- if ((__L && __L->_M_color == _S_rb_tree_red) ||
- (__R && __R->_M_color == _S_rb_tree_red))
- return false;
-
- if (__L && _M_key_compare(_S_key(__x), _S_key(__L)))
- return false;
- if (__R && _M_key_compare(_S_key(__R), _S_key(__x)))
- return false;
-
- if (!__L && !__R && __black_count(__x, _M_root()) != __len)
- return false;
- }
-
- if (_M_leftmost() != _Rb_tree_node_base::_S_minimum(_M_root()))
- return false;
- if (_M_rightmost() != _Rb_tree_node_base::_S_maximum(_M_root()))
- return false;
-
- return true;
-}
-
-// Class rb_tree is not part of the C++ standard. It is provided for
-// compatibility with the HP STL.
-
-template <class _Key, class _Value, class _KeyOfValue, class _Compare,
- class _Alloc = __STL_DEFAULT_ALLOCATOR(_Value) >
-struct rb_tree : public _Rb_tree<_Key, _Value, _KeyOfValue, _Compare, _Alloc>
-{
- typedef _Rb_tree<_Key, _Value, _KeyOfValue, _Compare, _Alloc> _Base;
- typedef typename _Base::allocator_type allocator_type;
-
- rb_tree(const _Compare& __comp = _Compare(),
- const allocator_type& __a = allocator_type())
- : _Base(__comp, __a) {}
-
- ~rb_tree() {}
-};
-
-#if defined(__sgi) && !defined(__GNUC__) && (_MIPS_SIM != _MIPS_SIM_ABI32)
-#pragma reset woff 1375
-#endif
-
-__STL_END_NAMESPACE
-
-#endif /* __SGI_STL_INTERNAL_TREE_H */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/stl_uninitialized.h b/contrib/libstdc++/stl/stl_uninitialized.h
deleted file mode 100644
index 3146c82a71c9..000000000000
--- a/contrib/libstdc++/stl/stl_uninitialized.h
+++ /dev/null
@@ -1,279 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- * Copyright (c) 1996,1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-/* NOTE: This is an internal header file, included by other STL headers.
- * You should not attempt to use it directly.
- */
-
-#ifndef __SGI_STL_INTERNAL_UNINITIALIZED_H
-#define __SGI_STL_INTERNAL_UNINITIALIZED_H
-
-__STL_BEGIN_NAMESPACE
-
-// uninitialized_copy
-
-// Valid if copy construction is equivalent to assignment, and if the
-// destructor is trivial.
-template <class _InputIter, class _ForwardIter>
-inline _ForwardIter
-__uninitialized_copy_aux(_InputIter __first, _InputIter __last,
- _ForwardIter __result,
- __true_type)
-{
- return copy(__first, __last, __result);
-}
-
-template <class _InputIter, class _ForwardIter>
-_ForwardIter
-__uninitialized_copy_aux(_InputIter __first, _InputIter __last,
- _ForwardIter __result,
- __false_type)
-{
- _ForwardIter __cur = __result;
- __STL_TRY {
- for ( ; __first != __last; ++__first, ++__cur)
- construct(&*__cur, *__first);
- return __cur;
- }
- __STL_UNWIND(destroy(__result, __cur));
-}
-
-
-template <class _InputIter, class _ForwardIter, class _Tp>
-inline _ForwardIter
-__uninitialized_copy(_InputIter __first, _InputIter __last,
- _ForwardIter __result, _Tp*)
-{
- typedef typename __type_traits<_Tp>::is_POD_type _Is_POD;
- return __uninitialized_copy_aux(__first, __last, __result, _Is_POD());
-}
-
-template <class _InputIter, class _ForwardIter>
-inline _ForwardIter
- uninitialized_copy(_InputIter __first, _InputIter __last,
- _ForwardIter __result)
-{
- return __uninitialized_copy(__first, __last, __result,
- __VALUE_TYPE(__result));
-}
-
-inline char* uninitialized_copy(const char* __first, const char* __last,
- char* __result) {
- memmove(__result, __first, __last - __first);
- return __result + (__last - __first);
-}
-
-inline wchar_t*
-uninitialized_copy(const wchar_t* __first, const wchar_t* __last,
- wchar_t* __result)
-{
- memmove(__result, __first, sizeof(wchar_t) * (__last - __first));
- return __result + (__last - __first);
-}
-
-// uninitialized_copy_n (not part of the C++ standard)
-
-template <class _InputIter, class _Size, class _ForwardIter>
-pair<_InputIter, _ForwardIter>
-__uninitialized_copy_n(_InputIter __first, _Size __count,
- _ForwardIter __result,
- input_iterator_tag)
-{
- _ForwardIter __cur = __result;
- __STL_TRY {
- for ( ; __count > 0 ; --__count, ++__first, ++__cur)
- construct(&*__cur, *__first);
- return pair<_InputIter, _ForwardIter>(__first, __cur);
- }
- __STL_UNWIND(destroy(__result, __cur));
-}
-
-template <class _RandomAccessIter, class _Size, class _ForwardIter>
-inline pair<_RandomAccessIter, _ForwardIter>
-__uninitialized_copy_n(_RandomAccessIter __first, _Size __count,
- _ForwardIter __result,
- random_access_iterator_tag) {
- _RandomAccessIter __last = __first + __count;
- return pair<_RandomAccessIter, _ForwardIter>(
- __last,
- uninitialized_copy(__first, __last, __result));
-}
-
-template <class _InputIter, class _Size, class _ForwardIter>
-inline pair<_InputIter, _ForwardIter>
-__uninitialized_copy_n(_InputIter __first, _Size __count,
- _ForwardIter __result) {
- return __uninitialized_copy_n(__first, __count, __result,
- __ITERATOR_CATEGORY(__first));
-}
-
-template <class _InputIter, class _Size, class _ForwardIter>
-inline pair<_InputIter, _ForwardIter>
-uninitialized_copy_n(_InputIter __first, _Size __count,
- _ForwardIter __result) {
- return __uninitialized_copy_n(__first, __count, __result,
- __ITERATOR_CATEGORY(__first));
-}
-
-// Valid if copy construction is equivalent to assignment, and if the
-// destructor is trivial.
-template <class _ForwardIter, class _Tp>
-inline void
-__uninitialized_fill_aux(_ForwardIter __first, _ForwardIter __last,
- const _Tp& __x, __true_type)
-{
- fill(__first, __last, __x);
-}
-
-template <class _ForwardIter, class _Tp>
-void
-__uninitialized_fill_aux(_ForwardIter __first, _ForwardIter __last,
- const _Tp& __x, __false_type)
-{
- _ForwardIter __cur = __first;
- __STL_TRY {
- for ( ; __cur != __last; ++__cur)
- construct(&*__cur, __x);
- }
- __STL_UNWIND(destroy(__first, __cur));
-}
-
-template <class _ForwardIter, class _Tp, class _Tp1>
-inline void __uninitialized_fill(_ForwardIter __first,
- _ForwardIter __last, const _Tp& __x, _Tp1*)
-{
- typedef typename __type_traits<_Tp1>::is_POD_type _Is_POD;
- __uninitialized_fill_aux(__first, __last, __x, _Is_POD());
-
-}
-
-template <class _ForwardIter, class _Tp>
-inline void uninitialized_fill(_ForwardIter __first,
- _ForwardIter __last,
- const _Tp& __x)
-{
- __uninitialized_fill(__first, __last, __x, __VALUE_TYPE(__first));
-}
-
-// Valid if copy construction is equivalent to assignment, and if the
-// destructor is trivial.
-template <class _ForwardIter, class _Size, class _Tp>
-inline _ForwardIter
-__uninitialized_fill_n_aux(_ForwardIter __first, _Size __n,
- const _Tp& __x, __true_type)
-{
- return fill_n(__first, __n, __x);
-}
-
-template <class _ForwardIter, class _Size, class _Tp>
-_ForwardIter
-__uninitialized_fill_n_aux(_ForwardIter __first, _Size __n,
- const _Tp& __x, __false_type)
-{
- _ForwardIter __cur = __first;
- __STL_TRY {
- for ( ; __n > 0; --__n, ++__cur)
- construct(&*__cur, __x);
- return __cur;
- }
- __STL_UNWIND(destroy(__first, __cur));
-}
-
-template <class _ForwardIter, class _Size, class _Tp, class _Tp1>
-inline _ForwardIter
-__uninitialized_fill_n(_ForwardIter __first, _Size __n, const _Tp& __x, _Tp1*)
-{
- typedef typename __type_traits<_Tp1>::is_POD_type _Is_POD;
- return __uninitialized_fill_n_aux(__first, __n, __x, _Is_POD());
-}
-
-template <class _ForwardIter, class _Size, class _Tp>
-inline _ForwardIter
-uninitialized_fill_n(_ForwardIter __first, _Size __n, const _Tp& __x)
-{
- return __uninitialized_fill_n(__first, __n, __x, __VALUE_TYPE(__first));
-}
-
-// Extensions: __uninitialized_copy_copy, __uninitialized_copy_fill,
-// __uninitialized_fill_copy.
-
-// __uninitialized_copy_copy
-// Copies [first1, last1) into [result, result + (last1 - first1)), and
-// copies [first2, last2) into
-// [result, result + (last1 - first1) + (last2 - first2)).
-
-template <class _InputIter1, class _InputIter2, class _ForwardIter>
-inline _ForwardIter
-__uninitialized_copy_copy(_InputIter1 __first1, _InputIter1 __last1,
- _InputIter2 __first2, _InputIter2 __last2,
- _ForwardIter __result)
-{
- _ForwardIter __mid = uninitialized_copy(__first1, __last1, __result);
- __STL_TRY {
- return uninitialized_copy(__first2, __last2, __mid);
- }
- __STL_UNWIND(destroy(__result, __mid));
-}
-
-// __uninitialized_fill_copy
-// Fills [result, mid) with x, and copies [first, last) into
-// [mid, mid + (last - first)).
-template <class _ForwardIter, class _Tp, class _InputIter>
-inline _ForwardIter
-__uninitialized_fill_copy(_ForwardIter __result, _ForwardIter __mid,
- const _Tp& __x,
- _InputIter __first, _InputIter __last)
-{
- uninitialized_fill(__result, __mid, __x);
- __STL_TRY {
- return uninitialized_copy(__first, __last, __mid);
- }
- __STL_UNWIND(destroy(__result, __mid));
-}
-
-// __uninitialized_copy_fill
-// Copies [first1, last1) into [first2, first2 + (last1 - first1)), and
-// fills [first2 + (last1 - first1), last2) with x.
-template <class _InputIter, class _ForwardIter, class _Tp>
-inline void
-__uninitialized_copy_fill(_InputIter __first1, _InputIter __last1,
- _ForwardIter __first2, _ForwardIter __last2,
- const _Tp& __x)
-{
- _ForwardIter __mid2 = uninitialized_copy(__first1, __last1, __first2);
- __STL_TRY {
- uninitialized_fill(__mid2, __last2, __x);
- }
- __STL_UNWIND(destroy(__first2, __mid2));
-}
-
-__STL_END_NAMESPACE
-
-#endif /* __SGI_STL_INTERNAL_UNINITIALIZED_H */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/stl_vector.h b/contrib/libstdc++/stl/stl_vector.h
deleted file mode 100644
index d1149e9af66d..000000000000
--- a/contrib/libstdc++/stl/stl_vector.h
+++ /dev/null
@@ -1,823 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- * Copyright (c) 1996
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-/* NOTE: This is an internal header file, included by other STL headers.
- * You should not attempt to use it directly.
- */
-
-#ifndef __SGI_STL_INTERNAL_VECTOR_H
-#define __SGI_STL_INTERNAL_VECTOR_H
-
-__STL_BEGIN_NAMESPACE
-
-#if defined(__sgi) && !defined(__GNUC__) && (_MIPS_SIM != _MIPS_SIM_ABI32)
-#pragma set woff 1174
-#pragma set woff 1375
-#endif
-
-// The vector base class serves two purposes. First, its constructor
-// and destructor allocate (but don't initialize) storage. This makes
-// exception safety easier. Second, the base class encapsulates all of
-// the differences between SGI-style allocators and standard-conforming
-// allocators.
-
-#ifdef __STL_USE_STD_ALLOCATORS
-
-// Base class for ordinary allocators.
-template <class _Tp, class _Allocator, bool _IsStatic>
-class _Vector_alloc_base {
-public:
- typedef typename _Alloc_traits<_Tp, _Allocator>::allocator_type
- allocator_type;
- allocator_type get_allocator() const { return _M_data_allocator; }
-
- _Vector_alloc_base(const allocator_type& __a)
- : _M_data_allocator(__a), _M_start(0), _M_finish(0), _M_end_of_storage(0)
- {}
-
-protected:
- allocator_type _M_data_allocator;
- _Tp* _M_start;
- _Tp* _M_finish;
- _Tp* _M_end_of_storage;
-
- _Tp* _M_allocate(size_t __n)
- { return _M_data_allocator.allocate(__n); }
- void _M_deallocate(_Tp* __p, size_t __n)
- { if (__p) _M_data_allocator.deallocate(__p, __n); }
-};
-
-// Specialization for allocators that have the property that we don't
-// actually have to store an allocator object.
-template <class _Tp, class _Allocator>
-class _Vector_alloc_base<_Tp, _Allocator, true> {
-public:
- typedef typename _Alloc_traits<_Tp, _Allocator>::allocator_type
- allocator_type;
- allocator_type get_allocator() const { return allocator_type(); }
-
- _Vector_alloc_base(const allocator_type&)
- : _M_start(0), _M_finish(0), _M_end_of_storage(0)
- {}
-
-protected:
- _Tp* _M_start;
- _Tp* _M_finish;
- _Tp* _M_end_of_storage;
-
- typedef typename _Alloc_traits<_Tp, _Allocator>::_Alloc_type _Alloc_type;
- _Tp* _M_allocate(size_t __n)
- { return _Alloc_type::allocate(__n); }
- void _M_deallocate(_Tp* __p, size_t __n)
- { _Alloc_type::deallocate(__p, __n);}
-};
-
-template <class _Tp, class _Alloc>
-struct _Vector_base
- : public _Vector_alloc_base<_Tp, _Alloc,
- _Alloc_traits<_Tp, _Alloc>::_S_instanceless>
-{
- typedef _Vector_alloc_base<_Tp, _Alloc,
- _Alloc_traits<_Tp, _Alloc>::_S_instanceless>
- _Base;
- typedef typename _Base::allocator_type allocator_type;
-
- _Vector_base(const allocator_type& __a) : _Base(__a) {}
- _Vector_base(size_t __n, const allocator_type& __a) : _Base(__a) {
- _M_start = _M_allocate(__n);
- _M_finish = _M_start;
- _M_end_of_storage = _M_start + __n;
- }
-
- ~_Vector_base() { _M_deallocate(_M_start, _M_end_of_storage - _M_start); }
-};
-
-#else /* __STL_USE_STD_ALLOCATORS */
-
-template <class _Tp, class _Alloc>
-class _Vector_base {
-public:
- typedef _Alloc allocator_type;
- allocator_type get_allocator() const { return allocator_type(); }
-
- _Vector_base(const _Alloc&)
- : _M_start(0), _M_finish(0), _M_end_of_storage(0) {}
- _Vector_base(size_t __n, const _Alloc&)
- : _M_start(0), _M_finish(0), _M_end_of_storage(0)
- {
- _M_start = _M_allocate(__n);
- _M_finish = _M_start;
- _M_end_of_storage = _M_start + __n;
- }
-
- ~_Vector_base() { _M_deallocate(_M_start, _M_end_of_storage - _M_start); }
-
-protected:
- _Tp* _M_start;
- _Tp* _M_finish;
- _Tp* _M_end_of_storage;
-
- typedef simple_alloc<_Tp, _Alloc> _M_data_allocator;
- _Tp* _M_allocate(size_t __n)
- { return _M_data_allocator::allocate(__n); }
- void _M_deallocate(_Tp* __p, size_t __n)
- { _M_data_allocator::deallocate(__p, __n); }
-};
-
-#endif /* __STL_USE_STD_ALLOCATORS */
-
-template <class _Tp, class _Alloc = __STL_DEFAULT_ALLOCATOR(_Tp) >
-class vector : protected _Vector_base<_Tp, _Alloc>
-{
-private:
- typedef _Vector_base<_Tp, _Alloc> _Base;
-public:
- typedef _Tp value_type;
- typedef value_type* pointer;
- typedef const value_type* const_pointer;
- typedef value_type* iterator;
- typedef const value_type* const_iterator;
- typedef value_type& reference;
- typedef const value_type& const_reference;
- typedef size_t size_type;
- typedef ptrdiff_t difference_type;
-
- typedef typename _Base::allocator_type allocator_type;
- allocator_type get_allocator() const { return _Base::get_allocator(); }
-
-#ifdef __STL_CLASS_PARTIAL_SPECIALIZATION
- typedef reverse_iterator<const_iterator> const_reverse_iterator;
- typedef reverse_iterator<iterator> reverse_iterator;
-#else /* __STL_CLASS_PARTIAL_SPECIALIZATION */
- typedef reverse_iterator<const_iterator, value_type, const_reference,
- difference_type> const_reverse_iterator;
- typedef reverse_iterator<iterator, value_type, reference, difference_type>
- reverse_iterator;
-#endif /* __STL_CLASS_PARTIAL_SPECIALIZATION */
-
-protected:
-#ifdef __STL_HAS_NAMESPACES
- using _Base::_M_allocate;
- using _Base::_M_deallocate;
- using _Base::_M_start;
- using _Base::_M_finish;
- using _Base::_M_end_of_storage;
-#endif /* __STL_HAS_NAMESPACES */
-
-protected:
- void _M_insert_aux(iterator __position, const _Tp& __x);
- void _M_insert_aux(iterator __position);
-
-public:
- iterator begin() { return _M_start; }
- const_iterator begin() const { return _M_start; }
- iterator end() { return _M_finish; }
- const_iterator end() const { return _M_finish; }
-
- reverse_iterator rbegin()
- { return reverse_iterator(end()); }
- const_reverse_iterator rbegin() const
- { return const_reverse_iterator(end()); }
- reverse_iterator rend()
- { return reverse_iterator(begin()); }
- const_reverse_iterator rend() const
- { return const_reverse_iterator(begin()); }
-
- size_type size() const
- { return size_type(end() - begin()); }
- size_type max_size() const
- { return size_type(-1) / sizeof(_Tp); }
- size_type capacity() const
- { return size_type(_M_end_of_storage - begin()); }
- bool empty() const
- { return begin() == end(); }
-
- reference operator[](size_type __n) { return *(begin() + __n); }
- const_reference operator[](size_type __n) const { return *(begin() + __n); }
-
- explicit vector(const allocator_type& __a = allocator_type())
- : _Base(__a) {}
-
- vector(size_type __n, const _Tp& __value,
- const allocator_type& __a = allocator_type())
- : _Base(__n, __a)
- { _M_finish = uninitialized_fill_n(_M_start, __n, __value); }
-
- explicit vector(size_type __n)
- : _Base(__n, allocator_type())
- { _M_finish = uninitialized_fill_n(_M_start, __n, _Tp()); }
-
- vector(const vector<_Tp, _Alloc>& __x)
- : _Base(__x.size(), __x.get_allocator())
- { _M_finish = uninitialized_copy(__x.begin(), __x.end(), _M_start); }
-
-#ifdef __STL_MEMBER_TEMPLATES
- // Check whether it's an integral type. If so, it's not an iterator.
- template <class _InputIterator>
- vector(_InputIterator __first, _InputIterator __last,
- const allocator_type& __a = allocator_type()) : _Base(__a) {
- typedef typename _Is_integer<_InputIterator>::_Integral _Integral;
- _M_initialize_aux(__first, __last, _Integral());
- }
-
- template <class _Integer>
- void _M_initialize_aux(_Integer __n, _Integer __value, __true_type) {
- _M_start = _M_allocate(__n);
- _M_end_of_storage = _M_start + __n;
- _M_finish = uninitialized_fill_n(_M_start, __n, __value);
- }
-
- template <class _InputIterator>
- void _M_initialize_aux(_InputIterator __first, _InputIterator __last,
- __false_type) {
- _M_range_initialize(__first, __last, __ITERATOR_CATEGORY(__first));
- }
-
-#else
- vector(const _Tp* __first, const _Tp* __last,
- const allocator_type& __a = allocator_type())
- : _Base(__last - __first, __a)
- { _M_finish = uninitialized_copy(__first, __last, _M_start); }
-#endif /* __STL_MEMBER_TEMPLATES */
-
- ~vector() { destroy(_M_start, _M_finish); }
-
- vector<_Tp, _Alloc>& operator=(const vector<_Tp, _Alloc>& __x);
- void reserve(size_type __n) {
- if (capacity() < __n) {
- const size_type __old_size = size();
- iterator __tmp = _M_allocate_and_copy(__n, _M_start, _M_finish);
- destroy(_M_start, _M_finish);
- _M_deallocate(_M_start, _M_end_of_storage - _M_start);
- _M_start = __tmp;
- _M_finish = __tmp + __old_size;
- _M_end_of_storage = _M_start + __n;
- }
- }
-
- // assign(), a generalized assignment member function. Two
- // versions: one that takes a count, and one that takes a range.
- // The range version is a member template, so we dispatch on whether
- // or not the type is an integer.
-
- void assign(size_type __n, const _Tp& __val);
-
-#ifdef __STL_MEMBER_TEMPLATES
-
- template <class _InputIterator>
- void assign(_InputIterator __first, _InputIterator __last) {
- typedef typename _Is_integer<_InputIterator>::_Integral _Integral;
- _M_assign_dispatch(__first, __last, _Integral());
- }
-
- template <class _Integer>
- void _M_assign_dispatch(_Integer __n, _Integer __val, __true_type)
- { assign((size_type) __n, (_Tp) __val); }
-
- template <class _InputIter>
- void _M_assign_dispatch(_InputIter __first, _InputIter __last, __false_type)
- { _M_assign_aux(__first, __last, __ITERATOR_CATEGORY(__first)); }
-
- template <class _InputIterator>
- void _M_assign_aux(_InputIterator __first, _InputIterator __last,
- input_iterator_tag);
-
- template <class _ForwardIterator>
- void _M_assign_aux(_ForwardIterator __first, _ForwardIterator __last,
- forward_iterator_tag);
-
-#endif /* __STL_MEMBER_TEMPLATES */
-
- reference front() { return *begin(); }
- const_reference front() const { return *begin(); }
- reference back() { return *(end() - 1); }
- const_reference back() const { return *(end() - 1); }
-
- void push_back(const _Tp& __x) {
- if (_M_finish != _M_end_of_storage) {
- construct(_M_finish, __x);
- ++_M_finish;
- }
- else
- _M_insert_aux(end(), __x);
- }
- void push_back() {
- if (_M_finish != _M_end_of_storage) {
- construct(_M_finish);
- ++_M_finish;
- }
- else
- _M_insert_aux(end());
- }
- void swap(vector<_Tp, _Alloc>& __x) {
- __STD::swap(_M_start, __x._M_start);
- __STD::swap(_M_finish, __x._M_finish);
- __STD::swap(_M_end_of_storage, __x._M_end_of_storage);
- }
-
- iterator insert(iterator __position, const _Tp& __x) {
- size_type __n = __position - begin();
- if (_M_finish != _M_end_of_storage && __position == end()) {
- construct(_M_finish, __x);
- ++_M_finish;
- }
- else
- _M_insert_aux(__position, __x);
- return begin() + __n;
- }
- iterator insert(iterator __position) {
- size_type __n = __position - begin();
- if (_M_finish != _M_end_of_storage && __position == end()) {
- construct(_M_finish);
- ++_M_finish;
- }
- else
- _M_insert_aux(__position);
- return begin() + __n;
- }
-#ifdef __STL_MEMBER_TEMPLATES
- // Check whether it's an integral type. If so, it's not an iterator.
- template <class _InputIterator>
- void insert(iterator __pos, _InputIterator __first, _InputIterator __last) {
- typedef typename _Is_integer<_InputIterator>::_Integral _Integral;
- _M_insert_dispatch(__pos, __first, __last, _Integral());
- }
-
- template <class _Integer>
- void _M_insert_dispatch(iterator __pos, _Integer __n, _Integer __val,
- __true_type) {
- insert(__pos, (size_type) __n, (_Tp) __val);
- }
-
- template <class _InputIterator>
- void _M_insert_dispatch(iterator __pos,
- _InputIterator __first, _InputIterator __last,
- __false_type) {
- _M_range_insert(__pos, __first, __last, __ITERATOR_CATEGORY(__first));
- }
-#else /* __STL_MEMBER_TEMPLATES */
- void insert(iterator __position,
- const_iterator __first, const_iterator __last);
-#endif /* __STL_MEMBER_TEMPLATES */
-
- void insert (iterator __pos, size_type __n, const _Tp& __x);
-
- void pop_back() {
- --_M_finish;
- destroy(_M_finish);
- }
- iterator erase(iterator __position) {
- if (__position + 1 != end())
- copy(__position + 1, _M_finish, __position);
- --_M_finish;
- destroy(_M_finish);
- return __position;
- }
- iterator erase(iterator __first, iterator __last) {
- iterator __i = copy(__last, _M_finish, __first);
- destroy(__i, _M_finish);
- _M_finish = _M_finish - (__last - __first);
- return __first;
- }
-
- void resize(size_type __new_size, const _Tp& __x) {
- if (__new_size < size())
- erase(begin() + __new_size, end());
- else
- insert(end(), __new_size - size(), __x);
- }
- void resize(size_type __new_size) { resize(__new_size, _Tp()); }
- void clear() { erase(begin(), end()); }
-
-protected:
-
-#ifdef __STL_MEMBER_TEMPLATES
- template <class _ForwardIterator>
- iterator _M_allocate_and_copy(size_type __n, _ForwardIterator __first,
- _ForwardIterator __last)
-{
- iterator __result = _M_allocate(__n);
- __STL_TRY {
- uninitialized_copy(__first, __last, __result);
- return __result;
- }
- __STL_UNWIND(_M_deallocate(__result, __n));
- }
-#else /* __STL_MEMBER_TEMPLATES */
- iterator _M_allocate_and_copy(size_type __n, const_iterator __first,
- const_iterator __last)
- {
- iterator __result = _M_allocate(__n);
- __STL_TRY {
- uninitialized_copy(__first, __last, __result);
- return __result;
- }
- __STL_UNWIND(_M_deallocate(__result, __n));
- }
-#endif /* __STL_MEMBER_TEMPLATES */
-
-
-#ifdef __STL_MEMBER_TEMPLATES
- template <class _InputIterator>
- void _M_range_initialize(_InputIterator __first,
- _InputIterator __last, input_iterator_tag)
- {
- for ( ; __first != __last; ++__first)
- push_back(*__first);
- }
-
- // This function is only called by the constructor.
- template <class _ForwardIterator>
- void _M_range_initialize(_ForwardIterator __first,
- _ForwardIterator __last, forward_iterator_tag)
- {
- size_type __n = 0;
- distance(__first, __last, __n);
- _M_start = _M_allocate(__n);
- _M_end_of_storage = _M_start + __n;
- _M_finish = uninitialized_copy(__first, __last, _M_start);
- }
-
- template <class _InputIterator>
- void _M_range_insert(iterator __pos,
- _InputIterator __first, _InputIterator __last,
- input_iterator_tag);
-
- template <class _ForwardIterator>
- void _M_range_insert(iterator __pos,
- _ForwardIterator __first, _ForwardIterator __last,
- forward_iterator_tag);
-
-#endif /* __STL_MEMBER_TEMPLATES */
-};
-
-template <class _Tp, class _Alloc>
-inline bool
-operator==(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)
-{
- return __x.size() == __y.size() &&
- equal(__x.begin(), __x.end(), __y.begin());
-}
-
-template <class _Tp, class _Alloc>
-inline bool
-operator<(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y)
-{
- return lexicographical_compare(__x.begin(), __x.end(),
- __y.begin(), __y.end());
-}
-
-#ifdef __STL_FUNCTION_TMPL_PARTIAL_ORDER
-
-template <class _Tp, class _Alloc>
-inline void swap(vector<_Tp, _Alloc>& __x, vector<_Tp, _Alloc>& __y)
-{
- __x.swap(__y);
-}
-
-#endif /* __STL_FUNCTION_TMPL_PARTIAL_ORDER */
-
-template <class _Tp, class _Alloc>
-vector<_Tp,_Alloc>&
-vector<_Tp,_Alloc>::operator=(const vector<_Tp, _Alloc>& __x)
-{
- if (&__x != this) {
- const size_type __xlen = __x.size();
- if (__xlen > capacity()) {
- iterator __tmp = _M_allocate_and_copy(__xlen, __x.begin(), __x.end());
- destroy(_M_start, _M_finish);
- _M_deallocate(_M_start, _M_end_of_storage - _M_start);
- _M_start = __tmp;
- _M_end_of_storage = _M_start + __xlen;
- }
- else if (size() >= __xlen) {
- iterator __i = copy(__x.begin(), __x.end(), begin());
- destroy(__i, _M_finish);
- }
- else {
- copy(__x.begin(), __x.begin() + size(), _M_start);
- uninitialized_copy(__x.begin() + size(), __x.end(), _M_finish);
- }
- _M_finish = _M_start + __xlen;
- }
- return *this;
-}
-
-template <class _Tp, class _Alloc>
-void vector<_Tp, _Alloc>::assign(size_t __n, const value_type& __val) {
- if (__n > capacity()) {
- vector<_Tp, _Alloc> __tmp(__n, __val, get_allocator());
- __tmp.swap(*this);
- }
- else if (__n > size()) {
- fill(begin(), end(), __val);
- _M_finish = uninitialized_fill_n(_M_finish, __n - size(), __val);
- }
- else
- erase(fill_n(begin(), __n, __val), end());
-}
-
-#ifdef __STL_MEMBER_TEMPLATES
-
-template <class _Tp, class _Alloc> template <class _InputIter>
-void vector<_Tp, _Alloc>::_M_assign_aux(_InputIter __first, _InputIter __last,
- input_iterator_tag) {
- iterator __cur = begin();
- for ( ; __first != __last && __cur != end(); ++__cur, ++__first)
- *__cur = *__first;
- if (__first == __last)
- erase(__cur, end());
- else
- insert(end(), __first, __last);
-}
-
-template <class _Tp, class _Alloc> template <class _ForwardIter>
-void
-vector<_Tp, _Alloc>::_M_assign_aux(_ForwardIter __first, _ForwardIter __last,
- forward_iterator_tag) {
- size_type __len = 0;
- distance(__first, __last, __len);
-
- if (__len > capacity()) {
- iterator __tmp = _M_allocate_and_copy(__len, __first, __last);
- destroy(_M_start, _M_finish);
- _M_deallocate(_M_start, _M_end_of_storage - _M_start);
- _M_start = __tmp;
- _M_end_of_storage = _M_finish = _M_start + __len;
- }
- else if (size() >= __len) {
- iterator __new_finish = copy(__first, __last, _M_start);
- destroy(__new_finish, _M_finish);
- _M_finish = __new_finish;
- }
- else {
- _ForwardIter __mid = __first;
- advance(__mid, size());
- copy(__first, __mid, _M_start);
- _M_finish = uninitialized_copy(__mid, __last, _M_finish);
- }
-}
-
-#endif /* __STL_MEMBER_TEMPLATES */
-
-template <class _Tp, class _Alloc>
-void
-vector<_Tp, _Alloc>::_M_insert_aux(iterator __position, const _Tp& __x)
-{
- if (_M_finish != _M_end_of_storage) {
- construct(_M_finish, *(_M_finish - 1));
- ++_M_finish;
- _Tp __x_copy = __x;
- copy_backward(__position, _M_finish - 2, _M_finish - 1);
- *__position = __x_copy;
- }
- else {
- const size_type __old_size = size();
- const size_type __len = __old_size != 0 ? 2 * __old_size : 1;
- iterator __new_start = _M_allocate(__len);
- iterator __new_finish = __new_start;
- __STL_TRY {
- __new_finish = uninitialized_copy(_M_start, __position, __new_start);
- construct(__new_finish, __x);
- ++__new_finish;
- __new_finish = uninitialized_copy(__position, _M_finish, __new_finish);
- }
- __STL_UNWIND((destroy(__new_start,__new_finish),
- _M_deallocate(__new_start,__len)));
- destroy(begin(), end());
- _M_deallocate(_M_start, _M_end_of_storage - _M_start);
- _M_start = __new_start;
- _M_finish = __new_finish;
- _M_end_of_storage = __new_start + __len;
- }
-}
-
-template <class _Tp, class _Alloc>
-void
-vector<_Tp, _Alloc>::_M_insert_aux(iterator __position)
-{
- if (_M_finish != _M_end_of_storage) {
- construct(_M_finish, *(_M_finish - 1));
- ++_M_finish;
- copy_backward(__position, _M_finish - 2, _M_finish - 1);
- *__position = _Tp();
- }
- else {
- const size_type __old_size = size();
- const size_type __len = __old_size != 0 ? 2 * __old_size : 1;
- iterator __new_start = _M_allocate(__len);
- iterator __new_finish = __new_start;
- __STL_TRY {
- __new_finish = uninitialized_copy(_M_start, __position, __new_start);
- construct(__new_finish);
- ++__new_finish;
- __new_finish = uninitialized_copy(__position, _M_finish, __new_finish);
- }
- __STL_UNWIND((destroy(__new_start,__new_finish),
- _M_deallocate(__new_start,__len)));
- destroy(begin(), end());
- _M_deallocate(_M_start, _M_end_of_storage - _M_start);
- _M_start = __new_start;
- _M_finish = __new_finish;
- _M_end_of_storage = __new_start + __len;
- }
-}
-
-template <class _Tp, class _Alloc>
-void vector<_Tp, _Alloc>::insert(iterator __position, size_type __n,
- const _Tp& __x)
-{
- if (__n != 0) {
- if (size_type(_M_end_of_storage - _M_finish) >= __n) {
- _Tp __x_copy = __x;
- const size_type __elems_after = _M_finish - __position;
- iterator __old_finish = _M_finish;
- if (__elems_after > __n) {
- uninitialized_copy(_M_finish - __n, _M_finish, _M_finish);
- _M_finish += __n;
- copy_backward(__position, __old_finish - __n, __old_finish);
- fill(__position, __position + __n, __x_copy);
- }
- else {
- uninitialized_fill_n(_M_finish, __n - __elems_after, __x_copy);
- _M_finish += __n - __elems_after;
- uninitialized_copy(__position, __old_finish, _M_finish);
- _M_finish += __elems_after;
- fill(__position, __old_finish, __x_copy);
- }
- }
- else {
- const size_type __old_size = size();
- const size_type __len = __old_size + max(__old_size, __n);
- iterator __new_start = _M_allocate(__len);
- iterator __new_finish = __new_start;
- __STL_TRY {
- __new_finish = uninitialized_copy(_M_start, __position, __new_start);
- __new_finish = uninitialized_fill_n(__new_finish, __n, __x);
- __new_finish
- = uninitialized_copy(__position, _M_finish, __new_finish);
- }
- __STL_UNWIND((destroy(__new_start,__new_finish),
- _M_deallocate(__new_start,__len)));
- destroy(_M_start, _M_finish);
- _M_deallocate(_M_start, _M_end_of_storage - _M_start);
- _M_start = __new_start;
- _M_finish = __new_finish;
- _M_end_of_storage = __new_start + __len;
- }
- }
-}
-
-#ifdef __STL_MEMBER_TEMPLATES
-
-template <class _Tp, class _Alloc> template <class _InputIterator>
-void
-vector<_Tp, _Alloc>::_M_range_insert(iterator __pos,
- _InputIterator __first,
- _InputIterator __last,
- input_iterator_tag)
-{
- for ( ; __first != __last; ++__first) {
- __pos = insert(__pos, *__first);
- ++__pos;
- }
-}
-
-template <class _Tp, class _Alloc> template <class _ForwardIterator>
-void
-vector<_Tp, _Alloc>::_M_range_insert(iterator __position,
- _ForwardIterator __first,
- _ForwardIterator __last,
- forward_iterator_tag)
-{
- if (__first != __last) {
- size_type __n = 0;
- distance(__first, __last, __n);
- if (size_type(_M_end_of_storage - _M_finish) >= __n) {
- const size_type __elems_after = _M_finish - __position;
- iterator __old_finish = _M_finish;
- if (__elems_after > __n) {
- uninitialized_copy(_M_finish - __n, _M_finish, _M_finish);
- _M_finish += __n;
- copy_backward(__position, __old_finish - __n, __old_finish);
- copy(__first, __last, __position);
- }
- else {
- _ForwardIterator __mid = __first;
- advance(__mid, __elems_after);
- uninitialized_copy(__mid, __last, _M_finish);
- _M_finish += __n - __elems_after;
- uninitialized_copy(__position, __old_finish, _M_finish);
- _M_finish += __elems_after;
- copy(__first, __mid, __position);
- }
- }
- else {
- const size_type __old_size = size();
- const size_type __len = __old_size + max(__old_size, __n);
- iterator __new_start = _M_allocate(__len);
- iterator __new_finish = __new_start;
- __STL_TRY {
- __new_finish = uninitialized_copy(_M_start, __position, __new_start);
- __new_finish = uninitialized_copy(__first, __last, __new_finish);
- __new_finish
- = uninitialized_copy(__position, _M_finish, __new_finish);
- }
- __STL_UNWIND((destroy(__new_start,__new_finish),
- _M_deallocate(__new_start,__len)));
- destroy(_M_start, _M_finish);
- _M_deallocate(_M_start, _M_end_of_storage - _M_start);
- _M_start = __new_start;
- _M_finish = __new_finish;
- _M_end_of_storage = __new_start + __len;
- }
- }
-}
-
-#else /* __STL_MEMBER_TEMPLATES */
-
-template <class _Tp, class _Alloc>
-void
-vector<_Tp, _Alloc>::insert(iterator __position,
- const_iterator __first,
- const_iterator __last)
-{
- if (__first != __last) {
- size_type __n = 0;
- distance(__first, __last, __n);
- if (size_type(_M_end_of_storage - _M_finish) >= __n) {
- const size_type __elems_after = _M_finish - __position;
- iterator __old_finish = _M_finish;
- if (__elems_after > __n) {
- uninitialized_copy(_M_finish - __n, _M_finish, _M_finish);
- _M_finish += __n;
- copy_backward(__position, __old_finish - __n, __old_finish);
- copy(__first, __last, __position);
- }
- else {
- uninitialized_copy(__first + __elems_after, __last, _M_finish);
- _M_finish += __n - __elems_after;
- uninitialized_copy(__position, __old_finish, _M_finish);
- _M_finish += __elems_after;
- copy(__first, __first + __elems_after, __position);
- }
- }
- else {
- const size_type __old_size = size();
- const size_type __len = __old_size + max(__old_size, __n);
- iterator __new_start = _M_allocate(__len);
- iterator __new_finish = __new_start;
- __STL_TRY {
- __new_finish = uninitialized_copy(_M_start, __position, __new_start);
- __new_finish = uninitialized_copy(__first, __last, __new_finish);
- __new_finish
- = uninitialized_copy(__position, _M_finish, __new_finish);
- }
- __STL_UNWIND((destroy(__new_start,__new_finish),
- _M_deallocate(__new_start,__len)));
- destroy(_M_start, _M_finish);
- _M_deallocate(_M_start, _M_end_of_storage - _M_start);
- _M_start = __new_start;
- _M_finish = __new_finish;
- _M_end_of_storage = __new_start + __len;
- }
- }
-}
-
-#endif /* __STL_MEMBER_TEMPLATES */
-
-#if defined(__sgi) && !defined(__GNUC__) && (_MIPS_SIM != _MIPS_SIM_ABI32)
-#pragma reset woff 1174
-#pragma reset woff 1375
-#endif
-
-__STL_END_NAMESPACE
-
-#endif /* __SGI_STL_INTERNAL_VECTOR_H */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/tempbuf.h b/contrib/libstdc++/stl/tempbuf.h
deleted file mode 100644
index aa4f289c582b..000000000000
--- a/contrib/libstdc++/stl/tempbuf.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- * Copyright (c) 1996
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-#ifndef __SGI_STL_TEMPBUF_H
-#define __SGI_STL_TEMPBUF_H
-
-#ifndef __SGI_STL_PAIR_H
-#include <pair.h>
-#endif
-#include <limits.h> /* XXX should use <climits> */
-#include <stddef.h> /* XXX should use <cstddef> */
-#include <stdlib.h> /* XXX should use <cstdlib> */
-#ifndef __TYPE_TRAITS_H
-#include <type_traits.h>
-#endif
-#ifndef __SGI_STL_INTERNAL_CONSTRUCT_H
-#include <stl_construct.h>
-#endif
-#ifndef __SGI_STL_INTERNAL_UNINITIALIZED_H
-#include <stl_uninitialized.h>
-#endif
-#ifndef __SGI_STL_INTERNAL_TEMPBUF_H
-#include <stl_tempbuf.h>
-#endif
-
-#ifdef __STL_USE_NAMESPACES
-
-using __STD::get_temporary_buffer;
-using __STD::return_temporary_buffer;
-using __STD::temporary_buffer;
-
-#endif /* __STL_USE_NAMESPACES */
-
-#endif /* __SGI_STL_TEMPBUF_H */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/tree.h b/contrib/libstdc++/stl/tree.h
deleted file mode 100644
index 77c57cbbba1f..000000000000
--- a/contrib/libstdc++/stl/tree.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- *
- * Copyright (c) 1996,1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- */
-
-#ifndef __SGI_STL_TREE_H
-#define __SGI_STL_TREE_H
-
-#ifndef __SGI_STL_INTERNAL_TREE_H
-#include <stl_tree.h>
-#endif
-#include <algobase.h>
-#include <alloc.h>
-
-#ifdef __STL_USE_NAMESPACES
-using __STD::rb_tree;
-#endif /* __STL_USE_NAMESPACES */
-
-#endif /* __SGI_STL_TREE_H */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/type_traits.h b/contrib/libstdc++/stl/type_traits.h
deleted file mode 100644
index b6a7dfc6de95..000000000000
--- a/contrib/libstdc++/stl/type_traits.h
+++ /dev/null
@@ -1,373 +0,0 @@
-/*
- *
- * Copyright (c) 1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-#ifndef __TYPE_TRAITS_H
-#define __TYPE_TRAITS_H
-
-#ifndef __STL_CONFIG_H
-#include <stl_config.h>
-#endif
-
-/*
-This header file provides a framework for allowing compile time dispatch
-based on type attributes. This is useful when writing template code.
-For example, when making a copy of an array of an unknown type, it helps
-to know if the type has a trivial copy constructor or not, to help decide
-if a memcpy can be used.
-
-The class template __type_traits provides a series of typedefs each of
-which is either __true_type or __false_type. The argument to
-__type_traits can be any type. The typedefs within this template will
-attain their correct values by one of these means:
- 1. The general instantiation contain conservative values which work
- for all types.
- 2. Specializations may be declared to make distinctions between types.
- 3. Some compilers (such as the Silicon Graphics N32 and N64 compilers)
- will automatically provide the appropriate specializations for all
- types.
-
-EXAMPLE:
-
-//Copy an array of elements which have non-trivial copy constructors
-template <class T> void copy(T* source, T* destination, int n, __false_type);
-//Copy an array of elements which have trivial copy constructors. Use memcpy.
-template <class T> void copy(T* source, T* destination, int n, __true_type);
-
-//Copy an array of any type by using the most efficient copy mechanism
-template <class T> inline void copy(T* source,T* destination,int n) {
- copy(source, destination, n,
- typename __type_traits<T>::has_trivial_copy_constructor());
-}
-*/
-
-
-struct __true_type {
-};
-
-struct __false_type {
-};
-
-template <class _Tp>
-struct __type_traits {
- typedef __true_type this_dummy_member_must_be_first;
- /* Do not remove this member. It informs a compiler which
- automatically specializes __type_traits that this
- __type_traits template is special. It just makes sure that
- things work if an implementation is using a template
- called __type_traits for something unrelated. */
-
- /* The following restrictions should be observed for the sake of
- compilers which automatically produce type specific specializations
- of this class:
- - You may reorder the members below if you wish
- - You may remove any of the members below if you wish
- - You must not rename members without making the corresponding
- name change in the compiler
- - Members you add will be treated like regular members unless
- you add the appropriate support in the compiler. */
-
-
- typedef __false_type has_trivial_default_constructor;
- typedef __false_type has_trivial_copy_constructor;
- typedef __false_type has_trivial_assignment_operator;
- typedef __false_type has_trivial_destructor;
- typedef __false_type is_POD_type;
-};
-
-
-
-// Provide some specializations. This is harmless for compilers that
-// have built-in __types_traits support, and essential for compilers
-// that don't.
-
-#ifndef __STL_NO_BOOL
-
-__STL_TEMPLATE_NULL struct __type_traits<bool> {
- typedef __true_type has_trivial_default_constructor;
- typedef __true_type has_trivial_copy_constructor;
- typedef __true_type has_trivial_assignment_operator;
- typedef __true_type has_trivial_destructor;
- typedef __true_type is_POD_type;
-};
-
-#endif /* __STL_NO_BOOL */
-
-__STL_TEMPLATE_NULL struct __type_traits<char> {
- typedef __true_type has_trivial_default_constructor;
- typedef __true_type has_trivial_copy_constructor;
- typedef __true_type has_trivial_assignment_operator;
- typedef __true_type has_trivial_destructor;
- typedef __true_type is_POD_type;
-};
-
-__STL_TEMPLATE_NULL struct __type_traits<signed char> {
- typedef __true_type has_trivial_default_constructor;
- typedef __true_type has_trivial_copy_constructor;
- typedef __true_type has_trivial_assignment_operator;
- typedef __true_type has_trivial_destructor;
- typedef __true_type is_POD_type;
-};
-
-__STL_TEMPLATE_NULL struct __type_traits<unsigned char> {
- typedef __true_type has_trivial_default_constructor;
- typedef __true_type has_trivial_copy_constructor;
- typedef __true_type has_trivial_assignment_operator;
- typedef __true_type has_trivial_destructor;
- typedef __true_type is_POD_type;
-};
-
-#ifdef __STL_HAS_WCHAR_T
-
-__STL_TEMPLATE_NULL struct __type_traits<wchar_t> {
- typedef __true_type has_trivial_default_constructor;
- typedef __true_type has_trivial_copy_constructor;
- typedef __true_type has_trivial_assignment_operator;
- typedef __true_type has_trivial_destructor;
- typedef __true_type is_POD_type;
-};
-
-#endif /* __STL_HAS_WCHAR_T */
-
-__STL_TEMPLATE_NULL struct __type_traits<short> {
- typedef __true_type has_trivial_default_constructor;
- typedef __true_type has_trivial_copy_constructor;
- typedef __true_type has_trivial_assignment_operator;
- typedef __true_type has_trivial_destructor;
- typedef __true_type is_POD_type;
-};
-
-__STL_TEMPLATE_NULL struct __type_traits<unsigned short> {
- typedef __true_type has_trivial_default_constructor;
- typedef __true_type has_trivial_copy_constructor;
- typedef __true_type has_trivial_assignment_operator;
- typedef __true_type has_trivial_destructor;
- typedef __true_type is_POD_type;
-};
-
-__STL_TEMPLATE_NULL struct __type_traits<int> {
- typedef __true_type has_trivial_default_constructor;
- typedef __true_type has_trivial_copy_constructor;
- typedef __true_type has_trivial_assignment_operator;
- typedef __true_type has_trivial_destructor;
- typedef __true_type is_POD_type;
-};
-
-__STL_TEMPLATE_NULL struct __type_traits<unsigned int> {
- typedef __true_type has_trivial_default_constructor;
- typedef __true_type has_trivial_copy_constructor;
- typedef __true_type has_trivial_assignment_operator;
- typedef __true_type has_trivial_destructor;
- typedef __true_type is_POD_type;
-};
-
-__STL_TEMPLATE_NULL struct __type_traits<long> {
- typedef __true_type has_trivial_default_constructor;
- typedef __true_type has_trivial_copy_constructor;
- typedef __true_type has_trivial_assignment_operator;
- typedef __true_type has_trivial_destructor;
- typedef __true_type is_POD_type;
-};
-
-__STL_TEMPLATE_NULL struct __type_traits<unsigned long> {
- typedef __true_type has_trivial_default_constructor;
- typedef __true_type has_trivial_copy_constructor;
- typedef __true_type has_trivial_assignment_operator;
- typedef __true_type has_trivial_destructor;
- typedef __true_type is_POD_type;
-};
-
-#ifdef __STL_LONG_LONG
-
-__STL_TEMPLATE_NULL struct __type_traits<long long> {
- typedef __true_type has_trivial_default_constructor;
- typedef __true_type has_trivial_copy_constructor;
- typedef __true_type has_trivial_assignment_operator;
- typedef __true_type has_trivial_destructor;
- typedef __true_type is_POD_type;
-};
-
-__STL_TEMPLATE_NULL struct __type_traits<unsigned long long> {
- typedef __true_type has_trivial_default_constructor;
- typedef __true_type has_trivial_copy_constructor;
- typedef __true_type has_trivial_assignment_operator;
- typedef __true_type has_trivial_destructor;
- typedef __true_type is_POD_type;
-};
-
-#endif /* __STL_LONG_LONG */
-
-__STL_TEMPLATE_NULL struct __type_traits<float> {
- typedef __true_type has_trivial_default_constructor;
- typedef __true_type has_trivial_copy_constructor;
- typedef __true_type has_trivial_assignment_operator;
- typedef __true_type has_trivial_destructor;
- typedef __true_type is_POD_type;
-};
-
-__STL_TEMPLATE_NULL struct __type_traits<double> {
- typedef __true_type has_trivial_default_constructor;
- typedef __true_type has_trivial_copy_constructor;
- typedef __true_type has_trivial_assignment_operator;
- typedef __true_type has_trivial_destructor;
- typedef __true_type is_POD_type;
-};
-
-__STL_TEMPLATE_NULL struct __type_traits<long double> {
- typedef __true_type has_trivial_default_constructor;
- typedef __true_type has_trivial_copy_constructor;
- typedef __true_type has_trivial_assignment_operator;
- typedef __true_type has_trivial_destructor;
- typedef __true_type is_POD_type;
-};
-
-#ifdef __STL_CLASS_PARTIAL_SPECIALIZATION
-
-template <class _Tp>
-struct __type_traits<_Tp*> {
- typedef __true_type has_trivial_default_constructor;
- typedef __true_type has_trivial_copy_constructor;
- typedef __true_type has_trivial_assignment_operator;
- typedef __true_type has_trivial_destructor;
- typedef __true_type is_POD_type;
-};
-
-#else /* __STL_CLASS_PARTIAL_SPECIALIZATION */
-
-__STL_TEMPLATE_NULL struct __type_traits<char*> {
- typedef __true_type has_trivial_default_constructor;
- typedef __true_type has_trivial_copy_constructor;
- typedef __true_type has_trivial_assignment_operator;
- typedef __true_type has_trivial_destructor;
- typedef __true_type is_POD_type;
-};
-
-__STL_TEMPLATE_NULL struct __type_traits<signed char*> {
- typedef __true_type has_trivial_default_constructor;
- typedef __true_type has_trivial_copy_constructor;
- typedef __true_type has_trivial_assignment_operator;
- typedef __true_type has_trivial_destructor;
- typedef __true_type is_POD_type;
-};
-
-__STL_TEMPLATE_NULL struct __type_traits<unsigned char*> {
- typedef __true_type has_trivial_default_constructor;
- typedef __true_type has_trivial_copy_constructor;
- typedef __true_type has_trivial_assignment_operator;
- typedef __true_type has_trivial_destructor;
- typedef __true_type is_POD_type;
-};
-
-__STL_TEMPLATE_NULL struct __type_traits<const char*> {
- typedef __true_type has_trivial_default_constructor;
- typedef __true_type has_trivial_copy_constructor;
- typedef __true_type has_trivial_assignment_operator;
- typedef __true_type has_trivial_destructor;
- typedef __true_type is_POD_type;
-};
-
-__STL_TEMPLATE_NULL struct __type_traits<const signed char*> {
- typedef __true_type has_trivial_default_constructor;
- typedef __true_type has_trivial_copy_constructor;
- typedef __true_type has_trivial_assignment_operator;
- typedef __true_type has_trivial_destructor;
- typedef __true_type is_POD_type;
-};
-
-__STL_TEMPLATE_NULL struct __type_traits<const unsigned char*> {
- typedef __true_type has_trivial_default_constructor;
- typedef __true_type has_trivial_copy_constructor;
- typedef __true_type has_trivial_assignment_operator;
- typedef __true_type has_trivial_destructor;
- typedef __true_type is_POD_type;
-};
-
-#endif /* __STL_CLASS_PARTIAL_SPECIALIZATION */
-
-
-// The following could be written in terms of numeric_limits.
-// We're doing it separately to reduce the number of dependencies.
-
-template <class _Tp> struct _Is_integer {
- typedef __false_type _Integral;
-};
-
-#ifndef __STL_NO_BOOL
-
-__STL_TEMPLATE_NULL struct _Is_integer<bool> {
- typedef __true_type _Integral;
-};
-
-#endif /* __STL_NO_BOOL */
-
-__STL_TEMPLATE_NULL struct _Is_integer<char> {
- typedef __true_type _Integral;
-};
-
-__STL_TEMPLATE_NULL struct _Is_integer<signed char> {
- typedef __true_type _Integral;
-};
-
-__STL_TEMPLATE_NULL struct _Is_integer<unsigned char> {
- typedef __true_type _Integral;
-};
-
-#ifdef __STL_HAS_WCHAR_T
-
-__STL_TEMPLATE_NULL struct _Is_integer<wchar_t> {
- typedef __true_type _Integral;
-};
-
-#endif /* __STL_HAS_WCHAR_T */
-
-__STL_TEMPLATE_NULL struct _Is_integer<short> {
- typedef __true_type _Integral;
-};
-
-__STL_TEMPLATE_NULL struct _Is_integer<unsigned short> {
- typedef __true_type _Integral;
-};
-
-__STL_TEMPLATE_NULL struct _Is_integer<int> {
- typedef __true_type _Integral;
-};
-
-__STL_TEMPLATE_NULL struct _Is_integer<unsigned int> {
- typedef __true_type _Integral;
-};
-
-__STL_TEMPLATE_NULL struct _Is_integer<long> {
- typedef __true_type _Integral;
-};
-
-__STL_TEMPLATE_NULL struct _Is_integer<unsigned long> {
- typedef __true_type _Integral;
-};
-
-#ifdef __STL_LONG_LONG
-
-__STL_TEMPLATE_NULL struct _Is_integer<long long> {
- typedef __true_type _Integral;
-};
-
-__STL_TEMPLATE_NULL struct _Is_integer<unsigned long long> {
- typedef __true_type _Integral;
-};
-
-#endif /* __STL_LONG_LONG */
-
-#endif /* __TYPE_TRAITS_H */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/utility b/contrib/libstdc++/stl/utility
deleted file mode 100644
index df8c224388db..000000000000
--- a/contrib/libstdc++/stl/utility
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- * Copyright (c) 1996,1997
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-#ifndef __SGI_STL_UTILITY
-#define __SGI_STL_UTILITY
-
-#include <stl_config.h>
-#include <stl_relops.h>
-#include <stl_pair.h>
-
-#endif /* __SGI_STL_UTILITY */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/vector b/contrib/libstdc++/stl/vector
deleted file mode 100644
index 4bcdebcc1861..000000000000
--- a/contrib/libstdc++/stl/vector
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- * Copyright (c) 1996
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-#ifndef __SGI_STL_VECTOR
-#define __SGI_STL_VECTOR
-
-#include <stl_algobase.h>
-#include <stl_alloc.h>
-#include <stl_construct.h>
-#include <stl_uninitialized.h>
-#include <stl_vector.h>
-#include <stl_bvector.h>
-
-#endif /* __SGI_STL_VECTOR */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stl/vector.h b/contrib/libstdc++/stl/vector.h
deleted file mode 100644
index 231a227b7e3a..000000000000
--- a/contrib/libstdc++/stl/vector.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- *
- * Copyright (c) 1994
- * Hewlett-Packard Company
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Hewlett-Packard Company makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- *
- *
- * Copyright (c) 1996
- * Silicon Graphics Computer Systems, Inc.
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Silicon Graphics makes no
- * representations about the suitability of this software for any
- * purpose. It is provided "as is" without express or implied warranty.
- */
-
-#ifndef __SGI_STL_VECTOR_H
-#define __SGI_STL_VECTOR_H
-
-#include <algobase.h>
-#include <alloc.h>
-#include <stl_vector.h>
-
-#ifdef __STL_USE_NAMESPACES
-using __STD::vector;
-#endif /* __STL_USE_NAMESPACES */
-
-#endif /* __SGI_STL_VECTOR_H */
-
-// Local Variables:
-// mode:C++
-// End:
diff --git a/contrib/libstdc++/stlinst.cc b/contrib/libstdc++/stlinst.cc
deleted file mode 100644
index 2a221fbaee98..000000000000
--- a/contrib/libstdc++/stlinst.cc
+++ /dev/null
@@ -1,10 +0,0 @@
-// Instantiation file for the -*- C++ -*- Standard Library allocator templates
-// This file is part of the GNU ANSI C++ Library.
-
-#include <alloc.h>
-
-#ifndef __USE_MALLOC
-template class __default_alloc_template<__NODE_ALLOCATOR_THREADS, 0>;
-#endif
-
-template class __malloc_alloc_template<0>;
diff --git a/contrib/libstdc++/string b/contrib/libstdc++/string
deleted file mode 100644
index fa6f1abaa70c..000000000000
--- a/contrib/libstdc++/string
+++ /dev/null
@@ -1,13 +0,0 @@
-// Main header for the -*- C++ -*- string classes.
-
-#ifndef __STRING__
-#define __STRING__
-
-#include <std/bastring.h>
-
-extern "C++" {
-typedef basic_string <char> string;
-// typedef basic_string <wchar_t> wstring;
-} // extern "C++"
-
-#endif
diff --git a/contrib/libstdc++/strstream b/contrib/libstdc++/strstream
deleted file mode 100644
index ee360e0b7e43..000000000000
--- a/contrib/libstdc++/strstream
+++ /dev/null
@@ -1,7 +0,0 @@
-// -*- C++ -*- forwarding header.
-// This file is part of the GNU ANSI C++ Library.
-
-#ifndef __STRSTREAM__
-#define __STRSTREAM__
-#include <strstream.h>
-#endif
diff --git a/contrib/libstdc++/tests/ChangeLog b/contrib/libstdc++/tests/ChangeLog
deleted file mode 100644
index 3bcb473a621a..000000000000
--- a/contrib/libstdc++/tests/ChangeLog
+++ /dev/null
@@ -1,132 +0,0 @@
-Fri Mar 16 12:46:19 GMT 2001 Bernd Schmidt (bernds@redhat.com)
-
- * gcc-2.95.3 Released.
-
-Sun Oct 24 23:54:10 PDT 1999 Jeff Law (law@cygnus.com)
-
- * gcc-2.95.2 Released.
-
-Mon Aug 16 01:29:24 PDT 1999 Jeff Law (law@cygnus.com)
-
- * gcc-2.95.1 Released.
-
-Wed Jul 28 21:39:31 PDT 1999 Jeff Law (law@cygnus.com)
-
- * gcc-2.95 Released.
-
-Sun Jul 25 23:40:51 PDT 1999 Jeff Law (law@cygnus.com)
-
- * gcc-2.95 Released.
-
-1998-07-17 Jason Merrill <jason@yorick.cygnus.com>
-
- * tmap.cc: Use less<int>.
- * tlist.cc (main): Use remove_if.
-
-1998-07-13 Manfred Hollstein <manfred@s-direktnet.de>
-
- * Makefile.in (VERSION): Bump to 2.9.0.
-
-1998-07-12 Bob Sidebotham <rns@fore.com>
-
- * tstring.cc (findtest): New fn.
-
-1998-06-01 Jason Merrill <jason@yorick.cygnus.com>
-
- * tlist.cc, tvector.cc, tmap.cc: Remove explicit instantiations.
-
-Fri Oct 10 00:40:31 1997 Jason Merrill <jason@yorick.cygnus.com>
-
- * tstring.cc (identitytest): s/remove/erase/.
-
-Thu Sep 25 19:48:22 1997 Jason Merrill <jason@yorick.cygnus.com>
-
- * tstring.cc: Add some tests for the member templates.
-
-Wed Jun 11 11:00:10 1997 Jason Merrill <jason@yorick.cygnus.com>
-
- * tmap.cc: Explicitly instantiate allocator classes.
- * tvector.cc, tlist.cc: Likewise.
-
-Fri May 16 18:38:05 1997 Bob Manson <manson@charmed.cygnus.com>
-
- * tcomplex.cc (main): If we're using short doubles, compensate for
- roundoff in result of pow(a,b).
-
-Thu May 1 17:37:53 1997 Jason Merrill <jason@yorick.cygnus.com>
-
- * configure.in (CHECK): Add $(CXXFLAGS).
- * Makefile.in (tcomplex): Add $(CXXFLAGS).
-
-Fri Apr 25 16:07:46 1997 Bob Manson <manson@charmed.cygnus.com>
-
- * configure.in: Change "check" to "check-old". Add do-nothing
- check target.
-
-Sun Nov 3 12:44:48 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * tstring.cc: Treat string literals as const.
-
-Tue Sep 24 18:00:20 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * tstring.cc, tcomplex.cc: Remove gratuitous uses of std/.
-
-Mon Jun 17 14:05:50 1996 Per Bothner <bothner@deneb.cygnus.com>
-
- * tlist.cc (test_splice): New test.
-
-Fri Mar 22 16:08:36 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * Makefile.in (VERSION): 2.8.0.
-
- * tlist.cc, tmap.cc, tvector.cc: Remove explicit instantiation
- directive.
-
-Sat Nov 18 19:52:26 1995 Mike Stump <mrs@cygnus.com>
-
- * Makefile.in: Update version to 2.7.1.
-
-Tue May 9 19:36:54 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * tstring.cc (decltest): Adjust single-character test.
-
-Fri May 5 14:35:19 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * tcomplex.*: Update to reflect that operator<< now
- accepts more forms of input.
-
-Thu Apr 27 15:34:58 1995 Brendan Kehoe (brendan@lisa.cygnus.com)
-
- * configure.in: Update to stay in sync with config.shared.
-
-Thu Feb 16 00:08:28 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * Makefile.in (VERSION, SHLIB): Define.
-
-Tue Jan 24 02:36:24 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * Makefile.in (CXXFLAGS): Don't set.
-
-Mon Jan 23 04:12:10 1995 Jason Merrill <jason@python.cygnus.com>
-
- * tlist.cc (plus): Remove.
-
-Thu Jan 19 19:41:07 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * Makefile.in: Don't set LD_LIBRARY_PATH. Users will have to set
- it themselves.
-
-Mon Jan 16 13:57:34 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * Makefile.in: Update to reflect header movement.
-
-Wed Dec 14 19:55:45 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * configure.in: Fix quoting problem. Reported nu H.J.Lu.
-
-Tue Nov 29 16:46:56 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * Makefile.in, configure.in: Re-write to avoid duplication.
- * {tvector,tmap,tlist}.{cc,exp}, configure.in: New tests for STL.
-
-
diff --git a/contrib/libstdc++/tests/Makefile.in b/contrib/libstdc++/tests/Makefile.in
deleted file mode 100644
index 057482f185eb..000000000000
--- a/contrib/libstdc++/tests/Makefile.in
+++ /dev/null
@@ -1,35 +0,0 @@
-# Copyright (C) 1994 Free Software Foundation
-
-# This file is part of the GNU ANSI C++ Library. This library is free
-# software; you can redistribute it and/or modify it under the terms of
-# the GNU General Public License as published by the Free Software
-# Foundation; either version 2, or (at your option) any later version.
-
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this library; see the file COPYING. If not, write to the Free
-# Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-VERSION = 2.9.0
-SHLIB = libstdc++.so.$(VERSION)
-
-DEPLIBS = ../libstdc++.a
-LDLIBS = -L.. -lstdc++
-MDEPLIBS = $(DEPLIBS)
-MLDLIBS = $(LDLIBS) -lm
-
-#### package, host, target, and site dependent Makefile fragments come in here.
-##
-
-tcomplex.o: ${srcdir}/../std/complext.h ${srcdir}/../std/dcomplex.h
-tcomplex: tcomplex.o $(MDEPLIBS)
- $(CXX) $(CXXFLAGS) -o tcomplex tcomplex.o $(MLDLIBS)
-
-tstring.o: ${srcdir}/../std/bastring.h
-
-# NOTE: Rules for following tests are generated by $(srcdir)/configure.in !!!
-
diff --git a/contrib/libstdc++/tests/configure.in b/contrib/libstdc++/tests/configure.in
deleted file mode 100644
index 06c56192beb5..000000000000
--- a/contrib/libstdc++/tests/configure.in
+++ /dev/null
@@ -1,65 +0,0 @@
-# This file is a shell script fragment that supplies the information
-# necessary for a configure script to process the program in
-# this directory. For more information, look at ../../configure.
-
-configdirs=
-srctrigger=tcomplex.cc
-srcname="tests for ANSI C++ library"
-package_makefile_frag=Make.pack
-package_makefile_rules_frag=Make.pack.r
-
-# per-host:
-
-# per-target:
-
-target_makefile_frag=../target-mkfrag
-
-TO_TOPDIR=../../
-ALL=' '
-XCXXINCLUDES="-I${srcdir}/.. -I${srcdir}/../stl -I${TO_TOPDIR}libio -I${srcdir}/${TO_TOPDIR}libio"
-SIMPLE_TESTS='tstring tlist tmap tvector'
-TESTS="tcomplex ${SIMPLE_TESTS}"
-MOSTLYCLEAN="*.o core ${TESTS} *.out"
-(. ${srcdir}/${TO_TOPDIR}libio/config.shared) >${package_makefile_frag} 2>${package_makefile_rules_frag}
-
-# post-target:
-
-CHECK=""
-
-for TEST in ${SIMPLE_TESTS} ; do
- echo "${TEST}: ${TEST}.o" '$(DEPLIBS)
- $(CXX) $(CXXFLAGS) -o' "${TEST} ${TEST}.o" '$(LDLIBS)
-' >> Makefile
-done
-
-for TEST in ${TESTS} ; do
- echo ".PHONY: check-${TEST}" >>Makefile
- if [ -f ${srcdir}/${TEST}.inp ] ; then
- echo "check-${TEST}: ${TEST}" '$(srcdir)'"/${TEST}.inp
- ./${TEST} < "'$(srcdir)'"/${TEST}.inp > ${TEST}.out 2>&1" >>Makefile
- else
- echo "check-${TEST}: ${TEST}
- ./${TEST} > ${TEST}.out 2>&1" >>Makefile
- fi
- echo ' diff -c $(srcdir)/'"${TEST}.exp ${TEST}.out" >>Makefile
- CHECK="${CHECK} check-${TEST}"
-done
-
-if [ "${srcdir}" = "." ] ; then
- if [ "${with_target_subdir}" != "." ] ; then
- topsrcdir=${with_multisrctop}../../..
- else
- topsrcdir=${with_multisrctop}../..
- fi
-else
- topsrcdir=${srcdir}/../..
-fi
-
-if [ -d ${topsrcdir}/gcc ] ; then
- echo "
-check:
-check-old: ${CHECK}" >>Makefile
-else
- echo "
-check: ${CHECK}" >>Makefile
-fi
diff --git a/contrib/libstdc++/tests/tcomplex.cc b/contrib/libstdc++/tests/tcomplex.cc
deleted file mode 100644
index 5311f0d8b7a1..000000000000
--- a/contrib/libstdc++/tests/tcomplex.cc
+++ /dev/null
@@ -1,151 +0,0 @@
-// Tests for the -*- C++ -*- complex number classes.
-// Copyright (C) 1994 Free Software Foundation
-
-// This file is part of the GNU ANSI C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms of
-// the GNU General Public License as published by the Free Software
-// Foundation; either version 2, or (at your option) any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-#include <assert.h>
-#include <iostream.h>
-#include <complex>
-
-// to test near-equality
-
-const double eps = 0.000001;
-
-static void close_enough(const double_complex& a, const double_complex& b)
-{
- assert(fabs(real(a) - real(b)) < eps &&
- fabs(imag(a) - imag(b)) < eps);
-}
-
-
-void test3(double_complex& a, double_complex& b, double_complex& c)
-{
-
- close_enough(-(-a) , a);
- close_enough((a + b) , (b + a));
- close_enough((a + (-b)) , (a - b));
- close_enough((a * b) , (b * a));
- close_enough((a * (-b)) , -(a * b));
- close_enough((a / (-b)) , -(a / b));
- close_enough((a - b) , -(b - a));
- close_enough((a + (b + c)) , ((a + b) + c));
- close_enough((a * (b * c)) , ((a * b) * c));
- close_enough((a * (b + c)) , ((a * b) + (a * c)));
- close_enough(((a - b) + b) , a);
- close_enough(((a + b) - b) , a);
- close_enough(((a * b) / b) , a);
- close_enough(((a / b) * b) , a);
-
-
- double_complex x = a;
- x *= b;
- close_enough(x , (a * b));
- x += c;
- close_enough(x , ((a * b) + c));
- x -= a;
- close_enough(x , (((a * b) + c) - a));
- x /= b;
- close_enough(x , ((((a * b) + c) - a) / b));
-
-}
-
-main()
-{
- double_complex one = 1.0;
- double_complex i (0.0, 1.0);
- double_complex neg_one = -1.0;
-
- cout << "double_complex one = " << one << "\n";
- cout << "i = " << i << "\n";
- cout << "neg_one = " << neg_one << "\n";
- cout << "sqrt(neg_one) = " << sqrt(neg_one) << "\n";
-
- double_complex a (2.0, 3.0);
- double_complex b (4.0, 5.0);
-
- cout << "a = " << a << "\n";
- cout << "b = " << b << "\n";
-
- cout << "a + one = " << (a + one) << "\n";
- (close_enough((a+one), double_complex(3.0, 3.0)));
- cout << "a - one = " << (a - one) << "\n";
- (close_enough((a-one), double_complex(1.0, 3.0)));
- cout << "a * one = " << (a * one) << "\n";
- (close_enough((a*one), a));
- cout << "a / one = " << (a / one) << "\n";
- (close_enough((a/one), a));
-
- cout << "a + b = " << (a + b) << "\n";
- (close_enough((a+b), double_complex(6.0, 8.0)));
- cout << "a - b = " << (a - b) << "\n";
- (close_enough((a-b), double_complex(-2.0, -2.0)));
- cout << "a * b = " << (a * b) << "\n";
- (close_enough((a*b), double_complex(-7.0, 22.0)));
- cout << "a / b = " << (a / b) << "\n";
- (close_enough((a/b), double_complex(0.5609760976, 0.0487804878)));
-
- double_complex c;
-
- c = a; cout << "c = a; c += b = " << (c += b) << "\n";
- c = a; cout << "c = a; c -= b = " << (c -= b) << "\n";
- c = a; cout << "c = a; c *= b = " << (c *= b) << "\n";
- c = a; cout << "c = a; c /= b = " << (c /= b) << "\n";
-
- cout << "-a = " << (-a) << "\n";
- cout << "real(a) = " << real(a) << "\n";
- assert(real(a) == 2.0);
- cout << "imag(a) = " << imag(a) << "\n";
- assert(imag(a) == 3.0);
- cout << "conj(a) = " << conj(a) << "\n";
- assert(conj(a) == double_complex(2.0, -3.0));
- cout << "norm(a) = " << norm(a) << "\n";
- assert(norm(a) == 13.0);
-
- cout << "abs(a) = " << abs(a) << "\n";
- cout << "arg(a) = " << arg(a) << "\n";
- cout << "cos(a) = " << cos(a) << "\n";
- cout << "sin(a) = " << sin(a) << "\n";
- cout << "cosh(a) = " << cosh(a) << "\n";
- cout << "sinh(a) = " << sinh(a) << "\n";
- cout << "log(a) = " << log(a) << "\n";
- cout << "exp(a) = " << exp(a) << "\n";
- cout << "sqrt(a) = " << sqrt(a) << "\n";
- cout << "pow(a, 2) = " << pow(a, 2) << "\n";
- {
- double_complex p = pow(a, b);
- if(sizeof(float)==sizeof(double)) {
- long w = (long)(p.imag()*100000);
- if (w==-98642)
- p=double_complex(-0.753046,-0.986429);
- }
- cout << "pow(a, b) = " << p << "\n";
- }
-
- double_complex d (10, 20);
- double_complex e = pow(a, 2);
-
- test3(one, one, one);
- test3(a, a, a);
- test3(a, b, d);
- test3(e, i, b);
- test3(d, d, i);
-
- cout << "enter a complex number in form a or (a) or (a, b): ";
- cin >> c;
- cout << "number = " << c << "\n";
-
- cout << "\nEnd of test\n";
- return 0;
-}
diff --git a/contrib/libstdc++/tests/tcomplex.exp b/contrib/libstdc++/tests/tcomplex.exp
deleted file mode 100644
index 5bef15cd3769..000000000000
--- a/contrib/libstdc++/tests/tcomplex.exp
+++ /dev/null
@@ -1,37 +0,0 @@
-double_complex one = (1,0)
-i = (0,1)
-neg_one = (-1,0)
-sqrt(neg_one) = (0,1)
-a = (2,3)
-b = (4,5)
-a + one = (3,3)
-a - one = (1,3)
-a * one = (2,3)
-a / one = (2,3)
-a + b = (6,8)
-a - b = (-2,-2)
-a * b = (-7,22)
-a / b = (0.560976,0.0487805)
-c = a; c += b = (6,8)
-c = a; c -= b = (-2,-2)
-c = a; c *= b = (-7,22)
-c = a; c /= b = (0.560976,0.0487805)
--a = (-2,-3)
-real(a) = 2
-imag(a) = 3
-conj(a) = (2,-3)
-norm(a) = 13
-abs(a) = 3.60555
-arg(a) = 0.982794
-cos(a) = (-4.18963,-9.10923)
-sin(a) = (9.1545,-4.16891)
-cosh(a) = (-3.72455,0.511823)
-sinh(a) = (-3.59056,0.530921)
-log(a) = (1.28247,0.982794)
-exp(a) = (-7.31511,1.04274)
-sqrt(a) = (1.67415,0.895977)
-pow(a, 2) = (-5,12)
-pow(a, b) = (-0.753046,-0.986429)
-enter a complex number in form a or (a) or (a, b): number = (1.2,-34)
-
-End of test
diff --git a/contrib/libstdc++/tests/tcomplex.inp b/contrib/libstdc++/tests/tcomplex.inp
deleted file mode 100644
index c4e1d84660f2..000000000000
--- a/contrib/libstdc++/tests/tcomplex.inp
+++ /dev/null
@@ -1 +0,0 @@
-(1.2, -34)
diff --git a/contrib/libstdc++/tests/tlist.cc b/contrib/libstdc++/tests/tlist.cc
deleted file mode 100644
index a37c999d0b55..000000000000
--- a/contrib/libstdc++/tests/tlist.cc
+++ /dev/null
@@ -1,151 +0,0 @@
-// test/demo of generic lists
-
-#include <assert.h>
-
-#define tassert(ex) {if ((ex)) cerr << #ex << "\n"; \
- else _assert(#ex, __FILE__,__LINE__); }
-
-#include <iostream.h>
-#include <list.h>
-#include <algo.h>
-
-bool int_compare(int a, int b)
-{
- return a < b;
-}
-
-int inc(int x)
-{
- return x + 1;
-}
-
-void print(list<int>& l)
-{
- for (list<int>::iterator it = l.begin(); it != l.end(); it++)
- cout << *it << " ";
- cout << "\n";
-}
-
-int is_odd(int x)
-{
- return x & 1;
-}
-
-int is_even(int x)
-{
- return (x & 1) == 0;
-}
-
-void sequence(list<int>& a, int lo, int hi)
-{
- back_insert_iterator<list<int> > it(a);
- while (lo <= hi)
- *it++ = lo++;
-}
-
-int old_rand = 9999;
-
-int get_rand()
-{
- old_rand = ((long)old_rand * (long)1243) % (long)971;
- return old_rand;
-}
-
-void randseq(list<int>& a, int n)
-{
- back_insert_iterator<list<int> > it(a);
- while (--n >= 0)
- *it++ = get_rand() % 50;
-}
-
-int array1 [] = { 9, 16, 36 };
-int array2 [] = { 1, 4 };
-
-int test_splice ()
-{
- list<int> l1 (array1, array1 + 3);
- list<int> l2 (array2, array2 + 2);
- list<int>::iterator i1 = l1.begin ();
- l1.splice (i1, l2);
- list<int>::iterator i2 = l1.begin ();
- while (i2 != l1.end ())
- cout << *i2++ << endl;
- return 0;
-}
-
-main()
-{
- list<int> a; int i;
- list<int>::iterator it, bit;
- sequence(a, 1, 20);
- cout << "\nlist<int> a = sequence(1, 20);\n"; print(a);
- for (it = a.begin (), i = 0; it != a.end (); it++, i++)
- assert (*it == i + 1);
- list<int> b;
- randseq(b, 20);
- cout << "\nlist<int> b = randseq(20);\n"; print(b);
- list<int> c;
- c.insert (c.end(), a.begin(), a.end());
- c.insert (c.end(), b.begin(), b.end());
- cout << "\nlist<int> c = a and b;\n"; print(c);
-
- list<int> d;
- for (it = a.begin(); it != a.end(); it++)
- d.insert(d.end (), inc(*it));
- cout << "\nlist<int> d = map(inc, a);\n"; print(d);
-
- list<int> e;
- back_insert_iterator<list<int> > e_insertor (e);
- reverse_copy (a.begin(), a.end (), e_insertor);
- cout << "\nlist<int> e = reverse(a);\n"; print(e);
-
- list<int> f;
- for (it = a.begin(); it != a.end(); it++)
- if (is_odd (*it))
- f.insert(f.end (), *it);
- cout << "\nlist<int> f = select(is_odd, a);\n"; print(f);
- list<int> ff;
- for (it = f.begin(); it != f.end(); it++)
- if (is_even (*it))
- ff.insert(ff.end (), *it);
- assert(ff.empty());
-
- int red = 0;
- for (it = a.begin(); it != a.end(); it++)
- red += *it;
- cout << "\nint red = a.reduce(plus, 0);\n"; cout << red;
- it = a.begin(); ++it; ++it;
- int second = *it;
- cout << "\nint second = a[2];\n"; cout << second;
- list<int> g;
- for (it = a.begin(), bit = b.begin(); it != a.end () && bit != b.end (); )
- g.insert (g.end (), *it++ + *bit++);
- cout << "\nlist<int> g = combine(plus, a, b);\n"; print(g);
- g.remove_if (is_odd);
- cout << "\ng.del(is_odd);\n"; print(g);
-
- ff.erase (ff.begin (), ff.end());
- for (it = g.begin(); it != g.end(); it++)
- if (is_odd (*it))
- ff.insert (ff.end (), *it);
- assert(ff.empty());
-
- b.sort();
- for (it = b.begin(); bit = it++, it != b.end (); ) assert (*it >= *bit);
- cout << "\nb.sort(int_compare);\n"; print(b);
-
- list<int> h;
- back_insert_iterator<list<int> > h_insertor (h);
- merge (a.begin (), a.end (), b.begin (), b.end (), h_insertor, int_compare);
- cout << "\nlist<int> h = merge(a, b, int_compare);\n"; print(h);
- for (it = h.begin(); bit = it++, it != h.end (); ) assert (*it >= *bit);
-
- cout << "\nh via iterator:\n";
- for (it = h.begin(); it != h.end (); it++)
- cout << *it << ", ";
- cout << "\n";
-
- test_splice ();
-
- cout << "\ndone\n";
-}
diff --git a/contrib/libstdc++/tests/tlist.exp b/contrib/libstdc++/tests/tlist.exp
deleted file mode 100644
index 65f7806826f6..000000000000
--- a/contrib/libstdc++/tests/tlist.exp
+++ /dev/null
@@ -1,44 +0,0 @@
-
-list<int> a = sequence(1, 20);
-1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
-
-list<int> b = randseq(20);
-28 27 5 17 44 6 9 40 15 26 49 35 15 48 13 27 25 25 9 6
-
-list<int> c = a and b;
-1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 28 27 5 17 44 6 9 40 15 26 49 35 15 48 13 27 25 25 9 6
-
-list<int> d = map(inc, a);
-2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
-
-list<int> e = reverse(a);
-20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
-
-list<int> f = select(is_odd, a);
-1 3 5 7 9 11 13 15 17 19
-
-int red = a.reduce(plus, 0);
-210
-int second = a[2];
-3
-list<int> g = combine(plus, a, b);
-29 29 8 21 49 12 16 48 24 36 60 47 28 62 28 43 42 43 28 26
-
-g.del(is_odd);
-8 12 16 48 24 36 60 28 62 28 42 28 26
-
-b.sort(int_compare);
-5 6 6 9 9 13 15 15 17 25 25 26 27 27 28 35 40 44 48 49
-
-list<int> h = merge(a, b, int_compare);
-1 2 3 4 5 5 6 6 6 7 8 9 9 9 10 11 12 13 13 14 15 15 15 16 17 17 18 19 20 25 25 26 27 27 28 35 40 44 48 49
-
-h via iterator:
-1, 2, 3, 4, 5, 5, 6, 6, 6, 7, 8, 9, 9, 9, 10, 11, 12, 13, 13, 14, 15, 15, 15, 16, 17, 17, 18, 19, 20, 25, 25, 26, 27, 27, 28, 35, 40, 44, 48, 49,
-1
-4
-9
-16
-36
-
-done
diff --git a/contrib/libstdc++/tests/tmap.cc b/contrib/libstdc++/tests/tmap.cc
deleted file mode 100644
index 900e66f506bd..000000000000
--- a/contrib/libstdc++/tests/tmap.cc
+++ /dev/null
@@ -1,59 +0,0 @@
-#include <map.h>
-#include <algo.h>
-#include <iostream.h>
-#include <function.h>
-
-#define int_less less<int>
-struct str_less {
- bool operator() (char* x, char* y) const { return strcmp(x,y) < 0; }
-};
-
-#if 0
-int SIZE;
-
-void add(int x[], int y[], map<int,int, int_less>& a)
-{
- for (int i = 0; i < SIZE; ++i) a[x[i]] = y[i];
-}
-#endif
-
-int
-main(int argv, char** argc)
-{
-#if 0
- if (argv > 1)
- {
- SIZE = abs(atoi(argc[1]));
- SIZE &= ~1;
- }
- else
- SIZE = 100;
- nums = new int[SIZE];
- odds = new int[SIZE];
- perm = new int[SIZE];
-#endif
-
- map<int, int, int_less> my_map;
-
- map<char*, int, str_less> phones;
-
- my_map[4] = 40;
- my_map[2] = 20;
-
- // The (char*) is needed because g++ doesn't
- // convert char[] to char* in this context.
- phones[(char*)"tom"] = 2345;
- phones[(char*)"dick"] = 5678;
- phones[(char*)"harry"] = 7654;
-
- cout << "2 -> " << my_map[2] << endl;
- cout << "4 -> " << my_map[4] << endl;
-
- map<int, int, int_less>::iterator it = my_map.begin();
- for ( ; it != my_map.end(); it++)
- cout << "my_map[" << (*it).first << "] = " << (*it).second << endl;
-
- map<char*, int, str_less>::iterator pit = phones.begin();
- for ( ; pit != phones.end(); pit++)
- cout << "phones[" << (*pit).first << "] = " << (*pit).second << endl;
-}
diff --git a/contrib/libstdc++/tests/tmap.exp b/contrib/libstdc++/tests/tmap.exp
deleted file mode 100644
index b7b5df249fb0..000000000000
--- a/contrib/libstdc++/tests/tmap.exp
+++ /dev/null
@@ -1,7 +0,0 @@
-2 -> 20
-4 -> 40
-my_map[2] = 20
-my_map[4] = 40
-phones[dick] = 5678
-phones[harry] = 7654
-phones[tom] = 2345
diff --git a/contrib/libstdc++/tests/tstring.cc b/contrib/libstdc++/tests/tstring.cc
deleted file mode 100644
index 833d3d964604..000000000000
--- a/contrib/libstdc++/tests/tstring.cc
+++ /dev/null
@@ -1,249 +0,0 @@
-// Tests for the -*- C++ -*- string classes.
-// Copyright (C) 1994 Free Software Foundation
-
-// This file is part of the GNU ANSI C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the terms of
-// the GNU General Public License as published by the Free Software
-// Foundation; either version 2, or (at your option) any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-#include <string>
-#include <algorithm>
-#include <iostream.h>
-#include <stdlib.h>
-#include <assert.h>
-
-string X = "Hello";
-string Y = "world";
-string N = "123";
-string c;
-const char* s = ",";
-
-void decltest()
-{
- string x;
- cout << "an empty string:" << x << "\n";
- assert(x == "");
-
- string y = "Hello";
- cout << "A string initialized to Hello:" << y << "\n";
- assert(y == "Hello");
-
- if (y[y.length()-1] == 'o')
- y = y + '\n';
- assert(y == "Hello\n");
- y = "Hello";
-
- string a = y;
- cout << "A string initialized to previous string:" << a << "\n";
- assert(a == "Hello");
- assert(a == y);
-
- string b (a, 1, 2);
- cout << "A string initialized to (previous string, 1, 2):" << b << "\n";
- assert(b == "el");
-
- char ch = '@';
- string z (1, ch);
- cout << "A string initialized to @:" << z << "\n";
- assert (z == "@");
-
- string n ("20");
- cout << "A string initialized to 20:" << n << "\n";
- assert(n == "20");
-
- int i = atoi(n.c_str ());
- double f = atof(n.c_str ());
- cout << "n = " << n << " atoi(n) = " << i << " atof(n) = " << f << "\n";
- assert(i == 20);
- assert(f == 20);
-
- int ar[] = { 'H', 'e', 'l', 'l', 'o' };
- string is (ar, ar+sizeof(ar)/sizeof(ar[0]));
- cout << "is = " << is << endl;
- assert (is == "Hello");
-}
-
-void cattest()
-{
- string x = X;
- string y = Y;
- string z = x + y;
- cout << "z = x + y = " << z << "\n";
- assert(z == "Helloworld");
-
- x += y;
- cout << "x += y; x = " << x << "\n";
- assert(x == "Helloworld");
-
- y = Y;
- x = X;
- y.insert (0, x);
- cout << "y.insert (0, x); y = " << y << "\n";
- assert(y == "Helloworld");
-
- y = Y;
- x = X;
- x = x + y + x;
- cout << "x = x + y + x; x = " << x << "\n";
- assert(x == "HelloworldHello");
-
- y = Y;
- x = X;
- x = y + x + x;
- cout << "x = y + x + x; x = " << x << "\n";
- assert(x == "worldHelloHello");
-
- x = X;
- y = Y;
- z = x + s + ' ' + y.substr (y.find ('w'), 1) + y.substr (y.find ('w') + 1) + ".";
- cout << "z = x + s + + y.substr (y.find (w), 1) + y.substr (y.find (w) + 1) + . = " << z << "\n";
- assert(z == "Hello, world.");
-}
-
-void
-findtest()
-{
- string x;
- string::size_type pos;
- pos = x.find_last_not_of('X');
- assert(pos == string::npos);
- pos = x.find_last_not_of("XYZ");
- assert(pos == string::npos);
-
- string y("a");
- pos = y.find_last_not_of('X');
- assert(pos == 0);
- pos = y.find_last_not_of('a');
- assert(pos == string::npos);
- pos = y.find_last_not_of("XYZ");
- assert(pos == 0);
- pos = y.find_last_not_of("a");
- assert(pos == string::npos);
-
- string z("ab");
- pos = z.find_last_not_of('X');
- assert(pos == 1);
- pos = z.find_last_not_of("XYZ");
- assert(pos == 1);
- pos = z.find_last_not_of('b');
- assert(pos == 0);
- pos = z.find_last_not_of("Xb");
- assert(pos == 0);
- pos = z.find_last_not_of("Xa");
- assert(pos == 1);
- pos = z.find_last_of("ab");
- assert(pos == 1);
- pos = z.find_last_of("Xa");
- assert(pos == 0);
- pos = z.find_last_of("Xb");
- assert(pos == 1);
- pos = z.find_last_of("XYZ");
- assert(pos == string::npos);
- pos = z.find_last_of('a');
- assert(pos == 0);
- pos = z.find_last_of('b');
- assert(pos == 1);
- pos = z.find_last_of('X');
- assert(pos == string::npos);
-}
-
-void comparetest()
-{
- string x = X;
- string y = Y;
- string n = N;
- string z = x + y;
-
- assert(x != y);
- assert(x == "Hello");
- assert(x != z.substr (0, 4));
- assert(x.compare (y) < 0);
- assert(x.compare (z.substr (0, 6)) < 0);
-
- assert(x.find ("lo") == 3);
- assert(x.find ("l", 2) == 2);
- assert(x.rfind ("l") == 3);
-}
-
-void substrtest()
-{
- string x = X;
-
- char ch = x[0];
- cout << "ch = x[0] = " << ch << "\n";
- assert(ch == 'H');
-
- string z = x.substr (2, 3);
- cout << "z = x.substr (2, 3) = " << z << "\n";
- assert(z == "llo");
-
- x.replace (2, 2, "r");
- cout << "x.replace (2, 2, r); x = " << x << "\n";
- assert(x == "Hero");
-
- x = X;
- x.replace (0, 1, 'j');
- cout << "x.replace (0, 1, 'j'); x = " << x << "\n";
- assert(x == "jello");
-
- int ar[] = { 'H', 'e', 'l', 'l', 'o' };
- x.replace (find (x.begin (), x.end (), 'l'),
- find (x.rbegin (), x.rend (), 'l').base (),
- ar, ar+sizeof(ar)/sizeof(ar[0]));
- cout << "x = " << x << endl;
- assert (x == "jeHelloo");
-}
-
-void iotest()
-{
- string z;
- cout << "enter a word:";
- cin >> z;
- cout << "word =" << z << " ";
- cout << "length = " << z.length() << "\n";
-}
-
-void identitytest(string a, string b)
-{
- string x = a;
- string y = b;
- x += b;
- y.insert (0, a);
- assert((a + b) == x);
- assert((a + b) == y);
- assert(x == y);
-
- assert((a + b + a) == (a + (b + a)));
-
- x.erase (x.rfind (b));
- assert(x == a);
-
- y.replace (0, y.rfind (b), b);
- assert(y == (b + b));
- y.replace (y.find (b), b.length (), a);
- assert(y == (a + b));
-}
-
-int main()
-{
- decltest();
- cattest();
- comparetest();
- findtest();
- substrtest();
- identitytest(X, X);
- identitytest(X, Y);
- identitytest(X+Y+N+X+Y+N, "A string that will be used in identitytest but is otherwise just another useless string.");
- iotest();
- cout << "\nEnd of test\n";
- return 0;
-}
diff --git a/contrib/libstdc++/tests/tstring.exp b/contrib/libstdc++/tests/tstring.exp
deleted file mode 100644
index 4526279b888a..000000000000
--- a/contrib/libstdc++/tests/tstring.exp
+++ /dev/null
@@ -1,22 +0,0 @@
-an empty string:
-A string initialized to Hello:Hello
-A string initialized to previous string:Hello
-A string initialized to (previous string, 1, 2):el
-A string initialized to @:@
-A string initialized to 20:20
-n = 20 atoi(n) = 20 atof(n) = 20
-is = Hello
-z = x + y = Helloworld
-x += y; x = Helloworld
-y.insert (0, x); y = Helloworld
-x = x + y + x; x = HelloworldHello
-x = y + x + x; x = worldHelloHello
-z = x + s + + y.substr (y.find (w), 1) + y.substr (y.find (w) + 1) + . = Hello, world.
-ch = x[0] = H
-z = x.substr (2, 3) = llo
-x.replace (2, 2, r); x = Hero
-x.replace (0, 1, 'j'); x = jello
-x = jeHelloo
-enter a word:word =abcdefghijklmnopqrstuvwxyz length = 26
-
-End of test
diff --git a/contrib/libstdc++/tests/tstring.inp b/contrib/libstdc++/tests/tstring.inp
deleted file mode 100644
index b0883f382e1a..000000000000
--- a/contrib/libstdc++/tests/tstring.inp
+++ /dev/null
@@ -1 +0,0 @@
-abcdefghijklmnopqrstuvwxyz
diff --git a/contrib/libstdc++/tests/tvector.cc b/contrib/libstdc++/tests/tvector.cc
deleted file mode 100644
index ef238ef52da5..000000000000
--- a/contrib/libstdc++/tests/tvector.cc
+++ /dev/null
@@ -1,20 +0,0 @@
-#include <vector.h>
-#include <iostream.h>
-#include <algo.h>
-
-main ()
-{
- cout << "Fill of C array:\n";
- char x[50];
- fill (x, x+50, '/');
- fill (x+1, x+49, '*');
- copy (x, x+50, ostream_iterator<char>(cout));
-
- cout << "\nFill of vector<char>:\n";
-
- vector<char> cvec;
- cvec.insert (cvec.begin(), 50, '/');
- fill (cvec.begin()+1, cvec.end()-1, '-');
- copy (cvec.begin(), cvec.end(), ostream_iterator<char>(cout));
- cout << endl;
-}
diff --git a/contrib/libstdc++/tests/tvector.exp b/contrib/libstdc++/tests/tvector.exp
deleted file mode 100644
index 84a9d1bf3a4d..000000000000
--- a/contrib/libstdc++/tests/tvector.exp
+++ /dev/null
@@ -1,4 +0,0 @@
-Fill of C array:
-/************************************************/
-Fill of vector<char>:
-/------------------------------------------------/
diff --git a/contrib/libstdc++/testsuite/ChangeLog b/contrib/libstdc++/testsuite/ChangeLog
deleted file mode 100644
index 3d7602748ece..000000000000
--- a/contrib/libstdc++/testsuite/ChangeLog
+++ /dev/null
@@ -1,94 +0,0 @@
-Fri Mar 16 12:46:19 GMT 2001 Bernd Schmidt (bernds@redhat.com)
-
- * gcc-2.95.3 Released.
-
-Sun Oct 24 23:54:10 PDT 1999 Jeff Law (law@cygnus.com)
-
- * gcc-2.95.2 Released.
-
-Mon Aug 16 01:29:24 PDT 1999 Jeff Law (law@cygnus.com)
-
- * gcc-2.95.1 Released.
-
-Wed Jul 28 21:39:31 PDT 1999 Jeff Law (law@cygnus.com)
-
- * gcc-2.95 Released.
-
-Sun Jul 25 23:40:51 PDT 1999 Jeff Law (law@cygnus.com)
-
- * gcc-2.95 Released.
-
-Wed Nov 25 01:00:07 1998 Marc Espie <espie@quatramaran.ens.fr>
-
- * Makefile.in (just-check): Ignore errors.
-
-Sun Jun 28 00:00:10 1998 Carlo Wood <carlo@runaway.xs4all.nl>
-
- * lib/libstdc++.exp: Use global variable ld_library_path (not local)
- that is a lot more persistent; dejagnu-980528 needs this.
- * lib/libstdc++.exp (test_stdc++): Use regular expression " -lstdc.."
- to remove -lstdc++ arguments (not " -lstdc.*").
-
-Thu Dec 25 00:34:03 1997 Jeffrey A Law (law@cygnus.com)
-
- * lib/libstdc++.exp (test_libstdc++): Set LD_LIBRARY_PATH
- and SHLIB_PATH appropriately.
-
-Wed Sep 3 09:39:36 1997 Jeffrey A Law (law@cygnus.com)
-
- * lib/libstdc++.exp: Remove libg++_link_flags.
-
-Wed Aug 6 18:43:23 1997 Jason Merrill <jason@yorick.cygnus.com>
-
- * lib/libstdc++.exp: Remove libio_link_flags.
-
-Thu Jul 17 14:54:58 1997 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * lib/libstdc++.exp (base_dir): Move from here...
- (test_libstdc++): To here.
- (LIBSTDCPP): Delete unused global decl.
-
-Tue Jun 17 01:46:49 1997 Bob Manson <manson@farmer>
-
- * lib/libstdc++.exp: Strip off leading LFs from both the pattern
- being matched against and the output from the board. Find the
- correct multilib libstdc++ to link with. Use g++_link_flags
- and libio_link_flags. Link in the status wrapper if needed.
- (libstdc++_init): New procedure.
-
-Tue Jun 3 17:16:39 1997 Bob Manson <manson@charmed.cygnus.com>
-
- * lib/libstdc++.exp: Don't use global exec_output variable; the
- output is returned from remote_load instead.
-
-Tue Apr 29 17:20:05 1997 Mike Stump <mrs@cygnus.com>
-
- * lib/libstdc++.exp: Fixup so that $compile_args works better.
- * libstdc++.tests/test.exp: Also run with -O.
-
-Tue Apr 29 16:34:37 1997 Mike Stump <mrs@cygnus.com>
-
- * testsuite/lib/libstdc++.exp: Fixup so that we always have the
- same number of testcases, and so that we have meaningful testcase
- names.
-
-Tue Apr 29 13:05:14 1997 Bob Manson <manson@charmed.cygnus.com>
-
- * lib/libstdc++.exp: Add support for --tool_opts.
-
-Mon Apr 28 11:10:25 1997 Bob Manson <manson@charmed.cygnus.com>
-
- * Makefile.in: Add comment so target Makefile fragments get added.
- Removed clean rule, because it is added by configure.
-
- * configure.in (TESTS): Add.
-
-Sun Apr 27 15:03:10 1997 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * Makefile.in (clean): Add empty rule for now.
-
-Fri Apr 25 18:59:14 1997 Bob Manson <manson@charmed.cygnus.com>
-
- * lib/libstdc++.exp(test_libstdc++): Return on error. Generate a
- FAIL if the compile fails. Remove CRs from the output from the
- testcase.
diff --git a/contrib/libstdc++/testsuite/Makefile.in b/contrib/libstdc++/testsuite/Makefile.in
deleted file mode 100644
index 7c85678e1fe3..000000000000
--- a/contrib/libstdc++/testsuite/Makefile.in
+++ /dev/null
@@ -1,67 +0,0 @@
-# Copyright (C) 1997 Free Software Foundation
-#
-# This file is part of the GNU IO Library. This library is free
-# software; you can redistribute it and/or modify it under the
-# terms of the GNU General Public License as published by the
-# Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# 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. */
-
-srcdir = libstdc++.tests
-
-EXPECT = `if [ -f $${rootme}/../../expect/expect ] ; then \
- echo $${rootme}/../../expect/expect ; \
- else echo expect ; fi`
-
-RUNTEST = `if [ -f $${srcdir}/../../dejagnu/runtest ] ; then \
- echo $${srcdir}/../../dejagnu/runtest ; \
- else echo runtest; fi`
-RUNTESTFLAGS =
-
-#### package, host, target, and site dependent Makefile fragments come in here.
-##
-
-.PHONY: all
-all:
-
-.PHONY: check
-check: all just-check
-
-site.exp: ./config.status Makefile
- @echo "Making a new config file..."
- -@rm -f ./tmp?
- @touch site.exp
- -@mv site.exp site.bak
- @echo "## these variables are automatically generated by make ##" > ./tmp0
- @echo "# Do not edit here. If you wish to override these values" >> ./tmp0
- @echo "# add them to the last section" >> ./tmp0
- @echo "set host_alias $(host_alias)" >> ./tmp0
- @echo "set host_triplet ${host_canonical}" >> ./tmp0
- @echo "set target_alias $(target_alias)" >> ./tmp0
- @echo "set target_triplet ${target_canonical}" >> ./tmp0
- @echo "set build_triplet ${build_canonical}" >> ./tmp0
- @echo "set srcdir ${srcdir}" >> ./tmp0
- @echo "set tool libstdc++" >> ./tmp0
- @echo "## All variables above are generated by configure. Do Not Edit ##" >> ./tmp0
- @cat ./tmp0 > site.exp
- @cat site.bak | sed \
- -e '1,/^## All variables above are.*##/ d' >> site.exp
- -@rm -f ./tmp?
-
-just-check: site.exp
- -rootme=`pwd`; export rootme; \
- srcdir=${srcdir} ; export srcdir ; \
- EXPECT=${EXPECT} ; export EXPECT ; \
- if [ -f $${rootme}/../../expect/expect ] ; then \
- TCL_LIBRARY=$${srcdir}/../../tcl/library ; \
- export TCL_LIBRARY ; fi ; \
- $(RUNTEST) $(RUNTESTFLAGS)
diff --git a/contrib/libstdc++/testsuite/config/default.exp b/contrib/libstdc++/testsuite/config/default.exp
deleted file mode 100644
index 90967cccc18a..000000000000
--- a/contrib/libstdc++/testsuite/config/default.exp
+++ /dev/null
@@ -1 +0,0 @@
-load_lib "standard.exp"
diff --git a/contrib/libstdc++/testsuite/configure.in b/contrib/libstdc++/testsuite/configure.in
deleted file mode 100644
index ad5f232b0853..000000000000
--- a/contrib/libstdc++/testsuite/configure.in
+++ /dev/null
@@ -1,24 +0,0 @@
-# This file is a shell script fragment that supplies the information
-# necessary for a configure script to process the program in
-# this directory. For more information, look at ../../configure.
-
-configdirs=
-srctrigger=configure.in
-srcname="tests for ANSI C++ library, dejagnu style"
-package_makefile_frag=Make.pack
-package_makefile_rules_frag=Make.pack.r
-
-# per-host:
-
-# per-target:
-
-target_makefile_frag=../target-mkfrag
-
-TO_TOPDIR=../../
-ALL=' '
-XCXXINCLUDES="-I${srcdir}/.. -I${srcdir}/../stl -I${TO_TOPDIR}libio -I${srcdir}/${TO_TOPDIR}libio"
-TESTS="tcomplex tstring tlist tmap tvector"
-MOSTLYCLEAN="*.o core ${TESTS} *.out"
-(. ${srcdir}/${TO_TOPDIR}libio/config.shared) >${package_makefile_frag} 2>${package_makefile_rules_frag}
-
-# post-target:
diff --git a/contrib/libstdc++/testsuite/lib/libstdc++.exp b/contrib/libstdc++/testsuite/lib/libstdc++.exp
deleted file mode 100644
index 3333ddad6c78..000000000000
--- a/contrib/libstdc++/testsuite/lib/libstdc++.exp
+++ /dev/null
@@ -1,179 +0,0 @@
-# Copyright (C) 1997 Free Software Foundation, Inc.
-
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-# Please email any bugs, comments, and/or additions to this file to:
-# bug-lib-g++@prep.ai.mit.edu
-
-# This file was written by Bob Manson. (manson@cygnus.com)
-
-load_lib "libgloss.exp"
-
-global tmpdir
-
-if ![info exists tmpdir] {
- set tmpdir "/tmp"
-}
-
-#
-# Build the status wrapper library as needed.
-#
-proc libstdc++_init { args } {
- global wrapper_file;
- global wrap_compile_flags;
- set wrapper_file "";
- set wrap_compile_flags "";
- if [target_info exists needs_status_wrapper] {
- set result [build_wrapper "testglue.o"];
- if { $result != "" } {
- set wrapper_file [lindex $result 0];
- set wrap_compile_flags [lindex $result 1];
- } else {
- warning "Status wrapper failed to build."
- }
- }
-}
-#
-# Run the test specified by srcfile and resultfile. compile_args and
-# exec_args are additional arguments to be passed in when compiling and
-# running the testcase, respectively.
-#
-
-proc test_libstdc++ { options srcfile compile_args inpfile resultfile exec_args } {
- global base_dir
- global LIBSTDCPP
- global srcdir subdir objdir
- global TOOL_OPTIONS
- global ld_library_path
-
- if [info exists LIBSTDCPP] {
- set libstdcpp $LIBSTDCPP;
- } else {
- set gp [get_multilibs];
- if { $gp != "" } {
- if [file exists "$gp/libstdc++/libstdc++.a"] {
- set libstdcpp "-L$gp/libstdc++ -lstdc++";
- }
- }
- if ![info exists libstdcpp] {
- set libstdcpp [findfile $base_dir/../../libstdc++/libstdc++.a "-L$base_dir/../../libstdc++ -lstdc++" -lstdc++]
- }
- }
-
- verbose "using LIBSTDCPP = $libstdcpp" 2
- set args ""
-
- # Basically we want to build up a colon separated path list from
- # the value of $libstdcpp.
-
- # First strip away any -L arguments.
- regsub -all -- "-L" $libstdcpp "" ld_library_path
-
- # Then remove any -lstdc++ argument.
- regsub -all -- " -lstdc.." $ld_library_path "" ld_library_path
-
- # That's enough to make things work for the normal case.
- # If we wanted to handle an arbitrary value of libstdcpp,
- # then we'd have to do a lot more work.
-
- if { $compile_args != "" } {
- lappend args "additional_flags=$compile_args"
- }
- lappend args "incdir=.."
- lappend args "incdir=$srcdir/.."
- lappend args "incdir=$srcdir/../stl"
- lappend args "incdir=."
- if [info exists TOOL_OPTIONS] {
- lappend args "additional_flags=$TOOL_OPTIONS"
- }
-
- global wrapper_file wrap_compile_flags;
- # We have to include libio, for _G_config.h.
- lappend args "additional_flags=$wrap_compile_flags";
- lappend args "libs=$wrapper_file";
- lappend args "libs=$libstdcpp";
- lappend args "additional_flags=[libio_include_flags]"
- lappend args debug
-
- regsub "^.*/(\[^/.\]+)\[.\]\[^/]*$" "$srcfile" "\\1" out
- set executable "${objdir}/$out"
- set errname "[file tail $srcfile]"
- if { $compile_args != "" } {
- set errname "$errname $compile_args"
- }
-
- if { [target_compile $srcfile "$executable" executable $args] != "" } {
- fail "$errname compilation"
- setup_xfail "*-*-*"
- fail "$errname execution"
- setup_xfail "*-*-*"
- fail "$errname output"
- return;
- }
- pass "$errname compilation"
-
- set result [libstdc++_load $executable "$exec_args" "$inpfile"];
- set status [lindex $result 0];
- set output [lindex $result 1];
- $status "$errname execution"
- if { $status != "pass" } {
- setup_xfail "*-*-*"
- fail "$errname output"
- return;
- }
-
- verbose "resultfile is $resultfile"
- set id [open $resultfile r];
- set expected ""
- append expected [read $id];
- regsub -all "\r" "$output" "" output;
- regsub "\n*$" $expected "" expected
- regsub "\n*$" $output "" output
- regsub "^\n*" $expected "" expected
- regsub "^\n*" $output "" output
- regsub -all "\[ \t\]\[ \t\]*" $expected " " expected
- regsub -all "\[ \t\]*\n\n*" $expected "\n" expected
- regsub -all "\[ \t\]\[ \t\]*" $output " " output
- regsub -all "\[ \t\]*\n\n*" $output "\n" output
- verbose "expected is $expected"
- verbose "actual is $output"
- set passed 0;
- if {$options == "regexp_match"} {
- if [regexp $expected $output] {
- set passed 1;
- }
- } else {
- if { $expected == $output } {
- set passed 1;
- }
- }
- if { $passed == 1 } {
- pass "$errname output"
- } else {
- clone_output "expected was $expected"
- clone_output "output was $output"
- fail "$errname output"
- }
- close $id;
-}
-
-#
-# libstdc++_version -- extract and print the version number of libstdc++p
-#
-proc default_libstdc++_version {} {
-}
-
-proc default_libstdc++_start { } {
-}
diff --git a/contrib/libstdc++/testsuite/libstdc++.tests/test.exp b/contrib/libstdc++/testsuite/libstdc++.tests/test.exp
deleted file mode 100644
index 7368cfb282e8..000000000000
--- a/contrib/libstdc++/testsuite/libstdc++.tests/test.exp
+++ /dev/null
@@ -1,34 +0,0 @@
-global srcdir subdir
-
-catch "glob -nocomplain $srcdir/$subdir/../../tests/*.exp" srcfiles
-verbose "srcfiles are $srcfiles"
-
-set prefix ""
-foreach x $srcfiles {
- regsub "\\.exp$" $x "" prefix
- set bname [file tail $prefix]
- set args ""
- if [file exists $srcdir/$subdir/${bname}.arg] {
- set id [open "$srcdir/$subdir/${bname}.arg" r];
- set args [read -nonewline $id];
- close $id;
- }
- if [file exists $srcdir/$subdir/${bname}.xpo] {
- set resfile "$srcdir/$subdir/${bname}.xpo"
- set options "regexp_match"
- } else {
- set resfile "${prefix}.exp"
- set options ""
- }
-
- if [file exists ${prefix}.inp] {
- set inpfile ${prefix}.inp
- } else {
- set inpfile ""
- }
-
- verbose "inpfile is $inpfile"
-
- test_libstdc++ $options "${prefix}.cc" "" $inpfile $resfile $args
- test_libstdc++ $options "${prefix}.cc" "-O" $inpfile $resfile $args
-}
diff --git a/contrib/libstdc++/testsuite_flags.in b/contrib/libstdc++/testsuite_flags.in
deleted file mode 100755
index 1a24b5ed1f5b..000000000000
--- a/contrib/libstdc++/testsuite_flags.in
+++ /dev/null
@@ -1,61 +0,0 @@
-#!/bin/sh
-
-#
-# This script computes the various flags needed to run GNU C++ testsuites
-# (compiler specific as well as library specific).
-#
-# Written by Benjamin Kosnik <bkoz@redhat.com>
-# Gabriel Dos Reis <gdr@codesourcery.com>
-#
-
-# Print a message saying how this script is intended to be invoked
-print_usage() {
- cat <<EOF
-Usage:
- testsuite_flags --install-includes
- --build-includes
- --build-cxx
- --install-cxx
- --cxxflags
-EOF
-}
-
-# Establish configure-generated directory structure.
-BUILD_DIR=@glibcpp_builddir@
-SRC_DIR=@glibcpp_srcdir@
-PREFIX_DIR=@glibcpp_prefixdir@
-query=$1
-
-case ${query} in
- --install-includes)
- INCLUDES="-I${SRC_DIR}/testsuite"
- echo ${INCLUDES}
- ;;
- --build-includes)
- INCLUDES="-nostdinc++ @GLIBCPP_INCLUDES@
- -I${SRC_DIR}/libsupc++ -I${SRC_DIR}/libio
- -I${SRC_DIR}/include/backward
- -I${SRC_DIR}/testsuite"
- echo ${INCLUDES}
- ;;
- --install-cxx)
- CXX=${PREFIX_DIR}/bin/g++
- echo ${CXX}
- ;;
- --build-cxx)
- CC_build="@glibcpp_CXX@"
- CXX=`echo $CC_build | sed 's/xgcc/g++/g'`
- echo ${CXX}
- ;;
- --cxxflags)
- CXXFLAGS=' -g @SECTION_FLAGS@ @SECTION_LDFLAGS@
- -fmessage-length=0
- -DDEBUG_ASSERT -DLOCALEDIR="@glibcpp_localedir@" '
- echo ${CXXFLAGS}
- ;;
- *)
- print_usage
- ;;
-esac
-
-exit 0
diff --git a/contrib/libstdc++/valarray b/contrib/libstdc++/valarray
deleted file mode 100644
index a938b6a68639..000000000000
--- a/contrib/libstdc++/valarray
+++ /dev/null
@@ -1,8 +0,0 @@
-// Main header for -*- C++ -*- valarray classes.
-
-#ifndef __VALARRAY__
-#define __VALARRAY__
-
-#include <std/std_valarray.h>
-
-#endif
diff --git a/contrib/libstdc++/valarray.cc b/contrib/libstdc++/valarray.cc
deleted file mode 100644
index 5e7fe0cf05f7..000000000000
--- a/contrib/libstdc++/valarray.cc
+++ /dev/null
@@ -1,50 +0,0 @@
-#include <std/std_valarray.h>
-
-// Some Explicit Instanciations.
-template class multiplies<size_t>;
-template size_t accumulate(size_t*, size_t*, size_t, multiplies<size_t>);
-
-template void
- __valarray_fill(size_t* __restrict__, size_t, const size_t&);
-
-template void
- __valarray_copy(const size_t* __restrict__, size_t, size_t* __restrict__);
-
-template valarray<size_t>::valarray(size_t);
-template valarray<size_t>::~valarray();
-template valarray<size_t>::valarray(const valarray<size_t>&);
-template size_t valarray<size_t>::size() const;
-template size_t& valarray<size_t>::operator[](size_t);
-template size_t valarray<size_t>::product() const;
-
-
-void __gslice_to_index(size_t __o, const valarray<size_t>& __l,
- const valarray<size_t>& __s,
- valarray<size_t>& __i)
-{
- const size_t __n = __l.size();
- size_t* const __t = static_cast<size_t*>(alloca(__n*sizeof(size_t)));
- __valarray_fill(__t, __n, size_t(0));
- const size_t __z = __i.size();
- __valarray_fill(&__i[0], __z, __o);
- for (size_t __j=0; __j<__z; ++__j) {
- for (size_t __k=0; __k<__n; ++__k)
- __i[__j] += __s[__k]*__t[__k];
- ++__t[__n-1];
- for (size_t __k=__n-1; __k; --__k) {
- if (__t[__k] >= __l[__k]) {
- __t[__k] = 0;
- ++__t[__k-1];
- }
- }
- }
-}
-
-_Indexer::_Indexer(size_t __o, const valarray<size_t>& __l,
- const valarray<size_t>& __s)
- : _M_count(1), _M_start(__o), _M_size(__l), _M_stride(__s),
- _M_index(__l.size() ? __l.product() : 0)
-{ __gslice_to_index(__o, __l, __s, _M_index); }
-
-
-